@wordpress/block-library 7.17.0 → 7.19.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 (374) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/audio/edit.js +44 -4
  3. package/build/audio/edit.js.map +1 -1
  4. package/build/button/deprecated.js +16 -2
  5. package/build/button/deprecated.js.map +1 -1
  6. package/build/button/edit.js +14 -8
  7. package/build/button/edit.js.map +1 -1
  8. package/build/button/index.js +4 -1
  9. package/build/button/index.js.map +1 -1
  10. package/build/button/save.js +2 -0
  11. package/build/button/save.js.map +1 -1
  12. package/build/buttons/edit.native.js +1 -1
  13. package/build/buttons/edit.native.js.map +1 -1
  14. package/build/columns/transforms.js +5 -0
  15. package/build/columns/transforms.js.map +1 -1
  16. package/build/comment-template/index.js +6 -2
  17. package/build/comment-template/index.js.map +1 -1
  18. package/build/cover/edit/index.js +3 -1
  19. package/build/cover/edit/index.js.map +1 -1
  20. package/build/cover/edit/inspector-controls.js +3 -7
  21. package/build/cover/edit/inspector-controls.js.map +1 -1
  22. package/build/embed/deprecated.js +43 -4
  23. package/build/embed/deprecated.js.map +1 -1
  24. package/build/file/deprecated.js +108 -4
  25. package/build/file/deprecated.js.map +1 -1
  26. package/build/file/transforms.js +3 -9
  27. package/build/file/transforms.js.map +1 -1
  28. package/build/gallery/deprecated.js +148 -23
  29. package/build/gallery/deprecated.js.map +1 -1
  30. package/build/gallery/gallery.js +3 -2
  31. package/build/gallery/gallery.js.map +1 -1
  32. package/build/gallery/use-image-sizes.js +2 -1
  33. package/build/gallery/use-image-sizes.js.map +1 -1
  34. package/build/gallery/v1/edit.js +6 -3
  35. package/build/gallery/v1/edit.js.map +1 -1
  36. package/build/group/edit.js +105 -48
  37. package/build/group/edit.js.map +1 -1
  38. package/build/group/index.js +3 -0
  39. package/build/group/index.js.map +1 -1
  40. package/build/group/placeholder.js +168 -0
  41. package/build/group/placeholder.js.map +1 -0
  42. package/build/group/variations.js +3 -3
  43. package/build/group/variations.js.map +1 -1
  44. package/build/image/edit.native.js +1 -1
  45. package/build/image/edit.native.js.map +1 -1
  46. package/build/image/image.js +6 -9
  47. package/build/image/image.js.map +1 -1
  48. package/build/latest-comments/edit.js +2 -1
  49. package/build/latest-comments/edit.js.map +1 -1
  50. package/build/latest-comments/index.js +5 -1
  51. package/build/latest-comments/index.js.map +1 -1
  52. package/build/latest-posts/deprecated.js +13 -0
  53. package/build/latest-posts/deprecated.js.map +1 -1
  54. package/build/latest-posts/edit.js +1 -1
  55. package/build/latest-posts/edit.js.map +1 -1
  56. package/build/latest-posts/index.js +13 -0
  57. package/build/latest-posts/index.js.map +1 -1
  58. package/build/list/utils.js +4 -8
  59. package/build/list/utils.js.map +1 -1
  60. package/build/list-item/edit.js +2 -1
  61. package/build/list-item/edit.js.map +1 -1
  62. package/build/list-item/hooks/use-outdent-list-item.js +5 -7
  63. package/build/list-item/hooks/use-outdent-list-item.js.map +1 -1
  64. package/build/navigation/edit/index.js +94 -103
  65. package/build/navigation/edit/index.js.map +1 -1
  66. package/build/navigation/edit/manage-menus-button.js +36 -0
  67. package/build/navigation/edit/manage-menus-button.js.map +1 -0
  68. package/build/navigation/edit/navigation-menu-selector.js +12 -5
  69. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  70. package/build/navigation/edit/responsive-wrapper.js +2 -6
  71. package/build/navigation/edit/responsive-wrapper.js.map +1 -1
  72. package/build/navigation/edit/unsaved-inner-blocks.js +5 -17
  73. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  74. package/build/navigation-link/edit.js +14 -3
  75. package/build/navigation-link/edit.js.map +1 -1
  76. package/build/navigation-submenu/edit.js +4 -4
  77. package/build/navigation-submenu/edit.js.map +1 -1
  78. package/build/page-list/edit.js +29 -10
  79. package/build/page-list/edit.js.map +1 -1
  80. package/build/post-author/edit.js +35 -20
  81. package/build/post-author/edit.js.map +1 -1
  82. package/build/post-comments-count/index.js +4 -0
  83. package/build/post-comments-count/index.js.map +1 -1
  84. package/build/post-comments-form/index.js +4 -0
  85. package/build/post-comments-form/index.js.map +1 -1
  86. package/build/post-comments-link/index.js +4 -0
  87. package/build/post-comments-link/index.js.map +1 -1
  88. package/build/post-content/edit.js +14 -6
  89. package/build/post-content/edit.js.map +1 -1
  90. package/build/post-content/index.js +3 -0
  91. package/build/post-content/index.js.map +1 -1
  92. package/build/pullquote/deprecated.js +6 -6
  93. package/build/pullquote/deprecated.js.map +1 -1
  94. package/build/search/edit.js +1 -3
  95. package/build/search/edit.js.map +1 -1
  96. package/build/site-logo/edit.js +2 -2
  97. package/build/site-logo/edit.js.map +1 -1
  98. package/build/site-tagline/edit.js +21 -9
  99. package/build/site-tagline/edit.js.map +1 -1
  100. package/build/site-title/edit/index.js +20 -8
  101. package/build/site-title/edit/index.js.map +1 -1
  102. package/build/social-link/edit.js +11 -2
  103. package/build/social-link/edit.js.map +1 -1
  104. package/build/social-link/index.js +3 -0
  105. package/build/social-link/index.js.map +1 -1
  106. package/build/spacer/controls.js +3 -7
  107. package/build/spacer/controls.js.map +1 -1
  108. package/build/table/deprecated.js +282 -27
  109. package/build/table/deprecated.js.map +1 -1
  110. package/build/table/state.js +1 -1
  111. package/build/table/state.js.map +1 -1
  112. package/build/template-part/variations.js +5 -0
  113. package/build/template-part/variations.js.map +1 -1
  114. package/build/utils/clean-empty-object.js +5 -4
  115. package/build/utils/clean-empty-object.js.map +1 -1
  116. package/build/video/deprecated.js +159 -0
  117. package/build/video/deprecated.js.map +1 -0
  118. package/build/video/edit.js +41 -5
  119. package/build/video/edit.js.map +1 -1
  120. package/build/video/index.js +3 -0
  121. package/build/video/index.js.map +1 -1
  122. package/build/video/tracks-editor.js +3 -28
  123. package/build/video/tracks-editor.js.map +1 -1
  124. package/build-module/audio/edit.js +46 -7
  125. package/build-module/audio/edit.js.map +1 -1
  126. package/build-module/button/deprecated.js +16 -2
  127. package/build-module/button/deprecated.js.map +1 -1
  128. package/build-module/button/edit.js +16 -10
  129. package/build-module/button/edit.js.map +1 -1
  130. package/build-module/button/index.js +4 -1
  131. package/build-module/button/index.js.map +1 -1
  132. package/build-module/button/save.js +2 -0
  133. package/build-module/button/save.js.map +1 -1
  134. package/build-module/buttons/edit.native.js +1 -1
  135. package/build-module/buttons/edit.native.js.map +1 -1
  136. package/build-module/columns/transforms.js +5 -0
  137. package/build-module/columns/transforms.js.map +1 -1
  138. package/build-module/comment-template/index.js +6 -2
  139. package/build-module/comment-template/index.js.map +1 -1
  140. package/build-module/cover/edit/index.js +3 -1
  141. package/build-module/cover/edit/index.js.map +1 -1
  142. package/build-module/cover/edit/inspector-controls.js +4 -8
  143. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  144. package/build-module/embed/deprecated.js +44 -5
  145. package/build-module/embed/deprecated.js.map +1 -1
  146. package/build-module/file/deprecated.js +108 -4
  147. package/build-module/file/deprecated.js.map +1 -1
  148. package/build-module/file/transforms.js +3 -8
  149. package/build-module/file/transforms.js.map +1 -1
  150. package/build-module/gallery/deprecated.js +147 -25
  151. package/build-module/gallery/deprecated.js.map +1 -1
  152. package/build-module/gallery/gallery.js +3 -2
  153. package/build-module/gallery/gallery.js.map +1 -1
  154. package/build-module/gallery/use-image-sizes.js +3 -2
  155. package/build-module/gallery/use-image-sizes.js.map +1 -1
  156. package/build-module/gallery/v1/edit.js +7 -4
  157. package/build-module/gallery/v1/edit.js.map +1 -1
  158. package/build-module/group/edit.js +101 -48
  159. package/build-module/group/edit.js.map +1 -1
  160. package/build-module/group/index.js +3 -0
  161. package/build-module/group/index.js.map +1 -1
  162. package/build-module/group/placeholder.js +154 -0
  163. package/build-module/group/placeholder.js.map +1 -0
  164. package/build-module/group/variations.js +3 -3
  165. package/build-module/group/variations.js.map +1 -1
  166. package/build-module/image/edit.native.js +1 -1
  167. package/build-module/image/edit.native.js.map +1 -1
  168. package/build-module/image/image.js +8 -11
  169. package/build-module/image/image.js.map +1 -1
  170. package/build-module/latest-comments/edit.js +2 -1
  171. package/build-module/latest-comments/edit.js.map +1 -1
  172. package/build-module/latest-comments/index.js +5 -1
  173. package/build-module/latest-comments/index.js.map +1 -1
  174. package/build-module/latest-posts/deprecated.js +13 -0
  175. package/build-module/latest-posts/deprecated.js.map +1 -1
  176. package/build-module/latest-posts/edit.js +2 -2
  177. package/build-module/latest-posts/edit.js.map +1 -1
  178. package/build-module/latest-posts/index.js +13 -0
  179. package/build-module/latest-posts/index.js.map +1 -1
  180. package/build-module/list/utils.js +5 -9
  181. package/build-module/list/utils.js.map +1 -1
  182. package/build-module/list-item/edit.js +2 -1
  183. package/build-module/list-item/edit.js.map +1 -1
  184. package/build-module/list-item/hooks/use-outdent-list-item.js +5 -6
  185. package/build-module/list-item/hooks/use-outdent-list-item.js.map +1 -1
  186. package/build-module/navigation/edit/index.js +96 -105
  187. package/build-module/navigation/edit/index.js.map +1 -1
  188. package/build-module/navigation/edit/manage-menus-button.js +26 -0
  189. package/build-module/navigation/edit/manage-menus-button.js.map +1 -0
  190. package/build-module/navigation/edit/navigation-menu-selector.js +13 -6
  191. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  192. package/build-module/navigation/edit/responsive-wrapper.js +2 -6
  193. package/build-module/navigation/edit/responsive-wrapper.js.map +1 -1
  194. package/build-module/navigation/edit/unsaved-inner-blocks.js +7 -18
  195. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  196. package/build-module/navigation-link/edit.js +14 -4
  197. package/build-module/navigation-link/edit.js.map +1 -1
  198. package/build-module/navigation-submenu/edit.js +4 -4
  199. package/build-module/navigation-submenu/edit.js.map +1 -1
  200. package/build-module/page-list/edit.js +29 -10
  201. package/build-module/page-list/edit.js.map +1 -1
  202. package/build-module/post-author/edit.js +35 -21
  203. package/build-module/post-author/edit.js.map +1 -1
  204. package/build-module/post-comments-count/index.js +4 -0
  205. package/build-module/post-comments-count/index.js.map +1 -1
  206. package/build-module/post-comments-form/index.js +4 -0
  207. package/build-module/post-comments-form/index.js.map +1 -1
  208. package/build-module/post-comments-link/index.js +4 -0
  209. package/build-module/post-comments-link/index.js.map +1 -1
  210. package/build-module/post-content/edit.js +14 -6
  211. package/build-module/post-content/edit.js.map +1 -1
  212. package/build-module/post-content/index.js +3 -0
  213. package/build-module/post-content/index.js.map +1 -1
  214. package/build-module/pullquote/deprecated.js +7 -7
  215. package/build-module/pullquote/deprecated.js.map +1 -1
  216. package/build-module/search/edit.js +1 -3
  217. package/build-module/search/edit.js.map +1 -1
  218. package/build-module/site-logo/edit.js +3 -3
  219. package/build-module/site-logo/edit.js.map +1 -1
  220. package/build-module/site-tagline/edit.js +23 -11
  221. package/build-module/site-tagline/edit.js.map +1 -1
  222. package/build-module/site-title/edit/index.js +22 -10
  223. package/build-module/site-title/edit/index.js.map +1 -1
  224. package/build-module/social-link/edit.js +11 -2
  225. package/build-module/social-link/edit.js.map +1 -1
  226. package/build-module/social-link/index.js +3 -0
  227. package/build-module/social-link/index.js.map +1 -1
  228. package/build-module/spacer/controls.js +4 -8
  229. package/build-module/spacer/controls.js.map +1 -1
  230. package/build-module/table/deprecated.js +282 -27
  231. package/build-module/table/deprecated.js.map +1 -1
  232. package/build-module/table/state.js +1 -1
  233. package/build-module/table/state.js.map +1 -1
  234. package/build-module/template-part/variations.js +5 -0
  235. package/build-module/template-part/variations.js.map +1 -1
  236. package/build-module/utils/clean-empty-object.js +5 -5
  237. package/build-module/utils/clean-empty-object.js.map +1 -1
  238. package/build-module/video/deprecated.js +147 -0
  239. package/build-module/video/deprecated.js.map +1 -0
  240. package/build-module/video/edit.js +45 -9
  241. package/build-module/video/edit.js.map +1 -1
  242. package/build-module/video/index.js +2 -0
  243. package/build-module/video/index.js.map +1 -1
  244. package/build-module/video/tracks-editor.js +4 -29
  245. package/build-module/video/tracks-editor.js.map +1 -1
  246. package/build-style/button/style-rtl.css +1 -0
  247. package/build-style/button/style.css +1 -0
  248. package/build-style/comment-template/style-rtl.css +1 -0
  249. package/build-style/comment-template/style.css +1 -0
  250. package/build-style/editor-rtl.css +80 -5
  251. package/build-style/editor.css +80 -5
  252. package/build-style/group/editor-rtl.css +44 -0
  253. package/build-style/group/editor.css +44 -0
  254. package/build-style/latest-comments/style-rtl.css +1 -0
  255. package/build-style/latest-comments/style.css +1 -0
  256. package/build-style/latest-posts/style-rtl.css +3 -0
  257. package/build-style/latest-posts/style.css +3 -0
  258. package/build-style/navigation/editor-rtl.css +27 -4
  259. package/build-style/navigation/editor.css +27 -4
  260. package/build-style/navigation/style-rtl.css +13 -1
  261. package/build-style/navigation/style.css +13 -1
  262. package/build-style/navigation-link/editor-rtl.css +8 -1
  263. package/build-style/navigation-link/editor.css +8 -1
  264. package/build-style/post-comments-form/style-rtl.css +3 -0
  265. package/build-style/post-comments-form/style.css +3 -0
  266. package/build-style/query/editor-rtl.css +1 -1
  267. package/build-style/query/editor.css +1 -1
  268. package/build-style/query-pagination/style-rtl.css +1 -1
  269. package/build-style/query-pagination/style.css +1 -1
  270. package/build-style/style-rtl.css +28 -2
  271. package/build-style/style.css +28 -2
  272. package/build-style/table/editor-rtl.css +1 -0
  273. package/build-style/table/editor.css +1 -0
  274. package/build-style/table/style-rtl.css +5 -0
  275. package/build-style/table/style.css +5 -0
  276. package/build-style/table/theme-rtl.css +1 -3
  277. package/build-style/table/theme.css +1 -3
  278. package/build-style/theme-rtl.css +1 -3
  279. package/build-style/theme.css +1 -3
  280. package/package.json +29 -28
  281. package/src/audio/edit.js +79 -24
  282. package/src/avatar/index.php +1 -1
  283. package/src/block/test/edit.native.js +8 -8
  284. package/src/button/block.json +4 -1
  285. package/src/button/deprecated.js +18 -2
  286. package/src/button/edit.js +12 -10
  287. package/src/button/save.js +12 -2
  288. package/src/button/style.scss +2 -0
  289. package/src/buttons/edit.native.js +1 -1
  290. package/src/buttons/test/edit.native.js +19 -19
  291. package/src/columns/test/edit.native.js +32 -32
  292. package/src/columns/transforms.js +8 -0
  293. package/src/comment-template/block.json +6 -2
  294. package/src/comment-template/style.scss +2 -0
  295. package/src/cover/edit/index.js +3 -1
  296. package/src/cover/edit/inspector-controls.js +11 -13
  297. package/src/cover/test/edit.native.js +26 -26
  298. package/src/embed/deprecated.js +53 -26
  299. package/src/embed/test/index.native.js +43 -43
  300. package/src/file/deprecated.js +130 -2
  301. package/src/file/transforms.js +3 -8
  302. package/src/gallery/deprecated.js +129 -4
  303. package/src/gallery/gallery.js +2 -0
  304. package/src/gallery/index.php +19 -10
  305. package/src/gallery/test/index.native.js +11 -11
  306. package/src/gallery/use-image-sizes.js +3 -2
  307. package/src/gallery/v1/edit.js +21 -25
  308. package/src/group/block.json +3 -0
  309. package/src/group/edit.js +105 -46
  310. package/src/group/editor.scss +48 -0
  311. package/src/group/placeholder.js +187 -0
  312. package/src/group/test/edit.native.js +3 -3
  313. package/src/group/test/placeholder.js +78 -0
  314. package/src/group/variations.js +3 -3
  315. package/src/image/edit.native.js +1 -1
  316. package/src/image/image.js +22 -10
  317. package/src/image/test/edit.native.js +17 -17
  318. package/src/latest-comments/block.json +5 -1
  319. package/src/latest-comments/edit.js +1 -0
  320. package/src/latest-comments/style.scss +3 -0
  321. package/src/latest-posts/block.json +13 -0
  322. package/src/latest-posts/edit.js +2 -2
  323. package/src/latest-posts/style.scss +3 -0
  324. package/src/list/test/edit.native.js +36 -36
  325. package/src/list/utils.js +3 -11
  326. package/src/list-item/edit.js +1 -0
  327. package/src/list-item/hooks/use-outdent-list-item.js +3 -6
  328. package/src/missing/test/edit-integration.native.js +5 -5
  329. package/src/navigation/edit/index.js +186 -161
  330. package/src/navigation/edit/manage-menus-button.js +21 -0
  331. package/src/navigation/edit/navigation-menu-selector.js +20 -5
  332. package/src/navigation/edit/responsive-wrapper.js +2 -10
  333. package/src/navigation/edit/unsaved-inner-blocks.js +5 -22
  334. package/src/navigation/editor.scss +29 -4
  335. package/src/navigation/style.scss +19 -1
  336. package/src/navigation-link/edit.js +13 -4
  337. package/src/navigation-link/editor.scss +8 -0
  338. package/src/navigation-submenu/edit.js +7 -5
  339. package/src/page-list/edit.js +36 -22
  340. package/src/post-author/edit.js +44 -20
  341. package/src/post-comments-count/block.json +4 -0
  342. package/src/post-comments-form/block.json +4 -0
  343. package/src/post-comments-form/style.scss +3 -0
  344. package/src/post-comments-link/block.json +4 -0
  345. package/src/post-content/block.json +3 -0
  346. package/src/post-content/edit.js +8 -4
  347. package/src/pullquote/deprecated.js +7 -7
  348. package/src/query/editor.scss +1 -1
  349. package/src/query-pagination/style.scss +1 -1
  350. package/src/read-more/index.php +9 -2
  351. package/src/search/edit.js +1 -1
  352. package/src/shortcode/test/edit.native.js +5 -5
  353. package/src/site-logo/edit.js +3 -3
  354. package/src/site-tagline/edit.js +25 -18
  355. package/src/site-title/edit/index.js +26 -12
  356. package/src/social-link/block.json +3 -0
  357. package/src/social-link/edit.js +8 -1
  358. package/src/social-link/index.php +11 -7
  359. package/src/social-link/test/index.native.js +10 -10
  360. package/src/social-links/test/edit.native.js +4 -4
  361. package/src/spacer/controls.js +10 -12
  362. package/src/spacer/test/index.native.js +17 -17
  363. package/src/table/deprecated.js +587 -348
  364. package/src/table/editor.scss +1 -0
  365. package/src/table/state.js +1 -1
  366. package/src/table/style.scss +7 -0
  367. package/src/table/theme.scss +1 -3
  368. package/src/template-part/index.php +5 -0
  369. package/src/template-part/variations.js +4 -0
  370. package/src/utils/clean-empty-object.js +5 -6
  371. package/src/video/deprecated.js +57 -0
  372. package/src/video/edit.js +71 -23
  373. package/src/video/index.js +2 -0
  374. package/src/video/tracks-editor.js +12 -28
