@wordpress/block-library 8.13.0 → 8.15.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 (549) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/archives/index.js +5 -1
  3. package/build/archives/index.js.map +1 -1
  4. package/build/audio/index.js +5 -1
  5. package/build/audio/index.js.map +1 -1
  6. package/build/avatar/edit.js +1 -0
  7. package/build/avatar/edit.js.map +1 -1
  8. package/build/avatar/index.js +1 -1
  9. package/build/block/edit.js +1 -1
  10. package/build/block/edit.js.map +1 -1
  11. package/build/block/edit.native.js +6 -9
  12. package/build/block/edit.native.js.map +1 -1
  13. package/build/block/index.js +2 -1
  14. package/build/block/index.js.map +1 -1
  15. package/build/buttons/edit.js +7 -3
  16. package/build/buttons/edit.js.map +1 -1
  17. package/build/categories/index.js +5 -1
  18. package/build/categories/index.js.map +1 -1
  19. package/build/code/index.js +5 -1
  20. package/build/code/index.js.map +1 -1
  21. package/build/column/edit.native.js +1 -4
  22. package/build/column/edit.native.js.map +1 -1
  23. package/build/column/index.js +1 -0
  24. package/build/column/index.js.map +1 -1
  25. package/build/columns/edit.js +1 -0
  26. package/build/columns/edit.js.map +1 -1
  27. package/build/comment-author-avatar/edit.js +1 -0
  28. package/build/comment-author-avatar/edit.js.map +1 -1
  29. package/build/comments/index.js +1 -0
  30. package/build/comments/index.js.map +1 -1
  31. package/build/cover/deprecated.js +4 -2
  32. package/build/cover/deprecated.js.map +1 -1
  33. package/build/cover/edit/inspector-controls.js +2 -1
  34. package/build/cover/edit/inspector-controls.js.map +1 -1
  35. package/build/cover/index.js +1 -0
  36. package/build/cover/index.js.map +1 -1
  37. package/build/details/index.js +5 -1
  38. package/build/details/index.js.map +1 -1
  39. package/build/embed/embed-placeholder.native.js +37 -13
  40. package/build/embed/embed-placeholder.native.js.map +1 -1
  41. package/build/embed/util.js +9 -8
  42. package/build/embed/util.js.map +1 -1
  43. package/build/file/inspector.js +1 -0
  44. package/build/file/inspector.js.map +1 -1
  45. package/build/file/{interactivity.js → view-interactivity.js} +6 -2
  46. package/build/file/view-interactivity.js.map +1 -0
  47. package/build/footnotes/edit.js +20 -1
  48. package/build/footnotes/edit.js.map +1 -1
  49. package/build/footnotes/format.js +19 -16
  50. package/build/footnotes/format.js.map +1 -1
  51. package/build/footnotes/index.js +0 -1
  52. package/build/footnotes/index.js.map +1 -1
  53. package/build/gallery/edit.js +1 -1
  54. package/build/gallery/edit.js.map +1 -1
  55. package/build/gallery/index.js +3 -1
  56. package/build/gallery/index.js.map +1 -1
  57. package/build/group/index.js +1 -0
  58. package/build/group/index.js.map +1 -1
  59. package/build/heading/index.js +5 -1
  60. package/build/heading/index.js.map +1 -1
  61. package/build/heading/transforms.js +5 -1
  62. package/build/heading/transforms.js.map +1 -1
  63. package/build/image/deprecated.js +453 -175
  64. package/build/image/deprecated.js.map +1 -1
  65. package/build/image/edit.js +0 -4
  66. package/build/image/edit.js.map +1 -1
  67. package/build/image/image.js +96 -43
  68. package/build/image/image.js.map +1 -1
  69. package/build/image/index.js +6 -0
  70. package/build/image/index.js.map +1 -1
  71. package/build/image/save.js +8 -1
  72. package/build/image/save.js.map +1 -1
  73. package/build/image/utils.js +18 -0
  74. package/build/image/utils.js.map +1 -1
  75. package/build/image/{interactivity.js → view-interactivity.js} +86 -44
  76. package/build/image/view-interactivity.js.map +1 -0
  77. package/build/index.js +12 -3
  78. package/build/index.js.map +1 -1
  79. package/build/latest-comments/edit.js +1 -0
  80. package/build/latest-comments/edit.js.map +1 -1
  81. package/build/latest-posts/edit.js +2 -0
  82. package/build/latest-posts/edit.js.map +1 -1
  83. package/build/list/edit.js +4 -4
  84. package/build/list/edit.js.map +1 -1
  85. package/build/list/index.js +5 -1
  86. package/build/list/index.js.map +1 -1
  87. package/build/list-item/utils.js +6 -1
  88. package/build/list-item/utils.js.map +1 -1
  89. package/build/media-text/index.js +1 -0
  90. package/build/media-text/index.js.map +1 -1
  91. package/build/media-text/media-container.native.js +2 -1
  92. package/build/media-text/media-container.native.js.map +1 -1
  93. package/build/missing/edit.js +22 -8
  94. package/build/missing/edit.js.map +1 -1
  95. package/build/missing/edit.native.js +7 -5
  96. package/build/missing/edit.native.js.map +1 -1
  97. package/build/navigation/constants.js +10 -4
  98. package/build/navigation/constants.js.map +1 -1
  99. package/build/navigation/edit/index.js +17 -3
  100. package/build/navigation/edit/index.js.map +1 -1
  101. package/build/navigation/edit/inner-blocks.js +2 -2
  102. package/build/navigation/edit/inner-blocks.js.map +1 -1
  103. package/build/navigation/edit/menu-inspector-controls.js +0 -1
  104. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  105. package/build/navigation/edit/unsaved-inner-blocks.js +2 -2
  106. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  107. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +10 -15
  108. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  109. package/build/navigation/use-navigation-menu.js +33 -45
  110. package/build/navigation/use-navigation-menu.js.map +1 -1
  111. package/build/navigation/view-interactivity.js +185 -0
  112. package/build/navigation/view-interactivity.js.map +1 -0
  113. package/build/navigation-link/edit.js +12 -18
  114. package/build/navigation-link/edit.js.map +1 -1
  115. package/build/navigation-link/link-ui.js +12 -2
  116. package/build/navigation-link/link-ui.js.map +1 -1
  117. package/build/navigation-submenu/edit.js +2 -2
  118. package/build/navigation-submenu/edit.js.map +1 -1
  119. package/build/page-list/convert-to-links-modal.js +3 -3
  120. package/build/page-list/convert-to-links-modal.js.map +1 -1
  121. package/build/page-list/edit.js +34 -39
  122. package/build/page-list/edit.js.map +1 -1
  123. package/build/page-list/use-convert-to-navigation-links.js +2 -15
  124. package/build/page-list/use-convert-to-navigation-links.js.map +1 -1
  125. package/build/paragraph/index.js +1 -0
  126. package/build/paragraph/index.js.map +1 -1
  127. package/build/paragraph/transforms.js +1 -0
  128. package/build/paragraph/transforms.js.map +1 -1
  129. package/build/post-comments-form/index.js +1 -0
  130. package/build/post-comments-form/index.js.map +1 -1
  131. package/build/post-navigation-link/index.js +1 -0
  132. package/build/post-navigation-link/index.js.map +1 -1
  133. package/build/post-time-to-read/index.js +5 -1
  134. package/build/post-time-to-read/index.js.map +1 -1
  135. package/build/query-pagination/edit.js +1 -1
  136. package/build/query-pagination/edit.js.map +1 -1
  137. package/build/query-pagination-numbers/index.js +1 -1
  138. package/build/query-title/edit.js +43 -1
  139. package/build/query-title/edit.js.map +1 -1
  140. package/build/quote/index.js +1 -0
  141. package/build/quote/index.js.map +1 -1
  142. package/build/quote/transforms.js +8 -0
  143. package/build/quote/transforms.js.map +1 -1
  144. package/build/rss/edit.js +3 -0
  145. package/build/rss/edit.js.map +1 -1
  146. package/build/search/edit.js +4 -3
  147. package/build/search/edit.js.map +1 -1
  148. package/build/search/index.js +1 -0
  149. package/build/search/index.js.map +1 -1
  150. package/build/site-logo/edit.js +1 -0
  151. package/build/site-logo/edit.js.map +1 -1
  152. package/build/site-logo/index.js +5 -1
  153. package/build/site-logo/index.js.map +1 -1
  154. package/build/site-tagline/icon.js +1 -1
  155. package/build/site-tagline/icon.js.map +1 -1
  156. package/build/site-tagline/index.js +5 -1
  157. package/build/site-tagline/index.js.map +1 -1
  158. package/build/site-title/index.js +5 -1
  159. package/build/site-title/index.js.map +1 -1
  160. package/build/social-links/index.js +3 -1
  161. package/build/social-links/index.js.map +1 -1
  162. package/build/table/index.js +5 -1
  163. package/build/table/index.js.map +1 -1
  164. package/build/tag-cloud/edit.js +1 -0
  165. package/build/tag-cloud/edit.js.map +1 -1
  166. package/build/template-part/edit/index.js +1 -1
  167. package/build/template-part/edit/index.js.map +1 -1
  168. package/build/term-description/index.js +1 -0
  169. package/build/term-description/index.js.map +1 -1
  170. package/build/text-columns/edit.js +1 -0
  171. package/build/text-columns/edit.js.map +1 -1
  172. package/build/verse/index.js +5 -1
  173. package/build/verse/index.js.map +1 -1
  174. package/build/video/deprecated.js +5 -1
  175. package/build/video/deprecated.js.map +1 -1
  176. package/build/video/index.js +5 -1
  177. package/build/video/index.js.map +1 -1
  178. package/build-module/archives/index.js +5 -1
  179. package/build-module/archives/index.js.map +1 -1
  180. package/build-module/audio/index.js +5 -1
  181. package/build-module/audio/index.js.map +1 -1
  182. package/build-module/avatar/edit.js +1 -0
  183. package/build-module/avatar/edit.js.map +1 -1
  184. package/build-module/avatar/index.js +1 -1
  185. package/build-module/block/edit.js +1 -1
  186. package/build-module/block/edit.js.map +1 -1
  187. package/build-module/block/edit.native.js +7 -9
  188. package/build-module/block/edit.native.js.map +1 -1
  189. package/build-module/block/index.js +2 -1
  190. package/build-module/block/index.js.map +1 -1
  191. package/build-module/buttons/edit.js +7 -3
  192. package/build-module/buttons/edit.js.map +1 -1
  193. package/build-module/categories/index.js +5 -1
  194. package/build-module/categories/index.js.map +1 -1
  195. package/build-module/code/index.js +5 -1
  196. package/build-module/code/index.js.map +1 -1
  197. package/build-module/column/edit.native.js +1 -4
  198. package/build-module/column/edit.native.js.map +1 -1
  199. package/build-module/column/index.js +1 -0
  200. package/build-module/column/index.js.map +1 -1
  201. package/build-module/columns/edit.js +1 -0
  202. package/build-module/columns/edit.js.map +1 -1
  203. package/build-module/comment-author-avatar/edit.js +1 -0
  204. package/build-module/comment-author-avatar/edit.js.map +1 -1
  205. package/build-module/comments/index.js +1 -0
  206. package/build-module/comments/index.js.map +1 -1
  207. package/build-module/cover/deprecated.js +4 -2
  208. package/build-module/cover/deprecated.js.map +1 -1
  209. package/build-module/cover/edit/inspector-controls.js +2 -1
  210. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  211. package/build-module/cover/index.js +1 -0
  212. package/build-module/cover/index.js.map +1 -1
  213. package/build-module/details/index.js +5 -1
  214. package/build-module/details/index.js.map +1 -1
  215. package/build-module/embed/embed-placeholder.native.js +37 -14
  216. package/build-module/embed/embed-placeholder.native.js.map +1 -1
  217. package/build-module/embed/util.js +6 -6
  218. package/build-module/embed/util.js.map +1 -1
  219. package/build-module/file/inspector.js +1 -0
  220. package/build-module/file/inspector.js.map +1 -1
  221. package/build-module/file/{interactivity.js → view-interactivity.js} +6 -2
  222. package/build-module/file/view-interactivity.js.map +1 -0
  223. package/build-module/footnotes/edit.js +18 -2
  224. package/build-module/footnotes/edit.js.map +1 -1
  225. package/build-module/footnotes/format.js +19 -16
  226. package/build-module/footnotes/format.js.map +1 -1
  227. package/build-module/footnotes/index.js +0 -1
  228. package/build-module/footnotes/index.js.map +1 -1
  229. package/build-module/gallery/edit.js +1 -1
  230. package/build-module/gallery/edit.js.map +1 -1
  231. package/build-module/gallery/index.js +3 -1
  232. package/build-module/gallery/index.js.map +1 -1
  233. package/build-module/group/index.js +1 -0
  234. package/build-module/group/index.js.map +1 -1
  235. package/build-module/heading/index.js +5 -1
  236. package/build-module/heading/index.js.map +1 -1
  237. package/build-module/heading/transforms.js +5 -1
  238. package/build-module/heading/transforms.js.map +1 -1
  239. package/build-module/image/deprecated.js +454 -176
  240. package/build-module/image/deprecated.js.map +1 -1
  241. package/build-module/image/edit.js +0 -4
  242. package/build-module/image/edit.js.map +1 -1
  243. package/build-module/image/image.js +96 -46
  244. package/build-module/image/image.js.map +1 -1
  245. package/build-module/image/index.js +6 -0
  246. package/build-module/image/index.js.map +1 -1
  247. package/build-module/image/save.js +8 -1
  248. package/build-module/image/save.js.map +1 -1
  249. package/build-module/image/utils.js +16 -0
  250. package/build-module/image/utils.js.map +1 -1
  251. package/build-module/image/{interactivity.js → view-interactivity.js} +86 -44
  252. package/build-module/image/view-interactivity.js.map +1 -0
  253. package/build-module/index.js +12 -3
  254. package/build-module/index.js.map +1 -1
  255. package/build-module/latest-comments/edit.js +1 -0
  256. package/build-module/latest-comments/edit.js.map +1 -1
  257. package/build-module/latest-posts/edit.js +2 -0
  258. package/build-module/latest-posts/edit.js.map +1 -1
  259. package/build-module/list/edit.js +4 -4
  260. package/build-module/list/edit.js.map +1 -1
  261. package/build-module/list/index.js +5 -1
  262. package/build-module/list/index.js.map +1 -1
  263. package/build-module/list-item/utils.js +6 -1
  264. package/build-module/list-item/utils.js.map +1 -1
  265. package/build-module/media-text/index.js +1 -0
  266. package/build-module/media-text/index.js.map +1 -1
  267. package/build-module/media-text/media-container.native.js +2 -1
  268. package/build-module/media-text/media-container.native.js.map +1 -1
  269. package/build-module/missing/edit.js +22 -8
  270. package/build-module/missing/edit.js.map +1 -1
  271. package/build-module/missing/edit.native.js +8 -6
  272. package/build-module/missing/edit.native.js.map +1 -1
  273. package/build-module/navigation/constants.js +8 -3
  274. package/build-module/navigation/constants.js.map +1 -1
  275. package/build-module/navigation/edit/index.js +18 -4
  276. package/build-module/navigation/edit/index.js.map +1 -1
  277. package/build-module/navigation/edit/inner-blocks.js +2 -2
  278. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  279. package/build-module/navigation/edit/menu-inspector-controls.js +0 -1
  280. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  281. package/build-module/navigation/edit/unsaved-inner-blocks.js +2 -2
  282. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  283. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +10 -14
  284. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  285. package/build-module/navigation/use-navigation-menu.js +35 -47
  286. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  287. package/build-module/navigation/view-interactivity.js +182 -0
  288. package/build-module/navigation/view-interactivity.js.map +1 -0
  289. package/build-module/navigation-link/edit.js +13 -19
  290. package/build-module/navigation-link/edit.js.map +1 -1
  291. package/build-module/navigation-link/link-ui.js +13 -3
  292. package/build-module/navigation-link/link-ui.js.map +1 -1
  293. package/build-module/navigation-submenu/edit.js +2 -2
  294. package/build-module/navigation-submenu/edit.js.map +1 -1
  295. package/build-module/page-list/convert-to-links-modal.js +3 -3
  296. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  297. package/build-module/page-list/edit.js +34 -39
  298. package/build-module/page-list/edit.js.map +1 -1
  299. package/build-module/page-list/use-convert-to-navigation-links.js +3 -16
  300. package/build-module/page-list/use-convert-to-navigation-links.js.map +1 -1
  301. package/build-module/paragraph/index.js +1 -0
  302. package/build-module/paragraph/index.js.map +1 -1
  303. package/build-module/paragraph/transforms.js +1 -0
  304. package/build-module/paragraph/transforms.js.map +1 -1
  305. package/build-module/post-comments-form/index.js +1 -0
  306. package/build-module/post-comments-form/index.js.map +1 -1
  307. package/build-module/post-navigation-link/index.js +1 -0
  308. package/build-module/post-navigation-link/index.js.map +1 -1
  309. package/build-module/post-time-to-read/index.js +5 -1
  310. package/build-module/post-time-to-read/index.js.map +1 -1
  311. package/build-module/query-pagination/edit.js +1 -1
  312. package/build-module/query-pagination/edit.js.map +1 -1
  313. package/build-module/query-pagination-numbers/index.js +1 -1
  314. package/build-module/query-title/edit.js +44 -3
  315. package/build-module/query-title/edit.js.map +1 -1
  316. package/build-module/quote/index.js +1 -0
  317. package/build-module/quote/index.js.map +1 -1
  318. package/build-module/quote/transforms.js +8 -0
  319. package/build-module/quote/transforms.js.map +1 -1
  320. package/build-module/rss/edit.js +3 -0
  321. package/build-module/rss/edit.js.map +1 -1
  322. package/build-module/search/edit.js +4 -3
  323. package/build-module/search/edit.js.map +1 -1
  324. package/build-module/search/index.js +1 -0
  325. package/build-module/search/index.js.map +1 -1
  326. package/build-module/site-logo/edit.js +1 -0
  327. package/build-module/site-logo/edit.js.map +1 -1
  328. package/build-module/site-logo/index.js +5 -1
  329. package/build-module/site-logo/index.js.map +1 -1
  330. package/build-module/site-tagline/icon.js +1 -1
  331. package/build-module/site-tagline/icon.js.map +1 -1
  332. package/build-module/site-tagline/index.js +5 -1
  333. package/build-module/site-tagline/index.js.map +1 -1
  334. package/build-module/site-title/index.js +5 -1
  335. package/build-module/site-title/index.js.map +1 -1
  336. package/build-module/social-links/index.js +3 -1
  337. package/build-module/social-links/index.js.map +1 -1
  338. package/build-module/table/index.js +5 -1
  339. package/build-module/table/index.js.map +1 -1
  340. package/build-module/tag-cloud/edit.js +1 -0
  341. package/build-module/tag-cloud/edit.js.map +1 -1
  342. package/build-module/template-part/edit/index.js +1 -1
  343. package/build-module/template-part/edit/index.js.map +1 -1
  344. package/build-module/term-description/index.js +1 -0
  345. package/build-module/term-description/index.js.map +1 -1
  346. package/build-module/text-columns/edit.js +1 -0
  347. package/build-module/text-columns/edit.js.map +1 -1
  348. package/build-module/verse/index.js +5 -1
  349. package/build-module/verse/index.js.map +1 -1
  350. package/build-module/video/deprecated.js +5 -1
  351. package/build-module/video/deprecated.js.map +1 -1
  352. package/build-module/video/index.js +5 -1
  353. package/build-module/video/index.js.map +1 -1
  354. package/build-style/details/style-rtl.css +4 -2
  355. package/build-style/details/style.css +4 -2
  356. package/build-style/footnotes/style-rtl.css +4 -3
  357. package/build-style/footnotes/style.css +4 -3
  358. package/build-style/image/style-rtl.css +16 -2
  359. package/build-style/image/style.css +16 -2
  360. package/build-style/navigation/style-rtl.css +14 -2
  361. package/build-style/navigation/style.css +14 -2
  362. package/build-style/query-pagination/style-rtl.css +4 -2
  363. package/build-style/query-pagination/style.css +4 -2
  364. package/build-style/style-rtl.css +42 -11
  365. package/build-style/style.css +42 -11
  366. package/package.json +33 -37
  367. package/src/archives/block.json +5 -1
  368. package/src/audio/block.json +5 -1
  369. package/src/audio/test/__snapshots__/edit.native.js.snap +58 -33
  370. package/src/avatar/block.json +1 -1
  371. package/src/avatar/edit.js +1 -0
  372. package/src/block/block.json +2 -1
  373. package/src/block/edit.js +2 -2
  374. package/src/block/edit.native.js +8 -12
  375. package/src/block/editor.native.scss +2 -2
  376. package/src/block/test/edit.native.js +4 -4
  377. package/src/buttons/edit.js +4 -4
  378. package/src/categories/block.json +5 -1
  379. package/src/code/block.json +5 -1
  380. package/src/column/block.json +1 -0
  381. package/src/column/edit.native.js +4 -10
  382. package/src/column/editor.native.scss +0 -4
  383. package/src/columns/edit.js +1 -0
  384. package/src/comment-author-avatar/edit.js +1 -0
  385. package/src/comment-template/index.php +5 -2
  386. package/src/comments/block.json +1 -0
  387. package/src/cover/block.json +1 -0
  388. package/src/cover/deprecated.js +2 -0
  389. package/src/cover/edit/inspector-controls.js +1 -0
  390. package/src/details/block.json +5 -1
  391. package/src/embed/embed-placeholder.native.js +80 -47
  392. package/src/embed/styles.native.scss +54 -18
  393. package/src/embed/test/index.native.js +5 -5
  394. package/src/embed/util.js +4 -6
  395. package/src/file/index.php +4 -3
  396. package/src/file/inspector.js +1 -0
  397. package/src/file/test/__snapshots__/edit.native.js.snap +58 -33
  398. package/src/file/{interactivity.js → view-interactivity.js} +4 -1
  399. package/src/footnotes/block.json +0 -1
  400. package/src/footnotes/edit.js +21 -2
  401. package/src/footnotes/format.js +22 -20
  402. package/src/footnotes/index.php +11 -9
  403. package/src/footnotes/style.scss +6 -3
  404. package/src/gallery/block.json +3 -1
  405. package/src/gallery/edit.js +1 -1
  406. package/src/gallery/test/index.native.js +17 -16
  407. package/src/group/block.json +1 -0
  408. package/src/heading/block.json +5 -1
  409. package/src/heading/test/index.native.js +18 -0
  410. package/src/home-link/index.php +15 -2
  411. package/src/image/block.json +6 -0
  412. package/src/image/deprecated.js +597 -320
  413. package/src/image/edit.js +0 -4
  414. package/src/image/image.js +131 -62
  415. package/src/image/index.php +47 -8
  416. package/src/image/save.js +9 -1
  417. package/src/image/style.scss +15 -2
  418. package/src/image/test/edit.native.js +1 -1
  419. package/src/image/utils.js +16 -0
  420. package/src/image/{interactivity.js → view-interactivity.js} +99 -50
  421. package/src/index.js +18 -1
  422. package/src/latest-comments/edit.js +1 -0
  423. package/src/latest-posts/edit.js +2 -0
  424. package/src/latest-posts/index.php +1 -1
  425. package/src/list/block.json +5 -1
  426. package/src/list/edit.js +6 -4
  427. package/src/list/test/edit.native.js +129 -33
  428. package/src/media-text/block.json +1 -0
  429. package/src/media-text/media-container.native.js +1 -0
  430. package/src/missing/edit.js +31 -11
  431. package/src/missing/edit.native.js +12 -10
  432. package/src/missing/style.native.scss +19 -12
  433. package/src/missing/test/__snapshots__/edit.native.js.snap +21 -13
  434. package/src/navigation/constants.js +12 -6
  435. package/src/navigation/edit/index.js +30 -3
  436. package/src/navigation/edit/inner-blocks.js +2 -2
  437. package/src/navigation/edit/menu-inspector-controls.js +0 -1
  438. package/src/navigation/edit/unsaved-inner-blocks.js +2 -2
  439. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +17 -21
  440. package/src/navigation/index.php +43 -16
  441. package/src/navigation/style.scss +27 -8
  442. package/src/navigation/use-navigation-menu.js +39 -63
  443. package/src/navigation/view-interactivity.js +196 -0
  444. package/src/navigation-link/edit.js +61 -61
  445. package/src/navigation-link/link-ui.js +14 -2
  446. package/src/navigation-submenu/edit.js +2 -2
  447. package/src/navigation-submenu/index.php +2 -12
  448. package/src/page-list/convert-to-links-modal.js +3 -3
  449. package/src/page-list/edit.js +65 -62
  450. package/src/page-list/use-convert-to-navigation-links.js +3 -20
  451. package/src/paragraph/block.json +1 -0
  452. package/src/paragraph/test/__snapshots__/edit.native.js.snap +1 -0
  453. package/src/paragraph/test/edit.native.js +26 -0
  454. package/src/post-comments-form/block.json +1 -0
  455. package/src/post-navigation-link/block.json +1 -0
  456. package/src/post-template/index.php +4 -2
  457. package/src/post-time-to-read/block.json +5 -1
  458. package/src/post-title/index.php +6 -3
  459. package/src/preformatted/test/__snapshots__/edit.native.js.snap +2 -0
  460. package/src/query-pagination/edit.js +17 -14
  461. package/src/query-pagination-numbers/block.json +1 -1
  462. package/src/query-title/edit.js +48 -6
  463. package/src/quote/block.json +1 -0
  464. package/src/quote/test/__snapshots__/transforms.native.js.snap +10 -0
  465. package/src/quote/test/transforms.native.js +5 -1
  466. package/src/quote/transforms.js +13 -0
  467. package/src/rss/edit.js +3 -0
  468. package/src/search/block.json +1 -0
  469. package/src/search/edit.js +4 -3
  470. package/src/search/index.php +22 -4
  471. package/src/search/test/__snapshots__/edit.native.js.snap +7 -0
  472. package/src/site-logo/block.json +5 -1
  473. package/src/site-logo/edit.js +1 -0
  474. package/src/site-tagline/block.json +5 -1
  475. package/src/site-tagline/icon.js +1 -1
  476. package/src/site-title/block.json +5 -1
  477. package/src/social-links/block.json +3 -1
  478. package/src/table/block.json +5 -1
  479. package/src/tag-cloud/edit.js +1 -0
  480. package/src/template-part/edit/index.js +1 -1
  481. package/src/template-part/index.php +9 -15
  482. package/src/term-description/block.json +1 -0
  483. package/src/text-columns/edit.js +1 -0
  484. package/src/verse/block.json +5 -1
  485. package/src/video/block.json +5 -1
  486. package/build/file/interactivity.js.map +0 -1
  487. package/build/gallery/shared-icon.native.js +0 -38
  488. package/build/gallery/shared-icon.native.js.map +0 -1
  489. package/build/heading/heading-level-icon.js +0 -61
  490. package/build/heading/heading-level-icon.js.map +0 -1
  491. package/build/image/interactivity.js.map +0 -1
  492. package/build/navigation/interactivity.js +0 -167
  493. package/build/navigation/interactivity.js.map +0 -1
  494. package/build/utils/interactivity/constants.js +0 -9
  495. package/build/utils/interactivity/constants.js.map +0 -1
  496. package/build/utils/interactivity/directives.js +0 -222
  497. package/build/utils/interactivity/directives.js.map +0 -1
  498. package/build/utils/interactivity/hooks.js +0 -159
  499. package/build/utils/interactivity/hooks.js.map +0 -1
  500. package/build/utils/interactivity/hydration.js +0 -34
  501. package/build/utils/interactivity/hydration.js.map +0 -1
  502. package/build/utils/interactivity/index.js +0 -32
  503. package/build/utils/interactivity/index.js.map +0 -1
  504. package/build/utils/interactivity/portals.js +0 -108
  505. package/build/utils/interactivity/portals.js.map +0 -1
  506. package/build/utils/interactivity/store.js +0 -66
  507. package/build/utils/interactivity/store.js.map +0 -1
  508. package/build/utils/interactivity/utils.js +0 -87
  509. package/build/utils/interactivity/utils.js.map +0 -1
  510. package/build/utils/interactivity/vdom.js +0 -119
  511. package/build/utils/interactivity/vdom.js.map +0 -1
  512. package/build-module/file/interactivity.js.map +0 -1
  513. package/build-module/gallery/shared-icon.native.js +0 -24
  514. package/build-module/gallery/shared-icon.native.js.map +0 -1
  515. package/build-module/heading/heading-level-icon.js +0 -53
  516. package/build-module/heading/heading-level-icon.js.map +0 -1
  517. package/build-module/image/interactivity.js.map +0 -1
  518. package/build-module/navigation/interactivity.js +0 -164
  519. package/build-module/navigation/interactivity.js.map +0 -1
  520. package/build-module/utils/interactivity/constants.js +0 -2
  521. package/build-module/utils/interactivity/constants.js.map +0 -1
  522. package/build-module/utils/interactivity/directives.js +0 -209
  523. package/build-module/utils/interactivity/directives.js.map +0 -1
  524. package/build-module/utils/interactivity/hooks.js +0 -145
  525. package/build-module/utils/interactivity/hooks.js.map +0 -1
  526. package/build-module/utils/interactivity/hydration.js +0 -21
  527. package/build-module/utils/interactivity/hydration.js.map +0 -1
  528. package/build-module/utils/interactivity/index.js +0 -15
  529. package/build-module/utils/interactivity/index.js.map +0 -1
  530. package/build-module/utils/interactivity/portals.js +0 -100
  531. package/build-module/utils/interactivity/portals.js.map +0 -1
  532. package/build-module/utils/interactivity/store.js +0 -55
  533. package/build-module/utils/interactivity/store.js.map +0 -1
  534. package/build-module/utils/interactivity/utils.js +0 -75
  535. package/build-module/utils/interactivity/utils.js.map +0 -1
  536. package/build-module/utils/interactivity/vdom.js +0 -107
  537. package/build-module/utils/interactivity/vdom.js.map +0 -1
  538. package/src/gallery/shared-icon.native.js +0 -23
  539. package/src/heading/heading-level-icon.js +0 -48
  540. package/src/navigation/interactivity.js +0 -169
  541. package/src/utils/interactivity/constants.js +0 -1
  542. package/src/utils/interactivity/directives.js +0 -200
  543. package/src/utils/interactivity/hooks.js +0 -145
  544. package/src/utils/interactivity/hydration.js +0 -22
  545. package/src/utils/interactivity/index.js +0 -15
  546. package/src/utils/interactivity/portals.js +0 -98
  547. package/src/utils/interactivity/store.js +0 -45
  548. package/src/utils/interactivity/utils.js +0 -66
  549. package/src/utils/interactivity/vdom.js +0 -111
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/image/image.js"],"names":["Image","temporaryURL","attributes","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","blockEditingMode","url","alt","caption","align","id","href","rel","linkClass","linkDestination","title","width","height","linkTarget","sizeSlug","imageRef","prevCaption","showCaption","setShowCaption","allowResize","getBlock","blockEditorStore","image","multiImageSelection","select","getMedia","coreStore","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","createErrorNotice","createSuccessNotice","noticesStore","isLargeViewport","isWideAligned","includes","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","hasNonContentControls","isResizable","imageSizeOptions","filter","slug","media_details","sizes","source_url","map","name","value","label","canUploadMedia","window","fetch","then","response","blob","catch","captionRef","node","focus","naturalWidth","naturalHeight","current","undefined","complete","onResizeStart","onResizeStop","onImageError","embedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","type","allowedTypes","ALLOWED_MEDIA_TYPES","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","canEditImage","allowCrop","switchToCover","controls","captionIcon","link","crop","overlayText","upload","filename","defaultedAlt","borderProps","isRounded","className","hasCustomBorder","style","Object","keys","event","target","imageWidthWithinContainer","imageHeightWithinContainer","exceedMaxWidth","ratio","fallbackClientWidth","imageAttributes","currentWidth","currentHeight","minWidth","MIN_SIZE","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","top","right","bottom","left","direction","elt","delta","parseInt","RichText","isEmpty"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tPanelBody,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tTextControl,\n\tToolbarButton,\n\tToolbarGroup,\n} from '@wordpress/components';\nimport { useViewportMatch, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\t__experimentalImageSizeControl as ImageSizeControl,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalGetElementClassName,\n\t__experimentalUseBorderProps as useBorderProps,\n} from '@wordpress/block-editor';\nimport {\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseCallback,\n} from '@wordpress/element';\nimport { __, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tcrop,\n\toverlayText,\n\tupload,\n\tcaption as captionIcon,\n} from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n\tblockEditingMode,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\tlinkDestination,\n\t\ttitle,\n\t\twidth,\n\t\theight,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t} = attributes;\n\tconst imageRef = useRef();\n\tconst prevCaption = usePrevious( caption );\n\tconst [ showCaption, setShowCaption ] = useState( !! caption );\n\tconst { allowResize = true } = context;\n\tconst { getBlock } = useSelect( blockEditorStore );\n\n\tconst { image, multiImageSelection } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getMedia } = select( coreStore );\n\t\t\tconst { getMultiSelectedBlockClientIds, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\timage:\n\t\t\t\t\tid && isSelected\n\t\t\t\t\t\t? getMedia( id, { context: 'view' } )\n\t\t\t\t\t\t: null,\n\t\t\t\tmultiImageSelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/image'\n\t\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ id, isSelected ]\n\t);\n\tconst { canInsertCover, imageEditing, imageSizes, maxWidth, mediaUpload } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetSettings,\n\t\t\t\t\tcanInsertBlockType,\n\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\t\tconst settings = getSettings();\n\n\t\t\t\treturn {\n\t\t\t\t\timageEditing: settings.imageEditing,\n\t\t\t\t\timageSizes: settings.imageSizes,\n\t\t\t\t\tmaxWidth: settings.maxWidth,\n\t\t\t\t\tmediaUpload: settings.mediaUpload,\n\t\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t\t'core/cover',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = [ 'wide', 'full' ].includes( align );\n\tconst [\n\t\t{ loadedNaturalWidth, loadedNaturalHeight },\n\t\tsetLoadedNaturalSize,\n\t] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst [ externalBlob, setExternalBlob ] = useState();\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\tconst isResizable =\n\t\tallowResize &&\n\t\thasNonContentControls &&\n\t\t! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = imageSizes\n\t\t.filter(\n\t\t\t( { slug } ) => image?.media_details?.sizes?.[ slug ]?.source_url\n\t\t)\n\t\t.map( ( { name, slug } ) => ( { value: slug, label: name } ) );\n\tconst canUploadMedia = !! mediaUpload;\n\n\t// If an image is externally hosted, try to fetch the image data. This may\n\t// fail if the image host doesn't allow CORS with the domain. If it works,\n\t// we can enable a button in the toolbar to upload the image.\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! isExternalImage( id, url ) ||\n\t\t\t! isSelected ||\n\t\t\t! canUploadMedia\n\t\t) {\n\t\t\tsetExternalBlob();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( externalBlob ) return;\n\n\t\twindow\n\t\t\t// Avoid cache, which seems to help avoid CORS problems.\n\t\t\t.fetch( url.includes( '?' ) ? url : url + '?' )\n\t\t\t.then( ( response ) => response.blob() )\n\t\t\t.then( ( blob ) => setExternalBlob( blob ) )\n\t\t\t// Do nothing, cannot upload.\n\t\t\t.catch( () => {} );\n\t}, [ id, url, isSelected, externalBlob, canUploadMedia ] );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( caption && ! prevCaption ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ caption, prevCaption ] );\n\n\t// Focus the caption when we click to add one.\n\tconst captionRef = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && ! caption ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ caption ]\n\t);\n\n\t// Get naturalWidth and naturalHeight from image ref, and fall back to loaded natural\n\t// width and height. This resolves an issue in Safari where the loaded natural\n\t// width and height is otherwise lost when switching between alignments.\n\t// See: https://github.com/WordPress/gutenberg/pull/37210.\n\tconst { naturalWidth, naturalHeight } = useMemo( () => {\n\t\treturn {\n\t\t\tnaturalWidth:\n\t\t\t\timageRef.current?.naturalWidth ||\n\t\t\t\tloadedNaturalWidth ||\n\t\t\t\tundefined,\n\t\t\tnaturalHeight:\n\t\t\t\timageRef.current?.naturalHeight ||\n\t\t\t\tloadedNaturalHeight ||\n\t\t\t\tundefined,\n\t\t};\n\t}, [\n\t\tloadedNaturalWidth,\n\t\tloadedNaturalHeight,\n\t\timageRef.current?.complete,\n\t] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tfunction onImageError() {\n\t\t// Check if there's an embed block that handles this URL, e.g., instagram URL.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/11472\n\t\tconst embedBlock = createUpgradedEmbedBlock( { attributes: { url } } );\n\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\t}\n\n\tfunction onSetHref( props ) {\n\t\tsetAttributes( props );\n\t}\n\n\tfunction onSetTitle( value ) {\n\t\t// This is the HTML title attribute, separate from the media object\n\t\t// title.\n\t\tsetAttributes( { title: value } );\n\t}\n\n\tfunction updateAlt( newAlt ) {\n\t\tsetAttributes( { alt: newAlt } );\n\t}\n\n\tfunction updateImage( newSizeSlug ) {\n\t\tconst newUrl = image?.media_details?.sizes?.[ newSizeSlug ]?.source_url;\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tsizeSlug: newSizeSlug,\n\t\t} );\n\t}\n\n\tfunction uploadExternal() {\n\t\tmediaUpload( {\n\t\t\tfilesList: [ externalBlob ],\n\t\t\tonFileChange( [ img ] ) {\n\t\t\t\tonSelectImage( img );\n\n\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetExternalBlob();\n\t\t\t\tcreateSuccessNotice( __( 'Image uploaded.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t},\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tonError( message ) {\n\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t},\n\t\t} );\n\t}\n\n\tfunction updateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].includes( nextAlign )\n\t\t\t? { width: undefined, height: undefined }\n\t\t\t: {};\n\t\tsetAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t\tif ( ! caption ) {\n\t\t\t\tsetShowCaption( false );\n\t\t\t}\n\t\t}\n\t}, [ isSelected, caption ] );\n\n\tconst canEditImage = id && naturalWidth && naturalHeight && imageEditing;\n\tconst allowCrop = ! multiImageSelection && canEditImage && ! isEditingImage;\n\n\tfunction switchToCover() {\n\t\treplaceBlocks(\n\t\t\tclientId,\n\t\t\tswitchToBlockType( getBlock( clientId ), 'core/cover' )\n\t\t);\n\t}\n\n\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\t\tvalue={ align }\n\t\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( { caption: undefined } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ captionIcon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tshowCaption\n\t\t\t\t\t\t\t\t? __( 'Remove caption' )\n\t\t\t\t\t\t\t\t: __( 'Add caption' )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t\t<ImageURLInputUI\n\t\t\t\t\t\turl={ href || '' }\n\t\t\t\t\t\tonChangeUrl={ onSetHref }\n\t\t\t\t\t\tlinkDestination={ linkDestination }\n\t\t\t\t\t\tmediaUrl={ ( image && image.source_url ) || url }\n\t\t\t\t\t\tmediaLink={ image && image.link }\n\t\t\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\t\t\tlinkClass={ linkClass }\n\t\t\t\t\t\trel={ rel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ allowCrop && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && canInsertCover && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ticon={ overlayText }\n\t\t\t\t\t\tlabel={ __( 'Add text over image' ) }\n\t\t\t\t\t\tonClick={ switchToCover }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ ! multiImageSelection && externalBlob && (\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/WAI/tutorials/images/decision-tree\">\n\t\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t\t'Describe the purpose of the image.'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t{ __( 'Leave empty if decorative.' ) }\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t<ImageSizeControl\n\t\t\t\t\t\tonChangeImage={ updateImage }\n\t\t\t\t\t\tonChange={ ( value ) => setAttributes( value ) }\n\t\t\t\t\t\tslug={ sizeSlug }\n\t\t\t\t\t\twidth={ width }\n\t\t\t\t\t\theight={ height }\n\t\t\t\t\t\timageSizeOptions={ imageSizeOptions }\n\t\t\t\t\t\tisResizable={ isResizable }\n\t\t\t\t\t\timageWidth={ naturalWidth }\n\t\t\t\t\t\timageHeight={ naturalHeight }\n\t\t\t\t\t\timageSizeHelp={ __(\n\t\t\t\t\t\t\t'Select the size of the source image.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\tonChange={ onSetTitle }\n\t\t\t\t\thelp={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Describe the role of this image on the page.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/TR/html52/dom.html#the-title-attribute\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'(Note: many devices and browsers do not display this text.)'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n\n\tconst filename = getFilename( url );\n\tlet defaultedAlt;\n\n\tif ( alt ) {\n\t\tdefaultedAlt = alt;\n\t} else if ( filename ) {\n\t\tdefaultedAlt = sprintf(\n\t\t\t/* translators: %s: file name */\n\t\t\t__( 'This image has an empty alt attribute; its file name is %s' ),\n\t\t\tfilename\n\t\t);\n\t} else {\n\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t}\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst isRounded = attributes.className?.includes( 'is-style-rounded' );\n\tconst hasCustomBorder =\n\t\t!! borderProps.className ||\n\t\t( borderProps.style && Object.keys( borderProps.style ).length > 0 );\n\n\tlet img = (\n\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t// should direct focus to block.\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t<>\n\t\t\t<img\n\t\t\t\tsrc={ temporaryURL || url }\n\t\t\t\talt={ defaultedAlt }\n\t\t\t\tonError={ () => onImageError() }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetLoadedNaturalSize( {\n\t\t\t\t\t\tloadedNaturalWidth: event.target?.naturalWidth,\n\t\t\t\t\t\tloadedNaturalHeight: event.target?.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tref={ imageRef }\n\t\t\t\tclassName={ borderProps.className }\n\t\t\t\tstyle={ borderProps.style }\n\t\t\t/>\n\t\t\t{ temporaryURL && <Spinner /> }\n\t\t</>\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t);\n\n\tlet imageWidthWithinContainer;\n\tlet imageHeightWithinContainer;\n\n\tif ( clientWidth && naturalWidth && naturalHeight ) {\n\t\tconst exceedMaxWidth = naturalWidth > clientWidth;\n\t\tconst ratio = naturalHeight / naturalWidth;\n\t\timageWidthWithinContainer = exceedMaxWidth ? clientWidth : naturalWidth;\n\t\timageHeightWithinContainer = exceedMaxWidth\n\t\t\t? clientWidth * ratio\n\t\t\t: naturalHeight;\n\t}\n\n\t// clientWidth needs to be a number for the image Cropper to work, but sometimes it's 0\n\t// So we try using the imageRef width first and fallback to clientWidth.\n\tconst fallbackClientWidth = imageRef.current?.width || clientWidth;\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\tid={ id }\n\t\t\t\turl={ url }\n\t\t\t\twidth={ width }\n\t\t\t\theight={ height }\n\t\t\t\tclientWidth={ fallbackClientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\t\tsetAttributes( imageAttributes )\n\t\t\t\t}\n\t\t\t\tonFinishEditing={ () => {\n\t\t\t\t\tsetIsEditingImage( false );\n\t\t\t\t} }\n\t\t\t\tborderProps={ isRounded ? undefined : borderProps }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable || ! imageWidthWithinContainer ) {\n\t\timg = <div style={ { width, height } }>{ img }</div>;\n\t} else {\n\t\tconst currentWidth = width || imageWidthWithinContainer;\n\t\tconst currentHeight = height || imageHeightWithinContainer;\n\n\t\tconst ratio = naturalWidth / naturalHeight;\n\t\tconst minWidth =\n\t\t\tnaturalWidth < naturalHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\tconst minHeight =\n\t\t\tnaturalHeight < naturalWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t// With the current implementation of ResizableBox, an image needs an\n\t\t// explicit pixel value for the max-width. In absence of being able to\n\t\t// set the content-width, this max-width is currently dictated by the\n\t\t// vanilla editor style. The following variable adds a buffer to this\n\t\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t\t// in most cases, allow you to scale the image beyond the width of the\n\t\t// main column, though not infinitely.\n\t\t// @todo It would be good to revisit this once a content-width variable\n\t\t// becomes available.\n\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\tlet showRightHandle = false;\n\t\tlet showLeftHandle = false;\n\n\t\t/* eslint-disable no-lonely-if */\n\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\tif ( align === 'center' ) {\n\t\t\t// When the image is centered, show both handles.\n\t\t\tshowRightHandle = true;\n\t\t\tshowLeftHandle = true;\n\t\t} else if ( isRTL() ) {\n\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t// Show the right handle and hide the left handle only when it is\n\t\t\t// aligned left. Otherwise always show the left handle.\n\t\t\tif ( align === 'left' ) {\n\t\t\t\tshowRightHandle = true;\n\t\t\t} else {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// Show the left handle and hide the right handle only when the\n\t\t\t// image is aligned right. Otherwise always show the right handle.\n\t\t\tif ( align === 'right' ) {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t} else {\n\t\t\t\tshowRightHandle = true;\n\t\t\t}\n\t\t}\n\t\t/* eslint-enable no-lonely-if */\n\n\t\timg = (\n\t\t\t<ResizableBox\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: width ?? 'auto',\n\t\t\t\t\theight: height && ! hasCustomBorder ? height : 'auto',\n\t\t\t\t} }\n\t\t\t\tshowHandle={ isSelected }\n\t\t\t\tminWidth={ minWidth }\n\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\tminHeight={ minHeight }\n\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\tlockAspectRatio\n\t\t\t\tenable={ {\n\t\t\t\t\ttop: false,\n\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\tbottom: true,\n\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ onResizeStart }\n\t\t\t\tonResizeStop={ ( event, direction, elt, delta ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: parseInt( currentWidth + delta.width, 10 ),\n\t\t\t\t\t\theight: parseInt( currentHeight + delta.height, 10 ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tresizeRatio={ align === 'center' ? 2 : 1 }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ /* Hide controls during upload to avoid component remount,\n\t\t\t\twhich causes duplicated image upload. */ }\n\t\t\t{ ! temporaryURL && controls }\n\t\t\t{ img }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier=\"caption\"\n\t\t\t\t\t\tclassName={ __experimentalGetElementClassName(\n\t\t\t\t\t\t\t'caption'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ captionRef }\n\t\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/image/image.js"],"names":["DimensionsTool","ResolutionTool","blockEditorPrivateApis","scaleOptions","value","label","help","Image","temporaryURL","attributes","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","blockEditingMode","url","alt","caption","align","id","href","rel","linkClass","linkDestination","title","width","height","aspectRatio","scale","linkTarget","sizeSlug","imageRef","prevCaption","showCaption","setShowCaption","allowResize","getBlock","blockEditorStore","image","multiImageSelection","select","getMedia","coreStore","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","createErrorNotice","createSuccessNotice","noticesStore","isLargeViewport","isWideAligned","includes","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","hasNonContentControls","isResizable","imageSizeOptions","filter","slug","media_details","sizes","source_url","map","name","canUploadMedia","window","fetch","then","response","blob","catch","captionRef","node","focus","naturalWidth","naturalHeight","current","undefined","complete","onResizeStart","onResizeStop","onImageError","embedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","type","allowedTypes","ALLOWED_MEDIA_TYPES","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","canEditImage","allowCrop","switchToCover","dimensionsUnitsOptions","availableUnits","controls","captionIcon","link","crop","overlayText","upload","newValue","parseInt","filename","defaultedAlt","borderProps","isRounded","className","event","target","objectFit","style","fallbackClientWidth","imageAttributes","ratio","currentWidth","currentHeight","minWidth","MIN_SIZE","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","display","top","right","bottom","left","direction","elt","offsetWidth","offsetHeight","RichText","isEmpty"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tTextControl,\n\tToolbarButton,\n\tToolbarGroup,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalUseCustomUnits as useCustomUnits,\n} from '@wordpress/components';\nimport { useViewportMatch, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalGetElementClassName,\n\t__experimentalUseBorderProps as useBorderProps,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport {\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseCallback,\n} from '@wordpress/element';\nimport { __, _x, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tcrop,\n\toverlayText,\n\tupload,\n\tcaption as captionIcon,\n} from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\nimport { evalAspectRatio } from './utils';\n\nconst { DimensionsTool, ResolutionTool } = unlock( blockEditorPrivateApis );\n\nconst scaleOptions = [\n\t{\n\t\tvalue: 'cover',\n\t\tlabel: _x( 'Cover', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image covers the space evenly.' ),\n\t},\n\t{\n\t\tvalue: 'contain',\n\t\tlabel: _x( 'Contain', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image is contained without distortion.' ),\n\t},\n];\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n\tblockEditingMode,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\tlinkDestination,\n\t\ttitle,\n\t\twidth,\n\t\theight,\n\t\taspectRatio,\n\t\tscale,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t} = attributes;\n\tconst imageRef = useRef();\n\tconst prevCaption = usePrevious( caption );\n\tconst [ showCaption, setShowCaption ] = useState( !! caption );\n\tconst { allowResize = true } = context;\n\tconst { getBlock } = useSelect( blockEditorStore );\n\n\tconst { image, multiImageSelection } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getMedia } = select( coreStore );\n\t\t\tconst { getMultiSelectedBlockClientIds, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\timage:\n\t\t\t\t\tid && isSelected\n\t\t\t\t\t\t? getMedia( id, { context: 'view' } )\n\t\t\t\t\t\t: null,\n\t\t\t\tmultiImageSelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/image'\n\t\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ id, isSelected ]\n\t);\n\tconst { canInsertCover, imageEditing, imageSizes, maxWidth, mediaUpload } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetSettings,\n\t\t\t\t\tcanInsertBlockType,\n\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\t\tconst settings = getSettings();\n\n\t\t\t\treturn {\n\t\t\t\t\timageEditing: settings.imageEditing,\n\t\t\t\t\timageSizes: settings.imageSizes,\n\t\t\t\t\tmaxWidth: settings.maxWidth,\n\t\t\t\t\tmediaUpload: settings.mediaUpload,\n\t\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t\t'core/cover',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = [ 'wide', 'full' ].includes( align );\n\tconst [\n\t\t{ loadedNaturalWidth, loadedNaturalHeight },\n\t\tsetLoadedNaturalSize,\n\t] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst [ externalBlob, setExternalBlob ] = useState();\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\tconst isResizable =\n\t\tallowResize &&\n\t\thasNonContentControls &&\n\t\t! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = imageSizes\n\t\t.filter(\n\t\t\t( { slug } ) => image?.media_details?.sizes?.[ slug ]?.source_url\n\t\t)\n\t\t.map( ( { name, slug } ) => ( { value: slug, label: name } ) );\n\tconst canUploadMedia = !! mediaUpload;\n\n\t// If an image is externally hosted, try to fetch the image data. This may\n\t// fail if the image host doesn't allow CORS with the domain. If it works,\n\t// we can enable a button in the toolbar to upload the image.\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! isExternalImage( id, url ) ||\n\t\t\t! isSelected ||\n\t\t\t! canUploadMedia\n\t\t) {\n\t\t\tsetExternalBlob();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( externalBlob ) return;\n\n\t\twindow\n\t\t\t// Avoid cache, which seems to help avoid CORS problems.\n\t\t\t.fetch( url.includes( '?' ) ? url : url + '?' )\n\t\t\t.then( ( response ) => response.blob() )\n\t\t\t.then( ( blob ) => setExternalBlob( blob ) )\n\t\t\t// Do nothing, cannot upload.\n\t\t\t.catch( () => {} );\n\t}, [ id, url, isSelected, externalBlob, canUploadMedia ] );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( caption && ! prevCaption ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ caption, prevCaption ] );\n\n\t// Focus the caption when we click to add one.\n\tconst captionRef = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && ! caption ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ caption ]\n\t);\n\n\t// Get naturalWidth and naturalHeight from image ref, and fall back to loaded natural\n\t// width and height. This resolves an issue in Safari where the loaded natural\n\t// width and height is otherwise lost when switching between alignments.\n\t// See: https://github.com/WordPress/gutenberg/pull/37210.\n\tconst { naturalWidth, naturalHeight } = useMemo( () => {\n\t\treturn {\n\t\t\tnaturalWidth:\n\t\t\t\timageRef.current?.naturalWidth ||\n\t\t\t\tloadedNaturalWidth ||\n\t\t\t\tundefined,\n\t\t\tnaturalHeight:\n\t\t\t\timageRef.current?.naturalHeight ||\n\t\t\t\tloadedNaturalHeight ||\n\t\t\t\tundefined,\n\t\t};\n\t}, [\n\t\tloadedNaturalWidth,\n\t\tloadedNaturalHeight,\n\t\timageRef.current?.complete,\n\t] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tfunction onImageError() {\n\t\t// Check if there's an embed block that handles this URL, e.g., instagram URL.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/11472\n\t\tconst embedBlock = createUpgradedEmbedBlock( { attributes: { url } } );\n\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\t}\n\n\tfunction onSetHref( props ) {\n\t\tsetAttributes( props );\n\t}\n\n\tfunction onSetTitle( value ) {\n\t\t// This is the HTML title attribute, separate from the media object\n\t\t// title.\n\t\tsetAttributes( { title: value } );\n\t}\n\n\tfunction updateAlt( newAlt ) {\n\t\tsetAttributes( { alt: newAlt } );\n\t}\n\n\tfunction updateImage( newSizeSlug ) {\n\t\tconst newUrl = image?.media_details?.sizes?.[ newSizeSlug ]?.source_url;\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\tsizeSlug: newSizeSlug,\n\t\t} );\n\t}\n\n\tfunction uploadExternal() {\n\t\tmediaUpload( {\n\t\t\tfilesList: [ externalBlob ],\n\t\t\tonFileChange( [ img ] ) {\n\t\t\t\tonSelectImage( img );\n\n\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetExternalBlob();\n\t\t\t\tcreateSuccessNotice( __( 'Image uploaded.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t},\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tonError( message ) {\n\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t},\n\t\t} );\n\t}\n\n\tfunction updateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].includes( nextAlign )\n\t\t\t? { width: undefined, height: undefined }\n\t\t\t: {};\n\t\tsetAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t\tif ( ! caption ) {\n\t\t\t\tsetShowCaption( false );\n\t\t\t}\n\t\t}\n\t}, [ isSelected, caption ] );\n\n\tconst canEditImage = id && naturalWidth && naturalHeight && imageEditing;\n\tconst allowCrop = ! multiImageSelection && canEditImage && ! isEditingImage;\n\n\tfunction switchToCover() {\n\t\treplaceBlocks(\n\t\t\tclientId,\n\t\t\tswitchToBlockType( getBlock( clientId ), 'core/cover' )\n\t\t);\n\t}\n\n\t// TODO: Can allow more units after figuring out how they should interact\n\t// with the ResizableBox and ImageEditor components. Calculations later on\n\t// for those components are currently assuming px units.\n\tconst dimensionsUnitsOptions = useCustomUnits( {\n\t\tavailableUnits: [ 'px' ],\n\t} );\n\n\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\t\tvalue={ align }\n\t\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( { caption: undefined } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ captionIcon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tshowCaption\n\t\t\t\t\t\t\t\t? __( 'Remove caption' )\n\t\t\t\t\t\t\t\t: __( 'Add caption' )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t\t<ImageURLInputUI\n\t\t\t\t\t\turl={ href || '' }\n\t\t\t\t\t\tonChangeUrl={ onSetHref }\n\t\t\t\t\t\tlinkDestination={ linkDestination }\n\t\t\t\t\t\tmediaUrl={ ( image && image.source_url ) || url }\n\t\t\t\t\t\tmediaLink={ image && image.link }\n\t\t\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\t\t\tlinkClass={ linkClass }\n\t\t\t\t\t\trel={ rel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ allowCrop && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && canInsertCover && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ticon={ overlayText }\n\t\t\t\t\t\tlabel={ __( 'Add text over image' ) }\n\t\t\t\t\t\tonClick={ switchToCover }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ ! multiImageSelection && externalBlob && (\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\t\tresetAll={ () =>\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\twidth: undefined,\n\t\t\t\t\t\t\theight: undefined,\n\t\t\t\t\t\t\tscale: undefined,\n\t\t\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t\t\t} )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\t\t\thasValue={ () => alt !== '' }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { alt: undefined } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/WAI/tutorials/images/decision-tree\">\n\t\t\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Describe the purpose of the image.'\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t\t{ __( 'Leave empty if decorative.' ) }\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t<DimensionsTool\n\t\t\t\t\t\tvalue={ {\n\t\t\t\t\t\t\twidth: width && `${ width }px`,\n\t\t\t\t\t\t\theight: height && `${ height }px`,\n\t\t\t\t\t\t\tscale,\n\t\t\t\t\t\t\taspectRatio,\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t// Rebuilding the object forces setting `undefined`\n\t\t\t\t\t\t\t// for values that are removed since setAttributes\n\t\t\t\t\t\t\t// doesn't do anything with keys that aren't set.\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\twidth:\n\t\t\t\t\t\t\t\t\tnewValue.width &&\n\t\t\t\t\t\t\t\t\tparseInt( newValue.width, 10 ),\n\t\t\t\t\t\t\t\theight:\n\t\t\t\t\t\t\t\t\tnewValue.height &&\n\t\t\t\t\t\t\t\t\tparseInt( newValue.height, 10 ),\n\t\t\t\t\t\t\t\tscale: newValue.scale,\n\t\t\t\t\t\t\t\taspectRatio: newValue.aspectRatio,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tdefaultScale=\"cover\"\n\t\t\t\t\t\tdefaultAspectRatio=\"auto\"\n\t\t\t\t\t\tscaleOptions={ scaleOptions }\n\t\t\t\t\t\tunitsOptions={ dimensionsUnitsOptions }\n\t\t\t\t\t/>\n\t\t\t\t\t<ResolutionTool\n\t\t\t\t\t\tvalue={ sizeSlug }\n\t\t\t\t\t\tonChange={ updateImage }\n\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\tonChange={ onSetTitle }\n\t\t\t\t\thelp={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Describe the role of this image on the page.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/TR/html52/dom.html#the-title-attribute\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'(Note: many devices and browsers do not display this text.)'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n\n\tconst filename = getFilename( url );\n\tlet defaultedAlt;\n\n\tif ( alt ) {\n\t\tdefaultedAlt = alt;\n\t} else if ( filename ) {\n\t\tdefaultedAlt = sprintf(\n\t\t\t/* translators: %s: file name */\n\t\t\t__( 'This image has an empty alt attribute; its file name is %s' ),\n\t\t\tfilename\n\t\t);\n\t} else {\n\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t}\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst isRounded = attributes.className?.includes( 'is-style-rounded' );\n\n\tlet img = (\n\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t// should direct focus to block.\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t<>\n\t\t\t<img\n\t\t\t\tsrc={ temporaryURL || url }\n\t\t\t\talt={ defaultedAlt }\n\t\t\t\tonError={ () => onImageError() }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetLoadedNaturalSize( {\n\t\t\t\t\t\tloadedNaturalWidth: event.target?.naturalWidth,\n\t\t\t\t\t\tloadedNaturalHeight: event.target?.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tref={ imageRef }\n\t\t\t\tclassName={ borderProps.className }\n\t\t\t\tstyle={ {\n\t\t\t\t\twidth:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : 'inherit',\n\t\t\t\t\theight:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : 'inherit',\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\t...borderProps.style,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ temporaryURL && <Spinner /> }\n\t\t</>\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t);\n\n\t// clientWidth needs to be a number for the image Cropper to work, but sometimes it's 0\n\t// So we try using the imageRef width first and fallback to clientWidth.\n\tconst fallbackClientWidth = imageRef.current?.width || clientWidth;\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\tid={ id }\n\t\t\t\turl={ url }\n\t\t\t\twidth={ width }\n\t\t\t\theight={ height }\n\t\t\t\tclientWidth={ fallbackClientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\t\tsetAttributes( imageAttributes )\n\t\t\t\t}\n\t\t\t\tonFinishEditing={ () => {\n\t\t\t\t\tsetIsEditingImage( false );\n\t\t\t\t} }\n\t\t\t\tborderProps={ isRounded ? undefined : borderProps }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable ) {\n\t\timg = <div style={ { width, height, aspectRatio } }>{ img }</div>;\n\t} else {\n\t\tconst ratio =\n\t\t\t( aspectRatio && evalAspectRatio( aspectRatio ) ) ||\n\t\t\t( width && height && width / height ) ||\n\t\t\tnaturalWidth / naturalHeight ||\n\t\t\t1;\n\n\t\tconst currentWidth = ! width && height ? height * ratio : width;\n\t\tconst currentHeight = ! height && width ? width / ratio : height;\n\n\t\tconst minWidth =\n\t\t\tnaturalWidth < naturalHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\tconst minHeight =\n\t\t\tnaturalHeight < naturalWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t// With the current implementation of ResizableBox, an image needs an\n\t\t// explicit pixel value for the max-width. In absence of being able to\n\t\t// set the content-width, this max-width is currently dictated by the\n\t\t// vanilla editor style. The following variable adds a buffer to this\n\t\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t\t// in most cases, allow you to scale the image beyond the width of the\n\t\t// main column, though not infinitely.\n\t\t// @todo It would be good to revisit this once a content-width variable\n\t\t// becomes available.\n\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\tlet showRightHandle = false;\n\t\tlet showLeftHandle = false;\n\n\t\t/* eslint-disable no-lonely-if */\n\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\tif ( align === 'center' ) {\n\t\t\t// When the image is centered, show both handles.\n\t\t\tshowRightHandle = true;\n\t\t\tshowLeftHandle = true;\n\t\t} else if ( isRTL() ) {\n\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t// Show the right handle and hide the left handle only when it is\n\t\t\t// aligned left. Otherwise always show the left handle.\n\t\t\tif ( align === 'left' ) {\n\t\t\t\tshowRightHandle = true;\n\t\t\t} else {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// Show the left handle and hide the right handle only when the\n\t\t\t// image is aligned right. Otherwise always show the right handle.\n\t\t\tif ( align === 'right' ) {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t} else {\n\t\t\t\tshowRightHandle = true;\n\t\t\t}\n\t\t}\n\t\t/* eslint-enable no-lonely-if */\n\n\t\timg = (\n\t\t\t<ResizableBox\n\t\t\t\tstyle={ {\n\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t! width && ! height && aspectRatio\n\t\t\t\t\t\t\t? aspectRatio\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t} }\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: currentWidth ?? 'auto',\n\t\t\t\t\theight: currentHeight ?? 'auto',\n\t\t\t\t} }\n\t\t\t\tshowHandle={ isSelected }\n\t\t\t\tminWidth={ minWidth }\n\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\tminHeight={ minHeight }\n\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\tlockAspectRatio={ ratio }\n\t\t\t\tenable={ {\n\t\t\t\t\ttop: false,\n\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\tbottom: true,\n\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ onResizeStart }\n\t\t\t\tonResizeStop={ ( event, direction, elt ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: elt.offsetWidth,\n\t\t\t\t\t\theight: elt.offsetHeight,\n\t\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tresizeRatio={ align === 'center' ? 2 : 1 }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ /* Hide controls during upload to avoid component remount,\n\t\t\t\twhich causes duplicated image upload. */ }\n\t\t\t{ ! temporaryURL && controls }\n\t\t\t{ img }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier=\"caption\"\n\t\t\t\t\t\tclassName={ __experimentalGetElementClassName(\n\t\t\t\t\t\t\t'caption'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ captionRef }\n\t\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
@@ -99,6 +99,12 @@ const metadata = {
99
99
  height: {
100
100
  type: "number"
101
101
  },
102
+ aspectRatio: {
103
+ type: "string"
104
+ },
105
+ scale: {
106
+ type: "string"
107
+ },
102
108
  sizeSlug: {
103
109
  type: "string"
104
110
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/image/index.js"],"names":["name","metadata","settings","icon","example","attributes","sizeSlug","url","caption","__experimentalLabel","context","alt","getEditWrapperProps","align","transforms","edit","save","deprecated","init"],"mappings":";;;;;;;;;AAGA;;AACA;;AAKA;;AACA;;AACA;;AAEA;;AACA;;AAdA;AACA;AACA;;AAIA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM;AAAEA,EAAAA;AAAF,IAAWC,QAAjB;;AAIO,MAAMC,QAAQ,GAAG;AACvBC,EAAAA,IAAI,EAAJA,YADuB;AAEvBC,EAAAA,OAAO,EAAE;AACRC,IAAAA,UAAU,EAAE;AACXC,MAAAA,QAAQ,EAAE,OADC;AAEXC,MAAAA,GAAG,EAAE,8CAFM;AAGX;AACAC,MAAAA,OAAO,EAAE,cAAI,8CAAJ;AAJE;AADJ,GAFc;;AAUvBC,EAAAA,mBAAmB,CAAEJ,UAAF,EAAc;AAAEK,IAAAA;AAAF,GAAd,EAA4B;AAC9C,QAAKA,OAAO,KAAK,eAAjB,EAAmC;AAClC,YAAM;AAAEF,QAAAA,OAAF;AAAWG,QAAAA,GAAX;AAAgBJ,QAAAA;AAAhB,UAAwBF,UAA9B;;AAEA,UAAK,CAAEE,GAAP,EAAa;AACZ,eAAO,cAAI,OAAJ,CAAP;AACA;;AAED,UAAK,CAAEI,GAAP,EAAa;AACZ,eAAOH,OAAO,IAAI,EAAlB;AACA,OATiC,CAWlC;AACA;;;AACA,aAAOG,GAAG,IAAKH,OAAO,GAAG,OAAOA,OAAV,GAAoB,EAAhC,CAAV;AACA;AACD,GA1BsB;;AA2BvBI,EAAAA,mBAAmB,CAAEP,UAAF,EAAe;AACjC,WAAO;AACN,oBAAcA,UAAU,CAACQ;AADnB,KAAP;AAGA,GA/BsB;;AAgCvBC,EAAAA,UAAU,EAAVA,mBAhCuB;AAiCvBC,EAAAA,IAAI,EAAJA,aAjCuB;AAkCvBC,EAAAA,IAAI,EAAJA,aAlCuB;AAmCvBC,EAAAA,UAAU,EAAVA;AAnCuB,CAAjB;;;AAsCA,MAAMC,IAAI,GAAG,MAAM,wBAAW;AAAElB,EAAAA,IAAF;AAAQC,EAAAA,QAAR;AAAkBC,EAAAA;AAAlB,CAAX,CAAnB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { image as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\tsizeSlug: 'large',\n\t\t\turl: 'https://s.w.org/images/core/5.3/MtBlanc1.jpg',\n\t\t\t// translators: Caption accompanying an image of the Mont Blanc, which serves as an example for the Image block.\n\t\t\tcaption: __( 'Mont Blanc appears—still, snowy, and serene.' ),\n\t\t},\n\t},\n\t__experimentalLabel( attributes, { context } ) {\n\t\tif ( context === 'accessibility' ) {\n\t\t\tconst { caption, alt, url } = attributes;\n\n\t\t\tif ( ! url ) {\n\t\t\t\treturn __( 'Empty' );\n\t\t\t}\n\n\t\t\tif ( ! alt ) {\n\t\t\t\treturn caption || '';\n\t\t\t}\n\n\t\t\t// This is intended to be read by a screen reader.\n\t\t\t// A period simply means a pause, no need to translate it.\n\t\t\treturn alt + ( caption ? '. ' + caption : '' );\n\t\t}\n\t},\n\tgetEditWrapperProps( attributes ) {\n\t\treturn {\n\t\t\t'data-align': attributes.align,\n\t\t};\n\t},\n\ttransforms,\n\tedit,\n\tsave,\n\tdeprecated,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/image/index.js"],"names":["name","metadata","settings","icon","example","attributes","sizeSlug","url","caption","__experimentalLabel","context","alt","getEditWrapperProps","align","transforms","edit","save","deprecated","init"],"mappings":";;;;;;;;;AAGA;;AACA;;AAKA;;AACA;;AACA;;AAEA;;AACA;;AAdA;AACA;AACA;;AAIA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM;AAAEA,EAAAA;AAAF,IAAWC,QAAjB;;AAIO,MAAMC,QAAQ,GAAG;AACvBC,EAAAA,IAAI,EAAJA,YADuB;AAEvBC,EAAAA,OAAO,EAAE;AACRC,IAAAA,UAAU,EAAE;AACXC,MAAAA,QAAQ,EAAE,OADC;AAEXC,MAAAA,GAAG,EAAE,8CAFM;AAGX;AACAC,MAAAA,OAAO,EAAE,cAAI,8CAAJ;AAJE;AADJ,GAFc;;AAUvBC,EAAAA,mBAAmB,CAAEJ,UAAF,EAAc;AAAEK,IAAAA;AAAF,GAAd,EAA4B;AAC9C,QAAKA,OAAO,KAAK,eAAjB,EAAmC;AAClC,YAAM;AAAEF,QAAAA,OAAF;AAAWG,QAAAA,GAAX;AAAgBJ,QAAAA;AAAhB,UAAwBF,UAA9B;;AAEA,UAAK,CAAEE,GAAP,EAAa;AACZ,eAAO,cAAI,OAAJ,CAAP;AACA;;AAED,UAAK,CAAEI,GAAP,EAAa;AACZ,eAAOH,OAAO,IAAI,EAAlB;AACA,OATiC,CAWlC;AACA;;;AACA,aAAOG,GAAG,IAAKH,OAAO,GAAG,OAAOA,OAAV,GAAoB,EAAhC,CAAV;AACA;AACD,GA1BsB;;AA2BvBI,EAAAA,mBAAmB,CAAEP,UAAF,EAAe;AACjC,WAAO;AACN,oBAAcA,UAAU,CAACQ;AADnB,KAAP;AAGA,GA/BsB;;AAgCvBC,EAAAA,UAAU,EAAVA,mBAhCuB;AAiCvBC,EAAAA,IAAI,EAAJA,aAjCuB;AAkCvBC,EAAAA,IAAI,EAAJA,aAlCuB;AAmCvBC,EAAAA,UAAU,EAAVA;AAnCuB,CAAjB;;;AAsCA,MAAMC,IAAI,GAAG,MAAM,wBAAW;AAAElB,EAAAA,IAAF;AAAQC,EAAAA,QAAR;AAAkBC,EAAAA;AAAlB,CAAX,CAAnB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { image as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\tsizeSlug: 'large',\n\t\t\turl: 'https://s.w.org/images/core/5.3/MtBlanc1.jpg',\n\t\t\t// translators: Caption accompanying an image of the Mont Blanc, which serves as an example for the Image block.\n\t\t\tcaption: __( 'Mont Blanc appears—still, snowy, and serene.' ),\n\t\t},\n\t},\n\t__experimentalLabel( attributes, { context } ) {\n\t\tif ( context === 'accessibility' ) {\n\t\t\tconst { caption, alt, url } = attributes;\n\n\t\t\tif ( ! url ) {\n\t\t\t\treturn __( 'Empty' );\n\t\t\t}\n\n\t\t\tif ( ! alt ) {\n\t\t\t\treturn caption || '';\n\t\t\t}\n\n\t\t\t// This is intended to be read by a screen reader.\n\t\t\t// A period simply means a pause, no need to translate it.\n\t\t\treturn alt + ( caption ? '. ' + caption : '' );\n\t\t}\n\t},\n\tgetEditWrapperProps( attributes ) {\n\t\treturn {\n\t\t\t'data-align': attributes.align,\n\t\t};\n\t},\n\ttransforms,\n\tedit,\n\tsave,\n\tdeprecated,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"]}
@@ -33,6 +33,8 @@ function save({
33
33
  linkClass,
34
34
  width,
35
35
  height,
36
+ aspectRatio,
37
+ scale,
36
38
  id,
37
39
  linkTarget,
38
40
  sizeSlug,
@@ -53,7 +55,12 @@ function save({
53
55
  src: url,
54
56
  alt: alt,
55
57
  className: imageClasses || undefined,
56
- style: borderProps.style,
58
+ style: { ...borderProps.style,
59
+ aspectRatio,
60
+ objectFit: scale,
61
+ width,
62
+ height
63
+ },
57
64
  width: width,
58
65
  height: height,
59
66
  title: title
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/image/save.js"],"names":["save","attributes","url","alt","caption","align","href","rel","linkClass","width","height","id","linkTarget","sizeSlug","title","newRel","undefined","borderProps","classes","className","style","Object","keys","length","imageClasses","image","figure","RichText","isEmpty","useBlockProps"],"mappings":";;;;;;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;AAQe,SAASA,IAAT,CAAe;AAAEC,EAAAA;AAAF,CAAf,EAAgC;AAC9C,QAAM;AACLC,IAAAA,GADK;AAELC,IAAAA,GAFK;AAGLC,IAAAA,OAHK;AAILC,IAAAA,KAJK;AAKLC,IAAAA,IALK;AAMLC,IAAAA,GANK;AAOLC,IAAAA,SAPK;AAQLC,IAAAA,KARK;AASLC,IAAAA,MATK;AAULC,IAAAA,EAVK;AAWLC,IAAAA,UAXK;AAYLC,IAAAA,QAZK;AAaLC,IAAAA;AAbK,MAcFb,UAdJ;AAgBA,QAAMc,MAAM,GAAG,CAAER,GAAF,GAAQS,SAAR,GAAoBT,GAAnC;AACA,QAAMU,WAAW,GAAG,0DAA2BhB,UAA3B,CAApB;AAEA,QAAMiB,OAAO,GAAG,yBAAY;AAC3B,KAAG,QAAQb,KAAO,EAAlB,GAAuBA,KADI;AAE3B,KAAG,QAAQQ,QAAU,EAArB,GAA0BA,QAFC;AAG3B,kBAAcJ,KAAK,IAAIC,MAHI;AAI3B,yBACC,CAAC,CAAEO,WAAW,CAACE,SAAf,IACEF,WAAW,CAACG,KAAZ,IACDC,MAAM,CAACC,IAAP,CAAaL,WAAW,CAACG,KAAzB,EAAiCG,MAAjC,GAA0C;AAPjB,GAAZ,CAAhB;AAUA,QAAMC,YAAY,GAAG,yBAAYP,WAAW,CAACE,SAAxB,EAAmC;AACvD,KAAG,YAAYR,EAAI,EAAnB,GAAwB,CAAC,CAAEA;AAD4B,GAAnC,CAArB;AAIA,QAAMc,KAAK,GACV;AACC,IAAA,GAAG,EAAGvB,GADP;AAEC,IAAA,GAAG,EAAGC,GAFP;AAGC,IAAA,SAAS,EAAGqB,YAAY,IAAIR,SAH7B;AAIC,IAAA,KAAK,EAAGC,WAAW,CAACG,KAJrB;AAKC,IAAA,KAAK,EAAGX,KALT;AAMC,IAAA,MAAM,EAAGC,MANV;AAOC,IAAA,KAAK,EAAGI;AAPT,IADD;AAYA,QAAMY,MAAM,GACX,qDACGpB,IAAI,GACL;AACC,IAAA,SAAS,EAAGE,SADb;AAEC,IAAA,IAAI,EAAGF,IAFR;AAGC,IAAA,MAAM,EAAGM,UAHV;AAIC,IAAA,GAAG,EAAGG;AAJP,KAMGU,KANH,CADK,GAULA,KAXF,EAaG,CAAEE,sBAASC,OAAT,CAAkBxB,OAAlB,CAAF,IACD,4BAAC,qBAAD,CAAU,OAAV;AACC,IAAA,SAAS,EAAG,oDAAmC,SAAnC,CADb;AAEC,IAAA,OAAO,EAAC,YAFT;AAGC,IAAA,KAAK,EAAGA;AAHT,IAdF,CADD;AAwBA,SACC,2CAAayB,2BAAc7B,IAAd,CAAoB;AAAEmB,MAAAA,SAAS,EAAED;AAAb,KAApB;AAAb,KACGQ,MADH,CADD;AAKA","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tRichText,\n\tuseBlockProps,\n\t__experimentalGetElementClassName,\n\t__experimentalGetBorderClassesAndStyles as getBorderClassesAndStyles,\n} from '@wordpress/block-editor';\n\nexport default function save( { attributes } ) {\n\tconst {\n\t\turl,\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\twidth,\n\t\theight,\n\t\tid,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t\ttitle,\n\t} = attributes;\n\n\tconst newRel = ! rel ? undefined : rel;\n\tconst borderProps = getBorderClassesAndStyles( attributes );\n\n\tconst classes = classnames( {\n\t\t[ `align${ align }` ]: align,\n\t\t[ `size-${ sizeSlug }` ]: sizeSlug,\n\t\t'is-resized': width || height,\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 imageClasses = classnames( borderProps.className, {\n\t\t[ `wp-image-${ id }` ]: !! id,\n\t} );\n\n\tconst image = (\n\t\t<img\n\t\t\tsrc={ url }\n\t\t\talt={ alt }\n\t\t\tclassName={ imageClasses || undefined }\n\t\t\tstyle={ borderProps.style }\n\t\t\twidth={ width }\n\t\t\theight={ height }\n\t\t\ttitle={ title }\n\t\t/>\n\t);\n\n\tconst figure = (\n\t\t<>\n\t\t\t{ href ? (\n\t\t\t\t<a\n\t\t\t\t\tclassName={ linkClass }\n\t\t\t\t\thref={ href }\n\t\t\t\t\ttarget={ linkTarget }\n\t\t\t\t\trel={ newRel }\n\t\t\t\t>\n\t\t\t\t\t{ image }\n\t\t\t\t</a>\n\t\t\t) : (\n\t\t\t\timage\n\t\t\t) }\n\t\t\t{ ! RichText.isEmpty( caption ) && (\n\t\t\t\t<RichText.Content\n\t\t\t\t\tclassName={ __experimentalGetElementClassName( 'caption' ) }\n\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\tvalue={ caption }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n\n\treturn (\n\t\t<figure { ...useBlockProps.save( { className: classes } ) }>\n\t\t\t{ figure }\n\t\t</figure>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/image/save.js"],"names":["save","attributes","url","alt","caption","align","href","rel","linkClass","width","height","aspectRatio","scale","id","linkTarget","sizeSlug","title","newRel","undefined","borderProps","classes","className","style","Object","keys","length","imageClasses","image","objectFit","figure","RichText","isEmpty","useBlockProps"],"mappings":";;;;;;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;AAQe,SAASA,IAAT,CAAe;AAAEC,EAAAA;AAAF,CAAf,EAAgC;AAC9C,QAAM;AACLC,IAAAA,GADK;AAELC,IAAAA,GAFK;AAGLC,IAAAA,OAHK;AAILC,IAAAA,KAJK;AAKLC,IAAAA,IALK;AAMLC,IAAAA,GANK;AAOLC,IAAAA,SAPK;AAQLC,IAAAA,KARK;AASLC,IAAAA,MATK;AAULC,IAAAA,WAVK;AAWLC,IAAAA,KAXK;AAYLC,IAAAA,EAZK;AAaLC,IAAAA,UAbK;AAcLC,IAAAA,QAdK;AAeLC,IAAAA;AAfK,MAgBFf,UAhBJ;AAkBA,QAAMgB,MAAM,GAAG,CAAEV,GAAF,GAAQW,SAAR,GAAoBX,GAAnC;AACA,QAAMY,WAAW,GAAG,0DAA2BlB,UAA3B,CAApB;AAEA,QAAMmB,OAAO,GAAG,yBAAY;AAC3B,KAAG,QAAQf,KAAO,EAAlB,GAAuBA,KADI;AAE3B,KAAG,QAAQU,QAAU,EAArB,GAA0BA,QAFC;AAG3B,kBAAcN,KAAK,IAAIC,MAHI;AAI3B,yBACC,CAAC,CAAES,WAAW,CAACE,SAAf,IACEF,WAAW,CAACG,KAAZ,IACDC,MAAM,CAACC,IAAP,CAAaL,WAAW,CAACG,KAAzB,EAAiCG,MAAjC,GAA0C;AAPjB,GAAZ,CAAhB;AAUA,QAAMC,YAAY,GAAG,yBAAYP,WAAW,CAACE,SAAxB,EAAmC;AACvD,KAAG,YAAYR,EAAI,EAAnB,GAAwB,CAAC,CAAEA;AAD4B,GAAnC,CAArB;AAIA,QAAMc,KAAK,GACV;AACC,IAAA,GAAG,EAAGzB,GADP;AAEC,IAAA,GAAG,EAAGC,GAFP;AAGC,IAAA,SAAS,EAAGuB,YAAY,IAAIR,SAH7B;AAIC,IAAA,KAAK,EAAG,EACP,GAAGC,WAAW,CAACG,KADR;AAEPX,MAAAA,WAFO;AAGPiB,MAAAA,SAAS,EAAEhB,KAHJ;AAIPH,MAAAA,KAJO;AAKPC,MAAAA;AALO,KAJT;AAWC,IAAA,KAAK,EAAGD,KAXT;AAYC,IAAA,MAAM,EAAGC,MAZV;AAaC,IAAA,KAAK,EAAGM;AAbT,IADD;AAkBA,QAAMa,MAAM,GACX,qDACGvB,IAAI,GACL;AACC,IAAA,SAAS,EAAGE,SADb;AAEC,IAAA,IAAI,EAAGF,IAFR;AAGC,IAAA,MAAM,EAAGQ,UAHV;AAIC,IAAA,GAAG,EAAGG;AAJP,KAMGU,KANH,CADK,GAULA,KAXF,EAaG,CAAEG,sBAASC,OAAT,CAAkB3B,OAAlB,CAAF,IACD,4BAAC,qBAAD,CAAU,OAAV;AACC,IAAA,SAAS,EAAG,oDAAmC,SAAnC,CADb;AAEC,IAAA,OAAO,EAAC,YAFT;AAGC,IAAA,KAAK,EAAGA;AAHT,IAdF,CADD;AAwBA,SACC,2CAAa4B,2BAAchC,IAAd,CAAoB;AAAEqB,MAAAA,SAAS,EAAED;AAAb,KAApB;AAAb,KACGS,MADH,CADD;AAKA","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tRichText,\n\tuseBlockProps,\n\t__experimentalGetElementClassName,\n\t__experimentalGetBorderClassesAndStyles as getBorderClassesAndStyles,\n} from '@wordpress/block-editor';\n\nexport default function save( { attributes } ) {\n\tconst {\n\t\turl,\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\twidth,\n\t\theight,\n\t\taspectRatio,\n\t\tscale,\n\t\tid,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t\ttitle,\n\t} = attributes;\n\n\tconst newRel = ! rel ? undefined : rel;\n\tconst borderProps = getBorderClassesAndStyles( attributes );\n\n\tconst classes = classnames( {\n\t\t[ `align${ align }` ]: align,\n\t\t[ `size-${ sizeSlug }` ]: sizeSlug,\n\t\t'is-resized': width || height,\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 imageClasses = classnames( borderProps.className, {\n\t\t[ `wp-image-${ id }` ]: !! id,\n\t} );\n\n\tconst image = (\n\t\t<img\n\t\t\tsrc={ url }\n\t\t\talt={ alt }\n\t\t\tclassName={ imageClasses || undefined }\n\t\t\tstyle={ {\n\t\t\t\t...borderProps.style,\n\t\t\t\taspectRatio,\n\t\t\t\tobjectFit: scale,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t} }\n\t\t\twidth={ width }\n\t\t\theight={ height }\n\t\t\ttitle={ title }\n\t\t/>\n\t);\n\n\tconst figure = (\n\t\t<>\n\t\t\t{ href ? (\n\t\t\t\t<a\n\t\t\t\t\tclassName={ linkClass }\n\t\t\t\t\thref={ href }\n\t\t\t\t\ttarget={ linkTarget }\n\t\t\t\t\trel={ newRel }\n\t\t\t\t>\n\t\t\t\t\t{ image }\n\t\t\t\t</a>\n\t\t\t) : (\n\t\t\t\timage\n\t\t\t) }\n\t\t\t{ ! RichText.isEmpty( caption ) && (\n\t\t\t\t<RichText.Content\n\t\t\t\t\tclassName={ __experimentalGetElementClassName( 'caption' ) }\n\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\tvalue={ caption }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n\n\treturn (\n\t\t<figure { ...useBlockProps.save( { className: classes } ) }>\n\t\t\t{ figure }\n\t\t</figure>\n\t);\n}\n"]}
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.evalAspectRatio = evalAspectRatio;
6
7
  exports.getImageSizeAttributes = getImageSizeAttributes;
7
8
  exports.getUpdatedLinkTargetSettings = getUpdatedLinkTargetSettings;
8
9
  exports.removeNewTabRel = removeNewTabRel;
@@ -12,6 +13,23 @@ var _constants = require("./constants");
12
13
  /**
13
14
  * Internal dependencies
14
15
  */
16
+
17
+ /**
18
+ * Evaluates a CSS aspect-ratio property value as a number.
19
+ *
20
+ * Degenerate or invalid ratios behave as 'auto'. And 'auto' ratios return NaN.
21
+ *
22
+ * @see https://drafts.csswg.org/css-sizing-4/#aspect-ratio
23
+ *
24
+ * @param {string} value CSS aspect-ratio property value.
25
+ * @return {number} Numerical aspect ratio or NaN if invalid.
26
+ */
27
+ function evalAspectRatio(value) {
28
+ const [width, height = 1] = value.split('/').map(Number);
29
+ const aspectRatio = width / height;
30
+ return aspectRatio === Infinity || aspectRatio === 0 ? NaN : aspectRatio;
31
+ }
32
+
15
33
  function removeNewTabRel(currentRel) {
16
34
  let newRel = currentRel;
17
35
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/image/utils.js"],"names":["removeNewTabRel","currentRel","newRel","undefined","NEW_TAB_REL","forEach","relVal","regExp","RegExp","replace","trim","getUpdatedLinkTargetSettings","value","rel","linkTarget","updatedRel","getImageSizeAttributes","image","size","url","media_details","sizes","source_url","width","height","sizeSlug"],"mappings":";;;;;;;;;AAGA;;AAHA;AACA;AACA;AAGO,SAASA,eAAT,CAA0BC,UAA1B,EAAuC;AAC7C,MAAIC,MAAM,GAAGD,UAAb;;AAEA,MAAKA,UAAU,KAAKE,SAAf,IAA4BD,MAAjC,EAA0C;AACzCE,2BAAYC,OAAZ,CAAuBC,MAAF,IAAc;AAClC,YAAMC,MAAM,GAAG,IAAIC,MAAJ,CAAY,QAAQF,MAAR,GAAiB,KAA7B,EAAoC,IAApC,CAAf;AACAJ,MAAAA,MAAM,GAAGA,MAAM,CAACO,OAAP,CAAgBF,MAAhB,EAAwB,EAAxB,CAAT;AACA,KAHD,EADyC,CAMzC;;;AACA,QAAKL,MAAM,KAAKD,UAAhB,EAA6B;AAC5BC,MAAAA,MAAM,GAAGA,MAAM,CAACQ,IAAP,EAAT;AACA;;AAED,QAAK,CAAER,MAAP,EAAgB;AACfA,MAAAA,MAAM,GAAGC,SAAT;AACA;AACD;;AAED,SAAOD,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASS,4BAAT,CAAuCC,KAAvC,EAA8C;AAAEC,EAAAA;AAAF,CAA9C,EAAwD;AAC9D,QAAMC,UAAU,GAAGF,KAAK,GAAG,QAAH,GAAcT,SAAtC;AAEA,MAAIY,UAAJ;;AACA,MAAK,CAAED,UAAF,IAAgB,CAAED,GAAvB,EAA6B;AAC5BE,IAAAA,UAAU,GAAGZ,SAAb;AACA,GAFD,MAEO;AACNY,IAAAA,UAAU,GAAGf,eAAe,CAAEa,GAAF,CAA5B;AACA;;AAED,SAAO;AACNC,IAAAA,UADM;AAEND,IAAAA,GAAG,EAAEE;AAFC,GAAP;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,sBAAT,CAAiCC,KAAjC,EAAwCC,IAAxC,EAA+C;AACrD,QAAMC,GAAG,GAAGF,KAAK,EAAEG,aAAP,EAAsBC,KAAtB,GAA+BH,IAA/B,GAAuCI,UAAnD;;AAEA,MAAKH,GAAL,EAAW;AACV,WAAO;AAAEA,MAAAA,GAAF;AAAOI,MAAAA,KAAK,EAAEpB,SAAd;AAAyBqB,MAAAA,MAAM,EAAErB,SAAjC;AAA4CsB,MAAAA,QAAQ,EAAEP;AAAtD,KAAP;AACA;;AAED,SAAO,EAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport { NEW_TAB_REL } from './constants';\n\nexport function removeNewTabRel( currentRel ) {\n\tlet newRel = currentRel;\n\n\tif ( currentRel !== undefined && newRel ) {\n\t\tNEW_TAB_REL.forEach( ( relVal ) => {\n\t\t\tconst regExp = new RegExp( '\\\\b' + relVal + '\\\\b', 'gi' );\n\t\t\tnewRel = newRel.replace( regExp, '' );\n\t\t} );\n\n\t\t// Only trim if NEW_TAB_REL values was replaced.\n\t\tif ( newRel !== currentRel ) {\n\t\t\tnewRel = newRel.trim();\n\t\t}\n\n\t\tif ( ! newRel ) {\n\t\t\tnewRel = undefined;\n\t\t}\n\t}\n\n\treturn newRel;\n}\n\n/**\n * Helper to get the link target settings to be stored.\n *\n * @param {boolean} value The new link target value.\n * @param {Object} attributes Block attributes.\n * @param {Object} attributes.rel Image block's rel attribute.\n *\n * @return {Object} Updated link target settings.\n */\nexport function getUpdatedLinkTargetSettings( value, { rel } ) {\n\tconst linkTarget = value ? '_blank' : undefined;\n\n\tlet updatedRel;\n\tif ( ! linkTarget && ! rel ) {\n\t\tupdatedRel = undefined;\n\t} else {\n\t\tupdatedRel = removeNewTabRel( rel );\n\t}\n\n\treturn {\n\t\tlinkTarget,\n\t\trel: updatedRel,\n\t};\n}\n\n/**\n * Determines new Image block attributes size selection.\n *\n * @param {Object} image Media file object for gallery image.\n * @param {string} size Selected size slug to apply.\n */\nexport function getImageSizeAttributes( image, size ) {\n\tconst url = image?.media_details?.sizes?.[ size ]?.source_url;\n\n\tif ( url ) {\n\t\treturn { url, width: undefined, height: undefined, sizeSlug: size };\n\t}\n\n\treturn {};\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/image/utils.js"],"names":["evalAspectRatio","value","width","height","split","map","Number","aspectRatio","Infinity","NaN","removeNewTabRel","currentRel","newRel","undefined","NEW_TAB_REL","forEach","relVal","regExp","RegExp","replace","trim","getUpdatedLinkTargetSettings","rel","linkTarget","updatedRel","getImageSizeAttributes","image","size","url","media_details","sizes","source_url","sizeSlug"],"mappings":";;;;;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,eAAT,CAA0BC,KAA1B,EAAkC;AACxC,QAAM,CAAEC,KAAF,EAASC,MAAM,GAAG,CAAlB,IAAwBF,KAAK,CAACG,KAAN,CAAa,GAAb,EAAmBC,GAAnB,CAAwBC,MAAxB,CAA9B;AACA,QAAMC,WAAW,GAAGL,KAAK,GAAGC,MAA5B;AACA,SAAOI,WAAW,KAAKC,QAAhB,IAA4BD,WAAW,KAAK,CAA5C,GAAgDE,GAAhD,GAAsDF,WAA7D;AACA;;AAEM,SAASG,eAAT,CAA0BC,UAA1B,EAAuC;AAC7C,MAAIC,MAAM,GAAGD,UAAb;;AAEA,MAAKA,UAAU,KAAKE,SAAf,IAA4BD,MAAjC,EAA0C;AACzCE,2BAAYC,OAAZ,CAAuBC,MAAF,IAAc;AAClC,YAAMC,MAAM,GAAG,IAAIC,MAAJ,CAAY,QAAQF,MAAR,GAAiB,KAA7B,EAAoC,IAApC,CAAf;AACAJ,MAAAA,MAAM,GAAGA,MAAM,CAACO,OAAP,CAAgBF,MAAhB,EAAwB,EAAxB,CAAT;AACA,KAHD,EADyC,CAMzC;;;AACA,QAAKL,MAAM,KAAKD,UAAhB,EAA6B;AAC5BC,MAAAA,MAAM,GAAGA,MAAM,CAACQ,IAAP,EAAT;AACA;;AAED,QAAK,CAAER,MAAP,EAAgB;AACfA,MAAAA,MAAM,GAAGC,SAAT;AACA;AACD;;AAED,SAAOD,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASS,4BAAT,CAAuCpB,KAAvC,EAA8C;AAAEqB,EAAAA;AAAF,CAA9C,EAAwD;AAC9D,QAAMC,UAAU,GAAGtB,KAAK,GAAG,QAAH,GAAcY,SAAtC;AAEA,MAAIW,UAAJ;;AACA,MAAK,CAAED,UAAF,IAAgB,CAAED,GAAvB,EAA6B;AAC5BE,IAAAA,UAAU,GAAGX,SAAb;AACA,GAFD,MAEO;AACNW,IAAAA,UAAU,GAAGd,eAAe,CAAEY,GAAF,CAA5B;AACA;;AAED,SAAO;AACNC,IAAAA,UADM;AAEND,IAAAA,GAAG,EAAEE;AAFC,GAAP;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,sBAAT,CAAiCC,KAAjC,EAAwCC,IAAxC,EAA+C;AACrD,QAAMC,GAAG,GAAGF,KAAK,EAAEG,aAAP,EAAsBC,KAAtB,GAA+BH,IAA/B,GAAuCI,UAAnD;;AAEA,MAAKH,GAAL,EAAW;AACV,WAAO;AAAEA,MAAAA,GAAF;AAAO1B,MAAAA,KAAK,EAAEW,SAAd;AAAyBV,MAAAA,MAAM,EAAEU,SAAjC;AAA4CmB,MAAAA,QAAQ,EAAEL;AAAtD,KAAP;AACA;;AAED,SAAO,EAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport { NEW_TAB_REL } from './constants';\n\n/**\n * Evaluates a CSS aspect-ratio property value as a number.\n *\n * Degenerate or invalid ratios behave as 'auto'. And 'auto' ratios return NaN.\n *\n * @see https://drafts.csswg.org/css-sizing-4/#aspect-ratio\n *\n * @param {string} value CSS aspect-ratio property value.\n * @return {number} Numerical aspect ratio or NaN if invalid.\n */\nexport function evalAspectRatio( value ) {\n\tconst [ width, height = 1 ] = value.split( '/' ).map( Number );\n\tconst aspectRatio = width / height;\n\treturn aspectRatio === Infinity || aspectRatio === 0 ? NaN : aspectRatio;\n}\n\nexport function removeNewTabRel( currentRel ) {\n\tlet newRel = currentRel;\n\n\tif ( currentRel !== undefined && newRel ) {\n\t\tNEW_TAB_REL.forEach( ( relVal ) => {\n\t\t\tconst regExp = new RegExp( '\\\\b' + relVal + '\\\\b', 'gi' );\n\t\t\tnewRel = newRel.replace( regExp, '' );\n\t\t} );\n\n\t\t// Only trim if NEW_TAB_REL values was replaced.\n\t\tif ( newRel !== currentRel ) {\n\t\t\tnewRel = newRel.trim();\n\t\t}\n\n\t\tif ( ! newRel ) {\n\t\t\tnewRel = undefined;\n\t\t}\n\t}\n\n\treturn newRel;\n}\n\n/**\n * Helper to get the link target settings to be stored.\n *\n * @param {boolean} value The new link target value.\n * @param {Object} attributes Block attributes.\n * @param {Object} attributes.rel Image block's rel attribute.\n *\n * @return {Object} Updated link target settings.\n */\nexport function getUpdatedLinkTargetSettings( value, { rel } ) {\n\tconst linkTarget = value ? '_blank' : undefined;\n\n\tlet updatedRel;\n\tif ( ! linkTarget && ! rel ) {\n\t\tupdatedRel = undefined;\n\t} else {\n\t\tupdatedRel = removeNewTabRel( rel );\n\t}\n\n\treturn {\n\t\tlinkTarget,\n\t\trel: updatedRel,\n\t};\n}\n\n/**\n * Determines new Image block attributes size selection.\n *\n * @param {Object} image Media file object for gallery image.\n * @param {string} size Selected size slug to apply.\n */\nexport function getImageSizeAttributes( image, size ) {\n\tconst url = image?.media_details?.sizes?.[ size ]?.source_url;\n\n\tif ( url ) {\n\t\treturn { url, width: undefined, height: undefined, sizeSlug: size };\n\t}\n\n\treturn {};\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
- var _interactivity = require("../utils/interactivity");
3
+ var _interactivity = require("@wordpress/interactivity");
4
4
 
5
5
  /**
6
- * Internal dependencies
6
+ * WordPress dependencies
7
7
  */
8
8
  const focusableSelectors = ['a[href]', 'area[href]', 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', 'select:not([disabled]):not([aria-hidden])', 'textarea:not([disabled]):not([aria-hidden])', 'button:not([disabled]):not([aria-hidden])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^="-"])'];
9
9
  (0, _interactivity.store)({
@@ -14,30 +14,36 @@ const focusableSelectors = ['a[href]', 'area[href]', 'input:not([disabled]):not(
14
14
  context,
15
15
  event
16
16
  }) => {
17
+ // We can't initialize the lightbox until the reference
18
+ // image is loaded, otherwise the UX is broken.
19
+ if (!context.core.image.imageLoaded) {
20
+ return;
21
+ }
22
+
17
23
  context.core.image.initialized = true;
18
24
  context.core.image.lastFocusedElement = window.document.activeElement;
19
- context.core.image.scrollDelta = 0; // Since the img is hidden and its src not loaded until
25
+ context.core.image.scrollDelta = 0;
26
+ context.core.image.lightboxEnabled = true;
27
+
28
+ if (context.core.image.lightboxAnimation === 'zoom') {
29
+ setZoomStyles(event.target.nextElementSibling, context, event);
30
+ } // Hide overflow only when the animation is in progress,
31
+ // otherwise the removal of the scrollbars will draw attention
32
+ // to itself and look like an error
33
+
34
+
35
+ document.documentElement.classList.add('has-lightbox-open'); // Since the img is hidden and its src not loaded until
20
36
  // the lightbox is opened, let's create an img element on the fly
21
37
  // so we can get the dimensions we need to calculate the styles
22
38
 
39
+ context.core.image.preloadInitialized = true;
23
40
  const imgDom = document.createElement('img');
24
41
 
25
42
  imgDom.onload = function () {
26
- // Enable the lightbox only after the image
27
- // is loaded to prevent flashing of unstyled content
28
- context.core.image.lightboxEnabled = true;
29
-
30
- if (context.core.image.lightboxAnimation === 'zoom') {
31
- setZoomStyles(imgDom, context, event);
32
- } // Hide overflow only when the animation is in progress,
33
- // otherwise the removal of the scrollbars will draw attention
34
- // to itself and look like an error
35
-
36
-
37
- document.documentElement.classList.add('has-lightbox-open');
43
+ context.core.image.activateLargeImage = true;
38
44
  };
39
45
 
40
- imgDom.setAttribute('src', context.core.image.imageSrc);
46
+ imgDom.setAttribute('src', context.core.image.imageUploadedSrc);
41
47
  },
42
48
  hideLightbox: async ({
43
49
  context,
@@ -98,6 +104,15 @@ const focusableSelectors = ['a[href]', 'area[href]', 'input:not([disabled]):not(
98
104
  });
99
105
  }
100
106
  }
107
+ },
108
+ preloadLightboxImage: ({
109
+ context
110
+ }) => {
111
+ if (!context.core.image.preloadInitialized) {
112
+ context.core.image.preloadInitialized = true;
113
+ const imgDom = document.createElement('img');
114
+ imgDom.setAttribute('src', context.core.image.imageUploadedSrc);
115
+ }
101
116
  }
102
117
  }
103
118
  }
@@ -110,10 +125,15 @@ const focusableSelectors = ['a[href]', 'area[href]', 'input:not([disabled]):not(
110
125
  }) => {
111
126
  return context.core.image.lightboxEnabled ? 'dialog' : '';
112
127
  },
113
- imageSrc: ({
128
+ responsiveImgSrc: ({
114
129
  context
115
130
  }) => {
116
- return context.core.image.initialized ? context.core.image.imageSrc : '';
131
+ return context.core.image.activateLargeImage && context.core.image.hideAnimationEnabled ? '' : context.core.image.imageCurrentSrc;
132
+ },
133
+ enlargedImgSrc: ({
134
+ context
135
+ }) => {
136
+ return context.core.image.initialized ? context.core.image.imageUploadedSrc : '';
117
137
  }
118
138
  }
119
139
  }
@@ -121,6 +141,20 @@ const focusableSelectors = ['a[href]', 'area[href]', 'input:not([disabled]):not(
121
141
  effects: {
122
142
  core: {
123
143
  image: {
144
+ setCurrentSrc: ({
145
+ context,
146
+ ref
147
+ }) => {
148
+ if (ref.complete) {
149
+ context.core.image.imageLoaded = true;
150
+ context.core.image.imageCurrentSrc = ref.currentSrc;
151
+ } else {
152
+ ref.addEventListener('load', function () {
153
+ context.core.image.imageLoaded = true;
154
+ context.core.image.imageCurrentSrc = this.currentSrc;
155
+ });
156
+ }
157
+ },
124
158
  initLightbox: async ({
125
159
  context,
126
160
  ref
@@ -141,37 +175,45 @@ const focusableSelectors = ['a[href]', 'area[href]', 'input:not([disabled]):not(
141
175
  });
142
176
 
143
177
  function setZoomStyles(imgDom, context, event) {
144
- let targetWidth = imgDom.naturalWidth;
145
- let targetHeight = imgDom.naturalHeight;
146
- const verticalPadding = 40; // As per the design, let's allow the image to stretch
147
- // to the full width of its containing figure, but for the height,
148
- // constrain it with a fixed padding
149
-
150
- const containerWidth = context.core.image.figureRef.clientWidth; // The lightbox image has `positione:absolute` and
151
- // ignores its parent's padding, so let's set the padding here,
152
- // to be used when calculating the image width and positioning
153
-
178
+ // Typically, we use the image's full-sized dimensions. If those
179
+ // dimensions have not been set (i.e. an external image with only one size),
180
+ // the image's dimensions in the lightbox are the same
181
+ // as those of the image in the content.
182
+ let targetWidth = context.core.image.targetWidth !== 'none' ? context.core.image.targetWidth : event.target.nextElementSibling.naturalWidth;
183
+ let targetHeight = context.core.image.targetHeight !== 'none' ? context.core.image.targetHeight : event.target.nextElementSibling.naturalHeight; // Since the lightbox image has `position:absolute`, it
184
+ // ignores its parent's padding, so we need to set padding here
185
+ // to calculate dimensions and positioning.
186
+ // As per the design, let's constrain the height with fixed padding
187
+
188
+ const containerOuterHeight = window.innerHeight;
189
+ const verticalPadding = 40;
190
+ const containerInnerHeight = containerOuterHeight - verticalPadding * 2; // Let's set a variable horizontal padding based on the container width
191
+
192
+ const containerOuterWidth = window.innerWidth;
154
193
  let horizontalPadding = 0;
155
194
 
156
- if (containerWidth > 480) {
195
+ if (containerOuterWidth > 480) {
157
196
  horizontalPadding = 40;
158
- } else if (containerWidth > 1920) {
197
+ } else if (containerOuterWidth > 1920) {
159
198
  horizontalPadding = 80;
160
199
  }
161
200
 
162
- const containerHeight = context.core.image.figureRef.clientHeight - verticalPadding * 2; // Check difference between the image and figure dimensions
201
+ const containerInnerWidth = containerOuterWidth - horizontalPadding * 2; // Check difference between the image and figure dimensions
163
202
 
164
- const widthOverflow = Math.abs(Math.min(containerWidth - targetWidth, 0));
165
- const heightOverflow = Math.abs(Math.min(containerHeight - targetHeight, 0)); // If image is larger than its container any dimension, resize along its largest axis.
166
- // For vertically oriented devices, always maximize the width.
203
+ const widthOverflow = Math.abs(Math.min(containerInnerWidth - targetWidth, 0));
204
+ const heightOverflow = Math.abs(Math.min(containerInnerHeight - targetHeight, 0)); // If the image is larger than the container, let's resize
205
+ // it along the greater axis relative to the container
167
206
 
168
207
  if (widthOverflow > 0 || heightOverflow > 0) {
169
- if (widthOverflow >= heightOverflow || containerHeight >= containerWidth) {
170
- targetWidth = containerWidth - horizontalPadding * 2;
171
- targetHeight = imgDom.naturalHeight * (targetWidth / imgDom.naturalWidth);
208
+ const containerInnerAspectRatio = containerInnerWidth / containerInnerHeight;
209
+ const imageAspectRatio = targetWidth / targetHeight;
210
+
211
+ if (imageAspectRatio > containerInnerAspectRatio) {
212
+ targetWidth = containerInnerWidth;
213
+ targetHeight = targetWidth * imgDom.naturalHeight / imgDom.naturalWidth;
172
214
  } else {
173
- targetHeight = containerHeight;
174
- targetWidth = imgDom.naturalWidth * (targetHeight / imgDom.naturalHeight);
215
+ targetHeight = containerInnerHeight;
216
+ targetWidth = targetHeight * imgDom.naturalWidth / imgDom.naturalHeight;
175
217
  }
176
218
  } // The reference img element lies adjacent to the event target button in the DOM
177
219
 
@@ -185,18 +227,18 @@ function setZoomStyles(imgDom, context, event) {
185
227
 
186
228
  let targetLeft = 0;
187
229
 
188
- if (targetWidth >= containerWidth) {
230
+ if (targetWidth >= containerInnerWidth) {
189
231
  targetLeft = horizontalPadding;
190
232
  } else {
191
- targetLeft = (containerWidth - targetWidth) / 2;
233
+ targetLeft = (containerOuterWidth - targetWidth) / 2;
192
234
  }
193
235
 
194
236
  let targetTop = 0;
195
237
 
196
- if (targetHeight >= containerHeight) {
238
+ if (targetHeight >= containerInnerHeight) {
197
239
  targetTop = verticalPadding;
198
240
  } else {
199
- targetTop = (containerHeight - targetHeight) / 2 + verticalPadding;
241
+ targetTop = (containerOuterHeight - targetHeight) / 2;
200
242
  }
201
243
 
202
244
  const root = document.documentElement;
@@ -209,4 +251,4 @@ function setZoomStyles(imgDom, context, event) {
209
251
  root.style.setProperty('--lightbox-target-left-position', targetLeft + 'px');
210
252
  root.style.setProperty('--lightbox-target-top-position', targetTop + 'px');
211
253
  }
212
- //# sourceMappingURL=interactivity.js.map
254
+ //# sourceMappingURL=view-interactivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-library/src/image/view-interactivity.js"],"names":["focusableSelectors","actions","core","image","showLightbox","context","event","imageLoaded","initialized","lastFocusedElement","window","document","activeElement","scrollDelta","lightboxEnabled","lightboxAnimation","setZoomStyles","target","nextElementSibling","documentElement","classList","add","preloadInitialized","imgDom","createElement","onload","activateLargeImage","setAttribute","imageUploadedSrc","hideLightbox","hideAnimationEnabled","deltaY","type","Math","abs","scrollY","scrollTop","pageYOffset","scrollLeft","pageXOffset","onscroll","scrollTo","setTimeout","remove","focus","handleKeydown","key","keyCode","shiftKey","firstFocusableElement","preventDefault","lastFocusableElement","preloadLightboxImage","selectors","roleAttribute","responsiveImgSrc","imageCurrentSrc","enlargedImgSrc","effects","setCurrentSrc","ref","complete","currentSrc","addEventListener","initLightbox","figureRef","querySelector","imageRef","focusableElements","querySelectorAll","length","targetWidth","naturalWidth","targetHeight","naturalHeight","containerOuterHeight","innerHeight","verticalPadding","containerInnerHeight","containerOuterWidth","innerWidth","horizontalPadding","containerInnerWidth","widthOverflow","min","heightOverflow","containerInnerAspectRatio","imageAspectRatio","x","originLeft","y","originTop","getBoundingClientRect","scaleWidth","offsetWidth","scaleHeight","offsetHeight","targetLeft","targetTop","root","style","setProperty"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store } from '@wordpress/interactivity';\n\nconst focusableSelectors = [\n\t'a[href]',\n\t'area[href]',\n\t'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\n\t'select:not([disabled]):not([aria-hidden])',\n\t'textarea:not([disabled]):not([aria-hidden])',\n\t'button:not([disabled]):not([aria-hidden])',\n\t'iframe',\n\t'object',\n\t'embed',\n\t'[contenteditable]',\n\t'[tabindex]:not([tabindex^=\"-\"])',\n];\n\nstore( {\n\tactions: {\n\t\tcore: {\n\t\t\timage: {\n\t\t\t\tshowLightbox: ( { context, event } ) => {\n\t\t\t\t\t// We can't initialize the lightbox until the reference\n\t\t\t\t\t// image is loaded, otherwise the UX is broken.\n\t\t\t\t\tif ( ! context.core.image.imageLoaded ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcontext.core.image.initialized = true;\n\t\t\t\t\tcontext.core.image.lastFocusedElement =\n\t\t\t\t\t\twindow.document.activeElement;\n\t\t\t\t\tcontext.core.image.scrollDelta = 0;\n\n\t\t\t\t\tcontext.core.image.lightboxEnabled = true;\n\t\t\t\t\tif ( context.core.image.lightboxAnimation === 'zoom' ) {\n\t\t\t\t\t\tsetZoomStyles(\n\t\t\t\t\t\t\tevent.target.nextElementSibling,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Hide overflow only when the animation is in progress,\n\t\t\t\t\t// otherwise the removal of the scrollbars will draw attention\n\t\t\t\t\t// to itself and look like an error\n\t\t\t\t\tdocument.documentElement.classList.add(\n\t\t\t\t\t\t'has-lightbox-open'\n\t\t\t\t\t);\n\n\t\t\t\t\t// Since the img is hidden and its src not loaded until\n\t\t\t\t\t// the lightbox is opened, let's create an img element on the fly\n\t\t\t\t\t// so we can get the dimensions we need to calculate the styles\n\t\t\t\t\tcontext.core.image.preloadInitialized = true;\n\t\t\t\t\tconst imgDom = document.createElement( 'img' );\n\t\t\t\t\timgDom.onload = function () {\n\t\t\t\t\t\tcontext.core.image.activateLargeImage = true;\n\t\t\t\t\t};\n\t\t\t\t\timgDom.setAttribute(\n\t\t\t\t\t\t'src',\n\t\t\t\t\t\tcontext.core.image.imageUploadedSrc\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\thideLightbox: async ( { context, event } ) => {\n\t\t\t\t\tcontext.core.image.hideAnimationEnabled = true;\n\t\t\t\t\tif ( context.core.image.lightboxEnabled ) {\n\t\t\t\t\t\t// If scrolling, wait a moment before closing the lightbox.\n\t\t\t\t\t\tif ( context.core.image.lightboxAnimation === 'fade' ) {\n\t\t\t\t\t\t\tcontext.core.image.scrollDelta += event.deltaY;\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tevent.type === 'mousewheel' &&\n\t\t\t\t\t\t\t\tMath.abs(\n\t\t\t\t\t\t\t\t\twindow.scrollY -\n\t\t\t\t\t\t\t\t\t\tcontext.core.image.scrollDelta\n\t\t\t\t\t\t\t\t) < 10\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tcontext.core.image.lightboxAnimation === 'zoom'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Disable scroll until the zoom animation ends.\n\t\t\t\t\t\t\t// Get the current page scroll position\n\t\t\t\t\t\t\tconst scrollTop =\n\t\t\t\t\t\t\t\twindow.pageYOffset ||\n\t\t\t\t\t\t\t\tdocument.documentElement.scrollTop;\n\t\t\t\t\t\t\tconst scrollLeft =\n\t\t\t\t\t\t\t\twindow.pageXOffset ||\n\t\t\t\t\t\t\t\tdocument.documentElement.scrollLeft;\n\t\t\t\t\t\t\t// if any scroll is attempted, set this to the previous value.\n\t\t\t\t\t\t\twindow.onscroll = function () {\n\t\t\t\t\t\t\t\twindow.scrollTo( scrollLeft, scrollTop );\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t// Enable scrolling after the animation finishes\n\t\t\t\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t\t\t\twindow.onscroll = function () {};\n\t\t\t\t\t\t\t}, 400 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdocument.documentElement.classList.remove(\n\t\t\t\t\t\t\t'has-lightbox-open'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tcontext.core.image.lightboxEnabled = false;\n\t\t\t\t\t\tcontext.core.image.lastFocusedElement.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thandleKeydown: ( { context, actions, event } ) => {\n\t\t\t\t\tif ( context.core.image.lightboxEnabled ) {\n\t\t\t\t\t\tif ( event.key === 'Tab' || event.keyCode === 9 ) {\n\t\t\t\t\t\t\t// If shift + tab it change the direction\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tevent.shiftKey &&\n\t\t\t\t\t\t\t\twindow.document.activeElement ===\n\t\t\t\t\t\t\t\t\tcontext.core.image.firstFocusableElement\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tcontext.core.image.lastFocusableElement.focus();\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t! event.shiftKey &&\n\t\t\t\t\t\t\t\twindow.document.activeElement ===\n\t\t\t\t\t\t\t\t\tcontext.core.image.lastFocusableElement\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tcontext.core.image.firstFocusableElement.focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( event.key === 'Escape' || event.keyCode === 27 ) {\n\t\t\t\t\t\t\tactions.core.image.hideLightbox( {\n\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpreloadLightboxImage: ( { context } ) => {\n\t\t\t\t\tif ( ! context.core.image.preloadInitialized ) {\n\t\t\t\t\t\tcontext.core.image.preloadInitialized = true;\n\t\t\t\t\t\tconst imgDom = document.createElement( 'img' );\n\t\t\t\t\t\timgDom.setAttribute(\n\t\t\t\t\t\t\t'src',\n\t\t\t\t\t\t\tcontext.core.image.imageUploadedSrc\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\tselectors: {\n\t\tcore: {\n\t\t\timage: {\n\t\t\t\troleAttribute: ( { context } ) => {\n\t\t\t\t\treturn context.core.image.lightboxEnabled ? 'dialog' : '';\n\t\t\t\t},\n\t\t\t\tresponsiveImgSrc: ( { context } ) => {\n\t\t\t\t\treturn context.core.image.activateLargeImage &&\n\t\t\t\t\t\tcontext.core.image.hideAnimationEnabled\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: context.core.image.imageCurrentSrc;\n\t\t\t\t},\n\t\t\t\tenlargedImgSrc: ( { context } ) => {\n\t\t\t\t\treturn context.core.image.initialized\n\t\t\t\t\t\t? context.core.image.imageUploadedSrc\n\t\t\t\t\t\t: '';\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\teffects: {\n\t\tcore: {\n\t\t\timage: {\n\t\t\t\tsetCurrentSrc: ( { context, ref } ) => {\n\t\t\t\t\tif ( ref.complete ) {\n\t\t\t\t\t\tcontext.core.image.imageLoaded = true;\n\t\t\t\t\t\tcontext.core.image.imageCurrentSrc = ref.currentSrc;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tref.addEventListener( 'load', function () {\n\t\t\t\t\t\t\tcontext.core.image.imageLoaded = true;\n\t\t\t\t\t\t\tcontext.core.image.imageCurrentSrc =\n\t\t\t\t\t\t\t\tthis.currentSrc;\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tinitLightbox: async ( { context, ref } ) => {\n\t\t\t\t\tcontext.core.image.figureRef =\n\t\t\t\t\t\tref.querySelector( 'figure' );\n\t\t\t\t\tcontext.core.image.imageRef = ref.querySelector( 'img' );\n\t\t\t\t\tif ( context.core.image.lightboxEnabled ) {\n\t\t\t\t\t\tconst focusableElements =\n\t\t\t\t\t\t\tref.querySelectorAll( focusableSelectors );\n\t\t\t\t\t\tcontext.core.image.firstFocusableElement =\n\t\t\t\t\t\t\tfocusableElements[ 0 ];\n\t\t\t\t\t\tcontext.core.image.lastFocusableElement =\n\t\t\t\t\t\t\tfocusableElements[ focusableElements.length - 1 ];\n\n\t\t\t\t\t\tref.querySelector( '.close-button' ).focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} );\n\nfunction setZoomStyles( imgDom, context, event ) {\n\t// Typically, we use the image's full-sized dimensions. If those\n\t// dimensions have not been set (i.e. an external image with only one size),\n\t// the image's dimensions in the lightbox are the same\n\t// as those of the image in the content.\n\tlet targetWidth =\n\t\tcontext.core.image.targetWidth !== 'none'\n\t\t\t? context.core.image.targetWidth\n\t\t\t: event.target.nextElementSibling.naturalWidth;\n\tlet targetHeight =\n\t\tcontext.core.image.targetHeight !== 'none'\n\t\t\t? context.core.image.targetHeight\n\t\t\t: event.target.nextElementSibling.naturalHeight;\n\n\t// Since the lightbox image has `position:absolute`, it\n\t// ignores its parent's padding, so we need to set padding here\n\t// to calculate dimensions and positioning.\n\n\t// As per the design, let's constrain the height with fixed padding\n\tconst containerOuterHeight = window.innerHeight;\n\tconst verticalPadding = 40;\n\tconst containerInnerHeight = containerOuterHeight - verticalPadding * 2;\n\n\t// Let's set a variable horizontal padding based on the container width\n\tconst containerOuterWidth = window.innerWidth;\n\tlet horizontalPadding = 0;\n\tif ( containerOuterWidth > 480 ) {\n\t\thorizontalPadding = 40;\n\t} else if ( containerOuterWidth > 1920 ) {\n\t\thorizontalPadding = 80;\n\t}\n\tconst containerInnerWidth = containerOuterWidth - horizontalPadding * 2;\n\n\t// Check difference between the image and figure dimensions\n\tconst widthOverflow = Math.abs(\n\t\tMath.min( containerInnerWidth - targetWidth, 0 )\n\t);\n\tconst heightOverflow = Math.abs(\n\t\tMath.min( containerInnerHeight - targetHeight, 0 )\n\t);\n\n\t// If the image is larger than the container, let's resize\n\t// it along the greater axis relative to the container\n\tif ( widthOverflow > 0 || heightOverflow > 0 ) {\n\t\tconst containerInnerAspectRatio =\n\t\t\tcontainerInnerWidth / containerInnerHeight;\n\t\tconst imageAspectRatio = targetWidth / targetHeight;\n\n\t\tif ( imageAspectRatio > containerInnerAspectRatio ) {\n\t\t\ttargetWidth = containerInnerWidth;\n\t\t\ttargetHeight =\n\t\t\t\t( targetWidth * imgDom.naturalHeight ) / imgDom.naturalWidth;\n\t\t} else {\n\t\t\ttargetHeight = containerInnerHeight;\n\t\t\ttargetWidth =\n\t\t\t\t( targetHeight * imgDom.naturalWidth ) / imgDom.naturalHeight;\n\t\t}\n\t}\n\n\t// The reference img element lies adjacent to the event target button in the DOM\n\tconst { x: originLeft, y: originTop } =\n\t\tevent.target.nextElementSibling.getBoundingClientRect();\n\tconst scaleWidth =\n\t\tevent.target.nextElementSibling.offsetWidth / targetWidth;\n\tconst scaleHeight =\n\t\tevent.target.nextElementSibling.offsetHeight / targetHeight;\n\n\t// Get values used to center the image\n\tlet targetLeft = 0;\n\tif ( targetWidth >= containerInnerWidth ) {\n\t\ttargetLeft = horizontalPadding;\n\t} else {\n\t\ttargetLeft = ( containerOuterWidth - targetWidth ) / 2;\n\t}\n\tlet targetTop = 0;\n\tif ( targetHeight >= containerInnerHeight ) {\n\t\ttargetTop = verticalPadding;\n\t} else {\n\t\ttargetTop = ( containerOuterHeight - targetHeight ) / 2;\n\t}\n\n\tconst root = document.documentElement;\n\troot.style.setProperty( '--lightbox-scale-width', scaleWidth );\n\troot.style.setProperty( '--lightbox-scale-height', scaleHeight );\n\troot.style.setProperty( '--lightbox-image-max-width', targetWidth + 'px' );\n\troot.style.setProperty(\n\t\t'--lightbox-image-max-height',\n\t\ttargetHeight + 'px'\n\t);\n\troot.style.setProperty(\n\t\t'--lightbox-initial-left-position',\n\t\toriginLeft + 'px'\n\t);\n\troot.style.setProperty(\n\t\t'--lightbox-initial-top-position',\n\t\toriginTop + 'px'\n\t);\n\troot.style.setProperty(\n\t\t'--lightbox-target-left-position',\n\t\ttargetLeft + 'px'\n\t);\n\troot.style.setProperty(\n\t\t'--lightbox-target-top-position',\n\t\ttargetTop + 'px'\n\t);\n}\n"]}