@wordpress/block-library 8.19.5 → 8.19.6

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.
@@ -309,6 +309,7 @@ function Image({
309
309
  const lightboxSetting = (0, _blockEditor.useSetting)('lightbox');
310
310
  const showLightboxToggle = !!lightbox || lightboxSetting?.allowEditing === true;
311
311
  const lightboxChecked = !!lightbox?.enabled || !lightbox && !!lightboxSetting?.enabled;
312
+ const lightboxToggleDisabled = linkDestination !== 'none';
312
313
  const dimensionsControl = (0, _element.createElement)(DimensionsTool, {
313
314
  value: {
314
315
  width,
@@ -442,7 +443,9 @@ function Image({
442
443
  enabled: newValue
443
444
  }
444
445
  });
445
- }
446
+ },
447
+ disabled: lightboxToggleDisabled,
448
+ help: lightboxToggleDisabled ? (0, _i18n.__)('“Expand on click” scales the image up, and can’t be combined with a link.') : ''
446
449
  })))), (0, _element.createElement)(_blockEditor.InspectorControls, {
447
450
  group: "advanced"
448
451
  }, (0, _element.createElement)(_components.TextControl, {
@@ -1 +1 @@
1
- {"version":3,"names":["_element","require","_blob","_components","_compose","_data","_blockEditor","_i18n","_url","_blocks","_icons","_notices","_coreData","_lockUnlock","_util","_useClientWidth","_interopRequireDefault","_edit","_constants","_utils","DimensionsTool","ResolutionTool","unlock","blockEditorPrivateApis","scaleOptions","value","label","_x","help","__","Image","temporaryURL","attributes","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","blockEditingMode","url","alt","caption","align","id","href","rel","linkClass","linkDestination","title","width","height","aspectRatio","scale","linkTarget","sizeSlug","lightbox","numericWidth","parseInt","undefined","numericHeight","imageRef","useRef","prevCaption","usePrevious","showCaption","setShowCaption","useState","allowResize","getBlock","useSelect","blockEditorStore","image","multiImageSelection","select","getMedia","coreStore","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","useDispatch","createErrorNotice","createSuccessNotice","noticesStore","isLargeViewport","useViewportMatch","isWideAligned","includes","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","useClientWidth","hasNonContentControls","isResizable","imageSizeOptions","filter","slug","media_details","sizes","source_url","map","name","canUploadMedia","useEffect","isExternalImage","window","fetch","then","response","blob","catch","captionRef","useCallback","node","focus","naturalWidth","naturalHeight","useMemo","current","complete","onResizeStart","onResizeStop","onImageError","embedBlock","createUpgradedEmbedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","isBlobURL","type","allowedTypes","ALLOWED_MEDIA_TYPES","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","canEditImage","allowCrop","switchToCover","switchToBlockType","dimensionsUnitsOptions","useCustomUnits","availableUnits","lightboxSetting","useSetting","showLightboxToggle","allowEditing","lightboxChecked","enabled","dimensionsControl","createElement","onChange","newWidth","newHeight","newScale","newAspectRatio","defaultScale","defaultAspectRatio","unitsOptions","resetAll","sizeControls","InspectorControls","__experimentalToolsPanel","controls","Fragment","BlockControls","group","BlockAlignmentControl","ToolbarButton","onClick","icon","captionIcon","isPressed","__experimentalImageURLInputUI","onChangeUrl","mediaUrl","mediaLink","link","crop","overlayText","MediaReplaceFlow","mediaId","mediaURL","accept","onSelect","ToolbarGroup","upload","__experimentalToolsPanelItem","isShownByDefault","hasValue","onDeselect","TextareaControl","ExternalLink","__nextHasNoMarginBottom","options","ToggleControl","checked","newValue","TextControl","filename","getFilename","defaultedAlt","sprintf","borderProps","useBorderProps","isRounded","className","src","onLoad","event","target","ref","style","objectFit","Spinner","fallbackClientWidth","__experimentalImageEditor","onSaveImage","imageAttributes","onFinishEditing","numericRatio","evalAspectRatio","customRatio","naturalRatio","ratio","currentWidth","currentHeight","minWidth","MIN_SIZE","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","isRTL","ResizableBox","display","size","showHandle","maxHeight","lockAspectRatio","enable","top","right","bottom","left","direction","elt","offsetWidth","String","resizeRatio","RichText","isEmpty","identifier","__experimentalGetElementClassName","tagName","placeholder","inlineToolbar","__unstableOnSplitAtEnd","createBlock","getDefaultBlockName"],"sources":["@wordpress/block-library/src/image/image.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tToggleControl,\n\tTextControl,\n\tToolbarButton,\n\tToolbarGroup,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalUseCustomUnits as useCustomUnits,\n} from '@wordpress/components';\nimport { useViewportMatch, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tuseSetting,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalGetElementClassName,\n\t__experimentalUseBorderProps as useBorderProps,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport {\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseCallback,\n} from '@wordpress/element';\nimport { __, _x, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tcrop,\n\toverlayText,\n\tupload,\n\tcaption as captionIcon,\n} from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\nimport { evalAspectRatio } from './utils';\n\nconst { DimensionsTool, ResolutionTool } = unlock( blockEditorPrivateApis );\n\nconst scaleOptions = [\n\t{\n\t\tvalue: 'cover',\n\t\tlabel: _x( 'Cover', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image covers the space evenly.' ),\n\t},\n\t{\n\t\tvalue: 'contain',\n\t\tlabel: _x( 'Contain', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image is contained without distortion.' ),\n\t},\n];\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n\tblockEditingMode,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\tlinkDestination,\n\t\ttitle,\n\t\twidth,\n\t\theight,\n\t\taspectRatio,\n\t\tscale,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t\tlightbox,\n\t} = attributes;\n\n\t// The only supported unit is px, so we can parseInt to strip the px here.\n\tconst numericWidth = width ? parseInt( width, 10 ) : undefined;\n\tconst numericHeight = height ? parseInt( height, 10 ) : undefined;\n\n\tconst imageRef = useRef();\n\tconst prevCaption = usePrevious( caption );\n\tconst [ showCaption, setShowCaption ] = useState( !! caption );\n\tconst { allowResize = true } = context;\n\tconst { getBlock } = useSelect( blockEditorStore );\n\n\tconst { image, multiImageSelection } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getMedia } = select( coreStore );\n\t\t\tconst { getMultiSelectedBlockClientIds, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\timage:\n\t\t\t\t\tid && isSelected\n\t\t\t\t\t\t? getMedia( id, { context: 'view' } )\n\t\t\t\t\t\t: null,\n\t\t\t\tmultiImageSelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/image'\n\t\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ id, isSelected ]\n\t);\n\tconst { canInsertCover, imageEditing, imageSizes, maxWidth, mediaUpload } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetSettings,\n\t\t\t\t\tcanInsertBlockType,\n\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\t\tconst settings = getSettings();\n\n\t\t\t\treturn {\n\t\t\t\t\timageEditing: settings.imageEditing,\n\t\t\t\t\timageSizes: settings.imageSizes,\n\t\t\t\t\tmaxWidth: settings.maxWidth,\n\t\t\t\t\tmediaUpload: settings.mediaUpload,\n\t\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t\t'core/cover',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = [ 'wide', 'full' ].includes( align );\n\tconst [\n\t\t{ loadedNaturalWidth, loadedNaturalHeight },\n\t\tsetLoadedNaturalSize,\n\t] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst [ externalBlob, setExternalBlob ] = useState();\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\tconst isResizable =\n\t\tallowResize &&\n\t\thasNonContentControls &&\n\t\t! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = imageSizes\n\t\t.filter(\n\t\t\t( { slug } ) => image?.media_details?.sizes?.[ slug ]?.source_url\n\t\t)\n\t\t.map( ( { name, slug } ) => ( { value: slug, label: name } ) );\n\tconst canUploadMedia = !! mediaUpload;\n\n\t// If an image is externally hosted, try to fetch the image data. This may\n\t// fail if the image host doesn't allow CORS with the domain. If it works,\n\t// we can enable a button in the toolbar to upload the image.\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! isExternalImage( id, url ) ||\n\t\t\t! isSelected ||\n\t\t\t! canUploadMedia\n\t\t) {\n\t\t\tsetExternalBlob();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( externalBlob ) return;\n\n\t\twindow\n\t\t\t// Avoid cache, which seems to help avoid CORS problems.\n\t\t\t.fetch( url.includes( '?' ) ? url : url + '?' )\n\t\t\t.then( ( response ) => response.blob() )\n\t\t\t.then( ( blob ) => setExternalBlob( blob ) )\n\t\t\t// Do nothing, cannot upload.\n\t\t\t.catch( () => {} );\n\t}, [ id, url, isSelected, externalBlob, canUploadMedia ] );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( caption && ! prevCaption ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ caption, prevCaption ] );\n\n\t// Focus the caption when we click to add one.\n\tconst captionRef = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && ! caption ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ caption ]\n\t);\n\n\t// Get naturalWidth and naturalHeight from image ref, and fall back to loaded natural\n\t// width and height. This resolves an issue in Safari where the loaded natural\n\t// width and height is otherwise lost when switching between alignments.\n\t// See: https://github.com/WordPress/gutenberg/pull/37210.\n\tconst { naturalWidth, naturalHeight } = useMemo( () => {\n\t\treturn {\n\t\t\tnaturalWidth:\n\t\t\t\timageRef.current?.naturalWidth ||\n\t\t\t\tloadedNaturalWidth ||\n\t\t\t\tundefined,\n\t\t\tnaturalHeight:\n\t\t\t\timageRef.current?.naturalHeight ||\n\t\t\t\tloadedNaturalHeight ||\n\t\t\t\tundefined,\n\t\t};\n\t}, [\n\t\tloadedNaturalWidth,\n\t\tloadedNaturalHeight,\n\t\timageRef.current?.complete,\n\t] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tfunction onImageError() {\n\t\t// Check if there's an embed block that handles this URL, e.g., instagram URL.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/11472\n\t\tconst embedBlock = createUpgradedEmbedBlock( { attributes: { url } } );\n\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\t}\n\n\tfunction onSetHref( props ) {\n\t\tsetAttributes( props );\n\t}\n\n\tfunction onSetTitle( value ) {\n\t\t// This is the HTML title attribute, separate from the media object\n\t\t// title.\n\t\tsetAttributes( { title: value } );\n\t}\n\n\tfunction updateAlt( newAlt ) {\n\t\tsetAttributes( { alt: newAlt } );\n\t}\n\n\tfunction updateImage( newSizeSlug ) {\n\t\tconst newUrl = image?.media_details?.sizes?.[ newSizeSlug ]?.source_url;\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\tsizeSlug: newSizeSlug,\n\t\t} );\n\t}\n\n\tfunction uploadExternal() {\n\t\tmediaUpload( {\n\t\t\tfilesList: [ externalBlob ],\n\t\t\tonFileChange( [ img ] ) {\n\t\t\t\tonSelectImage( img );\n\n\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetExternalBlob();\n\t\t\t\tcreateSuccessNotice( __( 'Image uploaded.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t},\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tonError( message ) {\n\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t},\n\t\t} );\n\t}\n\n\tfunction updateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].includes( nextAlign )\n\t\t\t? {\n\t\t\t\t\twidth: undefined,\n\t\t\t\t\theight: undefined,\n\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t\tscale: undefined,\n\t\t\t }\n\t\t\t: {};\n\t\tsetAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t\tif ( ! caption ) {\n\t\t\t\tsetShowCaption( false );\n\t\t\t}\n\t\t}\n\t}, [ isSelected, caption ] );\n\n\tconst canEditImage = id && naturalWidth && naturalHeight && imageEditing;\n\tconst allowCrop = ! multiImageSelection && canEditImage && ! isEditingImage;\n\n\tfunction switchToCover() {\n\t\treplaceBlocks(\n\t\t\tclientId,\n\t\t\tswitchToBlockType( getBlock( clientId ), 'core/cover' )\n\t\t);\n\t}\n\n\t// TODO: Can allow more units after figuring out how they should interact\n\t// with the ResizableBox and ImageEditor components. Calculations later on\n\t// for those components are currently assuming px units.\n\tconst dimensionsUnitsOptions = useCustomUnits( {\n\t\tavailableUnits: [ 'px' ],\n\t} );\n\n\tconst lightboxSetting = useSetting( 'lightbox' );\n\n\tconst showLightboxToggle =\n\t\t!! lightbox || lightboxSetting?.allowEditing === true;\n\n\tconst lightboxChecked =\n\t\t!! lightbox?.enabled || ( ! lightbox && !! lightboxSetting?.enabled );\n\n\tconst dimensionsControl = (\n\t\t<DimensionsTool\n\t\t\tvalue={ { width, height, scale, aspectRatio } }\n\t\t\tonChange={ ( {\n\t\t\t\twidth: newWidth,\n\t\t\t\theight: newHeight,\n\t\t\t\tscale: newScale,\n\t\t\t\taspectRatio: newAspectRatio,\n\t\t\t} ) => {\n\t\t\t\t// Rebuilding the object forces setting `undefined`\n\t\t\t\t// for values that are removed since setAttributes\n\t\t\t\t// doesn't do anything with keys that aren't set.\n\t\t\t\tsetAttributes( {\n\t\t\t\t\t// CSS includes `height: auto`, but we need\n\t\t\t\t\t// `width: auto` to fix the aspect ratio when\n\t\t\t\t\t// only height is set due to the width and\n\t\t\t\t\t// height attributes set via the server.\n\t\t\t\t\twidth: ! newWidth && newHeight ? 'auto' : newWidth,\n\t\t\t\t\theight: newHeight,\n\t\t\t\t\tscale: newScale,\n\t\t\t\t\taspectRatio: newAspectRatio,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tdefaultScale=\"cover\"\n\t\t\tdefaultAspectRatio=\"auto\"\n\t\t\tscaleOptions={ scaleOptions }\n\t\t\tunitsOptions={ dimensionsUnitsOptions }\n\t\t/>\n\t);\n\n\tconst resetAll = () => {\n\t\tsetAttributes( {\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tscale: undefined,\n\t\t\taspectRatio: undefined,\n\t\t\tlightbox: undefined,\n\t\t} );\n\t};\n\n\tconst sizeControls = (\n\t\t<InspectorControls>\n\t\t\t<ToolsPanel label={ __( 'Settings' ) } resetAll={ resetAll }>\n\t\t\t\t{ isResizable && dimensionsControl }\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n\n\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\t\tvalue={ align }\n\t\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( { caption: undefined } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ captionIcon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tshowCaption\n\t\t\t\t\t\t\t\t? __( 'Remove caption' )\n\t\t\t\t\t\t\t\t: __( 'Add caption' )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t\t<ImageURLInputUI\n\t\t\t\t\t\turl={ href || '' }\n\t\t\t\t\t\tonChangeUrl={ onSetHref }\n\t\t\t\t\t\tlinkDestination={ linkDestination }\n\t\t\t\t\t\tmediaUrl={ ( image && image.source_url ) || url }\n\t\t\t\t\t\tmediaLink={ image && image.link }\n\t\t\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\t\t\tlinkClass={ linkClass }\n\t\t\t\t\t\trel={ rel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ allowCrop && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && canInsertCover && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ticon={ overlayText }\n\t\t\t\t\t\tlabel={ __( 'Add text over image' ) }\n\t\t\t\t\t\tonClick={ switchToCover }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ ! multiImageSelection && externalBlob && (\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel label={ __( 'Settings' ) } resetAll={ resetAll }>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\t\t\thasValue={ () => alt !== '' }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { alt: undefined } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/WAI/tutorials/images/decision-tree\">\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'Describe the purpose of the image.'\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t\t{ __( 'Leave empty if decorative.' ) }\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ isResizable && dimensionsControl }\n\t\t\t\t\t<ResolutionTool\n\t\t\t\t\t\tvalue={ sizeSlug }\n\t\t\t\t\t\tonChange={ updateImage }\n\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t/>\n\t\t\t\t\t{ showLightboxToggle && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\thasValue={ () => !! lightbox }\n\t\t\t\t\t\t\tlabel={ __( 'Expand on Click' ) }\n\t\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\t\tsetAttributes( { lightbox: undefined } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Expand on Click' ) }\n\t\t\t\t\t\t\t\tchecked={ lightboxChecked }\n\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlightbox: { enabled: newValue },\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</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\tonChange={ onSetTitle }\n\t\t\t\t\thelp={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Describe the role of this image on the page.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/TR/html52/dom.html#the-title-attribute\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'(Note: many devices and browsers do not display this text.)'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n\n\tconst filename = getFilename( url );\n\tlet defaultedAlt;\n\n\tif ( alt ) {\n\t\tdefaultedAlt = alt;\n\t} else if ( filename ) {\n\t\tdefaultedAlt = sprintf(\n\t\t\t/* translators: %s: file name */\n\t\t\t__( 'This image has an empty alt attribute; its file name is %s' ),\n\t\t\tfilename\n\t\t);\n\t} else {\n\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t}\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst isRounded = attributes.className?.includes( 'is-style-rounded' );\n\n\tlet img = (\n\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t// should direct focus to block.\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t<>\n\t\t\t<img\n\t\t\t\tsrc={ temporaryURL || url }\n\t\t\t\talt={ defaultedAlt }\n\t\t\t\tonError={ () => onImageError() }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetLoadedNaturalSize( {\n\t\t\t\t\t\tloadedNaturalWidth: event.target?.naturalWidth,\n\t\t\t\t\t\tloadedNaturalHeight: event.target?.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tref={ imageRef }\n\t\t\t\tclassName={ borderProps.className }\n\t\t\t\tstyle={ {\n\t\t\t\t\twidth:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : undefined,\n\t\t\t\t\theight:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : undefined,\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\t...borderProps.style,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ temporaryURL && <Spinner /> }\n\t\t</>\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t);\n\n\t// clientWidth needs to be a number for the image Cropper to work, but sometimes it's 0\n\t// So we try using the imageRef width first and fallback to clientWidth.\n\tconst fallbackClientWidth = imageRef.current?.width || clientWidth;\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\tid={ id }\n\t\t\t\turl={ url }\n\t\t\t\twidth={ numericWidth }\n\t\t\t\theight={ numericHeight }\n\t\t\t\tclientWidth={ fallbackClientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\t\tsetAttributes( imageAttributes )\n\t\t\t\t}\n\t\t\t\tonFinishEditing={ () => {\n\t\t\t\t\tsetIsEditingImage( false );\n\t\t\t\t} }\n\t\t\t\tborderProps={ isRounded ? undefined : borderProps }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable ) {\n\t\timg = <div style={ { width, height, aspectRatio } }>{ img }</div>;\n\t} else {\n\t\tconst numericRatio = aspectRatio && evalAspectRatio( aspectRatio );\n\t\tconst customRatio = numericWidth / numericHeight;\n\t\tconst naturalRatio = naturalWidth / naturalHeight;\n\t\tconst ratio = numericRatio || customRatio || naturalRatio || 1;\n\t\tconst currentWidth =\n\t\t\t! numericWidth && numericHeight\n\t\t\t\t? numericHeight * ratio\n\t\t\t\t: numericWidth;\n\t\tconst currentHeight =\n\t\t\t! numericHeight && numericWidth\n\t\t\t\t? numericWidth / ratio\n\t\t\t\t: numericHeight;\n\n\t\tconst minWidth =\n\t\t\tnaturalWidth < naturalHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\tconst minHeight =\n\t\t\tnaturalHeight < naturalWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t// With the current implementation of ResizableBox, an image needs an\n\t\t// explicit pixel value for the max-width. In absence of being able to\n\t\t// set the content-width, this max-width is currently dictated by the\n\t\t// vanilla editor style. The following variable adds a buffer to this\n\t\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t\t// in most cases, allow you to scale the image beyond the width of the\n\t\t// main column, though not infinitely.\n\t\t// @todo It would be good to revisit this once a content-width variable\n\t\t// becomes available.\n\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\tlet showRightHandle = false;\n\t\tlet showLeftHandle = false;\n\n\t\t/* eslint-disable no-lonely-if */\n\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\tif ( align === 'center' ) {\n\t\t\t// When the image is centered, show both handles.\n\t\t\tshowRightHandle = true;\n\t\t\tshowLeftHandle = true;\n\t\t} else if ( isRTL() ) {\n\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t// Show the right handle and hide the left handle only when it is\n\t\t\t// aligned left. Otherwise always show the left handle.\n\t\t\tif ( align === 'left' ) {\n\t\t\t\tshowRightHandle = true;\n\t\t\t} else {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// Show the left handle and hide the right handle only when the\n\t\t\t// image is aligned right. Otherwise always show the right handle.\n\t\t\tif ( align === 'right' ) {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t} else {\n\t\t\t\tshowRightHandle = true;\n\t\t\t}\n\t\t}\n\t\t/* eslint-enable no-lonely-if */\n\n\t\timg = (\n\t\t\t<ResizableBox\n\t\t\t\tstyle={ {\n\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t! width && ! height && aspectRatio\n\t\t\t\t\t\t\t? aspectRatio\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t} }\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: currentWidth ?? 'auto',\n\t\t\t\t\theight: currentHeight ?? 'auto',\n\t\t\t\t} }\n\t\t\t\tshowHandle={ isSelected }\n\t\t\t\tminWidth={ minWidth }\n\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\tminHeight={ minHeight }\n\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\tlockAspectRatio={ ratio }\n\t\t\t\tenable={ {\n\t\t\t\t\ttop: false,\n\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\tbottom: true,\n\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ onResizeStart }\n\t\t\t\tonResizeStop={ ( event, direction, elt ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\t// Since the aspect ratio is locked when resizing, we can\n\t\t\t\t\t// use the width of the resized element to calculate the\n\t\t\t\t\t// height in CSS to prevent stretching when the max-width\n\t\t\t\t\t// is reached.\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: `${ elt.offsetWidth }px`,\n\t\t\t\t\t\theight: 'auto',\n\t\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t\tratio === naturalRatio\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: String( ratio ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tresizeRatio={ align === 'center' ? 2 : 1 }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\tif ( ! url && ! temporaryURL ) {\n\t\treturn sizeControls;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ /* Hide controls during upload to avoid component remount,\n\t\t\t\twhich causes duplicated image upload. */ }\n\t\t\t{ ! temporaryURL && controls }\n\t\t\t{ img }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier=\"caption\"\n\t\t\t\t\t\tclassName={ __experimentalGetElementClassName(\n\t\t\t\t\t\t\t'caption'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ captionRef }\n\t\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_element","require","_blob","_components","_compose","_data","_blockEditor","_i18n","_url","_blocks","_icons","_notices","_coreData","_lockUnlock","_util","_useClientWidth","_interopRequireDefault","_edit","_constants","_utils","DimensionsTool","ResolutionTool","unlock","blockEditorPrivateApis","scaleOptions","value","label","_x","help","__","Image","temporaryURL","attributes","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","blockEditingMode","url","alt","caption","align","id","href","rel","linkClass","linkDestination","title","width","height","aspectRatio","scale","linkTarget","sizeSlug","lightbox","numericWidth","parseInt","undefined","numericHeight","imageRef","useRef","prevCaption","usePrevious","showCaption","setShowCaption","useState","allowResize","getBlock","useSelect","blockEditorStore","image","multiImageSelection","select","getMedia","coreStore","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","useDispatch","createErrorNotice","createSuccessNotice","noticesStore","isLargeViewport","useViewportMatch","isWideAligned","includes","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","useClientWidth","hasNonContentControls","isResizable","imageSizeOptions","filter","slug","media_details","sizes","source_url","map","name","canUploadMedia","useEffect","isExternalImage","window","fetch","then","response","blob","catch","captionRef","useCallback","node","focus","naturalWidth","naturalHeight","useMemo","current","complete","onResizeStart","onResizeStop","onImageError","embedBlock","createUpgradedEmbedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","isBlobURL","type","allowedTypes","ALLOWED_MEDIA_TYPES","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","canEditImage","allowCrop","switchToCover","switchToBlockType","dimensionsUnitsOptions","useCustomUnits","availableUnits","lightboxSetting","useSetting","showLightboxToggle","allowEditing","lightboxChecked","enabled","lightboxToggleDisabled","dimensionsControl","createElement","onChange","newWidth","newHeight","newScale","newAspectRatio","defaultScale","defaultAspectRatio","unitsOptions","resetAll","sizeControls","InspectorControls","__experimentalToolsPanel","controls","Fragment","BlockControls","group","BlockAlignmentControl","ToolbarButton","onClick","icon","captionIcon","isPressed","__experimentalImageURLInputUI","onChangeUrl","mediaUrl","mediaLink","link","crop","overlayText","MediaReplaceFlow","mediaId","mediaURL","accept","onSelect","ToolbarGroup","upload","__experimentalToolsPanelItem","isShownByDefault","hasValue","onDeselect","TextareaControl","ExternalLink","__nextHasNoMarginBottom","options","ToggleControl","checked","newValue","disabled","TextControl","filename","getFilename","defaultedAlt","sprintf","borderProps","useBorderProps","isRounded","className","src","onLoad","event","target","ref","style","objectFit","Spinner","fallbackClientWidth","__experimentalImageEditor","onSaveImage","imageAttributes","onFinishEditing","numericRatio","evalAspectRatio","customRatio","naturalRatio","ratio","currentWidth","currentHeight","minWidth","MIN_SIZE","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","isRTL","ResizableBox","display","size","showHandle","maxHeight","lockAspectRatio","enable","top","right","bottom","left","direction","elt","offsetWidth","String","resizeRatio","RichText","isEmpty","identifier","__experimentalGetElementClassName","tagName","placeholder","inlineToolbar","__unstableOnSplitAtEnd","createBlock","getDefaultBlockName"],"sources":["@wordpress/block-library/src/image/image.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tToggleControl,\n\tTextControl,\n\tToolbarButton,\n\tToolbarGroup,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalUseCustomUnits as useCustomUnits,\n} from '@wordpress/components';\nimport { useViewportMatch, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tuseSetting,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalGetElementClassName,\n\t__experimentalUseBorderProps as useBorderProps,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport {\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseCallback,\n} from '@wordpress/element';\nimport { __, _x, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tcrop,\n\toverlayText,\n\tupload,\n\tcaption as captionIcon,\n} from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\nimport { evalAspectRatio } from './utils';\n\nconst { DimensionsTool, ResolutionTool } = unlock( blockEditorPrivateApis );\n\nconst scaleOptions = [\n\t{\n\t\tvalue: 'cover',\n\t\tlabel: _x( 'Cover', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image covers the space evenly.' ),\n\t},\n\t{\n\t\tvalue: 'contain',\n\t\tlabel: _x( 'Contain', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image is contained without distortion.' ),\n\t},\n];\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n\tblockEditingMode,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\tlinkDestination,\n\t\ttitle,\n\t\twidth,\n\t\theight,\n\t\taspectRatio,\n\t\tscale,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t\tlightbox,\n\t} = attributes;\n\n\t// The only supported unit is px, so we can parseInt to strip the px here.\n\tconst numericWidth = width ? parseInt( width, 10 ) : undefined;\n\tconst numericHeight = height ? parseInt( height, 10 ) : undefined;\n\n\tconst imageRef = useRef();\n\tconst prevCaption = usePrevious( caption );\n\tconst [ showCaption, setShowCaption ] = useState( !! caption );\n\tconst { allowResize = true } = context;\n\tconst { getBlock } = useSelect( blockEditorStore );\n\n\tconst { image, multiImageSelection } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getMedia } = select( coreStore );\n\t\t\tconst { getMultiSelectedBlockClientIds, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\timage:\n\t\t\t\t\tid && isSelected\n\t\t\t\t\t\t? getMedia( id, { context: 'view' } )\n\t\t\t\t\t\t: null,\n\t\t\t\tmultiImageSelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/image'\n\t\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ id, isSelected ]\n\t);\n\tconst { canInsertCover, imageEditing, imageSizes, maxWidth, mediaUpload } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetSettings,\n\t\t\t\t\tcanInsertBlockType,\n\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\t\tconst settings = getSettings();\n\n\t\t\t\treturn {\n\t\t\t\t\timageEditing: settings.imageEditing,\n\t\t\t\t\timageSizes: settings.imageSizes,\n\t\t\t\t\tmaxWidth: settings.maxWidth,\n\t\t\t\t\tmediaUpload: settings.mediaUpload,\n\t\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t\t'core/cover',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = [ 'wide', 'full' ].includes( align );\n\tconst [\n\t\t{ loadedNaturalWidth, loadedNaturalHeight },\n\t\tsetLoadedNaturalSize,\n\t] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst [ externalBlob, setExternalBlob ] = useState();\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\tconst isResizable =\n\t\tallowResize &&\n\t\thasNonContentControls &&\n\t\t! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = imageSizes\n\t\t.filter(\n\t\t\t( { slug } ) => image?.media_details?.sizes?.[ slug ]?.source_url\n\t\t)\n\t\t.map( ( { name, slug } ) => ( { value: slug, label: name } ) );\n\tconst canUploadMedia = !! mediaUpload;\n\n\t// If an image is externally hosted, try to fetch the image data. This may\n\t// fail if the image host doesn't allow CORS with the domain. If it works,\n\t// we can enable a button in the toolbar to upload the image.\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! isExternalImage( id, url ) ||\n\t\t\t! isSelected ||\n\t\t\t! canUploadMedia\n\t\t) {\n\t\t\tsetExternalBlob();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( externalBlob ) return;\n\n\t\twindow\n\t\t\t// Avoid cache, which seems to help avoid CORS problems.\n\t\t\t.fetch( url.includes( '?' ) ? url : url + '?' )\n\t\t\t.then( ( response ) => response.blob() )\n\t\t\t.then( ( blob ) => setExternalBlob( blob ) )\n\t\t\t// Do nothing, cannot upload.\n\t\t\t.catch( () => {} );\n\t}, [ id, url, isSelected, externalBlob, canUploadMedia ] );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( caption && ! prevCaption ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ caption, prevCaption ] );\n\n\t// Focus the caption when we click to add one.\n\tconst captionRef = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && ! caption ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ caption ]\n\t);\n\n\t// Get naturalWidth and naturalHeight from image ref, and fall back to loaded natural\n\t// width and height. This resolves an issue in Safari where the loaded natural\n\t// width and height is otherwise lost when switching between alignments.\n\t// See: https://github.com/WordPress/gutenberg/pull/37210.\n\tconst { naturalWidth, naturalHeight } = useMemo( () => {\n\t\treturn {\n\t\t\tnaturalWidth:\n\t\t\t\timageRef.current?.naturalWidth ||\n\t\t\t\tloadedNaturalWidth ||\n\t\t\t\tundefined,\n\t\t\tnaturalHeight:\n\t\t\t\timageRef.current?.naturalHeight ||\n\t\t\t\tloadedNaturalHeight ||\n\t\t\t\tundefined,\n\t\t};\n\t}, [\n\t\tloadedNaturalWidth,\n\t\tloadedNaturalHeight,\n\t\timageRef.current?.complete,\n\t] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tfunction onImageError() {\n\t\t// Check if there's an embed block that handles this URL, e.g., instagram URL.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/11472\n\t\tconst embedBlock = createUpgradedEmbedBlock( { attributes: { url } } );\n\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\t}\n\n\tfunction onSetHref( props ) {\n\t\tsetAttributes( props );\n\t}\n\n\tfunction onSetTitle( value ) {\n\t\t// This is the HTML title attribute, separate from the media object\n\t\t// title.\n\t\tsetAttributes( { title: value } );\n\t}\n\n\tfunction updateAlt( newAlt ) {\n\t\tsetAttributes( { alt: newAlt } );\n\t}\n\n\tfunction updateImage( newSizeSlug ) {\n\t\tconst newUrl = image?.media_details?.sizes?.[ newSizeSlug ]?.source_url;\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\tsizeSlug: newSizeSlug,\n\t\t} );\n\t}\n\n\tfunction uploadExternal() {\n\t\tmediaUpload( {\n\t\t\tfilesList: [ externalBlob ],\n\t\t\tonFileChange( [ img ] ) {\n\t\t\t\tonSelectImage( img );\n\n\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetExternalBlob();\n\t\t\t\tcreateSuccessNotice( __( 'Image uploaded.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t},\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tonError( message ) {\n\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t},\n\t\t} );\n\t}\n\n\tfunction updateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].includes( nextAlign )\n\t\t\t? {\n\t\t\t\t\twidth: undefined,\n\t\t\t\t\theight: undefined,\n\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t\tscale: undefined,\n\t\t\t }\n\t\t\t: {};\n\t\tsetAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t\tif ( ! caption ) {\n\t\t\t\tsetShowCaption( false );\n\t\t\t}\n\t\t}\n\t}, [ isSelected, caption ] );\n\n\tconst canEditImage = id && naturalWidth && naturalHeight && imageEditing;\n\tconst allowCrop = ! multiImageSelection && canEditImage && ! isEditingImage;\n\n\tfunction switchToCover() {\n\t\treplaceBlocks(\n\t\t\tclientId,\n\t\t\tswitchToBlockType( getBlock( clientId ), 'core/cover' )\n\t\t);\n\t}\n\n\t// TODO: Can allow more units after figuring out how they should interact\n\t// with the ResizableBox and ImageEditor components. Calculations later on\n\t// for those components are currently assuming px units.\n\tconst dimensionsUnitsOptions = useCustomUnits( {\n\t\tavailableUnits: [ 'px' ],\n\t} );\n\n\tconst lightboxSetting = useSetting( 'lightbox' );\n\n\tconst showLightboxToggle =\n\t\t!! lightbox || lightboxSetting?.allowEditing === true;\n\n\tconst lightboxChecked =\n\t\t!! lightbox?.enabled || ( ! lightbox && !! lightboxSetting?.enabled );\n\n\tconst lightboxToggleDisabled = linkDestination !== 'none';\n\n\tconst dimensionsControl = (\n\t\t<DimensionsTool\n\t\t\tvalue={ { width, height, scale, aspectRatio } }\n\t\t\tonChange={ ( {\n\t\t\t\twidth: newWidth,\n\t\t\t\theight: newHeight,\n\t\t\t\tscale: newScale,\n\t\t\t\taspectRatio: newAspectRatio,\n\t\t\t} ) => {\n\t\t\t\t// Rebuilding the object forces setting `undefined`\n\t\t\t\t// for values that are removed since setAttributes\n\t\t\t\t// doesn't do anything with keys that aren't set.\n\t\t\t\tsetAttributes( {\n\t\t\t\t\t// CSS includes `height: auto`, but we need\n\t\t\t\t\t// `width: auto` to fix the aspect ratio when\n\t\t\t\t\t// only height is set due to the width and\n\t\t\t\t\t// height attributes set via the server.\n\t\t\t\t\twidth: ! newWidth && newHeight ? 'auto' : newWidth,\n\t\t\t\t\theight: newHeight,\n\t\t\t\t\tscale: newScale,\n\t\t\t\t\taspectRatio: newAspectRatio,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tdefaultScale=\"cover\"\n\t\t\tdefaultAspectRatio=\"auto\"\n\t\t\tscaleOptions={ scaleOptions }\n\t\t\tunitsOptions={ dimensionsUnitsOptions }\n\t\t/>\n\t);\n\n\tconst resetAll = () => {\n\t\tsetAttributes( {\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tscale: undefined,\n\t\t\taspectRatio: undefined,\n\t\t\tlightbox: undefined,\n\t\t} );\n\t};\n\n\tconst sizeControls = (\n\t\t<InspectorControls>\n\t\t\t<ToolsPanel label={ __( 'Settings' ) } resetAll={ resetAll }>\n\t\t\t\t{ isResizable && dimensionsControl }\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n\n\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\t\tvalue={ align }\n\t\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( { caption: undefined } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ captionIcon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tshowCaption\n\t\t\t\t\t\t\t\t? __( 'Remove caption' )\n\t\t\t\t\t\t\t\t: __( 'Add caption' )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t\t<ImageURLInputUI\n\t\t\t\t\t\turl={ href || '' }\n\t\t\t\t\t\tonChangeUrl={ onSetHref }\n\t\t\t\t\t\tlinkDestination={ linkDestination }\n\t\t\t\t\t\tmediaUrl={ ( image && image.source_url ) || url }\n\t\t\t\t\t\tmediaLink={ image && image.link }\n\t\t\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\t\t\tlinkClass={ linkClass }\n\t\t\t\t\t\trel={ rel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ allowCrop && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && canInsertCover && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ticon={ overlayText }\n\t\t\t\t\t\tlabel={ __( 'Add text over image' ) }\n\t\t\t\t\t\tonClick={ switchToCover }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ ! multiImageSelection && externalBlob && (\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel label={ __( 'Settings' ) } resetAll={ resetAll }>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\t\t\thasValue={ () => alt !== '' }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { alt: undefined } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/WAI/tutorials/images/decision-tree\">\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'Describe the purpose of the image.'\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t\t{ __( 'Leave empty if decorative.' ) }\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ isResizable && dimensionsControl }\n\t\t\t\t\t<ResolutionTool\n\t\t\t\t\t\tvalue={ sizeSlug }\n\t\t\t\t\t\tonChange={ updateImage }\n\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t/>\n\t\t\t\t\t{ showLightboxToggle && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\thasValue={ () => !! lightbox }\n\t\t\t\t\t\t\tlabel={ __( 'Expand on Click' ) }\n\t\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\t\tsetAttributes( { lightbox: undefined } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Expand on Click' ) }\n\t\t\t\t\t\t\t\tchecked={ lightboxChecked }\n\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlightbox: { enabled: newValue },\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\tdisabled={ lightboxToggleDisabled }\n\t\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t\tlightboxToggleDisabled\n\t\t\t\t\t\t\t\t\t\t? __(\n\t\t\t\t\t\t\t\t\t\t\t\t'“Expand on click” scales the image up, and can’t be combined with a link.'\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\tonChange={ onSetTitle }\n\t\t\t\t\thelp={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Describe the role of this image on the page.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/TR/html52/dom.html#the-title-attribute\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'(Note: many devices and browsers do not display this text.)'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n\n\tconst filename = getFilename( url );\n\tlet defaultedAlt;\n\n\tif ( alt ) {\n\t\tdefaultedAlt = alt;\n\t} else if ( filename ) {\n\t\tdefaultedAlt = sprintf(\n\t\t\t/* translators: %s: file name */\n\t\t\t__( 'This image has an empty alt attribute; its file name is %s' ),\n\t\t\tfilename\n\t\t);\n\t} else {\n\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t}\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst isRounded = attributes.className?.includes( 'is-style-rounded' );\n\n\tlet img = (\n\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t// should direct focus to block.\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t<>\n\t\t\t<img\n\t\t\t\tsrc={ temporaryURL || url }\n\t\t\t\talt={ defaultedAlt }\n\t\t\t\tonError={ () => onImageError() }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetLoadedNaturalSize( {\n\t\t\t\t\t\tloadedNaturalWidth: event.target?.naturalWidth,\n\t\t\t\t\t\tloadedNaturalHeight: event.target?.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tref={ imageRef }\n\t\t\t\tclassName={ borderProps.className }\n\t\t\t\tstyle={ {\n\t\t\t\t\twidth:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : undefined,\n\t\t\t\t\theight:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : undefined,\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\t...borderProps.style,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ temporaryURL && <Spinner /> }\n\t\t</>\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t);\n\n\t// clientWidth needs to be a number for the image Cropper to work, but sometimes it's 0\n\t// So we try using the imageRef width first and fallback to clientWidth.\n\tconst fallbackClientWidth = imageRef.current?.width || clientWidth;\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\tid={ id }\n\t\t\t\turl={ url }\n\t\t\t\twidth={ numericWidth }\n\t\t\t\theight={ numericHeight }\n\t\t\t\tclientWidth={ fallbackClientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\t\tsetAttributes( imageAttributes )\n\t\t\t\t}\n\t\t\t\tonFinishEditing={ () => {\n\t\t\t\t\tsetIsEditingImage( false );\n\t\t\t\t} }\n\t\t\t\tborderProps={ isRounded ? undefined : borderProps }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable ) {\n\t\timg = <div style={ { width, height, aspectRatio } }>{ img }</div>;\n\t} else {\n\t\tconst numericRatio = aspectRatio && evalAspectRatio( aspectRatio );\n\t\tconst customRatio = numericWidth / numericHeight;\n\t\tconst naturalRatio = naturalWidth / naturalHeight;\n\t\tconst ratio = numericRatio || customRatio || naturalRatio || 1;\n\t\tconst currentWidth =\n\t\t\t! numericWidth && numericHeight\n\t\t\t\t? numericHeight * ratio\n\t\t\t\t: numericWidth;\n\t\tconst currentHeight =\n\t\t\t! numericHeight && numericWidth\n\t\t\t\t? numericWidth / ratio\n\t\t\t\t: numericHeight;\n\n\t\tconst minWidth =\n\t\t\tnaturalWidth < naturalHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\tconst minHeight =\n\t\t\tnaturalHeight < naturalWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t// With the current implementation of ResizableBox, an image needs an\n\t\t// explicit pixel value for the max-width. In absence of being able to\n\t\t// set the content-width, this max-width is currently dictated by the\n\t\t// vanilla editor style. The following variable adds a buffer to this\n\t\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t\t// in most cases, allow you to scale the image beyond the width of the\n\t\t// main column, though not infinitely.\n\t\t// @todo It would be good to revisit this once a content-width variable\n\t\t// becomes available.\n\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\tlet showRightHandle = false;\n\t\tlet showLeftHandle = false;\n\n\t\t/* eslint-disable no-lonely-if */\n\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\tif ( align === 'center' ) {\n\t\t\t// When the image is centered, show both handles.\n\t\t\tshowRightHandle = true;\n\t\t\tshowLeftHandle = true;\n\t\t} else if ( isRTL() ) {\n\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t// Show the right handle and hide the left handle only when it is\n\t\t\t// aligned left. Otherwise always show the left handle.\n\t\t\tif ( align === 'left' ) {\n\t\t\t\tshowRightHandle = true;\n\t\t\t} else {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// Show the left handle and hide the right handle only when the\n\t\t\t// image is aligned right. Otherwise always show the right handle.\n\t\t\tif ( align === 'right' ) {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t} else {\n\t\t\t\tshowRightHandle = true;\n\t\t\t}\n\t\t}\n\t\t/* eslint-enable no-lonely-if */\n\n\t\timg = (\n\t\t\t<ResizableBox\n\t\t\t\tstyle={ {\n\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t! width && ! height && aspectRatio\n\t\t\t\t\t\t\t? aspectRatio\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t} }\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: currentWidth ?? 'auto',\n\t\t\t\t\theight: currentHeight ?? 'auto',\n\t\t\t\t} }\n\t\t\t\tshowHandle={ isSelected }\n\t\t\t\tminWidth={ minWidth }\n\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\tminHeight={ minHeight }\n\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\tlockAspectRatio={ ratio }\n\t\t\t\tenable={ {\n\t\t\t\t\ttop: false,\n\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\tbottom: true,\n\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ onResizeStart }\n\t\t\t\tonResizeStop={ ( event, direction, elt ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\t// Since the aspect ratio is locked when resizing, we can\n\t\t\t\t\t// use the width of the resized element to calculate the\n\t\t\t\t\t// height in CSS to prevent stretching when the max-width\n\t\t\t\t\t// is reached.\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: `${ elt.offsetWidth }px`,\n\t\t\t\t\t\theight: 'auto',\n\t\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t\tratio === naturalRatio\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: String( ratio ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tresizeRatio={ align === 'center' ? 2 : 1 }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\tif ( ! url && ! temporaryURL ) {\n\t\treturn sizeControls;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ /* Hide controls during upload to avoid component remount,\n\t\t\t\twhich causes duplicated image upload. */ }\n\t\t\t{ ! temporaryURL && controls }\n\t\t\t{ img }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier=\"caption\"\n\t\t\t\t\t\tclassName={ __experimentalGetElementClassName(\n\t\t\t\t\t\t\t'caption'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ captionRef }\n\t\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
@@ -80,6 +80,19 @@ function useMerge(clientId, onMerge) {
80
80
  return getBlockOrder(order[0])[0];
81
81
  }
82
82
  return forward => {
83
+ function mergeWithNested(clientIdA, clientIdB) {
84
+ registry.batch(() => {
85
+ // When merging a sub list item with a higher next list item, we
86
+ // also need to move any nested list items. Check if there's a
87
+ // listed list, and append its nested list items to the current
88
+ // list.
89
+ const [nestedListClientId] = getBlockOrder(clientIdB);
90
+ if (nestedListClientId) {
91
+ moveBlocksToPosition(getBlockOrder(nestedListClientId), nestedListClientId, getBlockRootClientId(clientIdA));
92
+ }
93
+ mergeBlocks(clientIdA, clientIdB);
94
+ });
95
+ }
83
96
  if (forward) {
84
97
  const nextBlockClientId = getNextId(clientId);
85
98
  if (!nextBlockClientId) {
@@ -89,10 +102,7 @@ function useMerge(clientId, onMerge) {
89
102
  if (getParentListItemId(nextBlockClientId)) {
90
103
  outdentListItem(nextBlockClientId);
91
104
  } else {
92
- registry.batch(() => {
93
- moveBlocksToPosition(getBlockOrder(nextBlockClientId), nextBlockClientId, getPreviousBlockClientId(nextBlockClientId));
94
- mergeBlocks(clientId, nextBlockClientId);
95
- });
105
+ mergeWithNested(clientId, nextBlockClientId);
96
106
  }
97
107
  } else {
98
108
  // Merging is only done from the top level. For lowel levels, the
@@ -102,17 +112,7 @@ function useMerge(clientId, onMerge) {
102
112
  outdentListItem(clientId);
103
113
  } else if (previousBlockClientId) {
104
114
  const trailingId = getTrailingId(previousBlockClientId);
105
- registry.batch(() => {
106
- // When merging a list item with a previous trailing list
107
- // item, we also need to move any nested list items. First,
108
- // check if there's a listed list. If there's a nested list,
109
- // append its nested list items to the trailing list.
110
- const [nestedListClientId] = getBlockOrder(clientId);
111
- if (nestedListClientId) {
112
- moveBlocksToPosition(getBlockOrder(nestedListClientId), nestedListClientId, getBlockRootClientId(trailingId));
113
- }
114
- mergeBlocks(trailingId, clientId);
115
- });
115
+ mergeWithNested(trailingId, clientId);
116
116
  } else {
117
117
  onMerge(forward);
118
118
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_data","require","_blockEditor","_useOutdentListItem","_interopRequireDefault","useMerge","clientId","onMerge","registry","useRegistry","getPreviousBlockClientId","getNextBlockClientId","getBlockOrder","getBlockRootClientId","getBlockName","useSelect","blockEditorStore","mergeBlocks","moveBlocksToPosition","useDispatch","outdentListItem","useOutdentListItem","getTrailingId","id","order","length","getParentListItemId","listId","parentListItemId","_getNextId","next","getNextId","forward","nextBlockClientId","batch","previousBlockClientId","trailingId","nestedListClientId"],"sources":["@wordpress/block-library/src/list-item/hooks/use-merge.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRegistry, useDispatch, useSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport useOutdentListItem from './use-outdent-list-item';\n\nexport default function useMerge( clientId, onMerge ) {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetPreviousBlockClientId,\n\t\tgetNextBlockClientId,\n\t\tgetBlockOrder,\n\t\tgetBlockRootClientId,\n\t\tgetBlockName,\n\t} = useSelect( blockEditorStore );\n\tconst { mergeBlocks, moveBlocksToPosition } =\n\t\tuseDispatch( blockEditorStore );\n\tconst [ , outdentListItem ] = useOutdentListItem( clientId );\n\n\tfunction getTrailingId( id ) {\n\t\tconst order = getBlockOrder( id );\n\n\t\tif ( ! order.length ) {\n\t\t\treturn id;\n\t\t}\n\n\t\treturn getTrailingId( order[ order.length - 1 ] );\n\t}\n\n\tfunction getParentListItemId( id ) {\n\t\tconst listId = getBlockRootClientId( id );\n\t\tconst parentListItemId = getBlockRootClientId( listId );\n\t\tif ( ! parentListItemId ) return;\n\t\tif ( getBlockName( parentListItemId ) !== 'core/list-item' ) return;\n\t\treturn parentListItemId;\n\t}\n\n\t/**\n\t * Return the next list item with respect to the given list item. If none,\n\t * return the next list item of the parent list item if it exists.\n\t *\n\t * @param {string} id A list item client ID.\n\t * @return {string?} The client ID of the next list item.\n\t */\n\tfunction _getNextId( id ) {\n\t\tconst next = getNextBlockClientId( id );\n\t\tif ( next ) return next;\n\t\tconst parentListItemId = getParentListItemId( id );\n\t\tif ( ! parentListItemId ) return;\n\t\treturn _getNextId( parentListItemId );\n\t}\n\n\t/**\n\t * Given a client ID, return the client ID of the list item on the next\n\t * line, regardless of indentation level.\n\t *\n\t * @param {string} id The client ID of the current list item.\n\t * @return {string?} The client ID of the next list item.\n\t */\n\tfunction getNextId( id ) {\n\t\tconst order = getBlockOrder( id );\n\n\t\t// If the list item does not have a nested list, return the next list\n\t\t// item.\n\t\tif ( ! order.length ) {\n\t\t\treturn _getNextId( id );\n\t\t}\n\n\t\t// Get the first list item in the nested list.\n\t\treturn getBlockOrder( order[ 0 ] )[ 0 ];\n\t}\n\n\treturn ( forward ) => {\n\t\tif ( forward ) {\n\t\t\tconst nextBlockClientId = getNextId( clientId );\n\n\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\tonMerge( forward );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( getParentListItemId( nextBlockClientId ) ) {\n\t\t\t\toutdentListItem( nextBlockClientId );\n\t\t\t} else {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\tgetBlockOrder( nextBlockClientId ),\n\t\t\t\t\t\tnextBlockClientId,\n\t\t\t\t\t\tgetPreviousBlockClientId( nextBlockClientId )\n\t\t\t\t\t);\n\t\t\t\t\tmergeBlocks( clientId, nextBlockClientId );\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\t\t\t// Merging is only done from the top level. For lowel levels, the\n\t\t\t// list item is outdented instead.\n\t\t\tconst previousBlockClientId = getPreviousBlockClientId( clientId );\n\t\t\tif ( getParentListItemId( clientId ) ) {\n\t\t\t\toutdentListItem( clientId );\n\t\t\t} else if ( previousBlockClientId ) {\n\t\t\t\tconst trailingId = getTrailingId( previousBlockClientId );\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t// When merging a list item with a previous trailing list\n\t\t\t\t\t// item, we also need to move any nested list items. First,\n\t\t\t\t\t// check if there's a listed list. If there's a nested list,\n\t\t\t\t\t// append its nested list items to the trailing list.\n\t\t\t\t\tconst [ nestedListClientId ] = getBlockOrder( clientId );\n\t\t\t\t\tif ( nestedListClientId ) {\n\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\tgetBlockOrder( nestedListClientId ),\n\t\t\t\t\t\t\tnestedListClientId,\n\t\t\t\t\t\t\tgetBlockRootClientId( trailingId )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmergeBlocks( trailingId, clientId );\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tonMerge( forward );\n\t\t\t}\n\t\t}\n\t};\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_data","require","_blockEditor","_useOutdentListItem","_interopRequireDefault","useMerge","clientId","onMerge","registry","useRegistry","getPreviousBlockClientId","getNextBlockClientId","getBlockOrder","getBlockRootClientId","getBlockName","useSelect","blockEditorStore","mergeBlocks","moveBlocksToPosition","useDispatch","outdentListItem","useOutdentListItem","getTrailingId","id","order","length","getParentListItemId","listId","parentListItemId","_getNextId","next","getNextId","forward","mergeWithNested","clientIdA","clientIdB","batch","nestedListClientId","nextBlockClientId","previousBlockClientId","trailingId"],"sources":["@wordpress/block-library/src/list-item/hooks/use-merge.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRegistry, useDispatch, useSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport useOutdentListItem from './use-outdent-list-item';\n\nexport default function useMerge( clientId, onMerge ) {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetPreviousBlockClientId,\n\t\tgetNextBlockClientId,\n\t\tgetBlockOrder,\n\t\tgetBlockRootClientId,\n\t\tgetBlockName,\n\t} = useSelect( blockEditorStore );\n\tconst { mergeBlocks, moveBlocksToPosition } =\n\t\tuseDispatch( blockEditorStore );\n\tconst [ , outdentListItem ] = useOutdentListItem( clientId );\n\n\tfunction getTrailingId( id ) {\n\t\tconst order = getBlockOrder( id );\n\n\t\tif ( ! order.length ) {\n\t\t\treturn id;\n\t\t}\n\n\t\treturn getTrailingId( order[ order.length - 1 ] );\n\t}\n\n\tfunction getParentListItemId( id ) {\n\t\tconst listId = getBlockRootClientId( id );\n\t\tconst parentListItemId = getBlockRootClientId( listId );\n\t\tif ( ! parentListItemId ) return;\n\t\tif ( getBlockName( parentListItemId ) !== 'core/list-item' ) return;\n\t\treturn parentListItemId;\n\t}\n\n\t/**\n\t * Return the next list item with respect to the given list item. If none,\n\t * return the next list item of the parent list item if it exists.\n\t *\n\t * @param {string} id A list item client ID.\n\t * @return {string?} The client ID of the next list item.\n\t */\n\tfunction _getNextId( id ) {\n\t\tconst next = getNextBlockClientId( id );\n\t\tif ( next ) return next;\n\t\tconst parentListItemId = getParentListItemId( id );\n\t\tif ( ! parentListItemId ) return;\n\t\treturn _getNextId( parentListItemId );\n\t}\n\n\t/**\n\t * Given a client ID, return the client ID of the list item on the next\n\t * line, regardless of indentation level.\n\t *\n\t * @param {string} id The client ID of the current list item.\n\t * @return {string?} The client ID of the next list item.\n\t */\n\tfunction getNextId( id ) {\n\t\tconst order = getBlockOrder( id );\n\n\t\t// If the list item does not have a nested list, return the next list\n\t\t// item.\n\t\tif ( ! order.length ) {\n\t\t\treturn _getNextId( id );\n\t\t}\n\n\t\t// Get the first list item in the nested list.\n\t\treturn getBlockOrder( order[ 0 ] )[ 0 ];\n\t}\n\n\treturn ( forward ) => {\n\t\tfunction mergeWithNested( clientIdA, clientIdB ) {\n\t\t\tregistry.batch( () => {\n\t\t\t\t// When merging a sub list item with a higher next list item, we\n\t\t\t\t// also need to move any nested list items. Check if there's a\n\t\t\t\t// listed list, and append its nested list items to the current\n\t\t\t\t// list.\n\t\t\t\tconst [ nestedListClientId ] = getBlockOrder( clientIdB );\n\t\t\t\tif ( nestedListClientId ) {\n\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\tgetBlockOrder( nestedListClientId ),\n\t\t\t\t\t\tnestedListClientId,\n\t\t\t\t\t\tgetBlockRootClientId( clientIdA )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tmergeBlocks( clientIdA, clientIdB );\n\t\t\t} );\n\t\t}\n\n\t\tif ( forward ) {\n\t\t\tconst nextBlockClientId = getNextId( clientId );\n\n\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\tonMerge( forward );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( getParentListItemId( nextBlockClientId ) ) {\n\t\t\t\toutdentListItem( nextBlockClientId );\n\t\t\t} else {\n\t\t\t\tmergeWithNested( clientId, nextBlockClientId );\n\t\t\t}\n\t\t} else {\n\t\t\t// Merging is only done from the top level. For lowel levels, the\n\t\t\t// list item is outdented instead.\n\t\t\tconst previousBlockClientId = getPreviousBlockClientId( clientId );\n\t\t\tif ( getParentListItemId( clientId ) ) {\n\t\t\t\toutdentListItem( clientId );\n\t\t\t} else if ( previousBlockClientId ) {\n\t\t\t\tconst trailingId = getTrailingId( previousBlockClientId );\n\t\t\t\tmergeWithNested( trailingId, clientId );\n\t\t\t} else {\n\t\t\t\tonMerge( forward );\n\t\t\t}\n\t\t}\n\t};\n}\n"],"mappings":"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"}
@@ -12,7 +12,7 @@ var _privateApis = require("@wordpress/private-apis");
12
12
  const {
13
13
  lock,
14
14
  unlock
15
- } = (0, _privateApis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.', '@wordpress/block-library');
15
+ } = (0, _privateApis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.', '@wordpress/block-library');
16
16
  exports.unlock = unlock;
17
17
  exports.lock = lock;
18
18
  //# sourceMappingURL=lock-unlock.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_privateApis","require","lock","unlock","__dangerousOptInToUnstableAPIsOnlyForCoreModules","exports"],"sources":["@wordpress/block-library/src/lock-unlock.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',\n\t\t'@wordpress/block-library'\n\t);\n"],"mappings":";;;;;;AAGA,IAAAA,YAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AAGO,MAAM;EAAEC,IAAI;EAAEC;AAAO,CAAC,GAC5B,IAAAC,6DAAgD,EAC/C,8GAA8G,EAC9G,0BACD,CAAC;AAACC,OAAA,CAAAF,MAAA,GAAAA,MAAA;AAAAE,OAAA,CAAAH,IAAA,GAAAA,IAAA"}
1
+ {"version":3,"names":["_privateApis","require","lock","unlock","__dangerousOptInToUnstableAPIsOnlyForCoreModules","exports"],"sources":["@wordpress/block-library/src/lock-unlock.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.',\n\t\t'@wordpress/block-library'\n\t);\n"],"mappings":";;;;;;AAGA,IAAAA,YAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AAGO,MAAM;EAAEC,IAAI;EAAEC;AAAO,CAAC,GAC5B,IAAAC,6DAAgD,EAC/C,iHAAiH,EACjH,0BACD,CAAC;AAACC,OAAA,CAAAF,MAAA,GAAAA,MAAA;AAAAE,OAAA,CAAAH,IAAA,GAAAA,IAAA"}
@@ -302,6 +302,7 @@ export default function Image({
302
302
  const lightboxSetting = useSetting('lightbox');
303
303
  const showLightboxToggle = !!lightbox || lightboxSetting?.allowEditing === true;
304
304
  const lightboxChecked = !!lightbox?.enabled || !lightbox && !!lightboxSetting?.enabled;
305
+ const lightboxToggleDisabled = linkDestination !== 'none';
305
306
  const dimensionsControl = createElement(DimensionsTool, {
306
307
  value: {
307
308
  width,
@@ -435,7 +436,9 @@ export default function Image({
435
436
  enabled: newValue
436
437
  }
437
438
  });
438
- }
439
+ },
440
+ disabled: lightboxToggleDisabled,
441
+ help: lightboxToggleDisabled ? __('“Expand on click” scales the image up, and can’t be combined with a link.') : ''
439
442
  })))), createElement(InspectorControls, {
440
443
  group: "advanced"
441
444
  }, createElement(TextControl, {
@@ -1 +1 @@
1
- {"version":3,"names":["isBlobURL","ExternalLink","ResizableBox","Spinner","TextareaControl","ToggleControl","TextControl","ToolbarButton","ToolbarGroup","__experimentalToolsPanel","ToolsPanel","__experimentalToolsPanelItem","ToolsPanelItem","__experimentalUseCustomUnits","useCustomUnits","useViewportMatch","usePrevious","useSelect","useDispatch","BlockControls","InspectorControls","RichText","__experimentalImageURLInputUI","ImageURLInputUI","MediaReplaceFlow","store","blockEditorStore","useSetting","BlockAlignmentControl","__experimentalImageEditor","ImageEditor","__experimentalGetElementClassName","__experimentalUseBorderProps","useBorderProps","privateApis","blockEditorPrivateApis","useEffect","useMemo","useState","useRef","useCallback","__","_x","sprintf","isRTL","getFilename","createBlock","getDefaultBlockName","switchToBlockType","crop","overlayText","upload","caption","captionIcon","noticesStore","coreStore","unlock","createUpgradedEmbedBlock","useClientWidth","isExternalImage","MIN_SIZE","ALLOWED_MEDIA_TYPES","evalAspectRatio","DimensionsTool","ResolutionTool","scaleOptions","value","label","help","Image","temporaryURL","attributes","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","blockEditingMode","url","alt","align","id","href","rel","linkClass","linkDestination","title","width","height","aspectRatio","scale","linkTarget","sizeSlug","lightbox","numericWidth","parseInt","undefined","numericHeight","imageRef","prevCaption","showCaption","setShowCaption","allowResize","getBlock","image","multiImageSelection","select","getMedia","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","createErrorNotice","createSuccessNotice","isLargeViewport","isWideAligned","includes","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","hasNonContentControls","isResizable","imageSizeOptions","filter","slug","media_details","sizes","source_url","map","name","canUploadMedia","window","fetch","then","response","blob","catch","captionRef","node","focus","naturalWidth","naturalHeight","current","complete","onResizeStart","onResizeStop","onImageError","embedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","type","allowedTypes","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","canEditImage","allowCrop","switchToCover","dimensionsUnitsOptions","availableUnits","lightboxSetting","showLightboxToggle","allowEditing","lightboxChecked","enabled","dimensionsControl","createElement","onChange","newWidth","newHeight","newScale","newAspectRatio","defaultScale","defaultAspectRatio","unitsOptions","resetAll","sizeControls","controls","Fragment","group","onClick","icon","isPressed","onChangeUrl","mediaUrl","mediaLink","link","mediaId","mediaURL","accept","onSelect","isShownByDefault","hasValue","onDeselect","__nextHasNoMarginBottom","options","checked","newValue","filename","defaultedAlt","borderProps","isRounded","className","src","onLoad","event","target","ref","style","objectFit","fallbackClientWidth","onSaveImage","imageAttributes","onFinishEditing","numericRatio","customRatio","naturalRatio","ratio","currentWidth","currentHeight","minWidth","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","display","size","showHandle","maxHeight","lockAspectRatio","enable","top","right","bottom","left","direction","elt","offsetWidth","String","resizeRatio","isEmpty","identifier","tagName","placeholder","inlineToolbar","__unstableOnSplitAtEnd"],"sources":["@wordpress/block-library/src/image/image.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tToggleControl,\n\tTextControl,\n\tToolbarButton,\n\tToolbarGroup,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalUseCustomUnits as useCustomUnits,\n} from '@wordpress/components';\nimport { useViewportMatch, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tuseSetting,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalGetElementClassName,\n\t__experimentalUseBorderProps as useBorderProps,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport {\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseCallback,\n} from '@wordpress/element';\nimport { __, _x, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tcrop,\n\toverlayText,\n\tupload,\n\tcaption as captionIcon,\n} from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\nimport { evalAspectRatio } from './utils';\n\nconst { DimensionsTool, ResolutionTool } = unlock( blockEditorPrivateApis );\n\nconst scaleOptions = [\n\t{\n\t\tvalue: 'cover',\n\t\tlabel: _x( 'Cover', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image covers the space evenly.' ),\n\t},\n\t{\n\t\tvalue: 'contain',\n\t\tlabel: _x( 'Contain', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image is contained without distortion.' ),\n\t},\n];\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n\tblockEditingMode,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\tlinkDestination,\n\t\ttitle,\n\t\twidth,\n\t\theight,\n\t\taspectRatio,\n\t\tscale,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t\tlightbox,\n\t} = attributes;\n\n\t// The only supported unit is px, so we can parseInt to strip the px here.\n\tconst numericWidth = width ? parseInt( width, 10 ) : undefined;\n\tconst numericHeight = height ? parseInt( height, 10 ) : undefined;\n\n\tconst imageRef = useRef();\n\tconst prevCaption = usePrevious( caption );\n\tconst [ showCaption, setShowCaption ] = useState( !! caption );\n\tconst { allowResize = true } = context;\n\tconst { getBlock } = useSelect( blockEditorStore );\n\n\tconst { image, multiImageSelection } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getMedia } = select( coreStore );\n\t\t\tconst { getMultiSelectedBlockClientIds, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\timage:\n\t\t\t\t\tid && isSelected\n\t\t\t\t\t\t? getMedia( id, { context: 'view' } )\n\t\t\t\t\t\t: null,\n\t\t\t\tmultiImageSelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/image'\n\t\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ id, isSelected ]\n\t);\n\tconst { canInsertCover, imageEditing, imageSizes, maxWidth, mediaUpload } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetSettings,\n\t\t\t\t\tcanInsertBlockType,\n\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\t\tconst settings = getSettings();\n\n\t\t\t\treturn {\n\t\t\t\t\timageEditing: settings.imageEditing,\n\t\t\t\t\timageSizes: settings.imageSizes,\n\t\t\t\t\tmaxWidth: settings.maxWidth,\n\t\t\t\t\tmediaUpload: settings.mediaUpload,\n\t\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t\t'core/cover',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = [ 'wide', 'full' ].includes( align );\n\tconst [\n\t\t{ loadedNaturalWidth, loadedNaturalHeight },\n\t\tsetLoadedNaturalSize,\n\t] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst [ externalBlob, setExternalBlob ] = useState();\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\tconst isResizable =\n\t\tallowResize &&\n\t\thasNonContentControls &&\n\t\t! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = imageSizes\n\t\t.filter(\n\t\t\t( { slug } ) => image?.media_details?.sizes?.[ slug ]?.source_url\n\t\t)\n\t\t.map( ( { name, slug } ) => ( { value: slug, label: name } ) );\n\tconst canUploadMedia = !! mediaUpload;\n\n\t// If an image is externally hosted, try to fetch the image data. This may\n\t// fail if the image host doesn't allow CORS with the domain. If it works,\n\t// we can enable a button in the toolbar to upload the image.\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! isExternalImage( id, url ) ||\n\t\t\t! isSelected ||\n\t\t\t! canUploadMedia\n\t\t) {\n\t\t\tsetExternalBlob();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( externalBlob ) return;\n\n\t\twindow\n\t\t\t// Avoid cache, which seems to help avoid CORS problems.\n\t\t\t.fetch( url.includes( '?' ) ? url : url + '?' )\n\t\t\t.then( ( response ) => response.blob() )\n\t\t\t.then( ( blob ) => setExternalBlob( blob ) )\n\t\t\t// Do nothing, cannot upload.\n\t\t\t.catch( () => {} );\n\t}, [ id, url, isSelected, externalBlob, canUploadMedia ] );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( caption && ! prevCaption ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ caption, prevCaption ] );\n\n\t// Focus the caption when we click to add one.\n\tconst captionRef = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && ! caption ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ caption ]\n\t);\n\n\t// Get naturalWidth and naturalHeight from image ref, and fall back to loaded natural\n\t// width and height. This resolves an issue in Safari where the loaded natural\n\t// width and height is otherwise lost when switching between alignments.\n\t// See: https://github.com/WordPress/gutenberg/pull/37210.\n\tconst { naturalWidth, naturalHeight } = useMemo( () => {\n\t\treturn {\n\t\t\tnaturalWidth:\n\t\t\t\timageRef.current?.naturalWidth ||\n\t\t\t\tloadedNaturalWidth ||\n\t\t\t\tundefined,\n\t\t\tnaturalHeight:\n\t\t\t\timageRef.current?.naturalHeight ||\n\t\t\t\tloadedNaturalHeight ||\n\t\t\t\tundefined,\n\t\t};\n\t}, [\n\t\tloadedNaturalWidth,\n\t\tloadedNaturalHeight,\n\t\timageRef.current?.complete,\n\t] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tfunction onImageError() {\n\t\t// Check if there's an embed block that handles this URL, e.g., instagram URL.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/11472\n\t\tconst embedBlock = createUpgradedEmbedBlock( { attributes: { url } } );\n\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\t}\n\n\tfunction onSetHref( props ) {\n\t\tsetAttributes( props );\n\t}\n\n\tfunction onSetTitle( value ) {\n\t\t// This is the HTML title attribute, separate from the media object\n\t\t// title.\n\t\tsetAttributes( { title: value } );\n\t}\n\n\tfunction updateAlt( newAlt ) {\n\t\tsetAttributes( { alt: newAlt } );\n\t}\n\n\tfunction updateImage( newSizeSlug ) {\n\t\tconst newUrl = image?.media_details?.sizes?.[ newSizeSlug ]?.source_url;\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\tsizeSlug: newSizeSlug,\n\t\t} );\n\t}\n\n\tfunction uploadExternal() {\n\t\tmediaUpload( {\n\t\t\tfilesList: [ externalBlob ],\n\t\t\tonFileChange( [ img ] ) {\n\t\t\t\tonSelectImage( img );\n\n\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetExternalBlob();\n\t\t\t\tcreateSuccessNotice( __( 'Image uploaded.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t},\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tonError( message ) {\n\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t},\n\t\t} );\n\t}\n\n\tfunction updateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].includes( nextAlign )\n\t\t\t? {\n\t\t\t\t\twidth: undefined,\n\t\t\t\t\theight: undefined,\n\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t\tscale: undefined,\n\t\t\t }\n\t\t\t: {};\n\t\tsetAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t\tif ( ! caption ) {\n\t\t\t\tsetShowCaption( false );\n\t\t\t}\n\t\t}\n\t}, [ isSelected, caption ] );\n\n\tconst canEditImage = id && naturalWidth && naturalHeight && imageEditing;\n\tconst allowCrop = ! multiImageSelection && canEditImage && ! isEditingImage;\n\n\tfunction switchToCover() {\n\t\treplaceBlocks(\n\t\t\tclientId,\n\t\t\tswitchToBlockType( getBlock( clientId ), 'core/cover' )\n\t\t);\n\t}\n\n\t// TODO: Can allow more units after figuring out how they should interact\n\t// with the ResizableBox and ImageEditor components. Calculations later on\n\t// for those components are currently assuming px units.\n\tconst dimensionsUnitsOptions = useCustomUnits( {\n\t\tavailableUnits: [ 'px' ],\n\t} );\n\n\tconst lightboxSetting = useSetting( 'lightbox' );\n\n\tconst showLightboxToggle =\n\t\t!! lightbox || lightboxSetting?.allowEditing === true;\n\n\tconst lightboxChecked =\n\t\t!! lightbox?.enabled || ( ! lightbox && !! lightboxSetting?.enabled );\n\n\tconst dimensionsControl = (\n\t\t<DimensionsTool\n\t\t\tvalue={ { width, height, scale, aspectRatio } }\n\t\t\tonChange={ ( {\n\t\t\t\twidth: newWidth,\n\t\t\t\theight: newHeight,\n\t\t\t\tscale: newScale,\n\t\t\t\taspectRatio: newAspectRatio,\n\t\t\t} ) => {\n\t\t\t\t// Rebuilding the object forces setting `undefined`\n\t\t\t\t// for values that are removed since setAttributes\n\t\t\t\t// doesn't do anything with keys that aren't set.\n\t\t\t\tsetAttributes( {\n\t\t\t\t\t// CSS includes `height: auto`, but we need\n\t\t\t\t\t// `width: auto` to fix the aspect ratio when\n\t\t\t\t\t// only height is set due to the width and\n\t\t\t\t\t// height attributes set via the server.\n\t\t\t\t\twidth: ! newWidth && newHeight ? 'auto' : newWidth,\n\t\t\t\t\theight: newHeight,\n\t\t\t\t\tscale: newScale,\n\t\t\t\t\taspectRatio: newAspectRatio,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tdefaultScale=\"cover\"\n\t\t\tdefaultAspectRatio=\"auto\"\n\t\t\tscaleOptions={ scaleOptions }\n\t\t\tunitsOptions={ dimensionsUnitsOptions }\n\t\t/>\n\t);\n\n\tconst resetAll = () => {\n\t\tsetAttributes( {\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tscale: undefined,\n\t\t\taspectRatio: undefined,\n\t\t\tlightbox: undefined,\n\t\t} );\n\t};\n\n\tconst sizeControls = (\n\t\t<InspectorControls>\n\t\t\t<ToolsPanel label={ __( 'Settings' ) } resetAll={ resetAll }>\n\t\t\t\t{ isResizable && dimensionsControl }\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n\n\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\t\tvalue={ align }\n\t\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( { caption: undefined } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ captionIcon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tshowCaption\n\t\t\t\t\t\t\t\t? __( 'Remove caption' )\n\t\t\t\t\t\t\t\t: __( 'Add caption' )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t\t<ImageURLInputUI\n\t\t\t\t\t\turl={ href || '' }\n\t\t\t\t\t\tonChangeUrl={ onSetHref }\n\t\t\t\t\t\tlinkDestination={ linkDestination }\n\t\t\t\t\t\tmediaUrl={ ( image && image.source_url ) || url }\n\t\t\t\t\t\tmediaLink={ image && image.link }\n\t\t\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\t\t\tlinkClass={ linkClass }\n\t\t\t\t\t\trel={ rel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ allowCrop && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && canInsertCover && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ticon={ overlayText }\n\t\t\t\t\t\tlabel={ __( 'Add text over image' ) }\n\t\t\t\t\t\tonClick={ switchToCover }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ ! multiImageSelection && externalBlob && (\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel label={ __( 'Settings' ) } resetAll={ resetAll }>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\t\t\thasValue={ () => alt !== '' }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { alt: undefined } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/WAI/tutorials/images/decision-tree\">\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'Describe the purpose of the image.'\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t\t{ __( 'Leave empty if decorative.' ) }\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ isResizable && dimensionsControl }\n\t\t\t\t\t<ResolutionTool\n\t\t\t\t\t\tvalue={ sizeSlug }\n\t\t\t\t\t\tonChange={ updateImage }\n\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t/>\n\t\t\t\t\t{ showLightboxToggle && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\thasValue={ () => !! lightbox }\n\t\t\t\t\t\t\tlabel={ __( 'Expand on Click' ) }\n\t\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\t\tsetAttributes( { lightbox: undefined } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Expand on Click' ) }\n\t\t\t\t\t\t\t\tchecked={ lightboxChecked }\n\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlightbox: { enabled: newValue },\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</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\tonChange={ onSetTitle }\n\t\t\t\t\thelp={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Describe the role of this image on the page.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/TR/html52/dom.html#the-title-attribute\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'(Note: many devices and browsers do not display this text.)'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n\n\tconst filename = getFilename( url );\n\tlet defaultedAlt;\n\n\tif ( alt ) {\n\t\tdefaultedAlt = alt;\n\t} else if ( filename ) {\n\t\tdefaultedAlt = sprintf(\n\t\t\t/* translators: %s: file name */\n\t\t\t__( 'This image has an empty alt attribute; its file name is %s' ),\n\t\t\tfilename\n\t\t);\n\t} else {\n\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t}\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst isRounded = attributes.className?.includes( 'is-style-rounded' );\n\n\tlet img = (\n\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t// should direct focus to block.\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t<>\n\t\t\t<img\n\t\t\t\tsrc={ temporaryURL || url }\n\t\t\t\talt={ defaultedAlt }\n\t\t\t\tonError={ () => onImageError() }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetLoadedNaturalSize( {\n\t\t\t\t\t\tloadedNaturalWidth: event.target?.naturalWidth,\n\t\t\t\t\t\tloadedNaturalHeight: event.target?.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tref={ imageRef }\n\t\t\t\tclassName={ borderProps.className }\n\t\t\t\tstyle={ {\n\t\t\t\t\twidth:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : undefined,\n\t\t\t\t\theight:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : undefined,\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\t...borderProps.style,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ temporaryURL && <Spinner /> }\n\t\t</>\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t);\n\n\t// clientWidth needs to be a number for the image Cropper to work, but sometimes it's 0\n\t// So we try using the imageRef width first and fallback to clientWidth.\n\tconst fallbackClientWidth = imageRef.current?.width || clientWidth;\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\tid={ id }\n\t\t\t\turl={ url }\n\t\t\t\twidth={ numericWidth }\n\t\t\t\theight={ numericHeight }\n\t\t\t\tclientWidth={ fallbackClientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\t\tsetAttributes( imageAttributes )\n\t\t\t\t}\n\t\t\t\tonFinishEditing={ () => {\n\t\t\t\t\tsetIsEditingImage( false );\n\t\t\t\t} }\n\t\t\t\tborderProps={ isRounded ? undefined : borderProps }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable ) {\n\t\timg = <div style={ { width, height, aspectRatio } }>{ img }</div>;\n\t} else {\n\t\tconst numericRatio = aspectRatio && evalAspectRatio( aspectRatio );\n\t\tconst customRatio = numericWidth / numericHeight;\n\t\tconst naturalRatio = naturalWidth / naturalHeight;\n\t\tconst ratio = numericRatio || customRatio || naturalRatio || 1;\n\t\tconst currentWidth =\n\t\t\t! numericWidth && numericHeight\n\t\t\t\t? numericHeight * ratio\n\t\t\t\t: numericWidth;\n\t\tconst currentHeight =\n\t\t\t! numericHeight && numericWidth\n\t\t\t\t? numericWidth / ratio\n\t\t\t\t: numericHeight;\n\n\t\tconst minWidth =\n\t\t\tnaturalWidth < naturalHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\tconst minHeight =\n\t\t\tnaturalHeight < naturalWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t// With the current implementation of ResizableBox, an image needs an\n\t\t// explicit pixel value for the max-width. In absence of being able to\n\t\t// set the content-width, this max-width is currently dictated by the\n\t\t// vanilla editor style. The following variable adds a buffer to this\n\t\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t\t// in most cases, allow you to scale the image beyond the width of the\n\t\t// main column, though not infinitely.\n\t\t// @todo It would be good to revisit this once a content-width variable\n\t\t// becomes available.\n\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\tlet showRightHandle = false;\n\t\tlet showLeftHandle = false;\n\n\t\t/* eslint-disable no-lonely-if */\n\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\tif ( align === 'center' ) {\n\t\t\t// When the image is centered, show both handles.\n\t\t\tshowRightHandle = true;\n\t\t\tshowLeftHandle = true;\n\t\t} else if ( isRTL() ) {\n\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t// Show the right handle and hide the left handle only when it is\n\t\t\t// aligned left. Otherwise always show the left handle.\n\t\t\tif ( align === 'left' ) {\n\t\t\t\tshowRightHandle = true;\n\t\t\t} else {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// Show the left handle and hide the right handle only when the\n\t\t\t// image is aligned right. Otherwise always show the right handle.\n\t\t\tif ( align === 'right' ) {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t} else {\n\t\t\t\tshowRightHandle = true;\n\t\t\t}\n\t\t}\n\t\t/* eslint-enable no-lonely-if */\n\n\t\timg = (\n\t\t\t<ResizableBox\n\t\t\t\tstyle={ {\n\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t! width && ! height && aspectRatio\n\t\t\t\t\t\t\t? aspectRatio\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t} }\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: currentWidth ?? 'auto',\n\t\t\t\t\theight: currentHeight ?? 'auto',\n\t\t\t\t} }\n\t\t\t\tshowHandle={ isSelected }\n\t\t\t\tminWidth={ minWidth }\n\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\tminHeight={ minHeight }\n\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\tlockAspectRatio={ ratio }\n\t\t\t\tenable={ {\n\t\t\t\t\ttop: false,\n\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\tbottom: true,\n\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ onResizeStart }\n\t\t\t\tonResizeStop={ ( event, direction, elt ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\t// Since the aspect ratio is locked when resizing, we can\n\t\t\t\t\t// use the width of the resized element to calculate the\n\t\t\t\t\t// height in CSS to prevent stretching when the max-width\n\t\t\t\t\t// is reached.\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: `${ elt.offsetWidth }px`,\n\t\t\t\t\t\theight: 'auto',\n\t\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t\tratio === naturalRatio\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: String( ratio ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tresizeRatio={ align === 'center' ? 2 : 1 }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\tif ( ! url && ! temporaryURL ) {\n\t\treturn sizeControls;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ /* Hide controls during upload to avoid component remount,\n\t\t\t\twhich causes duplicated image upload. */ }\n\t\t\t{ ! temporaryURL && controls }\n\t\t\t{ img }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier=\"caption\"\n\t\t\t\t\t\tclassName={ __experimentalGetElementClassName(\n\t\t\t\t\t\t\t'caption'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ captionRef }\n\t\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["isBlobURL","ExternalLink","ResizableBox","Spinner","TextareaControl","ToggleControl","TextControl","ToolbarButton","ToolbarGroup","__experimentalToolsPanel","ToolsPanel","__experimentalToolsPanelItem","ToolsPanelItem","__experimentalUseCustomUnits","useCustomUnits","useViewportMatch","usePrevious","useSelect","useDispatch","BlockControls","InspectorControls","RichText","__experimentalImageURLInputUI","ImageURLInputUI","MediaReplaceFlow","store","blockEditorStore","useSetting","BlockAlignmentControl","__experimentalImageEditor","ImageEditor","__experimentalGetElementClassName","__experimentalUseBorderProps","useBorderProps","privateApis","blockEditorPrivateApis","useEffect","useMemo","useState","useRef","useCallback","__","_x","sprintf","isRTL","getFilename","createBlock","getDefaultBlockName","switchToBlockType","crop","overlayText","upload","caption","captionIcon","noticesStore","coreStore","unlock","createUpgradedEmbedBlock","useClientWidth","isExternalImage","MIN_SIZE","ALLOWED_MEDIA_TYPES","evalAspectRatio","DimensionsTool","ResolutionTool","scaleOptions","value","label","help","Image","temporaryURL","attributes","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","blockEditingMode","url","alt","align","id","href","rel","linkClass","linkDestination","title","width","height","aspectRatio","scale","linkTarget","sizeSlug","lightbox","numericWidth","parseInt","undefined","numericHeight","imageRef","prevCaption","showCaption","setShowCaption","allowResize","getBlock","image","multiImageSelection","select","getMedia","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","createErrorNotice","createSuccessNotice","isLargeViewport","isWideAligned","includes","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","hasNonContentControls","isResizable","imageSizeOptions","filter","slug","media_details","sizes","source_url","map","name","canUploadMedia","window","fetch","then","response","blob","catch","captionRef","node","focus","naturalWidth","naturalHeight","current","complete","onResizeStart","onResizeStop","onImageError","embedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","type","allowedTypes","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","canEditImage","allowCrop","switchToCover","dimensionsUnitsOptions","availableUnits","lightboxSetting","showLightboxToggle","allowEditing","lightboxChecked","enabled","lightboxToggleDisabled","dimensionsControl","createElement","onChange","newWidth","newHeight","newScale","newAspectRatio","defaultScale","defaultAspectRatio","unitsOptions","resetAll","sizeControls","controls","Fragment","group","onClick","icon","isPressed","onChangeUrl","mediaUrl","mediaLink","link","mediaId","mediaURL","accept","onSelect","isShownByDefault","hasValue","onDeselect","__nextHasNoMarginBottom","options","checked","newValue","disabled","filename","defaultedAlt","borderProps","isRounded","className","src","onLoad","event","target","ref","style","objectFit","fallbackClientWidth","onSaveImage","imageAttributes","onFinishEditing","numericRatio","customRatio","naturalRatio","ratio","currentWidth","currentHeight","minWidth","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","display","size","showHandle","maxHeight","lockAspectRatio","enable","top","right","bottom","left","direction","elt","offsetWidth","String","resizeRatio","isEmpty","identifier","tagName","placeholder","inlineToolbar","__unstableOnSplitAtEnd"],"sources":["@wordpress/block-library/src/image/image.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tToggleControl,\n\tTextControl,\n\tToolbarButton,\n\tToolbarGroup,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalUseCustomUnits as useCustomUnits,\n} from '@wordpress/components';\nimport { useViewportMatch, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tuseSetting,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalGetElementClassName,\n\t__experimentalUseBorderProps as useBorderProps,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport {\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseCallback,\n} from '@wordpress/element';\nimport { __, _x, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tcrop,\n\toverlayText,\n\tupload,\n\tcaption as captionIcon,\n} from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\nimport { evalAspectRatio } from './utils';\n\nconst { DimensionsTool, ResolutionTool } = unlock( blockEditorPrivateApis );\n\nconst scaleOptions = [\n\t{\n\t\tvalue: 'cover',\n\t\tlabel: _x( 'Cover', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image covers the space evenly.' ),\n\t},\n\t{\n\t\tvalue: 'contain',\n\t\tlabel: _x( 'Contain', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image is contained without distortion.' ),\n\t},\n];\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n\tblockEditingMode,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\tlinkDestination,\n\t\ttitle,\n\t\twidth,\n\t\theight,\n\t\taspectRatio,\n\t\tscale,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t\tlightbox,\n\t} = attributes;\n\n\t// The only supported unit is px, so we can parseInt to strip the px here.\n\tconst numericWidth = width ? parseInt( width, 10 ) : undefined;\n\tconst numericHeight = height ? parseInt( height, 10 ) : undefined;\n\n\tconst imageRef = useRef();\n\tconst prevCaption = usePrevious( caption );\n\tconst [ showCaption, setShowCaption ] = useState( !! caption );\n\tconst { allowResize = true } = context;\n\tconst { getBlock } = useSelect( blockEditorStore );\n\n\tconst { image, multiImageSelection } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getMedia } = select( coreStore );\n\t\t\tconst { getMultiSelectedBlockClientIds, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\timage:\n\t\t\t\t\tid && isSelected\n\t\t\t\t\t\t? getMedia( id, { context: 'view' } )\n\t\t\t\t\t\t: null,\n\t\t\t\tmultiImageSelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/image'\n\t\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ id, isSelected ]\n\t);\n\tconst { canInsertCover, imageEditing, imageSizes, maxWidth, mediaUpload } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetSettings,\n\t\t\t\t\tcanInsertBlockType,\n\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\t\tconst settings = getSettings();\n\n\t\t\t\treturn {\n\t\t\t\t\timageEditing: settings.imageEditing,\n\t\t\t\t\timageSizes: settings.imageSizes,\n\t\t\t\t\tmaxWidth: settings.maxWidth,\n\t\t\t\t\tmediaUpload: settings.mediaUpload,\n\t\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t\t'core/cover',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = [ 'wide', 'full' ].includes( align );\n\tconst [\n\t\t{ loadedNaturalWidth, loadedNaturalHeight },\n\t\tsetLoadedNaturalSize,\n\t] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst [ externalBlob, setExternalBlob ] = useState();\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\tconst isResizable =\n\t\tallowResize &&\n\t\thasNonContentControls &&\n\t\t! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = imageSizes\n\t\t.filter(\n\t\t\t( { slug } ) => image?.media_details?.sizes?.[ slug ]?.source_url\n\t\t)\n\t\t.map( ( { name, slug } ) => ( { value: slug, label: name } ) );\n\tconst canUploadMedia = !! mediaUpload;\n\n\t// If an image is externally hosted, try to fetch the image data. This may\n\t// fail if the image host doesn't allow CORS with the domain. If it works,\n\t// we can enable a button in the toolbar to upload the image.\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! isExternalImage( id, url ) ||\n\t\t\t! isSelected ||\n\t\t\t! canUploadMedia\n\t\t) {\n\t\t\tsetExternalBlob();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( externalBlob ) return;\n\n\t\twindow\n\t\t\t// Avoid cache, which seems to help avoid CORS problems.\n\t\t\t.fetch( url.includes( '?' ) ? url : url + '?' )\n\t\t\t.then( ( response ) => response.blob() )\n\t\t\t.then( ( blob ) => setExternalBlob( blob ) )\n\t\t\t// Do nothing, cannot upload.\n\t\t\t.catch( () => {} );\n\t}, [ id, url, isSelected, externalBlob, canUploadMedia ] );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( caption && ! prevCaption ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ caption, prevCaption ] );\n\n\t// Focus the caption when we click to add one.\n\tconst captionRef = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && ! caption ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ caption ]\n\t);\n\n\t// Get naturalWidth and naturalHeight from image ref, and fall back to loaded natural\n\t// width and height. This resolves an issue in Safari where the loaded natural\n\t// width and height is otherwise lost when switching between alignments.\n\t// See: https://github.com/WordPress/gutenberg/pull/37210.\n\tconst { naturalWidth, naturalHeight } = useMemo( () => {\n\t\treturn {\n\t\t\tnaturalWidth:\n\t\t\t\timageRef.current?.naturalWidth ||\n\t\t\t\tloadedNaturalWidth ||\n\t\t\t\tundefined,\n\t\t\tnaturalHeight:\n\t\t\t\timageRef.current?.naturalHeight ||\n\t\t\t\tloadedNaturalHeight ||\n\t\t\t\tundefined,\n\t\t};\n\t}, [\n\t\tloadedNaturalWidth,\n\t\tloadedNaturalHeight,\n\t\timageRef.current?.complete,\n\t] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tfunction onImageError() {\n\t\t// Check if there's an embed block that handles this URL, e.g., instagram URL.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/11472\n\t\tconst embedBlock = createUpgradedEmbedBlock( { attributes: { url } } );\n\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\t}\n\n\tfunction onSetHref( props ) {\n\t\tsetAttributes( props );\n\t}\n\n\tfunction onSetTitle( value ) {\n\t\t// This is the HTML title attribute, separate from the media object\n\t\t// title.\n\t\tsetAttributes( { title: value } );\n\t}\n\n\tfunction updateAlt( newAlt ) {\n\t\tsetAttributes( { alt: newAlt } );\n\t}\n\n\tfunction updateImage( newSizeSlug ) {\n\t\tconst newUrl = image?.media_details?.sizes?.[ newSizeSlug ]?.source_url;\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\tsizeSlug: newSizeSlug,\n\t\t} );\n\t}\n\n\tfunction uploadExternal() {\n\t\tmediaUpload( {\n\t\t\tfilesList: [ externalBlob ],\n\t\t\tonFileChange( [ img ] ) {\n\t\t\t\tonSelectImage( img );\n\n\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetExternalBlob();\n\t\t\t\tcreateSuccessNotice( __( 'Image uploaded.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t},\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tonError( message ) {\n\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t},\n\t\t} );\n\t}\n\n\tfunction updateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].includes( nextAlign )\n\t\t\t? {\n\t\t\t\t\twidth: undefined,\n\t\t\t\t\theight: undefined,\n\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t\tscale: undefined,\n\t\t\t }\n\t\t\t: {};\n\t\tsetAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t\tif ( ! caption ) {\n\t\t\t\tsetShowCaption( false );\n\t\t\t}\n\t\t}\n\t}, [ isSelected, caption ] );\n\n\tconst canEditImage = id && naturalWidth && naturalHeight && imageEditing;\n\tconst allowCrop = ! multiImageSelection && canEditImage && ! isEditingImage;\n\n\tfunction switchToCover() {\n\t\treplaceBlocks(\n\t\t\tclientId,\n\t\t\tswitchToBlockType( getBlock( clientId ), 'core/cover' )\n\t\t);\n\t}\n\n\t// TODO: Can allow more units after figuring out how they should interact\n\t// with the ResizableBox and ImageEditor components. Calculations later on\n\t// for those components are currently assuming px units.\n\tconst dimensionsUnitsOptions = useCustomUnits( {\n\t\tavailableUnits: [ 'px' ],\n\t} );\n\n\tconst lightboxSetting = useSetting( 'lightbox' );\n\n\tconst showLightboxToggle =\n\t\t!! lightbox || lightboxSetting?.allowEditing === true;\n\n\tconst lightboxChecked =\n\t\t!! lightbox?.enabled || ( ! lightbox && !! lightboxSetting?.enabled );\n\n\tconst lightboxToggleDisabled = linkDestination !== 'none';\n\n\tconst dimensionsControl = (\n\t\t<DimensionsTool\n\t\t\tvalue={ { width, height, scale, aspectRatio } }\n\t\t\tonChange={ ( {\n\t\t\t\twidth: newWidth,\n\t\t\t\theight: newHeight,\n\t\t\t\tscale: newScale,\n\t\t\t\taspectRatio: newAspectRatio,\n\t\t\t} ) => {\n\t\t\t\t// Rebuilding the object forces setting `undefined`\n\t\t\t\t// for values that are removed since setAttributes\n\t\t\t\t// doesn't do anything with keys that aren't set.\n\t\t\t\tsetAttributes( {\n\t\t\t\t\t// CSS includes `height: auto`, but we need\n\t\t\t\t\t// `width: auto` to fix the aspect ratio when\n\t\t\t\t\t// only height is set due to the width and\n\t\t\t\t\t// height attributes set via the server.\n\t\t\t\t\twidth: ! newWidth && newHeight ? 'auto' : newWidth,\n\t\t\t\t\theight: newHeight,\n\t\t\t\t\tscale: newScale,\n\t\t\t\t\taspectRatio: newAspectRatio,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tdefaultScale=\"cover\"\n\t\t\tdefaultAspectRatio=\"auto\"\n\t\t\tscaleOptions={ scaleOptions }\n\t\t\tunitsOptions={ dimensionsUnitsOptions }\n\t\t/>\n\t);\n\n\tconst resetAll = () => {\n\t\tsetAttributes( {\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tscale: undefined,\n\t\t\taspectRatio: undefined,\n\t\t\tlightbox: undefined,\n\t\t} );\n\t};\n\n\tconst sizeControls = (\n\t\t<InspectorControls>\n\t\t\t<ToolsPanel label={ __( 'Settings' ) } resetAll={ resetAll }>\n\t\t\t\t{ isResizable && dimensionsControl }\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n\n\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\t\tvalue={ align }\n\t\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( { caption: undefined } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ captionIcon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tshowCaption\n\t\t\t\t\t\t\t\t? __( 'Remove caption' )\n\t\t\t\t\t\t\t\t: __( 'Add caption' )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t\t<ImageURLInputUI\n\t\t\t\t\t\turl={ href || '' }\n\t\t\t\t\t\tonChangeUrl={ onSetHref }\n\t\t\t\t\t\tlinkDestination={ linkDestination }\n\t\t\t\t\t\tmediaUrl={ ( image && image.source_url ) || url }\n\t\t\t\t\t\tmediaLink={ image && image.link }\n\t\t\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\t\t\tlinkClass={ linkClass }\n\t\t\t\t\t\trel={ rel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ allowCrop && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && canInsertCover && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ticon={ overlayText }\n\t\t\t\t\t\tlabel={ __( 'Add text over image' ) }\n\t\t\t\t\t\tonClick={ switchToCover }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ ! multiImageSelection && externalBlob && (\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel label={ __( 'Settings' ) } resetAll={ resetAll }>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\t\t\thasValue={ () => alt !== '' }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { alt: undefined } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/WAI/tutorials/images/decision-tree\">\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'Describe the purpose of the image.'\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t\t{ __( 'Leave empty if decorative.' ) }\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ isResizable && dimensionsControl }\n\t\t\t\t\t<ResolutionTool\n\t\t\t\t\t\tvalue={ sizeSlug }\n\t\t\t\t\t\tonChange={ updateImage }\n\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t/>\n\t\t\t\t\t{ showLightboxToggle && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\thasValue={ () => !! lightbox }\n\t\t\t\t\t\t\tlabel={ __( 'Expand on Click' ) }\n\t\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\t\tsetAttributes( { lightbox: undefined } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Expand on Click' ) }\n\t\t\t\t\t\t\t\tchecked={ lightboxChecked }\n\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlightbox: { enabled: newValue },\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\tdisabled={ lightboxToggleDisabled }\n\t\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t\tlightboxToggleDisabled\n\t\t\t\t\t\t\t\t\t\t? __(\n\t\t\t\t\t\t\t\t\t\t\t\t'“Expand on click” scales the image up, and can’t be combined with a link.'\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\tonChange={ onSetTitle }\n\t\t\t\t\thelp={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Describe the role of this image on the page.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/TR/html52/dom.html#the-title-attribute\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'(Note: many devices and browsers do not display this text.)'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n\n\tconst filename = getFilename( url );\n\tlet defaultedAlt;\n\n\tif ( alt ) {\n\t\tdefaultedAlt = alt;\n\t} else if ( filename ) {\n\t\tdefaultedAlt = sprintf(\n\t\t\t/* translators: %s: file name */\n\t\t\t__( 'This image has an empty alt attribute; its file name is %s' ),\n\t\t\tfilename\n\t\t);\n\t} else {\n\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t}\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst isRounded = attributes.className?.includes( 'is-style-rounded' );\n\n\tlet img = (\n\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t// should direct focus to block.\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t<>\n\t\t\t<img\n\t\t\t\tsrc={ temporaryURL || url }\n\t\t\t\talt={ defaultedAlt }\n\t\t\t\tonError={ () => onImageError() }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetLoadedNaturalSize( {\n\t\t\t\t\t\tloadedNaturalWidth: event.target?.naturalWidth,\n\t\t\t\t\t\tloadedNaturalHeight: event.target?.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tref={ imageRef }\n\t\t\t\tclassName={ borderProps.className }\n\t\t\t\tstyle={ {\n\t\t\t\t\twidth:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : undefined,\n\t\t\t\t\theight:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : undefined,\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\t...borderProps.style,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ temporaryURL && <Spinner /> }\n\t\t</>\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t);\n\n\t// clientWidth needs to be a number for the image Cropper to work, but sometimes it's 0\n\t// So we try using the imageRef width first and fallback to clientWidth.\n\tconst fallbackClientWidth = imageRef.current?.width || clientWidth;\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\tid={ id }\n\t\t\t\turl={ url }\n\t\t\t\twidth={ numericWidth }\n\t\t\t\theight={ numericHeight }\n\t\t\t\tclientWidth={ fallbackClientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\t\tsetAttributes( imageAttributes )\n\t\t\t\t}\n\t\t\t\tonFinishEditing={ () => {\n\t\t\t\t\tsetIsEditingImage( false );\n\t\t\t\t} }\n\t\t\t\tborderProps={ isRounded ? undefined : borderProps }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable ) {\n\t\timg = <div style={ { width, height, aspectRatio } }>{ img }</div>;\n\t} else {\n\t\tconst numericRatio = aspectRatio && evalAspectRatio( aspectRatio );\n\t\tconst customRatio = numericWidth / numericHeight;\n\t\tconst naturalRatio = naturalWidth / naturalHeight;\n\t\tconst ratio = numericRatio || customRatio || naturalRatio || 1;\n\t\tconst currentWidth =\n\t\t\t! numericWidth && numericHeight\n\t\t\t\t? numericHeight * ratio\n\t\t\t\t: numericWidth;\n\t\tconst currentHeight =\n\t\t\t! numericHeight && numericWidth\n\t\t\t\t? numericWidth / ratio\n\t\t\t\t: numericHeight;\n\n\t\tconst minWidth =\n\t\t\tnaturalWidth < naturalHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\tconst minHeight =\n\t\t\tnaturalHeight < naturalWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t// With the current implementation of ResizableBox, an image needs an\n\t\t// explicit pixel value for the max-width. In absence of being able to\n\t\t// set the content-width, this max-width is currently dictated by the\n\t\t// vanilla editor style. The following variable adds a buffer to this\n\t\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t\t// in most cases, allow you to scale the image beyond the width of the\n\t\t// main column, though not infinitely.\n\t\t// @todo It would be good to revisit this once a content-width variable\n\t\t// becomes available.\n\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\tlet showRightHandle = false;\n\t\tlet showLeftHandle = false;\n\n\t\t/* eslint-disable no-lonely-if */\n\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\tif ( align === 'center' ) {\n\t\t\t// When the image is centered, show both handles.\n\t\t\tshowRightHandle = true;\n\t\t\tshowLeftHandle = true;\n\t\t} else if ( isRTL() ) {\n\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t// Show the right handle and hide the left handle only when it is\n\t\t\t// aligned left. Otherwise always show the left handle.\n\t\t\tif ( align === 'left' ) {\n\t\t\t\tshowRightHandle = true;\n\t\t\t} else {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// Show the left handle and hide the right handle only when the\n\t\t\t// image is aligned right. Otherwise always show the right handle.\n\t\t\tif ( align === 'right' ) {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t} else {\n\t\t\t\tshowRightHandle = true;\n\t\t\t}\n\t\t}\n\t\t/* eslint-enable no-lonely-if */\n\n\t\timg = (\n\t\t\t<ResizableBox\n\t\t\t\tstyle={ {\n\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t! width && ! height && aspectRatio\n\t\t\t\t\t\t\t? aspectRatio\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t} }\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: currentWidth ?? 'auto',\n\t\t\t\t\theight: currentHeight ?? 'auto',\n\t\t\t\t} }\n\t\t\t\tshowHandle={ isSelected }\n\t\t\t\tminWidth={ minWidth }\n\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\tminHeight={ minHeight }\n\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\tlockAspectRatio={ ratio }\n\t\t\t\tenable={ {\n\t\t\t\t\ttop: false,\n\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\tbottom: true,\n\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ onResizeStart }\n\t\t\t\tonResizeStop={ ( event, direction, elt ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\t// Since the aspect ratio is locked when resizing, we can\n\t\t\t\t\t// use the width of the resized element to calculate the\n\t\t\t\t\t// height in CSS to prevent stretching when the max-width\n\t\t\t\t\t// is reached.\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: `${ elt.offsetWidth }px`,\n\t\t\t\t\t\theight: 'auto',\n\t\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t\tratio === naturalRatio\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: String( ratio ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tresizeRatio={ align === 'center' ? 2 : 1 }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\tif ( ! url && ! temporaryURL ) {\n\t\treturn sizeControls;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ /* Hide controls during upload to avoid component remount,\n\t\t\t\twhich causes duplicated image upload. */ }\n\t\t\t{ ! temporaryURL && controls }\n\t\t\t{ img }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier=\"caption\"\n\t\t\t\t\t\tclassName={ __experimentalGetElementClassName(\n\t\t\t\t\t\t\t'caption'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ captionRef }\n\t\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
@@ -72,6 +72,19 @@ export default function useMerge(clientId, onMerge) {
72
72
  return getBlockOrder(order[0])[0];
73
73
  }
74
74
  return forward => {
75
+ function mergeWithNested(clientIdA, clientIdB) {
76
+ registry.batch(() => {
77
+ // When merging a sub list item with a higher next list item, we
78
+ // also need to move any nested list items. Check if there's a
79
+ // listed list, and append its nested list items to the current
80
+ // list.
81
+ const [nestedListClientId] = getBlockOrder(clientIdB);
82
+ if (nestedListClientId) {
83
+ moveBlocksToPosition(getBlockOrder(nestedListClientId), nestedListClientId, getBlockRootClientId(clientIdA));
84
+ }
85
+ mergeBlocks(clientIdA, clientIdB);
86
+ });
87
+ }
75
88
  if (forward) {
76
89
  const nextBlockClientId = getNextId(clientId);
77
90
  if (!nextBlockClientId) {
@@ -81,10 +94,7 @@ export default function useMerge(clientId, onMerge) {
81
94
  if (getParentListItemId(nextBlockClientId)) {
82
95
  outdentListItem(nextBlockClientId);
83
96
  } else {
84
- registry.batch(() => {
85
- moveBlocksToPosition(getBlockOrder(nextBlockClientId), nextBlockClientId, getPreviousBlockClientId(nextBlockClientId));
86
- mergeBlocks(clientId, nextBlockClientId);
87
- });
97
+ mergeWithNested(clientId, nextBlockClientId);
88
98
  }
89
99
  } else {
90
100
  // Merging is only done from the top level. For lowel levels, the
@@ -94,17 +104,7 @@ export default function useMerge(clientId, onMerge) {
94
104
  outdentListItem(clientId);
95
105
  } else if (previousBlockClientId) {
96
106
  const trailingId = getTrailingId(previousBlockClientId);
97
- registry.batch(() => {
98
- // When merging a list item with a previous trailing list
99
- // item, we also need to move any nested list items. First,
100
- // check if there's a listed list. If there's a nested list,
101
- // append its nested list items to the trailing list.
102
- const [nestedListClientId] = getBlockOrder(clientId);
103
- if (nestedListClientId) {
104
- moveBlocksToPosition(getBlockOrder(nestedListClientId), nestedListClientId, getBlockRootClientId(trailingId));
105
- }
106
- mergeBlocks(trailingId, clientId);
107
- });
107
+ mergeWithNested(trailingId, clientId);
108
108
  } else {
109
109
  onMerge(forward);
110
110
  }
@@ -1 +1 @@
1
- {"version":3,"names":["useRegistry","useDispatch","useSelect","store","blockEditorStore","useOutdentListItem","useMerge","clientId","onMerge","registry","getPreviousBlockClientId","getNextBlockClientId","getBlockOrder","getBlockRootClientId","getBlockName","mergeBlocks","moveBlocksToPosition","outdentListItem","getTrailingId","id","order","length","getParentListItemId","listId","parentListItemId","_getNextId","next","getNextId","forward","nextBlockClientId","batch","previousBlockClientId","trailingId","nestedListClientId"],"sources":["@wordpress/block-library/src/list-item/hooks/use-merge.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRegistry, useDispatch, useSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport useOutdentListItem from './use-outdent-list-item';\n\nexport default function useMerge( clientId, onMerge ) {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetPreviousBlockClientId,\n\t\tgetNextBlockClientId,\n\t\tgetBlockOrder,\n\t\tgetBlockRootClientId,\n\t\tgetBlockName,\n\t} = useSelect( blockEditorStore );\n\tconst { mergeBlocks, moveBlocksToPosition } =\n\t\tuseDispatch( blockEditorStore );\n\tconst [ , outdentListItem ] = useOutdentListItem( clientId );\n\n\tfunction getTrailingId( id ) {\n\t\tconst order = getBlockOrder( id );\n\n\t\tif ( ! order.length ) {\n\t\t\treturn id;\n\t\t}\n\n\t\treturn getTrailingId( order[ order.length - 1 ] );\n\t}\n\n\tfunction getParentListItemId( id ) {\n\t\tconst listId = getBlockRootClientId( id );\n\t\tconst parentListItemId = getBlockRootClientId( listId );\n\t\tif ( ! parentListItemId ) return;\n\t\tif ( getBlockName( parentListItemId ) !== 'core/list-item' ) return;\n\t\treturn parentListItemId;\n\t}\n\n\t/**\n\t * Return the next list item with respect to the given list item. If none,\n\t * return the next list item of the parent list item if it exists.\n\t *\n\t * @param {string} id A list item client ID.\n\t * @return {string?} The client ID of the next list item.\n\t */\n\tfunction _getNextId( id ) {\n\t\tconst next = getNextBlockClientId( id );\n\t\tif ( next ) return next;\n\t\tconst parentListItemId = getParentListItemId( id );\n\t\tif ( ! parentListItemId ) return;\n\t\treturn _getNextId( parentListItemId );\n\t}\n\n\t/**\n\t * Given a client ID, return the client ID of the list item on the next\n\t * line, regardless of indentation level.\n\t *\n\t * @param {string} id The client ID of the current list item.\n\t * @return {string?} The client ID of the next list item.\n\t */\n\tfunction getNextId( id ) {\n\t\tconst order = getBlockOrder( id );\n\n\t\t// If the list item does not have a nested list, return the next list\n\t\t// item.\n\t\tif ( ! order.length ) {\n\t\t\treturn _getNextId( id );\n\t\t}\n\n\t\t// Get the first list item in the nested list.\n\t\treturn getBlockOrder( order[ 0 ] )[ 0 ];\n\t}\n\n\treturn ( forward ) => {\n\t\tif ( forward ) {\n\t\t\tconst nextBlockClientId = getNextId( clientId );\n\n\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\tonMerge( forward );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( getParentListItemId( nextBlockClientId ) ) {\n\t\t\t\toutdentListItem( nextBlockClientId );\n\t\t\t} else {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\tgetBlockOrder( nextBlockClientId ),\n\t\t\t\t\t\tnextBlockClientId,\n\t\t\t\t\t\tgetPreviousBlockClientId( nextBlockClientId )\n\t\t\t\t\t);\n\t\t\t\t\tmergeBlocks( clientId, nextBlockClientId );\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\t\t\t// Merging is only done from the top level. For lowel levels, the\n\t\t\t// list item is outdented instead.\n\t\t\tconst previousBlockClientId = getPreviousBlockClientId( clientId );\n\t\t\tif ( getParentListItemId( clientId ) ) {\n\t\t\t\toutdentListItem( clientId );\n\t\t\t} else if ( previousBlockClientId ) {\n\t\t\t\tconst trailingId = getTrailingId( previousBlockClientId );\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t// When merging a list item with a previous trailing list\n\t\t\t\t\t// item, we also need to move any nested list items. First,\n\t\t\t\t\t// check if there's a listed list. If there's a nested list,\n\t\t\t\t\t// append its nested list items to the trailing list.\n\t\t\t\t\tconst [ nestedListClientId ] = getBlockOrder( clientId );\n\t\t\t\t\tif ( nestedListClientId ) {\n\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\tgetBlockOrder( nestedListClientId ),\n\t\t\t\t\t\t\tnestedListClientId,\n\t\t\t\t\t\t\tgetBlockRootClientId( trailingId )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmergeBlocks( trailingId, clientId );\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tonMerge( forward );\n\t\t\t}\n\t\t}\n\t};\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["useRegistry","useDispatch","useSelect","store","blockEditorStore","useOutdentListItem","useMerge","clientId","onMerge","registry","getPreviousBlockClientId","getNextBlockClientId","getBlockOrder","getBlockRootClientId","getBlockName","mergeBlocks","moveBlocksToPosition","outdentListItem","getTrailingId","id","order","length","getParentListItemId","listId","parentListItemId","_getNextId","next","getNextId","forward","mergeWithNested","clientIdA","clientIdB","batch","nestedListClientId","nextBlockClientId","previousBlockClientId","trailingId"],"sources":["@wordpress/block-library/src/list-item/hooks/use-merge.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRegistry, useDispatch, useSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport useOutdentListItem from './use-outdent-list-item';\n\nexport default function useMerge( clientId, onMerge ) {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetPreviousBlockClientId,\n\t\tgetNextBlockClientId,\n\t\tgetBlockOrder,\n\t\tgetBlockRootClientId,\n\t\tgetBlockName,\n\t} = useSelect( blockEditorStore );\n\tconst { mergeBlocks, moveBlocksToPosition } =\n\t\tuseDispatch( blockEditorStore );\n\tconst [ , outdentListItem ] = useOutdentListItem( clientId );\n\n\tfunction getTrailingId( id ) {\n\t\tconst order = getBlockOrder( id );\n\n\t\tif ( ! order.length ) {\n\t\t\treturn id;\n\t\t}\n\n\t\treturn getTrailingId( order[ order.length - 1 ] );\n\t}\n\n\tfunction getParentListItemId( id ) {\n\t\tconst listId = getBlockRootClientId( id );\n\t\tconst parentListItemId = getBlockRootClientId( listId );\n\t\tif ( ! parentListItemId ) return;\n\t\tif ( getBlockName( parentListItemId ) !== 'core/list-item' ) return;\n\t\treturn parentListItemId;\n\t}\n\n\t/**\n\t * Return the next list item with respect to the given list item. If none,\n\t * return the next list item of the parent list item if it exists.\n\t *\n\t * @param {string} id A list item client ID.\n\t * @return {string?} The client ID of the next list item.\n\t */\n\tfunction _getNextId( id ) {\n\t\tconst next = getNextBlockClientId( id );\n\t\tif ( next ) return next;\n\t\tconst parentListItemId = getParentListItemId( id );\n\t\tif ( ! parentListItemId ) return;\n\t\treturn _getNextId( parentListItemId );\n\t}\n\n\t/**\n\t * Given a client ID, return the client ID of the list item on the next\n\t * line, regardless of indentation level.\n\t *\n\t * @param {string} id The client ID of the current list item.\n\t * @return {string?} The client ID of the next list item.\n\t */\n\tfunction getNextId( id ) {\n\t\tconst order = getBlockOrder( id );\n\n\t\t// If the list item does not have a nested list, return the next list\n\t\t// item.\n\t\tif ( ! order.length ) {\n\t\t\treturn _getNextId( id );\n\t\t}\n\n\t\t// Get the first list item in the nested list.\n\t\treturn getBlockOrder( order[ 0 ] )[ 0 ];\n\t}\n\n\treturn ( forward ) => {\n\t\tfunction mergeWithNested( clientIdA, clientIdB ) {\n\t\t\tregistry.batch( () => {\n\t\t\t\t// When merging a sub list item with a higher next list item, we\n\t\t\t\t// also need to move any nested list items. Check if there's a\n\t\t\t\t// listed list, and append its nested list items to the current\n\t\t\t\t// list.\n\t\t\t\tconst [ nestedListClientId ] = getBlockOrder( clientIdB );\n\t\t\t\tif ( nestedListClientId ) {\n\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\tgetBlockOrder( nestedListClientId ),\n\t\t\t\t\t\tnestedListClientId,\n\t\t\t\t\t\tgetBlockRootClientId( clientIdA )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tmergeBlocks( clientIdA, clientIdB );\n\t\t\t} );\n\t\t}\n\n\t\tif ( forward ) {\n\t\t\tconst nextBlockClientId = getNextId( clientId );\n\n\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\tonMerge( forward );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( getParentListItemId( nextBlockClientId ) ) {\n\t\t\t\toutdentListItem( nextBlockClientId );\n\t\t\t} else {\n\t\t\t\tmergeWithNested( clientId, nextBlockClientId );\n\t\t\t}\n\t\t} else {\n\t\t\t// Merging is only done from the top level. For lowel levels, the\n\t\t\t// list item is outdented instead.\n\t\t\tconst previousBlockClientId = getPreviousBlockClientId( clientId );\n\t\t\tif ( getParentListItemId( clientId ) ) {\n\t\t\t\toutdentListItem( clientId );\n\t\t\t} else if ( previousBlockClientId ) {\n\t\t\t\tconst trailingId = getTrailingId( previousBlockClientId );\n\t\t\t\tmergeWithNested( trailingId, clientId );\n\t\t\t} else {\n\t\t\t\tonMerge( forward );\n\t\t\t}\n\t\t}\n\t};\n}\n"],"mappings":"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"}
@@ -5,5 +5,5 @@ import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/pri
5
5
  export const {
6
6
  lock,
7
7
  unlock
8
- } = __dangerousOptInToUnstableAPIsOnlyForCoreModules('I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.', '@wordpress/block-library');
8
+ } = __dangerousOptInToUnstableAPIsOnlyForCoreModules('I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.', '@wordpress/block-library');
9
9
  //# sourceMappingURL=lock-unlock.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["__dangerousOptInToUnstableAPIsOnlyForCoreModules","lock","unlock"],"sources":["@wordpress/block-library/src/lock-unlock.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',\n\t\t'@wordpress/block-library'\n\t);\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,gDAAgD,QAAQ,yBAAyB;AAE1F,OAAO,MAAM;EAAEC,IAAI;EAAEC;AAAO,CAAC,GAC5BF,gDAAgD,CAC/C,8GAA8G,EAC9G,0BACD,CAAC"}
1
+ {"version":3,"names":["__dangerousOptInToUnstableAPIsOnlyForCoreModules","lock","unlock"],"sources":["@wordpress/block-library/src/lock-unlock.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.',\n\t\t'@wordpress/block-library'\n\t);\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,gDAAgD,QAAQ,yBAAyB;AAE1F,OAAO,MAAM;EAAEC,IAAI;EAAEC;AAAO,CAAC,GAC5BF,gDAAgD,CAC/C,iHAAiH,EACjH,0BACD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-library",
3
- "version": "8.19.5",
3
+ "version": "8.19.6",
4
4
  "description": "Block library for the WordPress editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -31,36 +31,36 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@babel/runtime": "^7.16.0",
34
- "@wordpress/a11y": "^3.42.5",
35
- "@wordpress/api-fetch": "^6.39.5",
36
- "@wordpress/autop": "^3.42.5",
37
- "@wordpress/blob": "^3.42.5",
38
- "@wordpress/block-editor": "^12.10.5",
39
- "@wordpress/blocks": "^12.19.5",
40
- "@wordpress/components": "^25.8.5",
41
- "@wordpress/compose": "^6.19.5",
42
- "@wordpress/core-data": "^6.19.5",
43
- "@wordpress/data": "^9.12.5",
44
- "@wordpress/date": "^4.42.5",
45
- "@wordpress/deprecated": "^3.42.5",
46
- "@wordpress/dom": "^3.42.5",
47
- "@wordpress/element": "^5.19.5",
48
- "@wordpress/escape-html": "^2.42.5",
49
- "@wordpress/hooks": "^3.42.5",
50
- "@wordpress/html-entities": "^3.42.5",
51
- "@wordpress/i18n": "^4.42.5",
52
- "@wordpress/icons": "^9.33.5",
53
- "@wordpress/interactivity": "^2.3.5",
54
- "@wordpress/keycodes": "^3.42.5",
55
- "@wordpress/notices": "^4.10.5",
56
- "@wordpress/primitives": "^3.40.5",
57
- "@wordpress/private-apis": "^0.24.5",
58
- "@wordpress/reusable-blocks": "^4.19.5",
59
- "@wordpress/rich-text": "^6.19.5",
60
- "@wordpress/server-side-render": "^4.19.5",
61
- "@wordpress/url": "^3.43.5",
62
- "@wordpress/viewport": "^5.19.5",
63
- "@wordpress/wordcount": "^3.42.5",
34
+ "@wordpress/a11y": "^3.42.6",
35
+ "@wordpress/api-fetch": "^6.39.6",
36
+ "@wordpress/autop": "^3.42.6",
37
+ "@wordpress/blob": "^3.42.6",
38
+ "@wordpress/block-editor": "^12.10.6",
39
+ "@wordpress/blocks": "^12.19.6",
40
+ "@wordpress/components": "^25.8.6",
41
+ "@wordpress/compose": "^6.19.6",
42
+ "@wordpress/core-data": "^6.19.6",
43
+ "@wordpress/data": "^9.12.6",
44
+ "@wordpress/date": "^4.42.6",
45
+ "@wordpress/deprecated": "^3.42.6",
46
+ "@wordpress/dom": "^3.42.6",
47
+ "@wordpress/element": "^5.19.6",
48
+ "@wordpress/escape-html": "^2.42.6",
49
+ "@wordpress/hooks": "^3.42.6",
50
+ "@wordpress/html-entities": "^3.42.6",
51
+ "@wordpress/i18n": "^4.42.6",
52
+ "@wordpress/icons": "^9.33.6",
53
+ "@wordpress/interactivity": "^2.3.6",
54
+ "@wordpress/keycodes": "^3.42.6",
55
+ "@wordpress/notices": "^4.10.6",
56
+ "@wordpress/primitives": "^3.40.6",
57
+ "@wordpress/private-apis": "^0.24.6",
58
+ "@wordpress/reusable-blocks": "^4.19.6",
59
+ "@wordpress/rich-text": "^6.19.6",
60
+ "@wordpress/server-side-render": "^4.19.6",
61
+ "@wordpress/url": "^3.43.6",
62
+ "@wordpress/viewport": "^5.19.6",
63
+ "@wordpress/wordcount": "^3.42.6",
64
64
  "change-case": "^4.1.2",
65
65
  "classnames": "^2.3.1",
66
66
  "colord": "^2.7.0",
@@ -78,5 +78,5 @@
78
78
  "publishConfig": {
79
79
  "access": "public"
80
80
  },
81
- "gitHead": "edc87d3e33740b82b30f5e21c5953ecded84f08f"
81
+ "gitHead": "640c80ab0fb4e0e2bce87e33895939f257e674df"
82
82
  }
@@ -377,6 +377,8 @@ export default function Image( {
377
377
  const lightboxChecked =
378
378
  !! lightbox?.enabled || ( ! lightbox && !! lightboxSetting?.enabled );
379
379
 
380
+ const lightboxToggleDisabled = linkDestination !== 'none';
381
+
380
382
  const dimensionsControl = (
381
383
  <DimensionsTool
382
384
  value={ { width, height, scale, aspectRatio } }
@@ -555,6 +557,14 @@ export default function Image( {
555
557
  lightbox: { enabled: newValue },
556
558
  } );
557
559
  } }
560
+ disabled={ lightboxToggleDisabled }
561
+ help={
562
+ lightboxToggleDisabled
563
+ ? __(
564
+ '“Expand on click” scales the image up, and can’t be combined with a link.'
565
+ )
566
+ : ''
567
+ }
558
568
  />
559
569
  </ToolsPanelItem>
560
570
  ) }
@@ -16,11 +16,13 @@
16
16
  * @return string The block content with the data-id attribute added.
17
17
  */
18
18
  function render_block_core_image( $attributes, $content, $block ) {
19
+ if ( false === stripos( $content, '<img' ) ) {
20
+ return '';
21
+ }
19
22
 
20
23
  $processor = new WP_HTML_Tag_Processor( $content );
21
- $processor->next_tag( 'img' );
22
24
 
23
- if ( $processor->get_attribute( 'src' ) === null ) {
25
+ if ( ! $processor->next_tag( 'img' ) || null === $processor->get_attribute( 'src' ) ) {
24
26
  return '';
25
27
  }
26
28
 
@@ -32,45 +34,47 @@ function render_block_core_image( $attributes, $content, $block ) {
32
34
  $processor->set_attribute( 'data-id', $attributes['data-id'] );
33
35
  }
34
36
 
35
- $lightbox_enabled = false;
36
37
  $link_destination = isset( $attributes['linkDestination'] ) ? $attributes['linkDestination'] : 'none';
37
38
  $lightbox_settings = block_core_image_get_lightbox_settings( $block->parsed_block );
38
39
 
39
- // If the lightbox is enabled and the image is not linked, flag the lightbox to be rendered.
40
- if ( isset( $lightbox_settings ) && 'none' === $link_destination ) {
41
-
42
- if ( isset( $lightbox_settings['enabled'] ) && true === $lightbox_settings['enabled'] ) {
43
- $lightbox_enabled = true;
44
- }
45
- }
40
+ $view_js_file_handle = 'wp-block-image-view';
41
+ $script_handles = $block->block_type->view_script_handles;
46
42
 
47
- // If at least one block in the page has the lightbox, mark the block type as interactive.
48
- if ( $lightbox_enabled ) {
43
+ /*
44
+ * If the lightbox is enabled and the image is not linked, add the filter
45
+ * and the JavaScript view file.
46
+ */
47
+ if (
48
+ isset( $lightbox_settings ) &&
49
+ 'none' === $link_destination &&
50
+ isset( $lightbox_settings['enabled'] ) &&
51
+ true === $lightbox_settings['enabled']
52
+ ) {
49
53
  $block->block_type->supports['interactivity'] = true;
50
- }
51
-
52
- // Determine whether the view script should be enqueued or not.
53
- $view_js_file = 'wp-block-image-view';
54
- if ( ! wp_script_is( $view_js_file ) ) {
55
- $script_handles = $block->block_type->view_script_handles;
56
54
 
57
- // If the script is not needed, and it is still in the `view_script_handles`, remove it.
58
- if ( ! $lightbox_enabled && in_array( $view_js_file, $script_handles, true ) ) {
59
- $block->block_type->view_script_handles = array_diff( $script_handles, array( $view_js_file ) );
60
- }
61
- // If the script is needed, but it was previously removed, add it again.
62
- if ( $lightbox_enabled && ! in_array( $view_js_file, $script_handles, true ) ) {
63
- $block->block_type->view_script_handles = array_merge( $script_handles, array( $view_js_file ) );
55
+ if ( ! in_array( $view_js_file_handle, $script_handles, true ) ) {
56
+ $block->block_type->view_script_handles = array_merge( $script_handles, array( $view_js_file_handle ) );
64
57
  }
65
- }
66
58
 
67
- if ( $lightbox_enabled ) {
68
- // This render needs to happen in a filter with priority 15 to ensure that it
69
- // runs after the duotone filter and that duotone styles are applied to the image
70
- // in the lightbox. We also need to ensure that the lightbox works with any plugins
71
- // that might use filters as well. We can consider removing this in the future if the
72
- // way the blocks are rendered changes, or if a new kind of filter is introduced.
59
+ /*
60
+ * This render needs to happen in a filter with priority 15 to ensure
61
+ * that it runs after the duotone filter and that duotone styles are
62
+ * applied to the image in the lightbox. We also need to ensure that the
63
+ * lightbox works with any plugins that might use filters as well. We
64
+ * can consider removing this in the future if the way the blocks are
65
+ * rendered changes, or if a new kind of filter is introduced.
66
+ */
73
67
  add_filter( 'render_block_core/image', 'block_core_image_render_lightbox', 15, 2 );
68
+ } else {
69
+ /*
70
+ * Remove the filter and the JavaScript view file if previously added by
71
+ * other Image blocks.
72
+ */
73
+ remove_filter( 'render_block_core/image', 'block_core_image_render_lightbox', 15 );
74
+ // If the script is not needed, and it is still in the `view_script_handles`, remove it.
75
+ if ( in_array( $view_js_file_handle, $script_handles, true ) ) {
76
+ $block->block_type->view_script_handles = array_diff( $script_handles, array( $view_js_file_handle ) );
77
+ }
74
78
  }
75
79
 
76
80
  return $processor->get_updated_html();
@@ -123,11 +127,28 @@ function block_core_image_get_lightbox_settings( $block ) {
123
127
  * @return string Filtered block content.
124
128
  */
125
129
  function block_core_image_render_lightbox( $block_content, $block ) {
130
+ /*
131
+ * If it's not possible that an IMG element exists then return the given
132
+ * block content as-is. It may be that there's no actual image in the block
133
+ * or it could be that another plugin already modified this HTML.
134
+ */
135
+ if ( false === stripos( $block_content, '<img' ) ) {
136
+ return $block_content;
137
+ }
138
+
126
139
  $processor = new WP_HTML_Tag_Processor( $block_content );
127
140
 
128
141
  $aria_label = __( 'Enlarge image' );
129
142
 
130
- $processor->next_tag( 'img' );
143
+ /*
144
+ * If there's definitely no IMG element in the block then return the given
145
+ * block content as-is. There's nothing that this code can knowingly modify
146
+ * to add the lightbox behavior.
147
+ */
148
+ if ( ! $processor->next_tag( 'img' ) ) {
149
+ return $block_content;
150
+ }
151
+
131
152
  $alt_attribute = $processor->get_attribute( 'alt' );
132
153
 
133
154
  // An empty alt attribute `alt=""` is valid for decorative images.
@@ -310,8 +331,6 @@ HTML;
310
331
  * @since 6.4.0
311
332
  *
312
333
  * @global WP_Scripts $wp_scripts
313
- *
314
- * @return void
315
334
  */
316
335
  function block_core_image_ensure_interactivity_dependency() {
317
336
  global $wp_scripts;
@@ -327,8 +346,6 @@ add_action( 'wp_print_scripts', 'block_core_image_ensure_interactivity_dependenc
327
346
 
328
347
  /**
329
348
  * Registers the `core/image` block on server.
330
- *
331
- * @return void
332
349
  */
333
350
  function register_block_core_image() {
334
351
  register_block_type_from_metadata(
@@ -76,6 +76,24 @@ export default function useMerge( clientId, onMerge ) {
76
76
  }
77
77
 
78
78
  return ( forward ) => {
79
+ function mergeWithNested( clientIdA, clientIdB ) {
80
+ registry.batch( () => {
81
+ // When merging a sub list item with a higher next list item, we
82
+ // also need to move any nested list items. Check if there's a
83
+ // listed list, and append its nested list items to the current
84
+ // list.
85
+ const [ nestedListClientId ] = getBlockOrder( clientIdB );
86
+ if ( nestedListClientId ) {
87
+ moveBlocksToPosition(
88
+ getBlockOrder( nestedListClientId ),
89
+ nestedListClientId,
90
+ getBlockRootClientId( clientIdA )
91
+ );
92
+ }
93
+ mergeBlocks( clientIdA, clientIdB );
94
+ } );
95
+ }
96
+
79
97
  if ( forward ) {
80
98
  const nextBlockClientId = getNextId( clientId );
81
99
 
@@ -87,14 +105,7 @@ export default function useMerge( clientId, onMerge ) {
87
105
  if ( getParentListItemId( nextBlockClientId ) ) {
88
106
  outdentListItem( nextBlockClientId );
89
107
  } else {
90
- registry.batch( () => {
91
- moveBlocksToPosition(
92
- getBlockOrder( nextBlockClientId ),
93
- nextBlockClientId,
94
- getPreviousBlockClientId( nextBlockClientId )
95
- );
96
- mergeBlocks( clientId, nextBlockClientId );
97
- } );
108
+ mergeWithNested( clientId, nextBlockClientId );
98
109
  }
99
110
  } else {
100
111
  // Merging is only done from the top level. For lowel levels, the
@@ -104,21 +115,7 @@ export default function useMerge( clientId, onMerge ) {
104
115
  outdentListItem( clientId );
105
116
  } else if ( previousBlockClientId ) {
106
117
  const trailingId = getTrailingId( previousBlockClientId );
107
- registry.batch( () => {
108
- // When merging a list item with a previous trailing list
109
- // item, we also need to move any nested list items. First,
110
- // check if there's a listed list. If there's a nested list,
111
- // append its nested list items to the trailing list.
112
- const [ nestedListClientId ] = getBlockOrder( clientId );
113
- if ( nestedListClientId ) {
114
- moveBlocksToPosition(
115
- getBlockOrder( nestedListClientId ),
116
- nestedListClientId,
117
- getBlockRootClientId( trailingId )
118
- );
119
- }
120
- mergeBlocks( trailingId, clientId );
121
- } );
118
+ mergeWithNested( trailingId, clientId );
122
119
  } else {
123
120
  onMerge( forward );
124
121
  }
@@ -5,6 +5,6 @@ import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/pri
5
5
 
6
6
  export const { lock, unlock } =
7
7
  __dangerousOptInToUnstableAPIsOnlyForCoreModules(
8
- 'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',
8
+ 'I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.',
9
9
  '@wordpress/block-library'
10
10
  );
@@ -7,8 +7,6 @@
7
7
 
8
8
  /**
9
9
  * Registers the `core/pattern` block on the server.
10
- *
11
- * @return void
12
10
  */
13
11
  function register_block_core_pattern() {
14
12
  register_block_type_from_metadata(
@@ -46,7 +44,6 @@ function render_block_core_pattern( $attributes ) {
46
44
  // Backward compatibility for handling Block Hooks and injecting the theme attribute in the Gutenberg plugin.
47
45
  // This can be removed when the minimum supported WordPress is >= 6.4.
48
46
  if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN && ! function_exists( 'traverse_and_serialize_blocks' ) ) {
49
- $content = _inject_theme_attribute_in_block_template_content( $content );
50
47
  $blocks = parse_blocks( $content );
51
48
  $content = gutenberg_serialize_blocks( $blocks );
52
49
  }
@@ -281,8 +281,6 @@ function classnames_for_block_core_search( $attributes ) {
281
281
  * @param array $wrapper_styles Current collection of wrapper styles.
282
282
  * @param array $button_styles Current collection of button styles.
283
283
  * @param array $input_styles Current collection of input styles.
284
- *
285
- * @return void
286
284
  */
287
285
  function apply_block_core_search_border_style( $attributes, $property, $side, &$wrapper_styles, &$button_styles, &$input_styles ) {
288
286
  $is_button_inside = isset( $attributes['buttonPosition'] ) && 'button-inside' === $attributes['buttonPosition'];
@@ -327,8 +325,6 @@ function apply_block_core_search_border_style( $attributes, $property, $side, &$
327
325
  * @param array $wrapper_styles Current collection of wrapper styles.
328
326
  * @param array $button_styles Current collection of button styles.
329
327
  * @param array $input_styles Current collection of input styles.
330
- *
331
- * @return void
332
328
  */
333
329
  function apply_block_core_search_border_styles( $attributes, $property, &$wrapper_styles, &$button_styles, &$input_styles ) {
334
330
  apply_block_core_search_border_style( $attributes, $property, null, $wrapper_styles, $button_styles, $input_styles );
@@ -18,13 +18,10 @@ function render_block_core_template_part( $attributes ) {
18
18
  $template_part_id = null;
19
19
  $content = null;
20
20
  $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
21
+ $theme = isset( $attributes['theme'] ) ? $attributes['theme'] : get_stylesheet();
21
22
 
22
- if (
23
- isset( $attributes['slug'] ) &&
24
- isset( $attributes['theme'] ) &&
25
- get_stylesheet() === $attributes['theme']
26
- ) {
27
- $template_part_id = $attributes['theme'] . '//' . $attributes['slug'];
23
+ if ( isset( $attributes['slug'] ) && get_stylesheet() === $theme ) {
24
+ $template_part_id = $theme . '//' . $attributes['slug'];
28
25
  $template_part_query = new WP_Query(
29
26
  array(
30
27
  'post_type' => 'wp_template_part',
@@ -34,7 +31,7 @@ function render_block_core_template_part( $attributes ) {
34
31
  array(
35
32
  'taxonomy' => 'wp_theme',
36
33
  'field' => 'name',
37
- 'terms' => $attributes['theme'],
34
+ 'terms' => $theme,
38
35
  ),
39
36
  ),
40
37
  'posts_per_page' => 1,