@wordpress/block-library 11.1.0 → 11.2.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 (444) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/build/accordion-heading/block.json +1 -0
  3. package/build/archives/block.json +3 -0
  4. package/build/audio/edit.cjs +2 -1
  5. package/build/audio/edit.cjs.map +2 -2
  6. package/build/avatar/block.json +4 -0
  7. package/build/avatar/edit.cjs +31 -1
  8. package/build/avatar/edit.cjs.map +3 -3
  9. package/build/button/block.json +6 -0
  10. package/build/button/edit.cjs +9 -6
  11. package/build/button/edit.cjs.map +2 -2
  12. package/build/buttons/block.json +6 -1
  13. package/build/code/block.json +4 -0
  14. package/build/column/edit.cjs +5 -0
  15. package/build/column/edit.cjs.map +2 -2
  16. package/build/columns/block.json +4 -0
  17. package/build/columns/edit.cjs +21 -112
  18. package/build/columns/edit.cjs.map +3 -3
  19. package/build/comments/edit/placeholder.cjs +95 -87
  20. package/build/comments/edit/placeholder.cjs.map +2 -2
  21. package/build/comments-pagination/block.json +11 -0
  22. package/build/cover/block.json +2 -1
  23. package/build/cover/edit/index.cjs +26 -5
  24. package/build/cover/edit/index.cjs.map +2 -2
  25. package/build/cover/edit/inspector-controls.cjs +4 -1
  26. package/build/cover/edit/inspector-controls.cjs.map +2 -2
  27. package/build/cover/embed-video-utils.cjs +9 -8
  28. package/build/cover/embed-video-utils.cjs.map +2 -2
  29. package/build/cover/view.cjs +21 -0
  30. package/build/cover/view.cjs.map +7 -0
  31. package/build/details/block.json +3 -0
  32. package/build/embed/block.json +6 -1
  33. package/build/file/block.json +5 -0
  34. package/build/footnotes/block.json +4 -0
  35. package/build/gallery/block.json +13 -0
  36. package/build/gallery/dynamic-gallery.cjs +32 -93
  37. package/build/gallery/dynamic-gallery.cjs.map +3 -3
  38. package/build/gallery/edit.cjs +103 -40
  39. package/build/gallery/edit.cjs.map +2 -2
  40. package/build/gallery/order-controls.cjs +107 -0
  41. package/build/gallery/order-controls.cjs.map +7 -0
  42. package/build/gallery/order-images.cjs +92 -0
  43. package/build/gallery/order-images.cjs.map +7 -0
  44. package/build/gallery/order-options.cjs +62 -0
  45. package/build/gallery/order-options.cjs.map +7 -0
  46. package/build/gallery/use-dynamic-gallery.cjs +1 -7
  47. package/build/gallery/use-dynamic-gallery.cjs.map +2 -2
  48. package/build/gallery/use-get-media.cjs +2 -3
  49. package/build/gallery/use-get-media.cjs.map +2 -2
  50. package/build/group/edit.cjs +3 -3
  51. package/build/group/edit.cjs.map +2 -2
  52. package/build/heading/block.json +5 -0
  53. package/build/home-link/block.json +12 -0
  54. package/build/icon/components/custom-inserter/index.cjs +3 -1
  55. package/build/icon/components/custom-inserter/index.cjs.map +2 -2
  56. package/build/icon/edit.cjs +49 -5
  57. package/build/icon/edit.cjs.map +2 -2
  58. package/build/image/use-open-image-media-editor-modal.cjs +32 -28
  59. package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
  60. package/build/image/view.cjs +44 -50
  61. package/build/image/view.cjs.map +2 -2
  62. package/build/latest-comments/block.json +10 -0
  63. package/build/latest-posts/block.json +4 -0
  64. package/build/list/block.json +12 -1
  65. package/build/list-item/block.json +8 -1
  66. package/build/list-item/index.cjs +4 -0
  67. package/build/list-item/index.cjs.map +3 -3
  68. package/build/loginout/block.json +4 -0
  69. package/build/math/block.json +4 -0
  70. package/build/media-text/block.json +18 -0
  71. package/build/navigation-link/link-ui/index.cjs +33 -19
  72. package/build/navigation-link/link-ui/index.cjs.map +2 -2
  73. package/build/navigation-link/shared/index.cjs +5 -0
  74. package/build/navigation-link/shared/index.cjs.map +2 -2
  75. package/build/navigation-link/shared/use-block-suggestions.cjs +141 -0
  76. package/build/navigation-link/shared/use-block-suggestions.cjs.map +7 -0
  77. package/build/page-list/block.json +4 -0
  78. package/build/paragraph/block.json +1 -0
  79. package/build/post-author-biography/block.json +1 -0
  80. package/build/post-comments-form/block.json +5 -0
  81. package/build/post-content/block.json +2 -1
  82. package/build/post-excerpt/block.json +4 -0
  83. package/build/post-featured-image/block.json +1 -0
  84. package/build/post-featured-image/edit.cjs +1 -1
  85. package/build/post-featured-image/edit.cjs.map +2 -2
  86. package/build/post-terms/block.json +4 -0
  87. package/build/post-time-to-read/block.json +4 -0
  88. package/build/post-title/block.json +4 -0
  89. package/build/preformatted/block.json +4 -0
  90. package/build/pullquote/block.json +2 -1
  91. package/build/query-no-results/block.json +4 -0
  92. package/build/query-pagination/block.json +17 -0
  93. package/build/query-total/block.json +4 -0
  94. package/build/quote/block.json +2 -0
  95. package/build/read-more/block.json +5 -0
  96. package/build/rss/block.json +4 -0
  97. package/build/search/block.json +2 -1
  98. package/build/site-tagline/block.json +4 -0
  99. package/build/site-title/block.json +4 -0
  100. package/build/social-links/block.json +1 -0
  101. package/build/tab-list/block.json +4 -0
  102. package/build/tab-list/edit.cjs +3 -1
  103. package/build/tab-list/edit.cjs.map +3 -3
  104. package/build/tab-list/save.cjs +3 -1
  105. package/build/tab-list/save.cjs.map +3 -3
  106. package/build/tab-panels/block.json +3 -0
  107. package/build/tabs/block.json +3 -0
  108. package/build/term-count/block.json +5 -0
  109. package/build/term-description/block.json +4 -0
  110. package/build/term-name/block.json +6 -1
  111. package/build/term-template/block.json +4 -0
  112. package/build/utils/waveform-utils.cjs +2 -2
  113. package/build/utils/waveform-utils.cjs.map +2 -2
  114. package/build/verse/block.json +4 -0
  115. package/build/video/block.json +7 -1
  116. package/build/video/edit.cjs +10 -2
  117. package/build/video/edit.cjs.map +2 -2
  118. package/build-module/accordion-heading/block.json +1 -0
  119. package/build-module/archives/block.json +3 -0
  120. package/build-module/audio/edit.mjs +2 -1
  121. package/build-module/audio/edit.mjs.map +2 -2
  122. package/build-module/avatar/block.json +4 -0
  123. package/build-module/avatar/edit.mjs +33 -2
  124. package/build-module/avatar/edit.mjs.map +2 -2
  125. package/build-module/button/block.json +6 -0
  126. package/build-module/button/edit.mjs +11 -7
  127. package/build-module/button/edit.mjs.map +2 -2
  128. package/build-module/buttons/block.json +6 -1
  129. package/build-module/code/block.json +4 -0
  130. package/build-module/column/edit.mjs +5 -0
  131. package/build-module/column/edit.mjs.map +2 -2
  132. package/build-module/columns/block.json +4 -0
  133. package/build-module/columns/edit.mjs +22 -122
  134. package/build-module/columns/edit.mjs.map +2 -2
  135. package/build-module/comments/edit/placeholder.mjs +95 -87
  136. package/build-module/comments/edit/placeholder.mjs.map +2 -2
  137. package/build-module/comments-pagination/block.json +11 -0
  138. package/build-module/cover/block.json +2 -1
  139. package/build-module/cover/edit/index.mjs +32 -6
  140. package/build-module/cover/edit/index.mjs.map +2 -2
  141. package/build-module/cover/edit/inspector-controls.mjs +5 -2
  142. package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
  143. package/build-module/cover/embed-video-utils.mjs +9 -8
  144. package/build-module/cover/embed-video-utils.mjs.map +2 -2
  145. package/build-module/cover/view.mjs +19 -0
  146. package/build-module/cover/view.mjs.map +7 -0
  147. package/build-module/details/block.json +3 -0
  148. package/build-module/embed/block.json +6 -1
  149. package/build-module/file/block.json +5 -0
  150. package/build-module/footnotes/block.json +4 -0
  151. package/build-module/gallery/block.json +13 -0
  152. package/build-module/gallery/dynamic-gallery.mjs +33 -97
  153. package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
  154. package/build-module/gallery/edit.mjs +110 -42
  155. package/build-module/gallery/edit.mjs.map +2 -2
  156. package/build-module/gallery/order-controls.mjs +87 -0
  157. package/build-module/gallery/order-controls.mjs.map +7 -0
  158. package/build-module/gallery/order-images.mjs +66 -0
  159. package/build-module/gallery/order-images.mjs.map +7 -0
  160. package/build-module/gallery/order-options.mjs +33 -0
  161. package/build-module/gallery/order-options.mjs.map +7 -0
  162. package/build-module/gallery/use-dynamic-gallery.mjs +1 -7
  163. package/build-module/gallery/use-dynamic-gallery.mjs.map +2 -2
  164. package/build-module/gallery/use-get-media.mjs +2 -3
  165. package/build-module/gallery/use-get-media.mjs.map +2 -2
  166. package/build-module/group/edit.mjs +4 -4
  167. package/build-module/group/edit.mjs.map +2 -2
  168. package/build-module/heading/block.json +5 -0
  169. package/build-module/home-link/block.json +12 -0
  170. package/build-module/icon/components/custom-inserter/index.mjs +3 -1
  171. package/build-module/icon/components/custom-inserter/index.mjs.map +2 -2
  172. package/build-module/icon/edit.mjs +50 -6
  173. package/build-module/icon/edit.mjs.map +2 -2
  174. package/build-module/image/use-open-image-media-editor-modal.mjs +32 -28
  175. package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
  176. package/build-module/image/view.mjs +44 -50
  177. package/build-module/image/view.mjs.map +2 -2
  178. package/build-module/latest-comments/block.json +10 -0
  179. package/build-module/latest-posts/block.json +4 -0
  180. package/build-module/list/block.json +12 -1
  181. package/build-module/list-item/block.json +8 -1
  182. package/build-module/list-item/index.mjs +4 -0
  183. package/build-module/list-item/index.mjs.map +2 -2
  184. package/build-module/loginout/block.json +4 -0
  185. package/build-module/math/block.json +4 -0
  186. package/build-module/media-text/block.json +18 -0
  187. package/build-module/navigation-link/link-ui/index.mjs +39 -20
  188. package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
  189. package/build-module/navigation-link/shared/index.mjs +6 -0
  190. package/build-module/navigation-link/shared/index.mjs.map +2 -2
  191. package/build-module/navigation-link/shared/use-block-suggestions.mjs +120 -0
  192. package/build-module/navigation-link/shared/use-block-suggestions.mjs.map +7 -0
  193. package/build-module/page-list/block.json +4 -0
  194. package/build-module/paragraph/block.json +1 -0
  195. package/build-module/post-author-biography/block.json +1 -0
  196. package/build-module/post-comments-form/block.json +5 -0
  197. package/build-module/post-content/block.json +2 -1
  198. package/build-module/post-excerpt/block.json +4 -0
  199. package/build-module/post-featured-image/block.json +1 -0
  200. package/build-module/post-featured-image/edit.mjs +1 -1
  201. package/build-module/post-featured-image/edit.mjs.map +2 -2
  202. package/build-module/post-terms/block.json +4 -0
  203. package/build-module/post-time-to-read/block.json +4 -0
  204. package/build-module/post-title/block.json +4 -0
  205. package/build-module/preformatted/block.json +4 -0
  206. package/build-module/pullquote/block.json +2 -1
  207. package/build-module/query-no-results/block.json +4 -0
  208. package/build-module/query-pagination/block.json +17 -0
  209. package/build-module/query-total/block.json +4 -0
  210. package/build-module/quote/block.json +2 -0
  211. package/build-module/read-more/block.json +5 -0
  212. package/build-module/rss/block.json +4 -0
  213. package/build-module/search/block.json +2 -1
  214. package/build-module/site-tagline/block.json +4 -0
  215. package/build-module/site-title/block.json +4 -0
  216. package/build-module/social-links/block.json +1 -0
  217. package/build-module/tab-list/block.json +4 -0
  218. package/build-module/tab-list/edit.mjs +4 -1
  219. package/build-module/tab-list/edit.mjs.map +2 -2
  220. package/build-module/tab-list/save.mjs +4 -1
  221. package/build-module/tab-list/save.mjs.map +2 -2
  222. package/build-module/tab-panels/block.json +3 -0
  223. package/build-module/tabs/block.json +3 -0
  224. package/build-module/term-count/block.json +5 -0
  225. package/build-module/term-description/block.json +4 -0
  226. package/build-module/term-name/block.json +6 -1
  227. package/build-module/term-template/block.json +4 -0
  228. package/build-module/utils/waveform-utils.mjs +1 -1
  229. package/build-module/utils/waveform-utils.mjs.map +1 -1
  230. package/build-module/verse/block.json +4 -0
  231. package/build-module/video/block.json +7 -1
  232. package/build-module/video/edit.mjs +10 -2
  233. package/build-module/video/edit.mjs.map +2 -2
  234. package/build-style/avatar/editor-rtl.css +4 -0
  235. package/build-style/avatar/editor.css +4 -0
  236. package/build-style/comments-pagination/style-rtl.css +3 -0
  237. package/build-style/comments-pagination/style.css +3 -0
  238. package/build-style/common-rtl.css +32 -1
  239. package/build-style/common.css +35 -2
  240. package/build-style/editor-rtl.css +11 -4
  241. package/build-style/editor.css +11 -4
  242. package/build-style/embed/style-rtl.css +4 -1
  243. package/build-style/embed/style.css +4 -1
  244. package/build-style/gallery/editor-rtl.css +1 -3
  245. package/build-style/gallery/editor.css +1 -3
  246. package/build-style/image/style-rtl.css +11 -2
  247. package/build-style/image/style.css +11 -2
  248. package/build-style/media-text/style-rtl.css +4 -1
  249. package/build-style/media-text/style.css +4 -1
  250. package/build-style/query-pagination/style-rtl.css +3 -0
  251. package/build-style/query-pagination/style.css +3 -0
  252. package/build-style/style-rtl.css +70 -9
  253. package/build-style/style.css +73 -10
  254. package/build-style/table/editor-rtl.css +6 -1
  255. package/build-style/table/editor.css +6 -1
  256. package/build-style/table/style-rtl.css +4 -2
  257. package/build-style/table/style.css +4 -2
  258. package/build-style/tag-cloud/style-rtl.css +1 -1
  259. package/build-style/tag-cloud/style.css +1 -1
  260. package/build-style/verse/style-rtl.css +8 -1
  261. package/build-style/verse/style.css +8 -1
  262. package/build-types/gallery/order-controls.d.ts +58 -0
  263. package/build-types/gallery/order-controls.d.ts.map +1 -0
  264. package/build-types/gallery/order-options.d.ts +67 -0
  265. package/build-types/gallery/order-options.d.ts.map +1 -0
  266. package/package.json +44 -41
  267. package/src/accordion-heading/README.md +1 -0
  268. package/src/accordion-heading/block.json +1 -0
  269. package/src/archives/README.md +2 -0
  270. package/src/archives/block.json +3 -0
  271. package/src/audio/edit.jsx +2 -1
  272. package/src/avatar/README.md +2 -0
  273. package/src/avatar/block.json +4 -0
  274. package/src/avatar/edit.jsx +48 -2
  275. package/src/avatar/editor.scss +4 -0
  276. package/src/avatar/index.php +5 -3
  277. package/src/breadcrumbs/index.php +1 -1
  278. package/src/button/README.md +4 -0
  279. package/src/button/block.json +6 -0
  280. package/src/button/edit.jsx +47 -52
  281. package/src/button/index.php +47 -0
  282. package/src/buttons/README.md +4 -0
  283. package/src/buttons/block.json +6 -1
  284. package/src/code/README.md +3 -0
  285. package/src/code/block.json +4 -0
  286. package/src/column/edit.jsx +6 -0
  287. package/src/columns/README.md +3 -0
  288. package/src/columns/block.json +4 -0
  289. package/src/columns/edit.jsx +1 -131
  290. package/src/comments/edit/placeholder.jsx +5 -1
  291. package/src/comments-pagination/README.md +4 -0
  292. package/src/comments-pagination/block.json +11 -0
  293. package/src/comments-pagination/style.scss +3 -0
  294. package/src/common.scss +38 -0
  295. package/src/cover/README.md +1 -0
  296. package/src/cover/block.json +2 -1
  297. package/src/cover/edit/index.jsx +38 -6
  298. package/src/cover/edit/inspector-controls.jsx +10 -1
  299. package/src/cover/embed-video-utils.js +18 -10
  300. package/src/cover/index.php +44 -15
  301. package/src/cover/test/edit.browser.test.js +182 -2
  302. package/src/cover/test/embed-video-utils.test.js +48 -0
  303. package/src/cover/view.js +22 -0
  304. package/src/details/README.md +2 -0
  305. package/src/details/block.json +3 -0
  306. package/src/embed/README.md +4 -0
  307. package/src/embed/block.json +6 -1
  308. package/src/embed/style.scss +7 -1
  309. package/src/file/README.md +4 -0
  310. package/src/file/block.json +5 -0
  311. package/src/footnotes/README.md +3 -0
  312. package/src/footnotes/block.json +4 -0
  313. package/src/gallery/README.md +13 -0
  314. package/src/gallery/block.json +13 -0
  315. package/src/gallery/dynamic-gallery.jsx +11 -91
  316. package/src/gallery/edit.jsx +146 -47
  317. package/src/gallery/editor.scss +5 -9
  318. package/src/gallery/order-controls.tsx +143 -0
  319. package/src/gallery/order-images.js +111 -0
  320. package/src/gallery/order-options.ts +75 -0
  321. package/src/gallery/test/edit.jsdom.test.js +87 -10
  322. package/src/gallery/test/order-images.js +162 -0
  323. package/src/gallery/use-dynamic-gallery.js +1 -9
  324. package/src/gallery/use-get-media.js +7 -2
  325. package/src/group/edit.jsx +5 -5
  326. package/src/heading/README.md +4 -0
  327. package/src/heading/block.json +5 -0
  328. package/src/home-link/README.md +6 -0
  329. package/src/home-link/block.json +12 -0
  330. package/src/icon/components/custom-inserter/index.jsx +5 -1
  331. package/src/icon/edit.jsx +68 -7
  332. package/src/icon/index.php +1 -1
  333. package/src/image/index.php +3 -4
  334. package/src/image/style.scss +14 -2
  335. package/src/image/test/use-open-image-media-editor-modal.jsdom.test.js +122 -60
  336. package/src/image/use-open-image-media-editor-modal.js +37 -41
  337. package/src/image/view.js +64 -68
  338. package/src/latest-comments/README.md +3 -0
  339. package/src/latest-comments/block.json +10 -0
  340. package/src/latest-posts/README.md +3 -0
  341. package/src/latest-posts/block.json +4 -0
  342. package/src/list/README.md +6 -0
  343. package/src/list/block.json +12 -1
  344. package/src/list-item/README.md +6 -0
  345. package/src/list-item/block.json +8 -1
  346. package/src/list-item/index.js +5 -0
  347. package/src/loginout/README.md +3 -0
  348. package/src/loginout/block.json +4 -0
  349. package/src/math/README.md +3 -0
  350. package/src/math/block.json +4 -0
  351. package/src/media-text/README.md +17 -0
  352. package/src/media-text/block.json +18 -0
  353. package/src/media-text/style.scss +5 -1
  354. package/src/navigation/test/use-navigation-menu.jsdom.test.js +1 -1
  355. package/src/navigation-link/README.md +1 -1
  356. package/src/navigation-link/link-ui/index.jsx +60 -27
  357. package/src/navigation-link/link-ui/test/get-suggestions-query.jsdom.test.js +67 -0
  358. package/src/navigation-link/shared/index.js +4 -0
  359. package/src/navigation-link/shared/test/use-block-suggestions.jsdom.test.js +158 -0
  360. package/src/navigation-link/shared/test/use-entity-binding.jsdom.test.js +1 -7
  361. package/src/navigation-link/shared/use-block-suggestions.js +192 -0
  362. package/src/page-list/README.md +3 -0
  363. package/src/page-list/block.json +4 -0
  364. package/src/paragraph/README.md +1 -0
  365. package/src/paragraph/block.json +1 -0
  366. package/src/playlist/test/edit-component.jsdom.test.jsx +11 -11
  367. package/src/playlist-track/test/edit.jsdom.test.jsx +3 -3
  368. package/src/post-author-biography/README.md +1 -0
  369. package/src/post-author-biography/block.json +1 -0
  370. package/src/post-comments-form/README.md +3 -0
  371. package/src/post-comments-form/block.json +5 -0
  372. package/src/post-content/README.md +1 -0
  373. package/src/post-content/block.json +2 -1
  374. package/src/post-excerpt/README.md +3 -0
  375. package/src/post-excerpt/block.json +4 -0
  376. package/src/post-featured-image/block.json +1 -0
  377. package/src/post-featured-image/edit.jsx +2 -2
  378. package/src/post-terms/README.md +3 -0
  379. package/src/post-terms/block.json +4 -0
  380. package/src/post-time-to-read/README.md +3 -0
  381. package/src/post-time-to-read/block.json +4 -0
  382. package/src/post-title/README.md +3 -0
  383. package/src/post-title/block.json +4 -0
  384. package/src/preformatted/README.md +3 -0
  385. package/src/preformatted/block.json +4 -0
  386. package/src/pullquote/README.md +1 -0
  387. package/src/pullquote/block.json +2 -1
  388. package/src/query-no-results/README.md +3 -0
  389. package/src/query-no-results/block.json +4 -0
  390. package/src/query-pagination/README.md +4 -0
  391. package/src/query-pagination/block.json +17 -0
  392. package/src/query-pagination/style.scss +3 -0
  393. package/src/query-total/README.md +3 -0
  394. package/src/query-total/block.json +4 -0
  395. package/src/quote/README.md +2 -0
  396. package/src/quote/block.json +2 -0
  397. package/src/read-more/README.md +3 -0
  398. package/src/read-more/block.json +5 -0
  399. package/src/rss/README.md +3 -0
  400. package/src/rss/block.json +4 -0
  401. package/src/search/README.md +1 -0
  402. package/src/search/block.json +2 -1
  403. package/src/site-tagline/README.md +3 -0
  404. package/src/site-tagline/block.json +4 -0
  405. package/src/site-title/README.md +3 -0
  406. package/src/site-title/block.json +4 -0
  407. package/src/social-links/README.md +1 -0
  408. package/src/social-links/block.json +1 -0
  409. package/src/tab-list/README.md +2 -0
  410. package/src/tab-list/block.json +4 -0
  411. package/src/tab-list/edit.jsx +3 -0
  412. package/src/tab-list/save.jsx +3 -0
  413. package/src/tab-panels/README.md +2 -0
  414. package/src/tab-panels/block.json +3 -0
  415. package/src/table/editor.scss +8 -2
  416. package/src/table/style.scss +4 -4
  417. package/src/tabs/README.md +2 -0
  418. package/src/tabs/block.json +3 -0
  419. package/src/tag-cloud/style.scss +1 -1
  420. package/src/template-part/index.php +16 -3
  421. package/src/term-count/README.md +4 -0
  422. package/src/term-count/block.json +5 -0
  423. package/src/term-description/README.md +3 -0
  424. package/src/term-description/block.json +4 -0
  425. package/src/term-name/README.md +4 -0
  426. package/src/term-name/block.json +6 -1
  427. package/src/term-template/README.md +3 -0
  428. package/src/term-template/block.json +4 -0
  429. package/src/utils/test/waveform-player-auto-init.jsdom.test.js +25 -0
  430. package/src/utils/test/waveform-player-dependency.jsdom.test.js +7 -60
  431. package/src/utils/test/waveform-utils.browser.test.js +3 -15
  432. package/src/utils/waveform-utils.js +1 -1
  433. package/src/verse/README.md +4 -0
  434. package/src/verse/block.json +4 -0
  435. package/src/verse/style.scss +11 -2
  436. package/src/video/README.md +4 -0
  437. package/src/video/block.json +7 -1
  438. package/src/video/edit.jsx +13 -2
  439. package/build/columns/utils.cjs +0 -112
  440. package/build/columns/utils.cjs.map +0 -7
  441. package/build-module/columns/utils.mjs +0 -78
  442. package/build-module/columns/utils.mjs.map +0 -7
  443. package/src/columns/test/utils.js +0 -331
  444. package/src/columns/utils.js +0 -176
