@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,33 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { ToolbarButton } from '@wordpress/components';
6
+ import { useDispatch, useSelect } from '@wordpress/data';
7
+ import { rawHandler, serialize } from '@wordpress/blocks';
8
+ import { store as blockEditorStore } from '@wordpress/block-editor';
9
+
10
+ const ConvertToBlocksButton = ( { clientId } ) => {
11
+ const { replaceBlocks } = useDispatch( blockEditorStore );
12
+ const block = useSelect(
13
+ ( select ) => {
14
+ return select( blockEditorStore ).getBlock( clientId );
15
+ },
16
+ [ clientId ]
17
+ );
18
+
19
+ return (
20
+ <ToolbarButton
21
+ onClick={ () =>
22
+ replaceBlocks(
23
+ block.clientId,
24
+ rawHandler( { HTML: serialize( block ) } )
25
+ )
26
+ }
27
+ >
28
+ { __( 'Convert to blocks' ) }
29
+ </ToolbarButton>
30
+ );
31
+ };
32
+
33
+ export default ConvertToBlocksButton;
@@ -7,7 +7,7 @@ import {
7
7
  useBlockProps,
8
8
  store as blockEditorStore,
9
9
  } from '@wordpress/block-editor';
10
- import { useDispatch, useSelect } from '@wordpress/data';
10
+ import { useSelect } from '@wordpress/data';
11
11
  import {
12
12
  Button,
13
13
  Placeholder,
@@ -21,14 +21,13 @@ import { classic } from '@wordpress/icons';
21
21
  /**
22
22
  * Internal dependencies
23
23
  */
24
- import MigrationNotice from './migration-notice';
24
+ import ConvertToBlocksButton from './convert-to-blocks-button';
25
25
  import ModalEdit from './modal';
26
26
 
27
27
  export default function FreeformEdit( {
28
28
  attributes,
29
29
  setAttributes,
30
30
  clientId,
31
- onReplace,
32
31
  } ) {
33
32
  const { content } = attributes;
34
33
  const [ isOpen, setOpen ] = useState( false );
@@ -38,10 +37,16 @@ export default function FreeformEdit( {
38
37
  ( select ) => select( blockEditorStore ).canRemoveBlock( clientId ),
39
38
  [ clientId ]
40
39
  );
41
- const { removeBlock } = useDispatch( blockEditorStore );
42
40
 
43
41
  return (
44
42
  <>
43
+ { canRemove && (
44
+ <BlockControls>
45
+ <ToolbarGroup>
46
+ <ConvertToBlocksButton clientId={ clientId } />
47
+ </ToolbarGroup>
48
+ </BlockControls>
49
+ ) }
45
50
  <BlockControls>
46
51
  <ToolbarGroup>
47
52
  <ToolbarButton
@@ -53,12 +58,6 @@ export default function FreeformEdit( {
53
58
  </ToolbarGroup>
54
59
  </BlockControls>
55
60
  <div { ...useBlockProps() }>
56
- { canRemove && content && (
57
- <MigrationNotice
58
- content={ content }
59
- onReplace={ onReplace }
60
- />
61
- ) }
62
61
  { content ? (
63
62
  <RawHTML>{ content }</RawHTML>
64
63
  ) : (
@@ -66,21 +65,12 @@ export default function FreeformEdit( {
66
65
  icon={ <BlockIcon icon={ classic } /> }
67
66
  label={ __( 'Classic' ) }
68
67
  instructions={ __(
69
- 'The Classic block is being phased out. It’s recommended to use other blocks for the best editing experience.'
68
+ 'Use the classic editor to add content.'
70
69
  ) }
71
70
  >
72
- { canRemove && (
73
- <Button
74
- __next40pxDefaultSize
75
- variant="primary"
76
- onClick={ () => removeBlock( clientId ) }
77
- >
78
- { __( 'Remove block' ) }
79
- </Button>
80
- ) }
81
71
  <Button
82
72
  __next40pxDefaultSize
83
- variant={ canRemove ? 'secondary' : 'primary' }
73
+ variant="primary"
84
74
  onClick={ () => setOpen( true ) }
85
75
  >
86
76
  { __( 'Edit contents' ) }
@@ -21,12 +21,4 @@ export const settings = {
21
21
  save,
22
22
  };
23
23
 
24
- export const init = () => {
25
- // Only expose the block in the inserter if the current post actually needs
26
- // a classic block.
27
- const supports = {
28
- ...metadata.supports,
29
- inserter: !! window?.__needsClassicBlock,
30
- };
31
- return initBlock( { name, metadata, settings: { ...settings, supports } } );
32
- };
24
+ export const init = () => initBlock( { name, metadata, settings } );
@@ -22,6 +22,7 @@ _Defined via the [`attributes`](https://developer.wordpress.org/block-editor/ref
22
22
  |-----------|------|---------|-------------|
23
23
  | `images` | `array` | `[]` | [Source](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `query`. [Selector](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `.blocks-gallery-item` |
24
24
  | `ids` | `array` | `[]` | — |
25
+ | `dynamicContent` | `object` | — | — |
25
26
  | `navigationButtonType` | `string` | `"icon"` | [Enum](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#enum-validation): `icon`, `text`, `both` |
26
27
  | `shortCodeTransforms` | `array` | `[]` | — |
27
28
  | `columns` | `number` | — | — |
@@ -67,6 +68,8 @@ _Defined via the [`usesContext` and `providesContext`](https://developer.wordpre
67
68
  **Uses context:**
68
69
 
69
70
  - `galleryId`
71
+ - `postId`
72
+ - `postType`
70
73
 
71
74
  **Provides context:**
72
75
 
@@ -4,7 +4,7 @@
4
4
  "name": "core/gallery",
5
5
  "title": "Gallery",
6
6
  "category": "media",
7
- "usesContext": [ "galleryId" ],
7
+ "usesContext": [ "galleryId", "postId", "postType" ],
8
8
  "allowedBlocks": [ "core/image" ],
9
9
  "description": "Display multiple images in a rich gallery.",
10
10
  "keywords": [ "images", "photos" ],
@@ -61,6 +61,9 @@
61
61
  },
62
62
  "default": []
63
63
  },
64
+ "dynamicContent": {
65
+ "type": "object"
66
+ },
64
67
  "navigationButtonType": {
65
68
  "type": "string",
66
69
  "default": "icon",
@@ -0,0 +1,384 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import { useState } from '@wordpress/element';
6
+ import {
7
+ Button,
8
+ Notice,
9
+ PanelBody,
10
+ Placeholder,
11
+ SelectControl,
12
+ Spinner,
13
+ ToolbarButton,
14
+ __experimentalToolsPanel as ToolsPanel,
15
+ __experimentalToolsPanelItem as ToolsPanelItem,
16
+ __experimentalConfirmDialog as ConfirmDialog,
17
+ } from '@wordpress/components';
18
+ import {
19
+ BlockContextProvider,
20
+ BlockControls,
21
+ useBlockEditingMode,
22
+ __experimentalUseBlockPreview as useBlockPreview,
23
+ } from '@wordpress/block-editor';
24
+
25
+ /**
26
+ * Internal dependencies
27
+ */
28
+ import { sharedIcon } from './shared-icon';
29
+ import { Caption } from '../utils/caption';
30
+ import { DEFAULT_ORDERBY, DEFAULT_ORDER, MAX_IMAGES } from './dynamic-source';
31
+
32
+ /**
33
+ * Ordering options for a dynamic gallery source. Each value is a composite
34
+ * `"orderby/order"` string mapping to the matching `/wp/v2/media` collection
35
+ * params. `menu_order` is deliberately omitted — it isn't a valid REST `orderby`
36
+ * value, so the editor preview couldn't reproduce it (see `dynamic-source.js`).
37
+ */
38
+ const ORDER_OPTIONS = [
39
+ { label: __( 'Newest to oldest' ), value: 'date/desc' },
40
+ { label: __( 'Oldest to newest' ), value: 'date/asc' },
41
+ {
42
+ /* translators: Label for ordering images by title in ascending order. */
43
+ label: __( 'A → Z' ),
44
+ value: 'title/asc',
45
+ },
46
+ {
47
+ /* translators: Label for ordering images by title in descending order. */
48
+ label: __( 'Z → A' ),
49
+ value: 'title/desc',
50
+ },
51
+ ];
52
+
53
+ /**
54
+ * "Order by" control for a dynamic gallery, mirroring the Query Loop block's
55
+ * `OrderControl`: a single `SelectControl` whose value composites `orderby` and
56
+ * `order`, split apart again on change.
57
+ *
58
+ * @param {Object} props
59
+ * @param {string} props.orderby Current `orderby` value.
60
+ * @param {string} props.order Current `order` value (`asc`/`desc`).
61
+ * @param {Function} props.onChange Called with `{ orderby, order }` on change.
62
+ */
63
+ function OrderControl( { orderby, order, onChange } ) {
64
+ return (
65
+ <SelectControl
66
+ label={ __( 'Order by' ) }
67
+ value={ `${ orderby }/${ order }` }
68
+ options={ ORDER_OPTIONS }
69
+ onChange={ ( value ) => {
70
+ const [ newOrderby, newOrder ] = value.split( '/' );
71
+ onChange( { orderby: newOrderby, order: newOrder } );
72
+ } }
73
+ />
74
+ );
75
+ }
76
+
77
+ /**
78
+ * The Gallery block's "Source" inspector panel.
79
+ *
80
+ * In dynamic mode it shows the resolved source, a control to convert back to
81
+ * individual images, and the source ordering. In static mode it offers the
82
+ * entry point into dynamic mode — and, since switching discards any hand-added
83
+ * images, owns the confirmation dialog for that one-way change. Rendered inside
84
+ * the block's `InspectorControls`, alongside the Settings panel.
85
+ *
86
+ * @param {Object} props
87
+ * @param {Object} props.dynamic The `useDynamicGallery` result.
88
+ * @param {Object} props.dropdownMenuProps Shared ToolsPanel dropdown menu props.
89
+ * @param {boolean} props.hasImages Whether the gallery has manually-added images.
90
+ */
91
+ export function GallerySourcePanel( {
92
+ dynamic,
93
+ dropdownMenuProps,
94
+ hasImages,
95
+ } ) {
96
+ const {
97
+ dynamicContent,
98
+ canUseDynamicSource,
99
+ sourceDescriptor,
100
+ sourceOrderby,
101
+ sourceOrder,
102
+ setSourceOrder,
103
+ convertToStatic,
104
+ enableDynamicMode,
105
+ resetSource,
106
+ isResolvingDynamic,
107
+ hasMoreImagesThanCap,
108
+ dynamicMediaTotal,
109
+ } = dynamic;
110
+ const isDynamic = !! dynamicContent;
111
+
112
+ const [ isConfirming, setIsConfirming ] = useState( false );
113
+
114
+ // Entering dynamic mode discards any hand-added images, so confirm first
115
+ // when there are images to lose; otherwise switch straight away.
116
+ function requestEnableDynamicMode() {
117
+ if ( hasImages ) {
118
+ setIsConfirming( true );
119
+ } else {
120
+ enableDynamicMode();
121
+ }
122
+ }
123
+
124
+ if ( isDynamic ) {
125
+ return (
126
+ <ToolsPanel
127
+ label={ __( 'Source' ) }
128
+ resetAll={ resetSource }
129
+ dropdownMenuProps={ dropdownMenuProps }
130
+ >
131
+ <div className="wp-block-gallery__source-settings">
132
+ <p className="wp-block-gallery__source-description">
133
+ { sourceDescriptor?.description ??
134
+ __( 'Dynamic images.' ) }
135
+ </p>
136
+ <Button
137
+ __next40pxDefaultSize
138
+ variant="secondary"
139
+ onClick={ convertToStatic }
140
+ // Guard the race where the media is still resolving:
141
+ // converting now would map over an incomplete (or empty)
142
+ // list and produce a gallery missing images.
143
+ disabled={ isResolvingDynamic }
144
+ accessibleWhenDisabled
145
+ >
146
+ { __( 'Convert to individual images' ) }
147
+ </Button>
148
+ </div>
149
+ { hasMoreImagesThanCap && (
150
+ <Notice
151
+ className="wp-block-gallery__source-notice"
152
+ status="warning"
153
+ isDismissible={ false }
154
+ >
155
+ { sprintf(
156
+ /* translators: 1: number of images shown. 2: total number of matching images. */
157
+ __(
158
+ 'Only the first %1$d of %2$d images will be displayed.'
159
+ ),
160
+ MAX_IMAGES,
161
+ dynamicMediaTotal
162
+ ) }
163
+ </Notice>
164
+ ) }
165
+ <ToolsPanelItem
166
+ isShownByDefault
167
+ label={ __( 'Order by' ) }
168
+ hasValue={ () =>
169
+ sourceOrderby !== DEFAULT_ORDERBY ||
170
+ sourceOrder !== DEFAULT_ORDER
171
+ }
172
+ onDeselect={ () => setSourceOrder( undefined, undefined ) }
173
+ >
174
+ <OrderControl
175
+ orderby={ sourceOrderby }
176
+ order={ sourceOrder }
177
+ onChange={ ( { orderby, order } ) =>
178
+ setSourceOrder( orderby, order )
179
+ }
180
+ />
181
+ </ToolsPanelItem>
182
+ </ToolsPanel>
183
+ );
184
+ }
185
+
186
+ // In static mode this panel is just an entry into dynamic mode, so hide it
187
+ // when there's no post type to preview against. This is intentionally
188
+ // stricter than the placeholder's entry button (see `edit.js`), which stays
189
+ // available anywhere because the source resolves at render time.
190
+ if ( ! canUseDynamicSource ) {
191
+ return null;
192
+ }
193
+
194
+ return (
195
+ <>
196
+ <PanelBody title={ __( 'Source' ) }>
197
+ <div className="wp-block-gallery__source-settings">
198
+ { /*
199
+ * Hardcoded on purpose: this single-source entry button (and
200
+ * its confirm dialog below) is temporary. Once more sources
201
+ * exist it becomes a "Choose source" select whose options read
202
+ * from each source descriptor's `title`, with help text
203
+ * carrying the per-source explanation this string does today.
204
+ */ }
205
+ <Button
206
+ __next40pxDefaultSize
207
+ variant="secondary"
208
+ onClick={ requestEnableDynamicMode }
209
+ >
210
+ { __( 'Use images attached to the post' ) }
211
+ </Button>
212
+ </div>
213
+ </PanelBody>
214
+ { isConfirming && (
215
+ <ConfirmDialog
216
+ isOpen
217
+ title={ __( 'Use images attached to the post?' ) }
218
+ __experimentalHideHeader={ false }
219
+ confirmButtonText={ __( 'Use attached images' ) }
220
+ onConfirm={ () => {
221
+ enableDynamicMode();
222
+ setIsConfirming( false );
223
+ } }
224
+ onCancel={ () => setIsConfirming( false ) }
225
+ size="medium"
226
+ >
227
+ { __(
228
+ 'The images in this gallery will be replaced, but will remain in the media library.'
229
+ ) }
230
+ </ConfirmDialog>
231
+ ) }
232
+ </>
233
+ );
234
+ }
235
+
236
+ /**
237
+ * Renders the resolved image blocks as a read-only preview.
238
+ *
239
+ * `useBlockPreview` returns a `useDisabled` ref that makes its subtree inert, so
240
+ * previewed images (including any links) aren't interactive in the editor. The
241
+ * ref needs a real element, yet the images must stay flex children of the gallery
242
+ * `<figure>` and sit beside an editable caption. `display: contents` resolves
243
+ * this: the wrapper carries the ref but generates no box, so the image figures
244
+ * remain the figure's flex items and only they are disabled — the caption sibling
245
+ * stays editable. This relies on the gallery's image styles using descendant
246
+ * (not direct-child) selectors, which the box-less wrapper leaves intact.
247
+ *
248
+ * @param {Object} props
249
+ * @param {Object[]} props.imageBlocks Non-persisted `core/image` blocks to preview.
250
+ */
251
+ function GalleryImagesPreview( { imageBlocks } ) {
252
+ const { children, ref, className } = useBlockPreview( {
253
+ blocks: imageBlocks,
254
+ } );
255
+ return (
256
+ <div
257
+ ref={ ref }
258
+ className={ className }
259
+ style={ { display: 'contents' } }
260
+ >
261
+ { children }
262
+ </div>
263
+ );
264
+ }
265
+
266
+ /**
267
+ * Renders a dynamic-mode gallery on the canvas:
268
+ *
269
+ * - a block-toolbar control to convert back to individual images;
270
+ * - the gallery `<figure>` wrapper holding a non-editable preview of the
271
+ * resolved media (or a placeholder while resolving / when nothing is found),
272
+ * with the gallery's provided context so the previewed images inherit
273
+ * gallery-wide settings;
274
+ * - an editable gallery-level caption, alongside the read-only preview;
275
+ * - the (empty) inner blocks kept mounted so the container's `allowedBlocks: []`
276
+ * keeps syncing to block list settings (which blocks insertion and hides the
277
+ * List View).
278
+ *
279
+ * @param {Object} props
280
+ * @param {Object} props.dynamic The `useDynamicGallery` result.
281
+ * @param {Object} props.blockProps The gallery's `useBlockProps()` result.
282
+ * @param {Object} props.innerBlocksProps The gallery's `useInnerBlocksProps()` result.
283
+ * @param {Object} props.attributes The gallery block attributes.
284
+ * @param {Function} props.setAttributes The block's `setAttributes`.
285
+ * @param {boolean} props.isSelected Whether the gallery block is selected.
286
+ * @param {Function} props.insertBlocksAfter Inserts blocks after the gallery.
287
+ * @param {boolean} props.isContentLocked Whether the gallery is content-locked.
288
+ * @param {boolean} props.multiGallerySelection Whether multiple galleries are selected.
289
+ */
290
+ export function GalleryDynamicView( {
291
+ dynamic,
292
+ blockProps,
293
+ innerBlocksProps,
294
+ attributes,
295
+ setAttributes,
296
+ isSelected,
297
+ insertBlocksAfter,
298
+ isContentLocked,
299
+ multiGallerySelection,
300
+ } ) {
301
+ const {
302
+ sourceDescriptor,
303
+ dynamicImageBlocks,
304
+ galleryContext,
305
+ isResolvingDynamic,
306
+ convertToStatic,
307
+ } = dynamic;
308
+
309
+ // Converting to a static gallery materializes editable inner blocks, which
310
+ // is a structural change. Only offer it when the block is fully editable:
311
+ // under a content lock (e.g. inside a `contentOnly` group) the editing mode
312
+ // is `'contentOnly'`/`'disabled'`, where structural toolbar controls are
313
+ // hidden and the conversion shouldn't be possible.
314
+ const blockEditingMode = useBlockEditingMode();
315
+
316
+ // Empty-state copy for the preview. Framed as forward-looking ("… will appear
317
+ // here") rather than as an error, since the same empty result covers both a
318
+ // post with no matching images and a template with no post in context yet —
319
+ // in either case the source simply resolves to nothing right now. The per-
320
+ // source wording comes from the source descriptor.
321
+ const emptyInstructions = isResolvingDynamic
322
+ ? __( 'Loading images…' )
323
+ : sourceDescriptor?.emptyMessage ??
324
+ __( 'Dynamic images will appear here.' );
325
+
326
+ return (
327
+ <>
328
+ { blockEditingMode === 'default' && (
329
+ <BlockControls group="other">
330
+ <ToolbarButton
331
+ onClick={ convertToStatic }
332
+ // Same guard as the inspector's "Convert to individual
333
+ // images": both call `convertToStatic`, which would map over
334
+ // a still-resolving (or empty) media list. (`ToolbarButton`
335
+ // stays focusable when disabled by default.)
336
+ disabled={ isResolvingDynamic }
337
+ >
338
+ { __( 'Convert to images' ) }
339
+ </ToolbarButton>
340
+ </BlockControls>
341
+ ) }
342
+ <figure { ...blockProps }>
343
+ { dynamicImageBlocks.length ? (
344
+ <BlockContextProvider value={ galleryContext }>
345
+ <GalleryImagesPreview
346
+ imageBlocks={ dynamicImageBlocks }
347
+ />
348
+ </BlockContextProvider>
349
+ ) : (
350
+ <Placeholder
351
+ icon={ sharedIcon }
352
+ label={ __( 'Gallery' ) }
353
+ instructions={ emptyInstructions }
354
+ >
355
+ { isResolvingDynamic && <Spinner /> }
356
+ </Placeholder>
357
+ ) }
358
+ <Caption
359
+ attributes={ attributes }
360
+ setAttributes={ setAttributes }
361
+ isSelected={ isSelected }
362
+ insertBlocksAfter={ insertBlocksAfter }
363
+ showToolbarButton={
364
+ ! multiGallerySelection && ! isContentLocked
365
+ }
366
+ className="blocks-gallery-caption"
367
+ label={ __( 'Gallery caption text' ) }
368
+ placeholder={ __( 'Add gallery caption' ) }
369
+ />
370
+ </figure>
371
+ { /*
372
+ * Dynamic mode shows a preview instead of real inner blocks, but the
373
+ * empty inner blocks are still rendered here for their side effect:
374
+ * the `allowedBlocks: []` passed to `useInnerBlocksProps` only syncs
375
+ * to block list settings while the inner blocks are mounted (via
376
+ * `useNestedSettingsUpdate`). That setting is what blocks insertion
377
+ * (`canInsertBlockType`) and hides the now-unusable List View
378
+ * (`shouldRenderBlockListView`). With no inner blocks and no appender,
379
+ * this renders no output of its own.
380
+ */ }
381
+ { innerBlocksProps.children }
382
+ </>
383
+ );
384
+ }
@@ -0,0 +1,117 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+
6
+ /**
7
+ * Source discriminator for "images attached to the post" — the only dynamic
8
+ * source implemented so far. Kept as a named constant since it's referenced from
9
+ * several call sites (the query builder, the descriptor, and the entry points
10
+ * that switch a gallery into dynamic mode).
11
+ */
12
+ export const ATTACHED_MEDIA = 'core/attached-media';
13
+
14
+ /**
15
+ * Default ordering for a dynamic source. `menu_order` (the manual media-library
16
+ * order) is intentionally not used: it isn't a valid `orderby` value on the
17
+ * media REST endpoint, so the editor preview couldn't reproduce it. Both the
18
+ * editor query and the server resolver default to the same REST-supported order
19
+ * so the preview matches the frontend.
20
+ */
21
+ export const DEFAULT_ORDERBY = 'date';
22
+ export const DEFAULT_ORDER = 'desc';
23
+
24
+ /**
25
+ * Per-source copy, keyed by the `source` discriminator in a gallery's
26
+ * `dynamicContent`. Adding a dynamic source means adding an entry here; the
27
+ * editor components read these strings instead of hardcoding source-specific
28
+ * wording. The fields also map onto a future "Choose source" control: `title`
29
+ * becomes an option label, `description` its help text, and `emptyMessage` the
30
+ * canvas preview when the source resolves to nothing.
31
+ */
32
+ const DYNAMIC_SOURCES = {
33
+ [ ATTACHED_MEDIA ]: {
34
+ // Short label for the entry affordance / future source chooser. Mirrors
35
+ // the "Attached images" media inserter category name.
36
+ title: __( 'Use attached images' ),
37
+ // Help text shown beneath the Source controls.
38
+ description: __( 'Images attached to the post.' ),
39
+ // Empty-state copy for the canvas preview.
40
+ emptyMessage: __( 'Images attached to the post will appear here.' ),
41
+ },
42
+ };
43
+
44
+ /**
45
+ * Returns the descriptor for a dynamic source, or `undefined` for an unknown or
46
+ * not-yet-implemented source.
47
+ *
48
+ * @param {?string} source The `dynamicContent.source` discriminator.
49
+ * @return {?Object} The source descriptor (`title`, `description`, `emptyMessage`).
50
+ */
51
+ export function getDynamicSource( source ) {
52
+ return DYNAMIC_SOURCES[ source ];
53
+ }
54
+
55
+ /**
56
+ * Upper bound on the number of images a dynamic source resolves, until the
57
+ * gallery supports pagination. Kept in sync with the `posts_per_page` cap in
58
+ * `block_core_gallery_resolve_dynamic_source()`.
59
+ */
60
+ export const MAX_IMAGES = 100;
61
+
62
+ /**
63
+ * Maps a gallery's `dynamicContent` attribute to a query for the `attachment`
64
+ * entity (i.e. `/wp/v2/media` collection params), used to resolve the source to
65
+ * a list of media in the editor.
66
+ *
67
+ * The `source` key is the dispatch discriminator and `args` holds the
68
+ * source's parameters. This `{ source, args }` shape mirrors the Block
69
+ * Bindings metadata shape (`metadata.bindings.<key> = { source, args }`) so
70
+ * dynamic mode can migrate to an `innerBlocks` binding with minimal change.
71
+ * `args` keys are camelCase (the block-attribute convention, as used by the
72
+ * Query block's `query` attribute); each source's resolver maps them to the
73
+ * REST/transport names it needs. `core/attached-media` is a context-relative anchor
74
+ * resolved here to the REST `parent` param. The server-side counterpart is
75
+ * `block_core_gallery_resolve_dynamic_source()` in `index.php`.
76
+ *
77
+ * @param {Object} dynamicContent The gallery's `dynamicContent` attribute.
78
+ * @param {Object} context Resolution context.
79
+ * @param {number} context.postId The current post ID.
80
+ * @return {Object|null} A `getEntityRecords` query, or `null` when the source
81
+ * cannot be resolved (unknown source or missing context).
82
+ */
83
+ export function getSourceQuery( dynamicContent, { postId } ) {
84
+ const { source, args = {} } = dynamicContent ?? {};
85
+
86
+ switch ( source ) {
87
+ case ATTACHED_MEDIA:
88
+ if ( ! postId ) {
89
+ return null;
90
+ }
91
+ return {
92
+ parent: postId,
93
+ per_page: MAX_IMAGES,
94
+ // The gallery only accepts images, so constrain the source to
95
+ // image media (matching the server resolver). This keeps the
96
+ // editor preview in step with the rendered output for posts
97
+ // that also have non-image attachments.
98
+ media_type: 'image',
99
+ // Map the camelCase `args` to the REST-named media collection
100
+ // params. Unexpected values (only reachable via hand-edited
101
+ // markup) are coerced back to the defaults — mirroring the server
102
+ // resolver's allow list — so the editor preview stays in step with
103
+ // the frontend instead of issuing an invalid REST query.
104
+ orderby:
105
+ args.orderBy === 'date' || args.orderBy === 'title'
106
+ ? args.orderBy
107
+ : DEFAULT_ORDERBY,
108
+ order:
109
+ args.order === 'asc' || args.order === 'desc'
110
+ ? args.order
111
+ : DEFAULT_ORDER,
112
+ };
113
+ }
114
+
115
+ // Unknown or not-yet-implemented source.
116
+ return null;
117
+ }