@wordpress/block-editor 14.3.7 → 14.3.9
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/README.md +0 -8
- package/build/components/block-tools/zoom-out-mode-inserters.js +9 -0
- package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
- package/build/components/inner-blocks/index.js +9 -4
- package/build/components/inner-blocks/index.js.map +1 -1
- package/build/components/inserter/menu.js +2 -1
- package/build/components/inserter/menu.js.map +1 -1
- package/build/components/spacing-sizes-control/linked-button.js +1 -5
- package/build/components/spacing-sizes-control/linked-button.js.map +1 -1
- package/build/components/use-block-drop-zone/index.js +1 -1
- package/build/components/use-block-drop-zone/index.js.map +1 -1
- package/build/index.js +0 -7
- package/build/index.js.map +1 -1
- package/build/private-apis.js +1 -0
- package/build/private-apis.js.map +1 -1
- package/build/utils/dom.js +16 -1
- package/build/utils/dom.js.map +1 -1
- package/build-module/components/block-tools/zoom-out-mode-inserters.js +9 -0
- package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
- package/build-module/components/inner-blocks/index.js +9 -4
- package/build-module/components/inner-blocks/index.js.map +1 -1
- package/build-module/components/inserter/menu.js +3 -2
- package/build-module/components/inserter/menu.js.map +1 -1
- package/build-module/components/spacing-sizes-control/linked-button.js +2 -6
- package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -1
- package/build-module/components/use-block-drop-zone/index.js +1 -1
- package/build-module/components/use-block-drop-zone/index.js.map +1 -1
- package/build-module/index.js +1 -1
- package/build-module/index.js.map +1 -1
- package/build-module/private-apis.js +2 -1
- package/build-module/private-apis.js.map +1 -1
- package/build-module/utils/dom.js +16 -1
- package/build-module/utils/dom.js.map +1 -1
- package/build-style/content-rtl.css +0 -1
- package/build-style/content.css +0 -1
- package/build-types/utils/dom.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/components/block-tools/zoom-out-mode-inserters.js +12 -0
- package/src/components/iframe/content.scss +0 -1
- package/src/components/inner-blocks/index.js +11 -4
- package/src/components/inserter/menu.js +3 -2
- package/src/components/spacing-sizes-control/linked-button.js +2 -12
- package/src/components/use-block-drop-zone/index.js +1 -1
- package/src/index.js +0 -1
- package/src/private-apis.js +2 -0
- package/src/utils/dom.js +22 -2
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useDispatch","useSelect","useRegistry","useCallback","useState","useThrottle","__experimentalUseDropZone","useDropZone","isRTL","isUnmodifiedDefaultBlock","getIsUnmodifiedDefaultBlock","store","blocksStore","useOnBlockDrop","getDistanceToNearestEdge","isPointContainedByRect","isPointWithinTopAndBottomBoundariesOfRect","blockEditorStore","unlock","THRESHOLD_DISTANCE","MINIMUM_HEIGHT_FOR_THRESHOLD","MINIMUM_WIDTH_FOR_THRESHOLD","getDropTargetPosition","blocksData","position","orientation","options","allowedEdges","nearestIndex","insertPosition","minDistance","Infinity","targetBlockIndex","nearestSide","dropZoneElement","parentBlockOrientation","rootBlockIndex","rect","getBoundingClientRect","distance","edge","height","isRightToLeft","width","forEach","blockIndex","blockOrientation","sideDistance","sideEdge","isPointInsideRect","adjacentIndex","isNearestBlockUnmodifiedDefaultBlock","isAdjacentBlockUnmodifiedDefaultBlock","insertionIndex","isDropTargetValid","getBlockType","allowedBlocks","draggedBlockNames","targetBlockName","areBlocksAllowed","allowedBlockNames","map","name","every","includes","draggedBlockTypes","targetMatchesDraggedBlockParents","block","allowedParentName","parent","isInsertionPoint","targetToCheck","ownerDocument","defaultView","HTMLElement","dataset","useBlockDropZone","rootClientId","targetRootClientId","parentClientId","parentBlockClientId","isDisabled","registry","dropTarget","setDropTarget","index","operation","getBlockVariations","getGroupingBlockName","canInsertBlockType","getBlockListSettings","getBlocks","getBlockIndex","getDraggedBlockClientIds","getBlockNamesByClientId","getAllowedBlocks","isDragging","isGroupable","isZoomOutMode","getSectionRootClientId","showInsertionPoint","hideInsertionPoint","startDragging","stopDragging","onBlockDrop","throttled","event","isBlockDroppingAllowed","sectionRootClientId","blocks","length","batch","clientId","getElementById","dropTargetPosition","x","clientX","y","clientY","undefined","targetIndex","targetBlock","areAllImages","canInsertGalleryBlock","areGroupableBlocks","groupBlockVariations","canInsertRow","find","insertionPointClientId","onDrop","onDragOver","currentTarget","onDragLeave","relatedTarget","target","cancel","onDragEnd"],"sources":["@wordpress/block-editor/src/components/use-block-drop-zone/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tuseThrottle,\n\t__experimentalUseDropZone as useDropZone,\n} from '@wordpress/compose';\nimport { isRTL } from '@wordpress/i18n';\nimport {\n\tisUnmodifiedDefaultBlock as getIsUnmodifiedDefaultBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useOnBlockDrop from '../use-on-block-drop';\nimport {\n\tgetDistanceToNearestEdge,\n\tisPointContainedByRect,\n\tisPointWithinTopAndBottomBoundariesOfRect,\n} from '../../utils/math';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst THRESHOLD_DISTANCE = 30;\nconst MINIMUM_HEIGHT_FOR_THRESHOLD = 120;\nconst MINIMUM_WIDTH_FOR_THRESHOLD = 120;\n\n/** @typedef {import('../../utils/math').WPPoint} WPPoint */\n/** @typedef {import('../use-on-block-drop/types').WPDropOperation} WPDropOperation */\n\n/**\n * The orientation of a block list.\n *\n * @typedef {'horizontal'|'vertical'|undefined} WPBlockListOrientation\n */\n\n/**\n * The insert position when dropping a block.\n *\n * @typedef {'before'|'after'} WPInsertPosition\n */\n\n/**\n * @typedef {Object} WPBlockData\n * @property {boolean} isUnmodifiedDefaultBlock Is the block unmodified default block.\n * @property {() => DOMRect} getBoundingClientRect Get the bounding client rect of the block.\n * @property {number} blockIndex The index of the block.\n */\n\n/**\n * Get the drop target position from a given drop point and the orientation.\n *\n * @param {WPBlockData[]} blocksData The block data list.\n * @param {WPPoint} position The position of the item being dragged.\n * @param {WPBlockListOrientation} orientation The orientation of the block list.\n * @param {Object} options Additional options.\n * @return {[number, WPDropOperation]} The drop target position.\n */\nexport function getDropTargetPosition(\n\tblocksData,\n\tposition,\n\torientation = 'vertical',\n\toptions = {}\n) {\n\tconst allowedEdges =\n\t\torientation === 'horizontal'\n\t\t\t? [ 'left', 'right' ]\n\t\t\t: [ 'top', 'bottom' ];\n\n\tlet nearestIndex = 0;\n\tlet insertPosition = 'before';\n\tlet minDistance = Infinity;\n\tlet targetBlockIndex = null;\n\tlet nearestSide = 'right';\n\n\tconst {\n\t\tdropZoneElement,\n\t\tparentBlockOrientation,\n\t\trootBlockIndex = 0,\n\t} = options;\n\n\t// Allow before/after when dragging over the top/bottom edges of the drop zone.\n\tif ( dropZoneElement && parentBlockOrientation !== 'horizontal' ) {\n\t\tconst rect = dropZoneElement.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge( position, rect, [\n\t\t\t'top',\n\t\t\t'bottom',\n\t\t] );\n\n\t\t// If dragging over the top or bottom of the drop zone, insert the block\n\t\t// before or after the parent block. This only applies to blocks that use\n\t\t// a drop zone element, typically container blocks such as Group or Cover.\n\t\tif (\n\t\t\trect.height > MINIMUM_HEIGHT_FOR_THRESHOLD &&\n\t\t\tdistance < THRESHOLD_DISTANCE\n\t\t) {\n\t\t\tif ( edge === 'top' ) {\n\t\t\t\treturn [ rootBlockIndex, 'before' ];\n\t\t\t}\n\t\t\tif ( edge === 'bottom' ) {\n\t\t\t\treturn [ rootBlockIndex + 1, 'after' ];\n\t\t\t}\n\t\t}\n\t}\n\n\tconst isRightToLeft = isRTL();\n\n\t// Allow before/after when dragging over the left/right edges of the drop zone.\n\tif ( dropZoneElement && parentBlockOrientation === 'horizontal' ) {\n\t\tconst rect = dropZoneElement.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge( position, rect, [\n\t\t\t'left',\n\t\t\t'right',\n\t\t] );\n\n\t\t// If dragging over the left or right of the drop zone, insert the block\n\t\t// before or after the parent block. This only applies to blocks that use\n\t\t// a drop zone element, typically container blocks such as Group.\n\t\tif (\n\t\t\trect.width > MINIMUM_WIDTH_FOR_THRESHOLD &&\n\t\t\tdistance < THRESHOLD_DISTANCE\n\t\t) {\n\t\t\tif (\n\t\t\t\t( isRightToLeft && edge === 'right' ) ||\n\t\t\t\t( ! isRightToLeft && edge === 'left' )\n\t\t\t) {\n\t\t\t\treturn [ rootBlockIndex, 'before' ];\n\t\t\t}\n\t\t\tif (\n\t\t\t\t( isRightToLeft && edge === 'left' ) ||\n\t\t\t\t( ! isRightToLeft && edge === 'right' )\n\t\t\t) {\n\t\t\t\treturn [ rootBlockIndex + 1, 'after' ];\n\t\t\t}\n\t\t}\n\t}\n\n\tblocksData.forEach(\n\t\t( {\n\t\t\tisUnmodifiedDefaultBlock,\n\t\t\tgetBoundingClientRect,\n\t\t\tblockIndex,\n\t\t\tblockOrientation,\n\t\t} ) => {\n\t\t\tconst rect = getBoundingClientRect();\n\n\t\t\tlet [ distance, edge ] = getDistanceToNearestEdge(\n\t\t\t\tposition,\n\t\t\t\trect,\n\t\t\t\tallowedEdges\n\t\t\t);\n\t\t\t// If the the point is close to a side, prioritize that side.\n\t\t\tconst [ sideDistance, sideEdge ] = getDistanceToNearestEdge(\n\t\t\t\tposition,\n\t\t\t\trect,\n\t\t\t\t[ 'left', 'right' ]\n\t\t\t);\n\n\t\t\tconst isPointInsideRect = isPointContainedByRect( position, rect );\n\n\t\t\t// Prioritize the element if the point is inside of an unmodified default block.\n\t\t\tif ( isUnmodifiedDefaultBlock && isPointInsideRect ) {\n\t\t\t\tdistance = 0;\n\t\t\t} else if (\n\t\t\t\torientation === 'vertical' &&\n\t\t\t\tblockOrientation !== 'horizontal' &&\n\t\t\t\t( ( isPointInsideRect && sideDistance < THRESHOLD_DISTANCE ) ||\n\t\t\t\t\t( ! isPointInsideRect &&\n\t\t\t\t\t\tisPointWithinTopAndBottomBoundariesOfRect(\n\t\t\t\t\t\t\tposition,\n\t\t\t\t\t\t\trect\n\t\t\t\t\t\t) ) )\n\t\t\t) {\n\t\t\t\t/**\n\t\t\t\t * This condition should only apply when the layout is vertical (otherwise there's\n\t\t\t\t * no need to create a Row) and dropzones should only activate when the block is\n\t\t\t\t * either within and close to the sides of the target block or on its outer sides.\n\t\t\t\t */\n\t\t\t\ttargetBlockIndex = blockIndex;\n\t\t\t\tnearestSide = sideEdge;\n\t\t\t}\n\n\t\t\tif ( distance < minDistance ) {\n\t\t\t\t// Where the dropped block will be inserted on the nearest block.\n\t\t\t\tinsertPosition =\n\t\t\t\t\tedge === 'bottom' ||\n\t\t\t\t\t( ! isRightToLeft && edge === 'right' ) ||\n\t\t\t\t\t( isRightToLeft && edge === 'left' )\n\t\t\t\t\t\t? 'after'\n\t\t\t\t\t\t: 'before';\n\n\t\t\t\t// Update the currently known best candidate.\n\t\t\t\tminDistance = distance;\n\t\t\t\tnearestIndex = blockIndex;\n\t\t\t}\n\t\t}\n\t);\n\n\tconst adjacentIndex =\n\t\tnearestIndex + ( insertPosition === 'after' ? 1 : -1 );\n\tconst isNearestBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ nearestIndex ]?.isUnmodifiedDefaultBlock;\n\tconst isAdjacentBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ adjacentIndex ]?.isUnmodifiedDefaultBlock;\n\n\t// If the target index is set then group with the block at that index.\n\tif ( targetBlockIndex !== null ) {\n\t\treturn [ targetBlockIndex, 'group', nearestSide ];\n\t}\n\t// If both blocks are not unmodified default blocks then just insert between them.\n\tif (\n\t\t! isNearestBlockUnmodifiedDefaultBlock &&\n\t\t! isAdjacentBlockUnmodifiedDefaultBlock\n\t) {\n\t\t// If the user is dropping to the trailing edge of the block\n\t\t// add 1 to the index to represent dragging after.\n\t\tconst insertionIndex =\n\t\t\tinsertPosition === 'after' ? nearestIndex + 1 : nearestIndex;\n\t\treturn [ insertionIndex, 'insert' ];\n\t}\n\n\t// Otherwise, replace the nearest unmodified default block.\n\treturn [\n\t\tisNearestBlockUnmodifiedDefaultBlock ? nearestIndex : adjacentIndex,\n\t\t'replace',\n\t];\n}\n\n/**\n * Check if the dragged blocks can be dropped on the target.\n * @param {Function} getBlockType\n * @param {Object[]} allowedBlocks\n * @param {string[]} draggedBlockNames\n * @param {string} targetBlockName\n * @return {boolean} Whether the dragged blocks can be dropped on the target.\n */\nexport function isDropTargetValid(\n\tgetBlockType,\n\tallowedBlocks,\n\tdraggedBlockNames,\n\ttargetBlockName\n) {\n\t// At root level allowedBlocks is undefined and all blocks are allowed.\n\t// Otherwise, check if all dragged blocks are allowed.\n\tlet areBlocksAllowed = true;\n\tif ( allowedBlocks ) {\n\t\tconst allowedBlockNames = allowedBlocks?.map( ( { name } ) => name );\n\n\t\tareBlocksAllowed = draggedBlockNames.every( ( name ) =>\n\t\t\tallowedBlockNames?.includes( name )\n\t\t);\n\t}\n\n\t// Work out if dragged blocks have an allowed parent and if so\n\t// check target block matches the allowed parent.\n\tconst draggedBlockTypes = draggedBlockNames.map( ( name ) =>\n\t\tgetBlockType( name )\n\t);\n\tconst targetMatchesDraggedBlockParents = draggedBlockTypes.every(\n\t\t( block ) => {\n\t\t\tconst [ allowedParentName ] = block?.parent || [];\n\t\t\tif ( ! allowedParentName ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn allowedParentName === targetBlockName;\n\t\t}\n\t);\n\n\treturn areBlocksAllowed && targetMatchesDraggedBlockParents;\n}\n\n/**\n * Checks if the given element is an insertion point.\n *\n * @param {EventTarget|null} targetToCheck - The element to check.\n * @param {Document} ownerDocument - The owner document of the element.\n * @return {boolean} True if the element is a insertion point, false otherwise.\n */\nfunction isInsertionPoint( targetToCheck, ownerDocument ) {\n\tconst { defaultView } = ownerDocument;\n\n\treturn !! (\n\t\tdefaultView &&\n\t\ttargetToCheck instanceof defaultView.HTMLElement &&\n\t\ttargetToCheck.dataset.isInsertionPoint\n\t);\n}\n\n/**\n * @typedef {Object} WPBlockDropZoneConfig\n * @property {?HTMLElement} dropZoneElement Optional element to be used as the drop zone.\n * @property {string} rootClientId The root client id for the block list.\n */\n\n/**\n * A React hook that can be used to make a block list handle drag and drop.\n *\n * @param {WPBlockDropZoneConfig} dropZoneConfig configuration data for the drop zone.\n */\nexport default function useBlockDropZone( {\n\tdropZoneElement,\n\t// An undefined value represents a top-level block. Default to an empty\n\t// string for this so that `targetRootClientId` can be easily compared to\n\t// values returned by the `getRootBlockClientId` selector, which also uses\n\t// an empty string to represent top-level blocks.\n\trootClientId: targetRootClientId = '',\n\tparentClientId: parentBlockClientId = '',\n\tisDisabled = false,\n} = {} ) {\n\tconst registry = useRegistry();\n\tconst [ dropTarget, setDropTarget ] = useState( {\n\t\tindex: null,\n\t\toperation: 'insert',\n\t} );\n\n\tconst { getBlockType, getBlockVariations, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockListSettings,\n\t\tgetBlocks,\n\t\tgetBlockIndex,\n\t\tgetDraggedBlockClientIds,\n\t\tgetBlockNamesByClientId,\n\t\tgetAllowedBlocks,\n\t\tisDragging,\n\t\tisGroupable,\n\t\tisZoomOutMode,\n\t\tgetSectionRootClientId,\n\t} = unlock( useSelect( blockEditorStore ) );\n\tconst {\n\t\tshowInsertionPoint,\n\t\thideInsertionPoint,\n\t\tstartDragging,\n\t\tstopDragging,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst onBlockDrop = useOnBlockDrop(\n\t\tdropTarget.operation === 'before' || dropTarget.operation === 'after'\n\t\t\t? parentBlockClientId\n\t\t\t: targetRootClientId,\n\t\tdropTarget.index,\n\t\t{\n\t\t\toperation: dropTarget.operation,\n\t\t\tnearestSide: dropTarget.nearestSide,\n\t\t}\n\t);\n\tconst throttled = useThrottle(\n\t\tuseCallback(\n\t\t\t( event, ownerDocument ) => {\n\t\t\t\tif ( ! isDragging() ) {\n\t\t\t\t\t// When dragging from the desktop, no drag start event is fired.\n\t\t\t\t\t// So, ensure that the drag state is set when the user drags over a drop zone.\n\t\t\t\t\tstartDragging();\n\t\t\t\t}\n\t\t\t\tconst allowedBlocks = getAllowedBlocks( targetRootClientId );\n\t\t\t\tconst targetBlockName = getBlockNamesByClientId( [\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t] )[ 0 ];\n\n\t\t\t\tconst draggedBlockNames = getBlockNamesByClientId(\n\t\t\t\t\tgetDraggedBlockClientIds()\n\t\t\t\t);\n\t\t\t\tconst isBlockDroppingAllowed = isDropTargetValid(\n\t\t\t\t\tgetBlockType,\n\t\t\t\t\tallowedBlocks,\n\t\t\t\t\tdraggedBlockNames,\n\t\t\t\t\ttargetBlockName\n\t\t\t\t);\n\n\t\t\t\tif ( ! isBlockDroppingAllowed ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst sectionRootClientId = getSectionRootClientId();\n\n\t\t\t\t// In Zoom Out mode, if the target is not the section root provided by settings then\n\t\t\t\t// do not allow dropping as the drop target is not within the root (that which is\n\t\t\t\t// treated as \"the content\" by Zoom Out Mode).\n\t\t\t\tif (\n\t\t\t\t\tisZoomOutMode() &&\n\t\t\t\t\tsectionRootClientId !== targetRootClientId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blocks = getBlocks( targetRootClientId );\n\n\t\t\t\t// The block list is empty, don't show the insertion point but still allow dropping.\n\t\t\t\tif ( blocks.length === 0 ) {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\t\tindex: 0,\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tshowInsertionPoint( targetRootClientId, 0, {\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blocksData = blocks.map( ( block ) => {\n\t\t\t\t\tconst clientId = block.clientId;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisUnmodifiedDefaultBlock:\n\t\t\t\t\t\t\tgetIsUnmodifiedDefaultBlock( block ),\n\t\t\t\t\t\tgetBoundingClientRect: () =>\n\t\t\t\t\t\t\townerDocument\n\t\t\t\t\t\t\t\t.getElementById( `block-${ clientId }` )\n\t\t\t\t\t\t\t\t.getBoundingClientRect(),\n\t\t\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\t\t\tblockOrientation:\n\t\t\t\t\t\t\tgetBlockListSettings( clientId )?.orientation,\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\tconst dropTargetPosition = getDropTargetPosition(\n\t\t\t\t\tblocksData,\n\t\t\t\t\t{ x: event.clientX, y: event.clientY },\n\t\t\t\t\tgetBlockListSettings( targetRootClientId )?.orientation,\n\t\t\t\t\t{\n\t\t\t\t\t\tdropZoneElement,\n\t\t\t\t\t\tparentBlockClientId,\n\t\t\t\t\t\tparentBlockOrientation: parentBlockClientId\n\t\t\t\t\t\t\t? getBlockListSettings( parentBlockClientId )\n\t\t\t\t\t\t\t\t\t?.orientation\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\trootBlockIndex: getBlockIndex( targetRootClientId ),\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst [ targetIndex, operation, nearestSide ] =\n\t\t\t\t\tdropTargetPosition;\n\n\t\t\t\tif ( isZoomOutMode() && operation !== 'insert' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( operation === 'group' ) {\n\t\t\t\t\tconst targetBlock = blocks[ targetIndex ];\n\t\t\t\t\tconst areAllImages = [\n\t\t\t\t\t\ttargetBlock.name,\n\t\t\t\t\t\t...draggedBlockNames,\n\t\t\t\t\t].every( ( name ) => name === 'core/image' );\n\t\t\t\t\tconst canInsertGalleryBlock = canInsertBlockType(\n\t\t\t\t\t\t'core/gallery',\n\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t);\n\t\t\t\t\tconst areGroupableBlocks = isGroupable( [\n\t\t\t\t\t\ttargetBlock.clientId,\n\t\t\t\t\t\tgetDraggedBlockClientIds(),\n\t\t\t\t\t] );\n\t\t\t\t\tconst groupBlockVariations = getBlockVariations(\n\t\t\t\t\t\tgetGroupingBlockName(),\n\t\t\t\t\t\t'block'\n\t\t\t\t\t);\n\t\t\t\t\tconst canInsertRow =\n\t\t\t\t\t\tgroupBlockVariations &&\n\t\t\t\t\t\tgroupBlockVariations.find(\n\t\t\t\t\t\t\t( { name } ) => name === 'group-row'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t// If the dragged blocks and the target block are all images,\n\t\t\t\t\t// check if it is creatable either a Row variation or a Gallery block.\n\t\t\t\t\tif (\n\t\t\t\t\t\tareAllImages &&\n\t\t\t\t\t\t! canInsertGalleryBlock &&\n\t\t\t\t\t\t( ! areGroupableBlocks || ! canInsertRow )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// If the dragged blocks and the target block are not all images,\n\t\t\t\t\t// check if it is creatable a Row variation.\n\t\t\t\t\tif (\n\t\t\t\t\t\t! areAllImages &&\n\t\t\t\t\t\t( ! areGroupableBlocks || ! canInsertRow )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\tindex: targetIndex,\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tnearestSide,\n\t\t\t\t\t} );\n\n\t\t\t\t\tconst insertionPointClientId = [\n\t\t\t\t\t\t'before',\n\t\t\t\t\t\t'after',\n\t\t\t\t\t].includes( operation )\n\t\t\t\t\t\t? parentBlockClientId\n\t\t\t\t\t\t: targetRootClientId;\n\n\t\t\t\t\tshowInsertionPoint( insertionPointClientId, targetIndex, {\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tnearestSide,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t\t[\n\t\t\t\tisDragging,\n\t\t\t\tgetAllowedBlocks,\n\t\t\t\ttargetRootClientId,\n\t\t\t\tgetBlockNamesByClientId,\n\t\t\t\tgetDraggedBlockClientIds,\n\t\t\t\tgetBlockType,\n\t\t\t\tgetSectionRootClientId,\n\t\t\t\tisZoomOutMode,\n\t\t\t\tgetBlocks,\n\t\t\t\tgetBlockListSettings,\n\t\t\t\tdropZoneElement,\n\t\t\t\tparentBlockClientId,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tregistry,\n\t\t\t\tstartDragging,\n\t\t\t\tshowInsertionPoint,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tisGroupable,\n\t\t\t\tgetBlockVariations,\n\t\t\t\tgetGroupingBlockName,\n\t\t\t]\n\t\t),\n\t\t200\n\t);\n\n\treturn useDropZone( {\n\t\tdropZoneElement,\n\t\tisDisabled,\n\t\tonDrop: onBlockDrop,\n\t\tonDragOver( event ) {\n\t\t\t// `currentTarget` is only available while the event is being\n\t\t\t// handled, so get it now and pass it to the thottled function.\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n\t\t\tthrottled( event, event.currentTarget.ownerDocument );\n\t\t},\n\t\tonDragLeave( event ) {\n\t\t\tconst { ownerDocument } = event.currentTarget;\n\n\t\t\t// If the drag event is leaving the drop zone and entering an insertion point,\n\t\t\t// do not hide the insertion point as it is conceptually within the dropzone.\n\t\t\tif (\n\t\t\t\tisInsertionPoint( event.relatedTarget, ownerDocument ) ||\n\t\t\t\tisInsertionPoint( event.target, ownerDocument )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrottled.cancel();\n\t\t\thideInsertionPoint();\n\t\t},\n\t\tonDragEnd() {\n\t\t\tthrottled.cancel();\n\t\t\tstopDragging();\n\t\t\thideInsertionPoint();\n\t\t},\n\t} );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useDispatch","useSelect","useRegistry","useCallback","useState","useThrottle","__experimentalUseDropZone","useDropZone","isRTL","isUnmodifiedDefaultBlock","getIsUnmodifiedDefaultBlock","store","blocksStore","useOnBlockDrop","getDistanceToNearestEdge","isPointContainedByRect","isPointWithinTopAndBottomBoundariesOfRect","blockEditorStore","unlock","THRESHOLD_DISTANCE","MINIMUM_HEIGHT_FOR_THRESHOLD","MINIMUM_WIDTH_FOR_THRESHOLD","getDropTargetPosition","blocksData","position","orientation","options","allowedEdges","nearestIndex","insertPosition","minDistance","Infinity","targetBlockIndex","nearestSide","dropZoneElement","parentBlockOrientation","rootBlockIndex","rect","getBoundingClientRect","distance","edge","height","isRightToLeft","width","forEach","blockIndex","blockOrientation","sideDistance","sideEdge","isPointInsideRect","adjacentIndex","isNearestBlockUnmodifiedDefaultBlock","isAdjacentBlockUnmodifiedDefaultBlock","insertionIndex","isDropTargetValid","getBlockType","allowedBlocks","draggedBlockNames","targetBlockName","areBlocksAllowed","allowedBlockNames","map","name","every","includes","draggedBlockTypes","targetMatchesDraggedBlockParents","block","allowedParentName","parent","isInsertionPoint","targetToCheck","ownerDocument","defaultView","HTMLElement","closest","useBlockDropZone","rootClientId","targetRootClientId","parentClientId","parentBlockClientId","isDisabled","registry","dropTarget","setDropTarget","index","operation","getBlockVariations","getGroupingBlockName","canInsertBlockType","getBlockListSettings","getBlocks","getBlockIndex","getDraggedBlockClientIds","getBlockNamesByClientId","getAllowedBlocks","isDragging","isGroupable","isZoomOutMode","getSectionRootClientId","showInsertionPoint","hideInsertionPoint","startDragging","stopDragging","onBlockDrop","throttled","event","isBlockDroppingAllowed","sectionRootClientId","blocks","length","batch","clientId","getElementById","dropTargetPosition","x","clientX","y","clientY","undefined","targetIndex","targetBlock","areAllImages","canInsertGalleryBlock","areGroupableBlocks","groupBlockVariations","canInsertRow","find","insertionPointClientId","onDrop","onDragOver","currentTarget","onDragLeave","relatedTarget","target","cancel","onDragEnd"],"sources":["@wordpress/block-editor/src/components/use-block-drop-zone/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tuseThrottle,\n\t__experimentalUseDropZone as useDropZone,\n} from '@wordpress/compose';\nimport { isRTL } from '@wordpress/i18n';\nimport {\n\tisUnmodifiedDefaultBlock as getIsUnmodifiedDefaultBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useOnBlockDrop from '../use-on-block-drop';\nimport {\n\tgetDistanceToNearestEdge,\n\tisPointContainedByRect,\n\tisPointWithinTopAndBottomBoundariesOfRect,\n} from '../../utils/math';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst THRESHOLD_DISTANCE = 30;\nconst MINIMUM_HEIGHT_FOR_THRESHOLD = 120;\nconst MINIMUM_WIDTH_FOR_THRESHOLD = 120;\n\n/** @typedef {import('../../utils/math').WPPoint} WPPoint */\n/** @typedef {import('../use-on-block-drop/types').WPDropOperation} WPDropOperation */\n\n/**\n * The orientation of a block list.\n *\n * @typedef {'horizontal'|'vertical'|undefined} WPBlockListOrientation\n */\n\n/**\n * The insert position when dropping a block.\n *\n * @typedef {'before'|'after'} WPInsertPosition\n */\n\n/**\n * @typedef {Object} WPBlockData\n * @property {boolean} isUnmodifiedDefaultBlock Is the block unmodified default block.\n * @property {() => DOMRect} getBoundingClientRect Get the bounding client rect of the block.\n * @property {number} blockIndex The index of the block.\n */\n\n/**\n * Get the drop target position from a given drop point and the orientation.\n *\n * @param {WPBlockData[]} blocksData The block data list.\n * @param {WPPoint} position The position of the item being dragged.\n * @param {WPBlockListOrientation} orientation The orientation of the block list.\n * @param {Object} options Additional options.\n * @return {[number, WPDropOperation]} The drop target position.\n */\nexport function getDropTargetPosition(\n\tblocksData,\n\tposition,\n\torientation = 'vertical',\n\toptions = {}\n) {\n\tconst allowedEdges =\n\t\torientation === 'horizontal'\n\t\t\t? [ 'left', 'right' ]\n\t\t\t: [ 'top', 'bottom' ];\n\n\tlet nearestIndex = 0;\n\tlet insertPosition = 'before';\n\tlet minDistance = Infinity;\n\tlet targetBlockIndex = null;\n\tlet nearestSide = 'right';\n\n\tconst {\n\t\tdropZoneElement,\n\t\tparentBlockOrientation,\n\t\trootBlockIndex = 0,\n\t} = options;\n\n\t// Allow before/after when dragging over the top/bottom edges of the drop zone.\n\tif ( dropZoneElement && parentBlockOrientation !== 'horizontal' ) {\n\t\tconst rect = dropZoneElement.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge( position, rect, [\n\t\t\t'top',\n\t\t\t'bottom',\n\t\t] );\n\n\t\t// If dragging over the top or bottom of the drop zone, insert the block\n\t\t// before or after the parent block. This only applies to blocks that use\n\t\t// a drop zone element, typically container blocks such as Group or Cover.\n\t\tif (\n\t\t\trect.height > MINIMUM_HEIGHT_FOR_THRESHOLD &&\n\t\t\tdistance < THRESHOLD_DISTANCE\n\t\t) {\n\t\t\tif ( edge === 'top' ) {\n\t\t\t\treturn [ rootBlockIndex, 'before' ];\n\t\t\t}\n\t\t\tif ( edge === 'bottom' ) {\n\t\t\t\treturn [ rootBlockIndex + 1, 'after' ];\n\t\t\t}\n\t\t}\n\t}\n\n\tconst isRightToLeft = isRTL();\n\n\t// Allow before/after when dragging over the left/right edges of the drop zone.\n\tif ( dropZoneElement && parentBlockOrientation === 'horizontal' ) {\n\t\tconst rect = dropZoneElement.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge( position, rect, [\n\t\t\t'left',\n\t\t\t'right',\n\t\t] );\n\n\t\t// If dragging over the left or right of the drop zone, insert the block\n\t\t// before or after the parent block. This only applies to blocks that use\n\t\t// a drop zone element, typically container blocks such as Group.\n\t\tif (\n\t\t\trect.width > MINIMUM_WIDTH_FOR_THRESHOLD &&\n\t\t\tdistance < THRESHOLD_DISTANCE\n\t\t) {\n\t\t\tif (\n\t\t\t\t( isRightToLeft && edge === 'right' ) ||\n\t\t\t\t( ! isRightToLeft && edge === 'left' )\n\t\t\t) {\n\t\t\t\treturn [ rootBlockIndex, 'before' ];\n\t\t\t}\n\t\t\tif (\n\t\t\t\t( isRightToLeft && edge === 'left' ) ||\n\t\t\t\t( ! isRightToLeft && edge === 'right' )\n\t\t\t) {\n\t\t\t\treturn [ rootBlockIndex + 1, 'after' ];\n\t\t\t}\n\t\t}\n\t}\n\n\tblocksData.forEach(\n\t\t( {\n\t\t\tisUnmodifiedDefaultBlock,\n\t\t\tgetBoundingClientRect,\n\t\t\tblockIndex,\n\t\t\tblockOrientation,\n\t\t} ) => {\n\t\t\tconst rect = getBoundingClientRect();\n\n\t\t\tlet [ distance, edge ] = getDistanceToNearestEdge(\n\t\t\t\tposition,\n\t\t\t\trect,\n\t\t\t\tallowedEdges\n\t\t\t);\n\t\t\t// If the the point is close to a side, prioritize that side.\n\t\t\tconst [ sideDistance, sideEdge ] = getDistanceToNearestEdge(\n\t\t\t\tposition,\n\t\t\t\trect,\n\t\t\t\t[ 'left', 'right' ]\n\t\t\t);\n\n\t\t\tconst isPointInsideRect = isPointContainedByRect( position, rect );\n\n\t\t\t// Prioritize the element if the point is inside of an unmodified default block.\n\t\t\tif ( isUnmodifiedDefaultBlock && isPointInsideRect ) {\n\t\t\t\tdistance = 0;\n\t\t\t} else if (\n\t\t\t\torientation === 'vertical' &&\n\t\t\t\tblockOrientation !== 'horizontal' &&\n\t\t\t\t( ( isPointInsideRect && sideDistance < THRESHOLD_DISTANCE ) ||\n\t\t\t\t\t( ! isPointInsideRect &&\n\t\t\t\t\t\tisPointWithinTopAndBottomBoundariesOfRect(\n\t\t\t\t\t\t\tposition,\n\t\t\t\t\t\t\trect\n\t\t\t\t\t\t) ) )\n\t\t\t) {\n\t\t\t\t/**\n\t\t\t\t * This condition should only apply when the layout is vertical (otherwise there's\n\t\t\t\t * no need to create a Row) and dropzones should only activate when the block is\n\t\t\t\t * either within and close to the sides of the target block or on its outer sides.\n\t\t\t\t */\n\t\t\t\ttargetBlockIndex = blockIndex;\n\t\t\t\tnearestSide = sideEdge;\n\t\t\t}\n\n\t\t\tif ( distance < minDistance ) {\n\t\t\t\t// Where the dropped block will be inserted on the nearest block.\n\t\t\t\tinsertPosition =\n\t\t\t\t\tedge === 'bottom' ||\n\t\t\t\t\t( ! isRightToLeft && edge === 'right' ) ||\n\t\t\t\t\t( isRightToLeft && edge === 'left' )\n\t\t\t\t\t\t? 'after'\n\t\t\t\t\t\t: 'before';\n\n\t\t\t\t// Update the currently known best candidate.\n\t\t\t\tminDistance = distance;\n\t\t\t\tnearestIndex = blockIndex;\n\t\t\t}\n\t\t}\n\t);\n\n\tconst adjacentIndex =\n\t\tnearestIndex + ( insertPosition === 'after' ? 1 : -1 );\n\tconst isNearestBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ nearestIndex ]?.isUnmodifiedDefaultBlock;\n\tconst isAdjacentBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ adjacentIndex ]?.isUnmodifiedDefaultBlock;\n\n\t// If the target index is set then group with the block at that index.\n\tif ( targetBlockIndex !== null ) {\n\t\treturn [ targetBlockIndex, 'group', nearestSide ];\n\t}\n\t// If both blocks are not unmodified default blocks then just insert between them.\n\tif (\n\t\t! isNearestBlockUnmodifiedDefaultBlock &&\n\t\t! isAdjacentBlockUnmodifiedDefaultBlock\n\t) {\n\t\t// If the user is dropping to the trailing edge of the block\n\t\t// add 1 to the index to represent dragging after.\n\t\tconst insertionIndex =\n\t\t\tinsertPosition === 'after' ? nearestIndex + 1 : nearestIndex;\n\t\treturn [ insertionIndex, 'insert' ];\n\t}\n\n\t// Otherwise, replace the nearest unmodified default block.\n\treturn [\n\t\tisNearestBlockUnmodifiedDefaultBlock ? nearestIndex : adjacentIndex,\n\t\t'replace',\n\t];\n}\n\n/**\n * Check if the dragged blocks can be dropped on the target.\n * @param {Function} getBlockType\n * @param {Object[]} allowedBlocks\n * @param {string[]} draggedBlockNames\n * @param {string} targetBlockName\n * @return {boolean} Whether the dragged blocks can be dropped on the target.\n */\nexport function isDropTargetValid(\n\tgetBlockType,\n\tallowedBlocks,\n\tdraggedBlockNames,\n\ttargetBlockName\n) {\n\t// At root level allowedBlocks is undefined and all blocks are allowed.\n\t// Otherwise, check if all dragged blocks are allowed.\n\tlet areBlocksAllowed = true;\n\tif ( allowedBlocks ) {\n\t\tconst allowedBlockNames = allowedBlocks?.map( ( { name } ) => name );\n\n\t\tareBlocksAllowed = draggedBlockNames.every( ( name ) =>\n\t\t\tallowedBlockNames?.includes( name )\n\t\t);\n\t}\n\n\t// Work out if dragged blocks have an allowed parent and if so\n\t// check target block matches the allowed parent.\n\tconst draggedBlockTypes = draggedBlockNames.map( ( name ) =>\n\t\tgetBlockType( name )\n\t);\n\tconst targetMatchesDraggedBlockParents = draggedBlockTypes.every(\n\t\t( block ) => {\n\t\t\tconst [ allowedParentName ] = block?.parent || [];\n\t\t\tif ( ! allowedParentName ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn allowedParentName === targetBlockName;\n\t\t}\n\t);\n\n\treturn areBlocksAllowed && targetMatchesDraggedBlockParents;\n}\n\n/**\n * Checks if the given element is an insertion point.\n *\n * @param {EventTarget|null} targetToCheck - The element to check.\n * @param {Document} ownerDocument - The owner document of the element.\n * @return {boolean} True if the element is a insertion point, false otherwise.\n */\nfunction isInsertionPoint( targetToCheck, ownerDocument ) {\n\tconst { defaultView } = ownerDocument;\n\n\treturn !! (\n\t\tdefaultView &&\n\t\ttargetToCheck instanceof defaultView.HTMLElement &&\n\t\ttargetToCheck.closest( '[data-is-insertion-point]' )\n\t);\n}\n\n/**\n * @typedef {Object} WPBlockDropZoneConfig\n * @property {?HTMLElement} dropZoneElement Optional element to be used as the drop zone.\n * @property {string} rootClientId The root client id for the block list.\n */\n\n/**\n * A React hook that can be used to make a block list handle drag and drop.\n *\n * @param {WPBlockDropZoneConfig} dropZoneConfig configuration data for the drop zone.\n */\nexport default function useBlockDropZone( {\n\tdropZoneElement,\n\t// An undefined value represents a top-level block. Default to an empty\n\t// string for this so that `targetRootClientId` can be easily compared to\n\t// values returned by the `getRootBlockClientId` selector, which also uses\n\t// an empty string to represent top-level blocks.\n\trootClientId: targetRootClientId = '',\n\tparentClientId: parentBlockClientId = '',\n\tisDisabled = false,\n} = {} ) {\n\tconst registry = useRegistry();\n\tconst [ dropTarget, setDropTarget ] = useState( {\n\t\tindex: null,\n\t\toperation: 'insert',\n\t} );\n\n\tconst { getBlockType, getBlockVariations, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockListSettings,\n\t\tgetBlocks,\n\t\tgetBlockIndex,\n\t\tgetDraggedBlockClientIds,\n\t\tgetBlockNamesByClientId,\n\t\tgetAllowedBlocks,\n\t\tisDragging,\n\t\tisGroupable,\n\t\tisZoomOutMode,\n\t\tgetSectionRootClientId,\n\t} = unlock( useSelect( blockEditorStore ) );\n\tconst {\n\t\tshowInsertionPoint,\n\t\thideInsertionPoint,\n\t\tstartDragging,\n\t\tstopDragging,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst onBlockDrop = useOnBlockDrop(\n\t\tdropTarget.operation === 'before' || dropTarget.operation === 'after'\n\t\t\t? parentBlockClientId\n\t\t\t: targetRootClientId,\n\t\tdropTarget.index,\n\t\t{\n\t\t\toperation: dropTarget.operation,\n\t\t\tnearestSide: dropTarget.nearestSide,\n\t\t}\n\t);\n\tconst throttled = useThrottle(\n\t\tuseCallback(\n\t\t\t( event, ownerDocument ) => {\n\t\t\t\tif ( ! isDragging() ) {\n\t\t\t\t\t// When dragging from the desktop, no drag start event is fired.\n\t\t\t\t\t// So, ensure that the drag state is set when the user drags over a drop zone.\n\t\t\t\t\tstartDragging();\n\t\t\t\t}\n\t\t\t\tconst allowedBlocks = getAllowedBlocks( targetRootClientId );\n\t\t\t\tconst targetBlockName = getBlockNamesByClientId( [\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t] )[ 0 ];\n\n\t\t\t\tconst draggedBlockNames = getBlockNamesByClientId(\n\t\t\t\t\tgetDraggedBlockClientIds()\n\t\t\t\t);\n\t\t\t\tconst isBlockDroppingAllowed = isDropTargetValid(\n\t\t\t\t\tgetBlockType,\n\t\t\t\t\tallowedBlocks,\n\t\t\t\t\tdraggedBlockNames,\n\t\t\t\t\ttargetBlockName\n\t\t\t\t);\n\n\t\t\t\tif ( ! isBlockDroppingAllowed ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst sectionRootClientId = getSectionRootClientId();\n\n\t\t\t\t// In Zoom Out mode, if the target is not the section root provided by settings then\n\t\t\t\t// do not allow dropping as the drop target is not within the root (that which is\n\t\t\t\t// treated as \"the content\" by Zoom Out Mode).\n\t\t\t\tif (\n\t\t\t\t\tisZoomOutMode() &&\n\t\t\t\t\tsectionRootClientId !== targetRootClientId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blocks = getBlocks( targetRootClientId );\n\n\t\t\t\t// The block list is empty, don't show the insertion point but still allow dropping.\n\t\t\t\tif ( blocks.length === 0 ) {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\t\tindex: 0,\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tshowInsertionPoint( targetRootClientId, 0, {\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blocksData = blocks.map( ( block ) => {\n\t\t\t\t\tconst clientId = block.clientId;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisUnmodifiedDefaultBlock:\n\t\t\t\t\t\t\tgetIsUnmodifiedDefaultBlock( block ),\n\t\t\t\t\t\tgetBoundingClientRect: () =>\n\t\t\t\t\t\t\townerDocument\n\t\t\t\t\t\t\t\t.getElementById( `block-${ clientId }` )\n\t\t\t\t\t\t\t\t.getBoundingClientRect(),\n\t\t\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\t\t\tblockOrientation:\n\t\t\t\t\t\t\tgetBlockListSettings( clientId )?.orientation,\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\tconst dropTargetPosition = getDropTargetPosition(\n\t\t\t\t\tblocksData,\n\t\t\t\t\t{ x: event.clientX, y: event.clientY },\n\t\t\t\t\tgetBlockListSettings( targetRootClientId )?.orientation,\n\t\t\t\t\t{\n\t\t\t\t\t\tdropZoneElement,\n\t\t\t\t\t\tparentBlockClientId,\n\t\t\t\t\t\tparentBlockOrientation: parentBlockClientId\n\t\t\t\t\t\t\t? getBlockListSettings( parentBlockClientId )\n\t\t\t\t\t\t\t\t\t?.orientation\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\trootBlockIndex: getBlockIndex( targetRootClientId ),\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst [ targetIndex, operation, nearestSide ] =\n\t\t\t\t\tdropTargetPosition;\n\n\t\t\t\tif ( isZoomOutMode() && operation !== 'insert' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( operation === 'group' ) {\n\t\t\t\t\tconst targetBlock = blocks[ targetIndex ];\n\t\t\t\t\tconst areAllImages = [\n\t\t\t\t\t\ttargetBlock.name,\n\t\t\t\t\t\t...draggedBlockNames,\n\t\t\t\t\t].every( ( name ) => name === 'core/image' );\n\t\t\t\t\tconst canInsertGalleryBlock = canInsertBlockType(\n\t\t\t\t\t\t'core/gallery',\n\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t);\n\t\t\t\t\tconst areGroupableBlocks = isGroupable( [\n\t\t\t\t\t\ttargetBlock.clientId,\n\t\t\t\t\t\tgetDraggedBlockClientIds(),\n\t\t\t\t\t] );\n\t\t\t\t\tconst groupBlockVariations = getBlockVariations(\n\t\t\t\t\t\tgetGroupingBlockName(),\n\t\t\t\t\t\t'block'\n\t\t\t\t\t);\n\t\t\t\t\tconst canInsertRow =\n\t\t\t\t\t\tgroupBlockVariations &&\n\t\t\t\t\t\tgroupBlockVariations.find(\n\t\t\t\t\t\t\t( { name } ) => name === 'group-row'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t// If the dragged blocks and the target block are all images,\n\t\t\t\t\t// check if it is creatable either a Row variation or a Gallery block.\n\t\t\t\t\tif (\n\t\t\t\t\t\tareAllImages &&\n\t\t\t\t\t\t! canInsertGalleryBlock &&\n\t\t\t\t\t\t( ! areGroupableBlocks || ! canInsertRow )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// If the dragged blocks and the target block are not all images,\n\t\t\t\t\t// check if it is creatable a Row variation.\n\t\t\t\t\tif (\n\t\t\t\t\t\t! areAllImages &&\n\t\t\t\t\t\t( ! areGroupableBlocks || ! canInsertRow )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\tindex: targetIndex,\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tnearestSide,\n\t\t\t\t\t} );\n\n\t\t\t\t\tconst insertionPointClientId = [\n\t\t\t\t\t\t'before',\n\t\t\t\t\t\t'after',\n\t\t\t\t\t].includes( operation )\n\t\t\t\t\t\t? parentBlockClientId\n\t\t\t\t\t\t: targetRootClientId;\n\n\t\t\t\t\tshowInsertionPoint( insertionPointClientId, targetIndex, {\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tnearestSide,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t\t[\n\t\t\t\tisDragging,\n\t\t\t\tgetAllowedBlocks,\n\t\t\t\ttargetRootClientId,\n\t\t\t\tgetBlockNamesByClientId,\n\t\t\t\tgetDraggedBlockClientIds,\n\t\t\t\tgetBlockType,\n\t\t\t\tgetSectionRootClientId,\n\t\t\t\tisZoomOutMode,\n\t\t\t\tgetBlocks,\n\t\t\t\tgetBlockListSettings,\n\t\t\t\tdropZoneElement,\n\t\t\t\tparentBlockClientId,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tregistry,\n\t\t\t\tstartDragging,\n\t\t\t\tshowInsertionPoint,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tisGroupable,\n\t\t\t\tgetBlockVariations,\n\t\t\t\tgetGroupingBlockName,\n\t\t\t]\n\t\t),\n\t\t200\n\t);\n\n\treturn useDropZone( {\n\t\tdropZoneElement,\n\t\tisDisabled,\n\t\tonDrop: onBlockDrop,\n\t\tonDragOver( event ) {\n\t\t\t// `currentTarget` is only available while the event is being\n\t\t\t// handled, so get it now and pass it to the thottled function.\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n\t\t\tthrottled( event, event.currentTarget.ownerDocument );\n\t\t},\n\t\tonDragLeave( event ) {\n\t\t\tconst { ownerDocument } = event.currentTarget;\n\n\t\t\t// If the drag event is leaving the drop zone and entering an insertion point,\n\t\t\t// do not hide the insertion point as it is conceptually within the dropzone.\n\t\t\tif (\n\t\t\t\tisInsertionPoint( event.relatedTarget, ownerDocument ) ||\n\t\t\t\tisInsertionPoint( event.target, ownerDocument )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrottled.cancel();\n\t\t\thideInsertionPoint();\n\t\t},\n\t\tonDragEnd() {\n\t\t\tthrottled.cancel();\n\t\t\tstopDragging();\n\t\t\thideInsertionPoint();\n\t\t},\n\t} );\n}\n"],"mappings":"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","ignoreList":[]}
|
package/build-module/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Internal dependencies
|
|
3
3
|
*/
|
|
4
4
|
import './hooks';
|
|
5
|
-
export { getBorderClassesAndStyles as __experimentalGetBorderClassesAndStyles, useBorderProps as __experimentalUseBorderProps, getColorClassesAndStyles as __experimentalGetColorClassesAndStyles, getTypographyClassesAndStyles, useColorProps as __experimentalUseColorProps, useCustomSides as __experimentalUseCustomSides, getSpacingClassesAndStyles as __experimentalGetSpacingClassesAndStyles, getGapCSSValue as __experimentalGetGapCSSValue, getShadowClassesAndStyles as __experimentalGetShadowClassesAndStyles, useCachedTruthy,
|
|
5
|
+
export { getBorderClassesAndStyles as __experimentalGetBorderClassesAndStyles, useBorderProps as __experimentalUseBorderProps, getColorClassesAndStyles as __experimentalGetColorClassesAndStyles, getTypographyClassesAndStyles, useColorProps as __experimentalUseColorProps, useCustomSides as __experimentalUseCustomSides, getSpacingClassesAndStyles as __experimentalGetSpacingClassesAndStyles, getGapCSSValue as __experimentalGetGapCSSValue, getShadowClassesAndStyles as __experimentalGetShadowClassesAndStyles, useCachedTruthy, useStyleOverride } from './hooks';
|
|
6
6
|
export * from './components';
|
|
7
7
|
export * from './elements';
|
|
8
8
|
export * from './utils';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getBorderClassesAndStyles","__experimentalGetBorderClassesAndStyles","useBorderProps","__experimentalUseBorderProps","getColorClassesAndStyles","__experimentalGetColorClassesAndStyles","getTypographyClassesAndStyles","useColorProps","__experimentalUseColorProps","useCustomSides","__experimentalUseCustomSides","getSpacingClassesAndStyles","__experimentalGetSpacingClassesAndStyles","getGapCSSValue","__experimentalGetGapCSSValue","getShadowClassesAndStyles","__experimentalGetShadowClassesAndStyles","useCachedTruthy","
|
|
1
|
+
{"version":3,"names":["getBorderClassesAndStyles","__experimentalGetBorderClassesAndStyles","useBorderProps","__experimentalUseBorderProps","getColorClassesAndStyles","__experimentalGetColorClassesAndStyles","getTypographyClassesAndStyles","useColorProps","__experimentalUseColorProps","useCustomSides","__experimentalUseCustomSides","getSpacingClassesAndStyles","__experimentalGetSpacingClassesAndStyles","getGapCSSValue","__experimentalGetGapCSSValue","getShadowClassesAndStyles","__experimentalGetShadowClassesAndStyles","useCachedTruthy","useStyleOverride","storeConfig","store","SETTINGS_DEFAULTS","privateApis"],"sources":["@wordpress/block-editor/src/index.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport './hooks';\nexport {\n\tgetBorderClassesAndStyles as __experimentalGetBorderClassesAndStyles,\n\tuseBorderProps as __experimentalUseBorderProps,\n\tgetColorClassesAndStyles as __experimentalGetColorClassesAndStyles,\n\tgetTypographyClassesAndStyles,\n\tuseColorProps as __experimentalUseColorProps,\n\tuseCustomSides as __experimentalUseCustomSides,\n\tgetSpacingClassesAndStyles as __experimentalGetSpacingClassesAndStyles,\n\tgetGapCSSValue as __experimentalGetGapCSSValue,\n\tgetShadowClassesAndStyles as __experimentalGetShadowClassesAndStyles,\n\tuseCachedTruthy,\n\tuseStyleOverride,\n} from './hooks';\nexport * from './components';\nexport * from './elements';\nexport * from './utils';\nexport { storeConfig, store } from './store';\nexport { SETTINGS_DEFAULTS } from './store/defaults';\nexport { privateApis } from './private-apis';\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,SAAS;AAChB,SACCA,yBAAyB,IAAIC,uCAAuC,EACpEC,cAAc,IAAIC,4BAA4B,EAC9CC,wBAAwB,IAAIC,sCAAsC,EAClEC,6BAA6B,EAC7BC,aAAa,IAAIC,2BAA2B,EAC5CC,cAAc,IAAIC,4BAA4B,EAC9CC,0BAA0B,IAAIC,wCAAwC,EACtEC,cAAc,IAAIC,4BAA4B,EAC9CC,yBAAyB,IAAIC,uCAAuC,EACpEC,eAAe,EACfC,gBAAgB,QACV,SAAS;AAChB,cAAc,cAAc;AAC5B,cAAc,YAAY;AAC1B,cAAc,SAAS;AACvB,SAASC,WAAW,EAAEC,KAAK,QAAQ,SAAS;AAC5C,SAASC,iBAAiB,QAAQ,kBAAkB;AACpD,SAASC,WAAW,QAAQ,gBAAgB","ignoreList":[]}
|
|
@@ -15,7 +15,7 @@ import { cleanEmptyObject } from './hooks/utils';
|
|
|
15
15
|
import BlockQuickNavigation from './components/block-quick-navigation';
|
|
16
16
|
import { LayoutStyle } from './components/block-list/layout';
|
|
17
17
|
import { BlockRemovalWarningModal } from './components/block-removal-warning-modal';
|
|
18
|
-
import { setBackgroundStyleDefaults, useLayoutClasses, useLayoutStyles, __unstableBlockStyleVariationOverridesWithConfig } from './hooks';
|
|
18
|
+
import { setBackgroundStyleDefaults, useLayoutClasses, useLayoutStyles, __unstableBlockStyleVariationOverridesWithConfig, useZoomOut } from './hooks';
|
|
19
19
|
import DimensionsTool from './components/dimensions-tool';
|
|
20
20
|
import ResolutionTool from './components/resolution-tool';
|
|
21
21
|
import TextAlignmentControl from './components/text-alignment-control';
|
|
@@ -65,6 +65,7 @@ lock(privateApis, {
|
|
|
65
65
|
usesContextKey,
|
|
66
66
|
useFlashEditableBlocks,
|
|
67
67
|
useZoomOutModeExit,
|
|
68
|
+
useZoomOut,
|
|
68
69
|
globalStylesDataKey,
|
|
69
70
|
globalStylesLinksDataKey,
|
|
70
71
|
selectBlockPatternsKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["globalStyles","ExperimentalBlockEditorProvider","lock","getRichTextValues","ResizableBoxPopover","default","PrivateQuickInserter","extractWords","getNormalizedSearchTerms","normalizeString","PrivateListView","BlockInfo","useHasBlockToolbar","cleanEmptyObject","BlockQuickNavigation","LayoutStyle","BlockRemovalWarningModal","setBackgroundStyleDefaults","useLayoutClasses","useLayoutStyles","__unstableBlockStyleVariationOverridesWithConfig","DimensionsTool","ResolutionTool","TextAlignmentControl","usesContextKey","ExperimentalBlockCanvas","getDuotoneFilter","useFlashEditableBlocks","useZoomOutModeExit","selectBlockPatternsKey","reusableBlocksSelectKey","globalStylesDataKey","globalStylesLinksDataKey","sectionRootClientIdKey","requiresWrapperOnCopy","PrivateRichText","PrivateBlockPopover","PrivateInserterLibrary","PrivatePublishDateTimePicker","useSpacingSizes","useBlockDisplayTitle","TabbedSidebar","privateApis"],"sources":["@wordpress/block-editor/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport * as globalStyles from './components/global-styles';\nimport { ExperimentalBlockEditorProvider } from './components/provider';\nimport { lock } from './lock-unlock';\nimport { getRichTextValues } from './components/rich-text/get-rich-text-values';\nimport ResizableBoxPopover from './components/resizable-box-popover';\nimport { default as PrivateQuickInserter } from './components/inserter/quick-inserter';\nimport {\n\textractWords,\n\tgetNormalizedSearchTerms,\n\tnormalizeString,\n} from './components/inserter/search-items';\nimport { PrivateListView } from './components/list-view';\nimport BlockInfo from './components/block-info-slot-fill';\nimport { useHasBlockToolbar } from './components/block-toolbar/use-has-block-toolbar';\nimport { cleanEmptyObject } from './hooks/utils';\nimport BlockQuickNavigation from './components/block-quick-navigation';\nimport { LayoutStyle } from './components/block-list/layout';\nimport { BlockRemovalWarningModal } from './components/block-removal-warning-modal';\nimport {\n\tsetBackgroundStyleDefaults,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\t__unstableBlockStyleVariationOverridesWithConfig,\n} from './hooks';\nimport DimensionsTool from './components/dimensions-tool';\nimport ResolutionTool from './components/resolution-tool';\nimport TextAlignmentControl from './components/text-alignment-control';\nimport { usesContextKey } from './components/rich-text/format-edit';\nimport { ExperimentalBlockCanvas } from './components/block-canvas';\nimport { getDuotoneFilter } from './components/duotone/utils';\nimport { useFlashEditableBlocks } from './components/use-flash-editable-blocks';\nimport { useZoomOutModeExit } from './components/block-list/use-block-props/use-zoom-out-mode-exit';\nimport {\n\tselectBlockPatternsKey,\n\treusableBlocksSelectKey,\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n\tsectionRootClientIdKey,\n} from './store/private-keys';\nimport { requiresWrapperOnCopy } from './components/writing-flow/utils';\nimport { PrivateRichText } from './components/rich-text/';\nimport { PrivateBlockPopover } from './components/block-popover';\nimport { PrivateInserterLibrary } from './components/inserter/library';\nimport { PrivatePublishDateTimePicker } from './components/publish-date-time-picker';\nimport useSpacingSizes from './components/spacing-sizes-control/hooks/use-spacing-sizes';\nimport useBlockDisplayTitle from './components/block-title/use-block-display-title';\nimport TabbedSidebar from './components/tabbed-sidebar';\n\n/**\n * Private @wordpress/block-editor APIs.\n */\nexport const privateApis = {};\nlock( privateApis, {\n\t...globalStyles,\n\tExperimentalBlockCanvas,\n\tExperimentalBlockEditorProvider,\n\tgetDuotoneFilter,\n\tgetRichTextValues,\n\tPrivateQuickInserter,\n\textractWords,\n\tgetNormalizedSearchTerms,\n\tnormalizeString,\n\tPrivateListView,\n\tResizableBoxPopover,\n\tBlockInfo,\n\tuseHasBlockToolbar,\n\tcleanEmptyObject,\n\tBlockQuickNavigation,\n\tLayoutStyle,\n\tBlockRemovalWarningModal,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\tDimensionsTool,\n\tResolutionTool,\n\tTabbedSidebar,\n\tTextAlignmentControl,\n\tusesContextKey,\n\tuseFlashEditableBlocks,\n\tuseZoomOutModeExit,\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n\tselectBlockPatternsKey,\n\trequiresWrapperOnCopy,\n\tPrivateRichText,\n\tPrivateInserterLibrary,\n\treusableBlocksSelectKey,\n\tPrivateBlockPopover,\n\tPrivatePublishDateTimePicker,\n\tuseSpacingSizes,\n\tuseBlockDisplayTitle,\n\t__unstableBlockStyleVariationOverridesWithConfig,\n\tsetBackgroundStyleDefaults,\n\tsectionRootClientIdKey,\n} );\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,KAAKA,YAAY,MAAM,4BAA4B;AAC1D,SAASC,+BAA+B,QAAQ,uBAAuB;AACvE,SAASC,IAAI,QAAQ,eAAe;AACpC,SAASC,iBAAiB,QAAQ,6CAA6C;AAC/E,OAAOC,mBAAmB,MAAM,oCAAoC;AACpE,SAASC,OAAO,IAAIC,oBAAoB,QAAQ,sCAAsC;AACtF,SACCC,YAAY,EACZC,wBAAwB,EACxBC,eAAe,QACT,oCAAoC;AAC3C,SAASC,eAAe,QAAQ,wBAAwB;AACxD,OAAOC,SAAS,MAAM,mCAAmC;AACzD,SAASC,kBAAkB,QAAQ,kDAAkD;AACrF,SAASC,gBAAgB,QAAQ,eAAe;AAChD,OAAOC,oBAAoB,MAAM,qCAAqC;AACtE,SAASC,WAAW,QAAQ,gCAAgC;AAC5D,SAASC,wBAAwB,QAAQ,0CAA0C;AACnF,SACCC,0BAA0B,EAC1BC,gBAAgB,EAChBC,eAAe,EACfC,gDAAgD,
|
|
1
|
+
{"version":3,"names":["globalStyles","ExperimentalBlockEditorProvider","lock","getRichTextValues","ResizableBoxPopover","default","PrivateQuickInserter","extractWords","getNormalizedSearchTerms","normalizeString","PrivateListView","BlockInfo","useHasBlockToolbar","cleanEmptyObject","BlockQuickNavigation","LayoutStyle","BlockRemovalWarningModal","setBackgroundStyleDefaults","useLayoutClasses","useLayoutStyles","__unstableBlockStyleVariationOverridesWithConfig","useZoomOut","DimensionsTool","ResolutionTool","TextAlignmentControl","usesContextKey","ExperimentalBlockCanvas","getDuotoneFilter","useFlashEditableBlocks","useZoomOutModeExit","selectBlockPatternsKey","reusableBlocksSelectKey","globalStylesDataKey","globalStylesLinksDataKey","sectionRootClientIdKey","requiresWrapperOnCopy","PrivateRichText","PrivateBlockPopover","PrivateInserterLibrary","PrivatePublishDateTimePicker","useSpacingSizes","useBlockDisplayTitle","TabbedSidebar","privateApis"],"sources":["@wordpress/block-editor/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport * as globalStyles from './components/global-styles';\nimport { ExperimentalBlockEditorProvider } from './components/provider';\nimport { lock } from './lock-unlock';\nimport { getRichTextValues } from './components/rich-text/get-rich-text-values';\nimport ResizableBoxPopover from './components/resizable-box-popover';\nimport { default as PrivateQuickInserter } from './components/inserter/quick-inserter';\nimport {\n\textractWords,\n\tgetNormalizedSearchTerms,\n\tnormalizeString,\n} from './components/inserter/search-items';\nimport { PrivateListView } from './components/list-view';\nimport BlockInfo from './components/block-info-slot-fill';\nimport { useHasBlockToolbar } from './components/block-toolbar/use-has-block-toolbar';\nimport { cleanEmptyObject } from './hooks/utils';\nimport BlockQuickNavigation from './components/block-quick-navigation';\nimport { LayoutStyle } from './components/block-list/layout';\nimport { BlockRemovalWarningModal } from './components/block-removal-warning-modal';\nimport {\n\tsetBackgroundStyleDefaults,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\t__unstableBlockStyleVariationOverridesWithConfig,\n\tuseZoomOut,\n} from './hooks';\nimport DimensionsTool from './components/dimensions-tool';\nimport ResolutionTool from './components/resolution-tool';\nimport TextAlignmentControl from './components/text-alignment-control';\nimport { usesContextKey } from './components/rich-text/format-edit';\nimport { ExperimentalBlockCanvas } from './components/block-canvas';\nimport { getDuotoneFilter } from './components/duotone/utils';\nimport { useFlashEditableBlocks } from './components/use-flash-editable-blocks';\nimport { useZoomOutModeExit } from './components/block-list/use-block-props/use-zoom-out-mode-exit';\nimport {\n\tselectBlockPatternsKey,\n\treusableBlocksSelectKey,\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n\tsectionRootClientIdKey,\n} from './store/private-keys';\nimport { requiresWrapperOnCopy } from './components/writing-flow/utils';\nimport { PrivateRichText } from './components/rich-text/';\nimport { PrivateBlockPopover } from './components/block-popover';\nimport { PrivateInserterLibrary } from './components/inserter/library';\nimport { PrivatePublishDateTimePicker } from './components/publish-date-time-picker';\nimport useSpacingSizes from './components/spacing-sizes-control/hooks/use-spacing-sizes';\nimport useBlockDisplayTitle from './components/block-title/use-block-display-title';\nimport TabbedSidebar from './components/tabbed-sidebar';\n\n/**\n * Private @wordpress/block-editor APIs.\n */\nexport const privateApis = {};\nlock( privateApis, {\n\t...globalStyles,\n\tExperimentalBlockCanvas,\n\tExperimentalBlockEditorProvider,\n\tgetDuotoneFilter,\n\tgetRichTextValues,\n\tPrivateQuickInserter,\n\textractWords,\n\tgetNormalizedSearchTerms,\n\tnormalizeString,\n\tPrivateListView,\n\tResizableBoxPopover,\n\tBlockInfo,\n\tuseHasBlockToolbar,\n\tcleanEmptyObject,\n\tBlockQuickNavigation,\n\tLayoutStyle,\n\tBlockRemovalWarningModal,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\tDimensionsTool,\n\tResolutionTool,\n\tTabbedSidebar,\n\tTextAlignmentControl,\n\tusesContextKey,\n\tuseFlashEditableBlocks,\n\tuseZoomOutModeExit,\n\tuseZoomOut,\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n\tselectBlockPatternsKey,\n\trequiresWrapperOnCopy,\n\tPrivateRichText,\n\tPrivateInserterLibrary,\n\treusableBlocksSelectKey,\n\tPrivateBlockPopover,\n\tPrivatePublishDateTimePicker,\n\tuseSpacingSizes,\n\tuseBlockDisplayTitle,\n\t__unstableBlockStyleVariationOverridesWithConfig,\n\tsetBackgroundStyleDefaults,\n\tsectionRootClientIdKey,\n} );\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,KAAKA,YAAY,MAAM,4BAA4B;AAC1D,SAASC,+BAA+B,QAAQ,uBAAuB;AACvE,SAASC,IAAI,QAAQ,eAAe;AACpC,SAASC,iBAAiB,QAAQ,6CAA6C;AAC/E,OAAOC,mBAAmB,MAAM,oCAAoC;AACpE,SAASC,OAAO,IAAIC,oBAAoB,QAAQ,sCAAsC;AACtF,SACCC,YAAY,EACZC,wBAAwB,EACxBC,eAAe,QACT,oCAAoC;AAC3C,SAASC,eAAe,QAAQ,wBAAwB;AACxD,OAAOC,SAAS,MAAM,mCAAmC;AACzD,SAASC,kBAAkB,QAAQ,kDAAkD;AACrF,SAASC,gBAAgB,QAAQ,eAAe;AAChD,OAAOC,oBAAoB,MAAM,qCAAqC;AACtE,SAASC,WAAW,QAAQ,gCAAgC;AAC5D,SAASC,wBAAwB,QAAQ,0CAA0C;AACnF,SACCC,0BAA0B,EAC1BC,gBAAgB,EAChBC,eAAe,EACfC,gDAAgD,EAChDC,UAAU,QACJ,SAAS;AAChB,OAAOC,cAAc,MAAM,8BAA8B;AACzD,OAAOC,cAAc,MAAM,8BAA8B;AACzD,OAAOC,oBAAoB,MAAM,qCAAqC;AACtE,SAASC,cAAc,QAAQ,oCAAoC;AACnE,SAASC,uBAAuB,QAAQ,2BAA2B;AACnE,SAASC,gBAAgB,QAAQ,4BAA4B;AAC7D,SAASC,sBAAsB,QAAQ,wCAAwC;AAC/E,SAASC,kBAAkB,QAAQ,gEAAgE;AACnG,SACCC,sBAAsB,EACtBC,uBAAuB,EACvBC,mBAAmB,EACnBC,wBAAwB,EACxBC,sBAAsB,QAChB,sBAAsB;AAC7B,SAASC,qBAAqB,QAAQ,iCAAiC;AACvE,SAASC,eAAe,QAAQ,yBAAyB;AACzD,SAASC,mBAAmB,QAAQ,4BAA4B;AAChE,SAASC,sBAAsB,QAAQ,+BAA+B;AACtE,SAASC,4BAA4B,QAAQ,uCAAuC;AACpF,OAAOC,eAAe,MAAM,4DAA4D;AACxF,OAAOC,oBAAoB,MAAM,kDAAkD;AACnF,OAAOC,aAAa,MAAM,6BAA6B;;AAEvD;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAG,CAAC,CAAC;AAC7BzC,IAAI,CAAEyC,WAAW,EAAE;EAClB,GAAG3C,YAAY;EACf0B,uBAAuB;EACvBzB,+BAA+B;EAC/B0B,gBAAgB;EAChBxB,iBAAiB;EACjBG,oBAAoB;EACpBC,YAAY;EACZC,wBAAwB;EACxBC,eAAe;EACfC,eAAe;EACfN,mBAAmB;EACnBO,SAAS;EACTC,kBAAkB;EAClBC,gBAAgB;EAChBC,oBAAoB;EACpBC,WAAW;EACXC,wBAAwB;EACxBE,gBAAgB;EAChBC,eAAe;EACfG,cAAc;EACdC,cAAc;EACdmB,aAAa;EACblB,oBAAoB;EACpBC,cAAc;EACdG,sBAAsB;EACtBC,kBAAkB;EAClBR,UAAU;EACVW,mBAAmB;EACnBC,wBAAwB;EACxBH,sBAAsB;EACtBK,qBAAqB;EACrBC,eAAe;EACfE,sBAAsB;EACtBP,uBAAuB;EACvBM,mBAAmB;EACnBE,4BAA4B;EAC5BC,eAAe;EACfC,oBAAoB;EACpBrB,gDAAgD;EAChDH,0BAA0B;EAC1BiB;AACD,CAAE,CAAC","ignoreList":[]}
|
|
@@ -103,6 +103,17 @@ function isElementVisible(element) {
|
|
|
103
103
|
return true;
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Checks if the element is scrollable.
|
|
108
|
+
*
|
|
109
|
+
* @param {Element} element Element.
|
|
110
|
+
* @return {boolean} True if the element is scrollable.
|
|
111
|
+
*/
|
|
112
|
+
function isScrollable(element) {
|
|
113
|
+
const style = window.getComputedStyle(element);
|
|
114
|
+
return style.overflowX === 'auto' || style.overflowX === 'scroll' || style.overflowY === 'auto' || style.overflowY === 'scroll';
|
|
115
|
+
}
|
|
116
|
+
|
|
106
117
|
/**
|
|
107
118
|
* Returns the rect of the element including all visible nested elements.
|
|
108
119
|
*
|
|
@@ -130,7 +141,11 @@ export function getVisibleElementBounds(element) {
|
|
|
130
141
|
while (currentElement = stack.pop()) {
|
|
131
142
|
for (const child of currentElement.children) {
|
|
132
143
|
if (isElementVisible(child)) {
|
|
133
|
-
|
|
144
|
+
let childBounds = child.getBoundingClientRect();
|
|
145
|
+
// If the parent is scrollable, use parent's scrollable bounds.
|
|
146
|
+
if (isScrollable(currentElement)) {
|
|
147
|
+
childBounds = currentElement.getBoundingClientRect();
|
|
148
|
+
}
|
|
134
149
|
bounds = rectUnion(bounds, childBounds);
|
|
135
150
|
stack.push(child);
|
|
136
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BLOCK_SELECTOR","APPENDER_SELECTOR","BLOCK_APPENDER_CLASS","isInSameBlock","a","b","closest","isInsideRootBlock","blockElement","element","parentBlock","join","getBlockClientId","node","nodeType","ELEMENT_NODE","parentNode","elementNode","blockNode","id","slice","length","rectUnion","rect1","rect2","left","Math","min","right","max","bottom","top","window","DOMRectReadOnly","isElementVisible","viewport","ownerDocument","defaultView","classList","contains","bounds","getBoundingClientRect","width","height","checkVisibility","opacityProperty","contentVisibilityAuto","visibilityProperty","style","getComputedStyle","display","visibility","opacity","getVisibleElementBounds","stack","currentElement","pop","child","children","childBounds","push","innerWidth"],"sources":["@wordpress/block-editor/src/utils/dom.js"],"sourcesContent":["const BLOCK_SELECTOR = '.block-editor-block-list__block';\nconst APPENDER_SELECTOR = '.block-list-appender';\nconst BLOCK_APPENDER_CLASS = '.block-editor-button-block-appender';\n\n/**\n * Returns true if two elements are contained within the same block.\n *\n * @param {Element} a First element.\n * @param {Element} b Second element.\n *\n * @return {boolean} Whether elements are in the same block.\n */\nexport function isInSameBlock( a, b ) {\n\treturn a.closest( BLOCK_SELECTOR ) === b.closest( BLOCK_SELECTOR );\n}\n\n/**\n * Returns true if an element is considered part of the block and not its inner\n * blocks or appender.\n *\n * @param {Element} blockElement Block container element.\n * @param {Element} element Element.\n *\n * @return {boolean} Whether an element is considered part of the block and not\n * its inner blocks or appender.\n */\nexport function isInsideRootBlock( blockElement, element ) {\n\tconst parentBlock = element.closest(\n\t\t[ BLOCK_SELECTOR, APPENDER_SELECTOR, BLOCK_APPENDER_CLASS ].join( ',' )\n\t);\n\treturn parentBlock === blockElement;\n}\n\n/**\n * Finds the block client ID given any DOM node inside the block.\n *\n * @param {Node?} node DOM node.\n *\n * @return {string|undefined} Client ID or undefined if the node is not part of\n * a block.\n */\nexport function getBlockClientId( node ) {\n\twhile ( node && node.nodeType !== node.ELEMENT_NODE ) {\n\t\tnode = node.parentNode;\n\t}\n\n\tif ( ! node ) {\n\t\treturn;\n\t}\n\n\tconst elementNode = /** @type {Element} */ ( node );\n\tconst blockNode = elementNode.closest( BLOCK_SELECTOR );\n\n\tif ( ! blockNode ) {\n\t\treturn;\n\t}\n\n\treturn blockNode.id.slice( 'block-'.length );\n}\n\n/**\n * Calculates the union of two rectangles.\n *\n * @param {DOMRect} rect1 First rectangle.\n * @param {DOMRect} rect2 Second rectangle.\n * @return {DOMRect} Union of the two rectangles.\n */\nexport function rectUnion( rect1, rect2 ) {\n\tconst left = Math.min( rect1.left, rect2.left );\n\tconst right = Math.max( rect1.right, rect2.right );\n\tconst bottom = Math.max( rect1.bottom, rect2.bottom );\n\tconst top = Math.min( rect1.top, rect2.top );\n\n\treturn new window.DOMRectReadOnly( left, top, right - left, bottom - top );\n}\n\n/**\n * Returns whether an element is visible.\n *\n * @param {Element} element Element.\n * @return {boolean} Whether the element is visible.\n */\nfunction isElementVisible( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn false;\n\t}\n\n\t// Check for <VisuallyHidden> component.\n\tif ( element.classList.contains( 'components-visually-hidden' ) ) {\n\t\treturn false;\n\t}\n\n\tconst bounds = element.getBoundingClientRect();\n\tif ( bounds.width === 0 || bounds.height === 0 ) {\n\t\treturn false;\n\t}\n\n\t// Older browsers, e.g. Safari < 17.4 may not support the `checkVisibility` method.\n\tif ( element.checkVisibility ) {\n\t\treturn element.checkVisibility?.( {\n\t\t\topacityProperty: true,\n\t\t\tcontentVisibilityAuto: true,\n\t\t\tvisibilityProperty: true,\n\t\t} );\n\t}\n\n\tconst style = viewport.getComputedStyle( element );\n\n\tif (\n\t\tstyle.display === 'none' ||\n\t\tstyle.visibility === 'hidden' ||\n\t\tstyle.opacity === '0'\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Returns the rect of the element including all visible nested elements.\n *\n * Visible nested elements, including elements that overflow the parent, are\n * taken into account.\n *\n * This function is useful for calculating the visible area of a block that\n * contains nested elements that overflow the block, e.g. the Navigation block,\n * which can contain overflowing Submenu blocks.\n *\n * The returned rect represents the full extent of the element and its visible\n * children, which may extend beyond the viewport.\n *\n * @param {Element} element Element.\n * @return {DOMRect} Bounding client rect of the element and its visible children.\n */\nexport function getVisibleElementBounds( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn new window.DOMRectReadOnly();\n\t}\n\n\tlet bounds = element.getBoundingClientRect();\n\n\tconst stack = [ element ];\n\tlet currentElement;\n\n\twhile ( ( currentElement = stack.pop() ) ) {\n\t\tfor ( const child of currentElement.children ) {\n\t\t\tif ( isElementVisible( child ) ) {\n\t\t\t\tconst childBounds = child.getBoundingClientRect();\n\t\t\t\tbounds = rectUnion( bounds, childBounds );\n\t\t\t\tstack.push( child );\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Take into account the outer horizontal limits of the container in which\n\t * an element is supposed to be \"visible\". For example, if an element is\n\t * positioned -10px to the left of the window x value (0), this function\n\t * discounts the negative overhang because it's not visible and therefore\n\t * not to be counted in the visibility calculations. Top and bottom values\n\t * are not accounted for to accommodate vertical scroll.\n\t */\n\tconst left = Math.max( bounds.left, 0 );\n\tconst right = Math.min( bounds.right, viewport.innerWidth );\n\tbounds = new window.DOMRectReadOnly(\n\t\tleft,\n\t\tbounds.top,\n\t\tright - left,\n\t\tbounds.height\n\t);\n\n\treturn bounds;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["BLOCK_SELECTOR","APPENDER_SELECTOR","BLOCK_APPENDER_CLASS","isInSameBlock","a","b","closest","isInsideRootBlock","blockElement","element","parentBlock","join","getBlockClientId","node","nodeType","ELEMENT_NODE","parentNode","elementNode","blockNode","id","slice","length","rectUnion","rect1","rect2","left","Math","min","right","max","bottom","top","window","DOMRectReadOnly","isElementVisible","viewport","ownerDocument","defaultView","classList","contains","bounds","getBoundingClientRect","width","height","checkVisibility","opacityProperty","contentVisibilityAuto","visibilityProperty","style","getComputedStyle","display","visibility","opacity","isScrollable","overflowX","overflowY","getVisibleElementBounds","stack","currentElement","pop","child","children","childBounds","push","innerWidth"],"sources":["@wordpress/block-editor/src/utils/dom.js"],"sourcesContent":["const BLOCK_SELECTOR = '.block-editor-block-list__block';\nconst APPENDER_SELECTOR = '.block-list-appender';\nconst BLOCK_APPENDER_CLASS = '.block-editor-button-block-appender';\n\n/**\n * Returns true if two elements are contained within the same block.\n *\n * @param {Element} a First element.\n * @param {Element} b Second element.\n *\n * @return {boolean} Whether elements are in the same block.\n */\nexport function isInSameBlock( a, b ) {\n\treturn a.closest( BLOCK_SELECTOR ) === b.closest( BLOCK_SELECTOR );\n}\n\n/**\n * Returns true if an element is considered part of the block and not its inner\n * blocks or appender.\n *\n * @param {Element} blockElement Block container element.\n * @param {Element} element Element.\n *\n * @return {boolean} Whether an element is considered part of the block and not\n * its inner blocks or appender.\n */\nexport function isInsideRootBlock( blockElement, element ) {\n\tconst parentBlock = element.closest(\n\t\t[ BLOCK_SELECTOR, APPENDER_SELECTOR, BLOCK_APPENDER_CLASS ].join( ',' )\n\t);\n\treturn parentBlock === blockElement;\n}\n\n/**\n * Finds the block client ID given any DOM node inside the block.\n *\n * @param {Node?} node DOM node.\n *\n * @return {string|undefined} Client ID or undefined if the node is not part of\n * a block.\n */\nexport function getBlockClientId( node ) {\n\twhile ( node && node.nodeType !== node.ELEMENT_NODE ) {\n\t\tnode = node.parentNode;\n\t}\n\n\tif ( ! node ) {\n\t\treturn;\n\t}\n\n\tconst elementNode = /** @type {Element} */ ( node );\n\tconst blockNode = elementNode.closest( BLOCK_SELECTOR );\n\n\tif ( ! blockNode ) {\n\t\treturn;\n\t}\n\n\treturn blockNode.id.slice( 'block-'.length );\n}\n\n/**\n * Calculates the union of two rectangles.\n *\n * @param {DOMRect} rect1 First rectangle.\n * @param {DOMRect} rect2 Second rectangle.\n * @return {DOMRect} Union of the two rectangles.\n */\nexport function rectUnion( rect1, rect2 ) {\n\tconst left = Math.min( rect1.left, rect2.left );\n\tconst right = Math.max( rect1.right, rect2.right );\n\tconst bottom = Math.max( rect1.bottom, rect2.bottom );\n\tconst top = Math.min( rect1.top, rect2.top );\n\n\treturn new window.DOMRectReadOnly( left, top, right - left, bottom - top );\n}\n\n/**\n * Returns whether an element is visible.\n *\n * @param {Element} element Element.\n * @return {boolean} Whether the element is visible.\n */\nfunction isElementVisible( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn false;\n\t}\n\n\t// Check for <VisuallyHidden> component.\n\tif ( element.classList.contains( 'components-visually-hidden' ) ) {\n\t\treturn false;\n\t}\n\n\tconst bounds = element.getBoundingClientRect();\n\tif ( bounds.width === 0 || bounds.height === 0 ) {\n\t\treturn false;\n\t}\n\n\t// Older browsers, e.g. Safari < 17.4 may not support the `checkVisibility` method.\n\tif ( element.checkVisibility ) {\n\t\treturn element.checkVisibility?.( {\n\t\t\topacityProperty: true,\n\t\t\tcontentVisibilityAuto: true,\n\t\t\tvisibilityProperty: true,\n\t\t} );\n\t}\n\n\tconst style = viewport.getComputedStyle( element );\n\n\tif (\n\t\tstyle.display === 'none' ||\n\t\tstyle.visibility === 'hidden' ||\n\t\tstyle.opacity === '0'\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Checks if the element is scrollable.\n *\n * @param {Element} element Element.\n * @return {boolean} True if the element is scrollable.\n */\nfunction isScrollable( element ) {\n\tconst style = window.getComputedStyle( element );\n\treturn (\n\t\tstyle.overflowX === 'auto' ||\n\t\tstyle.overflowX === 'scroll' ||\n\t\tstyle.overflowY === 'auto' ||\n\t\tstyle.overflowY === 'scroll'\n\t);\n}\n\n/**\n * Returns the rect of the element including all visible nested elements.\n *\n * Visible nested elements, including elements that overflow the parent, are\n * taken into account.\n *\n * This function is useful for calculating the visible area of a block that\n * contains nested elements that overflow the block, e.g. the Navigation block,\n * which can contain overflowing Submenu blocks.\n *\n * The returned rect represents the full extent of the element and its visible\n * children, which may extend beyond the viewport.\n *\n * @param {Element} element Element.\n * @return {DOMRect} Bounding client rect of the element and its visible children.\n */\nexport function getVisibleElementBounds( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\n\tif ( ! viewport ) {\n\t\treturn new window.DOMRectReadOnly();\n\t}\n\n\tlet bounds = element.getBoundingClientRect();\n\tconst stack = [ element ];\n\tlet currentElement;\n\n\twhile ( ( currentElement = stack.pop() ) ) {\n\t\tfor ( const child of currentElement.children ) {\n\t\t\tif ( isElementVisible( child ) ) {\n\t\t\t\tlet childBounds = child.getBoundingClientRect();\n\t\t\t\t// If the parent is scrollable, use parent's scrollable bounds.\n\t\t\t\tif ( isScrollable( currentElement ) ) {\n\t\t\t\t\tchildBounds = currentElement.getBoundingClientRect();\n\t\t\t\t}\n\t\t\t\tbounds = rectUnion( bounds, childBounds );\n\t\t\t\tstack.push( child );\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Take into account the outer horizontal limits of the container in which\n\t * an element is supposed to be \"visible\". For example, if an element is\n\t * positioned -10px to the left of the window x value (0), this function\n\t * discounts the negative overhang because it's not visible and therefore\n\t * not to be counted in the visibility calculations. Top and bottom values\n\t * are not accounted for to accommodate vertical scroll.\n\t */\n\tconst left = Math.max( bounds.left, 0 );\n\tconst right = Math.min( bounds.right, viewport.innerWidth );\n\tbounds = new window.DOMRectReadOnly(\n\t\tleft,\n\t\tbounds.top,\n\t\tright - left,\n\t\tbounds.height\n\t);\n\n\treturn bounds;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/build-style/content.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/utils/dom.js"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,iCALW,OAAO,KACP,OAAO,GAEN,OAAO,CAIlB;AAED;;;;;;;;;GASG;AACH,gDANW,OAAO,WACP,OAAO,GAEN,OAAO,CAQlB;AAED;;;;;;;GAOG;AACH,uCALW,IAAI,OAAC,GAEJ,MAAM,GAAC,SAAS,CAoB3B;AAED;;;;;;GAMG;AACH,iCAJW,OAAO,SACP,OAAO,GACN,OAAO,CASlB;
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/utils/dom.js"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,iCALW,OAAO,KACP,OAAO,GAEN,OAAO,CAIlB;AAED;;;;;;;;;GASG;AACH,gDANW,OAAO,WACP,OAAO,GAEN,OAAO,CAQlB;AAED;;;;;;;GAOG;AACH,uCALW,IAAI,OAAC,GAEJ,MAAM,GAAC,SAAS,CAoB3B;AAED;;;;;;GAMG;AACH,iCAJW,OAAO,SACP,OAAO,GACN,OAAO,CASlB;AA8DD;;;;;;;;;;;;;;;GAeG;AACH,iDAHW,OAAO,GACN,OAAO,CA6ClB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/block-editor",
|
|
3
|
-
"version": "14.3.
|
|
3
|
+
"version": "14.3.9",
|
|
4
4
|
"description": "Generic block editor.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"@wordpress/blob": "^4.8.1",
|
|
42
42
|
"@wordpress/block-serialization-default-parser": "^5.8.1",
|
|
43
43
|
"@wordpress/blocks": "^13.8.5",
|
|
44
|
-
"@wordpress/commands": "^1.8.
|
|
45
|
-
"@wordpress/components": "^28.8.
|
|
44
|
+
"@wordpress/commands": "^1.8.8",
|
|
45
|
+
"@wordpress/components": "^28.8.8",
|
|
46
46
|
"@wordpress/compose": "^7.8.3",
|
|
47
47
|
"@wordpress/data": "^10.8.3",
|
|
48
48
|
"@wordpress/date": "^5.8.2",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"@wordpress/keyboard-shortcuts": "^5.8.3",
|
|
59
59
|
"@wordpress/keycodes": "^4.8.2",
|
|
60
60
|
"@wordpress/notices": "^5.8.3",
|
|
61
|
-
"@wordpress/preferences": "^4.8.
|
|
61
|
+
"@wordpress/preferences": "^4.8.8",
|
|
62
62
|
"@wordpress/private-apis": "^1.8.1",
|
|
63
63
|
"@wordpress/rich-text": "^7.8.3",
|
|
64
64
|
"@wordpress/style-engine": "^2.8.1",
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"publishConfig": {
|
|
89
89
|
"access": "public"
|
|
90
90
|
},
|
|
91
|
-
"gitHead": "
|
|
91
|
+
"gitHead": "b78063a69a8154bed32c2217ffbaf911852cffb5"
|
|
92
92
|
}
|
|
@@ -70,6 +70,12 @@ function ZoomOutModeInserters() {
|
|
|
70
70
|
>
|
|
71
71
|
<ZoomOutModeInserterButton
|
|
72
72
|
onClick={ () => {
|
|
73
|
+
// Hotfix for wp/6.7 where focus is not transferred to the sidebar if the
|
|
74
|
+
// block library is already open.
|
|
75
|
+
const blockLibrary = document.querySelector(
|
|
76
|
+
'[aria-label="Block Library"]'
|
|
77
|
+
);
|
|
78
|
+
|
|
73
79
|
setInserterIsOpened( {
|
|
74
80
|
rootClientId: sectionRootClientId,
|
|
75
81
|
insertionIndex: index + 1,
|
|
@@ -79,6 +85,12 @@ function ZoomOutModeInserters() {
|
|
|
79
85
|
showInsertionPoint( sectionRootClientId, index + 1, {
|
|
80
86
|
operation: 'insert',
|
|
81
87
|
} );
|
|
88
|
+
|
|
89
|
+
// If the block library was available before we opened it with `setInserterIsOpened`, we need to
|
|
90
|
+
// send focus to the block library.
|
|
91
|
+
if ( blockLibrary ) {
|
|
92
|
+
blockLibrary.focus();
|
|
93
|
+
}
|
|
82
94
|
} }
|
|
83
95
|
/>
|
|
84
96
|
</BlockPopoverInbetween>
|
|
@@ -204,11 +204,19 @@ export function useInnerBlocksProps( props = {}, options = {} ) {
|
|
|
204
204
|
getBlockSettings,
|
|
205
205
|
isDragging,
|
|
206
206
|
getSectionRootClientId,
|
|
207
|
+
isZoomOutMode: isZoomOut,
|
|
207
208
|
} = unlock( select( blockEditorStore ) );
|
|
208
|
-
let _isDropZoneDisabled;
|
|
209
209
|
|
|
210
210
|
if ( ! clientId ) {
|
|
211
|
-
|
|
211
|
+
const sectionRootClientId = getSectionRootClientId();
|
|
212
|
+
// Disable the root drop zone when zoomed out and the section root client id
|
|
213
|
+
// is not the root block list (represented by an empty string).
|
|
214
|
+
// This avoids drag handling bugs caused by having two block lists acting as
|
|
215
|
+
// drop zones - the actual 'root' block list and the section root.
|
|
216
|
+
return {
|
|
217
|
+
isDropZoneDisabled:
|
|
218
|
+
isZoomOut() && sectionRootClientId !== '',
|
|
219
|
+
};
|
|
212
220
|
}
|
|
213
221
|
|
|
214
222
|
const { hasBlockSupport, getBlockType } = select( blocksStore );
|
|
@@ -219,14 +227,13 @@ export function useInnerBlocksProps( props = {}, options = {} ) {
|
|
|
219
227
|
const parentClientId = getBlockRootClientId( clientId );
|
|
220
228
|
const [ defaultLayout ] = getBlockSettings( clientId, 'layout' );
|
|
221
229
|
|
|
222
|
-
_isDropZoneDisabled = blockEditingMode === 'disabled';
|
|
230
|
+
let _isDropZoneDisabled = blockEditingMode === 'disabled';
|
|
223
231
|
|
|
224
232
|
if ( __unstableGetEditorMode() === 'zoom-out' ) {
|
|
225
233
|
// In zoom out mode, we want to disable the drop zone for the sections.
|
|
226
234
|
// The inner blocks belonging to the section drop zone is
|
|
227
235
|
// already disabled by the blocks themselves being disabled.
|
|
228
236
|
const sectionRootClientId = getSectionRootClientId();
|
|
229
|
-
|
|
230
237
|
_isDropZoneDisabled = clientId !== sectionRootClientId;
|
|
231
238
|
}
|
|
232
239
|
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
} from '@wordpress/element';
|
|
17
17
|
import { VisuallyHidden, SearchControl, Popover } from '@wordpress/components';
|
|
18
18
|
import { __ } from '@wordpress/i18n';
|
|
19
|
-
import { useDebouncedInput } from '@wordpress/compose';
|
|
19
|
+
import { useDebouncedInput, useViewportMatch } from '@wordpress/compose';
|
|
20
20
|
import { useSelect } from '@wordpress/data';
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -67,6 +67,7 @@ function InserterMenu(
|
|
|
67
67
|
const [ patternFilter, setPatternFilter ] = useState( 'all' );
|
|
68
68
|
const [ selectedMediaCategory, setSelectedMediaCategory ] =
|
|
69
69
|
useState( null );
|
|
70
|
+
const isLargeViewport = useViewportMatch( 'large' );
|
|
70
71
|
|
|
71
72
|
const [ hasCategories, setHasCategories ] = useState( true );
|
|
72
73
|
function getInitialTab() {
|
|
@@ -82,7 +83,7 @@ function InserterMenu(
|
|
|
82
83
|
|
|
83
84
|
const shouldUseZoomOut =
|
|
84
85
|
selectedTab === 'patterns' || selectedTab === 'media';
|
|
85
|
-
useZoomOut( shouldUseZoomOut );
|
|
86
|
+
useZoomOut( shouldUseZoomOut && isLargeViewport );
|
|
86
87
|
|
|
87
88
|
const [ destinationRootClientId, onInsertBlocks, onToggleInsertionPoint ] =
|
|
88
89
|
useInsertionPoint( {
|
|
@@ -3,20 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Button, Tooltip } from '@wordpress/components';
|
|
5
5
|
import { link, linkOff } from '@wordpress/icons';
|
|
6
|
-
import { __
|
|
6
|
+
import { __ } from '@wordpress/i18n';
|
|
7
7
|
|
|
8
8
|
export default function LinkedButton( { isLinked, ...props } ) {
|
|
9
|
-
const label = isLinked
|
|
10
|
-
? sprintf(
|
|
11
|
-
// translators: 1. Type of spacing being modified (padding, margin, etc).
|
|
12
|
-
__( 'Unlink %1$s' ),
|
|
13
|
-
props.label.toLowerCase()
|
|
14
|
-
).trim()
|
|
15
|
-
: sprintf(
|
|
16
|
-
// translators: 1. Type of spacing being modified (padding, margin, etc).
|
|
17
|
-
__( 'Link %1$s' ),
|
|
18
|
-
props.label.toLowerCase()
|
|
19
|
-
).trim();
|
|
9
|
+
const label = isLinked ? __( 'Unlink sides' ) : __( 'Link sides' );
|
|
20
10
|
|
|
21
11
|
return (
|
|
22
12
|
<Tooltip text={ label }>
|
|
@@ -287,7 +287,7 @@ function isInsertionPoint( targetToCheck, ownerDocument ) {
|
|
|
287
287
|
return !! (
|
|
288
288
|
defaultView &&
|
|
289
289
|
targetToCheck instanceof defaultView.HTMLElement &&
|
|
290
|
-
targetToCheck.
|
|
290
|
+
targetToCheck.closest( '[data-is-insertion-point]' )
|
|
291
291
|
);
|
|
292
292
|
}
|
|
293
293
|
|
package/src/index.js
CHANGED
package/src/private-apis.js
CHANGED
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
useLayoutClasses,
|
|
25
25
|
useLayoutStyles,
|
|
26
26
|
__unstableBlockStyleVariationOverridesWithConfig,
|
|
27
|
+
useZoomOut,
|
|
27
28
|
} from './hooks';
|
|
28
29
|
import DimensionsTool from './components/dimensions-tool';
|
|
29
30
|
import ResolutionTool from './components/resolution-tool';
|
|
@@ -80,6 +81,7 @@ lock( privateApis, {
|
|
|
80
81
|
usesContextKey,
|
|
81
82
|
useFlashEditableBlocks,
|
|
82
83
|
useZoomOutModeExit,
|
|
84
|
+
useZoomOut,
|
|
83
85
|
globalStylesDataKey,
|
|
84
86
|
globalStylesLinksDataKey,
|
|
85
87
|
selectBlockPatternsKey,
|
package/src/utils/dom.js
CHANGED
|
@@ -118,6 +118,22 @@ function isElementVisible( element ) {
|
|
|
118
118
|
return true;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Checks if the element is scrollable.
|
|
123
|
+
*
|
|
124
|
+
* @param {Element} element Element.
|
|
125
|
+
* @return {boolean} True if the element is scrollable.
|
|
126
|
+
*/
|
|
127
|
+
function isScrollable( element ) {
|
|
128
|
+
const style = window.getComputedStyle( element );
|
|
129
|
+
return (
|
|
130
|
+
style.overflowX === 'auto' ||
|
|
131
|
+
style.overflowX === 'scroll' ||
|
|
132
|
+
style.overflowY === 'auto' ||
|
|
133
|
+
style.overflowY === 'scroll'
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
121
137
|
/**
|
|
122
138
|
* Returns the rect of the element including all visible nested elements.
|
|
123
139
|
*
|
|
@@ -136,19 +152,23 @@ function isElementVisible( element ) {
|
|
|
136
152
|
*/
|
|
137
153
|
export function getVisibleElementBounds( element ) {
|
|
138
154
|
const viewport = element.ownerDocument.defaultView;
|
|
155
|
+
|
|
139
156
|
if ( ! viewport ) {
|
|
140
157
|
return new window.DOMRectReadOnly();
|
|
141
158
|
}
|
|
142
159
|
|
|
143
160
|
let bounds = element.getBoundingClientRect();
|
|
144
|
-
|
|
145
161
|
const stack = [ element ];
|
|
146
162
|
let currentElement;
|
|
147
163
|
|
|
148
164
|
while ( ( currentElement = stack.pop() ) ) {
|
|
149
165
|
for ( const child of currentElement.children ) {
|
|
150
166
|
if ( isElementVisible( child ) ) {
|
|
151
|
-
|
|
167
|
+
let childBounds = child.getBoundingClientRect();
|
|
168
|
+
// If the parent is scrollable, use parent's scrollable bounds.
|
|
169
|
+
if ( isScrollable( currentElement ) ) {
|
|
170
|
+
childBounds = currentElement.getBoundingClientRect();
|
|
171
|
+
}
|
|
152
172
|
bounds = rectUnion( bounds, childBounds );
|
|
153
173
|
stack.push( child );
|
|
154
174
|
}
|