@wordpress/block-editor 13.0.0 → 13.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/block-actions/index.js +4 -6
- package/build/components/block-actions/index.js.map +1 -1
- package/build/components/block-draggable/index.js +1 -1
- package/build/components/block-draggable/index.js.map +1 -1
- package/build/components/block-list/block.js +2 -2
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/block.native.js +2 -2
- package/build/components/block-list/block.native.js.map +1 -1
- package/build/components/block-list/use-in-between-inserter.js +3 -1
- package/build/components/block-list/use-in-between-inserter.js.map +1 -1
- package/build/components/block-lock/use-block-lock.js +2 -4
- package/build/components/block-lock/use-block-lock.js.map +1 -1
- package/build/components/block-mover/index.js +1 -1
- package/build/components/block-mover/index.js.map +1 -1
- package/build/components/block-mover/index.native.js +1 -1
- package/build/components/block-mover/index.native.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-switcher/block-variation-transformations.js +1 -3
- package/build/components/block-switcher/block-variation-transformations.js.map +1 -1
- package/build/components/block-switcher/index.js +13 -6
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-toolbar/index.js +6 -10
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/block-tools/block-selection-button.js +2 -2
- package/build/components/block-tools/block-selection-button.js.map +1 -1
- package/build/components/button-block-appender/index.js +4 -1
- package/build/components/button-block-appender/index.js.map +1 -1
- package/build/components/global-styles/background-panel.js +3 -3
- package/build/components/global-styles/background-panel.js.map +1 -1
- package/build/components/global-styles/hooks.js +2 -2
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +14 -1
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/inserter/block-types-tab.js +3 -3
- package/build/components/inserter/block-types-tab.js.map +1 -1
- package/build/components/inserter/hooks/use-block-types-state.js +3 -2
- package/build/components/inserter/hooks/use-block-types-state.js.map +1 -1
- package/build/components/link-control/link-preview.js +1 -0
- package/build/components/link-control/link-preview.js.map +1 -1
- package/build/components/link-control/search-input.js +1 -1
- package/build/components/link-control/search-input.js.map +1 -1
- package/build/components/list-view/block.js +7 -6
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/branch.js +3 -1
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/use-clipboard-handler.js +1 -1
- package/build/components/list-view/use-clipboard-handler.js.map +1 -1
- package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js +9 -12
- package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
- package/build/components/use-block-commands/index.js +3 -3
- package/build/components/use-block-commands/index.js.map +1 -1
- package/build/components/writing-flow/use-clipboard-handler.js +22 -3
- package/build/components/writing-flow/use-clipboard-handler.js.map +1 -1
- package/build/hooks/block-bindings.js +19 -16
- package/build/hooks/block-bindings.js.map +1 -1
- package/build/hooks/block-style-variation.js +22 -4
- package/build/hooks/block-style-variation.js.map +1 -1
- package/build/hooks/use-bindings-attributes.js +7 -2
- package/build/hooks/use-bindings-attributes.js.map +1 -1
- package/build/hooks/utils.js +3 -2
- package/build/hooks/utils.js.map +1 -1
- package/build/lock-unlock.js +1 -1
- package/build/lock-unlock.js.map +1 -1
- package/build/private-apis.js +3 -1
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +21 -5
- package/build/store/actions.js.map +1 -1
- package/build/store/private-actions.js +1 -2
- package/build/store/private-actions.js.map +1 -1
- package/build/store/selectors.js +19 -20
- package/build/store/selectors.js.map +1 -1
- package/build-module/components/block-actions/index.js +4 -6
- package/build-module/components/block-actions/index.js.map +1 -1
- package/build-module/components/block-draggable/index.js +1 -1
- package/build-module/components/block-draggable/index.js.map +1 -1
- package/build-module/components/block-list/block.js +2 -2
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/block.native.js +2 -2
- package/build-module/components/block-list/block.native.js.map +1 -1
- package/build-module/components/block-list/use-in-between-inserter.js +3 -1
- package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
- package/build-module/components/block-lock/use-block-lock.js +2 -4
- package/build-module/components/block-lock/use-block-lock.js.map +1 -1
- package/build-module/components/block-mover/index.js +1 -1
- package/build-module/components/block-mover/index.js.map +1 -1
- package/build-module/components/block-mover/index.native.js +1 -1
- package/build-module/components/block-mover/index.native.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-switcher/block-variation-transformations.js +1 -3
- package/build-module/components/block-switcher/block-variation-transformations.js.map +1 -1
- package/build-module/components/block-switcher/index.js +15 -8
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-toolbar/index.js +7 -10
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/block-tools/block-selection-button.js +2 -2
- package/build-module/components/block-tools/block-selection-button.js.map +1 -1
- package/build-module/components/button-block-appender/index.js +4 -1
- package/build-module/components/button-block-appender/index.js.map +1 -1
- package/build-module/components/global-styles/background-panel.js +4 -4
- package/build-module/components/global-styles/background-panel.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +2 -2
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +14 -1
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/inserter/block-types-tab.js +3 -3
- package/build-module/components/inserter/block-types-tab.js.map +1 -1
- package/build-module/components/inserter/hooks/use-block-types-state.js +4 -3
- package/build-module/components/inserter/hooks/use-block-types-state.js.map +1 -1
- package/build-module/components/link-control/link-preview.js +1 -0
- package/build-module/components/link-control/link-preview.js.map +1 -1
- package/build-module/components/link-control/search-input.js +1 -1
- package/build-module/components/link-control/search-input.js.map +1 -1
- package/build-module/components/list-view/block.js +7 -6
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/branch.js +3 -1
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/use-clipboard-handler.js +1 -1
- package/build-module/components/list-view/use-clipboard-handler.js.map +1 -1
- package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js +9 -12
- package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
- package/build-module/components/use-block-commands/index.js +3 -3
- package/build-module/components/use-block-commands/index.js.map +1 -1
- package/build-module/components/writing-flow/use-clipboard-handler.js +23 -4
- package/build-module/components/writing-flow/use-clipboard-handler.js.map +1 -1
- package/build-module/hooks/block-bindings.js +20 -17
- package/build-module/hooks/block-bindings.js.map +1 -1
- package/build-module/hooks/block-style-variation.js +21 -4
- package/build-module/hooks/block-style-variation.js.map +1 -1
- package/build-module/hooks/use-bindings-attributes.js +7 -2
- package/build-module/hooks/use-bindings-attributes.js.map +1 -1
- package/build-module/hooks/utils.js +3 -2
- package/build-module/hooks/utils.js.map +1 -1
- package/build-module/lock-unlock.js +1 -1
- package/build-module/lock-unlock.js.map +1 -1
- package/build-module/private-apis.js +3 -1
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +21 -5
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/private-actions.js +1 -2
- package/build-module/store/private-actions.js.map +1 -1
- package/build-module/store/selectors.js +19 -20
- package/build-module/store/selectors.js.map +1 -1
- package/build-style/content-rtl.css +1 -1
- package/build-style/content.css +1 -1
- package/build-style/style-rtl.css +14 -19
- package/build-style/style.css +14 -19
- package/package.json +31 -31
- package/src/components/block-actions/index.js +3 -7
- package/src/components/block-canvas/style.scss +2 -2
- package/src/components/block-draggable/index.js +1 -1
- package/src/components/block-list/block.js +2 -2
- package/src/components/block-list/block.native.js +2 -2
- package/src/components/block-list/use-in-between-inserter.js +3 -1
- package/src/components/block-lock/use-block-lock.js +2 -4
- package/src/components/block-mover/index.js +1 -1
- package/src/components/block-mover/index.native.js +1 -1
- package/src/components/block-settings-menu/block-settings-dropdown.js +1 -1
- package/src/components/block-switcher/block-variation-transformations.js +4 -9
- package/src/components/block-switcher/index.js +27 -12
- package/src/components/block-switcher/style.scss +5 -0
- package/src/components/block-toolbar/index.js +7 -9
- package/src/components/block-toolbar/style.scss +9 -6
- package/src/components/block-tools/block-selection-button.js +2 -2
- package/src/components/block-variation-picker/content.scss +1 -1
- package/src/components/button-block-appender/index.js +2 -0
- package/src/components/global-styles/background-panel.js +13 -4
- package/src/components/global-styles/hooks.js +2 -4
- package/src/components/global-styles/use-global-styles-output.js +24 -4
- package/src/components/inserter/block-types-tab.js +0 -1
- package/src/components/inserter/hooks/use-block-types-state.js +10 -5
- package/src/components/inserter/style.scss +4 -0
- package/src/components/link-control/link-preview.js +1 -0
- package/src/components/link-control/search-input.js +1 -1
- package/src/components/list-view/block.js +7 -7
- package/src/components/list-view/branch.js +5 -1
- package/src/components/list-view/use-clipboard-handler.js +1 -6
- package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +7 -4
- package/src/components/use-block-commands/index.js +3 -4
- package/src/components/writing-flow/use-clipboard-handler.js +29 -7
- package/src/hooks/block-bindings.js +28 -22
- package/src/hooks/block-style-variation.js +21 -4
- package/src/hooks/use-bindings-attributes.js +11 -1
- package/src/hooks/utils.js +3 -1
- package/src/lock-unlock.js +1 -1
- package/src/private-apis.js +2 -0
- package/src/store/actions.js +25 -11
- package/src/store/private-actions.js +1 -5
- package/src/store/selectors.js +22 -27
- package/src/style.scss +0 -1
- package/build/components/block-bindings-toolbar-indicator/index.js +0 -106
- package/build/components/block-bindings-toolbar-indicator/index.js.map +0 -1
- package/build-module/components/block-bindings-toolbar-indicator/index.js +0 -99
- package/build-module/components/block-bindings-toolbar-indicator/index.js.map +0 -1
- package/src/components/block-bindings-toolbar-indicator/index.js +0 -135
- package/src/components/block-bindings-toolbar-indicator/style.scss +0 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__","sprintf","hasBlockSupport","store","blocksStore","switchToBlockType","isTemplatePart","useSelect","useDispatch","useCommandLoader","copy","trash","remove","plus","add","group","ungroup","moveTo","move","BlockIcon","blockEditorStore","jsx","_jsx","useTransformCommands","replaceBlocks","multiSelect","blocks","clientIds","canRemove","possibleBlockTransformations","invalidSelection","select","getBlockRootClientId","getBlockTransformItems","getSelectedBlockClientIds","getBlocksByClientId","canRemoveBlocks","selectedBlockClientIds","selectedBlocks","filter","block","length","rootClientId","isLoading","commands","isTemplate","selectForMultipleBlocks","insertedBlocks","clientId","onBlockTransform","name","newBlocks","hasPossibleBlockTransformations","map","transformation","title","icon","replace","label","callback","close","useActionsCommands","canMoveBlocks","getBlockCount","setBlockMovingClientId","setNavigationMode","selectBlock","canMove","push","command","useQuickActionsCommands","isUngroupable","isGroupable","_isUngroupable","_isGroupable","canInsertBlockType","getDefaultBlockName","getGroupingBlockName","removeBlocks","duplicateBlocks","insertAfterBlock","insertBeforeBlock","onGroup","groupingBlockName","onUngroup","innerBlocks","canInsertDefaultBlock","canDuplicate","every","Array","isArray","useBlockCommands","hook","context"],"sources":["@wordpress/block-editor/src/components/use-block-commands/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\thasBlockSupport,\n\tstore as blocksStore,\n\tswitchToBlockType,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useCommandLoader } from '@wordpress/commands';\nimport {\n\tcopy,\n\ttrash as remove,\n\tplus as add,\n\tgroup,\n\tungroup,\n\tmoveTo as move,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\n\nexport const useTransformCommands = () => {\n\tconst { replaceBlocks, multiSelect } = useDispatch( blockEditorStore );\n\tconst {\n\t\tblocks,\n\t\tclientIds,\n\t\tcanRemove,\n\t\tpossibleBlockTransformations,\n\t\tinvalidSelection,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockTransformItems,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tgetBlocksByClientId,\n\t\t\tcanRemoveBlocks,\n\t\t} = select( blockEditorStore );\n\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst selectedBlocks = getBlocksByClientId( selectedBlockClientIds );\n\n\t\t// selectedBlocks can have `null`s when something tries to call `selectBlock` with an inexistent clientId.\n\t\t// These nulls will cause fatal errors down the line.\n\t\t// In order to prevent discrepancies between selectedBlockClientIds and selectedBlocks, we effectively treat the entire selection as invalid.\n\t\t// @see https://github.com/WordPress/gutenberg/pull/59410#issuecomment-2006304536\n\t\tif ( selectedBlocks.filter( ( block ) => ! block ).length > 0 ) {\n\t\t\treturn {\n\t\t\t\tinvalidSelection: true,\n\t\t\t};\n\t\t}\n\n\t\tconst rootClientId = getBlockRootClientId(\n\t\t\tselectedBlockClientIds[ 0 ]\n\t\t);\n\t\treturn {\n\t\t\tblocks: selectedBlocks,\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t\tpossibleBlockTransformations: getBlockTransformItems(\n\t\t\t\tselectedBlocks,\n\t\t\t\trootClientId\n\t\t\t),\n\t\t\tcanRemove: canRemoveBlocks( selectedBlockClientIds, rootClientId ),\n\t\t\tinvalidSelection: false,\n\t\t};\n\t}, [] );\n\n\tif ( invalidSelection ) {\n\t\treturn {\n\t\t\tisLoading: false,\n\t\t\tcommands: [],\n\t\t};\n\t}\n\tconst isTemplate = blocks.length === 1 && isTemplatePart( blocks[ 0 ] );\n\n\tfunction selectForMultipleBlocks( insertedBlocks ) {\n\t\tif ( insertedBlocks.length > 1 ) {\n\t\t\tmultiSelect(\n\t\t\t\tinsertedBlocks[ 0 ].clientId,\n\t\t\t\tinsertedBlocks[ insertedBlocks.length - 1 ].clientId\n\t\t\t);\n\t\t}\n\t}\n\n\t// Simple block tranformation based on the `Block Transforms` API.\n\tfunction onBlockTransform( name ) {\n\t\tconst newBlocks = switchToBlockType( blocks, name );\n\t\treplaceBlocks( clientIds, newBlocks );\n\t\tselectForMultipleBlocks( newBlocks );\n\t}\n\n\t/**\n\t * The `isTemplate` check is a stopgap solution here.\n\t * Ideally, the Transforms API should handle this\n\t * by allowing to exclude blocks from wildcard transformations.\n\t */\n\tconst hasPossibleBlockTransformations =\n\t\t!! possibleBlockTransformations.length && canRemove && ! isTemplate;\n\n\tif (\n\t\t! clientIds ||\n\t\tclientIds.length < 1 ||\n\t\t! hasPossibleBlockTransformations\n\t) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst commands = possibleBlockTransformations.map( ( transformation ) => {\n\t\tconst { name, title, icon } = transformation;\n\t\treturn {\n\t\t\tname: 'core/block-editor/transform-to-' + name.replace( '/', '-' ),\n\t\t\t// translators: %s: block title/name.\n\t\t\tlabel: sprintf( __( 'Transform to %s' ), title ),\n\t\t\ticon: <BlockIcon icon={ icon } />,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tonBlockTransform( name );\n\t\t\t\tclose();\n\t\t\t},\n\t\t};\n\t} );\n\n\treturn { isLoading: false, commands };\n};\n\nconst useActionsCommands = () => {\n\tconst { clientIds } = useSelect( ( select ) => {\n\t\tconst { getSelectedBlockClientIds } = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\treturn {\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t};\n\t}, [] );\n\n\tconst { getBlockRootClientId, canMoveBlocks, getBlockCount } =\n\t\tuseSelect( blockEditorStore );\n\n\tconst { setBlockMovingClientId, setNavigationMode, selectBlock } =\n\t\tuseDispatch( blockEditorStore );\n\n\tif ( ! clientIds || clientIds.length < 1 ) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\n\tconst canMove =\n\t\tcanMoveBlocks( clientIds, rootClientId ) &&\n\t\tgetBlockCount( rootClientId ) !== 1;\n\n\tconst commands = [];\n\n\tif ( canMove ) {\n\t\tcommands.push( {\n\t\t\tname: 'move-to',\n\t\t\tlabel: __( 'Move to' ),\n\t\t\tcallback: () => {\n\t\t\t\tsetNavigationMode( true );\n\t\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\t\tsetBlockMovingClientId( clientIds[ 0 ] );\n\t\t\t},\n\t\t\ticon: move,\n\t\t} );\n\t}\n\n\treturn {\n\t\tisLoading: false,\n\t\tcommands: commands.map( ( command ) => ( {\n\t\t\t...command,\n\t\t\tname: 'core/block-editor/action-' + command.name,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tcommand.callback();\n\t\t\t\tclose();\n\t\t\t},\n\t\t} ) ),\n\t};\n};\n\nconst useQuickActionsCommands = () => {\n\tconst { clientIds, isUngroupable, isGroupable } = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tisUngroupable: _isUngroupable,\n\t\t\tisGroupable: _isGroupable,\n\t\t} = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\treturn {\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t\tisUngroupable: _isUngroupable(),\n\t\t\tisGroupable: _isGroupable(),\n\t\t};\n\t}, [] );\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockRootClientId,\n\t\tgetBlocksByClientId,\n\t\tcanRemoveBlocks,\n\t} = useSelect( blockEditorStore );\n\tconst { getDefaultBlockName, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\n\tconst blocks = getBlocksByClientId( clientIds );\n\n\tconst {\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tduplicateBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t} = useDispatch( blockEditorStore );\n\n\tconst onGroup = () => {\n\t\tif ( ! blocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst groupingBlockName = getGroupingBlockName();\n\n\t\t// Activate the `transform` on `core/group` which does the conversion.\n\t\tconst newBlocks = switchToBlockType( blocks, groupingBlockName );\n\n\t\tif ( ! newBlocks ) {\n\t\t\treturn;\n\t\t}\n\t\treplaceBlocks( clientIds, newBlocks );\n\t};\n\tconst onUngroup = () => {\n\t\tif ( ! blocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst innerBlocks = blocks[ 0 ].innerBlocks;\n\n\t\tif ( ! innerBlocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\treplaceBlocks( clientIds, innerBlocks );\n\t};\n\n\tif ( ! clientIds || clientIds.length < 1 ) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\tconst canInsertDefaultBlock = canInsertBlockType(\n\t\tgetDefaultBlockName(),\n\t\trootClientId\n\t);\n\tconst canDuplicate = blocks.every( ( block ) => {\n\t\treturn (\n\t\t\t!! block &&\n\t\t\thasBlockSupport( block.name, 'multiple', true ) &&\n\t\t\tcanInsertBlockType( block.name, rootClientId )\n\t\t);\n\t} );\n\tconst canRemove = canRemoveBlocks( clientIds, rootClientId );\n\n\tconst commands = [];\n\n\tif ( canDuplicate ) {\n\t\tcommands.push( {\n\t\t\tname: 'duplicate',\n\t\t\tlabel: __( 'Duplicate' ),\n\t\t\tcallback: () => duplicateBlocks( clientIds, true ),\n\t\t\ticon: copy,\n\t\t} );\n\t}\n\n\tif ( canInsertDefaultBlock ) {\n\t\tcommands.push(\n\t\t\t{\n\t\t\t\tname: 'add-before',\n\t\t\t\tlabel: __( 'Add before' ),\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst clientId = Array.isArray( clientIds )\n\t\t\t\t\t\t? clientIds[ 0 ]\n\t\t\t\t\t\t: clientId;\n\t\t\t\t\tinsertBeforeBlock( clientId );\n\t\t\t\t},\n\t\t\t\ticon: add,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'add-after',\n\t\t\t\tlabel: __( 'Add after' ),\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst clientId = Array.isArray( clientIds )\n\t\t\t\t\t\t? clientIds[ clientIds.length - 1 ]\n\t\t\t\t\t\t: clientId;\n\t\t\t\t\tinsertAfterBlock( clientId );\n\t\t\t\t},\n\t\t\t\ticon: add,\n\t\t\t}\n\t\t);\n\t}\n\n\tif ( isGroupable ) {\n\t\tcommands.push( {\n\t\t\tname: 'Group',\n\t\t\tlabel: __( 'Group' ),\n\t\t\tcallback: onGroup,\n\t\t\ticon: group,\n\t\t} );\n\t}\n\n\tif ( isUngroupable ) {\n\t\tcommands.push( {\n\t\t\tname: 'ungroup',\n\t\t\tlabel: __( 'Ungroup' ),\n\t\t\tcallback: onUngroup,\n\t\t\ticon: ungroup,\n\t\t} );\n\t}\n\n\tif ( canRemove ) {\n\t\tcommands.push( {\n\t\t\tname: 'remove',\n\t\t\tlabel: __( 'Delete' ),\n\t\t\tcallback: () => removeBlocks( clientIds, true ),\n\t\t\ticon: remove,\n\t\t} );\n\t}\n\n\treturn {\n\t\tisLoading: false,\n\t\tcommands: commands.map( ( command ) => ( {\n\t\t\t...command,\n\t\t\tname: 'core/block-editor/action-' + command.name,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tcommand.callback();\n\t\t\t\tclose();\n\t\t\t},\n\t\t} ) ),\n\t};\n};\n\nexport const useBlockCommands = () => {\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockTransforms',\n\t\thook: useTransformCommands,\n\t} );\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockActions',\n\t\thook: useActionsCommands,\n\t} );\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockQuickActions',\n\t\thook: useQuickActionsCommands,\n\t\tcontext: 'block-selection-edit',\n\t} );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["__","sprintf","hasBlockSupport","store","blocksStore","switchToBlockType","isTemplatePart","useSelect","useDispatch","useCommandLoader","copy","trash","remove","plus","add","group","ungroup","moveTo","move","BlockIcon","blockEditorStore","jsx","_jsx","useTransformCommands","replaceBlocks","multiSelect","blocks","clientIds","canRemove","possibleBlockTransformations","invalidSelection","select","getBlockRootClientId","getBlockTransformItems","getSelectedBlockClientIds","getBlocksByClientId","canRemoveBlocks","selectedBlockClientIds","selectedBlocks","filter","block","length","rootClientId","isLoading","commands","isTemplate","selectForMultipleBlocks","insertedBlocks","clientId","onBlockTransform","name","newBlocks","hasPossibleBlockTransformations","map","transformation","title","icon","replace","label","callback","close","useActionsCommands","canMoveBlocks","getBlockCount","setBlockMovingClientId","setNavigationMode","selectBlock","canMove","push","command","useQuickActionsCommands","isUngroupable","isGroupable","_isUngroupable","_isGroupable","canInsertBlockType","getDefaultBlockName","getGroupingBlockName","removeBlocks","duplicateBlocks","insertAfterBlock","insertBeforeBlock","onGroup","groupingBlockName","onUngroup","innerBlocks","canInsertDefaultBlock","canDuplicate","every","Array","isArray","useBlockCommands","hook","context"],"sources":["@wordpress/block-editor/src/components/use-block-commands/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\thasBlockSupport,\n\tstore as blocksStore,\n\tswitchToBlockType,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useCommandLoader } from '@wordpress/commands';\nimport {\n\tcopy,\n\ttrash as remove,\n\tplus as add,\n\tgroup,\n\tungroup,\n\tmoveTo as move,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\n\nexport const useTransformCommands = () => {\n\tconst { replaceBlocks, multiSelect } = useDispatch( blockEditorStore );\n\tconst {\n\t\tblocks,\n\t\tclientIds,\n\t\tcanRemove,\n\t\tpossibleBlockTransformations,\n\t\tinvalidSelection,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockTransformItems,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tgetBlocksByClientId,\n\t\t\tcanRemoveBlocks,\n\t\t} = select( blockEditorStore );\n\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst selectedBlocks = getBlocksByClientId( selectedBlockClientIds );\n\n\t\t// selectedBlocks can have `null`s when something tries to call `selectBlock` with an inexistent clientId.\n\t\t// These nulls will cause fatal errors down the line.\n\t\t// In order to prevent discrepancies between selectedBlockClientIds and selectedBlocks, we effectively treat the entire selection as invalid.\n\t\t// @see https://github.com/WordPress/gutenberg/pull/59410#issuecomment-2006304536\n\t\tif ( selectedBlocks.filter( ( block ) => ! block ).length > 0 ) {\n\t\t\treturn {\n\t\t\t\tinvalidSelection: true,\n\t\t\t};\n\t\t}\n\n\t\tconst rootClientId = getBlockRootClientId(\n\t\t\tselectedBlockClientIds[ 0 ]\n\t\t);\n\t\treturn {\n\t\t\tblocks: selectedBlocks,\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t\tpossibleBlockTransformations: getBlockTransformItems(\n\t\t\t\tselectedBlocks,\n\t\t\t\trootClientId\n\t\t\t),\n\t\t\tcanRemove: canRemoveBlocks( selectedBlockClientIds ),\n\t\t\tinvalidSelection: false,\n\t\t};\n\t}, [] );\n\n\tif ( invalidSelection ) {\n\t\treturn {\n\t\t\tisLoading: false,\n\t\t\tcommands: [],\n\t\t};\n\t}\n\tconst isTemplate = blocks.length === 1 && isTemplatePart( blocks[ 0 ] );\n\n\tfunction selectForMultipleBlocks( insertedBlocks ) {\n\t\tif ( insertedBlocks.length > 1 ) {\n\t\t\tmultiSelect(\n\t\t\t\tinsertedBlocks[ 0 ].clientId,\n\t\t\t\tinsertedBlocks[ insertedBlocks.length - 1 ].clientId\n\t\t\t);\n\t\t}\n\t}\n\n\t// Simple block tranformation based on the `Block Transforms` API.\n\tfunction onBlockTransform( name ) {\n\t\tconst newBlocks = switchToBlockType( blocks, name );\n\t\treplaceBlocks( clientIds, newBlocks );\n\t\tselectForMultipleBlocks( newBlocks );\n\t}\n\n\t/**\n\t * The `isTemplate` check is a stopgap solution here.\n\t * Ideally, the Transforms API should handle this\n\t * by allowing to exclude blocks from wildcard transformations.\n\t */\n\tconst hasPossibleBlockTransformations =\n\t\t!! possibleBlockTransformations.length && canRemove && ! isTemplate;\n\n\tif (\n\t\t! clientIds ||\n\t\tclientIds.length < 1 ||\n\t\t! hasPossibleBlockTransformations\n\t) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst commands = possibleBlockTransformations.map( ( transformation ) => {\n\t\tconst { name, title, icon } = transformation;\n\t\treturn {\n\t\t\tname: 'core/block-editor/transform-to-' + name.replace( '/', '-' ),\n\t\t\t// translators: %s: block title/name.\n\t\t\tlabel: sprintf( __( 'Transform to %s' ), title ),\n\t\t\ticon: <BlockIcon icon={ icon } />,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tonBlockTransform( name );\n\t\t\t\tclose();\n\t\t\t},\n\t\t};\n\t} );\n\n\treturn { isLoading: false, commands };\n};\n\nconst useActionsCommands = () => {\n\tconst { clientIds } = useSelect( ( select ) => {\n\t\tconst { getSelectedBlockClientIds } = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\treturn {\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t};\n\t}, [] );\n\n\tconst { getBlockRootClientId, canMoveBlocks, getBlockCount } =\n\t\tuseSelect( blockEditorStore );\n\n\tconst { setBlockMovingClientId, setNavigationMode, selectBlock } =\n\t\tuseDispatch( blockEditorStore );\n\n\tif ( ! clientIds || clientIds.length < 1 ) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\n\tconst canMove =\n\t\tcanMoveBlocks( clientIds ) && getBlockCount( rootClientId ) !== 1;\n\n\tconst commands = [];\n\n\tif ( canMove ) {\n\t\tcommands.push( {\n\t\t\tname: 'move-to',\n\t\t\tlabel: __( 'Move to' ),\n\t\t\tcallback: () => {\n\t\t\t\tsetNavigationMode( true );\n\t\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\t\tsetBlockMovingClientId( clientIds[ 0 ] );\n\t\t\t},\n\t\t\ticon: move,\n\t\t} );\n\t}\n\n\treturn {\n\t\tisLoading: false,\n\t\tcommands: commands.map( ( command ) => ( {\n\t\t\t...command,\n\t\t\tname: 'core/block-editor/action-' + command.name,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tcommand.callback();\n\t\t\t\tclose();\n\t\t\t},\n\t\t} ) ),\n\t};\n};\n\nconst useQuickActionsCommands = () => {\n\tconst { clientIds, isUngroupable, isGroupable } = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tisUngroupable: _isUngroupable,\n\t\t\tisGroupable: _isGroupable,\n\t\t} = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\treturn {\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t\tisUngroupable: _isUngroupable(),\n\t\t\tisGroupable: _isGroupable(),\n\t\t};\n\t}, [] );\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockRootClientId,\n\t\tgetBlocksByClientId,\n\t\tcanRemoveBlocks,\n\t} = useSelect( blockEditorStore );\n\tconst { getDefaultBlockName, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\n\tconst blocks = getBlocksByClientId( clientIds );\n\n\tconst {\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tduplicateBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t} = useDispatch( blockEditorStore );\n\n\tconst onGroup = () => {\n\t\tif ( ! blocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst groupingBlockName = getGroupingBlockName();\n\n\t\t// Activate the `transform` on `core/group` which does the conversion.\n\t\tconst newBlocks = switchToBlockType( blocks, groupingBlockName );\n\n\t\tif ( ! newBlocks ) {\n\t\t\treturn;\n\t\t}\n\t\treplaceBlocks( clientIds, newBlocks );\n\t};\n\tconst onUngroup = () => {\n\t\tif ( ! blocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst innerBlocks = blocks[ 0 ].innerBlocks;\n\n\t\tif ( ! innerBlocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\treplaceBlocks( clientIds, innerBlocks );\n\t};\n\n\tif ( ! clientIds || clientIds.length < 1 ) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\tconst canInsertDefaultBlock = canInsertBlockType(\n\t\tgetDefaultBlockName(),\n\t\trootClientId\n\t);\n\tconst canDuplicate = blocks.every( ( block ) => {\n\t\treturn (\n\t\t\t!! block &&\n\t\t\thasBlockSupport( block.name, 'multiple', true ) &&\n\t\t\tcanInsertBlockType( block.name, rootClientId )\n\t\t);\n\t} );\n\tconst canRemove = canRemoveBlocks( clientIds );\n\n\tconst commands = [];\n\n\tif ( canDuplicate ) {\n\t\tcommands.push( {\n\t\t\tname: 'duplicate',\n\t\t\tlabel: __( 'Duplicate' ),\n\t\t\tcallback: () => duplicateBlocks( clientIds, true ),\n\t\t\ticon: copy,\n\t\t} );\n\t}\n\n\tif ( canInsertDefaultBlock ) {\n\t\tcommands.push(\n\t\t\t{\n\t\t\t\tname: 'add-before',\n\t\t\t\tlabel: __( 'Add before' ),\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst clientId = Array.isArray( clientIds )\n\t\t\t\t\t\t? clientIds[ 0 ]\n\t\t\t\t\t\t: clientId;\n\t\t\t\t\tinsertBeforeBlock( clientId );\n\t\t\t\t},\n\t\t\t\ticon: add,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'add-after',\n\t\t\t\tlabel: __( 'Add after' ),\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst clientId = Array.isArray( clientIds )\n\t\t\t\t\t\t? clientIds[ clientIds.length - 1 ]\n\t\t\t\t\t\t: clientId;\n\t\t\t\t\tinsertAfterBlock( clientId );\n\t\t\t\t},\n\t\t\t\ticon: add,\n\t\t\t}\n\t\t);\n\t}\n\n\tif ( isGroupable ) {\n\t\tcommands.push( {\n\t\t\tname: 'Group',\n\t\t\tlabel: __( 'Group' ),\n\t\t\tcallback: onGroup,\n\t\t\ticon: group,\n\t\t} );\n\t}\n\n\tif ( isUngroupable ) {\n\t\tcommands.push( {\n\t\t\tname: 'ungroup',\n\t\t\tlabel: __( 'Ungroup' ),\n\t\t\tcallback: onUngroup,\n\t\t\ticon: ungroup,\n\t\t} );\n\t}\n\n\tif ( canRemove ) {\n\t\tcommands.push( {\n\t\t\tname: 'remove',\n\t\t\tlabel: __( 'Delete' ),\n\t\t\tcallback: () => removeBlocks( clientIds, true ),\n\t\t\ticon: remove,\n\t\t} );\n\t}\n\n\treturn {\n\t\tisLoading: false,\n\t\tcommands: commands.map( ( command ) => ( {\n\t\t\t...command,\n\t\t\tname: 'core/block-editor/action-' + command.name,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tcommand.callback();\n\t\t\t\tclose();\n\t\t\t},\n\t\t} ) ),\n\t};\n};\n\nexport const useBlockCommands = () => {\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockTransforms',\n\t\thook: useTransformCommands,\n\t} );\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockActions',\n\t\thook: useActionsCommands,\n\t} );\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockQuickActions',\n\t\thook: useQuickActionsCommands,\n\t\tcontext: 'block-selection-edit',\n\t} );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { pasteHandler, findTransform, getBlockTransforms, hasBlockSupport } from '@wordpress/blocks';
|
|
4
|
+
import { pasteHandler, findTransform, getBlockTransforms, hasBlockSupport, switchToBlockType } from '@wordpress/blocks';
|
|
5
5
|
import { documentHasSelection, documentHasUncollapsedSelection } from '@wordpress/dom';
|
|
6
6
|
import { useDispatch, useRegistry, useSelect } from '@wordpress/data';
|
|
7
7
|
import { useRefEffect } from '@wordpress/compose';
|
|
@@ -158,10 +158,29 @@ export default function useClipboardHandler() {
|
|
|
158
158
|
}
|
|
159
159
|
const [firstSelectedClientId] = selectedBlockClientIds;
|
|
160
160
|
const rootClientId = getBlockRootClientId(firstSelectedClientId);
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
const newBlocks = [];
|
|
162
|
+
for (const block of blocks) {
|
|
163
|
+
if (canInsertBlockType(block.name, rootClientId)) {
|
|
164
|
+
newBlocks.push(block);
|
|
165
|
+
} else {
|
|
166
|
+
// If a block cannot be inserted in a root block, try
|
|
167
|
+
// converting it to that root block type and insert the
|
|
168
|
+
// inner blocks.
|
|
169
|
+
// Example: paragraphs cannot be inserted into a list,
|
|
170
|
+
// so convert the paragraphs to a list for list items.
|
|
171
|
+
const rootBlockName = getBlockName(rootClientId);
|
|
172
|
+
const switchedBlocks = block.name !== rootBlockName ? switchToBlockType(block, rootBlockName) : [block];
|
|
173
|
+
if (!switchedBlocks) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
for (const switchedBlock of switchedBlocks) {
|
|
177
|
+
for (const innerBlock of switchedBlock.innerBlocks) {
|
|
178
|
+
newBlocks.push(innerBlock);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
163
182
|
}
|
|
164
|
-
__unstableSplitSelection(
|
|
183
|
+
__unstableSplitSelection(newBlocks);
|
|
165
184
|
event.preventDefault();
|
|
166
185
|
}
|
|
167
186
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["pasteHandler","findTransform","getBlockTransforms","hasBlockSupport","documentHasSelection","documentHasUncollapsedSelection","useDispatch","useRegistry","useSelect","useRefEffect","store","blockEditorStore","useNotifyCopy","setClipboardBlocks","getPasteEventData","useClipboardHandler","registry","getBlocksByClientId","getSelectedBlockClientIds","hasMultiSelection","getSettings","getBlockName","__unstableIsFullySelected","__unstableIsSelectionCollapsed","__unstableIsSelectionMergeable","__unstableGetSelectedBlocksWithPartialSelection","canInsertBlockType","getBlockRootClientId","flashBlock","removeBlocks","replaceBlocks","__unstableDeleteSelection","__unstableExpandSelection","__unstableSplitSelection","notifyCopy","node","handler","event","defaultPrevented","selectedBlockClientIds","length","target","ownerDocument","hasSelection","type","activeElement","isContentEditable","contains","isSelectionMergeable","shouldHandleWholeBlocks","expandSelectionIsNeeded","preventDefault","blocks","head","tail","inBetweenBlocks","slice","contentEditable","__experimentalCanUserUseUnfilteredHTML","canUserUseUnfilteredHTML","isInternal","clipboardData","getData","plainText","html","files","isFullySelected","fromTransforms","reduce","accumulator","file","transformation","transform","isMatch","push","flat","HTML","mode","__deprecatedOnSplit","firstSelectedClientId","rootClientId","every","block","name","addEventListener","removeEventListener"],"sources":["@wordpress/block-editor/src/components/writing-flow/use-clipboard-handler.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tpasteHandler,\n\tfindTransform,\n\tgetBlockTransforms,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport {\n\tdocumentHasSelection,\n\tdocumentHasUncollapsedSelection,\n} from '@wordpress/dom';\nimport { useDispatch, useRegistry, useSelect } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useNotifyCopy } from '../../utils/use-notify-copy';\nimport { setClipboardBlocks } from './utils';\nimport { getPasteEventData } from '../../utils/pasting';\n\nexport default function useClipboardHandler() {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetBlocksByClientId,\n\t\tgetSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\tgetSettings,\n\t\tgetBlockName,\n\t\t__unstableIsFullySelected,\n\t\t__unstableIsSelectionCollapsed,\n\t\t__unstableIsSelectionMergeable,\n\t\t__unstableGetSelectedBlocksWithPartialSelection,\n\t\tcanInsertBlockType,\n\t\tgetBlockRootClientId,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tflashBlock,\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\t__unstableDeleteSelection,\n\t\t__unstableExpandSelection,\n\t\t__unstableSplitSelection,\n\t} = useDispatch( blockEditorStore );\n\tconst notifyCopy = useNotifyCopy();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction handler( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t// This was likely already handled in rich-text/use-paste-handler.js.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\t\tif ( selectedBlockClientIds.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Let native copy/paste behaviour take over in input fields.\n\t\t\t// But always handle multiple selected blocks.\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\tconst { target } = event;\n\t\t\t\tconst { ownerDocument } = target;\n\t\t\t\t// If copying, only consider actual text selection as selection.\n\t\t\t\t// Otherwise, any focus on an input field is considered.\n\t\t\t\tconst hasSelection =\n\t\t\t\t\tevent.type === 'copy' || event.type === 'cut'\n\t\t\t\t\t\t? documentHasUncollapsedSelection( ownerDocument )\n\t\t\t\t\t\t: documentHasSelection( ownerDocument ) &&\n\t\t\t\t\t\t ! ownerDocument.activeElement.isContentEditable;\n\n\t\t\t\t// Let native copy behaviour take over in input fields.\n\t\t\t\tif ( hasSelection ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst { activeElement } = event.target.ownerDocument;\n\n\t\t\tif ( ! node.contains( activeElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isSelectionMergeable = __unstableIsSelectionMergeable();\n\t\t\tconst shouldHandleWholeBlocks =\n\t\t\t\t__unstableIsSelectionCollapsed() || __unstableIsFullySelected();\n\t\t\tconst expandSelectionIsNeeded =\n\t\t\t\t! shouldHandleWholeBlocks && ! isSelectionMergeable;\n\t\t\tif ( event.type === 'copy' || event.type === 'cut' ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\t\t\tflashBlock( selectedBlockClientIds[ 0 ] );\n\t\t\t\t}\n\t\t\t\t// If we have a partial selection that is not mergeable, just\n\t\t\t\t// expand the selection to the whole blocks.\n\t\t\t\tif ( expandSelectionIsNeeded ) {\n\t\t\t\t\t__unstableExpandSelection();\n\t\t\t\t} else {\n\t\t\t\t\tnotifyCopy( event.type, selectedBlockClientIds );\n\t\t\t\t\tlet blocks;\n\t\t\t\t\t// Check if we have partial selection.\n\t\t\t\t\tif ( shouldHandleWholeBlocks ) {\n\t\t\t\t\t\tblocks = getBlocksByClientId( selectedBlockClientIds );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst [ head, tail ] =\n\t\t\t\t\t\t\t__unstableGetSelectedBlocksWithPartialSelection();\n\t\t\t\t\t\tconst inBetweenBlocks = getBlocksByClientId(\n\t\t\t\t\t\t\tselectedBlockClientIds.slice(\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length - 1\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tblocks = [ head, ...inBetweenBlocks, tail ];\n\t\t\t\t\t}\n\n\t\t\t\t\tsetClipboardBlocks( event, blocks, registry );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( event.type === 'cut' ) {\n\t\t\t\t// We need to also check if at the start we needed to\n\t\t\t\t// expand the selection, as in this point we might have\n\t\t\t\t// programmatically fully selected the blocks above.\n\t\t\t\tif ( shouldHandleWholeBlocks && ! expandSelectionIsNeeded ) {\n\t\t\t\t\tremoveBlocks( selectedBlockClientIds );\n\t\t\t\t} else {\n\t\t\t\t\tevent.target.ownerDocument.activeElement.contentEditable = false;\n\t\t\t\t\t__unstableDeleteSelection();\n\t\t\t\t}\n\t\t\t} else if ( event.type === 'paste' ) {\n\t\t\t\tconst {\n\t\t\t\t\t__experimentalCanUserUseUnfilteredHTML:\n\t\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t} = getSettings();\n\t\t\t\tconst isInternal =\n\t\t\t\t\tevent.clipboardData.getData( 'rich-text' ) === 'true';\n\t\t\t\tif ( isInternal ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst { plainText, html, files } = getPasteEventData( event );\n\t\t\t\tconst isFullySelected = __unstableIsFullySelected();\n\t\t\t\tlet blocks = [];\n\n\t\t\t\tif ( files.length ) {\n\t\t\t\t\tconst fromTransforms = getBlockTransforms( 'from' );\n\t\t\t\t\tblocks = files\n\t\t\t\t\t\t.reduce( ( accumulator, file ) => {\n\t\t\t\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\t\t\t\tfromTransforms,\n\t\t\t\t\t\t\t\t( transform ) =>\n\t\t\t\t\t\t\t\t\ttransform.type === 'files' &&\n\t\t\t\t\t\t\t\t\ttransform.isMatch( [ file ] )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif ( transformation ) {\n\t\t\t\t\t\t\t\taccumulator.push(\n\t\t\t\t\t\t\t\t\ttransformation.transform( [ file ] )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t\t}, [] )\n\t\t\t\t\t\t.flat();\n\t\t\t\t} else {\n\t\t\t\t\tblocks = pasteHandler( {\n\t\t\t\t\t\tHTML: html,\n\t\t\t\t\t\tplainText,\n\t\t\t\t\t\tmode: isFullySelected ? 'BLOCKS' : 'AUTO',\n\t\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t// Inline paste: let rich text handle it.\n\t\t\t\tif ( typeof blocks === 'string' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( isFullySelected ) {\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\tselectedBlockClientIds,\n\t\t\t\t\t\tblocks,\n\t\t\t\t\t\tblocks.length - 1,\n\t\t\t\t\t\t-1\n\t\t\t\t\t);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a block doesn't support splitting, let rich text paste\n\t\t\t\t// inline.\n\t\t\t\tif (\n\t\t\t\t\t! hasMultiSelection() &&\n\t\t\t\t\t! hasBlockSupport(\n\t\t\t\t\t\tgetBlockName( selectedBlockClientIds[ 0 ] ),\n\t\t\t\t\t\t'splitting',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t) &&\n\t\t\t\t\t! event.__deprecatedOnSplit\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [ firstSelectedClientId ] = selectedBlockClientIds;\n\t\t\t\tconst rootClientId = getBlockRootClientId(\n\t\t\t\t\tfirstSelectedClientId\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\t! blocks.every( ( block ) =>\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\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t__unstableSplitSelection( blocks );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tnode.ownerDocument.addEventListener( 'copy', handler );\n\t\tnode.ownerDocument.addEventListener( 'cut', handler );\n\t\tnode.ownerDocument.addEventListener( 'paste', handler );\n\n\t\treturn () => {\n\t\t\tnode.ownerDocument.removeEventListener( 'copy', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'cut', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'paste', handler );\n\t\t};\n\t}, [] );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["pasteHandler","findTransform","getBlockTransforms","hasBlockSupport","switchToBlockType","documentHasSelection","documentHasUncollapsedSelection","useDispatch","useRegistry","useSelect","useRefEffect","store","blockEditorStore","useNotifyCopy","setClipboardBlocks","getPasteEventData","useClipboardHandler","registry","getBlocksByClientId","getSelectedBlockClientIds","hasMultiSelection","getSettings","getBlockName","__unstableIsFullySelected","__unstableIsSelectionCollapsed","__unstableIsSelectionMergeable","__unstableGetSelectedBlocksWithPartialSelection","canInsertBlockType","getBlockRootClientId","flashBlock","removeBlocks","replaceBlocks","__unstableDeleteSelection","__unstableExpandSelection","__unstableSplitSelection","notifyCopy","node","handler","event","defaultPrevented","selectedBlockClientIds","length","target","ownerDocument","hasSelection","type","activeElement","isContentEditable","contains","isSelectionMergeable","shouldHandleWholeBlocks","expandSelectionIsNeeded","preventDefault","blocks","head","tail","inBetweenBlocks","slice","contentEditable","__experimentalCanUserUseUnfilteredHTML","canUserUseUnfilteredHTML","isInternal","clipboardData","getData","plainText","html","files","isFullySelected","fromTransforms","reduce","accumulator","file","transformation","transform","isMatch","push","flat","HTML","mode","__deprecatedOnSplit","firstSelectedClientId","rootClientId","newBlocks","block","name","rootBlockName","switchedBlocks","switchedBlock","innerBlock","innerBlocks","addEventListener","removeEventListener"],"sources":["@wordpress/block-editor/src/components/writing-flow/use-clipboard-handler.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tpasteHandler,\n\tfindTransform,\n\tgetBlockTransforms,\n\thasBlockSupport,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tdocumentHasSelection,\n\tdocumentHasUncollapsedSelection,\n} from '@wordpress/dom';\nimport { useDispatch, useRegistry, useSelect } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useNotifyCopy } from '../../utils/use-notify-copy';\nimport { setClipboardBlocks } from './utils';\nimport { getPasteEventData } from '../../utils/pasting';\n\nexport default function useClipboardHandler() {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetBlocksByClientId,\n\t\tgetSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\tgetSettings,\n\t\tgetBlockName,\n\t\t__unstableIsFullySelected,\n\t\t__unstableIsSelectionCollapsed,\n\t\t__unstableIsSelectionMergeable,\n\t\t__unstableGetSelectedBlocksWithPartialSelection,\n\t\tcanInsertBlockType,\n\t\tgetBlockRootClientId,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tflashBlock,\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\t__unstableDeleteSelection,\n\t\t__unstableExpandSelection,\n\t\t__unstableSplitSelection,\n\t} = useDispatch( blockEditorStore );\n\tconst notifyCopy = useNotifyCopy();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction handler( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t// This was likely already handled in rich-text/use-paste-handler.js.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\t\tif ( selectedBlockClientIds.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Let native copy/paste behaviour take over in input fields.\n\t\t\t// But always handle multiple selected blocks.\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\tconst { target } = event;\n\t\t\t\tconst { ownerDocument } = target;\n\t\t\t\t// If copying, only consider actual text selection as selection.\n\t\t\t\t// Otherwise, any focus on an input field is considered.\n\t\t\t\tconst hasSelection =\n\t\t\t\t\tevent.type === 'copy' || event.type === 'cut'\n\t\t\t\t\t\t? documentHasUncollapsedSelection( ownerDocument )\n\t\t\t\t\t\t: documentHasSelection( ownerDocument ) &&\n\t\t\t\t\t\t ! ownerDocument.activeElement.isContentEditable;\n\n\t\t\t\t// Let native copy behaviour take over in input fields.\n\t\t\t\tif ( hasSelection ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst { activeElement } = event.target.ownerDocument;\n\n\t\t\tif ( ! node.contains( activeElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isSelectionMergeable = __unstableIsSelectionMergeable();\n\t\t\tconst shouldHandleWholeBlocks =\n\t\t\t\t__unstableIsSelectionCollapsed() || __unstableIsFullySelected();\n\t\t\tconst expandSelectionIsNeeded =\n\t\t\t\t! shouldHandleWholeBlocks && ! isSelectionMergeable;\n\t\t\tif ( event.type === 'copy' || event.type === 'cut' ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\t\t\tflashBlock( selectedBlockClientIds[ 0 ] );\n\t\t\t\t}\n\t\t\t\t// If we have a partial selection that is not mergeable, just\n\t\t\t\t// expand the selection to the whole blocks.\n\t\t\t\tif ( expandSelectionIsNeeded ) {\n\t\t\t\t\t__unstableExpandSelection();\n\t\t\t\t} else {\n\t\t\t\t\tnotifyCopy( event.type, selectedBlockClientIds );\n\t\t\t\t\tlet blocks;\n\t\t\t\t\t// Check if we have partial selection.\n\t\t\t\t\tif ( shouldHandleWholeBlocks ) {\n\t\t\t\t\t\tblocks = getBlocksByClientId( selectedBlockClientIds );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst [ head, tail ] =\n\t\t\t\t\t\t\t__unstableGetSelectedBlocksWithPartialSelection();\n\t\t\t\t\t\tconst inBetweenBlocks = getBlocksByClientId(\n\t\t\t\t\t\t\tselectedBlockClientIds.slice(\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length - 1\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tblocks = [ head, ...inBetweenBlocks, tail ];\n\t\t\t\t\t}\n\n\t\t\t\t\tsetClipboardBlocks( event, blocks, registry );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( event.type === 'cut' ) {\n\t\t\t\t// We need to also check if at the start we needed to\n\t\t\t\t// expand the selection, as in this point we might have\n\t\t\t\t// programmatically fully selected the blocks above.\n\t\t\t\tif ( shouldHandleWholeBlocks && ! expandSelectionIsNeeded ) {\n\t\t\t\t\tremoveBlocks( selectedBlockClientIds );\n\t\t\t\t} else {\n\t\t\t\t\tevent.target.ownerDocument.activeElement.contentEditable = false;\n\t\t\t\t\t__unstableDeleteSelection();\n\t\t\t\t}\n\t\t\t} else if ( event.type === 'paste' ) {\n\t\t\t\tconst {\n\t\t\t\t\t__experimentalCanUserUseUnfilteredHTML:\n\t\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t} = getSettings();\n\t\t\t\tconst isInternal =\n\t\t\t\t\tevent.clipboardData.getData( 'rich-text' ) === 'true';\n\t\t\t\tif ( isInternal ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst { plainText, html, files } = getPasteEventData( event );\n\t\t\t\tconst isFullySelected = __unstableIsFullySelected();\n\t\t\t\tlet blocks = [];\n\n\t\t\t\tif ( files.length ) {\n\t\t\t\t\tconst fromTransforms = getBlockTransforms( 'from' );\n\t\t\t\t\tblocks = files\n\t\t\t\t\t\t.reduce( ( accumulator, file ) => {\n\t\t\t\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\t\t\t\tfromTransforms,\n\t\t\t\t\t\t\t\t( transform ) =>\n\t\t\t\t\t\t\t\t\ttransform.type === 'files' &&\n\t\t\t\t\t\t\t\t\ttransform.isMatch( [ file ] )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif ( transformation ) {\n\t\t\t\t\t\t\t\taccumulator.push(\n\t\t\t\t\t\t\t\t\ttransformation.transform( [ file ] )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t\t}, [] )\n\t\t\t\t\t\t.flat();\n\t\t\t\t} else {\n\t\t\t\t\tblocks = pasteHandler( {\n\t\t\t\t\t\tHTML: html,\n\t\t\t\t\t\tplainText,\n\t\t\t\t\t\tmode: isFullySelected ? 'BLOCKS' : 'AUTO',\n\t\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t// Inline paste: let rich text handle it.\n\t\t\t\tif ( typeof blocks === 'string' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( isFullySelected ) {\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\tselectedBlockClientIds,\n\t\t\t\t\t\tblocks,\n\t\t\t\t\t\tblocks.length - 1,\n\t\t\t\t\t\t-1\n\t\t\t\t\t);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a block doesn't support splitting, let rich text paste\n\t\t\t\t// inline.\n\t\t\t\tif (\n\t\t\t\t\t! hasMultiSelection() &&\n\t\t\t\t\t! hasBlockSupport(\n\t\t\t\t\t\tgetBlockName( selectedBlockClientIds[ 0 ] ),\n\t\t\t\t\t\t'splitting',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t) &&\n\t\t\t\t\t! event.__deprecatedOnSplit\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [ firstSelectedClientId ] = selectedBlockClientIds;\n\t\t\t\tconst rootClientId = getBlockRootClientId(\n\t\t\t\t\tfirstSelectedClientId\n\t\t\t\t);\n\n\t\t\t\tconst newBlocks = [];\n\n\t\t\t\tfor ( const block of blocks ) {\n\t\t\t\t\tif ( canInsertBlockType( block.name, rootClientId ) ) {\n\t\t\t\t\t\tnewBlocks.push( block );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If a block cannot be inserted in a root block, try\n\t\t\t\t\t\t// converting it to that root block type and insert the\n\t\t\t\t\t\t// inner blocks.\n\t\t\t\t\t\t// Example: paragraphs cannot be inserted into a list,\n\t\t\t\t\t\t// so convert the paragraphs to a list for list items.\n\t\t\t\t\t\tconst rootBlockName = getBlockName( rootClientId );\n\t\t\t\t\t\tconst switchedBlocks =\n\t\t\t\t\t\t\tblock.name !== rootBlockName\n\t\t\t\t\t\t\t\t? switchToBlockType( block, rootBlockName )\n\t\t\t\t\t\t\t\t: [ block ];\n\n\t\t\t\t\t\tif ( ! switchedBlocks ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( const switchedBlock of switchedBlocks ) {\n\t\t\t\t\t\t\tfor ( const innerBlock of switchedBlock.innerBlocks ) {\n\t\t\t\t\t\t\t\tnewBlocks.push( innerBlock );\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\n\t\t\t\t__unstableSplitSelection( newBlocks );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tnode.ownerDocument.addEventListener( 'copy', handler );\n\t\tnode.ownerDocument.addEventListener( 'cut', handler );\n\t\tnode.ownerDocument.addEventListener( 'paste', handler );\n\n\t\treturn () => {\n\t\t\tnode.ownerDocument.removeEventListener( 'copy', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'cut', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'paste', handler );\n\t\t};\n\t}, [] );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { __ } from '@wordpress/i18n';
|
|
5
5
|
import { store as blocksStore } from '@wordpress/blocks';
|
|
6
|
-
import { PanelBody, __experimentalHStack as HStack, __experimentalItemGroup as ItemGroup, __experimentalItem as Item } from '@wordpress/components';
|
|
6
|
+
import { BaseControl, PanelBody, __experimentalHStack as HStack, __experimentalItemGroup as ItemGroup, __experimentalItem as Item } from '@wordpress/components';
|
|
7
7
|
import { useSelect } from '@wordpress/data';
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -49,23 +49,26 @@ export const BlockBindingsPanel = ({
|
|
|
49
49
|
}
|
|
50
50
|
return /*#__PURE__*/_jsx(InspectorControls, {
|
|
51
51
|
children: /*#__PURE__*/_jsx(PanelBody, {
|
|
52
|
-
title: __('
|
|
52
|
+
title: __('Attributes'),
|
|
53
53
|
className: "components-panel__block-bindings-panel",
|
|
54
|
-
children: /*#__PURE__*/_jsx(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
54
|
+
children: /*#__PURE__*/_jsx(BaseControl, {
|
|
55
|
+
help: __('Attributes connected to various sources.'),
|
|
56
|
+
children: /*#__PURE__*/_jsx(ItemGroup, {
|
|
57
|
+
isBordered: true,
|
|
58
|
+
isSeparated: true,
|
|
59
|
+
size: "large",
|
|
60
|
+
children: Object.keys(filteredBindings).map(key => {
|
|
61
|
+
return /*#__PURE__*/_jsx(Item, {
|
|
62
|
+
children: /*#__PURE__*/_jsxs(HStack, {
|
|
63
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
64
|
+
children: key
|
|
65
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
66
|
+
className: "components-item__block-bindings-source",
|
|
67
|
+
children: sources[filteredBindings[key].source] ? sources[filteredBindings[key].source].label : filteredBindings[key].source
|
|
68
|
+
})]
|
|
69
|
+
})
|
|
70
|
+
}, key);
|
|
71
|
+
})
|
|
69
72
|
})
|
|
70
73
|
})
|
|
71
74
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__","store","blocksStore","PanelBody","__experimentalHStack","HStack","__experimentalItemGroup","ItemGroup","__experimentalItem","Item","useSelect","canBindAttribute","unlock","InspectorControls","jsx","_jsx","jsxs","_jsxs","BlockBindingsPanel","name","metadata","bindings","sources","select","_sources","getAllBlockBindingsSources","filteredBindings","Object","keys","forEach","key","source","length","children","title","className","isBordered","isSeparated","size","map","label","edit","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-bindings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport {\n\tPanelBody,\n\t__experimentalHStack as HStack,\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { canBindAttribute } from '../hooks/use-bindings-attributes';\nimport { unlock } from '../lock-unlock';\nimport InspectorControls from '../components/inspector-controls';\n\nexport const BlockBindingsPanel = ( { name, metadata } ) => {\n\tconst { bindings } = metadata || {};\n\tconst { sources } = useSelect( ( select ) => {\n\t\tconst _sources = unlock(\n\t\t\tselect( blocksStore )\n\t\t).getAllBlockBindingsSources();\n\n\t\treturn {\n\t\t\tsources: _sources,\n\t\t};\n\t}, [] );\n\n\tif ( ! bindings ) {\n\t\treturn null;\n\t}\n\n\t// Don't show not allowed attributes.\n\t// Don't show the bindings connected to pattern overrides in the inspectors panel.\n\t// TODO: Explore if this should be abstracted to let other sources decide.\n\tconst filteredBindings = { ...bindings };\n\tObject.keys( filteredBindings ).forEach( ( key ) => {\n\t\tif (\n\t\t\t! canBindAttribute( name, key ) ||\n\t\t\tfilteredBindings[ key ].source === 'core/pattern-overrides'\n\t\t) {\n\t\t\tdelete filteredBindings[ key ];\n\t\t}\n\t} );\n\n\tif ( Object.keys( filteredBindings ).length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody\n\t\t\t\ttitle={ __( '
|
|
1
|
+
{"version":3,"names":["__","store","blocksStore","BaseControl","PanelBody","__experimentalHStack","HStack","__experimentalItemGroup","ItemGroup","__experimentalItem","Item","useSelect","canBindAttribute","unlock","InspectorControls","jsx","_jsx","jsxs","_jsxs","BlockBindingsPanel","name","metadata","bindings","sources","select","_sources","getAllBlockBindingsSources","filteredBindings","Object","keys","forEach","key","source","length","children","title","className","help","isBordered","isSeparated","size","map","label","edit","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-bindings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport {\n\tBaseControl,\n\tPanelBody,\n\t__experimentalHStack as HStack,\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { canBindAttribute } from '../hooks/use-bindings-attributes';\nimport { unlock } from '../lock-unlock';\nimport InspectorControls from '../components/inspector-controls';\n\nexport const BlockBindingsPanel = ( { name, metadata } ) => {\n\tconst { bindings } = metadata || {};\n\tconst { sources } = useSelect( ( select ) => {\n\t\tconst _sources = unlock(\n\t\t\tselect( blocksStore )\n\t\t).getAllBlockBindingsSources();\n\n\t\treturn {\n\t\t\tsources: _sources,\n\t\t};\n\t}, [] );\n\n\tif ( ! bindings ) {\n\t\treturn null;\n\t}\n\n\t// Don't show not allowed attributes.\n\t// Don't show the bindings connected to pattern overrides in the inspectors panel.\n\t// TODO: Explore if this should be abstracted to let other sources decide.\n\tconst filteredBindings = { ...bindings };\n\tObject.keys( filteredBindings ).forEach( ( key ) => {\n\t\tif (\n\t\t\t! canBindAttribute( name, key ) ||\n\t\t\tfilteredBindings[ key ].source === 'core/pattern-overrides'\n\t\t) {\n\t\t\tdelete filteredBindings[ key ];\n\t\t}\n\t} );\n\n\tif ( Object.keys( filteredBindings ).length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody\n\t\t\t\ttitle={ __( 'Attributes' ) }\n\t\t\t\tclassName=\"components-panel__block-bindings-panel\"\n\t\t\t>\n\t\t\t\t<BaseControl\n\t\t\t\t\thelp={ __( 'Attributes connected to various sources.' ) }\n\t\t\t\t>\n\t\t\t\t\t<ItemGroup isBordered isSeparated size=\"large\">\n\t\t\t\t\t\t{ Object.keys( filteredBindings ).map( ( key ) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Item key={ key }>\n\t\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t\t<span>{ key }</span>\n\t\t\t\t\t\t\t\t\t\t<span className=\"components-item__block-bindings-source\">\n\t\t\t\t\t\t\t\t\t\t\t{ sources[\n\t\t\t\t\t\t\t\t\t\t\t\tfilteredBindings[ key ].source\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t? sources[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilteredBindings[ key ]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.source\n\t\t\t\t\t\t\t\t\t\t\t\t ].label\n\t\t\t\t\t\t\t\t\t\t\t\t: filteredBindings[ key ]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.source }\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t</BaseControl>\n\t\t\t</PanelBody>\n\t\t</InspectorControls>\n\t);\n};\n\nexport default {\n\tedit: BlockBindingsPanel,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,6 +12,21 @@ import { GlobalStylesContext, toStyles, getBlockSelectors } from '../components/
|
|
|
12
12
|
import { useStyleOverride } from './utils';
|
|
13
13
|
import { store as blockEditorStore } from '../store';
|
|
14
14
|
import { globalStylesDataKey } from '../store/private-keys';
|
|
15
|
+
const VARIATION_PREFIX = 'is-style-';
|
|
16
|
+
function getVariationMatches(className) {
|
|
17
|
+
if (!className) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
return className.split(/\s+/).reduce((matches, name) => {
|
|
21
|
+
if (name.startsWith(VARIATION_PREFIX)) {
|
|
22
|
+
const match = name.slice(VARIATION_PREFIX.length);
|
|
23
|
+
if (match !== 'default') {
|
|
24
|
+
matches.push(match);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return matches;
|
|
28
|
+
}, []);
|
|
29
|
+
}
|
|
15
30
|
|
|
16
31
|
/**
|
|
17
32
|
* Get the first block style variation that has been registered from the class string.
|
|
@@ -24,12 +39,11 @@ import { globalStylesDataKey } from '../store/private-keys';
|
|
|
24
39
|
function getVariationNameFromClass(className, registeredStyles = []) {
|
|
25
40
|
// The global flag affects how capturing groups work in JS. So the regex
|
|
26
41
|
// below will only return full CSS classes not just the variation name.
|
|
27
|
-
const matches = className
|
|
42
|
+
const matches = getVariationMatches(className);
|
|
28
43
|
if (!matches) {
|
|
29
44
|
return null;
|
|
30
45
|
}
|
|
31
|
-
for (const
|
|
32
|
-
const variation = variationClass.substring(9); // Remove 'is-style-' prefix.
|
|
46
|
+
for (const variation of matches) {
|
|
33
47
|
if (registeredStyles.some(style => style.name === variation)) {
|
|
34
48
|
return variation;
|
|
35
49
|
}
|
|
@@ -88,7 +102,7 @@ function useBlockProps({
|
|
|
88
102
|
} = useSelect(blocksStore);
|
|
89
103
|
const registeredStyles = getBlockStyles(name);
|
|
90
104
|
const variation = getVariationNameFromClass(className, registeredStyles);
|
|
91
|
-
const variationClass =
|
|
105
|
+
const variationClass = `${VARIATION_PREFIX}${variation}-${clientId}`;
|
|
92
106
|
const {
|
|
93
107
|
settings,
|
|
94
108
|
styles
|
|
@@ -131,6 +145,9 @@ function useBlockProps({
|
|
|
131
145
|
export default {
|
|
132
146
|
hasSupport: () => true,
|
|
133
147
|
attributeKeys: ['className'],
|
|
148
|
+
isMatch: ({
|
|
149
|
+
className
|
|
150
|
+
}) => getVariationMatches(className).length > 0,
|
|
134
151
|
useBlockProps
|
|
135
152
|
};
|
|
136
153
|
//# sourceMappingURL=block-style-variation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getBlockTypes","store","blocksStore","useSelect","useContext","useMemo","GlobalStylesContext","toStyles","getBlockSelectors","useStyleOverride","blockEditorStore","globalStylesDataKey","
|
|
1
|
+
{"version":3,"names":["getBlockTypes","store","blocksStore","useSelect","useContext","useMemo","GlobalStylesContext","toStyles","getBlockSelectors","useStyleOverride","blockEditorStore","globalStylesDataKey","VARIATION_PREFIX","getVariationMatches","className","split","reduce","matches","name","startsWith","match","slice","length","push","getVariationNameFromClass","registeredStyles","variation","some","style","useBlockSyleVariation","clientId","merged","mergedConfig","globalSettings","globalStyles","select","settings","getSettings","__experimentalFeatures","_mergedConfig$styles","_mergedConfig$setting","styles","variationStyles","blocks","variations","useBlockProps","getBlockStyles","variationClass","variationConfig","blockSelectors","hasBlockGapSupport","hasFallbackGapSupport","disableLayoutStyles","isTemplate","blockGap","blockStyles","layoutStyles","marginReset","presets","rootPadding","id","css","__unstableType","hasSupport","attributeKeys","isMatch"],"sources":["@wordpress/block-editor/src/hooks/block-style-variation.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockTypes, store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tGlobalStylesContext,\n\ttoStyles,\n\tgetBlockSelectors,\n} from '../components/global-styles';\nimport { useStyleOverride } from './utils';\nimport { store as blockEditorStore } from '../store';\nimport { globalStylesDataKey } from '../store/private-keys';\n\nconst VARIATION_PREFIX = 'is-style-';\n\nfunction getVariationMatches( className ) {\n\tif ( ! className ) {\n\t\treturn [];\n\t}\n\treturn className.split( /\\s+/ ).reduce( ( matches, name ) => {\n\t\tif ( name.startsWith( VARIATION_PREFIX ) ) {\n\t\t\tconst match = name.slice( VARIATION_PREFIX.length );\n\t\t\tif ( match !== 'default' ) {\n\t\t\t\tmatches.push( match );\n\t\t\t}\n\t\t}\n\t\treturn matches;\n\t}, [] );\n}\n\n/**\n * Get the first block style variation that has been registered from the class string.\n *\n * @param {string} className CSS class string for a block.\n * @param {Array} registeredStyles Currently registered block styles.\n *\n * @return {string|null} The name of the first registered variation.\n */\nfunction getVariationNameFromClass( className, registeredStyles = [] ) {\n\t// The global flag affects how capturing groups work in JS. So the regex\n\t// below will only return full CSS classes not just the variation name.\n\tconst matches = getVariationMatches( className );\n\n\tif ( ! matches ) {\n\t\treturn null;\n\t}\n\n\tfor ( const variation of matches ) {\n\t\tif ( registeredStyles.some( ( style ) => style.name === variation ) ) {\n\t\t\treturn variation;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction useBlockSyleVariation( name, variation, clientId ) {\n\t// Prefer global styles data in GlobalStylesContext, which are available\n\t// if in the site editor. Otherwise fall back to whatever is in the\n\t// editor settings and available in the post editor.\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\tconst { globalSettings, globalStyles } = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\treturn {\n\t\t\tglobalSettings: settings.__experimentalFeatures,\n\t\t\tglobalStyles: settings[ globalStylesDataKey ],\n\t\t};\n\t}, [] );\n\n\treturn useMemo( () => {\n\t\tconst styles = mergedConfig?.styles ?? globalStyles;\n\t\tconst variationStyles =\n\t\t\tstyles?.blocks?.[ name ]?.variations?.[ variation ];\n\n\t\treturn {\n\t\t\tsettings: mergedConfig?.settings ?? globalSettings,\n\t\t\t// The variation style data is all that is needed to generate\n\t\t\t// the styles for the current application to a block. The variation\n\t\t\t// name is updated to match the instance specific class name.\n\t\t\tstyles: {\n\t\t\t\tblocks: {\n\t\t\t\t\t[ name ]: {\n\t\t\t\t\t\tvariations: {\n\t\t\t\t\t\t\t[ `${ variation }-${ clientId }` ]: variationStyles,\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\t\tmergedConfig,\n\t\tglobalSettings,\n\t\tglobalStyles,\n\t\tvariation,\n\t\tclientId,\n\t\tname,\n\t] );\n}\n\n// Rather than leveraging `useInstanceId` here, the `clientId` is used.\n// This is so that the variation style override's ID is predictable\n// when the order of applied style variations changes.\nfunction useBlockProps( { name, className, clientId } ) {\n\tconst { getBlockStyles } = useSelect( blocksStore );\n\n\tconst registeredStyles = getBlockStyles( name );\n\tconst variation = getVariationNameFromClass( className, registeredStyles );\n\tconst variationClass = `${ VARIATION_PREFIX }${ variation }-${ clientId }`;\n\n\tconst { settings, styles } = useBlockSyleVariation(\n\t\tname,\n\t\tvariation,\n\t\tclientId\n\t);\n\n\tconst variationStyles = useMemo( () => {\n\t\tif ( ! variation ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst variationConfig = { settings, styles };\n\t\tconst blockSelectors = getBlockSelectors(\n\t\t\tgetBlockTypes(),\n\t\t\tgetBlockStyles,\n\t\t\tclientId\n\t\t);\n\t\tconst hasBlockGapSupport = false;\n\t\tconst hasFallbackGapSupport = true;\n\t\tconst disableLayoutStyles = true;\n\t\tconst isTemplate = true;\n\n\t\treturn toStyles(\n\t\t\tvariationConfig,\n\t\t\tblockSelectors,\n\t\t\thasBlockGapSupport,\n\t\t\thasFallbackGapSupport,\n\t\t\tdisableLayoutStyles,\n\t\t\tisTemplate,\n\t\t\t{\n\t\t\t\tblockGap: false,\n\t\t\t\tblockStyles: true,\n\t\t\t\tlayoutStyles: false,\n\t\t\t\tmarginReset: false,\n\t\t\t\tpresets: false,\n\t\t\t\trootPadding: false,\n\t\t\t}\n\t\t);\n\t}, [ variation, settings, styles, getBlockStyles, clientId ] );\n\n\tuseStyleOverride( {\n\t\tid: `variation-${ clientId }`,\n\t\tcss: variationStyles,\n\t\t__unstableType: 'variation',\n\t\t// The clientId will be stored with the override and used to ensure\n\t\t// the order of overrides matches the order of blocks so that the\n\t\t// correct CSS cascade is maintained.\n\t\tclientId,\n\t} );\n\n\treturn variation ? { className: variationClass } : {};\n}\n\nexport default {\n\thasSupport: () => true,\n\tattributeKeys: [ 'className' ],\n\tisMatch: ( { className } ) => getVariationMatches( className ).length > 0,\n\tuseBlockProps,\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -90,6 +90,7 @@ export const withBlockBindingSupport = createHigherOrderComponent(BlockEdit => p
|
|
|
90
90
|
clientId,
|
|
91
91
|
context
|
|
92
92
|
} = props;
|
|
93
|
+
const hasPatternOverridesDefaultBinding = props.attributes.metadata?.bindings?.[DEFAULT_ATTRIBUTE]?.source === 'core/pattern-overrides';
|
|
93
94
|
const bindings = useMemo(() => replacePatternOverrideDefaultBindings(name, props.attributes.metadata?.bindings), [props.attributes.metadata?.bindings, name]);
|
|
94
95
|
const boundAttributes = useSelect(() => {
|
|
95
96
|
if (!bindings) {
|
|
@@ -173,11 +174,15 @@ export const withBlockBindingSupport = createHigherOrderComponent(BlockEdit => p
|
|
|
173
174
|
}
|
|
174
175
|
}
|
|
175
176
|
}
|
|
176
|
-
|
|
177
|
+
|
|
178
|
+
// Only apply normal attribute updates to blocks
|
|
179
|
+
// that have partial bindings. Currently this is
|
|
180
|
+
// only skipped for pattern overrides sources.
|
|
181
|
+
if (!hasPatternOverridesDefaultBinding && Object.keys(keptAttributes).length) {
|
|
177
182
|
setAttributes(keptAttributes);
|
|
178
183
|
}
|
|
179
184
|
});
|
|
180
|
-
}, [registry, bindings, name, clientId, context, setAttributes, sources]);
|
|
185
|
+
}, [registry, bindings, name, clientId, context, setAttributes, sources, hasPatternOverridesDefaultBinding]);
|
|
181
186
|
return /*#__PURE__*/_jsx(_Fragment, {
|
|
182
187
|
children: /*#__PURE__*/_jsx(BlockEdit, {
|
|
183
188
|
...props,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["store","blocksStore","createHigherOrderComponent","useRegistry","useSelect","useCallback","useMemo","addFilter","unlock","jsx","_jsx","Fragment","_Fragment","BLOCK_BINDINGS_ALLOWED_BLOCKS","DEFAULT_ATTRIBUTE","replacePatternOverrideDefaultBindings","blockName","bindings","source","supportedAttributes","bindingsWithDefaults","attributeName","bindingSource","canBindBlock","canBindAttribute","includes","withBlockBindingSupport","BlockEdit","props","registry","sources","select","getAllBlockBindingsSources","name","clientId","context","attributes","metadata","boundAttributes","boundAttribute","Object","entries","getValue","args","undefined","getPlaceholder","setAttributes","_setAttributes","nextAttributes","batch","keptAttributes","updatesBySource","Map","newValue","binding","setValue","setValues","set","get","size","value","keys","length","children","shimAttributeSource","settings","edit"],"sources":["@wordpress/block-editor/src/hooks/use-bindings-attributes.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\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': [ 'id', 'url', 'title', 'alt' ],\n\t'core/button': [ 'url', 'text', 'linkTarget', 'rel' ],\n};\n\nconst DEFAULT_ATTRIBUTE = '__default';\n\n/**\n * Returns the bindings with the `__default` binding for pattern overrides\n * replaced with the full-set of supported attributes. e.g.:\n *\n * bindings passed in: `{ __default: { source: 'core/pattern-overrides' } }`\n * bindings returned: `{ content: { source: 'core/pattern-overrides' } }`\n *\n * @param {string} blockName The block name (e.g. 'core/paragraph').\n * @param {Object} bindings A block's bindings from the metadata attribute.\n *\n * @return {Object} The bindings with default replaced for pattern overrides.\n */\nfunction replacePatternOverrideDefaultBindings( blockName, bindings ) {\n\t// The `__default` binding currently only works for pattern overrides.\n\tif (\n\t\tbindings?.[ DEFAULT_ATTRIBUTE ]?.source === 'core/pattern-overrides'\n\t) {\n\t\tconst supportedAttributes = BLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ];\n\t\tconst bindingsWithDefaults = {};\n\t\tfor ( const attributeName of supportedAttributes ) {\n\t\t\t// If the block has mixed binding sources, retain any non pattern override bindings.\n\t\t\tconst bindingSource = bindings[ attributeName ]\n\t\t\t\t? bindings[ attributeName ]\n\t\t\t\t: { source: 'core/pattern-overrides' };\n\t\t\tbindingsWithDefaults[ attributeName ] = bindingSource;\n\t\t}\n\n\t\treturn bindingsWithDefaults;\n\t}\n\n\treturn bindings;\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\nexport const withBlockBindingSupport = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst registry = useRegistry();\n\t\tconst sources = useSelect( ( select ) =>\n\t\t\tunlock( select( blocksStore ) ).getAllBlockBindingsSources()\n\t\t);\n\t\tconst { name, clientId, context } = props;\n\t\tconst bindings = useMemo(\n\t\t\t() =>\n\t\t\t\treplacePatternOverrideDefaultBindings(\n\t\t\t\t\tname,\n\t\t\t\t\tprops.attributes.metadata?.bindings\n\t\t\t\t),\n\t\t\t[ props.attributes.metadata?.bindings, name ]\n\t\t);\n\t\tconst boundAttributes = useSelect( () => {\n\t\t\tif ( ! bindings ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst attributes = {};\n\n\t\t\tfor ( const [ attributeName, boundAttribute ] of Object.entries(\n\t\t\t\tbindings\n\t\t\t) ) {\n\t\t\t\tconst source = sources[ boundAttribute.source ];\n\t\t\t\tif (\n\t\t\t\t\t! source?.getValue ||\n\t\t\t\t\t! canBindAttribute( name, attributeName )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst args = {\n\t\t\t\t\tregistry,\n\t\t\t\t\tcontext,\n\t\t\t\t\tclientId,\n\t\t\t\t\tattributeName,\n\t\t\t\t\targs: boundAttribute.args,\n\t\t\t\t};\n\n\t\t\t\tattributes[ attributeName ] = source.getValue( args );\n\n\t\t\t\tif ( attributes[ attributeName ] === undefined ) {\n\t\t\t\t\tif ( attributeName === 'url' ) {\n\t\t\t\t\t\tattributes[ attributeName ] = null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattributes[ attributeName ] =\n\t\t\t\t\t\t\tsource.getPlaceholder?.( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn attributes;\n\t\t}, [ bindings, name, clientId, context, registry, sources ] );\n\n\t\tconst { setAttributes } = props;\n\n\t\tconst _setAttributes = useCallback(\n\t\t\t( nextAttributes ) => {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tif ( ! bindings ) {\n\t\t\t\t\t\tsetAttributes( nextAttributes );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst keptAttributes = { ...nextAttributes };\n\t\t\t\t\tconst updatesBySource = new Map();\n\n\t\t\t\t\t// Loop only over the updated attributes to avoid modifying the bound ones that haven't changed.\n\t\t\t\t\tfor ( const [ attributeName, newValue ] of Object.entries(\n\t\t\t\t\t\tkeptAttributes\n\t\t\t\t\t) ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! bindings[ attributeName ] ||\n\t\t\t\t\t\t\t! canBindAttribute( name, attributeName )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst binding = bindings[ attributeName ];\n\t\t\t\t\t\tconst source = sources[ binding?.source ];\n\t\t\t\t\t\tif ( ! source?.setValue && ! source?.setValues ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tupdatesBySource.set( source, {\n\t\t\t\t\t\t\t...updatesBySource.get( source ),\n\t\t\t\t\t\t\t[ attributeName ]: newValue,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tdelete keptAttributes[ attributeName ];\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( updatesBySource.size ) {\n\t\t\t\t\t\tfor ( const [\n\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t] of updatesBySource ) {\n\t\t\t\t\t\t\tif ( source.setValues ) {\n\t\t\t\t\t\t\t\tsource.setValues( {\n\t\t\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfor ( const [\n\t\t\t\t\t\t\t\t\tattributeName,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t] of Object.entries( attributes ) ) {\n\t\t\t\t\t\t\t\t\tconst binding = bindings[ attributeName ];\n\t\t\t\t\t\t\t\t\tsource.setValue( {\n\t\t\t\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t\t\tattributeName,\n\t\t\t\t\t\t\t\t\t\targs: binding.args,\n\t\t\t\t\t\t\t\t\t\tvalue,\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}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( Object.keys( keptAttributes ).length ) {\n\t\t\t\t\t\tsetAttributes( keptAttributes );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\t[\n\t\t\t\tregistry,\n\t\t\t\tbindings,\n\t\t\t\tname,\n\t\t\t\tclientId,\n\t\t\t\tcontext,\n\t\t\t\tsetAttributes,\n\t\t\t\tsources,\n\t\t\t]\n\t\t);\n\n\t\treturn (\n\t\t\t<>\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\tsetAttributes={ _setAttributes }\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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["store","blocksStore","createHigherOrderComponent","useRegistry","useSelect","useCallback","useMemo","addFilter","unlock","jsx","_jsx","Fragment","_Fragment","BLOCK_BINDINGS_ALLOWED_BLOCKS","DEFAULT_ATTRIBUTE","replacePatternOverrideDefaultBindings","blockName","bindings","source","supportedAttributes","bindingsWithDefaults","attributeName","bindingSource","canBindBlock","canBindAttribute","includes","withBlockBindingSupport","BlockEdit","props","registry","sources","select","getAllBlockBindingsSources","name","clientId","context","hasPatternOverridesDefaultBinding","attributes","metadata","boundAttributes","boundAttribute","Object","entries","getValue","args","undefined","getPlaceholder","setAttributes","_setAttributes","nextAttributes","batch","keptAttributes","updatesBySource","Map","newValue","binding","setValue","setValues","set","get","size","value","keys","length","children","shimAttributeSource","settings","edit"],"sources":["@wordpress/block-editor/src/hooks/use-bindings-attributes.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\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': [ 'id', 'url', 'title', 'alt' ],\n\t'core/button': [ 'url', 'text', 'linkTarget', 'rel' ],\n};\n\nconst DEFAULT_ATTRIBUTE = '__default';\n\n/**\n * Returns the bindings with the `__default` binding for pattern overrides\n * replaced with the full-set of supported attributes. e.g.:\n *\n * bindings passed in: `{ __default: { source: 'core/pattern-overrides' } }`\n * bindings returned: `{ content: { source: 'core/pattern-overrides' } }`\n *\n * @param {string} blockName The block name (e.g. 'core/paragraph').\n * @param {Object} bindings A block's bindings from the metadata attribute.\n *\n * @return {Object} The bindings with default replaced for pattern overrides.\n */\nfunction replacePatternOverrideDefaultBindings( blockName, bindings ) {\n\t// The `__default` binding currently only works for pattern overrides.\n\tif (\n\t\tbindings?.[ DEFAULT_ATTRIBUTE ]?.source === 'core/pattern-overrides'\n\t) {\n\t\tconst supportedAttributes = BLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ];\n\t\tconst bindingsWithDefaults = {};\n\t\tfor ( const attributeName of supportedAttributes ) {\n\t\t\t// If the block has mixed binding sources, retain any non pattern override bindings.\n\t\t\tconst bindingSource = bindings[ attributeName ]\n\t\t\t\t? bindings[ attributeName ]\n\t\t\t\t: { source: 'core/pattern-overrides' };\n\t\t\tbindingsWithDefaults[ attributeName ] = bindingSource;\n\t\t}\n\n\t\treturn bindingsWithDefaults;\n\t}\n\n\treturn bindings;\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\nexport const withBlockBindingSupport = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst registry = useRegistry();\n\t\tconst sources = useSelect( ( select ) =>\n\t\t\tunlock( select( blocksStore ) ).getAllBlockBindingsSources()\n\t\t);\n\t\tconst { name, clientId, context } = props;\n\t\tconst hasPatternOverridesDefaultBinding =\n\t\t\tprops.attributes.metadata?.bindings?.[ DEFAULT_ATTRIBUTE ]\n\t\t\t\t?.source === 'core/pattern-overrides';\n\t\tconst bindings = useMemo(\n\t\t\t() =>\n\t\t\t\treplacePatternOverrideDefaultBindings(\n\t\t\t\t\tname,\n\t\t\t\t\tprops.attributes.metadata?.bindings\n\t\t\t\t),\n\t\t\t[ props.attributes.metadata?.bindings, name ]\n\t\t);\n\t\tconst boundAttributes = useSelect( () => {\n\t\t\tif ( ! bindings ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst attributes = {};\n\n\t\t\tfor ( const [ attributeName, boundAttribute ] of Object.entries(\n\t\t\t\tbindings\n\t\t\t) ) {\n\t\t\t\tconst source = sources[ boundAttribute.source ];\n\t\t\t\tif (\n\t\t\t\t\t! source?.getValue ||\n\t\t\t\t\t! canBindAttribute( name, attributeName )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst args = {\n\t\t\t\t\tregistry,\n\t\t\t\t\tcontext,\n\t\t\t\t\tclientId,\n\t\t\t\t\tattributeName,\n\t\t\t\t\targs: boundAttribute.args,\n\t\t\t\t};\n\n\t\t\t\tattributes[ attributeName ] = source.getValue( args );\n\n\t\t\t\tif ( attributes[ attributeName ] === undefined ) {\n\t\t\t\t\tif ( attributeName === 'url' ) {\n\t\t\t\t\t\tattributes[ attributeName ] = null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattributes[ attributeName ] =\n\t\t\t\t\t\t\tsource.getPlaceholder?.( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn attributes;\n\t\t}, [ bindings, name, clientId, context, registry, sources ] );\n\n\t\tconst { setAttributes } = props;\n\n\t\tconst _setAttributes = useCallback(\n\t\t\t( nextAttributes ) => {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tif ( ! bindings ) {\n\t\t\t\t\t\tsetAttributes( nextAttributes );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst keptAttributes = { ...nextAttributes };\n\t\t\t\t\tconst updatesBySource = new Map();\n\n\t\t\t\t\t// Loop only over the updated attributes to avoid modifying the bound ones that haven't changed.\n\t\t\t\t\tfor ( const [ attributeName, newValue ] of Object.entries(\n\t\t\t\t\t\tkeptAttributes\n\t\t\t\t\t) ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! bindings[ attributeName ] ||\n\t\t\t\t\t\t\t! canBindAttribute( name, attributeName )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst binding = bindings[ attributeName ];\n\t\t\t\t\t\tconst source = sources[ binding?.source ];\n\t\t\t\t\t\tif ( ! source?.setValue && ! source?.setValues ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tupdatesBySource.set( source, {\n\t\t\t\t\t\t\t...updatesBySource.get( source ),\n\t\t\t\t\t\t\t[ attributeName ]: newValue,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tdelete keptAttributes[ attributeName ];\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( updatesBySource.size ) {\n\t\t\t\t\t\tfor ( const [\n\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t] of updatesBySource ) {\n\t\t\t\t\t\t\tif ( source.setValues ) {\n\t\t\t\t\t\t\t\tsource.setValues( {\n\t\t\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfor ( const [\n\t\t\t\t\t\t\t\t\tattributeName,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t] of Object.entries( attributes ) ) {\n\t\t\t\t\t\t\t\t\tconst binding = bindings[ attributeName ];\n\t\t\t\t\t\t\t\t\tsource.setValue( {\n\t\t\t\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t\t\tattributeName,\n\t\t\t\t\t\t\t\t\t\targs: binding.args,\n\t\t\t\t\t\t\t\t\t\tvalue,\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}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only apply normal attribute updates to blocks\n\t\t\t\t\t// that have partial bindings. Currently this is\n\t\t\t\t\t// only skipped for pattern overrides sources.\n\t\t\t\t\tif (\n\t\t\t\t\t\t! hasPatternOverridesDefaultBinding &&\n\t\t\t\t\t\tObject.keys( keptAttributes ).length\n\t\t\t\t\t) {\n\t\t\t\t\t\tsetAttributes( keptAttributes );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\t[\n\t\t\t\tregistry,\n\t\t\t\tbindings,\n\t\t\t\tname,\n\t\t\t\tclientId,\n\t\t\t\tcontext,\n\t\t\t\tsetAttributes,\n\t\t\t\tsources,\n\t\t\t\thasPatternOverridesDefaultBinding,\n\t\t\t]\n\t\t);\n\n\t\treturn (\n\t\t\t<>\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\tsetAttributes={ _setAttributes }\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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","ignoreList":[]}
|
|
@@ -333,7 +333,8 @@ export function createBlockListBlockFilter(features) {
|
|
|
333
333
|
const {
|
|
334
334
|
hasSupport,
|
|
335
335
|
attributeKeys = [],
|
|
336
|
-
useBlockProps
|
|
336
|
+
useBlockProps,
|
|
337
|
+
isMatch
|
|
337
338
|
} = feature;
|
|
338
339
|
const neededProps = {};
|
|
339
340
|
for (const key of attributeKeys) {
|
|
@@ -344,7 +345,7 @@ export function createBlockListBlockFilter(features) {
|
|
|
344
345
|
if (
|
|
345
346
|
// Skip rendering if none of the needed attributes are
|
|
346
347
|
// set.
|
|
347
|
-
!Object.keys(neededProps).length || !hasSupport(props.name)) {
|
|
348
|
+
!Object.keys(neededProps).length || !hasSupport(props.name) || isMatch && !isMatch(neededProps)) {
|
|
348
349
|
return null;
|
|
349
350
|
}
|
|
350
351
|
return /*#__PURE__*/_jsx(BlockPropsPure
|