@wordpress/block-library 10.1.0 → 10.1.1-next.v.202607070741.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 (722) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/build/accordion/edit.cjs +0 -1
  3. package/build/accordion/edit.cjs.map +2 -2
  4. package/build/accordion/view.cjs +23 -0
  5. package/build/accordion/view.cjs.map +2 -2
  6. package/build/accordion-heading/deprecated.cjs +121 -1
  7. package/build/accordion-heading/deprecated.cjs.map +2 -2
  8. package/build/accordion-heading/edit.cjs +18 -1
  9. package/build/accordion-heading/edit.cjs.map +3 -3
  10. package/build/accordion-heading/save.cjs +18 -1
  11. package/build/accordion-heading/save.cjs.map +3 -3
  12. package/build/accordion-panel/edit.cjs +1 -1
  13. package/build/accordion-panel/edit.cjs.map +2 -2
  14. package/build/archives/edit.cjs +0 -1
  15. package/build/archives/edit.cjs.map +2 -2
  16. package/build/audio/edit.cjs +0 -1
  17. package/build/audio/edit.cjs.map +2 -2
  18. package/build/avatar/edit.cjs +0 -1
  19. package/build/avatar/edit.cjs.map +2 -2
  20. package/build/avatar/user-control.cjs +0 -1
  21. package/build/avatar/user-control.cjs.map +2 -2
  22. package/build/categories/edit.cjs +0 -1
  23. package/build/categories/edit.cjs.map +2 -2
  24. package/build/code/transforms.cjs +5 -3
  25. package/build/code/transforms.cjs.map +2 -2
  26. package/build/column/edit.cjs +0 -1
  27. package/build/column/edit.cjs.map +2 -2
  28. package/build/columns/edit.cjs +0 -1
  29. package/build/columns/edit.cjs.map +2 -2
  30. package/build/columns/transforms.cjs +9 -2
  31. package/build/columns/transforms.cjs.map +2 -2
  32. package/build/comment-author-avatar/edit.cjs +0 -1
  33. package/build/comment-author-avatar/edit.cjs.map +2 -2
  34. package/build/comments-pagination/comments-pagination-arrow-controls.cjs +0 -1
  35. package/build/comments-pagination/comments-pagination-arrow-controls.cjs.map +2 -2
  36. package/build/cover/edit/inspector-controls.cjs +1 -3
  37. package/build/cover/edit/inspector-controls.cjs.map +2 -2
  38. package/build/details/transforms.cjs +3 -1
  39. package/build/details/transforms.cjs.map +2 -2
  40. package/build/embed/edit.cjs +2 -3
  41. package/build/embed/edit.cjs.map +2 -2
  42. package/build/embed/embed-placeholder.cjs +20 -20
  43. package/build/embed/embed-placeholder.cjs.map +3 -3
  44. package/build/file/inspector.cjs +0 -2
  45. package/build/file/inspector.cjs.map +2 -2
  46. package/build/form/edit.cjs +0 -2
  47. package/build/form/edit.cjs.map +2 -2
  48. package/build/freeform/convert-to-blocks-button.cjs +52 -0
  49. package/build/freeform/convert-to-blocks-button.cjs.map +7 -0
  50. package/build/freeform/edit.cjs +14 -33
  51. package/build/freeform/edit.cjs.map +3 -3
  52. package/build/freeform/index.cjs +1 -7
  53. package/build/freeform/index.cjs.map +3 -3
  54. package/build/gallery/block.json +4 -1
  55. package/build/gallery/dynamic-gallery.cjs +263 -0
  56. package/build/gallery/dynamic-gallery.cjs.map +7 -0
  57. package/build/gallery/dynamic-source.cjs +85 -0
  58. package/build/gallery/dynamic-source.cjs.map +7 -0
  59. package/build/gallery/edit.cjs +285 -205
  60. package/build/gallery/edit.cjs.map +3 -3
  61. package/build/gallery/gallery.cjs +0 -3
  62. package/build/gallery/gallery.cjs.map +2 -2
  63. package/build/gallery/index.cjs +2 -0
  64. package/build/gallery/index.cjs.map +3 -3
  65. package/build/gallery/save.cjs +16 -12
  66. package/build/gallery/save.cjs.map +2 -2
  67. package/build/gallery/use-dynamic-gallery.cjs +181 -0
  68. package/build/gallery/use-dynamic-gallery.cjs.map +7 -0
  69. package/build/gallery/variations.cjs +54 -0
  70. package/build/gallery/variations.cjs.map +7 -0
  71. package/build/group/edit.cjs +1 -2
  72. package/build/group/edit.cjs.map +2 -2
  73. package/build/group/transforms.cjs +3 -7
  74. package/build/group/transforms.cjs.map +2 -2
  75. package/build/heading/edit.cjs +10 -3
  76. package/build/heading/edit.cjs.map +2 -2
  77. package/build/html/block.json +2 -2
  78. package/build/html/edit.cjs +65 -23
  79. package/build/html/edit.cjs.map +3 -3
  80. package/build/html/index.cjs +3 -3
  81. package/build/html/index.cjs.map +2 -2
  82. package/build/html/modal.cjs +4 -8
  83. package/build/html/modal.cjs.map +2 -2
  84. package/build/html/save.cjs +2 -4
  85. package/build/html/save.cjs.map +2 -2
  86. package/build/html/transforms.cjs +7 -5
  87. package/build/html/transforms.cjs.map +2 -2
  88. package/build/image/animated-gif-convert-control.cjs +105 -0
  89. package/build/image/animated-gif-convert-control.cjs.map +7 -0
  90. package/build/image/edit.cjs +34 -0
  91. package/build/image/edit.cjs.map +2 -2
  92. package/build/image/image.cjs +38 -66
  93. package/build/image/image.cjs.map +3 -3
  94. package/build/index.cjs.map +2 -2
  95. package/build/latest-comments/edit.cjs +0 -2
  96. package/build/latest-comments/edit.cjs.map +2 -2
  97. package/build/latest-posts/block.json +8 -9
  98. package/build/latest-posts/constants.cjs +0 -3
  99. package/build/latest-posts/constants.cjs.map +2 -2
  100. package/build/latest-posts/deprecated.cjs +100 -8
  101. package/build/latest-posts/deprecated.cjs.map +2 -2
  102. package/build/latest-posts/edit.cjs +62 -76
  103. package/build/latest-posts/edit.cjs.map +2 -2
  104. package/build/list/ordered-list-settings.cjs +0 -1
  105. package/build/list/ordered-list-settings.cjs.map +2 -2
  106. package/build/media-text/edit.cjs +0 -1
  107. package/build/media-text/edit.cjs.map +2 -2
  108. package/build/missing/edit.cjs +1 -3
  109. package/build/missing/edit.cjs.map +2 -2
  110. package/build/navigation/edit/index.cjs +0 -1
  111. package/build/navigation/edit/index.cjs.map +2 -2
  112. package/build/navigation/edit/overlay-menu-preview-controls.cjs +0 -1
  113. package/build/navigation/edit/overlay-menu-preview-controls.cjs.map +2 -2
  114. package/build/navigation/edit/overlay-menu-preview.cjs +0 -1
  115. package/build/navigation/edit/overlay-menu-preview.cjs.map +2 -2
  116. package/build/navigation/edit/overlay-template-part-selector.cjs +0 -1
  117. package/build/navigation/edit/overlay-template-part-selector.cjs.map +2 -2
  118. package/build/navigation/edit/overlay-visibility-control.cjs +0 -1
  119. package/build/navigation/edit/overlay-visibility-control.cjs.map +2 -2
  120. package/build/navigation-link/shared/use-link-preview.cjs +11 -1
  121. package/build/navigation-link/shared/use-link-preview.cjs.map +2 -2
  122. package/build/navigation-overlay-close/edit.cjs +0 -1
  123. package/build/navigation-overlay-close/edit.cjs.map +2 -2
  124. package/build/page-list/edit.cjs +0 -1
  125. package/build/page-list/edit.cjs.map +2 -2
  126. package/build/playlist/block.json +1 -7
  127. package/build/playlist/context.cjs +36 -0
  128. package/build/playlist/context.cjs.map +7 -0
  129. package/build/playlist/edit.cjs +43 -69
  130. package/build/playlist/edit.cjs.map +3 -3
  131. package/build/playlist/utils.cjs +0 -3
  132. package/build/playlist/utils.cjs.map +3 -3
  133. package/build/playlist/view.cjs +4 -4
  134. package/build/playlist/view.cjs.map +2 -2
  135. package/build/playlist-track/block.json +1 -4
  136. package/build/playlist-track/edit.cjs +22 -8
  137. package/build/playlist-track/edit.cjs.map +3 -3
  138. package/build/post-author/edit.cjs +0 -2
  139. package/build/post-author/edit.cjs.map +2 -2
  140. package/build/post-excerpt/edit.cjs +0 -1
  141. package/build/post-excerpt/edit.cjs.map +2 -2
  142. package/build/post-featured-image/overlay-controls.cjs +1 -2
  143. package/build/post-featured-image/overlay-controls.cjs.map +2 -2
  144. package/build/post-navigation-link/edit.cjs +0 -2
  145. package/build/post-navigation-link/edit.cjs.map +2 -2
  146. package/build/query/edit/inspector-controls/author-control.cjs +1 -2
  147. package/build/query/edit/inspector-controls/author-control.cjs.map +2 -2
  148. package/build/query/edit/inspector-controls/format-controls.cjs +1 -2
  149. package/build/query/edit/inspector-controls/format-controls.cjs.map +2 -2
  150. package/build/query/edit/inspector-controls/index.cjs +0 -3
  151. package/build/query/edit/inspector-controls/index.cjs.map +2 -2
  152. package/build/query/edit/inspector-controls/order-control.cjs +0 -1
  153. package/build/query/edit/inspector-controls/order-control.cjs.map +2 -2
  154. package/build/query/edit/inspector-controls/parent-control.cjs +0 -1
  155. package/build/query/edit/inspector-controls/parent-control.cjs.map +2 -2
  156. package/build/query/edit/inspector-controls/per-page-control.cjs +0 -1
  157. package/build/query/edit/inspector-controls/per-page-control.cjs.map +2 -2
  158. package/build/query/edit/inspector-controls/sticky-control.cjs +0 -1
  159. package/build/query/edit/inspector-controls/sticky-control.cjs.map +2 -2
  160. package/build/query/edit/inspector-controls/taxonomy-controls.cjs +1 -2
  161. package/build/query/edit/inspector-controls/taxonomy-controls.cjs.map +2 -2
  162. package/build/query-pagination/query-pagination-arrow-controls.cjs +0 -1
  163. package/build/query-pagination/query-pagination-arrow-controls.cjs.map +2 -2
  164. package/build/query-pagination-numbers/edit.cjs +0 -1
  165. package/build/query-pagination-numbers/edit.cjs.map +2 -2
  166. package/build/quote/transforms.cjs +1 -5
  167. package/build/quote/transforms.cjs.map +2 -2
  168. package/build/rss/edit.cjs +0 -3
  169. package/build/rss/edit.cjs.map +2 -2
  170. package/build/search/edit.cjs +0 -4
  171. package/build/search/edit.cjs.map +2 -2
  172. package/build/separator/edit.cjs +1 -2
  173. package/build/separator/edit.cjs.map +2 -2
  174. package/build/site-logo/edit.cjs +34 -63
  175. package/build/site-logo/edit.cjs.map +3 -3
  176. package/build/social-links/edit.cjs +0 -1
  177. package/build/social-links/edit.cjs.map +2 -2
  178. package/build/spacer/controls.cjs +2 -4
  179. package/build/spacer/controls.cjs.map +2 -2
  180. package/build/spacer/edit.cjs +1 -2
  181. package/build/spacer/edit.cjs.map +2 -2
  182. package/build/tab-list/block.json +3 -2
  183. package/build/tab-list/edit.cjs +38 -51
  184. package/build/tab-list/edit.cjs.map +3 -3
  185. package/build/tab-list/save.cjs +4 -3
  186. package/build/tab-list/save.cjs.map +2 -2
  187. package/build/tab-panel/controls.cjs +2 -4
  188. package/build/tab-panel/controls.cjs.map +3 -3
  189. package/build/tab-panels/edit.cjs +2 -4
  190. package/build/tab-panels/edit.cjs.map +3 -3
  191. package/build/table-of-contents/edit.cjs +0 -1
  192. package/build/table-of-contents/edit.cjs.map +2 -2
  193. package/build/tabs/edit.cjs +2 -2
  194. package/build/tabs/edit.cjs.map +3 -3
  195. package/build/tabs/tab-toolbar-controls.cjs +74 -0
  196. package/build/tabs/tab-toolbar-controls.cjs.map +7 -0
  197. package/build/tabs/use-tab-actions.cjs +87 -0
  198. package/build/tabs/use-tab-actions.cjs.map +7 -0
  199. package/build/tabs/use-tab-list-items-sync.cjs +4 -4
  200. package/build/tabs/use-tab-list-items-sync.cjs.map +2 -2
  201. package/build/tag-cloud/edit.cjs +2 -6
  202. package/build/tag-cloud/edit.cjs.map +2 -2
  203. package/build/template-part/edit/advanced-controls.cjs +0 -1
  204. package/build/template-part/edit/advanced-controls.cjs.map +2 -2
  205. package/build/template-part/edit/import-controls.cjs +1 -2
  206. package/build/template-part/edit/import-controls.cjs.map +2 -2
  207. package/build/terms-query/edit/inspector-controls/include-control.cjs +0 -1
  208. package/build/terms-query/edit/inspector-controls/include-control.cjs.map +2 -2
  209. package/build/terms-query/edit/inspector-controls/inherit-control.cjs +0 -1
  210. package/build/terms-query/edit/inspector-controls/inherit-control.cjs.map +2 -2
  211. package/build/terms-query/edit/inspector-controls/max-terms-control.cjs +0 -1
  212. package/build/terms-query/edit/inspector-controls/max-terms-control.cjs.map +2 -2
  213. package/build/terms-query/edit/inspector-controls/order-control.cjs +0 -1
  214. package/build/terms-query/edit/inspector-controls/order-control.cjs.map +2 -2
  215. package/build/terms-query/edit/inspector-controls/taxonomy-control.cjs +0 -1
  216. package/build/terms-query/edit/inspector-controls/taxonomy-control.cjs.map +2 -2
  217. package/build/text-columns/edit.cjs +0 -1
  218. package/build/text-columns/edit.cjs.map +2 -2
  219. package/build/utils/gif-conversion-attributes.cjs +40 -0
  220. package/build/utils/gif-conversion-attributes.cjs.map +7 -0
  221. package/build/verse/block.json +3 -1
  222. package/build/video/block.json +6 -0
  223. package/build/video/edit-common-settings.cjs +0 -1
  224. package/build/video/edit-common-settings.cjs.map +2 -2
  225. package/build/video/edit.cjs +28 -3
  226. package/build/video/edit.cjs.map +3 -3
  227. package/build/video/gif-restore-control.cjs +73 -0
  228. package/build/video/gif-restore-control.cjs.map +7 -0
  229. package/build/video/index.cjs +2 -0
  230. package/build/video/index.cjs.map +3 -3
  231. package/build/video/save.cjs +7 -1
  232. package/build/video/save.cjs.map +2 -2
  233. package/build/video/tracks-editor.cjs +0 -1
  234. package/build/video/tracks-editor.cjs.map +2 -2
  235. package/build/video/variations.cjs +75 -0
  236. package/build/video/variations.cjs.map +7 -0
  237. package/build-module/accordion/edit.mjs +0 -1
  238. package/build-module/accordion/edit.mjs.map +2 -2
  239. package/build-module/accordion/view.mjs +23 -0
  240. package/build-module/accordion/view.mjs.map +2 -2
  241. package/build-module/accordion-heading/deprecated.mjs +121 -1
  242. package/build-module/accordion-heading/deprecated.mjs.map +2 -2
  243. package/build-module/accordion-heading/edit.mjs +8 -1
  244. package/build-module/accordion-heading/edit.mjs.map +2 -2
  245. package/build-module/accordion-heading/save.mjs +8 -1
  246. package/build-module/accordion-heading/save.mjs.map +2 -2
  247. package/build-module/accordion-panel/edit.mjs +1 -1
  248. package/build-module/accordion-panel/edit.mjs.map +2 -2
  249. package/build-module/archives/edit.mjs +0 -1
  250. package/build-module/archives/edit.mjs.map +2 -2
  251. package/build-module/audio/edit.mjs +0 -1
  252. package/build-module/audio/edit.mjs.map +2 -2
  253. package/build-module/avatar/edit.mjs +0 -1
  254. package/build-module/avatar/edit.mjs.map +2 -2
  255. package/build-module/avatar/user-control.mjs +0 -1
  256. package/build-module/avatar/user-control.mjs.map +2 -2
  257. package/build-module/categories/edit.mjs +0 -1
  258. package/build-module/categories/edit.mjs.map +2 -2
  259. package/build-module/code/transforms.mjs +6 -4
  260. package/build-module/code/transforms.mjs.map +2 -2
  261. package/build-module/column/edit.mjs +0 -1
  262. package/build-module/column/edit.mjs.map +2 -2
  263. package/build-module/columns/edit.mjs +0 -1
  264. package/build-module/columns/edit.mjs.map +2 -2
  265. package/build-module/columns/transforms.mjs +9 -2
  266. package/build-module/columns/transforms.mjs.map +2 -2
  267. package/build-module/comment-author-avatar/edit.mjs +0 -1
  268. package/build-module/comment-author-avatar/edit.mjs.map +2 -2
  269. package/build-module/comments-pagination/comments-pagination-arrow-controls.mjs +0 -1
  270. package/build-module/comments-pagination/comments-pagination-arrow-controls.mjs.map +2 -2
  271. package/build-module/cover/edit/inspector-controls.mjs +1 -3
  272. package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
  273. package/build-module/details/transforms.mjs +7 -2
  274. package/build-module/details/transforms.mjs.map +2 -2
  275. package/build-module/embed/edit.mjs +2 -3
  276. package/build-module/embed/edit.mjs.map +2 -2
  277. package/build-module/embed/embed-placeholder.mjs +20 -23
  278. package/build-module/embed/embed-placeholder.mjs.map +2 -2
  279. package/build-module/file/inspector.mjs +0 -2
  280. package/build-module/file/inspector.mjs.map +2 -2
  281. package/build-module/form/edit.mjs +0 -2
  282. package/build-module/form/edit.mjs.map +2 -2
  283. package/build-module/freeform/convert-to-blocks-button.mjs +31 -0
  284. package/build-module/freeform/convert-to-blocks-button.mjs.map +7 -0
  285. package/build-module/freeform/edit.mjs +15 -34
  286. package/build-module/freeform/edit.mjs.map +2 -2
  287. package/build-module/freeform/index.mjs +1 -7
  288. package/build-module/freeform/index.mjs.map +2 -2
  289. package/build-module/gallery/block.json +4 -1
  290. package/build-module/gallery/dynamic-gallery.mjs +253 -0
  291. package/build-module/gallery/dynamic-gallery.mjs.map +7 -0
  292. package/build-module/gallery/dynamic-source.mjs +55 -0
  293. package/build-module/gallery/dynamic-source.mjs.map +7 -0
  294. package/build-module/gallery/edit.mjs +288 -206
  295. package/build-module/gallery/edit.mjs.map +2 -2
  296. package/build-module/gallery/gallery.mjs +0 -3
  297. package/build-module/gallery/gallery.mjs.map +2 -2
  298. package/build-module/gallery/index.mjs +2 -0
  299. package/build-module/gallery/index.mjs.map +2 -2
  300. package/build-module/gallery/save.mjs +16 -12
  301. package/build-module/gallery/save.mjs.map +2 -2
  302. package/build-module/gallery/use-dynamic-gallery.mjs +167 -0
  303. package/build-module/gallery/use-dynamic-gallery.mjs.map +7 -0
  304. package/build-module/gallery/variations.mjs +33 -0
  305. package/build-module/gallery/variations.mjs.map +7 -0
  306. package/build-module/group/edit.mjs +1 -2
  307. package/build-module/group/edit.mjs.map +2 -2
  308. package/build-module/group/transforms.mjs +7 -8
  309. package/build-module/group/transforms.mjs.map +2 -2
  310. package/build-module/heading/edit.mjs +11 -4
  311. package/build-module/heading/edit.mjs.map +2 -2
  312. package/build-module/html/block.json +2 -2
  313. package/build-module/html/edit.mjs +69 -25
  314. package/build-module/html/edit.mjs.map +2 -2
  315. package/build-module/html/index.mjs +3 -3
  316. package/build-module/html/index.mjs.map +2 -2
  317. package/build-module/html/modal.mjs +4 -8
  318. package/build-module/html/modal.mjs.map +2 -2
  319. package/build-module/html/save.mjs +2 -4
  320. package/build-module/html/save.mjs.map +2 -2
  321. package/build-module/html/transforms.mjs +8 -6
  322. package/build-module/html/transforms.mjs.map +2 -2
  323. package/build-module/image/animated-gif-convert-control.mjs +87 -0
  324. package/build-module/image/animated-gif-convert-control.mjs.map +7 -0
  325. package/build-module/image/edit.mjs +34 -0
  326. package/build-module/image/edit.mjs.map +2 -2
  327. package/build-module/image/image.mjs +28 -67
  328. package/build-module/image/image.mjs.map +2 -2
  329. package/build-module/index.mjs.map +2 -2
  330. package/build-module/latest-comments/edit.mjs +0 -2
  331. package/build-module/latest-comments/edit.mjs.map +2 -2
  332. package/build-module/latest-posts/block.json +8 -9
  333. package/build-module/latest-posts/constants.mjs +0 -2
  334. package/build-module/latest-posts/constants.mjs.map +2 -2
  335. package/build-module/latest-posts/deprecated.mjs +100 -8
  336. package/build-module/latest-posts/deprecated.mjs.map +2 -2
  337. package/build-module/latest-posts/edit.mjs +62 -77
  338. package/build-module/latest-posts/edit.mjs.map +2 -2
  339. package/build-module/list/ordered-list-settings.mjs +0 -1
  340. package/build-module/list/ordered-list-settings.mjs.map +2 -2
  341. package/build-module/media-text/edit.mjs +0 -1
  342. package/build-module/media-text/edit.mjs.map +2 -2
  343. package/build-module/missing/edit.mjs +1 -3
  344. package/build-module/missing/edit.mjs.map +2 -2
  345. package/build-module/navigation/edit/index.mjs +0 -1
  346. package/build-module/navigation/edit/index.mjs.map +2 -2
  347. package/build-module/navigation/edit/overlay-menu-preview-controls.mjs +0 -1
  348. package/build-module/navigation/edit/overlay-menu-preview-controls.mjs.map +2 -2
  349. package/build-module/navigation/edit/overlay-menu-preview.mjs +0 -1
  350. package/build-module/navigation/edit/overlay-menu-preview.mjs.map +2 -2
  351. package/build-module/navigation/edit/overlay-template-part-selector.mjs +0 -1
  352. package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +2 -2
  353. package/build-module/navigation/edit/overlay-visibility-control.mjs +0 -1
  354. package/build-module/navigation/edit/overlay-visibility-control.mjs.map +2 -2
  355. package/build-module/navigation-link/shared/use-link-preview.mjs +11 -1
  356. package/build-module/navigation-link/shared/use-link-preview.mjs.map +2 -2
  357. package/build-module/navigation-overlay-close/edit.mjs +0 -1
  358. package/build-module/navigation-overlay-close/edit.mjs.map +2 -2
  359. package/build-module/page-list/edit.mjs +0 -1
  360. package/build-module/page-list/edit.mjs.map +2 -2
  361. package/build-module/playlist/block.json +1 -7
  362. package/build-module/playlist/context.mjs +11 -0
  363. package/build-module/playlist/context.mjs.map +7 -0
  364. package/build-module/playlist/edit.mjs +44 -70
  365. package/build-module/playlist/edit.mjs.map +2 -2
  366. package/build-module/playlist/utils.mjs +0 -3
  367. package/build-module/playlist/utils.mjs.map +2 -2
  368. package/build-module/playlist/view.mjs +4 -4
  369. package/build-module/playlist/view.mjs.map +2 -2
  370. package/build-module/playlist-track/block.json +1 -4
  371. package/build-module/playlist-track/edit.mjs +23 -9
  372. package/build-module/playlist-track/edit.mjs.map +2 -2
  373. package/build-module/post-author/edit.mjs +0 -2
  374. package/build-module/post-author/edit.mjs.map +2 -2
  375. package/build-module/post-excerpt/edit.mjs +0 -1
  376. package/build-module/post-excerpt/edit.mjs.map +2 -2
  377. package/build-module/post-featured-image/overlay-controls.mjs +1 -2
  378. package/build-module/post-featured-image/overlay-controls.mjs.map +2 -2
  379. package/build-module/post-navigation-link/edit.mjs +0 -2
  380. package/build-module/post-navigation-link/edit.mjs.map +2 -2
  381. package/build-module/query/edit/inspector-controls/author-control.mjs +1 -2
  382. package/build-module/query/edit/inspector-controls/author-control.mjs.map +2 -2
  383. package/build-module/query/edit/inspector-controls/format-controls.mjs +1 -2
  384. package/build-module/query/edit/inspector-controls/format-controls.mjs.map +2 -2
  385. package/build-module/query/edit/inspector-controls/index.mjs +0 -3
  386. package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
  387. package/build-module/query/edit/inspector-controls/order-control.mjs +0 -1
  388. package/build-module/query/edit/inspector-controls/order-control.mjs.map +2 -2
  389. package/build-module/query/edit/inspector-controls/parent-control.mjs +0 -1
  390. package/build-module/query/edit/inspector-controls/parent-control.mjs.map +2 -2
  391. package/build-module/query/edit/inspector-controls/per-page-control.mjs +0 -1
  392. package/build-module/query/edit/inspector-controls/per-page-control.mjs.map +2 -2
  393. package/build-module/query/edit/inspector-controls/sticky-control.mjs +0 -1
  394. package/build-module/query/edit/inspector-controls/sticky-control.mjs.map +2 -2
  395. package/build-module/query/edit/inspector-controls/taxonomy-controls.mjs +1 -2
  396. package/build-module/query/edit/inspector-controls/taxonomy-controls.mjs.map +2 -2
  397. package/build-module/query-pagination/query-pagination-arrow-controls.mjs +0 -1
  398. package/build-module/query-pagination/query-pagination-arrow-controls.mjs.map +2 -2
  399. package/build-module/query-pagination-numbers/edit.mjs +0 -1
  400. package/build-module/query-pagination-numbers/edit.mjs.map +2 -2
  401. package/build-module/quote/transforms.mjs +6 -6
  402. package/build-module/quote/transforms.mjs.map +2 -2
  403. package/build-module/rss/edit.mjs +0 -3
  404. package/build-module/rss/edit.mjs.map +2 -2
  405. package/build-module/search/edit.mjs +0 -4
  406. package/build-module/search/edit.mjs.map +2 -2
  407. package/build-module/separator/edit.mjs +1 -2
  408. package/build-module/separator/edit.mjs.map +2 -2
  409. package/build-module/site-logo/edit.mjs +34 -64
  410. package/build-module/site-logo/edit.mjs.map +2 -2
  411. package/build-module/social-links/edit.mjs +0 -1
  412. package/build-module/social-links/edit.mjs.map +2 -2
  413. package/build-module/spacer/controls.mjs +2 -4
  414. package/build-module/spacer/controls.mjs.map +2 -2
  415. package/build-module/spacer/edit.mjs +1 -2
  416. package/build-module/spacer/edit.mjs.map +2 -2
  417. package/build-module/tab-list/block.json +3 -2
  418. package/build-module/tab-list/edit.mjs +39 -52
  419. package/build-module/tab-list/edit.mjs.map +2 -2
  420. package/build-module/tab-list/save.mjs +5 -3
  421. package/build-module/tab-list/save.mjs.map +2 -2
  422. package/build-module/tab-panel/controls.mjs +2 -4
  423. package/build-module/tab-panel/controls.mjs.map +2 -2
  424. package/build-module/tab-panels/edit.mjs +2 -4
  425. package/build-module/tab-panels/edit.mjs.map +2 -2
  426. package/build-module/table-of-contents/edit.mjs +0 -1
  427. package/build-module/table-of-contents/edit.mjs.map +2 -2
  428. package/build-module/tabs/edit.mjs +2 -2
  429. package/build-module/tabs/edit.mjs.map +2 -2
  430. package/build-module/tabs/tab-toolbar-controls.mjs +46 -0
  431. package/build-module/tabs/tab-toolbar-controls.mjs.map +7 -0
  432. package/build-module/tabs/use-tab-actions.mjs +66 -0
  433. package/build-module/tabs/use-tab-actions.mjs.map +7 -0
  434. package/build-module/tabs/use-tab-list-items-sync.mjs +6 -6
  435. package/build-module/tabs/use-tab-list-items-sync.mjs.map +2 -2
  436. package/build-module/tag-cloud/edit.mjs +2 -6
  437. package/build-module/tag-cloud/edit.mjs.map +2 -2
  438. package/build-module/template-part/edit/advanced-controls.mjs +0 -1
  439. package/build-module/template-part/edit/advanced-controls.mjs.map +2 -2
  440. package/build-module/template-part/edit/import-controls.mjs +1 -2
  441. package/build-module/template-part/edit/import-controls.mjs.map +2 -2
  442. package/build-module/terms-query/edit/inspector-controls/include-control.mjs +0 -1
  443. package/build-module/terms-query/edit/inspector-controls/include-control.mjs.map +2 -2
  444. package/build-module/terms-query/edit/inspector-controls/inherit-control.mjs +0 -1
  445. package/build-module/terms-query/edit/inspector-controls/inherit-control.mjs.map +2 -2
  446. package/build-module/terms-query/edit/inspector-controls/max-terms-control.mjs +0 -1
  447. package/build-module/terms-query/edit/inspector-controls/max-terms-control.mjs.map +2 -2
  448. package/build-module/terms-query/edit/inspector-controls/order-control.mjs +0 -1
  449. package/build-module/terms-query/edit/inspector-controls/order-control.mjs.map +2 -2
  450. package/build-module/terms-query/edit/inspector-controls/taxonomy-control.mjs +0 -1
  451. package/build-module/terms-query/edit/inspector-controls/taxonomy-control.mjs.map +2 -2
  452. package/build-module/text-columns/edit.mjs +0 -1
  453. package/build-module/text-columns/edit.mjs.map +2 -2
  454. package/build-module/utils/gif-conversion-attributes.mjs +15 -0
  455. package/build-module/utils/gif-conversion-attributes.mjs.map +7 -0
  456. package/build-module/verse/block.json +3 -1
  457. package/build-module/video/block.json +6 -0
  458. package/build-module/video/edit-common-settings.mjs +0 -1
  459. package/build-module/video/edit-common-settings.mjs.map +2 -2
  460. package/build-module/video/edit.mjs +28 -3
  461. package/build-module/video/edit.mjs.map +2 -2
  462. package/build-module/video/gif-restore-control.mjs +55 -0
  463. package/build-module/video/gif-restore-control.mjs.map +7 -0
  464. package/build-module/video/index.mjs +2 -0
  465. package/build-module/video/index.mjs.map +2 -2
  466. package/build-module/video/save.mjs +7 -1
  467. package/build-module/video/save.mjs.map +2 -2
  468. package/build-module/video/tracks-editor.mjs +0 -1
  469. package/build-module/video/tracks-editor.mjs.map +2 -2
  470. package/build-module/video/variations.mjs +50 -0
  471. package/build-module/video/variations.mjs.map +7 -0
  472. package/build-style/accordion-panel/style-rtl.css +1 -2
  473. package/build-style/accordion-panel/style.css +1 -2
  474. package/build-style/audio/style-rtl.css +6 -0
  475. package/build-style/audio/style.css +6 -0
  476. package/build-style/audio/theme-rtl.css +6 -0
  477. package/build-style/audio/theme.css +6 -0
  478. package/build-style/columns/style-rtl.css +6 -0
  479. package/build-style/columns/style.css +6 -0
  480. package/build-style/common-rtl.css +6 -4
  481. package/build-style/common.css +6 -4
  482. package/build-style/editor-rtl.css +38 -3
  483. package/build-style/editor.css +38 -3
  484. package/build-style/embed/style-rtl.css +6 -0
  485. package/build-style/embed/style.css +6 -0
  486. package/build-style/embed/theme-rtl.css +6 -0
  487. package/build-style/embed/theme.css +6 -0
  488. package/build-style/freeform/editor-rtl.css +6 -0
  489. package/build-style/freeform/editor.css +6 -0
  490. package/build-style/gallery/editor-rtl.css +27 -3
  491. package/build-style/gallery/editor.css +27 -3
  492. package/build-style/gallery/style-rtl.css +6 -0
  493. package/build-style/gallery/style.css +6 -0
  494. package/build-style/gallery/theme-rtl.css +6 -0
  495. package/build-style/gallery/theme.css +6 -0
  496. package/build-style/html/editor-rtl.css +13 -0
  497. package/build-style/html/editor.css +13 -0
  498. package/build-style/image/editor-rtl.css +10 -0
  499. package/build-style/image/editor.css +10 -0
  500. package/build-style/image/style-rtl.css +6 -1
  501. package/build-style/image/style.css +6 -1
  502. package/build-style/image/theme-rtl.css +6 -0
  503. package/build-style/image/theme.css +6 -0
  504. package/build-style/latest-posts/style-rtl.css +26 -15
  505. package/build-style/latest-posts/style.css +26 -15
  506. package/build-style/navigation/editor-rtl.css +6 -0
  507. package/build-style/navigation/editor.css +6 -0
  508. package/build-style/navigation/style-rtl.css +6 -0
  509. package/build-style/navigation/style.css +6 -0
  510. package/build-style/navigation-submenu/editor-rtl.css +6 -0
  511. package/build-style/navigation-submenu/editor.css +6 -0
  512. package/build-style/page-list/editor-rtl.css +6 -0
  513. package/build-style/page-list/editor.css +6 -0
  514. package/build-style/playlist/style-rtl.css +121 -19
  515. package/build-style/playlist/style.css +121 -19
  516. package/build-style/post-template/style-rtl.css +6 -0
  517. package/build-style/post-template/style.css +6 -0
  518. package/build-style/query/editor-rtl.css +6 -0
  519. package/build-style/query/editor.css +6 -0
  520. package/build-style/rss/style-rtl.css +6 -0
  521. package/build-style/rss/style.css +6 -0
  522. package/build-style/shortcode/editor-rtl.css +6 -0
  523. package/build-style/shortcode/editor.css +6 -0
  524. package/build-style/style-rtl.css +145 -38
  525. package/build-style/style.css +145 -38
  526. package/build-style/table/editor-rtl.css +6 -0
  527. package/build-style/table/editor.css +6 -0
  528. package/build-style/table/theme-rtl.css +6 -0
  529. package/build-style/table/theme.css +6 -0
  530. package/build-style/template-part/editor-rtl.css +6 -0
  531. package/build-style/template-part/editor.css +6 -0
  532. package/build-style/theme-rtl.css +6 -0
  533. package/build-style/theme.css +6 -0
  534. package/build-style/video/style-rtl.css +6 -0
  535. package/build-style/video/style.css +6 -0
  536. package/build-style/video/theme-rtl.css +6 -0
  537. package/build-style/video/theme.css +6 -0
  538. package/package.json +43 -41
  539. package/src/accordion/README.md +1 -1
  540. package/src/accordion/edit.js +0 -1
  541. package/src/accordion/view.js +24 -0
  542. package/src/accordion-heading/README.md +1 -1
  543. package/src/accordion-heading/deprecated.js +122 -1
  544. package/src/accordion-heading/edit.js +12 -1
  545. package/src/accordion-heading/save.js +12 -1
  546. package/src/accordion-item/README.md +1 -1
  547. package/src/accordion-item/index.php +2 -1
  548. package/src/accordion-panel/edit.js +1 -1
  549. package/src/accordion-panel/style.scss +1 -4
  550. package/src/archives/edit.js +0 -1
  551. package/src/audio/edit.js +0 -1
  552. package/src/avatar/edit.js +0 -1
  553. package/src/avatar/user-control.js +0 -1
  554. package/src/categories/edit.js +0 -1
  555. package/src/code/transforms.js +6 -4
  556. package/src/column/edit.js +0 -1
  557. package/src/columns/edit.js +0 -1
  558. package/src/columns/transforms.js +9 -2
  559. package/src/comment-author-avatar/edit.js +0 -1
  560. package/src/comments-pagination/comments-pagination-arrow-controls.js +0 -1
  561. package/src/common.scss +0 -4
  562. package/src/cover/edit/inspector-controls.js +0 -2
  563. package/src/cover/test/edit.js +4 -4
  564. package/src/details/transforms.js +7 -2
  565. package/src/embed/edit.js +4 -5
  566. package/src/embed/embed-placeholder.js +16 -19
  567. package/src/file/inspector.js +0 -2
  568. package/src/form/edit.js +0 -2
  569. package/src/freeform/convert-to-blocks-button.js +33 -0
  570. package/src/freeform/edit.js +11 -21
  571. package/src/freeform/index.js +1 -9
  572. package/src/gallery/README.md +3 -0
  573. package/src/gallery/block.json +4 -1
  574. package/src/gallery/dynamic-gallery.js +384 -0
  575. package/src/gallery/dynamic-source.js +117 -0
  576. package/src/gallery/edit.js +152 -46
  577. package/src/gallery/editor.scss +32 -4
  578. package/src/gallery/gallery.js +0 -7
  579. package/src/gallery/index.js +2 -0
  580. package/src/gallery/index.php +277 -0
  581. package/src/gallery/save.js +22 -11
  582. package/src/gallery/test/dynamic-source.js +90 -0
  583. package/src/gallery/use-dynamic-gallery.js +275 -0
  584. package/src/gallery/variations.js +37 -0
  585. package/src/group/edit.js +2 -3
  586. package/src/group/transforms.js +7 -8
  587. package/src/heading/edit.js +19 -14
  588. package/src/home-link/index.php +1 -1
  589. package/src/html/README.md +2 -1
  590. package/src/html/block.json +2 -2
  591. package/src/html/edit.js +86 -14
  592. package/src/html/editor.scss +10 -0
  593. package/src/html/index.js +3 -4
  594. package/src/html/modal.js +5 -9
  595. package/src/html/save.js +4 -7
  596. package/src/html/test/index.js +143 -0
  597. package/src/html/transforms.js +11 -6
  598. package/src/icon/index.php +38 -45
  599. package/src/image/animated-gif-convert-control.js +135 -0
  600. package/src/image/edit.js +52 -0
  601. package/src/image/editor.scss +9 -0
  602. package/src/image/image.js +121 -180
  603. package/src/image/style.scss +0 -1
  604. package/src/image/test/animated-gif-convert-control.js +276 -0
  605. package/src/image/test/use-open-image-media-editor-modal.js +19 -4
  606. package/src/index.js +0 -2
  607. package/src/latest-comments/edit.js +0 -2
  608. package/src/latest-posts/README.md +2 -2
  609. package/src/latest-posts/block.json +8 -9
  610. package/src/latest-posts/constants.js +0 -1
  611. package/src/latest-posts/deprecated.js +112 -9
  612. package/src/latest-posts/edit.js +33 -45
  613. package/src/latest-posts/index.php +14 -3
  614. package/src/latest-posts/style.scss +12 -2
  615. package/src/latest-posts/test/deprecated.js +153 -0
  616. package/src/list/ordered-list-settings.js +0 -1
  617. package/src/media-text/edit.js +0 -1
  618. package/src/missing/edit.js +1 -3
  619. package/src/navigation/edit/index.js +0 -1
  620. package/src/navigation/edit/overlay-menu-preview-controls.js +0 -1
  621. package/src/navigation/edit/overlay-menu-preview.js +0 -1
  622. package/src/navigation/edit/overlay-template-part-selector.js +0 -1
  623. package/src/navigation/edit/overlay-visibility-control.js +0 -1
  624. package/src/navigation-link/shared/test/controls.js +0 -4
  625. package/src/navigation-link/shared/test/use-entity-binding.js +8 -12
  626. package/src/navigation-link/shared/test/use-handle-link-change.test.js +0 -4
  627. package/src/navigation-link/shared/test/use-link-preview.test.js +17 -4
  628. package/src/navigation-link/shared/use-link-preview.js +24 -4
  629. package/src/navigation-overlay-close/edit.js +0 -1
  630. package/src/page-list/edit.js +0 -1
  631. package/src/page-list/index.php +1 -1
  632. package/src/playlist/README.md +0 -2
  633. package/src/playlist/block.json +1 -7
  634. package/src/playlist/context.js +9 -0
  635. package/src/playlist/edit.js +51 -82
  636. package/src/playlist/index.php +37 -26
  637. package/src/playlist/style.scss +0 -5
  638. package/src/playlist/test/edit.js +0 -10
  639. package/src/playlist/utils.js +0 -6
  640. package/src/playlist/view.js +4 -4
  641. package/src/playlist-track/README.md +0 -2
  642. package/src/playlist-track/block.json +1 -4
  643. package/src/playlist-track/edit.js +25 -16
  644. package/src/playlist-track/index.php +4 -11
  645. package/src/post-author/edit.js +0 -2
  646. package/src/post-excerpt/edit.js +0 -1
  647. package/src/post-featured-image/overlay-controls.js +0 -1
  648. package/src/post-navigation-link/edit.js +0 -2
  649. package/src/query/edit/inspector-controls/author-control.js +0 -1
  650. package/src/query/edit/inspector-controls/format-controls.js +0 -1
  651. package/src/query/edit/inspector-controls/index.js +0 -3
  652. package/src/query/edit/inspector-controls/order-control.js +0 -1
  653. package/src/query/edit/inspector-controls/parent-control.js +0 -1
  654. package/src/query/edit/inspector-controls/per-page-control.js +0 -1
  655. package/src/query/edit/inspector-controls/sticky-control.js +0 -1
  656. package/src/query/edit/inspector-controls/taxonomy-controls.js +0 -1
  657. package/src/query-pagination/query-pagination-arrow-controls.js +0 -1
  658. package/src/query-pagination-numbers/edit.js +0 -1
  659. package/src/quote/transforms.js +6 -6
  660. package/src/rss/edit.js +0 -3
  661. package/src/search/edit.js +0 -4
  662. package/src/separator/edit.js +0 -1
  663. package/src/site-logo/edit.js +38 -78
  664. package/src/social-links/edit.js +0 -1
  665. package/src/spacer/controls.js +2 -4
  666. package/src/spacer/edit.js +2 -3
  667. package/src/tab-list/block.json +3 -2
  668. package/src/tab-list/edit.js +53 -55
  669. package/src/tab-list/save.js +5 -4
  670. package/src/tab-panel/controls.js +2 -4
  671. package/src/tab-panels/edit.js +2 -4
  672. package/src/table-of-contents/edit.js +0 -1
  673. package/src/tabs/edit.js +2 -2
  674. package/src/tabs/tab-toolbar-controls.js +58 -0
  675. package/src/tabs/use-tab-actions.js +102 -0
  676. package/src/tabs/use-tab-list-items-sync.js +7 -8
  677. package/src/tag-cloud/edit.js +0 -4
  678. package/src/tag-cloud/index.php +1 -1
  679. package/src/template-part/edit/advanced-controls.js +0 -1
  680. package/src/template-part/edit/import-controls.js +0 -1
  681. package/src/terms-query/edit/inspector-controls/include-control.js +0 -1
  682. package/src/terms-query/edit/inspector-controls/inherit-control.js +0 -1
  683. package/src/terms-query/edit/inspector-controls/max-terms-control.js +0 -1
  684. package/src/terms-query/edit/inspector-controls/order-control.js +0 -1
  685. package/src/terms-query/edit/inspector-controls/taxonomy-control.js +0 -1
  686. package/src/text-columns/edit.js +0 -1
  687. package/src/utils/gif-conversion-attributes.js +30 -0
  688. package/src/utils/test/gif-conversion-attributes.js +60 -0
  689. package/src/utils/test/waveform-player.js +0 -4
  690. package/src/utils/test/waveform-utils.js +0 -4
  691. package/src/verse/README.md +1 -0
  692. package/src/verse/block.json +3 -1
  693. package/src/video/README.md +2 -0
  694. package/src/video/block.json +6 -0
  695. package/src/video/edit-common-settings.js +0 -1
  696. package/src/video/edit.js +38 -1
  697. package/src/video/gif-restore-control.js +92 -0
  698. package/src/video/index.js +2 -0
  699. package/src/video/save.js +12 -0
  700. package/src/video/test/variations.js +65 -0
  701. package/src/video/tracks-editor.js +0 -1
  702. package/src/video/variations.js +65 -0
  703. package/build/freeform/migration-notice.cjs +0 -58
  704. package/build/freeform/migration-notice.cjs.map +0 -7
  705. package/build/tab-panel/add-tab-toolbar-control.cjs +0 -90
  706. package/build/tab-panel/add-tab-toolbar-control.cjs.map +0 -7
  707. package/build/tab-panel/remove-tab-toolbar-control.cjs +0 -99
  708. package/build/tab-panel/remove-tab-toolbar-control.cjs.map +0 -7
  709. package/build/tabs/controls.cjs +0 -45
  710. package/build/tabs/controls.cjs.map +0 -7
  711. package/build-module/freeform/migration-notice.mjs +0 -37
  712. package/build-module/freeform/migration-notice.mjs.map +0 -7
  713. package/build-module/tab-panel/add-tab-toolbar-control.mjs +0 -72
  714. package/build-module/tab-panel/add-tab-toolbar-control.mjs.map +0 -7
  715. package/build-module/tab-panel/remove-tab-toolbar-control.mjs +0 -81
  716. package/build-module/tab-panel/remove-tab-toolbar-control.mjs.map +0 -7
  717. package/build-module/tabs/controls.mjs +0 -14
  718. package/build-module/tabs/controls.mjs.map +0 -7
  719. package/src/freeform/migration-notice.js +0 -49
  720. package/src/tab-panel/add-tab-toolbar-control.js +0 -90
  721. package/src/tab-panel/remove-tab-toolbar-control.js +0 -110
  722. package/src/tabs/controls.js +0 -14
