@wordpress/block-library 9.6.1 → 9.7.1-next.5368f64a9.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 (409) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/archives/edit.js +1 -1
  3. package/build/archives/edit.js.map +1 -1
  4. package/build/audio/edit.js +2 -1
  5. package/build/audio/edit.js.map +1 -1
  6. package/build/block/edit.js +5 -8
  7. package/build/block/edit.js.map +1 -1
  8. package/build/button/edit.js +1 -1
  9. package/build/button/edit.js.map +1 -1
  10. package/build/buttons/index.js +1 -1
  11. package/build/categories/index.js +1 -0
  12. package/build/categories/index.js.map +1 -1
  13. package/build/comment-edit-link/index.js +13 -2
  14. package/build/comment-edit-link/index.js.map +1 -1
  15. package/build/comment-reply-link/index.js +13 -2
  16. package/build/comment-reply-link/index.js.map +1 -1
  17. package/build/comments/edit/comments-legacy.js +1 -0
  18. package/build/comments/edit/comments-legacy.js.map +1 -1
  19. package/build/cover/deprecated.js +1 -1
  20. package/build/cover/deprecated.js.map +1 -1
  21. package/build/cover/edit/block-controls.js +4 -2
  22. package/build/cover/edit/block-controls.js.map +1 -1
  23. package/build/cover/edit/index.js +6 -3
  24. package/build/cover/edit/index.js.map +1 -1
  25. package/build/cover/edit/inspector-controls.js +4 -12
  26. package/build/cover/edit/inspector-controls.js.map +1 -1
  27. package/build/details/index.js +3 -1
  28. package/build/details/index.js.map +1 -1
  29. package/build/details/transforms.js +24 -0
  30. package/build/details/transforms.js.map +1 -0
  31. package/build/embed/edit.js +5 -11
  32. package/build/embed/edit.js.map +1 -1
  33. package/build/embed/embed-placeholder.js +2 -0
  34. package/build/embed/embed-placeholder.js.map +1 -1
  35. package/build/embed/embed-preview.js +16 -4
  36. package/build/embed/embed-preview.js.map +1 -1
  37. package/build/file/edit.js +12 -1
  38. package/build/file/edit.js.map +1 -1
  39. package/build/file/transforms.js +18 -4
  40. package/build/file/transforms.js.map +1 -1
  41. package/build/freeform/edit.js +4 -4
  42. package/build/freeform/edit.js.map +1 -1
  43. package/build/freeform/modal.js +3 -0
  44. package/build/freeform/modal.js.map +1 -1
  45. package/build/home-link/edit.js +3 -9
  46. package/build/home-link/edit.js.map +1 -1
  47. package/build/image/edit.js +95 -45
  48. package/build/image/edit.js.map +1 -1
  49. package/build/image/image.js +39 -24
  50. package/build/image/image.js.map +1 -1
  51. package/build/image/transforms.js +0 -13
  52. package/build/image/transforms.js.map +1 -1
  53. package/build/image/use-max-width-observer.js +35 -0
  54. package/build/image/use-max-width-observer.js.map +1 -0
  55. package/build/image/utils.js +11 -0
  56. package/build/image/utils.js.map +1 -1
  57. package/build/latest-posts/edit.js +1 -1
  58. package/build/latest-posts/edit.js.map +1 -1
  59. package/build/media-text/deprecated.js +144 -3
  60. package/build/media-text/deprecated.js.map +1 -1
  61. package/build/media-text/edit.js +5 -5
  62. package/build/media-text/edit.js.map +1 -1
  63. package/build/media-text/image-fill.js +12 -0
  64. package/build/media-text/image-fill.js.map +1 -0
  65. package/build/media-text/media-container.js +21 -18
  66. package/build/media-text/media-container.js.map +1 -1
  67. package/build/media-text/media-container.native.js +0 -7
  68. package/build/media-text/media-container.native.js.map +1 -1
  69. package/build/media-text/save.js +5 -6
  70. package/build/media-text/save.js.map +1 -1
  71. package/build/missing/edit.js +3 -2
  72. package/build/missing/edit.js.map +1 -1
  73. package/build/navigation/edit/deleted-navigation-warning.js +14 -7
  74. package/build/navigation/edit/deleted-navigation-warning.js.map +1 -1
  75. package/build/navigation/edit/index.js +1 -0
  76. package/build/navigation/edit/index.js.map +1 -1
  77. package/build/navigation/edit/menu-inspector-controls.js +2 -1
  78. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  79. package/build/navigation/edit/navigation-menu-delete-control.js +1 -0
  80. package/build/navigation/edit/navigation-menu-delete-control.js.map +1 -1
  81. package/build/navigation/edit/placeholder/index.js +1 -0
  82. package/build/navigation/edit/placeholder/index.js.map +1 -1
  83. package/build/navigation/edit/responsive-wrapper.js +2 -0
  84. package/build/navigation/edit/responsive-wrapper.js.map +1 -1
  85. package/build/navigation/edit/unsaved-inner-blocks.js +4 -4
  86. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  87. package/build/navigation-link/link-ui.js +2 -1
  88. package/build/navigation-link/link-ui.js.map +1 -1
  89. package/build/page-list/convert-to-links-modal.js +2 -0
  90. package/build/page-list/convert-to-links-modal.js.map +1 -1
  91. package/build/page-list/edit.js +4 -1
  92. package/build/page-list/edit.js.map +1 -1
  93. package/build/post-comments-form/form.js +1 -0
  94. package/build/post-comments-form/form.js.map +1 -1
  95. package/build/post-featured-image/dimension-controls.js +6 -8
  96. package/build/post-featured-image/dimension-controls.js.map +1 -1
  97. package/build/post-featured-image/edit.js +2 -4
  98. package/build/post-featured-image/edit.js.map +1 -1
  99. package/build/post-title/index.js +4 -1
  100. package/build/post-title/index.js.map +1 -1
  101. package/build/query/edit/enhanced-pagination-modal.js +3 -2
  102. package/build/query/edit/enhanced-pagination-modal.js.map +1 -1
  103. package/build/query/edit/inspector-controls/enhanced-pagination-control.js +3 -3
  104. package/build/query/edit/inspector-controls/enhanced-pagination-control.js.map +1 -1
  105. package/build/query/edit/inspector-controls/index.js +2 -10
  106. package/build/query/edit/inspector-controls/index.js.map +1 -1
  107. package/build/query/edit/query-content.js +9 -3
  108. package/build/query/edit/query-content.js.map +1 -1
  109. package/build/query/edit/query-placeholder.js +2 -0
  110. package/build/query/edit/query-placeholder.js.map +1 -1
  111. package/build/site-logo/edit.js +9 -13
  112. package/build/site-logo/edit.js.map +1 -1
  113. package/build/site-title/index.js +4 -1
  114. package/build/site-title/index.js.map +1 -1
  115. package/build/social-link/edit.js +4 -1
  116. package/build/social-link/edit.js.map +1 -1
  117. package/build/social-links/edit.js +10 -9
  118. package/build/social-links/edit.js.map +1 -1
  119. package/build/template-part/edit/advanced-controls.js.map +1 -1
  120. package/build/template-part/edit/index.js +1 -1
  121. package/build/template-part/edit/index.js.map +1 -1
  122. package/build/template-part/edit/inner-blocks.js +10 -1
  123. package/build/template-part/edit/inner-blocks.js.map +1 -1
  124. package/build/template-part/edit/placeholder.js +2 -0
  125. package/build/template-part/edit/placeholder.js.map +1 -1
  126. package/build/utils/hooks.js +10 -10
  127. package/build/utils/hooks.js.map +1 -1
  128. package/build/video/edit.js +16 -12
  129. package/build/video/edit.js.map +1 -1
  130. package/build/video/tracks-editor.js +3 -0
  131. package/build/video/tracks-editor.js.map +1 -1
  132. package/build-module/archives/edit.js +1 -1
  133. package/build-module/archives/edit.js.map +1 -1
  134. package/build-module/audio/edit.js +2 -1
  135. package/build-module/audio/edit.js.map +1 -1
  136. package/build-module/block/edit.js +6 -9
  137. package/build-module/block/edit.js.map +1 -1
  138. package/build-module/button/edit.js +1 -1
  139. package/build-module/button/edit.js.map +1 -1
  140. package/build-module/buttons/index.js +1 -1
  141. package/build-module/categories/index.js +1 -0
  142. package/build-module/categories/index.js.map +1 -1
  143. package/build-module/comment-edit-link/index.js +13 -2
  144. package/build-module/comment-edit-link/index.js.map +1 -1
  145. package/build-module/comment-reply-link/index.js +13 -2
  146. package/build-module/comment-reply-link/index.js.map +1 -1
  147. package/build-module/comments/edit/comments-legacy.js +1 -0
  148. package/build-module/comments/edit/comments-legacy.js.map +1 -1
  149. package/build-module/cover/deprecated.js +1 -1
  150. package/build-module/cover/deprecated.js.map +1 -1
  151. package/build-module/cover/edit/block-controls.js +4 -2
  152. package/build-module/cover/edit/block-controls.js.map +1 -1
  153. package/build-module/cover/edit/index.js +6 -3
  154. package/build-module/cover/edit/index.js.map +1 -1
  155. package/build-module/cover/edit/inspector-controls.js +5 -13
  156. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  157. package/build-module/details/index.js +3 -1
  158. package/build-module/details/index.js.map +1 -1
  159. package/build-module/details/transforms.js +18 -0
  160. package/build-module/details/transforms.js.map +1 -0
  161. package/build-module/embed/edit.js +6 -12
  162. package/build-module/embed/edit.js.map +1 -1
  163. package/build-module/embed/embed-placeholder.js +2 -0
  164. package/build-module/embed/embed-placeholder.js.map +1 -1
  165. package/build-module/embed/embed-preview.js +16 -4
  166. package/build-module/embed/embed-preview.js.map +1 -1
  167. package/build-module/file/edit.js +12 -1
  168. package/build-module/file/edit.js.map +1 -1
  169. package/build-module/file/transforms.js +18 -4
  170. package/build-module/file/transforms.js.map +1 -1
  171. package/build-module/freeform/edit.js +4 -4
  172. package/build-module/freeform/edit.js.map +1 -1
  173. package/build-module/freeform/modal.js +3 -0
  174. package/build-module/freeform/modal.js.map +1 -1
  175. package/build-module/home-link/edit.js +3 -9
  176. package/build-module/home-link/edit.js.map +1 -1
  177. package/build-module/image/edit.js +99 -48
  178. package/build-module/image/edit.js.map +1 -1
  179. package/build-module/image/image.js +40 -25
  180. package/build-module/image/image.js.map +1 -1
  181. package/build-module/image/transforms.js +0 -13
  182. package/build-module/image/transforms.js.map +1 -1
  183. package/build-module/image/use-max-width-observer.js +29 -0
  184. package/build-module/image/use-max-width-observer.js.map +1 -0
  185. package/build-module/image/utils.js +11 -1
  186. package/build-module/image/utils.js.map +1 -1
  187. package/build-module/latest-posts/edit.js +1 -1
  188. package/build-module/latest-posts/edit.js.map +1 -1
  189. package/build-module/media-text/deprecated.js +144 -3
  190. package/build-module/media-text/deprecated.js.map +1 -1
  191. package/build-module/media-text/edit.js +5 -5
  192. package/build-module/media-text/edit.js.map +1 -1
  193. package/build-module/media-text/image-fill.js +6 -0
  194. package/build-module/media-text/image-fill.js.map +1 -0
  195. package/build-module/media-text/media-container.js +21 -17
  196. package/build-module/media-text/media-container.js.map +1 -1
  197. package/build-module/media-text/media-container.native.js +0 -1
  198. package/build-module/media-text/media-container.native.js.map +1 -1
  199. package/build-module/media-text/save.js +5 -6
  200. package/build-module/media-text/save.js.map +1 -1
  201. package/build-module/missing/edit.js +3 -2
  202. package/build-module/missing/edit.js.map +1 -1
  203. package/build-module/navigation/edit/deleted-navigation-warning.js +15 -8
  204. package/build-module/navigation/edit/deleted-navigation-warning.js.map +1 -1
  205. package/build-module/navigation/edit/index.js +1 -0
  206. package/build-module/navigation/edit/index.js.map +1 -1
  207. package/build-module/navigation/edit/menu-inspector-controls.js +2 -1
  208. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  209. package/build-module/navigation/edit/navigation-menu-delete-control.js +1 -0
  210. package/build-module/navigation/edit/navigation-menu-delete-control.js.map +1 -1
  211. package/build-module/navigation/edit/placeholder/index.js +1 -0
  212. package/build-module/navigation/edit/placeholder/index.js.map +1 -1
  213. package/build-module/navigation/edit/responsive-wrapper.js +2 -0
  214. package/build-module/navigation/edit/responsive-wrapper.js.map +1 -1
  215. package/build-module/navigation/edit/unsaved-inner-blocks.js +4 -4
  216. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  217. package/build-module/navigation-link/link-ui.js +4 -3
  218. package/build-module/navigation-link/link-ui.js.map +1 -1
  219. package/build-module/page-list/convert-to-links-modal.js +2 -0
  220. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  221. package/build-module/page-list/edit.js +4 -1
  222. package/build-module/page-list/edit.js.map +1 -1
  223. package/build-module/post-comments-form/form.js +1 -0
  224. package/build-module/post-comments-form/form.js.map +1 -1
  225. package/build-module/post-featured-image/dimension-controls.js +6 -8
  226. package/build-module/post-featured-image/dimension-controls.js.map +1 -1
  227. package/build-module/post-featured-image/edit.js +3 -5
  228. package/build-module/post-featured-image/edit.js.map +1 -1
  229. package/build-module/post-title/index.js +4 -1
  230. package/build-module/post-title/index.js.map +1 -1
  231. package/build-module/query/edit/enhanced-pagination-modal.js +3 -2
  232. package/build-module/query/edit/enhanced-pagination-modal.js.map +1 -1
  233. package/build-module/query/edit/inspector-controls/enhanced-pagination-control.js +3 -3
  234. package/build-module/query/edit/inspector-controls/enhanced-pagination-control.js.map +1 -1
  235. package/build-module/query/edit/inspector-controls/index.js +2 -10
  236. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  237. package/build-module/query/edit/query-content.js +10 -4
  238. package/build-module/query/edit/query-content.js.map +1 -1
  239. package/build-module/query/edit/query-placeholder.js +2 -0
  240. package/build-module/query/edit/query-placeholder.js.map +1 -1
  241. package/build-module/site-logo/edit.js +10 -14
  242. package/build-module/site-logo/edit.js.map +1 -1
  243. package/build-module/site-title/index.js +4 -1
  244. package/build-module/site-title/index.js.map +1 -1
  245. package/build-module/social-link/edit.js +4 -1
  246. package/build-module/social-link/edit.js.map +1 -1
  247. package/build-module/social-links/edit.js +11 -10
  248. package/build-module/social-links/edit.js.map +1 -1
  249. package/build-module/template-part/edit/advanced-controls.js.map +1 -1
  250. package/build-module/template-part/edit/index.js +1 -1
  251. package/build-module/template-part/edit/index.js.map +1 -1
  252. package/build-module/template-part/edit/inner-blocks.js +10 -1
  253. package/build-module/template-part/edit/inner-blocks.js.map +1 -1
  254. package/build-module/template-part/edit/placeholder.js +2 -0
  255. package/build-module/template-part/edit/placeholder.js.map +1 -1
  256. package/build-module/utils/hooks.js +10 -10
  257. package/build-module/utils/hooks.js.map +1 -1
  258. package/build-module/video/edit.js +16 -13
  259. package/build-module/video/edit.js.map +1 -1
  260. package/build-module/video/tracks-editor.js +3 -0
  261. package/build-module/video/tracks-editor.js.map +1 -1
  262. package/build-style/button/editor-rtl.css +0 -4
  263. package/build-style/button/editor.css +0 -4
  264. package/build-style/buttons/editor-rtl.css +2 -5
  265. package/build-style/buttons/editor.css +2 -5
  266. package/build-style/buttons/style-rtl.css +2 -2
  267. package/build-style/buttons/style.css +2 -2
  268. package/build-style/comment-edit-link/style-rtl.css +94 -0
  269. package/build-style/comment-edit-link/style.css +94 -0
  270. package/build-style/comment-reply-link/style-rtl.css +94 -0
  271. package/build-style/comment-reply-link/style.css +94 -0
  272. package/build-style/comments-pagination/editor-rtl.css +2 -2
  273. package/build-style/comments-pagination/editor.css +2 -2
  274. package/build-style/common-rtl.css +2 -2
  275. package/build-style/common.css +2 -2
  276. package/build-style/cover/editor-rtl.css +0 -6
  277. package/build-style/cover/editor.css +0 -6
  278. package/build-style/editor-rtl.css +35 -99
  279. package/build-style/editor.css +35 -101
  280. package/build-style/group/editor-rtl.css +0 -1
  281. package/build-style/group/editor.css +0 -1
  282. package/build-style/image/editor-rtl.css +6 -27
  283. package/build-style/image/editor.css +6 -27
  284. package/build-style/media-text/editor-rtl.css +3 -1
  285. package/build-style/media-text/editor.css +3 -1
  286. package/build-style/media-text/style-rtl.css +20 -0
  287. package/build-style/media-text/style.css +20 -0
  288. package/build-style/navigation/editor-rtl.css +1 -2
  289. package/build-style/navigation/editor.css +1 -2
  290. package/build-style/post-featured-image/style-rtl.css +1 -1
  291. package/build-style/post-featured-image/style.css +1 -1
  292. package/build-style/post-title/style-rtl.css +21 -0
  293. package/build-style/post-title/style.css +21 -0
  294. package/build-style/query-pagination/editor-rtl.css +2 -16
  295. package/build-style/query-pagination/editor.css +2 -18
  296. package/build-style/query-pagination/style-rtl.css +0 -11
  297. package/build-style/query-pagination/style.css +0 -13
  298. package/build-style/site-title/editor-rtl.css +0 -4
  299. package/build-style/site-title/editor.css +0 -4
  300. package/build-style/site-title/style-rtl.css +21 -0
  301. package/build-style/site-title/style.css +21 -0
  302. package/build-style/social-links/editor-rtl.css +17 -0
  303. package/build-style/social-links/editor.css +17 -0
  304. package/build-style/style-rtl.css +75 -16
  305. package/build-style/style.css +75 -18
  306. package/build-style/video/editor-rtl.css +0 -29
  307. package/build-style/video/editor.css +0 -29
  308. package/package.json +42 -35
  309. package/src/archives/edit.js +1 -1
  310. package/src/audio/edit.js +1 -0
  311. package/src/block/edit.js +9 -11
  312. package/src/button/edit.js +1 -1
  313. package/src/button/editor.scss +0 -5
  314. package/src/buttons/block.json +1 -1
  315. package/src/buttons/editor.scss +2 -8
  316. package/src/buttons/style.scss +2 -2
  317. package/src/categories/block.json +1 -0
  318. package/src/categories/index.php +13 -2
  319. package/src/comment-edit-link/block.json +13 -2
  320. package/src/comment-edit-link/style.scss +4 -0
  321. package/src/comment-reply-link/block.json +13 -2
  322. package/src/comment-reply-link/style.scss +4 -0
  323. package/src/comments/edit/comments-legacy.js +1 -0
  324. package/src/comments-pagination/editor.scss +1 -1
  325. package/src/cover/deprecated.js +3 -2
  326. package/src/cover/edit/block-controls.js +2 -0
  327. package/src/cover/edit/index.js +6 -1
  328. package/src/cover/edit/inspector-controls.js +3 -15
  329. package/src/cover/editor.scss +0 -5
  330. package/src/cover/test/edit.js +30 -26
  331. package/src/details/index.js +2 -0
  332. package/src/details/transforms.js +26 -0
  333. package/src/embed/edit.js +0 -7
  334. package/src/embed/embed-placeholder.js +10 -2
  335. package/src/embed/embed-preview.js +22 -2
  336. package/src/file/edit.js +11 -0
  337. package/src/file/index.php +1 -1
  338. package/src/file/transforms.js +26 -6
  339. package/src/freeform/edit.js +4 -4
  340. package/src/freeform/editor.scss +1 -1
  341. package/src/freeform/modal.js +7 -1
  342. package/src/gallery/editor.scss +1 -1
  343. package/src/group/editor.scss +0 -1
  344. package/src/home-link/edit.js +4 -7
  345. package/src/image/edit.js +130 -47
  346. package/src/image/editor.scss +7 -41
  347. package/src/image/image.js +100 -67
  348. package/src/image/index.php +1 -1
  349. package/src/image/transforms.js +0 -23
  350. package/src/image/use-max-width-observer.js +32 -0
  351. package/src/image/utils.js +13 -1
  352. package/src/latest-posts/edit.js +1 -1
  353. package/src/media-text/deprecated.js +159 -3
  354. package/src/media-text/edit.js +5 -5
  355. package/src/media-text/editor.scss +3 -1
  356. package/src/media-text/image-fill.js +11 -0
  357. package/src/media-text/index.php +53 -43
  358. package/src/media-text/media-container.js +25 -25
  359. package/src/media-text/media-container.native.js +0 -2
  360. package/src/media-text/save.js +9 -13
  361. package/src/media-text/style.scss +21 -0
  362. package/src/media-text/test/image-fill.js +19 -0
  363. package/src/missing/edit.js +8 -3
  364. package/src/navigation/edit/deleted-navigation-warning.js +23 -13
  365. package/src/navigation/edit/index.js +1 -0
  366. package/src/navigation/edit/menu-inspector-controls.js +3 -1
  367. package/src/navigation/edit/navigation-menu-delete-control.js +1 -0
  368. package/src/navigation/edit/placeholder/index.js +1 -0
  369. package/src/navigation/edit/responsive-wrapper.js +2 -0
  370. package/src/navigation/edit/unsaved-inner-blocks.js +4 -4
  371. package/src/navigation/editor.scss +11 -4
  372. package/src/navigation/index.php +1 -1
  373. package/src/navigation-link/link-ui.js +4 -3
  374. package/src/page-list/convert-to-links-modal.js +6 -1
  375. package/src/page-list/edit.js +6 -1
  376. package/src/page-list/index.php +3 -1
  377. package/src/post-comments-form/form.js +1 -0
  378. package/src/post-featured-image/dimension-controls.js +4 -4
  379. package/src/post-featured-image/edit.js +3 -6
  380. package/src/post-featured-image/style.scss +1 -1
  381. package/src/post-title/block.json +4 -1
  382. package/src/post-title/style.scss +24 -0
  383. package/src/query/edit/enhanced-pagination-modal.js +7 -3
  384. package/src/query/edit/inspector-controls/enhanced-pagination-control.js +3 -3
  385. package/src/query/edit/inspector-controls/index.js +2 -9
  386. package/src/query/edit/query-content.js +7 -0
  387. package/src/query/edit/query-placeholder.js +2 -0
  388. package/src/query/index.php +1 -1
  389. package/src/query-pagination/editor.scss +1 -21
  390. package/src/query-pagination/style.scss +0 -15
  391. package/src/search/index.php +1 -1
  392. package/src/site-logo/edit.js +11 -20
  393. package/src/site-title/block.json +4 -1
  394. package/src/site-title/editor.scss +0 -4
  395. package/src/site-title/style.scss +24 -0
  396. package/src/social-link/edit.js +2 -0
  397. package/src/social-links/edit.js +17 -10
  398. package/src/social-links/editor.scss +24 -5
  399. package/src/style.scss +2 -0
  400. package/src/tag-cloud/index.php +7 -2
  401. package/src/template-part/edit/advanced-controls.js +0 -1
  402. package/src/template-part/edit/index.js +12 -10
  403. package/src/template-part/edit/inner-blocks.js +20 -1
  404. package/src/template-part/edit/placeholder.js +6 -1
  405. package/src/utils/hooks.js +11 -11
  406. package/src/video/edit.js +24 -21
  407. package/src/video/editor.scss +0 -45
  408. package/src/video/tracks-editor.js +3 -0
  409. package/src/media-text/test/media-container.js +0 -24
