@wordpress/block-editor 10.5.0 → 11.0.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 (488) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/build/autocompleters/block.js +2 -6
  3. package/build/autocompleters/block.js.map +1 -1
  4. package/build/autocompleters/link.js +2 -0
  5. package/build/autocompleters/link.js.map +1 -1
  6. package/build/components/block-card/index.js +51 -3
  7. package/build/components/block-card/index.js.map +1 -1
  8. package/build/components/block-draggable/index.native.js +46 -39
  9. package/build/components/block-draggable/index.native.js.map +1 -1
  10. package/build/components/block-edit/edit.js +4 -3
  11. package/build/components/block-edit/edit.js.map +1 -1
  12. package/build/components/block-edit/edit.native.js +4 -7
  13. package/build/components/block-edit/edit.native.js.map +1 -1
  14. package/build/components/block-inspector/index.js +35 -33
  15. package/build/components/block-inspector/index.js.map +1 -1
  16. package/build/components/block-list/block-list-context.native.js +5 -8
  17. package/build/components/block-list/block-list-context.native.js.map +1 -1
  18. package/build/components/block-list/block.js +55 -24
  19. package/build/components/block-list/block.js.map +1 -1
  20. package/build/components/block-list/block.native.js +61 -28
  21. package/build/components/block-list/block.native.js.map +1 -1
  22. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +12 -4
  23. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  24. package/build/components/block-pattern-setup/index.js +3 -2
  25. package/build/components/block-pattern-setup/index.js.map +1 -1
  26. package/build/components/block-patterns-list/index.js +33 -11
  27. package/build/components/block-patterns-list/index.js.map +1 -1
  28. package/build/components/block-preview/auto.js +9 -3
  29. package/build/components/block-preview/auto.js.map +1 -1
  30. package/build/components/block-preview/index.js +5 -9
  31. package/build/components/block-preview/index.js.map +1 -1
  32. package/build/components/block-settings-menu/block-settings-dropdown.js +5 -2
  33. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  34. package/build/components/block-toolbar/index.js +5 -1
  35. package/build/components/block-toolbar/index.js.map +1 -1
  36. package/build/components/block-tools/insertion-point.js +8 -49
  37. package/build/components/block-tools/insertion-point.js.map +1 -1
  38. package/build/components/block-variation-picker/index.js +1 -2
  39. package/build/components/block-variation-picker/index.js.map +1 -1
  40. package/build/components/height-control/index.js +115 -0
  41. package/build/components/height-control/index.js.map +1 -0
  42. package/build/components/iframe/index.js +11 -8
  43. package/build/components/iframe/index.js.map +1 -1
  44. package/build/components/image-editor/use-save-image.js +2 -0
  45. package/build/components/image-editor/use-save-image.js.map +1 -1
  46. package/build/components/image-editor/zoom-dropdown.js +1 -0
  47. package/build/components/image-editor/zoom-dropdown.js.map +1 -1
  48. package/build/components/index.js +9 -0
  49. package/build/components/index.js.map +1 -1
  50. package/build/components/inner-blocks/index.js +20 -6
  51. package/build/components/inner-blocks/index.js.map +1 -1
  52. package/build/components/inner-blocks/use-inner-block-template-sync.js +25 -10
  53. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  54. package/build/components/inserter/block-patterns-explorer/sidebar.js +1 -0
  55. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  56. package/build/components/inserter/block-patterns-tab.js +25 -46
  57. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  58. package/build/components/inserter/block-types-tab.js +3 -1
  59. package/build/components/inserter/block-types-tab.js.map +1 -1
  60. package/build/components/inserter/hooks/use-debounced-input.js +27 -0
  61. package/build/components/inserter/hooks/use-debounced-input.js.map +1 -0
  62. package/build/components/inserter/index.js +8 -3
  63. package/build/components/inserter/index.js.map +1 -1
  64. package/build/components/inserter/index.native.js +3 -4
  65. package/build/components/inserter/index.native.js.map +1 -1
  66. package/build/components/inserter/media-tab/hooks.js +103 -0
  67. package/build/components/inserter/media-tab/hooks.js.map +1 -0
  68. package/build/components/inserter/media-tab/index.js +32 -0
  69. package/build/components/inserter/media-tab/index.js.map +1 -0
  70. package/build/components/inserter/media-tab/media-list.js +100 -0
  71. package/build/components/inserter/media-tab/media-list.js.map +1 -0
  72. package/build/components/inserter/media-tab/media-panel.js +96 -0
  73. package/build/components/inserter/media-tab/media-panel.js.map +1 -0
  74. package/build/components/inserter/media-tab/media-tab.js +120 -0
  75. package/build/components/inserter/media-tab/media-tab.js.map +1 -0
  76. package/build/components/inserter/media-tab/utils.js +54 -0
  77. package/build/components/inserter/media-tab/utils.js.map +1 -0
  78. package/build/components/inserter/menu.js +35 -12
  79. package/build/components/inserter/menu.js.map +1 -1
  80. package/build/components/inserter/mobile-tab-navigation.js +70 -0
  81. package/build/components/inserter/mobile-tab-navigation.js.map +1 -0
  82. package/build/components/inserter/quick-inserter.js +1 -0
  83. package/build/components/inserter/quick-inserter.js.map +1 -1
  84. package/build/components/inserter/search-results.js +3 -1
  85. package/build/components/inserter/search-results.js.map +1 -1
  86. package/build/components/inserter/tabs.js +16 -2
  87. package/build/components/inserter/tabs.js.map +1 -1
  88. package/build/components/inserter-list-item/index.js +4 -1
  89. package/build/components/inserter-list-item/index.js.map +1 -1
  90. package/build/components/inspector-controls/groups.js +2 -0
  91. package/build/components/inspector-controls/groups.js.map +1 -1
  92. package/build/components/inspector-controls-tabs/advanced-controls-panel.js +46 -0
  93. package/build/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -0
  94. package/build/components/inspector-controls-tabs/index.js +71 -0
  95. package/build/components/inspector-controls-tabs/index.js.map +1 -0
  96. package/build/components/inspector-controls-tabs/settings-tab.js +28 -0
  97. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -0
  98. package/build/components/inspector-controls-tabs/styles-tab.js +61 -0
  99. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -0
  100. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +97 -0
  101. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -0
  102. package/build/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js +18 -0
  103. package/build/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js.map +1 -0
  104. package/build/components/inspector-controls-tabs/utils.js +37 -0
  105. package/build/components/inspector-controls-tabs/utils.js.map +1 -0
  106. package/build/components/link-control/index.js +1 -0
  107. package/build/components/link-control/index.js.map +1 -1
  108. package/build/components/link-control/search-input.js +0 -1
  109. package/build/components/link-control/search-input.js.map +1 -1
  110. package/build/components/link-control/use-internal-input-value.js +3 -3
  111. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  112. package/build/components/list-view/block.js +5 -2
  113. package/build/components/list-view/block.js.map +1 -1
  114. package/build/components/list-view/branch.js +13 -12
  115. package/build/components/list-view/branch.js.map +1 -1
  116. package/build/components/media-upload/index.native.js +2 -3
  117. package/build/components/media-upload/index.native.js.map +1 -1
  118. package/build/components/off-canvas-editor/appender.js +104 -0
  119. package/build/components/off-canvas-editor/appender.js.map +1 -0
  120. package/build/components/off-canvas-editor/block-edit-button.js +50 -0
  121. package/build/components/off-canvas-editor/block-edit-button.js.map +1 -0
  122. package/build/components/off-canvas-editor/block.js +36 -4
  123. package/build/components/off-canvas-editor/block.js.map +1 -1
  124. package/build/components/off-canvas-editor/branch.js +3 -5
  125. package/build/components/off-canvas-editor/branch.js.map +1 -1
  126. package/build/components/off-canvas-editor/index.js +20 -11
  127. package/build/components/off-canvas-editor/index.js.map +1 -1
  128. package/build/components/off-canvas-editor/leaf.js +1 -1
  129. package/build/components/off-canvas-editor/leaf.js.map +1 -1
  130. package/build/components/off-canvas-editor/link-ui.js +185 -0
  131. package/build/components/off-canvas-editor/link-ui.js.map +1 -0
  132. package/build/components/off-canvas-editor/update-attributes.js +108 -0
  133. package/build/components/off-canvas-editor/update-attributes.js.map +1 -0
  134. package/build/components/rich-text/format-toolbar/index.js +8 -4
  135. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  136. package/build/components/rich-text/index.js +3 -3
  137. package/build/components/rich-text/index.js.map +1 -1
  138. package/build/components/rich-text/index.native.js +0 -2
  139. package/build/components/rich-text/index.native.js.map +1 -1
  140. package/build/components/rich-text/use-insert-replacement-text.js +43 -0
  141. package/build/components/rich-text/use-insert-replacement-text.js.map +1 -0
  142. package/build/components/rich-text/use-undo-automatic-change.js +9 -1
  143. package/build/components/rich-text/use-undo-automatic-change.js.map +1 -1
  144. package/build/components/rich-text/utils.js +1 -19
  145. package/build/components/rich-text/utils.js.map +1 -1
  146. package/build/components/spacing-sizes-control/spacing-input-control.js +12 -3
  147. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  148. package/build/components/ungroup-button/index.native.js +4 -2
  149. package/build/components/ungroup-button/index.native.js.map +1 -1
  150. package/build/components/url-input/index.js +46 -43
  151. package/build/components/url-input/index.js.map +1 -1
  152. package/build/components/use-block-display-information/index.js +8 -4
  153. package/build/components/use-block-display-information/index.js.map +1 -1
  154. package/build/components/use-setting/index.js +9 -1
  155. package/build/components/use-setting/index.js.map +1 -1
  156. package/build/hooks/child-layout.js +209 -0
  157. package/build/hooks/child-layout.js.map +1 -0
  158. package/build/hooks/content-lock-ui.js +1 -1
  159. package/build/hooks/content-lock-ui.js.map +1 -1
  160. package/build/hooks/dimensions.js +25 -7
  161. package/build/hooks/dimensions.js.map +1 -1
  162. package/build/hooks/layout.js +57 -1
  163. package/build/hooks/layout.js.map +1 -1
  164. package/build/hooks/min-height.js +4 -10
  165. package/build/hooks/min-height.js.map +1 -1
  166. package/build/store/reducer.js +393 -270
  167. package/build/store/reducer.js.map +1 -1
  168. package/build/store/selectors.js +57 -47
  169. package/build/store/selectors.js.map +1 -1
  170. package/build/utils/sorting.js +63 -0
  171. package/build/utils/sorting.js.map +1 -0
  172. package/build-module/autocompleters/block.js +2 -6
  173. package/build-module/autocompleters/block.js.map +1 -1
  174. package/build-module/autocompleters/link.js +2 -0
  175. package/build-module/autocompleters/link.js.map +1 -1
  176. package/build-module/components/block-card/index.js +45 -3
  177. package/build-module/components/block-card/index.js.map +1 -1
  178. package/build-module/components/block-draggable/index.native.js +40 -31
  179. package/build-module/components/block-draggable/index.native.js.map +1 -1
  180. package/build-module/components/block-edit/edit.js +4 -2
  181. package/build-module/components/block-edit/edit.js.map +1 -1
  182. package/build-module/components/block-edit/edit.native.js +4 -6
  183. package/build-module/components/block-edit/edit.native.js.map +1 -1
  184. package/build-module/components/block-inspector/index.js +32 -30
  185. package/build-module/components/block-inspector/index.js.map +1 -1
  186. package/build-module/components/block-list/block-list-context.native.js +5 -8
  187. package/build-module/components/block-list/block-list-context.native.js.map +1 -1
  188. package/build-module/components/block-list/block.js +55 -25
  189. package/build-module/components/block-list/block.js.map +1 -1
  190. package/build-module/components/block-list/block.native.js +61 -28
  191. package/build-module/components/block-list/block.native.js.map +1 -1
  192. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +13 -6
  193. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  194. package/build-module/components/block-pattern-setup/index.js +3 -2
  195. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  196. package/build-module/components/block-patterns-list/index.js +35 -13
  197. package/build-module/components/block-patterns-list/index.js.map +1 -1
  198. package/build-module/components/block-preview/auto.js +9 -3
  199. package/build-module/components/block-preview/auto.js.map +1 -1
  200. package/build-module/components/block-preview/index.js +5 -8
  201. package/build-module/components/block-preview/index.js.map +1 -1
  202. package/build-module/components/block-settings-menu/block-settings-dropdown.js +5 -2
  203. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  204. package/build-module/components/block-toolbar/index.js +6 -2
  205. package/build-module/components/block-toolbar/index.js.map +1 -1
  206. package/build-module/components/block-tools/insertion-point.js +8 -49
  207. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  208. package/build-module/components/block-variation-picker/index.js +1 -2
  209. package/build-module/components/block-variation-picker/index.js.map +1 -1
  210. package/build-module/components/height-control/index.js +103 -0
  211. package/build-module/components/height-control/index.js.map +1 -0
  212. package/build-module/components/iframe/index.js +11 -8
  213. package/build-module/components/iframe/index.js.map +1 -1
  214. package/build-module/components/image-editor/use-save-image.js +2 -0
  215. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  216. package/build-module/components/image-editor/zoom-dropdown.js +1 -0
  217. package/build-module/components/image-editor/zoom-dropdown.js.map +1 -1
  218. package/build-module/components/index.js +1 -0
  219. package/build-module/components/index.js.map +1 -1
  220. package/build-module/components/inner-blocks/index.js +22 -8
  221. package/build-module/components/inner-blocks/index.js.map +1 -1
  222. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +23 -10
  223. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  224. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +1 -0
  225. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  226. package/build-module/components/inserter/block-patterns-tab.js +27 -49
  227. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  228. package/build-module/components/inserter/block-types-tab.js +3 -2
  229. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  230. package/build-module/components/inserter/hooks/use-debounced-input.js +18 -0
  231. package/build-module/components/inserter/hooks/use-debounced-input.js.map +1 -0
  232. package/build-module/components/inserter/index.js +8 -3
  233. package/build-module/components/inserter/index.js.map +1 -1
  234. package/build-module/components/inserter/index.native.js +3 -5
  235. package/build-module/components/inserter/index.native.js.map +1 -1
  236. package/build-module/components/inserter/media-tab/hooks.js +89 -0
  237. package/build-module/components/inserter/media-tab/hooks.js.map +1 -0
  238. package/build-module/components/inserter/media-tab/index.js +4 -0
  239. package/build-module/components/inserter/media-tab/index.js.map +1 -0
  240. package/build-module/components/inserter/media-tab/media-list.js +86 -0
  241. package/build-module/components/inserter/media-tab/media-list.js.map +1 -0
  242. package/build-module/components/inserter/media-tab/media-panel.js +77 -0
  243. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -0
  244. package/build-module/components/inserter/media-tab/media-tab.js +100 -0
  245. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -0
  246. package/build-module/components/inserter/media-tab/utils.js +45 -0
  247. package/build-module/components/inserter/media-tab/utils.js.map +1 -0
  248. package/build-module/components/inserter/menu.js +33 -12
  249. package/build-module/components/inserter/menu.js.map +1 -1
  250. package/build-module/components/inserter/mobile-tab-navigation.js +61 -0
  251. package/build-module/components/inserter/mobile-tab-navigation.js.map +1 -0
  252. package/build-module/components/inserter/quick-inserter.js +1 -0
  253. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  254. package/build-module/components/inserter/search-results.js +3 -2
  255. package/build-module/components/inserter/search-results.js.map +1 -1
  256. package/build-module/components/inserter/tabs.js +15 -2
  257. package/build-module/components/inserter/tabs.js.map +1 -1
  258. package/build-module/components/inserter-list-item/index.js +5 -2
  259. package/build-module/components/inserter-list-item/index.js.map +1 -1
  260. package/build-module/components/inspector-controls/groups.js +2 -0
  261. package/build-module/components/inspector-controls/groups.js.map +1 -1
  262. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js +32 -0
  263. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -0
  264. package/build-module/components/inspector-controls-tabs/index.js +56 -0
  265. package/build-module/components/inspector-controls-tabs/index.js.map +1 -0
  266. package/build-module/components/inspector-controls-tabs/settings-tab.js +17 -0
  267. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -0
  268. package/build-module/components/inspector-controls-tabs/styles-tab.js +46 -0
  269. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -0
  270. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +81 -0
  271. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -0
  272. package/build-module/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js +8 -0
  273. package/build-module/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js.map +1 -0
  274. package/build-module/components/inspector-controls-tabs/utils.js +26 -0
  275. package/build-module/components/inspector-controls-tabs/utils.js.map +1 -0
  276. package/build-module/components/link-control/index.js +1 -0
  277. package/build-module/components/link-control/index.js.map +1 -1
  278. package/build-module/components/link-control/search-input.js +0 -1
  279. package/build-module/components/link-control/search-input.js.map +1 -1
  280. package/build-module/components/link-control/use-internal-input-value.js +3 -3
  281. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  282. package/build-module/components/list-view/block.js +5 -2
  283. package/build-module/components/list-view/block.js.map +1 -1
  284. package/build-module/components/list-view/branch.js +12 -11
  285. package/build-module/components/list-view/branch.js.map +1 -1
  286. package/build-module/components/media-upload/index.native.js +2 -4
  287. package/build-module/components/media-upload/index.native.js.map +1 -1
  288. package/build-module/components/off-canvas-editor/appender.js +89 -0
  289. package/build-module/components/off-canvas-editor/appender.js.map +1 -0
  290. package/build-module/components/off-canvas-editor/block-edit-button.js +35 -0
  291. package/build-module/components/off-canvas-editor/block-edit-button.js.map +1 -0
  292. package/build-module/components/off-canvas-editor/block.js +36 -6
  293. package/build-module/components/off-canvas-editor/block.js.map +1 -1
  294. package/build-module/components/off-canvas-editor/branch.js +3 -4
  295. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  296. package/build-module/components/off-canvas-editor/index.js +20 -12
  297. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  298. package/build-module/components/off-canvas-editor/leaf.js +1 -1
  299. package/build-module/components/off-canvas-editor/leaf.js.map +1 -1
  300. package/build-module/components/off-canvas-editor/link-ui.js +165 -0
  301. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -0
  302. package/build-module/components/off-canvas-editor/update-attributes.js +97 -0
  303. package/build-module/components/off-canvas-editor/update-attributes.js.map +1 -0
  304. package/build-module/components/rich-text/format-toolbar/index.js +6 -2
  305. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  306. package/build-module/components/rich-text/index.js +2 -3
  307. package/build-module/components/rich-text/index.js.map +1 -1
  308. package/build-module/components/rich-text/index.native.js +0 -2
  309. package/build-module/components/rich-text/index.native.js.map +1 -1
  310. package/build-module/components/rich-text/use-insert-replacement-text.js +33 -0
  311. package/build-module/components/rich-text/use-insert-replacement-text.js.map +1 -0
  312. package/build-module/components/rich-text/use-undo-automatic-change.js +9 -1
  313. package/build-module/components/rich-text/use-undo-automatic-change.js.map +1 -1
  314. package/build-module/components/rich-text/utils.js +1 -16
  315. package/build-module/components/rich-text/utils.js.map +1 -1
  316. package/build-module/components/spacing-sizes-control/spacing-input-control.js +12 -3
  317. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  318. package/build-module/components/ungroup-button/index.native.js +3 -2
  319. package/build-module/components/ungroup-button/index.native.js.map +1 -1
  320. package/build-module/components/url-input/index.js +46 -43
  321. package/build-module/components/url-input/index.js.map +1 -1
  322. package/build-module/components/use-block-display-information/index.js +9 -5
  323. package/build-module/components/use-block-display-information/index.js.map +1 -1
  324. package/build-module/components/use-setting/index.js +8 -1
  325. package/build-module/components/use-setting/index.js.map +1 -1
  326. package/build-module/hooks/child-layout.js +189 -0
  327. package/build-module/hooks/child-layout.js.map +1 -0
  328. package/build-module/hooks/content-lock-ui.js +1 -1
  329. package/build-module/hooks/content-lock-ui.js.map +1 -1
  330. package/build-module/hooks/dimensions.js +25 -8
  331. package/build-module/hooks/dimensions.js.map +1 -1
  332. package/build-module/hooks/layout.js +55 -0
  333. package/build-module/hooks/layout.js.map +1 -1
  334. package/build-module/hooks/min-height.js +3 -9
  335. package/build-module/hooks/min-height.js.map +1 -1
  336. package/build-module/store/reducer.js +391 -271
  337. package/build-module/store/reducer.js.map +1 -1
  338. package/build-module/store/selectors.js +54 -47
  339. package/build-module/store/selectors.js.map +1 -1
  340. package/build-module/utils/sorting.js +56 -0
  341. package/build-module/utils/sorting.js.map +1 -0
  342. package/build-style/content-rtl.css +701 -0
  343. package/build-style/content.css +701 -0
  344. package/build-style/default-editor-styles-rtl.css +14 -0
  345. package/build-style/default-editor-styles.css +14 -0
  346. package/build-style/style-rtl.css +286 -662
  347. package/build-style/style.css +286 -662
  348. package/package.json +32 -30
  349. package/src/autocompleters/block.js +2 -6
  350. package/src/autocompleters/link.js +2 -0
  351. package/src/components/alignment-control/test/index.js +4 -1
  352. package/src/components/block-alignment-control/test/index.js +4 -1
  353. package/src/components/block-card/index.js +46 -2
  354. package/src/components/block-card/style.scss +4 -0
  355. package/src/components/block-content-overlay/{style.scss → content.scss} +7 -1
  356. package/src/components/block-draggable/content.scss +20 -0
  357. package/src/components/block-draggable/index.native.js +54 -40
  358. package/src/components/block-draggable/style.scss +0 -21
  359. package/src/components/block-draggable/test/helpers.native.js +7 -9
  360. package/src/components/block-draggable/test/index.native.js +35 -45
  361. package/src/components/block-edit/edit.js +5 -2
  362. package/src/components/block-edit/edit.native.js +5 -6
  363. package/src/components/block-inspector/index.js +96 -81
  364. package/src/components/block-inspector/style.scss +9 -1
  365. package/src/components/block-list/block-list-context.native.js +5 -8
  366. package/src/components/block-list/block.js +74 -23
  367. package/src/components/block-list/block.native.js +78 -23
  368. package/src/components/block-list/{style.scss → content.scss} +1 -15
  369. package/src/components/block-list-appender/{style.scss → content.scss} +0 -0
  370. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +24 -6
  371. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +0 -2
  372. package/src/components/block-pattern-setup/index.js +2 -1
  373. package/src/components/block-patterns-list/index.js +47 -24
  374. package/src/components/block-preview/README.md +15 -10
  375. package/src/components/block-preview/auto.js +7 -1
  376. package/src/components/block-preview/content.scss +4 -0
  377. package/src/components/block-preview/index.js +7 -12
  378. package/src/components/block-preview/style.scss +0 -7
  379. package/src/components/block-preview/test/index.js +18 -35
  380. package/src/components/block-selection-clearer/test/index.js +12 -12
  381. package/src/components/block-settings-menu/block-settings-dropdown.js +32 -20
  382. package/src/components/block-switcher/test/index.js +4 -0
  383. package/src/components/block-toolbar/index.js +12 -5
  384. package/src/components/block-toolbar/style.scss +10 -0
  385. package/src/components/block-tools/insertion-point.js +3 -47
  386. package/src/components/block-tools/style.scss +12 -5
  387. package/src/components/block-variation-picker/index.js +1 -4
  388. package/src/components/block-vertical-alignment-control/test/index.js +4 -1
  389. package/src/components/default-block-appender/{style.scss → content.scss} +0 -0
  390. package/src/components/height-control/index.js +123 -0
  391. package/src/components/height-control/stories/index.js +21 -0
  392. package/src/components/height-control/style.scss +5 -0
  393. package/src/components/iframe/index.js +25 -18
  394. package/src/components/image-editor/use-save-image.js +2 -0
  395. package/src/components/image-editor/zoom-dropdown.js +1 -0
  396. package/src/components/index.js +1 -0
  397. package/src/components/inner-blocks/{style.scss → content.scss} +0 -0
  398. package/src/components/inner-blocks/index.js +23 -6
  399. package/src/components/inner-blocks/use-inner-block-template-sync.js +28 -10
  400. package/src/components/inserter/block-patterns-explorer/sidebar.js +1 -0
  401. package/src/components/inserter/block-patterns-tab.js +28 -71
  402. package/src/components/inserter/block-types-tab.js +3 -2
  403. package/src/components/inserter/hooks/use-debounced-input.js +17 -0
  404. package/src/components/inserter/index.js +10 -2
  405. package/src/components/inserter/index.native.js +1 -1
  406. package/src/components/inserter/media-tab/hooks.js +88 -0
  407. package/src/components/inserter/media-tab/index.js +3 -0
  408. package/src/components/inserter/media-tab/media-list.js +93 -0
  409. package/src/components/inserter/media-tab/media-panel.js +83 -0
  410. package/src/components/inserter/media-tab/media-tab.js +135 -0
  411. package/src/components/inserter/media-tab/utils.js +37 -0
  412. package/src/components/inserter/menu.js +55 -13
  413. package/src/components/inserter/mobile-tab-navigation.js +85 -0
  414. package/src/components/inserter/quick-inserter.js +1 -0
  415. package/src/components/inserter/search-results.js +3 -2
  416. package/src/components/inserter/stories/index.js +1 -1
  417. package/src/components/inserter/stories/{fixtures.js → utils/fixtures.js} +0 -0
  418. package/src/components/inserter/style.scss +176 -11
  419. package/src/components/inserter/tabs.js +12 -1
  420. package/src/components/inserter-list-item/index.js +11 -1
  421. package/src/components/inserter-list-item/style.scss +26 -0
  422. package/src/components/inspector-controls/groups.js +2 -0
  423. package/src/components/inspector-controls-tabs/advanced-controls-panel.js +37 -0
  424. package/src/components/inspector-controls-tabs/index.js +62 -0
  425. package/src/components/inspector-controls-tabs/settings-tab.js +18 -0
  426. package/src/components/inspector-controls-tabs/styles-tab.js +51 -0
  427. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +89 -0
  428. package/src/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js +9 -0
  429. package/src/components/inspector-controls-tabs/utils.js +28 -0
  430. package/src/components/line-height-control/test/index.js +5 -5
  431. package/src/components/link-control/README.md +1 -1
  432. package/src/components/link-control/index.js +1 -0
  433. package/src/components/link-control/search-input.js +0 -1
  434. package/src/components/link-control/test/index.js +188 -401
  435. package/src/components/link-control/use-internal-input-value.js +3 -3
  436. package/src/components/list-view/block.js +3 -0
  437. package/src/components/list-view/branch.js +10 -8
  438. package/src/components/list-view/style.scss +20 -9
  439. package/src/components/media-placeholder/{style.scss → content.scss} +0 -0
  440. package/src/components/media-replace-flow/test/index.js +37 -9
  441. package/src/components/media-upload/test/index.native.js +2 -0
  442. package/src/components/off-canvas-editor/appender.js +93 -0
  443. package/src/components/off-canvas-editor/block-edit-button.js +27 -0
  444. package/src/components/off-canvas-editor/block.js +88 -22
  445. package/src/components/off-canvas-editor/branch.js +3 -5
  446. package/src/components/off-canvas-editor/index.js +59 -33
  447. package/src/components/off-canvas-editor/leaf.js +5 -1
  448. package/src/components/off-canvas-editor/link-ui.js +166 -0
  449. package/src/components/off-canvas-editor/style.scss +17 -388
  450. package/src/components/off-canvas-editor/update-attributes.js +99 -0
  451. package/src/components/plain-text/{style.scss → content.scss} +0 -0
  452. package/src/components/recursion-provider/test/index.js +27 -29
  453. package/src/components/rich-text/content.scss +42 -0
  454. package/src/components/rich-text/format-toolbar/index.js +6 -4
  455. package/src/components/rich-text/index.js +2 -2
  456. package/src/components/rich-text/index.native.js +0 -2
  457. package/src/components/rich-text/style.scss +0 -43
  458. package/src/components/rich-text/use-insert-replacement-text.js +31 -0
  459. package/src/components/rich-text/use-undo-automatic-change.js +7 -1
  460. package/src/components/rich-text/utils.js +2 -21
  461. package/src/components/spacing-sizes-control/spacing-input-control.js +9 -0
  462. package/src/components/ungroup-button/index.native.js +6 -2
  463. package/src/components/url-input/index.js +57 -73
  464. package/src/components/url-popover/test/__snapshots__/index.js.snap +8 -6
  465. package/src/components/url-popover/test/index.js +21 -9
  466. package/src/components/use-block-display-information/index.js +14 -5
  467. package/src/components/use-setting/index.js +13 -1
  468. package/src/components/use-setting/test/index.js +99 -0
  469. package/src/content.scss +10 -0
  470. package/src/hooks/child-layout.js +190 -0
  471. package/src/hooks/content-lock-ui.js +1 -1
  472. package/src/hooks/dimensions.js +45 -7
  473. package/src/hooks/layout.js +60 -0
  474. package/src/hooks/min-height.js +2 -19
  475. package/src/store/reducer.js +459 -423
  476. package/src/store/selectors.js +56 -57
  477. package/src/store/test/performance.js +71 -0
  478. package/src/store/test/reducer.js +623 -491
  479. package/src/store/test/selectors.js +1820 -1306
  480. package/src/style.scss +4 -7
  481. package/src/utils/sorting.js +54 -0
  482. package/src/utils/test/sorting.js +49 -0
  483. package/tsconfig.tsbuildinfo +1 -1
  484. package/build/components/block-preview/live.js +0 -30
  485. package/build/components/block-preview/live.js.map +0 -1
  486. package/build-module/components/block-preview/live.js +0 -20
  487. package/build-module/components/block-preview/live.js.map +0 -1
  488. package/src/components/block-preview/live.js +0 -19
