@wordpress/block-editor 14.5.0 → 14.6.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 (431) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +0 -8
  3. package/build/autocompleters/block.js +13 -5
  4. package/build/autocompleters/block.js.map +1 -1
  5. package/build/components/block-canvas/index.js +10 -0
  6. package/build/components/block-canvas/index.js.map +1 -1
  7. package/build/components/block-card/index.js +2 -2
  8. package/build/components/block-card/index.js.map +1 -1
  9. package/build/components/block-full-height-alignment-control/index.js +1 -1
  10. package/build/components/block-full-height-alignment-control/index.js.map +1 -1
  11. package/build/components/block-list/block.js +1 -1
  12. package/build/components/block-list/block.js.map +1 -1
  13. package/build/components/block-list/block.native.js +1 -7
  14. package/build/components/block-list/block.native.js.map +1 -1
  15. package/build/components/block-list/index.js +5 -5
  16. package/build/components/block-list/index.js.map +1 -1
  17. package/build/components/block-list/use-block-props/index.js +1 -2
  18. package/build/components/block-list/use-block-props/index.js.map +1 -1
  19. package/build/components/block-list/use-block-props/use-focus-first-element.js +4 -3
  20. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  21. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -6
  22. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  23. package/build/components/block-list/use-in-between-inserter.js +1 -1
  24. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  25. package/build/components/block-patterns-paging/index.js +1 -1
  26. package/build/components/block-patterns-paging/index.js.map +1 -1
  27. package/build/components/block-popover/index.js +2 -45
  28. package/build/components/block-popover/index.js.map +1 -1
  29. package/build/components/block-preview/index.js +2 -2
  30. package/build/components/block-preview/index.js.map +1 -1
  31. package/build/components/block-settings-menu/block-settings-dropdown.js +5 -0
  32. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  33. package/build/components/block-settings-menu/index.js +4 -3
  34. package/build/components/block-settings-menu/index.js.map +1 -1
  35. package/build/components/block-toolbar/change-design.js +122 -0
  36. package/build/components/block-toolbar/change-design.js.map +1 -0
  37. package/build/components/block-toolbar/index.js +19 -7
  38. package/build/components/block-toolbar/index.js.map +1 -1
  39. package/build/components/block-tools/index.js +4 -10
  40. package/build/components/block-tools/index.js.map +1 -1
  41. package/build/components/block-tools/insertion-point.js +4 -3
  42. package/build/components/block-tools/insertion-point.js.map +1 -1
  43. package/build/components/block-tools/use-show-block-tools.js +3 -9
  44. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  45. package/build/components/block-tools/zoom-out-mode-inserters.js +20 -29
  46. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  47. package/build/components/block-variation-transforms/index.js +2 -2
  48. package/build/components/block-variation-transforms/index.js.map +1 -1
  49. package/build/components/block-vertical-alignment-control/ui.js +6 -10
  50. package/build/components/block-vertical-alignment-control/ui.js.map +1 -1
  51. package/build/components/border-radius-control/linked-button.js +7 -10
  52. package/build/components/border-radius-control/linked-button.js.map +1 -1
  53. package/build/components/collab/block-comment-icon-slot.js +18 -0
  54. package/build/components/collab/block-comment-icon-slot.js.map +1 -0
  55. package/build/components/collab/block-comment-icon-toolbar-slot.js +18 -0
  56. package/build/components/collab/block-comment-icon-toolbar-slot.js.map +1 -0
  57. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +7 -1
  58. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  59. package/build/components/convert-to-group-buttons/toolbar.js +4 -4
  60. package/build/components/convert-to-group-buttons/toolbar.js.map +1 -1
  61. package/build/components/global-styles/color-panel.js +1 -4
  62. package/build/components/global-styles/color-panel.js.map +1 -1
  63. package/build/components/global-styles/use-global-styles-context.native.js +6 -0
  64. package/build/components/global-styles/use-global-styles-context.native.js.map +1 -1
  65. package/build/components/iframe/index.js +17 -22
  66. package/build/components/iframe/index.js.map +1 -1
  67. package/build/components/image-size-control/index.js +61 -20
  68. package/build/components/image-size-control/index.js.map +1 -1
  69. package/build/components/inner-blocks/index.js +9 -5
  70. package/build/components/inner-blocks/index.js.map +1 -1
  71. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js +2 -2
  72. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  73. package/build/components/inserter/block-patterns-tab/patterns-filter.js +1 -1
  74. package/build/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  75. package/build/components/inserter/category-tabs/index.js +15 -2
  76. package/build/components/inserter/category-tabs/index.js.map +1 -1
  77. package/build/components/inserter/menu.js +4 -2
  78. package/build/components/inserter/menu.js.map +1 -1
  79. package/build/components/inserter-button/index.native.js +1 -1
  80. package/build/components/inserter-button/index.native.js.map +1 -1
  81. package/build/components/inspector-controls-tabs/index.js +0 -2
  82. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  83. package/build/components/inspector-controls-tabs/utils.js +3 -6
  84. package/build/components/inspector-controls-tabs/utils.js.map +1 -1
  85. package/build/components/link-control/link-preview.js +12 -9
  86. package/build/components/link-control/link-preview.js.map +1 -1
  87. package/build/components/list-view/appender.js +4 -3
  88. package/build/components/list-view/appender.js.map +1 -1
  89. package/build/components/list-view/branch.js +6 -5
  90. package/build/components/list-view/branch.js.map +1 -1
  91. package/build/components/list-view/index.js +1 -2
  92. package/build/components/list-view/index.js.map +1 -1
  93. package/build/components/provider/index.js +1 -1
  94. package/build/components/provider/index.js.map +1 -1
  95. package/build/components/rich-text/event-listeners/index.js +3 -1
  96. package/build/components/rich-text/event-listeners/index.js.map +1 -1
  97. package/build/components/rich-text/index.native.js +2 -6
  98. package/build/components/rich-text/index.native.js.map +1 -1
  99. package/build/components/spacing-sizes-control/index.js +2 -2
  100. package/build/components/spacing-sizes-control/index.js.map +1 -1
  101. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +3 -3
  102. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  103. package/build/components/spacing-sizes-control/linked-button.js +1 -5
  104. package/build/components/spacing-sizes-control/linked-button.js.map +1 -1
  105. package/build/components/tool-selector/index.js +1 -4
  106. package/build/components/tool-selector/index.js.map +1 -1
  107. package/build/components/url-input/index.js +1 -1
  108. package/build/components/url-input/index.js.map +1 -1
  109. package/build/components/use-block-commands/index.js +1 -1
  110. package/build/components/use-block-commands/index.js.map +1 -1
  111. package/build/components/use-block-drop-zone/index.js +5 -5
  112. package/build/components/use-block-drop-zone/index.js.map +1 -1
  113. package/build/components/use-block-drop-zone/index.native.js +0 -1
  114. package/build/components/use-block-drop-zone/index.native.js.map +1 -1
  115. package/build/components/use-moving-animation/index.js +1 -3
  116. package/build/components/use-moving-animation/index.js.map +1 -1
  117. package/build/components/use-settings/index.js +1 -3
  118. package/build/components/use-settings/index.js.map +1 -1
  119. package/build/components/writing-flow/index.js +5 -3
  120. package/build/components/writing-flow/index.js.map +1 -1
  121. package/build/components/writing-flow/use-tab-nav.js +2 -3
  122. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  123. package/build/hooks/block-bindings.js +19 -8
  124. package/build/hooks/block-bindings.js.map +1 -1
  125. package/build/hooks/contrast-checker.js +0 -1
  126. package/build/hooks/contrast-checker.js.map +1 -1
  127. package/build/hooks/duotone.js +2 -2
  128. package/build/hooks/duotone.js.map +1 -1
  129. package/build/hooks/style.js +4 -1
  130. package/build/hooks/style.js.map +1 -1
  131. package/build/hooks/use-zoom-out.js +13 -22
  132. package/build/hooks/use-zoom-out.js.map +1 -1
  133. package/build/index.js +0 -7
  134. package/build/index.js.map +1 -1
  135. package/build/private-apis.js +6 -3
  136. package/build/private-apis.js.map +1 -1
  137. package/build/store/actions.js +2 -33
  138. package/build/store/actions.js.map +1 -1
  139. package/build/store/defaults.js +1 -1
  140. package/build/store/defaults.js.map +1 -1
  141. package/build/store/private-actions.js +57 -8
  142. package/build/store/private-actions.js.map +1 -1
  143. package/build/store/private-selectors.js +9 -21
  144. package/build/store/private-selectors.js.map +1 -1
  145. package/build/store/reducer.js +16 -6
  146. package/build/store/reducer.js.map +1 -1
  147. package/build/store/selectors.js +44 -7
  148. package/build/store/selectors.js.map +1 -1
  149. package/build/utils/dom.js +16 -1
  150. package/build/utils/dom.js.map +1 -1
  151. package/build/utils/get-font-styles-and-weights.js +1 -1
  152. package/build/utils/get-font-styles-and-weights.js.map +1 -1
  153. package/build/utils/transform-styles/index.js +4 -3
  154. package/build/utils/transform-styles/index.js.map +1 -1
  155. package/build-module/autocompleters/block.js +14 -6
  156. package/build-module/autocompleters/block.js.map +1 -1
  157. package/build-module/components/block-canvas/index.js +11 -1
  158. package/build-module/components/block-canvas/index.js.map +1 -1
  159. package/build-module/components/block-card/index.js +3 -3
  160. package/build-module/components/block-card/index.js.map +1 -1
  161. package/build-module/components/block-full-height-alignment-control/index.js +1 -1
  162. package/build-module/components/block-full-height-alignment-control/index.js.map +1 -1
  163. package/build-module/components/block-list/block.js +1 -1
  164. package/build-module/components/block-list/block.js.map +1 -1
  165. package/build-module/components/block-list/block.native.js +1 -7
  166. package/build-module/components/block-list/block.native.js.map +1 -1
  167. package/build-module/components/block-list/index.js +5 -5
  168. package/build-module/components/block-list/index.js.map +1 -1
  169. package/build-module/components/block-list/use-block-props/index.js +1 -2
  170. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  171. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +4 -3
  172. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  173. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -6
  174. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  175. package/build-module/components/block-list/use-in-between-inserter.js +1 -1
  176. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  177. package/build-module/components/block-patterns-paging/index.js +1 -1
  178. package/build-module/components/block-patterns-paging/index.js.map +1 -1
  179. package/build-module/components/block-popover/index.js +2 -45
  180. package/build-module/components/block-popover/index.js.map +1 -1
  181. package/build-module/components/block-preview/index.js +2 -2
  182. package/build-module/components/block-preview/index.js.map +1 -1
  183. package/build-module/components/block-settings-menu/block-settings-dropdown.js +5 -0
  184. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  185. package/build-module/components/block-settings-menu/index.js +5 -4
  186. package/build-module/components/block-settings-menu/index.js.map +1 -1
  187. package/build-module/components/block-toolbar/change-design.js +114 -0
  188. package/build-module/components/block-toolbar/change-design.js.map +1 -0
  189. package/build-module/components/block-toolbar/index.js +19 -7
  190. package/build-module/components/block-toolbar/index.js.map +1 -1
  191. package/build-module/components/block-tools/index.js +4 -10
  192. package/build-module/components/block-tools/index.js.map +1 -1
  193. package/build-module/components/block-tools/insertion-point.js +4 -3
  194. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  195. package/build-module/components/block-tools/use-show-block-tools.js +3 -9
  196. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  197. package/build-module/components/block-tools/zoom-out-mode-inserters.js +20 -29
  198. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  199. package/build-module/components/block-variation-transforms/index.js +2 -2
  200. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  201. package/build-module/components/block-vertical-alignment-control/ui.js +6 -10
  202. package/build-module/components/block-vertical-alignment-control/ui.js.map +1 -1
  203. package/build-module/components/border-radius-control/linked-button.js +8 -11
  204. package/build-module/components/border-radius-control/linked-button.js.map +1 -1
  205. package/build-module/components/collab/block-comment-icon-slot.js +11 -0
  206. package/build-module/components/collab/block-comment-icon-slot.js.map +1 -0
  207. package/build-module/components/collab/block-comment-icon-toolbar-slot.js +11 -0
  208. package/build-module/components/collab/block-comment-icon-toolbar-slot.js.map +1 -0
  209. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +7 -1
  210. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  211. package/build-module/components/convert-to-group-buttons/toolbar.js +4 -4
  212. package/build-module/components/convert-to-group-buttons/toolbar.js.map +1 -1
  213. package/build-module/components/global-styles/color-panel.js +2 -5
  214. package/build-module/components/global-styles/color-panel.js.map +1 -1
  215. package/build-module/components/global-styles/use-global-styles-context.native.js +6 -0
  216. package/build-module/components/global-styles/use-global-styles-context.native.js.map +1 -1
  217. package/build-module/components/iframe/index.js +17 -22
  218. package/build-module/components/iframe/index.js.map +1 -1
  219. package/build-module/components/image-size-control/index.js +62 -21
  220. package/build-module/components/image-size-control/index.js.map +1 -1
  221. package/build-module/components/inner-blocks/index.js +9 -5
  222. package/build-module/components/inner-blocks/index.js.map +1 -1
  223. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js +2 -2
  224. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  225. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js +1 -1
  226. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  227. package/build-module/components/inserter/category-tabs/index.js +15 -2
  228. package/build-module/components/inserter/category-tabs/index.js.map +1 -1
  229. package/build-module/components/inserter/menu.js +5 -3
  230. package/build-module/components/inserter/menu.js.map +1 -1
  231. package/build-module/components/inserter-button/index.native.js +1 -1
  232. package/build-module/components/inserter-button/index.native.js.map +1 -1
  233. package/build-module/components/inspector-controls-tabs/index.js +0 -2
  234. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  235. package/build-module/components/inspector-controls-tabs/utils.js +3 -6
  236. package/build-module/components/inspector-controls-tabs/utils.js.map +1 -1
  237. package/build-module/components/link-control/link-preview.js +13 -10
  238. package/build-module/components/link-control/link-preview.js.map +1 -1
  239. package/build-module/components/list-view/appender.js +4 -3
  240. package/build-module/components/list-view/appender.js.map +1 -1
  241. package/build-module/components/list-view/branch.js +7 -6
  242. package/build-module/components/list-view/branch.js.map +1 -1
  243. package/build-module/components/list-view/index.js +1 -2
  244. package/build-module/components/list-view/index.js.map +1 -1
  245. package/build-module/components/provider/index.js +1 -1
  246. package/build-module/components/provider/index.js.map +1 -1
  247. package/build-module/components/rich-text/event-listeners/index.js +4 -2
  248. package/build-module/components/rich-text/event-listeners/index.js.map +1 -1
  249. package/build-module/components/rich-text/index.native.js +2 -6
  250. package/build-module/components/rich-text/index.native.js.map +1 -1
  251. package/build-module/components/spacing-sizes-control/index.js +3 -3
  252. package/build-module/components/spacing-sizes-control/index.js.map +1 -1
  253. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +4 -4
  254. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  255. package/build-module/components/spacing-sizes-control/linked-button.js +2 -6
  256. package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -1
  257. package/build-module/components/tool-selector/index.js +1 -4
  258. package/build-module/components/tool-selector/index.js.map +1 -1
  259. package/build-module/components/url-input/index.js +1 -1
  260. package/build-module/components/url-input/index.js.map +1 -1
  261. package/build-module/components/use-block-commands/index.js +1 -1
  262. package/build-module/components/use-block-commands/index.js.map +1 -1
  263. package/build-module/components/use-block-drop-zone/index.js +5 -5
  264. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  265. package/build-module/components/use-block-drop-zone/index.native.js +0 -1
  266. package/build-module/components/use-block-drop-zone/index.native.js.map +1 -1
  267. package/build-module/components/use-moving-animation/index.js +1 -3
  268. package/build-module/components/use-moving-animation/index.js.map +1 -1
  269. package/build-module/components/use-settings/index.js +1 -3
  270. package/build-module/components/use-settings/index.js.map +1 -1
  271. package/build-module/components/writing-flow/index.js +5 -3
  272. package/build-module/components/writing-flow/index.js.map +1 -1
  273. package/build-module/components/writing-flow/use-tab-nav.js +2 -3
  274. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  275. package/build-module/hooks/block-bindings.js +20 -9
  276. package/build-module/hooks/block-bindings.js.map +1 -1
  277. package/build-module/hooks/contrast-checker.js +0 -1
  278. package/build-module/hooks/contrast-checker.js.map +1 -1
  279. package/build-module/hooks/duotone.js +2 -2
  280. package/build-module/hooks/duotone.js.map +1 -1
  281. package/build-module/hooks/style.js +4 -1
  282. package/build-module/hooks/style.js.map +1 -1
  283. package/build-module/hooks/use-zoom-out.js +15 -23
  284. package/build-module/hooks/use-zoom-out.js.map +1 -1
  285. package/build-module/index.js +1 -1
  286. package/build-module/index.js.map +1 -1
  287. package/build-module/private-apis.js +7 -5
  288. package/build-module/private-apis.js.map +1 -1
  289. package/build-module/store/actions.js +2 -33
  290. package/build-module/store/actions.js.map +1 -1
  291. package/build-module/store/defaults.js +1 -1
  292. package/build-module/store/defaults.js.map +1 -1
  293. package/build-module/store/private-actions.js +54 -7
  294. package/build-module/store/private-actions.js.map +1 -1
  295. package/build-module/store/private-selectors.js +9 -20
  296. package/build-module/store/private-selectors.js.map +1 -1
  297. package/build-module/store/reducer.js +16 -6
  298. package/build-module/store/reducer.js.map +1 -1
  299. package/build-module/store/selectors.js +45 -8
  300. package/build-module/store/selectors.js.map +1 -1
  301. package/build-module/utils/dom.js +16 -1
  302. package/build-module/utils/dom.js.map +1 -1
  303. package/build-module/utils/get-font-styles-and-weights.js +2 -2
  304. package/build-module/utils/get-font-styles-and-weights.js.map +1 -1
  305. package/build-module/utils/transform-styles/index.js +3 -2
  306. package/build-module/utils/transform-styles/index.js.map +1 -1
  307. package/build-style/content-rtl.css +9 -4
  308. package/build-style/content.css +9 -4
  309. package/build-style/style-rtl.css +33 -22
  310. package/build-style/style.css +33 -22
  311. package/build-types/utils/dom.d.ts.map +1 -1
  312. package/package.json +33 -32
  313. package/src/autocompleters/block.js +16 -7
  314. package/src/components/block-canvas/index.js +17 -1
  315. package/src/components/block-canvas/style.scss +2 -0
  316. package/src/components/block-card/index.js +3 -3
  317. package/src/components/block-full-height-alignment-control/index.js +1 -1
  318. package/src/components/block-inspector/style.scss +0 -6
  319. package/src/components/block-list/block.js +1 -2
  320. package/src/components/block-list/block.native.js +0 -4
  321. package/src/components/block-list/content.scss +1 -1
  322. package/src/components/block-list/index.js +4 -4
  323. package/src/components/block-list/use-block-props/index.js +0 -2
  324. package/src/components/block-list/use-block-props/use-focus-first-element.js +5 -3
  325. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +7 -20
  326. package/src/components/block-list/use-in-between-inserter.js +1 -1
  327. package/src/components/block-patterns-list/stories/fixtures.js +834 -0
  328. package/src/components/block-patterns-list/stories/index.story.js +81 -0
  329. package/src/components/block-patterns-list/style.scss +2 -0
  330. package/src/components/block-patterns-paging/index.js +1 -1
  331. package/src/components/block-popover/index.js +0 -62
  332. package/src/components/block-preview/index.js +2 -2
  333. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -0
  334. package/src/components/block-settings-menu/index.js +3 -0
  335. package/src/components/block-toolbar/change-design.js +133 -0
  336. package/src/components/block-toolbar/index.js +25 -8
  337. package/src/components/block-toolbar/style.scss +16 -0
  338. package/src/components/block-tools/index.js +4 -17
  339. package/src/components/block-tools/insertion-point.js +4 -3
  340. package/src/components/block-tools/style.scss +0 -20
  341. package/src/components/block-tools/use-show-block-tools.js +0 -13
  342. package/src/components/block-tools/zoom-out-mode-inserters.js +25 -40
  343. package/src/components/block-variation-transforms/index.js +2 -2
  344. package/src/components/block-vertical-alignment-control/ui.js +11 -15
  345. package/src/components/border-radius-control/linked-button.js +9 -11
  346. package/src/components/collab/block-comment-icon-slot.js +12 -0
  347. package/src/components/collab/block-comment-icon-toolbar-slot.js +12 -0
  348. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +7 -1
  349. package/src/components/convert-to-group-buttons/toolbar.js +4 -4
  350. package/src/components/global-styles/color-panel.js +2 -10
  351. package/src/components/global-styles/test/use-global-styles-context.native.js +1 -0
  352. package/src/components/global-styles/use-global-styles-context.native.js +6 -0
  353. package/src/components/iframe/content.scss +4 -9
  354. package/src/components/iframe/index.js +31 -34
  355. package/src/components/iframe/style.scss +2 -3
  356. package/src/components/image-size-control/index.js +74 -43
  357. package/src/components/image-size-control/test/index.js +5 -63
  358. package/src/components/inner-blocks/index.js +12 -6
  359. package/src/components/inserter/block-patterns-tab/pattern-category-previews.js +2 -3
  360. package/src/components/inserter/block-patterns-tab/patterns-filter.js +1 -1
  361. package/src/components/inserter/category-tabs/index.js +16 -2
  362. package/src/components/inserter/menu.js +6 -4
  363. package/src/components/inserter/style.scss +13 -0
  364. package/src/components/inserter-button/index.native.js +1 -1
  365. package/src/components/inspector-controls-tabs/index.js +1 -6
  366. package/src/components/inspector-controls-tabs/utils.js +0 -3
  367. package/src/components/link-control/link-preview.js +15 -8
  368. package/src/components/link-control/test/index.js +63 -24
  369. package/src/components/list-view/appender.js +5 -6
  370. package/src/components/list-view/branch.js +8 -6
  371. package/src/components/list-view/index.js +1 -2
  372. package/src/components/provider/index.js +1 -3
  373. package/src/components/provider/test/experimental-provider.js +43 -1
  374. package/src/components/rich-text/event-listeners/index.js +4 -2
  375. package/src/components/rich-text/index.native.js +0 -2
  376. package/src/components/spacing-sizes-control/index.js +3 -3
  377. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +4 -4
  378. package/src/components/spacing-sizes-control/linked-button.js +2 -12
  379. package/src/components/tool-selector/index.js +1 -5
  380. package/src/components/url-input/index.js +1 -1
  381. package/src/components/use-block-commands/index.js +1 -1
  382. package/src/components/use-block-drop-zone/index.js +5 -5
  383. package/src/components/use-block-drop-zone/index.native.js +0 -1
  384. package/src/components/use-moving-animation/index.js +0 -1
  385. package/src/components/use-settings/index.js +0 -1
  386. package/src/components/writing-flow/index.js +5 -3
  387. package/src/components/writing-flow/use-tab-nav.js +1 -2
  388. package/src/hooks/block-bindings.js +48 -31
  389. package/src/hooks/contrast-checker.js +0 -1
  390. package/src/hooks/duotone.js +2 -2
  391. package/src/hooks/style.js +7 -3
  392. package/src/hooks/use-zoom-out.js +14 -34
  393. package/src/index.js +0 -1
  394. package/src/private-apis.js +6 -3
  395. package/src/store/actions.js +3 -52
  396. package/src/store/defaults.js +2 -1
  397. package/src/store/private-actions.js +71 -8
  398. package/src/store/private-selectors.js +9 -19
  399. package/src/store/reducer.js +25 -11
  400. package/src/store/selectors.js +59 -8
  401. package/src/store/test/actions.js +41 -0
  402. package/src/store/test/reducer.js +23 -0
  403. package/src/utils/dom.js +22 -2
  404. package/src/utils/get-font-styles-and-weights.js +2 -2
  405. package/src/utils/transform-styles/index.js +3 -2
  406. package/tsconfig.tsbuildinfo +1 -1
  407. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js +0 -57
  408. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +0 -1
  409. package/build/components/block-toolbar/shuffle.js +0 -110
  410. package/build/components/block-toolbar/shuffle.js.map +0 -1
  411. package/build/components/block-tools/zoom-out-popover.js +0 -58
  412. package/build/components/block-tools/zoom-out-popover.js.map +0 -1
  413. package/build/components/block-tools/zoom-out-toolbar.js +0 -132
  414. package/build/components/block-tools/zoom-out-toolbar.js.map +0 -1
  415. package/build/components/block-vertical-alignment-control/icons.js +0 -48
  416. package/build/components/block-vertical-alignment-control/icons.js.map +0 -1
  417. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js +0 -51
  418. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +0 -1
  419. package/build-module/components/block-toolbar/shuffle.js +0 -103
  420. package/build-module/components/block-toolbar/shuffle.js.map +0 -1
  421. package/build-module/components/block-tools/zoom-out-popover.js +0 -49
  422. package/build-module/components/block-tools/zoom-out-popover.js.map +0 -1
  423. package/build-module/components/block-tools/zoom-out-toolbar.js +0 -124
  424. package/build-module/components/block-tools/zoom-out-toolbar.js.map +0 -1
  425. package/build-module/components/block-vertical-alignment-control/icons.js +0 -41
  426. package/build-module/components/block-vertical-alignment-control/icons.js.map +0 -1
  427. package/src/components/block-list/use-block-props/use-zoom-out-mode-exit.js +0 -65
  428. package/src/components/block-toolbar/shuffle.js +0 -111
  429. package/src/components/block-tools/zoom-out-popover.js +0 -47
  430. package/src/components/block-tools/zoom-out-toolbar.js +0 -135
  431. package/src/components/block-vertical-alignment-control/icons.js +0 -34