package/CHANGELOG.md CHANGED
@@ -2,6 +2,38 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 11.2.0 (2026-10-07)
6
+
7
+ ### Enhancements
8
+
9
+ - Navigation Link: Search every entity type from the link UI instead of only the link's own type; so a category, tag or post can be added without needing to add that specific type's navigation link block ([#83408](https://github.com/WordPress/gutenberg/pull/83408)).
10
+ - Navigation Link: List the blocks a Navigation allows in the link UI search results, so typing "Home" finds the Home Link block ([#83652](https://github.com/WordPress/gutenberg/pull/83652)).
11
+ - Cover: Don't autoplay an embedded background video on the front end when the visitor prefers reduced motion. A new view module swaps the iframe source for one without the autoplay parameters ([#83452](https://github.com/WordPress/gutenberg/pull/83452)).
12
+ - Columns: Remove the column count slider from the block settings ([#83262](https://github.com/WordPress/gutenberg/pull/83262)).
13
+ - Avatar: Explain in the block settings that avatars use the Gravatar service, and link users who can manage settings to the Discussion settings where the default avatar is chosen ([#83567](https://github.com/WordPress/gutenberg/pull/83567)).
14
+ - Media & Text: Lower the specificity of the content area's default padding so themes can override it, including through the block's custom CSS in `theme.json` ([#83563](https://github.com/WordPress/gutenberg/pull/83563)).
15
+ - Gallery: Add an "Order by" sorting control to the static gallery mode, and consolidate sorting control for static and dynamic modes in the Settings panel ([#83438](https://github.com/WordPress/gutenberg/pull/83438)).
16
+ - Icon: Match an icon's keywords as well as its name and label when searching the icon library ([#82367](https://github.com/WordPress/gutenberg/pull/82367)).
17
+ - Button: Only open the link popover from the toolbar button or keyboard shortcut instead of whenever a linked button is selected. The toolbar button now shows a pressed state when a link is set ([#30166](https://github.com/WordPress/gutenberg/pull/30166)).
18
+ - Use the `inertValue` helper to set `inert` attributes, for better React 18/19 compatibility ([#83871](https://github.com/WordPress/gutenberg/pull/83871)).
19
+ - Image, Cover: Restore the previous attachment with snackbar Undo, including attachment-derived Image attributes while preserving Cover settings ([#81805](https://github.com/WordPress/gutenberg/pull/81805)).
20
+
21
+ ### Bug Fixes
22
+
23
+ - Tag Cloud: Space the tags of the Outline style evenly. The base link margin outranked the style's own reset, so each tag carried that margin on top of the container's gap and the horizontal spacing did not match the spacing between rows ([#70224](https://github.com/WordPress/gutenberg/pull/70224)).
24
+ - Image: Stop a click on the enlarged image from closing the lightbox, so tapping the image to inspect it, or mis-tapping while reaching for Previous or Next, no longer dismisses it. The Close button, Escape and the area around the image still close the lightbox ([#78898](https://github.com/WordPress/gutenberg/pull/78898)).
25
+ - Math: Align the cells of `aligned` and `cases`, and draw `\overline` and `\underline`, in Chromium, in the Math block and in inline math. The rules key on the MathML attributes and only apply where the engine does not render them natively ([#83164](https://github.com/WordPress/gutenberg/pull/83164)).
26
+ - Image: Fix the lightbox being impossible to close when its overlay is not a direct child of `<body>` ([#83480](https://github.com/WordPress/gutenberg/pull/83480)).
27
+ - Image: Stop the lightbox from removing `inert` that a theme set on elements outside the overlay ([#83480](https://github.com/WordPress/gutenberg/pull/83480)).
28
+ - Image: Show the original image proportions in the lightbox and animate the thumbnail crop during zooming ([#79058](https://github.com/WordPress/gutenberg/pull/79058)).
29
+ - Template Part: Fall back to the theme's template part file and report the error with `wp_trigger_error()` when the customized template part can't be loaded, instead of rendering nothing and logging an `Undefined property: WP_Error::$content` warning ([#83809](https://github.com/WordPress/gutenberg/pull/83809)).
30
+ - Post Featured Image: Do not wrap the media placeholder in a post link when `isLink` comes from the template, so adding a featured image no longer crashes the editor ([#81584](https://github.com/WordPress/gutenberg/pull/81584)).
31
+ - Image: Percent-encode the inline SVG in the circle-mask style's `mask-image`, and drop the malformed `;utf8` media type parameter, so audit tools no longer report the data URI as an invalid `url()` value ([#82333](https://github.com/WordPress/gutenberg/pull/82333)).
32
+
33
+ ### Internal
34
+
35
+ - Playlist: Update `@arraypress/waveform-player` to `^1.27.0` and import its `no-autoinit` entry, replacing the dependency patch ([#83132](https://github.com/WordPress/gutenberg/pull/83132)).
36
+
5
37
  ## 11.1.0 (2026-09-23)
6
38
 
7
39
  ### Enhancements
@@ -45,6 +45,7 @@
45
45
  "letterSpacing"
46
46
  ],
47
47
  "fontSize": true,
48
+ "lineHeight": true,
48
49
  "__experimentalFontFamily": true,
49
50
  "__experimentalFontWeight": true,
50
51
  "__experimentalFontStyle": true,
@@ -42,6 +42,9 @@
42
42
  "gradient": true
43
43
  }
44
44
  },
45
+ "dimensions": {
46
+ "minHeight": true
47
+ },
45
48
  "html": false,
46
49
  "spacing": {
47
50
  "margin": true,
@@ -36,6 +36,7 @@ module.exports = __toCommonJS(edit_exports);
36
36
  var import_clsx = __toESM(require("clsx"));
37
37
  var import_blob = require("@wordpress/blob");
38
38
  var import_components = require("@wordpress/components");
39
+ var import_react_inert_value = require("@wordpress/react-inert-value");
39
40
  var import_ui = require("@wordpress/ui");
40
41
  var import_block_editor = require("@wordpress/block-editor");
41
42
  var import_i18n = require("@wordpress/i18n");
@@ -242,7 +243,7 @@ function AudioEdit({
242
243
  "audio",
243
244
  {
244
245
  controls: "controls",
245
- inert: !isSingleSelected ? "true" : void 0,
246
+ inert: (0, import_react_inert_value.inertValue)(!isSingleSelected),
246
247
  src: src ?? temporaryURL
247
248
  }
248
249
  ),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/audio/edit.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tSelectControl as WCSelectControl,\n\tSpinner,\n\tToggleControl,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { Text } from '@wordpress/ui';\nimport {\n\tBlockControls,\n\tBlockIcon,\n\tInspectorControls,\n\tMediaPlaceholder,\n\tMediaReplaceFlow,\n\tuseBlockProps,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\nimport { __, _x } from '@wordpress/i18n';\nimport { useDispatch } from '@wordpress/data';\nimport { audio as icon } from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { useState } from '@wordpress/element';\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport {\n\tuseUploadMediaFromBlobURL,\n\tuseToolsPanelDropdownMenuProps,\n} from '../utils/hooks';\nimport { Caption } from '../utils/caption';\n\nconst ALLOWED_MEDIA_TYPES = [ 'audio' ];\n\n/**\n * Renders the `core/audio` block on the editor.\n *\n * @param {Object} props React props.\n * @param {Object} props.attributes Block attributes: `blob`, `src`, `caption`, `id`, `autoplay`, `loop` and `preload`.\n * @param {string} props.className Class name generated for the block.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {Function} props.onReplace Callback for replacing this block with other blocks.\n * @param {boolean} props.isSelected Whether the block is the only selected block.\n * @param {Function} props.insertBlocksAfter Callback for inserting blocks after this one.\n *\n * @return {React.JSX.Element} React element.\n */\nfunction AudioEdit( {\n\tattributes,\n\tclassName,\n\tsetAttributes,\n\tonReplace,\n\tisSelected: isSingleSelected,\n\tinsertBlocksAfter,\n} ) {\n\tconst { id, autoplay, loop, preload, src } = attributes;\n\tconst [ temporaryURL, setTemporaryURL ] = useState( attributes.blob );\n\tconst blockEditingMode = useBlockEditingMode();\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\n\tuseUploadMediaFromBlobURL( {\n\t\turl: temporaryURL,\n\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\tonChange: onSelectAudio,\n\t\tonError: onUploadError,\n\t} );\n\n\tfunction toggleAttribute( attribute ) {\n\t\treturn ( newValue ) => {\n\t\t\tsetAttributes( { [ attribute ]: newValue } );\n\t\t};\n\t}\n\n\tfunction onSelectURL( newSrc ) {\n\t\t// Set the block's src from the edit component's state, and switch off\n\t\t// the editing UI.\n\t\tif ( newSrc !== src ) {\n\t\t\t// Check if there's an embed block that handles this URL.\n\t\t\tconst embedBlock = createUpgradedEmbedBlock( {\n\t\t\t\tattributes: { url: newSrc },\n\t\t\t} );\n\t\t\tif ( undefined !== embedBlock && onReplace ) {\n\t\t\t\tonReplace( embedBlock );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetAttributes( { src: newSrc, id: undefined, blob: undefined } );\n\t\t\tsetTemporaryURL();\n\t\t}\n\t}\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t}\n\n\tfunction onSelectAudio( media ) {\n\t\tif ( ! media || ! media.url ) {\n\t\t\t// In this case there was an error and we should continue in the editing state\n\t\t\t// previous attributes should be removed because they may be temporary blob urls.\n\t\t\tsetAttributes( {\n\t\t\t\tsrc: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\tcaption: undefined,\n\t\t\t\tblob: undefined,\n\t\t\t} );\n\t\t\tsetTemporaryURL();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetTemporaryURL( media.url );\n\t\t\treturn;\n\t\t}\n\n\t\t// Sets the block's attribute and updates the edit component from the\n\t\t// selected media, then switches off the editing UI.\n\t\tsetAttributes( {\n\t\t\tblob: undefined,\n\t\t\tsrc: media.url,\n\t\t\tid: media.id,\n\t\t\tcaption: media.caption,\n\t\t} );\n\t\tsetTemporaryURL();\n\t}\n\n\tconst classes = clsx( className, {\n\t\t'is-transient': !! temporaryURL,\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classes,\n\t} );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tif ( ! src && ! temporaryURL ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\t\tonSelect={ onSelectAudio }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tvalue={ attributes }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ isSingleSelected && (\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={ src }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\t\tonSelect={ onSelectAudio }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t\tonReset={ () => onSelectAudio( undefined ) }\n\t\t\t\t\t\tvariant=\"toolbar\"\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<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\tautoplay: false,\n\t\t\t\t\t\t\tloop: false,\n\t\t\t\t\t\t\tpreload: undefined,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t<Text className=\"wp-block-audio__autoplay-help-text\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Most browsers block audio until a visitor interacts with the page, so autoplay often won’t work, especially on mobile. Unexpected sound can also be disruptive for screen reader users.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Text>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Autoplay' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! autoplay }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tautoplay: false,\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\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Autoplay' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'autoplay' ) }\n\t\t\t\t\t\t\tchecked={ !! autoplay }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Loop' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! loop }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tloop: false,\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\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Loop' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'loop' ) }\n\t\t\t\t\t\t\tchecked={ !! loop }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Preload' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! preload }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tpreload: undefined,\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\t<WCSelectControl\n\t\t\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t\t\t'Preload',\n\t\t\t\t\t\t\t\t'noun; Audio block parameter'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tvalue={ preload || '' }\n\t\t\t\t\t\t\t// `undefined` is required for the preload attribute to be unset.\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tpreload: value || undefined,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t\t{ value: '', label: __( 'Browser default' ) },\n\t\t\t\t\t\t\t\t{ value: 'auto', label: __( 'Auto' ) },\n\t\t\t\t\t\t\t\t{ value: 'metadata', label: __( 'Metadata' ) },\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvalue: 'none',\n\t\t\t\t\t\t\t\t\tlabel: _x( 'None', 'Preload value' ),\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</ToolsPanelItem>\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<figure { ...blockProps }>\n\t\t\t\t<audio\n\t\t\t\t\tcontrols=\"controls\"\n\t\t\t\t\tinert={ ! isSingleSelected ? 'true' : undefined }\n\t\t\t\t\tsrc={ src ?? temporaryURL }\n\t\t\t\t/>\n\t\t\t\t{ !! temporaryURL && <Spinner /> }\n\t\t\t\t<Caption\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tisSelected={ isSingleSelected }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t\tlabel={ __( 'Audio caption text' ) }\n\t\t\t\t\tshowToolbarButton={\n\t\t\t\t\t\tisSingleSelected && hasNonContentControls\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</figure>\n\t\t</>\n\t);\n}\n\nexport default AudioEdit;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tSelectControl as WCSelectControl,\n\tSpinner,\n\tToggleControl,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { inertValue } from '@wordpress/react-inert-value';\nimport { Text } from '@wordpress/ui';\nimport {\n\tBlockControls,\n\tBlockIcon,\n\tInspectorControls,\n\tMediaPlaceholder,\n\tMediaReplaceFlow,\n\tuseBlockProps,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\nimport { __, _x } from '@wordpress/i18n';\nimport { useDispatch } from '@wordpress/data';\nimport { audio as icon } from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { useState } from '@wordpress/element';\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport {\n\tuseUploadMediaFromBlobURL,\n\tuseToolsPanelDropdownMenuProps,\n} from '../utils/hooks';\nimport { Caption } from '../utils/caption';\n\nconst ALLOWED_MEDIA_TYPES = [ 'audio' ];\n\n/**\n * Renders the `core/audio` block on the editor.\n *\n * @param {Object} props React props.\n * @param {Object} props.attributes Block attributes: `blob`, `src`, `caption`, `id`, `autoplay`, `loop` and `preload`.\n * @param {string} props.className Class name generated for the block.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {Function} props.onReplace Callback for replacing this block with other blocks.\n * @param {boolean} props.isSelected Whether the block is the only selected block.\n * @param {Function} props.insertBlocksAfter Callback for inserting blocks after this one.\n *\n * @return {React.JSX.Element} React element.\n */\nfunction AudioEdit( {\n\tattributes,\n\tclassName,\n\tsetAttributes,\n\tonReplace,\n\tisSelected: isSingleSelected,\n\tinsertBlocksAfter,\n} ) {\n\tconst { id, autoplay, loop, preload, src } = attributes;\n\tconst [ temporaryURL, setTemporaryURL ] = useState( attributes.blob );\n\tconst blockEditingMode = useBlockEditingMode();\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\n\tuseUploadMediaFromBlobURL( {\n\t\turl: temporaryURL,\n\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\tonChange: onSelectAudio,\n\t\tonError: onUploadError,\n\t} );\n\n\tfunction toggleAttribute( attribute ) {\n\t\treturn ( newValue ) => {\n\t\t\tsetAttributes( { [ attribute ]: newValue } );\n\t\t};\n\t}\n\n\tfunction onSelectURL( newSrc ) {\n\t\t// Set the block's src from the edit component's state, and switch off\n\t\t// the editing UI.\n\t\tif ( newSrc !== src ) {\n\t\t\t// Check if there's an embed block that handles this URL.\n\t\t\tconst embedBlock = createUpgradedEmbedBlock( {\n\t\t\t\tattributes: { url: newSrc },\n\t\t\t} );\n\t\t\tif ( undefined !== embedBlock && onReplace ) {\n\t\t\t\tonReplace( embedBlock );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetAttributes( { src: newSrc, id: undefined, blob: undefined } );\n\t\t\tsetTemporaryURL();\n\t\t}\n\t}\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t}\n\n\tfunction onSelectAudio( media ) {\n\t\tif ( ! media || ! media.url ) {\n\t\t\t// In this case there was an error and we should continue in the editing state\n\t\t\t// previous attributes should be removed because they may be temporary blob urls.\n\t\t\tsetAttributes( {\n\t\t\t\tsrc: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\tcaption: undefined,\n\t\t\t\tblob: undefined,\n\t\t\t} );\n\t\t\tsetTemporaryURL();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetTemporaryURL( media.url );\n\t\t\treturn;\n\t\t}\n\n\t\t// Sets the block's attribute and updates the edit component from the\n\t\t// selected media, then switches off the editing UI.\n\t\tsetAttributes( {\n\t\t\tblob: undefined,\n\t\t\tsrc: media.url,\n\t\t\tid: media.id,\n\t\t\tcaption: media.caption,\n\t\t} );\n\t\tsetTemporaryURL();\n\t}\n\n\tconst classes = clsx( className, {\n\t\t'is-transient': !! temporaryURL,\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classes,\n\t} );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tif ( ! src && ! temporaryURL ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\t\tonSelect={ onSelectAudio }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tvalue={ attributes }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ isSingleSelected && (\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={ src }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\t\tonSelect={ onSelectAudio }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t\tonReset={ () => onSelectAudio( undefined ) }\n\t\t\t\t\t\tvariant=\"toolbar\"\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<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\tautoplay: false,\n\t\t\t\t\t\t\tloop: false,\n\t\t\t\t\t\t\tpreload: undefined,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t<Text className=\"wp-block-audio__autoplay-help-text\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Most browsers block audio until a visitor interacts with the page, so autoplay often won’t work, especially on mobile. Unexpected sound can also be disruptive for screen reader users.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Text>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Autoplay' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! autoplay }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tautoplay: false,\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\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Autoplay' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'autoplay' ) }\n\t\t\t\t\t\t\tchecked={ !! autoplay }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Loop' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! loop }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tloop: false,\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\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Loop' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'loop' ) }\n\t\t\t\t\t\t\tchecked={ !! loop }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Preload' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! preload }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tpreload: undefined,\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\t<WCSelectControl\n\t\t\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t\t\t'Preload',\n\t\t\t\t\t\t\t\t'noun; Audio block parameter'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tvalue={ preload || '' }\n\t\t\t\t\t\t\t// `undefined` is required for the preload attribute to be unset.\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tpreload: value || undefined,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t\t{ value: '', label: __( 'Browser default' ) },\n\t\t\t\t\t\t\t\t{ value: 'auto', label: __( 'Auto' ) },\n\t\t\t\t\t\t\t\t{ value: 'metadata', label: __( 'Metadata' ) },\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvalue: 'none',\n\t\t\t\t\t\t\t\t\tlabel: _x( 'None', 'Preload value' ),\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</ToolsPanelItem>\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<figure { ...blockProps }>\n\t\t\t\t<audio\n\t\t\t\t\tcontrols=\"controls\"\n\t\t\t\t\tinert={ inertValue( ! isSingleSelected ) }\n\t\t\t\t\tsrc={ src ?? temporaryURL }\n\t\t\t\t/>\n\t\t\t\t{ !! temporaryURL && <Spinner /> }\n\t\t\t\t<Caption\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tisSelected={ isSingleSelected }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t\tlabel={ __( 'Audio caption text' ) }\n\t\t\t\t\tshowToolbarButton={\n\t\t\t\t\t\tisSingleSelected && hasNonContentControls\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</figure>\n\t\t</>\n\t);\n}\n\nexport default AudioEdit;\n"],
5
+ "mappings": "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",
6
6
  "names": ["noticesStore", "clsx", "icon", "ToolsPanel", "ToolsPanelItem", "WCSelectControl"]
7
7
  }
@@ -54,12 +54,16 @@
54
54
  "filter": {
55
55
  "duotone": true
56
56
  },
57
+ "shadow": {
58
+ "__experimentalSkipSerialization": true
59
+ },
57
60
  "interactivity": {
58
61
  "clientNavigation": true
59
62
  }
60
63
  },
61
64
  "selectors": {
62
65
  "border": ".wp-block-avatar img",
66
+ "shadow": ".wp-block-avatar img",
63
67
  "filter": {
64
68
  "duotone": ".wp-block-avatar img"
65
69
  }
@@ -36,12 +36,36 @@ module.exports = __toCommonJS(edit_exports);
36
36
  var import_clsx = __toESM(require("clsx"));
37
37
  var import_block_editor = require("@wordpress/block-editor");
38
38
  var import_components = require("@wordpress/components");
39
+ var import_core_data = require("@wordpress/core-data");
40
+ var import_data = require("@wordpress/data");
41
+ var import_element = require("@wordpress/element");
39
42
  var import_i18n = require("@wordpress/i18n");
43
+ var import_ui = require("@wordpress/ui");
40
44
  var import_url = require("@wordpress/url");
41
45
  var import_hooks = require("../utils/hooks.cjs");
42
46
  var import_hooks2 = require("./hooks.cjs");
43
47
  var import_user_control = __toESM(require("./user-control.cjs"));
44
48
  var import_jsx_runtime = require("react/jsx-runtime");
49
+ function useAvatarHelpText() {
50
+ const canManageSettings = (0, import_data.useSelect)(
51
+ (select) => select(import_core_data.store).canUser("update", {
52
+ kind: "root",
53
+ name: "site"
54
+ }),
55
+ []
56
+ );
57
+ if (!canManageSettings) {
58
+ return null;
59
+ }
60
+ return (0, import_element.createInterpolateElement)(
61
+ (0, import_i18n.__)(
62
+ "Avatars use the Gravatar service. Go to <a>Discussion settings</a> to change the default avatar."
63
+ ),
64
+ {
65
+ a: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ui.Link, { href: "options-discussion.php", openInNewTab: true })
66
+ }
67
+ );
68
+ }
45
69
  var AvatarInspectorControls = ({
46
70
  setAttributes,
47
71
  avatar,
@@ -49,6 +73,7 @@ var AvatarInspectorControls = ({
49
73
  selectUser
50
74
  }) => {
51
75
  const dropdownMenuProps = (0, import_hooks.useToolsPanelDropdownMenuProps)();
76
+ const helpText = useAvatarHelpText();
52
77
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_block_editor.InspectorControls, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
53
78
  import_components.__experimentalToolsPanel,
54
79
  {
@@ -63,6 +88,7 @@ var AvatarInspectorControls = ({
63
88
  },
64
89
  dropdownMenuProps,
65
90
  children: [
91
+ helpText && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ui.Text, { className: "wp-block-avatar__help-text", children: helpText }),
66
92
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
67
93
  import_components.__experimentalToolsPanelItem,
68
94
  {
@@ -162,6 +188,7 @@ var ResizableAvatar = ({
162
188
  isSelected
163
189
  }) => {
164
190
  const borderProps = (0, import_block_editor.__experimentalUseBorderProps)(attributes);
191
+ const shadowProps = (0, import_block_editor.__experimentalGetShadowClassesAndStyles)(attributes);
165
192
  const doubledSizedSrc = (0, import_url.addQueryArgs)(
166
193
  (0, import_url.removeQueryArgs)(avatar?.src, ["s"]),
167
194
  {
@@ -205,7 +232,10 @@ var ResizableAvatar = ({
205
232
  "wp-block-avatar__image",
206
233
  borderProps.className
207
234
  ),
208
- style: borderProps.style
235
+ style: {
236
+ ...borderProps.style,
237
+ ...shadowProps.style
238
+ }
209
239
  }
210
240
  )
211
241
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/avatar/edit.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport {\n\tInspectorControls,\n\tuseBlockProps,\n\t__experimentalUseBorderProps as useBorderProps,\n} from '@wordpress/block-editor';\nimport {\n\tRangeControl,\n\tResizableBox,\n\tToggleControl,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __, isRTL } from '@wordpress/i18n';\nimport { addQueryArgs, removeQueryArgs } from '@wordpress/url';\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\nimport { useCommentAvatar, useUserAvatar } from './hooks';\nimport UserControl from './user-control';\n\n/**\n * Renders the inspector controls for the `core/avatar` block.\n *\n * @param {Object} props React props.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {Object} props.avatar Avatar data returned by `useCommentAvatar` or `useUserAvatar`, with the `minSize` and `maxSize` bounds of the size control.\n * @param {Object} props.attributes Block attributes: `size`, `isLink`, `linkTarget` and `userId`.\n * @param {boolean} props.selectUser Whether to render the user selection control.\n *\n * @return {React.JSX.Element} React element.\n */\nconst AvatarInspectorControls = ( {\n\tsetAttributes,\n\tavatar,\n\tattributes,\n\tselectUser,\n} ) => {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<ToolsPanel\n\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\tresetAll={ () => {\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\tsize: 96,\n\t\t\t\t\t\tisLink: false,\n\t\t\t\t\t\tlinkTarget: '_self',\n\t\t\t\t\t\tuserId: undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t>\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\tlabel={ __( 'Image size' ) }\n\t\t\t\t\tisShownByDefault\n\t\t\t\t\thasValue={ () => attributes?.size !== 96 }\n\t\t\t\t\tonDeselect={ () => setAttributes( { size: 96 } ) }\n\t\t\t\t>\n\t\t\t\t\t<RangeControl\n\t\t\t\t\t\tlabel={ __( 'Image size' ) }\n\t\t\t\t\t\tonChange={ ( newSize ) =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tsize: newSize,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmin={ avatar.minSize }\n\t\t\t\t\t\tmax={ avatar.maxSize }\n\t\t\t\t\t\tinitialPosition={ attributes?.size }\n\t\t\t\t\t\tvalue={ attributes?.size }\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\tlabel={ __( 'Link to user profile' ) }\n\t\t\t\t\tisShownByDefault\n\t\t\t\t\thasValue={ () => attributes?.isLink }\n\t\t\t\t\tonDeselect={ () => setAttributes( { isLink: false } ) }\n\t\t\t\t>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ __( 'Link to user profile' ) }\n\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\tsetAttributes( { isLink: ! attributes.isLink } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchecked={ attributes.isLink }\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t\t{ attributes.isLink && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => attributes?.linkTarget !== '_self' }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { linkTarget: '_self' } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tlinkTarget: value ? '_blank' : '_self',\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchecked={ attributes.linkTarget === '_blank' }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ selectUser && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'User' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! attributes?.userId }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { userId: undefined } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<UserControl\n\t\t\t\t\t\t\tvalue={ attributes?.userId }\n\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tuserId: value,\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</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n};\n\n/**\n * Wraps the avatar image in a placeholder link when the block links to the user\n * profile. The link is inert in the editor: it points at a fragment and its\n * click handler prevents navigation.\n *\n * @param {Object} props React props.\n * @param {React.ReactNode} props.children Avatar image to wrap.\n * @param {boolean} props.isLink Whether to wrap the children in a link.\n *\n * @return {React.ReactNode} The children, wrapped in a link when `isLink` is true.\n */\nconst AvatarLinkWrapper = ( { children, isLink } ) =>\n\tisLink ? (\n\t\t<a\n\t\t\thref=\"#avatar-pseudo-link\"\n\t\t\tclassName=\"wp-block-avatar__link\"\n\t\t\tonClick={ ( event ) => event.preventDefault() }\n\t\t>\n\t\t\t{ children }\n\t\t</a>\n\t) : (\n\t\tchildren\n\t);\n\n/**\n * Renders the avatar image inside a `ResizableBox` so its size can be adjusted\n * by dragging. Resizing keeps the aspect ratio and updates the `size` attribute.\n *\n * @param {Object} props React props.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {Object} props.attributes Block attributes: `size` and `isLink`, plus the border support values read by `useBorderProps`.\n * @param {Object} props.avatar Avatar data returned by `useCommentAvatar` or `useUserAvatar`, with the image `src` and `alt` and the `minSize` and `maxSize` resize bounds.\n * @param {Object} props.blockProps Props returned by `useBlockProps`, applied to the wrapper element.\n * @param {boolean} props.isSelected Whether the block is selected. Resize handles are only shown when it is.\n *\n * @return {React.JSX.Element} React element.\n */\nconst ResizableAvatar = ( {\n\tsetAttributes,\n\tattributes,\n\tavatar,\n\tblockProps,\n\tisSelected,\n} ) => {\n\tconst borderProps = useBorderProps( attributes );\n\tconst doubledSizedSrc = addQueryArgs(\n\t\tremoveQueryArgs( avatar?.src, [ 's' ] ),\n\t\t{\n\t\t\ts: attributes?.size * 2,\n\t\t}\n\t);\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<AvatarLinkWrapper isLink={ attributes.isLink }>\n\t\t\t\t<ResizableBox\n\t\t\t\t\tsize={ {\n\t\t\t\t\t\twidth: attributes.size,\n\t\t\t\t\t\theight: attributes.size,\n\t\t\t\t\t} }\n\t\t\t\t\tshowHandle={ isSelected }\n\t\t\t\t\tonResizeStop={ ( event, direction, elt, delta ) => {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tsize: parseInt(\n\t\t\t\t\t\t\t\tattributes.size +\n\t\t\t\t\t\t\t\t\t( delta.height || delta.width ),\n\t\t\t\t\t\t\t\t10\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\tlockAspectRatio\n\t\t\t\t\tenable={ {\n\t\t\t\t\t\ttop: false,\n\t\t\t\t\t\tright: ! isRTL(),\n\t\t\t\t\t\tbottom: true,\n\t\t\t\t\t\tleft: isRTL(),\n\t\t\t\t\t} }\n\t\t\t\t\tminWidth={ avatar.minSize }\n\t\t\t\t\tmaxWidth={ avatar.maxSize }\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={ doubledSizedSrc }\n\t\t\t\t\t\talt={ avatar.alt }\n\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t'avatar',\n\t\t\t\t\t\t\t'avatar-' + attributes.size,\n\t\t\t\t\t\t\t'photo',\n\t\t\t\t\t\t\t'wp-block-avatar__image',\n\t\t\t\t\t\t\tborderProps.className\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tstyle={ borderProps.style }\n\t\t\t\t\t/>\n\t\t\t\t</ResizableBox>\n\t\t\t</AvatarLinkWrapper>\n\t\t</div>\n\t);\n};\n\n/**\n * Renders the block for a comment author, resolving the avatar from the\n * `commentId` context. The user selection control is not offered here because\n * the author is determined by the comment.\n *\n * @param {Object} props React props.\n * @param {Object} props.attributes Block attributes.\n * @param {Object} props.context Inherited context, from which the comment ID is read.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {boolean} props.isSelected Whether the block is selected.\n *\n * @return {React.JSX.Element} React element.\n */\nconst CommentEdit = ( { attributes, context, setAttributes, isSelected } ) => {\n\tconst { commentId } = context;\n\tconst blockProps = useBlockProps();\n\tconst avatar = useCommentAvatar( { commentId } );\n\treturn (\n\t\t<>\n\t\t\t<AvatarInspectorControls\n\t\t\t\tavatar={ avatar }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\tattributes={ attributes }\n\t\t\t\tselectUser={ false }\n\t\t\t/>\n\t\t\t<ResizableAvatar\n\t\t\t\tattributes={ attributes }\n\t\t\t\tavatar={ avatar }\n\t\t\t\tblockProps={ blockProps }\n\t\t\t\tisSelected={ isSelected }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t/>\n\t\t</>\n\t);\n};\n\n/**\n * Renders the block for a user, resolving the avatar from the `userId`\n * attribute when set, and otherwise from the author of the post identified by\n * the `postType` and `postId` context.\n *\n * @param {Object} props React props.\n * @param {Object} props.attributes Block attributes, from which the `userId` is read.\n * @param {Object} props.context Inherited context, from which the post type and post ID are read.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {boolean} props.isSelected Whether the block is selected.\n *\n * @return {React.JSX.Element} React element.\n */\nconst UserEdit = ( { attributes, context, setAttributes, isSelected } ) => {\n\tconst { postId, postType } = context;\n\tconst avatar = useUserAvatar( {\n\t\tuserId: attributes?.userId,\n\t\tpostId,\n\t\tpostType,\n\t} );\n\tconst blockProps = useBlockProps();\n\treturn (\n\t\t<>\n\t\t\t<AvatarInspectorControls\n\t\t\t\tselectUser\n\t\t\t\tattributes={ attributes }\n\t\t\t\tavatar={ avatar }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t/>\n\n\t\t\t<ResizableAvatar\n\t\t\t\tattributes={ attributes }\n\t\t\t\tavatar={ avatar }\n\t\t\t\tblockProps={ blockProps }\n\t\t\t\tisSelected={ isSelected }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t/>\n\t\t</>\n\t);\n};\n\n/**\n * Renders the `core/avatar` block on the editor. All props are forwarded to\n * either `CommentEdit` or `UserEdit`, depending on whether the block is used\n * inside a comment.\n *\n * @param {Object} props React props.\n * @param {Object} props.attributes Block attributes.\n * @param {Object} props.context Inherited context.\n * @param {number|null} [props.context.commentId] The comment ID when the block is used inside a comment. `null` in the Site Editor, where no comment is resolved but the comment variant is still rendered.\n * @param {string} [props.context.postType] The post type of the current post.\n * @param {number} [props.context.postId] The ID of the current post.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {boolean} props.isSelected Whether the block is selected.\n *\n * @return {React.JSX.Element} React element.\n */\nexport default function Edit( props ) {\n\t// Don't show the Comment Edit controls if we have a comment ID set, or if we're in the Site Editor (where it is `null`).\n\tif ( props?.context?.commentId || props?.context?.commentId === null ) {\n\t\treturn <CommentEdit { ...props } />;\n\t}\n\treturn <UserEdit { ...props } />;\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_hooks", "ToolsPanel", "ToolsPanelItem", "UserControl", "useBorderProps", "clsx"]
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport {\n\tInspectorControls,\n\tuseBlockProps,\n\t__experimentalUseBorderProps as useBorderProps,\n\t__experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles,\n} from '@wordpress/block-editor';\nimport {\n\tRangeControl,\n\tResizableBox,\n\tToggleControl,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useSelect } from '@wordpress/data';\nimport { createInterpolateElement } from '@wordpress/element';\nimport { __, isRTL } from '@wordpress/i18n';\nimport { Link, Text } from '@wordpress/ui';\nimport { addQueryArgs, removeQueryArgs } from '@wordpress/url';\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\nimport { useCommentAvatar, useUserAvatar } from './hooks';\nimport UserControl from './user-control';\n\n/**\n * Returns the help text explaining where avatars come from, with a link to the\n * Discussion settings where the default avatar is chosen. Only users who can\n * manage the site's settings get it, since nobody else can act on it.\n *\n * @return {React.ReactNode|null} Help text, or `null` when the user can't manage settings.\n */\nfunction useAvatarHelpText() {\n\tconst canManageSettings = useSelect(\n\t\t( select ) =>\n\t\t\tselect( coreStore ).canUser( 'update', {\n\t\t\t\tkind: 'root',\n\t\t\t\tname: 'site',\n\t\t\t} ),\n\t\t[]\n\t);\n\n\tif ( ! canManageSettings ) {\n\t\treturn null;\n\t}\n\n\treturn createInterpolateElement(\n\t\t__(\n\t\t\t'Avatars use the Gravatar service. Go to <a>Discussion settings</a> to change the default avatar.'\n\t\t),\n\t\t{\n\t\t\ta: <Link href=\"options-discussion.php\" openInNewTab />,\n\t\t}\n\t);\n}\n\n/**\n * Renders the inspector controls for the `core/avatar` block.\n *\n * @param {Object} props React props.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {Object} props.avatar Avatar data returned by `useCommentAvatar` or `useUserAvatar`, with the `minSize` and `maxSize` bounds of the size control.\n * @param {Object} props.attributes Block attributes: `size`, `isLink`, `linkTarget` and `userId`.\n * @param {boolean} props.selectUser Whether to render the user selection control.\n *\n * @return {React.JSX.Element} React element.\n */\nconst AvatarInspectorControls = ( {\n\tsetAttributes,\n\tavatar,\n\tattributes,\n\tselectUser,\n} ) => {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst helpText = useAvatarHelpText();\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<ToolsPanel\n\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\tresetAll={ () => {\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\tsize: 96,\n\t\t\t\t\t\tisLink: false,\n\t\t\t\t\t\tlinkTarget: '_self',\n\t\t\t\t\t\tuserId: undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t>\n\t\t\t\t{ helpText && (\n\t\t\t\t\t<Text className=\"wp-block-avatar__help-text\">\n\t\t\t\t\t\t{ helpText }\n\t\t\t\t\t</Text>\n\t\t\t\t) }\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\tlabel={ __( 'Image size' ) }\n\t\t\t\t\tisShownByDefault\n\t\t\t\t\thasValue={ () => attributes?.size !== 96 }\n\t\t\t\t\tonDeselect={ () => setAttributes( { size: 96 } ) }\n\t\t\t\t>\n\t\t\t\t\t<RangeControl\n\t\t\t\t\t\tlabel={ __( 'Image size' ) }\n\t\t\t\t\t\tonChange={ ( newSize ) =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tsize: newSize,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmin={ avatar.minSize }\n\t\t\t\t\t\tmax={ avatar.maxSize }\n\t\t\t\t\t\tinitialPosition={ attributes?.size }\n\t\t\t\t\t\tvalue={ attributes?.size }\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\tlabel={ __( 'Link to user profile' ) }\n\t\t\t\t\tisShownByDefault\n\t\t\t\t\thasValue={ () => attributes?.isLink }\n\t\t\t\t\tonDeselect={ () => setAttributes( { isLink: false } ) }\n\t\t\t\t>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ __( 'Link to user profile' ) }\n\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\tsetAttributes( { isLink: ! attributes.isLink } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchecked={ attributes.isLink }\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t\t{ attributes.isLink && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => attributes?.linkTarget !== '_self' }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { linkTarget: '_self' } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tlinkTarget: value ? '_blank' : '_self',\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchecked={ attributes.linkTarget === '_blank' }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ selectUser && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'User' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! attributes?.userId }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { userId: undefined } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<UserControl\n\t\t\t\t\t\t\tvalue={ attributes?.userId }\n\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tuserId: value,\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</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n};\n\n/**\n * Wraps the avatar image in a placeholder link when the block links to the user\n * profile. The link is inert in the editor: it points at a fragment and its\n * click handler prevents navigation.\n *\n * @param {Object} props React props.\n * @param {React.ReactNode} props.children Avatar image to wrap.\n * @param {boolean} props.isLink Whether to wrap the children in a link.\n *\n * @return {React.ReactNode} The children, wrapped in a link when `isLink` is true.\n */\nconst AvatarLinkWrapper = ( { children, isLink } ) =>\n\tisLink ? (\n\t\t<a\n\t\t\thref=\"#avatar-pseudo-link\"\n\t\t\tclassName=\"wp-block-avatar__link\"\n\t\t\tonClick={ ( event ) => event.preventDefault() }\n\t\t>\n\t\t\t{ children }\n\t\t</a>\n\t) : (\n\t\tchildren\n\t);\n\n/**\n * Renders the avatar image inside a `ResizableBox` so its size can be adjusted\n * by dragging. Resizing keeps the aspect ratio and updates the `size` attribute.\n *\n * @param {Object} props React props.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {Object} props.attributes Block attributes: `size` and `isLink`, plus the border and shadow support values applied to the image.\n * @param {Object} props.avatar Avatar data returned by `useCommentAvatar` or `useUserAvatar`, with the image `src` and `alt` and the `minSize` and `maxSize` resize bounds.\n * @param {Object} props.blockProps Props returned by `useBlockProps`, applied to the wrapper element.\n * @param {boolean} props.isSelected Whether the block is selected. Resize handles are only shown when it is.\n *\n * @return {React.JSX.Element} React element.\n */\nconst ResizableAvatar = ( {\n\tsetAttributes,\n\tattributes,\n\tavatar,\n\tblockProps,\n\tisSelected,\n} ) => {\n\tconst borderProps = useBorderProps( attributes );\n\tconst shadowProps = getShadowClassesAndStyles( attributes );\n\tconst doubledSizedSrc = addQueryArgs(\n\t\tremoveQueryArgs( avatar?.src, [ 's' ] ),\n\t\t{\n\t\t\ts: attributes?.size * 2,\n\t\t}\n\t);\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<AvatarLinkWrapper isLink={ attributes.isLink }>\n\t\t\t\t<ResizableBox\n\t\t\t\t\tsize={ {\n\t\t\t\t\t\twidth: attributes.size,\n\t\t\t\t\t\theight: attributes.size,\n\t\t\t\t\t} }\n\t\t\t\t\tshowHandle={ isSelected }\n\t\t\t\t\tonResizeStop={ ( event, direction, elt, delta ) => {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tsize: parseInt(\n\t\t\t\t\t\t\t\tattributes.size +\n\t\t\t\t\t\t\t\t\t( delta.height || delta.width ),\n\t\t\t\t\t\t\t\t10\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\tlockAspectRatio\n\t\t\t\t\tenable={ {\n\t\t\t\t\t\ttop: false,\n\t\t\t\t\t\tright: ! isRTL(),\n\t\t\t\t\t\tbottom: true,\n\t\t\t\t\t\tleft: isRTL(),\n\t\t\t\t\t} }\n\t\t\t\t\tminWidth={ avatar.minSize }\n\t\t\t\t\tmaxWidth={ avatar.maxSize }\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={ doubledSizedSrc }\n\t\t\t\t\t\talt={ avatar.alt }\n\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t'avatar',\n\t\t\t\t\t\t\t'avatar-' + attributes.size,\n\t\t\t\t\t\t\t'photo',\n\t\t\t\t\t\t\t'wp-block-avatar__image',\n\t\t\t\t\t\t\tborderProps.className\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t...borderProps.style,\n\t\t\t\t\t\t\t...shadowProps.style,\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</ResizableBox>\n\t\t\t</AvatarLinkWrapper>\n\t\t</div>\n\t);\n};\n\n/**\n * Renders the block for a comment author, resolving the avatar from the\n * `commentId` context. The user selection control is not offered here because\n * the author is determined by the comment.\n *\n * @param {Object} props React props.\n * @param {Object} props.attributes Block attributes.\n * @param {Object} props.context Inherited context, from which the comment ID is read.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {boolean} props.isSelected Whether the block is selected.\n *\n * @return {React.JSX.Element} React element.\n */\nconst CommentEdit = ( { attributes, context, setAttributes, isSelected } ) => {\n\tconst { commentId } = context;\n\tconst blockProps = useBlockProps();\n\tconst avatar = useCommentAvatar( { commentId } );\n\treturn (\n\t\t<>\n\t\t\t<AvatarInspectorControls\n\t\t\t\tavatar={ avatar }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\tattributes={ attributes }\n\t\t\t\tselectUser={ false }\n\t\t\t/>\n\t\t\t<ResizableAvatar\n\t\t\t\tattributes={ attributes }\n\t\t\t\tavatar={ avatar }\n\t\t\t\tblockProps={ blockProps }\n\t\t\t\tisSelected={ isSelected }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t/>\n\t\t</>\n\t);\n};\n\n/**\n * Renders the block for a user, resolving the avatar from the `userId`\n * attribute when set, and otherwise from the author of the post identified by\n * the `postType` and `postId` context.\n *\n * @param {Object} props React props.\n * @param {Object} props.attributes Block attributes, from which the `userId` is read.\n * @param {Object} props.context Inherited context, from which the post type and post ID are read.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {boolean} props.isSelected Whether the block is selected.\n *\n * @return {React.JSX.Element} React element.\n */\nconst UserEdit = ( { attributes, context, setAttributes, isSelected } ) => {\n\tconst { postId, postType } = context;\n\tconst avatar = useUserAvatar( {\n\t\tuserId: attributes?.userId,\n\t\tpostId,\n\t\tpostType,\n\t} );\n\tconst blockProps = useBlockProps();\n\treturn (\n\t\t<>\n\t\t\t<AvatarInspectorControls\n\t\t\t\tselectUser\n\t\t\t\tattributes={ attributes }\n\t\t\t\tavatar={ avatar }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t/>\n\n\t\t\t<ResizableAvatar\n\t\t\t\tattributes={ attributes }\n\t\t\t\tavatar={ avatar }\n\t\t\t\tblockProps={ blockProps }\n\t\t\t\tisSelected={ isSelected }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t/>\n\t\t</>\n\t);\n};\n\n/**\n * Renders the `core/avatar` block on the editor. All props are forwarded to\n * either `CommentEdit` or `UserEdit`, depending on whether the block is used\n * inside a comment.\n *\n * @param {Object} props React props.\n * @param {Object} props.attributes Block attributes.\n * @param {Object} props.context Inherited context.\n * @param {number|null} [props.context.commentId] The comment ID when the block is used inside a comment. `null` in the Site Editor, where no comment is resolved but the comment variant is still rendered.\n * @param {string} [props.context.postType] The post type of the current post.\n * @param {number} [props.context.postId] The ID of the current post.\n * @param {Function} props.setAttributes Callback for updating block attributes.\n * @param {boolean} props.isSelected Whether the block is selected.\n *\n * @return {React.JSX.Element} React element.\n */\nexport default function Edit( props ) {\n\t// Don't show the Comment Edit controls if we have a comment ID set, or if we're in the Site Editor (where it is `null`).\n\tif ( props?.context?.commentId || props?.context?.commentId === null ) {\n\t\treturn <CommentEdit { ...props } />;\n\t}\n\treturn <UserEdit { ...props } />;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_hooks", "coreStore", "ToolsPanel", "ToolsPanelItem", "UserControl", "useBorderProps", "getShadowClassesAndStyles", "clsx"]
7
7
  }
@@ -70,6 +70,12 @@
70
70
  "splitting": true,
71
71
  "align": false,
72
72
  "alignWide": false,
73
+ "background": {
74
+ "backgroundImage": true,
75
+ "backgroundSize": true,
76
+ "gradient": true,
77
+ "__experimentalSkipSerialization": true
78
+ },
73
79
  "color": {
74
80
  "__experimentalSkipSerialization": true,
75
81
  "gradients": true,
@@ -151,6 +151,7 @@ function ButtonEdit(props) {
151
151
  const colorProps = (0, import_block_editor.__experimentalUseColorProps)(attributes);
152
152
  const spacingProps = (0, import_block_editor.__experimentalGetSpacingClassesAndStyles)(attributes);
153
153
  const shadowProps = (0, import_block_editor.__experimentalGetShadowClassesAndStyles)(attributes);
154
+ const backgroundProps = (0, import_block_editor.useBackgroundProps)(attributes);
154
155
  const dimensionsProps = (0, import_block_editor.__experimentalGetDimensionsClassesAndStyles)(attributes);
155
156
  const ref = (0, import_element.useRef)();
156
157
  const richTextRef = (0, import_element.useRef)();
@@ -309,6 +310,7 @@ function ButtonEdit(props) {
309
310
  className,
310
311
  "wp-block-button__link",
311
312
  colorProps.className,
313
+ backgroundProps.className,
312
314
  borderProps.className,
313
315
  typographyProps.className,
314
316
  {
@@ -322,6 +324,7 @@ function ButtonEdit(props) {
322
324
  style: {
323
325
  ...borderProps.style,
324
326
  ...colorProps.style,
327
+ ...backgroundProps.style,
325
328
  ...spacingProps.style,
326
329
  ...shadowProps.style,
327
330
  ...typographyProps.style,
@@ -338,14 +341,14 @@ function ButtonEdit(props) {
338
341
  import_components.ToolbarButton,
339
342
  {
340
343
  name: "link",
341
- icon: !isURLSet ? import_icons.link : import_icons.linkOff,
342
- title: !isURLSet ? (0, import_i18n.__)("Link") : (0, import_i18n.__)("Unlink"),
343
- shortcut: !isURLSet ? import_keycodes.displayShortcut.primary("k") : import_keycodes.displayShortcut.primaryShift("k"),
344
- onClick: !isURLSet ? startEditing : unlink,
344
+ icon: import_icons.link,
345
+ title: (0, import_i18n.__)("Link"),
346
+ shortcut: import_keycodes.displayShortcut.primary("k"),
347
+ onClick: () => setIsEditingURL(!isEditingURL),
345
348
  isActive: isURLSet
346
349
  }
347
350
  ) }),
348
- isLinkTag && isSelected && (isEditingURL || isURLSet) && !lockUrlControls && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
351
+ isLinkTag && isSelected && isEditingURL && !lockUrlControls && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
349
352
  import_components.Popover,
350
353
  {
351
354
  placement: "bottom",
@@ -377,7 +380,7 @@ function ButtonEdit(props) {
377
380
  unlink();
378
381
  richTextRef.current?.focus();
379
382
  },
380
- forceIsEditingLink: isEditingURL,
383
+ forceIsEditingLink: !isURLSet,
381
384
  settings: LINK_SETTINGS,
382
385
  createSuggestion: createPageEntity && handleCreate,
383
386
  withCreateSuggestion: userCanCreatePages,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/button/edit.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tuseEffect,\n\tuseState,\n\tuseRef,\n\tuseMemo,\n\tcreateInterpolateElement,\n} from '@wordpress/element';\nimport { TextControl, ToolbarButton, Popover } from '@wordpress/components';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tLinkControl,\n\t__experimentalUseBorderProps as useBorderProps,\n\t__experimentalUseColorProps as useColorProps,\n\t__experimentalGetSpacingClassesAndStyles as useSpacingProps,\n\t__experimentalGetShadowClassesAndStyles as useShadowProps,\n\t__experimentalGetDimensionsClassesAndStyles as useDimensionsProps,\n\t__experimentalGetElementClassName,\n\tstore as blockEditorStore,\n\tuseBlockEditingMode,\n\tgetTypographyClassesAndStyles as useTypographyProps,\n\tuseSettings,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { displayShortcut, isKeyboardEvent, ENTER } from '@wordpress/keycodes';\nimport { link, linkOff } from '@wordpress/icons';\nimport {\n\tcreateBlock,\n\tcloneBlock,\n\tgetDefaultBlockName,\n\tgetBlockBindingsSource,\n} from '@wordpress/blocks';\nimport {\n\tuseMergeRefs,\n\tuseRefEffect,\n\tprivateApis as composePrivateApis,\n} from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { Link } from '@wordpress/ui';\nimport { NEW_TAB_TARGET, NOFOLLOW_REL } from './constants';\nimport { getUpdatedLinkAttributes } from './get-updated-link-attributes';\nimport removeAnchorTag from '../utils/remove-anchor-tag';\nimport { unlock } from '../lock-unlock';\nimport useDeprecatedTextAlign from '../utils/deprecated-text-align-attributes';\nimport { getWidthClasses, isPercentageWidth } from './utils';\n\nconst { HTMLElementControl } = unlock( blockEditorPrivateApis );\nconst { subscribeDelegatedListener } = unlock( composePrivateApis );\n\nconst LINK_SETTINGS = [\n\t...LinkControl.DEFAULT_LINK_SETTINGS,\n\t{\n\t\tid: 'nofollow',\n\t\ttitle: __( 'Mark as nofollow' ),\n\t},\n];\n\nfunction useEnter( clientId ) {\n\tconst { replaceBlocks, selectionChange } = useDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlock,\n\t\tgetBlockAttributes,\n\t\tgetBlockRootClientId,\n\t\tgetBlockIndex,\n\t} = useSelect( blockEditorStore );\n\n\treturn useRefEffect( ( element ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented || event.keyCode !== ENTER ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { text } = getBlockAttributes( clientId ) ?? {};\n\t\t\tif ( text?.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tconst topParentListBlock = getBlock(\n\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t);\n\t\t\tconst blockIndex = getBlockIndex( clientId );\n\t\t\tconst head = cloneBlock( {\n\t\t\t\t...topParentListBlock,\n\t\t\t\tinnerBlocks: topParentListBlock.innerBlocks.slice(\n\t\t\t\t\t0,\n\t\t\t\t\tblockIndex\n\t\t\t\t),\n\t\t\t} );\n\t\t\tconst middle = createBlock( getDefaultBlockName() );\n\t\t\tconst after = topParentListBlock.innerBlocks.slice(\n\t\t\t\tblockIndex + 1\n\t\t\t);\n\t\t\tconst tail = after.length\n\t\t\t\t? [\n\t\t\t\t\t\tcloneBlock( {\n\t\t\t\t\t\t\t...topParentListBlock,\n\t\t\t\t\t\t\tinnerBlocks: after,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t]\n\t\t\t\t: [];\n\t\t\treplaceBlocks(\n\t\t\t\ttopParentListBlock.clientId,\n\t\t\t\t[ head, middle, ...tail ],\n\t\t\t\t1\n\t\t\t);\n\t\t\t// We manually change the selection here because we are replacing\n\t\t\t// a different block than the selected one.\n\t\t\tselectionChange( middle.clientId );\n\t\t}\n\n\t\t// Capture phase so we run before writing-flow's ancestor-bubble\n\t\t// keydown handlers that gate on `event.defaultPrevented`.\n\t\treturn subscribeDelegatedListener(\n\t\t\telement,\n\t\t\t'keydown',\n\t\t\tonKeyDown,\n\t\t\ttrue\n\t\t);\n\t}, [] );\n}\n\nfunction ButtonEdit( props ) {\n\tconst {\n\t\tattributes,\n\t\tsetAttributes,\n\t\tclassName,\n\t\tisSelected,\n\t\tonReplace,\n\t\tmergeBlocks,\n\t\tclientId,\n\t\tcontext,\n\t} = props;\n\tconst {\n\t\ttagName,\n\t\tlinkTarget,\n\t\tplaceholder,\n\t\trel,\n\t\tstyle,\n\t\ttext,\n\t\turl,\n\t\tmetadata,\n\t} = attributes;\n\tconst width = style?.dimensions?.width;\n\n\tuseDeprecatedTextAlign( props );\n\n\tconst TagName = tagName || 'a';\n\n\tfunction onKeyDown( event ) {\n\t\tif ( isKeyboardEvent.primary( event, 'k' ) ) {\n\t\t\tstartEditing( event );\n\t\t} else if ( isKeyboardEvent.primaryShift( event, 'k' ) ) {\n\t\t\tunlink();\n\t\t\trichTextRef.current?.focus();\n\t\t}\n\t}\n\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst colorProps = useColorProps( attributes );\n\tconst spacingProps = useSpacingProps( attributes );\n\tconst shadowProps = useShadowProps( attributes );\n\tconst dimensionsProps = useDimensionsProps( attributes );\n\tconst ref = useRef();\n\tconst richTextRef = useRef();\n\tconst blockProps = useBlockProps( {\n\t\tref: useMergeRefs( [ setPopoverAnchor, ref ] ),\n\t\tonKeyDown,\n\t} );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst [ isEditingURL, setIsEditingURL ] = useState( false );\n\tconst isURLSet = !! url;\n\tconst opensInNewTab = linkTarget === NEW_TAB_TARGET;\n\tconst nofollow = !! rel?.includes( NOFOLLOW_REL );\n\tconst isLinkTag = 'a' === TagName;\n\n\tconst {\n\t\tcreatePageEntity,\n\t\tuserCanCreatePages,\n\t\tlockUrlControls = false,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! isSelected ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tconst _settings = select( blockEditorStore ).getSettings();\n\n\t\t\tconst blockBindingsSource = getBlockBindingsSource(\n\t\t\t\tmetadata?.bindings?.url?.source\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcreatePageEntity: _settings.__experimentalCreatePageEntity,\n\t\t\t\tuserCanCreatePages: _settings.__experimentalUserCanCreatePages,\n\t\t\t\tlockUrlControls:\n\t\t\t\t\t!! metadata?.bindings?.url &&\n\t\t\t\t\t! blockBindingsSource?.canUserEditValue?.( {\n\t\t\t\t\t\tselect,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\targs: metadata?.bindings?.url?.args,\n\t\t\t\t\t} ),\n\t\t\t};\n\t\t},\n\t\t[ context, isSelected, metadata?.bindings?.url ]\n\t);\n\n\tasync function handleCreate( pageTitle ) {\n\t\tconst page = await createPageEntity( {\n\t\t\ttitle: pageTitle,\n\t\t\tstatus: 'draft',\n\t\t} );\n\n\t\treturn {\n\t\t\tid: page.id,\n\t\t\ttype: page.type,\n\t\t\ttitle: page.title.rendered,\n\t\t\turl: page.link,\n\t\t\tkind: 'post-type',\n\t\t};\n\t}\n\n\tfunction createButtonText( searchTerm ) {\n\t\treturn createInterpolateElement(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t__( 'Create page: <mark>%s</mark>' ),\n\t\t\t\tsearchTerm\n\t\t\t),\n\t\t\t{ mark: <mark /> }\n\t\t);\n\t}\n\n\tfunction startEditing( event ) {\n\t\tevent.preventDefault();\n\t\tsetIsEditingURL( true );\n\t}\n\n\tfunction unlink() {\n\t\tsetAttributes( {\n\t\t\turl: undefined,\n\t\t\tlinkTarget: undefined,\n\t\t\trel: undefined,\n\t\t} );\n\t\tsetIsEditingURL( false );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingURL( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\t// Memoize link value to avoid overriding the LinkControl's internal state.\n\t// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/51256.\n\tconst linkValue = useMemo(\n\t\t() => ( { url, opensInNewTab, nofollow } ),\n\t\t[ url, opensInNewTab, nofollow ]\n\t);\n\n\tconst useEnterRef = useEnter( clientId );\n\tconst mergedRef = useMergeRefs( [ useEnterRef, richTextRef ] );\n\n\tconst [ fluidTypographySettings, layout, dimensionSizes ] = useSettings(\n\t\t'typography.fluid',\n\t\t'layout',\n\t\t'dimensions.dimensionSizes'\n\t);\n\tconst dimensionPresets = useMemo( () => {\n\t\tif ( ! dimensionSizes ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [\n\t\t\t...( dimensionSizes?.custom ?? [] ),\n\t\t\t...( dimensionSizes?.theme ?? [] ),\n\t\t\t...( dimensionSizes?.default ?? [] ),\n\t\t];\n\t}, [ dimensionSizes ] );\n\tconst typographyProps = useTypographyProps( attributes, {\n\t\ttypography: {\n\t\t\tfluid: fluidTypographySettings,\n\t\t},\n\t\tlayout: {\n\t\t\twideSize: layout?.wideSize,\n\t\t},\n\t} );\n\n\t// Resolve preset dimension references to their actual values.\n\tconst resolvedWidth = useMemo( () => {\n\t\tif ( ! width ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst presetPrefix = 'var:preset|dimension|';\n\t\tif ( width.startsWith( presetPrefix ) ) {\n\t\t\tconst slug = width.slice( presetPrefix.length );\n\t\t\tconst preset = dimensionPresets?.find( ( p ) => p.slug === slug );\n\t\t\treturn preset?.size ?? width;\n\t\t}\n\t\treturn width;\n\t}, [ width, dimensionPresets ] );\n\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\tconst hasBlockControls =\n\t\thasNonContentControls || ( isLinkTag && ! lockUrlControls );\n\tconst classes = clsx(\n\t\tblockProps.className,\n\t\tgetWidthClasses( resolvedWidth )\n\t);\n\n\tconst widthStyle = useMemo( () => {\n\t\tif ( ! width ) {\n\t\t\treturn {};\n\t\t}\n\t\tif ( isPercentageWidth( resolvedWidth ) ) {\n\t\t\treturn {\n\t\t\t\t'--wp--block-button--width': parseFloat( resolvedWidth ),\n\t\t\t};\n\t\t}\n\t\treturn dimensionsProps.style;\n\t}, [ width, resolvedWidth, dimensionsProps.style ] );\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\t{ ...blockProps }\n\t\t\t\tclassName={ classes }\n\t\t\t\tstyle={ { ...blockProps.style, ...widthStyle } }\n\t\t\t>\n\t\t\t\t<RichText\n\t\t\t\t\tref={ mergedRef }\n\t\t\t\t\taria-label={ __( 'Button text' ) }\n\t\t\t\t\tplaceholder={ placeholder || __( 'Add text…' ) }\n\t\t\t\t\tvalue={ text }\n\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\ttext: removeAnchorTag( value ),\n\t\t\t\t\t\t} )\n\t\t\t\t\t}\n\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t'wp-block-button__link',\n\t\t\t\t\t\tcolorProps.className,\n\t\t\t\t\t\tborderProps.className,\n\t\t\t\t\t\ttypographyProps.className,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// For backwards compatibility add style that isn't\n\t\t\t\t\t\t\t// provided via block support.\n\t\t\t\t\t\t\t'no-border-radius': style?.border?.radius === 0,\n\t\t\t\t\t\t\t[ `has-custom-font-size` ]:\n\t\t\t\t\t\t\t\tblockProps.style.fontSize,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t__experimentalGetElementClassName( 'button' )\n\t\t\t\t\t) }\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t...borderProps.style,\n\t\t\t\t\t\t...colorProps.style,\n\t\t\t\t\t\t...spacingProps.style,\n\t\t\t\t\t\t...shadowProps.style,\n\t\t\t\t\t\t...typographyProps.style,\n\t\t\t\t\t\twritingMode: undefined,\n\t\t\t\t\t} }\n\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\t\tidentifier=\"text\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{ hasBlockControls && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t{ isLinkTag && ! lockUrlControls && (\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\t\ticon={ ! isURLSet ? link : linkOff }\n\t\t\t\t\t\t\ttitle={ ! isURLSet ? __( 'Link' ) : __( 'Unlink' ) }\n\t\t\t\t\t\t\tshortcut={\n\t\t\t\t\t\t\t\t! isURLSet\n\t\t\t\t\t\t\t\t\t? displayShortcut.primary( 'k' )\n\t\t\t\t\t\t\t\t\t: displayShortcut.primaryShift( 'k' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonClick={ ! isURLSet ? startEditing : unlink }\n\t\t\t\t\t\t\tisActive={ isURLSet }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ isLinkTag &&\n\t\t\t\tisSelected &&\n\t\t\t\t( isEditingURL || isURLSet ) &&\n\t\t\t\t! lockUrlControls && (\n\t\t\t\t\t<Popover\n\t\t\t\t\t\tplacement=\"bottom\"\n\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\tsetIsEditingURL( false );\n\t\t\t\t\t\t\trichTextRef.current?.focus();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\t\tfocusOnMount={ isEditingURL ? 'firstElement' : false }\n\t\t\t\t\t\t__unstableSlotName=\"__unstable-block-tools-after\"\n\t\t\t\t\t\tshift\n\t\t\t\t\t>\n\t\t\t\t\t\t<LinkControl\n\t\t\t\t\t\t\tvalue={ linkValue }\n\t\t\t\t\t\t\tonChange={ ( {\n\t\t\t\t\t\t\t\turl: newURL,\n\t\t\t\t\t\t\t\topensInNewTab: newOpensInNewTab,\n\t\t\t\t\t\t\t\tnofollow: newNofollow,\n\t\t\t\t\t\t\t} ) =>\n\t\t\t\t\t\t\t\tsetAttributes(\n\t\t\t\t\t\t\t\t\tgetUpdatedLinkAttributes( {\n\t\t\t\t\t\t\t\t\t\trel,\n\t\t\t\t\t\t\t\t\t\turl: newURL,\n\t\t\t\t\t\t\t\t\t\topensInNewTab: newOpensInNewTab,\n\t\t\t\t\t\t\t\t\t\tnofollow: newNofollow,\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonRemove={ () => {\n\t\t\t\t\t\t\t\tunlink();\n\t\t\t\t\t\t\t\trichTextRef.current?.focus();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tforceIsEditingLink={ isEditingURL }\n\t\t\t\t\t\t\tsettings={ LINK_SETTINGS }\n\t\t\t\t\t\t\tcreateSuggestion={\n\t\t\t\t\t\t\t\tcreatePageEntity && handleCreate\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twithCreateSuggestion={ userCanCreatePages }\n\t\t\t\t\t\t\tcreateSuggestionButtonText={ createButtonText }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Popover>\n\t\t\t\t) }\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<HTMLElementControl\n\t\t\t\t\ttagName={ tagName }\n\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\tsetAttributes( { tagName: value } )\n\t\t\t\t\t}\n\t\t\t\t\toptions={ [\n\t\t\t\t\t\t{ label: __( 'Default (<a>)' ), value: 'a' },\n\t\t\t\t\t\t{ label: '<button>', value: 'button' },\n\t\t\t\t\t] }\n\t\t\t\t/>\n\t\t\t\t{ isLinkTag && (\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Link relation' ) }\n\t\t\t\t\t\thelp={ createInterpolateElement(\n\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t'The <a>Link Relation</a> attribute defines the relationship between a linked resource and the current document.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ta: (\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\topenInNewTab\n\t\t\t\t\t\t\t\t\t\thref=\"https://developer.mozilla.org/docs/Web/HTML/Attributes/rel\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tvalue={ rel || '' }\n\t\t\t\t\t\tonChange={ ( newRel ) =>\n\t\t\t\t\t\t\tsetAttributes( { rel: newRel } )\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\nexport default ButtonEdit;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tuseEffect,\n\tuseState,\n\tuseRef,\n\tuseMemo,\n\tcreateInterpolateElement,\n} from '@wordpress/element';\nimport { TextControl, ToolbarButton, Popover } from '@wordpress/components';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tLinkControl,\n\t__experimentalUseBorderProps as useBorderProps,\n\t__experimentalUseColorProps as useColorProps,\n\tuseBackgroundProps,\n\t__experimentalGetSpacingClassesAndStyles as useSpacingProps,\n\t__experimentalGetShadowClassesAndStyles as useShadowProps,\n\t__experimentalGetDimensionsClassesAndStyles as useDimensionsProps,\n\t__experimentalGetElementClassName,\n\tstore as blockEditorStore,\n\tuseBlockEditingMode,\n\tgetTypographyClassesAndStyles as useTypographyProps,\n\tuseSettings,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { displayShortcut, isKeyboardEvent, ENTER } from '@wordpress/keycodes';\nimport { link } from '@wordpress/icons';\nimport {\n\tcreateBlock,\n\tcloneBlock,\n\tgetDefaultBlockName,\n\tgetBlockBindingsSource,\n} from '@wordpress/blocks';\nimport {\n\tuseMergeRefs,\n\tuseRefEffect,\n\tprivateApis as composePrivateApis,\n} from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { Link } from '@wordpress/ui';\nimport { NEW_TAB_TARGET, NOFOLLOW_REL } from './constants';\nimport { getUpdatedLinkAttributes } from './get-updated-link-attributes';\nimport removeAnchorTag from '../utils/remove-anchor-tag';\nimport { unlock } from '../lock-unlock';\nimport useDeprecatedTextAlign from '../utils/deprecated-text-align-attributes';\nimport { getWidthClasses, isPercentageWidth } from './utils';\n\nconst { HTMLElementControl } = unlock( blockEditorPrivateApis );\nconst { subscribeDelegatedListener } = unlock( composePrivateApis );\n\nconst LINK_SETTINGS = [\n\t...LinkControl.DEFAULT_LINK_SETTINGS,\n\t{\n\t\tid: 'nofollow',\n\t\ttitle: __( 'Mark as nofollow' ),\n\t},\n];\n\nfunction useEnter( clientId ) {\n\tconst { replaceBlocks, selectionChange } = useDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlock,\n\t\tgetBlockAttributes,\n\t\tgetBlockRootClientId,\n\t\tgetBlockIndex,\n\t} = useSelect( blockEditorStore );\n\n\treturn useRefEffect( ( element ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented || event.keyCode !== ENTER ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { text } = getBlockAttributes( clientId ) ?? {};\n\t\t\tif ( text?.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tconst topParentListBlock = getBlock(\n\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t);\n\t\t\tconst blockIndex = getBlockIndex( clientId );\n\t\t\tconst head = cloneBlock( {\n\t\t\t\t...topParentListBlock,\n\t\t\t\tinnerBlocks: topParentListBlock.innerBlocks.slice(\n\t\t\t\t\t0,\n\t\t\t\t\tblockIndex\n\t\t\t\t),\n\t\t\t} );\n\t\t\tconst middle = createBlock( getDefaultBlockName() );\n\t\t\tconst after = topParentListBlock.innerBlocks.slice(\n\t\t\t\tblockIndex + 1\n\t\t\t);\n\t\t\tconst tail = after.length\n\t\t\t\t? [\n\t\t\t\t\t\tcloneBlock( {\n\t\t\t\t\t\t\t...topParentListBlock,\n\t\t\t\t\t\t\tinnerBlocks: after,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t]\n\t\t\t\t: [];\n\t\t\treplaceBlocks(\n\t\t\t\ttopParentListBlock.clientId,\n\t\t\t\t[ head, middle, ...tail ],\n\t\t\t\t1\n\t\t\t);\n\t\t\t// We manually change the selection here because we are replacing\n\t\t\t// a different block than the selected one.\n\t\t\tselectionChange( middle.clientId );\n\t\t}\n\n\t\t// Capture phase so we run before writing-flow's ancestor-bubble\n\t\t// keydown handlers that gate on `event.defaultPrevented`.\n\t\treturn subscribeDelegatedListener(\n\t\t\telement,\n\t\t\t'keydown',\n\t\t\tonKeyDown,\n\t\t\ttrue\n\t\t);\n\t}, [] );\n}\n\nfunction ButtonEdit( props ) {\n\tconst {\n\t\tattributes,\n\t\tsetAttributes,\n\t\tclassName,\n\t\tisSelected,\n\t\tonReplace,\n\t\tmergeBlocks,\n\t\tclientId,\n\t\tcontext,\n\t} = props;\n\tconst {\n\t\ttagName,\n\t\tlinkTarget,\n\t\tplaceholder,\n\t\trel,\n\t\tstyle,\n\t\ttext,\n\t\turl,\n\t\tmetadata,\n\t} = attributes;\n\tconst width = style?.dimensions?.width;\n\n\tuseDeprecatedTextAlign( props );\n\n\tconst TagName = tagName || 'a';\n\n\tfunction onKeyDown( event ) {\n\t\tif ( isKeyboardEvent.primary( event, 'k' ) ) {\n\t\t\tstartEditing( event );\n\t\t} else if ( isKeyboardEvent.primaryShift( event, 'k' ) ) {\n\t\t\tunlink();\n\t\t\trichTextRef.current?.focus();\n\t\t}\n\t}\n\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst colorProps = useColorProps( attributes );\n\tconst spacingProps = useSpacingProps( attributes );\n\tconst shadowProps = useShadowProps( attributes );\n\tconst backgroundProps = useBackgroundProps( attributes );\n\tconst dimensionsProps = useDimensionsProps( attributes );\n\tconst ref = useRef();\n\tconst richTextRef = useRef();\n\tconst blockProps = useBlockProps( {\n\t\tref: useMergeRefs( [ setPopoverAnchor, ref ] ),\n\t\tonKeyDown,\n\t} );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst [ isEditingURL, setIsEditingURL ] = useState( false );\n\tconst isURLSet = !! url;\n\tconst opensInNewTab = linkTarget === NEW_TAB_TARGET;\n\tconst nofollow = !! rel?.includes( NOFOLLOW_REL );\n\tconst isLinkTag = 'a' === TagName;\n\n\tconst {\n\t\tcreatePageEntity,\n\t\tuserCanCreatePages,\n\t\tlockUrlControls = false,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! isSelected ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tconst _settings = select( blockEditorStore ).getSettings();\n\n\t\t\tconst blockBindingsSource = getBlockBindingsSource(\n\t\t\t\tmetadata?.bindings?.url?.source\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcreatePageEntity: _settings.__experimentalCreatePageEntity,\n\t\t\t\tuserCanCreatePages: _settings.__experimentalUserCanCreatePages,\n\t\t\t\tlockUrlControls:\n\t\t\t\t\t!! metadata?.bindings?.url &&\n\t\t\t\t\t! blockBindingsSource?.canUserEditValue?.( {\n\t\t\t\t\t\tselect,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\targs: metadata?.bindings?.url?.args,\n\t\t\t\t\t} ),\n\t\t\t};\n\t\t},\n\t\t[ context, isSelected, metadata?.bindings?.url ]\n\t);\n\n\tasync function handleCreate( pageTitle ) {\n\t\tconst page = await createPageEntity( {\n\t\t\ttitle: pageTitle,\n\t\t\tstatus: 'draft',\n\t\t} );\n\n\t\treturn {\n\t\t\tid: page.id,\n\t\t\ttype: page.type,\n\t\t\ttitle: page.title.rendered,\n\t\t\turl: page.link,\n\t\t\tkind: 'post-type',\n\t\t};\n\t}\n\n\tfunction createButtonText( searchTerm ) {\n\t\treturn createInterpolateElement(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t__( 'Create page: <mark>%s</mark>' ),\n\t\t\t\tsearchTerm\n\t\t\t),\n\t\t\t{ mark: <mark /> }\n\t\t);\n\t}\n\n\tfunction startEditing( event ) {\n\t\tevent.preventDefault();\n\t\tsetIsEditingURL( true );\n\t}\n\n\tfunction unlink() {\n\t\tsetAttributes( {\n\t\t\turl: undefined,\n\t\t\tlinkTarget: undefined,\n\t\t\trel: undefined,\n\t\t} );\n\t\tsetIsEditingURL( false );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingURL( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\t// Memoize link value to avoid overriding the LinkControl's internal state.\n\t// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/51256.\n\tconst linkValue = useMemo(\n\t\t() => ( { url, opensInNewTab, nofollow } ),\n\t\t[ url, opensInNewTab, nofollow ]\n\t);\n\n\tconst useEnterRef = useEnter( clientId );\n\tconst mergedRef = useMergeRefs( [ useEnterRef, richTextRef ] );\n\n\tconst [ fluidTypographySettings, layout, dimensionSizes ] = useSettings(\n\t\t'typography.fluid',\n\t\t'layout',\n\t\t'dimensions.dimensionSizes'\n\t);\n\tconst dimensionPresets = useMemo( () => {\n\t\tif ( ! dimensionSizes ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [\n\t\t\t...( dimensionSizes?.custom ?? [] ),\n\t\t\t...( dimensionSizes?.theme ?? [] ),\n\t\t\t...( dimensionSizes?.default ?? [] ),\n\t\t];\n\t}, [ dimensionSizes ] );\n\tconst typographyProps = useTypographyProps( attributes, {\n\t\ttypography: {\n\t\t\tfluid: fluidTypographySettings,\n\t\t},\n\t\tlayout: {\n\t\t\twideSize: layout?.wideSize,\n\t\t},\n\t} );\n\n\t// Resolve preset dimension references to their actual values.\n\tconst resolvedWidth = useMemo( () => {\n\t\tif ( ! width ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst presetPrefix = 'var:preset|dimension|';\n\t\tif ( width.startsWith( presetPrefix ) ) {\n\t\t\tconst slug = width.slice( presetPrefix.length );\n\t\t\tconst preset = dimensionPresets?.find( ( p ) => p.slug === slug );\n\t\t\treturn preset?.size ?? width;\n\t\t}\n\t\treturn width;\n\t}, [ width, dimensionPresets ] );\n\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\tconst hasBlockControls =\n\t\thasNonContentControls || ( isLinkTag && ! lockUrlControls );\n\tconst classes = clsx(\n\t\tblockProps.className,\n\t\tgetWidthClasses( resolvedWidth )\n\t);\n\n\tconst widthStyle = useMemo( () => {\n\t\tif ( ! width ) {\n\t\t\treturn {};\n\t\t}\n\t\tif ( isPercentageWidth( resolvedWidth ) ) {\n\t\t\treturn {\n\t\t\t\t'--wp--block-button--width': parseFloat( resolvedWidth ),\n\t\t\t};\n\t\t}\n\t\treturn dimensionsProps.style;\n\t}, [ width, resolvedWidth, dimensionsProps.style ] );\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\t{ ...blockProps }\n\t\t\t\tclassName={ classes }\n\t\t\t\tstyle={ { ...blockProps.style, ...widthStyle } }\n\t\t\t>\n\t\t\t\t<RichText\n\t\t\t\t\tref={ mergedRef }\n\t\t\t\t\taria-label={ __( 'Button text' ) }\n\t\t\t\t\tplaceholder={ placeholder || __( 'Add text…' ) }\n\t\t\t\t\tvalue={ text }\n\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\ttext: removeAnchorTag( value ),\n\t\t\t\t\t\t} )\n\t\t\t\t\t}\n\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t'wp-block-button__link',\n\t\t\t\t\t\tcolorProps.className,\n\t\t\t\t\t\tbackgroundProps.className,\n\t\t\t\t\t\tborderProps.className,\n\t\t\t\t\t\ttypographyProps.className,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// For backwards compatibility add style that isn't\n\t\t\t\t\t\t\t// provided via block support.\n\t\t\t\t\t\t\t'no-border-radius': style?.border?.radius === 0,\n\t\t\t\t\t\t\t[ `has-custom-font-size` ]:\n\t\t\t\t\t\t\t\tblockProps.style.fontSize,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t__experimentalGetElementClassName( 'button' )\n\t\t\t\t\t) }\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t...borderProps.style,\n\t\t\t\t\t\t...colorProps.style,\n\t\t\t\t\t\t...backgroundProps.style,\n\t\t\t\t\t\t...spacingProps.style,\n\t\t\t\t\t\t...shadowProps.style,\n\t\t\t\t\t\t...typographyProps.style,\n\t\t\t\t\t\twritingMode: undefined,\n\t\t\t\t\t} }\n\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\t\tidentifier=\"text\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{ hasBlockControls && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t{ isLinkTag && ! lockUrlControls && (\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\t\ticon={ link }\n\t\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\t\tshortcut={ displayShortcut.primary( 'k' ) }\n\t\t\t\t\t\t\tonClick={ () => setIsEditingURL( ! isEditingURL ) }\n\t\t\t\t\t\t\tisActive={ isURLSet }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ isLinkTag && isSelected && isEditingURL && ! lockUrlControls && (\n\t\t\t\t<Popover\n\t\t\t\t\tplacement=\"bottom\"\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tsetIsEditingURL( false );\n\t\t\t\t\t\trichTextRef.current?.focus();\n\t\t\t\t\t} }\n\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\tfocusOnMount={ isEditingURL ? 'firstElement' : false }\n\t\t\t\t\t__unstableSlotName=\"__unstable-block-tools-after\"\n\t\t\t\t\tshift\n\t\t\t\t>\n\t\t\t\t\t<LinkControl\n\t\t\t\t\t\tvalue={ linkValue }\n\t\t\t\t\t\tonChange={ ( {\n\t\t\t\t\t\t\turl: newURL,\n\t\t\t\t\t\t\topensInNewTab: newOpensInNewTab,\n\t\t\t\t\t\t\tnofollow: newNofollow,\n\t\t\t\t\t\t} ) =>\n\t\t\t\t\t\t\tsetAttributes(\n\t\t\t\t\t\t\t\tgetUpdatedLinkAttributes( {\n\t\t\t\t\t\t\t\t\trel,\n\t\t\t\t\t\t\t\t\turl: newURL,\n\t\t\t\t\t\t\t\t\topensInNewTab: newOpensInNewTab,\n\t\t\t\t\t\t\t\t\tnofollow: newNofollow,\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\tonRemove={ () => {\n\t\t\t\t\t\t\tunlink();\n\t\t\t\t\t\t\trichTextRef.current?.focus();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tforceIsEditingLink={ ! isURLSet }\n\t\t\t\t\t\tsettings={ LINK_SETTINGS }\n\t\t\t\t\t\tcreateSuggestion={ createPageEntity && handleCreate }\n\t\t\t\t\t\twithCreateSuggestion={ userCanCreatePages }\n\t\t\t\t\t\tcreateSuggestionButtonText={ createButtonText }\n\t\t\t\t\t/>\n\t\t\t\t</Popover>\n\t\t\t) }\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<HTMLElementControl\n\t\t\t\t\ttagName={ tagName }\n\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\tsetAttributes( { tagName: value } )\n\t\t\t\t\t}\n\t\t\t\t\toptions={ [\n\t\t\t\t\t\t{ label: __( 'Default (<a>)' ), value: 'a' },\n\t\t\t\t\t\t{ label: '<button>', value: 'button' },\n\t\t\t\t\t] }\n\t\t\t\t/>\n\t\t\t\t{ isLinkTag && (\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Link relation' ) }\n\t\t\t\t\t\thelp={ createInterpolateElement(\n\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t'The <a>Link Relation</a> attribute defines the relationship between a linked resource and the current document.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ta: (\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\topenInNewTab\n\t\t\t\t\t\t\t\t\t\thref=\"https://developer.mozilla.org/docs/Web/HTML/Attributes/rel\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tvalue={ rel || '' }\n\t\t\t\t\t\tonChange={ ( newRel ) =>\n\t\t\t\t\t\t\tsetAttributes( { rel: newRel } )\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\nexport default ButtonEdit;\n"],
5
+ "mappings": "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",
6
6
  "names": ["blockEditorPrivateApis", "composePrivateApis", "blockEditorStore", "useDeprecatedTextAlign", "useBorderProps", "useColorProps", "useSpacingProps", "useShadowProps", "useDimensionsProps", "useTypographyProps", "clsx", "removeAnchorTag"]
7
7
  }
@@ -50,6 +50,10 @@
50
50
  "fontSize": true
51
51
  }
52
52
  },
53
+ "dimensions": {
54
+ "minHeight": true,
55
+ "minWidth": true
56
+ },
53
57
  "__experimentalBorder": {
54
58
  "color": true,
55
59
  "radius": true,
@@ -73,7 +77,8 @@
73
77
  "clientNavigation": true
74
78
  },
75
79
  "listView": true,
76
- "contentRole": true
80
+ "contentRole": true,
81
+ "shadow": true
77
82
  },
78
83
  "editorStyle": "wp-block-buttons-editor",
79
84
  "style": "wp-block-buttons"
@@ -27,6 +27,10 @@
27
27
  "gradient": true
28
28
  }
29
29
  },
30
+ "dimensions": {
31
+ "minHeight": true,
32
+ "minWidth": true
33
+ },
30
34
  "typography": {
31
35
  "fontSize": true,
32
36
  "lineHeight": true,
@@ -37,6 +37,7 @@ var import_clsx = __toESM(require("clsx"));
37
37
  var import_block_editor = require("@wordpress/block-editor");
38
38
  var import_components = require("@wordpress/components");
39
39
  var import_data = require("@wordpress/data");
40
+ var import_element = require("@wordpress/element");
40
41
  var import_i18n = require("@wordpress/i18n");
41
42
  var import_hooks = require("../utils/hooks.cjs");
42
43
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -107,7 +108,9 @@ function ColumnEdit({
107
108
  });
108
109
  };
109
110
  const widthWithUnit = Number.isFinite(width) ? width + "%" : width;
111
+ const [dropZoneElement, setDropZoneElement] = (0, import_element.useState)(null);
110
112
  const blockProps = (0, import_block_editor.useBlockProps)({
113
+ ref: setDropZoneElement,
111
114
  className: classes,
112
115
  style: widthWithUnit ? { flexBasis: widthWithUnit } : void 0
113
116
  });
@@ -123,6 +126,8 @@ function ColumnEdit({
123
126
  const innerBlocksProps = (0, import_block_editor.useInnerBlocksProps)(
124
127
  { ...blockProps, "aria-label": label },
125
128
  {
129
+ // Allows dropping before or after the column, not only inside it.
130
+ dropZoneElement,
126
131
  templateLock,
127
132
  allowedBlocks,
128
133
  renderAppender: hasChildBlocks ? false : import_block_editor.InnerBlocks.ButtonBlockAppender