@@ -2,7 +2,6 @@
2
2
  * External dependencies
3
3
  */
4
4
  import classnames from 'classnames';
5
- import { pick } from 'lodash';
6
5
 
7
6
  /**
8
7
  * WordPress dependencies
@@ -38,7 +37,11 @@ export const Edit = ( props ) => {
38
37
  // Assign context values using the block type's declared context needs.
39
38
  const context = useMemo( () => {
40
39
  return blockType && blockType.usesContext
41
- ? pick( blockContext, blockType.usesContext )
40
+ ? Object.fromEntries(
41
+ Object.entries( blockContext ).filter( ( [ key ] ) =>
42
+ blockType.usesContext.includes( key )
43
+ )
44
+ )
42
45
  : DEFAULT_BLOCK_CONTEXT;
43
46
  }, [ blockType, blockContext ] );
44
47
 
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { pick } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -34,7 +29,11 @@ export const Edit = ( props ) => {
34
29
  // Assign context values using the block type's declared context needs.
35
30
  const context = useMemo( () => {
36
31
  return blockType && blockType.usesContext
37
- ? pick( blockContext, blockType.usesContext )
32
+ ? Object.fromEntries(
33
+ Object.entries( blockContext ).filter( ( [ key ] ) =>
34
+ blockType.usesContext.includes( key )
35
+ )
36
+ )
38
37
  : DEFAULT_BLOCK_CONTEXT;
39
38
  }, [ blockType, blockContext ] );
40
39
 
@@ -9,9 +9,8 @@ import {
9
9
  store as blocksStore,
10
10
  } from '@wordpress/blocks';
11
11
  import {
12
- PanelBody,
13
- __experimentalUseSlotFills as useSlotFills,
14
12
  FlexItem,
13
+ PanelBody,
15
14
  __experimentalHStack as HStack,
16
15
  __experimentalVStack as VStack,
17
16
  Button,
@@ -24,20 +23,20 @@ import { useMemo, useCallback } from '@wordpress/element';
24
23
  */