@@ -31,6 +31,7 @@
31
31
  td,
32
32
  th {
33
33
  border: $border-width solid;
34
+ padding: 0.5em;
34
35
  }
35
36
 
36
37
  td.is-selected,
@@ -281,7 +281,7 @@ export function deleteColumn( state, { columnIndex } ) {
281
281
  }
282
282
 
283
283
  /**
284
- * Toggles the existance of a section.
284
+ * Toggles the existence of a section.
285
285
  *
286
286
  * @param {Object} state Current table state.
287
287
  * @param {string} sectionName Name of the section to toggle.
@@ -11,6 +11,13 @@
11
11
  width: 100%;
12
12
  }
13
13
 
14
+ // Match default border style to default style in editor
15
+ td,
16
+ th {
17
+ border: $border-width solid;
18
+ padding: 0.5em;
19
+ }
20
+
14
21
  // Fixed layout toggle
15
22
  .has-fixed-layout {
16
23
  table-layout: fixed;
@@ -1,5 +1,5 @@
1
1
  .wp-block-table {
2
- margin: "0 0 1em 0";
2
+ margin: 0 0 1em 0;
3
3
 
4
4
  thead {
5
5
  border-bottom: 3px solid;
@@ -11,8 +11,6 @@
11
11
 
12
12
  td,
13
13
  th {
14
- padding: 0.5em;
15
- border: 1px solid;
16
14
  word-break: normal;
17
15
  }
18
16
 
@@ -193,6 +193,11 @@ function build_template_part_block_instance_variations() {
193
193
  if ( wp_installing() ) {
194
194
  return array();
195
195
  }
196
+
197
+ if ( ! current_theme_supports( 'block-templates' ) && ! current_theme_supports( 'block-template-parts' ) ) {
198
+ return array();
199
+ }
200
+
196
201
  $variations = array();
197
202
  $template_parts = get_block_templates(
198
203
  array(
@@ -40,6 +40,10 @@ export function enhanceTemplatePartVariations( settings, name ) {
40
40
  'wp_template_part',
41
41
  `${ theme }//${ slug }`
42
42
  );
43
+
44
+ if ( entity?.slug ) {
45
+ return entity.slug === variationAttributes.slug;
46
+ }
43
47
  return entity?.area === variationAttributes.area;
44
48
  };
45
49
 
@@ -1,9 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { isEmpty, mapValues, pickBy } from 'lodash';
5
-
6
- const identity = ( x ) => x;
4
+ import { isEmpty, mapValues } from 'lodash';
7
5
 
8
6
  /**
9
7
  * Removed empty nodes from nested objects.
@@ -19,9 +17,10 @@ const cleanEmptyObject = ( object ) => {
19
17
  ) {
20
18
  return object;
21
19
  }
22
- const cleanedNestedObjects = pickBy(
23
- mapValues( object, cleanEmptyObject ),
24
- identity
20
+ const cleanedNestedObjects = Object.fromEntries(
21
+ Object.entries( mapValues( object, cleanEmptyObject ) ).filter(
22
+ ( [ , value ] ) => Boolean( value )
23
+ )
25
24
  );
26
25
  return isEmpty( cleanedNestedObjects ) ? undefined : cleanedNestedObjects;
27
26
  };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { RichText, useBlockProps } from '@wordpress/block-editor';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import metadata from './block.json';
10
+ import Tracks from './tracks';
11
+
12
+ const { attributes: blockAttributes } = metadata;
13
+
14
+ // In #41140 support was added to global styles for caption elements which added a `wp-element-caption` classname
15
+ // to the video figcaption element.
16
+ const v1 = {
17
+ attributes: blockAttributes,
18
+ save( { attributes } ) {
19
+ const {
20
+ autoplay,
21
+ caption,
22
+ controls,
23
+ loop,
24
+ muted,
25
+ poster,
26
+ preload,
27
+ src,
28
+ playsInline,
29
+ tracks,
30
+ } = attributes;
31
+ return (
32
+ <figure { ...useBlockProps.save() }>
33
+ { src && (
34
+ <video
35
+ autoPlay={ autoplay }
36
+ controls={ controls }
37
+ loop={ loop }
38
+ muted={ muted }
39
+ poster={ poster }
40
+ preload={ preload !== 'metadata' ? preload : undefined }
41
+ src={ src }
42
+ playsInline={ playsInline }
43
+ >
44
+ <Tracks tracks={ tracks } />
45
+ </video>
46
+ ) }
47
+ { ! RichText.isEmpty( caption ) && (
48
+ <RichText.Content tagName="figcaption" value={ caption } />
49
+ ) }
50
+ </figure>
51
+ );
52
+ },
53
+ };
54
+
55
+ const deprecated = [ v1 ];
56
+
57
+ export default deprecated;
package/src/video/edit.js CHANGED
@@ -14,6 +14,7 @@ import {
14
14
  PanelBody,
15
15
  Spinner,
16
16
  Placeholder,
17
+ ToolbarButton,
17
18
  } from '@wordpress/components';
18
19
  import {
19
20
  BlockControls,
@@ -28,11 +29,11 @@ import {
28
29
  store as blockEditorStore,
29
30
  __experimentalGetElementClassName,
30
31
  } from '@wordpress/block-editor';
31
- import { useRef, useEffect } from '@wordpress/element';
32
+ import { useRef, useEffect, useState, useCallback } from '@wordpress/element';
32
33
  import { __, sprintf } from '@wordpress/i18n';
33
- import { useInstanceId } from '@wordpress/compose';
34
+ import { useInstanceId, usePrevious } from '@wordpress/compose';
34
35
  import { useDispatch, useSelect } from '@wordpress/data';
35
- import { video as icon } from '@wordpress/icons';
36
+ import { video as icon, caption as captionIcon } from '@wordpress/icons';
36
37
  import { createBlock, getDefaultBlockName } from '@wordpress/blocks';
37
38
  import { store as noticesStore } from '@wordpress/notices';
38
39
 
@@ -76,6 +77,8 @@ function VideoEdit( {
76
77
  const videoPlayer = useRef();
77
78
  const posterImageButton = useRef();
78
79
  const { id, caption, controls, poster, src, tracks } = attributes;
80
+ const prevCaption = usePrevious( caption );
81
+ const [ showCaption, setShowCaption ] = useState( !! caption );
79
82
  const isTemporaryVideo = ! id && isBlobURL( src );
80
83
  const mediaUpload = useSelect(
81
84
  ( select ) => select( blockEditorStore ).getSettings().mediaUpload,
@@ -103,6 +106,30 @@ function VideoEdit( {
103
106
  }
104
107
  }, [ poster ] );
105
108
 
109
+ // We need to show the caption when changes come from
110
+ // history navigation(undo/redo).
111
+ useEffect( () => {
112
+ if ( caption && ! prevCaption ) {
113
+ setShowCaption( true );
114
+ }
115
+ }, [ caption, prevCaption ] );
116
+
117
+ // Focus the caption when we click to add one.
118
+ const captionRef = useCallback(
119
+ ( node ) => {
120
+ if ( node && ! caption ) {
121
+ node.focus();
122
+ }
123
+ },
124
+ [ caption ]
125
+ );
126
+
127
+ useEffect( () => {
128
+ if ( ! isSelected && ! caption ) {
129
+ setShowCaption( false );
130
+ }
131
+ }, [ isSelected, caption ] );
132
+
106
133
  function onSelectVideo( media ) {
107
134
  if ( ! media || ! media.url ) {
108
135
  // In this case there was an error
@@ -112,6 +139,7 @@ function VideoEdit( {
112
139
  src: undefined,
113
140
  id: undefined,
114
141
  poster: undefined,
142
+ caption: undefined,
115
143
  } );
116
144
  return;
117
145
  }
@@ -123,6 +151,7 @@ function VideoEdit( {
123
151
  id: media.id,
124
152
  poster:
125
153
  media.image?.src !== media.icon ? media.image?.src : undefined,
154
+ caption: media.caption,
126
155
  } );
127
156
  }
128
157
 
@@ -186,6 +215,23 @@ function VideoEdit( {
186
215
  return (
187
216
  <>
188
217
  <BlockControls group="block">
218
+ <ToolbarButton
219
+ onClick={ () => {
220
+ setShowCaption( ! showCaption );
221
+ if ( showCaption && caption ) {
222
+ setAttributes( { caption: undefined } );
223
+ }
224
+ } }
225
+ icon={ captionIcon }
226
+ isPressed={ showCaption }
227
+ label={
228
+ showCaption
229
+ ? __( 'Remove caption' )
230
+ : __( 'Add caption' )
231
+ }
232
+ />
233
+ </BlockControls>
234
+ <BlockControls>
189
235
  <TracksEditor
190
236
  tracks={ tracks }
191
237
  onChange={ ( newTracks ) => {
@@ -278,26 +324,28 @@ function VideoEdit( {
278
324
  </video>
279
325
  </Disabled>
280
326
  { isTemporaryVideo && <Spinner /> }
281
- { ( ! RichText.isEmpty( caption ) || isSelected ) && (
282
- <RichText
283
- tagName="figcaption"
284
- className={ __experimentalGetElementClassName(
285
- 'caption'
286
- ) }
287
- aria-label={ __( 'Video caption text' ) }
288
- placeholder={ __( 'Add caption' ) }
289
- value={ caption }
290
- onChange={ ( value ) =>
291
- setAttributes( { caption: value } )
292
- }
293
- inlineToolbar
294
- __unstableOnSplitAtEnd={ () =>
295
- insertBlocksAfter(
296
- createBlock( getDefaultBlockName() )
297
- )
298
- }
299
- />
300
- ) }
327
+ { showCaption &&
328
+ ( ! RichText.isEmpty( caption ) || isSelected ) && (
329
+ <RichText
330
+ tagName="figcaption"
331
+ className={ __experimentalGetElementClassName(
332
+ 'caption'
333
+ ) }
334
+ aria-label={ __( 'Video caption text' ) }
335
+ ref={ captionRef }
336
+ placeholder={ __( 'Add caption' ) }
337
+ value={ caption }
338
+ onChange={ ( value ) =>
339
+ setAttributes( { caption: value } )
340
+ }
341
+ inlineToolbar
342
+ __unstableOnSplitAtEnd={ () =>
343
+ insertBlocksAfter(
344
+ createBlock( getDefaultBlockName() )
345
+ )
346
+ }
347
+ />
348
+ ) }
301
349
  </figure>
302
350
  </>
303
351
  );
@@ -8,6 +8,7 @@ import { video as icon } from '@wordpress/icons';
8
8
  * Internal dependencies
9
9
  */
