@wordpress/block-editor 12.13.0 → 12.15.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 (528) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +1 -1
  3. package/build/components/block-heading-level-dropdown/index.js +1 -1
  4. package/build/components/block-heading-level-dropdown/index.js.map +1 -1
  5. package/build/components/block-list/block.native.js +2 -0
  6. package/build/components/block-list/block.native.js.map +1 -1
  7. package/build/components/block-list/index.js +2 -9
  8. package/build/components/block-list/index.js.map +1 -1
  9. package/build/components/block-list-appender/index.js +16 -3
  10. package/build/components/block-list-appender/index.js.map +1 -1
  11. package/build/components/block-parent-selector/index.js +1 -1
  12. package/build/components/block-parent-selector/index.js.map +1 -1
  13. package/build/components/block-pattern-setup/index.js +25 -16
  14. package/build/components/block-pattern-setup/index.js.map +1 -1
  15. package/build/components/block-pattern-setup/setup-toolbar.js +4 -2
  16. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  17. package/build/components/block-patterns-list/index.js +36 -19
  18. package/build/components/block-patterns-list/index.js.map +1 -1
  19. package/build/components/block-quick-navigation/index.js +6 -4
  20. package/build/components/block-quick-navigation/index.js.map +1 -1
  21. package/build/components/block-rename/index.js +28 -0
  22. package/build/components/block-rename/index.js.map +1 -0
  23. package/build/components/block-rename/is-empty-string.js +10 -0
  24. package/build/components/block-rename/is-empty-string.js.map +1 -0
  25. package/build/components/block-rename/modal.js +87 -0
  26. package/build/components/block-rename/modal.js.map +1 -0
  27. package/build/components/block-rename/rename-control.js +74 -0
  28. package/build/components/block-rename/rename-control.js.map +1 -0
  29. package/build/components/block-rename/use-block-rename.js +17 -0
  30. package/build/components/block-rename/use-block-rename.js.map +1 -0
  31. package/build/components/block-settings-menu/block-settings-dropdown.js +33 -20
  32. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  33. package/build/components/block-settings-menu-controls/index.js +7 -0
  34. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  35. package/build/components/block-styles/index.js +0 -8
  36. package/build/components/block-styles/index.js.map +1 -1
  37. package/build/components/block-switcher/pattern-transformations-menu.js +18 -14
  38. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  39. package/build/components/block-toolbar/block-toolbar-menu.native.js +1 -1
  40. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  41. package/build/components/block-tools/back-compat.js +2 -2
  42. package/build/components/block-tools/back-compat.js.map +1 -1
  43. package/build/components/block-tools/block-contextual-toolbar.js +11 -81
  44. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  45. package/build/components/block-tools/empty-block-inserter.js +56 -0
  46. package/build/components/block-tools/empty-block-inserter.js.map +1 -0
  47. package/build/components/block-tools/index.js +48 -9
  48. package/build/components/block-tools/index.js.map +1 -1
  49. package/build/components/block-tools/selected-block-tools.js +113 -0
  50. package/build/components/block-tools/selected-block-tools.js.map +1 -0
  51. package/build/components/block-tools/use-selected-block-tool-props.js +56 -0
  52. package/build/components/block-tools/use-selected-block-tool-props.js.map +1 -0
  53. package/build/components/block-types-list/index.js +6 -2
  54. package/build/components/block-types-list/index.js.map +1 -1
  55. package/build/components/date-format-picker/index.js +8 -1
  56. package/build/components/date-format-picker/index.js.map +1 -1
  57. package/build/components/editable-text/index.js +1 -2
  58. package/build/components/editable-text/index.js.map +1 -1
  59. package/build/components/global-styles/advanced-panel.js +1 -1
  60. package/build/components/global-styles/advanced-panel.js.map +1 -1
  61. package/build/components/iframe/index.js +4 -3
  62. package/build/components/iframe/index.js.map +1 -1
  63. package/build/components/image-size-control/index.js +0 -5
  64. package/build/components/image-size-control/index.js.map +1 -1
  65. package/build/components/inner-blocks/index.js +3 -1
  66. package/build/components/inner-blocks/index.js.map +1 -1
  67. package/build/components/inner-blocks/warning-max-depth-exceeded.native.js +29 -31
  68. package/build/components/inner-blocks/warning-max-depth-exceeded.native.js.map +1 -1
  69. package/build/components/inserter/block-patterns-explorer/{explorer.js → index.js} +7 -7
  70. package/build/components/inserter/block-patterns-explorer/index.js.map +1 -0
  71. package/build/components/inserter/block-patterns-explorer/{sidebar.js → pattern-explorer-sidebar.js} +1 -1
  72. package/build/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -0
  73. package/build/components/inserter/block-patterns-explorer/{patterns-list.js → pattern-list.js} +4 -4
  74. package/build/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -0
  75. package/build/components/inserter/block-patterns-tab/index.js +75 -0
  76. package/build/components/inserter/block-patterns-tab/index.js.map +1 -0
  77. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +48 -0
  78. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -0
  79. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js +108 -0
  80. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -0
  81. package/build/components/inserter/{block-patterns-filter.js → block-patterns-tab/patterns-filter.js} +18 -34
  82. package/build/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -0
  83. package/build/components/inserter/block-patterns-tab/use-pattern-categories.js +55 -0
  84. package/build/components/inserter/block-patterns-tab/use-pattern-categories.js.map +1 -0
  85. package/build/components/inserter/block-patterns-tab/utils.js +69 -0
  86. package/build/components/inserter/block-patterns-tab/utils.js.map +1 -0
  87. package/build/components/inserter/hooks/use-patterns-state.js +2 -1
  88. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  89. package/build/components/inserter/media-tab/media-list.js +9 -5
  90. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  91. package/build/components/inserter/media-tab/media-preview.js +15 -12
  92. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  93. package/build/components/inserter/menu.js +3 -4
  94. package/build/components/inserter/menu.js.map +1 -1
  95. package/build/components/inserter-listbox/index.js +11 -6
  96. package/build/components/inserter-listbox/index.js.map +1 -1
  97. package/build/components/inserter-listbox/item.js +24 -23
  98. package/build/components/inserter-listbox/item.js.map +1 -1
  99. package/build/components/inserter-listbox/row.js +5 -5
  100. package/build/components/inserter-listbox/row.js.map +1 -1
  101. package/build/components/link-control/index.js +6 -5
  102. package/build/components/link-control/index.js.map +1 -1
  103. package/build/components/list-view/block-select-button.js +39 -0
  104. package/build/components/list-view/block-select-button.js.map +1 -1
  105. package/build/components/list-view/block.js +16 -3
  106. package/build/components/list-view/block.js.map +1 -1
  107. package/build/components/list-view/index.js +3 -2
  108. package/build/components/list-view/index.js.map +1 -1
  109. package/build/components/list-view/use-list-view-expand-selected-item.js +2 -3
  110. package/build/components/list-view/use-list-view-expand-selected-item.js.map +1 -1
  111. package/build/components/navigable-toolbar/index.js +69 -18
  112. package/build/components/navigable-toolbar/index.js.map +1 -1
  113. package/build/components/preview-options/index.js +4 -2
  114. package/build/components/preview-options/index.js.map +1 -1
  115. package/build/components/provider/use-block-sync.js +1 -14
  116. package/build/components/provider/use-block-sync.js.map +1 -1
  117. package/build/components/rich-text/index.js +0 -1
  118. package/build/components/rich-text/index.js.map +1 -1
  119. package/build/components/rich-text/index.native.js +4 -2
  120. package/build/components/rich-text/index.native.js.map +1 -1
  121. package/build/components/rich-text/native/format-edit.js +45 -0
  122. package/build/components/rich-text/native/format-edit.js.map +1 -0
  123. package/build/components/rich-text/native/get-format-colors.native.js +41 -0
  124. package/build/components/rich-text/native/get-format-colors.native.js.map +1 -0
  125. package/build/components/rich-text/native/index.js +9 -0
  126. package/build/components/rich-text/native/index.js.map +1 -0
  127. package/build/components/rich-text/native/index.native.js +1189 -0
  128. package/build/components/rich-text/native/index.native.js.map +1 -0
  129. package/build/components/rich-text/native/toolbar-button-with-options.native.js +58 -0
  130. package/build/components/rich-text/native/toolbar-button-with-options.native.js.map +1 -0
  131. package/build/components/rich-text/native/use-format-types.js +111 -0
  132. package/build/components/rich-text/native/use-format-types.js.map +1 -0
  133. package/build/components/rich-text/use-input-rules.js +30 -1
  134. package/build/components/rich-text/use-input-rules.js.map +1 -1
  135. package/build/components/rich-text/use-paste-handler.js +2 -5
  136. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  137. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  138. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  139. package/build/components/url-popover/image-url-input-ui.js +2 -1
  140. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  141. package/build/components/use-block-drop-zone/index.js +4 -1
  142. package/build/components/use-block-drop-zone/index.js.map +1 -1
  143. package/build/components/use-moving-animation/index.js +2 -1
  144. package/build/components/use-moving-animation/index.js.map +1 -1
  145. package/build/components/use-settings/index.js +2 -2
  146. package/build/components/use-settings/index.js.map +1 -1
  147. package/build/components/writing-flow/use-tab-nav.js +7 -3
  148. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  149. package/build/hooks/align.js +10 -10
  150. package/build/hooks/align.js.map +1 -1
  151. package/build/hooks/align.native.js +2 -2
  152. package/build/hooks/align.native.js.map +1 -1
  153. package/build/hooks/anchor.js +7 -6
  154. package/build/hooks/anchor.js.map +1 -1
  155. package/build/hooks/background.js +16 -4
  156. package/build/hooks/background.js.map +1 -1
  157. package/build/hooks/block-hooks.js +7 -8
  158. package/build/hooks/block-hooks.js.map +1 -1
  159. package/build/hooks/block-renaming.js +42 -0
  160. package/build/hooks/block-renaming.js.map +1 -1
  161. package/build/hooks/content-lock-ui.js +5 -5
  162. package/build/hooks/content-lock-ui.js.map +1 -1
  163. package/build/hooks/custom-class-name.js +8 -7
  164. package/build/hooks/custom-class-name.js.map +1 -1
  165. package/build/hooks/custom-fields.js +57 -52
  166. package/build/hooks/custom-fields.js.map +1 -1
  167. package/build/hooks/duotone.js +9 -20
  168. package/build/hooks/duotone.js.map +1 -1
  169. package/build/hooks/index.js +0 -1
  170. package/build/hooks/index.js.map +1 -1
  171. package/build/hooks/layout.js +103 -93
  172. package/build/hooks/layout.js.map +1 -1
  173. package/build/hooks/position.js +10 -9
  174. package/build/hooks/position.js.map +1 -1
  175. package/build/hooks/style.js +10 -13
  176. package/build/hooks/style.js.map +1 -1
  177. package/build/hooks/utils.js +30 -0
  178. package/build/hooks/utils.js.map +1 -1
  179. package/build/layouts/constrained.js +4 -3
  180. package/build/layouts/constrained.js.map +1 -1
  181. package/build/private-apis.js +3 -0
  182. package/build/private-apis.js.map +1 -1
  183. package/build/store/actions.js +30 -37
  184. package/build/store/actions.js.map +1 -1
  185. package/build/store/reducer.js +18 -0
  186. package/build/store/reducer.js.map +1 -1
  187. package/build/store/selectors.js +18 -13
  188. package/build/store/selectors.js.map +1 -1
  189. package/build/utils/transform-styles/index.js +26 -6
  190. package/build/utils/transform-styles/index.js.map +1 -1
  191. package/build-module/components/block-heading-level-dropdown/index.js +1 -1
  192. package/build-module/components/block-heading-level-dropdown/index.js.map +1 -1
  193. package/build-module/components/block-list/block.native.js +2 -0
  194. package/build-module/components/block-list/block.native.js.map +1 -1
  195. package/build-module/components/block-list/index.js +3 -10
  196. package/build-module/components/block-list/index.js.map +1 -1
  197. package/build-module/components/block-list-appender/index.js +16 -3
  198. package/build-module/components/block-list-appender/index.js.map +1 -1
  199. package/build-module/components/block-parent-selector/index.js +1 -1
  200. package/build-module/components/block-parent-selector/index.js.map +1 -1
  201. package/build-module/components/block-pattern-setup/index.js +24 -15
  202. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  203. package/build-module/components/block-pattern-setup/setup-toolbar.js +4 -2
  204. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  205. package/build-module/components/block-patterns-list/index.js +36 -19
  206. package/build-module/components/block-patterns-list/index.js.map +1 -1
  207. package/build-module/components/block-quick-navigation/index.js +7 -5
  208. package/build-module/components/block-quick-navigation/index.js.map +1 -1
  209. package/build-module/components/block-rename/index.js +4 -0
  210. package/build-module/components/block-rename/index.js.map +1 -0
  211. package/build-module/components/block-rename/is-empty-string.js +4 -0
  212. package/build-module/components/block-rename/is-empty-string.js.map +1 -0
  213. package/build-module/components/block-rename/modal.js +79 -0
  214. package/build-module/components/block-rename/modal.js.map +1 -0
  215. package/build-module/components/block-rename/rename-control.js +66 -0
  216. package/build-module/components/block-rename/rename-control.js.map +1 -0
  217. package/build-module/components/block-rename/use-block-rename.js +10 -0
  218. package/build-module/components/block-rename/use-block-rename.js.map +1 -0
  219. package/build-module/components/block-settings-menu/block-settings-dropdown.js +34 -21
  220. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  221. package/build-module/components/block-settings-menu-controls/index.js +7 -0
  222. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  223. package/build-module/components/block-styles/index.js +0 -8
  224. package/build-module/components/block-styles/index.js.map +1 -1
  225. package/build-module/components/block-switcher/pattern-transformations-menu.js +17 -13
  226. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  227. package/build-module/components/block-toolbar/block-toolbar-menu.native.js +1 -1
  228. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  229. package/build-module/components/block-tools/back-compat.js +1 -1
  230. package/build-module/components/block-tools/back-compat.js.map +1 -1
  231. package/build-module/components/block-tools/block-contextual-toolbar.js +11 -80
  232. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  233. package/build-module/components/block-tools/empty-block-inserter.js +48 -0
  234. package/build-module/components/block-tools/empty-block-inserter.js.map +1 -0
  235. package/build-module/components/block-tools/index.js +48 -9
  236. package/build-module/components/block-tools/index.js.map +1 -1
  237. package/build-module/components/block-tools/selected-block-tools.js +105 -0
  238. package/build-module/components/block-tools/selected-block-tools.js.map +1 -0
  239. package/build-module/components/block-tools/use-selected-block-tool-props.js +50 -0
  240. package/build-module/components/block-tools/use-selected-block-tool-props.js.map +1 -0
  241. package/build-module/components/block-types-list/index.js +6 -2
  242. package/build-module/components/block-types-list/index.js.map +1 -1
  243. package/build-module/components/date-format-picker/index.js +8 -1
  244. package/build-module/components/date-format-picker/index.js.map +1 -1
  245. package/build-module/components/editable-text/index.js +1 -2
  246. package/build-module/components/editable-text/index.js.map +1 -1
  247. package/build-module/components/global-styles/advanced-panel.js +1 -1
  248. package/build-module/components/global-styles/advanced-panel.js.map +1 -1
  249. package/build-module/components/iframe/index.js +4 -3
  250. package/build-module/components/iframe/index.js.map +1 -1
  251. package/build-module/components/image-size-control/index.js +0 -5
  252. package/build-module/components/image-size-control/index.js.map +1 -1
  253. package/build-module/components/inner-blocks/index.js +3 -1
  254. package/build-module/components/inner-blocks/index.js.map +1 -1
  255. package/build-module/components/inner-blocks/warning-max-depth-exceeded.native.js +30 -32
  256. package/build-module/components/inner-blocks/warning-max-depth-exceeded.native.js.map +1 -1
  257. package/build-module/components/inserter/block-patterns-explorer/{explorer.js → index.js} +5 -5
  258. package/build-module/components/inserter/block-patterns-explorer/index.js.map +1 -0
  259. package/build-module/components/inserter/block-patterns-explorer/{sidebar.js → pattern-explorer-sidebar.js} +1 -1
  260. package/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -0
  261. package/build-module/components/inserter/block-patterns-explorer/{patterns-list.js → pattern-list.js} +3 -3
  262. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -0
  263. package/build-module/components/inserter/block-patterns-tab/index.js +66 -0
  264. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -0
  265. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +42 -0
  266. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -0
  267. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js +100 -0
  268. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -0
  269. package/build-module/components/inserter/{block-patterns-filter.js → block-patterns-tab/patterns-filter.js} +7 -20
  270. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -0
  271. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js +47 -0
  272. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js.map +1 -0
  273. package/build-module/components/inserter/block-patterns-tab/utils.js +57 -0
  274. package/build-module/components/inserter/block-patterns-tab/utils.js.map +1 -0
  275. package/build-module/components/inserter/hooks/use-patterns-state.js +2 -1
  276. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  277. package/build-module/components/inserter/media-tab/media-list.js +9 -5
  278. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  279. package/build-module/components/inserter/media-tab/media-preview.js +15 -12
  280. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  281. package/build-module/components/inserter/menu.js +4 -3
  282. package/build-module/components/inserter/menu.js.map +1 -1
  283. package/build-module/components/inserter-listbox/index.js +13 -8
  284. package/build-module/components/inserter-listbox/index.js.map +1 -1
  285. package/build-module/components/inserter-listbox/item.js +25 -23
  286. package/build-module/components/inserter-listbox/item.js.map +1 -1
  287. package/build-module/components/inserter-listbox/row.js +6 -5
  288. package/build-module/components/inserter-listbox/row.js.map +1 -1
  289. package/build-module/components/link-control/index.js +7 -6
  290. package/build-module/components/link-control/index.js.map +1 -1
  291. package/build-module/components/list-view/block-select-button.js +39 -0
  292. package/build-module/components/list-view/block-select-button.js.map +1 -1
  293. package/build-module/components/list-view/block.js +16 -3
  294. package/build-module/components/list-view/block.js.map +1 -1
  295. package/build-module/components/list-view/index.js +3 -2
  296. package/build-module/components/list-view/index.js.map +1 -1
  297. package/build-module/components/list-view/use-list-view-expand-selected-item.js +2 -3
  298. package/build-module/components/list-view/use-list-view-expand-selected-item.js.map +1 -1
  299. package/build-module/components/navigable-toolbar/index.js +69 -17
  300. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  301. package/build-module/components/preview-options/index.js +4 -2
  302. package/build-module/components/preview-options/index.js.map +1 -1
  303. package/build-module/components/provider/use-block-sync.js +1 -14
  304. package/build-module/components/provider/use-block-sync.js.map +1 -1
  305. package/build-module/components/rich-text/index.js +0 -1
  306. package/build-module/components/rich-text/index.js.map +1 -1
  307. package/build-module/components/rich-text/index.native.js +4 -2
  308. package/build-module/components/rich-text/index.native.js.map +1 -1
  309. package/build-module/components/rich-text/native/format-edit.js +38 -0
  310. package/build-module/components/rich-text/native/format-edit.js.map +1 -0
  311. package/build-module/components/rich-text/native/get-format-colors.native.js +34 -0
  312. package/build-module/components/rich-text/native/get-format-colors.native.js.map +1 -0
  313. package/build-module/components/rich-text/native/index.js +2 -0
  314. package/build-module/components/rich-text/native/index.js.map +1 -0
  315. package/build-module/components/rich-text/native/index.native.js +1179 -0
  316. package/build-module/components/rich-text/native/index.native.js.map +1 -0
  317. package/build-module/components/rich-text/native/toolbar-button-with-options.native.js +51 -0
  318. package/build-module/components/rich-text/native/toolbar-button-with-options.native.js.map +1 -0
  319. package/build-module/components/rich-text/native/use-format-types.js +104 -0
  320. package/build-module/components/rich-text/native/use-format-types.js.map +1 -0
  321. package/build-module/components/rich-text/use-input-rules.js +31 -2
  322. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  323. package/build-module/components/rich-text/use-paste-handler.js +2 -5
  324. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  325. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  326. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  327. package/build-module/components/url-popover/image-url-input-ui.js +2 -1
  328. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  329. package/build-module/components/use-block-drop-zone/index.js +4 -1
  330. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  331. package/build-module/components/use-moving-animation/index.js +2 -1
  332. package/build-module/components/use-moving-animation/index.js.map +1 -1
  333. package/build-module/components/use-settings/index.js +2 -2
  334. package/build-module/components/use-settings/index.js.map +1 -1
  335. package/build-module/components/writing-flow/use-tab-nav.js +7 -3
  336. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  337. package/build-module/hooks/align.js +8 -8
  338. package/build-module/hooks/align.js.map +1 -1
  339. package/build-module/hooks/align.native.js +2 -2
  340. package/build-module/hooks/align.native.js.map +1 -1
  341. package/build-module/hooks/anchor.js +5 -4
  342. package/build-module/hooks/anchor.js.map +1 -1
  343. package/build-module/hooks/background.js +17 -5
  344. package/build-module/hooks/background.js.map +1 -1
  345. package/build-module/hooks/block-hooks.js +5 -6
  346. package/build-module/hooks/block-hooks.js.map +1 -1
  347. package/build-module/hooks/block-renaming.js +40 -0
  348. package/build-module/hooks/block-renaming.js.map +1 -1
  349. package/build-module/hooks/content-lock-ui.js +3 -3
  350. package/build-module/hooks/content-lock-ui.js.map +1 -1
  351. package/build-module/hooks/custom-class-name.js +6 -5
  352. package/build-module/hooks/custom-class-name.js.map +1 -1
  353. package/build-module/hooks/custom-fields.js +57 -52
  354. package/build-module/hooks/custom-fields.js.map +1 -1
  355. package/build-module/hooks/duotone.js +10 -21
  356. package/build-module/hooks/duotone.js.map +1 -1
  357. package/build-module/hooks/index.js +0 -1
  358. package/build-module/hooks/index.js.map +1 -1
  359. package/build-module/hooks/layout.js +103 -93
  360. package/build-module/hooks/layout.js.map +1 -1
  361. package/build-module/hooks/position.js +11 -10
  362. package/build-module/hooks/position.js.map +1 -1
  363. package/build-module/hooks/style.js +10 -13
  364. package/build-module/hooks/style.js.map +1 -1
  365. package/build-module/hooks/utils.js +30 -1
  366. package/build-module/hooks/utils.js.map +1 -1
  367. package/build-module/layouts/constrained.js +4 -3
  368. package/build-module/layouts/constrained.js.map +1 -1
  369. package/build-module/private-apis.js +4 -1
  370. package/build-module/private-apis.js.map +1 -1
  371. package/build-module/store/actions.js +29 -37
  372. package/build-module/store/actions.js.map +1 -1
  373. package/build-module/store/reducer.js +17 -0
  374. package/build-module/store/reducer.js.map +1 -1
  375. package/build-module/store/selectors.js +17 -13
  376. package/build-module/store/selectors.js.map +1 -1
  377. package/build-module/utils/transform-styles/index.js +24 -7
  378. package/build-module/utils/transform-styles/index.js.map +1 -1
  379. package/build-style/content-rtl.css +6 -6
  380. package/build-style/content.css +6 -6
  381. package/build-style/style-rtl.css +26 -20
  382. package/build-style/style.css +26 -20
  383. package/package.json +31 -31
  384. package/src/components/block-heading-level-dropdown/index.js +1 -1
  385. package/src/components/block-list/block.native.js +2 -0
  386. package/src/components/block-list/index.js +4 -18
  387. package/src/components/block-list-appender/index.js +20 -4
  388. package/src/components/block-parent-selector/index.js +1 -1
  389. package/src/components/block-pattern-setup/index.js +38 -22
  390. package/src/components/block-pattern-setup/setup-toolbar.js +2 -0
  391. package/src/components/block-pattern-setup/style.scss +4 -1
  392. package/src/components/block-patterns-list/README.md +4 -4
  393. package/src/components/block-patterns-list/index.js +60 -34
  394. package/src/components/block-patterns-list/style.scss +7 -0
  395. package/src/components/block-quick-navigation/index.js +11 -5
  396. package/src/components/block-rename/index.js +3 -0
  397. package/src/components/block-rename/is-empty-string.js +3 -0
  398. package/src/components/block-rename/modal.js +115 -0
  399. package/src/components/block-rename/rename-control.js +80 -0
  400. package/src/components/block-rename/use-block-rename.js +10 -0
  401. package/src/components/block-settings-menu/block-settings-dropdown.js +38 -34
  402. package/src/components/block-settings-menu-controls/index.js +9 -0
  403. package/src/components/block-styles/index.js +0 -10
  404. package/src/components/block-switcher/pattern-transformations-menu.js +20 -14
  405. package/src/components/block-toolbar/block-toolbar-menu.native.js +1 -4
  406. package/src/components/block-toolbar/style.scss +8 -0
  407. package/src/components/block-tools/back-compat.js +1 -1
  408. package/src/components/block-tools/block-contextual-toolbar.js +11 -134
  409. package/src/components/block-tools/empty-block-inserter.js +56 -0
  410. package/src/components/block-tools/index.js +72 -16
  411. package/src/components/block-tools/selected-block-tools.js +127 -0
  412. package/src/components/block-tools/style.scss +0 -10
  413. package/src/components/block-tools/use-selected-block-tool-props.js +66 -0
  414. package/src/components/block-types-list/index.js +5 -4
  415. package/src/components/button-block-appender/content.scss +2 -2
  416. package/src/components/date-format-picker/index.js +7 -0
  417. package/src/components/editable-text/README.md +0 -36
  418. package/src/components/editable-text/index.js +1 -8
  419. package/src/components/global-styles/advanced-panel.js +1 -1
  420. package/src/components/iframe/index.js +4 -3
  421. package/src/components/image-size-control/index.js +0 -6
  422. package/src/components/inner-blocks/index.js +6 -2
  423. package/src/components/inner-blocks/warning-max-depth-exceeded.native.js +57 -33
  424. package/src/components/inserter/block-patterns-explorer/{explorer.js → index.js} +4 -4
  425. package/src/components/inserter/block-patterns-explorer/{patterns-list.js → pattern-list.js} +9 -2
  426. package/src/components/inserter/block-patterns-tab/index.js +118 -0
  427. package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +48 -0
  428. package/src/components/inserter/block-patterns-tab/pattern-category-previews.js +179 -0
  429. package/src/components/inserter/{block-patterns-filter.js → block-patterns-tab/patterns-filter.js} +15 -21
  430. package/src/components/inserter/block-patterns-tab/use-pattern-categories.js +101 -0
  431. package/src/components/inserter/block-patterns-tab/utils.js +78 -0
  432. package/src/components/inserter/hooks/use-patterns-state.js +3 -1
  433. package/src/components/inserter/media-tab/media-list.js +7 -7
  434. package/src/components/inserter/media-tab/media-preview.js +27 -22
  435. package/src/components/inserter/menu.js +4 -5
  436. package/src/components/inserter-listbox/index.js +11 -7
  437. package/src/components/inserter-listbox/item.js +11 -12
  438. package/src/components/inserter-listbox/row.js +6 -12
  439. package/src/components/link-control/README.md +2 -2
  440. package/src/components/link-control/index.js +15 -6
  441. package/src/components/link-control/style.scss +8 -5
  442. package/src/components/list-view/block-select-button.js +44 -1
  443. package/src/components/list-view/block.js +11 -11
  444. package/src/components/list-view/index.js +2 -0
  445. package/src/components/list-view/use-list-view-expand-selected-item.js +7 -8
  446. package/src/components/media-replace-flow/style.scss +2 -2
  447. package/src/components/navigable-toolbar/index.js +71 -25
  448. package/src/components/plain-text/README.md +2 -30
  449. package/src/components/preview-options/index.js +2 -0
  450. package/src/components/provider/use-block-sync.js +2 -21
  451. package/src/components/rich-text/README.md +6 -63
  452. package/src/components/rich-text/index.js +0 -1
  453. package/src/components/rich-text/index.native.js +4 -2
  454. package/src/components/rich-text/native/format-edit.js +44 -0
  455. package/src/components/rich-text/native/get-format-colors.native.js +54 -0
  456. package/src/components/rich-text/native/index.js +1 -0
  457. package/src/components/rich-text/native/index.native.js +1406 -0
  458. package/src/components/rich-text/native/style.native.scss +28 -0
  459. package/src/components/rich-text/native/test/__snapshots__/index.native.js.snap +79 -0
  460. package/src/components/rich-text/native/test/index.native.js +278 -0
  461. package/src/components/rich-text/native/test/performance/rich-text.native.js +44 -0
  462. package/src/components/rich-text/native/toolbar-button-with-options.native.js +61 -0
  463. package/src/components/rich-text/native/use-format-types.js +146 -0
  464. package/src/components/rich-text/use-input-rules.js +30 -2
  465. package/src/components/rich-text/use-paste-handler.js +1 -6
  466. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  467. package/src/components/url-input/README.md +1 -74
  468. package/src/components/url-popover/image-url-input-ui.js +1 -0
  469. package/src/components/use-block-drop-zone/index.js +4 -1
  470. package/src/components/use-moving-animation/index.js +1 -1
  471. package/src/components/use-settings/index.js +2 -2
  472. package/src/components/use-settings/test/index.js +1 -1
  473. package/src/components/writing-flow/use-tab-nav.js +8 -3
  474. package/src/hooks/align.js +8 -8
  475. package/src/hooks/align.native.js +2 -2
  476. package/src/hooks/anchor.js +21 -23
  477. package/src/hooks/background.js +28 -6
  478. package/src/hooks/block-hooks.js +20 -16
  479. package/src/hooks/block-renaming.js +47 -0
  480. package/src/hooks/content-lock-ui.js +3 -3
  481. package/src/hooks/custom-class-name.js +7 -6
  482. package/src/hooks/custom-fields.js +73 -70
  483. package/src/hooks/duotone.js +23 -33
  484. package/src/hooks/index.js +0 -1
  485. package/src/hooks/layout.js +126 -113
  486. package/src/hooks/position.js +8 -21
  487. package/src/hooks/style.js +17 -31
  488. package/src/hooks/test/__snapshots__/align.native.js.snap +5 -5
  489. package/src/hooks/test/align.js +4 -4
  490. package/src/hooks/utils.js +33 -1
  491. package/src/layouts/constrained.js +57 -50
  492. package/src/private-apis.js +4 -1
  493. package/src/store/actions.js +26 -72
  494. package/src/store/reducer.js +19 -0
  495. package/src/store/selectors.js +15 -19
  496. package/src/style.scss +1 -1
  497. package/src/utils/test/transform-styles.js +49 -0
  498. package/src/utils/transform-styles/index.js +39 -13
  499. package/build/components/block-tools/selected-block-popover.js +0 -221
  500. package/build/components/block-tools/selected-block-popover.js.map +0 -1
  501. package/build/components/inserter/block-patterns-explorer/explorer.js.map +0 -1
  502. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +0 -1
  503. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +0 -1
  504. package/build/components/inserter/block-patterns-filter.js.map +0 -1
  505. package/build/components/inserter/block-patterns-tab.js +0 -270
  506. package/build/components/inserter/block-patterns-tab.js.map +0 -1
  507. package/build/hooks/block-rename-ui.js +0 -165
  508. package/build/hooks/block-rename-ui.js.map +0 -1
  509. package/build/store/utils.js +0 -22
  510. package/build/store/utils.js.map +0 -1
  511. package/build-module/components/block-tools/selected-block-popover.js +0 -213
  512. package/build-module/components/block-tools/selected-block-popover.js.map +0 -1
  513. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +0 -1
  514. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +0 -1
  515. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +0 -1
  516. package/build-module/components/inserter/block-patterns-filter.js.map +0 -1
  517. package/build-module/components/inserter/block-patterns-tab.js +0 -254
  518. package/build-module/components/inserter/block-patterns-tab.js.map +0 -1
  519. package/build-module/hooks/block-rename-ui.js +0 -157
  520. package/build-module/hooks/block-rename-ui.js.map +0 -1
  521. package/build-module/store/utils.js +0 -16
  522. package/build-module/store/utils.js.map +0 -1
  523. package/src/components/block-tools/selected-block-popover.js +0 -265
  524. package/src/components/inserter/block-patterns-tab.js +0 -448
  525. package/src/hooks/block-rename-ui.js +0 -226
  526. package/src/store/utils.js +0 -12
  527. /package/src/{hooks/block-rename-ui.scss → components/block-rename/style.scss} +0 -0
  528. /package/src/components/inserter/block-patterns-explorer/{sidebar.js → pattern-explorer-sidebar.js} +0 -0