@@ -6,15 +6,16 @@ import clsx from 'clsx';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { isBlobURL } from '@wordpress/blob';
10
- import { store as blocksStore } from '@wordpress/blocks';
9
+ import { isBlobURL, createBlobURL } from '@wordpress/blob';
10
+ import { store as blocksStore, createBlock } from '@wordpress/blocks';
11
11
  import { Placeholder } from '@wordpress/components';
12
12
  import { useDispatch, useSelect } from '@wordpress/data';
13
- import { BlockIcon, MediaPlaceholder, useBlockProps, store as blockEditorStore, __experimentalUseBorderProps as useBorderProps, __experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles, useBlockEditingMode } from '@wordpress/block-editor';
13
+ import { BlockIcon, useBlockProps, MediaPlaceholder, store as blockEditorStore, __experimentalUseBorderProps as useBorderProps, __experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles, useBlockEditingMode } from '@wordpress/block-editor';
14
14
  import { useEffect, useRef, useState } from '@wordpress/element';
15
15
  import { __, sprintf } from '@wordpress/i18n';
16
16
  import { image as icon, plugins as pluginsIcon } from '@wordpress/icons';
17
17
  import { store as noticesStore } from '@wordpress/notices';
18
+ import { useResizeObserver } from '@wordpress/compose';
18
19
 
