@wordpress/block-library 7.6.0 → 7.7.0

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.
Files changed (152) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/button/deprecated.js +175 -35
  3. package/build/button/deprecated.js.map +1 -1
  4. package/build/button/edit.js +1 -1
  5. package/build/button/edit.js.map +1 -1
  6. package/build/button/save.js +1 -1
  7. package/build/button/save.js.map +1 -1
  8. package/build/columns/index.js +3 -1
  9. package/build/columns/index.js.map +1 -1
  10. package/build/cover/deprecated.js +212 -207
  11. package/build/cover/deprecated.js.map +1 -1
  12. package/build/cover/edit/index.js +13 -3
  13. package/build/cover/edit/index.js.map +1 -1
  14. package/build/cover/save.js +18 -5
  15. package/build/cover/save.js.map +1 -1
  16. package/build/cover/shared.js +14 -17
  17. package/build/cover/shared.js.map +1 -1
  18. package/build/file/edit.js +1 -1
  19. package/build/file/edit.js.map +1 -1
  20. package/build/file/save.js +9 -1
  21. package/build/file/save.js.map +1 -1
  22. package/build/gallery/gap-styles.js +14 -4
  23. package/build/gallery/gap-styles.js.map +1 -1
  24. package/build/gallery/index.js +1 -1
  25. package/build/image/edit.js +5 -59
  26. package/build/image/edit.js.map +1 -1
  27. package/build/image/edit.native.js +56 -3
  28. package/build/image/edit.native.js.map +1 -1
  29. package/build/image/image.js +3 -13
  30. package/build/image/image.js.map +1 -1
  31. package/build/list-item/hooks/use-split.js +17 -3
  32. package/build/list-item/hooks/use-split.js.map +1 -1
  33. package/build/navigation-link/edit.js +31 -5
  34. package/build/navigation-link/edit.js.map +1 -1
  35. package/build/post-author-name/index.js +3 -0
  36. package/build/post-author-name/index.js.map +1 -1
  37. package/build/post-author-name/transforms.js +41 -0
  38. package/build/post-author-name/transforms.js.map +1 -0
  39. package/build/post-comments-form/form.js +11 -1
  40. package/build/post-comments-form/form.js.map +1 -1
  41. package/build/post-date/edit.js +13 -7
  42. package/build/post-date/edit.js.map +1 -1
  43. package/build/search/edit.js +1 -1
  44. package/build/search/edit.js.map +1 -1
  45. package/build/search/index.js +4 -0
  46. package/build/search/index.js.map +1 -1
  47. package/build/shortcode/edit.native.js +16 -13
  48. package/build/shortcode/edit.native.js.map +1 -1
  49. package/build/social-links/edit.js +2 -2
  50. package/build/social-links/edit.js.map +1 -1
  51. package/build/table-of-contents/edit.js +11 -3
  52. package/build/table-of-contents/edit.js.map +1 -1
  53. package/build-module/button/deprecated.js +175 -35
  54. package/build-module/button/deprecated.js.map +1 -1
  55. package/build-module/button/edit.js +2 -2
  56. package/build-module/button/edit.js.map +1 -1
  57. package/build-module/button/save.js +2 -2
  58. package/build-module/button/save.js.map +1 -1
  59. package/build-module/columns/index.js +3 -1
  60. package/build-module/columns/index.js.map +1 -1
  61. package/build-module/cover/deprecated.js +206 -198
  62. package/build-module/cover/deprecated.js.map +1 -1
  63. package/build-module/cover/edit/index.js +14 -4
  64. package/build-module/cover/edit/index.js.map +1 -1
  65. package/build-module/cover/save.js +19 -6
  66. package/build-module/cover/save.js.map +1 -1
  67. package/build-module/cover/shared.js +11 -12
  68. package/build-module/cover/shared.js.map +1 -1
  69. package/build-module/file/edit.js +2 -2
  70. package/build-module/file/edit.js.map +1 -1
  71. package/build-module/file/save.js +7 -2
  72. package/build-module/file/save.js.map +1 -1
  73. package/build-module/gallery/gap-styles.js +14 -4
  74. package/build-module/gallery/gap-styles.js.map +1 -1
  75. package/build-module/gallery/index.js +1 -1
  76. package/build-module/image/edit.js +5 -56
  77. package/build-module/image/edit.js.map +1 -1
  78. package/build-module/image/edit.native.js +57 -5
  79. package/build-module/image/edit.native.js.map +1 -1
  80. package/build-module/image/image.js +4 -14
  81. package/build-module/image/image.js.map +1 -1
  82. package/build-module/list-item/hooks/use-split.js +19 -5
  83. package/build-module/list-item/hooks/use-split.js.map +1 -1
  84. package/build-module/navigation-link/edit.js +31 -6
  85. package/build-module/navigation-link/edit.js.map +1 -1
  86. package/build-module/post-author-name/index.js +2 -0
  87. package/build-module/post-author-name/index.js.map +1 -1
  88. package/build-module/post-author-name/transforms.js +32 -0
  89. package/build-module/post-author-name/transforms.js.map +1 -0
  90. package/build-module/post-comments-form/form.js +7 -1
  91. package/build-module/post-comments-form/form.js.map +1 -1
  92. package/build-module/post-date/edit.js +15 -9
  93. package/build-module/post-date/edit.js.map +1 -1
  94. package/build-module/search/edit.js +2 -2
  95. package/build-module/search/edit.js.map +1 -1
  96. package/build-module/search/index.js +4 -0
  97. package/build-module/search/index.js.map +1 -1
  98. package/build-module/shortcode/edit.native.js +17 -13
  99. package/build-module/shortcode/edit.native.js.map +1 -1
  100. package/build-module/social-links/edit.js +2 -2
  101. package/build-module/social-links/edit.js.map +1 -1
  102. package/build-module/table-of-contents/edit.js +12 -4
  103. package/build-module/table-of-contents/edit.js.map +1 -1
  104. package/build-style/cover/style-rtl.css +32 -23
  105. package/build-style/cover/style.css +32 -23
  106. package/build-style/site-logo/style-rtl.css +4 -0
  107. package/build-style/site-logo/style.css +4 -0
  108. package/build-style/style-rtl.css +36 -23
  109. package/build-style/style.css +36 -23
  110. package/package.json +28 -28
  111. package/src/button/deprecated.js +145 -0
  112. package/src/button/edit.js +3 -1
  113. package/src/button/save.js +3 -1
  114. package/src/buttons/test/__snapshots__/edit.native.js.snap +1 -1
  115. package/src/buttons/test/edit.native.js +1 -1
  116. package/src/columns/block.json +3 -1
  117. package/src/cover/deprecated.js +230 -183
  118. package/src/cover/edit/index.js +25 -13
  119. package/src/cover/save.js +26 -13
  120. package/src/cover/shared.js +5 -7
  121. package/src/cover/style.scss +27 -22
  122. package/src/file/edit.js +5 -1
  123. package/src/file/save.js +14 -2
  124. package/src/gallery/block.json +1 -1
  125. package/src/gallery/gap-styles.js +21 -6
  126. package/src/gallery/index.php +23 -12
  127. package/src/image/edit.js +1 -53
  128. package/src/image/edit.native.js +65 -3
  129. package/src/image/image.js +2 -11
  130. package/src/image/styles.native.scss +11 -0
  131. package/src/list-item/hooks/use-split.js +18 -9
  132. package/src/navigation-link/edit.js +35 -5
  133. package/src/navigation-link/test/edit.js +0 -20
  134. package/src/post-author/index.php +3 -2
  135. package/src/post-author-name/index.js +2 -0
  136. package/src/post-author-name/index.php +1 -1
  137. package/src/post-author-name/transforms.js +25 -0
  138. package/src/post-comments/index.php +1 -1
  139. package/src/post-comments-form/form.js +11 -1
  140. package/src/post-comments-form/index.php +1 -1
  141. package/src/post-date/edit.js +4 -3
  142. package/src/query-pagination/index.php +0 -1
  143. package/src/search/block.json +4 -0
  144. package/src/search/edit.js +3 -1
  145. package/src/search/index.php +28 -15
  146. package/src/shortcode/edit.native.js +29 -15
  147. package/src/shortcode/style.native.scss +11 -4
  148. package/src/shortcode/test/__snapshots__/edit.native.js.snap +9 -0
  149. package/src/shortcode/test/edit.native.js +58 -40
  150. package/src/site-logo/style.scss +6 -0
  151. package/src/social-links/edit.js +11 -10
  152. package/src/table-of-contents/edit.js +19 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/image/edit.native.js"],"names":["getUrlForSlug","image","sizeSlug","undefined","media_details","sizes","source_url","LinkSettings","attributes","isLinkSheetVisible","setMappedAttributes","route","href","url","label","linkDestination","linkTarget","rel","inputValue","newUrl","params","newLinkDestination","LINK_DESTINATION_MEDIA","link","LINK_DESTINATION_ATTACHMENT","LINK_DESTINATION_NONE","LINK_DESTINATION_CUSTOM","valueMask","linkSettingsOptions","autoFocus","autoFill","openInNewTab","linkRel","placeholder","navigation","navigate","blockSettingsScreens","imageLinkDestinations","imageUrl","attachmentPageUrl","UPLOAD_STATE_IDLE","UPLOAD_STATE_UPLOADING","UPLOAD_STATE_SUCCEEDED","UPLOAD_STATE_FAILED","ImageEdit","Component","constructor","props","state","isCaptionSelected","uploadStatus","replacedFeaturedImage","finishMediaUploadWithSuccess","bind","finishMediaUploadWithFailure","mediaUploadStateReset","onSelectMediaUploadOption","updateMediaProgress","updateImageURL","onSetNewTab","onSetSizeSlug","onImagePressed","onSetFeatured","onFocusCaption","updateAlignment","accessibilityLabelCreator","onSizeChangeValue","componentDidMount","setAttributes","id","console","warn","componentWillUnmount","componentDidUpdate","previousProps","featuredImageId","previousId","canImageBeFeatured","getDerivedStateFromProps","isSelected","caption","trim","length","setState","payload","mediaUrl","mediaServerId","mediaId","width","height","nextAlign","extraUpdatedAttributes","Object","values","WIDE_ALIGNMENTS","alignments","includes","align","value","updatedLinkTarget","media","imageDefaultSize","destination","mediaAttributes","additionalAttributes","onFocus","getPlaceholderIcon","placeholderIcon","getStylesFromColorScheme","styles","iconPlaceholder","iconPlaceholderDark","getWidth","restAttributes","getAltTextSettings","alt","updateAlt","newAlt","textColor","newValue","closeSettingsBottomSheet","getFeaturedButtonPanel","isFeaturedImage","setFeaturedButtonStyle","setFeaturedButton","setFeaturedButtonDark","removeFeaturedButton","setFeaturedButtonCellContainer","MEDIA_ID_NO_FEATURED_IMAGE_SET","isGif","toLowerCase","render","clientId","context","wasBlockJustInserted","className","hasImageContext","keys","imageSizes","Array","isArray","sizeOptions","filter","slug","map","name","selectedSizeOption","sizeOptionsValid","find","option","getToolbarEditButton","open","replace","getInspectorControls","panelBody","fullscreen","featuredImagePanelTitle","content","MEDIA_TYPE_IMAGE","alignToFlex","left","center","right","full","wide","additionalImageProps","resizeMode","imageCrop","imageContainerStyles","fixedHeight","badgeLabelShown","badgeLabelText","getImageComponent","openMediaOptions","getMediaOptions","isUploadInProgress","isUploadFailed","retryMessage","onBlur","insertBlocksAfter","select","getMedia","coreStore","getSettings","blockEditorStore","getEditedPostAttribute","isNotFileUrl","shouldGetMedia","dispatch","editPostStore","closeGeneralSidebar","withPreferredColorScheme"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { View, TouchableWithoutFeedback } from 'react-native';\nimport { useRoute } from '@react-navigation/native';\n\n/**\n * WordPress dependencies\n */\nimport { Component, useEffect } from '@wordpress/element';\nimport {\n\trequestMediaImport,\n\tmediaUploadSync,\n\trequestImageFailedRetryDialog,\n\trequestImageUploadCancelDialog,\n\trequestImageFullscreenPreview,\n\tsetFeaturedImage,\n} from '@wordpress/react-native-bridge';\nimport {\n\tIcon,\n\tPanelBody,\n\tToolbarButton,\n\tToolbarGroup,\n\tImage,\n\tWIDE_ALIGNMENTS,\n\tLinkSettingsNavigation,\n\tBottomSheet,\n\tBottomSheetTextControl,\n\tBottomSheetSelectControl,\n\tFooterMessageControl,\n\tFooterMessageLink,\n\tBadge,\n} from '@wordpress/components';\nimport {\n\tBlockCaption,\n\tMediaPlaceholder,\n\tMediaUpload,\n\tMediaUploadProgress,\n\tMEDIA_TYPE_IMAGE,\n\tBlockControls,\n\tInspectorControls,\n\tBlockAlignmentToolbar,\n\tBlockStyles,\n\tstore as blockEditorStore,\n\tblockSettingsScreens,\n} from '@wordpress/block-editor';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { getProtocol, hasQueryArg } from '@wordpress/url';\nimport { doAction, hasAction } from '@wordpress/hooks';\nimport { compose, withPreferredColorScheme } from '@wordpress/compose';\nimport { withSelect, withDispatch } from '@wordpress/data';\nimport {\n\timage as placeholderIcon,\n\treplace,\n\tfullscreen,\n\ttextColor,\n} from '@wordpress/icons';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as editPostStore } from '@wordpress/edit-post';\n\n/**\n * Internal dependencies\n */\nimport styles from './styles.scss';\nimport { getUpdatedLinkTargetSettings } from './utils';\n\nimport {\n\tLINK_DESTINATION_NONE,\n\tLINK_DESTINATION_CUSTOM,\n\tLINK_DESTINATION_ATTACHMENT,\n\tLINK_DESTINATION_MEDIA,\n\tMEDIA_ID_NO_FEATURED_IMAGE_SET,\n} from './constants';\n\nconst getUrlForSlug = ( image, sizeSlug ) => {\n\tif ( ! sizeSlug ) {\n\t\treturn undefined;\n\t}\n\treturn image?.media_details?.sizes?.[ sizeSlug ]?.source_url;\n};\n\nfunction LinkSettings( {\n\tattributes,\n\timage,\n\tisLinkSheetVisible,\n\tsetMappedAttributes,\n} ) {\n\tconst route = useRoute();\n\tconst { href: url, label, linkDestination, linkTarget, rel } = attributes;\n\n\t// Persist attributes passed from child screen.\n\tuseEffect( () => {\n\t\tconst { inputValue: newUrl } = route.params || {};\n\n\t\tlet newLinkDestination;\n\t\tswitch ( newUrl ) {\n\t\t\tcase attributes.url:\n\t\t\t\tnewLinkDestination = LINK_DESTINATION_MEDIA;\n\t\t\t\tbreak;\n\t\t\tcase image?.link:\n\t\t\t\tnewLinkDestination = LINK_DESTINATION_ATTACHMENT;\n\t\t\t\tbreak;\n\t\t\tcase '':\n\t\t\t\tnewLinkDestination = LINK_DESTINATION_NONE;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tnewLinkDestination = LINK_DESTINATION_CUSTOM;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tsetMappedAttributes( {\n\t\t\turl: newUrl,\n\t\t\tlinkDestination: newLinkDestination,\n\t\t} );\n\t}, [ route.params?.inputValue ] );\n\n\tlet valueMask;\n\tswitch ( linkDestination ) {\n\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\tvalueMask = __( 'Media File' );\n\t\t\tbreak;\n\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\tvalueMask = __( 'Attachment Page' );\n\t\t\tbreak;\n\t\tcase LINK_DESTINATION_CUSTOM:\n\t\t\tvalueMask = __( 'Custom URL' );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tvalueMask = __( 'None' );\n\t\t\tbreak;\n\t}\n\n\tconst linkSettingsOptions = {\n\t\turl: {\n\t\t\tvalueMask,\n\t\t\tautoFocus: false,\n\t\t\tautoFill: false,\n\t\t},\n\t\topenInNewTab: {\n\t\t\tlabel: __( 'Open in new tab' ),\n\t\t},\n\t\tlinkRel: {\n\t\t\tlabel: __( 'Link Rel' ),\n\t\t\tplaceholder: _x( 'None', 'Link rel attribute value placeholder' ),\n\t\t},\n\t};\n\n\treturn (\n\t\t<PanelBody title={ __( 'Link Settings' ) }>\n\t\t\t<LinkSettingsNavigation\n\t\t\t\tisVisible={ isLinkSheetVisible }\n\t\t\t\turl={ url }\n\t\t\t\trel={ rel }\n\t\t\t\tlabel={ label }\n\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\tsetAttributes={ setMappedAttributes }\n\t\t\t\twithBottomSheet={ false }\n\t\t\t\thasPicker\n\t\t\t\toptions={ linkSettingsOptions }\n\t\t\t\tshowIcon={ false }\n\t\t\t\tonLinkCellPressed={ ( { navigation } ) => {\n\t\t\t\t\tnavigation.navigate(\n\t\t\t\t\t\tblockSettingsScreens.imageLinkDestinations,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinputValue: attributes.href,\n\t\t\t\t\t\t\tlinkDestination: attributes.linkDestination,\n\t\t\t\t\t\t\timageUrl: attributes.url,\n\t\t\t\t\t\t\tattachmentPageUrl: image?.link,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t/>\n\t\t</PanelBody>\n\t);\n}\n\nconst UPLOAD_STATE_IDLE = 0;\nconst UPLOAD_STATE_UPLOADING = 1;\nconst UPLOAD_STATE_SUCCEEDED = 2;\nconst UPLOAD_STATE_FAILED = 3;\n\nexport class ImageEdit extends Component {\n\tconstructor( props ) {\n\t\tsuper( props );\n\n\t\tthis.state = {\n\t\t\tisCaptionSelected: false,\n\t\t\tuploadStatus: UPLOAD_STATE_IDLE,\n\t\t};\n\n\t\tthis.replacedFeaturedImage = false;\n\n\t\tthis.finishMediaUploadWithSuccess = this.finishMediaUploadWithSuccess.bind(\n\t\t\tthis\n\t\t);\n\t\tthis.finishMediaUploadWithFailure = this.finishMediaUploadWithFailure.bind(\n\t\t\tthis\n\t\t);\n\t\tthis.mediaUploadStateReset = this.mediaUploadStateReset.bind( this );\n\t\tthis.onSelectMediaUploadOption = this.onSelectMediaUploadOption.bind(\n\t\t\tthis\n\t\t);\n\t\tthis.updateMediaProgress = this.updateMediaProgress.bind( this );\n\t\tthis.updateImageURL = this.updateImageURL.bind( this );\n\t\tthis.onSetNewTab = this.onSetNewTab.bind( this );\n\t\tthis.onSetSizeSlug = this.onSetSizeSlug.bind( this );\n\t\tthis.onImagePressed = this.onImagePressed.bind( this );\n\t\tthis.onSetFeatured = this.onSetFeatured.bind( this );\n\t\tthis.onFocusCaption = this.onFocusCaption.bind( this );\n\t\tthis.updateAlignment = this.updateAlignment.bind( this );\n\t\tthis.accessibilityLabelCreator = this.accessibilityLabelCreator.bind(\n\t\t\tthis\n\t\t);\n\t\tthis.setMappedAttributes = this.setMappedAttributes.bind( this );\n\t\tthis.onSizeChangeValue = this.onSizeChangeValue.bind( this );\n\t}\n\n\tcomponentDidMount() {\n\t\tconst { attributes, setAttributes } = this.props;\n\t\t// This will warn when we have `id` defined, while `url` is undefined.\n\t\t// This may help track this issue: https://github.com/wordpress-mobile/WordPress-Android/issues/9768\n\t\t// where a cancelled image upload was resulting in a subsequent crash.\n\t\tif ( attributes.id && ! attributes.url ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn( 'Attributes has id with no url.' );\n\t\t}\n\n\t\t// Detect any pasted image and start an upload.\n\t\tif (\n\t\t\t! attributes.id &&\n\t\t\tattributes.url &&\n\t\t\tgetProtocol( attributes.url ) === 'file:'\n\t\t) {\n\t\t\trequestMediaImport( attributes.url, ( id, url ) => {\n\t\t\t\tif ( url ) {\n\t\t\t\t\tsetAttributes( { id, url } );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Make sure we mark any temporary images as failed if they failed while\n\t\t// the editor wasn't open.\n\t\tif (\n\t\t\tattributes.id &&\n\t\t\tattributes.url &&\n\t\t\tgetProtocol( attributes.url ) === 'file:'\n\t\t) {\n\t\t\tmediaUploadSync();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// This action will only exist if the user pressed the trash button on the block holder.\n\t\tif (\n\t\t\thasAction( 'blocks.onRemoveBlockCheckUpload' ) &&\n\t\t\tthis.state.uploadStatus === UPLOAD_STATE_UPLOADING\n\t\t) {\n\t\t\tdoAction(\n\t\t\t\t'blocks.onRemoveBlockCheckUpload',\n\t\t\t\tthis.props.attributes.id\n\t\t\t);\n\t\t}\n\t}\n\n\tcomponentDidUpdate( previousProps ) {\n\t\tconst {\n\t\t\timage,\n\t\t\tattributes,\n\t\t\tsetAttributes,\n\t\t\tfeaturedImageId,\n\t\t} = this.props;\n\t\tif ( ! previousProps.image && image ) {\n\t\t\tconst url =\n\t\t\t\tgetUrlForSlug( image, attributes?.sizeSlug ) ||\n\t\t\t\timage.source_url;\n\t\t\tsetAttributes( { url } );\n\t\t}\n\n\t\tconst { id } = attributes;\n\t\tconst { id: previousId } = previousProps.attributes;\n\n\t\t// The media changed and the previous media was set as the Featured Image,\n\t\t// we must keep track of the previous media's featured status to act on it\n\t\t// once the new media has a finalized ID.\n\t\tif (\n\t\t\t!! id &&\n\t\t\tid !== previousId &&\n\t\t\t!! featuredImageId &&\n\t\t\tfeaturedImageId === previousId\n\t\t) {\n\t\t\tthis.replacedFeaturedImage = true;\n\t\t}\n\n\t\t// The media changed and now has a finalized ID (e.g. upload completed), we\n\t\t// should attempt to replace the featured image if applicable.\n\t\tif (\n\t\t\tthis.replacedFeaturedImage &&\n\t\t\t!! image &&\n\t\t\tthis.canImageBeFeatured()\n\t\t) {\n\t\t\tthis.replacedFeaturedImage = false;\n\t\t\tsetFeaturedImage( id );\n\t\t}\n\t}\n\n\tstatic getDerivedStateFromProps( props, state ) {\n\t\t// Avoid a UI flicker in the toolbar by insuring that isCaptionSelected\n\t\t// is updated immediately any time the isSelected prop becomes false.\n\t\treturn {\n\t\t\tisCaptionSelected: props.isSelected && state.isCaptionSelected,\n\t\t};\n\t}\n\n\taccessibilityLabelCreator( caption ) {\n\t\t// Checks if caption is empty.\n\t\treturn ( typeof caption === 'string' && caption.trim().length === 0 ) ||\n\t\t\tcaption === undefined ||\n\t\t\tcaption === null\n\t\t\t? /* translators: accessibility text. Empty image caption. */\n\t\t\t 'Image caption. Empty'\n\t\t\t: sprintf(\n\t\t\t\t\t/* translators: accessibility text. %s: image caption. */\n\t\t\t\t\t__( 'Image caption. %s' ),\n\t\t\t\t\tcaption\n\t\t\t );\n\t}\n\n\tonImagePressed() {\n\t\tconst { attributes, image } = this.props;\n\n\t\tif ( this.state.uploadStatus === UPLOAD_STATE_UPLOADING ) {\n\t\t\trequestImageUploadCancelDialog( attributes.id );\n\t\t} else if (\n\t\t\tattributes.id &&\n\t\t\tgetProtocol( attributes.url ) === 'file:'\n\t\t) {\n\t\t\trequestImageFailedRetryDialog( attributes.id );\n\t\t} else if ( ! this.state.isCaptionSelected ) {\n\t\t\trequestImageFullscreenPreview(\n\t\t\t\tattributes.url,\n\t\t\t\timage && image.source_url\n\t\t\t);\n\t\t}\n\n\t\tthis.setState( {\n\t\t\tisCaptionSelected: false,\n\t\t} );\n\t}\n\n\tupdateMediaProgress( payload ) {\n\t\tconst { setAttributes } = this.props;\n\t\tif ( payload.mediaUrl ) {\n\t\t\tsetAttributes( { url: payload.mediaUrl } );\n\t\t}\n\n\t\tif ( this.state.uploadStatus !== UPLOAD_STATE_UPLOADING ) {\n\t\t\tthis.setState( { uploadStatus: UPLOAD_STATE_UPLOADING } );\n\t\t}\n\t}\n\n\tfinishMediaUploadWithSuccess( payload ) {\n\t\tconst { setAttributes } = this.props;\n\n\t\tsetAttributes( { url: payload.mediaUrl, id: payload.mediaServerId } );\n\t\tthis.setState( { uploadStatus: UPLOAD_STATE_SUCCEEDED } );\n\t}\n\n\tfinishMediaUploadWithFailure( payload ) {\n\t\tconst { setAttributes } = this.props;\n\n\t\tsetAttributes( { id: payload.mediaId } );\n\t\tthis.setState( { uploadStatus: UPLOAD_STATE_FAILED } );\n\t}\n\n\tmediaUploadStateReset() {\n\t\tconst { setAttributes } = this.props;\n\n\t\tsetAttributes( { id: null, url: null } );\n\t\tthis.setState( { uploadStatus: UPLOAD_STATE_IDLE } );\n\t}\n\n\tupdateImageURL( url ) {\n\t\tthis.props.setAttributes( {\n\t\t\turl,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t} );\n\t}\n\n\tupdateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = Object.values(\n\t\t\tWIDE_ALIGNMENTS.alignments\n\t\t).includes( nextAlign )\n\t\t\t? { width: undefined, height: undefined }\n\t\t\t: {};\n\t\tthis.props.setAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tonSetNewTab( value ) {\n\t\tconst updatedLinkTarget = getUpdatedLinkTargetSettings(\n\t\t\tvalue,\n\t\t\tthis.props.attributes\n\t\t);\n\t\tthis.props.setAttributes( updatedLinkTarget );\n\t}\n\n\tonSetSizeSlug( sizeSlug ) {\n\t\tconst { image, setAttributes } = this.props;\n\n\t\tconst url = getUrlForSlug( image, sizeSlug );\n\t\tif ( ! url ) {\n\t\t\treturn null;\n\t\t}\n\t\tsetAttributes( {\n\t\t\turl,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tsizeSlug,\n\t\t} );\n\t}\n\n\tonSelectMediaUploadOption( media ) {\n\t\tconst { imageDefaultSize } = this.props;\n\t\tconst { id, url, destination } = this.props.attributes;\n\t\tconst mediaAttributes = {\n\t\t\tid: media.id,\n\t\t\turl: media.url,\n\t\t\tcaption: media.caption,\n\t\t};\n\n\t\tlet additionalAttributes;\n\t\t// Reset the dimension attributes if changing to a different image.\n\t\tif ( ! media.id || media.id !== id ) {\n\t\t\tadditionalAttributes = {\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t\tsizeSlug: imageDefaultSize,\n\t\t\t};\n\t\t} else {\n\t\t\t// Keep the same url when selecting the same file, so \"Image Size\" option is not changed.\n\t\t\tadditionalAttributes = { url };\n\t\t}\n\n\t\tlet href;\n\t\tswitch ( destination ) {\n\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\thref = media.url;\n\t\t\t\tbreak;\n\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\thref = media.link;\n\t\t\t\tbreak;\n\t\t}\n\t\tmediaAttributes.href = href;\n\n\t\tthis.props.setAttributes( {\n\t\t\t...mediaAttributes,\n\t\t\t...additionalAttributes,\n\t\t} );\n\t}\n\n\tonFocusCaption() {\n\t\tif ( this.props.onFocus ) {\n\t\t\tthis.props.onFocus();\n\t\t}\n\t\tif ( ! this.state.isCaptionSelected ) {\n\t\t\tthis.setState( {\n\t\t\t\tisCaptionSelected: true,\n\t\t\t} );\n\t\t}\n\t}\n\n\tgetPlaceholderIcon() {\n\t\treturn (\n\t\t\t<Icon\n\t\t\t\ticon={ placeholderIcon }\n\t\t\t\t{ ...this.props.getStylesFromColorScheme(\n\t\t\t\t\tstyles.iconPlaceholder,\n\t\t\t\t\tstyles.iconPlaceholderDark\n\t\t\t\t) }\n\t\t\t/>\n\t\t);\n\t}\n\n\tgetWidth() {\n\t\tconst { attributes } = this.props;\n\t\tconst { align, width } = attributes;\n\n\t\treturn Object.values( WIDE_ALIGNMENTS.alignments ).includes( align )\n\t\t\t? '100%'\n\t\t\t: width;\n\t}\n\n\tsetMappedAttributes( { url: href, linkDestination, ...restAttributes } ) {\n\t\tconst { setAttributes } = this.props;\n\t\tif ( ! href && ! linkDestination ) {\n\t\t\tlinkDestination = LINK_DESTINATION_NONE;\n\t\t} else if ( ! linkDestination ) {\n\t\t\tlinkDestination = LINK_DESTINATION_CUSTOM;\n\t\t}\n\n\t\treturn href === undefined || href === this.props.attributes.href\n\t\t\t? setAttributes( restAttributes )\n\t\t\t: setAttributes( {\n\t\t\t\t\t...restAttributes,\n\t\t\t\t\tlinkDestination,\n\t\t\t\t\thref,\n\t\t\t } );\n\t}\n\n\tgetAltTextSettings() {\n\t\tconst {\n\t\t\tattributes: { alt },\n\t\t} = this.props;\n\n\t\tconst updateAlt = ( newAlt ) => {\n\t\t\tthis.props.setAttributes( { alt: newAlt } );\n\t\t};\n\n\t\treturn (\n\t\t\t<BottomSheetTextControl\n\t\t\t\tinitialValue={ alt }\n\t\t\t\tonChange={ updateAlt }\n\t\t\t\tplaceholder={ __( 'Add alt text' ) }\n\t\t\t\tlabel={ __( 'Alt Text' ) }\n\t\t\t\ticon={ textColor }\n\t\t\t\tfooterNote={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Describe the purpose of the image. Leave empty if the image is purely decorative.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<FooterMessageLink\n\t\t\t\t\t\t\thref={\n\t\t\t\t\t\t\t\t'https://www.w3.org/WAI/tutorials/images/decision-tree/'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue={ __( 'What is alt text?' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\t}\n\n\tonSizeChangeValue( newValue ) {\n\t\tthis.onSetSizeSlug( newValue );\n\t}\n\n\tonSetFeatured( mediaId ) {\n\t\tconst { closeSettingsBottomSheet } = this.props;\n\t\tsetFeaturedImage( mediaId );\n\t\tcloseSettingsBottomSheet();\n\t}\n\n\tgetFeaturedButtonPanel( isFeaturedImage ) {\n\t\tconst { attributes, getStylesFromColorScheme } = this.props;\n\n\t\tconst setFeaturedButtonStyle = getStylesFromColorScheme(\n\t\t\tstyles.setFeaturedButton,\n\t\t\tstyles.setFeaturedButtonDark\n\t\t);\n\n\t\tconst removeFeaturedButton = () => (\n\t\t\t<BottomSheet.Cell\n\t\t\t\tlabel={ __( 'Remove as Featured Image' ) }\n\t\t\t\tlabelStyle={ [\n\t\t\t\t\tsetFeaturedButtonStyle,\n\t\t\t\t\tstyles.removeFeaturedButton,\n\t\t\t\t] }\n\t\t\t\tcellContainerStyle={ styles.setFeaturedButtonCellContainer }\n\t\t\t\tseparatorType={ 'none' }\n\t\t\t\tonPress={ () =>\n\t\t\t\t\tthis.onSetFeatured( MEDIA_ID_NO_FEATURED_IMAGE_SET )\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\n\t\tconst setFeaturedButton = () => (\n\t\t\t<BottomSheet.Cell\n\t\t\t\tlabel={ __( 'Set as Featured Image' ) }\n\t\t\t\tlabelStyle={ setFeaturedButtonStyle }\n\t\t\t\tcellContainerStyle={ styles.setFeaturedButtonCellContainer }\n\t\t\t\tseparatorType={ 'none' }\n\t\t\t\tonPress={ () => this.onSetFeatured( attributes.id ) }\n\t\t\t/>\n\t\t);\n\n\t\treturn isFeaturedImage ? removeFeaturedButton() : setFeaturedButton();\n\t}\n\n\t/**\n\t * Featured images must be set to a successfully uploaded self-hosted image,\n\t * which has an ID.\n\t *\n\t * @return {boolean} Boolean indicating whether or not the current may be set as featured.\n\t */\n\tcanImageBeFeatured() {\n\t\tconst {\n\t\t\tattributes: { id },\n\t\t} = this.props;\n\t\treturn (\n\t\t\ttypeof id !== 'undefined' &&\n\t\t\tthis.state.uploadStatus !== UPLOAD_STATE_UPLOADING &&\n\t\t\tthis.state.uploadStatus !== UPLOAD_STATE_FAILED\n\t\t);\n\t}\n\n\tisGif( url ) {\n\t\treturn url.toLowerCase().includes( '.gif' );\n\t}\n\n\trender() {\n\t\tconst { isCaptionSelected } = this.state;\n\t\tconst {\n\t\t\tattributes,\n\t\t\tisSelected,\n\t\t\timage,\n\t\t\tclientId,\n\t\t\timageDefaultSize,\n\t\t\tcontext,\n\t\t\tfeaturedImageId,\n\t\t\twasBlockJustInserted,\n\t\t} = this.props;\n\t\tconst { align, url, alt, id, sizeSlug, className } = attributes;\n\t\tconst hasImageContext = context\n\t\t\t? Object.keys( context ).length > 0\n\t\t\t: false;\n\n\t\tconst imageSizes = Array.isArray( this.props.imageSizes )\n\t\t\t? this.props.imageSizes\n\t\t\t: [];\n\t\t// Only map available image sizes for the user to choose.\n\t\tconst sizeOptions = imageSizes\n\t\t\t.filter( ( { slug } ) => getUrlForSlug( image, slug ) )\n\t\t\t.map( ( { name, slug } ) => ( { value: slug, label: name } ) );\n\n\t\tlet selectedSizeOption = sizeSlug || imageDefaultSize;\n\t\tlet sizeOptionsValid = sizeOptions.find(\n\t\t\t( option ) => option.value === selectedSizeOption\n\t\t);\n\n\t\tif ( ! sizeOptionsValid ) {\n\t\t\t// Default to 'full' size if the default large size is not available.\n\t\t\tsizeOptionsValid = sizeOptions.find(\n\t\t\t\t( option ) => option.value === 'full'\n\t\t\t);\n\t\t\tselectedSizeOption = 'full';\n\t\t}\n\n\t\tconst canImageBeFeatured = this.canImageBeFeatured();\n\t\tconst isFeaturedImage =\n\t\t\tcanImageBeFeatured && featuredImageId === attributes.id;\n\n\t\tconst getToolbarEditButton = ( open ) => (\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ttitle={ __( 'Edit image' ) }\n\t\t\t\t\t\ticon={ replace }\n\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t/>\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<BlockAlignmentToolbar\n\t\t\t\t\tvalue={ align }\n\t\t\t\t\tonChange={ this.updateAlignment }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t);\n\n\t\tconst getInspectorControls = () => (\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) } />\n\t\t\t\t<PanelBody style={ styles.panelBody }>\n\t\t\t\t\t<BlockStyles clientId={ clientId } url={ url } />\n\t\t\t\t</PanelBody>\n\t\t\t\t<PanelBody>\n\t\t\t\t\t{ image && sizeOptionsValid && (\n\t\t\t\t\t\t<BottomSheetSelectControl\n\t\t\t\t\t\t\ticon={ fullscreen }\n\t\t\t\t\t\t\tlabel={ __( 'Size' ) }\n\t\t\t\t\t\t\toptions={ sizeOptions }\n\t\t\t\t\t\t\tonChange={ this.onSizeChangeValue }\n\t\t\t\t\t\t\tvalue={ selectedSizeOption }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ this.getAltTextSettings() }\n\t\t\t\t</PanelBody>\n\t\t\t\t<LinkSettings\n\t\t\t\t\tattributes={ this.props.attributes }\n\t\t\t\t\timage={ this.props.image }\n\t\t\t\t\tisLinkSheetVisible={ this.state.isLinkSheetVisible }\n\t\t\t\t\tsetMappedAttributes={ this.setMappedAttributes }\n\t\t\t\t/>\n\t\t\t\t<PanelBody\n\t\t\t\t\ttitle={ __( 'Featured Image' ) }\n\t\t\t\t\ttitleStyle={ styles.featuredImagePanelTitle }\n\t\t\t\t>\n\t\t\t\t\t{ canImageBeFeatured &&\n\t\t\t\t\t\tthis.getFeaturedButtonPanel( isFeaturedImage ) }\n\t\t\t\t\t<FooterMessageControl\n\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t'Changes to featured image will not be affected by the undo/redo buttons.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tcellContainerStyle={\n\t\t\t\t\t\t\tstyles.setFeaturedButtonCellContainer\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t);\n\n\t\tif ( ! url ) {\n\t\t\treturn (\n\t\t\t\t<View style={ styles.content }>\n\t\t\t\t\t<MediaPlaceholder\n\t\t\t\t\t\tallowedTypes={ [ MEDIA_TYPE_IMAGE ] }\n\t\t\t\t\t\tonSelect={ this.onSelectMediaUploadOption }\n\t\t\t\t\t\ticon={ this.getPlaceholderIcon() }\n\t\t\t\t\t\tonFocus={ this.props.onFocus }\n\t\t\t\t\t\tautoOpenMediaUpload={\n\t\t\t\t\t\t\tisSelected && wasBlockJustInserted\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\tconst alignToFlex = {\n\t\t\tleft: 'flex-start',\n\t\t\tcenter: 'center',\n\t\t\tright: 'flex-end',\n\t\t\tfull: 'center',\n\t\t\twide: 'center',\n\t\t};\n\n\t\tconst additionalImageProps = {\n\t\t\theight: '100%',\n\t\t\tresizeMode: context?.imageCrop ? 'cover' : 'contain',\n\t\t};\n\n\t\tconst imageContainerStyles = [\n\t\t\tcontext?.fixedHeight && styles.fixedHeight,\n\t\t];\n\n\t\tconst isGif = this.isGif( url );\n\t\tconst badgeLabelShown = isFeaturedImage || isGif;\n\t\tlet badgeLabelText = '';\n\t\tif ( isFeaturedImage ) {\n\t\t\tbadgeLabelText = __( 'Featured' );\n\t\t} else if ( isGif ) {\n\t\t\tbadgeLabelText = __( 'GIF' );\n\t\t}\n\n\t\tconst getImageComponent = ( openMediaOptions, getMediaOptions ) => (\n\t\t\t<Badge label={ badgeLabelText } show={ badgeLabelShown }>\n\t\t\t\t<TouchableWithoutFeedback\n\t\t\t\t\taccessible={ ! isSelected }\n\t\t\t\t\tonPress={ this.onImagePressed }\n\t\t\t\t\tdisabled={ ! isSelected }\n\t\t\t\t>\n\t\t\t\t\t<View style={ styles.content }>\n\t\t\t\t\t\t{ isSelected && getInspectorControls() }\n\t\t\t\t\t\t{ isSelected && getMediaOptions() }\n\t\t\t\t\t\t{ ! this.state.isCaptionSelected &&\n\t\t\t\t\t\t\tgetToolbarEditButton( openMediaOptions ) }\n\t\t\t\t\t\t<MediaUploadProgress\n\t\t\t\t\t\t\tcoverUrl={ url }\n\t\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\t\tonUpdateMediaProgress={ this.updateMediaProgress }\n\t\t\t\t\t\t\tonFinishMediaUploadWithSuccess={\n\t\t\t\t\t\t\t\tthis.finishMediaUploadWithSuccess\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonFinishMediaUploadWithFailure={\n\t\t\t\t\t\t\t\tthis.finishMediaUploadWithFailure\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonMediaUploadStateReset={\n\t\t\t\t\t\t\t\tthis.mediaUploadStateReset\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trenderContent={ ( {\n\t\t\t\t\t\t\t\tisUploadInProgress,\n\t\t\t\t\t\t\t\tisUploadFailed,\n\t\t\t\t\t\t\t\tretryMessage,\n\t\t\t\t\t\t\t} ) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<View style={ imageContainerStyles }>\n\t\t\t\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\t\t\t\talign={\n\t\t\t\t\t\t\t\t\t\t\t\talign && alignToFlex[ align ]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\talt={ alt }\n\t\t\t\t\t\t\t\t\t\t\tisSelected={\n\t\t\t\t\t\t\t\t\t\t\t\tisSelected &&\n\t\t\t\t\t\t\t\t\t\t\t\t! isCaptionSelected\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tisUploadFailed={ isUploadFailed }\n\t\t\t\t\t\t\t\t\t\t\tisUploadInProgress={\n\t\t\t\t\t\t\t\t\t\t\t\tisUploadInProgress\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonSelectMediaUploadOption={\n\t\t\t\t\t\t\t\t\t\t\t\tthis.onSelectMediaUploadOption\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\topenMediaOptions={\n\t\t\t\t\t\t\t\t\t\t\t\topenMediaOptions\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tretryMessage={ retryMessage }\n\t\t\t\t\t\t\t\t\t\t\turl={ url }\n\t\t\t\t\t\t\t\t\t\t\tshapeStyle={\n\t\t\t\t\t\t\t\t\t\t\t\tstyles[ className ] || className\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\twidth={ this.getWidth() }\n\t\t\t\t\t\t\t\t\t\t\t{ ...( hasImageContext\n\t\t\t\t\t\t\t\t\t\t\t\t? additionalImageProps\n\t\t\t\t\t\t\t\t\t\t\t\t: {} ) }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</View>\n\t\t\t\t</TouchableWithoutFeedback>\n\t\t\t\t<BlockCaption\n\t\t\t\t\tclientId={ this.props.clientId }\n\t\t\t\t\tisSelected={ this.state.isCaptionSelected }\n\t\t\t\t\taccessible\n\t\t\t\t\taccessibilityLabelCreator={ this.accessibilityLabelCreator }\n\t\t\t\t\tonFocus={ this.onFocusCaption }\n\t\t\t\t\tonBlur={ this.props.onBlur } // Always assign onBlur as props.\n\t\t\t\t\tinsertBlocksAfter={ this.props.insertBlocksAfter }\n\t\t\t\t/>\n\t\t\t</Badge>\n\t\t);\n\n\t\treturn (\n\t\t\t<MediaUpload\n\t\t\t\tallowedTypes={ [ MEDIA_TYPE_IMAGE ] }\n\t\t\t\tisReplacingMedia={ true }\n\t\t\t\tonSelect={ this.onSelectMediaUploadOption }\n\t\t\t\trender={ ( { open, getMediaOptions } ) => {\n\t\t\t\t\treturn getImageComponent( open, getMediaOptions );\n\t\t\t\t} }\n\t\t\t/>\n\t\t);\n\t}\n}\n\nexport default compose( [\n\twithSelect( ( select, props ) => {\n\t\tconst { getMedia } = select( coreStore );\n\t\tconst { getSettings, wasBlockJustInserted } = select(\n\t\t\tblockEditorStore\n\t\t);\n\t\tconst { getEditedPostAttribute } = select( 'core/editor' );\n\t\tconst {\n\t\t\tattributes: { id, url },\n\t\t\tisSelected,\n\t\t\tclientId,\n\t\t} = props;\n\t\tconst { imageSizes, imageDefaultSize } = getSettings();\n\t\tconst isNotFileUrl = id && getProtocol( url ) !== 'file:';\n\t\tconst featuredImageId = getEditedPostAttribute( 'featured_media' );\n\n\t\tconst shouldGetMedia =\n\t\t\t( isSelected && isNotFileUrl ) ||\n\t\t\t// Edge case to update the image after uploading if the block gets unselected\n\t\t\t// Check if it's the original image and not the resized one with queryparams.\n\t\t\t( ! isSelected &&\n\t\t\t\tisNotFileUrl &&\n\t\t\t\turl &&\n\t\t\t\t! hasQueryArg( url, 'w' ) );\n\n\t\treturn {\n\t\t\timage: shouldGetMedia ? getMedia( id ) : null,\n\t\t\timageSizes,\n\t\t\timageDefaultSize,\n\t\t\tfeaturedImageId,\n\t\t\twasBlockJustInserted: wasBlockJustInserted(\n\t\t\t\tclientId,\n\t\t\t\t'inserter_menu'\n\t\t\t),\n\t\t};\n\t} ),\n\twithDispatch( ( dispatch ) => {\n\t\treturn {\n\t\t\tcloseSettingsBottomSheet() {\n\t\t\t\tdispatch( editPostStore ).closeGeneralSidebar();\n\t\t\t},\n\t\t};\n\t} ),\n\twithPreferredColorScheme,\n] )( ImageEdit );\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/image/edit.native.js"],"names":["getUrlForSlug","image","sizeSlug","undefined","media_details","sizes","source_url","LinkSettings","attributes","isLinkSheetVisible","setMappedAttributes","route","href","url","label","linkDestination","linkTarget","rel","inputValue","newUrl","params","newLinkDestination","LINK_DESTINATION_MEDIA","link","LINK_DESTINATION_ATTACHMENT","LINK_DESTINATION_NONE","LINK_DESTINATION_CUSTOM","valueMask","linkSettingsOptions","autoFocus","autoFill","openInNewTab","linkRel","placeholder","navigation","navigate","blockSettingsScreens","imageLinkDestinations","imageUrl","attachmentPageUrl","UPLOAD_STATE_IDLE","UPLOAD_STATE_UPLOADING","UPLOAD_STATE_SUCCEEDED","UPLOAD_STATE_FAILED","ImageEdit","Component","constructor","props","state","isCaptionSelected","uploadStatus","replacedFeaturedImage","finishMediaUploadWithSuccess","bind","finishMediaUploadWithFailure","mediaUploadStateReset","onSelectMediaUploadOption","updateMediaProgress","updateImageURL","onSetNewTab","onSetSizeSlug","onImagePressed","onSetFeatured","onFocusCaption","onSelectURL","updateAlignment","accessibilityLabelCreator","onSizeChangeValue","componentDidMount","setAttributes","id","console","warn","componentWillUnmount","componentDidUpdate","previousProps","featuredImageId","previousId","canImageBeFeatured","getDerivedStateFromProps","isSelected","caption","trim","length","setState","payload","mediaUrl","mediaServerId","mediaId","width","height","nextAlign","extraUpdatedAttributes","Object","values","WIDE_ALIGNMENTS","alignments","includes","align","value","updatedLinkTarget","media","imageDefaultSize","destination","mediaAttributes","additionalAttributes","newURL","createErrorNotice","isFetchingImage","RNImage","getSize","onFocus","getPlaceholderIcon","placeholderIcon","getStylesFromColorScheme","styles","iconPlaceholder","iconPlaceholderDark","showLoadingIndicator","image__loading","getWidth","restAttributes","getAltTextSettings","alt","updateAlt","newAlt","textColor","newValue","closeSettingsBottomSheet","getFeaturedButtonPanel","isFeaturedImage","setFeaturedButtonStyle","setFeaturedButton","setFeaturedButtonDark","removeFeaturedButton","setFeaturedButtonCellContainer","MEDIA_ID_NO_FEATURED_IMAGE_SET","isGif","toLowerCase","render","clientId","context","wasBlockJustInserted","className","hasImageContext","keys","imageSizes","Array","isArray","sizeOptions","filter","slug","map","name","selectedSizeOption","sizeOptionsValid","find","option","getToolbarEditButton","open","replace","getInspectorControls","panelBody","fullscreen","featuredImagePanelTitle","content","MEDIA_TYPE_IMAGE","alignToFlex","left","center","right","full","wide","additionalImageProps","resizeMode","imageCrop","imageContainerStyles","fixedHeight","badgeLabelShown","badgeLabelText","getImageComponent","openMediaOptions","getMediaOptions","isUploadInProgress","isUploadFailed","retryMessage","onBlur","insertBlocksAfter","select","getMedia","coreStore","getSettings","blockEditorStore","getEditedPostAttribute","isNotFileUrl","shouldGetMedia","dispatch","noticesStore","editPostStore","closeGeneralSidebar","withPreferredColorScheme"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tActivityIndicator,\n\tImage as RNImage,\n\tTouchableWithoutFeedback,\n\tView,\n} from 'react-native';\nimport { useRoute } from '@react-navigation/native';\n\n/**\n * WordPress dependencies\n */\nimport { Component, useEffect } from '@wordpress/element';\nimport {\n\trequestMediaImport,\n\tmediaUploadSync,\n\trequestImageFailedRetryDialog,\n\trequestImageUploadCancelDialog,\n\trequestImageFullscreenPreview,\n\tsetFeaturedImage,\n} from '@wordpress/react-native-bridge';\nimport {\n\tIcon,\n\tPanelBody,\n\tToolbarButton,\n\tToolbarGroup,\n\tImage,\n\tWIDE_ALIGNMENTS,\n\tLinkSettingsNavigation,\n\tBottomSheet,\n\tBottomSheetTextControl,\n\tBottomSheetSelectControl,\n\tFooterMessageControl,\n\tFooterMessageLink,\n\tBadge,\n} from '@wordpress/components';\nimport {\n\tBlockCaption,\n\tMediaPlaceholder,\n\tMediaUpload,\n\tMediaUploadProgress,\n\tMEDIA_TYPE_IMAGE,\n\tBlockControls,\n\tInspectorControls,\n\tBlockAlignmentToolbar,\n\tBlockStyles,\n\tstore as blockEditorStore,\n\tblockSettingsScreens,\n} from '@wordpress/block-editor';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { getProtocol, hasQueryArg, isURL } from '@wordpress/url';\nimport { doAction, hasAction } from '@wordpress/hooks';\nimport { compose, withPreferredColorScheme } from '@wordpress/compose';\nimport { withSelect, withDispatch } from '@wordpress/data';\nimport {\n\timage as placeholderIcon,\n\treplace,\n\tfullscreen,\n\ttextColor,\n} from '@wordpress/icons';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as editPostStore } from '@wordpress/edit-post';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport styles from './styles.scss';\nimport { getUpdatedLinkTargetSettings } from './utils';\n\nimport {\n\tLINK_DESTINATION_NONE,\n\tLINK_DESTINATION_CUSTOM,\n\tLINK_DESTINATION_ATTACHMENT,\n\tLINK_DESTINATION_MEDIA,\n\tMEDIA_ID_NO_FEATURED_IMAGE_SET,\n} from './constants';\n\nconst getUrlForSlug = ( image, sizeSlug ) => {\n\tif ( ! sizeSlug ) {\n\t\treturn undefined;\n\t}\n\treturn image?.media_details?.sizes?.[ sizeSlug ]?.source_url;\n};\n\nfunction LinkSettings( {\n\tattributes,\n\timage,\n\tisLinkSheetVisible,\n\tsetMappedAttributes,\n} ) {\n\tconst route = useRoute();\n\tconst { href: url, label, linkDestination, linkTarget, rel } = attributes;\n\n\t// Persist attributes passed from child screen.\n\tuseEffect( () => {\n\t\tconst { inputValue: newUrl } = route.params || {};\n\n\t\tlet newLinkDestination;\n\t\tswitch ( newUrl ) {\n\t\t\tcase attributes.url:\n\t\t\t\tnewLinkDestination = LINK_DESTINATION_MEDIA;\n\t\t\t\tbreak;\n\t\t\tcase image?.link:\n\t\t\t\tnewLinkDestination = LINK_DESTINATION_ATTACHMENT;\n\t\t\t\tbreak;\n\t\t\tcase '':\n\t\t\t\tnewLinkDestination = LINK_DESTINATION_NONE;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tnewLinkDestination = LINK_DESTINATION_CUSTOM;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tsetMappedAttributes( {\n\t\t\turl: newUrl,\n\t\t\tlinkDestination: newLinkDestination,\n\t\t} );\n\t}, [ route.params?.inputValue ] );\n\n\tlet valueMask;\n\tswitch ( linkDestination ) {\n\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\tvalueMask = __( 'Media File' );\n\t\t\tbreak;\n\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\tvalueMask = __( 'Attachment Page' );\n\t\t\tbreak;\n\t\tcase LINK_DESTINATION_CUSTOM:\n\t\t\tvalueMask = __( 'Custom URL' );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tvalueMask = __( 'None' );\n\t\t\tbreak;\n\t}\n\n\tconst linkSettingsOptions = {\n\t\turl: {\n\t\t\tvalueMask,\n\t\t\tautoFocus: false,\n\t\t\tautoFill: false,\n\t\t},\n\t\topenInNewTab: {\n\t\t\tlabel: __( 'Open in new tab' ),\n\t\t},\n\t\tlinkRel: {\n\t\t\tlabel: __( 'Link Rel' ),\n\t\t\tplaceholder: _x( 'None', 'Link rel attribute value placeholder' ),\n\t\t},\n\t};\n\n\treturn (\n\t\t<PanelBody title={ __( 'Link Settings' ) }>\n\t\t\t<LinkSettingsNavigation\n\t\t\t\tisVisible={ isLinkSheetVisible }\n\t\t\t\turl={ url }\n\t\t\t\trel={ rel }\n\t\t\t\tlabel={ label }\n\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\tsetAttributes={ setMappedAttributes }\n\t\t\t\twithBottomSheet={ false }\n\t\t\t\thasPicker\n\t\t\t\toptions={ linkSettingsOptions }\n\t\t\t\tshowIcon={ false }\n\t\t\t\tonLinkCellPressed={ ( { navigation } ) => {\n\t\t\t\t\tnavigation.navigate(\n\t\t\t\t\t\tblockSettingsScreens.imageLinkDestinations,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinputValue: attributes.href,\n\t\t\t\t\t\t\tlinkDestination: attributes.linkDestination,\n\t\t\t\t\t\t\timageUrl: attributes.url,\n\t\t\t\t\t\t\tattachmentPageUrl: image?.link,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t/>\n\t\t</PanelBody>\n\t);\n}\n\nconst UPLOAD_STATE_IDLE = 0;\nconst UPLOAD_STATE_UPLOADING = 1;\nconst UPLOAD_STATE_SUCCEEDED = 2;\nconst UPLOAD_STATE_FAILED = 3;\n\nexport class ImageEdit extends Component {\n\tconstructor( props ) {\n\t\tsuper( props );\n\n\t\tthis.state = {\n\t\t\tisCaptionSelected: false,\n\t\t\tuploadStatus: UPLOAD_STATE_IDLE,\n\t\t};\n\n\t\tthis.replacedFeaturedImage = false;\n\n\t\tthis.finishMediaUploadWithSuccess = this.finishMediaUploadWithSuccess.bind(\n\t\t\tthis\n\t\t);\n\t\tthis.finishMediaUploadWithFailure = this.finishMediaUploadWithFailure.bind(\n\t\t\tthis\n\t\t);\n\t\tthis.mediaUploadStateReset = this.mediaUploadStateReset.bind( this );\n\t\tthis.onSelectMediaUploadOption = this.onSelectMediaUploadOption.bind(\n\t\t\tthis\n\t\t);\n\t\tthis.updateMediaProgress = this.updateMediaProgress.bind( this );\n\t\tthis.updateImageURL = this.updateImageURL.bind( this );\n\t\tthis.onSetNewTab = this.onSetNewTab.bind( this );\n\t\tthis.onSetSizeSlug = this.onSetSizeSlug.bind( this );\n\t\tthis.onImagePressed = this.onImagePressed.bind( this );\n\t\tthis.onSetFeatured = this.onSetFeatured.bind( this );\n\t\tthis.onFocusCaption = this.onFocusCaption.bind( this );\n\t\tthis.onSelectURL = this.onSelectURL.bind( this );\n\t\tthis.updateAlignment = this.updateAlignment.bind( this );\n\t\tthis.accessibilityLabelCreator = this.accessibilityLabelCreator.bind(\n\t\t\tthis\n\t\t);\n\t\tthis.setMappedAttributes = this.setMappedAttributes.bind( this );\n\t\tthis.onSizeChangeValue = this.onSizeChangeValue.bind( this );\n\t}\n\n\tcomponentDidMount() {\n\t\tconst { attributes, setAttributes } = this.props;\n\t\t// This will warn when we have `id` defined, while `url` is undefined.\n\t\t// This may help track this issue: https://github.com/wordpress-mobile/WordPress-Android/issues/9768\n\t\t// where a cancelled image upload was resulting in a subsequent crash.\n\t\tif ( attributes.id && ! attributes.url ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn( 'Attributes has id with no url.' );\n\t\t}\n\n\t\t// Detect any pasted image and start an upload.\n\t\tif (\n\t\t\t! attributes.id &&\n\t\t\tattributes.url &&\n\t\t\tgetProtocol( attributes.url ) === 'file:'\n\t\t) {\n\t\t\trequestMediaImport( attributes.url, ( id, url ) => {\n\t\t\t\tif ( url ) {\n\t\t\t\t\tsetAttributes( { id, url } );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Make sure we mark any temporary images as failed if they failed while\n\t\t// the editor wasn't open.\n\t\tif (\n\t\t\tattributes.id &&\n\t\t\tattributes.url &&\n\t\t\tgetProtocol( attributes.url ) === 'file:'\n\t\t) {\n\t\t\tmediaUploadSync();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// This action will only exist if the user pressed the trash button on the block holder.\n\t\tif (\n\t\t\thasAction( 'blocks.onRemoveBlockCheckUpload' ) &&\n\t\t\tthis.state.uploadStatus === UPLOAD_STATE_UPLOADING\n\t\t) {\n\t\t\tdoAction(\n\t\t\t\t'blocks.onRemoveBlockCheckUpload',\n\t\t\t\tthis.props.attributes.id\n\t\t\t);\n\t\t}\n\t}\n\n\tcomponentDidUpdate( previousProps ) {\n\t\tconst {\n\t\t\timage,\n\t\t\tattributes,\n\t\t\tsetAttributes,\n\t\t\tfeaturedImageId,\n\t\t} = this.props;\n\t\tif ( ! previousProps.image && image ) {\n\t\t\tconst url =\n\t\t\t\tgetUrlForSlug( image, attributes?.sizeSlug ) ||\n\t\t\t\timage.source_url;\n\t\t\tsetAttributes( { url } );\n\t\t}\n\n\t\tconst { id } = attributes;\n\t\tconst { id: previousId } = previousProps.attributes;\n\n\t\t// The media changed and the previous media was set as the Featured Image,\n\t\t// we must keep track of the previous media's featured status to act on it\n\t\t// once the new media has a finalized ID.\n\t\tif (\n\t\t\t!! id &&\n\t\t\tid !== previousId &&\n\t\t\t!! featuredImageId &&\n\t\t\tfeaturedImageId === previousId\n\t\t) {\n\t\t\tthis.replacedFeaturedImage = true;\n\t\t}\n\n\t\t// The media changed and now has a finalized ID (e.g. upload completed), we\n\t\t// should attempt to replace the featured image if applicable.\n\t\tif (\n\t\t\tthis.replacedFeaturedImage &&\n\t\t\t!! image &&\n\t\t\tthis.canImageBeFeatured()\n\t\t) {\n\t\t\tthis.replacedFeaturedImage = false;\n\t\t\tsetFeaturedImage( id );\n\t\t}\n\t}\n\n\tstatic getDerivedStateFromProps( props, state ) {\n\t\t// Avoid a UI flicker in the toolbar by insuring that isCaptionSelected\n\t\t// is updated immediately any time the isSelected prop becomes false.\n\t\treturn {\n\t\t\tisCaptionSelected: props.isSelected && state.isCaptionSelected,\n\t\t};\n\t}\n\n\taccessibilityLabelCreator( caption ) {\n\t\t// Checks if caption is empty.\n\t\treturn ( typeof caption === 'string' && caption.trim().length === 0 ) ||\n\t\t\tcaption === undefined ||\n\t\t\tcaption === null\n\t\t\t? /* translators: accessibility text. Empty image caption. */\n\t\t\t 'Image caption. Empty'\n\t\t\t: sprintf(\n\t\t\t\t\t/* translators: accessibility text. %s: image caption. */\n\t\t\t\t\t__( 'Image caption. %s' ),\n\t\t\t\t\tcaption\n\t\t\t );\n\t}\n\n\tonImagePressed() {\n\t\tconst { attributes, image } = this.props;\n\n\t\tif ( this.state.uploadStatus === UPLOAD_STATE_UPLOADING ) {\n\t\t\trequestImageUploadCancelDialog( attributes.id );\n\t\t} else if (\n\t\t\tattributes.id &&\n\t\t\tgetProtocol( attributes.url ) === 'file:'\n\t\t) {\n\t\t\trequestImageFailedRetryDialog( attributes.id );\n\t\t} else if ( ! this.state.isCaptionSelected ) {\n\t\t\trequestImageFullscreenPreview(\n\t\t\t\tattributes.url,\n\t\t\t\timage && image.source_url\n\t\t\t);\n\t\t}\n\n\t\tthis.setState( {\n\t\t\tisCaptionSelected: false,\n\t\t} );\n\t}\n\n\tupdateMediaProgress( payload ) {\n\t\tconst { setAttributes } = this.props;\n\t\tif ( payload.mediaUrl ) {\n\t\t\tsetAttributes( { url: payload.mediaUrl } );\n\t\t}\n\n\t\tif ( this.state.uploadStatus !== UPLOAD_STATE_UPLOADING ) {\n\t\t\tthis.setState( { uploadStatus: UPLOAD_STATE_UPLOADING } );\n\t\t}\n\t}\n\n\tfinishMediaUploadWithSuccess( payload ) {\n\t\tconst { setAttributes } = this.props;\n\n\t\tsetAttributes( { url: payload.mediaUrl, id: payload.mediaServerId } );\n\t\tthis.setState( { uploadStatus: UPLOAD_STATE_SUCCEEDED } );\n\t}\n\n\tfinishMediaUploadWithFailure( payload ) {\n\t\tconst { setAttributes } = this.props;\n\n\t\tsetAttributes( { id: payload.mediaId } );\n\t\tthis.setState( { uploadStatus: UPLOAD_STATE_FAILED } );\n\t}\n\n\tmediaUploadStateReset() {\n\t\tconst { setAttributes } = this.props;\n\n\t\tsetAttributes( { id: null, url: null } );\n\t\tthis.setState( { uploadStatus: UPLOAD_STATE_IDLE } );\n\t}\n\n\tupdateImageURL( url ) {\n\t\tthis.props.setAttributes( {\n\t\t\turl,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t} );\n\t}\n\n\tupdateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = Object.values(\n\t\t\tWIDE_ALIGNMENTS.alignments\n\t\t).includes( nextAlign )\n\t\t\t? { width: undefined, height: undefined }\n\t\t\t: {};\n\t\tthis.props.setAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tonSetNewTab( value ) {\n\t\tconst updatedLinkTarget = getUpdatedLinkTargetSettings(\n\t\t\tvalue,\n\t\t\tthis.props.attributes\n\t\t);\n\t\tthis.props.setAttributes( updatedLinkTarget );\n\t}\n\n\tonSetSizeSlug( sizeSlug ) {\n\t\tconst { image, setAttributes } = this.props;\n\n\t\tconst url = getUrlForSlug( image, sizeSlug );\n\t\tif ( ! url ) {\n\t\t\treturn null;\n\t\t}\n\t\tsetAttributes( {\n\t\t\turl,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tsizeSlug,\n\t\t} );\n\t}\n\n\tonSelectMediaUploadOption( media ) {\n\t\tconst { imageDefaultSize } = this.props;\n\t\tconst { id, url, destination } = this.props.attributes;\n\t\tconst mediaAttributes = {\n\t\t\tid: media.id,\n\t\t\turl: media.url,\n\t\t\tcaption: media.caption,\n\t\t};\n\n\t\tlet additionalAttributes;\n\t\t// Reset the dimension attributes if changing to a different image.\n\t\tif ( ! media.id || media.id !== id ) {\n\t\t\tadditionalAttributes = {\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t\tsizeSlug: imageDefaultSize,\n\t\t\t};\n\t\t} else {\n\t\t\t// Keep the same url when selecting the same file, so \"Image Size\" option is not changed.\n\t\t\tadditionalAttributes = { url };\n\t\t}\n\n\t\tlet href;\n\t\tswitch ( destination ) {\n\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\thref = media.url;\n\t\t\t\tbreak;\n\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\thref = media.link;\n\t\t\t\tbreak;\n\t\t}\n\t\tmediaAttributes.href = href;\n\n\t\tthis.props.setAttributes( {\n\t\t\t...mediaAttributes,\n\t\t\t...additionalAttributes,\n\t\t} );\n\t}\n\n\tonSelectURL( newURL ) {\n\t\tconst {\n\t\t\tcreateErrorNotice,\n\t\t\timageDefaultSize,\n\t\t\tsetAttributes,\n\t\t} = this.props;\n\n\t\tif ( isURL( newURL ) ) {\n\t\t\tthis.setState( {\n\t\t\t\tisFetchingImage: true,\n\t\t\t} );\n\n\t\t\t// Use RN's Image.getSize to determine if URL is a valid image\n\t\t\tRNImage.getSize(\n\t\t\t\tnewURL,\n\t\t\t\t() => {\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\turl: newURL,\n\t\t\t\t\t\tid: undefined,\n\t\t\t\t\t\twidth: undefined,\n\t\t\t\t\t\theight: undefined,\n\t\t\t\t\t\tsizeSlug: imageDefaultSize,\n\t\t\t\t\t} );\n\t\t\t\t\tthis.setState( {\n\t\t\t\t\t\tisFetchingImage: false,\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tcreateErrorNotice( __( 'Image file not found.' ) );\n\t\t\t\t\tthis.setState( {\n\t\t\t\t\t\tisFetchingImage: false,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tcreateErrorNotice( __( 'Invalid URL.' ) );\n\t\t}\n\t}\n\n\tonFocusCaption() {\n\t\tif ( this.props.onFocus ) {\n\t\t\tthis.props.onFocus();\n\t\t}\n\t\tif ( ! this.state.isCaptionSelected ) {\n\t\t\tthis.setState( {\n\t\t\t\tisCaptionSelected: true,\n\t\t\t} );\n\t\t}\n\t}\n\n\tgetPlaceholderIcon() {\n\t\treturn (\n\t\t\t<Icon\n\t\t\t\ticon={ placeholderIcon }\n\t\t\t\t{ ...this.props.getStylesFromColorScheme(\n\t\t\t\t\tstyles.iconPlaceholder,\n\t\t\t\t\tstyles.iconPlaceholderDark\n\t\t\t\t) }\n\t\t\t/>\n\t\t);\n\t}\n\n\tshowLoadingIndicator() {\n\t\treturn (\n\t\t\t<View style={ styles.image__loading }>\n\t\t\t\t<ActivityIndicator animating />\n\t\t\t</View>\n\t\t);\n\t}\n\n\tgetWidth() {\n\t\tconst { attributes } = this.props;\n\t\tconst { align, width } = attributes;\n\n\t\treturn Object.values( WIDE_ALIGNMENTS.alignments ).includes( align )\n\t\t\t? '100%'\n\t\t\t: width;\n\t}\n\n\tsetMappedAttributes( { url: href, linkDestination, ...restAttributes } ) {\n\t\tconst { setAttributes } = this.props;\n\t\tif ( ! href && ! linkDestination ) {\n\t\t\tlinkDestination = LINK_DESTINATION_NONE;\n\t\t} else if ( ! linkDestination ) {\n\t\t\tlinkDestination = LINK_DESTINATION_CUSTOM;\n\t\t}\n\n\t\treturn href === undefined || href === this.props.attributes.href\n\t\t\t? setAttributes( restAttributes )\n\t\t\t: setAttributes( {\n\t\t\t\t\t...restAttributes,\n\t\t\t\t\tlinkDestination,\n\t\t\t\t\thref,\n\t\t\t } );\n\t}\n\n\tgetAltTextSettings() {\n\t\tconst {\n\t\t\tattributes: { alt },\n\t\t} = this.props;\n\n\t\tconst updateAlt = ( newAlt ) => {\n\t\t\tthis.props.setAttributes( { alt: newAlt } );\n\t\t};\n\n\t\treturn (\n\t\t\t<BottomSheetTextControl\n\t\t\t\tinitialValue={ alt }\n\t\t\t\tonChange={ updateAlt }\n\t\t\t\tplaceholder={ __( 'Add alt text' ) }\n\t\t\t\tlabel={ __( 'Alt Text' ) }\n\t\t\t\ticon={ textColor }\n\t\t\t\tfooterNote={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Describe the purpose of the image. Leave empty if the image is purely decorative.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<FooterMessageLink\n\t\t\t\t\t\t\thref={\n\t\t\t\t\t\t\t\t'https://www.w3.org/WAI/tutorials/images/decision-tree/'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue={ __( 'What is alt text?' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\t}\n\n\tonSizeChangeValue( newValue ) {\n\t\tthis.onSetSizeSlug( newValue );\n\t}\n\n\tonSetFeatured( mediaId ) {\n\t\tconst { closeSettingsBottomSheet } = this.props;\n\t\tsetFeaturedImage( mediaId );\n\t\tcloseSettingsBottomSheet();\n\t}\n\n\tgetFeaturedButtonPanel( isFeaturedImage ) {\n\t\tconst { attributes, getStylesFromColorScheme } = this.props;\n\n\t\tconst setFeaturedButtonStyle = getStylesFromColorScheme(\n\t\t\tstyles.setFeaturedButton,\n\t\t\tstyles.setFeaturedButtonDark\n\t\t);\n\n\t\tconst removeFeaturedButton = () => (\n\t\t\t<BottomSheet.Cell\n\t\t\t\tlabel={ __( 'Remove as Featured Image' ) }\n\t\t\t\tlabelStyle={ [\n\t\t\t\t\tsetFeaturedButtonStyle,\n\t\t\t\t\tstyles.removeFeaturedButton,\n\t\t\t\t] }\n\t\t\t\tcellContainerStyle={ styles.setFeaturedButtonCellContainer }\n\t\t\t\tseparatorType={ 'none' }\n\t\t\t\tonPress={ () =>\n\t\t\t\t\tthis.onSetFeatured( MEDIA_ID_NO_FEATURED_IMAGE_SET )\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\n\t\tconst setFeaturedButton = () => (\n\t\t\t<BottomSheet.Cell\n\t\t\t\tlabel={ __( 'Set as Featured Image' ) }\n\t\t\t\tlabelStyle={ setFeaturedButtonStyle }\n\t\t\t\tcellContainerStyle={ styles.setFeaturedButtonCellContainer }\n\t\t\t\tseparatorType={ 'none' }\n\t\t\t\tonPress={ () => this.onSetFeatured( attributes.id ) }\n\t\t\t/>\n\t\t);\n\n\t\treturn isFeaturedImage ? removeFeaturedButton() : setFeaturedButton();\n\t}\n\n\t/**\n\t * Featured images must be set to a successfully uploaded self-hosted image,\n\t * which has an ID.\n\t *\n\t * @return {boolean} Boolean indicating whether or not the current may be set as featured.\n\t */\n\tcanImageBeFeatured() {\n\t\tconst {\n\t\t\tattributes: { id },\n\t\t} = this.props;\n\t\treturn (\n\t\t\ttypeof id !== 'undefined' &&\n\t\t\tthis.state.uploadStatus !== UPLOAD_STATE_UPLOADING &&\n\t\t\tthis.state.uploadStatus !== UPLOAD_STATE_FAILED\n\t\t);\n\t}\n\n\tisGif( url ) {\n\t\treturn url.toLowerCase().includes( '.gif' );\n\t}\n\n\trender() {\n\t\tconst { isCaptionSelected, isFetchingImage } = this.state;\n\t\tconst {\n\t\t\tattributes,\n\t\t\tisSelected,\n\t\t\timage,\n\t\t\tclientId,\n\t\t\timageDefaultSize,\n\t\t\tcontext,\n\t\t\tfeaturedImageId,\n\t\t\twasBlockJustInserted,\n\t\t} = this.props;\n\t\tconst { align, url, alt, id, sizeSlug, className } = attributes;\n\t\tconst hasImageContext = context\n\t\t\t? Object.keys( context ).length > 0\n\t\t\t: false;\n\n\t\tconst imageSizes = Array.isArray( this.props.imageSizes )\n\t\t\t? this.props.imageSizes\n\t\t\t: [];\n\t\t// Only map available image sizes for the user to choose.\n\t\tconst sizeOptions = imageSizes\n\t\t\t.filter( ( { slug } ) => getUrlForSlug( image, slug ) )\n\t\t\t.map( ( { name, slug } ) => ( { value: slug, label: name } ) );\n\n\t\tlet selectedSizeOption = sizeSlug || imageDefaultSize;\n\t\tlet sizeOptionsValid = sizeOptions.find(\n\t\t\t( option ) => option.value === selectedSizeOption\n\t\t);\n\n\t\tif ( ! sizeOptionsValid ) {\n\t\t\t// Default to 'full' size if the default large size is not available.\n\t\t\tsizeOptionsValid = sizeOptions.find(\n\t\t\t\t( option ) => option.value === 'full'\n\t\t\t);\n\t\t\tselectedSizeOption = 'full';\n\t\t}\n\n\t\tconst canImageBeFeatured = this.canImageBeFeatured();\n\t\tconst isFeaturedImage =\n\t\t\tcanImageBeFeatured && featuredImageId === attributes.id;\n\n\t\tconst getToolbarEditButton = ( open ) => (\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ttitle={ __( 'Edit image' ) }\n\t\t\t\t\t\ticon={ replace }\n\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t/>\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<BlockAlignmentToolbar\n\t\t\t\t\tvalue={ align }\n\t\t\t\t\tonChange={ this.updateAlignment }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t);\n\n\t\tconst getInspectorControls = () => (\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) } />\n\t\t\t\t<PanelBody style={ styles.panelBody }>\n\t\t\t\t\t<BlockStyles clientId={ clientId } url={ url } />\n\t\t\t\t</PanelBody>\n\t\t\t\t<PanelBody>\n\t\t\t\t\t{ image && sizeOptionsValid && (\n\t\t\t\t\t\t<BottomSheetSelectControl\n\t\t\t\t\t\t\ticon={ fullscreen }\n\t\t\t\t\t\t\tlabel={ __( 'Size' ) }\n\t\t\t\t\t\t\toptions={ sizeOptions }\n\t\t\t\t\t\t\tonChange={ this.onSizeChangeValue }\n\t\t\t\t\t\t\tvalue={ selectedSizeOption }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ this.getAltTextSettings() }\n\t\t\t\t</PanelBody>\n\t\t\t\t<LinkSettings\n\t\t\t\t\tattributes={ this.props.attributes }\n\t\t\t\t\timage={ this.props.image }\n\t\t\t\t\tisLinkSheetVisible={ this.state.isLinkSheetVisible }\n\t\t\t\t\tsetMappedAttributes={ this.setMappedAttributes }\n\t\t\t\t/>\n\t\t\t\t<PanelBody\n\t\t\t\t\ttitle={ __( 'Featured Image' ) }\n\t\t\t\t\ttitleStyle={ styles.featuredImagePanelTitle }\n\t\t\t\t>\n\t\t\t\t\t{ canImageBeFeatured &&\n\t\t\t\t\t\tthis.getFeaturedButtonPanel( isFeaturedImage ) }\n\t\t\t\t\t<FooterMessageControl\n\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t'Changes to featured image will not be affected by the undo/redo buttons.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tcellContainerStyle={\n\t\t\t\t\t\t\tstyles.setFeaturedButtonCellContainer\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t);\n\n\t\tif ( ! url ) {\n\t\t\treturn (\n\t\t\t\t<View style={ styles.content }>\n\t\t\t\t\t{ isFetchingImage && this.showLoadingIndicator() }\n\t\t\t\t\t<MediaPlaceholder\n\t\t\t\t\t\tallowedTypes={ [ MEDIA_TYPE_IMAGE ] }\n\t\t\t\t\t\tonSelect={ this.onSelectMediaUploadOption }\n\t\t\t\t\t\tonSelectURL={ this.onSelectURL }\n\t\t\t\t\t\ticon={ this.getPlaceholderIcon() }\n\t\t\t\t\t\tonFocus={ this.props.onFocus }\n\t\t\t\t\t\tautoOpenMediaUpload={\n\t\t\t\t\t\t\tisSelected && wasBlockJustInserted\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\tconst alignToFlex = {\n\t\t\tleft: 'flex-start',\n\t\t\tcenter: 'center',\n\t\t\tright: 'flex-end',\n\t\t\tfull: 'center',\n\t\t\twide: 'center',\n\t\t};\n\n\t\tconst additionalImageProps = {\n\t\t\theight: '100%',\n\t\t\tresizeMode: context?.imageCrop ? 'cover' : 'contain',\n\t\t};\n\n\t\tconst imageContainerStyles = [\n\t\t\tcontext?.fixedHeight && styles.fixedHeight,\n\t\t];\n\n\t\tconst isGif = this.isGif( url );\n\t\tconst badgeLabelShown = isFeaturedImage || isGif;\n\t\tlet badgeLabelText = '';\n\t\tif ( isFeaturedImage ) {\n\t\t\tbadgeLabelText = __( 'Featured' );\n\t\t} else if ( isGif ) {\n\t\t\tbadgeLabelText = __( 'GIF' );\n\t\t}\n\n\t\tconst getImageComponent = ( openMediaOptions, getMediaOptions ) => (\n\t\t\t<Badge label={ badgeLabelText } show={ badgeLabelShown }>\n\t\t\t\t<TouchableWithoutFeedback\n\t\t\t\t\taccessible={ ! isSelected }\n\t\t\t\t\tonPress={ this.onImagePressed }\n\t\t\t\t\tdisabled={ ! isSelected }\n\t\t\t\t>\n\t\t\t\t\t<View style={ styles.content }>\n\t\t\t\t\t\t{ isSelected && getInspectorControls() }\n\t\t\t\t\t\t{ isSelected && getMediaOptions() }\n\t\t\t\t\t\t{ ! this.state.isCaptionSelected &&\n\t\t\t\t\t\t\tgetToolbarEditButton( openMediaOptions ) }\n\t\t\t\t\t\t<MediaUploadProgress\n\t\t\t\t\t\t\tcoverUrl={ url }\n\t\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\t\tonUpdateMediaProgress={ this.updateMediaProgress }\n\t\t\t\t\t\t\tonFinishMediaUploadWithSuccess={\n\t\t\t\t\t\t\t\tthis.finishMediaUploadWithSuccess\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonFinishMediaUploadWithFailure={\n\t\t\t\t\t\t\t\tthis.finishMediaUploadWithFailure\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonMediaUploadStateReset={\n\t\t\t\t\t\t\t\tthis.mediaUploadStateReset\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trenderContent={ ( {\n\t\t\t\t\t\t\t\tisUploadInProgress,\n\t\t\t\t\t\t\t\tisUploadFailed,\n\t\t\t\t\t\t\t\tretryMessage,\n\t\t\t\t\t\t\t} ) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<View style={ imageContainerStyles }>\n\t\t\t\t\t\t\t\t\t\t{ isFetchingImage &&\n\t\t\t\t\t\t\t\t\t\t\tthis.showLoadingIndicator() }\n\t\t\t\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\t\t\t\talign={\n\t\t\t\t\t\t\t\t\t\t\t\talign && alignToFlex[ align ]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\talt={ alt }\n\t\t\t\t\t\t\t\t\t\t\tisSelected={\n\t\t\t\t\t\t\t\t\t\t\t\tisSelected &&\n\t\t\t\t\t\t\t\t\t\t\t\t! isCaptionSelected\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tisUploadFailed={ isUploadFailed }\n\t\t\t\t\t\t\t\t\t\t\tisUploadInProgress={\n\t\t\t\t\t\t\t\t\t\t\t\tisUploadInProgress\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonSelectMediaUploadOption={\n\t\t\t\t\t\t\t\t\t\t\t\tthis.onSelectMediaUploadOption\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\topenMediaOptions={\n\t\t\t\t\t\t\t\t\t\t\t\topenMediaOptions\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tretryMessage={ retryMessage }\n\t\t\t\t\t\t\t\t\t\t\turl={ url }\n\t\t\t\t\t\t\t\t\t\t\tshapeStyle={\n\t\t\t\t\t\t\t\t\t\t\t\tstyles[ className ] || className\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\twidth={ this.getWidth() }\n\t\t\t\t\t\t\t\t\t\t\t{ ...( hasImageContext\n\t\t\t\t\t\t\t\t\t\t\t\t? additionalImageProps\n\t\t\t\t\t\t\t\t\t\t\t\t: {} ) }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</View>\n\t\t\t\t</TouchableWithoutFeedback>\n\t\t\t\t<BlockCaption\n\t\t\t\t\tclientId={ this.props.clientId }\n\t\t\t\t\tisSelected={ this.state.isCaptionSelected }\n\t\t\t\t\taccessible\n\t\t\t\t\taccessibilityLabelCreator={ this.accessibilityLabelCreator }\n\t\t\t\t\tonFocus={ this.onFocusCaption }\n\t\t\t\t\tonBlur={ this.props.onBlur } // Always assign onBlur as props.\n\t\t\t\t\tinsertBlocksAfter={ this.props.insertBlocksAfter }\n\t\t\t\t/>\n\t\t\t</Badge>\n\t\t);\n\n\t\treturn (\n\t\t\t<MediaUpload\n\t\t\t\tallowedTypes={ [ MEDIA_TYPE_IMAGE ] }\n\t\t\t\tisReplacingMedia={ true }\n\t\t\t\tonSelect={ this.onSelectMediaUploadOption }\n\t\t\t\tonSelectURL={ this.onSelectURL }\n\t\t\t\trender={ ( { open, getMediaOptions } ) => {\n\t\t\t\t\treturn getImageComponent( open, getMediaOptions );\n\t\t\t\t} }\n\t\t\t/>\n\t\t);\n\t}\n}\n\nexport default compose( [\n\twithSelect( ( select, props ) => {\n\t\tconst { getMedia } = select( coreStore );\n\t\tconst { getSettings, wasBlockJustInserted } = select(\n\t\t\tblockEditorStore\n\t\t);\n\t\tconst { getEditedPostAttribute } = select( 'core/editor' );\n\t\tconst {\n\t\t\tattributes: { id, url },\n\t\t\tisSelected,\n\t\t\tclientId,\n\t\t} = props;\n\t\tconst { imageSizes, imageDefaultSize } = getSettings();\n\t\tconst isNotFileUrl = id && getProtocol( url ) !== 'file:';\n\t\tconst featuredImageId = getEditedPostAttribute( 'featured_media' );\n\n\t\tconst shouldGetMedia =\n\t\t\t( isSelected && isNotFileUrl ) ||\n\t\t\t// Edge case to update the image after uploading if the block gets unselected\n\t\t\t// Check if it's the original image and not the resized one with queryparams.\n\t\t\t( ! isSelected &&\n\t\t\t\tisNotFileUrl &&\n\t\t\t\turl &&\n\t\t\t\t! hasQueryArg( url, 'w' ) );\n\n\t\treturn {\n\t\t\timage: shouldGetMedia ? getMedia( id ) : null,\n\t\t\timageSizes,\n\t\t\timageDefaultSize,\n\t\t\tfeaturedImageId,\n\t\t\twasBlockJustInserted: wasBlockJustInserted(\n\t\t\t\tclientId,\n\t\t\t\t'inserter_menu'\n\t\t\t),\n\t\t};\n\t} ),\n\twithDispatch( ( dispatch ) => {\n\t\tconst { createErrorNotice } = dispatch( noticesStore );\n\n\t\treturn {\n\t\t\tcreateErrorNotice,\n\t\t\tcloseSettingsBottomSheet() {\n\t\t\t\tdispatch( editPostStore ).closeGeneralSidebar();\n\t\t\t},\n\t\t};\n\t} ),\n\twithPreferredColorScheme,\n] )( ImageEdit );\n"]}
@@ -81,14 +81,12 @@ function Image(_ref) {
81
81
  isSelected,
82
82
  insertBlocksAfter,
83
83
  onReplace,
84
- onCloseModal,
85
84
  onSelectImage,
86
85
  onSelectURL,
87
86
  onUploadError,
88
87
  containerRef,
89
88
  context,
90
- clientId,
91
- onImageLoadError
89
+ clientId
92
90
  } = _ref;
93
91
  const imageRef = (0, _element.useRef)();
94
92
  const captionRef = (0, _element.useRef)();
@@ -221,13 +219,10 @@ function Image(_ref) {
221
219
  url
222
220
  }
223
221
  });
