@wordpress/block-editor 12.20.0 → 12.21.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 (471) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/block-actions/index.js +45 -32
  3. package/build/components/block-actions/index.js.map +1 -1
  4. package/build/components/block-bindings-toolbar-indicator/index.js +25 -0
  5. package/build/components/block-bindings-toolbar-indicator/index.js.map +1 -0
  6. package/build/components/block-edit/context.js +2 -1
  7. package/build/components/block-edit/context.js.map +1 -1
  8. package/build/components/block-edit/index.js +8 -3
  9. package/build/components/block-edit/index.js.map +1 -1
  10. package/build/components/block-inspector/index.js +5 -4
  11. package/build/components/block-inspector/index.js.map +1 -1
  12. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  13. package/build/components/block-list/block-list-item.native.js +1 -1
  14. package/build/components/block-list/block-list-item.native.js.map +1 -1
  15. package/build/components/block-list/block-outline.native.js +23 -7
  16. package/build/components/block-list/block-outline.native.js.map +1 -1
  17. package/build/components/block-list/block-selection-button.native.js.map +1 -1
  18. package/build/components/block-list/block.native.js +0 -3
  19. package/build/components/block-list/block.native.js.map +1 -1
  20. package/build/components/block-list/use-block-props/index.js +8 -1
  21. package/build/components/block-list/use-block-props/index.js.map +1 -1
  22. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
  23. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  24. package/build/components/block-mover/index.native.js.map +1 -1
  25. package/build/components/block-popover/cover.js +68 -0
  26. package/build/components/block-popover/cover.js.map +1 -0
  27. package/build/components/block-popover/drop-zone.js +2 -3
  28. package/build/components/block-popover/drop-zone.js.map +1 -1
  29. package/build/components/block-popover/index.js +1 -19
  30. package/build/components/block-popover/index.js.map +1 -1
  31. package/build/components/block-preview/index.js +2 -1
  32. package/build/components/block-preview/index.js.map +1 -1
  33. package/build/components/block-removal-warning-modal/index.js +2 -4
  34. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  35. package/build/components/block-rename/modal.js.map +1 -1
  36. package/build/components/block-settings-menu/block-settings-dropdown.js +12 -10
  37. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  38. package/build/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  39. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  40. package/build/components/block-toolbar/index.js +21 -10
  41. package/build/components/block-toolbar/index.js.map +1 -1
  42. package/build/components/block-toolbar/shuffle.js +89 -0
  43. package/build/components/block-toolbar/shuffle.js.map +1 -0
  44. package/build/components/block-toolbar/use-has-block-toolbar.js +43 -0
  45. package/build/components/block-toolbar/use-has-block-toolbar.js.map +1 -0
  46. package/build/components/block-tools/block-selection-button.js +5 -1
  47. package/build/components/block-tools/block-selection-button.js.map +1 -1
  48. package/build/components/block-tools/empty-block-inserter.js +2 -5
  49. package/build/components/block-tools/empty-block-inserter.js.map +1 -1
  50. package/build/components/block-tools/index.js +9 -26
  51. package/build/components/block-tools/index.js.map +1 -1
  52. package/build/components/block-tools/use-show-block-tools.js +60 -0
  53. package/build/components/block-tools/use-show-block-tools.js.map +1 -0
  54. package/build/components/caption/index.native.js.map +1 -1
  55. package/build/components/child-layout-control/index.js.map +1 -1
  56. package/build/components/color-palette/control.js.map +1 -1
  57. package/build/components/colors-gradients/control.js +1 -1
  58. package/build/components/colors-gradients/control.js.map +1 -1
  59. package/build/components/global-styles/border-panel.js +21 -8
  60. package/build/components/global-styles/border-panel.js.map +1 -1
  61. package/build/components/global-styles/color-panel.js +1 -1
  62. package/build/components/global-styles/color-panel.js.map +1 -1
  63. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  64. package/build/components/global-styles/index.js +6 -0
  65. package/build/components/global-styles/index.js.map +1 -1
  66. package/build/components/global-styles/shadow-panel-components.js +80 -23
  67. package/build/components/global-styles/shadow-panel-components.js.map +1 -1
  68. package/build/components/global-styles/typography-utils.js +7 -5
  69. package/build/components/global-styles/typography-utils.js.map +1 -1
  70. package/build/components/global-styles/use-global-styles-output.js +15 -15
  71. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  72. package/build/components/global-styles/utils.js +1 -1
  73. package/build/components/global-styles/utils.js.map +1 -1
  74. package/build/components/grid-visualizer/grid-item-resizer.js +77 -0
  75. package/build/components/grid-visualizer/grid-item-resizer.js.map +1 -0
  76. package/build/components/grid-visualizer/grid-visualizer.js +81 -0
  77. package/build/components/grid-visualizer/grid-visualizer.js.map +1 -0
  78. package/build/components/grid-visualizer/index.js +20 -0
  79. package/build/components/grid-visualizer/index.js.map +1 -0
  80. package/build/components/grid-visualizer/utils.js +10 -0
  81. package/build/components/grid-visualizer/utils.js.map +1 -0
  82. package/build/components/iframe/index.js +61 -16
  83. package/build/components/iframe/index.js.map +1 -1
  84. package/build/components/index.native.js +7 -0
  85. package/build/components/index.native.js.map +1 -1
  86. package/build/components/inner-blocks/use-nested-settings-update.js +8 -2
  87. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  88. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  89. package/build/components/inserter/menu.js +9 -3
  90. package/build/components/inserter/menu.js.map +1 -1
  91. package/build/components/inserter/menu.native.js.map +1 -1
  92. package/build/components/inserter/mobile-tab-navigation.js +1 -1
  93. package/build/components/inserter/mobile-tab-navigation.js.map +1 -1
  94. package/build/components/inserter/search-results.js +3 -2
  95. package/build/components/inserter/search-results.js.map +1 -1
  96. package/build/components/inserter/tabs.js +2 -1
  97. package/build/components/inserter/tabs.js.map +1 -1
  98. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  99. package/build/components/inspector-controls-tabs/index.js +1 -1
  100. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  101. package/build/components/inspector-controls-tabs/styles-tab.js +1 -1
  102. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  103. package/build/components/link-control/link-preview.js +4 -1
  104. package/build/components/link-control/link-preview.js.map +1 -1
  105. package/build/components/link-control/search-input.js.map +1 -1
  106. package/build/components/list-view/block-select-button.js +10 -2
  107. package/build/components/list-view/block-select-button.js.map +1 -1
  108. package/build/components/list-view/branch.js.map +1 -1
  109. package/build/components/list-view/drop-indicator.js.map +1 -1
  110. package/build/components/list-view/index.js.map +1 -1
  111. package/build/components/list-view/use-clipboard-handler.js +2 -1
  112. package/build/components/list-view/use-clipboard-handler.js.map +1 -1
  113. package/build/components/panel-color-settings/index.js.map +1 -1
  114. package/build/components/provider/index.js.map +1 -1
  115. package/build/components/resizable-box-popover/index.js +3 -5
  116. package/build/components/resizable-box-popover/index.js.map +1 -1
  117. package/build/components/responsive-block-control/index.js +1 -1
  118. package/build/components/responsive-block-control/index.js.map +1 -1
  119. package/build/components/rich-text/index.js +46 -26
  120. package/build/components/rich-text/index.js.map +1 -1
  121. package/build/components/rich-text/use-enter.js +3 -0
  122. package/build/components/rich-text/use-enter.js.map +1 -1
  123. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  124. package/build/components/url-popover/index.js +3 -3
  125. package/build/components/url-popover/index.js.map +1 -1
  126. package/build/components/writing-flow/use-clipboard-handler.js +2 -1
  127. package/build/components/writing-flow/use-clipboard-handler.js.map +1 -1
  128. package/build/components/writing-flow/utils.js +23 -6
  129. package/build/components/writing-flow/utils.js.map +1 -1
  130. package/build/hooks/background.js.map +1 -1
  131. package/build/hooks/block-hooks.js +34 -8
  132. package/build/hooks/block-hooks.js.map +1 -1
  133. package/build/hooks/border.js +6 -4
  134. package/build/hooks/border.js.map +1 -1
  135. package/build/hooks/dimensions.js +3 -4
  136. package/build/hooks/dimensions.js.map +1 -1
  137. package/build/hooks/font-size.js +6 -7
  138. package/build/hooks/font-size.js.map +1 -1
  139. package/build/hooks/index.js +1 -1
  140. package/build/hooks/index.js.map +1 -1
  141. package/build/hooks/layout-child.js +39 -0
  142. package/build/hooks/layout-child.js.map +1 -1
  143. package/build/hooks/layout.js +11 -4
  144. package/build/hooks/layout.js.map +1 -1
  145. package/build/hooks/line-height.js.map +1 -1
  146. package/build/hooks/spacing-visualizer.js +115 -0
  147. package/build/hooks/spacing-visualizer.js.map +1 -0
  148. package/build/hooks/use-bindings-attributes.js +171 -48
  149. package/build/hooks/use-bindings-attributes.js.map +1 -1
  150. package/build/hooks/use-typography-props.js +1 -2
  151. package/build/hooks/use-typography-props.js.map +1 -1
  152. package/build/layouts/grid.js +6 -2
  153. package/build/layouts/grid.js.map +1 -1
  154. package/build/private-apis.js +7 -3
  155. package/build/private-apis.js.map +1 -1
  156. package/build/store/actions.js +42 -12
  157. package/build/store/actions.js.map +1 -1
  158. package/build/store/private-actions.js +29 -55
  159. package/build/store/private-actions.js.map +1 -1
  160. package/build/store/private-selectors.js +0 -8
  161. package/build/store/private-selectors.js.map +1 -1
  162. package/build/store/reducer.js +3 -20
  163. package/build/store/reducer.js.map +1 -1
  164. package/build/store/selectors.js +27 -15
  165. package/build/store/selectors.js.map +1 -1
  166. package/build/utils/calculate-scale.js +17 -0
  167. package/build/utils/calculate-scale.js.map +1 -0
  168. package/build-module/components/block-actions/index.js +45 -32
  169. package/build-module/components/block-actions/index.js.map +1 -1
  170. package/build-module/components/block-bindings-toolbar-indicator/index.js +18 -0
  171. package/build-module/components/block-bindings-toolbar-indicator/index.js.map +1 -0
  172. package/build-module/components/block-edit/context.js +1 -0
  173. package/build-module/components/block-edit/context.js.map +1 -1
  174. package/build-module/components/block-edit/index.js +9 -4
  175. package/build-module/components/block-edit/index.js.map +1 -1
  176. package/build-module/components/block-inspector/index.js +6 -5
  177. package/build-module/components/block-inspector/index.js.map +1 -1
  178. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  179. package/build-module/components/block-list/block-list-item.native.js +1 -1
  180. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  181. package/build-module/components/block-list/block-outline.native.js +23 -7
  182. package/build-module/components/block-list/block-outline.native.js.map +1 -1
  183. package/build-module/components/block-list/block-selection-button.native.js.map +1 -1
  184. package/build-module/components/block-list/block.native.js +0 -3
  185. package/build-module/components/block-list/block.native.js.map +1 -1
  186. package/build-module/components/block-list/use-block-props/index.js +9 -2
  187. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  188. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
  189. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  190. package/build-module/components/block-mover/index.native.js.map +1 -1
  191. package/build-module/components/block-popover/cover.js +60 -0
  192. package/build-module/components/block-popover/cover.js.map +1 -0
  193. package/build-module/components/block-popover/drop-zone.js +2 -3
  194. package/build-module/components/block-popover/drop-zone.js.map +1 -1
  195. package/build-module/components/block-popover/index.js +1 -19
  196. package/build-module/components/block-popover/index.js.map +1 -1
  197. package/build-module/components/block-preview/index.js +2 -1
  198. package/build-module/components/block-preview/index.js.map +1 -1
  199. package/build-module/components/block-removal-warning-modal/index.js +3 -5
  200. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  201. package/build-module/components/block-rename/modal.js.map +1 -1
  202. package/build-module/components/block-settings-menu/block-settings-dropdown.js +12 -10
  203. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  204. package/build-module/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  205. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  206. package/build-module/components/block-toolbar/index.js +21 -11
  207. package/build-module/components/block-toolbar/index.js.map +1 -1
  208. package/build-module/components/block-toolbar/shuffle.js +82 -0
  209. package/build-module/components/block-toolbar/shuffle.js.map +1 -0
  210. package/build-module/components/block-toolbar/use-has-block-toolbar.js +36 -0
  211. package/build-module/components/block-toolbar/use-has-block-toolbar.js.map +1 -0
  212. package/build-module/components/block-tools/block-selection-button.js +5 -1
  213. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  214. package/build-module/components/block-tools/empty-block-inserter.js +2 -5
  215. package/build-module/components/block-tools/empty-block-inserter.js.map +1 -1
  216. package/build-module/components/block-tools/index.js +9 -26
  217. package/build-module/components/block-tools/index.js.map +1 -1
  218. package/build-module/components/block-tools/use-show-block-tools.js +54 -0
  219. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -0
  220. package/build-module/components/caption/index.native.js.map +1 -1
  221. package/build-module/components/child-layout-control/index.js.map +1 -1
  222. package/build-module/components/color-palette/control.js.map +1 -1
  223. package/build-module/components/colors-gradients/control.js +1 -1
  224. package/build-module/components/colors-gradients/control.js.map +1 -1
  225. package/build-module/components/global-styles/border-panel.js +22 -10
  226. package/build-module/components/global-styles/border-panel.js.map +1 -1
  227. package/build-module/components/global-styles/color-panel.js +1 -1
  228. package/build-module/components/global-styles/color-panel.js.map +1 -1
  229. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  230. package/build-module/components/global-styles/index.js +1 -1
  231. package/build-module/components/global-styles/index.js.map +1 -1
  232. package/build-module/components/global-styles/shadow-panel-components.js +82 -24
  233. package/build-module/components/global-styles/shadow-panel-components.js.map +1 -1
  234. package/build-module/components/global-styles/typography-utils.js +7 -5
  235. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  236. package/build-module/components/global-styles/use-global-styles-output.js +16 -16
  237. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  238. package/build-module/components/global-styles/utils.js +2 -2
  239. package/build-module/components/global-styles/utils.js.map +1 -1
  240. package/build-module/components/grid-visualizer/grid-item-resizer.js +69 -0
  241. package/build-module/components/grid-visualizer/grid-item-resizer.js.map +1 -0
  242. package/build-module/components/grid-visualizer/grid-visualizer.js +73 -0
  243. package/build-module/components/grid-visualizer/grid-visualizer.js.map +1 -0
  244. package/build-module/components/grid-visualizer/index.js +3 -0
  245. package/build-module/components/grid-visualizer/index.js.map +1 -0
  246. package/build-module/components/grid-visualizer/utils.js +4 -0
  247. package/build-module/components/grid-visualizer/utils.js.map +1 -0
  248. package/build-module/components/iframe/index.js +61 -16
  249. package/build-module/components/iframe/index.js.map +1 -1
  250. package/build-module/components/index.native.js +1 -1
  251. package/build-module/components/index.native.js.map +1 -1
  252. package/build-module/components/inner-blocks/use-nested-settings-update.js +8 -2
  253. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  254. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  255. package/build-module/components/inserter/menu.js +9 -3
  256. package/build-module/components/inserter/menu.js.map +1 -1
  257. package/build-module/components/inserter/menu.native.js.map +1 -1
  258. package/build-module/components/inserter/mobile-tab-navigation.js +1 -1
  259. package/build-module/components/inserter/mobile-tab-navigation.js.map +1 -1
  260. package/build-module/components/inserter/search-results.js +3 -2
  261. package/build-module/components/inserter/search-results.js.map +1 -1
  262. package/build-module/components/inserter/tabs.js +2 -1
  263. package/build-module/components/inserter/tabs.js.map +1 -1
  264. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  265. package/build-module/components/inspector-controls-tabs/index.js +1 -1
  266. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  267. package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -2
  268. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  269. package/build-module/components/link-control/link-preview.js +5 -2
  270. package/build-module/components/link-control/link-preview.js.map +1 -1
  271. package/build-module/components/link-control/search-input.js.map +1 -1
  272. package/build-module/components/list-view/block-select-button.js +11 -3
  273. package/build-module/components/list-view/block-select-button.js.map +1 -1
  274. package/build-module/components/list-view/branch.js.map +1 -1
  275. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  276. package/build-module/components/list-view/index.js.map +1 -1
  277. package/build-module/components/list-view/use-clipboard-handler.js +3 -2
  278. package/build-module/components/list-view/use-clipboard-handler.js.map +1 -1
  279. package/build-module/components/panel-color-settings/index.js.map +1 -1
  280. package/build-module/components/provider/index.js.map +1 -1
  281. package/build-module/components/resizable-box-popover/index.js +3 -5
  282. package/build-module/components/resizable-box-popover/index.js.map +1 -1
  283. package/build-module/components/responsive-block-control/index.js +1 -1
  284. package/build-module/components/responsive-block-control/index.js.map +1 -1
  285. package/build-module/components/rich-text/index.js +47 -28
  286. package/build-module/components/rich-text/index.js.map +1 -1
  287. package/build-module/components/rich-text/use-enter.js +3 -0
  288. package/build-module/components/rich-text/use-enter.js.map +1 -1
  289. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  290. package/build-module/components/url-popover/index.js +3 -3
  291. package/build-module/components/url-popover/index.js.map +1 -1
  292. package/build-module/components/writing-flow/use-clipboard-handler.js +3 -2
  293. package/build-module/components/writing-flow/use-clipboard-handler.js.map +1 -1
  294. package/build-module/components/writing-flow/utils.js +22 -7
  295. package/build-module/components/writing-flow/utils.js.map +1 -1
  296. package/build-module/hooks/background.js.map +1 -1
  297. package/build-module/hooks/block-hooks.js +34 -8
  298. package/build-module/hooks/block-hooks.js.map +1 -1
  299. package/build-module/hooks/border.js +7 -5
  300. package/build-module/hooks/border.js.map +1 -1
  301. package/build-module/hooks/dimensions.js +1 -2
  302. package/build-module/hooks/dimensions.js.map +1 -1
  303. package/build-module/hooks/font-size.js +7 -8
  304. package/build-module/hooks/font-size.js.map +1 -1
  305. package/build-module/hooks/index.js +1 -1
  306. package/build-module/hooks/index.js.map +1 -1
  307. package/build-module/hooks/layout-child.js +39 -0
  308. package/build-module/hooks/layout-child.js.map +1 -1
  309. package/build-module/hooks/layout.js +11 -4
  310. package/build-module/hooks/layout.js.map +1 -1
  311. package/build-module/hooks/line-height.js.map +1 -1
  312. package/build-module/hooks/spacing-visualizer.js +106 -0
  313. package/build-module/hooks/spacing-visualizer.js.map +1 -0
  314. package/build-module/hooks/use-bindings-attributes.js +172 -49
  315. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  316. package/build-module/hooks/use-typography-props.js +2 -3
  317. package/build-module/hooks/use-typography-props.js.map +1 -1
  318. package/build-module/layouts/grid.js +6 -2
  319. package/build-module/layouts/grid.js.map +1 -1
  320. package/build-module/private-apis.js +7 -3
  321. package/build-module/private-apis.js.map +1 -1
  322. package/build-module/store/actions.js +42 -12
  323. package/build-module/store/actions.js.map +1 -1
  324. package/build-module/store/private-actions.js +29 -54
  325. package/build-module/store/private-actions.js.map +1 -1
  326. package/build-module/store/private-selectors.js +0 -6
  327. package/build-module/store/private-selectors.js.map +1 -1
  328. package/build-module/store/reducer.js +3 -20
  329. package/build-module/store/reducer.js.map +1 -1
  330. package/build-module/store/selectors.js +23 -13
  331. package/build-module/store/selectors.js.map +1 -1
  332. package/build-module/utils/calculate-scale.js +11 -0
  333. package/build-module/utils/calculate-scale.js.map +1 -0
  334. package/build-style/content-rtl.css +8 -2
  335. package/build-style/content.css +8 -2
  336. package/build-style/default-editor-styles-rtl.css +1 -0
  337. package/build-style/default-editor-styles.css +1 -0
  338. package/build-style/style-rtl.css +113 -22
  339. package/build-style/style.css +113 -22
  340. package/package.json +31 -31
  341. package/src/components/block-actions/index.js +57 -47
  342. package/src/components/block-bindings-toolbar-indicator/index.js +20 -0
  343. package/src/components/block-bindings-toolbar-indicator/style.scss +14 -0
  344. package/src/components/block-draggable/test/index.native.js +2 -2
  345. package/src/components/block-edit/context.js +1 -0
  346. package/src/components/block-edit/index.js +5 -1
  347. package/src/components/block-inspector/index.js +7 -5
  348. package/src/components/block-list/block-invalid-warning.native.js +1 -1
  349. package/src/components/block-list/block-list-item.native.js +1 -1
  350. package/src/components/block-list/block-outline.native.js +36 -21
  351. package/src/components/block-list/block-selection-button.native.js +1 -3
  352. package/src/components/block-list/block.native.js +0 -3
  353. package/src/components/block-list/content.scss +5 -1
  354. package/src/components/block-list/test/block-outline.native.js +255 -0
  355. package/src/components/block-list/use-block-props/index.js +12 -2
  356. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -7
  357. package/src/components/block-mover/index.native.js +1 -1
  358. package/src/components/block-popover/cover.js +63 -0
  359. package/src/components/block-popover/drop-zone.js +3 -4
  360. package/src/components/block-popover/index.js +1 -28
  361. package/src/components/block-preview/index.js +3 -1
  362. package/src/components/block-removal-warning-modal/index.js +5 -19
  363. package/src/components/block-rename/modal.js +1 -1
  364. package/src/components/block-settings-menu/block-settings-dropdown.js +12 -9
  365. package/src/components/block-switcher/block-transformations-menu.native.js +1 -1
  366. package/src/components/block-toolbar/block-toolbar-menu.native.js +2 -2
  367. package/src/components/block-toolbar/index.js +19 -15
  368. package/src/components/block-toolbar/shuffle.js +93 -0
  369. package/src/components/block-toolbar/use-has-block-toolbar.js +49 -0
  370. package/src/components/block-tools/block-selection-button.js +4 -0
  371. package/src/components/block-tools/empty-block-inserter.js +3 -6
  372. package/src/components/block-tools/index.js +13 -36
  373. package/src/components/block-tools/use-show-block-tools.js +73 -0
  374. package/src/components/caption/index.native.js +1 -1
  375. package/src/components/child-layout-control/index.js +1 -1
  376. package/src/components/color-palette/control.js +1 -1
  377. package/src/components/colors-gradients/control.js +1 -1
  378. package/src/components/colors-gradients/test/control.js +2 -2
  379. package/src/components/contrast-checker/test/index.js +10 -10
  380. package/src/components/default-block-appender/content.scss +5 -2
  381. package/src/components/global-styles/border-panel.js +35 -24
  382. package/src/components/global-styles/color-panel.js +1 -1
  383. package/src/components/global-styles/image-settings-panel.js +1 -1
  384. package/src/components/global-styles/index.js +5 -1
  385. package/src/components/global-styles/shadow-panel-components.js +92 -23
  386. package/src/components/global-styles/style.scss +33 -10
  387. package/src/components/global-styles/test/typography-utils.js +231 -81
  388. package/src/components/global-styles/typography-utils.js +10 -7
  389. package/src/components/global-styles/use-global-styles-output.js +14 -16
  390. package/src/components/global-styles/utils.js +2 -8
  391. package/src/components/grid-visualizer/grid-item-resizer.js +100 -0
  392. package/src/components/grid-visualizer/grid-visualizer.js +81 -0
  393. package/src/components/grid-visualizer/index.js +2 -0
  394. package/src/components/grid-visualizer/style.scss +33 -0
  395. package/src/components/grid-visualizer/utils.js +5 -0
  396. package/src/components/iframe/index.js +78 -31
  397. package/src/components/index.native.js +1 -0
  398. package/src/components/inner-blocks/use-nested-settings-update.js +12 -2
  399. package/src/components/inserter/media-tab/media-preview.js +1 -1
  400. package/src/components/inserter/menu.js +10 -4
  401. package/src/components/inserter/menu.native.js +3 -3
  402. package/src/components/inserter/mobile-tab-navigation.js +1 -1
  403. package/src/components/inserter/search-results.js +2 -1
  404. package/src/components/inserter/style.scss +10 -0
  405. package/src/components/inserter/tabs.js +2 -1
  406. package/src/components/inspector-controls/block-support-tools-panel.js +2 -2
  407. package/src/components/inspector-controls-tabs/index.js +1 -1
  408. package/src/components/inspector-controls-tabs/styles-tab.js +2 -2
  409. package/src/components/line-height-control/test/index.js +1 -1
  410. package/src/components/link-control/link-preview.js +9 -2
  411. package/src/components/link-control/search-input.js +1 -1
  412. package/src/components/link-control/style.scss +9 -0
  413. package/src/components/list-view/block-select-button.js +16 -2
  414. package/src/components/list-view/branch.js +1 -1
  415. package/src/components/list-view/drop-indicator.js +1 -1
  416. package/src/components/list-view/index.js +1 -1
  417. package/src/components/list-view/style.scss +8 -0
  418. package/src/components/list-view/use-clipboard-handler.js +3 -2
  419. package/src/components/panel-color-settings/index.js +1 -1
  420. package/src/components/panel-color-settings/test/index.js +3 -3
  421. package/src/components/provider/index.js +1 -4
  422. package/src/components/resizable-box-popover/index.js +4 -6
  423. package/src/components/responsive-block-control/README.md +4 -4
  424. package/src/components/responsive-block-control/index.js +1 -1
  425. package/src/components/responsive-block-control/test/index.js +5 -5
  426. package/src/components/rich-text/index.js +76 -53
  427. package/src/components/rich-text/use-enter.js +4 -0
  428. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +4 -4
  429. package/src/components/url-popover/index.js +5 -5
  430. package/src/components/url-popover/style.scss +1 -0
  431. package/src/components/writing-flow/use-clipboard-handler.js +3 -2
  432. package/src/components/writing-flow/utils.js +31 -16
  433. package/src/hooks/background.js +1 -1
  434. package/src/hooks/block-hooks.js +47 -9
  435. package/src/hooks/block-hooks.scss +6 -0
  436. package/src/hooks/border.js +16 -4
  437. package/src/hooks/dimensions.js +1 -2
  438. package/src/hooks/font-size.js +7 -12
  439. package/src/hooks/index.js +1 -0
  440. package/src/hooks/layout-child.js +38 -0
  441. package/src/hooks/layout.js +12 -1
  442. package/src/hooks/line-height.js +1 -1
  443. package/src/hooks/spacing-visualizer.js +126 -0
  444. package/src/hooks/{padding.scss → spacing.scss} +1 -1
  445. package/src/hooks/use-bindings-attributes.js +215 -65
  446. package/src/hooks/use-typography-props.js +2 -8
  447. package/src/layouts/grid.js +8 -3
  448. package/src/private-apis.js +6 -2
  449. package/src/store/actions.js +56 -18
  450. package/src/store/private-actions.js +34 -79
  451. package/src/store/private-selectors.js +0 -8
  452. package/src/store/reducer.js +2 -23
  453. package/src/store/selectors.js +41 -46
  454. package/src/store/test/actions.js +0 -4
  455. package/src/style.scss +3 -1
  456. package/src/utils/calculate-scale.js +20 -0
  457. package/build/hooks/margin.js +0 -86
  458. package/build/hooks/margin.js.map +0 -1
  459. package/build/hooks/padding.js +0 -78
  460. package/build/hooks/padding.js.map +0 -1
  461. package/build/utils/use-can-block-toolbar-be-focused.js +0 -46
  462. package/build/utils/use-can-block-toolbar-be-focused.js.map +0 -1
  463. package/build-module/hooks/margin.js +0 -78
  464. package/build-module/hooks/margin.js.map +0 -1
  465. package/build-module/hooks/padding.js +0 -70
  466. package/build-module/hooks/padding.js.map +0 -1
  467. package/build-module/utils/use-can-block-toolbar-be-focused.js +0 -40
  468. package/build-module/utils/use-can-block-toolbar-be-focused.js.map +0 -1
  469. package/src/hooks/margin.js +0 -91
  470. package/src/hooks/padding.js +0 -82
  471. package/src/utils/use-can-block-toolbar-be-focused.js +0 -48
