@wordpress/block-editor 12.19.3 → 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-edit/context.js +2 -1
- package/build/components/block-edit/context.js.map +1 -1
- package/build/components/block-edit/index.js +8 -3
- package/build/components/block-edit/index.js.map +1 -1
- package/build/components/block-inspector/index.js +5 -4
- package/build/components/block-inspector/index.js.map +1 -1
- 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-preview/index.js +4 -0
- package/build/components/block-preview/index.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/global-styles/border-panel.js +21 -8
- package/build/components/global-styles/border-panel.js.map +1 -1
- package/build/components/global-styles/index.js +6 -0
- package/build/components/global-styles/index.js.map +1 -1
- package/build/components/global-styles/shadow-panel-components.js +80 -23
- package/build/components/global-styles/shadow-panel-components.js.map +1 -1
- package/build/components/inspector-controls-tabs/styles-tab.js +1 -1
- package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
- package/build/components/link-control/link-preview.js +4 -1
- package/build/components/link-control/link-preview.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 +46 -26
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/use-enter.js +3 -0
- package/build/components/rich-text/use-enter.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 +34 -8
- package/build/hooks/block-hooks.js.map +1 -1
- package/build/hooks/border.js +6 -4
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/use-bindings-attributes.js +171 -48
- package/build/hooks/use-bindings-attributes.js.map +1 -1
- package/build/private-apis.js +5 -1
- 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/store/private-actions.js +0 -10
- package/build/store/private-actions.js.map +1 -1
- package/build/store/private-selectors.js +0 -8
- package/build/store/private-selectors.js.map +1 -1
- package/build/store/reducer.js +1 -16
- package/build/store/reducer.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-edit/context.js +1 -0
- package/build-module/components/block-edit/context.js.map +1 -1
- package/build-module/components/block-edit/index.js +9 -4
- package/build-module/components/block-edit/index.js.map +1 -1
- package/build-module/components/block-inspector/index.js +6 -5
- package/build-module/components/block-inspector/index.js.map +1 -1
- 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-preview/index.js +4 -0
- package/build-module/components/block-preview/index.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/global-styles/border-panel.js +22 -10
- package/build-module/components/global-styles/border-panel.js.map +1 -1
- package/build-module/components/global-styles/index.js +1 -1
- package/build-module/components/global-styles/index.js.map +1 -1
- package/build-module/components/global-styles/shadow-panel-components.js +82 -24
- package/build-module/components/global-styles/shadow-panel-components.js.map +1 -1
- package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -2
- package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
- package/build-module/components/link-control/link-preview.js +5 -2
- package/build-module/components/link-control/link-preview.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 +47 -28
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/use-enter.js +3 -0
- package/build-module/components/rich-text/use-enter.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 +34 -8
- package/build-module/hooks/block-hooks.js.map +1 -1
- package/build-module/hooks/border.js +7 -5
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/use-bindings-attributes.js +172 -49
- package/build-module/hooks/use-bindings-attributes.js.map +1 -1
- package/build-module/private-apis.js +5 -1
- 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-module/store/private-actions.js +0 -9
- package/build-module/store/private-actions.js.map +1 -1
- package/build-module/store/private-selectors.js +0 -6
- package/build-module/store/private-selectors.js.map +1 -1
- package/build-module/store/reducer.js +1 -16
- package/build-module/store/reducer.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 +70 -14
- package/build-style/style.css +70 -14
- 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-edit/context.js +1 -0
- package/src/components/block-edit/index.js +5 -1
- package/src/components/block-inspector/index.js +7 -5
- 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-preview/index.js +6 -1
- package/src/components/block-settings-menu/block-settings-dropdown.js +12 -9
- package/src/components/block-toolbar/index.js +14 -4
- package/src/components/block-toolbar/style.scss +11 -6
- package/src/components/global-styles/border-panel.js +33 -22
- package/src/components/global-styles/index.js +5 -1
- package/src/components/global-styles/shadow-panel-components.js +92 -23
- package/src/components/global-styles/style.scss +33 -10
- package/src/components/inspector-controls-tabs/styles-tab.js +2 -2
- package/src/components/link-control/link-preview.js +9 -2
- package/src/components/link-control/style.scss +9 -0
- 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 +75 -52
- package/src/components/rich-text/use-enter.js +4 -0
- package/src/components/url-popover/index.js +5 -5
- package/src/components/url-popover/style.scss +1 -0
- 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 +46 -8
- package/src/hooks/block-hooks.scss +6 -0
- package/src/hooks/border.js +16 -4
- package/src/hooks/use-bindings-attributes.js +215 -65
- package/src/private-apis.js +4 -0
- package/src/store/actions.js +54 -14
- package/src/store/private-actions.js +0 -10
- package/src/store/private-selectors.js +0 -8
- package/src/store/reducer.js +0 -15
- package/src/style.scss +1 -0
|
@@ -23,31 +23,40 @@ var _store = require("../store");
|
|
|
23
23
|
const EMPTY_OBJECT = {};
|
|
24
24
|
function BlockHooksControlPure({
|
|
25
25
|
name,
|
|
26
|
-
clientId
|
|
26
|
+
clientId,
|
|
27
|
+
metadata: {
|
|
28
|
+
ignoredHookedBlocks = []
|
|
29
|
+
} = {}
|
|
27
30
|
}) {
|
|
28
31
|
const blockTypes = (0, _data.useSelect)(select => select(_blocks.store).getBlockTypes(), []);
|
|
32
|
+
|
|
33
|
+
// A hooked block added via a filter will not be exposed through a block
|
|
34
|
+
// type's `blockHooks` property; however, if the containing layout has been
|
|
35
|
+
// modified, it will be present in the anchor block's `ignoredHookedBlocks`
|
|
36
|
+
// metadata.
|
|
29
37
|
const hookedBlocksForCurrentBlock = (0, _element.useMemo)(() => blockTypes?.filter(({
|
|
38
|
+
name: blockName,
|
|
30
39
|
blockHooks
|
|
31
|
-
}) => blockHooks && name in blockHooks), [blockTypes, name]);
|
|
40
|
+
}) => blockHooks && name in blockHooks || ignoredHookedBlocks.includes(blockName)), [blockTypes, name, ignoredHookedBlocks]);
|
|
32
41
|
const {
|
|
33
42
|
blockIndex,
|
|
34
43
|
rootClientId,
|
|
35
44
|
innerBlocksLength
|
|
36
45
|
} = (0, _data.useSelect)(select => {
|
|
37
46
|
const {
|
|
38
|
-
|
|
47
|
+
getBlocks,
|
|
39
48
|
getBlockIndex,
|
|
40
49
|
getBlockRootClientId
|
|
41
50
|
} = select(_store.store);
|
|
42
51
|
return {
|
|
43
52
|
blockIndex: getBlockIndex(clientId),
|
|
44
|
-
innerBlocksLength:
|
|
53
|
+
innerBlocksLength: getBlocks(clientId)?.length,
|
|
45
54
|
rootClientId: getBlockRootClientId(clientId)
|
|
46
55
|
};
|
|
47
56
|
}, [clientId]);
|
|
48
57
|
const hookedBlockClientIds = (0, _data.useSelect)(select => {
|
|
49
58
|
const {
|
|
50
|
-
|
|
59
|
+
getBlocks,
|
|
51
60
|
getGlobalBlockCount
|
|
52
61
|
} = select(_store.store);
|
|
53
62
|
const _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce((clientIds, block) => {
|
|
@@ -64,14 +73,20 @@ function BlockHooksControlPure({
|
|
|
64
73
|
// Any of the current block's siblings (with the right block type) qualifies
|
|
65
74
|
// as a hooked block (inserted `before` or `after` the current one), as the block
|
|
66
75
|
// might've been automatically inserted and then moved around a bit by the user.
|
|
67
|
-
candidates =
|
|
76
|
+
candidates = getBlocks(rootClientId);
|
|
68
77
|
break;
|
|
69
78
|
case 'first_child':
|
|
70
79
|
case 'last_child':
|
|
71
80
|
// Any of the current block's child blocks (with the right block type) qualifies
|
|
72
81
|
// as a hooked first or last child block, as the block might've been automatically
|
|
73
82
|
// inserted and then moved around a bit by the user.
|
|
74
|
-
candidates =
|
|
83
|
+
candidates = getBlocks(clientId);
|
|
84
|
+
break;
|
|
85
|
+
case undefined:
|
|
86
|
+
// If we haven't found a blockHooks field with a relative position for the hooked
|
|
87
|
+
// block, it means that it was added by a filter. In this case, we look for the block
|
|
88
|
+
// both among the current block's siblings and its children.
|
|
89
|
+
candidates = [...getBlocks(rootClientId), ...getBlocks(clientId)];
|
|
75
90
|
break;
|
|
76
91
|
}
|
|
77
92
|
const hookedBlock = candidates?.find(candidate => candidate.name === block.name);
|
|
@@ -127,13 +142,23 @@ function BlockHooksControlPure({
|
|
|
127
142
|
// Insert as a child of the current block.
|
|
128
143
|
false);
|
|
129
144
|
break;
|
|
145
|
+
case undefined:
|
|
146
|
+
// If we do not know the relative position, it is because the block was
|
|
147
|
+
// added via a filter. In this case, we default to inserting it after the
|
|
148
|
+
// current block.
|
|
149
|
+
insertBlock(block, blockIndex + 1, rootClientId,
|
|
150
|
+
// Insert as a child of the current block's parent
|
|
151
|
+
false);
|
|
152
|
+
break;
|
|
130
153
|
}
|
|
131
154
|
};
|
|
132
155
|
return (0, _react.createElement)(_components2.InspectorControls, null, (0, _react.createElement)(_components.PanelBody, {
|
|
133
156
|
className: "block-editor-hooks__block-hooks",
|
|
134
157
|
title: (0, _i18n.__)('Plugins'),
|
|
135
158
|
initialOpen: true
|
|
136
|
-
},
|
|
159
|
+
}, (0, _react.createElement)("p", {
|
|
160
|
+
className: "block-editor-hooks__block-hooks-helptext"
|
|
161
|
+
}, (0, _i18n.__)('Manage the inclusion of blocks added automatically by plugins.')), Object.keys(groupedHookedBlocks).map(vendor => {
|
|
137
162
|
return (0, _react.createElement)(_element.Fragment, {
|
|
138
163
|
key: vendor
|
|
139
164
|
}, (0, _react.createElement)("h3", null, vendor), groupedHookedBlocks[vendor].map(block => {
|
|
@@ -163,6 +188,7 @@ function BlockHooksControlPure({
|
|
|
163
188
|
}
|
|
164
189
|
var _default = exports.default = {
|
|
165
190
|
edit: BlockHooksControlPure,
|
|
191
|
+
attributeKeys: ['metadata'],
|
|
166
192
|
hasSupport() {
|
|
167
193
|
return true;
|
|
168
194
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_i18n","require","_element","_components","_blocks","_data","_components2","_store","EMPTY_OBJECT","BlockHooksControlPure","name","clientId","blockTypes","useSelect","select","blocksStore","getBlockTypes","hookedBlocksForCurrentBlock","useMemo","filter","blockHooks","blockIndex","rootClientId","innerBlocksLength","getBlock","getBlockIndex","getBlockRootClientId","blockEditorStore","innerBlocks","length","hookedBlockClientIds","getGlobalBlockCount","_hookedBlockClientIds","reduce","clientIds","block","relativePosition","candidates","hookedBlock","find","candidate","Object","values","insertBlock","removeBlock","useDispatch","groupedHookedBlocks","groups","namespace","split","push","insertBlockIntoDesignatedLocation","_react","createElement","InspectorControls","PanelBody","className","title","__","initialOpen","keys","map","vendor","Fragment","key","checked","ToggleControl","label","__experimentalHStack","justify","BlockIcon","icon","onChange","createBlock","_default","exports","default","edit","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-hooks.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Fragment, useMemo } from '@wordpress/element';\nimport {\n\t__experimentalHStack as HStack,\n\tPanelBody,\n\tToggleControl,\n} from '@wordpress/components';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { BlockIcon, InspectorControls } from '../components';\nimport { store as blockEditorStore } from '../store';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockHooksControlPure( { name, clientId } ) {\n\tconst blockTypes = useSelect(\n\t\t( select ) => select( blocksStore ).getBlockTypes(),\n\t\t[]\n\t);\n\n\tconst hookedBlocksForCurrentBlock = useMemo(\n\t\t() =>\n\t\t\tblockTypes?.filter(\n\t\t\t\t( { blockHooks } ) => blockHooks && name in blockHooks\n\t\t\t),\n\t\t[ blockTypes, name ]\n\t);\n\n\tconst { blockIndex, rootClientId, innerBlocksLength } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getBlockIndex, getBlockRootClientId } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\tinnerBlocksLength: getBlock( clientId )?.innerBlocks?.length,\n\t\t\t\trootClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst hookedBlockClientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getGlobalBlockCount } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce(\n\t\t\t\t( clientIds, block ) => {\n\t\t\t\t\t// If the block doesn't exist anywhere in the block tree,\n\t\t\t\t\t// we know that we have to set the toggle to disabled.\n\t\t\t\t\tif ( getGlobalBlockCount( block.name ) === 0 ) {\n\t\t\t\t\t\treturn clientIds;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relativePosition = block?.blockHooks?.[ name ];\n\t\t\t\t\tlet candidates;\n\n\t\t\t\t\tswitch ( relativePosition ) {\n\t\t\t\t\t\tcase 'before':\n\t\t\t\t\t\tcase 'after':\n\t\t\t\t\t\t\t// Any of the current block's siblings (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked block (inserted `before` or `after` the current one), as the block\n\t\t\t\t\t\t\t// might've been automatically inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlock( rootClientId )?.innerBlocks;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'first_child':\n\t\t\t\t\t\tcase 'last_child':\n\t\t\t\t\t\t\t// Any of the current block's child blocks (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked first or last child block, as the block might've been automatically\n\t\t\t\t\t\t\t// inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlock( clientId ).innerBlocks;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hookedBlock = candidates?.find(\n\t\t\t\t\t\t( candidate ) => candidate.name === block.name\n\t\t\t\t\t);\n\n\t\t\t\t\t// If the block exists in the designated location, we consider it hooked\n\t\t\t\t\t// and show the toggle as enabled.\n\t\t\t\t\tif ( hookedBlock ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...clientIds,\n\t\t\t\t\t\t\t[ block.name ]: hookedBlock.clientId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no hooked block was found in any of its designated locations,\n\t\t\t\t\t// we set the toggle to disabled.\n\t\t\t\t\treturn clientIds;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tif ( Object.values( _hookedBlockClientIds ).length > 0 ) {\n\t\t\t\treturn _hookedBlockClientIds;\n\t\t\t}\n\n\t\t\treturn EMPTY_OBJECT;\n\t\t},\n\t\t[ hookedBlocksForCurrentBlock, name, clientId, rootClientId ]\n\t);\n\n\tconst { insertBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\tif ( ! hookedBlocksForCurrentBlock.length ) {\n\t\treturn null;\n\t}\n\n\t// Group by block namespace (i.e. prefix before the slash).\n\tconst groupedHookedBlocks = hookedBlocksForCurrentBlock.reduce(\n\t\t( groups, block ) => {\n\t\t\tconst [ namespace ] = block.name.split( '/' );\n\t\t\tif ( ! groups[ namespace ] ) {\n\t\t\t\tgroups[ namespace ] = [];\n\t\t\t}\n\t\t\tgroups[ namespace ].push( block );\n\t\t\treturn groups;\n\t\t},\n\t\t{}\n\t);\n\n\tconst insertBlockIntoDesignatedLocation = ( block, relativePosition ) => {\n\t\tswitch ( relativePosition ) {\n\t\t\tcase 'before':\n\t\t\tcase 'after':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\trelativePosition === 'after' ? blockIndex + 1 : blockIndex,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'first_child':\n\t\t\tcase 'last_child':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\t// TODO: It'd be great if insertBlock() would accept negative indices for insertion.\n\t\t\t\t\trelativePosition === 'first_child' ? 0 : innerBlocksLength,\n\t\t\t\t\tclientId, // Insert as a child of the current block.\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody\n\t\t\t\tclassName=\"block-editor-hooks__block-hooks\"\n\t\t\t\ttitle={ __( 'Plugins' ) }\n\t\t\t\tinitialOpen={ true }\n\t\t\t>\n\t\t\t\t{ Object.keys( groupedHookedBlocks ).map( ( vendor ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Fragment key={ vendor }>\n\t\t\t\t\t\t\t<h3>{ vendor }</h3>\n\t\t\t\t\t\t\t{ groupedHookedBlocks[ vendor ].map( ( block ) => {\n\t\t\t\t\t\t\t\tconst checked =\n\t\t\t\t\t\t\t\t\tblock.name in hookedBlockClientIds;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\tchecked={ checked }\n\t\t\t\t\t\t\t\t\t\tkey={ block.title }\n\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t<HStack justify=\"flex-start\">\n\t\t\t\t\t\t\t\t\t\t\t\t<BlockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={ block.icon }\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{ block.title }</span>\n\t\t\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\tif ( ! checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t// Create and insert block.\n\t\t\t\t\t\t\t\t\t\t\t\tconst relativePosition =\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.blockHooks[ name ];\n\t\t\t\t\t\t\t\t\t\t\t\tinsertBlockIntoDesignatedLocation(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock( block.name ),\n\t\t\t\t\t\t\t\t\t\t\t\t\trelativePosition\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Remove block.\n\t\t\t\t\t\t\t\t\t\t\tremoveBlock(\n\t\t\t\t\t\t\t\t\t\t\t\thookedBlockClientIds[\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.name\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</PanelBody>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default {\n\tedit: BlockHooksControlPure,\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_i18n","require","_element","_components","_blocks","_data","_components2","_store","EMPTY_OBJECT","BlockHooksControlPure","name","clientId","metadata","ignoredHookedBlocks","blockTypes","useSelect","select","blocksStore","getBlockTypes","hookedBlocksForCurrentBlock","useMemo","filter","blockName","blockHooks","includes","blockIndex","rootClientId","innerBlocksLength","getBlocks","getBlockIndex","getBlockRootClientId","blockEditorStore","length","hookedBlockClientIds","getGlobalBlockCount","_hookedBlockClientIds","reduce","clientIds","block","relativePosition","candidates","undefined","hookedBlock","find","candidate","Object","values","insertBlock","removeBlock","useDispatch","groupedHookedBlocks","groups","namespace","split","push","insertBlockIntoDesignatedLocation","_react","createElement","InspectorControls","PanelBody","className","title","__","initialOpen","keys","map","vendor","Fragment","key","checked","ToggleControl","label","__experimentalHStack","justify","BlockIcon","icon","onChange","createBlock","_default","exports","default","edit","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-hooks.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Fragment, useMemo } from '@wordpress/element';\nimport {\n\t__experimentalHStack as HStack,\n\tPanelBody,\n\tToggleControl,\n} from '@wordpress/components';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { BlockIcon, InspectorControls } from '../components';\nimport { store as blockEditorStore } from '../store';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockHooksControlPure( {\n\tname,\n\tclientId,\n\tmetadata: { ignoredHookedBlocks = [] } = {},\n} ) {\n\tconst blockTypes = useSelect(\n\t\t( select ) => select( blocksStore ).getBlockTypes(),\n\t\t[]\n\t);\n\n\t// A hooked block added via a filter will not be exposed through a block\n\t// type's `blockHooks` property; however, if the containing layout has been\n\t// modified, it will be present in the anchor block's `ignoredHookedBlocks`\n\t// metadata.\n\tconst hookedBlocksForCurrentBlock = useMemo(\n\t\t() =>\n\t\t\tblockTypes?.filter(\n\t\t\t\t( { name: blockName, blockHooks } ) =>\n\t\t\t\t\t( blockHooks && name in blockHooks ) ||\n\t\t\t\t\tignoredHookedBlocks.includes( blockName )\n\t\t\t),\n\t\t[ blockTypes, name, ignoredHookedBlocks ]\n\t);\n\n\tconst { blockIndex, rootClientId, innerBlocksLength } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getBlockIndex, getBlockRootClientId } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\tinnerBlocksLength: getBlocks( clientId )?.length,\n\t\t\t\trootClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst hookedBlockClientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getGlobalBlockCount } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce(\n\t\t\t\t( clientIds, block ) => {\n\t\t\t\t\t// If the block doesn't exist anywhere in the block tree,\n\t\t\t\t\t// we know that we have to set the toggle to disabled.\n\t\t\t\t\tif ( getGlobalBlockCount( block.name ) === 0 ) {\n\t\t\t\t\t\treturn clientIds;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relativePosition = block?.blockHooks?.[ name ];\n\t\t\t\t\tlet candidates;\n\n\t\t\t\t\tswitch ( relativePosition ) {\n\t\t\t\t\t\tcase 'before':\n\t\t\t\t\t\tcase 'after':\n\t\t\t\t\t\t\t// Any of the current block's siblings (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked block (inserted `before` or `after` the current one), as the block\n\t\t\t\t\t\t\t// might've been automatically inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( rootClientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'first_child':\n\t\t\t\t\t\tcase 'last_child':\n\t\t\t\t\t\t\t// Any of the current block's child blocks (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked first or last child block, as the block might've been automatically\n\t\t\t\t\t\t\t// inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( clientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase undefined:\n\t\t\t\t\t\t\t// If we haven't found a blockHooks field with a relative position for the hooked\n\t\t\t\t\t\t\t// block, it means that it was added by a filter. In this case, we look for the block\n\t\t\t\t\t\t\t// both among the current block's siblings and its children.\n\t\t\t\t\t\t\tcandidates = [\n\t\t\t\t\t\t\t\t...getBlocks( rootClientId ),\n\t\t\t\t\t\t\t\t...getBlocks( clientId ),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hookedBlock = candidates?.find(\n\t\t\t\t\t\t( candidate ) => candidate.name === block.name\n\t\t\t\t\t);\n\n\t\t\t\t\t// If the block exists in the designated location, we consider it hooked\n\t\t\t\t\t// and show the toggle as enabled.\n\t\t\t\t\tif ( hookedBlock ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...clientIds,\n\t\t\t\t\t\t\t[ block.name ]: hookedBlock.clientId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no hooked block was found in any of its designated locations,\n\t\t\t\t\t// we set the toggle to disabled.\n\t\t\t\t\treturn clientIds;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tif ( Object.values( _hookedBlockClientIds ).length > 0 ) {\n\t\t\t\treturn _hookedBlockClientIds;\n\t\t\t}\n\n\t\t\treturn EMPTY_OBJECT;\n\t\t},\n\t\t[ hookedBlocksForCurrentBlock, name, clientId, rootClientId ]\n\t);\n\n\tconst { insertBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\tif ( ! hookedBlocksForCurrentBlock.length ) {\n\t\treturn null;\n\t}\n\n\t// Group by block namespace (i.e. prefix before the slash).\n\tconst groupedHookedBlocks = hookedBlocksForCurrentBlock.reduce(\n\t\t( groups, block ) => {\n\t\t\tconst [ namespace ] = block.name.split( '/' );\n\t\t\tif ( ! groups[ namespace ] ) {\n\t\t\t\tgroups[ namespace ] = [];\n\t\t\t}\n\t\t\tgroups[ namespace ].push( block );\n\t\t\treturn groups;\n\t\t},\n\t\t{}\n\t);\n\n\tconst insertBlockIntoDesignatedLocation = ( block, relativePosition ) => {\n\t\tswitch ( relativePosition ) {\n\t\t\tcase 'before':\n\t\t\tcase 'after':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\trelativePosition === 'after' ? blockIndex + 1 : blockIndex,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'first_child':\n\t\t\tcase 'last_child':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\t// TODO: It'd be great if insertBlock() would accept negative indices for insertion.\n\t\t\t\t\trelativePosition === 'first_child' ? 0 : innerBlocksLength,\n\t\t\t\t\tclientId, // Insert as a child of the current block.\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase undefined:\n\t\t\t\t// If we do not know the relative position, it is because the block was\n\t\t\t\t// added via a filter. In this case, we default to inserting it after the\n\t\t\t\t// current block.\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\tblockIndex + 1,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody\n\t\t\t\tclassName=\"block-editor-hooks__block-hooks\"\n\t\t\t\ttitle={ __( 'Plugins' ) }\n\t\t\t\tinitialOpen={ true }\n\t\t\t>\n\t\t\t\t<p className=\"block-editor-hooks__block-hooks-helptext\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Manage the inclusion of blocks added automatically by plugins.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t{ Object.keys( groupedHookedBlocks ).map( ( vendor ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Fragment key={ vendor }>\n\t\t\t\t\t\t\t<h3>{ vendor }</h3>\n\t\t\t\t\t\t\t{ groupedHookedBlocks[ vendor ].map( ( block ) => {\n\t\t\t\t\t\t\t\tconst checked =\n\t\t\t\t\t\t\t\t\tblock.name in hookedBlockClientIds;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\tchecked={ checked }\n\t\t\t\t\t\t\t\t\t\tkey={ block.title }\n\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t<HStack justify=\"flex-start\">\n\t\t\t\t\t\t\t\t\t\t\t\t<BlockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={ block.icon }\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{ block.title }</span>\n\t\t\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\tif ( ! checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t// Create and insert block.\n\t\t\t\t\t\t\t\t\t\t\t\tconst relativePosition =\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.blockHooks[ name ];\n\t\t\t\t\t\t\t\t\t\t\t\tinsertBlockIntoDesignatedLocation(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock( block.name ),\n\t\t\t\t\t\t\t\t\t\t\t\t\trelativePosition\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Remove block.\n\t\t\t\t\t\t\t\t\t\t\tremoveBlock(\n\t\t\t\t\t\t\t\t\t\t\t\thookedBlockClientIds[\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.name\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</PanelBody>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default {\n\tedit: BlockHooksControlPure,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n"],"mappings":"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"}
|
package/build/hooks/border.js
CHANGED
|
@@ -8,11 +8,11 @@ exports.BORDER_SUPPORT_KEY = void 0;
|
|
|
8
8
|
exports.BorderPanel = BorderPanel;
|
|
9
9
|
exports.default = exports.SHADOW_SUPPORT_KEY = void 0;
|
|
10
10
|
exports.getBorderClasses = getBorderClasses;
|
|
11
|
-
exports.getBorderPanelLabel = getBorderPanelLabel;
|
|
12
11
|
exports.getMultiOriginColor = void 0;
|
|
13
12
|
exports.hasBorderSupport = hasBorderSupport;
|
|
14
13
|
exports.hasShadowSupport = hasShadowSupport;
|
|
15
14
|
exports.removeBorderAttribute = removeBorderAttribute;
|
|
15
|
+
exports.useBorderPanelLabel = useBorderPanelLabel;
|
|
16
16
|
var _react = require("react");
|
|
17
17
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
18
18
|
var _blocks = require("@wordpress/blocks");
|
|
@@ -217,14 +217,16 @@ function hasBorderSupport(blockName, feature = 'any') {
|
|
|
217
217
|
function hasShadowSupport(blockName) {
|
|
218
218
|
return (0, _blocks.hasBlockSupport)(blockName, SHADOW_SUPPORT_KEY);
|
|
219
219
|
}
|
|
220
|
-
function
|
|
220
|
+
function useBorderPanelLabel({
|
|
221
221
|
blockName,
|
|
222
222
|
hasBorderControl,
|
|
223
223
|
hasShadowControl
|
|
224
224
|
} = {}) {
|
|
225
|
+
const settings = (0, _utils.useBlockSettings)(blockName);
|
|
226
|
+
const controls = (0, _globalStyles.useHasBorderPanelControls)(settings);
|
|
225
227
|
if (!hasBorderControl && !hasShadowControl && blockName) {
|
|
226
|
-
hasBorderControl =
|
|
227
|
-
hasShadowControl =
|
|
228
|
+
hasBorderControl = controls?.hasBorderColor || controls?.hasBorderStyle || controls?.hasBorderWidth || controls?.hasBorderRadius;
|
|
229
|
+
hasShadowControl = controls?.hasShadow;
|
|
228
230
|
}
|
|
229
231
|
if (hasBorderControl && hasShadowControl) {
|
|
230
232
|
return (0, _i18n.__)('Border & Shadow');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_classnames","_interopRequireDefault","require","_blocks","_components","_element","_hooks","_data","_colors","_inspectorControls","_useMultipleOriginColorsAndGradients","_utils","_globalStyles","_store","_i18n","BORDER_SUPPORT_KEY","exports","SHADOW_SUPPORT_KEY","getColorByProperty","colors","property","value","matchedColor","some","origin","color","getMultiOriginColor","namedColor","customColor","colorObject","undefined","getColorSlugFromVariable","exec","styleToAttributes","style","hasSplitBorders","border","borderColor","borderColorValue","borderColorSlug","startsWith","substring","length","updatedStyle","cleanEmptyObject","attributesToStyle","attributes","BordersInspectorControl","label","children","resetAllFilter","attributesResetAllFilter","useCallback","existingStyle","_react","createElement","default","group","BorderPanel","clientId","name","setAttributes","settings","isEnabled","useHasBorderPanel","selector","select","blockEditorStore","getBlockAttributes","useSelect","useMemo","onChange","newStyle","defaultControls","getBlockSupport","as","panelId","hasBorderSupport","blockName","feature","Platform","OS","support","radius","width","hasShadowSupport","hasBlockSupport","getBorderPanelLabel","hasBorderControl","hasShadowControl","__","removeBorderAttribute","attribute","addAttributes","type","addSaveProps","props","blockNameOrType","shouldSkipSerialization","borderClasses","getBorderClasses","newClassName","classnames","className","borderColorClass","getColorClassName","useBlockProps","useMultipleOriginColorsAndGradients","borderTopColor","top","borderRightColor","right","borderBottomColor","bottom","borderLeftColor","left","extraStyles","_default","attributeKeys","hasSupport","addFilter"],"sources":["@wordpress/block-editor/src/hooks/border.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, getBlockSupport } from '@wordpress/blocks';\nimport { __experimentalHasSplitBorders as hasSplitBorders } from '@wordpress/components';\nimport { Platform, useCallback, useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { getColorClassName } from '../components/colors';\nimport InspectorControls from '../components/inspector-controls';\nimport useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';\nimport { cleanEmptyObject, shouldSkipSerialization } from './utils';\nimport {\n\tuseHasBorderPanel,\n\tBorderPanel as StylesBorderPanel,\n} from '../components/global-styles';\nimport { store as blockEditorStore } from '../store';\nimport { __ } from '@wordpress/i18n';\n\nexport const BORDER_SUPPORT_KEY = '__experimentalBorder';\nexport const SHADOW_SUPPORT_KEY = 'shadow';\n\nconst getColorByProperty = ( colors, property, value ) => {\n\tlet matchedColor;\n\n\tcolors.some( ( origin ) =>\n\t\torigin.colors.some( ( color ) => {\n\t\t\tif ( color[ property ] === value ) {\n\t\t\t\tmatchedColor = color;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t} )\n\t);\n\n\treturn matchedColor;\n};\n\nexport const getMultiOriginColor = ( { colors, namedColor, customColor } ) => {\n\t// Search each origin (default, theme, or user) for matching color by name.\n\tif ( namedColor ) {\n\t\tconst colorObject = getColorByProperty( colors, 'slug', namedColor );\n\t\tif ( colorObject ) {\n\t\t\treturn colorObject;\n\t\t}\n\t}\n\n\t// Skip if no custom color or matching named color.\n\tif ( ! customColor ) {\n\t\treturn { color: undefined };\n\t}\n\n\t// Attempt to find color via custom color value or build new object.\n\tconst colorObject = getColorByProperty( colors, 'color', customColor );\n\treturn colorObject ? colorObject : { color: customColor };\n};\n\nfunction getColorSlugFromVariable( value ) {\n\tconst namedColor = /var:preset\\|color\\|(.+)/.exec( value );\n\tif ( namedColor && namedColor[ 1 ] ) {\n\t\treturn namedColor[ 1 ];\n\t}\n\treturn null;\n}\n\nfunction styleToAttributes( style ) {\n\tif ( hasSplitBorders( style?.border ) ) {\n\t\treturn {\n\t\t\tstyle,\n\t\t\tborderColor: undefined,\n\t\t};\n\t}\n\n\tconst borderColorValue = style?.border?.color;\n\tconst borderColorSlug = borderColorValue?.startsWith( 'var:preset|color|' )\n\t\t? borderColorValue.substring( 'var:preset|color|'.length )\n\t\t: undefined;\n\tconst updatedStyle = { ...style };\n\tupdatedStyle.border = {\n\t\t...updatedStyle.border,\n\t\tcolor: borderColorSlug ? undefined : borderColorValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tborderColor: borderColorSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\tif ( hasSplitBorders( attributes.style?.border ) ) {\n\t\treturn attributes.style;\n\t}\n\treturn {\n\t\t...attributes.style,\n\t\tborder: {\n\t\t\t...attributes.style?.border,\n\t\t\tcolor: attributes.borderColor\n\t\t\t\t? 'var:preset|color|' + attributes.borderColor\n\t\t\t\t: attributes.style?.border?.color,\n\t\t},\n\t};\n}\n\nfunction BordersInspectorControl( { label, children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"border\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t\tlabel={ label }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function BorderPanel( { clientId, name, setAttributes, settings } ) {\n\tconst isEnabled = useHasBorderPanel( settings );\n\tfunction selector( select ) {\n\t\tconst { style, borderColor } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, borderColor };\n\t}\n\tconst { style, borderColor } = useSelect( selector, [ clientId ] );\n\tconst value = useMemo( () => {\n\t\treturn attributesToStyle( { style, borderColor } );\n\t}, [ style, borderColor ] );\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = {\n\t\t...getBlockSupport( name, [\n\t\t\tBORDER_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t\t...getBlockSupport( name, [\n\t\t\tSHADOW_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t};\n\n\treturn (\n\t\t<StylesBorderPanel\n\t\t\tas={ BordersInspectorControl }\n\t\t\tpanelId={ clientId }\n\t\t\tsettings={ settings }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tdefaultControls={ defaultControls }\n\t\t/>\n\t);\n}\n\n/**\n * Determine whether there is block support for border properties.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Border feature to check support for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBorderSupport( blockName, feature = 'any' ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst support = getBlockSupport( blockName, BORDER_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! (\n\t\t\tsupport?.color ||\n\t\t\tsupport?.radius ||\n\t\t\tsupport?.width ||\n\t\t\tsupport?.style\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\n/**\n * Determine whether there is block support for shadow properties.\n *\n * @param {string} blockName Block name.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasShadowSupport( blockName ) {\n\treturn hasBlockSupport( blockName, SHADOW_SUPPORT_KEY );\n}\n\nexport function getBorderPanelLabel( {\n\tblockName,\n\thasBorderControl,\n\thasShadowControl,\n} = {} ) {\n\tif ( ! hasBorderControl && ! hasShadowControl && blockName ) {\n\t\thasBorderControl = hasBorderSupport( blockName );\n\t\thasShadowControl = hasShadowSupport( blockName );\n\t}\n\n\tif ( hasBorderControl && hasShadowControl ) {\n\t\treturn __( 'Border & Shadow' );\n\t}\n\n\tif ( hasShadowControl ) {\n\t\treturn __( 'Shadow' );\n\t}\n\n\treturn __( 'Border' );\n}\n\n/**\n * Returns a new style object where the specified border attribute has been\n * removed.\n *\n * @param {Object} style Styles from block attributes.\n * @param {string} attribute The border style attribute to clear.\n *\n * @return {Object} Style object with the specified attribute removed.\n */\nexport function removeBorderAttribute( style, attribute ) {\n\treturn cleanEmptyObject( {\n\t\t...style,\n\t\tborder: {\n\t\t\t...style?.border,\n\t\t\t[ attribute ]: undefined,\n\t\t},\n\t} );\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * `borderColor` if needed.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Updated block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBorderSupport( settings, 'color' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify default value if needed.\n\tif ( settings.attributes.borderColor ) {\n\t\treturn settings;\n\t}\n\n\t// Add new borderColor attribute to block settings.\n\treturn {\n\t\t...settings,\n\t\tattributes: {\n\t\t\t...settings.attributes,\n\t\t\tborderColor: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * Override props assigned to save component to inject border color.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type definition.\n * @param {Object} attributes Block's attributes.\n *\n * @return {Object} Filtered props to apply to save element.\n */\nfunction addSaveProps( props, blockNameOrType, attributes ) {\n\tif (\n\t\t! hasBorderSupport( blockNameOrType, 'color' ) ||\n\t\tshouldSkipSerialization( blockNameOrType, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn props;\n\t}\n\n\tconst borderClasses = getBorderClasses( attributes );\n\tconst newClassName = classnames( props.className, borderClasses );\n\n\t// If we are clearing the last of the previous classes in `className`\n\t// set it to `undefined` to avoid rendering empty DOM attributes.\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\n/**\n * Generates a CSS class name consisting of all the applicable border color\n * classes given the current block attributes.\n *\n * @param {Object} attributes Block's attributes.\n *\n * @return {string} CSS class name.\n */\nexport function getBorderClasses( attributes ) {\n\tconst { borderColor, style } = attributes;\n\tconst borderColorClass = getColorClassName( 'border-color', borderColor );\n\n\treturn classnames( {\n\t\t'has-border-color': borderColor || style?.border?.color,\n\t\t[ borderColorClass ]: !! borderColorClass,\n\t} );\n}\n\nfunction useBlockProps( { name, borderColor, style } ) {\n\tconst { colors } = useMultipleOriginColorsAndGradients();\n\n\tif (\n\t\t! hasBorderSupport( name, 'color' ) ||\n\t\tshouldSkipSerialization( name, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn {};\n\t}\n\n\tconst { color: borderColorValue } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: borderColor,\n\t} );\n\tconst { color: borderTopColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.top?.color ),\n\t} );\n\tconst { color: borderRightColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.right?.color ),\n\t} );\n\n\tconst { color: borderBottomColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.bottom?.color ),\n\t} );\n\tconst { color: borderLeftColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.left?.color ),\n\t} );\n\n\tconst extraStyles = {\n\t\tborderTopColor: borderTopColor || borderColorValue,\n\t\tborderRightColor: borderRightColor || borderColorValue,\n\t\tborderBottomColor: borderBottomColor || borderColorValue,\n\t\tborderLeftColor: borderLeftColor || borderColorValue,\n\t};\n\n\treturn addSaveProps(\n\t\t{ style: cleanEmptyObject( extraStyles ) || {} },\n\t\tname,\n\t\t{ borderColor, style }\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'borderColor', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBorderSupport( name, 'color' );\n\t},\n};\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/border/addAttributes',\n\taddAttributes\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_classnames","_interopRequireDefault","require","_blocks","_components","_element","_hooks","_data","_colors","_inspectorControls","_useMultipleOriginColorsAndGradients","_utils","_globalStyles","_store","_i18n","BORDER_SUPPORT_KEY","exports","SHADOW_SUPPORT_KEY","getColorByProperty","colors","property","value","matchedColor","some","origin","color","getMultiOriginColor","namedColor","customColor","colorObject","undefined","getColorSlugFromVariable","exec","styleToAttributes","style","hasSplitBorders","border","borderColor","borderColorValue","borderColorSlug","startsWith","substring","length","updatedStyle","cleanEmptyObject","attributesToStyle","attributes","BordersInspectorControl","label","children","resetAllFilter","attributesResetAllFilter","useCallback","existingStyle","_react","createElement","default","group","BorderPanel","clientId","name","setAttributes","settings","isEnabled","useHasBorderPanel","selector","select","blockEditorStore","getBlockAttributes","useSelect","useMemo","onChange","newStyle","defaultControls","getBlockSupport","as","panelId","hasBorderSupport","blockName","feature","Platform","OS","support","radius","width","hasShadowSupport","hasBlockSupport","useBorderPanelLabel","hasBorderControl","hasShadowControl","useBlockSettings","controls","useHasBorderPanelControls","hasBorderColor","hasBorderStyle","hasBorderWidth","hasBorderRadius","hasShadow","__","removeBorderAttribute","attribute","addAttributes","type","addSaveProps","props","blockNameOrType","shouldSkipSerialization","borderClasses","getBorderClasses","newClassName","classnames","className","borderColorClass","getColorClassName","useBlockProps","useMultipleOriginColorsAndGradients","borderTopColor","top","borderRightColor","right","borderBottomColor","bottom","borderLeftColor","left","extraStyles","_default","attributeKeys","hasSupport","addFilter"],"sources":["@wordpress/block-editor/src/hooks/border.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, getBlockSupport } from '@wordpress/blocks';\nimport { __experimentalHasSplitBorders as hasSplitBorders } from '@wordpress/components';\nimport { Platform, useCallback, useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { getColorClassName } from '../components/colors';\nimport InspectorControls from '../components/inspector-controls';\nimport useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';\nimport {\n\tcleanEmptyObject,\n\tshouldSkipSerialization,\n\tuseBlockSettings,\n} from './utils';\nimport {\n\tuseHasBorderPanel,\n\tuseHasBorderPanelControls,\n\tBorderPanel as StylesBorderPanel,\n} from '../components/global-styles';\nimport { store as blockEditorStore } from '../store';\nimport { __ } from '@wordpress/i18n';\n\nexport const BORDER_SUPPORT_KEY = '__experimentalBorder';\nexport const SHADOW_SUPPORT_KEY = 'shadow';\n\nconst getColorByProperty = ( colors, property, value ) => {\n\tlet matchedColor;\n\n\tcolors.some( ( origin ) =>\n\t\torigin.colors.some( ( color ) => {\n\t\t\tif ( color[ property ] === value ) {\n\t\t\t\tmatchedColor = color;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t} )\n\t);\n\n\treturn matchedColor;\n};\n\nexport const getMultiOriginColor = ( { colors, namedColor, customColor } ) => {\n\t// Search each origin (default, theme, or user) for matching color by name.\n\tif ( namedColor ) {\n\t\tconst colorObject = getColorByProperty( colors, 'slug', namedColor );\n\t\tif ( colorObject ) {\n\t\t\treturn colorObject;\n\t\t}\n\t}\n\n\t// Skip if no custom color or matching named color.\n\tif ( ! customColor ) {\n\t\treturn { color: undefined };\n\t}\n\n\t// Attempt to find color via custom color value or build new object.\n\tconst colorObject = getColorByProperty( colors, 'color', customColor );\n\treturn colorObject ? colorObject : { color: customColor };\n};\n\nfunction getColorSlugFromVariable( value ) {\n\tconst namedColor = /var:preset\\|color\\|(.+)/.exec( value );\n\tif ( namedColor && namedColor[ 1 ] ) {\n\t\treturn namedColor[ 1 ];\n\t}\n\treturn null;\n}\n\nfunction styleToAttributes( style ) {\n\tif ( hasSplitBorders( style?.border ) ) {\n\t\treturn {\n\t\t\tstyle,\n\t\t\tborderColor: undefined,\n\t\t};\n\t}\n\n\tconst borderColorValue = style?.border?.color;\n\tconst borderColorSlug = borderColorValue?.startsWith( 'var:preset|color|' )\n\t\t? borderColorValue.substring( 'var:preset|color|'.length )\n\t\t: undefined;\n\tconst updatedStyle = { ...style };\n\tupdatedStyle.border = {\n\t\t...updatedStyle.border,\n\t\tcolor: borderColorSlug ? undefined : borderColorValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tborderColor: borderColorSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\tif ( hasSplitBorders( attributes.style?.border ) ) {\n\t\treturn attributes.style;\n\t}\n\treturn {\n\t\t...attributes.style,\n\t\tborder: {\n\t\t\t...attributes.style?.border,\n\t\t\tcolor: attributes.borderColor\n\t\t\t\t? 'var:preset|color|' + attributes.borderColor\n\t\t\t\t: attributes.style?.border?.color,\n\t\t},\n\t};\n}\n\nfunction BordersInspectorControl( { label, children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"border\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t\tlabel={ label }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function BorderPanel( { clientId, name, setAttributes, settings } ) {\n\tconst isEnabled = useHasBorderPanel( settings );\n\tfunction selector( select ) {\n\t\tconst { style, borderColor } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, borderColor };\n\t}\n\tconst { style, borderColor } = useSelect( selector, [ clientId ] );\n\tconst value = useMemo( () => {\n\t\treturn attributesToStyle( { style, borderColor } );\n\t}, [ style, borderColor ] );\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = {\n\t\t...getBlockSupport( name, [\n\t\t\tBORDER_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t\t...getBlockSupport( name, [\n\t\t\tSHADOW_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t};\n\n\treturn (\n\t\t<StylesBorderPanel\n\t\t\tas={ BordersInspectorControl }\n\t\t\tpanelId={ clientId }\n\t\t\tsettings={ settings }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tdefaultControls={ defaultControls }\n\t\t/>\n\t);\n}\n\n/**\n * Determine whether there is block support for border properties.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Border feature to check support for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBorderSupport( blockName, feature = 'any' ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst support = getBlockSupport( blockName, BORDER_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! (\n\t\t\tsupport?.color ||\n\t\t\tsupport?.radius ||\n\t\t\tsupport?.width ||\n\t\t\tsupport?.style\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\n/**\n * Determine whether there is block support for shadow properties.\n *\n * @param {string} blockName Block name.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasShadowSupport( blockName ) {\n\treturn hasBlockSupport( blockName, SHADOW_SUPPORT_KEY );\n}\n\nexport function useBorderPanelLabel( {\n\tblockName,\n\thasBorderControl,\n\thasShadowControl,\n} = {} ) {\n\tconst settings = useBlockSettings( blockName );\n\tconst controls = useHasBorderPanelControls( settings );\n\n\tif ( ! hasBorderControl && ! hasShadowControl && blockName ) {\n\t\thasBorderControl =\n\t\t\tcontrols?.hasBorderColor ||\n\t\t\tcontrols?.hasBorderStyle ||\n\t\t\tcontrols?.hasBorderWidth ||\n\t\t\tcontrols?.hasBorderRadius;\n\t\thasShadowControl = controls?.hasShadow;\n\t}\n\n\tif ( hasBorderControl && hasShadowControl ) {\n\t\treturn __( 'Border & Shadow' );\n\t}\n\n\tif ( hasShadowControl ) {\n\t\treturn __( 'Shadow' );\n\t}\n\n\treturn __( 'Border' );\n}\n\n/**\n * Returns a new style object where the specified border attribute has been\n * removed.\n *\n * @param {Object} style Styles from block attributes.\n * @param {string} attribute The border style attribute to clear.\n *\n * @return {Object} Style object with the specified attribute removed.\n */\nexport function removeBorderAttribute( style, attribute ) {\n\treturn cleanEmptyObject( {\n\t\t...style,\n\t\tborder: {\n\t\t\t...style?.border,\n\t\t\t[ attribute ]: undefined,\n\t\t},\n\t} );\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * `borderColor` if needed.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Updated block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBorderSupport( settings, 'color' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify default value if needed.\n\tif ( settings.attributes.borderColor ) {\n\t\treturn settings;\n\t}\n\n\t// Add new borderColor attribute to block settings.\n\treturn {\n\t\t...settings,\n\t\tattributes: {\n\t\t\t...settings.attributes,\n\t\t\tborderColor: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * Override props assigned to save component to inject border color.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type definition.\n * @param {Object} attributes Block's attributes.\n *\n * @return {Object} Filtered props to apply to save element.\n */\nfunction addSaveProps( props, blockNameOrType, attributes ) {\n\tif (\n\t\t! hasBorderSupport( blockNameOrType, 'color' ) ||\n\t\tshouldSkipSerialization( blockNameOrType, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn props;\n\t}\n\n\tconst borderClasses = getBorderClasses( attributes );\n\tconst newClassName = classnames( props.className, borderClasses );\n\n\t// If we are clearing the last of the previous classes in `className`\n\t// set it to `undefined` to avoid rendering empty DOM attributes.\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\n/**\n * Generates a CSS class name consisting of all the applicable border color\n * classes given the current block attributes.\n *\n * @param {Object} attributes Block's attributes.\n *\n * @return {string} CSS class name.\n */\nexport function getBorderClasses( attributes ) {\n\tconst { borderColor, style } = attributes;\n\tconst borderColorClass = getColorClassName( 'border-color', borderColor );\n\n\treturn classnames( {\n\t\t'has-border-color': borderColor || style?.border?.color,\n\t\t[ borderColorClass ]: !! borderColorClass,\n\t} );\n}\n\nfunction useBlockProps( { name, borderColor, style } ) {\n\tconst { colors } = useMultipleOriginColorsAndGradients();\n\n\tif (\n\t\t! hasBorderSupport( name, 'color' ) ||\n\t\tshouldSkipSerialization( name, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn {};\n\t}\n\n\tconst { color: borderColorValue } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: borderColor,\n\t} );\n\tconst { color: borderTopColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.top?.color ),\n\t} );\n\tconst { color: borderRightColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.right?.color ),\n\t} );\n\n\tconst { color: borderBottomColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.bottom?.color ),\n\t} );\n\tconst { color: borderLeftColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.left?.color ),\n\t} );\n\n\tconst extraStyles = {\n\t\tborderTopColor: borderTopColor || borderColorValue,\n\t\tborderRightColor: borderRightColor || borderColorValue,\n\t\tborderBottomColor: borderBottomColor || borderColorValue,\n\t\tborderLeftColor: borderLeftColor || borderColorValue,\n\t};\n\n\treturn addSaveProps(\n\t\t{ style: cleanEmptyObject( extraStyles ) || {} },\n\t\tname,\n\t\t{ borderColor, style }\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'borderColor', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBorderSupport( name, 'color' );\n\t},\n};\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/border/addAttributes',\n\taddAttributes\n);\n"],"mappings":"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"}
|
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.canBindAttribute = canBindAttribute;
|
|
7
|
+
exports.canBindBlock = canBindBlock;
|
|
7
8
|
var _react = require("react");
|
|
8
9
|
var _blocks = require("@wordpress/blocks");
|
|
9
10
|
var _compose = require("@wordpress/compose");
|
|
10
11
|
var _data = require("@wordpress/data");
|
|
12
|
+
var _element = require("@wordpress/element");
|
|
11
13
|
var _hooks = require("@wordpress/hooks");
|
|
12
|
-
var
|
|
13
|
-
var _context = require("../components/block-edit/context");
|
|
14
|
+
var _richText = require("@wordpress/rich-text");
|
|
14
15
|
var _lockUnlock = require("../lock-unlock");
|
|
15
16
|
/**
|
|
16
17
|
* WordPress dependencies
|
|
@@ -30,70 +31,192 @@ var _lockUnlock = require("../lock-unlock");
|
|
|
30
31
|
* @return {WPHigherOrderComponent} Higher-order component.
|
|
31
32
|
*/
|
|
32
33
|
|
|
33
|
-
const BLOCK_BINDINGS_ALLOWED_BLOCKS =
|
|
34
|
+
const BLOCK_BINDINGS_ALLOWED_BLOCKS = {
|
|
34
35
|
'core/paragraph': ['content'],
|
|
35
36
|
'core/heading': ['content'],
|
|
36
37
|
'core/image': ['url', 'title', 'alt'],
|
|
37
38
|
'core/button': ['url', 'text', 'linkTarget']
|
|
38
39
|
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Based on the given block name,
|
|
43
|
+
* check if it is possible to bind the block.
|
|
44
|
+
*
|
|
45
|
+
* @param {string} blockName - The block name.
|
|
46
|
+
* @return {boolean} Whether it is possible to bind the block to sources.
|
|
47
|
+
*/
|
|
48
|
+
function canBindBlock(blockName) {
|
|
49
|
+
return blockName in BLOCK_BINDINGS_ALLOWED_BLOCKS;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Based on the given block name and attribute name,
|
|
54
|
+
* check if it is possible to bind the block attribute.
|
|
55
|
+
*
|
|
56
|
+
* @param {string} blockName - The block name.
|
|
57
|
+
* @param {string} attributeName - The attribute name.
|
|
58
|
+
* @return {boolean} Whether it is possible to bind the block attribute.
|
|
59
|
+
*/
|
|
60
|
+
function canBindAttribute(blockName, attributeName) {
|
|
61
|
+
return canBindBlock(blockName) && BLOCK_BINDINGS_ALLOWED_BLOCKS[blockName].includes(attributeName);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* This component is responsible for detecting and
|
|
66
|
+
* propagating data changes from the source to the block.
|
|
67
|
+
*
|
|
68
|
+
* @param {Object} props - The component props.
|
|
69
|
+
* @param {string} props.attrName - The attribute name.
|
|
70
|
+
* @param {Object} props.blockProps - The block props with bound attribute.
|
|
71
|
+
* @param {Object} props.source - Source handler.
|
|
72
|
+
* @param {Object} props.args - The arguments to pass to the source.
|
|
73
|
+
* @param {Function} props.onPropValueChange - The function to call when the attribute value changes.
|
|
74
|
+
* @return {null} Data-handling component. Render nothing.
|
|
75
|
+
*/
|
|
76
|
+
const BindingConnector = ({
|
|
77
|
+
args,
|
|
78
|
+
attrName,
|
|
79
|
+
blockProps,
|
|
80
|
+
source,
|
|
81
|
+
onPropValueChange
|
|
82
|
+
}) => {
|
|
44
83
|
const {
|
|
45
|
-
|
|
46
|
-
|
|
84
|
+
placeholder,
|
|
85
|
+
value: propValue
|
|
86
|
+
} = source.useSource(blockProps, args);
|
|
47
87
|
const {
|
|
48
|
-
|
|
49
|
-
} =
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if (htmlAttribute === 'src' || htmlAttribute === 'href') {
|
|
65
|
-
updatedAttributes[attributeName] = null;
|
|
66
|
-
} else {
|
|
67
|
-
updatedAttributes[attributeName] = placeholder;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (metaValue) {
|
|
71
|
-
updatedAttributes[attributeName] = metaValue;
|
|
72
|
-
}
|
|
88
|
+
name: blockName
|
|
89
|
+
} = blockProps;
|
|
90
|
+
const attrValue = blockProps.attributes[attrName];
|
|
91
|
+
const updateBoundAttibute = (0, _element.useCallback)((newAttrValue, prevAttrValue) => {
|
|
92
|
+
/*
|
|
93
|
+
* If the attribute is a RichTextData instance,
|
|
94
|
+
* (core/paragraph, core/heading, core/button, etc.)
|
|
95
|
+
* compare its HTML representation with the new value.
|
|
96
|
+
*
|
|
97
|
+
* To do: it looks like a workaround.
|
|
98
|
+
* Consider improving the attribute and metadata fields types.
|
|
99
|
+
*/
|
|
100
|
+
if (prevAttrValue instanceof _richText.RichTextData) {
|
|
101
|
+
// Bail early if the Rich Text value is the same.
|
|
102
|
+
if (prevAttrValue.toHTMLString() === newAttrValue) {
|
|
103
|
+
return;
|
|
73
104
|
}
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* To preserve the value type,
|
|
108
|
+
* convert the new value to a RichTextData instance.
|
|
109
|
+
*/
|
|
110
|
+
newAttrValue = _richText.RichTextData.fromHTMLString(newAttrValue);
|
|
111
|
+
}
|
|
112
|
+
if (prevAttrValue === newAttrValue) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
onPropValueChange({
|
|
116
|
+
[attrName]: newAttrValue
|
|
74
117
|
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
118
|
+
}, [attrName, onPropValueChange]);
|
|
119
|
+
(0, _element.useLayoutEffect)(() => {
|
|
120
|
+
if (typeof propValue !== 'undefined') {
|
|
121
|
+
updateBoundAttibute(propValue, attrValue);
|
|
122
|
+
} else if (placeholder) {
|
|
123
|
+
/*
|
|
124
|
+
* Placeholder fallback.
|
|
125
|
+
* If the attribute is `src` or `href`,
|
|
126
|
+
* a placeholder can't be used because it is not a valid url.
|
|
127
|
+
* Adding this workaround until
|
|
128
|
+
* attributes and metadata fields types are improved and include `url`.
|
|
129
|
+
*/
|
|
130
|
+
const htmlAttribute = (0, _blocks.getBlockType)(blockName).attributes[attrName].attribute;
|
|
131
|
+
if (htmlAttribute === 'src' || htmlAttribute === 'href') {
|
|
132
|
+
updateBoundAttibute(null);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
updateBoundAttibute(placeholder);
|
|
136
|
+
}
|
|
137
|
+
}, [updateBoundAttibute, propValue, attrValue, placeholder, blockName, attrName]);
|
|
138
|
+
return null;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* BlockBindingBridge acts like a component wrapper
|
|
143
|
+
* that connects the bound attributes of a block
|
|
144
|
+
* to the source handlers.
|
|
145
|
+
* For this, it creates a BindingConnector for each bound attribute.
|
|
146
|
+
*
|
|
147
|
+
* @param {Object} props - The component props.
|
|
148
|
+
* @param {Object} props.blockProps - The BlockEdit props object.
|
|
149
|
+
* @param {Object} props.bindings - The block bindings settings.
|
|
150
|
+
* @param {Function} props.onPropValueChange - The function to call when the attribute value changes.
|
|
151
|
+
* @return {null} Data-handling component. Render nothing.
|
|
152
|
+
*/
|
|
153
|
+
function BlockBindingBridge({
|
|
154
|
+
blockProps,
|
|
155
|
+
bindings,
|
|
156
|
+
onPropValueChange
|
|
157
|
+
}) {
|
|
158
|
+
const blockBindingsSources = (0, _lockUnlock.unlock)((0, _data.useSelect)(_blocks.store)).getAllBlockBindingsSources();
|
|
159
|
+
return (0, _react.createElement)(_react.Fragment, null, Object.entries(bindings).map(([attrName, boundAttribute]) => {
|
|
160
|
+
// Bail early if the block doesn't have a valid source handler.
|
|
161
|
+
const source = blockBindingsSources[boundAttribute.source];
|
|
162
|
+
if (!source?.useSource) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
return (0, _react.createElement)(BindingConnector, {
|
|
166
|
+
key: attrName,
|
|
167
|
+
attrName: attrName,
|
|
168
|
+
source: source,
|
|
169
|
+
blockProps: blockProps,
|
|
170
|
+
args: boundAttribute.args,
|
|
171
|
+
onPropValueChange: onPropValueChange
|
|
172
|
+
});
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
const withBlockBindingSupport = (0, _compose.createHigherOrderComponent)(BlockEdit => props => {
|
|
176
|
+
/*
|
|
177
|
+
* Collect and update the bound attributes
|
|
178
|
+
* in a separate state.
|
|
179
|
+
*/
|
|
180
|
+
const [boundAttributes, setBoundAttributes] = (0, _element.useState)({});
|
|
181
|
+
const updateBoundAttributes = (0, _element.useCallback)(newAttributes => setBoundAttributes(prev => ({
|
|
182
|
+
...prev,
|
|
183
|
+
...newAttributes
|
|
184
|
+
})), []);
|
|
185
|
+
|
|
186
|
+
/*
|
|
187
|
+
* Create binding object filtering
|
|
188
|
+
* only the attributes that can be bound.
|
|
189
|
+
*/
|
|
190
|
+
const bindings = Object.fromEntries(Object.entries(props.attributes.metadata?.bindings || {}).filter(([attrName]) => canBindAttribute(props.name, attrName)));
|
|
191
|
+
return (0, _react.createElement)(_react.Fragment, null, Object.keys(bindings).length > 0 && (0, _react.createElement)(BlockBindingBridge, {
|
|
192
|
+
blockProps: props,
|
|
193
|
+
bindings: bindings,
|
|
194
|
+
onPropValueChange: updateBoundAttributes
|
|
195
|
+
}), (0, _react.createElement)(BlockEdit, {
|
|
78
196
|
...props,
|
|
79
|
-
attributes:
|
|
80
|
-
|
|
81
|
-
|
|
197
|
+
attributes: {
|
|
198
|
+
...props.attributes,
|
|
199
|
+
...boundAttributes
|
|
200
|
+
}
|
|
201
|
+
}));
|
|
202
|
+
}, 'withBlockBindingSupport');
|
|
82
203
|
|
|
83
204
|
/**
|
|
84
205
|
* Filters a registered block's settings to enhance a block's `edit` component
|
|
85
206
|
* to upgrade bound attributes.
|
|
86
207
|
*
|
|
87
|
-
* @param {WPBlockSettings} settings Registered block settings.
|
|
88
|
-
*
|
|
208
|
+
* @param {WPBlockSettings} settings - Registered block settings.
|
|
209
|
+
* @param {string} name - Block name.
|
|
89
210
|
* @return {WPBlockSettings} Filtered block settings.
|
|
90
211
|
*/
|
|
91
|
-
function shimAttributeSource(settings) {
|
|
92
|
-
if (!(
|
|
212
|
+
function shimAttributeSource(settings, name) {
|
|
213
|
+
if (!canBindBlock(name)) {
|
|
93
214
|
return settings;
|
|
94
215
|
}
|
|
95
|
-
|
|
96
|
-
|
|
216
|
+
return {
|
|
217
|
+
...settings,
|
|
218
|
+
edit: withBlockBindingSupport(settings.edit)
|
|
219
|
+
};
|
|
97
220
|
}
|
|
98
221
|
(0, _hooks.addFilter)('blocks.registerBlockType', 'core/editor/custom-sources-backwards-compatibility/shim-attribute-source', shimAttributeSource);
|
|
99
222
|
//# sourceMappingURL=use-bindings-attributes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_blocks","require","_compose","_data","_hooks","_store","_context","_lockUnlock","BLOCK_BINDINGS_ALLOWED_BLOCKS","exports","createEditFunctionWithBindingsAttribute","createHigherOrderComponent","BlockEdit","props","clientId","name","blockName","useBlockEditContext","getBlockBindingsSource","unlock","useSelect","blockEditorStore","getBlockAttributes","updatedAttributes","metadata","bindings","Object","entries","forEach","attributeName","settings","source","useSource","placeholder","useValue","metaValue","args","htmlAttribute","getBlockType","attributes","attribute","_react","createElement","key","shimAttributeSource","edit","addFilter"],"sources":["@wordpress/block-editor/src/hooks/use-bindings-attributes.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { addFilter } from '@wordpress/hooks';\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { useBlockEditContext } from '../components/block-edit/context';\nimport { unlock } from '../lock-unlock';\n\n/** @typedef {import('@wordpress/compose').WPHigherOrderComponent} WPHigherOrderComponent */\n/** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */\n\n/**\n * Given a binding of block attributes, returns a higher order component that\n * overrides its `attributes` and `setAttributes` props to sync any changes needed.\n *\n * @return {WPHigherOrderComponent} Higher-order component.\n */\n\nexport const BLOCK_BINDINGS_ALLOWED_BLOCKS = {\n\t'core/paragraph': [ 'content' ],\n\t'core/heading': [ 'content' ],\n\t'core/image': [ 'url', 'title', 'alt' ],\n\t'core/button': [ 'url', 'text', 'linkTarget' ],\n};\n\nconst createEditFunctionWithBindingsAttribute = () =>\n\tcreateHigherOrderComponent(\n\t\t( BlockEdit ) => ( props ) => {\n\t\t\tconst { clientId, name: blockName } = useBlockEditContext();\n\t\t\tconst { getBlockBindingsSource } = unlock(\n\t\t\t\tuseSelect( blockEditorStore )\n\t\t\t);\n\t\t\tconst { getBlockAttributes } = useSelect( blockEditorStore );\n\n\t\t\tconst updatedAttributes = getBlockAttributes( clientId );\n\t\t\tif ( updatedAttributes?.metadata?.bindings ) {\n\t\t\t\tObject.entries( updatedAttributes.metadata.bindings ).forEach(\n\t\t\t\t\t( [ attributeName, settings ] ) => {\n\t\t\t\t\t\tconst source = getBlockBindingsSource(\n\t\t\t\t\t\t\tsettings.source\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( source && source.useSource ) {\n\t\t\t\t\t\t\t// Second argument (`updateMetaValue`) will be used to update the value in the future.\n\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\tplaceholder,\n\t\t\t\t\t\t\t\tuseValue: [ metaValue = null ] = [],\n\t\t\t\t\t\t\t} = source.useSource( props, settings.args );\n\n\t\t\t\t\t\t\tif ( placeholder && ! metaValue ) {\n\t\t\t\t\t\t\t\t// If the attribute is `src` or `href`, a placeholder can't be used because it is not a valid url.\n\t\t\t\t\t\t\t\t// Adding this workaround until attributes and metadata fields types are improved and include `url`.\n\t\t\t\t\t\t\t\tconst htmlAttribute =\n\t\t\t\t\t\t\t\t\tgetBlockType( blockName ).attributes[\n\t\t\t\t\t\t\t\t\t\tattributeName\n\t\t\t\t\t\t\t\t\t].attribute;\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\thtmlAttribute === 'src' ||\n\t\t\t\t\t\t\t\t\thtmlAttribute === 'href'\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tupdatedAttributes[ attributeName ] = null;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tupdatedAttributes[ attributeName ] =\n\t\t\t\t\t\t\t\t\t\tplaceholder;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( metaValue ) {\n\t\t\t\t\t\t\t\tupdatedAttributes[ attributeName ] = metaValue;\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);\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<BlockEdit\n\t\t\t\t\tkey=\"edit\"\n\t\t\t\t\t{ ...props }\n\t\t\t\t\tattributes={ updatedAttributes }\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t\t'useBoundAttributes'\n\t);\n\n/**\n * Filters a registered block's settings to enhance a block's `edit` component\n * to upgrade bound attributes.\n *\n * @param {WPBlockSettings} settings Registered block settings.\n *\n * @return {WPBlockSettings} Filtered block settings.\n */\nfunction shimAttributeSource( settings ) {\n\tif ( ! ( settings.name in BLOCK_BINDINGS_ALLOWED_BLOCKS ) ) {\n\t\treturn settings;\n\t}\n\tsettings.edit = createEditFunctionWithBindingsAttribute()( settings.edit );\n\n\treturn settings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-sources-backwards-compatibility/shim-attribute-source',\n\tshimAttributeSource\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_blocks","require","_compose","_data","_element","_hooks","_richText","_lockUnlock","BLOCK_BINDINGS_ALLOWED_BLOCKS","canBindBlock","blockName","canBindAttribute","attributeName","includes","BindingConnector","args","attrName","blockProps","source","onPropValueChange","placeholder","value","propValue","useSource","name","attrValue","attributes","updateBoundAttibute","useCallback","newAttrValue","prevAttrValue","RichTextData","toHTMLString","fromHTMLString","useLayoutEffect","htmlAttribute","getBlockType","attribute","BlockBindingBridge","bindings","blockBindingsSources","unlock","useSelect","blocksStore","getAllBlockBindingsSources","_react","createElement","Fragment","Object","entries","map","boundAttribute","key","withBlockBindingSupport","createHigherOrderComponent","BlockEdit","props","boundAttributes","setBoundAttributes","useState","updateBoundAttributes","newAttributes","prev","fromEntries","metadata","filter","keys","length","shimAttributeSource","settings","edit","addFilter"],"sources":["@wordpress/block-editor/src/hooks/use-bindings-attributes.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useLayoutEffect, useCallback, useState } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport { RichTextData } from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\n\n/** @typedef {import('@wordpress/compose').WPHigherOrderComponent} WPHigherOrderComponent */\n/** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */\n\n/**\n * Given a binding of block attributes, returns a higher order component that\n * overrides its `attributes` and `setAttributes` props to sync any changes needed.\n *\n * @return {WPHigherOrderComponent} Higher-order component.\n */\n\nconst BLOCK_BINDINGS_ALLOWED_BLOCKS = {\n\t'core/paragraph': [ 'content' ],\n\t'core/heading': [ 'content' ],\n\t'core/image': [ 'url', 'title', 'alt' ],\n\t'core/button': [ 'url', 'text', 'linkTarget' ],\n};\n\n/**\n * Based on the given block name,\n * check if it is possible to bind the block.\n *\n * @param {string} blockName - The block name.\n * @return {boolean} Whether it is possible to bind the block to sources.\n */\nexport function canBindBlock( blockName ) {\n\treturn blockName in BLOCK_BINDINGS_ALLOWED_BLOCKS;\n}\n\n/**\n * Based on the given block name and attribute name,\n * check if it is possible to bind the block attribute.\n *\n * @param {string} blockName - The block name.\n * @param {string} attributeName - The attribute name.\n * @return {boolean} Whether it is possible to bind the block attribute.\n */\nexport function canBindAttribute( blockName, attributeName ) {\n\treturn (\n\t\tcanBindBlock( blockName ) &&\n\t\tBLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ].includes( attributeName )\n\t);\n}\n\n/**\n * This component is responsible for detecting and\n * propagating data changes from the source to the block.\n *\n * @param {Object} props - The component props.\n * @param {string} props.attrName - The attribute name.\n * @param {Object} props.blockProps - The block props with bound attribute.\n * @param {Object} props.source - Source handler.\n * @param {Object} props.args - The arguments to pass to the source.\n * @param {Function} props.onPropValueChange - The function to call when the attribute value changes.\n * @return {null} Data-handling component. Render nothing.\n */\nconst BindingConnector = ( {\n\targs,\n\tattrName,\n\tblockProps,\n\tsource,\n\tonPropValueChange,\n} ) => {\n\tconst { placeholder, value: propValue } = source.useSource(\n\t\tblockProps,\n\t\targs\n\t);\n\n\tconst { name: blockName } = blockProps;\n\tconst attrValue = blockProps.attributes[ attrName ];\n\n\tconst updateBoundAttibute = useCallback(\n\t\t( newAttrValue, prevAttrValue ) => {\n\t\t\t/*\n\t\t\t * If the attribute is a RichTextData instance,\n\t\t\t * (core/paragraph, core/heading, core/button, etc.)\n\t\t\t * compare its HTML representation with the new value.\n\t\t\t *\n\t\t\t * To do: it looks like a workaround.\n\t\t\t * Consider improving the attribute and metadata fields types.\n\t\t\t */\n\t\t\tif ( prevAttrValue instanceof RichTextData ) {\n\t\t\t\t// Bail early if the Rich Text value is the same.\n\t\t\t\tif ( prevAttrValue.toHTMLString() === newAttrValue ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * To preserve the value type,\n\t\t\t\t * convert the new value to a RichTextData instance.\n\t\t\t\t */\n\t\t\t\tnewAttrValue = RichTextData.fromHTMLString( newAttrValue );\n\t\t\t}\n\n\t\t\tif ( prevAttrValue === newAttrValue ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonPropValueChange( { [ attrName ]: newAttrValue } );\n\t\t},\n\t\t[ attrName, onPropValueChange ]\n\t);\n\n\tuseLayoutEffect( () => {\n\t\tif ( typeof propValue !== 'undefined' ) {\n\t\t\tupdateBoundAttibute( propValue, attrValue );\n\t\t} else if ( placeholder ) {\n\t\t\t/*\n\t\t\t * Placeholder fallback.\n\t\t\t * If the attribute is `src` or `href`,\n\t\t\t * a placeholder can't be used because it is not a valid url.\n\t\t\t * Adding this workaround until\n\t\t\t * attributes and metadata fields types are improved and include `url`.\n\t\t\t */\n\t\t\tconst htmlAttribute =\n\t\t\t\tgetBlockType( blockName ).attributes[ attrName ].attribute;\n\n\t\t\tif ( htmlAttribute === 'src' || htmlAttribute === 'href' ) {\n\t\t\t\tupdateBoundAttibute( null );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdateBoundAttibute( placeholder );\n\t\t}\n\t}, [\n\t\tupdateBoundAttibute,\n\t\tpropValue,\n\t\tattrValue,\n\t\tplaceholder,\n\t\tblockName,\n\t\tattrName,\n\t] );\n\n\treturn null;\n};\n\n/**\n * BlockBindingBridge acts like a component wrapper\n * that connects the bound attributes of a block\n * to the source handlers.\n * For this, it creates a BindingConnector for each bound attribute.\n *\n * @param {Object} props - The component props.\n * @param {Object} props.blockProps - The BlockEdit props object.\n * @param {Object} props.bindings - The block bindings settings.\n * @param {Function} props.onPropValueChange - The function to call when the attribute value changes.\n * @return {null} Data-handling component. Render nothing.\n */\nfunction BlockBindingBridge( { blockProps, bindings, onPropValueChange } ) {\n\tconst blockBindingsSources = unlock(\n\t\tuseSelect( blocksStore )\n\t).getAllBlockBindingsSources();\n\n\treturn (\n\t\t<>\n\t\t\t{ Object.entries( bindings ).map(\n\t\t\t\t( [ attrName, boundAttribute ] ) => {\n\t\t\t\t\t// Bail early if the block doesn't have a valid source handler.\n\t\t\t\t\tconst source =\n\t\t\t\t\t\tblockBindingsSources[ boundAttribute.source ];\n\t\t\t\t\tif ( ! source?.useSource ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<BindingConnector\n\t\t\t\t\t\t\tkey={ attrName }\n\t\t\t\t\t\t\tattrName={ attrName }\n\t\t\t\t\t\t\tsource={ source }\n\t\t\t\t\t\t\tblockProps={ blockProps }\n\t\t\t\t\t\t\targs={ boundAttribute.args }\n\t\t\t\t\t\t\tonPropValueChange={ onPropValueChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nconst withBlockBindingSupport = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\t/*\n\t\t * Collect and update the bound attributes\n\t\t * in a separate state.\n\t\t */\n\t\tconst [ boundAttributes, setBoundAttributes ] = useState( {} );\n\t\tconst updateBoundAttributes = useCallback(\n\t\t\t( newAttributes ) =>\n\t\t\t\tsetBoundAttributes( ( prev ) => ( {\n\t\t\t\t\t...prev,\n\t\t\t\t\t...newAttributes,\n\t\t\t\t} ) ),\n\t\t\t[]\n\t\t);\n\n\t\t/*\n\t\t * Create binding object filtering\n\t\t * only the attributes that can be bound.\n\t\t */\n\t\tconst bindings = Object.fromEntries(\n\t\t\tObject.entries( props.attributes.metadata?.bindings || {} ).filter(\n\t\t\t\t( [ attrName ] ) => canBindAttribute( props.name, attrName )\n\t\t\t)\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ Object.keys( bindings ).length > 0 && (\n\t\t\t\t\t<BlockBindingBridge\n\t\t\t\t\t\tblockProps={ props }\n\t\t\t\t\t\tbindings={ bindings }\n\t\t\t\t\t\tonPropValueChange={ updateBoundAttributes }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t<BlockEdit\n\t\t\t\t\t{ ...props }\n\t\t\t\t\tattributes={ { ...props.attributes, ...boundAttributes } }\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t},\n\t'withBlockBindingSupport'\n);\n\n/**\n * Filters a registered block's settings to enhance a block's `edit` component\n * to upgrade bound attributes.\n *\n * @param {WPBlockSettings} settings - Registered block settings.\n * @param {string} name - Block name.\n * @return {WPBlockSettings} Filtered block settings.\n */\nfunction shimAttributeSource( settings, name ) {\n\tif ( ! canBindBlock( name ) ) {\n\t\treturn settings;\n\t}\n\n\treturn {\n\t\t...settings,\n\t\tedit: withBlockBindingSupport( settings.edit ),\n\t};\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-sources-backwards-compatibility/shim-attribute-source',\n\tshimAttributeSource\n);\n"],"mappings":"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"}
|