@wordpress/block-editor 13.0.1 → 13.0.2
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/build/components/block-actions/index.js +4 -6
- package/build/components/block-actions/index.js.map +1 -1
- package/build/components/block-draggable/index.js +1 -1
- package/build/components/block-draggable/index.js.map +1 -1
- package/build/components/block-list/block.js +2 -2
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/block.native.js +2 -2
- package/build/components/block-list/block.native.js.map +1 -1
- package/build/components/block-list/use-in-between-inserter.js +3 -1
- package/build/components/block-list/use-in-between-inserter.js.map +1 -1
- package/build/components/block-lock/use-block-lock.js +2 -4
- package/build/components/block-lock/use-block-lock.js.map +1 -1
- package/build/components/block-mover/index.js +1 -1
- package/build/components/block-mover/index.js.map +1 -1
- package/build/components/block-mover/index.native.js +1 -1
- package/build/components/block-mover/index.native.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-switcher/block-variation-transformations.js +1 -3
- package/build/components/block-switcher/block-variation-transformations.js.map +1 -1
- package/build/components/block-switcher/index.js +13 -6
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-toolbar/index.js +6 -10
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/block-tools/block-selection-button.js +2 -2
- package/build/components/block-tools/block-selection-button.js.map +1 -1
- package/build/components/global-styles/hooks.js +1 -1
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +14 -1
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/list-view/block.js +7 -6
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/branch.js +3 -1
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/use-clipboard-handler.js +1 -1
- package/build/components/list-view/use-clipboard-handler.js.map +1 -1
- package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js +4 -4
- package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
- package/build/components/use-block-commands/index.js +3 -3
- package/build/components/use-block-commands/index.js.map +1 -1
- package/build/hooks/block-bindings.js +19 -16
- package/build/hooks/block-bindings.js.map +1 -1
- package/build/hooks/block-style-variation.js +22 -4
- package/build/hooks/block-style-variation.js.map +1 -1
- package/build/hooks/use-bindings-attributes.js +7 -2
- package/build/hooks/use-bindings-attributes.js.map +1 -1
- package/build/hooks/utils.js +3 -2
- package/build/hooks/utils.js.map +1 -1
- package/build/lock-unlock.js +1 -1
- package/build/lock-unlock.js.map +1 -1
- package/build/private-apis.js +3 -1
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +20 -4
- package/build/store/actions.js.map +1 -1
- package/build/store/private-actions.js +1 -2
- package/build/store/private-actions.js.map +1 -1
- package/build/store/selectors.js +17 -19
- package/build/store/selectors.js.map +1 -1
- package/build-module/components/block-actions/index.js +4 -6
- package/build-module/components/block-actions/index.js.map +1 -1
- package/build-module/components/block-draggable/index.js +1 -1
- package/build-module/components/block-draggable/index.js.map +1 -1
- package/build-module/components/block-list/block.js +2 -2
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/block.native.js +2 -2
- package/build-module/components/block-list/block.native.js.map +1 -1
- package/build-module/components/block-list/use-in-between-inserter.js +3 -1
- package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
- package/build-module/components/block-lock/use-block-lock.js +2 -4
- package/build-module/components/block-lock/use-block-lock.js.map +1 -1
- package/build-module/components/block-mover/index.js +1 -1
- package/build-module/components/block-mover/index.js.map +1 -1
- package/build-module/components/block-mover/index.native.js +1 -1
- package/build-module/components/block-mover/index.native.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-switcher/block-variation-transformations.js +1 -3
- package/build-module/components/block-switcher/block-variation-transformations.js.map +1 -1
- package/build-module/components/block-switcher/index.js +15 -8
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-toolbar/index.js +7 -10
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/block-tools/block-selection-button.js +2 -2
- package/build-module/components/block-tools/block-selection-button.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +1 -1
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +14 -1
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/list-view/block.js +7 -6
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/branch.js +3 -1
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/use-clipboard-handler.js +1 -1
- package/build-module/components/list-view/use-clipboard-handler.js.map +1 -1
- package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js +4 -4
- package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
- package/build-module/components/use-block-commands/index.js +3 -3
- package/build-module/components/use-block-commands/index.js.map +1 -1
- package/build-module/hooks/block-bindings.js +20 -17
- package/build-module/hooks/block-bindings.js.map +1 -1
- package/build-module/hooks/block-style-variation.js +21 -4
- package/build-module/hooks/block-style-variation.js.map +1 -1
- package/build-module/hooks/use-bindings-attributes.js +7 -2
- package/build-module/hooks/use-bindings-attributes.js.map +1 -1
- package/build-module/hooks/utils.js +3 -2
- package/build-module/hooks/utils.js.map +1 -1
- package/build-module/lock-unlock.js +1 -1
- package/build-module/lock-unlock.js.map +1 -1
- package/build-module/private-apis.js +3 -1
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +20 -4
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/private-actions.js +1 -2
- package/build-module/store/private-actions.js.map +1 -1
- package/build-module/store/selectors.js +17 -19
- package/build-module/store/selectors.js.map +1 -1
- package/build-style/style-rtl.css +8 -17
- package/build-style/style.css +8 -17
- package/package.json +12 -12
- package/src/components/block-actions/index.js +3 -7
- package/src/components/block-draggable/index.js +1 -1
- package/src/components/block-list/block.js +2 -2
- package/src/components/block-list/block.native.js +2 -2
- package/src/components/block-list/use-in-between-inserter.js +3 -1
- package/src/components/block-lock/use-block-lock.js +2 -4
- package/src/components/block-mover/index.js +1 -1
- package/src/components/block-mover/index.native.js +1 -1
- package/src/components/block-settings-menu/block-settings-dropdown.js +1 -1
- package/src/components/block-switcher/block-variation-transformations.js +4 -9
- package/src/components/block-switcher/index.js +27 -12
- package/src/components/block-switcher/style.scss +5 -0
- package/src/components/block-toolbar/index.js +7 -9
- package/src/components/block-toolbar/style.scss +9 -6
- package/src/components/block-tools/block-selection-button.js +2 -2
- package/src/components/global-styles/hooks.js +1 -4
- package/src/components/global-styles/use-global-styles-output.js +24 -4
- package/src/components/list-view/block.js +7 -7
- package/src/components/list-view/branch.js +5 -1
- package/src/components/list-view/use-clipboard-handler.js +1 -6
- package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +2 -9
- package/src/components/use-block-commands/index.js +3 -4
- package/src/hooks/block-bindings.js +28 -22
- package/src/hooks/block-style-variation.js +21 -4
- package/src/hooks/use-bindings-attributes.js +11 -1
- package/src/hooks/utils.js +3 -1
- package/src/lock-unlock.js +1 -1
- package/src/private-apis.js +2 -0
- package/src/store/actions.js +24 -10
- package/src/store/private-actions.js +1 -5
- package/src/store/selectors.js +19 -26
- package/src/style.scss +0 -1
- package/build/components/block-bindings-toolbar-indicator/index.js +0 -106
- package/build/components/block-bindings-toolbar-indicator/index.js.map +0 -1
- package/build-module/components/block-bindings-toolbar-indicator/index.js +0 -99
- package/build-module/components/block-bindings-toolbar-indicator/index.js.map +0 -1
- package/src/components/block-bindings-toolbar-indicator/index.js +0 -137
- package/src/components/block-bindings-toolbar-indicator/style.scss +0 -12
|
@@ -44,15 +44,8 @@ export default function useSpacingSizes() {
|
|
|
44
44
|
...defaultSizes,
|
|
45
45
|
];
|
|
46
46
|
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
// want a custom order.
|
|
50
|
-
if (
|
|
51
|
-
( customSizes.length && 1 ) +
|
|
52
|
-
( themeSizes.length && 1 ) +
|
|
53
|
-
( defaultSizes.length && 1 ) >
|
|
54
|
-
1
|
|
55
|
-
) {
|
|
47
|
+
// Using numeric slugs opts-in to sorting by slug.
|
|
48
|
+
if ( sizes.every( ( { slug } ) => /^[0-9]/.test( slug ) ) ) {
|
|
56
49
|
sizes.sort( ( a, b ) => compare( a.slug, b.slug ) );
|
|
57
50
|
}
|
|
58
51
|
|
|
@@ -65,7 +65,7 @@ export const useTransformCommands = () => {
|
|
|
65
65
|
selectedBlocks,
|
|
66
66
|
rootClientId
|
|
67
67
|
),
|
|
68
|
-
canRemove: canRemoveBlocks( selectedBlockClientIds
|
|
68
|
+
canRemove: canRemoveBlocks( selectedBlockClientIds ),
|
|
69
69
|
invalidSelection: false,
|
|
70
70
|
};
|
|
71
71
|
}, [] );
|
|
@@ -150,8 +150,7 @@ const useActionsCommands = () => {
|
|
|
150
150
|
const rootClientId = getBlockRootClientId( clientIds[ 0 ] );
|
|
151
151
|
|
|
152
152
|
const canMove =
|
|
153
|
-
canMoveBlocks( clientIds
|
|
154
|
-
getBlockCount( rootClientId ) !== 1;
|
|
153
|
+
canMoveBlocks( clientIds ) && getBlockCount( rootClientId ) !== 1;
|
|
155
154
|
|
|
156
155
|
const commands = [];
|
|
157
156
|
|
|
@@ -260,7 +259,7 @@ const useQuickActionsCommands = () => {
|
|
|
260
259
|
canInsertBlockType( block.name, rootClientId )
|
|
261
260
|
);
|
|
262
261
|
} );
|
|
263
|
-
const canRemove = canRemoveBlocks( clientIds
|
|
262
|
+
const canRemove = canRemoveBlocks( clientIds );
|
|
264
263
|
|
|
265
264
|
const commands = [];
|
|
266
265
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { __ } from '@wordpress/i18n';
|
|
5
5
|
import { store as blocksStore } from '@wordpress/blocks';
|
|
6
6
|
import {
|
|
7
|
+
BaseControl,
|
|
7
8
|
PanelBody,
|
|
8
9
|
__experimentalHStack as HStack,
|
|
9
10
|
__experimentalItemGroup as ItemGroup,
|
|
@@ -54,30 +55,35 @@ export const BlockBindingsPanel = ( { name, metadata } ) => {
|
|
|
54
55
|
return (
|
|
55
56
|
<InspectorControls>
|
|
56
57
|
<PanelBody
|
|
57
|
-
title={ __( '
|
|
58
|
+
title={ __( 'Attributes' ) }
|
|
58
59
|
className="components-panel__block-bindings-panel"
|
|
59
60
|
>
|
|
60
|
-
<
|
|
61
|
-
{
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
61
|
+
<BaseControl
|
|
62
|
+
help={ __( 'Attributes connected to various sources.' ) }
|
|
63
|
+
>
|
|
64
|
+
<ItemGroup isBordered isSeparated size="large">
|
|
65
|
+
{ Object.keys( filteredBindings ).map( ( key ) => {
|
|
66
|
+
return (
|
|
67
|
+
<Item key={ key }>
|
|
68
|
+
<HStack>
|
|
69
|
+
<span>{ key }</span>
|
|
70
|
+
<span className="components-item__block-bindings-source">
|
|
71
|
+
{ sources[
|
|
72
|
+
filteredBindings[ key ].source
|
|
73
|
+
]
|
|
74
|
+
? sources[
|
|
75
|
+
filteredBindings[ key ]
|
|
76
|
+
.source
|
|
77
|
+
].label
|
|
78
|
+
: filteredBindings[ key ]
|
|
79
|
+
.source }
|
|
80
|
+
</span>
|
|
81
|
+
</HStack>
|
|
82
|
+
</Item>
|
|
83
|
+
);
|
|
84
|
+
} ) }
|
|
85
|
+
</ItemGroup>
|
|
86
|
+
</BaseControl>
|
|
81
87
|
</PanelBody>
|
|
82
88
|
</InspectorControls>
|
|
83
89
|
);
|
|
@@ -17,6 +17,23 @@ import { useStyleOverride } from './utils';
|
|
|
17
17
|
import { store as blockEditorStore } from '../store';
|
|
18
18
|
import { globalStylesDataKey } from '../store/private-keys';
|
|
19
19
|
|
|
20
|
+
const VARIATION_PREFIX = 'is-style-';
|
|
21
|
+
|
|
22
|
+
function getVariationMatches( className ) {
|
|
23
|
+
if ( ! className ) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
return className.split( /\s+/ ).reduce( ( matches, name ) => {
|
|
27
|
+
if ( name.startsWith( VARIATION_PREFIX ) ) {
|
|
28
|
+
const match = name.slice( VARIATION_PREFIX.length );
|
|
29
|
+
if ( match !== 'default' ) {
|
|
30
|
+
matches.push( match );
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return matches;
|
|
34
|
+
}, [] );
|
|
35
|
+
}
|
|
36
|
+
|
|
20
37
|
/**
|
|
21
38
|
* Get the first block style variation that has been registered from the class string.
|
|
22
39
|
*
|
|
@@ -28,14 +45,13 @@ import { globalStylesDataKey } from '../store/private-keys';
|
|
|
28
45
|
function getVariationNameFromClass( className, registeredStyles = [] ) {
|
|
29
46
|
// The global flag affects how capturing groups work in JS. So the regex
|
|
30
47
|
// below will only return full CSS classes not just the variation name.
|
|
31
|
-
const matches =
|
|
48
|
+
const matches = getVariationMatches( className );
|
|
32
49
|
|
|
33
50
|
if ( ! matches ) {
|
|
34
51
|
return null;
|
|
35
52
|
}
|
|
36
53
|
|
|
37
|
-
for ( const
|
|
38
|
-
const variation = variationClass.substring( 9 ); // Remove 'is-style-' prefix.
|
|
54
|
+
for ( const variation of matches ) {
|
|
39
55
|
if ( registeredStyles.some( ( style ) => style.name === variation ) ) {
|
|
40
56
|
return variation;
|
|
41
57
|
}
|
|
@@ -94,7 +110,7 @@ function useBlockProps( { name, className, clientId } ) {
|
|
|
94
110
|
|
|
95
111
|
const registeredStyles = getBlockStyles( name );
|
|
96
112
|
const variation = getVariationNameFromClass( className, registeredStyles );
|
|
97
|
-
const variationClass =
|
|
113
|
+
const variationClass = `${ VARIATION_PREFIX }${ variation }-${ clientId }`;
|
|
98
114
|
|
|
99
115
|
const { settings, styles } = useBlockSyleVariation(
|
|
100
116
|
name,
|
|
@@ -152,5 +168,6 @@ function useBlockProps( { name, className, clientId } ) {
|
|
|
152
168
|
export default {
|
|
153
169
|
hasSupport: () => true,
|
|
154
170
|
attributeKeys: [ 'className' ],
|
|
171
|
+
isMatch: ( { className } ) => getVariationMatches( className ).length > 0,
|
|
155
172
|
useBlockProps,
|
|
156
173
|
};
|
|
@@ -97,6 +97,9 @@ export const withBlockBindingSupport = createHigherOrderComponent(
|
|
|
97
97
|
unlock( select( blocksStore ) ).getAllBlockBindingsSources()
|
|
98
98
|
);
|
|
99
99
|
const { name, clientId, context } = props;
|
|
100
|
+
const hasPatternOverridesDefaultBinding =
|
|
101
|
+
props.attributes.metadata?.bindings?.[ DEFAULT_ATTRIBUTE ]
|
|
102
|
+
?.source === 'core/pattern-overrides';
|
|
100
103
|
const bindings = useMemo(
|
|
101
104
|
() =>
|
|
102
105
|
replacePatternOverrideDefaultBindings(
|
|
@@ -213,7 +216,13 @@ export const withBlockBindingSupport = createHigherOrderComponent(
|
|
|
213
216
|
}
|
|
214
217
|
}
|
|
215
218
|
|
|
216
|
-
|
|
219
|
+
// Only apply normal attribute updates to blocks
|
|
220
|
+
// that have partial bindings. Currently this is
|
|
221
|
+
// only skipped for pattern overrides sources.
|
|
222
|
+
if (
|
|
223
|
+
! hasPatternOverridesDefaultBinding &&
|
|
224
|
+
Object.keys( keptAttributes ).length
|
|
225
|
+
) {
|
|
217
226
|
setAttributes( keptAttributes );
|
|
218
227
|
}
|
|
219
228
|
} );
|
|
@@ -226,6 +235,7 @@ export const withBlockBindingSupport = createHigherOrderComponent(
|
|
|
226
235
|
context,
|
|
227
236
|
setAttributes,
|
|
228
237
|
sources,
|
|
238
|
+
hasPatternOverridesDefaultBinding,
|
|
229
239
|
]
|
|
230
240
|
);
|
|
231
241
|
|
package/src/hooks/utils.js
CHANGED
|
@@ -582,6 +582,7 @@ export function createBlockListBlockFilter( features ) {
|
|
|
582
582
|
hasSupport,
|
|
583
583
|
attributeKeys = [],
|
|
584
584
|
useBlockProps,
|
|
585
|
+
isMatch,
|
|
585
586
|
} = feature;
|
|
586
587
|
|
|
587
588
|
const neededProps = {};
|
|
@@ -595,7 +596,8 @@ export function createBlockListBlockFilter( features ) {
|
|
|
595
596
|
// Skip rendering if none of the needed attributes are
|
|
596
597
|
// set.
|
|
597
598
|
! Object.keys( neededProps ).length ||
|
|
598
|
-
! hasSupport( props.name )
|
|
599
|
+
! hasSupport( props.name ) ||
|
|
600
|
+
( isMatch && ! isMatch( neededProps ) )
|
|
599
601
|
) {
|
|
600
602
|
return null;
|
|
601
603
|
}
|
package/src/lock-unlock.js
CHANGED
|
@@ -5,6 +5,6 @@ import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/pri
|
|
|
5
5
|
|
|
6
6
|
export const { lock, unlock } =
|
|
7
7
|
__dangerousOptInToUnstableAPIsOnlyForCoreModules(
|
|
8
|
-
'I
|
|
8
|
+
'I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.',
|
|
9
9
|
'@wordpress/block-editor'
|
|
10
10
|
);
|
package/src/private-apis.js
CHANGED
|
@@ -43,6 +43,7 @@ import { PrivateBlockPopover } from './components/block-popover';
|
|
|
43
43
|
import { PrivateInserterLibrary } from './components/inserter/library';
|
|
44
44
|
import { PrivatePublishDateTimePicker } from './components/publish-date-time-picker';
|
|
45
45
|
import useSpacingSizes from './components/spacing-sizes-control/hooks/use-spacing-sizes';
|
|
46
|
+
import useBlockDisplayTitle from './components/block-title/use-block-display-title';
|
|
46
47
|
|
|
47
48
|
/**
|
|
48
49
|
* Private @wordpress/block-editor APIs.
|
|
@@ -86,4 +87,5 @@ lock( privateApis, {
|
|
|
86
87
|
PrivateBlockPopover,
|
|
87
88
|
PrivatePublishDateTimePicker,
|
|
88
89
|
useSpacingSizes,
|
|
90
|
+
useBlockDisplayTitle,
|
|
89
91
|
} );
|
package/src/store/actions.js
CHANGED
|
@@ -409,7 +409,7 @@ const createOnMove =
|
|
|
409
409
|
( clientIds, rootClientId ) =>
|
|
410
410
|
( { select, dispatch } ) => {
|
|
411
411
|
// If one of the blocks is locked or the parent is locked, we cannot move any block.
|
|
412
|
-
const canMoveBlocks = select.canMoveBlocks( clientIds
|
|
412
|
+
const canMoveBlocks = select.canMoveBlocks( clientIds );
|
|
413
413
|
if ( ! canMoveBlocks ) {
|
|
414
414
|
return;
|
|
415
415
|
}
|
|
@@ -431,10 +431,7 @@ export const moveBlocksUp = createOnMove( 'MOVE_BLOCKS_UP' );
|
|
|
431
431
|
export const moveBlocksToPosition =
|
|
432
432
|
( clientIds, fromRootClientId = '', toRootClientId = '', index ) =>
|
|
433
433
|
( { select, dispatch } ) => {
|
|
434
|
-
const canMoveBlocks = select.canMoveBlocks(
|
|
435
|
-
clientIds,
|
|
436
|
-
fromRootClientId
|
|
437
|
-
);
|
|
434
|
+
const canMoveBlocks = select.canMoveBlocks( clientIds );
|
|
438
435
|
|
|
439
436
|
// If one of the blocks is locked or the parent is locked, we cannot move any block.
|
|
440
437
|
if ( ! canMoveBlocks ) {
|
|
@@ -443,10 +440,7 @@ export const moveBlocksToPosition =
|
|
|
443
440
|
|
|
444
441
|
// If moving inside the same root block the move is always possible.
|
|
445
442
|
if ( fromRootClientId !== toRootClientId ) {
|
|
446
|
-
const canRemoveBlocks = select.canRemoveBlocks(
|
|
447
|
-
clientIds,
|
|
448
|
-
fromRootClientId
|
|
449
|
-
);
|
|
443
|
+
const canRemoveBlocks = select.canRemoveBlocks( clientIds );
|
|
450
444
|
|
|
451
445
|
// If we're moving to another block, it means we're deleting blocks from
|
|
452
446
|
// the original block, so we need to check if removing is possible.
|
|
@@ -988,7 +982,7 @@ export const __unstableSplitSelection =
|
|
|
988
982
|
},
|
|
989
983
|
};
|
|
990
984
|
|
|
991
|
-
|
|
985
|
+
let tail = {
|
|
992
986
|
...blockB,
|
|
993
987
|
// Only preserve the original client ID if the end is different.
|
|
994
988
|
clientId:
|
|
@@ -1001,6 +995,26 @@ export const __unstableSplitSelection =
|
|
|
1001
995
|
},
|
|
1002
996
|
};
|
|
1003
997
|
|
|
998
|
+
// When splitting a block, attempt to convert the tail block to the
|
|
999
|
+
// default block type. For example, when splitting a heading block, the
|
|
1000
|
+
// tail block will be converted to a paragraph block. Note that for
|
|
1001
|
+
// blocks such as a list item and button, this will be skipped because
|
|
1002
|
+
// the default block type cannot be inserted.
|
|
1003
|
+
const defaultBlockName = getDefaultBlockName();
|
|
1004
|
+
if (
|
|
1005
|
+
// A block is only split when the selection is within the same
|
|
1006
|
+
// block.
|
|
1007
|
+
blockA.clientId === blockB.clientId &&
|
|
1008
|
+
defaultBlockName &&
|
|
1009
|
+
tail.name !== defaultBlockName &&
|
|
1010
|
+
select.canInsertBlockType( defaultBlockName, anchorRootClientId )
|
|
1011
|
+
) {
|
|
1012
|
+
const switched = switchToBlockType( tail, defaultBlockName );
|
|
1013
|
+
if ( switched?.length === 1 ) {
|
|
1014
|
+
tail = switched[ 0 ];
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1004
1018
|
if ( ! blocks.length ) {
|
|
1005
1019
|
dispatch.replaceBlocks( select.getSelectedBlockClientIds(), [
|
|
1006
1020
|
head,
|
|
@@ -105,11 +105,7 @@ export const privateRemoveBlocks =
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
clientIds = castArray( clientIds );
|
|
108
|
-
const
|
|
109
|
-
const canRemoveBlocks = select.canRemoveBlocks(
|
|
110
|
-
clientIds,
|
|
111
|
-
rootClientId
|
|
112
|
-
);
|
|
108
|
+
const canRemoveBlocks = select.canRemoveBlocks( clientIds );
|
|
113
109
|
|
|
114
110
|
if ( ! canRemoveBlocks ) {
|
|
115
111
|
return;
|
package/src/store/selectors.js
CHANGED
|
@@ -1712,13 +1712,12 @@ export function canInsertBlocks( state, clientIds, rootClientId = null ) {
|
|
|
1712
1712
|
/**
|
|
1713
1713
|
* Determines if the given block is allowed to be deleted.
|
|
1714
1714
|
*
|
|
1715
|
-
* @param {Object}
|
|
1716
|
-
* @param {string}
|
|
1717
|
-
* @param {?string} rootClientId Optional root client ID of block list.
|
|
1715
|
+
* @param {Object} state Editor state.
|
|
1716
|
+
* @param {string} clientId The block client Id.
|
|
1718
1717
|
*
|
|
1719
1718
|
* @return {boolean} Whether the given block is allowed to be removed.
|
|
1720
1719
|
*/
|
|
1721
|
-
export function canRemoveBlock( state, clientId
|
|
1720
|
+
export function canRemoveBlock( state, clientId ) {
|
|
1722
1721
|
const attributes = getBlockAttributes( state, clientId );
|
|
1723
1722
|
if ( attributes === null ) {
|
|
1724
1723
|
return true;
|
|
@@ -1726,6 +1725,8 @@ export function canRemoveBlock( state, clientId, rootClientId = null ) {
|
|
|
1726
1725
|
if ( attributes.lock?.remove !== undefined ) {
|
|
1727
1726
|
return ! attributes.lock.remove;
|
|
1728
1727
|
}
|
|
1728
|
+
|
|
1729
|
+
const rootClientId = getBlockRootClientId( state, clientId );
|
|
1729
1730
|
if ( getTemplateLock( state, rootClientId ) ) {
|
|
1730
1731
|
return false;
|
|
1731
1732
|
}
|
|
@@ -1736,28 +1737,24 @@ export function canRemoveBlock( state, clientId, rootClientId = null ) {
|
|
|
1736
1737
|
/**
|
|
1737
1738
|
* Determines if the given blocks are allowed to be removed.
|
|
1738
1739
|
*
|
|
1739
|
-
* @param {Object}
|
|
1740
|
-
* @param {string}
|
|
1741
|
-
* @param {?string} rootClientId Optional root client ID of block list.
|
|
1740
|
+
* @param {Object} state Editor state.
|
|
1741
|
+
* @param {string} clientIds The block client IDs to be removed.
|
|
1742
1742
|
*
|
|
1743
1743
|
* @return {boolean} Whether the given blocks are allowed to be removed.
|
|
1744
1744
|
*/
|
|
1745
|
-
export function canRemoveBlocks( state, clientIds
|
|
1746
|
-
return clientIds.every( ( clientId ) =>
|
|
1747
|
-
canRemoveBlock( state, clientId, rootClientId )
|
|
1748
|
-
);
|
|
1745
|
+
export function canRemoveBlocks( state, clientIds ) {
|
|
1746
|
+
return clientIds.every( ( clientId ) => canRemoveBlock( state, clientId ) );
|
|
1749
1747
|
}
|
|
1750
1748
|
|
|
1751
1749
|
/**
|
|
1752
1750
|
* Determines if the given block is allowed to be moved.
|
|
1753
1751
|
*
|
|
1754
|
-
* @param {Object}
|
|
1755
|
-
* @param {string}
|
|
1756
|
-
* @param {?string} rootClientId Optional root client ID of block list.
|
|
1752
|
+
* @param {Object} state Editor state.
|
|
1753
|
+
* @param {string} clientId The block client Id.
|
|
1757
1754
|
*
|
|
1758
1755
|
* @return {boolean | undefined} Whether the given block is allowed to be moved.
|
|
1759
1756
|
*/
|
|
1760
|
-
export function canMoveBlock( state, clientId
|
|
1757
|
+
export function canMoveBlock( state, clientId ) {
|
|
1761
1758
|
const attributes = getBlockAttributes( state, clientId );
|
|
1762
1759
|
if ( attributes === null ) {
|
|
1763
1760
|
return true;
|
|
@@ -1765,6 +1762,8 @@ export function canMoveBlock( state, clientId, rootClientId = null ) {
|
|
|
1765
1762
|
if ( attributes.lock?.move !== undefined ) {
|
|
1766
1763
|
return ! attributes.lock.move;
|
|
1767
1764
|
}
|
|
1765
|
+
|
|
1766
|
+
const rootClientId = getBlockRootClientId( state, clientId );
|
|
1768
1767
|
if ( getTemplateLock( state, rootClientId ) === 'all' ) {
|
|
1769
1768
|
return false;
|
|
1770
1769
|
}
|
|
@@ -1774,16 +1773,13 @@ export function canMoveBlock( state, clientId, rootClientId = null ) {
|
|
|
1774
1773
|
/**
|
|
1775
1774
|
* Determines if the given blocks are allowed to be moved.
|
|
1776
1775
|
*
|
|
1777
|
-
* @param {Object}
|
|
1778
|
-
* @param {string}
|
|
1779
|
-
* @param {?string} rootClientId Optional root client ID of block list.
|
|
1776
|
+
* @param {Object} state Editor state.
|
|
1777
|
+
* @param {string} clientIds The block client IDs to be moved.
|
|
1780
1778
|
*
|
|
1781
1779
|
* @return {boolean} Whether the given blocks are allowed to be moved.
|
|
1782
1780
|
*/
|
|
1783
|
-
export function canMoveBlocks( state, clientIds
|
|
1784
|
-
return clientIds.every( ( clientId ) =>
|
|
1785
|
-
canMoveBlock( state, clientId, rootClientId )
|
|
1786
|
-
);
|
|
1781
|
+
export function canMoveBlocks( state, clientIds ) {
|
|
1782
|
+
return clientIds.every( ( clientId ) => canMoveBlock( state, clientId ) );
|
|
1787
1783
|
}
|
|
1788
1784
|
|
|
1789
1785
|
/**
|
|
@@ -3041,10 +3037,7 @@ export const isGroupable = createRegistrySelector(
|
|
|
3041
3037
|
rootClientId
|
|
3042
3038
|
);
|
|
3043
3039
|
const _isGroupable = groupingBlockAvailable && _clientIds.length;
|
|
3044
|
-
return (
|
|
3045
|
-
_isGroupable &&
|
|
3046
|
-
canRemoveBlocks( state, _clientIds, rootClientId )
|
|
3047
|
-
);
|
|
3040
|
+
return _isGroupable && canRemoveBlocks( state, _clientIds );
|
|
3048
3041
|
}
|
|
3049
3042
|
);
|
|
3050
3043
|
|
package/src/style.scss
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
@import "./autocompleters/style.scss";
|
|
2
2
|
@import "./components/block-alignment-control/style.scss";
|
|
3
|
-
@import "./components/block-bindings-toolbar-indicator/style.scss";
|
|
4
3
|
@import "./components/block-canvas/style.scss";
|
|
5
4
|
@import "./components/block-icon/style.scss";
|
|
6
5
|
@import "./components/block-inspector/style.scss";
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.default = BlockBindingsToolbarIndicator;
|
|
8
|
-
var _element = require("@wordpress/element");
|
|
9
|
-
var _i18n = require("@wordpress/i18n");
|
|
10
|
-
var _components = require("@wordpress/components");
|
|
11
|
-
var _blocks = require("@wordpress/blocks");
|
|
12
|
-
var _data = require("@wordpress/data");
|
|
13
|
-
var _icons = require("@wordpress/icons");
|
|
14
|
-
var _store = require("../../store");
|
|
15
|
-
var _blockIcon = _interopRequireDefault(require("../block-icon"));
|
|
16
|
-
var _useBlockDisplayTitle = _interopRequireDefault(require("../block-title/use-block-display-title"));
|
|
17
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
|
-
/**
|
|
19
|
-
* WordPress dependencies
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Internal dependencies
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
function BlockBindingsToolbarIndicator({
|
|
27
|
-
clientIds
|
|
28
|
-
}) {
|
|
29
|
-
const isSingleBlockSelected = clientIds.length === 1;
|
|
30
|
-
const {
|
|
31
|
-
icon,
|
|
32
|
-
firstBlockName,
|
|
33
|
-
isConnectedToPatternOverrides
|
|
34
|
-
} = (0, _data.useSelect)(select => {
|
|
35
|
-
const {
|
|
36
|
-
getBlockAttributes,
|
|
37
|
-
getBlockNamesByClientId,
|
|
38
|
-
getBlocksByClientId
|
|
39
|
-
} = select(_store.store);
|
|
40
|
-
const {
|
|
41
|
-
getBlockType,
|
|
42
|
-
getActiveBlockVariation
|
|
43
|
-
} = select(_blocks.store);
|
|
44
|
-
const blockTypeNames = getBlockNamesByClientId(clientIds);
|
|
45
|
-
const _firstBlockTypeName = blockTypeNames[0];
|
|
46
|
-
const firstBlockType = getBlockType(_firstBlockTypeName);
|
|
47
|
-
let _icon;
|
|
48
|
-
if (isSingleBlockSelected) {
|
|
49
|
-
const match = getActiveBlockVariation(_firstBlockTypeName, getBlockAttributes(clientIds[0]));
|
|
50
|
-
// Take into account active block variations.
|
|
51
|
-
_icon = match?.icon || firstBlockType.icon;
|
|
52
|
-
} else {
|
|
53
|
-
const isSelectionOfSameType = new Set(blockTypeNames).size === 1;
|
|
54
|
-
// When selection consists of blocks of multiple types, display an
|
|
55
|
-
// appropriate icon to communicate the non-uniformity.
|
|
56
|
-
_icon = isSelectionOfSameType ? firstBlockType.icon : _icons.copy;
|
|
57
|
-
}
|
|
58
|
-
return {
|
|
59
|
-
icon: _icon,
|
|
60
|
-
firstBlockName: getBlockAttributes(clientIds[0]).metadata.name,
|
|
61
|
-
isConnectedToPatternOverrides: getBlocksByClientId(clientIds).some(block => Object.values(block?.attributes?.metadata?.bindings || {}).some(binding => binding.source === 'core/pattern-overrides'))
|
|
62
|
-
};
|
|
63
|
-
}, [clientIds, isSingleBlockSelected]);
|
|
64
|
-
const firstBlockTitle = (0, _useBlockDisplayTitle.default)({
|
|
65
|
-
clientId: clientIds[0],
|
|
66
|
-
maximumLength: 35
|
|
67
|
-
});
|
|
68
|
-
let blockDescription = isSingleBlockSelected ? (0, _i18n._x)('This block is connected.', 'block toolbar button label and description') : (0, _i18n._x)('These blocks are connected.', 'block toolbar button label and description');
|
|
69
|
-
if (isConnectedToPatternOverrides && firstBlockName) {
|
|
70
|
-
blockDescription = isSingleBlockSelected ? (0, _i18n.sprintf)( /* translators: %1s: The block type's name; %2s: The block's user-provided name (the same as the override name). */
|
|
71
|
-
(0, _i18n.__)('This %1$s is editable using the "%2$s" override.'), firstBlockTitle.toLowerCase(), firstBlockName) : (0, _i18n.__)('These blocks are editable using overrides.');
|
|
72
|
-
}
|
|
73
|
-
const descriptionId = (0, _element.useId)();
|
|
74
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ToolbarGroup, {
|
|
75
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ToolbarItem, {
|
|
76
|
-
children: toggleProps => /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.DropdownMenu, {
|
|
77
|
-
className: "block-editor-block-bindings-toolbar-indicator",
|
|
78
|
-
label: firstBlockTitle,
|
|
79
|
-
popoverProps: {
|
|
80
|
-
placement: 'bottom-start',
|
|
81
|
-
className: 'block-editor-block-bindings-toolbar-indicator__popover'
|
|
82
|
-
},
|
|
83
|
-
icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
84
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_blockIcon.default, {
|
|
85
|
-
icon: icon,
|
|
86
|
-
className: "block-editor-block-bindings-toolbar-indicator-icon",
|
|
87
|
-
showColors: true
|
|
88
|
-
})
|
|
89
|
-
}),
|
|
90
|
-
toggleProps: {
|
|
91
|
-
describedBy: blockDescription,
|
|
92
|
-
...toggleProps
|
|
93
|
-
},
|
|
94
|
-
menuProps: {
|
|
95
|
-
orientation: 'both',
|
|
96
|
-
'aria-describedby': descriptionId
|
|
97
|
-
},
|
|
98
|
-
children: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalText, {
|
|
99
|
-
id: descriptionId,
|
|
100
|
-
children: blockDescription
|
|
101
|
-
})
|
|
102
|
-
})
|
|
103
|
-
})
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_element","require","_i18n","_components","_blocks","_data","_icons","_store","_blockIcon","_interopRequireDefault","_useBlockDisplayTitle","_jsxRuntime","BlockBindingsToolbarIndicator","clientIds","isSingleBlockSelected","length","icon","firstBlockName","isConnectedToPatternOverrides","useSelect","select","getBlockAttributes","getBlockNamesByClientId","getBlocksByClientId","blockEditorStore","getBlockType","getActiveBlockVariation","blocksStore","blockTypeNames","_firstBlockTypeName","firstBlockType","_icon","match","isSelectionOfSameType","Set","size","copy","metadata","name","some","block","Object","values","attributes","bindings","binding","source","firstBlockTitle","useBlockDisplayTitle","clientId","maximumLength","blockDescription","_x","sprintf","__","toLowerCase","descriptionId","useId","jsx","ToolbarGroup","children","ToolbarItem","toggleProps","DropdownMenu","className","label","popoverProps","placement","Fragment","default","showColors","describedBy","menuProps","orientation","__experimentalText","id"],"sources":["@wordpress/block-editor/src/components/block-bindings-toolbar-indicator/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useId } from '@wordpress/element';\nimport { __, sprintf, _x } from '@wordpress/i18n';\nimport {\n\tDropdownMenu,\n\tToolbarGroup,\n\tToolbarItem,\n\t__experimentalText as Text,\n} from '@wordpress/components';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { copy } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockIcon from '../block-icon';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\n\nexport default function BlockBindingsToolbarIndicator( { clientIds } ) {\n\tconst isSingleBlockSelected = clientIds.length === 1;\n\tconst { icon, firstBlockName, isConnectedToPatternOverrides } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockNamesByClientId,\n\t\t\t\tgetBlocksByClientId,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst blockTypeNames = getBlockNamesByClientId( clientIds );\n\t\t\tconst _firstBlockTypeName = blockTypeNames[ 0 ];\n\t\t\tconst firstBlockType = getBlockType( _firstBlockTypeName );\n\t\t\tlet _icon;\n\t\t\tif ( isSingleBlockSelected ) {\n\t\t\t\tconst match = getActiveBlockVariation(\n\t\t\t\t\t_firstBlockTypeName,\n\t\t\t\t\tgetBlockAttributes( clientIds[ 0 ] )\n\t\t\t\t);\n\t\t\t\t// Take into account active block variations.\n\t\t\t\t_icon = match?.icon || firstBlockType.icon;\n\t\t\t} else {\n\t\t\t\tconst isSelectionOfSameType =\n\t\t\t\t\tnew Set( blockTypeNames ).size === 1;\n\t\t\t\t// When selection consists of blocks of multiple types, display an\n\t\t\t\t// appropriate icon to communicate the non-uniformity.\n\t\t\t\t_icon = isSelectionOfSameType ? firstBlockType.icon : copy;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ticon: _icon,\n\t\t\t\tfirstBlockName: getBlockAttributes( clientIds[ 0 ] ).metadata\n\t\t\t\t\t.name,\n\t\t\t\tisConnectedToPatternOverrides: getBlocksByClientId(\n\t\t\t\t\tclientIds\n\t\t\t\t).some( ( block ) =>\n\t\t\t\t\tObject.values(\n\t\t\t\t\t\tblock?.attributes?.metadata?.bindings || {}\n\t\t\t\t\t).some(\n\t\t\t\t\t\t( binding ) =>\n\t\t\t\t\t\t\tbinding.source === 'core/pattern-overrides'\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientIds, isSingleBlockSelected ]\n\t);\n\tconst firstBlockTitle = useBlockDisplayTitle( {\n\t\tclientId: clientIds[ 0 ],\n\t\tmaximumLength: 35,\n\t} );\n\n\tlet blockDescription = isSingleBlockSelected\n\t\t? _x(\n\t\t\t\t'This block is connected.',\n\t\t\t\t'block toolbar button label and description'\n\t\t )\n\t\t: _x(\n\t\t\t\t'These blocks are connected.',\n\t\t\t\t'block toolbar button label and description'\n\t\t );\n\tif ( isConnectedToPatternOverrides && firstBlockName ) {\n\t\tblockDescription = isSingleBlockSelected\n\t\t\t? sprintf(\n\t\t\t\t\t/* translators: %1s: The block type's name; %2s: The block's user-provided name (the same as the override name). */\n\t\t\t\t\t__( 'This %1$s is editable using the \"%2$s\" override.' ),\n\t\t\t\t\tfirstBlockTitle.toLowerCase(),\n\t\t\t\t\tfirstBlockName\n\t\t\t )\n\t\t\t: __( 'These blocks are editable using overrides.' );\n\t}\n\tconst descriptionId = useId();\n\n\treturn (\n\t\t<ToolbarGroup>\n\t\t\t<ToolbarItem>\n\t\t\t\t{ ( toggleProps ) => (\n\t\t\t\t\t<DropdownMenu\n\t\t\t\t\t\tclassName=\"block-editor-block-bindings-toolbar-indicator\"\n\t\t\t\t\t\tlabel={ firstBlockTitle }\n\t\t\t\t\t\tpopoverProps={ {\n\t\t\t\t\t\t\tplacement: 'bottom-start',\n\t\t\t\t\t\t\tclassName:\n\t\t\t\t\t\t\t\t'block-editor-block-bindings-toolbar-indicator__popover',\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<BlockIcon\n\t\t\t\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-block-bindings-toolbar-indicator-icon\"\n\t\t\t\t\t\t\t\t\tshowColors\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\tdescribedBy: blockDescription,\n\t\t\t\t\t\t\t...toggleProps,\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tmenuProps={ {\n\t\t\t\t\t\t\torientation: 'both',\n\t\t\t\t\t\t\t'aria-describedby': descriptionId,\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ () => (\n\t\t\t\t\t\t\t<Text id={ descriptionId }>\n\t\t\t\t\t\t\t\t{ blockDescription }\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</DropdownMenu>\n\t\t\t\t) }\n\t\t\t</ToolbarItem>\n\t\t</ToolbarGroup>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WordPress dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { useId } from '@wordpress/element';
|
|
5
|
-
import { __, sprintf, _x } from '@wordpress/i18n';
|
|
6
|
-
import { DropdownMenu, ToolbarGroup, ToolbarItem, __experimentalText as Text } from '@wordpress/components';
|
|
7
|
-
import { store as blocksStore } from '@wordpress/blocks';
|
|
8
|
-
import { useSelect } from '@wordpress/data';
|
|
9
|
-
import { copy } from '@wordpress/icons';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Internal dependencies
|
|
13
|
-
*/
|
|
14
|
-
import { store as blockEditorStore } from '../../store';
|
|
15
|
-
import BlockIcon from '../block-icon';
|
|
16
|
-
import useBlockDisplayTitle from '../block-title/use-block-display-title';
|
|
17
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
|
-
export default function BlockBindingsToolbarIndicator({
|
|
20
|
-
clientIds
|
|
21
|
-
}) {
|
|
22
|
-
const isSingleBlockSelected = clientIds.length === 1;
|
|
23
|
-
const {
|
|
24
|
-
icon,
|
|
25
|
-
firstBlockName,
|
|
26
|
-
isConnectedToPatternOverrides
|
|
27
|
-
} = useSelect(select => {
|
|
28
|
-
const {
|
|
29
|
-
getBlockAttributes,
|
|
30
|
-
getBlockNamesByClientId,
|
|
31
|
-
getBlocksByClientId
|
|
32
|
-
} = select(blockEditorStore);
|
|
33
|
-
const {
|
|
34
|
-
getBlockType,
|
|
35
|
-
getActiveBlockVariation
|
|
36
|
-
} = select(blocksStore);
|
|
37
|
-
const blockTypeNames = getBlockNamesByClientId(clientIds);
|
|
38
|
-
const _firstBlockTypeName = blockTypeNames[0];
|
|
39
|
-
const firstBlockType = getBlockType(_firstBlockTypeName);
|
|
40
|
-
let _icon;
|
|
41
|
-
if (isSingleBlockSelected) {
|
|
42
|
-
const match = getActiveBlockVariation(_firstBlockTypeName, getBlockAttributes(clientIds[0]));
|
|
43
|
-
// Take into account active block variations.
|
|
44
|
-
_icon = match?.icon || firstBlockType.icon;
|
|
45
|
-
} else {
|
|
46
|
-
const isSelectionOfSameType = new Set(blockTypeNames).size === 1;
|
|
47
|
-
// When selection consists of blocks of multiple types, display an
|
|
48
|
-
// appropriate icon to communicate the non-uniformity.
|
|
49
|
-
_icon = isSelectionOfSameType ? firstBlockType.icon : copy;
|
|
50
|
-
}
|
|
51
|
-
return {
|
|
52
|
-
icon: _icon,
|
|
53
|
-
firstBlockName: getBlockAttributes(clientIds[0]).metadata.name,
|
|
54
|
-
isConnectedToPatternOverrides: getBlocksByClientId(clientIds).some(block => Object.values(block?.attributes?.metadata?.bindings || {}).some(binding => binding.source === 'core/pattern-overrides'))
|
|
55
|
-
};
|
|
56
|
-
}, [clientIds, isSingleBlockSelected]);
|
|
57
|
-
const firstBlockTitle = useBlockDisplayTitle({
|
|
58
|
-
clientId: clientIds[0],
|
|
59
|
-
maximumLength: 35
|
|
60
|
-
});
|
|
61
|
-
let blockDescription = isSingleBlockSelected ? _x('This block is connected.', 'block toolbar button label and description') : _x('These blocks are connected.', 'block toolbar button label and description');
|
|
62
|
-
if (isConnectedToPatternOverrides && firstBlockName) {
|
|
63
|
-
blockDescription = isSingleBlockSelected ? sprintf( /* translators: %1s: The block type's name; %2s: The block's user-provided name (the same as the override name). */
|
|
64
|
-
__('This %1$s is editable using the "%2$s" override.'), firstBlockTitle.toLowerCase(), firstBlockName) : __('These blocks are editable using overrides.');
|
|
65
|
-
}
|
|
66
|
-
const descriptionId = useId();
|
|
67
|
-
return /*#__PURE__*/_jsx(ToolbarGroup, {
|
|
68
|
-
children: /*#__PURE__*/_jsx(ToolbarItem, {
|
|
69
|
-
children: toggleProps => /*#__PURE__*/_jsx(DropdownMenu, {
|
|
70
|
-
className: "block-editor-block-bindings-toolbar-indicator",
|
|
71
|
-
label: firstBlockTitle,
|
|
72
|
-
popoverProps: {
|
|
73
|
-
placement: 'bottom-start',
|
|
74
|
-
className: 'block-editor-block-bindings-toolbar-indicator__popover'
|
|
75
|
-
},
|
|
76
|
-
icon: /*#__PURE__*/_jsx(_Fragment, {
|
|
77
|
-
children: /*#__PURE__*/_jsx(BlockIcon, {
|
|
78
|
-
icon: icon,
|
|
79
|
-
className: "block-editor-block-bindings-toolbar-indicator-icon",
|
|
80
|
-
showColors: true
|
|
81
|
-
})
|
|
82
|
-
}),
|
|
83
|
-
toggleProps: {
|
|
84
|
-
describedBy: blockDescription,
|
|
85
|
-
...toggleProps
|
|
86
|
-
},
|
|
87
|
-
menuProps: {
|
|
88
|
-
orientation: 'both',
|
|
89
|
-
'aria-describedby': descriptionId
|
|
90
|
-
},
|
|
91
|
-
children: () => /*#__PURE__*/_jsx(Text, {
|
|
92
|
-
id: descriptionId,
|
|
93
|
-
children: blockDescription
|
|
94
|
-
})
|
|
95
|
-
})
|
|
96
|
-
})
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=index.js.map
|