@wordpress/block-editor 8.3.0 → 8.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.md +56 -18
- package/build/components/alignment-control/index.js +13 -6
- package/build/components/alignment-control/index.js.map +1 -1
- package/build/components/block-alignment-control/index.js +13 -6
- package/build/components/block-alignment-control/index.js.map +1 -1
- package/build/components/block-draggable/index.js +2 -3
- package/build/components/block-draggable/index.js.map +1 -1
- package/build/components/block-icon/index.js +4 -0
- package/build/components/block-icon/index.js.map +1 -1
- package/build/components/block-inspector/index.js +6 -1
- package/build/components/block-inspector/index.js.map +1 -1
- package/build/components/block-list/block-html.js +4 -1
- package/build/components/block-list/block-html.js.map +1 -1
- package/build/components/block-list/block.js +4 -1
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/use-block-props/index.js +1 -6
- package/build/components/block-list/use-block-props/index.js.map +1 -1
- package/build/components/block-list/use-block-props/use-focus-first-element.js +22 -6
- package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
- package/build/components/block-list/use-block-props/use-focus-handler.js +7 -1
- package/build/components/block-list/use-block-props/use-focus-handler.js.map +1 -1
- package/build/components/block-list-appender/index.js +6 -1
- package/build/components/block-list-appender/index.js.map +1 -1
- package/build/components/block-lock/index.js +32 -0
- package/build/components/block-lock/index.js.map +1 -0
- package/build/components/block-lock/menu-item.js +67 -0
- package/build/components/block-lock/menu-item.js.map +1 -0
- package/build/components/block-lock/modal.js +134 -0
- package/build/components/block-lock/modal.js.map +1 -0
- package/build/components/block-lock/toolbar.js +78 -0
- package/build/components/block-lock/toolbar.js.map +1 -0
- package/build/components/block-mover/index.js +4 -0
- package/build/components/block-mover/index.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +75 -10
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-settings-menu-controls/index.js +19 -9
- package/build/components/block-settings-menu-controls/index.js.map +1 -1
- package/build/components/block-switcher/index.js +1 -1
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-title/index.js +2 -2
- package/build/components/block-title/index.js.map +1 -1
- package/build/components/block-title/use-block-display-title.js +8 -6
- package/build/components/block-title/use-block-display-title.js.map +1 -1
- package/build/components/block-toolbar/block-name-context.js +17 -0
- package/build/components/block-toolbar/block-name-context.js.map +1 -0
- package/build/components/block-toolbar/block-toolbar-last-item.js +20 -0
- package/build/components/block-toolbar/block-toolbar-last-item.js.map +1 -0
- package/build/components/block-toolbar/index.js +24 -5
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/block-tools/index.js +0 -16
- package/build/components/block-tools/index.js.map +1 -1
- package/build/components/block-variation-transforms/index.js +92 -47
- package/build/components/block-variation-transforms/index.js.map +1 -1
- package/build/components/block-vertical-alignment-control/index.js +13 -6
- package/build/components/block-vertical-alignment-control/index.js.map +1 -1
- package/build/components/border-radius-control/index.js +0 -1
- package/build/components/border-radius-control/index.js.map +1 -1
- package/build/components/border-radius-control/utils.js +1 -1
- package/build/components/border-radius-control/utils.js.map +1 -1
- package/build/components/colors-gradients/control.js +3 -1
- package/build/components/colors-gradients/control.js.map +1 -1
- package/build/components/contrast-checker/index.js +4 -0
- package/build/components/contrast-checker/index.js.map +1 -1
- package/build/components/convert-to-group-buttons/index.js +8 -0
- package/build/components/convert-to-group-buttons/index.js.map +1 -1
- package/build/components/convert-to-group-buttons/toolbar.js +105 -0
- package/build/components/convert-to-group-buttons/toolbar.js.map +1 -0
- package/build/components/copy-handler/index.js +4 -0
- package/build/components/copy-handler/index.js.map +1 -1
- package/build/components/date-format-picker/index.js +132 -0
- package/build/components/date-format-picker/index.js.map +1 -0
- package/build/components/font-sizes/font-size-picker.js +4 -0
- package/build/components/font-sizes/font-size-picker.js.map +1 -1
- package/build/components/iframe/index.js +6 -9
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/index.js +27 -0
- package/build/components/index.js.map +1 -1
- package/build/components/justify-content-control/index.js +13 -6
- package/build/components/justify-content-control/index.js.map +1 -1
- package/build/components/keyboard-shortcuts/index.js +1 -1
- package/build/components/keyboard-shortcuts/index.js.map +1 -1
- package/build/components/line-height-control/index.js +15 -6
- package/build/components/line-height-control/index.js.map +1 -1
- package/build/components/list-view/block-select-button.js +24 -23
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/block.js +38 -13
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/branch.js +16 -13
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/index.js +7 -1
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/list-view/use-block-selection.js +9 -2
- package/build/components/list-view/use-block-selection.js.map +1 -1
- package/build/components/media-replace-flow/index.js +4 -0
- package/build/components/media-replace-flow/index.js.map +1 -1
- package/build/components/multi-selection-inspector/index.js +1 -1
- package/build/components/multi-selection-inspector/index.js.map +1 -1
- package/build/components/rich-text/index.js +27 -5
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/index.native.js +13 -9
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/rich-text/split-value.js +12 -2
- package/build/components/rich-text/split-value.js.map +1 -1
- package/build/components/rich-text/use-firefox-compat.js +49 -0
- package/build/components/rich-text/use-firefox-compat.js.map +1 -0
- package/build/components/rich-text/use-input-rules.js +34 -2
- package/build/components/rich-text/use-input-rules.js.map +1 -1
- package/build/components/skip-to-selected-block/index.js +4 -0
- package/build/components/skip-to-selected-block/index.js.map +1 -1
- package/build/components/url-popover/image-url-input-ui.js +11 -27
- package/build/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build/components/writing-flow/index.js +9 -1
- package/build/components/writing-flow/index.js.map +1 -1
- package/build/components/writing-flow/use-arrow-nav.js +3 -44
- package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
- package/build/components/writing-flow/use-click-selection.js +68 -0
- package/build/components/writing-flow/use-click-selection.js.map +1 -0
- package/build/components/writing-flow/use-drag-selection.js +134 -0
- package/build/components/writing-flow/use-drag-selection.js.map +1 -0
- package/build/components/writing-flow/use-input.js +116 -0
- package/build/components/writing-flow/use-input.js.map +1 -0
- package/build/components/writing-flow/use-multi-selection.js +18 -38
- package/build/components/writing-flow/use-multi-selection.js.map +1 -1
- package/build/components/writing-flow/use-selection-observer.js +161 -0
- package/build/components/writing-flow/use-selection-observer.js.map +1 -0
- package/build/components/writing-flow/use-tab-nav.js +1 -8
- package/build/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build/hooks/anchor.js +7 -6
- package/build/hooks/anchor.js.map +1 -1
- package/build/hooks/border-color.js +3 -3
- package/build/hooks/border-color.js.map +1 -1
- package/build/hooks/border.js +0 -14
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/color.js +20 -17
- package/build/hooks/color.js.map +1 -1
- package/build/hooks/font-family.js +5 -1
- package/build/hooks/font-family.js.map +1 -1
- package/build/hooks/font-size.js +4 -2
- package/build/hooks/font-size.js.map +1 -1
- package/build/hooks/gap.js +77 -5
- package/build/hooks/gap.js.map +1 -1
- package/build/hooks/layout.js +7 -2
- package/build/hooks/layout.js.map +1 -1
- package/build/hooks/style.js +34 -3
- package/build/hooks/style.js.map +1 -1
- package/build/hooks/utils.js +29 -0
- package/build/hooks/utils.js.map +1 -1
- package/build/layouts/flex.js +82 -15
- package/build/layouts/flex.js.map +1 -1
- package/build/layouts/flow.js +22 -13
- package/build/layouts/flow.js.map +1 -1
- package/build/store/actions.js +297 -51
- package/build/store/actions.js.map +1 -1
- package/build/store/defaults.js +5 -1
- package/build/store/defaults.js.map +1 -1
- package/build/store/reducer.js +25 -13
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +171 -21
- package/build/store/selectors.js.map +1 -1
- package/build/utils/dom.js +2 -1
- package/build/utils/dom.js.map +1 -1
- package/build-module/components/alignment-control/index.js +12 -4
- package/build-module/components/alignment-control/index.js.map +1 -1
- package/build-module/components/block-alignment-control/index.js +12 -4
- package/build-module/components/block-alignment-control/index.js.map +1 -1
- package/build-module/components/block-draggable/index.js +2 -3
- package/build-module/components/block-draggable/index.js.map +1 -1
- package/build-module/components/block-icon/index.js +4 -0
- package/build-module/components/block-icon/index.js.map +1 -1
- package/build-module/components/block-inspector/index.js +6 -1
- package/build-module/components/block-inspector/index.js.map +1 -1
- package/build-module/components/block-list/block-html.js +5 -2
- package/build-module/components/block-list/block-html.js.map +1 -1
- package/build-module/components/block-list/block.js +5 -2
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/use-block-props/index.js +1 -4
- package/build-module/components/block-list/use-block-props/index.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-focus-first-element.js +22 -6
- package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-focus-handler.js +7 -1
- package/build-module/components/block-list/use-block-props/use-focus-handler.js.map +1 -1
- package/build-module/components/block-list-appender/index.js +6 -1
- package/build-module/components/block-list-appender/index.js.map +1 -1
- package/build-module/components/block-lock/index.js +4 -0
- package/build-module/components/block-lock/index.js.map +1 -0
- package/build-module/components/block-lock/menu-item.js +53 -0
- package/build-module/components/block-lock/menu-item.js.map +1 -0
- package/build-module/components/block-lock/modal.js +119 -0
- package/build-module/components/block-lock/modal.js.map +1 -0
- package/build-module/components/block-lock/toolbar.js +63 -0
- package/build-module/components/block-lock/toolbar.js.map +1 -0
- package/build-module/components/block-mover/index.js +4 -0
- package/build-module/components/block-mover/index.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +75 -12
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-settings-menu-controls/index.js +18 -9
- package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
- package/build-module/components/block-switcher/index.js +2 -2
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-title/index.js +2 -2
- package/build-module/components/block-title/index.js.map +1 -1
- package/build-module/components/block-title/use-block-display-title.js +8 -6
- package/build-module/components/block-title/use-block-display-title.js.map +1 -1
- package/build-module/components/block-toolbar/block-name-context.js +9 -0
- package/build-module/components/block-toolbar/block-name-context.js.map +1 -0
- package/build-module/components/block-toolbar/block-toolbar-last-item.js +11 -0
- package/build-module/components/block-toolbar/block-toolbar-last-item.js.map +1 -0
- package/build-module/components/block-toolbar/index.js +19 -4
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/block-tools/index.js +0 -16
- package/build-module/components/block-tools/index.js.map +1 -1
- package/build-module/components/block-variation-transforms/index.js +95 -49
- package/build-module/components/block-variation-transforms/index.js.map +1 -1
- package/build-module/components/block-vertical-alignment-control/index.js +12 -4
- package/build-module/components/block-vertical-alignment-control/index.js.map +1 -1
- package/build-module/components/border-radius-control/index.js +0 -1
- package/build-module/components/border-radius-control/index.js.map +1 -1
- package/build-module/components/border-radius-control/utils.js +1 -1
- package/build-module/components/border-radius-control/utils.js.map +1 -1
- package/build-module/components/colors-gradients/control.js +3 -1
- package/build-module/components/colors-gradients/control.js.map +1 -1
- package/build-module/components/contrast-checker/index.js +4 -0
- package/build-module/components/contrast-checker/index.js.map +1 -1
- package/build-module/components/convert-to-group-buttons/index.js +2 -1
- package/build-module/components/convert-to-group-buttons/index.js.map +1 -1
- package/build-module/components/convert-to-group-buttons/toolbar.js +90 -0
- package/build-module/components/convert-to-group-buttons/toolbar.js.map +1 -0
- package/build-module/components/copy-handler/index.js +4 -0
- package/build-module/components/copy-handler/index.js.map +1 -1
- package/build-module/components/date-format-picker/index.js +122 -0
- package/build-module/components/date-format-picker/index.js.map +1 -0
- package/build-module/components/font-sizes/font-size-picker.js +4 -0
- package/build-module/components/font-sizes/font-size-picker.js.map +1 -1
- package/build-module/components/iframe/index.js +6 -9
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/index.js +3 -0
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/justify-content-control/index.js +12 -4
- package/build-module/components/justify-content-control/index.js.map +1 -1
- package/build-module/components/keyboard-shortcuts/index.js +1 -1
- package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
- package/build-module/components/line-height-control/index.js +14 -5
- package/build-module/components/line-height-control/index.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +24 -23
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/block.js +36 -13
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/branch.js +16 -13
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/index.js +7 -1
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/list-view/use-block-selection.js +10 -3
- package/build-module/components/list-view/use-block-selection.js.map +1 -1
- package/build-module/components/media-replace-flow/index.js +4 -0
- package/build-module/components/media-replace-flow/index.js.map +1 -1
- package/build-module/components/multi-selection-inspector/index.js +2 -2
- package/build-module/components/multi-selection-inspector/index.js.map +1 -1
- package/build-module/components/rich-text/index.js +26 -5
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +13 -9
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/rich-text/split-value.js +12 -2
- package/build-module/components/rich-text/split-value.js.map +1 -1
- package/build-module/components/rich-text/use-firefox-compat.js +39 -0
- package/build-module/components/rich-text/use-firefox-compat.js.map +1 -0
- package/build-module/components/rich-text/use-input-rules.js +35 -4
- package/build-module/components/rich-text/use-input-rules.js.map +1 -1
- package/build-module/components/skip-to-selected-block/index.js +4 -0
- package/build-module/components/skip-to-selected-block/index.js.map +1 -1
- package/build-module/components/url-popover/image-url-input-ui.js +12 -28
- package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build-module/components/writing-flow/index.js +5 -1
- package/build-module/components/writing-flow/index.js.map +1 -1
- package/build-module/components/writing-flow/use-arrow-nav.js +4 -45
- package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
- package/build-module/components/writing-flow/use-click-selection.js +57 -0
- package/build-module/components/writing-flow/use-click-selection.js.map +1 -0
- package/build-module/components/writing-flow/use-drag-selection.js +124 -0
- package/build-module/components/writing-flow/use-drag-selection.js.map +1 -0
- package/build-module/components/writing-flow/use-input.js +104 -0
- package/build-module/components/writing-flow/use-input.js.map +1 -0
- package/build-module/components/writing-flow/use-multi-selection.js +18 -37
- package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
- package/build-module/components/writing-flow/use-selection-observer.js +150 -0
- package/build-module/components/writing-flow/use-selection-observer.js.map +1 -0
- package/build-module/components/writing-flow/use-tab-nav.js +1 -9
- package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build-module/hooks/anchor.js +7 -6
- package/build-module/hooks/anchor.js.map +1 -1
- package/build-module/hooks/border-color.js +5 -5
- package/build-module/hooks/border-color.js.map +1 -1
- package/build-module/hooks/border.js +0 -12
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/color.js +19 -18
- package/build-module/hooks/color.js.map +1 -1
- package/build-module/hooks/font-family.js +3 -1
- package/build-module/hooks/font-family.js.map +1 -1
- package/build-module/hooks/font-size.js +4 -3
- package/build-module/hooks/font-size.js.map +1 -1
- package/build-module/hooks/gap.js +75 -7
- package/build-module/hooks/gap.js.map +1 -1
- package/build-module/hooks/layout.js +7 -2
- package/build-module/hooks/layout.js.map +1 -1
- package/build-module/hooks/style.js +33 -3
- package/build-module/hooks/style.js.map +1 -1
- package/build-module/hooks/utils.js +26 -0
- package/build-module/hooks/utils.js.map +1 -1
- package/build-module/layouts/flex.js +81 -16
- package/build-module/layouts/flex.js.map +1 -1
- package/build-module/layouts/flow.js +20 -13
- package/build-module/layouts/flow.js.map +1 -1
- package/build-module/store/actions.js +286 -49
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/defaults.js +5 -1
- package/build-module/store/defaults.js.map +1 -1
- package/build-module/store/reducer.js +25 -13
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +162 -20
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/utils/dom.js +2 -1
- package/build-module/utils/dom.js.map +1 -1
- package/build-style/style-rtl.css +214 -24
- package/build-style/style.css +214 -24
- package/build-types/utils/dom.d.ts.map +1 -1
- package/package.json +28 -27
- package/src/components/alignment-control/index.js +9 -4
- package/src/components/block-alignment-control/index.js +9 -4
- package/src/components/block-draggable/index.js +2 -5
- package/src/components/block-icon/index.js +3 -0
- package/src/components/block-inspector/index.js +4 -0
- package/src/components/block-list/block-html.js +8 -4
- package/src/components/block-list/block.js +5 -1
- package/src/components/block-list/style.scss +4 -5
- package/src/components/block-list/use-block-props/index.js +0 -5
- package/src/components/block-list/use-block-props/use-focus-first-element.js +27 -6
- package/src/components/block-list/use-block-props/use-focus-handler.js +8 -0
- package/src/components/block-list-appender/index.js +5 -0
- package/src/components/block-lock/index.js +3 -0
- package/src/components/block-lock/menu-item.js +59 -0
- package/src/components/block-lock/modal.js +170 -0
- package/src/components/block-lock/style.scss +70 -0
- package/src/components/block-lock/toolbar.js +68 -0
- package/src/components/block-mover/index.js +3 -0
- package/src/components/block-mover/style.scss +4 -0
- package/src/components/block-settings-menu/block-settings-dropdown.js +109 -9
- package/src/components/block-settings-menu-controls/index.js +33 -12
- package/src/components/block-switcher/index.js +2 -2
- package/src/components/block-switcher/style.scss +8 -1
- package/src/components/block-switcher/test/index.js +2 -2
- package/src/components/block-title/README.md +6 -1
- package/src/components/block-title/index.js +2 -2
- package/src/components/block-title/test/index.js +43 -1
- package/src/components/block-title/use-block-display-title.js +10 -7
- package/src/components/block-toolbar/block-name-context.js +8 -0
- package/src/components/block-toolbar/block-toolbar-last-item.js +12 -0
- package/src/components/block-toolbar/index.js +24 -2
- package/src/components/block-toolbar/style.scss +10 -0
- package/src/components/block-tools/index.js +0 -19
- package/src/components/block-tools/style.scss +27 -0
- package/src/components/block-variation-transforms/index.js +105 -36
- package/src/components/block-variation-transforms/style.scss +1 -1
- package/src/components/block-vertical-alignment-control/index.js +9 -4
- package/src/components/border-radius-control/index.js +0 -1
- package/src/components/border-radius-control/test/utils.js +4 -0
- package/src/components/border-radius-control/utils.js +2 -1
- package/src/components/button-block-appender/style.scss +5 -1
- package/src/components/color-palette/test/__snapshots__/control.js.snap +70 -4
- package/src/components/colors-gradients/control.js +1 -1
- package/src/components/colors-gradients/style.scss +6 -0
- package/src/components/contrast-checker/index.js +3 -0
- package/src/components/convert-to-group-buttons/index.js +6 -1
- package/src/components/convert-to-group-buttons/toolbar.js +87 -0
- package/src/components/copy-handler/index.js +3 -0
- package/src/components/date-format-picker/README.md +58 -0
- package/src/components/date-format-picker/index.js +161 -0
- package/src/components/date-format-picker/style.scss +31 -0
- package/src/components/font-sizes/font-size-picker.js +3 -0
- package/src/components/iframe/index.js +5 -7
- package/src/components/index.js +3 -0
- package/src/components/justify-content-control/index.js +9 -4
- package/src/components/keyboard-shortcuts/index.js +1 -1
- package/src/components/line-height-control/index.js +11 -6
- package/src/components/link-control/README.md +1 -1
- package/src/components/list-view/block-select-button.js +21 -30
- package/src/components/list-view/block.js +55 -13
- package/src/components/list-view/branch.js +37 -15
- package/src/components/list-view/index.js +6 -0
- package/src/components/list-view/style.scss +56 -14
- package/src/components/list-view/use-block-selection.js +15 -2
- package/src/components/media-placeholder/README.md +8 -0
- package/src/components/media-replace-flow/index.js +3 -0
- package/src/components/multi-selection-inspector/index.js +2 -2
- package/src/components/rich-text/index.js +25 -2
- package/src/components/rich-text/index.native.js +24 -8
- package/src/components/rich-text/split-value.js +5 -1
- package/src/components/rich-text/use-firefox-compat.js +39 -0
- package/src/components/rich-text/use-input-rules.js +40 -3
- package/src/components/skip-to-selected-block/index.js +3 -0
- package/src/components/url-input/style.scss +3 -2
- package/src/components/url-popover/image-url-input-ui.js +16 -29
- package/src/components/writing-flow/index.js +8 -0
- package/src/components/writing-flow/readme.md +28 -0
- package/src/components/writing-flow/use-arrow-nav.js +4 -53
- package/src/components/writing-flow/use-click-selection.js +65 -0
- package/src/components/writing-flow/use-drag-selection.js +126 -0
- package/src/components/writing-flow/use-input.js +112 -0
- package/src/components/writing-flow/use-multi-selection.js +13 -36
- package/src/components/writing-flow/use-selection-observer.js +153 -0
- package/src/components/writing-flow/use-tab-nav.js +1 -11
- package/src/hooks/anchor.js +8 -6
- package/src/hooks/border-color.js +5 -5
- package/src/hooks/border.js +0 -13
- package/src/hooks/color.js +51 -24
- package/src/hooks/font-family.js +5 -2
- package/src/hooks/font-size.js +10 -7
- package/src/hooks/gap.js +91 -12
- package/src/hooks/layout.js +11 -1
- package/src/hooks/style.js +40 -4
- package/src/hooks/test/gap.js +66 -0
- package/src/hooks/test/style.js +94 -0
- package/src/hooks/test/utils.js +1 -1
- package/src/hooks/utils.js +26 -0
- package/src/layouts/flex.js +93 -6
- package/src/layouts/flow.js +28 -12
- package/src/store/actions.js +349 -32
- package/src/store/defaults.js +7 -1
- package/src/store/reducer.js +25 -10
- package/src/store/selectors.js +207 -25
- package/src/store/test/selectors.js +305 -5
- package/src/style.scss +2 -0
- package/src/utils/dom.js +2 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/build/components/block-list/use-block-props/use-multi-selection.js +0 -205
- package/build/components/block-list/use-block-props/use-multi-selection.js.map +0 -1
- package/build/components/block-list/use-block-props/use-scroll-into-view.js +0 -77
- package/build/components/block-list/use-block-props/use-scroll-into-view.js.map +0 -1
- package/build-module/components/block-list/use-block-props/use-multi-selection.js +0 -192
- package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +0 -1
- package/build-module/components/block-list/use-block-props/use-scroll-into-view.js +0 -63
- package/build-module/components/block-list/use-block-props/use-scroll-into-view.js.map +0 -1
- package/src/components/block-list/use-block-props/use-multi-selection.js +0 -227
- package/src/components/block-list/use-block-props/use-scroll-into-view.js +0 -73
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-focus-first-element.js"],"names":["first","last","useEffect","useRef","focus","isTextField","placeCaretAtHorizontalEdge","useSelect","isInsideRootBlock","store","blockEditorStore","
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-focus-first-element.js"],"names":["first","last","useEffect","useRef","focus","isFormElement","isTextField","placeCaretAtHorizontalEdge","useSelect","isInsideRootBlock","store","blockEditorStore","useInitialPosition","clientId","select","getSelectedBlocksInitialCaretPosition","isNavigationMode","isBlockSelected","useFocusFirstElement","ref","initialPosition","isMultiSelecting","undefined","current","ownerDocument","contains","activeElement","textInputs","tabbable","find","filter","node","isReverse","target","getAttribute","focusElement","findNext"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { first, last } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useEffect, useRef } from '@wordpress/element';\nimport {\n\tfocus,\n\tisFormElement,\n\tisTextField,\n\tplaceCaretAtHorizontalEdge,\n} from '@wordpress/dom';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { isInsideRootBlock } from '../../../utils/dom';\nimport { store as blockEditorStore } from '../../../store';\n\n/** @typedef {import('@wordpress/element').RefObject} RefObject */\n\n/**\n * Returns the initial position if the block needs to be focussed, `undefined`\n * otherwise. The initial position is either 0 (start) or -1 (end).\n *\n * @param {string} clientId Block client ID.\n *\n * @return {number} The initial position, either 0 (start) or -1 (end).\n */\nfunction useInitialPosition( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t\t\tisNavigationMode,\n\t\t\t\tisBlockSelected,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tif ( ! isBlockSelected( clientId ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isNavigationMode() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there's no initial position, return 0 to focus the start.\n\t\t\treturn getSelectedBlocksInitialCaretPosition();\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n\n/**\n * Transitions focus to the block or inner tabbable when the block becomes\n * selected and an initial position is set.\n *\n * @param {string} clientId Block client ID.\n *\n * @return {RefObject} React ref with the block element.\n */\nexport function useFocusFirstElement( clientId ) {\n\tconst ref = useRef();\n\tconst initialPosition = useInitialPosition( clientId );\n\tconst { isBlockSelected, isMultiSelecting } = useSelect( blockEditorStore );\n\n\tuseEffect( () => {\n\t\t// Check if the block is still selected at the time this effect runs.\n\t\tif ( ! isBlockSelected( clientId ) || isMultiSelecting() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( initialPosition === undefined || initialPosition === null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { ownerDocument } = ref.current;\n\n\t\t// Do not focus the block if it already contains the active element.\n\t\tif ( ref.current.contains( ownerDocument.activeElement ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Find all tabbables within node.\n\t\tconst textInputs = focus.tabbable\n\t\t\t.find( ref.current )\n\t\t\t.filter( ( node ) => isTextField( node ) );\n\n\t\t// If reversed (e.g. merge via backspace), use the last in the set of\n\t\t// tabbables.\n\t\tconst isReverse = -1 === initialPosition;\n\t\tconst target =\n\t\t\t( isReverse ? last : first )( textInputs ) || ref.current;\n\n\t\tif ( ! isInsideRootBlock( ref.current, target ) ) {\n\t\t\tref.current.focus();\n\t\t\treturn;\n\t\t}\n\n\t\t// Check to see if element is focussable before a generic caret insert.\n\t\tif ( ! ref.current.getAttribute( 'contenteditable' ) ) {\n\t\t\tconst focusElement = focus.tabbable.findNext( ref.current );\n\t\t\t// Make sure focusElement is valid, contained in the same block, and a form field.\n\t\t\tif (\n\t\t\t\tfocusElement &&\n\t\t\t\tisInsideRootBlock( ref.current, focusElement ) &&\n\t\t\t\tisFormElement( focusElement )\n\t\t\t) {\n\t\t\t\tfocusElement.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tplaceCaretAtHorizontalEdge( target, isReverse );\n\t}, [ initialPosition, clientId ] );\n\n\treturn ref;\n}\n"]}
|
|
@@ -33,8 +33,14 @@ export function useFocusHandler(clientId) {
|
|
|
33
33
|
* @param {FocusEvent} event Focus event.
|
|
34
34
|
*/
|
|
35
35
|
function onFocus(event) {
|
|
36
|
-
//
|
|
36
|
+
// When the whole editor is editable, let writing flow handle
|
|
37
|
+
// selection.
|
|
38
|
+
if (node.parentElement.closest('[contenteditable="true"]')) {
|
|
39
|
+
return;
|
|
40
|
+
} // Check synchronously because a non-selected block might be
|
|
37
41
|
// getting data through `useSelect` asynchronously.
|
|
42
|
+
|
|
43
|
+
|
|
38
44
|
if (isBlockSelected(clientId)) {
|
|
39
45
|
// Potentially change selection away from rich text.
|
|
40
46
|
if (!event.target.isContentEditable) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-focus-handler.js"],"names":["useSelect","useDispatch","useRefEffect","isInsideRootBlock","store","blockEditorStore","useFocusHandler","clientId","isBlockSelected","selectBlock","selectionChange","node","onFocus","event","target","isContentEditable","addEventListener","removeEventListener"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,YAAT,QAA6B,oBAA7B;AAEA;AACA;AACA;;AACA,SAASC,iBAAT,QAAkC,oBAAlC;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,gBAA1C;AAEA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,eAAT,CAA0BC,QAA1B,EAAqC;AAC3C,QAAM;AAAEC,IAAAA;AAAF,MAAsBR,SAAS,CAAEK,gBAAF,CAArC;AACA,QAAM;AAAEI,IAAAA,WAAF;AAAeC,IAAAA;AAAf,MAAmCT,WAAW,CAAEI,gBAAF,CAApD;AAEA,SAAOH,YAAY,CAChBS,IAAF,IAAY;AACX;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACG,aAASC,OAAT,CAAkBC,KAAlB,EAA0B;AACzB;AACA;AACA,
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-focus-handler.js"],"names":["useSelect","useDispatch","useRefEffect","isInsideRootBlock","store","blockEditorStore","useFocusHandler","clientId","isBlockSelected","selectBlock","selectionChange","node","onFocus","event","parentElement","closest","target","isContentEditable","addEventListener","removeEventListener"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,YAAT,QAA6B,oBAA7B;AAEA;AACA;AACA;;AACA,SAASC,iBAAT,QAAkC,oBAAlC;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,gBAA1C;AAEA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,eAAT,CAA0BC,QAA1B,EAAqC;AAC3C,QAAM;AAAEC,IAAAA;AAAF,MAAsBR,SAAS,CAAEK,gBAAF,CAArC;AACA,QAAM;AAAEI,IAAAA,WAAF;AAAeC,IAAAA;AAAf,MAAmCT,WAAW,CAAEI,gBAAF,CAApD;AAEA,SAAOH,YAAY,CAChBS,IAAF,IAAY;AACX;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACG,aAASC,OAAT,CAAkBC,KAAlB,EAA0B;AACzB;AACA;AACA,UACCF,IAAI,CAACG,aAAL,CAAmBC,OAAnB,CAA4B,0BAA5B,CADD,EAEE;AACD;AACA,OAPwB,CASzB;AACA;;;AACA,UAAKP,eAAe,CAAED,QAAF,CAApB,EAAmC;AAClC;AACA,YAAK,CAAEM,KAAK,CAACG,MAAN,CAAaC,iBAApB,EAAwC;AACvCP,UAAAA,eAAe,CAAEH,QAAF,CAAf;AACA;;AACD;AACA,OAjBwB,CAmBzB;AACA;;;AACA,UAAK,CAAEJ,iBAAiB,CAAEQ,IAAF,EAAQE,KAAK,CAACG,MAAd,CAAxB,EAAiD;AAChD;AACA;;AAEDP,MAAAA,WAAW,CAAEF,QAAF,CAAX;AACA;;AAEDI,IAAAA,IAAI,CAACO,gBAAL,CAAuB,SAAvB,EAAkCN,OAAlC;AAEA,WAAO,MAAM;AACZD,MAAAA,IAAI,CAACQ,mBAAL,CAA0B,SAA1B,EAAqCP,OAArC;AACA,KAFD;AAGA,GA3CiB,EA4ClB,CAAEJ,eAAF,EAAmBC,WAAnB,CA5CkB,CAAnB;AA8CA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { isInsideRootBlock } from '../../../utils/dom';\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Selects the block if it receives focus.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useFocusHandler( clientId ) {\n\tconst { isBlockSelected } = useSelect( blockEditorStore );\n\tconst { selectBlock, selectionChange } = useDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\t/**\n\t\t\t * Marks the block as selected when focused and not already\n\t\t\t * selected. This specifically handles the case where block does not\n\t\t\t * set focus on its own (via `setFocus`), typically if there is no\n\t\t\t * focusable input in the block.\n\t\t\t *\n\t\t\t * @param {FocusEvent} event Focus event.\n\t\t\t */\n\t\t\tfunction onFocus( event ) {\n\t\t\t\t// When the whole editor is editable, let writing flow handle\n\t\t\t\t// selection.\n\t\t\t\tif (\n\t\t\t\t\tnode.parentElement.closest( '[contenteditable=\"true\"]' )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check synchronously because a non-selected block might be\n\t\t\t\t// getting data through `useSelect` asynchronously.\n\t\t\t\tif ( isBlockSelected( clientId ) ) {\n\t\t\t\t\t// Potentially change selection away from rich text.\n\t\t\t\t\tif ( ! event.target.isContentEditable ) {\n\t\t\t\t\t\tselectionChange( clientId );\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If an inner block is focussed, that block is resposible for\n\t\t\t\t// setting the selected block.\n\t\t\t\tif ( ! isInsideRootBlock( node, event.target ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tselectBlock( clientId );\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'focusin', onFocus );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'focusin', onFocus );\n\t\t\t};\n\t\t},\n\t\t[ isBlockSelected, selectBlock ]\n\t);\n}\n"]}
|
|
@@ -71,7 +71,12 @@ function BlockListAppender(_ref) {
|
|
|
71
71
|
// See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
|
|
72
72
|
, {
|
|
73
73
|
tabIndex: -1,
|
|
74
|
-
className: classnames('block-list-appender wp-block', className) //
|
|
74
|
+
className: classnames('block-list-appender wp-block', className) // Needed in case the whole editor is content editable (for multi
|
|
75
|
+
// selection). It fixes an edge case where ArrowDown and ArrowRight
|
|
76
|
+
// should collapse the selection to the end of that selection and
|
|
77
|
+
// not into the appender.
|
|
78
|
+
,
|
|
79
|
+
contentEditable: false // The appender exists to let you add the first Paragraph before
|
|
75
80
|
// any is inserted. To that end, this appender should visually be
|
|
76
81
|
// presented as a block. That means theme CSS should style it as if
|
|
77
82
|
// it were an empty paragraph block. That means a `wp-block` class to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/block-list-appender/index.js"],"names":["classnames","withSelect","getDefaultBlockName","DefaultBlockAppender","ButtonBlockAppender","store","blockEditorStore","BlockListAppender","rootClientId","canInsertDefaultBlock","isLocked","renderAppender","CustomAppender","className","selectedBlockClientId","tagName","TagName","appender","isParentSelected","select","canInsertBlockType","getTemplateLock","getSelectedBlockClientId"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AACA,SAASC,UAAT,QAA2B,iBAA3B;AACA,SAASC,mBAAT,QAAoC,mBAApC;AAEA;AACA;AACA;;AACA,OAAOC,oBAAP,MAAiC,2BAAjC;AACA,OAAOC,mBAAP,MAAgC,0BAAhC;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;;AAEA,SAASC,iBAAT,OAQI;AAAA,MARwB;AAC3BC,IAAAA,YAD2B;AAE3BC,IAAAA,qBAF2B;AAG3BC,IAAAA,QAH2B;AAI3BC,IAAAA,cAAc,EAAEC,cAJW;AAK3BC,IAAAA,SAL2B;AAM3BC,IAAAA,qBAN2B;AAO3BC,IAAAA,OAAO,EAAEC,OAAO,GAAG;AAPQ,GAQxB;;AACH,MAAKN,QAAQ,IAAIE,cAAc,KAAK,KAApC,EAA4C;AAC3C,WAAO,IAAP;AACA;;AAED,MAAIK,QAAJ;;AACA,MAAKL,cAAL,EAAsB;AACrB;AACAK,IAAAA,QAAQ,GAAG,cAAC,cAAD,OAAX;AACA,GAHD,MAGO;AACN,UAAMC,gBAAgB,GACrBJ,qBAAqB,KAAKN,YAA1B,IACE,CAAEA,YAAF,IAAkB,CAAEM,qBAFvB;;AAIA,QAAK,CAAEI,gBAAP,EAA0B;AACzB,aAAO,IAAP;AACA;;AAED,QAAKT,qBAAL,EAA6B;AAC5B;AACA;AACAQ,MAAAA,QAAQ,GAAG,cAAC,oBAAD;AAAsB,QAAA,YAAY,EAAGT;AAArC,QAAX;AACA,KAJD,MAIO;AACN;AACA;AACAS,MAAAA,QAAQ,GACP,cAAC,mBAAD;AACC,QAAA,YAAY,EAAGT,YADhB;AAEC,QAAA,SAAS,EAAC;AAFX,QADD;AAMA;AACD;;AAED,SACC,cAAC,OAAD,CACC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARD;AASC,IAAA,QAAQ,EAAG,CAAC,CATb;AAUC,IAAA,SAAS,EAAGR,UAAU,CACrB,8BADqB,EAErBa,SAFqB,CAVvB,CAcC;AACA;AACA;AACA;AACA;AACA;AACA;
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-list-appender/index.js"],"names":["classnames","withSelect","getDefaultBlockName","DefaultBlockAppender","ButtonBlockAppender","store","blockEditorStore","BlockListAppender","rootClientId","canInsertDefaultBlock","isLocked","renderAppender","CustomAppender","className","selectedBlockClientId","tagName","TagName","appender","isParentSelected","select","canInsertBlockType","getTemplateLock","getSelectedBlockClientId"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AACA,SAASC,UAAT,QAA2B,iBAA3B;AACA,SAASC,mBAAT,QAAoC,mBAApC;AAEA;AACA;AACA;;AACA,OAAOC,oBAAP,MAAiC,2BAAjC;AACA,OAAOC,mBAAP,MAAgC,0BAAhC;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;;AAEA,SAASC,iBAAT,OAQI;AAAA,MARwB;AAC3BC,IAAAA,YAD2B;AAE3BC,IAAAA,qBAF2B;AAG3BC,IAAAA,QAH2B;AAI3BC,IAAAA,cAAc,EAAEC,cAJW;AAK3BC,IAAAA,SAL2B;AAM3BC,IAAAA,qBAN2B;AAO3BC,IAAAA,OAAO,EAAEC,OAAO,GAAG;AAPQ,GAQxB;;AACH,MAAKN,QAAQ,IAAIE,cAAc,KAAK,KAApC,EAA4C;AAC3C,WAAO,IAAP;AACA;;AAED,MAAIK,QAAJ;;AACA,MAAKL,cAAL,EAAsB;AACrB;AACAK,IAAAA,QAAQ,GAAG,cAAC,cAAD,OAAX;AACA,GAHD,MAGO;AACN,UAAMC,gBAAgB,GACrBJ,qBAAqB,KAAKN,YAA1B,IACE,CAAEA,YAAF,IAAkB,CAAEM,qBAFvB;;AAIA,QAAK,CAAEI,gBAAP,EAA0B;AACzB,aAAO,IAAP;AACA;;AAED,QAAKT,qBAAL,EAA6B;AAC5B;AACA;AACAQ,MAAAA,QAAQ,GAAG,cAAC,oBAAD;AAAsB,QAAA,YAAY,EAAGT;AAArC,QAAX;AACA,KAJD,MAIO;AACN;AACA;AACAS,MAAAA,QAAQ,GACP,cAAC,mBAAD;AACC,QAAA,YAAY,EAAGT,YADhB;AAEC,QAAA,SAAS,EAAC;AAFX,QADD;AAMA;AACD;;AAED,SACC,cAAC,OAAD,CACC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARD;AASC,IAAA,QAAQ,EAAG,CAAC,CATb;AAUC,IAAA,SAAS,EAAGR,UAAU,CACrB,8BADqB,EAErBa,SAFqB,CAVvB,CAcC;AACA;AACA;AACA;AAjBD;AAkBC,IAAA,eAAe,EAAG,KAlBnB,CAmBC;AACA;AACA;AACA;AACA;AACA;AACA;AAzBD;AA0BC;AA1BD,KA4BGI,QA5BH,CADD;AAgCA;;AAED,eAAehB,UAAU,CAAE,CAAEkB,MAAF,YAAgC;AAAA,MAAtB;AAAEX,IAAAA;AAAF,GAAsB;AAC1D,QAAM;AACLY,IAAAA,kBADK;AAELC,IAAAA,eAFK;AAGLC,IAAAA;AAHK,MAIFH,MAAM,CAAEb,gBAAF,CAJV;AAMA,SAAO;AACNI,IAAAA,QAAQ,EAAE,CAAC,CAAEW,eAAe,CAAEb,YAAF,CADtB;AAENC,IAAAA,qBAAqB,EAAEW,kBAAkB,CACxClB,mBAAmB,EADqB,EAExCM,YAFwC,CAFnC;AAMNM,IAAAA,qBAAqB,EAAEQ,wBAAwB;AANzC,GAAP;AAQA,CAfwB,CAAV,CAeVf,iBAfU,CAAf","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { withSelect } from '@wordpress/data';\nimport { getDefaultBlockName } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport DefaultBlockAppender from '../default-block-appender';\nimport ButtonBlockAppender from '../button-block-appender';\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockListAppender( {\n\trootClientId,\n\tcanInsertDefaultBlock,\n\tisLocked,\n\trenderAppender: CustomAppender,\n\tclassName,\n\tselectedBlockClientId,\n\ttagName: TagName = 'div',\n} ) {\n\tif ( isLocked || CustomAppender === false ) {\n\t\treturn null;\n\t}\n\n\tlet appender;\n\tif ( CustomAppender ) {\n\t\t// Prefer custom render prop if provided.\n\t\tappender = <CustomAppender />;\n\t} else {\n\t\tconst isParentSelected =\n\t\t\tselectedBlockClientId === rootClientId ||\n\t\t\t( ! rootClientId && ! selectedBlockClientId );\n\n\t\tif ( ! isParentSelected ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( canInsertDefaultBlock ) {\n\t\t\t// Render the default block appender when renderAppender has not been\n\t\t\t// provided and the context supports use of the default appender.\n\t\t\tappender = <DefaultBlockAppender rootClientId={ rootClientId } />;\n\t\t} else {\n\t\t\t// Fallback in the case no renderAppender has been provided and the\n\t\t\t// default block can't be inserted.\n\t\t\tappender = (\n\t\t\t\t<ButtonBlockAppender\n\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\tclassName=\"block-list-appender__toggle\"\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t}\n\n\treturn (\n\t\t<TagName\n\t\t\t// A `tabIndex` is used on the wrapping `div` element in order to\n\t\t\t// force a focus event to occur when an appender `button` element\n\t\t\t// is clicked. In some browsers (Firefox, Safari), button clicks do\n\t\t\t// not emit a focus event, which could cause this event to propagate\n\t\t\t// unexpectedly. The `tabIndex` ensures that the interaction is\n\t\t\t// captured as a focus, without also adding an extra tab stop.\n\t\t\t//\n\t\t\t// See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus\n\t\t\ttabIndex={ -1 }\n\t\t\tclassName={ classnames(\n\t\t\t\t'block-list-appender wp-block',\n\t\t\t\tclassName\n\t\t\t) }\n\t\t\t// Needed in case the whole editor is content editable (for multi\n\t\t\t// selection). It fixes an edge case where ArrowDown and ArrowRight\n\t\t\t// should collapse the selection to the end of that selection and\n\t\t\t// not into the appender.\n\t\t\tcontentEditable={ false }\n\t\t\t// The appender exists to let you add the first Paragraph before\n\t\t\t// any is inserted. To that end, this appender should visually be\n\t\t\t// presented as a block. That means theme CSS should style it as if\n\t\t\t// it were an empty paragraph block. That means a `wp-block` class to\n\t\t\t// ensure the width is correct, and a [data-block] attribute to ensure\n\t\t\t// the correct margin is applied, especially for classic themes which\n\t\t\t// have commonly targeted that attribute for margins.\n\t\t\tdata-block\n\t\t>\n\t\t\t{ appender }\n\t\t</TagName>\n\t);\n}\n\nexport default withSelect( ( select, { rootClientId } ) => {\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetTemplateLock,\n\t\tgetSelectedBlockClientId,\n\t} = select( blockEditorStore );\n\n\treturn {\n\t\tisLocked: !! getTemplateLock( rootClientId ),\n\t\tcanInsertDefaultBlock: canInsertBlockType(\n\t\t\tgetDefaultBlockName(),\n\t\t\trootClientId\n\t\t),\n\t\tselectedBlockClientId: getSelectedBlockClientId(),\n\t};\n} )( BlockListAppender );\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/index.js"],"names":["default","BlockLockMenuItem","BlockLockModal","BlockLockToolbar"],"mappings":"AAAA,SAASA,OAAO,IAAIC,iBAApB,QAA6C,aAA7C;AACA,SAASD,OAAO,IAAIE,cAApB,QAA0C,SAA1C;AACA,SAASF,OAAO,IAAIG,gBAApB,QAA4C,WAA5C","sourcesContent":["export { default as BlockLockMenuItem } from './menu-item';\nexport { default as BlockLockModal } from './modal';\nexport { default as BlockLockToolbar } from './toolbar';\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createElement, Fragment } from "@wordpress/element";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* WordPress dependencies
|
|
5
|
+
*/
|
|
6
|
+
import { __ } from '@wordpress/i18n';
|
|
7
|
+
import { useReducer } from '@wordpress/element';
|
|
8
|
+
import { MenuItem } from '@wordpress/components';
|
|
9
|
+
import { useSelect } from '@wordpress/data';
|
|
10
|
+
import { lock, unlock } from '@wordpress/icons';
|
|
11
|
+
/**
|
|
12
|
+
* Internal dependencies
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import BlockLockModal from './modal';
|
|
16
|
+
import { store as blockEditorStore } from '../../store';
|
|
17
|
+
export default function BlockLockMenuItem(_ref) {
|
|
18
|
+
let {
|
|
19
|
+
clientId
|
|
20
|
+
} = _ref;
|
|
21
|
+
const {
|
|
22
|
+
canLockBlock,
|
|
23
|
+
isLocked
|
|
24
|
+
} = useSelect(select => {
|
|
25
|
+
const {
|
|
26
|
+
canMoveBlock,
|
|
27
|
+
canRemoveBlock,
|
|
28
|
+
canLockBlockType,
|
|
29
|
+
getBlockName,
|
|
30
|
+
getBlockRootClientId
|
|
31
|
+
} = select(blockEditorStore);
|
|
32
|
+
const rootClientId = getBlockRootClientId(clientId);
|
|
33
|
+
return {
|
|
34
|
+
canLockBlock: canLockBlockType(getBlockName(clientId)),
|
|
35
|
+
isLocked: !canMoveBlock(clientId, rootClientId) || !canRemoveBlock(clientId, rootClientId)
|
|
36
|
+
};
|
|
37
|
+
}, [clientId]);
|
|
38
|
+
const [isModalOpen, toggleModal] = useReducer(isActive => !isActive, false);
|
|
39
|
+
|
|
40
|
+
if (!canLockBlock) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const label = isLocked ? __('Unlock') : __('Lock');
|
|
45
|
+
return createElement(Fragment, null, createElement(MenuItem, {
|
|
46
|
+
icon: isLocked ? unlock : lock,
|
|
47
|
+
onClick: toggleModal
|
|
48
|
+
}, label), isModalOpen && createElement(BlockLockModal, {
|
|
49
|
+
clientId: clientId,
|
|
50
|
+
onClose: toggleModal
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=menu-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/menu-item.js"],"names":["__","useReducer","MenuItem","useSelect","lock","unlock","BlockLockModal","store","blockEditorStore","BlockLockMenuItem","clientId","canLockBlock","isLocked","select","canMoveBlock","canRemoveBlock","canLockBlockType","getBlockName","getBlockRootClientId","rootClientId","isModalOpen","toggleModal","isActive","label"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AACA,SAASC,UAAT,QAA2B,oBAA3B;AACA,SAASC,QAAT,QAAyB,uBAAzB;AACA,SAASC,SAAT,QAA0B,iBAA1B;AACA,SAASC,IAAT,EAAeC,MAAf,QAA6B,kBAA7B;AAEA;AACA;AACA;;AACA,OAAOC,cAAP,MAA2B,SAA3B;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA,eAAe,SAASC,iBAAT,OAA2C;AAAA,MAAf;AAAEC,IAAAA;AAAF,GAAe;AACzD,QAAM;AAAEC,IAAAA,YAAF;AAAgBC,IAAAA;AAAhB,MAA6BT,SAAS,CACzCU,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,YADK;AAELC,MAAAA,cAFK;AAGLC,MAAAA,gBAHK;AAILC,MAAAA,YAJK;AAKLC,MAAAA;AALK,QAMFL,MAAM,CAAEL,gBAAF,CANV;AAOA,UAAMW,YAAY,GAAGD,oBAAoB,CAAER,QAAF,CAAzC;AAEA,WAAO;AACNC,MAAAA,YAAY,EAAEK,gBAAgB,CAAEC,YAAY,CAAEP,QAAF,CAAd,CADxB;AAENE,MAAAA,QAAQ,EACP,CAAEE,YAAY,CAAEJ,QAAF,EAAYS,YAAZ,CAAd,IACA,CAAEJ,cAAc,CAAEL,QAAF,EAAYS,YAAZ;AAJX,KAAP;AAMA,GAjB0C,EAkB3C,CAAET,QAAF,CAlB2C,CAA5C;AAqBA,QAAM,CAAEU,WAAF,EAAeC,WAAf,IAA+BpB,UAAU,CAC5CqB,QAAF,IAAgB,CAAEA,QAD4B,EAE9C,KAF8C,CAA/C;;AAKA,MAAK,CAAEX,YAAP,EAAsB;AACrB,WAAO,IAAP;AACA;;AAED,QAAMY,KAAK,GAAGX,QAAQ,GAAGZ,EAAE,CAAE,QAAF,CAAL,GAAoBA,EAAE,CAAE,MAAF,CAA5C;AAEA,SACC,8BACC,cAAC,QAAD;AAAU,IAAA,IAAI,EAAGY,QAAQ,GAAGP,MAAH,GAAYD,IAArC;AAA4C,IAAA,OAAO,EAAGiB;AAAtD,KACGE,KADH,CADD,EAIGH,WAAW,IACZ,cAAC,cAAD;AAAgB,IAAA,QAAQ,EAAGV,QAA3B;AAAsC,IAAA,OAAO,EAAGW;AAAhD,IALF,CADD;AAUA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useReducer } from '@wordpress/element';\nimport { MenuItem } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { lock, unlock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockLockModal from './modal';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockLockMenuItem( { clientId } ) {\n\tconst { canLockBlock, isLocked } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanMoveBlock,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanLockBlockType,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\treturn {\n\t\t\t\tcanLockBlock: canLockBlockType( getBlockName( clientId ) ),\n\t\t\t\tisLocked:\n\t\t\t\t\t! canMoveBlock( clientId, rootClientId ) ||\n\t\t\t\t\t! canRemoveBlock( clientId, rootClientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tif ( ! canLockBlock ) {\n\t\treturn null;\n\t}\n\n\tconst label = isLocked ? __( 'Unlock' ) : __( 'Lock' );\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ isLocked ? unlock : lock } onClick={ toggleModal }>\n\t\t\t\t{ label }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<BlockLockModal clientId={ clientId } onClose={ toggleModal } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { createElement, Fragment } from "@wordpress/element";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* WordPress dependencies
|
|
5
|
+
*/
|
|
6
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
7
|
+
import { useEffect, useState } from '@wordpress/element';
|
|
8
|
+
import { Button, CheckboxControl, Flex, FlexItem, Icon, Modal } from '@wordpress/components';
|
|
9
|
+
import { lock as lockIcon, unlock as unlockIcon } from '@wordpress/icons';
|
|
10
|
+
import { useInstanceId } from '@wordpress/compose';
|
|
11
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
12
|
+
/**
|
|
13
|
+
* Internal dependencies
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import useBlockDisplayInformation from '../use-block-display-information';
|
|
17
|
+
import { store as blockEditorStore } from '../../store';
|
|
18
|
+
export default function BlockLockModal(_ref) {
|
|
19
|
+
let {
|
|
20
|
+
clientId,
|
|
21
|
+
onClose
|
|
22
|
+
} = _ref;
|
|
23
|
+
const [lock, setLock] = useState({
|
|
24
|
+
move: false,
|
|
25
|
+
remove: false
|
|
26
|
+
});
|
|
27
|
+
const {
|
|
28
|
+
canMove,
|
|
29
|
+
canRemove
|
|
30
|
+
} = useSelect(select => {
|
|
31
|
+
const {
|
|
32
|
+
canMoveBlock,
|
|
33
|
+
canRemoveBlock,
|
|
34
|
+
getBlockRootClientId
|
|
35
|
+
} = select(blockEditorStore);
|
|
36
|
+
const rootClientId = getBlockRootClientId(clientId);
|
|
37
|
+
return {
|
|
38
|
+
canMove: canMoveBlock(clientId, rootClientId),
|
|
39
|
+
canRemove: canRemoveBlock(clientId, rootClientId)
|
|
40
|
+
};
|
|
41
|
+
}, [clientId]);
|
|
42
|
+
const {
|
|
43
|
+
updateBlockAttributes
|
|
44
|
+
} = useDispatch(blockEditorStore);
|
|
45
|
+
const blockInformation = useBlockDisplayInformation(clientId);
|
|
46
|
+
const instanceId = useInstanceId(BlockLockModal, 'block-editor-block-lock-modal__options-title');
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
setLock({
|
|
49
|
+
move: !canMove,
|
|
50
|
+
remove: !canRemove
|
|
51
|
+
});
|
|
52
|
+
}, [canMove, canRemove]);
|
|
53
|
+
const isAllChecked = Object.values(lock).every(Boolean);
|
|
54
|
+
const isIndeterminate = Object.values(lock).some(Boolean) && !isAllChecked;
|
|
55
|
+
return createElement(Modal, {
|
|
56
|
+
title: sprintf(
|
|
57
|
+
/* translators: %s: Name of the block. */
|
|
58
|
+
__('Lock %s'), blockInformation.title),
|
|
59
|
+
overlayClassName: "block-editor-block-lock-modal",
|
|
60
|
+
closeLabel: __('Close'),
|
|
61
|
+
onRequestClose: onClose
|
|
62
|
+
}, createElement("form", {
|
|
63
|
+
onSubmit: event => {
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
updateBlockAttributes([clientId], {
|
|
66
|
+
lock
|
|
67
|
+
});
|
|
68
|
+
onClose();
|
|
69
|
+
}
|
|
70
|
+
}, createElement("p", null, __('Choose specific attributes to restrict or lock all available options.')), createElement("div", {
|
|
71
|
+
role: "group",
|
|
72
|
+
"aria-labelledby": instanceId,
|
|
73
|
+
className: "block-editor-block-lock-modal__options"
|
|
74
|
+
}, createElement(CheckboxControl, {
|
|
75
|
+
className: "block-editor-block-lock-modal__options-title",
|
|
76
|
+
label: createElement("span", {
|
|
77
|
+
id: instanceId
|
|
78
|
+
}, __('Lock all')),
|
|
79
|
+
checked: isAllChecked,
|
|
80
|
+
indeterminate: isIndeterminate,
|
|
81
|
+
onChange: newValue => setLock({
|
|
82
|
+
move: newValue,
|
|
83
|
+
remove: newValue
|
|
84
|
+
})
|
|
85
|
+
}), createElement("ul", {
|
|
86
|
+
className: "block-editor-block-lock-modal__checklist"
|
|
87
|
+
}, createElement("li", {
|
|
88
|
+
className: "block-editor-block-lock-modal__checklist-item"
|
|
89
|
+
}, createElement(CheckboxControl, {
|
|
90
|
+
label: createElement(Fragment, null, __('Disable movement'), createElement(Icon, {
|
|
91
|
+
icon: lock.move ? lockIcon : unlockIcon
|
|
92
|
+
})),
|
|
93
|
+
checked: lock.move,
|
|
94
|
+
onChange: move => setLock(prevLock => ({ ...prevLock,
|
|
95
|
+
move
|
|
96
|
+
}))
|
|
97
|
+
})), createElement("li", {
|
|
98
|
+
className: "block-editor-block-lock-modal__checklist-item"
|
|
99
|
+
}, createElement(CheckboxControl, {
|
|
100
|
+
label: createElement(Fragment, null, __('Prevent removal'), createElement(Icon, {
|
|
101
|
+
icon: lock.remove ? lockIcon : unlockIcon
|
|
102
|
+
})),
|
|
103
|
+
checked: lock.remove,
|
|
104
|
+
onChange: remove => setLock(prevLock => ({ ...prevLock,
|
|
105
|
+
remove
|
|
106
|
+
}))
|
|
107
|
+
})))), createElement(Flex, {
|
|
108
|
+
className: "block-editor-block-lock-modal__actions",
|
|
109
|
+
justify: "flex-end",
|
|
110
|
+
expanded: false
|
|
111
|
+
}, createElement(FlexItem, null, createElement(Button, {
|
|
112
|
+
variant: "tertiary",
|
|
113
|
+
onClick: onClose
|
|
114
|
+
}, __('Cancel'))), createElement(FlexItem, null, createElement(Button, {
|
|
115
|
+
variant: "primary",
|
|
116
|
+
type: "submit"
|
|
117
|
+
}, __('Apply'))))));
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/modal.js"],"names":["__","sprintf","useEffect","useState","Button","CheckboxControl","Flex","FlexItem","Icon","Modal","lock","lockIcon","unlock","unlockIcon","useInstanceId","useDispatch","useSelect","useBlockDisplayInformation","store","blockEditorStore","BlockLockModal","clientId","onClose","setLock","move","remove","canMove","canRemove","select","canMoveBlock","canRemoveBlock","getBlockRootClientId","rootClientId","updateBlockAttributes","blockInformation","instanceId","isAllChecked","Object","values","every","Boolean","isIndeterminate","some","title","event","preventDefault","newValue","prevLock"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useEffect, useState } from '@wordpress/element';\nimport {\n\tButton,\n\tCheckboxControl,\n\tFlex,\n\tFlexItem,\n\tIcon,\n\tModal,\n} from '@wordpress/components';\nimport { lock as lockIcon, unlock as unlockIcon } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockLockModal( { clientId, onClose } ) {\n\tconst [ lock, setLock ] = useState( { move: false, remove: false } );\n\tconst { canMove, canRemove } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanMoveBlock,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\treturn {\n\t\t\t\tcanMove: canMoveBlock( clientId, rootClientId ),\n\t\t\t\tcanRemove: canRemoveBlock( clientId, rootClientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst instanceId = useInstanceId(\n\t\tBlockLockModal,\n\t\t'block-editor-block-lock-modal__options-title'\n\t);\n\n\tuseEffect( () => {\n\t\tsetLock( {\n\t\t\tmove: ! canMove,\n\t\t\tremove: ! canRemove,\n\t\t} );\n\t}, [ canMove, canRemove ] );\n\n\tconst isAllChecked = Object.values( lock ).every( Boolean );\n\tconst isIndeterminate =\n\t\tObject.values( lock ).some( Boolean ) && ! isAllChecked;\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ sprintf(\n\t\t\t\t/* translators: %s: Name of the block. */\n\t\t\t\t__( 'Lock %s' ),\n\t\t\t\tblockInformation.title\n\t\t\t) }\n\t\t\toverlayClassName=\"block-editor-block-lock-modal\"\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tupdateBlockAttributes( [ clientId ], { lock } );\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<p>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Choose specific attributes to restrict or lock all available options.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t<div\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\taria-labelledby={ instanceId }\n\t\t\t\t\tclassName=\"block-editor-block-lock-modal__options\"\n\t\t\t\t>\n\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\tclassName=\"block-editor-block-lock-modal__options-title\"\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<span id={ instanceId }>{ __( 'Lock all' ) }</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchecked={ isAllChecked }\n\t\t\t\t\t\tindeterminate={ isIndeterminate }\n\t\t\t\t\t\tonChange={ ( newValue ) =>\n\t\t\t\t\t\t\tsetLock( {\n\t\t\t\t\t\t\t\tmove: newValue,\n\t\t\t\t\t\t\t\tremove: newValue,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\t<ul className=\"block-editor-block-lock-modal__checklist\">\n\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Disable movement' ) }\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tlock.move\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={ lock.move }\n\t\t\t\t\t\t\t\tonChange={ ( move ) =>\n\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\tmove,\n\t\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Prevent removal' ) }\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tlock.remove\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={ lock.remove }\n\t\t\t\t\t\t\t\tonChange={ ( remove ) =>\n\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\tremove,\n\t\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<Flex\n\t\t\t\t\tclassName=\"block-editor-block-lock-modal__actions\"\n\t\t\t\t\tjustify=\"flex-end\"\n\t\t\t\t\texpanded={ false }\n\t\t\t\t>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ onClose }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t</Flex>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { createElement, Fragment } from "@wordpress/element";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* WordPress dependencies
|
|
5
|
+
*/
|
|
6
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
7
|
+
import { ToolbarButton, ToolbarGroup } from '@wordpress/components';
|
|
8
|
+
import { useReducer } from '@wordpress/element';
|
|
9
|
+
import { lock } from '@wordpress/icons';
|
|
10
|
+
import { useSelect } from '@wordpress/data';
|
|
11
|
+
/**
|
|
12
|
+
* Internal dependencies
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import BlockLockModal from './modal';
|
|
16
|
+
import useBlockDisplayInformation from '../use-block-display-information';
|
|
17
|
+
import { store as blockEditorStore } from '../../store';
|
|
18
|
+
export default function BlockLockToolbar(_ref) {
|
|
19
|
+
let {
|
|
20
|
+
clientId
|
|
21
|
+
} = _ref;
|
|
22
|
+
const blockInformation = useBlockDisplayInformation(clientId);
|
|
23
|
+
const {
|
|
24
|
+
canMove,
|
|
25
|
+
canRemove,
|
|
26
|
+
canLockBlock
|
|
27
|
+
} = useSelect(select => {
|
|
28
|
+
const {
|
|
29
|
+
canMoveBlock,
|
|
30
|
+
canRemoveBlock,
|
|
31
|
+
canLockBlockType,
|
|
32
|
+
getBlockName
|
|
33
|
+
} = select(blockEditorStore);
|
|
34
|
+
return {
|
|
35
|
+
canMove: canMoveBlock(clientId),
|
|
36
|
+
canRemove: canRemoveBlock(clientId),
|
|
37
|
+
canLockBlock: canLockBlockType(getBlockName(clientId))
|
|
38
|
+
};
|
|
39
|
+
}, [clientId]);
|
|
40
|
+
const [isModalOpen, toggleModal] = useReducer(isActive => !isActive, false);
|
|
41
|
+
|
|
42
|
+
if (!canLockBlock) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (canMove && canRemove) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return createElement(Fragment, null, createElement(ToolbarGroup, {
|
|
51
|
+
className: "block-editor-block-lock-toolbar"
|
|
52
|
+
}, createElement(ToolbarButton, {
|
|
53
|
+
icon: lock,
|
|
54
|
+
label: sprintf(
|
|
55
|
+
/* translators: %s: block name */
|
|
56
|
+
__('Unlock %s'), blockInformation.title),
|
|
57
|
+
onClick: toggleModal
|
|
58
|
+
})), isModalOpen && createElement(BlockLockModal, {
|
|
59
|
+
clientId: clientId,
|
|
60
|
+
onClose: toggleModal
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/toolbar.js"],"names":["__","sprintf","ToolbarButton","ToolbarGroup","useReducer","lock","useSelect","BlockLockModal","useBlockDisplayInformation","store","blockEditorStore","BlockLockToolbar","clientId","blockInformation","canMove","canRemove","canLockBlock","select","canMoveBlock","canRemoveBlock","canLockBlockType","getBlockName","isModalOpen","toggleModal","isActive","title"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,aAAT,EAAwBC,YAAxB,QAA4C,uBAA5C;AACA,SAASC,UAAT,QAA2B,oBAA3B;AACA,SAASC,IAAT,QAAqB,kBAArB;AACA,SAASC,SAAT,QAA0B,iBAA1B;AAEA;AACA;AACA;;AACA,OAAOC,cAAP,MAA2B,SAA3B;AACA,OAAOC,0BAAP,MAAuC,kCAAvC;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA,eAAe,SAASC,gBAAT,OAA0C;AAAA,MAAf;AAAEC,IAAAA;AAAF,GAAe;AACxD,QAAMC,gBAAgB,GAAGL,0BAA0B,CAAEI,QAAF,CAAnD;AACA,QAAM;AAAEE,IAAAA,OAAF;AAAWC,IAAAA,SAAX;AAAsBC,IAAAA;AAAtB,MAAuCV,SAAS,CACnDW,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,YADK;AAELC,MAAAA,cAFK;AAGLC,MAAAA,gBAHK;AAILC,MAAAA;AAJK,QAKFJ,MAAM,CAAEP,gBAAF,CALV;AAOA,WAAO;AACNI,MAAAA,OAAO,EAAEI,YAAY,CAAEN,QAAF,CADf;AAENG,MAAAA,SAAS,EAAEI,cAAc,CAAEP,QAAF,CAFnB;AAGNI,MAAAA,YAAY,EAAEI,gBAAgB,CAAEC,YAAY,CAAET,QAAF,CAAd;AAHxB,KAAP;AAKA,GAdoD,EAerD,CAAEA,QAAF,CAfqD,CAAtD;AAkBA,QAAM,CAAEU,WAAF,EAAeC,WAAf,IAA+BnB,UAAU,CAC5CoB,QAAF,IAAgB,CAAEA,QAD4B,EAE9C,KAF8C,CAA/C;;AAKA,MAAK,CAAER,YAAP,EAAsB;AACrB,WAAO,IAAP;AACA;;AAED,MAAKF,OAAO,IAAIC,SAAhB,EAA4B;AAC3B,WAAO,IAAP;AACA;;AAED,SACC,8BACC,cAAC,YAAD;AAAc,IAAA,SAAS,EAAC;AAAxB,KACC,cAAC,aAAD;AACC,IAAA,IAAI,EAAGV,IADR;AAEC,IAAA,KAAK,EAAGJ,OAAO;AACd;AACAD,IAAAA,EAAE,CAAE,WAAF,CAFY,EAGda,gBAAgB,CAACY,KAHH,CAFhB;AAOC,IAAA,OAAO,EAAGF;AAPX,IADD,CADD,EAYGD,WAAW,IACZ,cAAC,cAAD;AAAgB,IAAA,QAAQ,EAAGV,QAA3B;AAAsC,IAAA,OAAO,EAAGW;AAAhD,IAbF,CADD;AAkBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useReducer } from '@wordpress/element';\nimport { lock } from '@wordpress/icons';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockLockModal from './modal';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockLockToolbar( { clientId } ) {\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst { canMove, canRemove, canLockBlock } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanMoveBlock,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanLockBlockType,\n\t\t\t\tgetBlockName,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tcanMove: canMoveBlock( clientId ),\n\t\t\t\tcanRemove: canRemoveBlock( clientId ),\n\t\t\t\tcanLockBlock: canLockBlockType( getBlockName( clientId ) ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tif ( ! canLockBlock ) {\n\t\treturn null;\n\t}\n\n\tif ( canMove && canRemove ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<ToolbarGroup className=\"block-editor-block-lock-toolbar\">\n\t\t\t\t<ToolbarButton\n\t\t\t\t\ticon={ lock }\n\t\t\t\t\tlabel={ sprintf(\n\t\t\t\t\t\t/* translators: %s: block name */\n\t\t\t\t\t\t__( 'Unlock %s' ),\n\t\t\t\t\t\tblockInformation.title\n\t\t\t\t\t) }\n\t\t\t\t\tonClick={ toggleModal }\n\t\t\t\t/>\n\t\t\t</ToolbarGroup>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<BlockLockModal clientId={ clientId } onClose={ toggleModal } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
|
|
@@ -81,6 +81,10 @@ function BlockMover(_ref) {
|
|
|
81
81
|
clientIds: clientIds
|
|
82
82
|
}, itemProps)))));
|
|
83
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-mover/README.md
|
|
86
|
+
*/
|
|
87
|
+
|
|
84
88
|
|
|
85
89
|
export default withSelect((select, _ref2) => {
|
|
86
90
|
var _getBlockListSettings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/block-mover/index.js"],"names":["first","last","castArray","classnames","dragHandle","ToolbarGroup","ToolbarItem","Button","getBlockType","useState","withSelect","__","BlockDraggable","BlockMoverUpButton","BlockMoverDownButton","store","blockEditorStore","BlockMover","isFirst","isLast","clientIds","canMove","isHidden","rootClientId","orientation","hideDragHandle","isFocused","setIsFocused","onFocus","onBlur","dragHandleLabel","draggableProps","itemProps","select","getBlock","getBlockIndex","getBlockListSettings","canMoveBlocks","getBlockOrder","getBlockRootClientId","normalizedClientIds","firstClientId","block","firstIndex","lastIndex","blockOrder","length","blockType","name"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,KAAT,EAAgBC,IAAhB,EAAsBC,SAAtB,QAAuC,QAAvC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AAEA,SAASC,UAAT,QAA2B,kBAA3B;AACA,SAASC,YAAT,EAAuBC,WAAvB,EAAoCC,MAApC,QAAkD,uBAAlD;AACA,SAASC,YAAT,QAA6B,mBAA7B;AACA,SAASC,QAAT,QAAyB,oBAAzB;AACA,SAASC,UAAT,QAA2B,iBAA3B;AACA,SAASC,EAAT,QAAmB,iBAAnB;AAEA;AACA;AACA;;AACA,OAAOC,cAAP,MAA2B,oBAA3B;AACA,SAASC,kBAAT,EAA6BC,oBAA7B,QAAyD,UAAzD;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;;AAEA,SAASC,UAAT,OASI;AAAA,MATiB;AACpBC,IAAAA,OADoB;AAEpBC,IAAAA,MAFoB;AAGpBC,IAAAA,SAHoB;AAIpBC,IAAAA,OAJoB;AAKpBC,IAAAA,QALoB;AAMpBC,IAAAA,YANoB;AAOpBC,IAAAA,WAPoB;AAQpBC,IAAAA;AARoB,GASjB;AACH,QAAM,CAAEC,SAAF,EAAaC,YAAb,IAA8BlB,QAAQ,CAAE,KAAF,CAA5C;;AAEA,QAAMmB,OAAO,GAAG,MAAMD,YAAY,CAAE,IAAF,CAAlC;;AACA,QAAME,MAAM,GAAG,MAAMF,YAAY,CAAE,KAAF,CAAjC;;AAEA,MAAK,CAAEN,OAAF,IAAeH,OAAO,IAAIC,MAAX,IAAqB,CAAEI,YAA3C,EAA4D;AAC3D,WAAO,IAAP;AACA;;AAED,QAAMO,eAAe,GAAGnB,EAAE,CAAE,MAAF,CAA1B,CAVG,CAYH;AACA;AACA;AACA;;;AACA,SACC;AACC,IAAA,SAAS,EAAGR,UAAU,CAAE,0BAAF,EAA8B;AACnD,oBAAcuB,SAAS,IAAI,CAAEJ,QADsB;AAEnD,uBAAiBE,WAAW,KAAK;AAFkB,KAA9B;AADvB,KAMG,CAAEC,cAAF,IACD,cAAC,cAAD;AACC,IAAA,SAAS,EAAGL,SADb;AAEC,IAAA,cAAc,EAAC;AAFhB,KAIKW,cAAF,IACD,cAAC,MAAD;AACC,IAAA,IAAI,EAAG3B,UADR;AAEC,IAAA,SAAS,EAAC,uCAFX;AAGC,mBAAY,MAHb;AAIC,IAAA,KAAK,EAAG0B,eAJT,CAKC;AACA;AAND;AAOC,IAAA,QAAQ,EAAC;AAPV,KAQMC,cARN,EALF,CAPF,EAyBC,cAAC,YAAD;AAAc,IAAA,SAAS,EAAC;AAAxB,KACC,cAAC,WAAD;AAAa,IAAA,OAAO,EAAGH,OAAvB;AAAiC,IAAA,MAAM,EAAGC;AAA1C,KACKG,SAAF,IACD,cAAC,kBAAD;AACC,IAAA,SAAS,EAAGZ;AADb,KAEMY,SAFN,EAFF,CADD,EASC,cAAC,WAAD;AAAa,IAAA,OAAO,EAAGJ,OAAvB;AAAiC,IAAA,MAAM,EAAGC;AAA1C,KACKG,SAAF,IACD,cAAC,oBAAD;AACC,IAAA,SAAS,EAAGZ;AADb,KAEMY,SAFN,EAFF,CATD,CAzBD,CADD;AA8CA
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-mover/index.js"],"names":["first","last","castArray","classnames","dragHandle","ToolbarGroup","ToolbarItem","Button","getBlockType","useState","withSelect","__","BlockDraggable","BlockMoverUpButton","BlockMoverDownButton","store","blockEditorStore","BlockMover","isFirst","isLast","clientIds","canMove","isHidden","rootClientId","orientation","hideDragHandle","isFocused","setIsFocused","onFocus","onBlur","dragHandleLabel","draggableProps","itemProps","select","getBlock","getBlockIndex","getBlockListSettings","canMoveBlocks","getBlockOrder","getBlockRootClientId","normalizedClientIds","firstClientId","block","firstIndex","lastIndex","blockOrder","length","blockType","name"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { first, last, castArray } from 'lodash';\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\n\nimport { dragHandle } from '@wordpress/icons';\nimport { ToolbarGroup, ToolbarItem, Button } from '@wordpress/components';\nimport { getBlockType } from '@wordpress/blocks';\nimport { useState } from '@wordpress/element';\nimport { withSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockDraggable from '../block-draggable';\nimport { BlockMoverUpButton, BlockMoverDownButton } from './button';\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockMover( {\n\tisFirst,\n\tisLast,\n\tclientIds,\n\tcanMove,\n\tisHidden,\n\trootClientId,\n\torientation,\n\thideDragHandle,\n} ) {\n\tconst [ isFocused, setIsFocused ] = useState( false );\n\n\tconst onFocus = () => setIsFocused( true );\n\tconst onBlur = () => setIsFocused( false );\n\n\tif ( ! canMove || ( isFirst && isLast && ! rootClientId ) ) {\n\t\treturn null;\n\t}\n\n\tconst dragHandleLabel = __( 'Drag' );\n\n\t// We emulate a disabled state because forcefully applying the `disabled`\n\t// attribute on the buttons while it has focus causes the screen to change\n\t// to an unfocused state (body as active element) without firing blur on,\n\t// the rendering parent, leaving it unable to react to focus out.\n\treturn (\n\t\t<div\n\t\t\tclassName={ classnames( 'block-editor-block-mover', {\n\t\t\t\t'is-visible': isFocused || ! isHidden,\n\t\t\t\t'is-horizontal': orientation === 'horizontal',\n\t\t\t} ) }\n\t\t>\n\t\t\t{ ! hideDragHandle && (\n\t\t\t\t<BlockDraggable\n\t\t\t\t\tclientIds={ clientIds }\n\t\t\t\t\tcloneClassname=\"block-editor-block-mover__drag-clone\"\n\t\t\t\t>\n\t\t\t\t\t{ ( draggableProps ) => (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ticon={ dragHandle }\n\t\t\t\t\t\t\tclassName=\"block-editor-block-mover__drag-handle\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tlabel={ dragHandleLabel }\n\t\t\t\t\t\t\t// Should not be able to tab to drag handle as this\n\t\t\t\t\t\t\t// button can only be used with a pointer device.\n\t\t\t\t\t\t\ttabIndex=\"-1\"\n\t\t\t\t\t\t\t{ ...draggableProps }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</BlockDraggable>\n\t\t\t) }\n\t\t\t<ToolbarGroup className=\"block-editor-block-mover__move-button-container\">\n\t\t\t\t<ToolbarItem onFocus={ onFocus } onBlur={ onBlur }>\n\t\t\t\t\t{ ( itemProps ) => (\n\t\t\t\t\t\t<BlockMoverUpButton\n\t\t\t\t\t\t\tclientIds={ clientIds }\n\t\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</ToolbarItem>\n\t\t\t\t<ToolbarItem onFocus={ onFocus } onBlur={ onBlur }>\n\t\t\t\t\t{ ( itemProps ) => (\n\t\t\t\t\t\t<BlockMoverDownButton\n\t\t\t\t\t\t\tclientIds={ clientIds }\n\t\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</ToolbarItem>\n\t\t\t</ToolbarGroup>\n\t\t</div>\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-mover/README.md\n */\nexport default withSelect( ( select, { clientIds } ) => {\n\tconst {\n\t\tgetBlock,\n\t\tgetBlockIndex,\n\t\tgetBlockListSettings,\n\t\tcanMoveBlocks,\n\t\tgetBlockOrder,\n\t\tgetBlockRootClientId,\n\t} = select( blockEditorStore );\n\tconst normalizedClientIds = castArray( clientIds );\n\tconst firstClientId = first( normalizedClientIds );\n\tconst block = getBlock( firstClientId );\n\tconst rootClientId = getBlockRootClientId( first( normalizedClientIds ) );\n\tconst firstIndex = getBlockIndex( firstClientId );\n\tconst lastIndex = getBlockIndex( last( normalizedClientIds ) );\n\tconst blockOrder = getBlockOrder( rootClientId );\n\tconst isFirst = firstIndex === 0;\n\tconst isLast = lastIndex === blockOrder.length - 1;\n\n\treturn {\n\t\tblockType: block ? getBlockType( block.name ) : null,\n\t\tcanMove: canMoveBlocks( clientIds, rootClientId ),\n\t\trootClientId,\n\t\tfirstIndex,\n\t\tisFirst,\n\t\tisLast,\n\t\torientation: getBlockListSettings( rootClientId )?.orientation,\n\t};\n} )( BlockMover );\n"]}
|
|
@@ -9,12 +9,12 @@ import { castArray, flow, noop } from 'lodash';
|
|
|
9
9
|
* WordPress dependencies
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import { getBlockType, serialize } from '@wordpress/blocks';
|
|
13
13
|
import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
|
|
14
|
-
import { useSelect } from '@wordpress/data';
|
|
14
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
15
15
|
import { moreVertical } from '@wordpress/icons';
|
|
16
|
-
import { Children, cloneElement, useCallback } from '@wordpress/element';
|
|
17
|
-
import {
|
|
16
|
+
import { Children, cloneElement, useCallback, useRef } from '@wordpress/element';
|
|
17
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
18
18
|
import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
|
|
19
19
|
import { useCopyToClipboard } from '@wordpress/compose';
|
|
20
20
|
/**
|
|
@@ -22,12 +22,14 @@ import { useCopyToClipboard } from '@wordpress/compose';
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import BlockActions from '../block-actions';
|
|
25
|
+
import BlockIcon from '../block-icon';
|
|
25
26
|
import BlockModeToggle from './block-mode-toggle';
|
|
26
27
|
import BlockHTMLConvertButton from './block-html-convert-button';
|
|
27
28
|
import __unstableBlockSettingsMenuFirstItem from './block-settings-menu-first-item';
|
|
28
29
|
import BlockSettingsMenuControls from '../block-settings-menu-controls';
|
|
29
30
|
import { store as blockEditorStore } from '../../store';
|
|
30
31
|
import useBlockDisplayTitle from '../block-title/use-block-display-title';
|
|
32
|
+
import { useShowMoversGestures } from '../block-toolbar/utils';
|
|
31
33
|
const POPOVER_PROPS = {
|
|
32
34
|
className: 'block-editor-block-settings-menu__popover',
|
|
33
35
|
position: 'bottom right',
|
|
@@ -56,13 +58,34 @@ export function BlockSettingsDropdown(_ref2) {
|
|
|
56
58
|
const count = blockClientIds.length;
|
|
57
59
|
const firstBlockClientId = blockClientIds[0];
|
|
58
60
|
const {
|
|
59
|
-
|
|
61
|
+
firstParentClientId,
|
|
62
|
+
hasReducedUI,
|
|
63
|
+
onlyBlock,
|
|
64
|
+
parentBlockType,
|
|
65
|
+
previousBlockClientId,
|
|
66
|
+
nextBlockClientId,
|
|
67
|
+
selectedBlockClientIds
|
|
60
68
|
} = useSelect(select => {
|
|
61
69
|
const {
|
|
62
|
-
getBlockCount
|
|
70
|
+
getBlockCount,
|
|
71
|
+
getBlockName,
|
|
72
|
+
getBlockParents,
|
|
73
|
+
getPreviousBlockClientId,
|
|
74
|
+
getNextBlockClientId,
|
|
75
|
+
getSelectedBlockClientIds,
|
|
76
|
+
getSettings
|
|
63
77
|
} = select(blockEditorStore);
|
|
78
|
+
const parents = getBlockParents(firstBlockClientId);
|
|
79
|
+
const _firstParentClientId = parents[parents.length - 1];
|
|
80
|
+
const parentBlockName = getBlockName(_firstParentClientId);
|
|
64
81
|
return {
|
|
65
|
-
|
|
82
|
+
firstParentClientId: _firstParentClientId,
|
|
83
|
+
hasReducedUI: getSettings().hasReducedUI,
|
|
84
|
+
onlyBlock: 1 === getBlockCount(),
|
|
85
|
+
parentBlockType: getBlockType(parentBlockName),
|
|
86
|
+
previousBlockClientId: getPreviousBlockClientId(firstBlockClientId),
|
|
87
|
+
nextBlockClientId: getNextBlockClientId(firstBlockClientId),
|
|
88
|
+
selectedBlockClientIds: getSelectedBlockClientIds()
|
|
66
89
|
};
|
|
67
90
|
}, [firstBlockClientId]);
|
|
68
91
|
const shortcuts = useSelect(select => {
|
|
@@ -76,7 +99,11 @@ export function BlockSettingsDropdown(_ref2) {
|
|
|
76
99
|
insertBefore: getShortcutRepresentation('core/block-editor/insert-before')
|
|
77
100
|
};
|
|
78
101
|
}, []);
|
|
79
|
-
const
|
|
102
|
+
const {
|
|
103
|
+
selectBlock,
|
|
104
|
+
toggleBlockHighlight
|
|
105
|
+
} = useDispatch(blockEditorStore);
|
|
106
|
+
const updateSelectionAfterDuplicate = useCallback(__experimentalSelectBlock ? async clientIdsPromise => {
|
|
80
107
|
const ids = await clientIdsPromise;
|
|
81
108
|
|
|
82
109
|
if (ids && ids[0]) {
|
|
@@ -84,10 +111,38 @@ export function BlockSettingsDropdown(_ref2) {
|
|
|
84
111
|
}
|
|
85
112
|
} : noop, [__experimentalSelectBlock]);
|
|
86
113
|
const blockTitle = useBlockDisplayTitle(firstBlockClientId, 25);
|
|
114
|
+
const updateSelectionAfterRemove = useCallback(__experimentalSelectBlock ? () => {
|
|
115
|
+
const blockToSelect = previousBlockClientId || nextBlockClientId;
|
|
116
|
+
|
|
117
|
+
if (blockToSelect && // From the block options dropdown, it's possible to remove a block that is not selected,
|
|
118
|
+
// in this case, it's not necessary to update the selection since the selected block wasn't removed.
|
|
119
|
+
selectedBlockClientIds.includes(firstBlockClientId) && // Don't update selection when next/prev block also is in the selection ( and gets removed ),
|
|
120
|
+
// In case someone selects all blocks and removes them at once.
|
|
121
|
+
!selectedBlockClientIds.includes(blockToSelect)) {
|
|
122
|
+
__experimentalSelectBlock(blockToSelect);
|
|
123
|
+
}
|
|
124
|
+
} : noop, [__experimentalSelectBlock, previousBlockClientId, nextBlockClientId, selectedBlockClientIds]);
|
|
87
125
|
const label = sprintf(
|
|
88
126
|
/* translators: %s: block name */
|
|
89
127
|
__('Remove %s'), blockTitle);
|
|
90
|
-
const removeBlockLabel = count === 1 ? label : __('Remove blocks');
|
|
128
|
+
const removeBlockLabel = count === 1 ? label : __('Remove blocks'); // Allows highlighting the parent block outline when focusing or hovering
|
|
129
|
+
// the parent block selector within the child.
|
|
130
|
+
|
|
131
|
+
const selectParentButtonRef = useRef();
|
|
132
|
+
const {
|
|
133
|
+
gestures: showParentOutlineGestures
|
|
134
|
+
} = useShowMoversGestures({
|
|
135
|
+
ref: selectParentButtonRef,
|
|
136
|
+
|
|
137
|
+
onChange(isFocused) {
|
|
138
|
+
if (isFocused && hasReducedUI) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
toggleBlockHighlight(firstParentClientId, isFocused);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
});
|
|
91
146
|
return createElement(BlockActions, {
|
|
92
147
|
clientIds: clientIds,
|
|
93
148
|
__experimentalUpdateSelection: !__experimentalSelectBlock
|
|
@@ -119,13 +174,21 @@ export function BlockSettingsDropdown(_ref2) {
|
|
|
119
174
|
fillProps: {
|
|
120
175
|
onClose
|
|
121
176
|
}
|
|
122
|
-
}),
|
|
177
|
+
}), firstParentClientId !== undefined && createElement(MenuItem, _extends({}, showParentOutlineGestures, {
|
|
178
|
+
ref: selectParentButtonRef,
|
|
179
|
+
icon: createElement(BlockIcon, {
|
|
180
|
+
icon: parentBlockType.icon
|
|
181
|
+
}),
|
|
182
|
+
onClick: () => selectBlock(firstParentClientId)
|
|
183
|
+
}), sprintf(
|
|
184
|
+
/* translators: %s: Name of the block's parent. */
|
|
185
|
+
__('Select parent block (%s)'), parentBlockType.title)), count === 1 && createElement(BlockHTMLConvertButton, {
|
|
123
186
|
clientId: firstBlockClientId
|
|
124
187
|
}), createElement(CopyMenuItem, {
|
|
125
188
|
blocks: blocks,
|
|
126
189
|
onCopy: onCopy
|
|
127
190
|
}), canDuplicate && createElement(MenuItem, {
|
|
128
|
-
onClick: flow(onClose, onDuplicate,
|
|
191
|
+
onClick: flow(onClose, onDuplicate, updateSelectionAfterDuplicate),
|
|
129
192
|
shortcut: shortcuts.duplicate
|
|
130
193
|
}, __('Duplicate')), canInsertDefaultBlock && createElement(Fragment, null, createElement(MenuItem, {
|
|
131
194
|
onClick: flow(onClose, onInsertBefore),
|
|
@@ -148,7 +211,7 @@ export function BlockSettingsDropdown(_ref2) {
|
|
|
148
211
|
}) : Children.map(child => cloneElement(child, {
|
|
149
212
|
onClose
|
|
150
213
|
})), canRemove && createElement(MenuGroup, null, createElement(MenuItem, {
|
|
151
|
-
onClick: flow(onClose, onRemove,
|
|
214
|
+
onClick: flow(onClose, onRemove, updateSelectionAfterRemove),
|
|
152
215
|
shortcut: shortcuts.remove
|
|
153
216
|
}, removeBlockLabel)));
|
|
154
217
|
});
|