@wordpress/block-editor 13.0.1 → 13.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/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/date-format-picker/index.js +18 -10
- package/build/components/date-format-picker/index.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/inserter/block-types-tab.native.js +1 -1
- package/build/components/inserter/block-types-tab.native.js.map +1 -1
- package/build/components/link-control/link-preview.js +12 -1
- package/build/components/link-control/link-preview.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/provider/use-block-sync.js +1 -7
- package/build/components/provider/use-block-sync.js.map +1 -1
- package/build/components/rich-text/index.native.js +4 -0
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/rich-text/native/index.native.js +6 -4
- package/build/components/rich-text/native/index.native.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 +2 -2
- 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/private-apis.js +3 -1
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +3 -3
- package/build/store/actions.js.map +1 -1
- package/build/store/private-actions.js +1 -36
- 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/date-format-picker/index.js +19 -11
- package/build-module/components/date-format-picker/index.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/inserter/block-types-tab.native.js +1 -1
- package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
- package/build-module/components/link-control/link-preview.js +14 -1
- package/build-module/components/link-control/link-preview.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/provider/use-block-sync.js +1 -7
- package/build-module/components/provider/use-block-sync.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +4 -0
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/rich-text/native/index.native.js +6 -4
- package/build-module/components/rich-text/native/index.native.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 +2 -2
- 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/private-apis.js +3 -1
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +3 -3
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/private-actions.js +1 -35
- 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 +7 -15
- package/build-style/style.css +7 -15
- package/package.json +31 -31
- 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/date-format-picker/index.js +25 -13
- package/src/components/global-styles/hooks.js +1 -4
- package/src/components/global-styles/use-global-styles-output.js +24 -4
- package/src/components/inserter/block-types-tab.native.js +2 -1
- package/src/components/link-control/link-preview.js +18 -1
- 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/provider/use-block-sync.js +0 -6
- package/src/components/rich-text/index.native.js +4 -0
- package/src/components/rich-text/native/index.native.js +3 -1
- 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 +2 -2
- package/src/hooks/use-bindings-attributes.js +11 -1
- package/src/private-apis.js +2 -0
- package/src/store/actions.js +3 -9
- package/src/store/private-actions.js +1 -34
- 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/store/undo-ignore.js +0 -11
- package/build/store/undo-ignore.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/build-module/store/undo-ignore.js +0 -5
- package/build-module/store/undo-ignore.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
- package/src/store/undo-ignore.js +0 -4
|
@@ -651,7 +651,9 @@ export const getNodesWithStyles = ( tree, blockSelectors ) => {
|
|
|
651
651
|
( [ variationName, variation ] ) => {
|
|
652
652
|
variations[ variationName ] =
|
|
653
653
|
pickStyleKeys( variation );
|
|
654
|
-
|
|
654
|
+
if ( variation?.css ) {
|
|
655
|
+
variations[ variationName ].css = variation.css;
|
|
656
|
+
}
|
|
655
657
|
const variationSelector =
|
|
656
658
|
blockSelectors[ blockName ]
|
|
657
659
|
.styleVariationSelectors?.[ variationName ];
|
|
@@ -697,6 +699,14 @@ export const getNodesWithStyles = ( tree, blockSelectors ) => {
|
|
|
697
699
|
.featureSelectors
|
|
698
700
|
);
|
|
699
701
|
|
|
702
|
+
const variationBlockStyleNodes =
|
|
703
|
+
pickStyleKeys( variationBlockStyles );
|
|
704
|
+
|
|
705
|
+
if ( variationBlockStyles?.css ) {
|
|
706
|
+
variationBlockStyleNodes.css =
|
|
707
|
+
variationBlockStyles.css;
|
|
708
|
+
}
|
|
709
|
+
|
|
700
710
|
nodes.push( {
|
|
701
711
|
selector: variationBlockSelector,
|
|
702
712
|
duotoneSelector: variationDuotoneSelector,
|
|
@@ -707,9 +717,7 @@ export const getNodesWithStyles = ( tree, blockSelectors ) => {
|
|
|
707
717
|
hasLayoutSupport:
|
|
708
718
|
blockSelectors[ variationBlockName ]
|
|
709
719
|
.hasLayoutSupport,
|
|
710
|
-
styles:
|
|
711
|
-
variationBlockStyles
|
|
712
|
-
),
|
|
720
|
+
styles: variationBlockStyleNodes,
|
|
713
721
|
} );
|
|
714
722
|
|
|
715
723
|
// Process element styles for the inner blocks
|
|
@@ -995,6 +1003,12 @@ export const toStyles = (
|
|
|
995
1003
|
';'
|
|
996
1004
|
) };}`;
|
|
997
1005
|
}
|
|
1006
|
+
if ( styles?.css ) {
|
|
1007
|
+
ruleset += processCSSNesting(
|
|
1008
|
+
styles.css,
|
|
1009
|
+
`:root :where(${ selector })`
|
|
1010
|
+
);
|
|
1011
|
+
}
|
|
998
1012
|
|
|
999
1013
|
if ( styleVariationSelectors ) {
|
|
1000
1014
|
Object.entries( styleVariationSelectors ).forEach(
|
|
@@ -1041,6 +1055,12 @@ export const toStyles = (
|
|
|
1041
1055
|
';'
|
|
1042
1056
|
) };}`;
|
|
1043
1057
|
}
|
|
1058
|
+
if ( styleVariations?.css ) {
|
|
1059
|
+
ruleset += processCSSNesting(
|
|
1060
|
+
styleVariations.css,
|
|
1061
|
+
`:root :where(${ styleVariationSelector })`
|
|
1062
|
+
);
|
|
1063
|
+
}
|
|
1044
1064
|
}
|
|
1045
1065
|
}
|
|
1046
1066
|
);
|
|
@@ -18,7 +18,8 @@ const getBlockNamespace = ( item ) => item.name.split( '/' )[ 0 ];
|
|
|
18
18
|
function BlockTypesTab( { onSelect, rootClientId, listProps } ) {
|
|
19
19
|
const [ rawBlockTypes, , collections ] = useBlockTypesState(
|
|
20
20
|
rootClientId,
|
|
21
|
-
onSelect
|
|
21
|
+
onSelect,
|
|
22
|
+
true
|
|
22
23
|
);
|
|
23
24
|
const clipboardBlock = useClipboardBlock( rootClientId );
|
|
24
25
|
const filteredBlockTypes = filterInserterItems( rawBlockTypes );
|
|
@@ -27,6 +27,20 @@ import { ViewerSlot } from './viewer-slot';
|
|
|
27
27
|
|
|
28
28
|
import useRichUrlData from './use-rich-url-data';
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Filters the title for display. Removes the protocol and www prefix.
|
|
32
|
+
*
|
|
33
|
+
* @param {string} title The title to be filtered.
|
|
34
|
+
*
|
|
35
|
+
* @return {string} The filtered title.
|
|
36
|
+
*/
|
|
37
|
+
function filterTitleForDisplay( title ) {
|
|
38
|
+
// Derived from `filterURLForDisplay` in `@wordpress/url`.
|
|
39
|
+
return title
|
|
40
|
+
.replace( /^[a-z\-.\+]+[0-9]*:(\/\/)?/i, '' )
|
|
41
|
+
.replace( /^www\./i, '' );
|
|
42
|
+
}
|
|
43
|
+
|
|
30
44
|
export default function LinkPreview( {
|
|
31
45
|
value,
|
|
32
46
|
onEditClick,
|
|
@@ -59,6 +73,9 @@ export default function LinkPreview( {
|
|
|
59
73
|
! isEmptyURL &&
|
|
60
74
|
stripHTML( richData?.title || value?.title || displayURL );
|
|
61
75
|
|
|
76
|
+
const isUrlRedundant =
|
|
77
|
+
! value?.url || filterTitleForDisplay( displayTitle ) === displayURL;
|
|
78
|
+
|
|
62
79
|
let icon;
|
|
63
80
|
|
|
64
81
|
if ( richData?.icon ) {
|
|
@@ -112,7 +129,7 @@ export default function LinkPreview( {
|
|
|
112
129
|
{ displayTitle }
|
|
113
130
|
</Truncate>
|
|
114
131
|
</ExternalLink>
|
|
115
|
-
{
|
|
132
|
+
{ ! isUrlRedundant && (
|
|
116
133
|
<span className="block-editor-link-control__search-item-info">
|
|
117
134
|
<Truncate numberOfLines={ 1 }>
|
|
118
135
|
{ displayURL }
|
|
@@ -181,6 +181,12 @@ function ListViewBlock( {
|
|
|
181
181
|
return;
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
+
// Do not handle events if it comes from modals;
|
|
185
|
+
// retain the default behavior for these keys.
|
|
186
|
+
if ( event.target.closest( '[role=dialog]' ) ) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
|
|
184
190
|
const isDeleteKey = [ BACKSPACE, DELETE ].includes( event.keyCode );
|
|
185
191
|
|
|
186
192
|
// If multiple blocks are selected, deselect all blocks when the user
|
|
@@ -196,12 +202,6 @@ function ListViewBlock( {
|
|
|
196
202
|
isDeleteKey ||
|
|
197
203
|
isMatch( 'core/block-editor/remove', event )
|
|
198
204
|
) {
|
|
199
|
-
// Do not handle single-key block deletion shortcuts when events come from modals;
|
|
200
|
-
// retain the default behavior for these keys.
|
|
201
|
-
if ( isDeleteKey && event.target.closest( '[role=dialog]' ) ) {
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
205
|
const {
|
|
206
206
|
blocksToUpdate: blocksToDelete,
|
|
207
207
|
firstBlockClientId,
|
|
@@ -210,7 +210,7 @@ function ListViewBlock( {
|
|
|
210
210
|
} = getBlocksToUpdate();
|
|
211
211
|
|
|
212
212
|
// Don't update the selection if the blocks cannot be deleted.
|
|
213
|
-
if ( ! canRemoveBlocks( blocksToDelete
|
|
213
|
+
if ( ! canRemoveBlocks( blocksToDelete ) ) {
|
|
214
214
|
return;
|
|
215
215
|
}
|
|
216
216
|
|
|
@@ -194,10 +194,14 @@ function ListViewBranch( props ) {
|
|
|
194
194
|
// This prevents the entire tree from being rendered when a branch is
|
|
195
195
|
// selected, or a user selects all blocks, while still enabling scroll
|
|
196
196
|
// into view behavior when selecting a block or opening the list view.
|
|
197
|
+
// The first and last blocks of the list are always rendered, to ensure
|
|
198
|
+
// that Home and End keys work as expected.
|
|
197
199
|
const showBlock =
|
|
198
200
|
isDragged ||
|
|
199
201
|
blockInView ||
|
|
200
|
-
( isSelected && clientId === selectedClientIds[ 0 ] )
|
|
202
|
+
( isSelected && clientId === selectedClientIds[ 0 ] ) ||
|
|
203
|
+
index === 0 ||
|
|
204
|
+
index === blockCount - 1;
|
|
201
205
|
return (
|
|
202
206
|
<AsyncModeProvider key={ clientId } value={ ! isSelected }>
|
|
203
207
|
{ showBlock && (
|
|
@@ -112,12 +112,7 @@ export default function useClipboardHandler( { selectBlock } ) {
|
|
|
112
112
|
|
|
113
113
|
if ( event.type === 'cut' ) {
|
|
114
114
|
// Don't update the selection if the blocks cannot be deleted.
|
|
115
|
-
if (
|
|
116
|
-
! canRemoveBlocks(
|
|
117
|
-
selectedBlockClientIds,
|
|
118
|
-
firstBlockRootClientId
|
|
119
|
-
)
|
|
120
|
-
) {
|
|
115
|
+
if ( ! canRemoveBlocks( selectedBlockClientIds ) ) {
|
|
121
116
|
return;
|
|
122
117
|
}
|
|
123
118
|
|
|
@@ -9,7 +9,6 @@ import { cloneBlock } from '@wordpress/blocks';
|
|
|
9
9
|
* Internal dependencies
|
|
10
10
|
*/
|
|
11
11
|
import { store as blockEditorStore } from '../../store';
|
|
12
|
-
import { undoIgnoreBlocks } from '../../store/undo-ignore';
|
|
13
12
|
|
|
14
13
|
const noop = () => {};
|
|
15
14
|
|
|
@@ -274,10 +273,6 @@ export default function useBlockSync( {
|
|
|
274
273
|
const updateParent = isPersistent
|
|
275
274
|
? onChangeRef.current
|
|
276
275
|
: onInputRef.current;
|
|
277
|
-
const undoIgnore = undoIgnoreBlocks.has( blocks );
|
|
278
|
-
if ( undoIgnore ) {
|
|
279
|
-
undoIgnoreBlocks.delete( blocks );
|
|
280
|
-
}
|
|
281
276
|
updateParent( blocks, {
|
|
282
277
|
selection: {
|
|
283
278
|
selectionStart: getSelectionStart(),
|
|
@@ -285,7 +280,6 @@ export default function useBlockSync( {
|
|
|
285
280
|
initialPosition:
|
|
286
281
|
getSelectedBlocksInitialCaretPosition(),
|
|
287
282
|
},
|
|
288
|
-
undoIgnore,
|
|
289
283
|
} );
|
|
290
284
|
}
|
|
291
285
|
previousAreBlocksDifferent = areBlocksDifferent;
|
|
@@ -80,6 +80,7 @@ export function RichTextWrapper(
|
|
|
80
80
|
unstableOnFocus,
|
|
81
81
|
__unstableAllowPrefixTransformations,
|
|
82
82
|
// Native props.
|
|
83
|
+
__unstableUseSplitSelection,
|
|
83
84
|
__unstableMobileNoFocusOnMount,
|
|
84
85
|
deleteEnter,
|
|
85
86
|
placeholderTextColor,
|
|
@@ -178,6 +179,7 @@ export function RichTextWrapper(
|
|
|
178
179
|
exitFormattedText,
|
|
179
180
|
selectionChange,
|
|
180
181
|
__unstableMarkAutomaticChange,
|
|
182
|
+
__unstableSplitSelection,
|
|
181
183
|
clearSelectedBlock,
|
|
182
184
|
} = useDispatch( blockEditorStore );
|
|
183
185
|
const adjustedAllowedFormats = getAllowedFormats( {
|
|
@@ -345,6 +347,8 @@ export function RichTextWrapper(
|
|
|
345
347
|
}
|
|
346
348
|
} else if ( canSplit ) {
|
|
347
349
|
splitValue( value );
|
|
350
|
+
} else if ( __unstableUseSplitSelection ) {
|
|
351
|
+
__unstableSplitSelection();
|
|
348
352
|
} else if ( canSplitAtEnd ) {
|
|
349
353
|
onSplitAtEnd();
|
|
350
354
|
} else if (
|
|
@@ -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
|
);
|
|
@@ -43,7 +43,7 @@ function getVariationNameFromClass( className, registeredStyles = [] ) {
|
|
|
43
43
|
return null;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
function
|
|
46
|
+
function useBlockStyleVariation( name, variation, clientId ) {
|
|
47
47
|
// Prefer global styles data in GlobalStylesContext, which are available
|
|
48
48
|
// if in the site editor. Otherwise fall back to whatever is in the
|
|
49
49
|
// editor settings and available in the post editor.
|
|
@@ -96,7 +96,7 @@ function useBlockProps( { name, className, clientId } ) {
|
|
|
96
96
|
const variation = getVariationNameFromClass( className, registeredStyles );
|
|
97
97
|
const variationClass = `is-style-${ variation }-${ clientId }`;
|
|
98
98
|
|
|
99
|
-
const { settings, styles } =
|
|
99
|
+
const { settings, styles } = useBlockStyleVariation(
|
|
100
100
|
name,
|
|
101
101
|
variation,
|
|
102
102
|
clientId
|
|
@@ -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/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.
|
|
@@ -6,7 +6,6 @@ import { Platform } from '@wordpress/element';
|
|
|
6
6
|
/**
|
|
7
7
|
* Internal dependencies
|
|
8
8
|
*/
|
|
9
|
-
import { undoIgnoreBlocks } from './undo-ignore';
|
|
10
9
|
import { store as blockEditorStore } from './index';
|
|
11
10
|
import { unlock } from '../lock-unlock';
|
|
12
11
|
|
|
@@ -105,11 +104,7 @@ export const privateRemoveBlocks =
|
|
|
105
104
|
}
|
|
106
105
|
|
|
107
106
|
clientIds = castArray( clientIds );
|
|
108
|
-
const
|
|
109
|
-
const canRemoveBlocks = select.canRemoveBlocks(
|
|
110
|
-
clientIds,
|
|
111
|
-
rootClientId
|
|
112
|
-
);
|
|
107
|
+
const canRemoveBlocks = select.canRemoveBlocks( clientIds );
|
|
113
108
|
|
|
114
109
|
if ( ! canRemoveBlocks ) {
|
|
115
110
|
return;
|
|
@@ -292,34 +287,6 @@ export function deleteStyleOverride( id ) {
|
|
|
292
287
|
};
|
|
293
288
|
}
|
|
294
289
|
|
|
295
|
-
/**
|
|
296
|
-
* A higher-order action that mark every change inside a callback as "non-persistent"
|
|
297
|
-
* and ignore pushing to the undo history stack. It's primarily used for synchronized
|
|
298
|
-
* derived updates from the block editor without affecting the undo history.
|
|
299
|
-
*
|
|
300
|
-
* @param {() => void} callback The synchronous callback to derive updates.
|
|
301
|
-
*/
|
|
302
|
-
export function syncDerivedUpdates( callback ) {
|
|
303
|
-
return ( { dispatch, select, registry } ) => {
|
|
304
|
-
registry.batch( () => {
|
|
305
|
-
// Mark every change in the `callback` as non-persistent.
|
|
306
|
-
dispatch( {
|
|
307
|
-
type: 'SET_EXPLICIT_PERSISTENT',
|
|
308
|
-
isPersistentChange: false,
|
|
309
|
-
} );
|
|
310
|
-
callback();
|
|
311
|
-
dispatch( {
|
|
312
|
-
type: 'SET_EXPLICIT_PERSISTENT',
|
|
313
|
-
isPersistentChange: undefined,
|
|
314
|
-
} );
|
|
315
|
-
|
|
316
|
-
// Ignore pushing undo stack for the updated blocks.
|
|
317
|
-
const updatedBlocks = select.getBlocks();
|
|
318
|
-
undoIgnoreBlocks.add( updatedBlocks );
|
|
319
|
-
} );
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
|
|
323
290
|
/**
|
|
324
291
|
* Action that sets the element that had focus when focus leaves the editor canvas.
|
|
325
292
|
*
|
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";
|