@wordpress/block-editor 12.19.4 → 12.19.5
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 +45 -32
- package/build/components/block-actions/index.js.map +1 -1
- package/build/components/block-bindings-toolbar-indicator/index.js +25 -0
- package/build/components/block-bindings-toolbar-indicator/index.js.map +1 -0
- package/build/components/block-list/use-block-props/index.js +8 -1
- package/build/components/block-list/use-block-props/index.js.map +1 -1
- package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
- package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +12 -10
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-toolbar/index.js +14 -5
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/list-view/block-select-button.js +10 -2
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/use-clipboard-handler.js +2 -1
- package/build/components/list-view/use-clipboard-handler.js.map +1 -1
- package/build/components/rich-text/index.js +1 -1
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/url-popover/index.js +3 -3
- package/build/components/url-popover/index.js.map +1 -1
- package/build/components/writing-flow/use-clipboard-handler.js +2 -1
- package/build/components/writing-flow/use-clipboard-handler.js.map +1 -1
- package/build/components/writing-flow/utils.js +23 -6
- package/build/components/writing-flow/utils.js.map +1 -1
- package/build/hooks/block-hooks.js +26 -2
- package/build/hooks/block-hooks.js.map +1 -1
- package/build/hooks/use-bindings-attributes.js +171 -46
- package/build/hooks/use-bindings-attributes.js.map +1 -1
- package/build/private-apis.js +2 -0
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +40 -6
- package/build/store/actions.js.map +1 -1
- package/build-module/components/block-actions/index.js +45 -32
- package/build-module/components/block-actions/index.js.map +1 -1
- package/build-module/components/block-bindings-toolbar-indicator/index.js +18 -0
- package/build-module/components/block-bindings-toolbar-indicator/index.js.map +1 -0
- package/build-module/components/block-list/use-block-props/index.js +9 -2
- package/build-module/components/block-list/use-block-props/index.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
- package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +12 -10
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-toolbar/index.js +14 -5
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +11 -3
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/use-clipboard-handler.js +3 -2
- package/build-module/components/list-view/use-clipboard-handler.js.map +1 -1
- package/build-module/components/rich-text/index.js +2 -2
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/url-popover/index.js +3 -3
- package/build-module/components/url-popover/index.js.map +1 -1
- package/build-module/components/writing-flow/use-clipboard-handler.js +3 -2
- package/build-module/components/writing-flow/use-clipboard-handler.js.map +1 -1
- package/build-module/components/writing-flow/utils.js +22 -7
- package/build-module/components/writing-flow/utils.js.map +1 -1
- package/build-module/hooks/block-hooks.js +26 -2
- package/build-module/hooks/block-hooks.js.map +1 -1
- package/build-module/hooks/use-bindings-attributes.js +171 -46
- package/build-module/hooks/use-bindings-attributes.js.map +1 -1
- package/build-module/private-apis.js +2 -0
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +40 -6
- package/build-module/store/actions.js.map +1 -1
- package/build-style/content-rtl.css +1 -0
- package/build-style/content.css +1 -0
- package/build-style/default-editor-styles-rtl.css +1 -0
- package/build-style/default-editor-styles.css +1 -0
- package/build-style/style-rtl.css +23 -0
- package/build-style/style.css +23 -0
- package/package.json +8 -8
- package/src/components/block-actions/index.js +57 -47
- package/src/components/block-bindings-toolbar-indicator/index.js +20 -0
- package/src/components/block-bindings-toolbar-indicator/style.scss +14 -0
- package/src/components/block-list/use-block-props/index.js +12 -2
- package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -7
- package/src/components/block-settings-menu/block-settings-dropdown.js +12 -9
- package/src/components/block-toolbar/index.js +14 -4
- package/src/components/list-view/block-select-button.js +16 -2
- package/src/components/list-view/style.scss +8 -0
- package/src/components/list-view/use-clipboard-handler.js +3 -2
- package/src/components/rich-text/index.js +2 -2
- package/src/components/url-popover/index.js +5 -5
- package/src/components/writing-flow/use-clipboard-handler.js +3 -2
- package/src/components/writing-flow/utils.js +31 -16
- package/src/hooks/block-hooks.js +36 -3
- package/src/hooks/use-bindings-attributes.js +214 -62
- package/src/private-apis.js +2 -0
- package/src/store/actions.js +54 -14
- package/src/style.scss +1 -0
|
@@ -15,28 +15,46 @@ export default function BlockActions({
|
|
|
15
15
|
children,
|
|
16
16
|
__experimentalUpdateSelection: updateSelection
|
|
17
17
|
}) {
|
|
18
|
-
const {
|
|
19
|
-
canInsertBlockType,
|
|
20
|
-
getBlockRootClientId,
|
|
21
|
-
getBlocksByClientId,
|
|
22
|
-
canMoveBlocks,
|
|
23
|
-
canRemoveBlocks
|
|
24
|
-
} = useSelect(blockEditorStore);
|
|
25
18
|
const {
|
|
26
19
|
getDefaultBlockName,
|
|
27
20
|
getGroupingBlockName
|
|
28
21
|
} = useSelect(blocksStore);
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
22
|
+
const selected = useSelect(select => {
|
|
23
|
+
const {
|
|
24
|
+
canInsertBlockType,
|
|
25
|
+
getBlockRootClientId,
|
|
26
|
+
getBlocksByClientId,
|
|
27
|
+
getDirectInsertBlock,
|
|
28
|
+
canMoveBlocks,
|
|
29
|
+
canRemoveBlocks
|
|
30
|
+
} = select(blockEditorStore);
|
|
31
|
+
const blocks = getBlocksByClientId(clientIds);
|
|
32
|
+
const rootClientId = getBlockRootClientId(clientIds[0]);
|
|
33
|
+
const canInsertDefaultBlock = canInsertBlockType(getDefaultBlockName(), rootClientId);
|
|
34
|
+
const directInsertBlock = rootClientId ? getDirectInsertBlock(rootClientId) : null;
|
|
35
|
+
return {
|
|
36
|
+
canMove: canMoveBlocks(clientIds, rootClientId),
|
|
37
|
+
canRemove: canRemoveBlocks(clientIds, rootClientId),
|
|
38
|
+
canInsertBlock: canInsertDefaultBlock || !!directInsertBlock,
|
|
39
|
+
canCopyStyles: blocks.every(block => {
|
|
40
|
+
return !!block && (hasBlockSupport(block.name, 'color') || hasBlockSupport(block.name, 'typography'));
|
|
41
|
+
}),
|
|
42
|
+
canDuplicate: blocks.every(block => {
|
|
43
|
+
return !!block && hasBlockSupport(block.name, 'multiple', true) && canInsertBlockType(block.name, rootClientId);
|
|
44
|
+
})
|
|
45
|
+
};
|
|
46
|
+
}, [clientIds, getDefaultBlockName]);
|
|
47
|
+
const {
|
|
48
|
+
getBlocksByClientId,
|
|
49
|
+
getBlocks
|
|
50
|
+
} = useSelect(blockEditorStore);
|
|
51
|
+
const {
|
|
52
|
+
canMove,
|
|
53
|
+
canRemove,
|
|
54
|
+
canInsertBlock,
|
|
55
|
+
canCopyStyles,
|
|
56
|
+
canDuplicate
|
|
57
|
+
} = selected;
|
|
40
58
|
const {
|
|
41
59
|
removeBlocks,
|
|
42
60
|
replaceBlocks,
|
|
@@ -53,11 +71,9 @@ export default function BlockActions({
|
|
|
53
71
|
return children({
|
|
54
72
|
canCopyStyles,
|
|
55
73
|
canDuplicate,
|
|
56
|
-
|
|
74
|
+
canInsertBlock,
|
|
57
75
|
canMove,
|
|
58
76
|
canRemove,
|
|
59
|
-
rootClientId,
|
|
60
|
-
blocks,
|
|
61
77
|
onDuplicate() {
|
|
62
78
|
return duplicateBlocks(clientIds, updateSelection);
|
|
63
79
|
},
|
|
@@ -78,39 +94,36 @@ export default function BlockActions({
|
|
|
78
94
|
setBlockMovingClientId(clientIds[0]);
|
|
79
95
|
},
|
|
80
96
|
onGroup() {
|
|
81
|
-
if (!
|
|
97
|
+
if (!clientIds.length) {
|
|
82
98
|
return;
|
|
83
99
|
}
|
|
84
100
|
const groupingBlockName = getGroupingBlockName();
|
|
85
101
|
|
|
86
102
|
// Activate the `transform` on `core/group` which does the conversion.
|
|
87
|
-
const newBlocks = switchToBlockType(
|
|
103
|
+
const newBlocks = switchToBlockType(getBlocksByClientId(clientIds), groupingBlockName);
|
|
88
104
|
if (!newBlocks) {
|
|
89
105
|
return;
|
|
90
106
|
}
|
|
91
107
|
replaceBlocks(clientIds, newBlocks);
|
|
92
108
|
},
|
|
93
109
|
onUngroup() {
|
|
94
|
-
if (!
|
|
110
|
+
if (!clientIds.length) {
|
|
95
111
|
return;
|
|
96
112
|
}
|
|
97
|
-
const innerBlocks =
|
|
113
|
+
const innerBlocks = getBlocks(clientIds[0]);
|
|
98
114
|
if (!innerBlocks.length) {
|
|
99
115
|
return;
|
|
100
116
|
}
|
|
101
117
|
replaceBlocks(clientIds, innerBlocks);
|
|
102
118
|
},
|
|
103
119
|
onCopy() {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}) => clientId);
|
|
107
|
-
if (blocks.length === 1) {
|
|
108
|
-
flashBlock(selectedBlockClientIds[0]);
|
|
120
|
+
if (clientIds.length === 1) {
|
|
121
|
+
flashBlock(clientIds[0]);
|
|
109
122
|
}
|
|
110
|
-
notifyCopy('copy',
|
|
123
|
+
notifyCopy('copy', clientIds);
|
|
111
124
|
},
|
|
112
125
|
async onPasteStyles() {
|
|
113
|
-
await pasteStyles(
|
|
126
|
+
await pasteStyles(getBlocksByClientId(clientIds));
|
|
114
127
|
}
|
|
115
128
|
});
|
|
116
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useDispatch","useSelect","hasBlockSupport","switchToBlockType","store","blocksStore","useNotifyCopy","usePasteStyles","blockEditorStore","BlockActions","clientIds","children","__experimentalUpdateSelection","updateSelection","canInsertBlockType","getBlockRootClientId","getBlocksByClientId","canMoveBlocks","canRemoveBlocks","
|
|
1
|
+
{"version":3,"names":["useDispatch","useSelect","hasBlockSupport","switchToBlockType","store","blocksStore","useNotifyCopy","usePasteStyles","blockEditorStore","BlockActions","clientIds","children","__experimentalUpdateSelection","updateSelection","getDefaultBlockName","getGroupingBlockName","selected","select","canInsertBlockType","getBlockRootClientId","getBlocksByClientId","getDirectInsertBlock","canMoveBlocks","canRemoveBlocks","blocks","rootClientId","canInsertDefaultBlock","directInsertBlock","canMove","canRemove","canInsertBlock","canCopyStyles","every","block","name","canDuplicate","getBlocks","removeBlocks","replaceBlocks","duplicateBlocks","insertAfterBlock","insertBeforeBlock","flashBlock","setBlockMovingClientId","setNavigationMode","selectBlock","notifyCopy","pasteStyles","onDuplicate","onRemove","onInsertBefore","clientId","Array","isArray","onInsertAfter","length","onMoveTo","onGroup","groupingBlockName","newBlocks","onUngroup","innerBlocks","onCopy","onPasteStyles"],"sources":["@wordpress/block-editor/src/components/block-actions/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\thasBlockSupport,\n\tswitchToBlockType,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { useNotifyCopy } from '../../utils/use-notify-copy';\nimport usePasteStyles from '../use-paste-styles';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockActions( {\n\tclientIds,\n\tchildren,\n\t__experimentalUpdateSelection: updateSelection,\n} ) {\n\tconst { getDefaultBlockName, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tgetDirectInsertBlock,\n\t\t\t\tcanMoveBlocks,\n\t\t\t\tcanRemoveBlocks,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\tconst canInsertDefaultBlock = canInsertBlockType(\n\t\t\t\tgetDefaultBlockName(),\n\t\t\t\trootClientId\n\t\t\t);\n\t\t\tconst directInsertBlock = rootClientId\n\t\t\t\t? getDirectInsertBlock( rootClientId )\n\t\t\t\t: null;\n\n\t\t\treturn {\n\t\t\t\tcanMove: canMoveBlocks( clientIds, rootClientId ),\n\t\t\t\tcanRemove: canRemoveBlocks( clientIds, rootClientId ),\n\t\t\t\tcanInsertBlock: canInsertDefaultBlock || !! directInsertBlock,\n\t\t\t\tcanCopyStyles: blocks.every( ( block ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t( hasBlockSupport( block.name, 'color' ) ||\n\t\t\t\t\t\t\thasBlockSupport( block.name, 'typography' ) )\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t\t\tcanDuplicate: blocks.every( ( block ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\thasBlockSupport( block.name, 'multiple', true ) &&\n\t\t\t\t\t\tcanInsertBlockType( block.name, rootClientId )\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t\t};\n\t\t},\n\t\t[ clientIds, getDefaultBlockName ]\n\t);\n\tconst { getBlocksByClientId, getBlocks } = useSelect( blockEditorStore );\n\n\tconst { canMove, canRemove, canInsertBlock, canCopyStyles, canDuplicate } =\n\t\tselected;\n\n\tconst {\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tduplicateBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tflashBlock,\n\t\tsetBlockMovingClientId,\n\t\tsetNavigationMode,\n\t\tselectBlock,\n\t} = useDispatch( blockEditorStore );\n\n\tconst notifyCopy = useNotifyCopy();\n\tconst pasteStyles = usePasteStyles();\n\n\treturn children( {\n\t\tcanCopyStyles,\n\t\tcanDuplicate,\n\t\tcanInsertBlock,\n\t\tcanMove,\n\t\tcanRemove,\n\t\tonDuplicate() {\n\t\t\treturn duplicateBlocks( clientIds, updateSelection );\n\t\t},\n\t\tonRemove() {\n\t\t\treturn removeBlocks( clientIds, updateSelection );\n\t\t},\n\t\tonInsertBefore() {\n\t\t\tconst clientId = Array.isArray( clientIds )\n\t\t\t\t? clientIds[ 0 ]\n\t\t\t\t: clientId;\n\t\t\tinsertBeforeBlock( clientId );\n\t\t},\n\t\tonInsertAfter() {\n\t\t\tconst clientId = Array.isArray( clientIds )\n\t\t\t\t? clientIds[ clientIds.length - 1 ]\n\t\t\t\t: clientId;\n\t\t\tinsertAfterBlock( clientId );\n\t\t},\n\t\tonMoveTo() {\n\t\t\tsetNavigationMode( true );\n\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\tsetBlockMovingClientId( clientIds[ 0 ] );\n\t\t},\n\t\tonGroup() {\n\t\t\tif ( ! clientIds.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst groupingBlockName = getGroupingBlockName();\n\n\t\t\t// Activate the `transform` on `core/group` which does the conversion.\n\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\tgetBlocksByClientId( clientIds ),\n\t\t\t\tgroupingBlockName\n\t\t\t);\n\n\t\t\tif ( ! newBlocks ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t},\n\t\tonUngroup() {\n\t\t\tif ( ! clientIds.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst innerBlocks = getBlocks( clientIds[ 0 ] );\n\t\t\tif ( ! innerBlocks.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treplaceBlocks( clientIds, innerBlocks );\n\t\t},\n\t\tonCopy() {\n\t\t\tif ( clientIds.length === 1 ) {\n\t\t\t\tflashBlock( clientIds[ 0 ] );\n\t\t\t}\n\t\t\tnotifyCopy( 'copy', clientIds );\n\t\t},\n\t\tasync onPasteStyles() {\n\t\t\tawait pasteStyles( getBlocksByClientId( clientIds ) );\n\t\t},\n\t} );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* WordPress dependencies
|
|
4
|
+
*/
|
|
5
|
+
import { ToolbarItem, ToolbarGroup, Icon } from '@wordpress/components';
|
|
6
|
+
import { connection } from '@wordpress/icons';
|
|
7
|
+
import { _x } from '@wordpress/i18n';
|
|
8
|
+
export default function BlockBindingsToolbarIndicator() {
|
|
9
|
+
return createElement(ToolbarGroup, null, createElement(ToolbarItem, {
|
|
10
|
+
as: 'div',
|
|
11
|
+
"aria-label": _x('Connected', 'block toolbar button label'),
|
|
12
|
+
className: "block-editor-block-bindings-toolbar-indicator"
|
|
13
|
+
}, createElement(Icon, {
|
|
14
|
+
icon: connection,
|
|
15
|
+
size: 24
|
|
16
|
+
})));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ToolbarItem","ToolbarGroup","Icon","connection","_x","BlockBindingsToolbarIndicator","createElement","as","className","icon","size"],"sources":["@wordpress/block-editor/src/components/block-bindings-toolbar-indicator/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { ToolbarItem, ToolbarGroup, Icon } from '@wordpress/components';\nimport { connection } from '@wordpress/icons';\nimport { _x } from '@wordpress/i18n';\n\nexport default function BlockBindingsToolbarIndicator() {\n\treturn (\n\t\t<ToolbarGroup>\n\t\t\t<ToolbarItem\n\t\t\t\tas={ 'div' }\n\t\t\t\taria-label={ _x( 'Connected', 'block toolbar button label' ) }\n\t\t\t\tclassName=\"block-editor-block-bindings-toolbar-indicator\"\n\t\t\t>\n\t\t\t\t<Icon icon={ connection } size={ 24 } />\n\t\t\t</ToolbarItem>\n\t\t</ToolbarGroup>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,WAAW,EAAEC,YAAY,EAAEC,IAAI,QAAQ,uBAAuB;AACvE,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,EAAE,QAAQ,iBAAiB;AAEpC,eAAe,SAASC,6BAA6BA,CAAA,EAAG;EACvD,OACCC,aAAA,CAACL,YAAY,QACZK,aAAA,CAACN,WAAW;IACXO,EAAE,EAAG,KAAO;IACZ,cAAaH,EAAE,CAAE,WAAW,EAAE,4BAA6B,CAAG;IAC9DI,SAAS,EAAC;EAA+C,GAEzDF,aAAA,CAACJ,IAAI;IAACO,IAAI,EAAGN,UAAY;IAACO,IAAI,EAAG;EAAI,CAAE,CAC3B,CACA,CAAC;AAEjB"}
|
|
@@ -19,13 +19,14 @@ import useMovingAnimation from '../../use-moving-animation';
|
|
|
19
19
|
import { PrivateBlockContext } from '../private-block-context';
|
|
20
20
|
import { useFocusFirstElement } from './use-focus-first-element';
|
|
21
21
|
import { useIsHovered } from './use-is-hovered';
|
|
22
|
-
import { useBlockEditContext } from '../../block-edit/context';
|
|
22
|
+
import { blockBindingsKey, useBlockEditContext } from '../../block-edit/context';
|
|
23
23
|
import { useFocusHandler } from './use-focus-handler';
|
|
24
24
|
import { useEventHandlers } from './use-selected-block-event-handlers';
|
|
25
25
|
import { useNavModeExit } from './use-nav-mode-exit';
|
|
26
26
|
import { useBlockRefProvider } from './use-block-refs';
|
|
27
27
|
import { useIntersectionObserver } from './use-intersection-observer';
|
|
28
28
|
import { useFlashEditableBlocks } from '../../use-flash-editable-blocks';
|
|
29
|
+
import { canBindBlock } from '../../../hooks/use-bindings-attributes';
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* This hook is used to lightly mark an element as a block element. The element
|
|
@@ -125,6 +126,11 @@ export function useBlockProps(props = {}, {
|
|
|
125
126
|
isEnabled: name === 'core/block' || templateLock === 'contentOnly'
|
|
126
127
|
})]);
|
|
127
128
|
const blockEditContext = useBlockEditContext();
|
|
129
|
+
const hasBlockBindings = !!blockEditContext[blockBindingsKey];
|
|
130
|
+
const bindingsStyle = hasBlockBindings && canBindBlock(name) ? {
|
|
131
|
+
'--wp-admin-theme-color': 'var(--wp-bound-block-color)'
|
|
132
|
+
} : {};
|
|
133
|
+
|
|
128
134
|
// Ensures it warns only inside the `edit` implementation for the block.
|
|
129
135
|
if (blockApiVersion < 2 && clientId === blockEditContext.clientId) {
|
|
130
136
|
typeof SCRIPT_DEBUG !== "undefined" && SCRIPT_DEBUG === true ? warning(`Block type "${name}" must support API version 2 or higher to work correctly with "useBlockProps" method.`) : void 0;
|
|
@@ -161,7 +167,8 @@ export function useBlockProps(props = {}, {
|
|
|
161
167
|
}, className, props.className, wrapperProps.className, defaultClassName),
|
|
162
168
|
style: {
|
|
163
169
|
...wrapperProps.style,
|
|
164
|
-
...props.style
|
|
170
|
+
...props.style,
|
|
171
|
+
...bindingsStyle
|
|
165
172
|
}
|
|
166
173
|
};
|
|
167
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["classnames","useContext","__","sprintf","__unstableGetBlockProps","getBlockProps","useMergeRefs","useDisabled","warning","useMovingAnimation","PrivateBlockContext","useFocusFirstElement","useIsHovered","useBlockEditContext","useFocusHandler","useEventHandlers","useNavModeExit","useBlockRefProvider","useIntersectionObserver","useFlashEditableBlocks","useBlockProps","props","__unstableIsHtml","clientId","className","wrapperProps","isAligned","index","mode","name","blockApiVersion","blockTitle","isSelected","isSubtreeDisabled","isOutlineEnabled","hasOverlay","initialPosition","blockEditingMode","isHighlighted","isMultiSelected","isPartiallySelected","isReusable","isDragging","hasChildSelected","removeOutline","isBlockMovingMode","canInsertMovingBlock","isEditingDisabled","hasEditableOutline","isTemporarilyEditingAsBlocks","defaultClassName","templateLock","blockLabel","htmlSuffix","mergedRefs","ref","isEnabled","triggerAnimationOnChange","isDisabled","blockEditContext","SCRIPT_DEBUG","tabIndex","id","role","inert","undefined","style","save"],"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useContext } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { __unstableGetBlockProps as getBlockProps } from '@wordpress/blocks';\nimport { useMergeRefs, useDisabled } from '@wordpress/compose';\nimport warning from '@wordpress/warning';\n\n/**\n * Internal dependencies\n */\nimport useMovingAnimation from '../../use-moving-animation';\nimport { PrivateBlockContext } from '../private-block-context';\nimport { useFocusFirstElement } from './use-focus-first-element';\nimport { useIsHovered } from './use-is-hovered';\nimport { useBlockEditContext } from '../../block-edit/context';\nimport { useFocusHandler } from './use-focus-handler';\nimport { useEventHandlers } from './use-selected-block-event-handlers';\nimport { useNavModeExit } from './use-nav-mode-exit';\nimport { useBlockRefProvider } from './use-block-refs';\nimport { useIntersectionObserver } from './use-intersection-observer';\nimport { useFlashEditableBlocks } from '../../use-flash-editable-blocks';\n\n/**\n * This hook is used to lightly mark an element as a block element. The element\n * should be the outermost element of a block. Call this hook and pass the\n * returned props to the element to mark as a block. If you define a ref for the\n * element, it is important to pass the ref to this hook, which the hook in turn\n * will pass to the component through the props it returns. Optionally, you can\n * also pass any other props through this hook, and they will be merged and\n * returned.\n *\n * Use of this hook on the outermost element of a block is required if using API >= v2.\n *\n * @example\n * ```js\n * import { useBlockProps } from '@wordpress/block-editor';\n *\n * export default function Edit() {\n *\n * const blockProps = useBlockProps(\n * className: 'my-custom-class',\n * style: {\n * color: '#222222',\n * backgroundColor: '#eeeeee'\n * }\n * )\n *\n * return (\n *\t <div { ...blockProps }>\n *\n * </div>\n * )\n * }\n *\n * ```\n *\n *\n * @param {Object} props Optional. Props to pass to the element. Must contain\n * the ref if one is defined.\n * @param {Object} options Options for internal use only.\n * @param {boolean} options.__unstableIsHtml\n *\n * @return {Object} Props to pass to the element to mark as a block.\n */\nexport function useBlockProps( props = {}, { __unstableIsHtml } = {} ) {\n\tconst {\n\t\tclientId,\n\t\tclassName,\n\t\twrapperProps = {},\n\t\tisAligned,\n\t\tindex,\n\t\tmode,\n\t\tname,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSelected,\n\t\tisSubtreeDisabled,\n\t\tisOutlineEnabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tblockEditingMode,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tremoveOutline,\n\t\tisBlockMovingMode,\n\t\tcanInsertMovingBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tdefaultClassName,\n\t\ttemplateLock,\n\t} = useContext( PrivateBlockContext );\n\n\t// translators: %s: Type of block (i.e. Text, Image etc)\n\tconst blockLabel = sprintf( __( 'Block: %s' ), blockTitle );\n\tconst htmlSuffix = mode === 'html' && ! __unstableIsHtml ? '-visual' : '';\n\tconst mergedRefs = useMergeRefs( [\n\t\tprops.ref,\n\t\tuseFocusFirstElement( { clientId, initialPosition } ),\n\t\tuseBlockRefProvider( clientId ),\n\t\tuseFocusHandler( clientId ),\n\t\tuseEventHandlers( { clientId, isSelected } ),\n\t\tuseNavModeExit( clientId ),\n\t\tuseIsHovered( { isEnabled: isOutlineEnabled } ),\n\t\tuseIntersectionObserver(),\n\t\tuseMovingAnimation( { triggerAnimationOnChange: index, clientId } ),\n\t\tuseDisabled( { isDisabled: ! hasOverlay } ),\n\t\tuseFlashEditableBlocks( {\n\t\t\tclientId,\n\t\t\tisEnabled: name === 'core/block' || templateLock === 'contentOnly',\n\t\t} ),\n\t] );\n\n\tconst blockEditContext = useBlockEditContext();\n\t// Ensures it warns only inside the `edit` implementation for the block.\n\tif ( blockApiVersion < 2 && clientId === blockEditContext.clientId ) {\n\t\twarning(\n\t\t\t`Block type \"${ name }\" must support API version 2 or higher to work correctly with \"useBlockProps\" method.`\n\t\t);\n\t}\n\n\treturn {\n\t\ttabIndex: blockEditingMode === 'disabled' ? -1 : 0,\n\t\t...wrapperProps,\n\t\t...props,\n\t\tref: mergedRefs,\n\t\tid: `block-${ clientId }${ htmlSuffix }`,\n\t\trole: 'document',\n\t\t'aria-label': blockLabel,\n\t\t'data-block': clientId,\n\t\t'data-type': name,\n\t\t'data-title': blockTitle,\n\t\tinert: isSubtreeDisabled ? 'true' : undefined,\n\t\tclassName: classnames(\n\t\t\t'block-editor-block-list__block',\n\t\t\t{\n\t\t\t\t// The wp-block className is important for editor styles.\n\t\t\t\t'wp-block': ! isAligned,\n\t\t\t\t'has-block-overlay': hasOverlay,\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t'is-highlighted': isHighlighted,\n\t\t\t\t'is-multi-selected': isMultiSelected,\n\t\t\t\t'is-partially-selected': isPartiallySelected,\n\t\t\t\t'is-reusable': isReusable,\n\t\t\t\t'is-dragging': isDragging,\n\t\t\t\t'has-child-selected': hasChildSelected,\n\t\t\t\t'remove-outline': removeOutline,\n\t\t\t\t'is-block-moving-mode': isBlockMovingMode,\n\t\t\t\t'can-insert-moving-block': canInsertMovingBlock,\n\t\t\t\t'is-editing-disabled': isEditingDisabled,\n\t\t\t\t'has-editable-outline': hasEditableOutline,\n\t\t\t\t'is-content-locked-temporarily-editing-as-blocks':\n\t\t\t\t\tisTemporarilyEditingAsBlocks,\n\t\t\t},\n\t\t\tclassName,\n\t\t\tprops.className,\n\t\t\twrapperProps.className,\n\t\t\tdefaultClassName\n\t\t),\n\t\tstyle: { ...wrapperProps.style, ...props.style },\n\t};\n}\n\n/**\n * Call within a save function to get the props for the block wrapper.\n *\n * @param {Object} props Optional. Props to pass to the element.\n */\nuseBlockProps.save = getBlockProps;\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,UAAU,MAAM,YAAY;;AAEnC;AACA;AACA;AACA,SAASC,UAAU,QAAQ,oBAAoB;AAC/C,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AAC7C,SAASC,uBAAuB,IAAIC,aAAa,QAAQ,mBAAmB;AAC5E,SAASC,YAAY,EAAEC,WAAW,QAAQ,oBAAoB;AAC9D,OAAOC,OAAO,MAAM,oBAAoB;;AAExC;AACA;AACA;AACA,OAAOC,kBAAkB,MAAM,4BAA4B;AAC3D,SAASC,mBAAmB,QAAQ,0BAA0B;AAC9D,SAASC,oBAAoB,QAAQ,2BAA2B;AAChE,SAASC,YAAY,QAAQ,kBAAkB;AAC/C,SAASC,mBAAmB,QAAQ,0BAA0B;AAC9D,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,gBAAgB,QAAQ,qCAAqC;AACtE,SAASC,cAAc,QAAQ,qBAAqB;AACpD,SAASC,mBAAmB,QAAQ,kBAAkB;AACtD,SAASC,uBAAuB,QAAQ,6BAA6B;AACrE,SAASC,sBAAsB,QAAQ,iCAAiC;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAAEC,KAAK,GAAG,CAAC,CAAC,EAAE;EAAEC;AAAiB,CAAC,GAAG,CAAC,CAAC,EAAG;EACtE,MAAM;IACLC,QAAQ;IACRC,SAAS;IACTC,YAAY,GAAG,CAAC,CAAC;IACjBC,SAAS;IACTC,KAAK;IACLC,IAAI;IACJC,IAAI;IACJC,eAAe;IACfC,UAAU;IACVC,UAAU;IACVC,iBAAiB;IACjBC,gBAAgB;IAChBC,UAAU;IACVC,eAAe;IACfC,gBAAgB;IAChBC,aAAa;IACbC,eAAe;IACfC,mBAAmB;IACnBC,UAAU;IACVC,UAAU;IACVC,gBAAgB;IAChBC,aAAa;IACbC,iBAAiB;IACjBC,oBAAoB;IACpBC,iBAAiB;IACjBC,kBAAkB;IAClBC,4BAA4B;IAC5BC,gBAAgB;IAChBC;EACD,CAAC,GAAGlD,UAAU,CAAES,mBAAoB,CAAC;;EAErC;EACA,MAAM0C,UAAU,GAAGjD,OAAO,CAAED,EAAE,CAAE,WAAY,CAAC,EAAE6B,UAAW,CAAC;EAC3D,MAAMsB,UAAU,GAAGzB,IAAI,KAAK,MAAM,IAAI,CAAEN,gBAAgB,GAAG,SAAS,GAAG,EAAE;EACzE,MAAMgC,UAAU,GAAGhD,YAAY,CAAE,CAChCe,KAAK,CAACkC,GAAG,EACT5C,oBAAoB,CAAE;IAAEY,QAAQ;IAAEa;EAAgB,CAAE,CAAC,EACrDnB,mBAAmB,CAAEM,QAAS,CAAC,EAC/BT,eAAe,CAAES,QAAS,CAAC,EAC3BR,gBAAgB,CAAE;IAAEQ,QAAQ;IAAES;EAAW,CAAE,CAAC,EAC5ChB,cAAc,CAAEO,QAAS,CAAC,EAC1BX,YAAY,CAAE;IAAE4C,SAAS,EAAEtB;EAAiB,CAAE,CAAC,EAC/ChB,uBAAuB,CAAC,CAAC,EACzBT,kBAAkB,CAAE;IAAEgD,wBAAwB,EAAE9B,KAAK;IAAEJ;EAAS,CAAE,CAAC,EACnEhB,WAAW,CAAE;IAAEmD,UAAU,EAAE,CAAEvB;EAAW,CAAE,CAAC,EAC3ChB,sBAAsB,CAAE;IACvBI,QAAQ;IACRiC,SAAS,EAAE3B,IAAI,KAAK,YAAY,IAAIsB,YAAY,KAAK;EACtD,CAAE,CAAC,CACF,CAAC;EAEH,MAAMQ,gBAAgB,GAAG9C,mBAAmB,CAAC,CAAC;EAC9C;EACA,IAAKiB,eAAe,GAAG,CAAC,IAAIP,QAAQ,KAAKoC,gBAAgB,CAACpC,QAAQ,EAAG;IACpE,OAAAqC,YAAA,oBAAAA,YAAA,YAAApD,OAAO,CACL,eAAeqB,IAAM,uFACvB,CAAC;EACF;EAEA,OAAO;IACNgC,QAAQ,EAAExB,gBAAgB,KAAK,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC;IAClD,GAAGZ,YAAY;IACf,GAAGJ,KAAK;IACRkC,GAAG,EAAED,UAAU;IACfQ,EAAE,EAAG,SAASvC,QAAU,GAAG8B,UAAY,EAAC;IACxCU,IAAI,EAAE,UAAU;IAChB,YAAY,EAAEX,UAAU;IACxB,YAAY,EAAE7B,QAAQ;IACtB,WAAW,EAAEM,IAAI;IACjB,YAAY,EAAEE,UAAU;IACxBiC,KAAK,EAAE/B,iBAAiB,GAAG,MAAM,GAAGgC,SAAS;IAC7CzC,SAAS,EAAExB,UAAU,CACpB,gCAAgC,EAChC;MACC;MACA,UAAU,EAAE,CAAE0B,SAAS;MACvB,mBAAmB,EAAES,UAAU;MAC/B,aAAa,EAAEH,UAAU;MACzB,gBAAgB,EAAEM,aAAa;MAC/B,mBAAmB,EAAEC,eAAe;MACpC,uBAAuB,EAAEC,mBAAmB;MAC5C,aAAa,EAAEC,UAAU;MACzB,aAAa,EAAEC,UAAU;MACzB,oBAAoB,EAAEC,gBAAgB;MACtC,gBAAgB,EAAEC,aAAa;MAC/B,sBAAsB,EAAEC,iBAAiB;MACzC,yBAAyB,EAAEC,oBAAoB;MAC/C,qBAAqB,EAAEC,iBAAiB;MACxC,sBAAsB,EAAEC,kBAAkB;MAC1C,iDAAiD,EAChDC;IACF,CAAC,EACDzB,SAAS,EACTH,KAAK,CAACG,SAAS,EACfC,YAAY,CAACD,SAAS,EACtB0B,gBACD,CAAC;IACDgB,KAAK,EAAE;MAAE,GAAGzC,YAAY,CAACyC,KAAK;MAAE,GAAG7C,KAAK,CAAC6C;IAAM;EAChD,CAAC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA9C,aAAa,CAAC+C,IAAI,GAAG9D,aAAa"}
|
|
1
|
+
{"version":3,"names":["classnames","useContext","__","sprintf","__unstableGetBlockProps","getBlockProps","useMergeRefs","useDisabled","warning","useMovingAnimation","PrivateBlockContext","useFocusFirstElement","useIsHovered","blockBindingsKey","useBlockEditContext","useFocusHandler","useEventHandlers","useNavModeExit","useBlockRefProvider","useIntersectionObserver","useFlashEditableBlocks","canBindBlock","useBlockProps","props","__unstableIsHtml","clientId","className","wrapperProps","isAligned","index","mode","name","blockApiVersion","blockTitle","isSelected","isSubtreeDisabled","isOutlineEnabled","hasOverlay","initialPosition","blockEditingMode","isHighlighted","isMultiSelected","isPartiallySelected","isReusable","isDragging","hasChildSelected","removeOutline","isBlockMovingMode","canInsertMovingBlock","isEditingDisabled","hasEditableOutline","isTemporarilyEditingAsBlocks","defaultClassName","templateLock","blockLabel","htmlSuffix","mergedRefs","ref","isEnabled","triggerAnimationOnChange","isDisabled","blockEditContext","hasBlockBindings","bindingsStyle","SCRIPT_DEBUG","tabIndex","id","role","inert","undefined","style","save"],"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useContext } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { __unstableGetBlockProps as getBlockProps } from '@wordpress/blocks';\nimport { useMergeRefs, useDisabled } from '@wordpress/compose';\nimport warning from '@wordpress/warning';\n\n/**\n * Internal dependencies\n */\nimport useMovingAnimation from '../../use-moving-animation';\nimport { PrivateBlockContext } from '../private-block-context';\nimport { useFocusFirstElement } from './use-focus-first-element';\nimport { useIsHovered } from './use-is-hovered';\nimport {\n\tblockBindingsKey,\n\tuseBlockEditContext,\n} from '../../block-edit/context';\nimport { useFocusHandler } from './use-focus-handler';\nimport { useEventHandlers } from './use-selected-block-event-handlers';\nimport { useNavModeExit } from './use-nav-mode-exit';\nimport { useBlockRefProvider } from './use-block-refs';\nimport { useIntersectionObserver } from './use-intersection-observer';\nimport { useFlashEditableBlocks } from '../../use-flash-editable-blocks';\nimport { canBindBlock } from '../../../hooks/use-bindings-attributes';\n\n/**\n * This hook is used to lightly mark an element as a block element. The element\n * should be the outermost element of a block. Call this hook and pass the\n * returned props to the element to mark as a block. If you define a ref for the\n * element, it is important to pass the ref to this hook, which the hook in turn\n * will pass to the component through the props it returns. Optionally, you can\n * also pass any other props through this hook, and they will be merged and\n * returned.\n *\n * Use of this hook on the outermost element of a block is required if using API >= v2.\n *\n * @example\n * ```js\n * import { useBlockProps } from '@wordpress/block-editor';\n *\n * export default function Edit() {\n *\n * const blockProps = useBlockProps(\n * className: 'my-custom-class',\n * style: {\n * color: '#222222',\n * backgroundColor: '#eeeeee'\n * }\n * )\n *\n * return (\n *\t <div { ...blockProps }>\n *\n * </div>\n * )\n * }\n *\n * ```\n *\n *\n * @param {Object} props Optional. Props to pass to the element. Must contain\n * the ref if one is defined.\n * @param {Object} options Options for internal use only.\n * @param {boolean} options.__unstableIsHtml\n *\n * @return {Object} Props to pass to the element to mark as a block.\n */\nexport function useBlockProps( props = {}, { __unstableIsHtml } = {} ) {\n\tconst {\n\t\tclientId,\n\t\tclassName,\n\t\twrapperProps = {},\n\t\tisAligned,\n\t\tindex,\n\t\tmode,\n\t\tname,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSelected,\n\t\tisSubtreeDisabled,\n\t\tisOutlineEnabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tblockEditingMode,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tremoveOutline,\n\t\tisBlockMovingMode,\n\t\tcanInsertMovingBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tdefaultClassName,\n\t\ttemplateLock,\n\t} = useContext( PrivateBlockContext );\n\n\t// translators: %s: Type of block (i.e. Text, Image etc)\n\tconst blockLabel = sprintf( __( 'Block: %s' ), blockTitle );\n\tconst htmlSuffix = mode === 'html' && ! __unstableIsHtml ? '-visual' : '';\n\tconst mergedRefs = useMergeRefs( [\n\t\tprops.ref,\n\t\tuseFocusFirstElement( { clientId, initialPosition } ),\n\t\tuseBlockRefProvider( clientId ),\n\t\tuseFocusHandler( clientId ),\n\t\tuseEventHandlers( { clientId, isSelected } ),\n\t\tuseNavModeExit( clientId ),\n\t\tuseIsHovered( { isEnabled: isOutlineEnabled } ),\n\t\tuseIntersectionObserver(),\n\t\tuseMovingAnimation( { triggerAnimationOnChange: index, clientId } ),\n\t\tuseDisabled( { isDisabled: ! hasOverlay } ),\n\t\tuseFlashEditableBlocks( {\n\t\t\tclientId,\n\t\t\tisEnabled: name === 'core/block' || templateLock === 'contentOnly',\n\t\t} ),\n\t] );\n\n\tconst blockEditContext = useBlockEditContext();\n\tconst hasBlockBindings = !! blockEditContext[ blockBindingsKey ];\n\tconst bindingsStyle =\n\t\thasBlockBindings && canBindBlock( name )\n\t\t\t? { '--wp-admin-theme-color': 'var(--wp-bound-block-color)' }\n\t\t\t: {};\n\n\t// Ensures it warns only inside the `edit` implementation for the block.\n\tif ( blockApiVersion < 2 && clientId === blockEditContext.clientId ) {\n\t\twarning(\n\t\t\t`Block type \"${ name }\" must support API version 2 or higher to work correctly with \"useBlockProps\" method.`\n\t\t);\n\t}\n\n\treturn {\n\t\ttabIndex: blockEditingMode === 'disabled' ? -1 : 0,\n\t\t...wrapperProps,\n\t\t...props,\n\t\tref: mergedRefs,\n\t\tid: `block-${ clientId }${ htmlSuffix }`,\n\t\trole: 'document',\n\t\t'aria-label': blockLabel,\n\t\t'data-block': clientId,\n\t\t'data-type': name,\n\t\t'data-title': blockTitle,\n\t\tinert: isSubtreeDisabled ? 'true' : undefined,\n\t\tclassName: classnames(\n\t\t\t'block-editor-block-list__block',\n\t\t\t{\n\t\t\t\t// The wp-block className is important for editor styles.\n\t\t\t\t'wp-block': ! isAligned,\n\t\t\t\t'has-block-overlay': hasOverlay,\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t'is-highlighted': isHighlighted,\n\t\t\t\t'is-multi-selected': isMultiSelected,\n\t\t\t\t'is-partially-selected': isPartiallySelected,\n\t\t\t\t'is-reusable': isReusable,\n\t\t\t\t'is-dragging': isDragging,\n\t\t\t\t'has-child-selected': hasChildSelected,\n\t\t\t\t'remove-outline': removeOutline,\n\t\t\t\t'is-block-moving-mode': isBlockMovingMode,\n\t\t\t\t'can-insert-moving-block': canInsertMovingBlock,\n\t\t\t\t'is-editing-disabled': isEditingDisabled,\n\t\t\t\t'has-editable-outline': hasEditableOutline,\n\t\t\t\t'is-content-locked-temporarily-editing-as-blocks':\n\t\t\t\t\tisTemporarilyEditingAsBlocks,\n\t\t\t},\n\t\t\tclassName,\n\t\t\tprops.className,\n\t\t\twrapperProps.className,\n\t\t\tdefaultClassName\n\t\t),\n\t\tstyle: { ...wrapperProps.style, ...props.style, ...bindingsStyle },\n\t};\n}\n\n/**\n * Call within a save function to get the props for the block wrapper.\n *\n * @param {Object} props Optional. Props to pass to the element.\n */\nuseBlockProps.save = getBlockProps;\n"],"mappings":"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"}
|
package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js
CHANGED
|
@@ -28,7 +28,7 @@ export function useEventHandlers({
|
|
|
28
28
|
getBlockIndex
|
|
29
29
|
} = useSelect(blockEditorStore);
|
|
30
30
|
const {
|
|
31
|
-
|
|
31
|
+
insertAfterBlock,
|
|
32
32
|
removeBlock
|
|
33
33
|
} = useDispatch(blockEditorStore);
|
|
34
34
|
return useRefEffect(node => {
|
|
@@ -58,7 +58,7 @@ export function useEventHandlers({
|
|
|
58
58
|
}
|
|
59
59
|
event.preventDefault();
|
|
60
60
|
if (keyCode === ENTER) {
|
|
61
|
-
|
|
61
|
+
insertAfterBlock(clientId);
|
|
62
62
|
} else {
|
|
63
63
|
removeBlock(clientId);
|
|
64
64
|
}
|
|
@@ -79,6 +79,6 @@ export function useEventHandlers({
|
|
|
79
79
|
node.removeEventListener('keydown', onKeyDown);
|
|
80
80
|
node.removeEventListener('dragstart', onDragStart);
|
|
81
81
|
};
|
|
82
|
-
}, [clientId, isSelected, getBlockRootClientId, getBlockIndex,
|
|
82
|
+
}, [clientId, isSelected, getBlockRootClientId, getBlockIndex, insertAfterBlock, removeBlock]);
|
|
83
83
|
}
|
|
84
84
|
//# sourceMappingURL=use-selected-block-event-handlers.js.map
|
package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isTextField","ENTER","BACKSPACE","DELETE","useSelect","useDispatch","useRefEffect","store","blockEditorStore","useEventHandlers","clientId","isSelected","getBlockRootClientId","getBlockIndex","
|
|
1
|
+
{"version":3,"names":["isTextField","ENTER","BACKSPACE","DELETE","useSelect","useDispatch","useRefEffect","store","blockEditorStore","useEventHandlers","clientId","isSelected","getBlockRootClientId","getBlockIndex","insertAfterBlock","removeBlock","node","onKeyDown","event","keyCode","target","preventDefault","onDragStart","addEventListener","removeEventListener"],"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-selected-block-event-handlers.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isTextField } from '@wordpress/dom';\nimport { ENTER, BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Adds block behaviour:\n * - Removes the block on BACKSPACE.\n * - Inserts a default block on ENTER.\n * - Disables dragging of block contents.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useEventHandlers( { clientId, isSelected } ) {\n\tconst { getBlockRootClientId, getBlockIndex } =\n\t\tuseSelect( blockEditorStore );\n\tconst { insertAfterBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! isSelected ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Interprets keydown event intent to remove or insert after block if\n\t\t\t * key event occurs on wrapper node. This can occur when the block has\n\t\t\t * no text fields of its own, particularly after initial insertion, to\n\t\t\t * allow for easy deletion and continuous writing flow to add additional\n\t\t\t * content.\n\t\t\t *\n\t\t\t * @param {KeyboardEvent} event Keydown event.\n\t\t\t */\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\tconst { keyCode, target } = event;\n\n\t\t\t\tif (\n\t\t\t\t\tkeyCode !== ENTER &&\n\t\t\t\t\tkeyCode !== BACKSPACE &&\n\t\t\t\t\tkeyCode !== DELETE\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( target !== node || isTextField( target ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( keyCode === ENTER ) {\n\t\t\t\t\tinsertAfterBlock( clientId );\n\t\t\t\t} else {\n\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Prevents default dragging behavior within a block. To do: we must\n\t\t\t * handle this in the future and clean up the drag target.\n\t\t\t *\n\t\t\t * @param {DragEvent} event Drag event.\n\t\t\t */\n\t\t\tfunction onDragStart( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\t\tnode.addEventListener( 'dragstart', onDragStart );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\tnode.removeEventListener( 'dragstart', onDragStart );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tisSelected,\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockIndex,\n\t\t\tinsertAfterBlock,\n\t\t\tremoveBlock,\n\t\t]\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,QAAQ,gBAAgB;AAC5C,SAASC,KAAK,EAAEC,SAAS,EAAEC,MAAM,QAAQ,qBAAqB;AAC9D,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASC,YAAY,QAAQ,oBAAoB;;AAEjD;AACA;AACA;AACA,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,gBAAgB;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAE;EAAEC,QAAQ;EAAEC;AAAW,CAAC,EAAG;EAC5D,MAAM;IAAEC,oBAAoB;IAAEC;EAAc,CAAC,GAC5CT,SAAS,CAAEI,gBAAiB,CAAC;EAC9B,MAAM;IAAEM,gBAAgB;IAAEC;EAAY,CAAC,GAAGV,WAAW,CAAEG,gBAAiB,CAAC;EAEzE,OAAOF,YAAY,CAChBU,IAAI,IAAM;IACX,IAAK,CAAEL,UAAU,EAAG;MACnB;IACD;;IAEA;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACG,SAASM,SAASA,CAAEC,KAAK,EAAG;MAC3B,MAAM;QAAEC,OAAO;QAAEC;MAAO,CAAC,GAAGF,KAAK;MAEjC,IACCC,OAAO,KAAKlB,KAAK,IACjBkB,OAAO,KAAKjB,SAAS,IACrBiB,OAAO,KAAKhB,MAAM,EACjB;QACD;MACD;MAEA,IAAKiB,MAAM,KAAKJ,IAAI,IAAIhB,WAAW,CAAEoB,MAAO,CAAC,EAAG;QAC/C;MACD;MAEAF,KAAK,CAACG,cAAc,CAAC,CAAC;MAEtB,IAAKF,OAAO,KAAKlB,KAAK,EAAG;QACxBa,gBAAgB,CAAEJ,QAAS,CAAC;MAC7B,CAAC,MAAM;QACNK,WAAW,CAAEL,QAAS,CAAC;MACxB;IACD;;IAEA;AACH;AACA;AACA;AACA;AACA;IACG,SAASY,WAAWA,CAAEJ,KAAK,EAAG;MAC7BA,KAAK,CAACG,cAAc,CAAC,CAAC;IACvB;IAEAL,IAAI,CAACO,gBAAgB,CAAE,SAAS,EAAEN,SAAU,CAAC;IAC7CD,IAAI,CAACO,gBAAgB,CAAE,WAAW,EAAED,WAAY,CAAC;IAEjD,OAAO,MAAM;MACZN,IAAI,CAACQ,mBAAmB,CAAE,SAAS,EAAEP,SAAU,CAAC;MAChDD,IAAI,CAACQ,mBAAmB,CAAE,WAAW,EAAEF,WAAY,CAAC;IACrD,CAAC;EACF,CAAC,EACD,CACCZ,QAAQ,EACRC,UAAU,EACVC,oBAAoB,EACpBC,aAAa,EACbC,gBAAgB,EAChBC,WAAW,CAEb,CAAC;AACF"}
|
|
@@ -27,11 +27,14 @@ const POPOVER_PROPS = {
|
|
|
27
27
|
placement: 'bottom-start'
|
|
28
28
|
};
|
|
29
29
|
function CopyMenuItem({
|
|
30
|
-
|
|
30
|
+
clientIds,
|
|
31
31
|
onCopy,
|
|
32
32
|
label
|
|
33
33
|
}) {
|
|
34
|
-
const
|
|
34
|
+
const {
|
|
35
|
+
getBlocksByClientId
|
|
36
|
+
} = useSelect(blockEditorStore);
|
|
37
|
+
const ref = useCopyToClipboard(() => serialize(getBlocksByClientId(clientIds)), onCopy);
|
|
35
38
|
const copyMenuItemLabel = label ? label : __('Copy');
|
|
36
39
|
return createElement(MenuItem, {
|
|
37
40
|
ref: ref
|
|
@@ -176,7 +179,7 @@ export function BlockSettingsDropdown({
|
|
|
176
179
|
}, ({
|
|
177
180
|
canCopyStyles,
|
|
178
181
|
canDuplicate,
|
|
179
|
-
|
|
182
|
+
canInsertBlock,
|
|
180
183
|
canMove,
|
|
181
184
|
canRemove,
|
|
182
185
|
onDuplicate,
|
|
@@ -185,8 +188,7 @@ export function BlockSettingsDropdown({
|
|
|
185
188
|
onRemove,
|
|
186
189
|
onCopy,
|
|
187
190
|
onPasteStyles,
|
|
188
|
-
onMoveTo
|
|
189
|
-
blocks
|
|
191
|
+
onMoveTo
|
|
190
192
|
}) => createElement(DropdownMenu, {
|
|
191
193
|
icon: moreVertical,
|
|
192
194
|
label: __('Options'),
|
|
@@ -207,11 +209,11 @@ export function BlockSettingsDropdown({
|
|
|
207
209
|
} else if (isMatch('core/block-editor/duplicate', event) && canDuplicate) {
|
|
208
210
|
event.preventDefault();
|
|
209
211
|
updateSelectionAfterDuplicate(onDuplicate());
|
|
210
|
-
} else if (isMatch('core/block-editor/insert-after', event) &&
|
|
212
|
+
} else if (isMatch('core/block-editor/insert-after', event) && canInsertBlock) {
|
|
211
213
|
event.preventDefault();
|
|
212
214
|
setOpenedBlockSettingsMenu(undefined);
|
|
213
215
|
onInsertAfter();
|
|
214
|
-
} else if (isMatch('core/block-editor/insert-before', event) &&
|
|
216
|
+
} else if (isMatch('core/block-editor/insert-before', event) && canInsertBlock) {
|
|
215
217
|
event.preventDefault();
|
|
216
218
|
setOpenedBlockSettingsMenu(undefined);
|
|
217
219
|
onInsertBefore();
|
|
@@ -231,19 +233,19 @@ export function BlockSettingsDropdown({
|
|
|
231
233
|
}), count === 1 && createElement(BlockHTMLConvertButton, {
|
|
232
234
|
clientId: firstBlockClientId
|
|
233
235
|
}), createElement(CopyMenuItem, {
|
|
234
|
-
|
|
236
|
+
clientIds: clientIds,
|
|
235
237
|
onCopy: onCopy
|
|
236
238
|
}), canDuplicate && createElement(MenuItem, {
|
|
237
239
|
onClick: pipe(onClose, onDuplicate, updateSelectionAfterDuplicate),
|
|
238
240
|
shortcut: shortcuts.duplicate
|
|
239
|
-
}, __('Duplicate')),
|
|
241
|
+
}, __('Duplicate')), canInsertBlock && createElement(Fragment, null, createElement(MenuItem, {
|
|
240
242
|
onClick: pipe(onClose, onInsertBefore),
|
|
241
243
|
shortcut: shortcuts.insertBefore
|
|
242
244
|
}, __('Add before')), createElement(MenuItem, {
|
|
243
245
|
onClick: pipe(onClose, onInsertAfter),
|
|
244
246
|
shortcut: shortcuts.insertAfter
|
|
245
247
|
}, __('Add after')))), canCopyStyles && createElement(MenuGroup, null, createElement(CopyMenuItem, {
|
|
246
|
-
|
|
248
|
+
clientIds: clientIds,
|
|
247
249
|
onCopy: onCopy,
|
|
248
250
|
label: __('Copy styles')
|
|
249
251
|
}), createElement(MenuItem, {
|
|
@@ -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","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":"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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","clientIds","onCopy","label","getBlocksByClientId","ref","copyMenuItemLabel","createElement","ParentSelectorMenuItem","parentClientId","parentBlockType","isSmallViewport","selectBlock","menuItemRef","gesturesProps","highlightParent","icon","onClick","title","BlockSettingsDropdown","block","__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","canInsertBlock","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( { clientIds, onCopy, label } ) {\n\tconst { getBlocksByClientId } = useSelect( blockEditorStore );\n\tconst ref = useCopyToClipboard(\n\t\t() => serialize( getBlocksByClientId( clientIds ) ),\n\t\tonCopy\n\t);\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\tcanInsertBlock,\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} ) => (\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\tcanInsertBlock\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\tcanInsertBlock\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\tclientIds={ clientIds }\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{ canInsertBlock && (\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\tclientIds={ clientIds }\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":"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"}
|
|
@@ -31,6 +31,8 @@ import { store as blockEditorStore } from '../../store';
|
|
|
31
31
|
import __unstableBlockNameContext from './block-name-context';
|
|
32
32
|
import NavigableToolbar from '../navigable-toolbar';
|
|
33
33
|
import { useHasAnyBlockControls } from '../block-controls/use-has-block-controls';
|
|
34
|
+
import BlockBindingsIndicator from '../block-bindings-toolbar-indicator';
|
|
35
|
+
import { canBindBlock } from '../../hooks/use-bindings-attributes';
|
|
34
36
|
|
|
35
37
|
/**
|
|
36
38
|
* Renders the block toolbar.
|
|
@@ -56,8 +58,10 @@ export function PrivateBlockToolbar({
|
|
|
56
58
|
blockClientIds,
|
|
57
59
|
isDefaultEditingMode,
|
|
58
60
|
blockType,
|
|
61
|
+
blockName,
|
|
59
62
|
shouldShowVisualToolbar,
|
|
60
|
-
showParentSelector
|
|
63
|
+
showParentSelector,
|
|
64
|
+
isUsingBindings
|
|
61
65
|
} = useSelect(select => {
|
|
62
66
|
const {
|
|
63
67
|
getBlockName,
|
|
@@ -66,7 +70,8 @@ export function PrivateBlockToolbar({
|
|
|
66
70
|
getSelectedBlockClientIds,
|
|
67
71
|
isBlockValid,
|
|
68
72
|
getBlockRootClientId,
|
|
69
|
-
getBlockEditingMode
|
|
73
|
+
getBlockEditingMode,
|
|
74
|
+
getBlockAttributes
|
|
70
75
|
} = select(blockEditorStore);
|
|
71
76
|
const selectedBlockClientIds = getSelectedBlockClientIds();
|
|
72
77
|
const selectedBlockClientId = selectedBlockClientIds[0];
|
|
@@ -76,16 +81,20 @@ export function PrivateBlockToolbar({
|
|
|
76
81
|
const parentBlockName = getBlockName(firstParentClientId);
|
|
77
82
|
const parentBlockType = getBlockType(parentBlockName);
|
|
78
83
|
const _isDefaultEditingMode = getBlockEditingMode(selectedBlockClientId) === 'default';
|
|
84
|
+
const _blockName = getBlockName(selectedBlockClientId);
|
|
79
85
|
const isValid = selectedBlockClientIds.every(id => isBlockValid(id));
|
|
80
86
|
const isVisual = selectedBlockClientIds.every(id => getBlockMode(id) === 'visual');
|
|
87
|
+
const _isUsingBindings = !!getBlockAttributes(selectedBlockClientId)?.metadata?.bindings;
|
|
81
88
|
return {
|
|
82
89
|
blockClientId: selectedBlockClientId,
|
|
83
90
|
blockClientIds: selectedBlockClientIds,
|
|
84
91
|
isDefaultEditingMode: _isDefaultEditingMode,
|
|
85
|
-
|
|
92
|
+
blockName: _blockName,
|
|
93
|
+
blockType: selectedBlockClientId && getBlockType(_blockName),
|
|
86
94
|
shouldShowVisualToolbar: isValid && isVisual,
|
|
87
95
|
rootClientId: blockRootClientId,
|
|
88
|
-
showParentSelector: parentBlockType && getBlockEditingMode(firstParentClientId) === 'default' && hasBlockSupport(parentBlockType, '__experimentalParentSelector', true) && selectedBlockClientIds.length === 1 && _isDefaultEditingMode
|
|
96
|
+
showParentSelector: parentBlockType && getBlockEditingMode(firstParentClientId) === 'default' && hasBlockSupport(parentBlockType, '__experimentalParentSelector', true) && selectedBlockClientIds.length === 1 && _isDefaultEditingMode,
|
|
97
|
+
isUsingBindings: _isUsingBindings
|
|
89
98
|
};
|
|
90
99
|
}, []);
|
|
91
100
|
const toolbarWrapperRef = useRef(null);
|
|
@@ -130,7 +139,7 @@ export function PrivateBlockToolbar({
|
|
|
130
139
|
}, createElement("div", {
|
|
131
140
|
ref: toolbarWrapperRef,
|
|
132
141
|
className: innerClasses
|
|
133
|
-
}, !isMultiToolbar && isLargeViewport && isDefaultEditingMode && createElement(BlockParentSelector, null), (shouldShowVisualToolbar || isMultiToolbar) && isDefaultEditingMode && createElement("div", {
|
|
142
|
+
}, !isMultiToolbar && isLargeViewport && isDefaultEditingMode && createElement(BlockParentSelector, null), isUsingBindings && canBindBlock(blockName) && createElement(BlockBindingsIndicator, null), (shouldShowVisualToolbar || isMultiToolbar) && isDefaultEditingMode && createElement("div", {
|
|
134
143
|
ref: nodeRef,
|
|
135
144
|
...showHoveredOrFocusedGestures
|
|
136
145
|
}, createElement(ToolbarGroup, {
|