224
- const shouldReplace = undefined !== embedBlock;
225
222
 
226
- if (shouldReplace) {
223
+ if (undefined !== embedBlock) {
227
224
  onReplace(embedBlock);
228
225
  }
229
-
230
- onImageLoadError(shouldReplace);
231
226
  }
232
227
 
233
228
  function onSetHref(props) {
@@ -306,10 +301,6 @@ function Image(_ref) {
306
301
  if (!isSelected) {
307
302
  setIsEditingImage(false);
308
303
  }
309
-
310
- if (isSelected && (0, _edit.isMediaDestroyed)(id)) {
311
- onImageLoadError();
312
- }
313
304
  }, [isSelected]);
314
305
  const canEditImage = id && naturalWidth && naturalHeight && imageEditing;
315
306
  const allowCrop = !multiImageSelection && canEditImage && !isEditingImage;
@@ -353,8 +344,7 @@ function Image(_ref) {
353
344
  accept: "image/*",
354
345
  onSelect: onSelectImage,
355
346
  onSelectURL: onSelectURL,
356
- onError: onUploadError,
357
- onCloseModal: onCloseModal
347
+ onError: onUploadError
358
348
  })), (0, _element.createElement)(_blockEditor.InspectorControls, null, (0, _element.createElement)(_components.PanelBody, {
359
349
  title: (0, _i18n.__)('Settings')
360
350
  }, !multiImageSelection && (0, _element.createElement)(_components.TextareaControl, {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/image/image.js"],"names":["Image","temporaryURL","attributes","url","alt","caption","align","id","href","rel","linkClass","linkDestination","title","width","height","linkTarget","sizeSlug","setAttributes","isSelected","insertBlocksAfter","onReplace","onCloseModal","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","onImageLoadError","imageRef","captionRef","prevUrl","allowResize","getBlock","blockEditorStore","image","multiImageSelection","select","getMedia","coreStore","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","createErrorNotice","createSuccessNotice","noticesStore","isLargeViewport","isWideAligned","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","isResizable","imageSizeOptions","slug","name","value","label","window","fetch","then","response","blob","catch","current","focus","naturalWidth","naturalHeight","undefined","complete","onResizeStart","onResizeStop","onImageError","embedBlock","shouldReplace","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","type","allowedTypes","ALLOWED_MEDIA_TYPES","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","includes","canEditImage","allowCrop","switchToCover","controls","source_url","link","crop","upload","overlayText","filename","defaultedAlt","event","target","imageWidthWithinContainer","imageHeightWithinContainer","exceedMaxWidth","ratio","currentWidth","currentHeight","minWidth","MIN_SIZE","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","top","right","bottom","left","direction","elt","delta","parseInt","imageAttributes","RichText","isEmpty"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get, filter, map, pick, includes } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tPanelBody,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tTextControl,\n\tToolbarButton,\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__experimentalImageSizeControl as ImageSizeControl,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalImageEditingProvider as ImageEditingProvider,\n} from '@wordpress/block-editor';\nimport { useEffect, useMemo, useState, useRef } from '@wordpress/element';\nimport { __, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport { crop, overlayText, upload } 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 { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage, isMediaDestroyed } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes: {\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\tlinkTarget,\n\t\tsizeSlug,\n\t},\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonCloseModal,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n\tonImageLoadError,\n} ) {\n\tconst imageRef = useRef();\n\tconst captionRef = useRef();\n\tconst prevUrl = usePrevious( url );\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 } = select(\n\t\t\t\tblockEditorStore\n\t\t\t);\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 {\n\t\tcanInsertCover,\n\t\timageEditing,\n\t\timageSizes,\n\t\tmaxWidth,\n\t\tmediaUpload,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetSettings,\n\t\t\t\tcanInsertBlockType,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\tconst settings = pick( getSettings(), [\n\t\t\t\t'imageEditing',\n\t\t\t\t'imageSizes',\n\t\t\t\t'maxWidth',\n\t\t\t\t'mediaUpload',\n\t\t\t] );\n\n\t\t\treturn {\n\t\t\t\t...settings,\n\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t'core/cover',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } = useDispatch(\n\t\tnoticesStore\n\t);\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = includes( [ 'wide', 'full' ], 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 isResizable = allowResize && ! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = map(\n\t\tfilter( imageSizes, ( { slug } ) =>\n\t\t\tget( image, [ 'media_details', 'sizes', slug, 'source_url' ] )\n\t\t),\n\t\t( { name, slug } ) => ( { value: slug, label: name } )\n\t);\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 ( ! isExternalImage( id, url ) || ! isSelected || externalBlob ) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow\n\t\t\t.fetch( 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 ] );\n\n\t// Focus the caption after inserting an image from the placeholder. This is\n\t// done to preserve the behaviour of focussing the first tabbable element\n\t// when a block is mounted. Previously, the image block would remount when\n\t// the placeholder is removed. Maybe this behaviour could be removed.\n\tuseEffect( () => {\n\t\tif ( url && ! prevUrl && isSelected ) {\n\t\t\tcaptionRef.current.focus();\n\t\t}\n\t}, [ url, prevUrl ] );\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// witdth 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\t\tconst shouldReplace = undefined !== embedBlock;\n\n\t\tif ( shouldReplace ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\n\t\tonImageLoadError( shouldReplace );\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 = get( image, [\n\t\t\t'media_details',\n\t\t\t'sizes',\n\t\t\tnewSizeSlug,\n\t\t\t'source_url',\n\t\t] );\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\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? { width: undefined, height: undefined }\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}\n\t\tif ( isSelected && isMediaDestroyed( id ) ) {\n\t\t\tonImageLoadError();\n\t\t}\n\t}, [ isSelected ] );\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\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\tvalue={ align }\n\t\t\t\t\tonChange={ updateAlignment }\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{ externalBlob && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\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\tonCloseModal={ onCloseModal }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\tlabel={ __( 'Alt text (alternative text)' ) }\n\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t<>\n\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{ __(\n\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) }\n\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t'Leave empty if the image is purely 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}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t<ImageSizeControl\n\t\t\t\t\t\tonChangeImage={ updateImage }\n\t\t\t\t\t\tonChange={ ( value ) => setAttributes( value ) }\n\t\t\t\t\t\tslug={ sizeSlug }\n\t\t\t\t\t\twidth={ width }\n\t\t\t\t\t\theight={ height }\n\t\t\t\t\t\timageSizeOptions={ imageSizeOptions }\n\t\t\t\t\t\tisResizable={ isResizable }\n\t\t\t\t\t\timageWidth={ naturalWidth }\n\t\t\t\t\t\timageHeight={ naturalHeight }\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls __experimentalGroup=\"advanced\">\n\t\t\t\t<TextControl\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\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/>\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\tlet imageWidthWithinContainer;\n\tlet imageHeightWithinContainer;\n\n\tif ( clientWidth && naturalWidth && naturalHeight ) {\n\t\tconst exceedMaxWidth = naturalWidth > clientWidth;\n\t\tconst ratio = naturalHeight / naturalWidth;\n\t\timageWidthWithinContainer = exceedMaxWidth ? clientWidth : naturalWidth;\n\t\timageHeightWithinContainer = exceedMaxWidth\n\t\t\t? clientWidth * ratio\n\t\t\t: naturalHeight;\n\t}\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\turl={ url }\n\t\t\t\twidth={ width }\n\t\t\t\theight={ height }\n\t\t\t\tclientWidth={ clientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable || ! imageWidthWithinContainer ) {\n\t\timg = <div style={ { width, height } }>{ img }</div>;\n\t} else {\n\t\tconst currentWidth = width || imageWidthWithinContainer;\n\t\tconst currentHeight = height || imageHeightWithinContainer;\n\n\t\tconst ratio = naturalWidth / naturalHeight;\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\tsize={ {\n\t\t\t\t\twidth: width ?? 'auto',\n\t\t\t\t\theight: height ?? '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\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, delta ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: parseInt( currentWidth + delta.width, 10 ),\n\t\t\t\t\t\theight: parseInt( currentHeight + delta.height, 10 ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ImageEditingProvider\n\t\t\tid={ id }\n\t\t\turl={ url }\n\t\t\tnaturalWidth={ naturalWidth }\n\t\t\tnaturalHeight={ naturalHeight }\n\t\t\tclientWidth={ clientWidth }\n\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\tsetAttributes( imageAttributes )\n\t\t\t}\n\t\t\tisEditing={ isEditingImage }\n\t\t\tonFinishEditing={ () => setIsEditingImage( false ) }\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{ ( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t<RichText\n\t\t\t\t\tref={ captionRef }\n\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\tvalue={ caption }\n\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t}\n\t\t\t\t\tinlineToolbar\n\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t) }\n\t\t</ImageEditingProvider>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/image/image.js"],"names":["Image","temporaryURL","attributes","url","alt","caption","align","id","href","rel","linkClass","linkDestination","title","width","height","linkTarget","sizeSlug","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","imageRef","captionRef","prevUrl","allowResize","getBlock","blockEditorStore","image","multiImageSelection","select","getMedia","coreStore","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","createErrorNotice","createSuccessNotice","noticesStore","isLargeViewport","isWideAligned","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","isResizable","imageSizeOptions","slug","name","value","label","window","fetch","then","response","blob","catch","current","focus","naturalWidth","naturalHeight","undefined","complete","onResizeStart","onResizeStop","onImageError","embedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","type","allowedTypes","ALLOWED_MEDIA_TYPES","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","includes","canEditImage","allowCrop","switchToCover","controls","source_url","link","crop","upload","overlayText","filename","defaultedAlt","event","target","imageWidthWithinContainer","imageHeightWithinContainer","exceedMaxWidth","ratio","currentWidth","currentHeight","minWidth","MIN_SIZE","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","top","right","bottom","left","direction","elt","delta","parseInt","imageAttributes","RichText","isEmpty"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get, filter, map, pick, includes } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tPanelBody,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tTextControl,\n\tToolbarButton,\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__experimentalImageSizeControl as ImageSizeControl,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalImageEditingProvider as ImageEditingProvider,\n} from '@wordpress/block-editor';\nimport { useEffect, useMemo, useState, useRef } from '@wordpress/element';\nimport { __, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport { crop, overlayText, upload } 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 { 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';\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes: {\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\tlinkTarget,\n\t\tsizeSlug,\n\t},\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n} ) {\n\tconst imageRef = useRef();\n\tconst captionRef = useRef();\n\tconst prevUrl = usePrevious( url );\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 } = select(\n\t\t\t\tblockEditorStore\n\t\t\t);\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 {\n\t\tcanInsertCover,\n\t\timageEditing,\n\t\timageSizes,\n\t\tmaxWidth,\n\t\tmediaUpload,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetSettings,\n\t\t\t\tcanInsertBlockType,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\tconst settings = pick( getSettings(), [\n\t\t\t\t'imageEditing',\n\t\t\t\t'imageSizes',\n\t\t\t\t'maxWidth',\n\t\t\t\t'mediaUpload',\n\t\t\t] );\n\n\t\t\treturn {\n\t\t\t\t...settings,\n\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t'core/cover',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } = useDispatch(\n\t\tnoticesStore\n\t);\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = includes( [ 'wide', 'full' ], 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 isResizable = allowResize && ! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = map(\n\t\tfilter( imageSizes, ( { slug } ) =>\n\t\t\tget( image, [ 'media_details', 'sizes', slug, 'source_url' ] )\n\t\t),\n\t\t( { name, slug } ) => ( { value: slug, label: name } )\n\t);\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 ( ! isExternalImage( id, url ) || ! isSelected || externalBlob ) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow\n\t\t\t.fetch( 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 ] );\n\n\t// Focus the caption after inserting an image from the placeholder. This is\n\t// done to preserve the behaviour of focussing the first tabbable element\n\t// when a block is mounted. Previously, the image block would remount when\n\t// the placeholder is removed. Maybe this behaviour could be removed.\n\tuseEffect( () => {\n\t\tif ( url && ! prevUrl && isSelected ) {\n\t\t\tcaptionRef.current.focus();\n\t\t}\n\t}, [ url, prevUrl ] );\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// witdth 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 = get( image, [\n\t\t\t'media_details',\n\t\t\t'sizes',\n\t\t\tnewSizeSlug,\n\t\t\t'source_url',\n\t\t] );\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\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? { width: undefined, height: undefined }\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}\n\t}, [ isSelected ] );\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\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\tvalue={ align }\n\t\t\t\t\tonChange={ updateAlignment }\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{ externalBlob && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\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<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\tlabel={ __( 'Alt text (alternative text)' ) }\n\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t<>\n\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{ __(\n\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) }\n\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t'Leave empty if the image is purely 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}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t<ImageSizeControl\n\t\t\t\t\t\tonChangeImage={ updateImage }\n\t\t\t\t\t\tonChange={ ( value ) => setAttributes( value ) }\n\t\t\t\t\t\tslug={ sizeSlug }\n\t\t\t\t\t\twidth={ width }\n\t\t\t\t\t\theight={ height }\n\t\t\t\t\t\timageSizeOptions={ imageSizeOptions }\n\t\t\t\t\t\tisResizable={ isResizable }\n\t\t\t\t\t\timageWidth={ naturalWidth }\n\t\t\t\t\t\timageHeight={ naturalHeight }\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls __experimentalGroup=\"advanced\">\n\t\t\t\t<TextControl\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\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/>\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\tlet imageWidthWithinContainer;\n\tlet imageHeightWithinContainer;\n\n\tif ( clientWidth && naturalWidth && naturalHeight ) {\n\t\tconst exceedMaxWidth = naturalWidth > clientWidth;\n\t\tconst ratio = naturalHeight / naturalWidth;\n\t\timageWidthWithinContainer = exceedMaxWidth ? clientWidth : naturalWidth;\n\t\timageHeightWithinContainer = exceedMaxWidth\n\t\t\t? clientWidth * ratio\n\t\t\t: naturalHeight;\n\t}\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\turl={ url }\n\t\t\t\twidth={ width }\n\t\t\t\theight={ height }\n\t\t\t\tclientWidth={ clientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable || ! imageWidthWithinContainer ) {\n\t\timg = <div style={ { width, height } }>{ img }</div>;\n\t} else {\n\t\tconst currentWidth = width || imageWidthWithinContainer;\n\t\tconst currentHeight = height || imageHeightWithinContainer;\n\n\t\tconst ratio = naturalWidth / naturalHeight;\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\tsize={ {\n\t\t\t\t\twidth: width ?? 'auto',\n\t\t\t\t\theight: height ?? '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\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, delta ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: parseInt( currentWidth + delta.width, 10 ),\n\t\t\t\t\t\theight: parseInt( currentHeight + delta.height, 10 ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ImageEditingProvider\n\t\t\tid={ id }\n\t\t\turl={ url }\n\t\t\tnaturalWidth={ naturalWidth }\n\t\t\tnaturalHeight={ naturalHeight }\n\t\t\tclientWidth={ clientWidth }\n\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\tsetAttributes( imageAttributes )\n\t\t\t}\n\t\t\tisEditing={ isEditingImage }\n\t\t\tonFinishEditing={ () => setIsEditingImage( false ) }\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{ ( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t<RichText\n\t\t\t\t\tref={ captionRef }\n\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\tvalue={ caption }\n\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t}\n\t\t\t\t\tinlineToolbar\n\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t) }\n\t\t</ImageEditingProvider>\n\t);\n}\n"]}
@@ -17,14 +17,28 @@ var _blocks = require("@wordpress/blocks");
17
17
  * WordPress dependencies
18
18
  */
19
19
  function useSplit(clientId) {
20
+ // We can not rely on the isAfterOriginal parameter of the callback,
21
+ // because if the value after the split is empty isAfterOriginal is false
22
+ // while the value is in fact after the original. So to avoid that issue we use
23
+ // a flag where the first execution of the callback is false (it is the before value)
24
+ // and the second execution is true, it is the after value.
25
+ const isAfter = (0, _element.useRef)(false);
20
26
  const {
21
27
  getBlock
22
28
  } = (0, _data.useSelect)(_blockEditor.store);
23
- return (0, _element.useCallback)((value, isAfterOriginal) => {
29
+ return (0, _element.useCallback)(value => {
24
30
  const block = getBlock(clientId);
25
- return (0, _blocks.cloneBlock)(block, {
31
+
32
+ if (isAfter.current) {
33
+ return (0, _blocks.cloneBlock)(block, {
34
+ content: value
35
+ });
36
+ }
37
+
38
+ isAfter.current = true;
39
+ return (0, _blocks.createBlock)(block.name, { ...block.attributes,
26
40
  content: value
27
- }, isAfterOriginal ? [] : block.innerBlocks);
41
+ });
28
42
  }, [clientId, getBlock]);
29
43
  }
30
44
  //# sourceMappingURL=use-split.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/list-item/hooks/use-split.js"],"names":["useSplit","clientId","getBlock","blockEditorStore","value","isAfterOriginal","block","content","innerBlocks"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AANA;AACA;AACA;AAMe,SAASA,QAAT,CAAmBC,QAAnB,EAA8B;AAC5C,QAAM;AAAEC,IAAAA;AAAF,MAAe,qBAAWC,kBAAX,CAArB;AACA,SAAO,0BACN,CAAEC,KAAF,EAASC,eAAT,KAA8B;AAC7B,UAAMC,KAAK,GAAGJ,QAAQ,CAAED,QAAF,CAAtB;AACA,WAAO,wBACNK,KADM,EAEN;AACCC,MAAAA,OAAO,EAAEH;AADV,KAFM,EAKNC,eAAe,GAAG,EAAH,GAAQC,KAAK,CAACE,WALvB,CAAP;AAOA,GAVK,EAWN,CAAEP,QAAF,EAAYC,QAAZ,CAXM,CAAP;AAaA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { cloneBlock } from '@wordpress/blocks';\n\nexport default function useSplit( clientId ) {\n\tconst { getBlock } = useSelect( blockEditorStore );\n\treturn useCallback(\n\t\t( value, isAfterOriginal ) => {\n\t\t\tconst block = getBlock( clientId );\n\t\t\treturn cloneBlock(\n\t\t\t\tblock,\n\t\t\t\t{\n\t\t\t\t\tcontent: value,\n\t\t\t\t},\n\t\t\t\tisAfterOriginal ? [] : block.innerBlocks\n\t\t\t);\n\t\t},\n\t\t[ clientId, getBlock ]\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/list-item/hooks/use-split.js"],"names":["useSplit","clientId","isAfter","getBlock","blockEditorStore","value","block","current","content","name","attributes"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AANA;AACA;AACA;AAMe,SAASA,QAAT,CAAmBC,QAAnB,EAA8B;AAC5C;AACA;AACA;AACA;AACA;AACA,QAAMC,OAAO,GAAG,qBAAQ,KAAR,CAAhB;AACA,QAAM;AAAEC,IAAAA;AAAF,MAAe,qBAAWC,kBAAX,CAArB;AACA,SAAO,0BACJC,KAAF,IAAa;AACZ,UAAMC,KAAK,GAAGH,QAAQ,CAAEF,QAAF,CAAtB;;AACA,QAAKC,OAAO,CAACK,OAAb,EAAuB;AACtB,aAAO,wBAAYD,KAAZ,EAAmB;AACzBE,QAAAA,OAAO,EAAEH;AADgB,OAAnB,CAAP;AAGA;;AACDH,IAAAA,OAAO,CAACK,OAAR,GAAkB,IAAlB;AACA,WAAO,yBAAaD,KAAK,CAACG,IAAnB,EAAyB,EAC/B,GAAGH,KAAK,CAACI,UADsB;AAE/BF,MAAAA,OAAO,EAAEH;AAFsB,KAAzB,CAAP;AAIA,GAbK,EAcN,CAAEJ,QAAF,EAAYE,QAAZ,CAdM,CAAP;AAgBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback, useRef } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { cloneBlock, createBlock } from '@wordpress/blocks';\n\nexport default function useSplit( clientId ) {\n\t// We can not rely on the isAfterOriginal parameter of the callback,\n\t// because if the value after the split is empty isAfterOriginal is false\n\t// while the value is in fact after the original. So to avoid that issue we use\n\t// a flag where the first execution of the callback is false (it is the before value)\n\t// and the second execution is true, it is the after value.\n\tconst isAfter = useRef( false );\n\tconst { getBlock } = useSelect( blockEditorStore );\n\treturn useCallback(\n\t\t( value ) => {\n\t\t\tconst block = getBlock( clientId );\n\t\t\tif ( isAfter.current ) {\n\t\t\t\treturn cloneBlock( block, {\n\t\t\t\t\tcontent: value,\n\t\t\t\t} );\n\t\t\t}\n\t\t\tisAfter.current = true;\n\t\t\treturn createBlock( block.name, {\n\t\t\t\t...block.attributes,\n\t\t\t\tcontent: value,\n\t\t\t} );\n\t\t},\n\t\t[ clientId, getBlock ]\n\t);\n}\n"]}
@@ -34,6 +34,8 @@ var _icons = require("@wordpress/icons");
34
34
 
35
35
  var _coreData = require("@wordpress/core-data");
36
36
 
37
+ var _htmlEntities = require("@wordpress/html-entities");
38
+
37
39
  /**
38
40
  * External dependencies
39
41
  */
@@ -308,7 +310,16 @@ const updateNavigationLinkBlockAttributes = function () {
308
310
  } = updatedValue;
309
311
  const normalizedTitle = title.replace(/http(s?):\/\//gi, '');
310
312
  const normalizedURL = url.replace(/http(s?):\/\//gi, '');
311
- const escapeTitle = title !== '' && normalizedTitle !== normalizedURL && originalLabel !== title;
313
+ const escapeTitle = title !== '' && normalizedTitle !== normalizedURL && originalLabel !== title; // Unfortunately this causes the escaping model to be inverted.
314
+ // The escaped content is stored in the block attributes (and ultimately in the database),
315
+ // and then the raw data is "recovered" when outputting into the DOM.
316
+ // It would be preferable to store the **raw** data in the block attributes and escape it in JS.
317
+ // Why? Because there isn't one way to escape data. Depending on the context, you need to do
318
+ // different transforms. It doesn't make sense to me to choose one of them for the purposes of storage.
319
+ // See also:
320
+ // - https://github.com/WordPress/gutenberg/pull/41063
321
+ // - https://github.com/WordPress/gutenberg/pull/18617.
322
+
312
323
  const label = escapeTitle ? (0, _lodash.escape)(title) : originalLabel || (0, _lodash.escape)(normalizedURL); // In https://github.com/WordPress/gutenberg/pull/24670 we decided to use "tag" in favor of "post_tag"
313
324
 
314
325
  const type = newType === 'post_tag' ? 'tag' : newType.replace('-', '_');
@@ -647,7 +658,17 @@ function NavigationLinkEdit(_ref2) {
647
658
  return {
648
659
  id: page.id,
649
660
  type: postType,
650
- title: page.title.rendered,
661
+ // Make `title` property consistent with that in `fetchLinkSuggestions` where the `rendered` title (containing HTML entities)
662
+ // is also being decoded. By being consistent in both locations we avoid having to branch in the rendering output code.
663
+ // Ideally in the future we will update both APIs to utilise the "raw" form of the title which is better suited to edit contexts.
664
+ // e.g.
665
+ // - title.raw = "Yes & No"
666
+ // - title.rendered = "Yes &#038; No"
667
+ // - decodeEntities( title.rendered ) = "Yes & No"
668
+ // See:
669
+ // - https://github.com/WordPress/gutenberg/pull/41063
670
+ // - https://github.com/WordPress/gutenberg/blob/a1e1fdc0e6278457e9f4fc0b31ac6d2095f5450b/packages/core-data/src/fetch/__experimental-fetch-link-suggestions.js#L212-L218
671
+ title: (0, _htmlEntities.decodeEntities)(page.title.rendered),
651
672
  url: page.link,
652
673
  kind: 'post-type'
653
674
  };
@@ -777,9 +798,14 @@ function NavigationLinkEdit(_ref2) {
777
798
  }), (0, _element.createElement)(_components.Tooltip, {
778
799
  position: "top center",
779
800
  text: tooltipText
780
- }, (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)("span", null,
781
- /* Trim to avoid trailing white space when the placeholder text is not present */
782
- `${label} ${placeholderText}`.trim()), (0, _element.createElement)("span", {
801
+ }, (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)("span", {
802
+ "aria-label": (0, _i18n.__)('Navigation link text')
803
+ }, // Some attributes are stored in an escaped form. It's a legacy issue.
804
+ // Ideally they would be stored in a raw, unescaped form.
805
+ // Unescape is used here to "recover" the escaped characters
806
+ // so they display without encoding.
807
+ // See `updateNavigationLinkBlockAttributes` for more details.
808
+ `${(0, _lodash.unescape)(label)} ${placeholderText}`.trim()), (0, _element.createElement)("span", {
783
809
  className: "wp-block-navigation-link__missing_text-tooltip"
784
810
  }, tooltipText))))), isLinkOpen && (0, _element.createElement)(_components.Popover, {
785
811
  position: "bottom center",