@@ -2,11 +2,11 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import {
5
- Button,
6
- ButtonGroup,
7
5
  SelectControl,
8
6
  __experimentalNumberControl as NumberControl,
9
7
  __experimentalHStack as HStack,
8
+ __experimentalToggleGroupControl as ToggleGroupControl,
9
+ __experimentalToggleGroupControlOption as ToggleGroupControlOption,
10
10
  } from '@wordpress/components';
11
11
  import { __ } from '@wordpress/i18n';
12
12
 
@@ -18,6 +18,25 @@ import useDimensionHandler from './use-dimension-handler';
18
18
  const IMAGE_SIZE_PRESETS = [ 25, 50, 75, 100 ];
19
19
  const noop = () => {};
20
20
 
21
+ /**
22
+ * Get scaled width and height for the given scale.
23
+ *
24
+ * @param {number} scale The scale to get the scaled width and height for.
25
+ * @param {number} imageWidth The image width.
26
+ * @param {number} imageHeight The image height.
27
+ *
28
+ * @return {Object} The scaled width and height.
29
+ */
30
+ function getScaledWidthAndHeight( scale, imageWidth, imageHeight ) {
31
+ const scaledWidth = Math.round( imageWidth * ( scale / 100 ) );
32
+ const scaledHeight = Math.round( imageHeight * ( scale / 100 ) );
33
+
34
+ return {
35
+ scaledWidth,
36
+ scaledHeight,
37
+ };
38
+ }
39
+
21
40
  export default function ImageSizeControl( {
22
41
  imageSizeHelp,
23
42
  imageWidth,
@@ -33,6 +52,40 @@ export default function ImageSizeControl( {
33
52
  const { currentHeight, currentWidth, updateDimension, updateDimensions } =
34
53
  useDimensionHandler( height, width, imageHeight, imageWidth, onChange );
35
54
 
55
+ /**
56
+ * Updates the dimensions for the given scale.
57
+ * Handler for toggle group control change.
58
+ *
59
+ * @param {number} scale The scale to update the dimensions for.
60
+ */
61
+ const handleUpdateDimensions = ( scale ) => {
62
+ if ( undefined === scale ) {
63
+ updateDimensions();
64
+ return;
65
+ }
66
+
67
+ const { scaledWidth, scaledHeight } = getScaledWidthAndHeight(
68
+ scale,
69
+ imageWidth,
70
+ imageHeight
71
+ );
72
+
73
+ updateDimensions( scaledHeight, scaledWidth );
74
+ };
75
+
76
+ /**
77
+ * Add the stored image preset value to toggle group control.
78
+ */
79
+ const selectedValue = IMAGE_SIZE_PRESETS.find( ( scale ) => {
80
+ const { scaledWidth, scaledHeight } = getScaledWidthAndHeight(
81
+ scale,
82
+ imageWidth,
83
+ imageHeight
84
+ );
85
+
86
+ return currentWidth === scaledWidth && currentHeight === scaledHeight;
87
+ } );
88
+
36
89
  return (
37
90
  <>
38
91
  { imageSizeOptions && imageSizeOptions.length > 0 && (
@@ -70,47 +123,25 @@ export default function ImageSizeControl( {
70
123
  size="__unstable-large"
71
124
  />
72
125
  </HStack>
73
- <HStack>
74
- <ButtonGroup aria-label={ __( 'Image size presets' ) }>
75
- { IMAGE_SIZE_PRESETS.map( ( scale ) => {
76
- const scaledWidth = Math.round(
77
- imageWidth * ( scale / 100 )
78
- );
79
- const scaledHeight = Math.round(
80
- imageHeight * ( scale / 100 )
81
- );
82
-
83
- const isCurrent =
84
- currentWidth === scaledWidth &&
85
- currentHeight === scaledHeight;
86
-
87
- return (
88
- <Button
89
- key={ scale }
90
- size="small"
91
- variant={
92
- isCurrent ? 'primary' : undefined
93
- }
94
- isPressed={ isCurrent }
95
- onClick={ () =>
96
- updateDimensions(
97
- scaledHeight,
98
- scaledWidth
99
- )
100
- }
101
- >
102
- { scale }%
103
- </Button>
104
- );
105
- } ) }
106
- </ButtonGroup>
107
- <Button
108
- size="small"
109
- onClick={ () => updateDimensions() }
110
- >
111
- { __( 'Reset' ) }
112
- </Button>
113
- </HStack>
126
+ <ToggleGroupControl
127
+ label={ __( 'Image size presets' ) }
128
+ hideLabelFromVision
129
+ onChange={ handleUpdateDimensions }
130
+ value={ selectedValue }
131
+ isBlock
132
+ __next40pxDefaultSize
133
+ __nextHasNoMarginBottom
134
+ >
135
+ { IMAGE_SIZE_PRESETS.map( ( scale ) => {
136
+ return (
137
+ <ToggleGroupControlOption
138
+ key={ scale }
139
+ value={ scale }
140
+ label={ `${ scale }%` }
141
+ />
142
+ );
143
+ } ) }
144
+ </ToggleGroupControl>
114
145
  </div>
115
146
  ) }
116
147
  </>
@@ -221,47 +221,8 @@ describe( 'ImageSizeControl', () => {
221
221
  } );
222
222
  } );
223
223
 
224
- describe( 'reset button', () => {
225
- it( 'resets both height and width to default values', async () => {
226
- const user = userEvent.setup();
227
-
228
- render(
229
- <ImageSizeControl
230
- imageHeight="100"
231
- imageWidth="200"
232
- height="300"
233
- width="400"
234
- onChange={ mockOnChange }
235
- />
236
- );
237
-
238
- const heightInput = screen.getByRole( 'spinbutton', {
239
- name: 'Height',
240
- } );
241
- const widthInput = screen.getByRole( 'spinbutton', {
242
- name: 'Width',
243
- } );
244
-
245
- // The initial dimension values display first.
246
- expect( heightInput ).toHaveValue( 300 );
247
- expect( widthInput ).toHaveValue( 400 );
248
-
249
- await user.click( screen.getByRole( 'button', { name: 'Reset' } ) );
250
-
251
- // Both attributes are set to undefined to clear custom values.
252
- expect( mockOnChange ).toHaveBeenLastCalledWith( {
253
- height: undefined,
254
- width: undefined,
255
- } );
256
-
257
- // The inputs display the default values once more.
258
- expect( heightInput ).toHaveValue( 100 );
259
- expect( widthInput ).toHaveValue( 200 );
260
- } );
261
- } );
262
-
263
224
  describe( 'image size percentage presets', () => {
264
- it( 'updates height and width attributes on selection', async () => {
225
+ it( 'updates height and width on selection', async () => {
265
226
  const user = userEvent.setup();
266
227
 
267
228
  render(
@@ -272,44 +233,25 @@ describe( 'ImageSizeControl', () => {
272
233
  />
273
234
  );
274
235
 
275
- const button = screen.getByRole( 'button', {
236
+ const button = screen.getByRole( 'radio', {
276
237
  name: '50%',
277
- pressed: false,
238
+ checked: false,
278
239
  } );
279
240
 
280
241
  await user.click( button );
281
242
 
282
- expect( button ).toHaveClass( 'is-pressed' );
243
+ expect( button ).toBeChecked();
283
244
 
284
245
  // Both attributes are set to the rounded scaled value.
285
246
  expect( mockOnChange ).toHaveBeenLastCalledWith( {
286
247
  height: 50,
287
248
  width: 101,
288
249
  } );
289
- } );
290
-
291
- it( 'updates height and width inputs on selection', async () => {
292
- const user = userEvent.setup();
293
-
294
- render(
295
- <ImageSizeControl
296
- imageHeight="100"
297
- imageWidth="201"
298
- onChange={ mockOnChange }
299
- />
300
- );
301
-
302
- const button = screen.getByRole( 'button', {
303
- name: '50%',
304
- pressed: false,
305
- } );
306
-
307
- await user.click( button );
308
250
 
309
- // Both attributes are set to the rounded scaled value.
310
251
  expect(
311
252
  screen.getByRole( 'spinbutton', { name: 'Height' } )
312
253
  ).toHaveValue( 50 );
254
+
313
255
  expect(
314
256
  screen.getByRole( 'spinbutton', { name: 'Width' } )
315
257
  ).toHaveValue( 101 );
@@ -195,17 +195,24 @@ export function useInnerBlocksProps( props = {}, options = {} ) {
195
195
  ( select ) => {
196
196
  const {
197
197
  getBlockName,
198
- __unstableGetEditorMode,
198
+ isZoomOut,
199
199
  getTemplateLock,
200
200
  getBlockRootClientId,
201
201
  getBlockEditingMode,
202
202
  getBlockSettings,
203
203
  getSectionRootClientId,
204
204
  } = unlock( select( blockEditorStore ) );
205
- let _isDropZoneDisabled;
206
205
 
207
206
  if ( ! clientId ) {
208
- return { isDropZoneDisabled: _isDropZoneDisabled };
207
+ const sectionRootClientId = getSectionRootClientId();
208
+ // Disable the root drop zone when zoomed out and the section root client id
209
+ // is not the root block list (represented by an empty string).
210
+ // This avoids drag handling bugs caused by having two block lists acting as
211
+ // drop zones - the actual 'root' block list and the section root.
212
+ return {
213
+ isDropZoneDisabled:
214
+ isZoomOut() && sectionRootClientId !== '',
215
+ };
209
216
  }
210
217
 
211
218
  const { hasBlockSupport, getBlockType } = select( blocksStore );
@@ -214,14 +221,13 @@ export function useInnerBlocksProps( props = {}, options = {} ) {
214
221
  const parentClientId = getBlockRootClientId( clientId );
215
222
  const [ defaultLayout ] = getBlockSettings( clientId, 'layout' );
216
223
 
217
- _isDropZoneDisabled = blockEditingMode === 'disabled';
224
+ let _isDropZoneDisabled = blockEditingMode === 'disabled';
218
225
 
219
- if ( __unstableGetEditorMode() === 'zoom-out' ) {
226
+ if ( isZoomOut() ) {
220
227
  // In zoom out mode, we want to disable the drop zone for the sections.
221
228
  // The inner blocks belonging to the section drop zone is
222
229
  // already disabled by the blocks themselves being disabled.
223
230
  const sectionRootClientId = getSectionRootClientId();
224
-
225
231
  _isDropZoneDisabled = clientId !== sectionRootClientId;
226
232
  }
227
233
 
@@ -34,6 +34,7 @@ import {
34
34
  INSERTER_PATTERN_TYPES,
35
35
  } from './utils';
36
36
  import { store as blockEditorStore } from '../../../store';
37
+ import { unlock } from '../../../lock-unlock';
37
38
 
38
39
  const noop = () => {};
39
40
 
@@ -45,8 +46,7 @@ export function PatternCategoryPreviews( {
45
46
  showTitlesAsTooltip,
46
47
  } ) {
47
48
  const isZoomOutMode = useSelect(
48
- ( select ) =>
49
- select( blockEditorStore ).__unstableGetEditorMode() === 'zoom-out',
49
+ ( select ) => unlock( select( blockEditorStore ) ).isZoomOut(),
50
50
  []
51
51
  );
52
52
  const [ allPatterns, , onClickPattern ] = usePatternsState(
@@ -117,7 +117,6 @@ export function PatternCategoryPreviews( {
117
117
  const { changePage } = pagingProps;
118
118
 
119
119
  // Hide block pattern preview on unmount.
120
- // eslint-disable-next-line react-hooks/exhaustive-deps
121
120
  useEffect( () => () => onHover( null ), [] );
122
121
 
123
122
  const onSetPatternSyncFilter = useCallback(
@@ -158,7 +158,7 @@ export function PatternsFilter( {
158
158
  value={ patternSyncFilter }
159
159
  />
160
160
  </MenuGroup>
161
- <div className="block-editor-tool-selector__help">
161
+ <div className="block-editor-inserter__patterns-filter-help">
162
162
  { createInterpolateElement(
163
163
  __(
164
164
  'Patterns are available from the <Link>WordPress.org Pattern Directory</Link>, bundled in the active theme, or created by users on this site. Only patterns created on this site can be synced.'
@@ -6,6 +6,7 @@ import {
6
6
  privateApis as componentsPrivateApis,
7
7
  __unstableMotion as motion,
8
8
  } from '@wordpress/components';
9
+ import { useState, useEffect } from '@wordpress/element';
9
10
 
10
11
  /**
11
12
  * Internal dependencies
@@ -31,11 +32,22 @@ function CategoryTabs( {
31
32
 
32
33
  const previousSelectedCategory = usePrevious( selectedCategory );
33
34
 
35
+ const selectedTabId = selectedCategory ? selectedCategory.name : null;
36
+ const [ activeTabId, setActiveId ] = useState();
37
+ const firstTabId = categories?.[ 0 ]?.name;
38
+ useEffect( () => {
39
+ // If there is no active tab, make the first tab the active tab, so that
40
+ // when focus is moved to the tablist, the first tab will be focused
41
+ // despite not being selected
42
+ if ( selectedTabId === null && ! activeTabId && firstTabId ) {
43
+ setActiveId( firstTabId );
44
+ }
45
+ }, [ selectedTabId, activeTabId, firstTabId, setActiveId ] );
46
+
34
47
  return (
35
48
  <Tabs
36
- className="block-editor-inserter__category-tabs"
37
49
  selectOnMove={ false }
38
- selectedTabId={ selectedCategory ? selectedCategory.name : null }
50
+ selectedTabId={ selectedTabId }
39
51
  orientation="vertical"
40
52
  onSelect={ ( categoryId ) => {
41
53
  // Pass the full category object
@@ -45,6 +57,8 @@ function CategoryTabs( {
45
57
  )
46
58
  );
47
59
  } }
60
+ activeTabId={ activeTabId }
61
+ onActiveTabIdChange={ setActiveId }
48
62
  >
49
63
  <Tabs.TabList className="block-editor-inserter__category-tablist">
50
64
  { categories.map( ( category ) => (
@@ -16,7 +16,7 @@ import {
16
16
  } from '@wordpress/element';
17
17
  import { VisuallyHidden, SearchControl, Popover } from '@wordpress/components';
18
18
  import { __ } from '@wordpress/i18n';
19
- import { useDebouncedInput } from '@wordpress/compose';
19
+ import { useDebouncedInput, useViewportMatch } from '@wordpress/compose';
20
20
  import { useSelect } from '@wordpress/data';
21
21
 
22
22
  /**
@@ -33,6 +33,7 @@ import useInsertionPoint from './hooks/use-insertion-point';
33
33
  import { store as blockEditorStore } from '../../store';
34
34
  import TabbedSidebar from '../tabbed-sidebar';
35
35
  import { useZoomOut } from '../../hooks/use-zoom-out';
36
+ import { unlock } from '../../lock-unlock';
36
37
 
37
38
  const NOOP = () => {};
38
39
  function InserterMenu(
@@ -54,8 +55,7 @@ function InserterMenu(
54
55
  ref
55
56
  ) {
56
57
  const isZoomOutMode = useSelect(
57
- ( select ) =>
58
- select( blockEditorStore ).__unstableGetEditorMode() === 'zoom-out',
58
+ ( select ) => unlock( select( blockEditorStore ) ).isZoomOut(),
59
59
  []
60
60
  );
61
61
  const [ filterValue, setFilterValue, delayedFilterValue ] =
@@ -67,6 +67,8 @@ function InserterMenu(
67
67
  const [ patternFilter, setPatternFilter ] = useState( 'all' );
68
68
  const [ selectedMediaCategory, setSelectedMediaCategory ] =
69
69
  useState( null );
70
+ const isLargeViewport = useViewportMatch( 'large' );
71
+
70
72
  function getInitialTab() {
71
73
  if ( __experimentalInitialTab ) {
72
74
  return __experimentalInitialTab;
@@ -80,7 +82,7 @@ function InserterMenu(
80
82
 
81
83
  const shouldUseZoomOut =
82
84
  selectedTab === 'patterns' || selectedTab === 'media';
83
- useZoomOut( shouldUseZoomOut );
85
+ useZoomOut( shouldUseZoomOut && isLargeViewport );
84
86
 
85
87
  const [ destinationRootClientId, onInsertBlocks, onToggleInsertionPoint ] =
86
88
  useInsertionPoint( {
@@ -123,6 +123,12 @@ $block-inserter-tabs-height: 44px;
123
123
  }
124
124
 
125
125
  .block-editor-inserter__panel-header {
126
+ // Use `position: relative` to ensure any absolute positioned child elements are
127
+ // positioned relative to the panel header.
128
+ // This makes the overflow rule of the panel work correctly, particularly when the
129
+ // `VisuallyHidden` component is used within the inserter UI.
130
+ position: relative;
131
+
126
132
  display: inline-flex;
127
133
  align-items: center;
128
134
  padding: $grid-unit-20 $grid-unit-20 0;
@@ -260,6 +266,13 @@ $block-inserter-tabs-height: 44px;
260
266
  margin-top: $grid-unit-30;
261
267
  }
262
268
 
269
+ .block-editor-inserter__patterns-filter-help {
270
+ padding: $grid-unit-20;
271
+ border-top: $border-width solid $gray-300;
272
+ color: $gray-700;
273
+ min-width: 280px;
274
+ }
275
+
263
276
  .block-editor-inserter__media-list,
264
277
  .block-editor-block-patterns-list {
265
278
  overflow-y: auto;
@@ -54,7 +54,7 @@ class MenuItem extends Component {
54
54
  const accessibilityLabelFormat = blockIsNew
55
55
  ? // translators: Newly available block name. %s: The localized block name
56
56
  __( '%s block, newly available' )
57
- : // translators: Block name. %s: The localized block name
57
+ : // translators: %s: Block name e.g. "Image block"
58
58
  __( '%s block' );
59
59
  const accessibilityLabel = sprintf(
60
60
  accessibilityLabelFormat,
@@ -46,18 +46,13 @@ export default function InspectorControlsTabs( {
46
46
  <Tabs.TabList>
47
47
  { tabs.map( ( tab ) =>
48
48
  showIconLabels ? (
49
- <Tabs.Tab
50
- key={ tab.name }
51
- tabId={ tab.name }
52
- className={ tab.className }
53
- >
49
+ <Tabs.Tab key={ tab.name } tabId={ tab.name }>
54
50
  { tab.title }
55
51
  </Tabs.Tab>
56
52
  ) : (
57
53
  <Tooltip text={ tab.title } key={ tab.name }>
58
54
  <Tabs.Tab
59
55
  tabId={ tab.name }
60
- className={ tab.className }
61
56
  aria-label={ tab.title }
62
57
  >
63
58
  <Icon icon={ tab.icon } />
@@ -9,7 +9,6 @@ export const TAB_SETTINGS = {
9
9
  title: __( 'Settings' ),
10
10
  value: 'settings',
11
11
  icon: cog,
12
- className: 'block-editor-block-inspector__tab-item',
13
12
  };
14
13
 
15
14
  export const TAB_STYLES = {
@@ -17,7 +16,6 @@ export const TAB_STYLES = {
17
16
  title: __( 'Styles' ),
18
17
  value: 'styles',
19
18
  icon: styles,
20
- className: 'block-editor-block-inspector__tab-item',
21
19
  };
22
20
 
23
21
  export const TAB_LIST_VIEW = {
@@ -25,5 +23,4 @@ export const TAB_LIST_VIEW = {
25
23
  title: __( 'List View' ),
26
24
  value: 'list-view',
27
25
  icon: listView,
28
- className: 'block-editor-block-inspector__tab-item',
29
26
  };
@@ -6,7 +6,7 @@ import clsx from 'clsx';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { __, sprintf } from '@wordpress/i18n';
9
+ import { __ } from '@wordpress/i18n';
10
10
  import {
11
11
  Button,
12
12
  ExternalLink,
@@ -96,7 +96,8 @@ export default function LinkPreview( {
96
96
 
97
97
  return (
98
98
  <div
99
- aria-label={ __( 'Currently selected' ) }
99
+ role="group"
100
+ aria-label={ __( 'Manage link' ) }
100
101
  className={ clsx( 'block-editor-link-control__search-item', {
101
102
  'is-current': true,
102
103
  'is-rich': hasRichData,
@@ -107,7 +108,14 @@ export default function LinkPreview( {
107
108
  } ) }
108
109
  >
109
110
  <div className="block-editor-link-control__search-item-top">
110
- <span className="block-editor-link-control__search-item-header">
111
+ <span
112
+ className="block-editor-link-control__search-item-header"
113
+ role="figure"
114
+ aria-label={
115
+ /* translators: Accessibility text for the link preview when editing a link. */
116
+ __( 'Link information' )
117
+ }
118
+ >
111
119
  <span
112
120
  className={ clsx(
113
121
  'block-editor-link-control__search-item-icon',
@@ -149,6 +157,7 @@ export default function LinkPreview( {
149
157
  label={ __( 'Edit link' ) }
150
158
  onClick={ onEditClick }
151
159
  size="compact"
160
+ showTooltip={ ! showIconLabels }
152
161
  />
153
162
  { hasUnlinkControl && (
154
163
  <Button
@@ -156,19 +165,17 @@ export default function LinkPreview( {
156
165
  label={ __( 'Remove link' ) }
157
166
  onClick={ onRemove }
158
167
  size="compact"
168
+ showTooltip={ ! showIconLabels }
159
169
  />
160
170
  ) }
161
171
  <Button
162
172
  icon={ copySmall }
163
- label={ sprintf(
164
- // Translators: %s is a placeholder for the link URL and an optional colon, (if a Link URL is present).
165
- __( 'Copy link%s' ), // Ends up looking like "Copy link: https://example.com".
166
- isEmptyURL || showIconLabels ? '' : ': ' + value.url
167
- ) }
173
+ label={ __( 'Copy link' ) }
168
174
  ref={ ref }
169
175
  accessibleWhenDisabled
170
176
  disabled={ isEmptyURL }
171
177
  size="compact"
178
+ showTooltip={ ! showIconLabels }
172
179
  />
173
180
  <ViewerSlot fillProps={ value } />
174
181
  </div>