@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
@@ -28,10 +28,10 @@ afterAll( () => {
28
28
 
29
29
  describe( 'Shortcode block', () => {
30
30
  it( 'inserts block', async () => {
31
- const { getByA11yLabel, getByTestId, getByText } =
31
+ const { getByLabelText, getByTestId, getByText } =
32
32
  await initializeEditor();
33
33
 
34
- fireEvent.press( getByA11yLabel( 'Add block' ) );
34
+ fireEvent.press( getByLabelText( 'Add block' ) );
35
35
 
36
36
  const blockList = getByTestId( 'InserterUI-Blocks' );
37
37
  // onScroll event used to force the FlatList to render all items
@@ -45,17 +45,17 @@ describe( 'Shortcode block', () => {
45
45
 
46
46
  fireEvent.press( await waitFor( () => getByText( 'Shortcode' ) ) );
47
47
 
48
- expect( getByA11yLabel( /Shortcode Block\. Row 1/ ) ).toBeVisible();
48
+ expect( getByLabelText( /Shortcode Block\. Row 1/ ) ).toBeVisible();
49
49
  expect( getEditorHtml() ).toMatchSnapshot();
50
50
  } );
51
51
 
52
52
  it( 'edits content', async () => {
53
- const { getByA11yLabel, getByPlaceholderText } = await initializeEditor(
53
+ const { getByLabelText, getByPlaceholderText } = await initializeEditor(
54
54
  {
55
55
  initialHtml: '<!-- wp:shortcode /-->',
56
56
  }
57
57
  );
58
- const shortcodeBlock = getByA11yLabel( /Shortcode Block\. Row 1/ );
58
+ const shortcodeBlock = getByLabelText( /Shortcode Block\. Row 1/ );
59
59
  fireEvent.press( shortcodeBlock );
60
60
 
61
61
  const textField = getByPlaceholderText( 'Add a shortcode…' );
@@ -2,7 +2,7 @@
2
2
  * External dependencies
3
3
  */
4
4
  import classnames from 'classnames';
5
- import { includes, pick } from 'lodash';
5
+ import { pick } from 'lodash';
6
6
 
7
7
  /**
8
8
  * WordPress dependencies
@@ -71,7 +71,7 @@ const SiteLogo = ( {
71
71
  } ) => {
72
72
  const clientWidth = useClientWidth( containerRef, [ align ] );
73
73
  const isLargeViewport = useViewportMatch( 'medium' );
74
- const isWideAligned = includes( [ 'wide', 'full' ], align );
74
+ const isWideAligned = [ 'wide', 'full' ].includes( align );
75
75
  const isResizable = ! isWideAligned && isLargeViewport;
76
76
  const [ { naturalWidth, naturalHeight }, setNaturalSize ] = useState( {} );
77
77
  const [ isEditingImage, setIsEditingImage ] = useState( false );
@@ -394,7 +394,7 @@ export default function LogoEdit( {
394
394
  return {
395
395
  siteLogoId: _siteLogoId,
396
396
  canUserEdit: _canUserEdit,
397
- url: siteData?.url,
397
+ url: siteData?.home,
398
398
  mediaItemData: mediaItem,
399
399
  isRequestingMediaItem: _isRequestingMediaItem,
400
400
  siteIconId: _siteIconId,
@@ -6,8 +6,8 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useSelect } from '@wordpress/data';
10
- import { useEntityProp, store as coreStore } from '@wordpress/core-data';
9
+ import { useDispatch, useSelect } from '@wordpress/data';
10
+ import { store as coreStore } from '@wordpress/core-data';
11
11
  import {
12
12
  AlignmentControl,
13
13
  useBlockProps,
@@ -23,34 +23,43 @@ export default function SiteTaglineEdit( {
23
23
  insertBlocksAfter,
24
24
  } ) {
25
25
  const { textAlign } = attributes;
26
- const [ siteTagline, setSiteTagline ] = useEntityProp(
27
- 'root',
28
- 'site',
29
- 'description'
30
- );
31
- const { canUserEdit, readOnlySiteTagLine } = useSelect( ( select ) => {
32
- const { canUser, getEntityRecord } = select( coreStore );
33
- const siteData = getEntityRecord( 'root', '__unstableBase' );
26
+ const { canUserEdit, tagline } = useSelect( ( select ) => {
27
+ const { canUser, getEntityRecord, getEditedEntityRecord } =
28
+ select( coreStore );
29
+ const canEdit = canUser( 'update', 'settings' );
30
+ const settings = canEdit ? getEditedEntityRecord( 'root', 'site' ) : {};
31
+ const readOnlySettings = getEntityRecord( 'root', '__unstableBase' );
32
+
34
33
  return {
35
34
  canUserEdit: canUser( 'update', 'settings' ),
36
- readOnlySiteTagLine: siteData?.description,
35
+ tagline: canEdit
36
+ ? settings?.description
37
+ : readOnlySettings?.description,
37
38
  };
38
39
  }, [] );
40
+
41
+ const { editEntityRecord } = useDispatch( coreStore );
42
+
43
+ function setTagline( newTagline ) {
44
+ editEntityRecord( 'root', 'site', undefined, {
45
+ description: newTagline,
46
+ } );
47
+ }
48
+
39
49
  const blockProps = useBlockProps( {
40
50
  className: classnames( {
41
51
  [ `has-text-align-${ textAlign }` ]: textAlign,
42
- 'wp-block-site-tagline__placeholder':
43
- ! canUserEdit && ! readOnlySiteTagLine,
52
+ 'wp-block-site-tagline__placeholder': ! canUserEdit && ! tagline,
44
53
  } ),
45
54
  } );
46
55
  const siteTaglineContent = canUserEdit ? (
47
56
  <RichText
48
57
  allowedFormats={ [] }
49
- onChange={ setSiteTagline }
58
+ onChange={ setTagline }
50
59
  aria-label={ __( 'Site tagline text' ) }
51
60
  placeholder={ __( 'Write site tagline…' ) }
52
61
  tagName="p"
53
- value={ siteTagline }
62
+ value={ tagline }
54
63
  disableLineBreaks
55
64
  __unstableOnSplitAtEnd={ () =>
56
65
  insertBlocksAfter( createBlock( getDefaultBlockName() ) )
@@ -58,9 +67,7 @@ export default function SiteTaglineEdit( {
58
67
  { ...blockProps }
59
68
  />
60
69
  ) : (
61
- <p { ...blockProps }>
62
- { readOnlySiteTagLine || __( 'Site Tagline placeholder' ) }
63
- </p>
70
+ <p { ...blockProps }>{ tagline || __( 'Site Tagline placeholder' ) }</p>
64
71
  );
65
72
  return (
66
73
  <>
@@ -6,8 +6,8 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useSelect } from '@wordpress/data';
10
- import { useEntityProp, store as coreStore } from '@wordpress/core-data';
9
+ import { useDispatch, useSelect } from '@wordpress/data';
10
+ import { store as coreStore } from '@wordpress/core-data';
11
11
  import { __ } from '@wordpress/i18n';
12
12
  import {
13
13
  RichText,
@@ -31,21 +31,31 @@ export default function SiteTitleEdit( {
31
31
  insertBlocksAfter,
32
32
  } ) {
33
33
  const { level, textAlign, isLink, linkTarget } = attributes;
34
- const [ title, setTitle ] = useEntityProp( 'root', 'site', 'title' );
35
- const { canUserEdit, readOnlyTitle } = useSelect( ( select ) => {
36
- const { canUser, getEntityRecord } = select( coreStore );
37
- const siteData = getEntityRecord( 'root', '__unstableBase' );
34
+ const { canUserEdit, title } = useSelect( ( select ) => {
35
+ const { canUser, getEntityRecord, getEditedEntityRecord } =
36
+ select( coreStore );
37
+ const canEdit = canUser( 'update', 'settings' );
38
+ const settings = canEdit ? getEditedEntityRecord( 'root', 'site' ) : {};
39
+ const readOnlySettings = getEntityRecord( 'root', '__unstableBase' );
40
+
38
41
  return {
39
- canUserEdit: canUser( 'update', 'settings' ),
40
- readOnlyTitle: decodeEntities( siteData?.name ),
42
+ canUserEdit: canEdit,
43
+ title: canEdit ? settings?.title : readOnlySettings?.name,
41
44
  };
42
45
  }, [] );
46
+ const { editEntityRecord } = useDispatch( coreStore );
47
+
48
+ function setTitle( newTitle ) {
49
+ editEntityRecord( 'root', 'site', undefined, {
50
+ title: newTitle,
51
+ } );
52
+ }
53
+
43
54
  const TagName = level === 0 ? 'p' : `h${ level }`;
44
55
  const blockProps = useBlockProps( {
45
56
  className: classnames( {
46
57
  [ `has-text-align-${ textAlign }` ]: textAlign,
47
- 'wp-block-site-title__placeholder':
48
- ! canUserEdit && ! readOnlyTitle,
58
+ 'wp-block-site-title__placeholder': ! canUserEdit && ! title,
49
59
  } ),
50
60
  } );
51
61
  const siteTitleContent = canUserEdit ? (
@@ -71,10 +81,14 @@ export default function SiteTitleEdit( {
71
81
  href="#site-title-pseudo-link"
72
82
  onClick={ ( event ) => event.preventDefault() }
73
83
  >
74
- { readOnlyTitle || __( 'Site Title placeholder' ) }
84
+ { decodeEntities( title ) ||
85
+ __( 'Site Title placeholder' ) }
75
86
  </a>
76
87
  ) : (
77
- <span>{ title || readOnlyTitle }</span>
88
+ <span>
89
+ { decodeEntities( title ) ||
90
+ __( 'Site Title placeholder' ) }
91
+ </span>
78
92
  ) }
79
93
  </TagName>
80
94
  );
@@ -16,6 +16,9 @@
16
16
  },
17
17
  "label": {
18
18
  "type": "string"
19
+ },
20
+ "rel": {
21
+ "type": "string"
19
22
  }
20
23
  },
21
24
  "usesContext": [
@@ -66,7 +66,7 @@ const SocialLinkEdit = ( {
66
66
  isSelected,
67
67
  setAttributes,
68
68
  } ) => {
69
- const { url, service, label } = attributes;
69
+ const { url, service, label, rel } = attributes;
70
70
  const { showLabels, iconColorValue, iconBackgroundColorValue } = context;
71
71
  const [ showURLPopover, setPopover ] = useState( false );
72
72
  const classes = classNames( 'wp-social-link', 'wp-social-link-' + service, {
@@ -113,6 +113,13 @@ const SocialLinkEdit = ( {
113
113
  </PanelRow>
114
114
  </PanelBody>
115
115
  </InspectorControls>
116
+ <InspectorControls __experimentalGroup="advanced">
117
+ <TextControl
118
+ label={ __( 'Link rel' ) }
119
+ value={ rel || '' }
120
+ onChange={ ( value ) => setAttributes( { rel: value } ) }
121
+ />
122
+ </InspectorControls>
116
123
  <li { ...blockProps }>
117
124
  <Button
118
125
  className="wp-block-social-link-anchor"
@@ -20,6 +20,7 @@ function render_block_core_social_link( $attributes, $content, $block ) {
20
20
  $service = ( isset( $attributes['service'] ) ) ? $attributes['service'] : 'Icon';
21
21
  $url = ( isset( $attributes['url'] ) ) ? $attributes['url'] : false;
22
22
  $label = ( isset( $attributes['label'] ) ) ? $attributes['label'] : block_core_social_link_get_name( $service );
23
+ $rel = ( isset( $attributes['rel'] ) ) ? $attributes['rel'] : '';
23
24
  $show_labels = array_key_exists( 'showLabels', $block->context ) ? $block->context['showLabels'] : false;
24
25
 
25
26
  // Don't render a link if there is no URL set.
@@ -43,11 +44,6 @@ function render_block_core_social_link( $attributes, $content, $block ) {
43
44
  $url = 'https://' . $url;
44
45
  }
45
46
 
46
- $rel_target_attributes = '';
47
- if ( $open_in_new_tab ) {
48
- $rel_target_attributes = 'rel="noopener nofollow" target="_blank"';
49
- }
50
-
51
47
  $icon = block_core_social_link_get_icon( $service );
52
48
  $wrapper_attributes = get_block_wrapper_attributes(
53
49
  array(
@@ -57,13 +53,21 @@ function render_block_core_social_link( $attributes, $content, $block ) {
57
53
  );
58
54
 
59
55
  $link = '<li ' . $wrapper_attributes . '>';
60
- $link .= '<a href="' . esc_url( $url ) . '" ' . $rel_target_attributes . ' class="wp-block-social-link-anchor">';
56
+ $link .= '<a href="' . esc_url( $url ) . '" class="wp-block-social-link-anchor">';
61
57
  $link .= $icon;
62
58
  $link .= '<span class="wp-block-social-link-label' . ( $show_labels ? '' : ' screen-reader-text' ) . '">';
63
59
  $link .= esc_html( $label );
64
60
  $link .= '</span></a></li>';
65
61
 
66
- return $link;
62
+ $w = new WP_HTML_Tag_Processor( $link );
63
+ $w->next_tag( 'a' );
64
+ if ( $open_in_new_tab ) {
65
+ $w->set_attribute( 'rel', esc_attr( $rel ) . ' noopener nofollow' );
66
+ $w->set_attribute( 'target', '_blank' );
67
+ } elseif ( '' !== $rel ) {
68
+ $w->set_attribute( 'rel', esc_attr( $rel ) );
69
+ }
70
+ return $w;
67
71
  }
68
72
 
69
73
  /**
@@ -33,7 +33,7 @@ describe( '<SocialLinkEdit/>', () => {
33
33
 
34
34
  // Act
35
35
  fireEvent.press(
36
- await waitFor( () => subject.getByA11yLabel( 'Add block' ) )
36
+ await waitFor( () => subject.getByLabelText( 'Add block' ) )
37
37
  );
38
38
  fireEvent.changeText(
39
39
  await waitFor( () =>
@@ -43,13 +43,13 @@ describe( '<SocialLinkEdit/>', () => {
43
43
  );
44
44
  fireEvent.press(
45
45
  await waitFor( () =>
46
- subject.getByA11yLabel( 'Social Icons block' )
46
+ subject.getByLabelText( 'Social Icons block' )
47
47
  )
48
48
  );
49
49
  fireEvent(
50
50
  await waitFor( () =>
51
51
  within(
52
- subject.getByA11yLabel( /Social Icons Block. Row 1/ )
52
+ subject.getByLabelText( /Social Icons Block. Row 1/ )
53
53
  ).getByTestId( 'block-list-wrapper' )
54
54
  ),
55
55
  'layout',
@@ -59,22 +59,22 @@ describe( '<SocialLinkEdit/>', () => {
59
59
  // Assert
60
60
  expect(
61
61
  await waitFor( () =>
62
- subject.getByA11yLabel( /WordPress social icon/ )
62
+ subject.getByLabelText( /WordPress social icon/ )
63
63
  )
64
64
  ).toBeDefined();
65
65
  expect(
66
66
  await waitFor( () =>
67
- subject.getByA11yLabel( /Facebook social icon/ )
67
+ subject.getByLabelText( /Facebook social icon/ )
68
68
  )
69
69
  ).toBeDefined();
70
70
  expect(
71
71
  await waitFor( () =>
72
- subject.getByA11yLabel( /Twitter social icon/ )
72
+ subject.getByLabelText( /Twitter social icon/ )
73
73
  )
74
74
  ).toBeDefined();
75
75
  expect(
76
76
  await waitFor( () =>
77
- subject.getByA11yLabel( /Instagram social icon/ )
77
+ subject.getByLabelText( /Instagram social icon/ )
78
78
  )
79
79
  ).toBeDefined();
80
80
  } );
@@ -90,7 +90,7 @@ describe( '<SocialLinkEdit/>', () => {
90
90
 
91
91
  // Act
92
92
  fireEvent.press(
93
- await waitFor( () => subject.getByA11yLabel( 'Add block' ) )
93
+ await waitFor( () => subject.getByLabelText( 'Add block' ) )
94
94
  );
95
95
  fireEvent.changeText(
96
96
  await waitFor( () =>
@@ -100,13 +100,13 @@ describe( '<SocialLinkEdit/>', () => {
100
100
  );
101
101
  fireEvent.press(
102
102
  await waitFor( () =>
103
- subject.getByA11yLabel( 'Social Icons block' )
103
+ subject.getByLabelText( 'Social Icons block' )
104
104
  )
105
105
  );
106
106
  fireEvent(
107
107
  await waitFor( () =>
108
108
  within(
109
- subject.getByA11yLabel( /Social Icons Block. Row 1/ )
109
+ subject.getByLabelText( /Social Icons Block. Row 1/ )
110
110
  ).getByTestId( 'block-list-wrapper' )
111
111
  ),
112
112
  'layout',
@@ -88,7 +88,7 @@ describe( 'Social links block', () => {
88
88
 
89
89
  // Check there's only one active social link
90
90
  const socialLinks =
91
- within( socialLinksBlock ).getAllByA11yLabel( / social icon/ );
91
+ within( socialLinksBlock ).getAllByLabelText( / social icon/ );
92
92
  expect( socialLinks.length ).toBe( 1 );
93
93
 
94
94
  // Check the WordPress link is shown when unselected
@@ -153,7 +153,7 @@ describe( 'Social links block', () => {
153
153
 
154
154
  it( 'shows the ghost placeholder when no icon is active', async () => {
155
155
  const screen = await initializeEditor();
156
- const { getByA11yLabel } = screen;
156
+ const { getByLabelText } = screen;
157
157
 
158
158
  // Add block
159
159
  await addBlock( screen, 'Social Icons' );
@@ -178,11 +178,11 @@ describe( 'Social links block', () => {
178
178
  fireEvent.press( firstLinkBlock );
179
179
 
180
180
  // Open block actions menu
181
- const blockActionsButton = getByA11yLabel( /Open Block Actions Menu/ );
181
+ const blockActionsButton = getByLabelText( /Open Block Actions Menu/ );
182
182
  fireEvent.press( blockActionsButton );
183
183
 
184
184
  // Delete the social link
185
- const deleteButton = getByA11yLabel( /Remove block/ );
185
+ const deleteButton = getByLabelText( /Remove block/ );
186
186
  fireEvent.press( deleteButton );
187
187
 
188
188
  // Add Paragraph block
@@ -4,7 +4,6 @@
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import { InspectorControls, useSetting } from '@wordpress/block-editor';
6
6
  import {
7
- BaseControl,
8
7
  PanelBody,
9
8
  __experimentalUseCustomUnits as useCustomUnits,
10
9
  __experimentalUnitControl as UnitControl,
@@ -51,17 +50,16 @@ function DimensionInput( { label, onChange, isResizing, value = '' } ) {
51
50
  ].join( '' );
52
51
 
53
52
  return (
54
- <BaseControl label={ label } id={ inputId }>
55
- <UnitControl
56
- id={ inputId }
57
- isResetValueOnUnitChange
58
- min={ MIN_SPACER_SIZE }
59
- onChange={ handleOnChange }
60
- style={ { maxWidth: 80 } }
61
- value={ computedValue }
62
- units={ units }
63
- />
64
- </BaseControl>
53
+ <UnitControl
54
+ label={ label }
55
+ id={ inputId }
56
+ isResetValueOnUnitChange
57
+ min={ MIN_SPACER_SIZE }
58
+ onChange={ handleOnChange }
59
+ __unstableInputWidth={ '80px' }
60
+ value={ computedValue }
61
+ units={ units }
62
+ />
65
63
  );
66
64
  }
67
65
 
@@ -28,10 +28,10 @@ afterAll( () => {
28
28
 
29
29
  describe( 'Spacer block', () => {
30
30
  it( 'inserts block', async () => {
31
- const { getByA11yLabel, getByTestId, getByText } =
31
+ const { getByLabelText, getByTestId, getByText } =
32
32
  await initializeEditor();
33
33
 
34
- fireEvent.press( getByA11yLabel( 'Add block' ) );
34
+ fireEvent.press( getByLabelText( 'Add block' ) );
35
35
 
36
36
  const blockList = getByTestId( 'InserterUI-Blocks' );
37
37
  // onScroll event used to force the FlatList to render all items
@@ -45,7 +45,7 @@ describe( 'Spacer block', () => {
45
45
 
46
46
  fireEvent.press( await waitFor( () => getByText( 'Spacer' ) ) );
47
47
 
48
- expect( getByA11yLabel( /Spacer Block\. Row 1/ ) ).toBeVisible();
48
+ expect( getByLabelText( /Spacer Block\. Row 1/ ) ).toBeVisible();
49
49
  expect( getEditorHtml() ).toMatchSnapshot();
50
50
  } );
51
51
 
@@ -53,17 +53,17 @@ describe( 'Spacer block', () => {
53
53
  const initialHtml = `<!-- wp:spacer -->
54
54
  <div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
55
55
  <!-- /wp:spacer -->`;
56
- const { getByA11yLabel, getByDisplayValue, getByTestId, getByText } =
56
+ const { getByLabelText, getByDisplayValue, getByTestId, getByText } =
57
57
  await initializeEditor( {
58
58
  initialHtml,
59
59
  } );
60
60
 
61
61
  // Select Spacer block
62
- const spacerBlock = getByA11yLabel( /Spacer Block\. Row 1/ );
62
+ const spacerBlock = getByLabelText( /Spacer Block\. Row 1/ );
63
63
  fireEvent.press( spacerBlock );
64
64
 
65
65
  // Open block settings
66
- fireEvent.press( getByA11yLabel( 'Open Settings' ) );
66
+ fireEvent.press( getByLabelText( 'Open Settings' ) );
67
67
  await waitFor(
68
68
  () => getByTestId( 'block-settings-modal' ).props.isVisible
69
69
  );
@@ -80,17 +80,17 @@ describe( 'Spacer block', () => {
80
80
  const initialHtml = `<!-- wp:spacer -->
81
81
  <div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
82
82
  <!-- /wp:spacer -->`;
83
- const { getByA11yLabel, getByDisplayValue, getByTestId, getByText } =
83
+ const { getByLabelText, getByDisplayValue, getByTestId, getByText } =
84
84
  await initializeEditor( {
85
85
  initialHtml,
86
86
  } );
87
87
 
88
88
  // Select Spacer block
89
- const spacerBlock = getByA11yLabel( /Spacer Block\. Row 1/ );
89
+ const spacerBlock = getByLabelText( /Spacer Block\. Row 1/ );
90
90
  fireEvent.press( spacerBlock );
91
91
 
92
92
  // Open block settings
93
- fireEvent.press( getByA11yLabel( 'Open Settings' ) );
93
+ fireEvent.press( getByLabelText( 'Open Settings' ) );
94
94
  await waitFor(
95
95
  () => getByTestId( 'block-settings-modal' ).props.isVisible
96
96
  );
@@ -111,23 +111,23 @@ describe( 'Spacer block', () => {
111
111
  const initialHtml = `<!-- wp:spacer -->
112
112
  <div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
113
113
  <!-- /wp:spacer -->`;
114
- const { getByA11yLabel, getByTestId } = await initializeEditor( {
114
+ const { getByLabelText, getByTestId } = await initializeEditor( {
115
115
  initialHtml,
116
116
  } );
117
117
 
118
118
  // Select Spacer block
119
- const spacerBlock = getByA11yLabel( /Spacer Block\. Row 1/ );
119
+ const spacerBlock = getByLabelText( /Spacer Block\. Row 1/ );
120
120
  fireEvent.press( spacerBlock );
121
121
 
122
122
  // Open block settings
123
- fireEvent.press( getByA11yLabel( 'Open Settings' ) );
123
+ fireEvent.press( getByLabelText( 'Open Settings' ) );
124
124
  await waitFor(
125
125
  () => getByTestId( 'block-settings-modal' ).props.isVisible
126
126
  );
127
127
 
128
128
  // Increment height
129
129
  fireEvent(
130
- getByA11yLabel( /Height\. Value is 100 Pixels \(px\)/ ),
130
+ getByLabelText( /Height\. Value is 100 Pixels \(px\)/ ),
131
131
  'accessibilityAction',
132
132
  {
133
133
  nativeEvent: { actionName: 'increment' },
@@ -141,23 +141,23 @@ describe( 'Spacer block', () => {
141
141
  const initialHtml = `<!-- wp:spacer -->
142
142
  <div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
143
143
  <!-- /wp:spacer -->`;
144
- const { getByA11yLabel, getByTestId } = await initializeEditor( {
144
+ const { getByLabelText, getByTestId } = await initializeEditor( {
145
145
  initialHtml,
146
146
  } );
147
147
 
148
148
  // Select Spacer block
149
- const spacerBlock = getByA11yLabel( /Spacer Block\. Row 1/ );
149
+ const spacerBlock = getByLabelText( /Spacer Block\. Row 1/ );
150
150
  fireEvent.press( spacerBlock );
151
151
 
152
152
  // Open block settings
153
- fireEvent.press( getByA11yLabel( 'Open Settings' ) );
153
+ fireEvent.press( getByLabelText( 'Open Settings' ) );
154
154
  await waitFor(
155
155
  () => getByTestId( 'block-settings-modal' ).props.isVisible
156
156
  );
157
157
 
158
158
  // Increment height
159
159
  fireEvent(
160
- getByA11yLabel( /Height\. Value is 100 Pixels \(px\)/ ),
160
+ getByLabelText( /Height\. Value is 100 Pixels \(px\)/ ),
161
161
  'accessibilityAction',
162
162
  {
163
163
  nativeEvent: { actionName: 'decrement' },