@@ -20,7 +20,7 @@ import {
20
20
  store as keyboardShortcutsStore,
21
21
  __unstableUseShortcutEventMatch,
22
22
  } from '@wordpress/keyboard-shortcuts';
23
- import { pipe, useCopyToClipboard } from '@wordpress/compose';
23
+ import { pipe, useCopyToClipboard, useViewportMatch } from '@wordpress/compose';
24
24
 
25
25
  /**
26
26
  * Internal dependencies
@@ -47,6 +47,38 @@ function CopyMenuItem( { blocks, onCopy, label } ) {
47
47
  return <MenuItem ref={ ref }>{ copyMenuItemLabel }</MenuItem>;
48
48
  }
49
49
 
50
+ function ParentSelectorMenuItem( { parentClientId, parentBlockType } ) {
51
+ const isSmallViewport = useViewportMatch( 'medium', '<' );
52
+ const { selectBlock } = useDispatch( blockEditorStore );
53
+
54
+ // Allows highlighting the parent block outline when focusing or hovering
55
+ // the parent block selector within the child.
56
+ const menuItemRef = useRef();
57
+ const gesturesProps = useShowHoveredOrFocusedGestures( {
58
+ ref: menuItemRef,
59
+ highlightParent: true,
60
+ } );
61
+
62
+ if ( ! isSmallViewport ) {
63
+ return null;
64
+ }
65
+
66
+ return (
67
+ <MenuItem
68
+ { ...gesturesProps }
69
+ ref={ menuItemRef }
70
+ icon={ <BlockIcon icon={ parentBlockType.icon } /> }
71
+ onClick={ () => selectBlock( parentClientId ) }
72
+ >
73
+ { sprintf(
74
+ /* translators: %s: Name of the block's parent. */
75
+ __( 'Select parent block (%s)' ),
76
+ parentBlockType.title
77
+ ) }
78
+ </MenuItem>
79
+ );
80
+ }
81
+
50
82
  export function BlockSettingsDropdown( {
51
83
  block,
52
84
  clientIds,
@@ -132,8 +164,6 @@ export function BlockSettingsDropdown( {
132
164
  };
133
165
  }, [] );
134
166
  const isMatch = __unstableUseShortcutEventMatch();
135
-
136
- const { selectBlock } = useDispatch( blockEditorStore );
137
167
  const hasSelectedBlocks = selectedBlockClientIds.length > 0;
138
168
 
139
169
  const updateSelectionAfterDuplicate = useCallback(
@@ -175,14 +205,6 @@ export function BlockSettingsDropdown( {
175
205
  const removeBlockLabel =
176
206
  count === 1 ? __( 'Delete' ) : __( 'Delete blocks' );
177
207
 
178
- // Allows highlighting the parent block outline when focusing or hovering
179
- // the parent block selector within the child.
180
- const selectParentButtonRef = useRef();
181
- const showParentOutlineGestures = useShowHoveredOrFocusedGestures( {
182
- ref: selectParentButtonRef,
183
- highlightParent: true,
184
- } );
185
-
186
208
  // This can occur when the selected block (the parent)
187
209
  // displays child blocks within a List View.
188
210
  const parentBlockIsSelected =
@@ -297,30 +319,12 @@ export function BlockSettingsDropdown( {
297
319
  />
298
320
  { ! parentBlockIsSelected &&
299
321
  !! firstParentClientId && (
300
- <MenuItem
301
- { ...showParentOutlineGestures }
302
- ref={ selectParentButtonRef }
303
- icon={
304
- <BlockIcon
305
- icon={
306
- parentBlockType.icon
307
- }
308
- />
309
- }
310
- onClick={ () =>
311
- selectBlock(
312
- firstParentClientId
313
- )
322
+ <ParentSelectorMenuItem
323
+ parentClientId={
324
+ firstParentClientId
314
325
  }
315
- >
316
- { sprintf(
317
- /* translators: %s: Name of the block's parent. */
318
- __(
319
- 'Select parent block (%s)'
320
- ),
321
- parentBlockType.title
322
- ) }
323
- </MenuItem>
326
+ parentBlockType={ parentBlockType }
327
+ />
324
328
  ) }
325
329
  { count === 1 && (
326
330
  <BlockHTMLConvertButton
@@ -22,6 +22,8 @@ import { BlockLockMenuItem, useBlockLock } from '../block-lock';
22
22
  import { store as blockEditorStore } from '../../store';
23
23
  import BlockModeToggle from '../block-settings-menu/block-mode-toggle';
24
24
 
25
+ import { BlockRenameControl, useBlockRename } from '../block-rename';
26
+
25
27
  const { Fill, Slot } = createSlotFill( 'BlockSettingsMenuControls' );
26
28
 
27
29
  const BlockSettingsMenuControlsSlot = ( {
@@ -44,7 +46,9 @@ const BlockSettingsMenuControlsSlot = ( {
44
46
  );
45
47
 
46
48
  const { canLock } = useBlockLock( selectedClientIds[ 0 ] );
49
+ const { canRename } = useBlockRename( selectedBlocks[ 0 ] );
47
50
  const showLockButton = selectedClientIds.length === 1 && canLock;
51
+ const showRenameButton = selectedClientIds.length === 1 && canRename;
48
52
 
49
53
  // Check if current selection of blocks is Groupable or Ungroupable
50
54
  // and pass this props down to ConvertToGroupButton.
@@ -84,6 +88,11 @@ const BlockSettingsMenuControlsSlot = ( {
84
88
  clientId={ selectedClientIds[ 0 ] }
85
89
  />
86
90
  ) }
91
+ { showRenameButton && (
92
+ <BlockRenameControl
93
+ clientId={ selectedClientIds[ 0 ] }
94
+ />
95
+ ) }
87
96
  { fills }
88
97
  { fillProps?.canMove && ! fillProps?.onlyBlock && (
89
98
  <MenuItem
@@ -13,7 +13,6 @@ import {
13
13
  __experimentalTruncate as Truncate,
14
14
  Popover,
15
15
  } from '@wordpress/components';
16
- import deprecated from '@wordpress/deprecated';
17
16
 
18
17
  /**
19
18
  * Internal dependencies
@@ -120,12 +119,3 @@ function BlockStyles( { clientId, onSwitch = noop, onHoverClassName = noop } ) {
120
119
  }
121
120
 
122
121
  export default BlockStyles;
123
-
124
- BlockStyles.Slot = () => {
125
- deprecated( 'BlockStyles.Slot', {
126
- version: '6.4',
127
- since: '6.2',
128
- } );
129
-
130
- return null;
131
- };
@@ -11,9 +11,7 @@ import {
11
11
  MenuItem,
12
12
  Popover,
13
13
  VisuallyHidden,
14
- __unstableComposite as Composite,
15
- __unstableUseCompositeState as useCompositeState,
16
- __unstableCompositeItem as CompositeItem,
14
+ privateApis as componentsPrivateApis,
17
15
  } from '@wordpress/components';
18
16
 
19
17
  /**
@@ -21,6 +19,13 @@ import {
21
19
  */
22
20
  import BlockPreview from '../block-preview';
23
21
  import useTransformedPatterns from './use-transformed-patterns';
22
+ import { unlock } from '../../lock-unlock';
23
+
24
+ const {
25
+ CompositeV2: Composite,
26
+ CompositeItemV2: CompositeItem,
27
+ useCompositeStoreV2: useCompositeStore,
28
+ } = unlock( componentsPrivateApis );
24
29
 
25
30
  function PatternTransformationsMenu( {
26
31
  blocks,
@@ -73,10 +78,10 @@ function PreviewPatternsPopover( { patterns, onSelect } ) {
73
78
  }
74
79
 
75
80
  function BlockPatternsList( { patterns, onSelect } ) {
76
- const composite = useCompositeState();
81
+ const composite = useCompositeStore();
77
82
  return (
78
83
  <Composite
79
- { ...composite }
84
+ store={ composite }
80
85
  role="listbox"
81
86
  className="block-editor-block-switcher__preview-patterns-container"
82
87
  aria-label={ __( 'Patterns list' ) }
@@ -86,14 +91,13 @@ function BlockPatternsList( { patterns, onSelect } ) {
86
91
  key={ pattern.name }
87
92
  pattern={ pattern }
88
93
  onSelect={ onSelect }
89
- composite={ composite }
90
94
  />
91
95
  ) ) }
92
96
  </Composite>
93
97
  );
94
98
  }
95
99
 
96
- function BlockPattern( { pattern, onSelect, composite } ) {
100
+ function BlockPattern( { pattern, onSelect } ) {
97
101
  // TODO check pattern/preview width...
98
102
  const baseClassName =
99
103
  'block-editor-block-switcher__preview-patterns-container';
@@ -104,14 +108,16 @@ function BlockPattern( { pattern, onSelect, composite } ) {
104
108
  return (
105
109
  <div className={ `${ baseClassName }-list__list-item` }>
106
110
  <CompositeItem
107
- role="option"
108
- as="div"
109
- { ...composite }
110
- aria-label={ pattern.title }
111
- aria-describedby={
112
- pattern.description ? descriptionId : undefined
111
+ render={
112
+ <div
113
+ role="option"
114
+ aria-label={ pattern.title }
115
+ aria-describedby={
116
+ pattern.description ? descriptionId : undefined
117
+ }
118
+ className={ `${ baseClassName }-list__item` }
119
+ />
113
120
  }
114
- className={ `${ baseClassName }-list__item` }
115
121
  onClick={ () => onSelect( pattern.transformedBlocks ) }
116
122
  >
117
123
  <BlockPreview
@@ -212,10 +212,7 @@ const BlockActionsMenu = ( {
212
212
  },
213
213
  convertToRegularBlocks: {
214
214
  id: 'convertToRegularBlocksOption',
215
- label:
216
- innerBlockCount > 1
217
- ? __( 'Detach patterns' )
218
- : __( 'Detach pattern' ),
215
+ label: __( 'Detach' ),
219
216
  value: 'convertToRegularBlocksOption',
220
217
  onSelect: () => {
221
218
  /* translators: %s: name of the synced block */
@@ -56,6 +56,14 @@
56
56
  }
57
57
  }
58
58
 
59
+ .block-editor-block-contextual-toolbar.is-fixed {
60
+ position: sticky;
61
+ top: 0;
62
+ z-index: z-index(".block-editor-block-popover");
63
+ display: block;
64
+ width: 100%;
65
+ }
66
+
59
67
  // on desktop browsers the fixed toolbar has tweaked borders
60
68
  @include break-medium() {
61
69
  .block-editor-block-contextual-toolbar.is-fixed {
@@ -9,7 +9,7 @@ import deprecated from '@wordpress/deprecated';
9
9
  * Internal dependencies
10
10
  */
11
11
  import InsertionPoint, { InsertionPointOpenRef } from './insertion-point';
12
- import BlockPopover from './selected-block-popover';
12
+ import BlockPopover from './selected-block-tools';
13
13
 
14
14
  export default function BlockToolsBackCompat( { children } ) {
15
15
  const openRef = useContext( InsertionPointOpenRef );
@@ -7,21 +7,8 @@ import classnames from 'classnames';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import { __ } from '@wordpress/i18n';
10
- import {
11
- useLayoutEffect,
12
- useEffect,
13
- useRef,
14
- useState,
15
- } from '@wordpress/element';
16
10
  import { hasBlockSupport, store as blocksStore } from '@wordpress/blocks';
17
11
  import { useSelect } from '@wordpress/data';
18
- import {
19
- ToolbarItem,
20
- ToolbarButton,
21
- ToolbarGroup,
22
- } from '@wordpress/components';
23
- import { next, previous } from '@wordpress/icons';
24
- import { useViewportMatch } from '@wordpress/compose';
25
12
 
26
13
  /**
27
14
  * Internal dependencies
@@ -31,12 +18,11 @@ import BlockToolbar from '../block-toolbar';
31
18
  import { store as blockEditorStore } from '../../store';
32
19
  import { useHasAnyBlockControls } from '../block-controls/use-has-block-controls';
33
20
 
34
- function BlockContextualToolbar( { focusOnMount, isFixed, ...props } ) {
35
- // When the toolbar is fixed it can be collapsed
36
- const [ isCollapsed, setIsCollapsed ] = useState( false );
37
- const toolbarButtonRef = useRef();
38
-
39
- const isLargeViewport = useViewportMatch( 'medium' );
21
+ export default function BlockContextualToolbar( {
22
+ focusOnMount,
23
+ isFixed,
24
+ ...props
25
+ } ) {
40
26
  const {
41
27
  blockType,
42
28
  blockEditingMode,
@@ -78,94 +64,8 @@ function BlockContextualToolbar( { focusOnMount, isFixed, ...props } ) {
78
64
  };
79
65
  }, [] );
80
66
 
81
- useEffect( () => {
82
- setIsCollapsed( false );
83
- }, [ selectedBlockClientId ] );
84
-
85
- const isLargerThanTabletViewport = useViewportMatch( 'large', '>=' );
86
- const isFullscreen =
87
- document.body.classList.contains( 'is-fullscreen-mode' );
88
-
89
- /**
90
- * The following code is a workaround to fix the width of the toolbar
91
- * it should be removed when the toolbar will be rendered inline
92
- * FIXME: remove this layout effect when the toolbar is no longer
93
- * absolutely positioned
94
- */
95
- useLayoutEffect( () => {
96
- // don't do anything if not fixed toolbar
97
- if ( ! isFixed ) {
98
- return;
99
- }
100
-
101
- const blockToolbar = document.querySelector(
102
- '.block-editor-block-contextual-toolbar'
103
- );
104
-
105
- if ( ! blockToolbar ) {
106
- return;
107
- }
108
-
109
- if ( ! blockType ) {
110
- blockToolbar.style.width = 'initial';
111
- return;
112
- }
113
-
114
- if ( ! isLargerThanTabletViewport ) {
115
- // set the width of the toolbar to auto
116
- blockToolbar.style = {};
117
- return;
118
- }
119
-
120
- if ( isCollapsed ) {
121
- // set the width of the toolbar to auto
122
- blockToolbar.style.width = 'auto';
123
- return;
124
- }
125
-
126
- // get the width of the pinned items in the post editor or widget editor
127
- const pinnedItems = document.querySelector(
128
- '.edit-post-header__settings, .edit-widgets-header__actions'
129
- );
130
- // get the width of the left header in the site editor
131
- const leftHeader = document.querySelector(
132
- '.edit-site-header-edit-mode__end'
133
- );
134
-
135
- const computedToolbarStyle = window.getComputedStyle( blockToolbar );
136
- const computedPinnedItemsStyle = pinnedItems
137
- ? window.getComputedStyle( pinnedItems )
138
- : false;
139
- const computedLeftHeaderStyle = leftHeader
140
- ? window.getComputedStyle( leftHeader )
141
- : false;
142
-
143
- const marginLeft = parseFloat( computedToolbarStyle.marginLeft );
144
- const pinnedItemsWidth = computedPinnedItemsStyle
145
- ? parseFloat( computedPinnedItemsStyle.width )
146
- : 0;
147
- const leftHeaderWidth = computedLeftHeaderStyle
148
- ? parseFloat( computedLeftHeaderStyle.width )
149
- : 0;
150
-
151
- // set the new witdth of the toolbar
152
- blockToolbar.style.width = `calc(100% - ${
153
- leftHeaderWidth +
154
- pinnedItemsWidth +
155
- marginLeft +
156
- ( pinnedItems || leftHeader ? 2 : 0 ) + // Prevents button focus border from being cut off
157
- ( isFullscreen ? 0 : 160 ) // the width of the admin sidebar expanded
158
- }px)`;
159
- }, [
160
- isFixed,
161
- isLargerThanTabletViewport,
162
- isCollapsed,
163
- isFullscreen,
164
- blockType,
165
- ] );
166
-
167
67
  const isToolbarEnabled =
168
- ! blockType ||
68
+ blockType &&
169
69
  hasBlockSupport( blockType, '__experimentalToolbar', true );
170
70
  const hasAnyBlockControls = useHasAnyBlockControls();
171
71
  if (
@@ -179,45 +79,22 @@ function BlockContextualToolbar( { focusOnMount, isFixed, ...props } ) {
179
79
  const classes = classnames( 'block-editor-block-contextual-toolbar', {
180
80
  'has-parent': hasParents && showParentSelector,
181
81
  'is-fixed': isFixed,
182
- 'is-collapsed': isCollapsed,
183
82
  } );
184
83
 
185
84
  return (
186
85
  <NavigableToolbar
187
86
  focusOnMount={ focusOnMount }
87
+ focusEditorOnEscape
188
88
  className={ classes }
189
89
  /* translators: accessibility text for the block toolbar */
190
90
  aria-label={ __( 'Block tools' ) }
191
91
  variant={ isFixed ? 'unstyled' : undefined }
92
+ // Resets the index whenever the active block changes so
93
+ // this is not persisted. See https://github.com/WordPress/gutenberg/pull/25760#issuecomment-717906169
94
+ key={ selectedBlockClientId }
192
95
  { ...props }
193
96
  >
194
- { ! isCollapsed && <BlockToolbar hideDragHandle={ isFixed } /> }
195
- { isFixed && isLargeViewport && blockType && (
196
- <ToolbarGroup
197
- className={
198
- isCollapsed
199
- ? 'block-editor-block-toolbar__group-expand-fixed-toolbar'
200
- : 'block-editor-block-toolbar__group-collapse-fixed-toolbar'
201
- }
202
- >
203
- <ToolbarItem
204
- as={ ToolbarButton }
205
- ref={ toolbarButtonRef }
206
- icon={ isCollapsed ? next : previous }
207
- onClick={ () => {
208
- setIsCollapsed( ( collapsed ) => ! collapsed );
209
- toolbarButtonRef.current.focus();
210
- } }
211
- label={
212
- isCollapsed
213
- ? __( 'Show block tools' )
214
- : __( 'Hide block tools' )
215
- }
216
- />
217
- </ToolbarGroup>
218
- ) }
97
+ <BlockToolbar hideDragHandle={ isFixed } />
219
98
  </NavigableToolbar>
220
99
  );
221
100
  }
222
-
223
- export default BlockContextualToolbar;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classnames from 'classnames';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import BlockPopover from '../block-popover';
10
+ import useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';
11
+ import Inserter from '../inserter';
12
+ import useSelectedBlockToolProps from './use-selected-block-tool-props';
13
+
14
+ export default function EmptyBlockInserter( {
15
+ clientId,
16
+ __unstableContentRef,
17
+ } ) {
18
+ const {
19
+ capturingClientId,
20
+ isInsertionPointVisible,
21
+ lastClientId,
22
+ rootClientId,
23
+ } = useSelectedBlockToolProps( clientId );
24
+
25
+ const popoverProps = useBlockToolbarPopoverProps( {
26
+ contentElement: __unstableContentRef?.current,
27
+ clientId,
28
+ } );
29
+
30
+ return (
31
+ <BlockPopover
32
+ clientId={ capturingClientId || clientId }
33
+ __unstableCoverTarget
34
+ bottomClientId={ lastClientId }
35
+ className={ classnames(
36
+ 'block-editor-block-list__block-side-inserter-popover',
37
+ {
38
+ 'is-insertion-point-visible': isInsertionPointVisible,
39
+ }
40
+ ) }
41
+ __unstableContentRef={ __unstableContentRef }
42
+ resize={ false }
43
+ shift={ false }
44
+ { ...popoverProps }
45
+ >
46
+ <div className="block-editor-block-list__empty-block-inserter">
47
+ <Inserter
48
+ position="bottom right"
49
+ rootClientId={ rootClientId }
50
+ clientId={ clientId }
51
+ __experimentalIsQuick
52
+ />
53
+ </div>
54
+ </BlockPopover>
55
+ );
56
+ }
@@ -6,28 +6,48 @@ import { useViewportMatch } from '@wordpress/compose';
6
6
  import { Popover } from '@wordpress/components';
7
7
  import { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';
8
8
  import { useRef } from '@wordpress/element';
9
+ import { isUnmodifiedDefaultBlock } from '@wordpress/blocks';
9
10
 
10
11
  /**
11
12
  * Internal dependencies
12
13
  */
14
+ import EmptyBlockInserter from './empty-block-inserter';
13
15
  import {
14
16
  InsertionPointOpenRef,
15
17
  default as InsertionPoint,
16
18
  } from './insertion-point';
17
- import SelectedBlockPopover from './selected-block-popover';
19
+ import SelectedBlockTools from './selected-block-tools';
18
20
  import { store as blockEditorStore } from '../../store';
19
21
  import BlockContextualToolbar from './block-contextual-toolbar';
20
22
  import usePopoverScroll from '../block-popover/use-popover-scroll';
21
23
  import ZoomOutModeInserters from './zoom-out-mode-inserters';
22
24
 
23
25
  function selector( select ) {
24
- const { __unstableGetEditorMode, getSettings, isTyping } =
25
- select( blockEditorStore );
26
+ const {
27
+ getSelectedBlockClientId,
28
+ getFirstMultiSelectedBlockClientId,
29
+ getBlock,
30
+ getSettings,
31
+ __unstableGetEditorMode,
32
+ isTyping,
33
+ } = select( blockEditorStore );
34
+
35
+ const clientId =
36
+ getSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();
37
+
38
+ const { name = '', attributes = {} } = getBlock( clientId ) || {};
26
39
 
27
40
  return {
28
- isZoomOutMode: __unstableGetEditorMode() === 'zoom-out',
41
+ clientId,
29
42
  hasFixedToolbar: getSettings().hasFixedToolbar,
43
+ hasSelectedBlock: clientId && name,
30
44
  isTyping: isTyping(),
45
+ isZoomOutMode: __unstableGetEditorMode() === 'zoom-out',
46
+ showEmptyBlockSideInserter:
47
+ clientId &&
48
+ ! isTyping() &&
49
+ __unstableGetEditorMode() === 'edit' &&
50
+ isUnmodifiedDefaultBlock( { name, attributes } ),
31
51
  };
32
52
  }
33
53
 
@@ -46,10 +66,14 @@ export default function BlockTools( {
46
66
  ...props
47
67
  } ) {
48
68
  const isLargeViewport = useViewportMatch( 'medium' );
49
- const { hasFixedToolbar, isZoomOutMode, isTyping } = useSelect(
50
- selector,
51
- []
52
- );
69
+ const {
70
+ clientId,
71
+ hasFixedToolbar,
72
+ hasSelectedBlock,
73
+ isTyping,
74
+ isZoomOutMode,
75
+ showEmptyBlockSideInserter,
76
+ } = useSelect( selector, [] );
53
77
  const isMatch = useShortcutEventMatch();
54
78
  const { getSelectedBlockClientIds, getBlockRootClientId } =
55
79
  useSelect( blockEditorStore );
@@ -106,6 +130,15 @@ export default function BlockTools( {
106
130
  insertBeforeBlock( clientIds[ 0 ] );
107
131
  }
108
132
  } else if ( isMatch( 'core/block-editor/unselect', event ) ) {
133
+ if ( event.target.closest( '[role=toolbar]' ) ) {
134
+ // This shouldn't be necessary, but we have a combination of a few things all combining to create a situation where:
135
+ // - Because the block toolbar uses createPortal to populate the block toolbar fills, we can't rely on the React event bubbling to hit the onKeyDown listener for the block toolbar
136
+ // - Since we can't use the React tree, we use the DOM tree which _should_ handle the event bubbling correctly from a `createPortal` element.
137
+ // - This bubbles via the React tree, which hits this `unselect` escape keypress before the block toolbar DOM event listener has access to it.
138
+ // An alternative would be to remove the addEventListener on the navigableToolbar and use this event to handle it directly right here. That feels hacky too though.
139
+ return;
140
+ }
141
+
109
142
  const clientIds = getSelectedBlockClientIds();
110
143
  if ( clientIds.length ) {
111
144
  event.preventDefault();
@@ -129,6 +162,12 @@ export default function BlockTools( {
129
162
  const blockToolbarRef = usePopoverScroll( __unstableContentRef );
130
163
  const blockToolbarAfterRef = usePopoverScroll( __unstableContentRef );
131
164
 
165
+ // Conditions for fixed toolbar
166
+ // 1. Not zoom out mode
167
+ // 2. It's a large viewport. If it's a smaller viewport, let the floating toolbar handle it as it already has styles attached to make it render that way.
168
+ // 3. Fixed toolbar is enabled
169
+ const isTopToolbar = ! isZoomOutMode && hasFixedToolbar && isLargeViewport;
170
+
132
171
  return (
133
172
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
134
173
  <div { ...props } onKeyDown={ onKeyDown }>
@@ -138,17 +177,34 @@ export default function BlockTools( {
138
177
  __unstableContentRef={ __unstableContentRef }
139
178
  />
140
179
  ) }
141
- { ! isZoomOutMode &&
142
- ( hasFixedToolbar || ! isLargeViewport ) && (
143
- <BlockContextualToolbar isFixed />
144
- ) }
180
+ { /* If there is no slot available, such as in the standalone block editor, render within the editor */ }
181
+
182
+ { ! isLargeViewport && ( // Small viewports always get a fixed toolbar
183
+ <BlockContextualToolbar isFixed />
184
+ ) }
185
+
186
+ { showEmptyBlockSideInserter && (
187
+ <EmptyBlockInserter
188
+ __unstableContentRef={ __unstableContentRef }
189
+ clientId={ clientId }
190
+ />
191
+ ) }
145
192
  { /* Even if the toolbar is fixed, the block popover is still
146
193
  needed for navigation and zoom-out mode. */ }
147
- <SelectedBlockPopover
148
- __unstableContentRef={ __unstableContentRef }
149
- />
194
+ { ! showEmptyBlockSideInserter && hasSelectedBlock && (
195
+ <SelectedBlockTools
196
+ __unstableContentRef={ __unstableContentRef }
197
+ clientId={ clientId }
198
+ />
199
+ ) }
200
+
150
201
  { /* Used for the inline rich text toolbar. */ }
151
- <Popover.Slot name="block-toolbar" ref={ blockToolbarRef } />
202
+ { ! isTopToolbar && (
203
+ <Popover.Slot
204
+ name="block-toolbar"
205
+ ref={ blockToolbarRef }
206
+ />
207
+ ) }
152
208
  { children }
153
209
  { /* Used for inline rich text popovers. */ }
154
210
  <Popover.Slot