@wordpress/block-library 9.10.0 → 9.12.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 (307) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +10 -5
  3. package/build/archives/index.js +6 -0
  4. package/build/archives/index.js.map +1 -1
  5. package/build/avatar/hooks.js +2 -3
  6. package/build/avatar/hooks.js.map +1 -1
  7. package/build/button/get-updated-link-attributes.js +1 -1
  8. package/build/button/get-updated-link-attributes.js.map +1 -1
  9. package/build/button/index.js +1 -1
  10. package/build/button/index.js.map +1 -1
  11. package/build/comments/index.js +12 -0
  12. package/build/comments/index.js.map +1 -1
  13. package/build/cover/constants.js +8 -0
  14. package/build/cover/constants.js.map +1 -0
  15. package/build/cover/deprecated.js +140 -4
  16. package/build/cover/deprecated.js.map +1 -1
  17. package/build/cover/edit/block-controls.js +1 -1
  18. package/build/cover/edit/block-controls.js.map +1 -1
  19. package/build/cover/edit/cover-placeholder.js +1 -2
  20. package/build/cover/edit/cover-placeholder.js.map +1 -1
  21. package/build/cover/edit/index.js +42 -21
  22. package/build/cover/edit/index.js.map +1 -1
  23. package/build/cover/edit/inspector-controls.js +40 -2
  24. package/build/cover/edit/inspector-controls.js.map +1 -1
  25. package/build/cover/index.js +3 -0
  26. package/build/cover/index.js.map +1 -1
  27. package/build/cover/save.js +16 -14
  28. package/build/cover/save.js.map +1 -1
  29. package/build/details/index.js +1 -0
  30. package/build/details/index.js.map +1 -1
  31. package/build/file/edit.js +2 -3
  32. package/build/file/edit.js.map +1 -1
  33. package/build/gallery/constants.js +2 -1
  34. package/build/gallery/constants.js.map +1 -1
  35. package/build/gallery/edit.js +12 -3
  36. package/build/gallery/edit.js.map +1 -1
  37. package/build/gallery/utils.js +26 -5
  38. package/build/gallery/utils.js.map +1 -1
  39. package/build/html/edit.js +5 -1
  40. package/build/html/edit.js.map +1 -1
  41. package/build/html/preview.js +2 -2
  42. package/build/html/preview.js.map +1 -1
  43. package/build/image/edit.js +1 -1
  44. package/build/image/edit.js.map +1 -1
  45. package/build/image/image.js +144 -78
  46. package/build/image/image.js.map +1 -1
  47. package/build/image/index.js +1 -1
  48. package/build/latest-posts/edit.js +3 -9
  49. package/build/latest-posts/edit.js.map +1 -1
  50. package/build/lock-unlock.js.map +1 -1
  51. package/build/navigation/edit/menu-inspector-controls.js +1 -1
  52. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  53. package/build/navigation/edit/navigation-menu-selector.js +2 -2
  54. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  55. package/build/paragraph/edit.js +2 -2
  56. package/build/paragraph/edit.js.map +1 -1
  57. package/build/post-content/index.js +13 -0
  58. package/build/post-content/index.js.map +1 -1
  59. package/build/post-featured-image/edit.js +1 -1
  60. package/build/post-featured-image/edit.js.map +1 -1
  61. package/build/post-template/edit.js +11 -0
  62. package/build/post-template/edit.js.map +1 -1
  63. package/build/post-template/index.js +1 -1
  64. package/build/post-time-to-read/edit.js +2 -2
  65. package/build/post-time-to-read/edit.js.map +1 -1
  66. package/build/query/edit/inspector-controls/index.js +2 -2
  67. package/build/query/edit/inspector-controls/index.js.map +1 -1
  68. package/build/query/edit/inspector-controls/order-control.js +2 -2
  69. package/build/query/edit/inspector-controls/order-control.js.map +1 -1
  70. package/build/query/edit/pattern-selection-modal.js +0 -3
  71. package/build/query/edit/pattern-selection-modal.js.map +1 -1
  72. package/build/query/edit/query-content.js +10 -12
  73. package/build/query/edit/query-content.js.map +1 -1
  74. package/build/query/index.js +1 -1
  75. package/build/query/utils.js +32 -1
  76. package/build/query/utils.js.map +1 -1
  77. package/build/query-title/edit.js +1 -1
  78. package/build/query-title/edit.js.map +1 -1
  79. package/build/search/edit.js +19 -14
  80. package/build/search/edit.js.map +1 -1
  81. package/build/separator/transforms.js +12 -0
  82. package/build/separator/transforms.js.map +1 -1
  83. package/build/social-links/edit.js +0 -1
  84. package/build/social-links/edit.js.map +1 -1
  85. package/build/spacer/index.js +2 -0
  86. package/build/spacer/index.js.map +1 -1
  87. package/build/spacer/transforms.js +27 -0
  88. package/build/spacer/transforms.js.map +1 -0
  89. package/build/table/edit.js +0 -1
  90. package/build/table/edit.js.map +1 -1
  91. package/build/table-of-contents/edit.js +2 -7
  92. package/build/table-of-contents/edit.js.map +1 -1
  93. package/build/template-part/edit/index.js +2 -5
  94. package/build/template-part/edit/index.js.map +1 -1
  95. package/build/template-part/edit/selection-modal.js +0 -3
  96. package/build/template-part/edit/selection-modal.js.map +1 -1
  97. package/build/video/edit.js +1 -1
  98. package/build/video/edit.js.map +1 -1
  99. package/build/video/tracks-editor.js +1 -3
  100. package/build/video/tracks-editor.js.map +1 -1
  101. package/build-module/archives/index.js +6 -0
  102. package/build-module/archives/index.js.map +1 -1
  103. package/build-module/avatar/hooks.js +2 -3
  104. package/build-module/avatar/hooks.js.map +1 -1
  105. package/build-module/button/get-updated-link-attributes.js +1 -1
  106. package/build-module/button/get-updated-link-attributes.js.map +1 -1
  107. package/build-module/button/index.js +1 -1
  108. package/build-module/button/index.js.map +1 -1
  109. package/build-module/comments/index.js +12 -0
  110. package/build-module/comments/index.js.map +1 -1
  111. package/build-module/cover/constants.js +2 -0
  112. package/build-module/cover/constants.js.map +1 -0
  113. package/build-module/cover/deprecated.js +140 -4
  114. package/build-module/cover/deprecated.js.map +1 -1
  115. package/build-module/cover/edit/block-controls.js +1 -1
  116. package/build-module/cover/edit/block-controls.js.map +1 -1
  117. package/build-module/cover/edit/cover-placeholder.js +1 -2
  118. package/build-module/cover/edit/cover-placeholder.js.map +1 -1
  119. package/build-module/cover/edit/index.js +42 -21
  120. package/build-module/cover/edit/index.js.map +1 -1
  121. package/build-module/cover/edit/inspector-controls.js +41 -3
  122. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  123. package/build-module/cover/index.js +3 -0
  124. package/build-module/cover/index.js.map +1 -1
  125. package/build-module/cover/save.js +16 -14
  126. package/build-module/cover/save.js.map +1 -1
  127. package/build-module/details/index.js +1 -0
  128. package/build-module/details/index.js.map +1 -1
  129. package/build-module/file/edit.js +2 -3
  130. package/build-module/file/edit.js.map +1 -1
  131. package/build-module/gallery/constants.js +1 -0
  132. package/build-module/gallery/constants.js.map +1 -1
  133. package/build-module/gallery/edit.js +15 -6
  134. package/build-module/gallery/edit.js.map +1 -1
  135. package/build-module/gallery/utils.js +27 -6
  136. package/build-module/gallery/utils.js.map +1 -1
  137. package/build-module/html/edit.js +6 -2
  138. package/build-module/html/edit.js.map +1 -1
  139. package/build-module/html/preview.js +2 -2
  140. package/build-module/html/preview.js.map +1 -1
  141. package/build-module/image/edit.js +1 -1
  142. package/build-module/image/edit.js.map +1 -1
  143. package/build-module/image/image.js +149 -83
  144. package/build-module/image/image.js.map +1 -1
  145. package/build-module/image/index.js +1 -1
  146. package/build-module/latest-posts/edit.js +3 -9
  147. package/build-module/latest-posts/edit.js.map +1 -1
  148. package/build-module/lock-unlock.js.map +1 -1
  149. package/build-module/navigation/edit/menu-inspector-controls.js +1 -3
  150. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  151. package/build-module/navigation/edit/navigation-menu-selector.js +2 -2
  152. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  153. package/build-module/paragraph/edit.js +2 -2
  154. package/build-module/paragraph/edit.js.map +1 -1
  155. package/build-module/post-content/index.js +13 -0
  156. package/build-module/post-content/index.js.map +1 -1
  157. package/build-module/post-featured-image/edit.js +1 -1
  158. package/build-module/post-featured-image/edit.js.map +1 -1
  159. package/build-module/post-template/edit.js +11 -0
  160. package/build-module/post-template/edit.js.map +1 -1
  161. package/build-module/post-template/index.js +1 -1
  162. package/build-module/post-time-to-read/edit.js +2 -2
  163. package/build-module/post-time-to-read/edit.js.map +1 -1
  164. package/build-module/query/edit/inspector-controls/index.js +2 -2
  165. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  166. package/build-module/query/edit/inspector-controls/order-control.js +2 -2
  167. package/build-module/query/edit/inspector-controls/order-control.js.map +1 -1
  168. package/build-module/query/edit/pattern-selection-modal.js +0 -3
  169. package/build-module/query/edit/pattern-selection-modal.js.map +1 -1
  170. package/build-module/query/edit/query-content.js +10 -12
  171. package/build-module/query/edit/query-content.js.map +1 -1
  172. package/build-module/query/index.js +1 -1
  173. package/build-module/query/utils.js +29 -0
  174. package/build-module/query/utils.js.map +1 -1
  175. package/build-module/query-title/edit.js +2 -2
  176. package/build-module/query-title/edit.js.map +1 -1
  177. package/build-module/search/edit.js +20 -15
  178. package/build-module/search/edit.js.map +1 -1
  179. package/build-module/separator/transforms.js +12 -0
  180. package/build-module/separator/transforms.js.map +1 -1
  181. package/build-module/social-links/edit.js +0 -1
  182. package/build-module/social-links/edit.js.map +1 -1
  183. package/build-module/spacer/index.js +2 -0
  184. package/build-module/spacer/index.js.map +1 -1
  185. package/build-module/spacer/transforms.js +20 -0
  186. package/build-module/spacer/transforms.js.map +1 -0
  187. package/build-module/table/edit.js +0 -1
  188. package/build-module/table/edit.js.map +1 -1
  189. package/build-module/table-of-contents/edit.js +2 -7
  190. package/build-module/table-of-contents/edit.js.map +1 -1
  191. package/build-module/template-part/edit/index.js +2 -5
  192. package/build-module/template-part/edit/index.js.map +1 -1
  193. package/build-module/template-part/edit/selection-modal.js +0 -3
  194. package/build-module/template-part/edit/selection-modal.js.map +1 -1
  195. package/build-module/video/edit.js +1 -1
  196. package/build-module/video/edit.js.map +1 -1
  197. package/build-module/video/tracks-editor.js +2 -4
  198. package/build-module/video/tracks-editor.js.map +1 -1
  199. package/build-style/archives/editor-rtl.css +5 -0
  200. package/build-style/archives/editor.css +5 -0
  201. package/build-style/button/style-rtl.css +3 -0
  202. package/build-style/button/style.css +3 -0
  203. package/build-style/comments/editor-rtl.css +4 -0
  204. package/build-style/comments/editor.css +4 -0
  205. package/build-style/comments/style-rtl.css +4 -0
  206. package/build-style/comments/style.css +4 -0
  207. package/build-style/cover/editor-rtl.css +3 -5
  208. package/build-style/cover/editor.css +3 -5
  209. package/build-style/cover/style-rtl.css +19 -10
  210. package/build-style/cover/style.css +19 -10
  211. package/build-style/editor-rtl.css +17 -12
  212. package/build-style/editor.css +17 -12
  213. package/build-style/image/editor-rtl.css +4 -0
  214. package/build-style/image/editor.css +4 -0
  215. package/build-style/latest-posts/editor-rtl.css +0 -7
  216. package/build-style/latest-posts/editor.css +0 -7
  217. package/build-style/media-text/style-rtl.css +1 -1
  218. package/build-style/media-text/style.css +1 -1
  219. package/build-style/navigation/editor-rtl.css +1 -0
  220. package/build-style/navigation/editor.css +1 -0
  221. package/build-style/style-rtl.css +27 -11
  222. package/build-style/style.css +27 -11
  223. package/build-types/lock-unlock.d.ts +2 -0
  224. package/build-types/lock-unlock.d.ts.map +1 -0
  225. package/package.json +41 -40
  226. package/src/archives/block.json +6 -0
  227. package/src/archives/editor.scss +8 -0
  228. package/src/avatar/hooks.js +2 -3
  229. package/src/avatar/index.php +4 -5
  230. package/src/button/get-updated-link-attributes.js +1 -1
  231. package/src/button/index.js +1 -1
  232. package/src/button/style.scss +3 -0
  233. package/src/button/test/get-updated-link-attributes.js +15 -0
  234. package/src/comment-author-avatar/index.php +1 -1
  235. package/src/comments/block.json +12 -0
  236. package/src/comments/style.scss +4 -1
  237. package/src/cover/block.json +3 -0
  238. package/src/cover/constants.js +1 -0
  239. package/src/cover/deprecated.js +182 -4
  240. package/src/cover/edit/block-controls.js +1 -1
  241. package/src/cover/edit/cover-placeholder.js +0 -3
  242. package/src/cover/edit/index.js +57 -24
  243. package/src/cover/edit/inspector-controls.js +46 -1
  244. package/src/cover/editor.scss +4 -5
  245. package/src/cover/save.js +29 -20
  246. package/src/cover/style.scss +40 -10
  247. package/src/cover/test/__snapshots__/edit.native.js.snap +9 -9
  248. package/src/cover/test/__snapshots__/transforms.native.js.snap +4 -4
  249. package/src/cover/test/edit.js +1 -3
  250. package/src/cover/test/edit.native.js +4 -4
  251. package/src/cover/test/transforms.native.js +4 -4
  252. package/src/details/block.json +1 -0
  253. package/src/file/edit.js +2 -3
  254. package/src/gallery/constants.js +1 -0
  255. package/src/gallery/edit.js +26 -3
  256. package/src/gallery/utils.js +23 -2
  257. package/src/html/edit.js +7 -1
  258. package/src/html/preview.js +3 -2
  259. package/src/image/block.json +1 -1
  260. package/src/image/edit.js +1 -1
  261. package/src/image/editor.scss +4 -0
  262. package/src/image/image.js +200 -109
  263. package/src/image/test/__snapshots__/transforms.native.js.snap +1 -1
  264. package/src/latest-posts/edit.js +3 -8
  265. package/src/latest-posts/editor.scss +0 -11
  266. package/src/latest-posts/index.php +1 -1
  267. package/src/media-text/style.scss +1 -1
  268. package/src/media-text/test/__snapshots__/transforms.native.js.snap +2 -2
  269. package/src/navigation/edit/menu-inspector-controls.js +2 -2
  270. package/src/navigation/edit/navigation-menu-selector.js +2 -2
  271. package/src/navigation/editor.scss +1 -0
  272. package/src/navigation/index.php +1 -1
  273. package/src/paragraph/edit.js +2 -2
  274. package/src/post-content/block.json +14 -1
  275. package/src/post-featured-image/edit.js +1 -1
  276. package/src/post-template/block.json +2 -1
  277. package/src/post-template/edit.js +19 -0
  278. package/src/post-time-to-read/edit.js +2 -2
  279. package/src/post-time-to-read/index.php +1 -1
  280. package/src/query/block.json +1 -1
  281. package/src/query/edit/inspector-controls/index.js +2 -2
  282. package/src/query/edit/inspector-controls/order-control.js +2 -2
  283. package/src/query/edit/pattern-selection-modal.js +0 -3
  284. package/src/query/edit/query-content.js +9 -17
  285. package/src/query/test/utils.js +59 -1
  286. package/src/query/utils.js +29 -0
  287. package/src/query-title/edit.js +2 -2
  288. package/src/rss/index.php +1 -1
  289. package/src/search/edit.js +28 -25
  290. package/src/search/index.php +2 -2
  291. package/src/separator/test/__snapshots__/transforms.native.js.snap +6 -0
  292. package/src/separator/test/transforms.native.js +1 -1
  293. package/src/separator/transforms.js +11 -0
  294. package/src/social-links/edit.js +0 -1
  295. package/src/spacer/index.js +2 -0
  296. package/src/spacer/test/__snapshots__/transforms.native.js.snap +6 -0
  297. package/src/spacer/test/transforms.native.js +1 -1
  298. package/src/spacer/transforms.js +20 -0
  299. package/src/table/edit.js +0 -1
  300. package/src/table-of-contents/edit.js +2 -6
  301. package/src/template-part/edit/index.js +2 -5
  302. package/src/template-part/edit/selection-modal.js +0 -3
  303. package/src/video/edit.js +1 -1
  304. package/src/video/test/__snapshots__/transforms.native.js.snap +1 -1
  305. package/src/video/tracks-editor.js +2 -4
  306. package/tsconfig.tsbuildinfo +1 -1
  307. /package/src/{lock-unlock.js → lock-unlock.ts} +0 -0
