@wordpress/block-editor 12.17.0 → 12.18.1
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 +32 -0
- package/build/components/block-draggable/index.js +11 -3
- package/build/components/block-draggable/index.js.map +1 -1
- package/build/components/block-edit/context.js +3 -1
- package/build/components/block-edit/context.js.map +1 -1
- package/build/components/block-edit/index.js +4 -2
- package/build/components/block-edit/index.js.map +1 -1
- package/build/components/block-editing-mode/index.js +6 -3
- package/build/components/block-editing-mode/index.js.map +1 -1
- package/build/components/block-inspector/index.js +5 -2
- package/build/components/block-inspector/index.js.map +1 -1
- package/build/components/block-list/block.js +4 -3
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/block.native.js +9 -5
- package/build/components/block-list/block.native.js.map +1 -1
- package/build/components/block-list/index.js +30 -4
- package/build/components/block-list/index.js.map +1 -1
- package/build/components/block-list/private-block-context.js +1 -1
- package/build/components/block-list/private-block-context.js.map +1 -1
- package/build/components/block-list/use-in-between-inserter.js +1 -1
- package/build/components/block-list/use-in-between-inserter.js.map +1 -1
- package/build/components/block-lock/toolbar.js +8 -2
- package/build/components/block-lock/toolbar.js.map +1 -1
- package/build/components/block-popover/inbetween.js +15 -3
- package/build/components/block-popover/inbetween.js.map +1 -1
- package/build/components/block-preview/auto.js +1 -1
- package/build/components/block-preview/auto.js.map +1 -1
- package/build/components/block-removal-warning-modal/index.js +3 -2
- package/build/components/block-removal-warning-modal/index.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +2 -4
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-switcher/block-transformations-menu.js +12 -1
- package/build/components/block-switcher/block-transformations-menu.js.map +1 -1
- package/build/components/block-switcher/index.js +119 -90
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-tools/insertion-point.js +10 -3
- package/build/components/block-tools/insertion-point.js.map +1 -1
- package/build/components/dimensions-tool/aspect-ratio-tool.js +2 -1
- package/build/components/dimensions-tool/aspect-ratio-tool.js.map +1 -1
- package/build/components/font-sizes/fluid-utils.js +7 -1
- package/build/components/font-sizes/fluid-utils.js.map +1 -1
- package/build/components/global-styles/border-panel.js +5 -14
- package/build/components/global-styles/border-panel.js.map +1 -1
- package/build/components/global-styles/dimensions-panel.js +30 -5
- package/build/components/global-styles/dimensions-panel.js.map +1 -1
- package/build/components/global-styles/effects-panel.js +7 -1
- package/build/components/global-styles/effects-panel.js.map +1 -1
- package/build/components/global-styles/hooks.js +11 -8
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/typography-panel.js +31 -14
- package/build/components/global-styles/typography-panel.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +6 -0
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/iframe/get-compatibility-styles.js +99 -0
- package/build/components/iframe/get-compatibility-styles.js.map +1 -0
- package/build/components/iframe/index.js +2 -3
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/index.js +16 -2
- package/build/components/index.js.map +1 -1
- package/build/components/index.native.js +16 -2
- package/build/components/index.native.js.map +1 -1
- package/build/components/inspector-controls/groups.js +2 -0
- package/build/components/inspector-controls/groups.js.map +1 -1
- package/build/components/inspector-controls-tabs/styles-tab.js +3 -0
- package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
- package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +3 -2
- package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
- package/build/components/link-control/link-preview.js +30 -26
- package/build/components/link-control/link-preview.js.map +1 -1
- package/build/components/link-control/search-input.js +1 -9
- package/build/components/link-control/search-input.js.map +1 -1
- package/build/components/list-view/block-contents.js +3 -1
- package/build/components/list-view/block-contents.js.map +1 -1
- package/build/components/list-view/block.js +10 -1
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/branch.js +29 -8
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/drop-indicator.js +100 -32
- package/build/components/list-view/drop-indicator.js.map +1 -1
- package/build/components/list-view/index.js +52 -4
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/list-view/leaf.js +2 -2
- package/build/components/list-view/leaf.js.map +1 -1
- package/build/components/list-view/use-list-view-block-indexes.js +30 -0
- package/build/components/list-view/use-list-view-block-indexes.js.map +1 -0
- package/build/components/list-view/use-list-view-drop-zone.js +56 -5
- package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
- package/build/components/list-view/utils.js +92 -0
- package/build/components/list-view/utils.js.map +1 -1
- package/build/components/provider/index.js +1 -1
- package/build/components/provider/index.js.map +1 -1
- package/build/components/recursion-provider/index.js +21 -0
- package/build/components/recursion-provider/index.js.map +1 -1
- package/build/components/rich-text/index.js +30 -6
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/native/index.native.js +9 -9
- package/build/components/rich-text/native/index.native.js.map +1 -1
- package/build/components/use-block-drop-zone/index.js +30 -7
- package/build/components/use-block-drop-zone/index.js.map +1 -1
- package/build/components/use-on-block-drop/index.js +50 -8
- package/build/components/use-on-block-drop/index.js.map +1 -1
- package/build/hooks/block-hooks.js +5 -14
- package/build/hooks/block-hooks.js.map +1 -1
- package/build/hooks/content-lock-ui.js +17 -42
- package/build/hooks/content-lock-ui.js.map +1 -1
- package/build/hooks/dimensions.js +71 -1
- package/build/hooks/dimensions.js.map +1 -1
- package/build/hooks/effects.js +66 -0
- package/build/hooks/effects.js.map +1 -0
- package/build/hooks/index.js +17 -4
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/index.native.js +13 -0
- package/build/hooks/index.native.js.map +1 -1
- package/build/hooks/style.js +9 -2
- package/build/hooks/style.js.map +1 -1
- package/build/hooks/supports.js +2 -1
- package/build/hooks/supports.js.map +1 -1
- package/build/hooks/typography.native.js +2 -2
- package/build/hooks/typography.native.js.map +1 -1
- package/build/hooks/use-bindings-attributes.js +115 -0
- package/build/hooks/use-bindings-attributes.js.map +1 -0
- package/build/hooks/use-shadow-props.js +46 -0
- package/build/hooks/use-shadow-props.js.map +1 -0
- package/build/hooks/utils.js +12 -7
- package/build/hooks/utils.js.map +1 -1
- package/build/index.js +14 -0
- package/build/index.js.map +1 -1
- package/build/store/actions.js +10 -6
- package/build/store/actions.js.map +1 -1
- package/build/store/index.js +2 -0
- package/build/store/index.js.map +1 -1
- package/build/store/private-actions.js +37 -0
- package/build/store/private-actions.js.map +1 -1
- package/build/store/private-selectors.js +60 -9
- package/build/store/private-selectors.js.map +1 -1
- package/build/store/reducer.js +44 -3
- package/build/store/reducer.js.map +1 -1
- package/build/store/resolvers.js +27 -0
- package/build/store/resolvers.js.map +1 -0
- package/build/store/selectors.js +94 -56
- package/build/store/selectors.js.map +1 -1
- package/build/store/utils.js +5 -26
- package/build/store/utils.js.map +1 -1
- package/build/utils/index.js +0 -16
- package/build/utils/index.js.map +1 -1
- package/build/utils/math.js +13 -0
- package/build/utils/math.js.map +1 -1
- package/build/utils/object.js +17 -0
- package/build/utils/object.js.map +1 -1
- package/build/utils/transform-styles/index.js +37 -27
- package/build/utils/transform-styles/index.js.map +1 -1
- package/build-module/components/block-draggable/index.js +11 -3
- package/build-module/components/block-draggable/index.js.map +1 -1
- package/build-module/components/block-edit/context.js +1 -0
- package/build-module/components/block-edit/context.js.map +1 -1
- package/build-module/components/block-edit/index.js +5 -3
- package/build-module/components/block-edit/index.js.map +1 -1
- package/build-module/components/block-editing-mode/index.js +7 -4
- package/build-module/components/block-editing-mode/index.js.map +1 -1
- package/build-module/components/block-inspector/index.js +5 -2
- package/build-module/components/block-inspector/index.js.map +1 -1
- package/build-module/components/block-list/block.js +6 -5
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/block.native.js +11 -7
- package/build-module/components/block-list/block.native.js.map +1 -1
- package/build-module/components/block-list/index.js +31 -5
- package/build-module/components/block-list/index.js.map +1 -1
- package/build-module/components/block-list/private-block-context.js +1 -1
- package/build-module/components/block-list/private-block-context.js.map +1 -1
- package/build-module/components/block-list/use-in-between-inserter.js +1 -1
- package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
- package/build-module/components/block-lock/toolbar.js +8 -2
- package/build-module/components/block-lock/toolbar.js.map +1 -1
- package/build-module/components/block-popover/inbetween.js +15 -3
- package/build-module/components/block-popover/inbetween.js.map +1 -1
- package/build-module/components/block-preview/auto.js +3 -3
- package/build-module/components/block-preview/auto.js.map +1 -1
- package/build-module/components/block-removal-warning-modal/index.js +3 -2
- package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +2 -4
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-switcher/block-transformations-menu.js +12 -1
- package/build-module/components/block-switcher/block-transformations-menu.js.map +1 -1
- package/build-module/components/block-switcher/index.js +116 -86
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-tools/insertion-point.js +10 -3
- package/build-module/components/block-tools/insertion-point.js.map +1 -1
- package/build-module/components/dimensions-tool/aspect-ratio-tool.js +2 -1
- package/build-module/components/dimensions-tool/aspect-ratio-tool.js.map +1 -1
- package/build-module/components/font-sizes/fluid-utils.js +7 -1
- package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
- package/build-module/components/global-styles/border-panel.js +5 -14
- package/build-module/components/global-styles/border-panel.js.map +1 -1
- package/build-module/components/global-styles/dimensions-panel.js +30 -5
- package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
- package/build-module/components/global-styles/effects-panel.js +7 -1
- package/build-module/components/global-styles/effects-panel.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +11 -8
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/typography-panel.js +32 -15
- package/build-module/components/global-styles/typography-panel.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +6 -0
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/iframe/get-compatibility-styles.js +93 -0
- package/build-module/components/iframe/get-compatibility-styles.js.map +1 -0
- package/build-module/components/iframe/index.js +2 -3
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/index.js +1 -1
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/index.native.js +1 -1
- package/build-module/components/index.native.js.map +1 -1
- package/build-module/components/inspector-controls/groups.js +2 -0
- package/build-module/components/inspector-controls/groups.js.map +1 -1
- package/build-module/components/inspector-controls-tabs/styles-tab.js +3 -0
- package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
- package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +3 -2
- package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
- package/build-module/components/link-control/link-preview.js +32 -28
- package/build-module/components/link-control/link-preview.js.map +1 -1
- package/build-module/components/link-control/search-input.js +1 -8
- package/build-module/components/link-control/search-input.js.map +1 -1
- package/build-module/components/list-view/block-contents.js +3 -1
- package/build-module/components/list-view/block-contents.js.map +1 -1
- package/build-module/components/list-view/block.js +10 -1
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/branch.js +30 -9
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/drop-indicator.js +99 -32
- package/build-module/components/list-view/drop-indicator.js.map +1 -1
- package/build-module/components/list-view/index.js +54 -6
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/list-view/leaf.js +2 -2
- package/build-module/components/list-view/leaf.js.map +1 -1
- package/build-module/components/list-view/use-list-view-block-indexes.js +23 -0
- package/build-module/components/list-view/use-list-view-block-indexes.js.map +1 -0
- package/build-module/components/list-view/use-list-view-drop-zone.js +58 -7
- package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
- package/build-module/components/list-view/utils.js +91 -0
- package/build-module/components/list-view/utils.js.map +1 -1
- package/build-module/components/provider/index.js +1 -1
- package/build-module/components/provider/index.js.map +1 -1
- package/build-module/components/recursion-provider/index.js +17 -0
- package/build-module/components/recursion-provider/index.js.map +1 -1
- package/build-module/components/rich-text/index.js +30 -6
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/native/index.native.js +9 -9
- package/build-module/components/rich-text/native/index.native.js.map +1 -1
- package/build-module/components/use-block-drop-zone/index.js +31 -8
- package/build-module/components/use-block-drop-zone/index.js.map +1 -1
- package/build-module/components/use-on-block-drop/index.js +51 -9
- package/build-module/components/use-on-block-drop/index.js.map +1 -1
- package/build-module/hooks/block-hooks.js +5 -14
- package/build-module/hooks/block-hooks.js.map +1 -1
- package/build-module/hooks/content-lock-ui.js +19 -43
- package/build-module/hooks/content-lock-ui.js.map +1 -1
- package/build-module/hooks/dimensions.js +70 -2
- package/build-module/hooks/dimensions.js.map +1 -1
- package/build-module/hooks/effects.js +51 -0
- package/build-module/hooks/effects.js.map +1 -0
- package/build-module/hooks/index.js +5 -3
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/index.native.js +1 -0
- package/build-module/hooks/index.native.js.map +1 -1
- package/build-module/hooks/style.js +9 -2
- package/build-module/hooks/style.js.map +1 -1
- package/build-module/hooks/supports.js +2 -1
- package/build-module/hooks/supports.js.map +1 -1
- package/build-module/hooks/typography.native.js +2 -2
- package/build-module/hooks/typography.native.js.map +1 -1
- package/build-module/hooks/use-bindings-attributes.js +112 -0
- package/build-module/hooks/use-bindings-attributes.js.map +1 -0
- package/build-module/hooks/use-shadow-props.js +39 -0
- package/build-module/hooks/use-shadow-props.js.map +1 -0
- package/build-module/hooks/utils.js +14 -9
- 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/store/actions.js +10 -6
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/index.js +2 -0
- package/build-module/store/index.js.map +1 -1
- package/build-module/store/private-actions.js +35 -0
- package/build-module/store/private-actions.js.map +1 -1
- package/build-module/store/private-selectors.js +53 -8
- package/build-module/store/private-selectors.js.map +1 -1
- package/build-module/store/reducer.js +43 -3
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/resolvers.js +20 -0
- package/build-module/store/resolvers.js.map +1 -0
- package/build-module/store/selectors.js +89 -52
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/store/utils.js +3 -23
- package/build-module/store/utils.js.map +1 -1
- package/build-module/utils/index.js +0 -1
- package/build-module/utils/index.js.map +1 -1
- package/build-module/utils/math.js +12 -0
- package/build-module/utils/math.js.map +1 -1
- package/build-module/utils/object.js +16 -0
- package/build-module/utils/object.js.map +1 -1
- package/build-module/utils/transform-styles/index.js +36 -27
- package/build-module/utils/transform-styles/index.js.map +1 -1
- package/build-style/content-rtl.css +33 -16
- package/build-style/content.css +33 -16
- package/build-style/default-editor-styles-rtl.css +1 -1
- package/build-style/default-editor-styles.css +1 -1
- package/build-style/style-rtl.css +169 -114
- package/build-style/style.css +169 -114
- package/package.json +31 -31
- package/src/components/block-canvas/style.scss +8 -1
- package/src/components/block-draggable/index.js +16 -5
- package/src/components/block-edit/context.js +1 -0
- package/src/components/block-edit/index.js +4 -0
- package/src/components/block-editing-mode/index.js +12 -7
- package/src/components/block-inspector/index.js +5 -2
- package/src/components/block-list/block.js +5 -4
- package/src/components/block-list/block.native.js +13 -3
- package/src/components/block-list/content.scss +34 -5
- package/src/components/block-list/index.js +52 -16
- package/src/components/block-list/private-block-context.js +1 -1
- package/src/components/block-list/use-in-between-inserter.js +1 -2
- package/src/components/block-lock/toolbar.js +10 -2
- package/src/components/block-popover/inbetween.js +22 -2
- package/src/components/block-preview/auto.js +3 -3
- package/src/components/block-removal-warning-modal/index.js +3 -2
- package/src/components/block-settings-menu/block-settings-dropdown.js +2 -7
- package/src/components/block-switcher/block-transformations-menu.js +18 -1
- package/src/components/block-switcher/index.js +133 -111
- package/src/components/block-switcher/style.scss +6 -4
- package/src/components/block-switcher/test/index.js +113 -230
- package/src/components/block-toolbar/style.scss +22 -18
- package/src/components/block-tools/insertion-point.js +15 -2
- package/src/components/block-tools/style.scss +8 -7
- package/src/components/dimensions-tool/aspect-ratio-tool.js +4 -1
- package/src/components/font-sizes/fluid-utils.js +8 -2
- package/src/components/font-sizes/test/fluid-utils.js +9 -0
- package/src/components/global-styles/border-panel.js +7 -17
- package/src/components/global-styles/dimensions-panel.js +50 -1
- package/src/components/global-styles/effects-panel.js +16 -1
- package/src/components/global-styles/hooks.js +11 -6
- package/src/components/global-styles/typography-panel.js +45 -13
- package/src/components/global-styles/use-global-styles-output.js +6 -0
- package/src/components/iframe/get-compatibility-styles.js +120 -0
- package/src/components/iframe/index.js +2 -3
- package/src/components/index.js +4 -2
- package/src/components/index.native.js +4 -2
- package/src/components/inspector-controls/groups.js +2 -0
- package/src/components/inspector-controls-tabs/styles-tab.js +1 -0
- package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +2 -0
- package/src/components/link-control/link-preview.js +31 -55
- package/src/components/link-control/search-input.js +1 -9
- package/src/components/link-control/style.scss +31 -85
- package/src/components/link-control/test/index.js +2 -1
- package/src/components/list-view/block-contents.js +5 -1
- package/src/components/list-view/block.js +9 -0
- package/src/components/list-view/branch.js +30 -10
- package/src/components/list-view/drop-indicator.js +139 -46
- package/src/components/list-view/index.js +74 -3
- package/src/components/list-view/leaf.js +2 -2
- package/src/components/list-view/style.scss +102 -13
- package/src/components/list-view/test/use-list-view-drop-zone.js +4 -0
- package/src/components/list-view/test/utils.js +218 -1
- package/src/components/list-view/use-list-view-block-indexes.js +29 -0
- package/src/components/list-view/use-list-view-drop-zone.js +78 -6
- package/src/components/list-view/utils.js +116 -0
- package/src/components/provider/index.js +3 -1
- package/src/components/recursion-provider/README.md +2 -2
- package/src/components/recursion-provider/index.js +17 -0
- package/src/components/rich-text/index.js +48 -10
- package/src/components/rich-text/native/index.native.js +10 -10
- package/src/components/use-block-drop-zone/index.js +60 -19
- package/src/components/use-block-drop-zone/test/index.js +32 -61
- package/src/components/use-on-block-drop/index.js +92 -11
- package/src/hooks/block-hooks.js +5 -17
- package/src/hooks/content-lock-ui.js +15 -55
- package/src/hooks/dimensions.js +74 -3
- package/src/hooks/effects.js +57 -0
- package/src/hooks/index.js +4 -2
- package/src/hooks/index.native.js +1 -0
- package/src/hooks/style.js +12 -0
- package/src/hooks/supports.js +2 -0
- package/src/hooks/test/effects.js +39 -0
- package/src/hooks/typography.native.js +2 -2
- package/src/hooks/use-bindings-attributes.js +148 -0
- package/src/hooks/use-shadow-props.js +37 -0
- package/src/hooks/utils.js +30 -10
- package/src/index.js +2 -0
- package/src/store/actions.js +9 -4
- package/src/store/index.js +2 -0
- package/src/store/private-actions.js +32 -0
- package/src/store/private-selectors.js +78 -21
- package/src/store/reducer.js +49 -2
- package/src/store/resolvers.js +17 -0
- package/src/store/selectors.js +169 -161
- package/src/store/test/registry-selectors.js +431 -0
- package/src/store/test/selectors.js +14 -400
- package/src/store/utils.js +10 -33
- package/src/style.scss +0 -1
- package/src/utils/index.js +0 -1
- package/src/utils/math.js +12 -0
- package/src/utils/object.js +16 -0
- package/src/utils/transform-styles/index.js +52 -37
- package/tsconfig.tsbuildinfo +1 -1
- package/build/components/iframe/use-compatibility-styles.js +0 -100
- package/build/components/iframe/use-compatibility-styles.js.map +0 -1
- package/build/hooks/custom-fields.js +0 -106
- package/build/hooks/custom-fields.js.map +0 -1
- package/build/utils/block-variation-transforms.js +0 -42
- package/build/utils/block-variation-transforms.js.map +0 -1
- package/build-module/components/iframe/use-compatibility-styles.js +0 -94
- package/build-module/components/iframe/use-compatibility-styles.js.map +0 -1
- package/build-module/hooks/custom-fields.js +0 -99
- package/build-module/hooks/custom-fields.js.map +0 -1
- package/build-module/utils/block-variation-transforms.js +0 -35
- package/build-module/utils/block-variation-transforms.js.map +0 -1
- package/src/components/block-switcher/test/__snapshots__/index.js.snap +0 -116
- package/src/components/contrast-checker/style.scss +0 -3
- package/src/components/iframe/use-compatibility-styles.js +0 -122
- package/src/hooks/custom-fields.js +0 -115
- package/src/utils/block-variation-transforms.js +0 -38
- package/src/utils/test/block-variation-transforms.js +0 -94
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useResizeObserver","
|
|
1
|
+
{"version":3,"names":["useResizeObserver","useRefEffect","useSelect","memo","useMemo","Disabled","BlockList","Iframe","EditorStyles","store","MemoizedBlockList","MAX_HEIGHT","ScaledBlockPreview","viewportWidth","containerWidth","minHeight","additionalStyles","contentResizeListener","height","contentHeight","styles","select","settings","getSettings","editorStyles","css","__unstableType","scale","aspectRatio","createElement","className","style","transform","maxHeight","undefined","contentRef","bodyElement","ownerDocument","documentElement","classList","add","position","width","boxSizing","tabIndex","pointerEvents","renderAppender","AutoBlockPreview","props","containerResizeListener","Fragment"],"sources":["@wordpress/block-editor/src/components/block-preview/auto.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useResizeObserver, useRefEffect } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { memo, useMemo } from '@wordpress/element';\nimport { Disabled } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockList from '../block-list';\nimport Iframe from '../iframe';\nimport EditorStyles from '../editor-styles';\nimport { store } from '../../store';\n\n// This is used to avoid rendering the block list if the sizes change.\nlet MemoizedBlockList;\n\nconst MAX_HEIGHT = 2000;\n\nfunction ScaledBlockPreview( {\n\tviewportWidth,\n\tcontainerWidth,\n\tminHeight,\n\tadditionalStyles = [],\n} ) {\n\tif ( ! viewportWidth ) {\n\t\tviewportWidth = containerWidth;\n\t}\n\n\tconst [ contentResizeListener, { height: contentHeight } ] =\n\t\tuseResizeObserver();\n\tconst { styles } = useSelect( ( select ) => {\n\t\tconst settings = select( store ).getSettings();\n\t\treturn {\n\t\t\tstyles: settings.styles,\n\t\t};\n\t}, [] );\n\n\t// Avoid scrollbars for pattern previews.\n\tconst editorStyles = useMemo( () => {\n\t\tif ( styles ) {\n\t\t\treturn [\n\t\t\t\t...styles,\n\t\t\t\t{\n\t\t\t\t\tcss: 'body{height:auto;overflow:hidden;border:none;padding:0;}',\n\t\t\t\t\t__unstableType: 'presets',\n\t\t\t\t},\n\t\t\t\t...additionalStyles,\n\t\t\t];\n\t\t}\n\n\t\treturn styles;\n\t}, [ styles, additionalStyles ] );\n\n\t// Initialize on render instead of module top level, to avoid circular dependency issues.\n\tMemoizedBlockList = MemoizedBlockList || memo( BlockList );\n\n\tconst scale = containerWidth / viewportWidth;\n\tconst aspectRatio = contentHeight\n\t\t? containerWidth / ( contentHeight * scale )\n\t\t: 0;\n\treturn (\n\t\t<Disabled\n\t\t\tclassName=\"block-editor-block-preview__content\"\n\t\t\tstyle={ {\n\t\t\t\ttransform: `scale(${ scale })`,\n\t\t\t\t// Using width + aspect-ratio instead of height here triggers browsers' native\n\t\t\t\t// handling of scrollbar's visibility. It prevents the flickering issue seen\n\t\t\t\t// in https://github.com/WordPress/gutenberg/issues/52027.\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/52921 for more info.\n\t\t\t\taspectRatio,\n\t\t\t\tmaxHeight:\n\t\t\t\t\tcontentHeight > MAX_HEIGHT ? MAX_HEIGHT * scale : undefined,\n\t\t\t\tminHeight,\n\t\t\t} }\n\t\t>\n\t\t\t<Iframe\n\t\t\t\tcontentRef={ useRefEffect( ( bodyElement ) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\townerDocument: { documentElement },\n\t\t\t\t\t} = bodyElement;\n\t\t\t\t\tdocumentElement.classList.add(\n\t\t\t\t\t\t'block-editor-block-preview__content-iframe'\n\t\t\t\t\t);\n\t\t\t\t\tdocumentElement.style.position = 'absolute';\n\t\t\t\t\tdocumentElement.style.width = '100%';\n\n\t\t\t\t\t// Necessary for contentResizeListener to work.\n\t\t\t\t\tbodyElement.style.boxSizing = 'border-box';\n\t\t\t\t\tbodyElement.style.position = 'absolute';\n\t\t\t\t\tbodyElement.style.width = '100%';\n\t\t\t\t}, [] ) }\n\t\t\t\taria-hidden\n\t\t\t\ttabIndex={ -1 }\n\t\t\t\tstyle={ {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\twidth: viewportWidth,\n\t\t\t\t\theight: contentHeight,\n\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t// This is a catch-all max-height for patterns.\n\t\t\t\t\t// See: https://github.com/WordPress/gutenberg/pull/38175.\n\t\t\t\t\tmaxHeight: MAX_HEIGHT,\n\t\t\t\t\tminHeight:\n\t\t\t\t\t\tscale !== 0 && scale < 1 && minHeight\n\t\t\t\t\t\t\t? minHeight / scale\n\t\t\t\t\t\t\t: minHeight,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<EditorStyles styles={ editorStyles } />\n\t\t\t\t{ contentResizeListener }\n\t\t\t\t<MemoizedBlockList renderAppender={ false } />\n\t\t\t</Iframe>\n\t\t</Disabled>\n\t);\n}\n\nexport default function AutoBlockPreview( props ) {\n\tconst [ containerResizeListener, { width: containerWidth } ] =\n\t\tuseResizeObserver();\n\n\treturn (\n\t\t<>\n\t\t\t<div style={ { position: 'relative', width: '100%', height: 0 } }>\n\t\t\t\t{ containerResizeListener }\n\t\t\t</div>\n\t\t\t<div className=\"block-editor-block-preview__container\">\n\t\t\t\t{ !! containerWidth && (\n\t\t\t\t\t<ScaledBlockPreview\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t\tcontainerWidth={ containerWidth }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,iBAAiB,EAAEC,YAAY,QAAQ,oBAAoB;AACpE,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,IAAI,EAAEC,OAAO,QAAQ,oBAAoB;AAClD,SAASC,QAAQ,QAAQ,uBAAuB;;AAEhD;AACA;AACA;AACA,OAAOC,SAAS,MAAM,eAAe;AACrC,OAAOC,MAAM,MAAM,WAAW;AAC9B,OAAOC,YAAY,MAAM,kBAAkB;AAC3C,SAASC,KAAK,QAAQ,aAAa;;AAEnC;AACA,IAAIC,iBAAiB;AAErB,MAAMC,UAAU,GAAG,IAAI;AAEvB,SAASC,kBAAkBA,CAAE;EAC5BC,aAAa;EACbC,cAAc;EACdC,SAAS;EACTC,gBAAgB,GAAG;AACpB,CAAC,EAAG;EACH,IAAK,CAAEH,aAAa,EAAG;IACtBA,aAAa,GAAGC,cAAc;EAC/B;EAEA,MAAM,CAAEG,qBAAqB,EAAE;IAAEC,MAAM,EAAEC;EAAc,CAAC,CAAE,GACzDnB,iBAAiB,CAAC,CAAC;EACpB,MAAM;IAAEoB;EAAO,CAAC,GAAGlB,SAAS,CAAImB,MAAM,IAAM;IAC3C,MAAMC,QAAQ,GAAGD,MAAM,CAAEZ,KAAM,CAAC,CAACc,WAAW,CAAC,CAAC;IAC9C,OAAO;MACNH,MAAM,EAAEE,QAAQ,CAACF;IAClB,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;;EAEP;EACA,MAAMI,YAAY,GAAGpB,OAAO,CAAE,MAAM;IACnC,IAAKgB,MAAM,EAAG;MACb,OAAO,CACN,GAAGA,MAAM,EACT;QACCK,GAAG,EAAE,0DAA0D;QAC/DC,cAAc,EAAE;MACjB,CAAC,EACD,GAAGV,gBAAgB,CACnB;IACF;IAEA,OAAOI,MAAM;EACd,CAAC,EAAE,CAAEA,MAAM,EAAEJ,gBAAgB,CAAG,CAAC;;EAEjC;EACAN,iBAAiB,GAAGA,iBAAiB,IAAIP,IAAI,CAAEG,SAAU,CAAC;EAE1D,MAAMqB,KAAK,GAAGb,cAAc,GAAGD,aAAa;EAC5C,MAAMe,WAAW,GAAGT,aAAa,GAC9BL,cAAc,IAAKK,aAAa,GAAGQ,KAAK,CAAE,GAC1C,CAAC;EACJ,OACCE,aAAA,CAACxB,QAAQ;IACRyB,SAAS,EAAC,qCAAqC;IAC/CC,KAAK,EAAG;MACPC,SAAS,EAAG,SAASL,KAAO,GAAE;MAC9B;MACA;MACA;MACA;MACAC,WAAW;MACXK,SAAS,EACRd,aAAa,GAAGR,UAAU,GAAGA,UAAU,GAAGgB,KAAK,GAAGO,SAAS;MAC5DnB;IACD;EAAG,GAEHc,aAAA,CAACtB,MAAM;IACN4B,UAAU,EAAGlC,YAAY,CAAImC,WAAW,IAAM;MAC7C,MAAM;QACLC,aAAa,EAAE;UAAEC;QAAgB;MAClC,CAAC,GAAGF,WAAW;MACfE,eAAe,CAACC,SAAS,CAACC,GAAG,CAC5B,4CACD,CAAC;MACDF,eAAe,CAACP,KAAK,CAACU,QAAQ,GAAG,UAAU;MAC3CH,eAAe,CAACP,KAAK,CAACW,KAAK,GAAG,MAAM;;MAEpC;MACAN,WAAW,CAACL,KAAK,CAACY,SAAS,GAAG,YAAY;MAC1CP,WAAW,CAACL,KAAK,CAACU,QAAQ,GAAG,UAAU;MACvCL,WAAW,CAACL,KAAK,CAACW,KAAK,GAAG,MAAM;IACjC,CAAC,EAAE,EAAG,CAAG;IACT,mBAAW;IACXE,QAAQ,EAAG,CAAC,CAAG;IACfb,KAAK,EAAG;MACPU,QAAQ,EAAE,UAAU;MACpBC,KAAK,EAAE7B,aAAa;MACpBK,MAAM,EAAEC,aAAa;MACrB0B,aAAa,EAAE,MAAM;MACrB;MACA;MACAZ,SAAS,EAAEtB,UAAU;MACrBI,SAAS,EACRY,KAAK,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,IAAIZ,SAAS,GAClCA,SAAS,GAAGY,KAAK,GACjBZ;IACL;EAAG,GAEHc,aAAA,CAACrB,YAAY;IAACY,MAAM,EAAGI;EAAc,CAAE,CAAC,EACtCP,qBAAqB,EACvBY,aAAA,CAACnB,iBAAiB;IAACoC,cAAc,EAAG;EAAO,CAAE,CACtC,CACC,CAAC;AAEb;AAEA,eAAe,SAASC,gBAAgBA,CAAEC,KAAK,EAAG;EACjD,MAAM,CAAEC,uBAAuB,EAAE;IAAEP,KAAK,EAAE5B;EAAe,CAAC,CAAE,GAC3Dd,iBAAiB,CAAC,CAAC;EAEpB,OACC6B,aAAA,CAAAqB,QAAA,QACCrB,aAAA;IAAKE,KAAK,EAAG;MAAEU,QAAQ,EAAE,UAAU;MAAEC,KAAK,EAAE,MAAM;MAAExB,MAAM,EAAE;IAAE;EAAG,GAC9D+B,uBACE,CAAC,EACNpB,aAAA;IAAKC,SAAS,EAAC;EAAuC,GACnD,CAAC,CAAEhB,cAAc,IAClBe,aAAA,CAACjB,kBAAkB;IAAA,GACboC,KAAK;IACVlC,cAAc,EAAGA;EAAgB,CACjC,CAEE,CACJ,CAAC;AAEL"}
|
|
@@ -43,8 +43,9 @@ export function BlockRemovalWarningModal({
|
|
|
43
43
|
};
|
|
44
44
|
return createElement(Modal, {
|
|
45
45
|
title: __('Be careful!'),
|
|
46
|
-
onRequestClose: clearBlockRemovalPrompt
|
|
47
|
-
|
|
46
|
+
onRequestClose: clearBlockRemovalPrompt,
|
|
47
|
+
size: "medium"
|
|
48
|
+
}, createElement("p", null, _n('Deleting this block will stop your post or page content from displaying on this template. It is not recommended.', 'Deleting these blocks will stop your post or page content from displaying on this template. It is not recommended.', blockNamesForPrompt.length)), createElement(HStack, {
|
|
48
49
|
justify: "right"
|
|
49
50
|
}, createElement(Button, {
|
|
50
51
|
variant: "tertiary",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useDispatch","useSelect","Modal","Button","__experimentalHStack","HStack","__","_n","store","blockEditorStore","unlock","BlockRemovalWarningModal","rules","clientIds","selectPrevious","blockNamesForPrompt","select","getRemovalPromptData","clearBlockRemovalPrompt","setBlockRemovalRules","privateRemoveBlocks","onConfirmRemoval","createElement","title","onRequestClose","length","justify","variant","onClick"],"sources":["@wordpress/block-editor/src/components/block-removal-warning-modal/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tModal,\n\tButton,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __, _n } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport function BlockRemovalWarningModal( { rules } ) {\n\tconst { clientIds, selectPrevious, blockNamesForPrompt } = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).getRemovalPromptData()\n\t);\n\n\tconst {\n\t\tclearBlockRemovalPrompt,\n\t\tsetBlockRemovalRules,\n\t\tprivateRemoveBlocks,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\t// Load block removal rules, simultaneously signalling that the block\n\t// removal prompt is in place.\n\tuseEffect( () => {\n\t\tsetBlockRemovalRules( rules );\n\t\treturn () => {\n\t\t\tsetBlockRemovalRules();\n\t\t};\n\t}, [ rules, setBlockRemovalRules ] );\n\n\tif ( ! blockNamesForPrompt ) {\n\t\treturn;\n\t}\n\n\tconst onConfirmRemoval = () => {\n\t\tprivateRemoveBlocks( clientIds, selectPrevious, /* force */ true );\n\t\tclearBlockRemovalPrompt();\n\t};\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ __( 'Be careful!' ) }\n\t\t\tonRequestClose={ clearBlockRemovalPrompt }\n\t\t>\n\t\t\t<p>\n\t\t\t\t{ _n(\n\t\t\t\t\t'
|
|
1
|
+
{"version":3,"names":["useEffect","useDispatch","useSelect","Modal","Button","__experimentalHStack","HStack","__","_n","store","blockEditorStore","unlock","BlockRemovalWarningModal","rules","clientIds","selectPrevious","blockNamesForPrompt","select","getRemovalPromptData","clearBlockRemovalPrompt","setBlockRemovalRules","privateRemoveBlocks","onConfirmRemoval","createElement","title","onRequestClose","size","length","justify","variant","onClick"],"sources":["@wordpress/block-editor/src/components/block-removal-warning-modal/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tModal,\n\tButton,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __, _n } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport function BlockRemovalWarningModal( { rules } ) {\n\tconst { clientIds, selectPrevious, blockNamesForPrompt } = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).getRemovalPromptData()\n\t);\n\n\tconst {\n\t\tclearBlockRemovalPrompt,\n\t\tsetBlockRemovalRules,\n\t\tprivateRemoveBlocks,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\t// Load block removal rules, simultaneously signalling that the block\n\t// removal prompt is in place.\n\tuseEffect( () => {\n\t\tsetBlockRemovalRules( rules );\n\t\treturn () => {\n\t\t\tsetBlockRemovalRules();\n\t\t};\n\t}, [ rules, setBlockRemovalRules ] );\n\n\tif ( ! blockNamesForPrompt ) {\n\t\treturn;\n\t}\n\n\tconst onConfirmRemoval = () => {\n\t\tprivateRemoveBlocks( clientIds, selectPrevious, /* force */ true );\n\t\tclearBlockRemovalPrompt();\n\t};\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ __( 'Be careful!' ) }\n\t\t\tonRequestClose={ clearBlockRemovalPrompt }\n\t\t\tsize=\"medium\"\n\t\t>\n\t\t\t<p>\n\t\t\t\t{ _n(\n\t\t\t\t\t'Deleting this block will stop your post or page content from displaying on this template. It is not recommended.',\n\t\t\t\t\t'Deleting these blocks will stop your post or page content from displaying on this template. It is not recommended.',\n\t\t\t\t\tblockNamesForPrompt.length\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<HStack justify=\"right\">\n\t\t\t\t<Button variant=\"tertiary\" onClick={ clearBlockRemovalPrompt }>\n\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"primary\" onClick={ onConfirmRemoval }>\n\t\t\t\t\t{ __( 'Delete' ) }\n\t\t\t\t</Button>\n\t\t\t</HStack>\n\t\t</Modal>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,oBAAoB;AAC9C,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SACCC,KAAK,EACLC,MAAM,EACNC,oBAAoB,IAAIC,MAAM,QACxB,uBAAuB;AAC9B,SAASC,EAAE,EAAEC,EAAE,QAAQ,iBAAiB;;AAExC;AACA;AACA;AACA,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,aAAa;AACvD,SAASC,MAAM,QAAQ,mBAAmB;AAE1C,OAAO,SAASC,wBAAwBA,CAAE;EAAEC;AAAM,CAAC,EAAG;EACrD,MAAM;IAAEC,SAAS;IAAEC,cAAc;IAAEC;EAAoB,CAAC,GAAGd,SAAS,CACjEe,MAAM,IACPN,MAAM,CAAEM,MAAM,CAAEP,gBAAiB,CAAE,CAAC,CAACQ,oBAAoB,CAAC,CAC5D,CAAC;EAED,MAAM;IACLC,uBAAuB;IACvBC,oBAAoB;IACpBC;EACD,CAAC,GAAGV,MAAM,CAAEV,WAAW,CAAES,gBAAiB,CAAE,CAAC;;EAE7C;EACA;EACAV,SAAS,CAAE,MAAM;IAChBoB,oBAAoB,CAAEP,KAAM,CAAC;IAC7B,OAAO,MAAM;MACZO,oBAAoB,CAAC,CAAC;IACvB,CAAC;EACF,CAAC,EAAE,CAAEP,KAAK,EAAEO,oBAAoB,CAAG,CAAC;EAEpC,IAAK,CAAEJ,mBAAmB,EAAG;IAC5B;EACD;EAEA,MAAMM,gBAAgB,GAAGA,CAAA,KAAM;IAC9BD,mBAAmB,CAAEP,SAAS,EAAEC,cAAc,EAAE,WAAY,IAAK,CAAC;IAClEI,uBAAuB,CAAC,CAAC;EAC1B,CAAC;EAED,OACCI,aAAA,CAACpB,KAAK;IACLqB,KAAK,EAAGjB,EAAE,CAAE,aAAc,CAAG;IAC7BkB,cAAc,EAAGN,uBAAyB;IAC1CO,IAAI,EAAC;EAAQ,GAEbH,aAAA,YACGf,EAAE,CACH,kHAAkH,EAClH,oHAAoH,EACpHQ,mBAAmB,CAACW,MACrB,CACE,CAAC,EACJJ,aAAA,CAACjB,MAAM;IAACsB,OAAO,EAAC;EAAO,GACtBL,aAAA,CAACnB,MAAM;IAACyB,OAAO,EAAC,UAAU;IAACC,OAAO,EAAGX;EAAyB,GAC3DZ,EAAE,CAAE,QAAS,CACR,CAAC,EACTgB,aAAA,CAACnB,MAAM;IAACyB,OAAO,EAAC,SAAS;IAACC,OAAO,EAAGR;EAAkB,GACnDf,EAAE,CAAE,QAAS,CACR,CACD,CACF,CAAC;AAEV"}
|
|
@@ -32,8 +32,7 @@ function CopyMenuItem({
|
|
|
32
32
|
label
|
|
33
33
|
}) {
|
|
34
34
|
const ref = useCopyToClipboard(() => serialize(blocks), onCopy);
|
|
35
|
-
const
|
|
36
|
-
const copyMenuItemLabel = label ? label : copyMenuItemBlocksLabel;
|
|
35
|
+
const copyMenuItemLabel = label ? label : __('Copy');
|
|
37
36
|
return createElement(MenuItem, {
|
|
38
37
|
ref: ref
|
|
39
38
|
}, copyMenuItemLabel);
|
|
@@ -151,7 +150,6 @@ export function BlockSettingsDropdown({
|
|
|
151
150
|
__experimentalSelectBlock(blockToFocus, shouldUpdateSelection);
|
|
152
151
|
}
|
|
153
152
|
}, [__experimentalSelectBlock, previousBlockClientId, firstParentClientId, getBlockOrder, hasSelectedBlocks, getSelectedBlockClientIds]);
|
|
154
|
-
const removeBlockLabel = count === 1 ? __('Delete') : __('Delete blocks');
|
|
155
153
|
|
|
156
154
|
// This can occur when the selected block (the parent)
|
|
157
155
|
// displays child blocks within a List View.
|
|
@@ -268,7 +266,7 @@ export function BlockSettingsDropdown({
|
|
|
268
266
|
})), canRemove && createElement(MenuGroup, null, createElement(MenuItem, {
|
|
269
267
|
onClick: pipe(onClose, onRemove, updateSelectionAfterRemove),
|
|
270
268
|
shortcut: shortcuts.remove
|
|
271
|
-
},
|
|
269
|
+
}, __('Delete'))))));
|
|
272
270
|
}
|
|
273
271
|
export default BlockSettingsDropdown;
|
|
274
272
|
//# sourceMappingURL=block-settings-dropdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getBlockType","serialize","store","blocksStore","DropdownMenu","MenuGroup","MenuItem","useDispatch","useSelect","moreVertical","Children","cloneElement","useCallback","useRef","__","sprintf","keyboardShortcutsStore","__unstableUseShortcutEventMatch","pipe","useCopyToClipboard","useViewportMatch","BlockActions","BlockIcon","BlockHTMLConvertButton","__unstableBlockSettingsMenuFirstItem","BlockSettingsMenuControls","blockEditorStore","unlock","useShowHoveredOrFocusedGestures","POPOVER_PROPS","className","placement","CopyMenuItem","blocks","onCopy","label","ref","copyMenuItemBlocksLabel","length","copyMenuItemLabel","createElement","ParentSelectorMenuItem","parentClientId","parentBlockType","isSmallViewport","selectBlock","menuItemRef","gesturesProps","highlightParent","icon","onClick","title","BlockSettingsDropdown","block","clientIds","__experimentalSelectBlock","children","__unstableDisplayLocation","props","currentClientId","clientId","blockClientIds","Array","isArray","count","firstBlockClientId","firstParentClientId","onlyBlock","previousBlockClientId","selectedBlockClientIds","select","getBlockCount","getBlockName","getBlockRootClientId","getPreviousBlockClientId","getSelectedBlockClientIds","getBlockAttributes","getActiveBlockVariation","_firstParentClientId","parentBlockName","getBlockOrder","openedBlockSettingsMenu","getOpenedBlockSettingsMenu","setOpenedBlockSettingsMenu","shortcuts","getShortcutRepresentation","duplicate","remove","insertAfter","insertBefore","isMatch","hasSelectedBlocks","updateSelectionAfterDuplicate","clientIdsPromise","ids","updateSelectionAfterRemove","blockToFocus","shouldUpdateSelection","removeBlockLabel","parentBlockIsSelected","includes","open","undefined","onToggle","localOpen","__experimentalUpdateSelection","canCopyStyles","canDuplicate","canInsertDefaultBlock","canMove","canRemove","onDuplicate","onInsertAfter","onInsertBefore","onRemove","onPasteStyles","onMoveTo","popoverProps","noIcons","menuProps","onKeyDown","event","defaultPrevented","preventDefault","onClose","Fragment","Slot","fillProps","shortcut","map","child"],"sources":["@wordpress/block-editor/src/components/block-settings-menu/block-settings-dropdown.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockType,\n\tserialize,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { moreVertical } from '@wordpress/icons';\nimport {\n\tChildren,\n\tcloneElement,\n\tuseCallback,\n\tuseRef,\n} from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tstore as keyboardShortcutsStore,\n\t__unstableUseShortcutEventMatch,\n} from '@wordpress/keyboard-shortcuts';\nimport { pipe, useCopyToClipboard, useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockActions from '../block-actions';\nimport BlockIcon from '../block-icon';\nimport BlockHTMLConvertButton from './block-html-convert-button';\nimport __unstableBlockSettingsMenuFirstItem from './block-settings-menu-first-item';\nimport BlockSettingsMenuControls from '../block-settings-menu-controls';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport { useShowHoveredOrFocusedGestures } from '../block-toolbar/utils';\n\nconst POPOVER_PROPS = {\n\tclassName: 'block-editor-block-settings-menu__popover',\n\tplacement: 'bottom-start',\n};\n\nfunction CopyMenuItem( { blocks, onCopy, label } ) {\n\tconst ref = useCopyToClipboard( () => serialize( blocks ), onCopy );\n\tconst copyMenuItemBlocksLabel =\n\t\tblocks.length > 1 ? __( 'Copy blocks' ) : __( 'Copy' );\n\tconst copyMenuItemLabel = label ? label : copyMenuItemBlocksLabel;\n\treturn <MenuItem ref={ ref }>{ copyMenuItemLabel }</MenuItem>;\n}\n\nfunction ParentSelectorMenuItem( { parentClientId, parentBlockType } ) {\n\tconst isSmallViewport = useViewportMatch( 'medium', '<' );\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\t// Allows highlighting the parent block outline when focusing or hovering\n\t// the parent block selector within the child.\n\tconst menuItemRef = useRef();\n\tconst gesturesProps = useShowHoveredOrFocusedGestures( {\n\t\tref: menuItemRef,\n\t\thighlightParent: true,\n\t} );\n\n\tif ( ! isSmallViewport ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<MenuItem\n\t\t\t{ ...gesturesProps }\n\t\t\tref={ menuItemRef }\n\t\t\ticon={ <BlockIcon icon={ parentBlockType.icon } /> }\n\t\t\tonClick={ () => selectBlock( parentClientId ) }\n\t\t>\n\t\t\t{ sprintf(\n\t\t\t\t/* translators: %s: Name of the block's parent. */\n\t\t\t\t__( 'Select parent block (%s)' ),\n\t\t\t\tparentBlockType.title\n\t\t\t) }\n\t\t</MenuItem>\n\t);\n}\n\nexport function BlockSettingsDropdown( {\n\tblock,\n\tclientIds,\n\t__experimentalSelectBlock,\n\tchildren,\n\t__unstableDisplayLocation,\n\t...props\n} ) {\n\t// Get the client id of the current block for this menu, if one is set.\n\tconst currentClientId = block?.clientId;\n\tconst blockClientIds = Array.isArray( clientIds )\n\t\t? clientIds\n\t\t: [ clientIds ];\n\tconst count = blockClientIds.length;\n\tconst firstBlockClientId = blockClientIds[ 0 ];\n\tconst {\n\t\tfirstParentClientId,\n\t\tonlyBlock,\n\t\tparentBlockType,\n\t\tpreviousBlockClientId,\n\t\tselectedBlockClientIds,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tgetBlockAttributes,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst { getActiveBlockVariation } = select( blocksStore );\n\n\t\t\tconst _firstParentClientId =\n\t\t\t\tgetBlockRootClientId( firstBlockClientId );\n\t\t\tconst parentBlockName =\n\t\t\t\t_firstParentClientId && getBlockName( _firstParentClientId );\n\n\t\t\treturn {\n\t\t\t\tfirstParentClientId: _firstParentClientId,\n\t\t\t\tonlyBlock: 1 === getBlockCount( _firstParentClientId ),\n\t\t\t\tparentBlockType:\n\t\t\t\t\t_firstParentClientId &&\n\t\t\t\t\t( getActiveBlockVariation(\n\t\t\t\t\t\tparentBlockName,\n\t\t\t\t\t\tgetBlockAttributes( _firstParentClientId )\n\t\t\t\t\t) ||\n\t\t\t\t\t\tgetBlockType( parentBlockName ) ),\n\t\t\t\tpreviousBlockClientId:\n\t\t\t\t\tgetPreviousBlockClientId( firstBlockClientId ),\n\t\t\t\tselectedBlockClientIds: getSelectedBlockClientIds(),\n\t\t\t};\n\t\t},\n\t\t[ firstBlockClientId ]\n\t);\n\tconst { getBlockOrder, getSelectedBlockClientIds } =\n\t\tuseSelect( blockEditorStore );\n\n\tconst openedBlockSettingsMenu = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).getOpenedBlockSettingsMenu(),\n\t\t[]\n\t);\n\n\tconst { setOpenedBlockSettingsMenu } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\tconst shortcuts = useSelect( ( select ) => {\n\t\tconst { getShortcutRepresentation } = select( keyboardShortcutsStore );\n\t\treturn {\n\t\t\tduplicate: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/duplicate'\n\t\t\t),\n\t\t\tremove: getShortcutRepresentation( 'core/block-editor/remove' ),\n\t\t\tinsertAfter: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/insert-after'\n\t\t\t),\n\t\t\tinsertBefore: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/insert-before'\n\t\t\t),\n\t\t};\n\t}, [] );\n\tconst isMatch = __unstableUseShortcutEventMatch();\n\tconst hasSelectedBlocks = selectedBlockClientIds.length > 0;\n\n\tconst updateSelectionAfterDuplicate = useCallback(\n\t\tasync ( clientIdsPromise ) => {\n\t\t\tif ( __experimentalSelectBlock ) {\n\t\t\t\tconst ids = await clientIdsPromise;\n\t\t\t\tif ( ids && ids[ 0 ] ) {\n\t\t\t\t\t__experimentalSelectBlock( ids[ 0 ], false );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[ __experimentalSelectBlock ]\n\t);\n\n\tconst updateSelectionAfterRemove = useCallback( () => {\n\t\tif ( __experimentalSelectBlock ) {\n\t\t\tlet blockToFocus = previousBlockClientId || firstParentClientId;\n\n\t\t\t// Focus the first block if there's no previous block nor parent block.\n\t\t\tif ( ! blockToFocus ) {\n\t\t\t\tblockToFocus = getBlockOrder()[ 0 ];\n\t\t\t}\n\n\t\t\t// Only update the selection if the original selection is removed.\n\t\t\tconst shouldUpdateSelection =\n\t\t\t\thasSelectedBlocks && getSelectedBlockClientIds().length === 0;\n\n\t\t\t__experimentalSelectBlock( blockToFocus, shouldUpdateSelection );\n\t\t}\n\t}, [\n\t\t__experimentalSelectBlock,\n\t\tpreviousBlockClientId,\n\t\tfirstParentClientId,\n\t\tgetBlockOrder,\n\t\thasSelectedBlocks,\n\t\tgetSelectedBlockClientIds,\n\t] );\n\n\tconst removeBlockLabel =\n\t\tcount === 1 ? __( 'Delete' ) : __( 'Delete blocks' );\n\n\t// This can occur when the selected block (the parent)\n\t// displays child blocks within a List View.\n\tconst parentBlockIsSelected =\n\t\tselectedBlockClientIds?.includes( firstParentClientId );\n\n\t// When a currentClientId is in use, treat the menu as a controlled component.\n\t// This ensures that only one block settings menu is open at a time.\n\t// This is a temporary solution to work around an issue with `onFocusOutside`\n\t// where it does not allow a dropdown to be closed if focus was never within\n\t// the dropdown to begin with. Examples include a user either CMD+Clicking or\n\t// right clicking into an inactive window.\n\t// See: https://github.com/WordPress/gutenberg/pull/54083\n\tconst open = ! currentClientId\n\t\t? undefined\n\t\t: openedBlockSettingsMenu === currentClientId || false;\n\n\tconst onToggle = useCallback(\n\t\t( localOpen ) => {\n\t\t\tif ( localOpen && openedBlockSettingsMenu !== currentClientId ) {\n\t\t\t\tsetOpenedBlockSettingsMenu( currentClientId );\n\t\t\t} else if (\n\t\t\t\t! localOpen &&\n\t\t\t\topenedBlockSettingsMenu &&\n\t\t\t\topenedBlockSettingsMenu === currentClientId\n\t\t\t) {\n\t\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\t}\n\t\t},\n\t\t[ currentClientId, openedBlockSettingsMenu, setOpenedBlockSettingsMenu ]\n\t);\n\n\treturn (\n\t\t<BlockActions\n\t\t\tclientIds={ clientIds }\n\t\t\t__experimentalUpdateSelection={ ! __experimentalSelectBlock }\n\t\t>\n\t\t\t{ ( {\n\t\t\t\tcanCopyStyles,\n\t\t\t\tcanDuplicate,\n\t\t\t\tcanInsertDefaultBlock,\n\t\t\t\tcanMove,\n\t\t\t\tcanRemove,\n\t\t\t\tonDuplicate,\n\t\t\t\tonInsertAfter,\n\t\t\t\tonInsertBefore,\n\t\t\t\tonRemove,\n\t\t\t\tonCopy,\n\t\t\t\tonPasteStyles,\n\t\t\t\tonMoveTo,\n\t\t\t\tblocks,\n\t\t\t} ) => (\n\t\t\t\t<DropdownMenu\n\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\tlabel={ __( 'Options' ) }\n\t\t\t\t\tclassName=\"block-editor-block-settings-menu\"\n\t\t\t\t\tpopoverProps={ POPOVER_PROPS }\n\t\t\t\t\topen={ open }\n\t\t\t\t\tonToggle={ onToggle }\n\t\t\t\t\tnoIcons\n\t\t\t\t\tmenuProps={ {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @param {KeyboardEvent} event\n\t\t\t\t\t\t */\n\t\t\t\t\t\tonKeyDown( event ) {\n\t\t\t\t\t\t\tif ( event.defaultPrevented ) return;\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisMatch( 'core/block-editor/remove', event ) &&\n\t\t\t\t\t\t\t\tcanRemove\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tupdateSelectionAfterRemove( onRemove() );\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tisMatch(\n\t\t\t\t\t\t\t\t\t'core/block-editor/duplicate',\n\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\tcanDuplicate\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tupdateSelectionAfterDuplicate( onDuplicate() );\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tisMatch(\n\t\t\t\t\t\t\t\t\t'core/block-editor/insert-after',\n\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\tcanInsertDefaultBlock\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\t\t\t\t\t\tonInsertAfter();\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tisMatch(\n\t\t\t\t\t\t\t\t\t'core/block-editor/insert-before',\n\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\tcanInsertDefaultBlock\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\t\t\t\t\t\tonInsertBefore();\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{ ...props }\n\t\t\t\t>\n\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t\t\t<__unstableBlockSettingsMenuFirstItem.Slot\n\t\t\t\t\t\t\t\t\tfillProps={ { onClose } }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ ! parentBlockIsSelected &&\n\t\t\t\t\t\t\t\t\t!! firstParentClientId && (\n\t\t\t\t\t\t\t\t\t\t<ParentSelectorMenuItem\n\t\t\t\t\t\t\t\t\t\t\tparentClientId={\n\t\t\t\t\t\t\t\t\t\t\t\tfirstParentClientId\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tparentBlockType={ parentBlockType }\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{ count === 1 && (\n\t\t\t\t\t\t\t\t\t<BlockHTMLConvertButton\n\t\t\t\t\t\t\t\t\t\tclientId={ firstBlockClientId }\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\t<CopyMenuItem\n\t\t\t\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\t\t\t\tonCopy={ onCopy }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ canDuplicate && (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tonClick={ pipe(\n\t\t\t\t\t\t\t\t\t\t\tonClose,\n\t\t\t\t\t\t\t\t\t\t\tonDuplicate,\n\t\t\t\t\t\t\t\t\t\t\tupdateSelectionAfterDuplicate\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\tshortcut={ shortcuts.duplicate }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Duplicate' ) }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ canInsertDefaultBlock && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tonClick={ pipe(\n\t\t\t\t\t\t\t\t\t\t\t\tonClose,\n\t\t\t\t\t\t\t\t\t\t\t\tonInsertBefore\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\tshortcut={ shortcuts.insertBefore }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Add before' ) }\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tonClick={ pipe(\n\t\t\t\t\t\t\t\t\t\t\t\tonClose,\n\t\t\t\t\t\t\t\t\t\t\t\tonInsertAfter\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\tshortcut={ shortcuts.insertAfter }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Add after' ) }\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\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</MenuGroup>\n\t\t\t\t\t\t\t{ canCopyStyles && (\n\t\t\t\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t\t\t\t<CopyMenuItem\n\t\t\t\t\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\t\t\t\t\tonCopy={ onCopy }\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Copy styles' ) }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<MenuItem onClick={ onPasteStyles }>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Paste styles' ) }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<BlockSettingsMenuControls.Slot\n\t\t\t\t\t\t\t\tfillProps={ {\n\t\t\t\t\t\t\t\t\tonClose,\n\t\t\t\t\t\t\t\t\tcanMove,\n\t\t\t\t\t\t\t\t\tonMoveTo,\n\t\t\t\t\t\t\t\t\tonlyBlock,\n\t\t\t\t\t\t\t\t\tcount,\n\t\t\t\t\t\t\t\t\tfirstBlockClientId,\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tclientIds={ clientIds }\n\t\t\t\t\t\t\t\t__unstableDisplayLocation={\n\t\t\t\t\t\t\t\t\t__unstableDisplayLocation\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{ typeof children === 'function'\n\t\t\t\t\t\t\t\t? children( { onClose } )\n\t\t\t\t\t\t\t\t: Children.map( ( child ) =>\n\t\t\t\t\t\t\t\t\t\tcloneElement( child, { onClose } )\n\t\t\t\t\t\t\t\t ) }\n\t\t\t\t\t\t\t{ canRemove && (\n\t\t\t\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tonClick={ pipe(\n\t\t\t\t\t\t\t\t\t\t\tonClose,\n\t\t\t\t\t\t\t\t\t\t\tonRemove,\n\t\t\t\t\t\t\t\t\t\t\tupdateSelectionAfterRemove\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\tshortcut={ shortcuts.remove }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ removeBlockLabel }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t</MenuGroup>\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</DropdownMenu>\n\t\t\t) }\n\t\t</BlockActions>\n\t);\n}\n\nexport default BlockSettingsDropdown;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["getBlockType","serialize","store","blocksStore","DropdownMenu","MenuGroup","MenuItem","useDispatch","useSelect","moreVertical","Children","cloneElement","useCallback","useRef","__","sprintf","keyboardShortcutsStore","__unstableUseShortcutEventMatch","pipe","useCopyToClipboard","useViewportMatch","BlockActions","BlockIcon","BlockHTMLConvertButton","__unstableBlockSettingsMenuFirstItem","BlockSettingsMenuControls","blockEditorStore","unlock","useShowHoveredOrFocusedGestures","POPOVER_PROPS","className","placement","CopyMenuItem","blocks","onCopy","label","ref","copyMenuItemLabel","createElement","ParentSelectorMenuItem","parentClientId","parentBlockType","isSmallViewport","selectBlock","menuItemRef","gesturesProps","highlightParent","icon","onClick","title","BlockSettingsDropdown","block","clientIds","__experimentalSelectBlock","children","__unstableDisplayLocation","props","currentClientId","clientId","blockClientIds","Array","isArray","count","length","firstBlockClientId","firstParentClientId","onlyBlock","previousBlockClientId","selectedBlockClientIds","select","getBlockCount","getBlockName","getBlockRootClientId","getPreviousBlockClientId","getSelectedBlockClientIds","getBlockAttributes","getActiveBlockVariation","_firstParentClientId","parentBlockName","getBlockOrder","openedBlockSettingsMenu","getOpenedBlockSettingsMenu","setOpenedBlockSettingsMenu","shortcuts","getShortcutRepresentation","duplicate","remove","insertAfter","insertBefore","isMatch","hasSelectedBlocks","updateSelectionAfterDuplicate","clientIdsPromise","ids","updateSelectionAfterRemove","blockToFocus","shouldUpdateSelection","parentBlockIsSelected","includes","open","undefined","onToggle","localOpen","__experimentalUpdateSelection","canCopyStyles","canDuplicate","canInsertDefaultBlock","canMove","canRemove","onDuplicate","onInsertAfter","onInsertBefore","onRemove","onPasteStyles","onMoveTo","popoverProps","noIcons","menuProps","onKeyDown","event","defaultPrevented","preventDefault","onClose","Fragment","Slot","fillProps","shortcut","map","child"],"sources":["@wordpress/block-editor/src/components/block-settings-menu/block-settings-dropdown.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockType,\n\tserialize,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { moreVertical } from '@wordpress/icons';\nimport {\n\tChildren,\n\tcloneElement,\n\tuseCallback,\n\tuseRef,\n} from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tstore as keyboardShortcutsStore,\n\t__unstableUseShortcutEventMatch,\n} from '@wordpress/keyboard-shortcuts';\nimport { pipe, useCopyToClipboard, useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockActions from '../block-actions';\nimport BlockIcon from '../block-icon';\nimport BlockHTMLConvertButton from './block-html-convert-button';\nimport __unstableBlockSettingsMenuFirstItem from './block-settings-menu-first-item';\nimport BlockSettingsMenuControls from '../block-settings-menu-controls';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport { useShowHoveredOrFocusedGestures } from '../block-toolbar/utils';\n\nconst POPOVER_PROPS = {\n\tclassName: 'block-editor-block-settings-menu__popover',\n\tplacement: 'bottom-start',\n};\n\nfunction CopyMenuItem( { blocks, onCopy, label } ) {\n\tconst ref = useCopyToClipboard( () => serialize( blocks ), onCopy );\n\tconst copyMenuItemLabel = label ? label : __( 'Copy' );\n\treturn <MenuItem ref={ ref }>{ copyMenuItemLabel }</MenuItem>;\n}\n\nfunction ParentSelectorMenuItem( { parentClientId, parentBlockType } ) {\n\tconst isSmallViewport = useViewportMatch( 'medium', '<' );\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\t// Allows highlighting the parent block outline when focusing or hovering\n\t// the parent block selector within the child.\n\tconst menuItemRef = useRef();\n\tconst gesturesProps = useShowHoveredOrFocusedGestures( {\n\t\tref: menuItemRef,\n\t\thighlightParent: true,\n\t} );\n\n\tif ( ! isSmallViewport ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<MenuItem\n\t\t\t{ ...gesturesProps }\n\t\t\tref={ menuItemRef }\n\t\t\ticon={ <BlockIcon icon={ parentBlockType.icon } /> }\n\t\t\tonClick={ () => selectBlock( parentClientId ) }\n\t\t>\n\t\t\t{ sprintf(\n\t\t\t\t/* translators: %s: Name of the block's parent. */\n\t\t\t\t__( 'Select parent block (%s)' ),\n\t\t\t\tparentBlockType.title\n\t\t\t) }\n\t\t</MenuItem>\n\t);\n}\n\nexport function BlockSettingsDropdown( {\n\tblock,\n\tclientIds,\n\t__experimentalSelectBlock,\n\tchildren,\n\t__unstableDisplayLocation,\n\t...props\n} ) {\n\t// Get the client id of the current block for this menu, if one is set.\n\tconst currentClientId = block?.clientId;\n\tconst blockClientIds = Array.isArray( clientIds )\n\t\t? clientIds\n\t\t: [ clientIds ];\n\tconst count = blockClientIds.length;\n\tconst firstBlockClientId = blockClientIds[ 0 ];\n\tconst {\n\t\tfirstParentClientId,\n\t\tonlyBlock,\n\t\tparentBlockType,\n\t\tpreviousBlockClientId,\n\t\tselectedBlockClientIds,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tgetBlockAttributes,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst { getActiveBlockVariation } = select( blocksStore );\n\n\t\t\tconst _firstParentClientId =\n\t\t\t\tgetBlockRootClientId( firstBlockClientId );\n\t\t\tconst parentBlockName =\n\t\t\t\t_firstParentClientId && getBlockName( _firstParentClientId );\n\n\t\t\treturn {\n\t\t\t\tfirstParentClientId: _firstParentClientId,\n\t\t\t\tonlyBlock: 1 === getBlockCount( _firstParentClientId ),\n\t\t\t\tparentBlockType:\n\t\t\t\t\t_firstParentClientId &&\n\t\t\t\t\t( getActiveBlockVariation(\n\t\t\t\t\t\tparentBlockName,\n\t\t\t\t\t\tgetBlockAttributes( _firstParentClientId )\n\t\t\t\t\t) ||\n\t\t\t\t\t\tgetBlockType( parentBlockName ) ),\n\t\t\t\tpreviousBlockClientId:\n\t\t\t\t\tgetPreviousBlockClientId( firstBlockClientId ),\n\t\t\t\tselectedBlockClientIds: getSelectedBlockClientIds(),\n\t\t\t};\n\t\t},\n\t\t[ firstBlockClientId ]\n\t);\n\tconst { getBlockOrder, getSelectedBlockClientIds } =\n\t\tuseSelect( blockEditorStore );\n\n\tconst openedBlockSettingsMenu = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).getOpenedBlockSettingsMenu(),\n\t\t[]\n\t);\n\n\tconst { setOpenedBlockSettingsMenu } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\tconst shortcuts = useSelect( ( select ) => {\n\t\tconst { getShortcutRepresentation } = select( keyboardShortcutsStore );\n\t\treturn {\n\t\t\tduplicate: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/duplicate'\n\t\t\t),\n\t\t\tremove: getShortcutRepresentation( 'core/block-editor/remove' ),\n\t\t\tinsertAfter: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/insert-after'\n\t\t\t),\n\t\t\tinsertBefore: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/insert-before'\n\t\t\t),\n\t\t};\n\t}, [] );\n\tconst isMatch = __unstableUseShortcutEventMatch();\n\tconst hasSelectedBlocks = selectedBlockClientIds.length > 0;\n\n\tconst updateSelectionAfterDuplicate = useCallback(\n\t\tasync ( clientIdsPromise ) => {\n\t\t\tif ( __experimentalSelectBlock ) {\n\t\t\t\tconst ids = await clientIdsPromise;\n\t\t\t\tif ( ids && ids[ 0 ] ) {\n\t\t\t\t\t__experimentalSelectBlock( ids[ 0 ], false );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[ __experimentalSelectBlock ]\n\t);\n\n\tconst updateSelectionAfterRemove = useCallback( () => {\n\t\tif ( __experimentalSelectBlock ) {\n\t\t\tlet blockToFocus = previousBlockClientId || firstParentClientId;\n\n\t\t\t// Focus the first block if there's no previous block nor parent block.\n\t\t\tif ( ! blockToFocus ) {\n\t\t\t\tblockToFocus = getBlockOrder()[ 0 ];\n\t\t\t}\n\n\t\t\t// Only update the selection if the original selection is removed.\n\t\t\tconst shouldUpdateSelection =\n\t\t\t\thasSelectedBlocks && getSelectedBlockClientIds().length === 0;\n\n\t\t\t__experimentalSelectBlock( blockToFocus, shouldUpdateSelection );\n\t\t}\n\t}, [\n\t\t__experimentalSelectBlock,\n\t\tpreviousBlockClientId,\n\t\tfirstParentClientId,\n\t\tgetBlockOrder,\n\t\thasSelectedBlocks,\n\t\tgetSelectedBlockClientIds,\n\t] );\n\n\t// This can occur when the selected block (the parent)\n\t// displays child blocks within a List View.\n\tconst parentBlockIsSelected =\n\t\tselectedBlockClientIds?.includes( firstParentClientId );\n\n\t// When a currentClientId is in use, treat the menu as a controlled component.\n\t// This ensures that only one block settings menu is open at a time.\n\t// This is a temporary solution to work around an issue with `onFocusOutside`\n\t// where it does not allow a dropdown to be closed if focus was never within\n\t// the dropdown to begin with. Examples include a user either CMD+Clicking or\n\t// right clicking into an inactive window.\n\t// See: https://github.com/WordPress/gutenberg/pull/54083\n\tconst open = ! currentClientId\n\t\t? undefined\n\t\t: openedBlockSettingsMenu === currentClientId || false;\n\n\tconst onToggle = useCallback(\n\t\t( localOpen ) => {\n\t\t\tif ( localOpen && openedBlockSettingsMenu !== currentClientId ) {\n\t\t\t\tsetOpenedBlockSettingsMenu( currentClientId );\n\t\t\t} else if (\n\t\t\t\t! localOpen &&\n\t\t\t\topenedBlockSettingsMenu &&\n\t\t\t\topenedBlockSettingsMenu === currentClientId\n\t\t\t) {\n\t\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\t}\n\t\t},\n\t\t[ currentClientId, openedBlockSettingsMenu, setOpenedBlockSettingsMenu ]\n\t);\n\n\treturn (\n\t\t<BlockActions\n\t\t\tclientIds={ clientIds }\n\t\t\t__experimentalUpdateSelection={ ! __experimentalSelectBlock }\n\t\t>\n\t\t\t{ ( {\n\t\t\t\tcanCopyStyles,\n\t\t\t\tcanDuplicate,\n\t\t\t\tcanInsertDefaultBlock,\n\t\t\t\tcanMove,\n\t\t\t\tcanRemove,\n\t\t\t\tonDuplicate,\n\t\t\t\tonInsertAfter,\n\t\t\t\tonInsertBefore,\n\t\t\t\tonRemove,\n\t\t\t\tonCopy,\n\t\t\t\tonPasteStyles,\n\t\t\t\tonMoveTo,\n\t\t\t\tblocks,\n\t\t\t} ) => (\n\t\t\t\t<DropdownMenu\n\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\tlabel={ __( 'Options' ) }\n\t\t\t\t\tclassName=\"block-editor-block-settings-menu\"\n\t\t\t\t\tpopoverProps={ POPOVER_PROPS }\n\t\t\t\t\topen={ open }\n\t\t\t\t\tonToggle={ onToggle }\n\t\t\t\t\tnoIcons\n\t\t\t\t\tmenuProps={ {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @param {KeyboardEvent} event\n\t\t\t\t\t\t */\n\t\t\t\t\t\tonKeyDown( event ) {\n\t\t\t\t\t\t\tif ( event.defaultPrevented ) return;\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisMatch( 'core/block-editor/remove', event ) &&\n\t\t\t\t\t\t\t\tcanRemove\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tupdateSelectionAfterRemove( onRemove() );\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tisMatch(\n\t\t\t\t\t\t\t\t\t'core/block-editor/duplicate',\n\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\tcanDuplicate\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tupdateSelectionAfterDuplicate( onDuplicate() );\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tisMatch(\n\t\t\t\t\t\t\t\t\t'core/block-editor/insert-after',\n\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\tcanInsertDefaultBlock\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\t\t\t\t\t\tonInsertAfter();\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tisMatch(\n\t\t\t\t\t\t\t\t\t'core/block-editor/insert-before',\n\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\tcanInsertDefaultBlock\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\t\t\t\t\t\tonInsertBefore();\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{ ...props }\n\t\t\t\t>\n\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t\t\t<__unstableBlockSettingsMenuFirstItem.Slot\n\t\t\t\t\t\t\t\t\tfillProps={ { onClose } }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ ! parentBlockIsSelected &&\n\t\t\t\t\t\t\t\t\t!! firstParentClientId && (\n\t\t\t\t\t\t\t\t\t\t<ParentSelectorMenuItem\n\t\t\t\t\t\t\t\t\t\t\tparentClientId={\n\t\t\t\t\t\t\t\t\t\t\t\tfirstParentClientId\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tparentBlockType={ parentBlockType }\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{ count === 1 && (\n\t\t\t\t\t\t\t\t\t<BlockHTMLConvertButton\n\t\t\t\t\t\t\t\t\t\tclientId={ firstBlockClientId }\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\t<CopyMenuItem\n\t\t\t\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\t\t\t\tonCopy={ onCopy }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ canDuplicate && (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tonClick={ pipe(\n\t\t\t\t\t\t\t\t\t\t\tonClose,\n\t\t\t\t\t\t\t\t\t\t\tonDuplicate,\n\t\t\t\t\t\t\t\t\t\t\tupdateSelectionAfterDuplicate\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\tshortcut={ shortcuts.duplicate }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Duplicate' ) }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ canInsertDefaultBlock && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tonClick={ pipe(\n\t\t\t\t\t\t\t\t\t\t\t\tonClose,\n\t\t\t\t\t\t\t\t\t\t\t\tonInsertBefore\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\tshortcut={ shortcuts.insertBefore }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Add before' ) }\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tonClick={ pipe(\n\t\t\t\t\t\t\t\t\t\t\t\tonClose,\n\t\t\t\t\t\t\t\t\t\t\t\tonInsertAfter\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\tshortcut={ shortcuts.insertAfter }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Add after' ) }\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\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</MenuGroup>\n\t\t\t\t\t\t\t{ canCopyStyles && (\n\t\t\t\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t\t\t\t<CopyMenuItem\n\t\t\t\t\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\t\t\t\t\tonCopy={ onCopy }\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Copy styles' ) }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<MenuItem onClick={ onPasteStyles }>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Paste styles' ) }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<BlockSettingsMenuControls.Slot\n\t\t\t\t\t\t\t\tfillProps={ {\n\t\t\t\t\t\t\t\t\tonClose,\n\t\t\t\t\t\t\t\t\tcanMove,\n\t\t\t\t\t\t\t\t\tonMoveTo,\n\t\t\t\t\t\t\t\t\tonlyBlock,\n\t\t\t\t\t\t\t\t\tcount,\n\t\t\t\t\t\t\t\t\tfirstBlockClientId,\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tclientIds={ clientIds }\n\t\t\t\t\t\t\t\t__unstableDisplayLocation={\n\t\t\t\t\t\t\t\t\t__unstableDisplayLocation\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{ typeof children === 'function'\n\t\t\t\t\t\t\t\t? children( { onClose } )\n\t\t\t\t\t\t\t\t: Children.map( ( child ) =>\n\t\t\t\t\t\t\t\t\t\tcloneElement( child, { onClose } )\n\t\t\t\t\t\t\t\t ) }\n\t\t\t\t\t\t\t{ canRemove && (\n\t\t\t\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tonClick={ pipe(\n\t\t\t\t\t\t\t\t\t\t\tonClose,\n\t\t\t\t\t\t\t\t\t\t\tonRemove,\n\t\t\t\t\t\t\t\t\t\t\tupdateSelectionAfterRemove\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\tshortcut={ shortcuts.remove }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Delete' ) }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t</MenuGroup>\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</DropdownMenu>\n\t\t\t) }\n\t\t</BlockActions>\n\t);\n}\n\nexport default BlockSettingsDropdown;\n"],"mappings":";AAAA;AACA;AACA;AACA,SACCA,YAAY,EACZC,SAAS,EACTC,KAAK,IAAIC,WAAW,QACd,mBAAmB;AAC1B,SAASC,YAAY,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,uBAAuB;AACzE,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SAASC,YAAY,QAAQ,kBAAkB;AAC/C,SACCC,QAAQ,EACRC,YAAY,EACZC,WAAW,EACXC,MAAM,QACA,oBAAoB;AAC3B,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AAC7C,SACCb,KAAK,IAAIc,sBAAsB,EAC/BC,+BAA+B,QACzB,+BAA+B;AACtC,SAASC,IAAI,EAAEC,kBAAkB,EAAEC,gBAAgB,QAAQ,oBAAoB;;AAE/E;AACA;AACA;AACA,OAAOC,YAAY,MAAM,kBAAkB;AAC3C,OAAOC,SAAS,MAAM,eAAe;AACrC,OAAOC,sBAAsB,MAAM,6BAA6B;AAChE,OAAOC,oCAAoC,MAAM,kCAAkC;AACnF,OAAOC,yBAAyB,MAAM,iCAAiC;AACvE,SAASvB,KAAK,IAAIwB,gBAAgB,QAAQ,aAAa;AACvD,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,SAASC,+BAA+B,QAAQ,wBAAwB;AAExE,MAAMC,aAAa,GAAG;EACrBC,SAAS,EAAE,2CAA2C;EACtDC,SAAS,EAAE;AACZ,CAAC;AAED,SAASC,YAAYA,CAAE;EAAEC,MAAM;EAAEC,MAAM;EAAEC;AAAM,CAAC,EAAG;EAClD,MAAMC,GAAG,GAAGjB,kBAAkB,CAAE,MAAMlB,SAAS,CAAEgC,MAAO,CAAC,EAAEC,MAAO,CAAC;EACnE,MAAMG,iBAAiB,GAAGF,KAAK,GAAGA,KAAK,GAAGrB,EAAE,CAAE,MAAO,CAAC;EACtD,OAAOwB,aAAA,CAAChC,QAAQ;IAAC8B,GAAG,EAAGA;EAAK,GAAGC,iBAA6B,CAAC;AAC9D;AAEA,SAASE,sBAAsBA,CAAE;EAAEC,cAAc;EAAEC;AAAgB,CAAC,EAAG;EACtE,MAAMC,eAAe,GAAGtB,gBAAgB,CAAE,QAAQ,EAAE,GAAI,CAAC;EACzD,MAAM;IAAEuB;EAAY,CAAC,GAAGpC,WAAW,CAAEmB,gBAAiB,CAAC;;EAEvD;EACA;EACA,MAAMkB,WAAW,GAAG/B,MAAM,CAAC,CAAC;EAC5B,MAAMgC,aAAa,GAAGjB,+BAA+B,CAAE;IACtDQ,GAAG,EAAEQ,WAAW;IAChBE,eAAe,EAAE;EAClB,CAAE,CAAC;EAEH,IAAK,CAAEJ,eAAe,EAAG;IACxB,OAAO,IAAI;EACZ;EAEA,OACCJ,aAAA,CAAChC,QAAQ;IAAA,GACHuC,aAAa;IAClBT,GAAG,EAAGQ,WAAa;IACnBG,IAAI,EAAGT,aAAA,CAAChB,SAAS;MAACyB,IAAI,EAAGN,eAAe,CAACM;IAAM,CAAE,CAAG;IACpDC,OAAO,EAAGA,CAAA,KAAML,WAAW,CAAEH,cAAe;EAAG,GAE7CzB,OAAO,EACR;EACAD,EAAE,CAAE,0BAA2B,CAAC,EAChC2B,eAAe,CAACQ,KACjB,CACS,CAAC;AAEb;AAEA,OAAO,SAASC,qBAAqBA,CAAE;EACtCC,KAAK;EACLC,SAAS;EACTC,yBAAyB;EACzBC,QAAQ;EACRC,yBAAyB;EACzB,GAAGC;AACJ,CAAC,EAAG;EACH;EACA,MAAMC,eAAe,GAAGN,KAAK,EAAEO,QAAQ;EACvC,MAAMC,cAAc,GAAGC,KAAK,CAACC,OAAO,CAAET,SAAU,CAAC,GAC9CA,SAAS,GACT,CAAEA,SAAS,CAAE;EAChB,MAAMU,KAAK,GAAGH,cAAc,CAACI,MAAM;EACnC,MAAMC,kBAAkB,GAAGL,cAAc,CAAE,CAAC,CAAE;EAC9C,MAAM;IACLM,mBAAmB;IACnBC,SAAS;IACTzB,eAAe;IACf0B,qBAAqB;IACrBC;EACD,CAAC,GAAG5D,SAAS,CACV6D,MAAM,IAAM;IACb,MAAM;MACLC,aAAa;MACbC,YAAY;MACZC,oBAAoB;MACpBC,wBAAwB;MACxBC,yBAAyB;MACzBC;IACD,CAAC,GAAGN,MAAM,CAAE3C,gBAAiB,CAAC;IAE9B,MAAM;MAAEkD;IAAwB,CAAC,GAAGP,MAAM,CAAElE,WAAY,CAAC;IAEzD,MAAM0E,oBAAoB,GACzBL,oBAAoB,CAAER,kBAAmB,CAAC;IAC3C,MAAMc,eAAe,GACpBD,oBAAoB,IAAIN,YAAY,CAAEM,oBAAqB,CAAC;IAE7D,OAAO;MACNZ,mBAAmB,EAAEY,oBAAoB;MACzCX,SAAS,EAAE,CAAC,KAAKI,aAAa,CAAEO,oBAAqB,CAAC;MACtDpC,eAAe,EACdoC,oBAAoB,KAClBD,uBAAuB,CACxBE,eAAe,EACfH,kBAAkB,CAAEE,oBAAqB,CAC1C,CAAC,IACA7E,YAAY,CAAE8E,eAAgB,CAAC,CAAE;MACnCX,qBAAqB,EACpBM,wBAAwB,CAAET,kBAAmB,CAAC;MAC/CI,sBAAsB,EAAEM,yBAAyB,CAAC;IACnD,CAAC;EACF,CAAC,EACD,CAAEV,kBAAkB,CACrB,CAAC;EACD,MAAM;IAAEe,aAAa;IAAEL;EAA0B,CAAC,GACjDlE,SAAS,CAAEkB,gBAAiB,CAAC;EAE9B,MAAMsD,uBAAuB,GAAGxE,SAAS,CACtC6D,MAAM,IACP1C,MAAM,CAAE0C,MAAM,CAAE3C,gBAAiB,CAAE,CAAC,CAACuD,0BAA0B,CAAC,CAAC,EAClE,EACD,CAAC;EAED,MAAM;IAAEC;EAA2B,CAAC,GAAGvD,MAAM,CAC5CpB,WAAW,CAAEmB,gBAAiB,CAC/B,CAAC;EAED,MAAMyD,SAAS,GAAG3E,SAAS,CAAI6D,MAAM,IAAM;IAC1C,MAAM;MAAEe;IAA0B,CAAC,GAAGf,MAAM,CAAErD,sBAAuB,CAAC;IACtE,OAAO;MACNqE,SAAS,EAAED,yBAAyB,CACnC,6BACD,CAAC;MACDE,MAAM,EAAEF,yBAAyB,CAAE,0BAA2B,CAAC;MAC/DG,WAAW,EAAEH,yBAAyB,CACrC,gCACD,CAAC;MACDI,YAAY,EAAEJ,yBAAyB,CACtC,iCACD;IACD,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EACP,MAAMK,OAAO,GAAGxE,+BAA+B,CAAC,CAAC;EACjD,MAAMyE,iBAAiB,GAAGtB,sBAAsB,CAACL,MAAM,GAAG,CAAC;EAE3D,MAAM4B,6BAA6B,GAAG/E,WAAW,CAChD,MAAQgF,gBAAgB,IAAM;IAC7B,IAAKvC,yBAAyB,EAAG;MAChC,MAAMwC,GAAG,GAAG,MAAMD,gBAAgB;MAClC,IAAKC,GAAG,IAAIA,GAAG,CAAE,CAAC,CAAE,EAAG;QACtBxC,yBAAyB,CAAEwC,GAAG,CAAE,CAAC,CAAE,EAAE,KAAM,CAAC;MAC7C;IACD;EACD,CAAC,EACD,CAAExC,yBAAyB,CAC5B,CAAC;EAED,MAAMyC,0BAA0B,GAAGlF,WAAW,CAAE,MAAM;IACrD,IAAKyC,yBAAyB,EAAG;MAChC,IAAI0C,YAAY,GAAG5B,qBAAqB,IAAIF,mBAAmB;;MAE/D;MACA,IAAK,CAAE8B,YAAY,EAAG;QACrBA,YAAY,GAAGhB,aAAa,CAAC,CAAC,CAAE,CAAC,CAAE;MACpC;;MAEA;MACA,MAAMiB,qBAAqB,GAC1BN,iBAAiB,IAAIhB,yBAAyB,CAAC,CAAC,CAACX,MAAM,KAAK,CAAC;MAE9DV,yBAAyB,CAAE0C,YAAY,EAAEC,qBAAsB,CAAC;IACjE;EACD,CAAC,EAAE,CACF3C,yBAAyB,EACzBc,qBAAqB,EACrBF,mBAAmB,EACnBc,aAAa,EACbW,iBAAiB,EACjBhB,yBAAyB,CACxB,CAAC;;EAEH;EACA;EACA,MAAMuB,qBAAqB,GAC1B7B,sBAAsB,EAAE8B,QAAQ,CAAEjC,mBAAoB,CAAC;;EAExD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMkC,IAAI,GAAG,CAAE1C,eAAe,GAC3B2C,SAAS,GACTpB,uBAAuB,KAAKvB,eAAe,IAAI,KAAK;EAEvD,MAAM4C,QAAQ,GAAGzF,WAAW,CACzB0F,SAAS,IAAM;IAChB,IAAKA,SAAS,IAAItB,uBAAuB,KAAKvB,eAAe,EAAG;MAC/DyB,0BAA0B,CAAEzB,eAAgB,CAAC;IAC9C,CAAC,MAAM,IACN,CAAE6C,SAAS,IACXtB,uBAAuB,IACvBA,uBAAuB,KAAKvB,eAAe,EAC1C;MACDyB,0BAA0B,CAAEkB,SAAU,CAAC;IACxC;EACD,CAAC,EACD,CAAE3C,eAAe,EAAEuB,uBAAuB,EAAEE,0BAA0B,CACvE,CAAC;EAED,OACC5C,aAAA,CAACjB,YAAY;IACZ+B,SAAS,EAAGA,SAAW;IACvBmD,6BAA6B,EAAG,CAAElD;EAA2B,GAE3D,CAAE;IACHmD,aAAa;IACbC,YAAY;IACZC,qBAAqB;IACrBC,OAAO;IACPC,SAAS;IACTC,WAAW;IACXC,aAAa;IACbC,cAAc;IACdC,QAAQ;IACR9E,MAAM;IACN+E,aAAa;IACbC,QAAQ;IACRjF;EACD,CAAC,KACAK,aAAA,CAAClC,YAAY;IACZ2C,IAAI,EAAGtC,YAAc;IACrB0B,KAAK,EAAGrB,EAAE,CAAE,SAAU,CAAG;IACzBgB,SAAS,EAAC,kCAAkC;IAC5CqF,YAAY,EAAGtF,aAAe;IAC9BsE,IAAI,EAAGA,IAAM;IACbE,QAAQ,EAAGA,QAAU;IACrBe,OAAO;IACPC,SAAS,EAAG;MACX;AACN;AACA;MACMC,SAASA,CAAEC,KAAK,EAAG;QAClB,IAAKA,KAAK,CAACC,gBAAgB,EAAG;QAE9B,IACC/B,OAAO,CAAE,0BAA0B,EAAE8B,KAAM,CAAC,IAC5CX,SAAS,EACR;UACDW,KAAK,CAACE,cAAc,CAAC,CAAC;UACtB3B,0BAA0B,CAAEkB,QAAQ,CAAC,CAAE,CAAC;QACzC,CAAC,MAAM,IACNvB,OAAO,CACN,6BAA6B,EAC7B8B,KACD,CAAC,IACDd,YAAY,EACX;UACDc,KAAK,CAACE,cAAc,CAAC,CAAC;UACtB9B,6BAA6B,CAAEkB,WAAW,CAAC,CAAE,CAAC;QAC/C,CAAC,MAAM,IACNpB,OAAO,CACN,gCAAgC,EAChC8B,KACD,CAAC,IACDb,qBAAqB,EACpB;UACDa,KAAK,CAACE,cAAc,CAAC,CAAC;UACtBvC,0BAA0B,CAAEkB,SAAU,CAAC;UACvCU,aAAa,CAAC,CAAC;QAChB,CAAC,MAAM,IACNrB,OAAO,CACN,iCAAiC,EACjC8B,KACD,CAAC,IACDb,qBAAqB,EACpB;UACDa,KAAK,CAACE,cAAc,CAAC,CAAC;UACtBvC,0BAA0B,CAAEkB,SAAU,CAAC;UACvCW,cAAc,CAAC,CAAC;QACjB;MACD;IACD,CAAG;IAAA,GACEvD;EAAK,GAER,CAAE;IAAEkE;EAAQ,CAAC,KACdpF,aAAA,CAAAqF,QAAA,QACCrF,aAAA,CAACjC,SAAS,QACTiC,aAAA,CAACd,oCAAoC,CAACoG,IAAI;IACzCC,SAAS,EAAG;MAAEH;IAAQ;EAAG,CACzB,CAAC,EACA,CAAEzB,qBAAqB,IACxB,CAAC,CAAEhC,mBAAmB,IACrB3B,aAAA,CAACC,sBAAsB;IACtBC,cAAc,EACbyB,mBACA;IACDxB,eAAe,EAAGA;EAAiB,CACnC,CACD,EACAqB,KAAK,KAAK,CAAC,IACZxB,aAAA,CAACf,sBAAsB;IACtBmC,QAAQ,EAAGM;EAAoB,CAC/B,CACD,EACD1B,aAAA,CAACN,YAAY;IACZC,MAAM,EAAGA,MAAQ;IACjBC,MAAM,EAAGA;EAAQ,CACjB,CAAC,EACAuE,YAAY,IACbnE,aAAA,CAAChC,QAAQ;IACR0C,OAAO,EAAG9B,IAAI,CACbwG,OAAO,EACPb,WAAW,EACXlB,6BACD,CAAG;IACHmC,QAAQ,EAAG3C,SAAS,CAACE;EAAW,GAE9BvE,EAAE,CAAE,WAAY,CACT,CACV,EACC4F,qBAAqB,IACtBpE,aAAA,CAAAqF,QAAA,QACCrF,aAAA,CAAChC,QAAQ;IACR0C,OAAO,EAAG9B,IAAI,CACbwG,OAAO,EACPX,cACD,CAAG;IACHe,QAAQ,EAAG3C,SAAS,CAACK;EAAc,GAEjC1E,EAAE,CAAE,YAAa,CACV,CAAC,EACXwB,aAAA,CAAChC,QAAQ;IACR0C,OAAO,EAAG9B,IAAI,CACbwG,OAAO,EACPZ,aACD,CAAG;IACHgB,QAAQ,EAAG3C,SAAS,CAACI;EAAa,GAEhCzE,EAAE,CAAE,WAAY,CACT,CACT,CAEO,CAAC,EACV0F,aAAa,IACdlE,aAAA,CAACjC,SAAS,QACTiC,aAAA,CAACN,YAAY;IACZC,MAAM,EAAGA,MAAQ;IACjBC,MAAM,EAAGA,MAAQ;IACjBC,KAAK,EAAGrB,EAAE,CAAE,aAAc;EAAG,CAC7B,CAAC,EACFwB,aAAA,CAAChC,QAAQ;IAAC0C,OAAO,EAAGiE;EAAe,GAChCnG,EAAE,CAAE,cAAe,CACZ,CACA,CACX,EACDwB,aAAA,CAACb,yBAAyB,CAACmG,IAAI;IAC9BC,SAAS,EAAG;MACXH,OAAO;MACPf,OAAO;MACPO,QAAQ;MACRhD,SAAS;MACTJ,KAAK;MACLE;IACD,CAAG;IACHZ,SAAS,EAAGA,SAAW;IACvBG,yBAAyB,EACxBA;EACA,CACD,CAAC,EACA,OAAOD,QAAQ,KAAK,UAAU,GAC7BA,QAAQ,CAAE;IAAEoE;EAAQ,CAAE,CAAC,GACvBhH,QAAQ,CAACqH,GAAG,CAAIC,KAAK,IACrBrH,YAAY,CAAEqH,KAAK,EAAE;IAAEN;EAAQ,CAAE,CACjC,CAAC,EACFd,SAAS,IACVtE,aAAA,CAACjC,SAAS,QACTiC,aAAA,CAAChC,QAAQ;IACR0C,OAAO,EAAG9B,IAAI,CACbwG,OAAO,EACPV,QAAQ,EACRlB,0BACD,CAAG;IACHgC,QAAQ,EAAG3C,SAAS,CAACG;EAAQ,GAE3BxE,EAAE,CAAE,QAAS,CACN,CACA,CAEX,CAEU,CAEF,CAAC;AAEjB;AAEA,eAAeoC,qBAAqB"}
|
|
@@ -33,7 +33,7 @@ function useGroupedTransforms(possibleBlockTransformations) {
|
|
|
33
33
|
};
|
|
34
34
|
const transformations = useMemo(() => {
|
|
35
35
|
const priorityTextTranformsNames = Object.keys(priorityContentTranformationBlocks);
|
|
36
|
-
|
|
36
|
+
const groupedPossibleTransforms = possibleBlockTransformations.reduce((accumulator, item) => {
|
|
37
37
|
const {
|
|
38
38
|
name
|
|
39
39
|
} = item;
|
|
@@ -47,6 +47,17 @@ function useGroupedTransforms(possibleBlockTransformations) {
|
|
|
47
47
|
priorityTextTransformations: [],
|
|
48
48
|
restTransformations: []
|
|
49
49
|
});
|
|
50
|
+
/**
|
|
51
|
+
* If there is only one priority text transformation and it's a Quote,
|
|
52
|
+
* is should move to the rest transformations. This is because Quote can
|
|
53
|
+
* be a container for any block type, so in multi-block selection it will
|
|
54
|
+
* always be suggested, even for non-text blocks.
|
|
55
|
+
*/
|
|
56
|
+
if (groupedPossibleTransforms.priorityTextTransformations.length === 1 && groupedPossibleTransforms.priorityTextTransformations[0].name === 'core/quote') {
|
|
57
|
+
const singleQuote = groupedPossibleTransforms.priorityTextTransformations.pop();
|
|
58
|
+
groupedPossibleTransforms.restTransformations.push(singleQuote);
|
|
59
|
+
}
|
|
60
|
+
return groupedPossibleTransforms;
|
|
50
61
|
}, [possibleBlockTransformations]);
|
|
51
62
|
|
|
52
63
|
// Order the priority text transformations.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__","MenuGroup","MenuItem","getBlockMenuDefaultClassName","switchToBlockType","useState","useMemo","BlockIcon","PreviewBlockPopover","BlockVariationTransformations","useGroupedTransforms","possibleBlockTransformations","priorityContentTranformationBlocks","transformations","priorityTextTranformsNames","Object","keys","reduce","accumulator","item","name","includes","priorityTextTransformations","push","restTransformations","sort","currentName","nextName","BlockTransformationsMenu","className","possibleBlockVariationTransformations","onSelect","onSelectVariation","blocks","hoveredTransformItemName","setHoveredTransformItemName","hasBothContentTransformations","length","restTransformItems","createElement","RestTransformationItems","Fragment","label","map","BlockTranformationItem","key","icon","title","isDisabled","onClick","event","preventDefault","disabled","onMouseLeave","onMouseEnter","showColors"],"sources":["@wordpress/block-editor/src/components/block-switcher/block-transformations-menu.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuGroup, MenuItem } from '@wordpress/components';\nimport {\n\tgetBlockMenuDefaultClassName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport { useState, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport PreviewBlockPopover from './preview-block-popover';\nimport BlockVariationTransformations from './block-variation-transformations';\n\n/**\n * Helper hook to group transformations to display them in a specific order in the UI.\n * For now we group only priority content driven transformations(ex. paragraph -> heading).\n *\n * Later on we could also group 'layout' transformations(ex. paragraph -> group) and\n * display them in different sections.\n *\n * @param {Object[]} possibleBlockTransformations The available block transformations.\n * @return {Record<string, Object[]>} The grouped block transformations.\n */\nfunction useGroupedTransforms( possibleBlockTransformations ) {\n\tconst priorityContentTranformationBlocks = {\n\t\t'core/paragraph': 1,\n\t\t'core/heading': 2,\n\t\t'core/list': 3,\n\t\t'core/quote': 4,\n\t};\n\tconst transformations = useMemo( () => {\n\t\tconst priorityTextTranformsNames = Object.keys(\n\t\t\tpriorityContentTranformationBlocks\n\t\t);\n\t\treturn possibleBlockTransformations.reduce(\n\t\t\t( accumulator, item ) => {\n\t\t\t\tconst { name } = item;\n\t\t\t\tif ( priorityTextTranformsNames.includes( name ) ) {\n\t\t\t\t\taccumulator.priorityTextTransformations.push( item );\n\t\t\t\t} else {\n\t\t\t\t\taccumulator.restTransformations.push( item );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t},\n\t\t\t{ priorityTextTransformations: [], restTransformations: [] }\n\t\t);\n\t}, [ possibleBlockTransformations ] );\n\n\t// Order the priority text transformations.\n\ttransformations.priorityTextTransformations.sort(\n\t\t( { name: currentName }, { name: nextName } ) => {\n\t\t\treturn priorityContentTranformationBlocks[ currentName ] <\n\t\t\t\tpriorityContentTranformationBlocks[ nextName ]\n\t\t\t\t? -1\n\t\t\t\t: 1;\n\t\t}\n\t);\n\treturn transformations;\n}\n\nconst BlockTransformationsMenu = ( {\n\tclassName,\n\tpossibleBlockTransformations,\n\tpossibleBlockVariationTransformations,\n\tonSelect,\n\tonSelectVariation,\n\tblocks,\n} ) => {\n\tconst [ hoveredTransformItemName, setHoveredTransformItemName ] =\n\t\tuseState();\n\n\tconst { priorityTextTransformations, restTransformations } =\n\t\tuseGroupedTransforms( possibleBlockTransformations );\n\t// We have to check if both content transformations(priority and rest) are set\n\t// in order to create a separate MenuGroup for them.\n\tconst hasBothContentTransformations =\n\t\tpriorityTextTransformations.length && restTransformations.length;\n\tconst restTransformItems = !! restTransformations.length && (\n\t\t<RestTransformationItems\n\t\t\trestTransformations={ restTransformations }\n\t\t\tonSelect={ onSelect }\n\t\t\tsetHoveredTransformItemName={ setHoveredTransformItemName }\n\t\t/>\n\t);\n\treturn (\n\t\t<>\n\t\t\t<MenuGroup label={ __( 'Transform to' ) } className={ className }>\n\t\t\t\t{ hoveredTransformItemName && (\n\t\t\t\t\t<PreviewBlockPopover\n\t\t\t\t\t\tblocks={ switchToBlockType(\n\t\t\t\t\t\t\tblocks,\n\t\t\t\t\t\t\thoveredTransformItemName\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ !! possibleBlockVariationTransformations?.length && (\n\t\t\t\t\t<BlockVariationTransformations\n\t\t\t\t\t\ttransformations={\n\t\t\t\t\t\t\tpossibleBlockVariationTransformations\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\tonSelect={ onSelectVariation }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ priorityTextTransformations.map( ( item ) => (\n\t\t\t\t\t<BlockTranformationItem\n\t\t\t\t\t\tkey={ item.name }\n\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\tsetHoveredTransformItemName={\n\t\t\t\t\t\t\tsetHoveredTransformItemName\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t\t{ ! hasBothContentTransformations && restTransformItems }\n\t\t\t</MenuGroup>\n\t\t\t{ !! hasBothContentTransformations && (\n\t\t\t\t<MenuGroup className={ className }>\n\t\t\t\t\t{ restTransformItems }\n\t\t\t\t</MenuGroup>\n\t\t\t) }\n\t\t</>\n\t);\n};\n\nfunction RestTransformationItems( {\n\trestTransformations,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\treturn restTransformations.map( ( item ) => (\n\t\t<BlockTranformationItem\n\t\t\tkey={ item.name }\n\t\t\titem={ item }\n\t\t\tonSelect={ onSelect }\n\t\t\tsetHoveredTransformItemName={ setHoveredTransformItemName }\n\t\t/>\n\t) );\n}\n\nfunction BlockTranformationItem( {\n\titem,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\tconst { name, icon, title, isDisabled } = item;\n\treturn (\n\t\t<MenuItem\n\t\t\tclassName={ getBlockMenuDefaultClassName( name ) }\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonSelect( name );\n\t\t\t} }\n\t\t\tdisabled={ isDisabled }\n\t\t\tonMouseLeave={ () => setHoveredTransformItemName( null ) }\n\t\t\tonMouseEnter={ () => setHoveredTransformItemName( name ) }\n\t\t>\n\t\t\t<BlockIcon icon={ icon } showColors />\n\t\t\t{ title }\n\t\t</MenuItem>\n\t);\n}\n\nexport default BlockTransformationsMenu;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["__","MenuGroup","MenuItem","getBlockMenuDefaultClassName","switchToBlockType","useState","useMemo","BlockIcon","PreviewBlockPopover","BlockVariationTransformations","useGroupedTransforms","possibleBlockTransformations","priorityContentTranformationBlocks","transformations","priorityTextTranformsNames","Object","keys","groupedPossibleTransforms","reduce","accumulator","item","name","includes","priorityTextTransformations","push","restTransformations","length","singleQuote","pop","sort","currentName","nextName","BlockTransformationsMenu","className","possibleBlockVariationTransformations","onSelect","onSelectVariation","blocks","hoveredTransformItemName","setHoveredTransformItemName","hasBothContentTransformations","restTransformItems","createElement","RestTransformationItems","Fragment","label","map","BlockTranformationItem","key","icon","title","isDisabled","onClick","event","preventDefault","disabled","onMouseLeave","onMouseEnter","showColors"],"sources":["@wordpress/block-editor/src/components/block-switcher/block-transformations-menu.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuGroup, MenuItem } from '@wordpress/components';\nimport {\n\tgetBlockMenuDefaultClassName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport { useState, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport PreviewBlockPopover from './preview-block-popover';\nimport BlockVariationTransformations from './block-variation-transformations';\n\n/**\n * Helper hook to group transformations to display them in a specific order in the UI.\n * For now we group only priority content driven transformations(ex. paragraph -> heading).\n *\n * Later on we could also group 'layout' transformations(ex. paragraph -> group) and\n * display them in different sections.\n *\n * @param {Object[]} possibleBlockTransformations The available block transformations.\n * @return {Record<string, Object[]>} The grouped block transformations.\n */\nfunction useGroupedTransforms( possibleBlockTransformations ) {\n\tconst priorityContentTranformationBlocks = {\n\t\t'core/paragraph': 1,\n\t\t'core/heading': 2,\n\t\t'core/list': 3,\n\t\t'core/quote': 4,\n\t};\n\tconst transformations = useMemo( () => {\n\t\tconst priorityTextTranformsNames = Object.keys(\n\t\t\tpriorityContentTranformationBlocks\n\t\t);\n\t\tconst groupedPossibleTransforms = possibleBlockTransformations.reduce(\n\t\t\t( accumulator, item ) => {\n\t\t\t\tconst { name } = item;\n\t\t\t\tif ( priorityTextTranformsNames.includes( name ) ) {\n\t\t\t\t\taccumulator.priorityTextTransformations.push( item );\n\t\t\t\t} else {\n\t\t\t\t\taccumulator.restTransformations.push( item );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t},\n\t\t\t{ priorityTextTransformations: [], restTransformations: [] }\n\t\t);\n\t\t/**\n\t\t * If there is only one priority text transformation and it's a Quote,\n\t\t * is should move to the rest transformations. This is because Quote can\n\t\t * be a container for any block type, so in multi-block selection it will\n\t\t * always be suggested, even for non-text blocks.\n\t\t */\n\t\tif (\n\t\t\tgroupedPossibleTransforms.priorityTextTransformations.length ===\n\t\t\t\t1 &&\n\t\t\tgroupedPossibleTransforms.priorityTextTransformations[ 0 ].name ===\n\t\t\t\t'core/quote'\n\t\t) {\n\t\t\tconst singleQuote =\n\t\t\t\tgroupedPossibleTransforms.priorityTextTransformations.pop();\n\t\t\tgroupedPossibleTransforms.restTransformations.push( singleQuote );\n\t\t}\n\t\treturn groupedPossibleTransforms;\n\t}, [ possibleBlockTransformations ] );\n\n\t// Order the priority text transformations.\n\ttransformations.priorityTextTransformations.sort(\n\t\t( { name: currentName }, { name: nextName } ) => {\n\t\t\treturn priorityContentTranformationBlocks[ currentName ] <\n\t\t\t\tpriorityContentTranformationBlocks[ nextName ]\n\t\t\t\t? -1\n\t\t\t\t: 1;\n\t\t}\n\t);\n\treturn transformations;\n}\n\nconst BlockTransformationsMenu = ( {\n\tclassName,\n\tpossibleBlockTransformations,\n\tpossibleBlockVariationTransformations,\n\tonSelect,\n\tonSelectVariation,\n\tblocks,\n} ) => {\n\tconst [ hoveredTransformItemName, setHoveredTransformItemName ] =\n\t\tuseState();\n\n\tconst { priorityTextTransformations, restTransformations } =\n\t\tuseGroupedTransforms( possibleBlockTransformations );\n\t// We have to check if both content transformations(priority and rest) are set\n\t// in order to create a separate MenuGroup for them.\n\tconst hasBothContentTransformations =\n\t\tpriorityTextTransformations.length && restTransformations.length;\n\tconst restTransformItems = !! restTransformations.length && (\n\t\t<RestTransformationItems\n\t\t\trestTransformations={ restTransformations }\n\t\t\tonSelect={ onSelect }\n\t\t\tsetHoveredTransformItemName={ setHoveredTransformItemName }\n\t\t/>\n\t);\n\treturn (\n\t\t<>\n\t\t\t<MenuGroup label={ __( 'Transform to' ) } className={ className }>\n\t\t\t\t{ hoveredTransformItemName && (\n\t\t\t\t\t<PreviewBlockPopover\n\t\t\t\t\t\tblocks={ switchToBlockType(\n\t\t\t\t\t\t\tblocks,\n\t\t\t\t\t\t\thoveredTransformItemName\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ !! possibleBlockVariationTransformations?.length && (\n\t\t\t\t\t<BlockVariationTransformations\n\t\t\t\t\t\ttransformations={\n\t\t\t\t\t\t\tpossibleBlockVariationTransformations\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\tonSelect={ onSelectVariation }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ priorityTextTransformations.map( ( item ) => (\n\t\t\t\t\t<BlockTranformationItem\n\t\t\t\t\t\tkey={ item.name }\n\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\tsetHoveredTransformItemName={\n\t\t\t\t\t\t\tsetHoveredTransformItemName\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t\t{ ! hasBothContentTransformations && restTransformItems }\n\t\t\t</MenuGroup>\n\t\t\t{ !! hasBothContentTransformations && (\n\t\t\t\t<MenuGroup className={ className }>\n\t\t\t\t\t{ restTransformItems }\n\t\t\t\t</MenuGroup>\n\t\t\t) }\n\t\t</>\n\t);\n};\n\nfunction RestTransformationItems( {\n\trestTransformations,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\treturn restTransformations.map( ( item ) => (\n\t\t<BlockTranformationItem\n\t\t\tkey={ item.name }\n\t\t\titem={ item }\n\t\t\tonSelect={ onSelect }\n\t\t\tsetHoveredTransformItemName={ setHoveredTransformItemName }\n\t\t/>\n\t) );\n}\n\nfunction BlockTranformationItem( {\n\titem,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\tconst { name, icon, title, isDisabled } = item;\n\treturn (\n\t\t<MenuItem\n\t\t\tclassName={ getBlockMenuDefaultClassName( name ) }\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonSelect( name );\n\t\t\t} }\n\t\t\tdisabled={ isDisabled }\n\t\t\tonMouseLeave={ () => setHoveredTransformItemName( null ) }\n\t\t\tonMouseEnter={ () => setHoveredTransformItemName( name ) }\n\t\t>\n\t\t\t<BlockIcon icon={ icon } showColors />\n\t\t\t{ title }\n\t\t</MenuItem>\n\t);\n}\n\nexport default BlockTransformationsMenu;\n"],"mappings":"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"}
|
|
@@ -19,75 +19,45 @@ import { useBlockVariationTransforms } from './block-variation-transformations';
|
|
|
19
19
|
import BlockStylesMenu from './block-styles-menu';
|
|
20
20
|
import PatternTransformationsMenu from './pattern-transformations-menu';
|
|
21
21
|
import useBlockDisplayTitle from '../block-title/use-block-display-title';
|
|
22
|
-
|
|
22
|
+
function BlockSwitcherDropdownMenuContents({
|
|
23
|
+
onClose,
|
|
23
24
|
clientIds,
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
hasBlockStyles,
|
|
26
|
+
canRemove
|
|
27
|
+
}) {
|
|
26
28
|
const {
|
|
27
29
|
replaceBlocks,
|
|
28
30
|
multiSelect,
|
|
29
31
|
updateBlockAttributes
|
|
30
32
|
} = useDispatch(blockEditorStore);
|
|
31
|
-
const blockInformation = useBlockDisplayInformation(blocks[0].clientId);
|
|
32
33
|
const {
|
|
33
34
|
possibleBlockTransformations,
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
icon,
|
|
37
|
-
patterns
|
|
35
|
+
patterns,
|
|
36
|
+
blocks
|
|
38
37
|
} = useSelect(select => {
|
|
39
38
|
const {
|
|
39
|
+
getBlocksByClientId,
|
|
40
40
|
getBlockRootClientId,
|
|
41
41
|
getBlockTransformItems,
|
|
42
|
-
__experimentalGetPatternTransformItems
|
|
43
|
-
canRemoveBlocks
|
|
42
|
+
__experimentalGetPatternTransformItems
|
|
44
43
|
} = select(blockEditorStore);
|
|
45
|
-
const {
|
|
46
|
-
getBlockStyles,
|
|
47
|
-
getBlockType
|
|
48
|
-
} = select(blocksStore);
|
|
49
44
|
const rootClientId = getBlockRootClientId(Array.isArray(clientIds) ? clientIds[0] : clientIds);
|
|
50
|
-
const
|
|
51
|
-
name: firstBlockName
|
|
52
|
-
}] = blocks;
|
|
53
|
-
const _isSingleBlockSelected = blocks.length === 1;
|
|
54
|
-
const styles = _isSingleBlockSelected && getBlockStyles(firstBlockName);
|
|
55
|
-
let _icon;
|
|
56
|
-
if (_isSingleBlockSelected) {
|
|
57
|
-
_icon = blockInformation?.icon; // Take into account active block variations.
|
|
58
|
-
} else {
|
|
59
|
-
const isSelectionOfSameType = new Set(blocks.map(({
|
|
60
|
-
name
|
|
61
|
-
}) => name)).size === 1;
|
|
62
|
-
// When selection consists of blocks of multiple types, display an
|
|
63
|
-
// appropriate icon to communicate the non-uniformity.
|
|
64
|
-
_icon = isSelectionOfSameType ? getBlockType(firstBlockName)?.icon : copy;
|
|
65
|
-
}
|
|
45
|
+
const _blocks = getBlocksByClientId(clientIds);
|
|
66
46
|
return {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
icon: _icon,
|
|
71
|
-
patterns: __experimentalGetPatternTransformItems(blocks, rootClientId)
|
|
47
|
+
blocks: _blocks,
|
|
48
|
+
possibleBlockTransformations: getBlockTransformItems(_blocks, rootClientId),
|
|
49
|
+
patterns: __experimentalGetPatternTransformItems(_blocks, rootClientId)
|
|
72
50
|
};
|
|
73
|
-
}, [clientIds
|
|
51
|
+
}, [clientIds]);
|
|
74
52
|
const blockVariationTransformations = useBlockVariationTransforms({
|
|
75
53
|
clientIds,
|
|
76
54
|
blocks
|
|
77
55
|
});
|
|
78
|
-
const blockTitle = useBlockDisplayTitle({
|
|
79
|
-
clientId: Array.isArray(clientIds) ? clientIds[0] : clientIds,
|
|
80
|
-
maximumLength: 35
|
|
81
|
-
});
|
|
82
|
-
const isSingleBlock = blocks.length === 1;
|
|
83
|
-
const isReusable = isSingleBlock && isReusableBlock(blocks[0]);
|
|
84
|
-
const isTemplate = isSingleBlock && isTemplatePart(blocks[0]);
|
|
85
56
|
function selectForMultipleBlocks(insertedBlocks) {
|
|
86
57
|
if (insertedBlocks.length > 1) {
|
|
87
58
|
multiSelect(insertedBlocks[0].clientId, insertedBlocks[insertedBlocks.length - 1].clientId);
|
|
88
59
|
}
|
|
89
60
|
}
|
|
90
|
-
|
|
91
61
|
// Simple block tranformation based on the `Block Transforms` API.
|
|
92
62
|
function onBlockTransform(name) {
|
|
93
63
|
const newBlocks = switchToBlockType(blocks, name);
|
|
@@ -101,24 +71,115 @@ export const BlockSwitcherDropdownMenu = ({
|
|
|
101
71
|
}) => variationName === name).attributes
|
|
102
72
|
});
|
|
103
73
|
}
|
|
104
|
-
|
|
105
74
|
// Pattern transformation through the `Patterns` API.
|
|
106
75
|
function onPatternTransform(transformedBlocks) {
|
|
107
76
|
replaceBlocks(clientIds, transformedBlocks);
|
|
108
77
|
selectForMultipleBlocks(transformedBlocks);
|
|
109
78
|
}
|
|
110
|
-
|
|
111
79
|
/**
|
|
112
80
|
* The `isTemplate` check is a stopgap solution here.
|
|
113
81
|
* Ideally, the Transforms API should handle this
|
|
114
82
|
* by allowing to exclude blocks from wildcard transformations.
|
|
115
83
|
*/
|
|
84
|
+
const isSingleBlock = blocks.length === 1;
|
|
85
|
+
const isTemplate = isSingleBlock && isTemplatePart(blocks[0]);
|
|
116
86
|
const hasPossibleBlockTransformations = !!possibleBlockTransformations.length && canRemove && !isTemplate;
|
|
117
87
|
const hasPossibleBlockVariationTransformations = !!blockVariationTransformations?.length;
|
|
118
88
|
const hasPatternTransformation = !!patterns?.length && canRemove;
|
|
119
89
|
const hasBlockOrBlockVariationTransforms = hasPossibleBlockTransformations || hasPossibleBlockVariationTransformations;
|
|
120
|
-
const
|
|
121
|
-
if (!
|
|
90
|
+
const hasContents = hasBlockStyles || hasBlockOrBlockVariationTransforms || hasPatternTransformation;
|
|
91
|
+
if (!hasContents) {
|
|
92
|
+
return createElement("p", {
|
|
93
|
+
className: "block-editor-block-switcher__no-transforms"
|
|
94
|
+
}, __('No transforms.'));
|
|
95
|
+
}
|
|
96
|
+
return createElement("div", {
|
|
97
|
+
className: "block-editor-block-switcher__container"
|
|
98
|
+
}, hasPatternTransformation && createElement(PatternTransformationsMenu, {
|
|
99
|
+
blocks: blocks,
|
|
100
|
+
patterns: patterns,
|
|
101
|
+
onSelect: transformedBlocks => {
|
|
102
|
+
onPatternTransform(transformedBlocks);
|
|
103
|
+
onClose();
|
|
104
|
+
}
|
|
105
|
+
}), hasBlockOrBlockVariationTransforms && createElement(BlockTransformationsMenu, {
|
|
106
|
+
className: "block-editor-block-switcher__transforms__menugroup",
|
|
107
|
+
possibleBlockTransformations: possibleBlockTransformations,
|
|
108
|
+
possibleBlockVariationTransformations: blockVariationTransformations,
|
|
109
|
+
blocks: blocks,
|
|
110
|
+
onSelect: name => {
|
|
111
|
+
onBlockTransform(name);
|
|
112
|
+
onClose();
|
|
113
|
+
},
|
|
114
|
+
onSelectVariation: name => {
|
|
115
|
+
onBlockVariationTransform(name);
|
|
116
|
+
onClose();
|
|
117
|
+
}
|
|
118
|
+
}), hasBlockStyles && createElement(BlockStylesMenu, {
|
|
119
|
+
hoveredBlock: blocks[0],
|
|
120
|
+
onSwitch: onClose
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
export const BlockSwitcher = ({
|
|
124
|
+
clientIds
|
|
125
|
+
}) => {
|
|
126
|
+
const blockInformation = useBlockDisplayInformation(clientIds?.[0]);
|
|
127
|
+
const {
|
|
128
|
+
canRemove,
|
|
129
|
+
hasBlockStyles,
|
|
130
|
+
icon,
|
|
131
|
+
invalidBlocks,
|
|
132
|
+
isReusable,
|
|
133
|
+
isTemplate
|
|
134
|
+
} = useSelect(select => {
|
|
135
|
+
const {
|
|
136
|
+
getBlockRootClientId,
|
|
137
|
+
getBlocksByClientId,
|
|
138
|
+
canRemoveBlocks
|
|
139
|
+
} = select(blockEditorStore);
|
|
140
|
+
const {
|
|
141
|
+
getBlockStyles,
|
|
142
|
+
getBlockType
|
|
143
|
+
} = select(blocksStore);
|
|
144
|
+
const _blocks = getBlocksByClientId(clientIds);
|
|
145
|
+
if (!_blocks.length || _blocks.some(block => !block)) {
|
|
146
|
+
return {
|
|
147
|
+
invalidBlocks: true
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
const rootClientId = getBlockRootClientId(clientIds);
|
|
151
|
+
const [{
|
|
152
|
+
name: firstBlockName
|
|
153
|
+
}] = _blocks;
|
|
154
|
+
const _isSingleBlockSelected = _blocks.length === 1;
|
|
155
|
+
let _icon;
|
|
156
|
+
if (_isSingleBlockSelected) {
|
|
157
|
+
_icon = blockInformation?.icon; // Take into account active block variations.
|
|
158
|
+
} else {
|
|
159
|
+
const isSelectionOfSameType = new Set(_blocks.map(({
|
|
160
|
+
name
|
|
161
|
+
}) => name)).size === 1;
|
|
162
|
+
// When selection consists of blocks of multiple types, display an
|
|
163
|
+
// appropriate icon to communicate the non-uniformity.
|
|
164
|
+
_icon = isSelectionOfSameType ? getBlockType(firstBlockName)?.icon : copy;
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
canRemove: canRemoveBlocks(clientIds, rootClientId),
|
|
168
|
+
hasBlockStyles: _isSingleBlockSelected && !!getBlockStyles(firstBlockName)?.length,
|
|
169
|
+
icon: _icon,
|
|
170
|
+
isReusable: _isSingleBlockSelected && isReusableBlock(_blocks[0]),
|
|
171
|
+
isTemplate: _isSingleBlockSelected && isTemplatePart(_blocks[0])
|
|
172
|
+
};
|
|
173
|
+
}, [clientIds, blockInformation?.icon]);
|
|
174
|
+
const blockTitle = useBlockDisplayTitle({
|
|
175
|
+
clientId: clientIds?.[0],
|
|
176
|
+
maximumLength: 35
|
|
177
|
+
});
|
|
178
|
+
if (invalidBlocks) {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
const hideDropdown = !hasBlockStyles && !canRemove;
|
|
182
|
+
if (hideDropdown) {
|
|
122
183
|
return createElement(ToolbarGroup, null, createElement(ToolbarButton, {
|
|
123
184
|
disabled: true,
|
|
124
185
|
className: "block-editor-block-switcher__no-switcher-icon",
|
|
@@ -131,9 +192,10 @@ export const BlockSwitcherDropdownMenu = ({
|
|
|
131
192
|
}, blockTitle))
|
|
132
193
|
}));
|
|
133
194
|
}
|
|
195
|
+
const isSingleBlock = clientIds.length === 1;
|
|
134
196
|
const blockSwitcherLabel = isSingleBlock ? blockTitle : __('Multiple blocks selected');
|
|
135
197
|
const blockSwitcherDescription = isSingleBlock ? __('Change block type or style') : sprintf( /* translators: %d: number of blocks. */
|
|
136
|
-
_n('Change type of %d block', 'Change type of %d blocks',
|
|
198
|
+
_n('Change type of %d block', 'Change type of %d blocks', clientIds.length), clientIds.length);
|
|
137
199
|
return createElement(ToolbarGroup, null, createElement(ToolbarItem, null, toggleProps => createElement(DropdownMenu, {
|
|
138
200
|
className: "block-editor-block-switcher",
|
|
139
201
|
label: blockSwitcherLabel,
|
|
@@ -157,44 +219,12 @@ export const BlockSwitcherDropdownMenu = ({
|
|
|
157
219
|
}
|
|
158
220
|
}, ({
|
|
159
221
|
onClose
|
|
160
|
-
}) => createElement(
|
|
161
|
-
|
|
162
|
-
}, hasPatternTransformation && createElement(PatternTransformationsMenu, {
|
|
163
|
-
blocks: blocks,
|
|
164
|
-
patterns: patterns,
|
|
165
|
-
onSelect: transformedBlocks => {
|
|
166
|
-
onPatternTransform(transformedBlocks);
|
|
167
|
-
onClose();
|
|
168
|
-
}
|
|
169
|
-
}), hasBlockOrBlockVariationTransforms && createElement(BlockTransformationsMenu, {
|
|
170
|
-
className: "block-editor-block-switcher__transforms__menugroup",
|
|
171
|
-
possibleBlockTransformations: possibleBlockTransformations,
|
|
172
|
-
possibleBlockVariationTransformations: blockVariationTransformations,
|
|
173
|
-
blocks: blocks,
|
|
174
|
-
onSelect: name => {
|
|
175
|
-
onBlockTransform(name);
|
|
176
|
-
onClose();
|
|
177
|
-
},
|
|
178
|
-
onSelectVariation: name => {
|
|
179
|
-
onBlockVariationTransform(name);
|
|
180
|
-
onClose();
|
|
181
|
-
}
|
|
182
|
-
}), hasBlockStyles && createElement(BlockStylesMenu, {
|
|
183
|
-
hoveredBlock: blocks[0],
|
|
184
|
-
onSwitch: onClose
|
|
185
|
-
})))));
|
|
186
|
-
};
|
|
187
|
-
export const BlockSwitcher = ({
|
|
188
|
-
clientIds
|
|
189
|
-
}) => {
|
|
190
|
-
const blocks = useSelect(select => select(blockEditorStore).getBlocksByClientId(clientIds), [clientIds]);
|
|
191
|
-
if (!blocks.length || blocks.some(block => !block)) {
|
|
192
|
-
return null;
|
|
193
|
-
}
|
|
194
|
-
return createElement(BlockSwitcherDropdownMenu, {
|
|
222
|
+
}) => createElement(BlockSwitcherDropdownMenuContents, {
|
|
223
|
+
onClose: onClose,
|
|
195
224
|
clientIds: clientIds,
|
|
196
|
-
|
|
197
|
-
|
|
225
|
+
hasBlockStyles: hasBlockStyles,
|
|
226
|
+
canRemove: canRemove
|
|
227
|
+
}))));
|
|
198
228
|
};
|
|
199
229
|
export default BlockSwitcher;
|
|
200
230
|
//# sourceMappingURL=index.js.map
|