@wordpress/block-library 10.0.1 → 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 +11 -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 -42
  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,58 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import {
6
+ BlockControls,
7
+ store as blockEditorStore,
8
+ } from '@wordpress/block-editor';
9
+ import { ToolbarGroup, ToolbarButton } from '@wordpress/components';
10
+ import { useSelect } from '@wordpress/data';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import useTabActions from './use-tab-actions';
16
+
17
+ /**
18
+ * "Add tab" and "Remove tab" buttons in the block toolbar for the tabs block.
19
+ * Inserts or removes a core/tab-panel. The tab-list items attribute is kept
20
+ * in sync automatically via useTabListItemsSync.
21
+ *
22
+ * @param {Object} props
23
+ * @param {string} props.tabsClientId The client ID of the parent tabs block.
24
+ * @return {React.JSX.Element} The toolbar control element.
25
+ */
26
+ export default function TabToolbarControls( { tabsClientId } ) {
27
+ const { insertTab, removeTab } = useTabActions( tabsClientId );
28
+ const isRemoveDisabled = useSelect(
29
+ ( select ) => {
30
+ if ( ! tabsClientId ) {
31
+ return true;
32
+ }
33
+ const tabPanels = select( blockEditorStore )
34
+ .getBlocks( tabsClientId )
35
+ .find( ( block ) => block.name === 'core/tab-panels' );
36
+ return ( tabPanels?.innerBlocks.length ?? 0 ) <= 1;
37
+ },
38
+ [ tabsClientId ]
39
+ );
40
+
41
+ return (
42
+ <BlockControls group="other">
43
+ <ToolbarGroup>
44
+ <ToolbarButton
45
+ className="components-toolbar__control"
46
+ onClick={ () => insertTab() }
47
+ text={ __( 'Add tab' ) }
48
+ />
49
+ <ToolbarButton
50
+ className="components-toolbar__control"
51
+ onClick={ () => removeTab() }
52
+ text={ __( 'Remove tab' ) }
53
+ disabled={ isRemoveDisabled }
54
+ />
55
+ </ToolbarGroup>
56
+ </BlockControls>
57
+ );
58
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { createBlock } from '@wordpress/blocks';
6
+ import { store as blockEditorStore } from '@wordpress/block-editor';
7
+ import { useDispatch, useRegistry } from '@wordpress/data';
8
+
9
+ /**
10
+ * Provides callbacks to insert and remove tabs for a tabs block.
11
+ *
12
+ * The hook intentionally avoids subscribing to the store: all data is derived
13
+ * lazily inside the callbacks via `registry.select`, so consumers don't
14
+ * re-render when the tab structure changes.
15
+ *
16
+ * @param {string|null} tabsClientId The client ID of the parent tabs block.
17
+ * @return {{ insertTab: Function, removeTab: Function }} Tab action callbacks.
18
+ */
19
+ export default function useTabActions( tabsClientId ) {
20
+ const registry = useRegistry();
21
+ const {
22
+ insertBlock,
23
+ removeBlock,
24
+ updateBlockAttributes,
25
+ __unstableMarkNextChangeAsNotPersistent,
26
+ } = useDispatch( blockEditorStore );
27
+
28
+ // Derive the current tabs state at call time without subscribing.
29
+ const getTabsState = () => {
30
+ const { getBlocks, getBlockAttributes } =
31
+ registry.select( blockEditorStore );
32
+
33
+ const tabsAttributes = tabsClientId
34
+ ? getBlockAttributes( tabsClientId )
35
+ : undefined;
36
+ const tabPanels = tabsClientId
37
+ ? getBlocks( tabsClientId ).find(
38
+ ( block ) => block.name === 'core/tab-panels'
39
+ )
40
+ : undefined;
41
+
42
+ return {
43
+ tabPanelsClientId: tabPanels?.clientId ?? null,
44
+ tabPanelBlocks: tabPanels?.innerBlocks ?? [],
45
+ activeIndex:
46
+ tabsAttributes?.editorActiveTabIndex ??
47
+ tabsAttributes?.activeTabIndex ??
48
+ 0,
49
+ };
50
+ };
51
+
52
+ // Insert a new tab and make it active. Defaults to appending at the end.
53
+ const insertTab = ( atIndex ) => {
54
+ const { tabPanelsClientId, tabPanelBlocks } = getTabsState();
55
+ if ( ! tabPanelsClientId ) {
56
+ return;
57
+ }
58
+
59
+ const newIndex = atIndex ?? tabPanelBlocks.length;
60
+ insertBlock(
61
+ createBlock( 'core/tab-panel', { label: __( 'Tab' ) } ),
62
+ newIndex,
63
+ tabPanelsClientId,
64
+ false
65
+ );
66
+
67
+ // Switch editor active tab to the new tab.
68
+ __unstableMarkNextChangeAsNotPersistent();
69
+ updateBlockAttributes( tabsClientId, {
70
+ editorActiveTabIndex: newIndex,
71
+ } );
72
+ };
73
+
74
+ // Remove a tab and move the active tab to an adjacent one. Defaults to the
75
+ // currently active tab.
76
+ const removeTab = ( atIndex ) => {
77
+ const { tabPanelBlocks, activeIndex } = getTabsState();
78
+ const tabCount = tabPanelBlocks.length;
79
+ if ( tabCount <= 1 ) {
80
+ return;
81
+ }
82
+
83
+ const removeIndex = atIndex ?? activeIndex;
84
+ const target = tabPanelBlocks[ removeIndex ];
85
+ if ( ! target ) {
86
+ return;
87
+ }
88
+
89
+ // Calculate new active index after removal.
90
+ const newActiveIndex =
91
+ removeIndex >= tabCount - 1 ? tabCount - 2 : removeIndex;
92
+
93
+ // Switch editor to the adjacent tab and remove the current one.
94
+ __unstableMarkNextChangeAsNotPersistent();
95
+ updateBlockAttributes( tabsClientId, {
96
+ editorActiveTabIndex: newActiveIndex,
97
+ } );
98
+ removeBlock( target.clientId, false );
99
+ };
100
+
101
+ return { insertTab, removeTab };
102
+ }
@@ -2,8 +2,8 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { store as blockEditorStore } from '@wordpress/block-editor';
5
- import { useDispatch } from '@wordpress/data';
6
- import { useEffect, useRef } from '@wordpress/element';
5
+ import { useDispatch, useSelect } from '@wordpress/data';
6
+ import { useEffect } from '@wordpress/element';
7
7
 
8
8
  /**
9
9
  * Keep the tab-list block's `tabs` attribute in sync with the tab-panel blocks.
@@ -19,8 +19,7 @@ import { useEffect, useRef } from '@wordpress/element';
19
19
  export default function useTabListItemsSync( { tabPanels, tabListClientId } ) {
20
20
  const { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =
21
21
  useDispatch( blockEditorStore );
22
-
23
- const prevTabsRef = useRef( null );
22
+ const { getBlockAttributes } = useSelect( blockEditorStore );
24
23
 
25
24
  useEffect( () => {
26
25
  if ( ! tabListClientId ) {
@@ -31,18 +30,18 @@ export default function useTabListItemsSync( { tabPanels, tabListClientId } ) {
31
30
  label: tab.attributes.label || '',
32
31
  } ) );
33
32
 
34
- // Only update if tabs actually changed to avoid unnecessary re-renders.
35
- const serialized = JSON.stringify( newTabs );
36
- if ( serialized === prevTabsRef.current ) {
33
+ // Skip the update when the stored tabs already match the derived ones.
34
+ const currentTabs = getBlockAttributes( tabListClientId )?.tabs ?? [];
35
+ if ( JSON.stringify( newTabs ) === JSON.stringify( currentTabs ) ) {
37
36
  return;
38
37
  }
39
- prevTabsRef.current = serialized;
40
38
 
41
39
  __unstableMarkNextChangeAsNotPersistent();
42
40
  updateBlockAttributes( tabListClientId, { tabs: newTabs } );
43
41
  }, [
44
42
  tabPanels,
45
43
  tabListClientId,
44
+ getBlockAttributes,
46
45
  updateBlockAttributes,
47
46
  __unstableMarkNextChangeAsNotPersistent,
48
47
  ] );
@@ -139,7 +139,6 @@ function TagCloudEdit( { attributes, setAttributes, name } ) {
139
139
  isShownByDefault
140
140
  >
141
141
  <SelectControl
142
- __next40pxDefaultSize
143
142
  label={ __( 'Taxonomy' ) }
144
143
  options={ getTaxonomyOptions() }
145
144
  value={ taxonomy }
@@ -175,7 +174,6 @@ function TagCloudEdit( { attributes, setAttributes, name } ) {
175
174
  units={ units }
176
175
  min={ MIN_FONT_SIZE }
177
176
  max={ MAX_FONT_SIZE }
178
- size="__unstable-large"
179
177
  />
180
178
  </FlexItem>
181
179
  <FlexItem isBlock>
@@ -191,7 +189,6 @@ function TagCloudEdit( { attributes, setAttributes, name } ) {
191
189
  units={ units }
192
190
  min={ MIN_FONT_SIZE }
193
191
  max={ MAX_FONT_SIZE }
194
- size="__unstable-large"
195
192
  />
196
193
  </FlexItem>
197
194
  </Flex>
@@ -203,7 +200,6 @@ function TagCloudEdit( { attributes, setAttributes, name } ) {
203
200
  isShownByDefault
204
201
  >
205
202
  <RangeControl
206
- __next40pxDefaultSize
207
203
  label={ __( 'Number of tags' ) }
208
204
  value={ numberOfTags }
209
205
  onChange={ ( value ) =>
@@ -16,7 +16,7 @@
16
16
  */
17
17
  function render_block_core_tag_cloud( $attributes ) {
18
18
  $smallest_font_size = $attributes['smallestFontSize'];
19
- $unit = ( preg_match( '/^[0-9.]+(?P<unit>[a-z%]+)$/i', $smallest_font_size, $m ) ? $m['unit'] : 'pt' );
19
+ $unit = preg_match( '/^[0-9.]+(?P<unit>[a-z%]+)$/i', $smallest_font_size, $m ) ? $m['unit'] : 'pt';
20
20
 
21
21
  $args = array(
22
22
  'echo' => false,
@@ -65,7 +65,6 @@ export function TemplatePartAdvancedControls( {
65
65
  onFocus={ ( event ) => event.target.select() }
66
66
  />
67
67
  <SelectControl
68
- __next40pxDefaultSize
69
68
  label={ __( 'Area' ) }
70
69
  labelPosition="top"
71
70
  options={ areaOptions }
@@ -147,7 +147,6 @@ export function TemplatePartImportControls( { area, setAttributes } ) {
147
147
  options={ options }
148
148
  onChange={ ( value ) => setSelectedSidebar( value ) }
149
149
  disabled={ ! options.length }
150
- __next40pxDefaultSize
151
150
  />
152
151
  </FlexBlock>
153
152
  <FlexItem
@@ -136,7 +136,6 @@ export default function IncludeControl( {
136
136
 
137
137
  return (
138
138
  <FormTokenField
139
- __next40pxDefaultSize
140
139
  value={ value }
141
140
  onInputChange={ debouncedSearch }
142
141
  suggestions={ suggestions }
@@ -10,7 +10,6 @@ import { __ } from '@wordpress/i18n';
10
10
  export default function InheritControl( { value, onChange, label } ) {
11
11
  return (
12
12
  <ToggleGroupControl
13
- __next40pxDefaultSize
14
13
  label={ label }
15
14
  isBlock
16
15
  onChange={ ( newValue ) => {
@@ -7,7 +7,6 @@ import { RangeControl } from '@wordpress/components';
7
7
  export default function MaxTermsControl( { value, onChange, ...props } ) {
8
8
  return (
9
9
  <RangeControl
10
- __next40pxDefaultSize
11
10
  value={ value }
12
11
  min={ 0 }
13
12
  max={ 100 }
@@ -7,7 +7,6 @@ import { SelectControl } from '@wordpress/components';
7
7
  export default function OrderControl( { orderBy, order, onChange, ...props } ) {
8
8
  return (
9
9
  <SelectControl
10
- __next40pxDefaultSize
11
10
  options={ [
12
11
  {
13
12
  label: __( 'Name: A → Z' ),
@@ -17,7 +17,6 @@ export default function TaxonomyControl( { value, onChange, ...props } ) {
17
17
 
18
18
  return (
19
19
  <SelectControl
20
- __next40pxDefaultSize
21
20
  options={ taxonomyOptions }
22
21
  value={ value }
23
22
  onChange={ onChange }
@@ -34,7 +34,6 @@ export default function TextColumnsEdit( { attributes, setAttributes } ) {
34
34
  <InspectorControls>
35
35
  <PanelBody>
36
36
  <RangeControl
37
- __next40pxDefaultSize
38
37
  label={ __( 'Columns' ) }
39
38
  value={ columns }
40
39
  onChange={ ( value ) =>
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Returns the subset of block attributes that should be carried over when
3
+ * converting between the animated-GIF Image block and its converted Video
4
+ * block (in either direction).
5
+ *
6
+ * The conversion swaps one block for another via `createBlock`, which would
7
+ * otherwise drop everything the author set on the original block. This carries
8
+ * the attributes both blocks support, so the conversion (and its reverse) keeps
9
+ * them: block alignment, the HTML anchor, custom class names, and margin
10
+ * spacing.
11
+ *
12
+ * Image-only attributes such as links (`href`/`linkDestination`), sizing
13
+ * (`sizeSlug`/`scale`), and `border`/`shadow` styles are intentionally not
14
+ * carried: the Video block has no equivalent, so copying them would leave
15
+ * attributes the target block cannot represent.
16
+ *
17
+ * @param {Object} attributes Source block attributes.
18
+ * @return {Object} Attributes to spread into the converted block.
19
+ */
20
+ export function getCarriedGifConversionAttributes( attributes ) {
21
+ const { align, anchor, className, style } = attributes;
22
+ const margin = style?.spacing?.margin;
23
+
24
+ return {
25
+ ...( align && { align } ),
26
+ ...( anchor && { anchor } ),
27
+ ...( className && { className } ),
28
+ ...( margin && { style: { spacing: { margin } } } ),
29
+ };
30
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { getCarriedGifConversionAttributes } from '../gif-conversion-attributes';
5
+
6
+ describe( 'getCarriedGifConversionAttributes', () => {
7
+ it( 'carries align, anchor, className and margin spacing', () => {
8
+ const result = getCarriedGifConversionAttributes( {
9
+ align: 'wide',
10
+ anchor: 'my-gif',
11
+ className: 'is-style-rounded',
12
+ style: { spacing: { margin: { top: '10px', bottom: '10px' } } },
13
+ } );
14
+
15
+ expect( result ).toEqual( {
16
+ align: 'wide',
17
+ anchor: 'my-gif',
18
+ className: 'is-style-rounded',
19
+ style: { spacing: { margin: { top: '10px', bottom: '10px' } } },
20
+ } );
21
+ } );
22
+
23
+ it( 'omits attributes that are not set', () => {
24
+ expect( getCarriedGifConversionAttributes( {} ) ).toEqual( {} );
25
+ expect(
26
+ getCarriedGifConversionAttributes( { align: 'full' } )
27
+ ).toEqual( { align: 'full' } );
28
+ } );
29
+
30
+ it( 'carries only margin from style, dropping unsupported styles', () => {
31
+ const result = getCarriedGifConversionAttributes( {
32
+ style: {
33
+ spacing: {
34
+ margin: { top: '5px' },
35
+ padding: { top: '5px' },
36
+ },
37
+ border: { radius: '8px' },
38
+ shadow: 'var:preset|shadow|natural',
39
+ },
40
+ } );
41
+
42
+ // Only spacing.margin survives; padding/border/shadow are not carried
43
+ // because the converted block may not support them.
44
+ expect( result ).toEqual( {
45
+ style: { spacing: { margin: { top: '5px' } } },
46
+ } );
47
+ } );
48
+
49
+ it( 'does not carry image-only attributes such as links or sizing', () => {
50
+ const result = getCarriedGifConversionAttributes( {
51
+ align: 'center',
52
+ href: 'https://example.com',
53
+ linkDestination: 'custom',
54
+ sizeSlug: 'large',
55
+ scale: 'cover',
56
+ } );
57
+
58
+ expect( result ).toEqual( { align: 'center' } );
59
+ } );
60
+ } );
@@ -1,7 +1,3 @@
1
- /**
2
- * @jest-environment jsdom
3
- */
4
-
5
1
  /**
6
2
  * External dependencies
7
3
  */
@@ -1,7 +1,3 @@
1
- /**
2
- * @jest-environment jsdom
3
- */
4
-
5
1
  /**
6
2
  * External dependencies
7
3
  */
@@ -25,6 +25,7 @@ _Defined via the [`supports`](https://developer.wordpress.org/block-editor/refer
25
25
  - [`background`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#background):
26
26
  - `backgroundImage`: `true`
27
27
  - `backgroundSize`: `true`
28
+ - `gradient`: `true`
28
29
  - [`color`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#color):
29
30
  - [`gradients`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#color-gradients): `true`
30
31
  - [`link`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#color-link): `true`
@@ -21,8 +21,10 @@
21
21
  "background": {
22
22
  "backgroundImage": true,
23
23
  "backgroundSize": true,
24
+ "gradient": true,
24
25
  "__experimentalDefaultControls": {
25
- "backgroundImage": true
26
+ "backgroundImage": true,
27
+ "gradient": true
26
28
  }
27
29
  },
28
30
  "color": {
@@ -25,6 +25,8 @@ _Defined via the [`attributes`](https://developer.wordpress.org/block-editor/ref
25
25
  | `preload` | `string` | `"metadata"` | [Source](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `attribute`. [Selector](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `video`. [HTML attr](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#attribute-source): `preload` |
26
26
  | `blob` | `string` | — | [Role](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#role): `local` |
27
27
  | `src` | `string` | — | [Source](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `attribute`. [Selector](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `video`. [HTML attr](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#attribute-source): `src`. [Role](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#role): `content` |
28
+ | `width` | `number` | — | — |
29
+ | `height` | `number` | — | — |
28
30
  | `playsInline` | `boolean` | — | [Source](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `attribute`. [Selector](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `video`. [HTML attr](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#attribute-source): `playsinline` |
29
31
  | `tracks` | `array` | `[]` | [Role](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#role): `content` |
30
32
 
@@ -67,6 +67,12 @@
67
67
  "attribute": "src",
68
68
  "role": "content"
69
69
  },
70
+ "width": {
71
+ "type": "number"
72
+ },
73
+ "height": {
74
+ "type": "number"
75
+ },
70
76
  "playsInline": {
71
77
  "type": "boolean",
72
78
  "source": "attribute",
@@ -150,7 +150,6 @@ const VideoSettings = ( { setAttributes, attributes } ) => {
150
150
  } }
151
151
  >
152
152
  <SelectControl
153
- __next40pxDefaultSize
154
153
  label={ __( 'Preload' ) }
155
154
  value={ preload }
156
155
  onChange={ onChangePreload }
package/src/video/edit.js CHANGED
@@ -41,6 +41,8 @@ import TracksEditor from './tracks-editor';
41
41
  import Tracks from './tracks';
42
42
  import { Caption } from '../utils/caption';
43
43
  import PosterImage from '../utils/poster-image';
44
+ import { isGifVariation } from './variations';
45
+ import GifRestoreControl from './gif-restore-control';
44
46
 
45
47
  const ALLOWED_MEDIA_TYPES = [ 'video' ];
46
48
 
@@ -51,9 +53,20 @@ function VideoEdit( {
51
53
  setAttributes,
52
54
  insertBlocksAfter,
53
55
  onReplace,
56
+ clientId,
54
57
  } ) {
55
58
  const videoPlayer = useRef();
56
- const { id, controls, poster, src, tracks } = attributes;
59
+ const { id, controls, poster, src, tracks, width, height } = attributes;
60
+ const isGif = isGifVariation( attributes );
61
+ // Give the <video> an explicit (non-`auto`) aspect ratio derived from the
62
+ // stored dimensions. The width/height attributes alone only yield
63
+ // `aspect-ratio: auto W/H`, whose `auto` keyword defers to the element's
64
+ // natural ratio while the poster/metadata load - during which Chrome briefly
65
+ // computes a runaway height (tens of thousands of pixels) before settling.
66
+ // That spike is what reads as a duplicated image during the GIF-to-video
67
+ // swap. A non-`auto` ratio governs the box height throughout the load.
68
+ const aspectRatio =
69
+ width && height ? `${ width } / ${ height }` : undefined;
57
70
  const [ temporaryURL, setTemporaryURL ] = useState( attributes.blob );
58
71
  const dropdownMenuProps = useToolsPanelDropdownMenuProps();
59
72
  const blockEditingMode = useBlockEditingMode();
@@ -73,6 +86,17 @@ function VideoEdit( {
73
86
  }
74
87
  }, [ poster ] );
75
88
 
89
+ // The GIF variation plays like an animated GIF in the editor (the playback
90
+ // attributes are applied to the preview <video> below). Regular videos do
91
+ // not autoplay in the editor, so only nudge GIFs into playing after a
92
+ // source change in case the muted autoplay did not start on its own.
93
+ useEffect( () => {
94
+ if ( isGif ) {
95
+ // Browsers allow muted videos to be played programmatically.
96
+ videoPlayer.current?.play().catch( () => {} );
97
+ }
98
+ }, [ isGif, src, poster ] );
99
+
76
100
  // TODO: Whether the video was obtained from the media library or was provided by URL, obtain the `videoWidth` and `videoHeight` of the video once its metadata has loaded and persist in the block attributes.
77
101
  function onSelectVideo( media ) {
78
102
  if ( ! media || ! media.url ) {
@@ -201,6 +225,12 @@ function VideoEdit( {
201
225
  variant="toolbar"
202
226
  />
203
227
  </BlockControls>
228
+ { isGif && (
229
+ <GifRestoreControl
230
+ attributes={ attributes }
231
+ clientId={ clientId }
232
+ />
233
+ ) }
204
234
  </>
205
235
  ) }
206
236
  <InspectorControls>
@@ -240,6 +270,13 @@ function VideoEdit( {
240
270
  poster={ poster }
241
271
  src={ src || temporaryURL }
242
272
  ref={ videoPlayer }
273
+ autoPlay={ isGif }
274
+ loop={ isGif }
275
+ muted={ isGif }
276
+ playsInline={ isGif }
277
+ width={ width }
278
+ height={ height }
279
+ style={ aspectRatio ? { aspectRatio } : undefined }
243
280
  >
244
281
  <Tracks tracks={ tracks } />
245
282
  </video>
@@ -0,0 +1,92 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { ToolbarButton, ToolbarGroup } from '@wordpress/components';
5
+ import {
6
+ BlockControls,
7
+ store as blockEditorStore,
8
+ } from '@wordpress/block-editor';
9
+ import { store as coreStore } from '@wordpress/core-data';
10
+ import { createBlock } from '@wordpress/blocks';
11
+ import { useDispatch, useSelect } from '@wordpress/data';
12
+ import { image as imageIcon } from '@wordpress/icons';
13
+ import { __ } from '@wordpress/i18n';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import { getCarriedGifConversionAttributes } from '../utils/gif-conversion-attributes';
19
+
20
+ /**
21
+ * Toolbar control that turns a converted GIF video block back into the original
22
+ * animated GIF Image block.
23
+ *
24
+ * An animated GIF uploaded through the editor is converted to a muted, looping
25
+ * video and presented as the Video block's "GIF" variation, while the original
26
+ * GIF stays the underlying image attachment. This control switches the block
27
+ * back to a `core/image` pointing at that GIF and opts the image out of being
28
+ * re-converted.
29
+ *
30
+ * It only renders when the block's media is an image attachment (i.e. an
31
+ * editor-converted GIF), so it never appears on regular videos that happen to
32
+ * be muted and looping.
33
+ *
34
+ * @param {Object} props Component props.
35
+ * @param {Object} props.attributes Video block attributes.
36
+ * @param {string} props.clientId Block client ID.
37
+ *
38
+ * @return {Component|null} The control, or null when restoring does not apply.
39
+ */
40
+ export default function GifRestoreControl( { attributes, clientId } ) {
41
+ const { id, caption } = attributes;
42
+ const { replaceBlocks } = useDispatch( blockEditorStore );
43
+
44
+ // The original GIF is the underlying image attachment. Only offer the
45
+ // restore when the media resolves to an image (an editor-converted GIF),
46
+ // not when a regular video has simply been set to loop/autoplay/mute.
47
+ const gif = useSelect(
48
+ ( select ) => {
49
+ if ( ! id ) {
50
+ return null;
51
+ }
52
+ const record = select( coreStore ).getEntityRecord(
53
+ 'postType',
54
+ 'attachment',
55
+ id,
56
+ { context: 'view' }
57
+ );
58
+ if ( ! record?.mime_type?.startsWith( 'image/' ) ) {
59
+ return null;
60
+ }
61
+ return record;
62
+ },
63
+ [ id ]
64
+ );
65
+
66
+ if ( ! gif?.source_url ) {
67
+ return null;
68
+ }
69
+
70
+ function restoreToImage() {
71
+ replaceBlocks(
72
+ clientId,
73
+ createBlock( 'core/image', {
74
+ ...getCarriedGifConversionAttributes( attributes ),
75
+ id,
76
+ url: gif.source_url,
77
+ alt: gif.alt_text || '',
78
+ caption,
79
+ } )
80
+ );
81
+ }
82
+
83
+ return (
84
+ <BlockControls group="other">
85
+ <ToolbarGroup>
86
+ <ToolbarButton icon={ imageIcon } onClick={ restoreToImage }>
87
+ { __( 'Display as GIF' ) }
88
+ </ToolbarButton>
89
+ </ToolbarGroup>
90
+ </BlockControls>
91
+ );
92
+ }
@@ -14,6 +14,7 @@ import edit from './edit';
14
14
  import metadata from './block.json';
15
15
  import save from './save';
16
16
  import transforms from './transforms';
17
+ import variations from './variations';
17
18
  import { unlock } from '../lock-unlock';
18
19
 
19
20
  const { fieldsKey, formKey } = unlock( blocksPrivateApis );
@@ -32,6 +33,7 @@ export const settings = {
32
33
  },
33
34
  },
34
35
  transforms,
36
+ variations,
35
37
  deprecated,
36
38
  edit,
37
39
  save,