@@ -3,8 +3,9 @@
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import { useContext, useState } from '@wordpress/element';
6
- import { BlockControls, PlainText, useBlockProps } from '@wordpress/block-editor';
6
+ import { BlockControls, PlainText, useBlockProps, store as blockEditorStore } from '@wordpress/block-editor';
7
7
  import { ToolbarButton, Disabled, ToolbarGroup, VisuallyHidden } from '@wordpress/components';
8
+ import { useSelect } from '@wordpress/data';
8
9
  import { useInstanceId } from '@wordpress/compose';
9
10
 
10
11
  /**
@@ -20,6 +21,9 @@ export default function HTMLEdit({
20
21
  const [isPreview, setIsPreview] = useState();
21
22
  const isDisabled = useContext(Disabled.Context);
22
23
  const instanceId = useInstanceId(HTMLEdit, 'html-edit-desc');
24
+ const isPreviewMode = useSelect(select => {
25
+ return select(blockEditorStore).getSettings().isPreviewMode;
26
+ }, []);
23
27
  function switchToPreview() {
24
28
  setIsPreview(true);
25
29
  }
@@ -44,7 +48,7 @@ export default function HTMLEdit({
44
48
  children: __('Preview')
45
49
  })]
46
50
  })
47
- }), isPreview || isDisabled ? /*#__PURE__*/_jsxs(_Fragment, {
51
+ }), isPreview || isPreviewMode || isDisabled ? /*#__PURE__*/_jsxs(_Fragment, {
48
52
  children: [/*#__PURE__*/_jsx(Preview, {
49
53
  content: attributes.content,
50
54
  isSelected: isSelected
@@ -1 +1 @@
1
- {"version":3,"names":["__","useContext","useState","BlockControls","PlainText","useBlockProps","ToolbarButton","Disabled","ToolbarGroup","VisuallyHidden","useInstanceId","Preview","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","HTMLEdit","attributes","setAttributes","isSelected","isPreview","setIsPreview","isDisabled","Context","instanceId","switchToPreview","switchToHTML","blockProps","className","undefined","children","isPressed","onClick","content","id","value","onChange","placeholder"],"sources":["@wordpress/block-library/src/html/edit.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useContext, useState } from '@wordpress/element';\nimport {\n\tBlockControls,\n\tPlainText,\n\tuseBlockProps,\n} from '@wordpress/block-editor';\nimport {\n\tToolbarButton,\n\tDisabled,\n\tToolbarGroup,\n\tVisuallyHidden,\n} from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport Preview from './preview';\n\nexport default function HTMLEdit( { attributes, setAttributes, isSelected } ) {\n\tconst [ isPreview, setIsPreview ] = useState();\n\tconst isDisabled = useContext( Disabled.Context );\n\n\tconst instanceId = useInstanceId( HTMLEdit, 'html-edit-desc' );\n\n\tfunction switchToPreview() {\n\t\tsetIsPreview( true );\n\t}\n\n\tfunction switchToHTML() {\n\t\tsetIsPreview( false );\n\t}\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: 'block-library-html__edit',\n\t\t'aria-describedby': isPreview ? instanceId : undefined,\n\t} );\n\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tisPressed={ ! isPreview }\n\t\t\t\t\t\tonClick={ switchToHTML }\n\t\t\t\t\t>\n\t\t\t\t\t\tHTML\n\t\t\t\t\t</ToolbarButton>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tisPressed={ isPreview }\n\t\t\t\t\t\tonClick={ switchToPreview }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Preview' ) }\n\t\t\t\t\t</ToolbarButton>\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t\t{ isPreview || isDisabled ? (\n\t\t\t\t<>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tcontent={ attributes.content }\n\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t/>\n\t\t\t\t\t<VisuallyHidden id={ instanceId }>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'HTML preview is not yet fully accessible. Please switch screen reader to virtualized mode to navigate the below iFrame.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<PlainText\n\t\t\t\t\tvalue={ attributes.content }\n\t\t\t\t\tonChange={ ( content ) => setAttributes( { content } ) }\n\t\t\t\t\tplaceholder={ __( 'Write HTML…' ) }\n\t\t\t\t\taria-label={ __( 'HTML' ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;AACpC,SAASC,UAAU,EAAEC,QAAQ,QAAQ,oBAAoB;AACzD,SACCC,aAAa,EACbC,SAAS,EACTC,aAAa,QACP,yBAAyB;AAChC,SACCC,aAAa,EACbC,QAAQ,EACRC,YAAY,EACZC,cAAc,QACR,uBAAuB;AAC9B,SAASC,aAAa,QAAQ,oBAAoB;;AAElD;AACA;AACA;AACA,OAAOC,OAAO,MAAM,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAEhC,eAAe,SAASC,QAAQA,CAAE;EAAEC,UAAU;EAAEC,aAAa;EAAEC;AAAW,CAAC,EAAG;EAC7E,MAAM,CAAEC,SAAS,EAAEC,YAAY,CAAE,GAAGrB,QAAQ,CAAC,CAAC;EAC9C,MAAMsB,UAAU,GAAGvB,UAAU,CAAEM,QAAQ,CAACkB,OAAQ,CAAC;EAEjD,MAAMC,UAAU,GAAGhB,aAAa,CAAEQ,QAAQ,EAAE,gBAAiB,CAAC;EAE9D,SAASS,eAAeA,CAAA,EAAG;IAC1BJ,YAAY,CAAE,IAAK,CAAC;EACrB;EAEA,SAASK,YAAYA,CAAA,EAAG;IACvBL,YAAY,CAAE,KAAM,CAAC;EACtB;EAEA,MAAMM,UAAU,GAAGxB,aAAa,CAAE;IACjCyB,SAAS,EAAE,0BAA0B;IACrC,kBAAkB,EAAER,SAAS,GAAGI,UAAU,GAAGK;EAC9C,CAAE,CAAC;EAEH,oBACChB,KAAA;IAAA,GAAUc,UAAU;IAAAG,QAAA,gBACnBnB,IAAA,CAACV,aAAa;MAAA6B,QAAA,eACbjB,KAAA,CAACP,YAAY;QAAAwB,QAAA,gBACZnB,IAAA,CAACP,aAAa;UACb2B,SAAS,EAAG,CAAEX,SAAW;UACzBY,OAAO,EAAGN,YAAc;UAAAI,QAAA,EACxB;QAED,CAAe,CAAC,eAChBnB,IAAA,CAACP,aAAa;UACb2B,SAAS,EAAGX,SAAW;UACvBY,OAAO,EAAGP,eAAiB;UAAAK,QAAA,EAEzBhC,EAAE,CAAE,SAAU;QAAC,CACH,CAAC;MAAA,CACH;IAAC,CACD,CAAC,EACdsB,SAAS,IAAIE,UAAU,gBACxBT,KAAA,CAAAE,SAAA;MAAAe,QAAA,gBACCnB,IAAA,CAACF,OAAO;QACPwB,OAAO,EAAGhB,UAAU,CAACgB,OAAS;QAC9Bd,UAAU,EAAGA;MAAY,CACzB,CAAC,eACFR,IAAA,CAACJ,cAAc;QAAC2B,EAAE,EAAGV,UAAY;QAAAM,QAAA,EAC9BhC,EAAE,CACH,yHACD;MAAC,CACc,CAAC;IAAA,CAChB,CAAC,gBAEHa,IAAA,CAACT,SAAS;MACTiC,KAAK,EAAGlB,UAAU,CAACgB,OAAS;MAC5BG,QAAQ,EAAKH,OAAO,IAAMf,aAAa,CAAE;QAAEe;MAAQ,CAAE,CAAG;MACxDI,WAAW,EAAGvC,EAAE,CAAE,aAAc,CAAG;MACnC,cAAaA,EAAE,CAAE,MAAO;IAAG,CAC3B,CACD;EAAA,CACG,CAAC;AAER","ignoreList":[]}
1
+ {"version":3,"names":["__","useContext","useState","BlockControls","PlainText","useBlockProps","store","blockEditorStore","ToolbarButton","Disabled","ToolbarGroup","VisuallyHidden","useSelect","useInstanceId","Preview","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","HTMLEdit","attributes","setAttributes","isSelected","isPreview","setIsPreview","isDisabled","Context","instanceId","isPreviewMode","select","getSettings","switchToPreview","switchToHTML","blockProps","className","undefined","children","isPressed","onClick","content","id","value","onChange","placeholder"],"sources":["@wordpress/block-library/src/html/edit.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useContext, useState } from '@wordpress/element';\nimport {\n\tBlockControls,\n\tPlainText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport {\n\tToolbarButton,\n\tDisabled,\n\tToolbarGroup,\n\tVisuallyHidden,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useInstanceId } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport Preview from './preview';\n\nexport default function HTMLEdit( { attributes, setAttributes, isSelected } ) {\n\tconst [ isPreview, setIsPreview ] = useState();\n\tconst isDisabled = useContext( Disabled.Context );\n\n\tconst instanceId = useInstanceId( HTMLEdit, 'html-edit-desc' );\n\n\tconst isPreviewMode = useSelect( ( select ) => {\n\t\treturn select( blockEditorStore ).getSettings().isPreviewMode;\n\t}, [] );\n\n\tfunction switchToPreview() {\n\t\tsetIsPreview( true );\n\t}\n\n\tfunction switchToHTML() {\n\t\tsetIsPreview( false );\n\t}\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: 'block-library-html__edit',\n\t\t'aria-describedby': isPreview ? instanceId : undefined,\n\t} );\n\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tisPressed={ ! isPreview }\n\t\t\t\t\t\tonClick={ switchToHTML }\n\t\t\t\t\t>\n\t\t\t\t\t\tHTML\n\t\t\t\t\t</ToolbarButton>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tisPressed={ isPreview }\n\t\t\t\t\t\tonClick={ switchToPreview }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Preview' ) }\n\t\t\t\t\t</ToolbarButton>\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t\t{ isPreview || isPreviewMode || isDisabled ? (\n\t\t\t\t<>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tcontent={ attributes.content }\n\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t/>\n\t\t\t\t\t<VisuallyHidden id={ instanceId }>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'HTML preview is not yet fully accessible. Please switch screen reader to virtualized mode to navigate the below iFrame.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<PlainText\n\t\t\t\t\tvalue={ attributes.content }\n\t\t\t\t\tonChange={ ( content ) => setAttributes( { content } ) }\n\t\t\t\t\tplaceholder={ __( 'Write HTML…' ) }\n\t\t\t\t\taria-label={ __( 'HTML' ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;AACpC,SAASC,UAAU,EAAEC,QAAQ,QAAQ,oBAAoB;AACzD,SACCC,aAAa,EACbC,SAAS,EACTC,aAAa,EACbC,KAAK,IAAIC,gBAAgB,QACnB,yBAAyB;AAChC,SACCC,aAAa,EACbC,QAAQ,EACRC,YAAY,EACZC,cAAc,QACR,uBAAuB;AAC9B,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,aAAa,QAAQ,oBAAoB;;AAElD;AACA;AACA;AACA,OAAOC,OAAO,MAAM,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAEhC,eAAe,SAASC,QAAQA,CAAE;EAAEC,UAAU;EAAEC,aAAa;EAAEC;AAAW,CAAC,EAAG;EAC7E,MAAM,CAAEC,SAAS,EAAEC,YAAY,CAAE,GAAGxB,QAAQ,CAAC,CAAC;EAC9C,MAAMyB,UAAU,GAAG1B,UAAU,CAAEQ,QAAQ,CAACmB,OAAQ,CAAC;EAEjD,MAAMC,UAAU,GAAGhB,aAAa,CAAEQ,QAAQ,EAAE,gBAAiB,CAAC;EAE9D,MAAMS,aAAa,GAAGlB,SAAS,CAAImB,MAAM,IAAM;IAC9C,OAAOA,MAAM,CAAExB,gBAAiB,CAAC,CAACyB,WAAW,CAAC,CAAC,CAACF,aAAa;EAC9D,CAAC,EAAE,EAAG,CAAC;EAEP,SAASG,eAAeA,CAAA,EAAG;IAC1BP,YAAY,CAAE,IAAK,CAAC;EACrB;EAEA,SAASQ,YAAYA,CAAA,EAAG;IACvBR,YAAY,CAAE,KAAM,CAAC;EACtB;EAEA,MAAMS,UAAU,GAAG9B,aAAa,CAAE;IACjC+B,SAAS,EAAE,0BAA0B;IACrC,kBAAkB,EAAEX,SAAS,GAAGI,UAAU,GAAGQ;EAC9C,CAAE,CAAC;EAEH,oBACCnB,KAAA;IAAA,GAAUiB,UAAU;IAAAG,QAAA,gBACnBtB,IAAA,CAACb,aAAa;MAAAmC,QAAA,eACbpB,KAAA,CAACR,YAAY;QAAA4B,QAAA,gBACZtB,IAAA,CAACR,aAAa;UACb+B,SAAS,EAAG,CAAEd,SAAW;UACzBe,OAAO,EAAGN,YAAc;UAAAI,QAAA,EACxB;QAED,CAAe,CAAC,eAChBtB,IAAA,CAACR,aAAa;UACb+B,SAAS,EAAGd,SAAW;UACvBe,OAAO,EAAGP,eAAiB;UAAAK,QAAA,EAEzBtC,EAAE,CAAE,SAAU;QAAC,CACH,CAAC;MAAA,CACH;IAAC,CACD,CAAC,EACdyB,SAAS,IAAIK,aAAa,IAAIH,UAAU,gBACzCT,KAAA,CAAAE,SAAA;MAAAkB,QAAA,gBACCtB,IAAA,CAACF,OAAO;QACP2B,OAAO,EAAGnB,UAAU,CAACmB,OAAS;QAC9BjB,UAAU,EAAGA;MAAY,CACzB,CAAC,eACFR,IAAA,CAACL,cAAc;QAAC+B,EAAE,EAAGb,UAAY;QAAAS,QAAA,EAC9BtC,EAAE,CACH,yHACD;MAAC,CACc,CAAC;IAAA,CAChB,CAAC,gBAEHgB,IAAA,CAACZ,SAAS;MACTuC,KAAK,EAAGrB,UAAU,CAACmB,OAAS;MAC5BG,QAAQ,EAAKH,OAAO,IAAMlB,aAAa,CAAE;QAAEkB;MAAQ,CAAE,CAAG;MACxDI,WAAW,EAAG7C,EAAE,CAAE,aAAc,CAAG;MACnC,cAAaA,EAAE,CAAE,MAAO;IAAG,CAC3B,CACD;EAAA,CACG,CAAC;AAER","ignoreList":[]}
@@ -22,8 +22,8 @@ export default function HTMLEditPreview({
22
22
  content,
23
23
  isSelected
24
24
  }) {
25
- const settingStyles = useSelect(select => select(blockEditorStore).getSettings().styles);
26
- const styles = useMemo(() => [DEFAULT_STYLES, ...transformStyles(settingStyles.filter(style => style.css))], [settingStyles]);
25
+ const settingStyles = useSelect(select => select(blockEditorStore).getSettings().styles, []);
26
+ const styles = useMemo(() => [DEFAULT_STYLES, ...transformStyles((settingStyles !== null && settingStyles !== void 0 ? settingStyles : []).filter(style => style.css))], [settingStyles]);
27
27
  return /*#__PURE__*/_jsxs(_Fragment, {
28
28
  children: [/*#__PURE__*/_jsx(SandBox, {
29
29
  html: content,
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","transformStyles","store","blockEditorStore","SandBox","useSelect","__","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_STYLES","HTMLEditPreview","content","isSelected","settingStyles","select","getSettings","styles","filter","style","css","children","html","title","tabIndex","className"],"sources":["@wordpress/block-library/src/html/preview.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport {\n\ttransformStyles,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { SandBox } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n// Default styles used to unset some of the styles\n// that might be inherited from the editor style.\nconst DEFAULT_STYLES = `\n\thtml,body,:root {\n\t\tmargin: 0 !important;\n\t\tpadding: 0 !important;\n\t\toverflow: visible !important;\n\t\tmin-height: auto !important;\n\t}\n`;\n\nexport default function HTMLEditPreview( { content, isSelected } ) {\n\tconst settingStyles = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings().styles\n\t);\n\n\tconst styles = useMemo(\n\t\t() => [\n\t\t\tDEFAULT_STYLES,\n\t\t\t...transformStyles(\n\t\t\t\tsettingStyles.filter( ( style ) => style.css )\n\t\t\t),\n\t\t],\n\t\t[ settingStyles ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<SandBox\n\t\t\t\thtml={ content }\n\t\t\t\tstyles={ styles }\n\t\t\t\ttitle={ __( 'Custom HTML Preview' ) }\n\t\t\t\ttabIndex={ -1 }\n\t\t\t/>\n\t\t\t{ /*\n\t\t\t\tAn overlay is added when the block is not selected in order to register click events.\n\t\t\t\tSome browsers do not bubble up the clicks from the sandboxed iframe, which makes it\n\t\t\t\tdifficult to reselect the block.\n\t\t\t*/ }\n\t\t\t{ ! isSelected && (\n\t\t\t\t<div className=\"block-library-html__preview-overlay\"></div>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,oBAAoB;AAC5C,SACCC,eAAe,EACfC,KAAK,IAAIC,gBAAgB,QACnB,yBAAyB;AAChC,SAASC,OAAO,QAAQ,uBAAuB;AAC/C,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,MAAMC,cAAc,GAAG;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,eAAe,SAASC,eAAeA,CAAE;EAAEC,OAAO;EAAEC;AAAW,CAAC,EAAG;EAClE,MAAMC,aAAa,GAAGZ,SAAS,CAC5Ba,MAAM,IAAMA,MAAM,CAAEf,gBAAiB,CAAC,CAACgB,WAAW,CAAC,CAAC,CAACC,MACxD,CAAC;EAED,MAAMA,MAAM,GAAGpB,OAAO,CACrB,MAAM,CACLa,cAAc,EACd,GAAGZ,eAAe,CACjBgB,aAAa,CAACI,MAAM,CAAIC,KAAK,IAAMA,KAAK,CAACC,GAAI,CAC9C,CAAC,CACD,EACD,CAAEN,aAAa,CAChB,CAAC;EAED,oBACCL,KAAA,CAAAF,SAAA;IAAAc,QAAA,gBACChB,IAAA,CAACJ,OAAO;MACPqB,IAAI,EAAGV,OAAS;MAChBK,MAAM,EAAGA,MAAQ;MACjBM,KAAK,EAAGpB,EAAE,CAAE,qBAAsB,CAAG;MACrCqB,QAAQ,EAAG,CAAC;IAAG,CACf,CAAC,EAMA,CAAEX,UAAU,iBACbR,IAAA;MAAKoB,SAAS,EAAC;IAAqC,CAAM,CAC1D;EAAA,CACA,CAAC;AAEL","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","transformStyles","store","blockEditorStore","SandBox","useSelect","__","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_STYLES","HTMLEditPreview","content","isSelected","settingStyles","select","getSettings","styles","filter","style","css","children","html","title","tabIndex","className"],"sources":["@wordpress/block-library/src/html/preview.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport {\n\ttransformStyles,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { SandBox } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n// Default styles used to unset some of the styles\n// that might be inherited from the editor style.\nconst DEFAULT_STYLES = `\n\thtml,body,:root {\n\t\tmargin: 0 !important;\n\t\tpadding: 0 !important;\n\t\toverflow: visible !important;\n\t\tmin-height: auto !important;\n\t}\n`;\n\nexport default function HTMLEditPreview( { content, isSelected } ) {\n\tconst settingStyles = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings().styles,\n\t\t[]\n\t);\n\n\tconst styles = useMemo(\n\t\t() => [\n\t\t\tDEFAULT_STYLES,\n\t\t\t...transformStyles(\n\t\t\t\t( settingStyles ?? [] ).filter( ( style ) => style.css )\n\t\t\t),\n\t\t],\n\t\t[ settingStyles ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<SandBox\n\t\t\t\thtml={ content }\n\t\t\t\tstyles={ styles }\n\t\t\t\ttitle={ __( 'Custom HTML Preview' ) }\n\t\t\t\ttabIndex={ -1 }\n\t\t\t/>\n\t\t\t{ /*\n\t\t\t\tAn overlay is added when the block is not selected in order to register click events.\n\t\t\t\tSome browsers do not bubble up the clicks from the sandboxed iframe, which makes it\n\t\t\t\tdifficult to reselect the block.\n\t\t\t*/ }\n\t\t\t{ ! isSelected && (\n\t\t\t\t<div className=\"block-library-html__preview-overlay\"></div>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,oBAAoB;AAC5C,SACCC,eAAe,EACfC,KAAK,IAAIC,gBAAgB,QACnB,yBAAyB;AAChC,SAASC,OAAO,QAAQ,uBAAuB;AAC/C,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,MAAMC,cAAc,GAAG;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,eAAe,SAASC,eAAeA,CAAE;EAAEC,OAAO;EAAEC;AAAW,CAAC,EAAG;EAClE,MAAMC,aAAa,GAAGZ,SAAS,CAC5Ba,MAAM,IAAMA,MAAM,CAAEf,gBAAiB,CAAC,CAACgB,WAAW,CAAC,CAAC,CAACC,MAAM,EAC7D,EACD,CAAC;EAED,MAAMA,MAAM,GAAGpB,OAAO,CACrB,MAAM,CACLa,cAAc,EACd,GAAGZ,eAAe,CACjB,CAAEgB,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAI,EAAE,EAAGI,MAAM,CAAIC,KAAK,IAAMA,KAAK,CAACC,GAAI,CACxD,CAAC,CACD,EACD,CAAEN,aAAa,CAChB,CAAC;EAED,oBACCL,KAAA,CAAAF,SAAA;IAAAc,QAAA,gBACChB,IAAA,CAACJ,OAAO;MACPqB,IAAI,EAAGV,OAAS;MAChBK,MAAM,EAAGA,MAAQ;MACjBM,KAAK,EAAGpB,EAAE,CAAE,qBAAsB,CAAG;MACrCqB,QAAQ,EAAG,CAAC;IAAG,CACf,CAAC,EAMA,CAAEX,UAAU,iBACbR,IAAA;MAAKoB,SAAS,EAAC;IAAqC,CAAM,CAC1D;EAAA,CACA,CAAC;AAEL","ignoreList":[]}
@@ -329,7 +329,7 @@ export function ImageEdit({
329
329
  icon: !isSmallContainer && (lockUrlControls ? pluginsIcon : icon),
330
330
  withIllustration: !isSingleSelected || isSmallContainer,
331
331
  label: !isSmallContainer && __('Image'),
332
- instructions: !lockUrlControls && !isSmallContainer && __('Upload or drag an image file here, or pick one from your library.'),
332
+ instructions: !lockUrlControls && !isSmallContainer && __('Drag and drop an image, upload, or choose from your library.'),
333
333
  style: {
334
334
  aspectRatio: !(width && height) && aspectRatio ? aspectRatio : undefined,
335
335
  width: height && aspectRatio ? '100%' : width,
@@ -1 +1 @@
1
- {"version":3,"names":["clsx","isBlobURL","createBlobURL","createBlock","getBlockBindingsSource","Placeholder","useDispatch","useSelect","BlockIcon","useBlockProps","MediaPlaceholder","store","blockEditorStore","__experimentalUseBorderProps","useBorderProps","__experimentalGetShadowClassesAndStyles","getShadowClassesAndStyles","useBlockEditingMode","useEffect","useRef","useState","__","sprintf","image","icon","plugins","pluginsIcon","noticesStore","useResizeObserver","useUploadMediaFromBlobURL","Image","isValidFileType","useMaxWidthObserver","LINK_DESTINATION_ATTACHMENT","LINK_DESTINATION_CUSTOM","LINK_DESTINATION_MEDIA","LINK_DESTINATION_NONE","ALLOWED_MEDIA_TYPES","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","pickRelevantMediaFiles","size","imageProps","Object","fromEntries","entries","filter","key","includes","url","sizes","media_details","source_url","isExternalImage","id","hasSize","_image$sizes$size","_image$media_details$","ImageEdit","attributes","setAttributes","isSelected","isSingleSelected","className","insertBlocksAfter","onReplace","context","clientId","__unstableParentLayout","parentLayout","alt","caption","width","height","sizeSlug","aspectRatio","scale","align","metadata","temporaryURL","setTemporaryURL","blob","containerRef","isMaxWidthContainerWidth","type","maxWidthObserver","maxContentWidth","placeholderResizeListener","placeholderWidth","isSmallContainer","altRef","current","captionRef","__unstableMarkNextChangeAsNotPersistent","replaceBlock","undefined","getSettings","getBlockRootClientId","getBlockName","canInsertBlockType","blockEditingMode","createErrorNotice","onUploadError","message","src","onSelectImagesList","images","win","ownerDocument","defaultView","every","file","File","files","rootClientId","some","imageBlocks","map","galleryBlock","onSelectImage","media","Array","isArray","title","imageDefaultSize","newSize","mediaAttributes","omittedCaption","restMediaAttributes","additionalAttributes","linkDestination","window","wp","view","settings","defaultProps","link","href","onSelectURL","newURL","allowedTypes","onChange","onError","isExternal","mediaPreview","borderProps","shadowProps","classes","style","keys","length","blockProps","ref","lockUrlControls","lockUrlControlsMessage","select","blockBindingsSource","bindings","source","canUserEditValue","args","label","placeholder","content","withIllustration","instructions","objectFit","children","parentLayoutType","onSelect","accept","handleUpload","value","disableMediaButtons"],"sources":["@wordpress/block-library/src/image/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL, createBlobURL } from '@wordpress/blob';\nimport { createBlock, getBlockBindingsSource } from '@wordpress/blocks';\nimport { Placeholder } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tBlockIcon,\n\tuseBlockProps,\n\tMediaPlaceholder,\n\tstore as blockEditorStore,\n\t__experimentalUseBorderProps as useBorderProps,\n\t__experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\nimport { useEffect, useRef, useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { image as icon, plugins as pluginsIcon } from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { useResizeObserver } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { useUploadMediaFromBlobURL } from '../utils/hooks';\nimport Image from './image';\nimport { isValidFileType } from './utils';\nimport { useMaxWidthObserver } from './use-max-width-observer';\n\n/**\n * Module constants\n */\nimport {\n\tLINK_DESTINATION_ATTACHMENT,\n\tLINK_DESTINATION_CUSTOM,\n\tLINK_DESTINATION_MEDIA,\n\tLINK_DESTINATION_NONE,\n\tALLOWED_MEDIA_TYPES,\n} from './constants';\n\nexport const pickRelevantMediaFiles = ( image, size ) => {\n\tconst imageProps = Object.fromEntries(\n\t\tObject.entries( image ?? {} ).filter( ( [ key ] ) =>\n\t\t\t[ 'alt', 'id', 'link', 'caption' ].includes( key )\n\t\t)\n\t);\n\n\timageProps.url =\n\t\timage?.sizes?.[ size ]?.url ||\n\t\timage?.media_details?.sizes?.[ size ]?.source_url ||\n\t\timage.url;\n\treturn imageProps;\n};\n\n/**\n * Is the url for the image hosted externally. An externally hosted image has no\n * id and is not a blob url.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the url an externally hosted url?\n */\nexport const isExternalImage = ( id, url ) => url && ! id && ! isBlobURL( url );\n\n/**\n * Checks if WP generated the specified image size. Size generation is skipped\n * when the image is smaller than the said size.\n *\n * @param {Object} image\n * @param {string} size\n *\n * @return {boolean} Whether or not it has default image size.\n */\nfunction hasSize( image, size ) {\n\treturn (\n\t\t'url' in ( image?.sizes?.[ size ] ?? {} ) ||\n\t\t'source_url' in ( image?.media_details?.sizes?.[ size ] ?? {} )\n\t);\n}\n\nexport function ImageEdit( {\n\tattributes,\n\tsetAttributes,\n\tisSelected: isSingleSelected,\n\tclassName,\n\tinsertBlocksAfter,\n\tonReplace,\n\tcontext,\n\tclientId,\n\t__unstableParentLayout: parentLayout,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\tsizeSlug,\n\t\taspectRatio,\n\t\tscale,\n\t\talign,\n\t\tmetadata,\n\t} = attributes;\n\n\tconst [ temporaryURL, setTemporaryURL ] = useState( attributes.blob );\n\n\tconst containerRef = useRef();\n\t// Only observe the max width from the parent container when the parent layout is not flex nor grid.\n\t// This won't work for them because the container width changes with the image.\n\t// TODO: Find a way to observe the container width for flex and grid layouts.\n\tconst isMaxWidthContainerWidth =\n\t\t! parentLayout ||\n\t\t( parentLayout.type !== 'flex' && parentLayout.type !== 'grid' );\n\tconst [ maxWidthObserver, maxContentWidth ] = useMaxWidthObserver();\n\n\tconst [ placeholderResizeListener, { width: placeholderWidth } ] =\n\t\tuseResizeObserver();\n\n\tconst isSmallContainer = placeholderWidth && placeholderWidth < 160;\n\n\tconst altRef = useRef();\n\tuseEffect( () => {\n\t\taltRef.current = alt;\n\t}, [ alt ] );\n\n\tconst captionRef = useRef();\n\tuseEffect( () => {\n\t\tcaptionRef.current = caption;\n\t}, [ caption ] );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent, replaceBlock } =\n\t\tuseDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\tif ( [ 'wide', 'full' ].includes( align ) ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( {\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t\taspectRatio: undefined,\n\t\t\t\tscale: undefined,\n\t\t\t} );\n\t\t}\n\t}, [ __unstableMarkNextChangeAsNotPersistent, align, setAttributes ] );\n\n\tconst {\n\t\tgetSettings,\n\t\tgetBlockRootClientId,\n\t\tgetBlockName,\n\t\tcanInsertBlockType,\n\t} = useSelect( blockEditorStore );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetAttributes( {\n\t\t\tsrc: undefined,\n\t\t\tid: undefined,\n\t\t\turl: undefined,\n\t\t\tblob: undefined,\n\t\t} );\n\t}\n\n\tfunction onSelectImagesList( images ) {\n\t\tconst win = containerRef.current?.ownerDocument.defaultView;\n\n\t\tif ( images.every( ( file ) => file instanceof win.File ) ) {\n\t\t\t/** @type {File[]} */\n\t\t\tconst files = images;\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\tif ( files.some( ( file ) => ! isValidFileType( file ) ) ) {\n\t\t\t\t// Copied from the same notice in the gallery block.\n\t\t\t\tcreateErrorNotice(\n\t\t\t\t\t__(\n\t\t\t\t\t\t'If uploading to a gallery all files need to be image formats'\n\t\t\t\t\t),\n\t\t\t\t\t{ id: 'gallery-upload-invalid-file', type: 'snackbar' }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst imageBlocks = files\n\t\t\t\t.filter( ( file ) => isValidFileType( file ) )\n\t\t\t\t.map( ( file ) =>\n\t\t\t\t\tcreateBlock( 'core/image', {\n\t\t\t\t\t\tblob: createBlobURL( file ),\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\tif ( getBlockName( rootClientId ) === 'core/gallery' ) {\n\t\t\t\treplaceBlock( clientId, imageBlocks );\n\t\t\t} else if ( canInsertBlockType( 'core/gallery', rootClientId ) ) {\n\t\t\t\tconst galleryBlock = createBlock(\n\t\t\t\t\t'core/gallery',\n\t\t\t\t\t{},\n\t\t\t\t\timageBlocks\n\t\t\t\t);\n\n\t\t\t\treplaceBlock( clientId, galleryBlock );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction onSelectImage( media ) {\n\t\tif ( Array.isArray( media ) ) {\n\t\t\tonSelectImagesList( media );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! media || ! media.url ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: undefined,\n\t\t\t\talt: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\ttitle: undefined,\n\t\t\t\tcaption: undefined,\n\t\t\t\tblob: undefined,\n\t\t\t} );\n\t\t\tsetTemporaryURL();\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetTemporaryURL( media.url );\n\t\t\treturn;\n\t\t}\n\n\t\tconst { imageDefaultSize } = getSettings();\n\n\t\t// Try to use the previous selected image size if its available\n\t\t// otherwise try the default image size or fallback to \"full\"\n\t\tlet newSize = 'full';\n\t\tif ( sizeSlug && hasSize( media, sizeSlug ) ) {\n\t\t\tnewSize = sizeSlug;\n\t\t} else if ( hasSize( media, imageDefaultSize ) ) {\n\t\t\tnewSize = imageDefaultSize;\n\t\t}\n\n\t\tlet mediaAttributes = pickRelevantMediaFiles( media, newSize );\n\n\t\t// If a caption text was meanwhile written by the user,\n\t\t// make sure the text is not overwritten by empty captions.\n\t\tif ( captionRef.current && ! mediaAttributes.caption ) {\n\t\t\tconst { caption: omittedCaption, ...restMediaAttributes } =\n\t\t\t\tmediaAttributes;\n\t\t\tmediaAttributes = restMediaAttributes;\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\tsizeSlug: newSize,\n\t\t\t};\n\t\t} else {\n\t\t\t// Keep the same url when selecting the same file, so \"Resolution\"\n\t\t\t// option is not changed.\n\t\t\tadditionalAttributes = { url };\n\t\t}\n\n\t\t// Check if default link setting should be used.\n\t\tlet linkDestination = attributes.linkDestination;\n\t\tif ( ! linkDestination ) {\n\t\t\t// Use the WordPress option to determine the proper default.\n\t\t\t// The constants used in Gutenberg do not match WP options so a little more complicated than ideal.\n\t\t\t// TODO: fix this in a follow up PR, requires updating media-text and ui component.\n\t\t\tswitch (\n\t\t\t\twindow?.wp?.media?.view?.settings?.defaultProps?.link ||\n\t\t\t\tLINK_DESTINATION_NONE\n\t\t\t) {\n\t\t\t\tcase 'file':\n\t\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_MEDIA;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'post':\n\t\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_ATTACHMENT;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_CUSTOM:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_CUSTOM;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_NONE:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_NONE;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Check if the image is linked to it's media.\n\t\tlet href;\n\t\tswitch ( linkDestination ) {\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\tsetAttributes( {\n\t\t\tblob: undefined,\n\t\t\t...mediaAttributes,\n\t\t\t...additionalAttributes,\n\t\t\tlinkDestination,\n\t\t} );\n\t\tsetTemporaryURL();\n\t}\n\n\tfunction onSelectURL( newURL ) {\n\t\tif ( newURL !== url ) {\n\t\t\tsetAttributes( {\n\t\t\t\tblob: undefined,\n\t\t\t\turl: newURL,\n\t\t\t\tid: undefined,\n\t\t\t\tsizeSlug: getSettings().imageDefaultSize,\n\t\t\t} );\n\t\t\tsetTemporaryURL();\n\t\t}\n\t}\n\n\tuseUploadMediaFromBlobURL( {\n\t\turl: temporaryURL,\n\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\tonChange: onSelectImage,\n\t\tonError: onUploadError,\n\t} );\n\n\tconst isExternal = isExternalImage( id, url );\n\tconst src = isExternal ? url : undefined;\n\tconst mediaPreview = !! url && (\n\t\t<img\n\t\t\talt={ __( 'Edit image' ) }\n\t\t\ttitle={ __( 'Edit image' ) }\n\t\t\tclassName=\"edit-image-preview\"\n\t\t\tsrc={ url }\n\t\t/>\n\t);\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst shadowProps = getShadowClassesAndStyles( attributes );\n\n\tconst classes = clsx( className, {\n\t\t'is-transient': !! temporaryURL,\n\t\t'is-resized': !! width || !! height,\n\t\t[ `size-${ sizeSlug }` ]: sizeSlug,\n\t\t'has-custom-border':\n\t\t\t!! borderProps.className ||\n\t\t\t( borderProps.style &&\n\t\t\t\tObject.keys( borderProps.style ).length > 0 ),\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tref: containerRef,\n\t\tclassName: classes,\n\t} );\n\n\t// Much of this description is duplicated from MediaPlaceholder.\n\tconst { lockUrlControls = false, lockUrlControlsMessage } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! isSingleSelected ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tconst blockBindingsSource = getBlockBindingsSource(\n\t\t\t\tmetadata?.bindings?.url?.source\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tlockUrlControls:\n\t\t\t\t\t!! metadata?.bindings?.url &&\n\t\t\t\t\t! blockBindingsSource?.canUserEditValue?.( {\n\t\t\t\t\t\tselect,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\targs: metadata?.bindings?.url?.args,\n\t\t\t\t\t} ),\n\t\t\t\tlockUrlControlsMessage: blockBindingsSource?.label\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t/* translators: %s: Label of the bindings source. */\n\t\t\t\t\t\t\t__( 'Connected to %s' ),\n\t\t\t\t\t\t\tblockBindingsSource.label\n\t\t\t\t\t )\n\t\t\t\t\t: __( 'Connected to dynamic data' ),\n\t\t\t};\n\t\t},\n\t\t[ context, isSingleSelected, metadata?.bindings?.url ]\n\t);\n\tconst placeholder = ( content ) => {\n\t\treturn (\n\t\t\t<Placeholder\n\t\t\t\tclassName={ clsx( 'block-editor-media-placeholder', {\n\t\t\t\t\t[ borderProps.className ]:\n\t\t\t\t\t\t!! borderProps.className && ! isSingleSelected,\n\t\t\t\t} ) }\n\t\t\t\ticon={\n\t\t\t\t\t! isSmallContainer &&\n\t\t\t\t\t( lockUrlControls ? pluginsIcon : icon )\n\t\t\t\t}\n\t\t\t\twithIllustration={ ! isSingleSelected || isSmallContainer }\n\t\t\t\tlabel={ ! isSmallContainer && __( 'Image' ) }\n\t\t\t\tinstructions={\n\t\t\t\t\t! lockUrlControls &&\n\t\t\t\t\t! isSmallContainer &&\n\t\t\t\t\t__(\n\t\t\t\t\t\t'Upload or drag an image file here, or pick one from your library.'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tstyle={ {\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t! ( width && height ) && aspectRatio\n\t\t\t\t\t\t\t? aspectRatio\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\twidth: height && aspectRatio ? '100%' : width,\n\t\t\t\t\theight: width && aspectRatio ? '100%' : height,\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\t...borderProps.style,\n\t\t\t\t\t...shadowProps.style,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ lockUrlControls &&\n\t\t\t\t\t! isSmallContainer &&\n\t\t\t\t\tlockUrlControlsMessage }\n\n\t\t\t\t{ ! lockUrlControls && ! isSmallContainer && content }\n\t\t\t\t{ placeholderResizeListener }\n\t\t\t</Placeholder>\n\t\t);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<figure { ...blockProps }>\n\t\t\t\t<Image\n\t\t\t\t\ttemporaryURL={ temporaryURL }\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tisSingleSelected={ isSingleSelected }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\tonSelectImage={ onSelectImage }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\tonUploadError={ onUploadError }\n\t\t\t\t\tcontext={ context }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tblockEditingMode={ blockEditingMode }\n\t\t\t\t\tparentLayoutType={ parentLayout?.type }\n\t\t\t\t\tmaxContentWidth={ maxContentWidth }\n\t\t\t\t/>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\thandleUpload={ ( files ) => files.length === 1 }\n\t\t\t\t\tvalue={ { id, src } }\n\t\t\t\t\tmediaPreview={ mediaPreview }\n\t\t\t\t\tdisableMediaButtons={ temporaryURL || url }\n\t\t\t\t/>\n\t\t\t</figure>\n\t\t\t{\n\t\t\t\t// The listener cannot be placed as the first element as it will break the in-between inserter.\n\t\t\t\t// See https://github.com/WordPress/gutenberg/blob/71134165868298fc15e22896d0c28b41b3755ff7/packages/block-editor/src/components/block-list/use-in-between-inserter.js#L120\n\t\t\t\tisSingleSelected && isMaxWidthContainerWidth && maxWidthObserver\n\t\t\t}\n\t\t</>\n\t);\n}\n\nexport default ImageEdit;\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,IAAI,MAAM,MAAM;;AAEvB;AACA;AACA;AACA,SAASC,SAAS,EAAEC,aAAa,QAAQ,iBAAiB;AAC1D,SAASC,WAAW,EAAEC,sBAAsB,QAAQ,mBAAmB;AACvE,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SACCC,SAAS,EACTC,aAAa,EACbC,gBAAgB,EAChBC,KAAK,IAAIC,gBAAgB,EACzBC,4BAA4B,IAAIC,cAAc,EAC9CC,uCAAuC,IAAIC,yBAAyB,EACpEC,mBAAmB,QACb,yBAAyB;AAChC,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,oBAAoB;AAChE,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AAC7C,SAASC,KAAK,IAAIC,IAAI,EAAEC,OAAO,IAAIC,WAAW,QAAQ,kBAAkB;AACxE,SAASf,KAAK,IAAIgB,YAAY,QAAQ,oBAAoB;AAC1D,SAASC,iBAAiB,QAAQ,oBAAoB;;AAEtD;AACA;AACA;AACA,SAASC,yBAAyB,QAAQ,gBAAgB;AAC1D,OAAOC,KAAK,MAAM,SAAS;AAC3B,SAASC,eAAe,QAAQ,SAAS;AACzC,SAASC,mBAAmB,QAAQ,0BAA0B;;AAE9D;AACA;AACA;AACA,SACCC,2BAA2B,EAC3BC,uBAAuB,EACvBC,sBAAsB,EACtBC,qBAAqB,EACrBC,mBAAmB,QACb,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAErB,OAAO,MAAMC,sBAAsB,GAAGA,CAAErB,KAAK,EAAEsB,IAAI,KAAM;EACxD,MAAMC,UAAU,GAAGC,MAAM,CAACC,WAAW,CACpCD,MAAM,CAACE,OAAO,CAAE1B,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,CAAC,CAAE,CAAC,CAAC2B,MAAM,CAAE,CAAE,CAAEC,GAAG,CAAE,KAC9C,CAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAE,CAACC,QAAQ,CAAED,GAAI,CAClD,CACD,CAAC;EAEDL,UAAU,CAACO,GAAG,GACb9B,KAAK,EAAE+B,KAAK,GAAIT,IAAI,CAAE,EAAEQ,GAAG,IAC3B9B,KAAK,EAAEgC,aAAa,EAAED,KAAK,GAAIT,IAAI,CAAE,EAAEW,UAAU,IACjDjC,KAAK,CAAC8B,GAAG;EACV,OAAOP,UAAU;AAClB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMW,eAAe,GAAGA,CAAEC,EAAE,EAAEL,GAAG,KAAMA,GAAG,IAAI,CAAEK,EAAE,IAAI,CAAEzD,SAAS,CAAEoD,GAAI,CAAC;;AAE/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASM,OAAOA,CAAEpC,KAAK,EAAEsB,IAAI,EAAG;EAAA,IAAAe,iBAAA,EAAAC,qBAAA;EAC/B,OACC,KAAK,MAAAD,iBAAA,GAAMrC,KAAK,EAAE+B,KAAK,GAAIT,IAAI,CAAE,cAAAe,iBAAA,cAAAA,iBAAA,GAAI,CAAC,CAAC,CAAE,IACzC,YAAY,MAAAC,qBAAA,GAAMtC,KAAK,EAAEgC,aAAa,EAAED,KAAK,GAAIT,IAAI,CAAE,cAAAgB,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC,CAAE;AAEjE;AAEA,OAAO,SAASC,SAASA,CAAE;EAC1BC,UAAU;EACVC,aAAa;EACbC,UAAU,EAAEC,gBAAgB;EAC5BC,SAAS;EACTC,iBAAiB;EACjBC,SAAS;EACTC,OAAO;EACPC,QAAQ;EACRC,sBAAsB,EAAEC;AACzB,CAAC,EAAG;EACH,MAAM;IACLpB,GAAG,GAAG,EAAE;IACRqB,GAAG;IACHC,OAAO;IACPjB,EAAE;IACFkB,KAAK;IACLC,MAAM;IACNC,QAAQ;IACRC,WAAW;IACXC,KAAK;IACLC,KAAK;IACLC;EACD,CAAC,GAAGnB,UAAU;EAEd,MAAM,CAAEoB,YAAY,EAAEC,eAAe,CAAE,GAAGhE,QAAQ,CAAE2C,UAAU,CAACsB,IAAK,CAAC;EAErE,MAAMC,YAAY,GAAGnE,MAAM,CAAC,CAAC;EAC7B;EACA;EACA;EACA,MAAMoE,wBAAwB,GAC7B,CAAEd,YAAY,IACZA,YAAY,CAACe,IAAI,KAAK,MAAM,IAAIf,YAAY,CAACe,IAAI,KAAK,MAAQ;EACjE,MAAM,CAAEC,gBAAgB,EAAEC,eAAe,CAAE,GAAG1D,mBAAmB,CAAC,CAAC;EAEnE,MAAM,CAAE2D,yBAAyB,EAAE;IAAEf,KAAK,EAAEgB;EAAiB,CAAC,CAAE,GAC/DhE,iBAAiB,CAAC,CAAC;EAEpB,MAAMiE,gBAAgB,GAAGD,gBAAgB,IAAIA,gBAAgB,GAAG,GAAG;EAEnE,MAAME,MAAM,GAAG3E,MAAM,CAAC,CAAC;EACvBD,SAAS,CAAE,MAAM;IAChB4E,MAAM,CAACC,OAAO,GAAGrB,GAAG;EACrB,CAAC,EAAE,CAAEA,GAAG,CAAG,CAAC;EAEZ,MAAMsB,UAAU,GAAG7E,MAAM,CAAC,CAAC;EAC3BD,SAAS,CAAE,MAAM;IAChB8E,UAAU,CAACD,OAAO,GAAGpB,OAAO;EAC7B,CAAC,EAAE,CAAEA,OAAO,CAAG,CAAC;EAEhB,MAAM;IAAEsB,uCAAuC;IAAEC;EAAa,CAAC,GAC9D5F,WAAW,CAAEM,gBAAiB,CAAC;EAEhCM,SAAS,CAAE,MAAM;IAChB,IAAK,CAAE,MAAM,EAAE,MAAM,CAAE,CAACkC,QAAQ,CAAE6B,KAAM,CAAC,EAAG;MAC3CgB,uCAAuC,CAAC,CAAC;MACzCjC,aAAa,CAAE;QACdY,KAAK,EAAEuB,SAAS;QAChBtB,MAAM,EAAEsB,SAAS;QACjBpB,WAAW,EAAEoB,SAAS;QACtBnB,KAAK,EAAEmB;MACR,CAAE,CAAC;IACJ;EACD,CAAC,EAAE,CAAEF,uCAAuC,EAAEhB,KAAK,EAAEjB,aAAa,CAAG,CAAC;EAEtE,MAAM;IACLoC,WAAW;IACXC,oBAAoB;IACpBC,YAAY;IACZC;EACD,CAAC,GAAGhG,SAAS,CAAEK,gBAAiB,CAAC;EACjC,MAAM4F,gBAAgB,GAAGvF,mBAAmB,CAAC,CAAC;EAE9C,MAAM;IAAEwF;EAAkB,CAAC,GAAGnG,WAAW,CAAEqB,YAAa,CAAC;EACzD,SAAS+E,aAAaA,CAAEC,OAAO,EAAG;IACjCF,iBAAiB,CAAEE,OAAO,EAAE;MAAEnB,IAAI,EAAE;IAAW,CAAE,CAAC;IAClDxB,aAAa,CAAE;MACd4C,GAAG,EAAET,SAAS;MACdzC,EAAE,EAAEyC,SAAS;MACb9C,GAAG,EAAE8C,SAAS;MACdd,IAAI,EAAEc;IACP,CAAE,CAAC;EACJ;EAEA,SAASU,kBAAkBA,CAAEC,MAAM,EAAG;IACrC,MAAMC,GAAG,GAAGzB,YAAY,CAACS,OAAO,EAAEiB,aAAa,CAACC,WAAW;IAE3D,IAAKH,MAAM,CAACI,KAAK,CAAIC,IAAI,IAAMA,IAAI,YAAYJ,GAAG,CAACK,IAAK,CAAC,EAAG;MAC3D;MACA,MAAMC,KAAK,GAAGP,MAAM;MACpB,MAAMQ,YAAY,GAAGjB,oBAAoB,CAAE9B,QAAS,CAAC;MAErD,IAAK8C,KAAK,CAACE,IAAI,CAAIJ,IAAI,IAAM,CAAEpF,eAAe,CAAEoF,IAAK,CAAE,CAAC,EAAG;QAC1D;QACAV,iBAAiB,CAChBpF,EAAE,CACD,8DACD,CAAC,EACD;UAAEqC,EAAE,EAAE,6BAA6B;UAAE8B,IAAI,EAAE;QAAW,CACvD,CAAC;MACF;MAEA,MAAMgC,WAAW,GAAGH,KAAK,CACvBnE,MAAM,CAAIiE,IAAI,IAAMpF,eAAe,CAAEoF,IAAK,CAAE,CAAC,CAC7CM,GAAG,CAAIN,IAAI,IACXhH,WAAW,CAAE,YAAY,EAAE;QAC1BkF,IAAI,EAAEnF,aAAa,CAAEiH,IAAK;MAC3B,CAAE,CACH,CAAC;MAEF,IAAKb,YAAY,CAAEgB,YAAa,CAAC,KAAK,cAAc,EAAG;QACtDpB,YAAY,CAAE3B,QAAQ,EAAEiD,WAAY,CAAC;MACtC,CAAC,MAAM,IAAKjB,kBAAkB,CAAE,cAAc,EAAEe,YAAa,CAAC,EAAG;QAChE,MAAMI,YAAY,GAAGvH,WAAW,CAC/B,cAAc,EACd,CAAC,CAAC,EACFqH,WACD,CAAC;QAEDtB,YAAY,CAAE3B,QAAQ,EAAEmD,YAAa,CAAC;MACvC;IACD;EACD;EAEA,SAASC,aAAaA,CAAEC,KAAK,EAAG;IAC/B,IAAKC,KAAK,CAACC,OAAO,CAAEF,KAAM,CAAC,EAAG;MAC7Bf,kBAAkB,CAAEe,KAAM,CAAC;MAC3B;IACD;IAEA,IAAK,CAAEA,KAAK,IAAI,CAAEA,KAAK,CAACvE,GAAG,EAAG;MAC7BW,aAAa,CAAE;QACdX,GAAG,EAAE8C,SAAS;QACdzB,GAAG,EAAEyB,SAAS;QACdzC,EAAE,EAAEyC,SAAS;QACb4B,KAAK,EAAE5B,SAAS;QAChBxB,OAAO,EAAEwB,SAAS;QAClBd,IAAI,EAAEc;MACP,CAAE,CAAC;MACHf,eAAe,CAAC,CAAC;MAEjB;IACD;IAEA,IAAKnF,SAAS,CAAE2H,KAAK,CAACvE,GAAI,CAAC,EAAG;MAC7B+B,eAAe,CAAEwC,KAAK,CAACvE,GAAI,CAAC;MAC5B;IACD;IAEA,MAAM;MAAE2E;IAAiB,CAAC,GAAG5B,WAAW,CAAC,CAAC;;IAE1C;IACA;IACA,IAAI6B,OAAO,GAAG,MAAM;IACpB,IAAKnD,QAAQ,IAAInB,OAAO,CAAEiE,KAAK,EAAE9C,QAAS,CAAC,EAAG;MAC7CmD,OAAO,GAAGnD,QAAQ;IACnB,CAAC,MAAM,IAAKnB,OAAO,CAAEiE,KAAK,EAAEI,gBAAiB,CAAC,EAAG;MAChDC,OAAO,GAAGD,gBAAgB;IAC3B;IAEA,IAAIE,eAAe,GAAGtF,sBAAsB,CAAEgF,KAAK,EAAEK,OAAQ,CAAC;;IAE9D;IACA;IACA,IAAKjC,UAAU,CAACD,OAAO,IAAI,CAAEmC,eAAe,CAACvD,OAAO,EAAG;MACtD,MAAM;QAAEA,OAAO,EAAEwD,cAAc;QAAE,GAAGC;MAAoB,CAAC,GACxDF,eAAe;MAChBA,eAAe,GAAGE,mBAAmB;IACtC;IAEA,IAAIC,oBAAoB;IACxB;IACA,IAAK,CAAET,KAAK,CAAClE,EAAE,IAAIkE,KAAK,CAAClE,EAAE,KAAKA,EAAE,EAAG;MACpC2E,oBAAoB,GAAG;QACtBvD,QAAQ,EAAEmD;MACX,CAAC;IACF,CAAC,MAAM;MACN;MACA;MACAI,oBAAoB,GAAG;QAAEhF;MAAI,CAAC;IAC/B;;IAEA;IACA,IAAIiF,eAAe,GAAGvE,UAAU,CAACuE,eAAe;IAChD,IAAK,CAAEA,eAAe,EAAG;MACxB;MACA;MACA;MACA,QACCC,MAAM,EAAEC,EAAE,EAAEZ,KAAK,EAAEa,IAAI,EAAEC,QAAQ,EAAEC,YAAY,EAAEC,IAAI,IACrDxG,qBAAqB;QAErB,KAAK,MAAM;QACX,KAAKD,sBAAsB;UAC1BmG,eAAe,GAAGnG,sBAAsB;UACxC;QACD,KAAK,MAAM;QACX,KAAKF,2BAA2B;UAC/BqG,eAAe,GAAGrG,2BAA2B;UAC7C;QACD,KAAKC,uBAAuB;UAC3BoG,eAAe,GAAGpG,uBAAuB;UACzC;QACD,KAAKE,qBAAqB;UACzBkG,eAAe,GAAGlG,qBAAqB;UACvC;MACF;IACD;;IAEA;IACA,IAAIyG,IAAI;IACR,QAASP,eAAe;MACvB,KAAKnG,sBAAsB;QAC1B0G,IAAI,GAAGjB,KAAK,CAACvE,GAAG;QAChB;MACD,KAAKpB,2BAA2B;QAC/B4G,IAAI,GAAGjB,KAAK,CAACgB,IAAI;QACjB;IACF;IACAV,eAAe,CAACW,IAAI,GAAGA,IAAI;IAE3B7E,aAAa,CAAE;MACdqB,IAAI,EAAEc,SAAS;MACf,GAAG+B,eAAe;MAClB,GAAGG,oBAAoB;MACvBC;IACD,CAAE,CAAC;IACHlD,eAAe,CAAC,CAAC;EAClB;EAEA,SAAS0D,WAAWA,CAAEC,MAAM,EAAG;IAC9B,IAAKA,MAAM,KAAK1F,GAAG,EAAG;MACrBW,aAAa,CAAE;QACdqB,IAAI,EAAEc,SAAS;QACf9C,GAAG,EAAE0F,MAAM;QACXrF,EAAE,EAAEyC,SAAS;QACbrB,QAAQ,EAAEsB,WAAW,CAAC,CAAC,CAAC4B;MACzB,CAAE,CAAC;MACH5C,eAAe,CAAC,CAAC;IAClB;EACD;EAEAvD,yBAAyB,CAAE;IAC1BwB,GAAG,EAAE8B,YAAY;IACjB6D,YAAY,EAAE3G,mBAAmB;IACjC4G,QAAQ,EAAEtB,aAAa;IACvBuB,OAAO,EAAExC;EACV,CAAE,CAAC;EAEH,MAAMyC,UAAU,GAAG1F,eAAe,CAAEC,EAAE,EAAEL,GAAI,CAAC;EAC7C,MAAMuD,GAAG,GAAGuC,UAAU,GAAG9F,GAAG,GAAG8C,SAAS;EACxC,MAAMiD,YAAY,GAAG,CAAC,CAAE/F,GAAG,iBAC1Bd,IAAA;IACCmC,GAAG,EAAGrD,EAAE,CAAE,YAAa,CAAG;IAC1B0G,KAAK,EAAG1G,EAAE,CAAE,YAAa,CAAG;IAC5B8C,SAAS,EAAC,oBAAoB;IAC9ByC,GAAG,EAAGvD;EAAK,CACX,CACD;EAED,MAAMgG,WAAW,GAAGvI,cAAc,CAAEiD,UAAW,CAAC;EAChD,MAAMuF,WAAW,GAAGtI,yBAAyB,CAAE+C,UAAW,CAAC;EAE3D,MAAMwF,OAAO,GAAGvJ,IAAI,CAAEmE,SAAS,EAAE;IAChC,cAAc,EAAE,CAAC,CAAEgB,YAAY;IAC/B,YAAY,EAAE,CAAC,CAAEP,KAAK,IAAI,CAAC,CAAEC,MAAM;IACnC,CAAE,QAASC,QAAQ,EAAG,GAAIA,QAAQ;IAClC,mBAAmB,EAClB,CAAC,CAAEuE,WAAW,CAAClF,SAAS,IACtBkF,WAAW,CAACG,KAAK,IAClBzG,MAAM,CAAC0G,IAAI,CAAEJ,WAAW,CAACG,KAAM,CAAC,CAACE,MAAM,GAAG;EAC7C,CAAE,CAAC;EAEH,MAAMC,UAAU,GAAGlJ,aAAa,CAAE;IACjCmJ,GAAG,EAAEtE,YAAY;IACjBnB,SAAS,EAAEoF;EACZ,CAAE,CAAC;;EAEH;EACA,MAAM;IAAEM,eAAe,GAAG,KAAK;IAAEC;EAAuB,CAAC,GAAGvJ,SAAS,CAClEwJ,MAAM,IAAM;IACb,IAAK,CAAE7F,gBAAgB,EAAG;MACzB,OAAO,CAAC,CAAC;IACV;IAEA,MAAM8F,mBAAmB,GAAG5J,sBAAsB,CACjD8E,QAAQ,EAAE+E,QAAQ,EAAE5G,GAAG,EAAE6G,MAC1B,CAAC;IAED,OAAO;MACNL,eAAe,EACd,CAAC,CAAE3E,QAAQ,EAAE+E,QAAQ,EAAE5G,GAAG,IAC1B,CAAE2G,mBAAmB,EAAEG,gBAAgB,GAAI;QAC1CJ,MAAM;QACNzF,OAAO;QACP8F,IAAI,EAAElF,QAAQ,EAAE+E,QAAQ,EAAE5G,GAAG,EAAE+G;MAChC,CAAE,CAAC;MACJN,sBAAsB,EAAEE,mBAAmB,EAAEK,KAAK,GAC/C/I,OAAO,CACP;MACAD,EAAE,CAAE,iBAAkB,CAAC,EACvB2I,mBAAmB,CAACK,KACpB,CAAC,GACDhJ,EAAE,CAAE,2BAA4B;IACpC,CAAC;EACF,CAAC,EACD,CAAEiD,OAAO,EAAEJ,gBAAgB,EAAEgB,QAAQ,EAAE+E,QAAQ,EAAE5G,GAAG,CACrD,CAAC;EACD,MAAMiH,WAAW,GAAKC,OAAO,IAAM;IAClC,oBACC9H,KAAA,CAACpC,WAAW;MACX8D,SAAS,EAAGnE,IAAI,CAAE,gCAAgC,EAAE;QACnD,CAAEqJ,WAAW,CAAClF,SAAS,GACtB,CAAC,CAAEkF,WAAW,CAAClF,SAAS,IAAI,CAAED;MAChC,CAAE,CAAG;MACL1C,IAAI,EACH,CAAEqE,gBAAgB,KAChBgE,eAAe,GAAGnI,WAAW,GAAGF,IAAI,CACtC;MACDgJ,gBAAgB,EAAG,CAAEtG,gBAAgB,IAAI2B,gBAAkB;MAC3DwE,KAAK,EAAG,CAAExE,gBAAgB,IAAIxE,EAAE,CAAE,OAAQ,CAAG;MAC7CoJ,YAAY,EACX,CAAEZ,eAAe,IACjB,CAAEhE,gBAAgB,IAClBxE,EAAE,CACD,mEACD,CACA;MACDmI,KAAK,EAAG;QACPzE,WAAW,EACV,EAAIH,KAAK,IAAIC,MAAM,CAAE,IAAIE,WAAW,GACjCA,WAAW,GACXoB,SAAS;QACbvB,KAAK,EAAEC,MAAM,IAAIE,WAAW,GAAG,MAAM,GAAGH,KAAK;QAC7CC,MAAM,EAAED,KAAK,IAAIG,WAAW,GAAG,MAAM,GAAGF,MAAM;QAC9C6F,SAAS,EAAE1F,KAAK;QAChB,GAAGqE,WAAW,CAACG,KAAK;QACpB,GAAGF,WAAW,CAACE;MAChB,CAAG;MAAAmB,QAAA,GAEDd,eAAe,IAChB,CAAEhE,gBAAgB,IAClBiE,sBAAsB,EAErB,CAAED,eAAe,IAAI,CAAEhE,gBAAgB,IAAI0E,OAAO,EAClD5E,yBAAyB;IAAA,CACf,CAAC;EAEhB,CAAC;EAED,oBACClD,KAAA,CAAAE,SAAA;IAAAgI,QAAA,gBACClI,KAAA;MAAA,GAAakH,UAAU;MAAAgB,QAAA,gBACtBpI,IAAA,CAACT,KAAK;QACLqD,YAAY,EAAGA,YAAc;QAC7BpB,UAAU,EAAGA,UAAY;QACzBC,aAAa,EAAGA,aAAe;QAC/BE,gBAAgB,EAAGA,gBAAkB;QACrCE,iBAAiB,EAAGA,iBAAmB;QACvCC,SAAS,EAAGA,SAAW;QACvBsD,aAAa,EAAGA,aAAe;QAC/BmB,WAAW,EAAGA,WAAa;QAC3BpC,aAAa,EAAGA,aAAe;QAC/BpC,OAAO,EAAGA,OAAS;QACnBC,QAAQ,EAAGA,QAAU;QACrBiC,gBAAgB,EAAGA,gBAAkB;QACrCoE,gBAAgB,EAAGnG,YAAY,EAAEe,IAAM;QACvCE,eAAe,EAAGA;MAAiB,CACnC,CAAC,eACFnD,IAAA,CAAC7B,gBAAgB;QAChBc,IAAI,eAAGe,IAAA,CAAC/B,SAAS;UAACgB,IAAI,EAAGA;QAAM,CAAE,CAAG;QACpCqJ,QAAQ,EAAGlD,aAAe;QAC1BmB,WAAW,EAAGA,WAAa;QAC3BI,OAAO,EAAGxC,aAAe;QACzB4D,WAAW,EAAGA,WAAa;QAC3BQ,MAAM,EAAC,SAAS;QAChB9B,YAAY,EAAG3G,mBAAqB;QACpC0I,YAAY,EAAK1D,KAAK,IAAMA,KAAK,CAACqC,MAAM,KAAK,CAAG;QAChDsB,KAAK,EAAG;UAAEtH,EAAE;UAAEkD;QAAI,CAAG;QACrBwC,YAAY,EAAGA,YAAc;QAC7B6B,mBAAmB,EAAG9F,YAAY,IAAI9B;MAAK,CAC3C,CAAC;IAAA,CACK,CAAC;IAER;IACA;IACAa,gBAAgB,IAAIqB,wBAAwB,IAAIE,gBAAgB;EAAA,CAEhE,CAAC;AAEL;AAEA,eAAe3B,SAAS","ignoreList":[]}
1
+ {"version":3,"names":["clsx","isBlobURL","createBlobURL","createBlock","getBlockBindingsSource","Placeholder","useDispatch","useSelect","BlockIcon","useBlockProps","MediaPlaceholder","store","blockEditorStore","__experimentalUseBorderProps","useBorderProps","__experimentalGetShadowClassesAndStyles","getShadowClassesAndStyles","useBlockEditingMode","useEffect","useRef","useState","__","sprintf","image","icon","plugins","pluginsIcon","noticesStore","useResizeObserver","useUploadMediaFromBlobURL","Image","isValidFileType","useMaxWidthObserver","LINK_DESTINATION_ATTACHMENT","LINK_DESTINATION_CUSTOM","LINK_DESTINATION_MEDIA","LINK_DESTINATION_NONE","ALLOWED_MEDIA_TYPES","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","pickRelevantMediaFiles","size","imageProps","Object","fromEntries","entries","filter","key","includes","url","sizes","media_details","source_url","isExternalImage","id","hasSize","_image$sizes$size","_image$media_details$","ImageEdit","attributes","setAttributes","isSelected","isSingleSelected","className","insertBlocksAfter","onReplace","context","clientId","__unstableParentLayout","parentLayout","alt","caption","width","height","sizeSlug","aspectRatio","scale","align","metadata","temporaryURL","setTemporaryURL","blob","containerRef","isMaxWidthContainerWidth","type","maxWidthObserver","maxContentWidth","placeholderResizeListener","placeholderWidth","isSmallContainer","altRef","current","captionRef","__unstableMarkNextChangeAsNotPersistent","replaceBlock","undefined","getSettings","getBlockRootClientId","getBlockName","canInsertBlockType","blockEditingMode","createErrorNotice","onUploadError","message","src","onSelectImagesList","images","win","ownerDocument","defaultView","every","file","File","files","rootClientId","some","imageBlocks","map","galleryBlock","onSelectImage","media","Array","isArray","title","imageDefaultSize","newSize","mediaAttributes","omittedCaption","restMediaAttributes","additionalAttributes","linkDestination","window","wp","view","settings","defaultProps","link","href","onSelectURL","newURL","allowedTypes","onChange","onError","isExternal","mediaPreview","borderProps","shadowProps","classes","style","keys","length","blockProps","ref","lockUrlControls","lockUrlControlsMessage","select","blockBindingsSource","bindings","source","canUserEditValue","args","label","placeholder","content","withIllustration","instructions","objectFit","children","parentLayoutType","onSelect","accept","handleUpload","value","disableMediaButtons"],"sources":["@wordpress/block-library/src/image/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL, createBlobURL } from '@wordpress/blob';\nimport { createBlock, getBlockBindingsSource } from '@wordpress/blocks';\nimport { Placeholder } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tBlockIcon,\n\tuseBlockProps,\n\tMediaPlaceholder,\n\tstore as blockEditorStore,\n\t__experimentalUseBorderProps as useBorderProps,\n\t__experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\nimport { useEffect, useRef, useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { image as icon, plugins as pluginsIcon } from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { useResizeObserver } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { useUploadMediaFromBlobURL } from '../utils/hooks';\nimport Image from './image';\nimport { isValidFileType } from './utils';\nimport { useMaxWidthObserver } from './use-max-width-observer';\n\n/**\n * Module constants\n */\nimport {\n\tLINK_DESTINATION_ATTACHMENT,\n\tLINK_DESTINATION_CUSTOM,\n\tLINK_DESTINATION_MEDIA,\n\tLINK_DESTINATION_NONE,\n\tALLOWED_MEDIA_TYPES,\n} from './constants';\n\nexport const pickRelevantMediaFiles = ( image, size ) => {\n\tconst imageProps = Object.fromEntries(\n\t\tObject.entries( image ?? {} ).filter( ( [ key ] ) =>\n\t\t\t[ 'alt', 'id', 'link', 'caption' ].includes( key )\n\t\t)\n\t);\n\n\timageProps.url =\n\t\timage?.sizes?.[ size ]?.url ||\n\t\timage?.media_details?.sizes?.[ size ]?.source_url ||\n\t\timage.url;\n\treturn imageProps;\n};\n\n/**\n * Is the url for the image hosted externally. An externally hosted image has no\n * id and is not a blob url.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the url an externally hosted url?\n */\nexport const isExternalImage = ( id, url ) => url && ! id && ! isBlobURL( url );\n\n/**\n * Checks if WP generated the specified image size. Size generation is skipped\n * when the image is smaller than the said size.\n *\n * @param {Object} image\n * @param {string} size\n *\n * @return {boolean} Whether or not it has default image size.\n */\nfunction hasSize( image, size ) {\n\treturn (\n\t\t'url' in ( image?.sizes?.[ size ] ?? {} ) ||\n\t\t'source_url' in ( image?.media_details?.sizes?.[ size ] ?? {} )\n\t);\n}\n\nexport function ImageEdit( {\n\tattributes,\n\tsetAttributes,\n\tisSelected: isSingleSelected,\n\tclassName,\n\tinsertBlocksAfter,\n\tonReplace,\n\tcontext,\n\tclientId,\n\t__unstableParentLayout: parentLayout,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\tsizeSlug,\n\t\taspectRatio,\n\t\tscale,\n\t\talign,\n\t\tmetadata,\n\t} = attributes;\n\n\tconst [ temporaryURL, setTemporaryURL ] = useState( attributes.blob );\n\n\tconst containerRef = useRef();\n\t// Only observe the max width from the parent container when the parent layout is not flex nor grid.\n\t// This won't work for them because the container width changes with the image.\n\t// TODO: Find a way to observe the container width for flex and grid layouts.\n\tconst isMaxWidthContainerWidth =\n\t\t! parentLayout ||\n\t\t( parentLayout.type !== 'flex' && parentLayout.type !== 'grid' );\n\tconst [ maxWidthObserver, maxContentWidth ] = useMaxWidthObserver();\n\n\tconst [ placeholderResizeListener, { width: placeholderWidth } ] =\n\t\tuseResizeObserver();\n\n\tconst isSmallContainer = placeholderWidth && placeholderWidth < 160;\n\n\tconst altRef = useRef();\n\tuseEffect( () => {\n\t\taltRef.current = alt;\n\t}, [ alt ] );\n\n\tconst captionRef = useRef();\n\tuseEffect( () => {\n\t\tcaptionRef.current = caption;\n\t}, [ caption ] );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent, replaceBlock } =\n\t\tuseDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\tif ( [ 'wide', 'full' ].includes( align ) ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( {\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t\taspectRatio: undefined,\n\t\t\t\tscale: undefined,\n\t\t\t} );\n\t\t}\n\t}, [ __unstableMarkNextChangeAsNotPersistent, align, setAttributes ] );\n\n\tconst {\n\t\tgetSettings,\n\t\tgetBlockRootClientId,\n\t\tgetBlockName,\n\t\tcanInsertBlockType,\n\t} = useSelect( blockEditorStore );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetAttributes( {\n\t\t\tsrc: undefined,\n\t\t\tid: undefined,\n\t\t\turl: undefined,\n\t\t\tblob: undefined,\n\t\t} );\n\t}\n\n\tfunction onSelectImagesList( images ) {\n\t\tconst win = containerRef.current?.ownerDocument.defaultView;\n\n\t\tif ( images.every( ( file ) => file instanceof win.File ) ) {\n\t\t\t/** @type {File[]} */\n\t\t\tconst files = images;\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\tif ( files.some( ( file ) => ! isValidFileType( file ) ) ) {\n\t\t\t\t// Copied from the same notice in the gallery block.\n\t\t\t\tcreateErrorNotice(\n\t\t\t\t\t__(\n\t\t\t\t\t\t'If uploading to a gallery all files need to be image formats'\n\t\t\t\t\t),\n\t\t\t\t\t{ id: 'gallery-upload-invalid-file', type: 'snackbar' }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst imageBlocks = files\n\t\t\t\t.filter( ( file ) => isValidFileType( file ) )\n\t\t\t\t.map( ( file ) =>\n\t\t\t\t\tcreateBlock( 'core/image', {\n\t\t\t\t\t\tblob: createBlobURL( file ),\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\tif ( getBlockName( rootClientId ) === 'core/gallery' ) {\n\t\t\t\treplaceBlock( clientId, imageBlocks );\n\t\t\t} else if ( canInsertBlockType( 'core/gallery', rootClientId ) ) {\n\t\t\t\tconst galleryBlock = createBlock(\n\t\t\t\t\t'core/gallery',\n\t\t\t\t\t{},\n\t\t\t\t\timageBlocks\n\t\t\t\t);\n\n\t\t\t\treplaceBlock( clientId, galleryBlock );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction onSelectImage( media ) {\n\t\tif ( Array.isArray( media ) ) {\n\t\t\tonSelectImagesList( media );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! media || ! media.url ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: undefined,\n\t\t\t\talt: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\ttitle: undefined,\n\t\t\t\tcaption: undefined,\n\t\t\t\tblob: undefined,\n\t\t\t} );\n\t\t\tsetTemporaryURL();\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetTemporaryURL( media.url );\n\t\t\treturn;\n\t\t}\n\n\t\tconst { imageDefaultSize } = getSettings();\n\n\t\t// Try to use the previous selected image size if its available\n\t\t// otherwise try the default image size or fallback to \"full\"\n\t\tlet newSize = 'full';\n\t\tif ( sizeSlug && hasSize( media, sizeSlug ) ) {\n\t\t\tnewSize = sizeSlug;\n\t\t} else if ( hasSize( media, imageDefaultSize ) ) {\n\t\t\tnewSize = imageDefaultSize;\n\t\t}\n\n\t\tlet mediaAttributes = pickRelevantMediaFiles( media, newSize );\n\n\t\t// If a caption text was meanwhile written by the user,\n\t\t// make sure the text is not overwritten by empty captions.\n\t\tif ( captionRef.current && ! mediaAttributes.caption ) {\n\t\t\tconst { caption: omittedCaption, ...restMediaAttributes } =\n\t\t\t\tmediaAttributes;\n\t\t\tmediaAttributes = restMediaAttributes;\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\tsizeSlug: newSize,\n\t\t\t};\n\t\t} else {\n\t\t\t// Keep the same url when selecting the same file, so \"Resolution\"\n\t\t\t// option is not changed.\n\t\t\tadditionalAttributes = { url };\n\t\t}\n\n\t\t// Check if default link setting should be used.\n\t\tlet linkDestination = attributes.linkDestination;\n\t\tif ( ! linkDestination ) {\n\t\t\t// Use the WordPress option to determine the proper default.\n\t\t\t// The constants used in Gutenberg do not match WP options so a little more complicated than ideal.\n\t\t\t// TODO: fix this in a follow up PR, requires updating media-text and ui component.\n\t\t\tswitch (\n\t\t\t\twindow?.wp?.media?.view?.settings?.defaultProps?.link ||\n\t\t\t\tLINK_DESTINATION_NONE\n\t\t\t) {\n\t\t\t\tcase 'file':\n\t\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_MEDIA;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'post':\n\t\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_ATTACHMENT;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_CUSTOM:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_CUSTOM;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_NONE:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_NONE;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Check if the image is linked to it's media.\n\t\tlet href;\n\t\tswitch ( linkDestination ) {\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\tsetAttributes( {\n\t\t\tblob: undefined,\n\t\t\t...mediaAttributes,\n\t\t\t...additionalAttributes,\n\t\t\tlinkDestination,\n\t\t} );\n\t\tsetTemporaryURL();\n\t}\n\n\tfunction onSelectURL( newURL ) {\n\t\tif ( newURL !== url ) {\n\t\t\tsetAttributes( {\n\t\t\t\tblob: undefined,\n\t\t\t\turl: newURL,\n\t\t\t\tid: undefined,\n\t\t\t\tsizeSlug: getSettings().imageDefaultSize,\n\t\t\t} );\n\t\t\tsetTemporaryURL();\n\t\t}\n\t}\n\n\tuseUploadMediaFromBlobURL( {\n\t\turl: temporaryURL,\n\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\tonChange: onSelectImage,\n\t\tonError: onUploadError,\n\t} );\n\n\tconst isExternal = isExternalImage( id, url );\n\tconst src = isExternal ? url : undefined;\n\tconst mediaPreview = !! url && (\n\t\t<img\n\t\t\talt={ __( 'Edit image' ) }\n\t\t\ttitle={ __( 'Edit image' ) }\n\t\t\tclassName=\"edit-image-preview\"\n\t\t\tsrc={ url }\n\t\t/>\n\t);\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst shadowProps = getShadowClassesAndStyles( attributes );\n\n\tconst classes = clsx( className, {\n\t\t'is-transient': !! temporaryURL,\n\t\t'is-resized': !! width || !! height,\n\t\t[ `size-${ sizeSlug }` ]: sizeSlug,\n\t\t'has-custom-border':\n\t\t\t!! borderProps.className ||\n\t\t\t( borderProps.style &&\n\t\t\t\tObject.keys( borderProps.style ).length > 0 ),\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tref: containerRef,\n\t\tclassName: classes,\n\t} );\n\n\t// Much of this description is duplicated from MediaPlaceholder.\n\tconst { lockUrlControls = false, lockUrlControlsMessage } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! isSingleSelected ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tconst blockBindingsSource = getBlockBindingsSource(\n\t\t\t\tmetadata?.bindings?.url?.source\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tlockUrlControls:\n\t\t\t\t\t!! metadata?.bindings?.url &&\n\t\t\t\t\t! blockBindingsSource?.canUserEditValue?.( {\n\t\t\t\t\t\tselect,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\targs: metadata?.bindings?.url?.args,\n\t\t\t\t\t} ),\n\t\t\t\tlockUrlControlsMessage: blockBindingsSource?.label\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t/* translators: %s: Label of the bindings source. */\n\t\t\t\t\t\t\t__( 'Connected to %s' ),\n\t\t\t\t\t\t\tblockBindingsSource.label\n\t\t\t\t\t )\n\t\t\t\t\t: __( 'Connected to dynamic data' ),\n\t\t\t};\n\t\t},\n\t\t[ context, isSingleSelected, metadata?.bindings?.url ]\n\t);\n\tconst placeholder = ( content ) => {\n\t\treturn (\n\t\t\t<Placeholder\n\t\t\t\tclassName={ clsx( 'block-editor-media-placeholder', {\n\t\t\t\t\t[ borderProps.className ]:\n\t\t\t\t\t\t!! borderProps.className && ! isSingleSelected,\n\t\t\t\t} ) }\n\t\t\t\ticon={\n\t\t\t\t\t! isSmallContainer &&\n\t\t\t\t\t( lockUrlControls ? pluginsIcon : icon )\n\t\t\t\t}\n\t\t\t\twithIllustration={ ! isSingleSelected || isSmallContainer }\n\t\t\t\tlabel={ ! isSmallContainer && __( 'Image' ) }\n\t\t\t\tinstructions={\n\t\t\t\t\t! lockUrlControls &&\n\t\t\t\t\t! isSmallContainer &&\n\t\t\t\t\t__(\n\t\t\t\t\t\t'Drag and drop an image, upload, or choose from your library.'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tstyle={ {\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t! ( width && height ) && aspectRatio\n\t\t\t\t\t\t\t? aspectRatio\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\twidth: height && aspectRatio ? '100%' : width,\n\t\t\t\t\theight: width && aspectRatio ? '100%' : height,\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\t...borderProps.style,\n\t\t\t\t\t...shadowProps.style,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ lockUrlControls &&\n\t\t\t\t\t! isSmallContainer &&\n\t\t\t\t\tlockUrlControlsMessage }\n\n\t\t\t\t{ ! lockUrlControls && ! isSmallContainer && content }\n\t\t\t\t{ placeholderResizeListener }\n\t\t\t</Placeholder>\n\t\t);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<figure { ...blockProps }>\n\t\t\t\t<Image\n\t\t\t\t\ttemporaryURL={ temporaryURL }\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tisSingleSelected={ isSingleSelected }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\tonSelectImage={ onSelectImage }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\tonUploadError={ onUploadError }\n\t\t\t\t\tcontext={ context }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tblockEditingMode={ blockEditingMode }\n\t\t\t\t\tparentLayoutType={ parentLayout?.type }\n\t\t\t\t\tmaxContentWidth={ maxContentWidth }\n\t\t\t\t/>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\thandleUpload={ ( files ) => files.length === 1 }\n\t\t\t\t\tvalue={ { id, src } }\n\t\t\t\t\tmediaPreview={ mediaPreview }\n\t\t\t\t\tdisableMediaButtons={ temporaryURL || url }\n\t\t\t\t/>\n\t\t\t</figure>\n\t\t\t{\n\t\t\t\t// The listener cannot be placed as the first element as it will break the in-between inserter.\n\t\t\t\t// See https://github.com/WordPress/gutenberg/blob/71134165868298fc15e22896d0c28b41b3755ff7/packages/block-editor/src/components/block-list/use-in-between-inserter.js#L120\n\t\t\t\tisSingleSelected && isMaxWidthContainerWidth && maxWidthObserver\n\t\t\t}\n\t\t</>\n\t);\n}\n\nexport default ImageEdit;\n"],"mappings":"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","ignoreList":[]}
@@ -2,18 +2,17 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { isBlobURL } from '@wordpress/blob';
5
- import { ExternalLink, ResizableBox, Spinner, TextareaControl, TextControl, ToolbarButton, ToolbarGroup, Dropdown, __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem, __experimentalUseCustomUnits as useCustomUnits, Placeholder } from '@wordpress/components';
5
+ import { ExternalLink, ResizableBox, Spinner, TextareaControl, TextControl, ToolbarButton, ToolbarGroup, __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem, __experimentalUseCustomUnits as useCustomUnits, Placeholder, MenuItem, ToolbarItem, DropdownMenu, Popover } from '@wordpress/components';
6
6
  import { useViewportMatch } from '@wordpress/compose';
7
7
  import { useSelect, useDispatch } from '@wordpress/data';
8
- import { BlockControls, InspectorControls, __experimentalImageURLInputUI as ImageURLInputUI, MediaReplaceFlow, store as blockEditorStore, useSettings, __experimentalImageEditor as ImageEditor, __experimentalUseBorderProps as useBorderProps, __experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles, privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
8
+ import { BlockControls, InspectorControls, __experimentalImageURLInputUI as ImageURLInputUI, MediaReplaceFlow, store as blockEditorStore, useSettings, __experimentalImageEditor as ImageEditor, __experimentalUseBorderProps as useBorderProps, __experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles, privateApis as blockEditorPrivateApis, BlockSettingsMenuControls } from '@wordpress/block-editor';
9
9
  import { useEffect, useMemo, useState, useRef } from '@wordpress/element';
10
10
  import { __, _x, sprintf, isRTL } from '@wordpress/i18n';
11
- import { DOWN } from '@wordpress/keycodes';
12
11
  import { getFilename } from '@wordpress/url';
13
12
  import { getBlockBindingsSource, switchToBlockType } from '@wordpress/blocks';
14
- import { crop, overlayText, upload } from '@wordpress/icons';
13
+ import { crop, overlayText, upload, chevronDown } from '@wordpress/icons';
15
14
  import { store as noticesStore } from '@wordpress/notices';
16
- import { store as coreStore } from '@wordpress/core-data';
15
+ import { store as coreStore, useEntityProp } from '@wordpress/core-data';
17
16
 
18
17
  /**
19
18
  * Internal dependencies
@@ -29,7 +28,7 @@ import { Caption } from '../utils/caption';
29
28
  import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
30
29
  import { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';
31
30
  import { evalAspectRatio } from './utils';
32
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
31
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
33
32
  const {
34
33
  DimensionsTool,
35
34
  ResolutionTool
@@ -43,6 +42,9 @@ const scaleOptions = [{
43
42
  label: _x('Contain', 'Scale option for dimensions control'),
44
43
  help: __('Image is contained without distortion.')
45
44
  }];
45
+ const WRITEMODE_POPOVER_PROPS = {
46
+ placement: 'bottom-start'
47
+ };
46
48
 
47
49
  // If the image has a href, wrap in an <a /> tag to trigger any inherited link element styles.
48
50
  const ImageWrapper = ({
@@ -68,6 +70,111 @@ const ImageWrapper = ({
68
70
  children: children
69
71
  });
70
72
  };
73
+ function ContentOnlyControls({
74
+ attributes,
75
+ setAttributes,
76
+ lockAltControls,
77
+ lockAltControlsMessage,
78
+ lockTitleControls,
79
+ lockTitleControlsMessage
80
+ }) {
81
+ // Use internal state instead of a ref to make sure that the component
82
+ // re-renders when the popover's anchor updates.
83
+ const [popoverAnchor, setPopoverAnchor] = useState(null);
84
+ const [isAltDialogOpen, setIsAltDialogOpen] = useState(false);
85
+ const [isTitleDialogOpen, setIsTitleDialogOpen] = useState(false);
86
+ return /*#__PURE__*/_jsxs(_Fragment, {
87
+ children: [/*#__PURE__*/_jsx(ToolbarItem, {
88
+ ref: setPopoverAnchor,
89
+ children: toggleProps => /*#__PURE__*/_jsx(DropdownMenu, {
90
+ icon: chevronDown
91
+ /* translators: button label text should, if possible, be under 16 characters. */,
92
+ label: __('More'),
93
+ toggleProps: {
94
+ ...toggleProps,
95
+ description: __('Displays more controls.')
96
+ },
97
+ popoverProps: WRITEMODE_POPOVER_PROPS,
98
+ children: ({
99
+ onClose
100
+ }) => /*#__PURE__*/_jsxs(_Fragment, {
101
+ children: [/*#__PURE__*/_jsx(MenuItem, {
102
+ onClick: () => {
103
+ setIsAltDialogOpen(true);
104
+ onClose();
105
+ },
106
+ "aria-haspopup": "dialog",
107
+ children: _x('Alternative text', 'Alternative text for an image. Block toolbar label, a low character count is preferred.')
108
+ }), /*#__PURE__*/_jsx(MenuItem, {
109
+ onClick: () => {
110
+ setIsTitleDialogOpen(true);
111
+ onClose();
112
+ },
113
+ "aria-haspopup": "dialog",
114
+ children: __('Title text')
115
+ })]
116
+ })
117
+ })
118
+ }), isAltDialogOpen && /*#__PURE__*/_jsx(Popover, {
119
+ placement: "bottom-start",
120
+ anchor: popoverAnchor,
121
+ onClose: () => setIsAltDialogOpen(false),
122
+ offset: 13,
123
+ variant: "toolbar",
124
+ children: /*#__PURE__*/_jsx("div", {
125
+ className: "wp-block-image__toolbar_content_textarea__container",
126
+ children: /*#__PURE__*/_jsx(TextareaControl, {
127
+ className: "wp-block-image__toolbar_content_textarea",
128
+ label: __('Alternative text'),
129
+ value: attributes.alt || '',
130
+ onChange: value => setAttributes({
131
+ alt: value
132
+ }),
133
+ disabled: lockAltControls,
134
+ help: lockAltControls ? /*#__PURE__*/_jsx(_Fragment, {
135
+ children: lockAltControlsMessage
136
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
137
+ children: [/*#__PURE__*/_jsx(ExternalLink, {
138
+ href:
139
+ // translators: Localized tutorial, if one exists. W3C Web Accessibility Initiative link has list of existing translations.
140
+ __('https://www.w3.org/WAI/tutorials/images/decision-tree/'),
141
+ children: __('Describe the purpose of the image.')
142
+ }), /*#__PURE__*/_jsx("br", {}), __('Leave empty if decorative.')]
143
+ }),
144
+ __nextHasNoMarginBottom: true
145
+ })
146
+ })
147
+ }), isTitleDialogOpen && /*#__PURE__*/_jsx(Popover, {
148
+ placement: "bottom-start",
149
+ anchor: popoverAnchor,
150
+ onClose: () => setIsTitleDialogOpen(false),
151
+ offset: 13,
152
+ variant: "toolbar",
153
+ children: /*#__PURE__*/_jsx("div", {
154
+ className: "wp-block-image__toolbar_content_textarea__container",
155
+ children: /*#__PURE__*/_jsx(TextControl, {
156
+ __next40pxDefaultSize: true,
157
+ className: "wp-block-image__toolbar_content_textarea",
158
+ __nextHasNoMarginBottom: true,
159
+ label: __('Title attribute'),
160
+ value: attributes.title || '',
161
+ onChange: value => setAttributes({
162
+ title: value
163
+ }),
164
+ disabled: lockTitleControls,
165
+ help: lockTitleControls ? /*#__PURE__*/_jsx(_Fragment, {
166
+ children: lockTitleControlsMessage
167
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
168
+ children: [__('Describe the role of this image on the page.'), /*#__PURE__*/_jsx(ExternalLink, {
169
+ href: "https://www.w3.org/TR/html52/dom.html#the-title-attribute",
170
+ children: __('(Note: many devices and browsers do not display this text.)')
171
+ })]
172
+ })
173
+ })
174
+ })
175
+ })]
176
+ });
177
+ }
71
178
  export default function Image({
72
179
  temporaryURL,
73
180
  attributes,
@@ -512,82 +619,16 @@ export default function Image({
512
619
  // Add some extra controls for content attributes when content only mode is active.
513
620
  // With content only mode active, the inspector is hidden, so users need another way
514
621
  // to edit these attributes.
515
- _jsxs(BlockControls, {
516
- group: "other",
517
- children: [/*#__PURE__*/_jsx(Dropdown, {
518
- popoverProps: {
519
- position: 'bottom right'
520
- },
521
- renderToggle: ({
522
- isOpen,
523
- onToggle
524
- }) => /*#__PURE__*/_jsx(ToolbarButton, {
525
- onClick: onToggle,
526
- "aria-haspopup": "true",
527
- "aria-expanded": isOpen,
528
- onKeyDown: event => {
529
- if (!isOpen && event.keyCode === DOWN) {
530
- event.preventDefault();
531
- onToggle();
532
- }
533
- },
534
- children: _x('Alternative text', 'Alternative text for an image. Block toolbar label, a low character count is preferred.')
535
- }),
536
- renderContent: () => /*#__PURE__*/_jsx(TextareaControl, {
537
- className: "wp-block-image__toolbar_content_textarea",
538
- label: __('Alternative text'),
539
- value: alt || '',
540
- onChange: updateAlt,
541
- disabled: lockAltControls,
542
- help: lockAltControls ? /*#__PURE__*/_jsx(_Fragment, {
543
- children: lockAltControlsMessage
544
- }) : /*#__PURE__*/_jsxs(_Fragment, {
545
- children: [/*#__PURE__*/_jsx(ExternalLink, {
546
- href:
547
- // translators: Localized tutorial, if one exists. W3C Web Accessibility Initiative link has list of existing translations.
548
- __('https://www.w3.org/WAI/tutorials/images/decision-tree/'),
549
- children: __('Describe the purpose of the image.')
550
- }), /*#__PURE__*/_jsx("br", {}), __('Leave empty if decorative.')]
551
- }),
552
- __nextHasNoMarginBottom: true
553
- })
554
- }), title && /*#__PURE__*/_jsx(Dropdown, {
555
- popoverProps: {
556
- position: 'bottom right'
557
- },
558
- renderToggle: ({
559
- isOpen,
560
- onToggle
561
- }) => /*#__PURE__*/_jsx(ToolbarButton, {
562
- onClick: onToggle,
563
- "aria-haspopup": "true",
564
- "aria-expanded": isOpen,
565
- onKeyDown: event => {
566
- if (!isOpen && event.keyCode === DOWN) {
567
- event.preventDefault();
568
- onToggle();
569
- }
570
- },
571
- children: __('Title')
572
- }),
573
- renderContent: () => /*#__PURE__*/_jsx(TextControl, {
574
- __next40pxDefaultSize: true,
575
- className: "wp-block-image__toolbar_content_textarea",
576
- __nextHasNoMarginBottom: true,
577
- label: __('Title attribute'),
578
- value: title || '',
579
- onChange: onSetTitle,
580
- disabled: lockTitleControls,
581
- help: lockTitleControls ? /*#__PURE__*/_jsx(_Fragment, {
582
- children: lockTitleControlsMessage
583
- }) : /*#__PURE__*/_jsxs(_Fragment, {
584
- children: [__('Describe the role of this image on the page.'), /*#__PURE__*/_jsx(ExternalLink, {
585
- href: "https://www.w3.org/TR/html52/dom.html#the-title-attribute",
586
- children: __('(Note: many devices and browsers do not display this text.)')
587
- })]
588
- })
589
- })
590
- })]
622
+ _jsx(BlockControls, {
623
+ group: "block",
624
+ children: /*#__PURE__*/_jsx(ContentOnlyControls, {
625
+ attributes: attributes,
626
+ setAttributes: setAttributes,
627
+ lockAltControls: lockAltControls,
628
+ lockAltControlsMessage: lockAltControlsMessage,
629
+ lockTitleControls: lockTitleControls,
630
+ lockTitleControlsMessage: lockTitleControlsMessage
631
+ })
591
632
  }), /*#__PURE__*/_jsx(InspectorControls, {
592
633
  children: /*#__PURE__*/_jsxs(ToolsPanel, {
593
634
  label: __('Settings'),
@@ -656,6 +697,13 @@ export default function Image({
656
697
  const borderProps = useBorderProps(attributes);
657
698
  const shadowProps = getShadowClassesAndStyles(attributes);
658
699
  const isRounded = attributes.className?.includes('is-style-rounded');
700
+ const {
701
+ postType,
702
+ postId,
703
+ queryId
704
+ } = context;
705
+ const isDescendentOfQueryLoop = Number.isFinite(queryId);
706
+ const [, setFeaturedImage] = useEntityProp('postType', postType, 'featured_media', postId);
659
707
  let img = temporaryURL && hasImageErrored ?
660
708
  /*#__PURE__*/
661
709
  // Show a placeholder during upload when the blob URL can't be loaded. This can
@@ -825,8 +873,26 @@ export default function Image({
825
873
  children: [mediaReplaceFlow, metadata?.bindings ? controls : sizeControls]
826
874
  });
827
875
  }
876
+
877
+ /**
878
+ * Set the post's featured image with the current image.
879
+ */
880
+ const setPostFeatureImage = () => {
881
+ setFeaturedImage(id);
882
+ createSuccessNotice(__('Post featured image updated.'), {
883
+ type: 'snackbar'
884
+ });
885
+ };
886
+ const featuredImageControl = /*#__PURE__*/_jsx(BlockSettingsMenuControls, {
887
+ children: ({
888
+ selectedClientIds
889
+ }) => selectedClientIds.length === 1 && !isDescendentOfQueryLoop && postId && id && clientId === selectedClientIds[0] && /*#__PURE__*/_jsx(MenuItem, {
890
+ onClick: setPostFeatureImage,
891
+ children: __('Set featured image')
892
+ })
893
+ });
828
894
  return /*#__PURE__*/_jsxs(_Fragment, {
829
- children: [mediaReplaceFlow, controls, img, /*#__PURE__*/_jsx(Caption, {
895
+ children: [mediaReplaceFlow, controls, featuredImageControl, img, /*#__PURE__*/_jsx(Caption, {
830
896
  attributes: attributes,
831
897
  setAttributes: setAttributes,
832
898
  isSelected: isSingleSelected,