@wordpress/block-editor
Version:
8 lines (7 loc) • 9.12 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/components/grid/grid-item-resizer.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { ResizableBox } from '@wordpress/components';\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport BlockPopoverCover from '../block-popover/cover';\nimport { getComputedCSS, getGridTracks, getClosestTrack } from './utils';\n\nexport function GridItemResizer( {\n\tclientId,\n\tbounds,\n\tonChange,\n\tparentLayout,\n} ) {\n\tconst blockElement = useBlockElement( clientId );\n\tconst rootBlockElement = blockElement?.parentElement;\n\tconst { isManualPlacement } = parentLayout;\n\n\tif ( ! blockElement || ! rootBlockElement ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<GridItemResizerInner\n\t\t\tclientId={ clientId }\n\t\t\tbounds={ bounds }\n\t\t\tblockElement={ blockElement }\n\t\t\trootBlockElement={ rootBlockElement }\n\t\t\tonChange={ onChange }\n\t\t\tisManualGrid={\n\t\t\t\tisManualPlacement &&\n\t\t\t\twindow.__experimentalEnableGridInteractivity\n\t\t\t}\n\t\t/>\n\t);\n}\n\nfunction GridItemResizerInner( {\n\tclientId,\n\tbounds,\n\tblockElement,\n\trootBlockElement,\n\tonChange,\n\tisManualGrid,\n} ) {\n\tconst [ resizeDirection, setResizeDirection ] = useState( null );\n\tconst [ enableSide, setEnableSide ] = useState( {\n\t\ttop: false,\n\t\tbottom: false,\n\t\tleft: false,\n\t\tright: false,\n\t} );\n\n\tuseEffect( () => {\n\t\tconst observer = new window.ResizeObserver( () => {\n\t\t\tconst blockClientRect = blockElement.getBoundingClientRect();\n\t\t\tconst rootBlockClientRect =\n\t\t\t\trootBlockElement.getBoundingClientRect();\n\n\t\t\tconst topAvailable = blockClientRect.top > rootBlockClientRect.top;\n\t\t\tconst bottomAvailable =\n\t\t\t\tblockClientRect.bottom < rootBlockClientRect.bottom;\n\t\t\tconst leftAvailable =\n\t\t\t\tblockClientRect.left > rootBlockClientRect.left;\n\t\t\tconst rightAvailable =\n\t\t\t\tblockClientRect.right < rootBlockClientRect.right;\n\n\t\t\tsetEnableSide( {\n\t\t\t\ttop: !! isManualGrid\n\t\t\t\t\t? topAvailable\n\t\t\t\t\t: ! bottomAvailable && topAvailable,\n\t\t\t\tbottom: bottomAvailable,\n\t\t\t\tleft: !! isManualGrid\n\t\t\t\t\t? leftAvailable\n\t\t\t\t\t: ! rightAvailable && leftAvailable,\n\t\t\t\tright: rightAvailable,\n\t\t\t} );\n\t\t} );\n\t\tobserver.observe( blockElement );\n\t\treturn () => observer.disconnect();\n\t}, [ blockElement, rootBlockElement, isManualGrid ] );\n\n\tconst justification = {\n\t\tright: 'left',\n\t\tleft: 'right',\n\t};\n\n\tconst alignment = {\n\t\ttop: 'flex-end',\n\t\tbottom: 'flex-start',\n\t};\n\n\tconst styles = {\n\t\tdisplay: 'flex',\n\t\tjustifyContent: 'center',\n\t\talignItems: 'center',\n\t\t...( justification[ resizeDirection ] && {\n\t\t\tjustifyContent: justification[ resizeDirection ],\n\t\t} ),\n\t\t...( alignment[ resizeDirection ] && {\n\t\t\talignItems: alignment[ resizeDirection ],\n\t\t} ),\n\t};\n\n\treturn (\n\t\t<BlockPopoverCover\n\t\t\tclassName=\"block-editor-grid-item-resizer\"\n\t\t\tclientId={ clientId }\n\t\t\t__unstablePopoverSlot=\"__unstable-block-tools-after\"\n\t\t\tadditionalStyles={ styles }\n\t\t>\n\t\t\t<ResizableBox\n\t\t\t\tclassName=\"block-editor-grid-item-resizer__box\"\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: '100%',\n\t\t\t\t} }\n\t\t\t\tenable={ {\n\t\t\t\t\tbottom: enableSide.bottom,\n\t\t\t\t\tbottomLeft: false,\n\t\t\t\t\tbottomRight: false,\n\t\t\t\t\tleft: enableSide.left,\n\t\t\t\t\tright: enableSide.right,\n\t\t\t\t\ttop: enableSide.top,\n\t\t\t\t\ttopLeft: false,\n\t\t\t\t\ttopRight: false,\n\t\t\t\t} }\n\t\t\t\tbounds={ bounds }\n\t\t\t\tboundsByDirection\n\t\t\t\tonPointerDown={ ( { target, pointerId } ) => {\n\t\t\t\t\t/*\n\t\t\t\t\t * Captures the pointer to avoid hiccups while dragging over objects\n\t\t\t\t\t * like iframes and ensures that the event to end the drag is\n\t\t\t\t\t * captured by the target (resize handle) whether or not it\u2019s under\n\t\t\t\t\t * the pointer.\n\t\t\t\t\t */\n\t\t\t\t\ttarget.setPointerCapture( pointerId );\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ ( event, direction ) => {\n\t\t\t\t\t/*\n\t\t\t\t\t * The container justification and alignment need to be set\n\t\t\t\t\t * according to the direction the resizer is being dragged in,\n\t\t\t\t\t * so that it resizes in the right direction.\n\t\t\t\t\t */\n\t\t\t\t\tsetResizeDirection( direction );\n\t\t\t\t} }\n\t\t\t\tonResizeStop={ ( event, direction, boxElement ) => {\n\t\t\t\t\tconst columnGap = parseFloat(\n\t\t\t\t\t\tgetComputedCSS( rootBlockElement, 'column-gap' )\n\t\t\t\t\t);\n\t\t\t\t\tconst rowGap = parseFloat(\n\t\t\t\t\t\tgetComputedCSS( rootBlockElement, 'row-gap' )\n\t\t\t\t\t);\n\t\t\t\t\tconst gridColumnTracks = getGridTracks(\n\t\t\t\t\t\tgetComputedCSS(\n\t\t\t\t\t\t\trootBlockElement,\n\t\t\t\t\t\t\t'grid-template-columns'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcolumnGap\n\t\t\t\t\t);\n\t\t\t\t\tconst gridRowTracks = getGridTracks(\n\t\t\t\t\t\tgetComputedCSS(\n\t\t\t\t\t\t\trootBlockElement,\n\t\t\t\t\t\t\t'grid-template-rows'\n\t\t\t\t\t\t),\n\t\t\t\t\t\trowGap\n\t\t\t\t\t);\n\t\t\t\t\tconst rect = new window.DOMRect(\n\t\t\t\t\t\tblockElement.offsetLeft + boxElement.offsetLeft,\n\t\t\t\t\t\tblockElement.offsetTop + boxElement.offsetTop,\n\t\t\t\t\t\tboxElement.offsetWidth,\n\t\t\t\t\t\tboxElement.offsetHeight\n\t\t\t\t\t);\n\t\t\t\t\tconst columnStart =\n\t\t\t\t\t\tgetClosestTrack( gridColumnTracks, rect.left ) + 1;\n\t\t\t\t\tconst rowStart =\n\t\t\t\t\t\tgetClosestTrack( gridRowTracks, rect.top ) + 1;\n\t\t\t\t\tconst columnEnd =\n\t\t\t\t\t\tgetClosestTrack( gridColumnTracks, rect.right, 'end' ) +\n\t\t\t\t\t\t1;\n\t\t\t\t\tconst rowEnd =\n\t\t\t\t\t\tgetClosestTrack( gridRowTracks, rect.bottom, 'end' ) +\n\t\t\t\t\t\t1;\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\tcolumnSpan: columnEnd - columnStart + 1,\n\t\t\t\t\t\trowSpan: rowEnd - rowStart + 1,\n\t\t\t\t\t\tcolumnStart: isManualGrid ? columnStart : undefined,\n\t\t\t\t\t\trowStart: isManualGrid ? rowStart : undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</BlockPopoverCover>\n\t);\n}\n"],
"mappings": "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",
"names": ["BlockPopoverCover"]
}