@@ -0,0 +1,275 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useMemo } from '@wordpress/element';
5
+ import { useDispatch, useSelect } from '@wordpress/data';
6
+ import { store as blockEditorStore } from '@wordpress/block-editor';
7
+ import { store as coreStore } from '@wordpress/core-data';
8
+ import { createBlock } from '@wordpress/blocks';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import { pickRelevantMediaFiles } from './shared';
14
+ import { getHrefAndDestination } from './utils';
15
+ import { getUpdatedLinkTargetSettings } from '../image/utils';
16
+ import {
17
+ getSourceQuery,
18
+ getDynamicSource,
19
+ ATTACHED_MEDIA,
20
+ DEFAULT_ORDERBY,
21
+ DEFAULT_ORDER,
22
+ MAX_IMAGES,
23
+ } from './dynamic-source';
24
+
25
+ const EMPTY_ARRAY = [];
26
+
27
+ /**
28
+ * Builds the attributes for a `core/image` block from a media (attachment)
29
+ * record, applying the gallery-wide settings that affect how the image renders.
30
+ *
31
+ * Used to construct the (non-persisted) image blocks previewed in dynamic mode,
32
+ * and the real image blocks created when a dynamic gallery is converted
33
+ * ("pinned") back to individual images. The frontend equivalent is
34
+ * `block_core_gallery_render_dynamic_image()` in `index.php`.
35
+ *
36
+ * @param {Object} media A media object as returned by the REST API.
37
+ * @param {Object} galleryAttributes The gallery block's attributes.
38
+ * @return {Object} Attributes to pass to `createBlock( 'core/image', ... )`.
39
+ */
40
+ function buildImageBlockAttributes( media, galleryAttributes ) {
41
+ const { sizeSlug, linkTo, linkTarget, aspectRatio } = galleryAttributes;
42
+ const hasAspectRatio = !! aspectRatio && aspectRatio !== 'auto';
43
+
44
+ return {
45
+ id: media.id,
46
+ ...pickRelevantMediaFiles( media, sizeSlug ),
47
+ ...getHrefAndDestination( media, linkTo ),
48
+ ...getUpdatedLinkTargetSettings( linkTarget, galleryAttributes ),
49
+ sizeSlug,
50
+ // Raw caption, mirroring the frontend (`index.php`). Gap: the REST API
51
+ // exposes no caption run through `wp_get_attachment_caption`, so neither
52
+ // side applies that filter.
53
+ caption: media.caption?.raw || '',
54
+ alt: media.alt_text || '',
55
+ aspectRatio: hasAspectRatio ? aspectRatio : undefined,
56
+ // Pair `scale` with `aspectRatio` so the image crops rather than stretches,
57
+ // matching the image block's UI and the frontend (`index.php`).
58
+ scale: hasAspectRatio ? 'cover' : undefined,
59
+ };
60
+ }
61
+
62
+ /**
63
+ * Builds a set of `core/image` blocks from the resolved media, applying the
64
+ * gallery-wide settings. Each call mints fresh client IDs, so it can produce
65
+ * both the editor preview and the materialized inner blocks on convert.
66
+ *
67
+ * @param {Object[]} media Media records from the REST API.
68
+ * @param {Object} galleryAttributes The image-relevant gallery attributes.
69
+ * @return {Object[]} New `core/image` block instances.
70
+ */
71
+ function buildImageBlocks( media, galleryAttributes ) {
72
+ return media.map( ( mediaItem ) =>
73
+ createBlock(
74
+ 'core/image',
75
+ buildImageBlockAttributes( mediaItem, galleryAttributes )
76
+ )
77
+ );
78
+ }
79
+
80
+ /**
81
+ * Bundles the Gallery block's "dynamic mode" source resolution and actions.
82
+ *
83
+ * Dynamic mode resolves the gallery's images from a configured source
84
+ * (`attributes.dynamicContent`) instead of from manually-added inner image
85
+ * blocks. This hook centralizes the shared, single-instance pieces — the source
86
+ * resolution (one `getEntityRecords`), the editor-preview blocks, and the
87
+ * mode/ordering actions — out of the block's `edit` component. Transient UI
88
+ * concerns (e.g. the convert-to-dynamic confirmation) live in the components
89
+ * that own them.
90
+ *
91
+ * @param {Object} options
92
+ * @param {Object} options.attributes The gallery block attributes.
93
+ * @param {Function} options.setAttributes The block's `setAttributes`.
94
+ * @param {string} options.clientId The block client ID.
95
+ * @param {?number} options.postId The current post ID (from block context).
96
+ * @param {?string} options.postType The current post type (from block context).
97
+ * @return {Object} Dynamic-mode source data and actions.
98
+ */
99
+ export default function useDynamicGallery( {
100
+ attributes,
101
+ setAttributes,
102
+ clientId,
103
+ postId,
104
+ postType,
105
+ } ) {
106
+ const { dynamicContent } = attributes;
107
+
108
+ // Whether dynamic mode makes sense in the current editing context. A
109
+ // `postType` means the block will resolve against some post at render time —
110
+ // either a concrete post (post/page editor, Query Loop item) or a post-bound
111
+ // template (`single`, `page`) whose post is filled in by `get_the_ID()` on the
112
+ // frontend (see `index.php`). Without it (template part, pattern, generic
113
+ // template) there's no post to attach to, so the source can never resolve.
114
+ const canUseDynamicSource = !! postType;
115
+
116
+ // The descriptor for the configured source (its `title`/`description`/
117
+ // `emptyMessage`), resolved once here so consumers read the copy without
118
+ // re-deriving it from `dynamicContent`. `undefined` for an unknown source.
119
+ const sourceDescriptor = getDynamicSource( dynamicContent?.source );
120
+
121
+ // Current source ordering, falling back to the shared defaults when unset.
122
+ const sourceOrderby = dynamicContent?.args?.orderBy ?? DEFAULT_ORDERBY;
123
+ const sourceOrder = dynamicContent?.args?.order ?? DEFAULT_ORDER;
124
+
125
+ const { replaceInnerBlocks } = useDispatch( blockEditorStore );
126
+
127
+ // Resolve the configured source to a media query. `null` (static mode, or an
128
+ // unresolvable source) short-circuits the select below so no request fires.
129
+ const query = useMemo(
130
+ () =>
131
+ dynamicContent
132
+ ? getSourceQuery( dynamicContent, { postId } )
133
+ : null,
134
+ [ dynamicContent, postId ]
135
+ );
136
+
137
+ const { dynamicMedia, dynamicMediaTotal, isResolvingDynamic } = useSelect(
138
+ ( select ) => {
139
+ if ( ! query ) {
140
+ return {
141
+ dynamicMedia: EMPTY_ARRAY,
142
+ dynamicMediaTotal: 0,
143
+ isResolvingDynamic: false,
144
+ };
145
+ }
146
+ const selectorArgs = [ 'postType', 'attachment', query ];
147
+ return {
148
+ dynamicMedia:
149
+ select( coreStore ).getEntityRecords( ...selectorArgs ) ??
150
+ EMPTY_ARRAY,
151
+ // Total matching attachments (the `X-WP-Total` header), which the
152
+ // query's `per_page` cap doesn't bound — so it reveals when the
153
+ // post has more attached images than are shown.
154
+ dynamicMediaTotal:
155
+ select( coreStore ).getEntityRecordsTotalItems(
156
+ ...selectorArgs
157
+ ) ?? 0,
158
+ isResolvingDynamic: ! select( coreStore ).hasFinishedResolution(
159
+ 'getEntityRecords',
160
+ selectorArgs
161
+ ),
162
+ };
163
+ },
164
+ [ query ]
165
+ );
166
+
167
+ // The source caps results at `MAX_IMAGES` (matching the frontend), so flag
168
+ // when the post has more attached images than the gallery can show.
169
+ const hasMoreImagesThanCap = dynamicMediaTotal > MAX_IMAGES;
170
+
171
+ // The only gallery settings that affect how an image renders, and so the
172
+ // only ones `buildImageBlockAttributes` reads. Depending on this narrowed
173
+ // set (rather than the whole `attributes` object) keeps the preview from
174
+ // rebuilding on unrelated edits, e.g. typing in the gallery caption.
175
+ const { sizeSlug, linkTo, linkTarget, aspectRatio } = attributes;
176
+ const imageAttributes = useMemo(
177
+ () => ( { sizeSlug, linkTo, linkTarget, aspectRatio } ),
178
+ [ sizeSlug, linkTo, linkTarget, aspectRatio ]
179
+ );
180
+
181
+ // The (non-persisted) `core/image` blocks used for the editor preview.
182
+ // Rebuilt when the resolved media or an image-relevant setting changes.
183
+ const dynamicImageBlocks = useMemo(
184
+ () => buildImageBlocks( dynamicMedia, imageAttributes ),
185
+ [ dynamicMedia, imageAttributes ]
186
+ );
187
+
188
+ // Context the gallery provides to its (previewed) image blocks.
189
+ const galleryContext = useMemo(
190
+ () => ( {
191
+ allowResize: attributes.allowResize ?? false,
192
+ imageCrop: attributes.imageCrop,
193
+ fixedHeight: attributes.fixedHeight,
194
+ navigationButtonType: attributes.navigationButtonType,
195
+ } ),
196
+ [
197
+ attributes.allowResize,
198
+ attributes.imageCrop,
199
+ attributes.fixedHeight,
200
+ attributes.navigationButtonType,
201
+ ]
202
+ );
203
+
204
+ // Switches the gallery into dynamic mode, displaying images attached to the
205
+ // current post. Clearing the inner blocks removes the manually-added images:
206
+ // they're the gallery's image data, so there's nothing else to reset. The
207
+ // legacy `images`/`ids` attributes aren't touched — they're back-compat shims
208
+ // for the pre-innerBlocks format (see `deprecated.js`/`transforms.js`), empty
209
+ // on any gallery reachable here.
210
+ function enableDynamicMode() {
211
+ setAttributes( { dynamicContent: { source: ATTACHED_MEDIA } } );
212
+ replaceInnerBlocks( clientId, [] );
213
+ }
214
+
215
+ // "Pins" a dynamic gallery: materializes the currently-resolved media as
216
+ // real, editable image blocks and leaves dynamic mode.
217
+ function convertToStatic() {
218
+ // Build fresh blocks rather than reusing the preview's `dynamicImageBlocks`
219
+ // so the materialized inner blocks get their own client IDs, distinct from
220
+ // the (disabled) preview instances.
221
+ replaceInnerBlocks(
222
+ clientId,
223
+ buildImageBlocks( dynamicMedia, imageAttributes )
224
+ );
225
+ setAttributes( { dynamicContent: undefined } );
226
+ }
227
+
228
+ // Updates the source ordering within `dynamicContent.args`. Passing
229
+ // `undefined` (or the default order) strips the keys so they aren't
230
+ // persisted redundantly and the ToolsPanel item reads as unset.
231
+ function setSourceOrder( nextOrderby, nextOrder ) {
232
+ const nextArgs = { ...dynamicContent?.args };
233
+ delete nextArgs.orderBy;
234
+ delete nextArgs.order;
235
+ if (
236
+ nextOrderby !== undefined &&
237
+ ( nextOrderby !== DEFAULT_ORDERBY || nextOrder !== DEFAULT_ORDER )
238
+ ) {
239
+ nextArgs.orderBy = nextOrderby;
240
+ nextArgs.order = nextOrder;
241
+ }
242
+ const nextSource = { ...dynamicContent };
243
+ if ( Object.keys( nextArgs ).length ) {
244
+ nextSource.args = nextArgs;
245
+ } else {
246
+ delete nextSource.args;
247
+ }
248
+ setAttributes( { dynamicContent: nextSource } );
249
+ }
250
+
251
+ // Resets the source to its bare form: keeps the source kind, drops its args.
252
+ function resetSource() {
253
+ setAttributes( {
254
+ dynamicContent: { source: dynamicContent.source },
255
+ } );
256
+ }
257
+
258
+ return {
259
+ dynamicContent,
260
+ canUseDynamicSource,
261
+ sourceDescriptor,
262
+ hasMoreImagesThanCap,
263
+ dynamicMediaTotal,
264
+ sourceOrderby,
265
+ sourceOrder,
266
+ dynamicMedia,
267
+ dynamicImageBlocks,
268
+ isResolvingDynamic,
269
+ galleryContext,
270
+ enableDynamicMode,
271
+ convertToStatic,
272
+ setSourceOrder,
273
+ resetSource,
274
+ };
275
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { ATTACHED_MEDIA } from './dynamic-source';
10
+
11
+ const variations = [
12
+ {
13
+ name: 'dynamic-gallery',
14
+ title: __( 'Dynamic Gallery' ),
15
+ description: __(
16
+ 'Display images from a source, such as those attached to the current post.'
17
+ ),
18
+ attributes: {
19
+ dynamicContent: { source: ATTACHED_MEDIA },
20
+ },
21
+ // Match any gallery that has a dynamic source configured, regardless of
22
+ // the specific source or options, so the variation's title and
23
+ // description describe the block whenever it runs in dynamic mode.
24
+ isActive: ( blockAttributes ) => !! blockAttributes.dynamicContent,
25
+ // No scopes for now. While dynamic mode only supports the "attached to the
26
+ // current post" source, `'inserter'` is intentionally omitted: a dedicated
27
+ // inserter entry would surface in post-less contexts (templates, template
28
+ // parts, synced patterns) where there's no post to resolve images from. The
29
+ // entry point is instead the inspector toggle on a regular Gallery.
30
+ // `isActive` still relabels the block card to "Dynamic Gallery" regardless
31
+ // of scope. Revisit adding `'inserter'` in a follow-up as the feature grows
32
+ // beyond the post-attached source.
33
+ scope: [],
34
+ },
35
+ ];
36
+
37
+ export default variations;
package/src/group/edit.js CHANGED
@@ -12,7 +12,6 @@ import {
12
12
  } from '@wordpress/block-editor';
13
13
  import { useRef } from '@wordpress/element';
14
14
  import { __ } from '@wordpress/i18n';
15
- import { View } from '@wordpress/primitives';
16
15
 
17
16
  /**
18
17
  * Internal dependencies
@@ -132,13 +131,13 @@ function GroupEdit( { attributes, name, setAttributes, clientId } ) {
132
131
  clientId={ clientId }
133
132
  />
134
133
  { showPlaceholder && (
135
- <View>
134
+ <div>
136
135
  { innerBlocksProps.children }
137
136
  <GroupPlaceHolder
138
137
  name={ name }
139
138
  onSelect={ selectVariation }
140
139
  />
141
- </View>
140
+ </div>
142
141
  ) }
143
142
  { layoutSupportEnabled && ! showPlaceholder && (
144
143
  <TagName { ...innerBlocksProps } />
@@ -1,7 +1,10 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { createBlock } from '@wordpress/blocks';
4
+ import {
5
+ createBlock,
6
+ __experimentalCloneSanitizedBlock,
7
+ } from '@wordpress/blocks';
5
8
 
6
9
  const transforms = {
7
10
  from: [
@@ -29,13 +32,9 @@ const transforms = {
29
32
  // to be replaced in the switchToBlockType call thereby meaning they
30
33
  // are removed both from their original location and within the
31
34
  // new group block.
32
- const groupInnerBlocks = blocks.map( ( block ) => {
33
- return createBlock(
34
- block.name,
35
- block.attributes,
36
- block.innerBlocks
37
- );
38
- } );
35
+ const groupInnerBlocks = blocks.map( ( block ) =>
36
+ __experimentalCloneSanitizedBlock( block )
37
+ );
39
38
 
40
39
  return createBlock(
41
40
  'core/group',
@@ -64,7 +64,14 @@ function HeadingEdit( props ) {
64
64
 
65
65
  // Remove anchor map when block unmounts.
66
66
  return () => setAnchor( clientId, null );
67
- }, [ anchor, content, clientId, canGenerateAnchors ] );
67
+ }, [
68
+ anchor,
69
+ content,
70
+ clientId,
71
+ canGenerateAnchors,
72
+ setAttributes,
73
+ __unstableMarkNextChangeAsNotPersistent,
74
+ ] );
68
75
 
69
76
  const onContentChange = ( value ) => {
70
77
  const newAttrs = { content: value };
@@ -80,19 +87,17 @@ function HeadingEdit( props ) {
80
87
  };
81
88
 
82
89
  return (
83
- <>
84
- <RichText
85
- identifier="content"
86
- tagName={ tagName }
87
- value={ content }
88
- onChange={ onContentChange }
89
- onMerge={ mergeBlocks }
90
- onReplace={ onReplace }
91
- onRemove={ () => onReplace( [] ) }
92
- placeholder={ placeholder || __( 'Heading' ) }
93
- { ...blockProps }
94
- />
95
- </>
90
+ <RichText
91
+ identifier="content"
92
+ tagName={ tagName }
93
+ value={ content }
94
+ onChange={ onContentChange }
95
+ onMerge={ mergeBlocks }
96
+ onReplace={ onReplace }
97
+ onRemove={ () => onReplace( [] ) }
98
+ placeholder={ placeholder || __( 'Heading' ) }
99
+ { ...blockProps }
100
+ />
96
101
  );
97
102
  }
98
103
 
@@ -73,7 +73,7 @@ function block_core_home_link_build_li_wrapper_attributes( $context ) {
73
73
  $colors['css_classes']
74
74
  );
75
75
 
76
- $style_attribute = ( $colors['inline_styles'] );
76
+ $style_attribute = $colors['inline_styles'];
77
77
  $classes[] = 'wp-block-navigation-item';
78
78
 
79
79
  if ( is_front_page() ) {
@@ -15,7 +15,7 @@ _Defined via the [`attributes`](https://developer.wordpress.org/block-editor/ref
15
15
 
16
16
  | Attribute | [Type](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#type-validation) | [Default](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#default-value) | Description |
17
17
  |-----------|------|---------|-------------|
18
- | `content` | `string` | — | [Source](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `raw`. [Role](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#role): `content` |
18
+ | `content` | `string` | — | [Role](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#role): `local` |
19
19
 
20
20
  ## Supports
21
21
 
@@ -26,6 +26,7 @@ _Defined via the [`supports`](https://developer.wordpress.org/block-editor/refer
26
26
  - [`html`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#html): `false`
27
27
  - [`interactivity`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#interactivity):
28
28
  - `clientNavigation`: `true`
29
+ - [`listView`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#listview): `true`
29
30
  - `customCSS`: `false`
30
31
  - [`visibility`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#visibility): `false`
31
32
 
@@ -10,8 +10,7 @@
10
10
  "attributes": {
11
11
  "content": {
12
12
  "type": "string",
13
- "source": "raw",
14
- "role": "content"
13
+ "role": "local"
15
14
  }
16
15
  },
17
16
  "supports": {
@@ -21,6 +20,7 @@
21
20
  "interactivity": {
22
21
  "clientNavigation": true
23
22
  },
23
+ "listView": true,
24
24
  "customCSS": false,
25
25
  "visibility": false
26
26
  },
package/src/html/edit.js CHANGED
@@ -2,13 +2,18 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import { useState } from '@wordpress/element';
5
+ import { useEffect, useState } from '@wordpress/element';
6
6
  import {
7
7
  BlockControls,
8
8
  BlockIcon,
9
9
  InspectorControls,
10
10
  useBlockProps,
11
+ store as blockEditorStore,
12
+ privateApis as blockEditorPrivateApis,
11
13
  } from '@wordpress/block-editor';
14
+ import { parse, serialize, getBlockContent } from '@wordpress/blocks';
15
+ import { useSelect, useDispatch, useRegistry } from '@wordpress/data';
16
+ import deprecated from '@wordpress/deprecated';
12
17
  import {
13
18
  ToolbarButton,
14
19
  ToolbarGroup,
@@ -21,17 +26,87 @@ import { code } from '@wordpress/icons';
21
26
  /**
22
27
  * Internal dependencies
23
28
  */
24
- import Preview from './preview';
29
+ import { unlock } from '../lock-unlock';
25
30
  import HTMLEditModal from './modal';
26
31
 
27
- export default function HTMLEdit( { attributes, setAttributes, isSelected } ) {
32
+ const { InnerContent } = unlock( blockEditorPrivateApis );
33
+
34
+ export default function HTMLEdit( { clientId, attributes } ) {
28
35
  const [ isModalOpen, setIsModalOpen ] = useState( false );
36
+ const registry = useRegistry();
37
+ const { updateBlock, replaceInnerBlocks } = useDispatch( blockEditorStore );
38
+ const content = useSelect(
39
+ ( select ) => {
40
+ const block = select( blockEditorStore ).getBlock( clientId );
41
+ return block ? getBlockContent( block ) : '';
42
+ },
43
+ [ clientId ]
44
+ );
29
45
  const blockProps = useBlockProps( {
30
46
  className: 'block-library-html__edit',
31
47
  } );
32
48
 
49
+ // Re-parse the edited content: static HTML becomes the block's
50
+ // `innerContent` fragments and `<!-- wp:* -->` delimited segments become
51
+ // inner blocks mounted at their positions within the static markup.
52
+ const onUpdate = ( nextContent ) => {
53
+ if ( nextContent === content ) {
54
+ return;
55
+ }
56
+
57
+ const [ parsedBlock ] = parse(
58
+ `<!-- wp:html -->\n${ nextContent }\n<!-- /wp:html -->`
59
+ );
60
+ const nextInnerBlocks = parsedBlock?.innerBlocks ?? [];
61
+ const prevInnerBlocks = registry
62
+ .select( blockEditorStore )
63
+ .getBlocks( clientId );
64
+ // Keep the existing inner blocks, and thereby their client IDs and
65
+ // selection, when their markup is unchanged — e.g. when only the
66
+ // surrounding static HTML was edited.
67
+ const innerBlocksUnchanged =
68
+ prevInnerBlocks.length === nextInnerBlocks.length &&
69
+ prevInnerBlocks.every(
70
+ ( block, index ) =>
71
+ serialize( block ) === serialize( nextInnerBlocks[ index ] )
72
+ );
73
+
74
+ registry.batch( () => {
75
+ updateBlock( clientId, {
76
+ innerContent:
77
+ parsedBlock?.innerContent ??
78
+ ( nextContent ? [ nextContent ] : [] ),
79
+ } );
80
+ if ( ! innerBlocksUnchanged ) {
81
+ replaceInnerBlocks( clientId, nextInnerBlocks, false );
82
+ }
83
+ } );
84
+ };
85
+
86
+ // Migrate the deprecated `content` attribute. The block's markup now lives
87
+ // in its inner content, but a block created via `createBlock( 'core/html',
88
+ // { content } )` still arrives with a `content` attribute. As soon as it
89
+ // loads, move that markup into the block's inner content and clear the
90
+ // attribute.
91
+ useEffect( () => {
92
+ if ( ! attributes.content ) {
93
+ return;
94
+ }
95
+
96
+ deprecated( 'The content attribute on the Custom HTML block', {
97
+ since: '7.1',
98
+ alternative: 'inner content',
99
+ } );
100
+
101
+ updateBlock( clientId, {
102
+ attributes: { content: undefined },
103
+ innerContent: [ attributes.content ],
104
+ } );
105
+ // eslint-disable-next-line react-hooks/exhaustive-deps
106
+ }, [ attributes.content ] );
107
+
33
108
  // Show placeholder when content is empty
34
- if ( ! attributes.content?.trim() ) {
109
+ if ( ! content?.trim() ) {
35
110
  return (
36
111
  <div { ...blockProps }>
37
112
  <Placeholder
@@ -52,8 +127,8 @@ export default function HTMLEdit( { attributes, setAttributes, isSelected } ) {
52
127
  { isModalOpen && (
53
128
  <HTMLEditModal
54
129
  onRequestClose={ () => setIsModalOpen( false ) }
55
- content={ attributes.content }
56
- setAttributes={ setAttributes }
130
+ content={ content }
131
+ onUpdate={ onUpdate }
57
132
  />
58
133
  ) }
59
134
  </div>
@@ -70,12 +145,9 @@ export default function HTMLEdit( { attributes, setAttributes, isSelected } ) {
70
145
  </ToolbarGroup>
71
146
  </BlockControls>
72
147
  <InspectorControls>
73
- <VStack
74
- className="block-editor-block-inspector-edit-contents"
75
- expanded
76
- >
148
+ <VStack className="block-library-html__edit-code" expanded>
77
149
  <Button
78
- className="block-editor-block-inspector-edit-contents__button"
150
+ className="block-library-html__edit-code-button"
79
151
  __next40pxDefaultSize
80
152
  variant="secondary"
81
153
  onClick={ () => setIsModalOpen( true ) }
@@ -84,12 +156,12 @@ export default function HTMLEdit( { attributes, setAttributes, isSelected } ) {
84
156
  </Button>
85
157
  </VStack>
86
158
  </InspectorControls>
87
- <Preview content={ attributes.content } isSelected={ isSelected } />
159
+ <InnerContent clientId={ clientId } />
88
160
  { isModalOpen && (
89
161
  <HTMLEditModal
90
162
  onRequestClose={ () => setIsModalOpen( false ) }
91
- content={ attributes.content }
92
- setAttributes={ setAttributes }
163
+ content={ content }
164
+ onUpdate={ onUpdate }
93
165
  />
94
166
  ) }
95
167
  </div>
@@ -12,6 +12,16 @@
12
12
  }
13
13
  }
14
14
 
15
+ // The "Edit code" button in the inspector renders inside the tabs panel, so
16
+ // it needs spacing on all sides, including against the tab list above it.
17
+ .block-library-html__edit-code {
18
+ margin: $grid-unit-20;
19
+
20
+ .block-library-html__edit-code-button {
21
+ justify-content: center;
22
+ }
23
+ }
24
+
15
25
  // Modal styles
16
26
  .block-library-html__modal {
17
27
 
package/src/html/index.js CHANGED
@@ -20,12 +20,11 @@ export { metadata, name };
20
20
  export const settings = {
21
21
  icon,
22
22
  example: {
23
- attributes: {
24
- content:
25
- '<marquee>' +
23
+ innerContent: [
24
+ '<marquee>' +
26
25
  __( 'Welcome to the wonderful world of blocks…' ) +
27
26
  '</marquee>',
28
- },
27
+ ],
29
28
  },
30
29
  edit,
31
30
  save,
package/src/html/modal.js CHANGED
@@ -26,11 +26,7 @@ import { parseContent, serializeContent } from './utils';
26
26
 
27
27
  const { Tabs } = unlock( componentsPrivateApis );
28
28
 
29
- export default function HTMLEditModal( {
30
- onRequestClose,
31
- content,
32
- setAttributes,
33
- } ) {
29
+ export default function HTMLEditModal( { onRequestClose, content, onUpdate } ) {
34
30
  // Parse content into separate sections and use as initial state
35
31
  const { html, css, js } = parseContent( content );
36
32
  const [ editedHtml, setEditedHtml ] = useState( html );
@@ -56,13 +52,13 @@ export default function HTMLEditModal( {
56
52
  const handleUpdate = () => {
57
53
  // For users without unfiltered_html capability, strip CSS and JS content
58
54
  // to prevent kses from leaving broken content
59
- setAttributes( {
60
- content: serializeContent( {
55
+ onUpdate(
56
+ serializeContent( {
61
57
  html: editedHtml,
62
58
  css: canUserUseUnfilteredHTML ? editedCss : '',
63
59
  js: canUserUseUnfilteredHTML ? editedJs : '',
64
- } ),
65
- } );
60
+ } )
61
+ );
66
62
  };
67
63
  const handleUpdateAndClose = () => {
68
64
  handleUpdate();