10
10
  import initBlock from '../utils/init-block';
11
+ import deprecated from './deprecated';
11
12
  import edit from './edit';
12
13
  import metadata from './block.json';
13
14
  import save from './save';
@@ -27,6 +28,7 @@ export const settings = {
27
28
  },
28
29
  },
29
30
  transforms,
31
+ deprecated,
30
32
  edit,
31
33
  save,
32
34
  };
@@ -7,11 +7,9 @@ import {
7
7
  MenuItem,
8
8
  FormFileUpload,
9
9
  MenuGroup,
10
+ ToolbarGroup,
10
11
  ToolbarButton,
11
12
  Dropdown,
12
- SVG,
13
- Rect,
14
- Path,
15
13
  Button,
16
14
  TextControl,
17
15
  SelectControl,
@@ -38,23 +36,6 @@ const KIND_OPTIONS = [
38
36
  { label: __( 'Metadata' ), value: 'metadata' },
39
37
  ];
40
38
 
41
- const captionIcon = (
42
- <SVG width="18" height="14" viewBox="0 0 18 14" role="img" fill="none">
43
- <Rect
44
- x="0.75"
45
- y="0.75"
46
- width="16.5"
47
- height="12.5"
48
- rx="1.25"
49
- stroke="black"
50
- strokeWidth="1.5"
51
- fill="none"
52
- />
53
- <Path d="M3 7H15" stroke="black" strokeWidth="1.5" />
54
- <Path d="M3 10L15 10" stroke="black" strokeWidth="1.5" />
55
- </SVG>
56
- );
57
-
58
39
  function TrackList( { tracks, onEditPress } ) {
59
40
  let content;
60
41
  if ( tracks.length === 0 ) {
@@ -200,14 +181,17 @@ export default function TracksEditor( { tracks = [], onChange } ) {
200
181
  <Dropdown
201
182
  contentClassName="block-library-video-tracks-editor"
202
183
  renderToggle={ ( { isOpen, onToggle } ) => (
203
- <ToolbarButton
204
- label={ __( 'Text tracks' ) }
205
- showTooltip
206
- aria-expanded={ isOpen }
207
- aria-haspopup="true"
208
- onClick={ onToggle }
209
- icon={ captionIcon }
210
- />
184
+ <ToolbarGroup>
185
+ <ToolbarButton
186
+ label={ __( 'Text tracks' ) }
187
+ showTooltip
188
+ aria-expanded={ isOpen }
189
+ aria-haspopup="true"
190
+ onClick={ onToggle }
191
+ >
192
+ { __( 'Text tracks' ) }
193
+ </ToolbarButton>
194
+ </ToolbarGroup>
211
195
  ) }
212
196
  renderContent={ () => {
213
197
  if ( trackBeingEdited !== null ) {