@@ -767,3 +767,13 @@ $block-inserter-tabs-height: 44px;
767
767
  }
768
768
  }
769
769
  }
770
+
771
+ .is-zoom-out {
772
+ .block-editor-inserter__menu {
773
+ display: flex;
774
+ }
775
+
776
+ .block-editor-inserter__patterns-category-dialog {
777
+ position: static;
778
+ }
779
+ }
@@ -29,13 +29,14 @@ const mediaTab = {
29
29
  };
30
30
 
31
31
  function InserterTabs( {
32
+ showBlocks = true,
32
33
  showPatterns = false,
33
34
  showMedia = false,
34
35
  onSelect,
35
36
  tabsContents,
36
37
  } ) {
37
38
  const tabs = [
38
- blocksTab,
39
+ showBlocks && blocksTab,
39
40
  showPatterns && patternsTab,
40
41
  showMedia && mediaTab,
41
42
  ].filter( Boolean );
@@ -68,8 +68,8 @@ export default function BlockSupportToolsPanel( { children, group, label } ) {
68
68
  resetAll={ resetAll }
69
69
  key={ panelId }
70
70
  panelId={ panelId }
71
- hasInnerWrapper={ true }
72
- shouldRenderPlaceholderItems={ true } // Required to maintain fills ordering.
71
+ hasInnerWrapper
72
+ shouldRenderPlaceholderItems // Required to maintain fills ordering.
73
73
  __experimentalFirstVisibleItemClass="first"
74
74
  __experimentalLastVisibleItemClass="last"
75
75
  dropdownMenuProps={ TOOLSPANEL_DROPDOWNMENU_PROPS }
@@ -35,7 +35,7 @@ export default function InspectorControlsTabs( {
35
35
 
36
36
  return (
37
37
  <div className="block-editor-block-inspector__tabs">
38
- <Tabs initialTabId={ initialTabName } key={ clientId }>
38
+ <Tabs defaultTabId={ initialTabName } key={ clientId }>
39
39
  <Tabs.TabList>
40
40
  { tabs.map( ( tab ) => (
41
41
  <Tabs.Tab
@@ -9,10 +9,10 @@ import { __ } from '@wordpress/i18n';
9
9
  */
10
10
  import BlockStyles from '../block-styles';
11
11
  import InspectorControls from '../inspector-controls';
12
- import { getBorderPanelLabel } from '../../hooks/border';
12
+ import { useBorderPanelLabel } from '../../hooks/border';
13
13
 
14
14
  const StylesTab = ( { blockName, clientId, hasBlockStyles } ) => {
15
- const borderPanelLabel = getBorderPanelLabel( { blockName } );
15
+ const borderPanelLabel = useBorderPanelLabel( { blockName } );
16
16
 
17
17
  return (
18
18
  <>
@@ -23,7 +23,7 @@ const ControlledLineHeightControl = () => {
23
23
  <LineHeightControl
24
24
  value={ value }
25
25
  onChange={ setValue }
26
- __nextHasNoMarginBottom={ true }
26
+ __nextHasNoMarginBottom
27
27
  />
28
28
  );
29
29
  };
@@ -16,8 +16,9 @@ import { useCopyToClipboard } from '@wordpress/compose';
16
16
  import { filterURLForDisplay, safeDecodeURI } from '@wordpress/url';
17
17
  import { Icon, globe, info, linkOff, edit, copySmall } from '@wordpress/icons';
18
18
  import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
19
- import { useDispatch } from '@wordpress/data';
19
+ import { useDispatch, useSelect } from '@wordpress/data';
20
20
  import { store as noticesStore } from '@wordpress/notices';
21
+ import { store as preferencesStore } from '@wordpress/preferences';
21
22
 
22
23
  /**
23
24
  * Internal dependencies
@@ -33,6 +34,12 @@ export default function LinkPreview( {
33
34
  hasUnlinkControl = false,
34
35
  onRemove,
35
36
  } ) {
37
+ const showIconLabels = useSelect(
38
+ ( select ) =>
39
+ select( preferencesStore ).get( 'core', 'showIconLabels' ),
40
+ []
41
+ );
42
+
36
43
  // Avoid fetching if rich previews are not desired.
37
44
  const showRichPreviews = hasRichPreviews ? value?.url : null;
38
45
 
@@ -139,7 +146,7 @@ export default function LinkPreview( {
139
146
  label={ sprintf(
140
147
  // Translators: %s is a placeholder for the link URL and an optional colon, (if a Link URL is present).
141
148
  __( 'Copy link%s' ), // Ends up looking like "Copy link: https://example.com".
142
- isEmptyURL ? '' : ': ' + value.url
149
+ isEmptyURL || showIconLabels ? '' : ': ' + value.url
143
150
  ) }
144
151
  ref={ ref }
145
152
  disabled={ isEmptyURL }
@@ -130,7 +130,7 @@ const LinkControlSearchInput = forwardRef(
130
130
  showSuggestions ? handleRenderSuggestions : null
131
131
  }
132
132
  __experimentalFetchLinkSuggestions={ searchHandler }
133
- __experimentalHandleURLSuggestions={ true }
133
+ __experimentalHandleURLSuggestions
134
134
  __experimentalShowInitialSuggestions={
135
135
  showInitialSuggestions
136
136
  }
@@ -34,6 +34,15 @@ $block-editor-link-control-number-of-actions: 1;
34
34
  content: attr(aria-label);
35
35
  }
36
36
  }
37
+
38
+ .block-editor-link-control__search-item-top {
39
+ gap: $grid-unit-10;
40
+
41
+ .components-button.has-icon {
42
+ min-width: inherit;
43
+ width: min-content;
44
+ }
45
+ }
37
46
  }
38
47
  }
39
48
 
@@ -14,7 +14,12 @@ import {
14
14
  Tooltip,
15
15
  } from '@wordpress/components';
16
16
  import { forwardRef } from '@wordpress/element';
17
- import { Icon, lockSmall as lock, pinSmall } from '@wordpress/icons';
17
+ import {
18
+ Icon,
19
+ connection,
20
+ lockSmall as lock,
21
+ pinSmall,
22
+ } from '@wordpress/icons';
18
23
  import { SPACE, ENTER, BACKSPACE, DELETE } from '@wordpress/keycodes';
19
24
  import { useSelect, useDispatch } from '@wordpress/data';
20
25
  import { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';
@@ -32,11 +37,12 @@ import { useBlockLock } from '../block-lock';
32
37
  import { store as blockEditorStore } from '../../store';
33
38
  import useListViewImages from './use-list-view-images';
34
39
  import { useListViewContext } from './context';
40
+ import { canBindBlock } from '../../hooks/use-bindings-attributes';
35
41
 
36
42
  function ListViewBlockSelectButton(
37
43
  {
38
44
  className,
39
- block: { clientId },
45
+ block: { clientId, name: blockName },
40
46
  onClick,
41
47
  onContextMenu,
42
48
  onMouseDown,
@@ -66,6 +72,7 @@ function ListViewBlockSelectButton(
66
72
  getBlockRootClientId,
67
73
  getBlockOrder,
68
74
  getBlocksByClientId,
75
+ getBlockAttributes,
69
76
  canRemoveBlocks,
70
77
  } = useSelect( blockEditorStore );
71
78
  const { duplicateBlocks, multiSelect, removeBlocks } =
@@ -75,6 +82,8 @@ function ListViewBlockSelectButton(
75
82
  const images = useListViewImages( { clientId, isExpanded } );
76
83
  const { rootClientId } = useListViewContext();
77
84
 
85
+ const isConnected = getBlockAttributes( clientId )?.metadata?.bindings;
86
+
78
87
  const positionLabel = blockInformation?.positionLabel
79
88
  ? sprintf(
80
89
  // translators: 1: Position of selected block, e.g. "Sticky" or "Fixed".
@@ -278,6 +287,11 @@ function ListViewBlockSelectButton(
278
287
  </Truncate>
279
288
  </span>
280
289
  ) }
290
+ { isConnected && canBindBlock( blockName ) && (
291
+ <span className="block-editor-list-view-block-select-button__bindings">
292
+ <Icon icon={ connection } />
293
+ </span>
294
+ ) }
281
295
  { positionLabel && isSticky && (
282
296
  <Tooltip text={ positionLabel }>
283
297
  <Icon icon={ pinSmall } />
@@ -251,7 +251,7 @@ function ListViewBranch( props ) {
251
251
  level={ level }
252
252
  setSize={ rowCount }
253
253
  positionInSet={ rowCount }
254
- isExpanded={ true }
254
+ isExpanded
255
255
  >
256
256
  <TreeGridCell>
257
257
  { ( treeGridCellProps ) => (
@@ -298,7 +298,7 @@ export default function ListViewDropIndicatorPreview( {
298
298
  className="block-editor-list-view-drop-indicator--preview"
299
299
  variant="unstyled"
300
300
  flip={ false }
301
- resize={ true }
301
+ resize
302
302
  >
303
303
  <div
304
304
  style={ style }
@@ -336,7 +336,7 @@ function ListViewComponent(
336
336
  description && `block-editor-list-view-description-${ instanceId }`;
337
337
 
338
338
  return (
339
- <AsyncModeProvider value={ true }>
339
+ <AsyncModeProvider value>
340
340
  <ListViewDropIndicatorPreview
341
341
  draggedBlockClientId={ firstDraggedBlockClientId }
342
342
  listViewRef={ elementRef }
@@ -557,3 +557,11 @@ $block-navigation-max-indent: 8;
557
557
  .list-view-appender__description {
558
558
  display: none;
559
559
  }
560
+
561
+ .block-editor-list-view-block-select-button__bindings svg g {
562
+ stroke: var(--wp-bound-block-color);
563
+ fill: transparent;
564
+ stroke-width: 1.5;
565
+ stroke-linecap: round;
566
+ stroke-linejoin: round;
567
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useDispatch, useSelect } from '@wordpress/data';
4
+ import { useDispatch, useRegistry, useSelect } from '@wordpress/data';
5
5
  import { useRefEffect } from '@wordpress/compose';
6
6
 
7
7
  /**
@@ -15,6 +15,7 @@ import { getPasteBlocks, setClipboardBlocks } from '../writing-flow/utils';
15
15
  // This hook borrows from useClipboardHandler in ../writing-flow/use-clipboard-handler.js
16
16
  // and adds behaviour for the list view, while skipping partial selection.
17
17
  export default function useClipboardHandler( { selectBlock } ) {
18
+ const registry = useRegistry();
18
19
  const {
19
20
  getBlockOrder,
20
21
  getBlockRootClientId,
@@ -106,7 +107,7 @@ export default function useClipboardHandler( { selectBlock } ) {
106
107
 
107
108
  notifyCopy( event.type, selectedBlockClientIds );
108
109
  const blocks = getBlocksByClientId( selectedBlockClientIds );
109
- setClipboardBlocks( event, blocks );
110
+ setClipboardBlocks( event, blocks, registry );
110
111
  }
111
112
 
112
113
  if ( event.type === 'cut' ) {
@@ -19,7 +19,7 @@ const PanelColorSettings = ( { colorSettings, ...props } ) => {
19
19
  <PanelColorGradientSettings
20
20
  settings={ settings }
21
21
  gradients={ [] }
22
- disableCustomGradients={ true }
22
+ disableCustomGradients
23
23
  { ...props }
24
24
  />
25
25
  );
@@ -16,7 +16,7 @@ describe( 'PanelColorSettings', () => {
16
16
  <PanelColorSettings
17
17
  title="Test Title"
18
18
  colors={ [] }
19
- disableCustomColors={ true }
19
+ disableCustomColors
20
20
  colorSettings={ [
21
21
  {
22
22
  value: '#000',
@@ -39,7 +39,7 @@ describe( 'PanelColorSettings', () => {
39
39
  <PanelColorSettings
40
40
  title="Test Title"
41
41
  colors={ [] }
42
- disableCustomColors={ true }
42
+ disableCustomColors
43
43
  colorSettings={ [
44
44
  {
45
45
  value: '#000',
@@ -63,7 +63,7 @@ describe( 'PanelColorSettings', () => {
63
63
  <PanelColorSettings
64
64
  title="Test Title"
65
65
  colors={ [] }
66
- disableCustomColors={ true }
66
+ disableCustomColors
67
67
  colorSettings={ [
68
68
  {
69
69
  value: '#000',
@@ -57,10 +57,7 @@ export const ExperimentalBlockEditorProvider = withRegistryProvider(
57
57
 
58
58
  export const BlockEditorProvider = ( props ) => {
59
59
  return (
60
- <ExperimentalBlockEditorProvider
61
- { ...props }
62
- stripExperimentalSettings={ true }
63
- >
60
+ <ExperimentalBlockEditorProvider { ...props } stripExperimentalSettings>
64
61
  { props.children }
65
62
  </ExperimentalBlockEditorProvider>
66
63
  );
@@ -6,7 +6,7 @@ import { ResizableBox } from '@wordpress/components';
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
- import BlockPopover from '../block-popover';
9
+ import BlockPopoverCover from '../block-popover/cover';
10
10
 
11
11
  export default function ResizableBoxPopover( {
12
12
  clientId,
@@ -14,14 +14,12 @@ export default function ResizableBoxPopover( {
14
14
  ...props
15
15
  } ) {
16
16
  return (
17
- <BlockPopover
17
+ <BlockPopoverCover
18
18
  clientId={ clientId }
19
- __unstableCoverTarget
20
- __unstablePopoverSlot="__unstable-block-tools-after"
21
- shift={ false }
19
+ __unstablePopoverSlot="block-toolbar"
22
20
  { ...props }
23
21
  >
24
22
  <ResizableBox { ...resizableBoxProps } />
25
- </BlockPopover>
23
+ </BlockPopoverCover>
26
24
  );
27
25
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  `ResponsiveBlockControl` provides a standardised interface for the creation of Block controls that require **different settings per viewport** (ie: "responsive" settings).
4
4
 
5
- For example, imagine your Block provides a control which affords the ability to change a "padding" value used in the Block display. Consider that whilst this setting may work well on "large" screens, the same value may not work well on smaller screens (it may be too large for example). As a result, you now need to provide a padding control _per viewport/screensize_.
5
+ For example, imagine your Block provides a control which affords the ability to change a "padding" value used in the Block display. Consider that whilst this setting may work well on "large" screens, the same value may not work well on smaller screens (it may be too large for example). As a result, you now need to provide a padding control _per viewport/screen size_.
6
6
 
7
7
  `ResponsiveBlockControl` provides a standardised component for the creation of such interfaces within Gutenberg.
8
8
 
@@ -25,7 +25,7 @@ import { useState } from 'react';
25
25
  import { registerBlockType } from '@wordpress/blocks';
26
26
  import {
27
27
  InspectorControls,
28
- ResponsiveBlockControl,
28
+ __experimentalResponsiveBlockControl as ResponsiveBlockControl,
29
29
  } from '@wordpress/block-editor';
30
30
  import {
31
31
  DimensionControl,
@@ -194,7 +194,7 @@ const renderResponsiveControls = ( viewports ) => {
194
194
  ### `toggleLabel`
195
195
 
196
196
  - **Type:** `String`
197
- - **Default:** `Use the same %s on all screensizes.` (where "%s" is the `property` prop - see above )
197
+ - **Default:** `Use the same %s on all screen sizes.` (where "%s" is the `property` prop - see above )
198
198
  - **Required:** `false`
199
199
 
200
200
  Optional label used for the toggle control which switches the interface between showing responsive controls or not.
@@ -213,7 +213,7 @@ Optional label used for the toggle control which switches the interface between
213
213
 
214
214
  - **Required:** `false`
215
215
 
216
- Optional object describing the attributes of the default value. By default this is `All` which indicates the control will affect "all viewports/screensizes".
216
+ Optional object describing the attributes of the default value. By default this is `All` which indicates the control will affect "all viewports/screen sizes".
217
217
 
218
218
  ### `viewports`
219
219
 
@@ -52,7 +52,7 @@ function ResponsiveBlockControl( props ) {
52
52
  toggleLabel ||
53
53
  sprintf(
54
54
  /* translators: %s: Property value for the control (eg: margin, padding, etc.). */
55
- __( 'Use the same %s on all screensizes.' ),
55
+ __( 'Use the same %s on all screen sizes.' ),
56
56
  property
57
57
  );
58
58
 
@@ -81,7 +81,7 @@ describe( 'Basic rendering', () => {
81
81
  } );
82
82
 
83
83
  const toggleState = screen.getByRole( 'checkbox', {
84
- name: 'Use the same padding on all screensizes.',
84
+ name: 'Use the same padding on all screen sizes.',
85
85
  checked: true,
86
86
  } );
87
87
 
@@ -177,7 +177,7 @@ describe( 'Default and Responsive modes', () => {
177
177
  <ResponsiveBlockControl
178
178
  title="Padding"
179
179
  property="padding"
180
- isResponsive={ true }
180
+ isResponsive
181
181
  renderDefaultControl={ renderTestDefaultControlComponent }
182
182
  />
183
183
  );
@@ -217,7 +217,7 @@ describe( 'Default and Responsive modes', () => {
217
217
  <ResponsiveBlockControl
218
218
  title="Padding"
219
219
  property="padding"
220
- isResponsive={ true }
220
+ isResponsive
221
221
  renderDefaultControl={ mockRenderDefaultControl }
222
222
  viewports={ customViewportSet }
223
223
  />
@@ -268,7 +268,7 @@ describe( 'Default and Responsive modes', () => {
268
268
 
269
269
  // Select elements based on what the user can see.
270
270
  const toggleInput = screen.getByRole( 'checkbox', {
271
- name: 'Use the same padding on all screensizes.',
271
+ name: 'Use the same padding on all screen sizes.',
272
272
  checked: true,
273
273
  } );
274
274
 
@@ -319,7 +319,7 @@ describe( 'Default and Responsive modes', () => {
319
319
  <ResponsiveBlockControl
320
320
  title="Padding"
321
321
  property="padding"
322
- isResponsive={ true }
322
+ isResponsive
323
323
  renderDefaultControl={ spyRenderDefaultControl }
324
324
  renderResponsiveControls={ mockRenderResponsiveControls }
325
325
  />
@@ -19,13 +19,14 @@ import {
19
19
  removeFormat,
20
20
  } from '@wordpress/rich-text';
21
21
  import { Popover } from '@wordpress/components';
22
- import { getBlockType } from '@wordpress/blocks';
22
+ import { getBlockType, store as blocksStore } from '@wordpress/blocks';
23
23
 
24
24
  /**
25
25
  * Internal dependencies
26
26
  */
27
27
  import { useBlockEditorAutocompleteProps } from '../autocomplete';
28
28
  import { useBlockEditContext } from '../block-edit';
29
+ import { blockBindingsKey } from '../block-edit/context';
29
30
  import FormatToolbarContainer from './format-toolbar-container';
30
31
  import { store as blockEditorStore } from '../../store';
31
32
  import { useUndoAutomaticChange } from './use-undo-automatic-change';
@@ -46,7 +47,7 @@ import { getAllowedFormats } from './utils';
46
47
  import { Content } from './content';
47
48
  import { withDeprecations } from './with-deprecations';
48
49
  import { unlock } from '../../lock-unlock';
49
- import { BLOCK_BINDINGS_ALLOWED_BLOCKS } from '../../hooks/use-bindings-attributes';
50
+ import { canBindBlock } from '../../hooks/use-bindings-attributes';
50
51
 
51
52
  export const keyboardShortcutContext = createContext();
52
53
  export const inputEventContext = createContext();
@@ -109,6 +110,7 @@ export function RichTextWrapper(
109
110
  __unstableDisableFormats: disableFormats,
110
111
  disableLineBreaks,
111
112
  __unstableAllowPrefixTransformations,
113
+ disableEditing,
112
114
  ...props
113
115
  },
114
116
  forwardedRef
@@ -116,11 +118,9 @@ export function RichTextWrapper(
116
118
  props = removeNativeProps( props );
117
119
 
118
120
  const anchorRef = useRef();
119
- const {
120
- clientId,
121
- isSelected: isBlockSelected,
122
- name: blockName,
123
- } = useBlockEditContext();
121
+ const context = useBlockEditContext();
122
+ const { clientId, isSelected: isBlockSelected, name: blockName } = context;
123
+ const blockBindings = context[ blockBindingsKey ];
124
124
  const selector = ( select ) => {
125
125
  // Avoid subscribing to the block editor store if the block is not
126
126
  // selected.
@@ -128,12 +128,10 @@ export function RichTextWrapper(
128
128
  return { isSelected: false };
129
129
  }
130
130
 
131
- const { getSelectionStart, getSelectionEnd, getBlockAttributes } =
131
+ const { getSelectionStart, getSelectionEnd } =
132
132
  select( blockEditorStore );
133
133
  const selectionStart = getSelectionStart();
134
134
  const selectionEnd = getSelectionEnd();
135
- const blockBindings =
136
- getBlockAttributes( clientId )?.metadata?.bindings;
137
135
 
138
136
  let isSelected;
139
137
 
@@ -146,50 +144,60 @@ export function RichTextWrapper(
146
144
  isSelected = selectionStart.clientId === clientId;
147
145
  }
148
146
 
149
- // Disable Rich Text editing if block bindings specify that.
150
- let shouldDisableEditing = false;
151
- if ( blockBindings && blockName in BLOCK_BINDINGS_ALLOWED_BLOCKS ) {
152
- const blockTypeAttributes = getBlockType( blockName ).attributes;
153
- const { getBlockBindingsSource } = unlock(
154
- select( blockEditorStore )
155
- );
156
- for ( const [ attribute, args ] of Object.entries(
157
- blockBindings
158
- ) ) {
159
- if (
160
- blockTypeAttributes?.[ attribute ]?.source !== 'rich-text'
161
- ) {
162
- break;
163
- }
164
-
165
- // If the source is not defined, or if its value of `lockAttributesEditing` is `true`, disable it.
166
- const blockBindingsSource = getBlockBindingsSource(
167
- args.source
168
- );
169
- if (
170
- ! blockBindingsSource ||
171
- blockBindingsSource.lockAttributesEditing
172
- ) {
173
- shouldDisableEditing = true;
174
- break;
175
- }
176
- }
177
- }
178
-
179
147
  return {
180
148
  selectionStart: isSelected ? selectionStart.offset : undefined,
181
149
  selectionEnd: isSelected ? selectionEnd.offset : undefined,
182
150
  isSelected,
183
- shouldDisableEditing,
184
151
  };
185
152
  };
186
- const { selectionStart, selectionEnd, isSelected, shouldDisableEditing } =
187
- useSelect( selector, [
188
- clientId,
189
- identifier,
190
- originalIsSelected,
191
- isBlockSelected,
192
- ] );
153
+ const { selectionStart, selectionEnd, isSelected } = useSelect( selector, [
154
+ clientId,
155
+ identifier,
156
+ originalIsSelected,
157
+ isBlockSelected,
158
+ ] );
159
+
160
+ const disableBoundBlocks = useSelect(
161
+ ( select ) => {
162
+ // Disable Rich Text editing if block bindings specify that.
163
+ let _disableBoundBlocks = false;
164
+ if ( blockBindings && canBindBlock( blockName ) ) {
165
+ const blockTypeAttributes =
166
+ getBlockType( blockName ).attributes;
167
+ const { getBlockBindingsSource } = unlock(
168
+ select( blocksStore )
169
+ );
170
+ for ( const [ attribute, args ] of Object.entries(
171
+ blockBindings
172
+ ) ) {
173
+ if (
174
+ blockTypeAttributes?.[ attribute ]?.source !==
175
+ 'rich-text'
176
+ ) {
177
+ break;
178
+ }
179
+
180
+ // If the source is not defined, or if its value of `lockAttributesEditing` is `true`, disable it.
181
+ const blockBindingsSource = getBlockBindingsSource(
182
+ args.source
183
+ );
184
+ if (
185
+ ! blockBindingsSource ||
186
+ blockBindingsSource.lockAttributesEditing
187
+ ) {
188
+ _disableBoundBlocks = true;
189
+ break;
190
+ }
191
+ }
192
+ }
193
+
194
+ return _disableBoundBlocks;
195
+ },
196
+ [ blockBindings, blockName ]
197
+ );
198
+
199
+ const shouldDisableEditing = disableEditing || disableBoundBlocks;
200
+
193
201
  const { getSelectionStart, getSelectionEnd, getBlockRootClientId } =
194
202
  useSelect( blockEditorStore );
195
203
  const { selectionChange } = useDispatch( blockEditorStore );
@@ -418,7 +426,7 @@ export function RichTextWrapper(
418
426
  anchorRef,
419
427
  ] ) }
420
428
  contentEditable={ ! shouldDisableEditing }
421
- suppressContentEditableWarning={ true }
429
+ suppressContentEditableWarning
422
430
  className={ classnames(
423
431
  'block-editor-rich-text__editable',
424
432
  props.className,
@@ -441,19 +449,34 @@ export function RichTextWrapper(
441
449
  );
442
450
  }
443
451
 
444
- const ForwardedRichTextContainer = withDeprecations(
452
+ // This is the private API for the RichText component.
453
+ // It allows access to all props, not just the public ones.
454
+ export const PrivateRichText = withDeprecations(
445
455
  forwardRef( RichTextWrapper )
446
456
  );
447
457
 
448
- ForwardedRichTextContainer.Content = Content;
449
- ForwardedRichTextContainer.isEmpty = ( value ) => {
458
+ PrivateRichText.Content = Content;
459
+ PrivateRichText.isEmpty = ( value ) => {
450
460
  return ! value || value.length === 0;
451
461
  };
452
462
 
463
+ // This is the public API for the RichText component.
464
+ // We wrap the PrivateRichText component to hide some props from the public API.
453
465
  /**
454
466
  * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/rich-text/README.md
455
467
  */
456
- export default ForwardedRichTextContainer;
468
+ const PublicForwardedRichTextContainer = forwardRef( ( props, ref ) => {
469
+ return (
470
+ <PrivateRichText ref={ ref } { ...props } disableEditing={ false } />
471
+ );
472
+ } );
473
+
474
+ PublicForwardedRichTextContainer.Content = Content;
475
+ PublicForwardedRichTextContainer.isEmpty = ( value ) => {
476
+ return ! value || value.length === 0;
477
+ };
478
+
479
+ export default PublicForwardedRichTextContainer;
457
480
  export { RichTextShortcut } from './shortcut';
458
481
  export { RichTextToolbarButton } from './toolbar-button';
459
482
  export { __unstableRichTextInputEvent } from './input-event';
@@ -21,6 +21,10 @@ export function useEnter( props ) {
21
21
  propsRef.current = props;
22
22
  return useRefEffect( ( element ) => {
23
23
  function onKeyDown( event ) {
24
+ if ( event.target.contentEditable !== 'true' ) {
25
+ return;
26
+ }
27
+
24
28
  if ( event.defaultPrevented ) {
25
29
  return;
26
30
  }