25
24
  import SkipToSelectedBlock from '../skip-to-selected-block';
26
25
  import BlockCard from '../block-card';
27
- import {
28
- default as InspectorControls,
29
- InspectorAdvancedControls,
30
- } from '../inspector-controls';
31
- import BlockStyles from '../block-styles';
32
26
  import MultiSelectionInspector from '../multi-selection-inspector';
33
- import DefaultStylePicker from '../default-style-picker';
34
27
  import BlockVariationTransforms from '../block-variation-transforms';
35
28
  import useBlockDisplayInformation from '../use-block-display-information';
36
29
  import { store as blockEditorStore } from '../../store';
37
30
  import BlockIcon from '../block-icon';
31
+ import BlockStyles from '../block-styles';
32
+ import DefaultStylePicker from '../default-style-picker';
33
+ import { default as InspectorControls } from '../inspector-controls';
34
+ import { default as InspectorControlsTabs } from '../inspector-controls-tabs';
35
+ import useInspectorControlsTabs from '../inspector-controls-tabs/use-inspector-controls-tabs';
36
+ import AdvancedControls from '../inspector-controls-tabs/advanced-controls-panel';
38
37
 
39
38
  function useContentBlocks( blockTypes, block ) {
40
- const contenBlocksObjectAux = useMemo( () => {
39
+ const contentBlocksObjectAux = useMemo( () => {
41
40
  return blockTypes.reduce( ( result, blockType ) => {
42
41
  if (
43
42
  blockType.name !== 'core/list-item' &&
@@ -53,7 +52,7 @@ function useContentBlocks( blockTypes, block ) {
53
52
  }, [ blockTypes ] );
54
53
  const isContentBlock = useCallback(
55
54
  ( blockName ) => {
56
- return !! contenBlocksObjectAux[ blockName ];
55
+ return !! contentBlocksObjectAux[ blockName ];
57
56
  },
58
57
  [ blockTypes ]
59
58
  );
@@ -108,7 +107,10 @@ function BlockInspectorLockedBlocks( { topLevelLockedBlock } ) {
108
107
  const contentBlocks = useContentBlocks( blockTypes, block );
109
108
  return (
110
109
  <div className="block-editor-block-inspector">
111
- <BlockCard { ...blockInformation } />
110
+ <BlockCard
111
+ { ...blockInformation }
112
+ className={ blockInformation.isSynced && 'is-synced' }
113
+ />
112
114
  <BlockVariationTransforms blockClientId={ topLevelLockedBlock } />
113
115
  <VStack
114
116
  spacing={ 1 }
@@ -166,28 +168,37 @@ const BlockInspector = ( { showNoBlockSelectedMessage = true } ) => {
166
168
  };
167
169
  }, [] );
168
170
 
171
+ const availableTabs = useInspectorControlsTabs( blockType?.name );
172
+ const showTabs = availableTabs?.length > 1;
173
+
169
174
  if ( count > 1 ) {
170
175
  return (
171
176
  <div className="block-editor-block-inspector">
172
177
  <MultiSelectionInspector />
173
- <InspectorControls.Slot />
174
- <InspectorControls.Slot
175
- __experimentalGroup="color"
176
- label={ __( 'Color' ) }
177
- className="color-block-support-panel__inner-wrapper"
178
- />
179
- <InspectorControls.Slot
180
- __experimentalGroup="typography"
181
- label={ __( 'Typography' ) }
182
- />
183
- <InspectorControls.Slot
184
- __experimentalGroup="dimensions"
185
- label={ __( 'Dimensions' ) }
186
- />
187
- <InspectorControls.Slot
188
- __experimentalGroup="border"
189
- label={ __( 'Border' ) }
190
- />
178
+ { showTabs ? (
179
+ <InspectorControlsTabs tabs={ availableTabs } />
180
+ ) : (
181
+ <>
182
+ <InspectorControls.Slot />
183
+ <InspectorControls.Slot
184
+ __experimentalGroup="color"
185
+ label={ __( 'Color' ) }
186
+ className="color-block-support-panel__inner-wrapper"
187
+ />
188
+ <InspectorControls.Slot
189
+ __experimentalGroup="typography"
190
+ label={ __( 'Typography' ) }
191
+ />
192
+ <InspectorControls.Slot
193
+ __experimentalGroup="dimensions"
194
+ label={ __( 'Dimensions' ) }
195
+ />
196
+ <InspectorControls.Slot
197
+ __experimentalGroup="border"
198
+ label={ __( 'Border' ) }
199
+ />
200
+ </>
201
+ ) }
191
202
  </div>
192
203
  );
193
204
  }
@@ -229,6 +240,9 @@ const BlockInspector = ( { showNoBlockSelectedMessage = true } ) => {
229
240
  };
230
241
 
231
242
  const BlockInspectorSingleBlock = ( { clientId, blockName } ) => {
243
+ const availableTabs = useInspectorControlsTabs( blockName );
244
+ const showTabs = availableTabs?.length > 1;
245
+
232
246
  const hasBlockStyles = useSelect(
233
247
  ( select ) => {
234
248
  const { getBlockStyles } = select( blocksStore );
@@ -238,67 +252,68 @@ const BlockInspectorSingleBlock = ( { clientId, blockName } ) => {
238
252
  [ blockName ]
239
253
  );
240
254
  const blockInformation = useBlockDisplayInformation( clientId );
255
+
241
256
  return (
242
257
  <div className="block-editor-block-inspector">
243
- <BlockCard { ...blockInformation } />
258
+ <BlockCard
259
+ { ...blockInformation }
260
+ className={ blockInformation.isSynced && 'is-synced' }
261
+ />
244
262
  <BlockVariationTransforms blockClientId={ clientId } />
245
- { hasBlockStyles && (
246
- <div>
247
- <PanelBody title={ __( 'Styles' ) }>
248
- <BlockStyles clientId={ clientId } />
249
- { hasBlockSupport(
250
- blockName,
251
- 'defaultStylePicker',
252
- true
253
- ) && <DefaultStylePicker blockName={ blockName } /> }
254
- </PanelBody>
255
- </div>
263
+ { showTabs && (
264
+ <InspectorControlsTabs
265
+ hasBlockStyles={ hasBlockStyles }
266
+ clientId={ clientId }
267
+ blockName={ blockName }
268
+ tabs={ availableTabs }
269
+ />
270
+ ) }
271
+ { ! showTabs && (
272
+ <>
273
+ { hasBlockStyles && (
274
+ <div>
275
+ <PanelBody title={ __( 'Styles' ) }>
276
+ <BlockStyles clientId={ clientId } />
277
+ { hasBlockSupport(
278
+ blockName,
279
+ 'defaultStylePicker',
280
+ true
281
+ ) && (
282
+ <DefaultStylePicker
283
+ blockName={ blockName }
284
+ />
285
+ ) }
286
+ </PanelBody>
287
+ </div>
288
+ ) }
289
+ <InspectorControls.Slot />
290
+ <InspectorControls.Slot
291
+ __experimentalGroup="color"
292
+ label={ __( 'Color' ) }
293
+ className="color-block-support-panel__inner-wrapper"
294
+ />
295
+ <InspectorControls.Slot
296
+ __experimentalGroup="typography"
297
+ label={ __( 'Typography' ) }
298
+ />
299
+ <InspectorControls.Slot
300
+ __experimentalGroup="dimensions"
301
+ label={ __( 'Dimensions' ) }
302
+ />
303
+ <InspectorControls.Slot
304
+ __experimentalGroup="border"
305
+ label={ __( 'Border' ) }
306
+ />
307
+ <div>
308
+ <AdvancedControls />
309
+ </div>
310
+ </>
256
311
  ) }
257
- <InspectorControls.Slot />
258
- <InspectorControls.Slot
259
- __experimentalGroup="color"
260
- label={ __( 'Color' ) }
261
- className="color-block-support-panel__inner-wrapper"
262
- />
263
- <InspectorControls.Slot
264
- __experimentalGroup="typography"
265
- label={ __( 'Typography' ) }
266
- />
267
- <InspectorControls.Slot
268
- __experimentalGroup="dimensions"
269
- label={ __( 'Dimensions' ) }
270
- />
271
- <InspectorControls.Slot
272
- __experimentalGroup="border"
273
- label={ __( 'Border' ) }
274
- />
275
- <div>
276
- <AdvancedControls />
277
- </div>
278
312
  <SkipToSelectedBlock key="back" />
279
313
  </div>
280
314
  );
281
315
  };
282
316
 
283
- const AdvancedControls = () => {
284
- const fills = useSlotFills( InspectorAdvancedControls.slotName );
285
- const hasFills = Boolean( fills && fills.length );
286
-
287
- if ( ! hasFills ) {
288
- return null;
289
- }
290
-
291
- return (
292
- <PanelBody
293
- className="block-editor-block-inspector__advanced"
294
- title={ __( 'Advanced' ) }
295
- initialOpen={ false }
296
- >
297
- <InspectorControls.Slot __experimentalGroup="advanced" />
298
- </PanelBody>
299
- );
300
- };
301
-
302
317
  /**
303
318
  * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-inspector/README.md
304
319
  */
@@ -27,7 +27,8 @@
27
27
  }
28
28
  }
29
29
 
30
- .block-editor-block-inspector__no-blocks {
30
+ .block-editor-block-inspector__no-blocks,
31
+ .block-editor-block-inspector__no-block-tools {
31
32
  display: block;
32
33
  font-size: $default-font-size;
33
34
  background: $white;
@@ -35,6 +36,13 @@
35
36
  text-align: center;
36
37
  }
37
38
 
39
+ .block-editor-block-inspector__no-block-tools {
40
+ border-top: $border-width solid $gray-300;
41
+ }
42
+
43
+ .block-editor-block-inspector__tab-item {
44
+ flex: 1 1 0px;
45
+ }
38
46
 
39
47
  .block-editor-block-inspector__block-buttons-container {
40
48
  border-top: $border-width solid $gray-200;
@@ -1,12 +1,12 @@
1
1
  /**
2
- * External dependencies
2
+ * WordPress dependencies
3
3
  */
4
- import { orderBy } from 'lodash';
4
+ import { createContext, useContext } from '@wordpress/element';
5
5
 
6
6
  /**
7
- * WordPress dependencies
7
+ * Internal dependencies
8
8
  */
9
- import { createContext, useContext } from '@wordpress/element';
9
+ import { orderBy } from '../../utils/sorting';
10
10
 
11
11
  export const DEFAULT_BLOCK_LIST_CONTEXT = {
12
12
  scrollRef: null,
@@ -103,10 +103,7 @@ export function deleteBlockLayoutByClientId( data, clientId ) {
103
103
  */
104
104
  function getBlockLayoutsOrderedByYCoord( data ) {
105
105
  // Only enabled for root level blocks.
106
- // Using lodash orderBy due to hermes not having
107
- // stable support for native .sort(). It will be
108
- // supported in the React Native version 0.68.0.
109
- return orderBy( data, [ 'y', 'asc' ] );
106
+ return orderBy( Object.values( data ), 'y' );
110
107
  }
111
108
 
112
109
  /**
@@ -19,6 +19,8 @@ import {
19
19
  serializeRawBlock,
20
20
  switchToBlockType,
21
21
  store as blocksStore,
22
+ getDefaultBlockName,
23
+ isUnmodifiedBlock,
22
24
  } from '@wordpress/blocks';
23
25
  import { withFilters } from '@wordpress/components';
24
26
  import {
@@ -40,7 +42,7 @@ import BlockCrashBoundary from './block-crash-boundary';
40
42
  import BlockHtml from './block-html';
41
43
  import { useBlockProps } from './use-block-props';
42
44
  import { store as blockEditorStore } from '../../store';
43
-
45
+ import { useLayout } from './layout';
44
46
  export const BlockListBlockContext = createContext();
45
47
 
46
48
  /**
@@ -130,6 +132,8 @@ function BlockListBlock( {
130
132
  const { removeBlock } = useDispatch( blockEditorStore );
131
133
  const onRemove = useCallback( () => removeBlock( clientId ), [ clientId ] );
132
134
 
135
+ const parentLayout = useLayout() || {};
136
+
133
137
  // We wrap the BlockEdit component in a div that hides it when editing in
134
138
  // HTML mode. This allows us to render all of the ancillary pieces
135
139
  // (InspectorControls, etc.) which are inside `BlockEdit` but not
@@ -148,6 +152,9 @@ function BlockListBlock( {
148
152
  isSelectionEnabled={ isSelectionEnabled }
149
153
  toggleSelection={ toggleSelection }
150
154
  __unstableLayoutClassNames={ layoutClassNames }
155
+ __unstableParentLayout={
156
+ Object.keys( parentLayout ).length ? parentLayout : undefined
157
+ }
151
158
  />
152
159
  );
153
160
 
@@ -308,7 +315,6 @@ const applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => {
308
315
  __unstableMarkLastChangeAsPersistent,
309
316
  moveBlocksToPosition,
310
317
  removeBlock,
311
- selectBlock,
312
318
  } = dispatch( blockEditorStore );
313
319
 
314
320
  // Do not add new properties here, use `useDispatch` instead to avoid
@@ -345,8 +351,71 @@ const applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => {
345
351
  getBlockAttributes,
346
352
  getBlockName,
347
353
  getBlockOrder,
354
+ getBlockIndex,
355
+ getBlockRootClientId,
356
+ canInsertBlockType,
348
357
  } = registry.select( blockEditorStore );
349
358
 
359
+ /**
360
+ * Moves the block with clientId up one level. If the block type
361
+ * cannot be inserted at the new location, it will be attempted to
362
+ * convert to the default block type.
363
+ *
364
+ * @param {string} _clientId The block to move.
365
+ * @param {boolean} changeSelection Whether to change the selection
366
+ * to the moved block.
367
+ */
368
+ function moveFirstItemUp( _clientId, changeSelection = true ) {
369
+ const targetRootClientId = getBlockRootClientId( _clientId );
370
+ const blockOrder = getBlockOrder( _clientId );
371
+ const [ firstClientId ] = blockOrder;
372
+
373
+ if (
374
+ blockOrder.length === 1 &&
375
+ isUnmodifiedBlock( getBlock( firstClientId ) )
376
+ ) {
377
+ removeBlock( _clientId );
378
+ } else {
379
+ if (
380
+ canInsertBlockType(
381
+ getBlockName( firstClientId ),
382
+ targetRootClientId
383
+ )
384
+ ) {
385
+ moveBlocksToPosition(
386
+ [ firstClientId ],
387
+ _clientId,
388
+ targetRootClientId,
389
+ getBlockIndex( _clientId )
390
+ );
391
+ } else {
392
+ const replacement = switchToBlockType(
393
+ getBlock( firstClientId ),
394
+ getDefaultBlockName()
395
+ );
396
+
397
+ if ( replacement && replacement.length ) {
398
+ registry.batch( () => {
399
+ insertBlocks(
400
+ replacement,
401
+ getBlockIndex( _clientId ),
402
+ targetRootClientId,
403
+ changeSelection
404
+ );
405
+ removeBlock( firstClientId, false );
406
+ } );
407
+ }
408
+ }
409
+
410
+ if (
411
+ ! getBlockOrder( _clientId ).length &&
412
+ isUnmodifiedBlock( getBlock( _clientId ) )
413
+ ) {
414
+ removeBlock( _clientId, false );
415
+ }
416
+ }
417
+ }
418
+
350
419
  // For `Delete` or forward merge, we should do the exact same thing
351
420
  // as `Backspace`, but from the other block.
352
421
  if ( forward ) {
@@ -397,15 +466,8 @@ const applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => {
397
466
  return;
398
467
  }
399
468
 
400
- // Check if it's possibile to "unwrap" the following block
401
- // before trying to merge.
402
- const replacement = switchToBlockType(
403
- getBlock( nextBlockClientId ),
404
- '*'
405
- );
406
-
407
- if ( replacement && replacement.length ) {
408
- replaceBlocks( nextBlockClientId, replacement );
469
+ if ( getBlockOrder( nextBlockClientId ).length ) {
470
+ moveFirstItemUp( nextBlockClientId, false );
409
471
  } else {
410
472
  mergeBlocks( clientId, nextBlockClientId );
411
473
  }
@@ -450,18 +512,7 @@ const applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => {
450
512
  }
451
513
  }
452
514
 
453
- // Attempt to "unwrap" the block contents when there's no
454
- // preceding block to merge with.
455
- const replacement = switchToBlockType(
456
- getBlock( rootClientId ),
457
- '*'
458
- );
459
- if ( replacement && replacement.length ) {
460
- registry.batch( () => {
461
- replaceBlocks( rootClientId, replacement );
462
- selectBlock( replacement[ 0 ].clientId, 0 );
463
- } );
464
- }
515
+ moveFirstItemUp( rootClientId );
465
516
  }
466
517
  }
467
518
  },
@@ -2,7 +2,6 @@
2
2
  * External dependencies
3
3
  */
4
4
  import { View, Text, TouchableWithoutFeedback, Dimensions } from 'react-native';
5
- import { pick } from 'lodash';
6
5
 
7
6
  /**
8
7
  * WordPress dependencies
@@ -21,6 +20,8 @@ import {
21
20
  getBlockType,
22
21
  __experimentalGetAccessibleBlockLabel as getAccessibleBlockLabel,
23
22
  switchToBlockType,
23
+ getDefaultBlockName,
24
+ isUnmodifiedBlock,
24
25
  } from '@wordpress/blocks';
25
26
  import { useSetting } from '@wordpress/block-editor';
26
27
 
@@ -33,6 +34,7 @@ import BlockInvalidWarning from './block-invalid-warning';
33
34
  import BlockMobileToolbar from '../block-mobile-toolbar';
34
35
  import { store as blockEditorStore } from '../../store';
35
36
  import BlockDraggable from '../block-draggable';
37
+ import { useLayout } from './layout';
36
38
 
37
39
  const emptyArray = [];
38
40
  function BlockForType( {
@@ -74,10 +76,16 @@ function BlockForType( {
74
76
  // Thanks to the JSON.stringify we check if the value is the same instead of reference.
75
77
  JSON.stringify( wrapperProps.style ),
76
78
  JSON.stringify(
77
- pick( attributes, GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES )
79
+ Object.fromEntries(
80
+ Object.entries( attributes ?? {} ).filter( ( [ key ] ) =>
81
+ GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES.includes( key )
82
+ )
83
+ )
78
84
  ),
79
85
  ] );
80
86
 
87
+ const parentLayout = useLayout();
88
+
81
89
  return (
82
90
  <GlobalStylesContext.Provider value={ mergedStyle }>
83
91
  <BlockEdit
@@ -99,6 +107,7 @@ function BlockForType( {
99
107
  onDeleteBlock={ onDeleteBlock }
100
108
  blockWidth={ blockWidth }
101
109
  parentBlockAlignment={ parentBlockAlignment }
110
+ __unstableParentLayout={ parentLayout }
102
111
  />
103
112
  <View onLayout={ getBlockWidth } />
104
113
  </GlobalStylesContext.Provider>
@@ -429,8 +438,72 @@ export default compose( [
429
438
  getBlockAttributes,
430
439
  getBlockName,
431
440
  getBlockOrder,
441
+ getBlockIndex,
442
+ getBlockRootClientId,
443
+ canInsertBlockType,
432
444
  } = registry.select( blockEditorStore );
433
445
 
446
+ /**
447
+ * Moves the block with clientId up one level. If the block type
448
+ * cannot be inserted at the new location, it will be attempted to
449
+ * convert to the default block type.
450
+ *
451
+ * @param {string} _clientId The block to move.
452
+ * @param {boolean} changeSelection Whether to change the selection
453
+ * to the moved block.
454
+ */
455
+ function moveFirstItemUp( _clientId, changeSelection = true ) {
456
+ const targetRootClientId =
457
+ getBlockRootClientId( _clientId );
458
+ const blockOrder = getBlockOrder( _clientId );
459
+ const [ firstClientId ] = blockOrder;
460
+
461
+ if (
462
+ blockOrder.length === 1 &&
463
+ isUnmodifiedBlock( getBlock( firstClientId ) )
464
+ ) {
465
+ removeBlock( _clientId );
466
+ } else {
467
+ if (
468
+ canInsertBlockType(
469
+ getBlockName( firstClientId ),
470
+ targetRootClientId
471
+ )
472
+ ) {
473
+ moveBlocksToPosition(
474
+ [ firstClientId ],
475
+ _clientId,
476
+ targetRootClientId,
477
+ getBlockIndex( _clientId )
478
+ );
479
+ } else {
480
+ const replacement = switchToBlockType(
481
+ getBlock( firstClientId ),
482
+ getDefaultBlockName()
483
+ );
484
+
485
+ if ( replacement && replacement.length ) {
486
+ registry.batch( () => {
487
+ insertBlocks(
488
+ replacement,
489
+ getBlockIndex( _clientId ),
490
+ targetRootClientId,
491
+ changeSelection
492
+ );
493
+ removeBlock( firstClientId, false );
494
+ } );
495
+ }
496
+ }
497
+
498
+ if (
499
+ ! getBlockOrder( _clientId ).length &&
500
+ isUnmodifiedBlock( getBlock( _clientId ) )
501
+ ) {
502
+ removeBlock( _clientId, false );
503
+ }
504
+ }
505
+ }
506
+
434
507
  // For `Delete` or forward merge, we should do the exact same thing
435
508
  // as `Backspace`, but from the other block.
436
509
  if ( forward ) {
@@ -481,15 +554,8 @@ export default compose( [
481
554
  return;
482
555
  }
483
556
 
484
- // Check if it's possibile to "unwrap" the following block
485
- // before trying to merge.
486
- const replacement = switchToBlockType(
487
- getBlock( nextBlockClientId ),
488
- '*'
489
- );
490
-
491
- if ( replacement && replacement.length ) {
492
- replaceBlocks( nextBlockClientId, replacement );
557
+ if ( getBlockOrder( nextBlockClientId ).length ) {
558
+ moveFirstItemUp( nextBlockClientId, false );
493
559
  } else {
494
560
  mergeBlocks( clientId, nextBlockClientId );
495
561
  }
@@ -534,18 +600,7 @@ export default compose( [
534
600
  }
535
601
  }
536
602
 
537
- // Attempt to "unwrap" the block contents when there's no
538
- // preceding block to merge with.
539
- const replacement = switchToBlockType(
540
- getBlock( rootClientId ),
541
- '*'
542
- );
543
- if ( replacement && replacement.length ) {
544
- registry.batch( () => {
545
- replaceBlocks( rootClientId, replacement );
546
- selectBlock( replacement[ 0 ].clientId, 0 );
547
- } );
548
- }
603
+ moveFirstItemUp( rootClientId );
549
604
  }
550
605
  }
551
606
  },
@@ -430,22 +430,8 @@
430
430
  }
431
431
  }
432
432
 
433
- /** Zoom Out mode styles **/
434
433
  .block-editor-iframe__body {
434
+ background-color: $white;
435
435
  transition: all 0.3s;
436
436
  transform-origin: top center;
437
-
438
- &.is-zoomed-out {
439
- margin: 100px 0;
440
- transform: scale(0.45);
441
-
442
- // Add a bit more space between the top level blocks.
443
- .wp-site-blocks > * + * {
444
- margin-block-start: 2.5rem;
445
- }
446
-
447
- > .block-list-appender {
448
- display: none;
449
- }
450
- }
451
437
  }