19
20
  /**
20
21
  * Internal dependencies
@@ -22,6 +23,8 @@ import { store as noticesStore } from '@wordpress/notices';
22
23
  import { unlock } from '../lock-unlock';
23
24
  import { useUploadMediaFromBlobURL } from '../utils/hooks';
24
25
  import Image from './image';
26
+ import { isValidFileType } from './utils';
27
+ import { useMaxWidthObserver } from './use-max-width-observer';
25
28
 
26
29
  /**
27
30
  * Module constants
@@ -29,6 +32,7 @@ import Image from './image';
29
32
  import { LINK_DESTINATION_ATTACHMENT, LINK_DESTINATION_CUSTOM, LINK_DESTINATION_MEDIA, LINK_DESTINATION_NONE, ALLOWED_MEDIA_TYPES } from './constants';
30
33
  import { jsx as _jsx } from "react/jsx-runtime";
31
34
  import { jsxs as _jsxs } from "react/jsx-runtime";
35
+ import { Fragment as _Fragment } from "react/jsx-runtime";
32
36
  export const pickRelevantMediaFiles = (image, size) => {
33
37
  const imageProps = Object.fromEntries(Object.entries(image !== null && image !== void 0 ? image : {}).filter(([key]) => ['alt', 'id', 'link', 'caption'].includes(key)));
34
38
  imageProps.url = image?.sizes?.[size]?.url || image?.media_details?.sizes?.[size]?.source_url || image.url;
@@ -84,6 +88,16 @@ export function ImageEdit({
84
88
  metadata
85
89
  } = attributes;
86
90
  const [temporaryURL, setTemporaryURL] = useState(attributes.blob);
91
+ const containerRef = useRef();
92
+ // Only observe the max width from the parent container when the parent layout is not flex nor grid.
93
+ // This won't work for them because the container width changes with the image.
94
+ // TODO: Find a way to observe the container width for flex and grid layouts.
95
+ const isMaxWidthContainerWidth = !parentLayout || parentLayout.type !== 'flex' && parentLayout.type !== 'grid';
96
+ const [maxWidthObserver, maxContentWidth] = useMaxWidthObserver();
97
+ const [placeholderResizeListener, {
98
+ width: placeholderWidth
99
+ }] = useResizeObserver();
100
+ const isSmallContainer = placeholderWidth && placeholderWidth < 160;
87
101
  const altRef = useRef();
88
102
  useEffect(() => {
89
103
  altRef.current = alt;
@@ -93,7 +107,8 @@ export function ImageEdit({
93
107
  captionRef.current = caption;
94
108
  }, [caption]);
95
109
  const {
96
- __unstableMarkNextChangeAsNotPersistent
110
+ __unstableMarkNextChangeAsNotPersistent,
111
+ replaceBlock
97
112
  } = useDispatch(blockEditorStore);
98
113
  useEffect(() => {
99
114
  if (['wide', 'full'].includes(align)) {
@@ -107,7 +122,10 @@ export function ImageEdit({
107
122
  }
108
123
  }, [__unstableMarkNextChangeAsNotPersistent, align, setAttributes]);
109
124
  const {
110
- getSettings
125
+ getSettings,
126
+ getBlockRootClientId,
127
+ getBlockName,
128
+ canInsertBlockType
111
129
  } = useSelect(blockEditorStore);
112
130
  const blockEditingMode = useBlockEditingMode();
113
131
  const {
@@ -124,7 +142,35 @@ export function ImageEdit({
124
142
  blob: undefined
125
143
  });
126
144
  }
145
+ function onSelectImagesList(images) {
146
+ const win = containerRef.current?.ownerDocument.defaultView;
147
+ if (images.every(file => file instanceof win.File)) {
148
+ /** @type {File[]} */
149
+ const files = images;
150
+ const rootClientId = getBlockRootClientId(clientId);
151
+ if (files.some(file => !isValidFileType(file))) {
152
+ // Copied from the same notice in the gallery block.
153
+ createErrorNotice(__('If uploading to a gallery all files need to be image formats'), {
154
+ id: 'gallery-upload-invalid-file',
155
+ type: 'snackbar'
156
+ });
157
+ }
158
+ const imageBlocks = files.filter(file => isValidFileType(file)).map(file => createBlock('core/image', {
159
+ blob: createBlobURL(file)
160
+ }));
161
+ if (getBlockName(rootClientId) === 'core/gallery') {
162
+ replaceBlock(clientId, imageBlocks);
163
+ } else if (canInsertBlockType('core/gallery', rootClientId)) {
164
+ const galleryBlock = createBlock('core/gallery', {}, imageBlocks);
165
+ replaceBlock(clientId, galleryBlock);
166
+ }
167
+ }
168
+ }
127
169
  function onSelectImage(media) {
170
+ if (Array.isArray(media)) {
171
+ onSelectImagesList(media);
172
+ return;
173
+ }
128
174
  if (!media || !media.url) {
129
175
  setAttributes({
130
176
  url: undefined,
@@ -255,6 +301,7 @@ export function ImageEdit({
255
301
  'has-custom-border': !!borderProps.className || borderProps.style && Object.keys(borderProps.style).length > 0
256
302
  });
257
303
  const blockProps = useBlockProps({
304
+ ref: containerRef,
258
305
  className: classes
259
306
  });
260
307
 
@@ -276,16 +323,16 @@ export function ImageEdit({
276
323
  lockUrlControlsMessage: blockBindingsSource?.label ? sprintf( /* translators: %s: Label of the bindings source. */
277
324
  __('Connected to %s'), blockBindingsSource.label) : __('Connected to dynamic data')
278
325
  };
279
- }, [isSingleSelected, metadata?.bindings?.url]);
326
+ }, [context, isSingleSelected, metadata?.bindings?.url]);
280
327
  const placeholder = content => {
281
- return /*#__PURE__*/_jsx(Placeholder, {
328
+ return /*#__PURE__*/_jsxs(Placeholder, {
282
329
  className: clsx('block-editor-media-placeholder', {
283
330
  [borderProps.className]: !!borderProps.className && !isSingleSelected
284
331
  }),
285
- withIllustration: true,
286
- icon: lockUrlControls ? pluginsIcon : icon,
287
- label: __('Image'),
288
- instructions: !lockUrlControls && __('Upload an image file, pick one from your media library, or add one with a URL.'),
332
+ icon: !isSmallContainer && (lockUrlControls ? pluginsIcon : icon),
333
+ withIllustration: !isSingleSelected || isSmallContainer,
334
+ label: !isSmallContainer && __('Image'),
335
+ instructions: !lockUrlControls && !isSmallContainer && __('Upload or drag an image file here, or pick one from your library.'),
289
336
  style: {
290
337
  aspectRatio: !(width && height) && aspectRatio ? aspectRatio : undefined,
291
338
  width: height && aspectRatio ? '100%' : width,
@@ -294,45 +341,49 @@ export function ImageEdit({
294
341
  ...borderProps.style,
295
342
  ...shadowProps.style
296
343
  },
297
- children: lockUrlControls ? /*#__PURE__*/_jsx("span", {
298
- className: "block-bindings-media-placeholder-message",
299
- children: lockUrlControlsMessage
300
- }) : content
344
+ children: [lockUrlControls && !isSmallContainer && lockUrlControlsMessage, !lockUrlControls && !isSmallContainer && content, placeholderResizeListener]
301
345
  });
302
346
  };
303
- return /*#__PURE__*/_jsxs("figure", {
304
- ...blockProps,
305
- children: [/*#__PURE__*/_jsx(Image, {
306
- temporaryURL: temporaryURL,
307
- attributes: attributes,
308
- setAttributes: setAttributes,
309
- isSingleSelected: isSingleSelected,
310
- insertBlocksAfter: insertBlocksAfter,
311
- onReplace: onReplace,
312
- onSelectImage: onSelectImage,
313
- onSelectURL: onSelectURL,
314
- onUploadError: onUploadError,
315
- context: context,
316
- clientId: clientId,
317
- blockEditingMode: blockEditingMode,
318
- parentLayoutType: parentLayout?.type
319
- }), /*#__PURE__*/_jsx(MediaPlaceholder, {
320
- icon: /*#__PURE__*/_jsx(BlockIcon, {
321
- icon: icon
322
- }),
323
- onSelect: onSelectImage,
324
- onSelectURL: onSelectURL,
325
- onError: onUploadError,
326
- placeholder: placeholder,
327
- accept: "image/*",
328
- allowedTypes: ALLOWED_MEDIA_TYPES,
329
- value: {
330
- id,
331
- src
332
- },
333
- mediaPreview: mediaPreview,
334
- disableMediaButtons: temporaryURL || url
335
- })]
347
+ return /*#__PURE__*/_jsxs(_Fragment, {
348
+ children: [/*#__PURE__*/_jsxs("figure", {
349
+ ...blockProps,
350
+ children: [/*#__PURE__*/_jsx(Image, {
351
+ temporaryURL: temporaryURL,
352
+ attributes: attributes,
353
+ setAttributes: setAttributes,
354
+ isSingleSelected: isSingleSelected,
355
+ insertBlocksAfter: insertBlocksAfter,
356
+ onReplace: onReplace,
357
+ onSelectImage: onSelectImage,
358
+ onSelectURL: onSelectURL,
359
+ onUploadError: onUploadError,
360
+ context: context,
361
+ clientId: clientId,
362
+ blockEditingMode: blockEditingMode,
363
+ parentLayoutType: parentLayout?.type,
364
+ maxContentWidth: maxContentWidth
365
+ }), /*#__PURE__*/_jsx(MediaPlaceholder, {
366
+ icon: /*#__PURE__*/_jsx(BlockIcon, {
367
+ icon: icon
368
+ }),
369
+ onSelect: onSelectImage,
370
+ onSelectURL: onSelectURL,
371
+ onError: onUploadError,
372
+ placeholder: placeholder,
373
+ accept: "image/*",
374
+ allowedTypes: ALLOWED_MEDIA_TYPES,
375
+ handleUpload: files => files.length === 1,
376
+ value: {
377
+ id,
378
+ src
379
+ },
380
+ mediaPreview: mediaPreview,
381
+ disableMediaButtons: temporaryURL || url
382
+ })]
383
+ }),
384
+ // The listener cannot be placed as the first element as it will break the in-between inserter.
385
+ // See https://github.com/WordPress/gutenberg/blob/71134165868298fc15e22896d0c28b41b3755ff7/packages/block-editor/src/components/block-list/use-in-between-inserter.js#L120
386
+ isSingleSelected && isMaxWidthContainerWidth && maxWidthObserver]
336
387
  });
337
388
  }
338
389
  export default ImageEdit;
@@ -1 +1 @@
1
- {"version":3,"names":["clsx","isBlobURL","store","blocksStore","Placeholder","useDispatch","useSelect","BlockIcon","MediaPlaceholder","useBlockProps","blockEditorStore","__experimentalUseBorderProps","useBorderProps","__experimentalGetShadowClassesAndStyles","getShadowClassesAndStyles","useBlockEditingMode","useEffect","useRef","useState","__","sprintf","image","icon","plugins","pluginsIcon","noticesStore","unlock","useUploadMediaFromBlobURL","Image","LINK_DESTINATION_ATTACHMENT","LINK_DESTINATION_CUSTOM","LINK_DESTINATION_MEDIA","LINK_DESTINATION_NONE","ALLOWED_MEDIA_TYPES","jsx","_jsx","jsxs","_jsxs","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","altRef","current","captionRef","__unstableMarkNextChangeAsNotPersistent","undefined","getSettings","blockEditingMode","createErrorNotice","onUploadError","message","type","src","onSelectImage","media","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","lockUrlControls","lockUrlControlsMessage","select","blockBindingsSource","getBlockBindingsSource","bindings","source","canUserEditValue","args","label","placeholder","content","withIllustration","instructions","objectFit","children","parentLayoutType","onSelect","accept","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 } from '@wordpress/blob';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { Placeholder } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tBlockIcon,\n\tMediaPlaceholder,\n\tuseBlockProps,\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';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\nimport { useUploadMediaFromBlobURL } from '../utils/hooks';\nimport Image from './image';\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\tconst [ temporaryURL, setTemporaryURL ] = useState( attributes.blob );\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 } =\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 { getSettings } = 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 onSelectImage( media ) {\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( { className: classes } );\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 = unlock(\n\t\t\t\tselect( blocksStore )\n\t\t\t).getBlockBindingsSource( metadata?.bindings?.url?.source );\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[ 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\twithIllustration\n\t\t\t\ticon={ lockUrlControls ? pluginsIcon : icon }\n\t\t\t\tlabel={ __( 'Image' ) }\n\t\t\t\tinstructions={\n\t\t\t\t\t! lockUrlControls &&\n\t\t\t\t\t__(\n\t\t\t\t\t\t'Upload an image file, pick one from your media library, or add one with a URL.'\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<span className=\"block-bindings-media-placeholder-message\">\n\t\t\t\t\t\t{ lockUrlControlsMessage }\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\tcontent\n\t\t\t\t) }\n\t\t\t</Placeholder>\n\t\t);\n\t};\n\n\treturn (\n\t\t<figure { ...blockProps }>\n\t\t\t<Image\n\t\t\t\ttemporaryURL={ temporaryURL }\n\t\t\t\tattributes={ attributes }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\tisSingleSelected={ isSingleSelected }\n\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\tonReplace={ onReplace }\n\t\t\t\tonSelectImage={ onSelectImage }\n\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\tonUploadError={ onUploadError }\n\t\t\t\tcontext={ context }\n\t\t\t\tclientId={ clientId }\n\t\t\t\tblockEditingMode={ blockEditingMode }\n\t\t\t\tparentLayoutType={ parentLayout?.type }\n\t\t\t/>\n\t\t\t<MediaPlaceholder\n\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\tonError={ onUploadError }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\tvalue={ { id, src } }\n\t\t\t\tmediaPreview={ mediaPreview }\n\t\t\t\tdisableMediaButtons={ temporaryURL || url }\n\t\t\t/>\n\t\t</figure>\n\t);\n}\n\nexport default ImageEdit;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["clsx","isBlobURL","createBlobURL","store","blocksStore","createBlock","Placeholder","useDispatch","useSelect","BlockIcon","useBlockProps","MediaPlaceholder","blockEditorStore","__experimentalUseBorderProps","useBorderProps","__experimentalGetShadowClassesAndStyles","getShadowClassesAndStyles","useBlockEditingMode","useEffect","useRef","useState","__","sprintf","image","icon","plugins","pluginsIcon","noticesStore","useResizeObserver","unlock","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","getBlockBindingsSource","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 { store as blocksStore, createBlock } 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 { unlock } from '../lock-unlock';\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 = unlock(\n\t\t\t\tselect( blocksStore )\n\t\t\t).getBlockBindingsSource( metadata?.bindings?.url?.source );\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":"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","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { isBlobURL } from '@wordpress/blob';
5
- import { MenuItem, 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, Dropdown, __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem, __experimentalUseCustomUnits as useCustomUnits, Placeholder } from '@wordpress/components';
6
6
  import { useViewportMatch } from '@wordpress/compose';
7
7
  import { useSelect, useDispatch } from '@wordpress/data';
8
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';
@@ -83,7 +83,8 @@ export default function Image({
83
83
  context,
84
84
  clientId,
85
85
  blockEditingMode,
86
- parentLayoutType
86
+ parentLayoutType,
87
+ maxContentWidth
87
88
  }) {
88
89
  const {
89
90
  url = '',
@@ -320,7 +321,7 @@ export default function Image({
320
321
  }
321
322
  }, [isSingleSelected]);
322
323
  const canEditImage = id && naturalWidth && naturalHeight && imageEditing;
323
- const allowCrop = isSingleSelected && canEditImage && !isEditingImage;
324
+ const allowCrop = isSingleSelected && canEditImage && !isEditingImage && !isContentOnlyMode;
324
325
  function switchToCover() {
325
326
  replaceBlocks(clientId, switchToBlockType(getBlock(clientId), 'core/cover'));
326
327
  }
@@ -461,6 +462,20 @@ export default function Image({
461
462
  const showUrlInput = isSingleSelected && !isEditingImage && !lockHrefControls && !lockUrlControls;
462
463
  const showCoverControls = isSingleSelected && canInsertCover;
463
464
  const showBlockControls = showUrlInput || allowCrop || showCoverControls;
465
+ const mediaReplaceFlow = isSingleSelected && !isEditingImage && !lockUrlControls && /*#__PURE__*/_jsx(BlockControls, {
466
+ group: "other",
467
+ children: /*#__PURE__*/_jsx(MediaReplaceFlow, {
468
+ mediaId: id,
469
+ mediaURL: url,
470
+ allowedTypes: ALLOWED_MEDIA_TYPES,
471
+ accept: "image/*",
472
+ onSelect: onSelectImage,
473
+ onSelectURL: onSelectURL,
474
+ onError: onUploadError,
475
+ name: !url ? __('Add image') : __('Replace'),
476
+ onReset: () => onSelectImage(undefined)
477
+ })
478
+ });
464
479
  const controls = /*#__PURE__*/_jsxs(_Fragment, {
465
480
  children: [showBlockControls && /*#__PURE__*/_jsxs(BlockControls, {
466
481
  group: "block",
@@ -486,21 +501,6 @@ export default function Image({
486
501
  label: __('Add text over image'),
487
502
  onClick: switchToCover
488
503
  })]
489
- }), isSingleSelected && !isEditingImage && !lockUrlControls && /*#__PURE__*/_jsx(BlockControls, {
490
- group: "other",
491
- children: /*#__PURE__*/_jsx(MediaReplaceFlow, {
492
- mediaId: id,
493
- mediaURL: url,
494
- allowedTypes: ALLOWED_MEDIA_TYPES,
495
- accept: "image/*",
496
- onSelect: onSelectImage,
497
- onSelectURL: onSelectURL,
498
- onError: onUploadError,
499
- children: /*#__PURE__*/_jsx(MenuItem, {
500
- onClick: () => onSelectImage(undefined),
501
- children: __('Reset')
502
- })
503
- })
504
504
  }), isSingleSelected && externalBlob && /*#__PURE__*/_jsx(BlockControls, {
505
505
  children: /*#__PURE__*/_jsx(ToolbarGroup, {
506
506
  children: /*#__PURE__*/_jsx(ToolbarButton, {
@@ -533,7 +533,7 @@ export default function Image({
533
533
  onToggle();
534
534
  }
535
535
  },
536
- children: _x('Alt', 'Alternative text for an image. Block toolbar label, a low character count is preferred.')
536
+ children: _x('Alternative text', 'Alternative text for an image. Block toolbar label, a low character count is preferred.')
537
537
  }),
538
538
  renderContent: () => /*#__PURE__*/_jsx(TextareaControl, {
539
539
  className: "wp-block-image__toolbar_content_textarea",
@@ -553,7 +553,7 @@ export default function Image({
553
553
  }),
554
554
  __nextHasNoMarginBottom: true
555
555
  })
556
- }), /*#__PURE__*/_jsx(Dropdown, {
556
+ }), title && /*#__PURE__*/_jsx(Dropdown, {
557
557
  popoverProps: {
558
558
  position: 'bottom right'
559
559
  },
@@ -738,6 +738,7 @@ export default function Image({
738
738
  // @todo It would be good to revisit this once a content-width variable
739
739
  // becomes available.
740
740
  const maxWidthBuffer = maxWidth * 2.5;
741
+ const maxResizeWidth = maxContentWidth || maxWidthBuffer;
741
742
  let showRightHandle = false;
742
743
  let showLeftHandle = false;
743
744
 
@@ -778,9 +779,9 @@ export default function Image({
778
779
  },
779
780
  showHandle: isSingleSelected,
780
781
  minWidth: minWidth,
781
- maxWidth: maxWidthBuffer,
782
+ maxWidth: maxResizeWidth,
782
783
  minHeight: minHeight,
783
- maxHeight: maxWidthBuffer / ratio,
784
+ maxHeight: maxResizeWidth / ratio,
784
785
  lockAspectRatio: ratio,
785
786
  enable: {
786
787
  top: false,
@@ -791,6 +792,19 @@ export default function Image({
791
792
  onResizeStart: onResizeStart,
792
793
  onResizeStop: (event, direction, elt) => {
793
794
  onResizeStop();
795
+
796
+ // Clear hardcoded width if the resized width is close to the max-content width.
797
+ if (maxContentWidth &&
798
+ // Only do this if the image is bigger than the container to prevent it from being squished.
799
+ // TODO: Remove this check if the image support setting 100% width.
800
+ naturalWidth >= maxContentWidth && Math.abs(elt.offsetWidth - maxContentWidth) < 10) {
801
+ setAttributes({
802
+ width: undefined,
803
+ height: undefined
804
+ });
805
+ return;
806
+ }
807
+
794
808
  // Since the aspect ratio is locked when resizing, we can
795
809
  // use the width of the resized element to calculate the
796
810
  // height in CSS to prevent stretching when the max-width
@@ -809,11 +823,12 @@ export default function Image({
809
823
  });
810
824
  }
811
825
  if (!url && !temporaryURL) {
812
- // Add all controls if the image attributes are connected.
813
- return metadata?.bindings ? controls : sizeControls;
826
+ return /*#__PURE__*/_jsxs(_Fragment, {
827
+ children: [mediaReplaceFlow, metadata?.bindings ? controls : sizeControls]
828
+ });
814
829
  }
815
830
  return /*#__PURE__*/_jsxs(_Fragment, {
816
- children: [controls, img, /*#__PURE__*/_jsx(Caption, {
831
+ children: [mediaReplaceFlow, controls, img, /*#__PURE__*/_jsx(Caption, {
817
832
  attributes: attributes,
818
833
  setAttributes: setAttributes,
819
834
  isSelected: isSingleSelected,