@wordpress/block-editor 12.0.0 → 12.2.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 (627) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -1
  3. package/build/autocompleters/block.js +13 -5
  4. package/build/autocompleters/block.js.map +1 -1
  5. package/build/components/block-breadcrumb/index.js +6 -3
  6. package/build/components/block-breadcrumb/index.js.map +1 -1
  7. package/build/components/block-controls/slot.js +12 -4
  8. package/build/components/block-controls/slot.js.map +1 -1
  9. package/build/components/block-controls/slot.native.js +10 -1
  10. package/build/components/block-controls/slot.native.js.map +1 -1
  11. package/build/components/block-draggable/index.js +11 -7
  12. package/build/components/block-draggable/index.js.map +1 -1
  13. package/build/components/block-draggable/use-scroll-when-dragging.js +2 -2
  14. package/build/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  15. package/build/components/block-editing-mode/index.js +84 -0
  16. package/build/components/block-editing-mode/index.js.map +1 -0
  17. package/build/components/block-list/block-invalid-warning.native.js +15 -7
  18. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  19. package/build/components/block-list/block-list-block-context.js +15 -0
  20. package/build/components/block-list/block-list-block-context.js.map +1 -0
  21. package/build/components/block-list/block-list-item-cell.native.js +15 -2
  22. package/build/components/block-list/block-list-item-cell.native.js.map +1 -1
  23. package/build/components/block-list/block-list-item.native.js +158 -195
  24. package/build/components/block-list/block-list-item.native.js.map +1 -1
  25. package/build/components/block-list/block-outline.native.js +57 -0
  26. package/build/components/block-list/block-outline.native.js.map +1 -0
  27. package/build/components/block-list/block.js +29 -37
  28. package/build/components/block-list/block.js.map +1 -1
  29. package/build/components/block-list/block.native.js +347 -311
  30. package/build/components/block-list/block.native.js.map +1 -1
  31. package/build/components/block-list/index.native.js +260 -357
  32. package/build/components/block-list/index.native.js.map +1 -1
  33. package/build/components/block-list/insertion-point.native.js +4 -2
  34. package/build/components/block-list/insertion-point.native.js.map +1 -1
  35. package/build/components/block-list/use-block-props/index.js +2 -2
  36. package/build/components/block-list/use-block-props/index.js.map +1 -1
  37. package/build/components/block-list/use-in-between-inserter.js +7 -5
  38. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  39. package/build/components/block-list-appender/index.js +15 -1
  40. package/build/components/block-list-appender/index.js.map +1 -1
  41. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +19 -4
  42. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  43. package/build/components/block-settings-menu/block-settings-dropdown.js +8 -10
  44. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  45. package/build/components/block-settings-menu-controls/index.js +15 -4
  46. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  47. package/build/components/block-styles/preview-panel.js +1 -2
  48. package/build/components/block-styles/preview-panel.js.map +1 -1
  49. package/build/components/block-switcher/block-transformations-menu.js +8 -0
  50. package/build/components/block-switcher/block-transformations-menu.js.map +1 -1
  51. package/build/components/block-switcher/block-variation-transformations.js +125 -0
  52. package/build/components/block-switcher/block-variation-transformations.js.map +1 -0
  53. package/build/components/block-switcher/index.js +34 -12
  54. package/build/components/block-switcher/index.js.map +1 -1
  55. package/build/components/block-switcher/pattern-transformations-menu.js +3 -3
  56. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  57. package/build/components/block-toolbar/index.js +9 -7
  58. package/build/components/block-toolbar/index.js.map +1 -1
  59. package/build/components/block-tools/block-contextual-toolbar.js +22 -65
  60. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  61. package/build/components/block-tools/insertion-point.js +11 -5
  62. package/build/components/block-tools/insertion-point.js.map +1 -1
  63. package/build/components/block-tools/selected-block-popover.js +3 -8
  64. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  65. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  66. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  67. package/build/components/convert-to-group-buttons/index.js +7 -2
  68. package/build/components/convert-to-group-buttons/index.js.map +1 -1
  69. package/build/components/convert-to-group-buttons/index.native.js +87 -3
  70. package/build/components/convert-to-group-buttons/index.native.js.map +1 -1
  71. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +23 -37
  72. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  73. package/build/components/global-styles/advanced-panel.js +86 -0
  74. package/build/components/global-styles/advanced-panel.js.map +1 -0
  75. package/build/components/global-styles/color-panel.js +4 -1
  76. package/build/components/global-styles/color-panel.js.map +1 -1
  77. package/build/components/global-styles/dimensions-panel.js +9 -8
  78. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  79. package/build/components/global-styles/hooks.js +1 -2
  80. package/build/components/global-styles/hooks.js.map +1 -1
  81. package/build/components/global-styles/index.js +24 -0
  82. package/build/components/global-styles/index.js.map +1 -1
  83. package/build/components/global-styles/typography-panel.js +1 -1
  84. package/build/components/global-styles/typography-panel.js.map +1 -1
  85. package/build/components/global-styles/use-global-styles-output.js +27 -4
  86. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  87. package/build/components/global-styles/utils.js +30 -0
  88. package/build/components/global-styles/utils.js.map +1 -1
  89. package/build/components/iframe/index.js +14 -7
  90. package/build/components/iframe/index.js.map +1 -1
  91. package/build/components/image-editor/use-save-image.js +24 -8
  92. package/build/components/image-editor/use-save-image.js.map +1 -1
  93. package/build/components/inner-blocks/index.js +2 -1
  94. package/build/components/inner-blocks/index.js.map +1 -1
  95. package/build/components/inner-blocks/index.native.js +7 -7
  96. package/build/components/inner-blocks/index.native.js.map +1 -1
  97. package/build/components/inner-blocks/use-nested-settings-update.js +13 -5
  98. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  99. package/build/components/inserter/index.js +3 -7
  100. package/build/components/inserter/index.js.map +1 -1
  101. package/build/components/inserter/quick-inserter.js +2 -4
  102. package/build/components/inserter/quick-inserter.js.map +1 -1
  103. package/build/components/inserter/search-results.js +19 -6
  104. package/build/components/inserter/search-results.js.map +1 -1
  105. package/build/components/inserter-draggable-blocks/index.js +5 -0
  106. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  107. package/build/components/inspector-controls/fill.js +1 -1
  108. package/build/components/inspector-controls/fill.js.map +1 -1
  109. package/build/components/inspector-controls/fill.native.js +1 -1
  110. package/build/components/inspector-controls/fill.native.js.map +1 -1
  111. package/build/components/inspector-controls/slot.js +3 -6
  112. package/build/components/inspector-controls/slot.js.map +1 -1
  113. package/build/components/inspector-controls/slot.native.js +1 -1
  114. package/build/components/inspector-controls/slot.native.js.map +1 -1
  115. package/build/components/line-height-control/index.js +7 -2
  116. package/build/components/line-height-control/index.js.map +1 -1
  117. package/build/components/link-control/use-internal-input-value.js +9 -8
  118. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  119. package/build/components/list-view/appender.js +6 -1
  120. package/build/components/list-view/appender.js.map +1 -1
  121. package/build/components/list-view/block-contents.js +9 -2
  122. package/build/components/list-view/block-contents.js.map +1 -1
  123. package/build/components/list-view/block-select-button.js +2 -1
  124. package/build/components/list-view/block-select-button.js.map +1 -1
  125. package/build/components/list-view/block.js +25 -29
  126. package/build/components/list-view/block.js.map +1 -1
  127. package/build/components/list-view/branch.js +1 -3
  128. package/build/components/list-view/branch.js.map +1 -1
  129. package/build/components/list-view/index.js +43 -22
  130. package/build/components/list-view/index.js.map +1 -1
  131. package/build/components/list-view/use-list-view-client-ids.js +27 -3
  132. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  133. package/build/components/list-view/use-list-view-drop-zone.js +163 -11
  134. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  135. package/build/components/media-placeholder/index.js +68 -7
  136. package/build/components/media-placeholder/index.js.map +1 -1
  137. package/build/components/multi-selection-inspector/index.js +2 -2
  138. package/build/components/multi-selection-inspector/index.js.map +1 -1
  139. package/build/components/preview-options/index.js +6 -1
  140. package/build/components/preview-options/index.js.map +1 -1
  141. package/build/components/publish-date-time-picker/index.js +0 -2
  142. package/build/components/publish-date-time-picker/index.js.map +1 -1
  143. package/build/components/spacing-sizes-control/spacing-input-control.js +1 -1
  144. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  145. package/build/components/url-input/index.js +4 -2
  146. package/build/components/url-input/index.js.map +1 -1
  147. package/build/components/use-block-drop-zone/index.js +25 -15
  148. package/build/components/use-block-drop-zone/index.js.map +1 -1
  149. package/build/components/use-resize-canvas/index.js +8 -1
  150. package/build/components/use-resize-canvas/index.js.map +1 -1
  151. package/build/components/writing-flow/use-arrow-nav.js +13 -7
  152. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  153. package/build/hooks/align.js +4 -8
  154. package/build/hooks/align.js.map +1 -1
  155. package/build/hooks/behaviors.js +115 -0
  156. package/build/hooks/behaviors.js.map +1 -0
  157. package/build/hooks/border.js +1 -1
  158. package/build/hooks/border.js.map +1 -1
  159. package/build/hooks/color.js +1 -1
  160. package/build/hooks/color.js.map +1 -1
  161. package/build/hooks/content-lock-ui.js +8 -12
  162. package/build/hooks/content-lock-ui.js.map +1 -1
  163. package/build/hooks/dimensions.js +0 -30
  164. package/build/hooks/dimensions.js.map +1 -1
  165. package/build/hooks/duotone.js +5 -9
  166. package/build/hooks/duotone.js.map +1 -1
  167. package/build/hooks/index.js +2 -0
  168. package/build/hooks/index.js.map +1 -1
  169. package/build/hooks/index.native.js +8 -0
  170. package/build/hooks/index.native.js.map +1 -1
  171. package/build/hooks/layout.js +10 -11
  172. package/build/hooks/layout.js.map +1 -1
  173. package/build/hooks/position.js +1 -1
  174. package/build/hooks/position.js.map +1 -1
  175. package/build/hooks/style.js +1 -1
  176. package/build/hooks/style.js.map +1 -1
  177. package/build/hooks/use-editor-wrapper-styles.native.js +255 -0
  178. package/build/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  179. package/build/hooks/use-typography-props.js +14 -10
  180. package/build/hooks/use-typography-props.js.map +1 -1
  181. package/build/index.native.js +31 -0
  182. package/build/index.native.js.map +1 -0
  183. package/build/private-apis.js +4 -7
  184. package/build/private-apis.js.map +1 -1
  185. package/build/store/private-actions.js +46 -0
  186. package/build/store/private-actions.js.map +1 -1
  187. package/build/store/private-selectors.js +88 -0
  188. package/build/store/private-selectors.js.map +1 -1
  189. package/build/store/reducer.js +36 -1
  190. package/build/store/reducer.js.map +1 -1
  191. package/build/store/selectors.js +28 -18
  192. package/build/store/selectors.js.map +1 -1
  193. package/build/utils/order-inserter-block-items.js +41 -0
  194. package/build/utils/order-inserter-block-items.js.map +1 -0
  195. package/build/utils/use-should-contextual-toolbar-show.js +16 -12
  196. package/build/utils/use-should-contextual-toolbar-show.js.map +1 -1
  197. package/build-module/autocompleters/block.js +12 -5
  198. package/build-module/autocompleters/block.js.map +1 -1
  199. package/build-module/components/block-breadcrumb/index.js +5 -3
  200. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  201. package/build-module/components/block-controls/slot.js +11 -4
  202. package/build-module/components/block-controls/slot.js.map +1 -1
  203. package/build-module/components/block-controls/slot.native.js +9 -1
  204. package/build-module/components/block-controls/slot.native.js.map +1 -1
  205. package/build-module/components/block-draggable/index.js +10 -6
  206. package/build-module/components/block-draggable/index.js.map +1 -1
  207. package/build-module/components/block-draggable/use-scroll-when-dragging.js +2 -2
  208. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  209. package/build-module/components/block-editing-mode/index.js +72 -0
  210. package/build-module/components/block-editing-mode/index.js.map +1 -0
  211. package/build-module/components/block-list/block-invalid-warning.native.js +16 -8
  212. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  213. package/build-module/components/block-list/block-list-block-context.js +6 -0
  214. package/build-module/components/block-list/block-list-block-context.js.map +1 -0
  215. package/build-module/components/block-list/block-list-item-cell.native.js +13 -2
  216. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -1
  217. package/build-module/components/block-list/block-list-item.native.js +160 -190
  218. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  219. package/build-module/components/block-list/block-outline.native.js +44 -0
  220. package/build-module/components/block-list/block-outline.native.js.map +1 -0
  221. package/build-module/components/block-list/block.js +26 -34
  222. package/build-module/components/block-list/block.js.map +1 -1
  223. package/build-module/components/block-list/block.native.js +345 -310
  224. package/build-module/components/block-list/block.native.js.map +1 -1
  225. package/build-module/components/block-list/index.native.js +263 -355
  226. package/build-module/components/block-list/index.native.js.map +1 -1
  227. package/build-module/components/block-list/insertion-point.native.js +4 -2
  228. package/build-module/components/block-list/insertion-point.native.js.map +1 -1
  229. package/build-module/components/block-list/use-block-props/index.js +1 -1
  230. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  231. package/build-module/components/block-list/use-in-between-inserter.js +6 -5
  232. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  233. package/build-module/components/block-list-appender/index.js +15 -1
  234. package/build-module/components/block-list-appender/index.js.map +1 -1
  235. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +18 -4
  236. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  237. package/build-module/components/block-settings-menu/block-settings-dropdown.js +8 -9
  238. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  239. package/build-module/components/block-settings-menu-controls/index.js +13 -5
  240. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  241. package/build-module/components/block-styles/preview-panel.js +1 -2
  242. package/build-module/components/block-styles/preview-panel.js.map +1 -1
  243. package/build-module/components/block-switcher/block-transformations-menu.js +7 -0
  244. package/build-module/components/block-switcher/block-transformations-menu.js.map +1 -1
  245. package/build-module/components/block-switcher/block-variation-transformations.js +108 -0
  246. package/build-module/components/block-switcher/block-variation-transformations.js.map +1 -0
  247. package/build-module/components/block-switcher/index.js +33 -12
  248. package/build-module/components/block-switcher/index.js.map +1 -1
  249. package/build-module/components/block-switcher/pattern-transformations-menu.js +3 -3
  250. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  251. package/build-module/components/block-toolbar/index.js +8 -7
  252. package/build-module/components/block-toolbar/index.js.map +1 -1
  253. package/build-module/components/block-tools/block-contextual-toolbar.js +22 -65
  254. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  255. package/build-module/components/block-tools/insertion-point.js +11 -5
  256. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  257. package/build-module/components/block-tools/selected-block-popover.js +3 -7
  258. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  259. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  260. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  261. package/build-module/components/convert-to-group-buttons/index.js +7 -2
  262. package/build-module/components/convert-to-group-buttons/index.js.map +1 -1
  263. package/build-module/components/convert-to-group-buttons/index.native.js +76 -1
  264. package/build-module/components/convert-to-group-buttons/index.native.js.map +1 -1
  265. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +22 -36
  266. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  267. package/build-module/components/global-styles/advanced-panel.js +74 -0
  268. package/build-module/components/global-styles/advanced-panel.js.map +1 -0
  269. package/build-module/components/global-styles/color-panel.js +5 -2
  270. package/build-module/components/global-styles/color-panel.js.map +1 -1
  271. package/build-module/components/global-styles/dimensions-panel.js +9 -8
  272. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  273. package/build-module/components/global-styles/hooks.js +1 -2
  274. package/build-module/components/global-styles/hooks.js.map +1 -1
  275. package/build-module/components/global-styles/index.js +3 -1
  276. package/build-module/components/global-styles/index.js.map +1 -1
  277. package/build-module/components/global-styles/typography-panel.js +1 -1
  278. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  279. package/build-module/components/global-styles/use-global-styles-output.js +25 -4
  280. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  281. package/build-module/components/global-styles/utils.js +25 -0
  282. package/build-module/components/global-styles/utils.js.map +1 -1
  283. package/build-module/components/iframe/index.js +15 -8
  284. package/build-module/components/iframe/index.js.map +1 -1
  285. package/build-module/components/image-editor/use-save-image.js +24 -8
  286. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  287. package/build-module/components/inner-blocks/index.js +2 -1
  288. package/build-module/components/inner-blocks/index.js.map +1 -1
  289. package/build-module/components/inner-blocks/index.native.js +7 -6
  290. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  291. package/build-module/components/inner-blocks/use-nested-settings-update.js +13 -5
  292. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  293. package/build-module/components/inserter/index.js +3 -7
  294. package/build-module/components/inserter/index.js.map +1 -1
  295. package/build-module/components/inserter/quick-inserter.js +2 -4
  296. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  297. package/build-module/components/inserter/search-results.js +16 -6
  298. package/build-module/components/inserter/search-results.js.map +1 -1
  299. package/build-module/components/inserter-draggable-blocks/index.js +4 -0
  300. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  301. package/build-module/components/inspector-controls/fill.js +1 -1
  302. package/build-module/components/inspector-controls/fill.js.map +1 -1
  303. package/build-module/components/inspector-controls/fill.native.js +1 -1
  304. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  305. package/build-module/components/inspector-controls/slot.js +4 -7
  306. package/build-module/components/inspector-controls/slot.js.map +1 -1
  307. package/build-module/components/inspector-controls/slot.native.js +1 -1
  308. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  309. package/build-module/components/line-height-control/index.js +7 -2
  310. package/build-module/components/line-height-control/index.js.map +1 -1
  311. package/build-module/components/link-control/use-internal-input-value.js +9 -8
  312. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  313. package/build-module/components/list-view/appender.js +6 -2
  314. package/build-module/components/list-view/appender.js.map +1 -1
  315. package/build-module/components/list-view/block-contents.js +9 -3
  316. package/build-module/components/list-view/block-contents.js.map +1 -1
  317. package/build-module/components/list-view/block-select-button.js +2 -1
  318. package/build-module/components/list-view/block-select-button.js.map +1 -1
  319. package/build-module/components/list-view/block.js +24 -29
  320. package/build-module/components/list-view/block.js.map +1 -1
  321. package/build-module/components/list-view/branch.js +1 -3
  322. package/build-module/components/list-view/branch.js.map +1 -1
  323. package/build-module/components/list-view/index.js +44 -23
  324. package/build-module/components/list-view/index.js.map +1 -1
  325. package/build-module/components/list-view/use-list-view-client-ids.js +26 -3
  326. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  327. package/build-module/components/list-view/use-list-view-drop-zone.js +160 -11
  328. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  329. package/build-module/components/media-placeholder/index.js +66 -7
  330. package/build-module/components/media-placeholder/index.js.map +1 -1
  331. package/build-module/components/multi-selection-inspector/index.js +2 -2
  332. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  333. package/build-module/components/preview-options/index.js +7 -2
  334. package/build-module/components/preview-options/index.js.map +1 -1
  335. package/build-module/components/publish-date-time-picker/index.js +0 -2
  336. package/build-module/components/publish-date-time-picker/index.js.map +1 -1
  337. package/build-module/components/spacing-sizes-control/spacing-input-control.js +1 -1
  338. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  339. package/build-module/components/url-input/index.js +4 -2
  340. package/build-module/components/url-input/index.js.map +1 -1
  341. package/build-module/components/use-block-drop-zone/index.js +25 -16
  342. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  343. package/build-module/components/use-resize-canvas/index.js +8 -1
  344. package/build-module/components/use-resize-canvas/index.js.map +1 -1
  345. package/build-module/components/writing-flow/use-arrow-nav.js +13 -7
  346. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  347. package/build-module/hooks/align.js +4 -7
  348. package/build-module/hooks/align.js.map +1 -1
  349. package/build-module/hooks/behaviors.js +97 -0
  350. package/build-module/hooks/behaviors.js.map +1 -0
  351. package/build-module/hooks/border.js +1 -1
  352. package/build-module/hooks/border.js.map +1 -1
  353. package/build-module/hooks/color.js +1 -1
  354. package/build-module/hooks/color.js.map +1 -1
  355. package/build-module/hooks/content-lock-ui.js +8 -11
  356. package/build-module/hooks/content-lock-ui.js.map +1 -1
  357. package/build-module/hooks/dimensions.js +0 -28
  358. package/build-module/hooks/dimensions.js.map +1 -1
  359. package/build-module/hooks/duotone.js +4 -7
  360. package/build-module/hooks/duotone.js.map +1 -1
  361. package/build-module/hooks/index.js +1 -0
  362. package/build-module/hooks/index.js.map +1 -1
  363. package/build-module/hooks/index.native.js +1 -0
  364. package/build-module/hooks/index.native.js.map +1 -1
  365. package/build-module/hooks/layout.js +9 -11
  366. package/build-module/hooks/layout.js.map +1 -1
  367. package/build-module/hooks/position.js +1 -1
  368. package/build-module/hooks/position.js.map +1 -1
  369. package/build-module/hooks/style.js +1 -1
  370. package/build-module/hooks/style.js.map +1 -1
  371. package/build-module/hooks/use-editor-wrapper-styles.native.js +242 -0
  372. package/build-module/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  373. package/build-module/hooks/use-typography-props.js +14 -10
  374. package/build-module/hooks/use-typography-props.js.map +1 -1
  375. package/build-module/index.native.js +6 -0
  376. package/build-module/index.native.js.map +1 -0
  377. package/build-module/private-apis.js +3 -5
  378. package/build-module/private-apis.js.map +1 -1
  379. package/build-module/store/private-actions.js +42 -0
  380. package/build-module/store/private-actions.js.map +1 -1
  381. package/build-module/store/private-selectors.js +79 -0
  382. package/build-module/store/private-selectors.js.map +1 -1
  383. package/build-module/store/reducer.js +34 -1
  384. package/build-module/store/reducer.js.map +1 -1
  385. package/build-module/store/selectors.js +26 -17
  386. package/build-module/store/selectors.js.map +1 -1
  387. package/build-module/utils/order-inserter-block-items.js +32 -0
  388. package/build-module/utils/order-inserter-block-items.js.map +1 -0
  389. package/build-module/utils/use-should-contextual-toolbar-show.js +16 -12
  390. package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -1
  391. package/build-style/content-rtl.css +32 -14
  392. package/build-style/content.css +32 -14
  393. package/build-style/default-editor-styles-rtl.css +1 -1
  394. package/build-style/default-editor-styles.css +1 -1
  395. package/build-style/style-rtl.css +56 -77
  396. package/build-style/style.css +57 -77
  397. package/package.json +32 -31
  398. package/src/autocompleters/block.js +15 -7
  399. package/src/components/block-breadcrumb/index.js +11 -3
  400. package/src/components/block-breadcrumb/style.scss +2 -1
  401. package/src/components/block-controls/slot.js +8 -4
  402. package/src/components/block-controls/slot.native.js +6 -1
  403. package/src/components/block-draggable/index.js +10 -6
  404. package/src/components/block-draggable/use-scroll-when-dragging.js +8 -2
  405. package/src/components/block-editing-mode/index.js +71 -0
  406. package/src/components/block-list/block-invalid-warning.native.js +17 -9
  407. package/src/components/block-list/block-list-block-context.js +6 -0
  408. package/src/components/block-list/block-list-item-cell.native.js +10 -1
  409. package/src/components/block-list/block-list-item.native.js +180 -208
  410. package/src/components/block-list/block-outline.native.js +58 -0
  411. package/src/components/block-list/block.js +38 -56
  412. package/src/components/block-list/block.native.js +531 -501
  413. package/src/components/block-list/content.scss +5 -6
  414. package/src/components/block-list/index.native.js +324 -382
  415. package/src/components/block-list/insertion-point.native.js +2 -2
  416. package/src/components/block-list/test/block-invalid-warning.native.js +48 -0
  417. package/src/components/block-list/test/index.native.js +205 -0
  418. package/src/components/block-list/use-block-props/index.js +1 -1
  419. package/src/components/block-list/use-in-between-inserter.js +7 -3
  420. package/src/components/block-list-appender/index.js +22 -4
  421. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +26 -1
  422. package/src/components/block-mover/style.scss +1 -0
  423. package/src/components/block-pattern-setup/style.scss +1 -4
  424. package/src/components/block-patterns-list/style.scss +1 -4
  425. package/src/components/block-settings-menu/block-settings-dropdown.js +10 -17
  426. package/src/components/block-settings-menu-controls/index.js +24 -4
  427. package/src/components/block-styles/preview-panel.js +1 -3
  428. package/src/components/block-styles/style.scss +4 -4
  429. package/src/components/block-switcher/block-transformations-menu.js +12 -0
  430. package/src/components/block-switcher/block-variation-transformations.js +115 -0
  431. package/src/components/block-switcher/index.js +38 -5
  432. package/src/components/block-switcher/pattern-transformations-menu.js +5 -5
  433. package/src/components/block-switcher/style.scss +6 -5
  434. package/src/components/block-toolbar/index.js +10 -11
  435. package/src/components/block-tools/block-contextual-toolbar.js +32 -67
  436. package/src/components/block-tools/insertion-point.js +23 -9
  437. package/src/components/block-tools/selected-block-popover.js +3 -5
  438. package/src/components/block-tools/style.scss +8 -0
  439. package/src/components/button-block-appender/content.scss +22 -0
  440. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +16 -2
  441. package/src/components/convert-to-group-buttons/index.js +9 -2
  442. package/src/components/convert-to-group-buttons/index.native.js +79 -1
  443. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +32 -38
  444. package/src/components/global-styles/advanced-panel.js +82 -0
  445. package/src/components/global-styles/color-panel.js +6 -1
  446. package/src/components/global-styles/dimensions-panel.js +9 -8
  447. package/src/components/global-styles/hooks.js +1 -5
  448. package/src/components/global-styles/index.js +6 -1
  449. package/src/components/global-styles/style.scss +17 -0
  450. package/src/components/global-styles/test/utils.js +57 -1
  451. package/src/components/global-styles/typography-panel.js +1 -1
  452. package/src/components/global-styles/use-global-styles-output.js +21 -3
  453. package/src/components/global-styles/utils.js +27 -0
  454. package/src/components/iframe/index.js +22 -12
  455. package/src/components/image-editor/use-save-image.js +20 -9
  456. package/src/components/inner-blocks/README.md +5 -0
  457. package/src/components/inner-blocks/index.js +2 -0
  458. package/src/components/inner-blocks/index.native.js +16 -6
  459. package/src/components/inner-blocks/use-nested-settings-update.js +20 -3
  460. package/src/components/inserter/index.js +1 -9
  461. package/src/components/inserter/quick-inserter.js +0 -2
  462. package/src/components/inserter/search-results.js +32 -6
  463. package/src/components/inserter-draggable-blocks/index.js +4 -0
  464. package/src/components/inspector-controls/fill.js +1 -1
  465. package/src/components/inspector-controls/fill.native.js +1 -1
  466. package/src/components/inspector-controls/slot.js +4 -9
  467. package/src/components/inspector-controls/slot.native.js +1 -1
  468. package/src/components/line-height-control/index.js +7 -2
  469. package/src/components/line-height-control/stories/index.js +1 -1
  470. package/src/components/link-control/test/index.js +42 -0
  471. package/src/components/link-control/use-internal-input-value.js +8 -7
  472. package/src/components/list-view/appender.js +3 -2
  473. package/src/components/list-view/block-contents.js +32 -20
  474. package/src/components/list-view/block-select-button.js +5 -1
  475. package/src/components/list-view/block.js +34 -37
  476. package/src/components/list-view/branch.js +1 -7
  477. package/src/components/list-view/index.js +42 -17
  478. package/src/components/list-view/style.scss +7 -7
  479. package/src/components/list-view/test/use-list-view-drop-zone.js +88 -12
  480. package/src/components/list-view/use-list-view-client-ids.js +21 -4
  481. package/src/components/list-view/use-list-view-drop-zone.js +194 -11
  482. package/src/components/media-placeholder/index.js +74 -1
  483. package/src/components/multi-selection-inspector/index.js +2 -2
  484. package/src/components/preview-options/index.js +9 -2
  485. package/src/components/publish-date-time-picker/index.js +0 -2
  486. package/src/components/spacing-sizes-control/spacing-input-control.js +1 -0
  487. package/src/components/url-input/README.md +6 -0
  488. package/src/components/url-input/index.js +2 -2
  489. package/src/components/use-block-drop-zone/index.js +31 -17
  490. package/src/components/use-resize-canvas/index.js +9 -1
  491. package/src/components/writing-flow/test/index.js +15 -0
  492. package/src/components/writing-flow/use-arrow-nav.js +17 -4
  493. package/src/hooks/align.js +5 -12
  494. package/src/hooks/behaviors.js +104 -0
  495. package/src/hooks/border.js +2 -1
  496. package/src/hooks/color.js +2 -1
  497. package/src/hooks/content-lock-ui.js +3 -15
  498. package/src/hooks/dimensions.js +0 -40
  499. package/src/hooks/duotone.js +4 -11
  500. package/src/hooks/index.js +1 -0
  501. package/src/hooks/index.native.js +1 -0
  502. package/src/hooks/layout.js +14 -20
  503. package/src/hooks/position.js +2 -1
  504. package/src/hooks/style.js +2 -1
  505. package/src/hooks/test/use-editor-wrapper-styles.native.js +282 -0
  506. package/src/hooks/test/use-typography-props.js +47 -2
  507. package/src/hooks/use-editor-wrapper-styles.native.js +250 -0
  508. package/src/hooks/use-editor-wrapper-styles.native.scss +11 -0
  509. package/src/hooks/use-typography-props.js +10 -11
  510. package/src/index.native.js +6 -0
  511. package/src/private-apis.js +2 -4
  512. package/src/store/private-actions.js +39 -0
  513. package/src/store/private-selectors.js +95 -0
  514. package/src/store/reducer.js +27 -0
  515. package/src/store/selectors.js +25 -15
  516. package/src/store/test/private-actions.js +32 -1
  517. package/src/store/test/private-selectors.js +158 -0
  518. package/src/store/test/reducer.js +48 -0
  519. package/src/style.scss +0 -3
  520. package/src/utils/order-inserter-block-items.js +26 -0
  521. package/src/utils/use-should-contextual-toolbar-show.js +19 -9
  522. package/tsconfig.json +1 -0
  523. package/tsconfig.tsbuildinfo +1 -1
  524. package/build/components/block-list/block-list-compact.native.js +0 -75
  525. package/build/components/block-list/block-list-compact.native.js.map +0 -1
  526. package/build/components/off-canvas-editor/appender.js +0 -125
  527. package/build/components/off-canvas-editor/appender.js.map +0 -1
  528. package/build/components/off-canvas-editor/block-contents.js +0 -141
  529. package/build/components/off-canvas-editor/block-contents.js.map +0 -1
  530. package/build/components/off-canvas-editor/block-select-button.js +0 -126
  531. package/build/components/off-canvas-editor/block-select-button.js.map +0 -1
  532. package/build/components/off-canvas-editor/block.js +0 -297
  533. package/build/components/off-canvas-editor/block.js.map +0 -1
  534. package/build/components/off-canvas-editor/branch.js +0 -197
  535. package/build/components/off-canvas-editor/branch.js.map +0 -1
  536. package/build/components/off-canvas-editor/context.js +0 -19
  537. package/build/components/off-canvas-editor/context.js.map +0 -1
  538. package/build/components/off-canvas-editor/drop-indicator.js +0 -118
  539. package/build/components/off-canvas-editor/drop-indicator.js.map +0 -1
  540. package/build/components/off-canvas-editor/expander.js +0 -41
  541. package/build/components/off-canvas-editor/expander.js.map +0 -1
  542. package/build/components/off-canvas-editor/index.js +0 -236
  543. package/build/components/off-canvas-editor/index.js.map +0 -1
  544. package/build/components/off-canvas-editor/leaf-more-menu.js +0 -146
  545. package/build/components/off-canvas-editor/leaf-more-menu.js.map +0 -1
  546. package/build/components/off-canvas-editor/leaf.js +0 -60
  547. package/build/components/off-canvas-editor/leaf.js.map +0 -1
  548. package/build/components/off-canvas-editor/link-ui.js +0 -186
  549. package/build/components/off-canvas-editor/link-ui.js.map +0 -1
  550. package/build/components/off-canvas-editor/update-attributes.js +0 -108
  551. package/build/components/off-canvas-editor/update-attributes.js.map +0 -1
  552. package/build/components/off-canvas-editor/use-block-selection.js +0 -139
  553. package/build/components/off-canvas-editor/use-block-selection.js.map +0 -1
  554. package/build/components/off-canvas-editor/use-inserted-block.js +0 -58
  555. package/build/components/off-canvas-editor/use-inserted-block.js.map +0 -1
  556. package/build/components/off-canvas-editor/use-list-view-client-ids.js +0 -33
  557. package/build/components/off-canvas-editor/use-list-view-client-ids.js.map +0 -1
  558. package/build/components/off-canvas-editor/use-list-view-drop-zone.js +0 -235
  559. package/build/components/off-canvas-editor/use-list-view-drop-zone.js.map +0 -1
  560. package/build/components/off-canvas-editor/use-list-view-expand-selected-item.js +0 -60
  561. package/build/components/off-canvas-editor/use-list-view-expand-selected-item.js.map +0 -1
  562. package/build/components/off-canvas-editor/utils.js +0 -60
  563. package/build/components/off-canvas-editor/utils.js.map +0 -1
  564. package/build-module/components/block-list/block-list-compact.native.js +0 -60
  565. package/build-module/components/block-list/block-list-compact.native.js.map +0 -1
  566. package/build-module/components/off-canvas-editor/appender.js +0 -108
  567. package/build-module/components/off-canvas-editor/appender.js.map +0 -1
  568. package/build-module/components/off-canvas-editor/block-contents.js +0 -121
  569. package/build-module/components/off-canvas-editor/block-contents.js.map +0 -1
  570. package/build-module/components/off-canvas-editor/block-select-button.js +0 -107
  571. package/build-module/components/off-canvas-editor/block-select-button.js.map +0 -1
  572. package/build-module/components/off-canvas-editor/block.js +0 -273
  573. package/build-module/components/off-canvas-editor/block.js.map +0 -1
  574. package/build-module/components/off-canvas-editor/branch.js +0 -179
  575. package/build-module/components/off-canvas-editor/branch.js.map +0 -1
  576. package/build-module/components/off-canvas-editor/context.js +0 -7
  577. package/build-module/components/off-canvas-editor/context.js.map +0 -1
  578. package/build-module/components/off-canvas-editor/drop-indicator.js +0 -111
  579. package/build-module/components/off-canvas-editor/drop-indicator.js.map +0 -1
  580. package/build-module/components/off-canvas-editor/expander.js +0 -32
  581. package/build-module/components/off-canvas-editor/expander.js.map +0 -1
  582. package/build-module/components/off-canvas-editor/index.js +0 -213
  583. package/build-module/components/off-canvas-editor/index.js.map +0 -1
  584. package/build-module/components/off-canvas-editor/leaf-more-menu.js +0 -128
  585. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +0 -1
  586. package/build-module/components/off-canvas-editor/leaf.js +0 -45
  587. package/build-module/components/off-canvas-editor/leaf.js.map +0 -1
  588. package/build-module/components/off-canvas-editor/link-ui.js +0 -166
  589. package/build-module/components/off-canvas-editor/link-ui.js.map +0 -1
  590. package/build-module/components/off-canvas-editor/update-attributes.js +0 -97
  591. package/build-module/components/off-canvas-editor/update-attributes.js.map +0 -1
  592. package/build-module/components/off-canvas-editor/use-block-selection.js +0 -124
  593. package/build-module/components/off-canvas-editor/use-block-selection.js.map +0 -1
  594. package/build-module/components/off-canvas-editor/use-inserted-block.js +0 -47
  595. package/build-module/components/off-canvas-editor/use-inserted-block.js.map +0 -1
  596. package/build-module/components/off-canvas-editor/use-list-view-client-ids.js +0 -24
  597. package/build-module/components/off-canvas-editor/use-list-view-client-ids.js.map +0 -1
  598. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js +0 -220
  599. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js.map +0 -1
  600. package/build-module/components/off-canvas-editor/use-list-view-expand-selected-item.js +0 -50
  601. package/build-module/components/off-canvas-editor/use-list-view-expand-selected-item.js.map +0 -1
  602. package/build-module/components/off-canvas-editor/utils.js +0 -44
  603. package/build-module/components/off-canvas-editor/utils.js.map +0 -1
  604. package/src/components/block-list/block-list-compact.native.js +0 -63
  605. package/src/components/off-canvas-editor/README.md +0 -5
  606. package/src/components/off-canvas-editor/appender.js +0 -124
  607. package/src/components/off-canvas-editor/block-contents.js +0 -156
  608. package/src/components/off-canvas-editor/block-select-button.js +0 -128
  609. package/src/components/off-canvas-editor/block.js +0 -347
  610. package/src/components/off-canvas-editor/branch.js +0 -238
  611. package/src/components/off-canvas-editor/context.js +0 -8
  612. package/src/components/off-canvas-editor/drop-indicator.js +0 -126
  613. package/src/components/off-canvas-editor/expander.js +0 -26
  614. package/src/components/off-canvas-editor/index.js +0 -271
  615. package/src/components/off-canvas-editor/leaf-more-menu.js +0 -157
  616. package/src/components/off-canvas-editor/leaf.js +0 -52
  617. package/src/components/off-canvas-editor/link-ui.js +0 -167
  618. package/src/components/off-canvas-editor/style.scss +0 -34
  619. package/src/components/off-canvas-editor/test/use-inserted-block.js +0 -108
  620. package/src/components/off-canvas-editor/test/utils.js +0 -50
  621. package/src/components/off-canvas-editor/update-attributes.js +0 -99
  622. package/src/components/off-canvas-editor/use-block-selection.js +0 -169
  623. package/src/components/off-canvas-editor/use-inserted-block.js +0 -47
  624. package/src/components/off-canvas-editor/use-list-view-client-ids.js +0 -29
  625. package/src/components/off-canvas-editor/use-list-view-drop-zone.js +0 -260
  626. package/src/components/off-canvas-editor/use-list-view-expand-selected-item.js +0 -58
  627. package/src/components/off-canvas-editor/utils.js +0 -58
@@ -27,9 +27,9 @@ import { store as blockEditorStore } from '../../store';
27
27
  */
28
28
 
29
29
  /**
30
- * An array representing data for blocks in the DOM used by drag and drop.
30
+ * An object representing data for blocks in the DOM used by drag and drop.
31
31
  *
32
- * @typedef {Object} WPListViewDropZoneBlocks
32
+ * @typedef {Object} WPListViewDropZoneBlock
33
33
  * @property {string} clientId The client id for the block.
34
34
  * @property {string} rootClientId The root client id for the block.
35
35
  * @property {number} blockIndex The block's index.
@@ -41,6 +41,12 @@ import { store as blockEditorStore } from '../../store';
41
41
  * @property {boolean} canInsertDraggedBlocksAsChild Whether the dragged block can be a child of this block.
42
42
  */
43
43
 
44
+ /**
45
+ * An array representing data for blocks in the DOM used by drag and drop.
46
+ *
47
+ * @typedef {WPListViewDropZoneBlock[]} WPListViewDropZoneBlocks
48
+ */
49
+
44
50
  /**
45
51
  * An object containing details of a drop target.
46
52
  *
@@ -52,19 +58,110 @@ import { store as blockEditorStore } from '../../store';
52
58
  * 'inside' refers to nesting as an inner block.
53
59
  */
54
60
 
61
+ // When the indentation level, the corresponding left margin in `style.scss`
62
+ // must be updated as well to ensure the drop zone is aligned with the indentation.
63
+ export const NESTING_LEVEL_INDENTATION = 28;
64
+
65
+ /**
66
+ * Determines whether the user is positioning the dragged block to be
67
+ * moved up to a parent level.
68
+ *
69
+ * Determined based on nesting level indentation of the current block.
70
+ *
71
+ * @param {WPPoint} point The point representing the cursor position when dragging.
72
+ * @param {DOMRect} rect The rectangle.
73
+ * @param {number} nestingLevel The nesting level of the block.
74
+ * @return {boolean} Whether the gesture is an upward gesture.
75
+ */
76
+ function isUpGesture( point, rect, nestingLevel = 1 ) {
77
+ // If the block is nested, and the user is dragging to the bottom
78
+ // left of the block, then it is an upward gesture.
79
+ const blockIndentPosition =
80
+ rect.left + nestingLevel * NESTING_LEVEL_INDENTATION;
81
+ return point.x < blockIndentPosition;
82
+ }
83
+
84
+ /**
85
+ * Returns how many nesting levels up the user is attempting to drag to.
86
+ *
87
+ * The relative parent level is calculated based on how far
88
+ * the cursor is from the provided nesting level (e.g. of a candidate block
89
+ * that the user is hovering over). The nesting level is considered "desired"
90
+ * because it is not guaranteed that the user will be able to drag to the desired level.
91
+ *
92
+ * The returned integer can be used to access an ascending array
93
+ * of parent blocks, where the first item is the block the user
94
+ * is hovering over, and the last item is the root block.
95
+ *
96
+ * @param {WPPoint} point The point representing the cursor position when dragging.
97
+ * @param {DOMRect} rect The rectangle.
98
+ * @param {number} nestingLevel The nesting level of the block.
99
+ * @return {number} The desired relative parent level.
100
+ */
101
+ function getDesiredRelativeParentLevel( point, rect, nestingLevel = 1 ) {
102
+ const blockIndentPosition =
103
+ rect.left + nestingLevel * NESTING_LEVEL_INDENTATION;
104
+ const desiredParentLevel = Math.round(
105
+ ( point.x - blockIndentPosition ) / NESTING_LEVEL_INDENTATION
106
+ );
107
+ return Math.abs( desiredParentLevel );
108
+ }
109
+
110
+ /**
111
+ * Returns an array of the parent blocks of the block the user is dropping to.
112
+ *
113
+ * @param {WPListViewDropZoneBlock} candidateBlockData The block the user is dropping to.
114
+ * @param {WPListViewDropZoneBlocks} blocksData Data about the blocks in list view.
115
+ * @return {WPListViewDropZoneBlocks} An array of block parents, including the block the user is dropping to.
116
+ */
117
+ function getCandidateBlockParents( candidateBlockData, blocksData ) {
118
+ const candidateBlockParents = [];
119
+ let currentBlockData = candidateBlockData;
120
+
121
+ while ( currentBlockData ) {
122
+ candidateBlockParents.push( { ...currentBlockData } );
123
+ currentBlockData = blocksData.find(
124
+ ( blockData ) =>
125
+ blockData.clientId === currentBlockData.rootClientId
126
+ );
127
+ }
128
+
129
+ return candidateBlockParents;
130
+ }
131
+
132
+ /**
133
+ * Given a list of blocks data and a block index, return the next non-dragged
134
+ * block. This is used to determine the block that the user is dropping to,
135
+ * while ignoring the dragged block.
136
+ *
137
+ * @param {WPListViewDropZoneBlocks} blocksData Data about the blocks in list view.
138
+ * @param {number} index The index to begin searching from.
139
+ * @return {WPListViewDropZoneBlock | undefined} The next non-dragged block.
140
+ */
141
+ function getNextNonDraggedBlock( blocksData, index ) {
142
+ const nextBlockData = blocksData[ index + 1 ];
143
+ if ( nextBlockData && nextBlockData.isDraggedBlock ) {
144
+ return getNextNonDraggedBlock( blocksData, index + 1 );
145
+ }
146
+
147
+ return nextBlockData;
148
+ }
149
+
55
150
  /**
56
151
  * Determines whether the user positioning the dragged block to nest as an
57
152
  * inner block.
58
153
  *
59
- * Presently this is determined by whether the cursor is on the right hand side
60
- * of the block.
154
+ * Determined based on nesting level indentation of the current block, plus
155
+ * the indentation of the next level of nesting.
61
156
  *
62
- * @param {WPPoint} point The point representing the cursor position when dragging.
63
- * @param {DOMRect} rect The rectangle.
157
+ * @param {WPPoint} point The point representing the cursor position when dragging.
158
+ * @param {DOMRect} rect The rectangle.
159
+ * @param {number} nestingLevel The nesting level of the block.
64
160
  */
65
- function isNestingGesture( point, rect ) {
66
- const blockCenterX = rect.left + rect.width / 2;
67
- return point.x > blockCenterX;
161
+ function isNestingGesture( point, rect, nestingLevel = 1 ) {
162
+ const blockIndentPosition =
163
+ rect.left + nestingLevel * NESTING_LEVEL_INDENTATION;
164
+ return point.x > blockIndentPosition + NESTING_LEVEL_INDENTATION;
68
165
  }
69
166
 
70
167
  // Block navigation is always a vertical list, so only allow dropping
@@ -84,8 +181,10 @@ export function getListViewDropTarget( blocksData, position ) {
84
181
  let candidateBlockData;
85
182
  let candidateDistance;
86
183
  let candidateRect;
184
+ let candidateBlockIndex;
87
185
 
88
- for ( const blockData of blocksData ) {
186
+ for ( let i = 0; i < blocksData.length; i++ ) {
187
+ const blockData = blocksData[ i ];
89
188
  if ( blockData.isDraggedBlock ) {
90
189
  continue;
91
190
  }
@@ -121,10 +220,12 @@ export function getListViewDropTarget( blocksData, position ) {
121
220
  candidateEdge = 'bottom';
122
221
  candidateRect =
123
222
  previousBlockData.element.getBoundingClientRect();
223
+ candidateBlockIndex = index - 1;
124
224
  } else {
125
225
  candidateBlockData = blockData;
126
226
  candidateEdge = edge;
127
227
  candidateRect = rect;
228
+ candidateBlockIndex = index;
128
229
  }
129
230
 
130
231
  // If the mouse position is within the block, break early
@@ -143,8 +244,79 @@ export function getListViewDropTarget( blocksData, position ) {
143
244
  return;
144
245
  }
145
246
 
247
+ const candidateBlockParents = getCandidateBlockParents(
248
+ candidateBlockData,
249
+ blocksData
250
+ );
251
+
146
252
  const isDraggingBelow = candidateEdge === 'bottom';
147
253
 
254
+ // If the user is dragging towards the bottom of the block check whether
255
+ // they might be trying to move the block to be at a parent level.
256
+ if (
257
+ isDraggingBelow &&
258
+ candidateBlockData.rootClientId &&
259
+ isUpGesture( position, candidateRect, candidateBlockParents.length )
260
+ ) {
261
+ const nextBlock = getNextNonDraggedBlock(
262
+ blocksData,
263
+ candidateBlockIndex
264
+ );
265
+ const currentLevel = candidateBlockData.nestingLevel;
266
+ const nextLevel = nextBlock ? nextBlock.nestingLevel : 1;
267
+
268
+ if ( currentLevel && nextLevel ) {
269
+ // Determine the desired relative level of the block to be dropped.
270
+ const desiredRelativeLevel = getDesiredRelativeParentLevel(
271
+ position,
272
+ candidateRect,
273
+ candidateBlockParents.length
274
+ );
275
+
276
+ const targetParentIndex = Math.max(
277
+ Math.min( desiredRelativeLevel, currentLevel - nextLevel ),
278
+ 0
279
+ );
280
+
281
+ if ( candidateBlockParents[ targetParentIndex ] ) {
282
+ // Default to the block index of the candidate block.
283
+ let newBlockIndex = candidateBlockData.blockIndex;
284
+
285
+ // If the next block is at the same level, use that as the default
286
+ // block index. This ensures that the block is dropped in the correct
287
+ // position when dragging to the bottom of a block.
288
+ if (
289
+ candidateBlockParents[ targetParentIndex ].nestingLevel ===
290
+ nextBlock?.nestingLevel
291
+ ) {
292
+ newBlockIndex = nextBlock?.blockIndex;
293
+ } else {
294
+ // Otherwise, search from the current block index back
295
+ // to find the last block index within the same target parent.
296
+ for ( let i = candidateBlockIndex; i >= 0; i-- ) {
297
+ const blockData = blocksData[ i ];
298
+ if (
299
+ blockData.rootClientId ===
300
+ candidateBlockParents[ targetParentIndex ]
301
+ .rootClientId
302
+ ) {
303
+ newBlockIndex = blockData.blockIndex + 1;
304
+ break;
305
+ }
306
+ }
307
+ }
308
+
309
+ return {
310
+ rootClientId:
311
+ candidateBlockParents[ targetParentIndex ].rootClientId,
312
+ clientId: candidateBlockData.clientId,
313
+ blockIndex: newBlockIndex,
314
+ dropPosition: candidateEdge,
315
+ };
316
+ }
317
+ }
318
+ }
319
+
148
320
  // If the user is dragging towards the bottom of the block check whether
149
321
  // they might be trying to nest the block as a child.
150
322
  // If the block already has inner blocks, and is expanded, this should be treated
@@ -156,7 +328,11 @@ export function getListViewDropTarget( blocksData, position ) {
156
328
  candidateBlockData.canInsertDraggedBlocksAsChild &&
157
329
  ( ( candidateBlockData.innerBlockCount > 0 &&
158
330
  candidateBlockData.isExpanded ) ||
159
- isNestingGesture( position, candidateRect ) )
331
+ isNestingGesture(
332
+ position,
333
+ candidateRect,
334
+ candidateBlockParents.length
335
+ ) )
160
336
  ) {
161
337
  return {
162
338
  rootClientId: candidateBlockData.clientId,
@@ -213,6 +389,12 @@ export default function useListViewDropZone() {
213
389
  const blocksData = blockElements.map( ( blockElement ) => {
214
390
  const clientId = blockElement.dataset.block;
215
391
  const isExpanded = blockElement.dataset.expanded === 'true';
392
+
393
+ // Get nesting level from `aria-level` attribute because Firefox does not support `element.ariaLevel`.
394
+ const nestingLevel = parseInt(
395
+ blockElement.getAttribute( 'aria-level' ),
396
+ 10
397
+ );
216
398
  const rootClientId = getBlockRootClientId( clientId );
217
399
 
218
400
  return {
@@ -221,6 +403,7 @@ export default function useListViewDropZone() {
221
403
  rootClientId,
222
404
  blockIndex: getBlockIndex( clientId ),
223
405
  element: blockElement,
406
+ nestingLevel: nestingLevel || undefined,
224
407
  isDraggedBlock: isBlockDrag
225
408
  ? draggedBlockClientIds.includes( clientId )
226
409
  : false,
@@ -17,6 +17,8 @@ import { __ } from '@wordpress/i18n';
17
17
  import { useState, useEffect } from '@wordpress/element';
18
18
  import { useSelect } from '@wordpress/data';
19
19
  import { keyboardReturn } from '@wordpress/icons';
20
+ import { pasteHandler } from '@wordpress/blocks';
21
+ import deprecated from '@wordpress/deprecated';
20
22
 
21
23
  /**
22
24
  * Internal dependencies
@@ -74,12 +76,19 @@ export function MediaPlaceholder( {
74
76
  onToggleFeaturedImage,
75
77
  onDoubleClick,
76
78
  onFilesPreUpload = noop,
77
- onHTMLDrop = noop,
79
+ onHTMLDrop: deprecatedOnHTMLDrop,
78
80
  children,
79
81
  mediaLibraryButton,
80
82
  placeholder,
81
83
  style,
82
84
  } ) {
85
+ if ( deprecatedOnHTMLDrop ) {
86
+ deprecated( 'wp.blockEditor.MediaPlaceholder onHTMLDrop prop', {
87
+ since: '6.2',
88
+ version: '6.4',
89
+ } );
90
+ }
91
+
83
92
  const mediaUpload = useSelect( ( select ) => {
84
93
  const { getSettings } = select( blockEditorStore );
85
94
  return getSettings().mediaUpload;
@@ -177,6 +186,70 @@ export function MediaPlaceholder( {
177
186
  } );
178
187
  };
179
188
 
189
+ async function handleBlocksDrop( blocks ) {
190
+ if ( ! blocks || ! Array.isArray( blocks ) ) {
191
+ return;
192
+ }
193
+
194
+ function recursivelyFindMediaFromBlocks( _blocks ) {
195
+ return _blocks.flatMap( ( block ) =>
196
+ ( block.name === 'core/image' ||
197
+ block.name === 'core/audio' ||
198
+ block.name === 'core/video' ) &&
199
+ block.attributes.url
200
+ ? [ block ]
201
+ : recursivelyFindMediaFromBlocks( block.innerBlocks )
202
+ );
203
+ }
204
+
205
+ const mediaBlocks = recursivelyFindMediaFromBlocks( blocks );
206
+
207
+ if ( ! mediaBlocks.length ) {
208
+ return;
209
+ }
210
+
211
+ const uploadedMediaList = await Promise.all(
212
+ mediaBlocks.map( ( block ) =>
213
+ block.attributes.id
214
+ ? block.attributes
215
+ : new Promise( ( resolve, reject ) => {
216
+ window
217
+ .fetch( block.attributes.url )
218
+ .then( ( response ) => response.blob() )
219
+ .then( ( blob ) =>
220
+ mediaUpload( {
221
+ filesList: [ blob ],
222
+ additionalData: {
223
+ title: block.attributes.title,
224
+ alt_text: block.attributes.alt,
225
+ caption: block.attributes.caption,
226
+ },
227
+ onFileChange: ( [ media ] ) => {
228
+ if ( media.id ) {
229
+ resolve( media );
230
+ }
231
+ },
232
+ allowedTypes,
233
+ onError: reject,
234
+ } )
235
+ )
236
+ .catch( () => resolve( block.attributes.url ) );
237
+ } )
238
+ )
239
+ ).catch( ( err ) => onError( err ) );
240
+
241
+ if ( multiple ) {
242
+ onSelect( uploadedMediaList );
243
+ } else {
244
+ onSelect( uploadedMediaList[ 0 ] );
245
+ }
246
+ }
247
+
248
+ async function onHTMLDrop( HTML ) {
249
+ const blocks = pasteHandler( { HTML } );
250
+ return await handleBlocksDrop( blocks );
251
+ }
252
+
180
253
  const onUpload = ( event ) => {
181
254
  onFilesUpload( event.target.files );
182
255
  };
@@ -23,14 +23,14 @@ function MultiSelectionInspector( { blocks } ) {
23
23
  <div className="block-editor-multi-selection-inspector__card-title">
24
24
  { sprintf(
25
25
  /* translators: %d: number of blocks */
26
- _n( '%d block', '%d blocks', blocks.length ),
26
+ _n( '%d Block', '%d Blocks', blocks.length ),
27
27
  blocks.length
28
28
  ) }
29
29
  </div>
30
30
  <div className="block-editor-multi-selection-inspector__card-description">
31
31
  { sprintf(
32
32
  /* translators: %d: number of words */
33
- _n( '%d word', '%d words', words ),
33
+ _n( '%d word selected.', '%d words selected.', words ),
34
34
  words
35
35
  ) }
36
36
  </div>
@@ -9,7 +9,7 @@ import classnames from 'classnames';
9
9
  import { useViewportMatch } from '@wordpress/compose';
10
10
  import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
11
11
  import { __ } from '@wordpress/i18n';
12
- import { check } from '@wordpress/icons';
12
+ import { check, desktop, mobile, tablet } from '@wordpress/icons';
13
13
 
14
14
  export default function PreviewOptions( {
15
15
  children,
@@ -38,13 +38,20 @@ export default function PreviewOptions( {
38
38
  const menuProps = {
39
39
  'aria-label': __( 'View options' ),
40
40
  };
41
+
42
+ const deviceIcons = {
43
+ mobile,
44
+ tablet,
45
+ desktop,
46
+ };
47
+
41
48
  return (
42
49
  <DropdownMenu
43
50
  className="block-editor-post-preview__dropdown"
44
51
  popoverProps={ popoverProps }
45
52
  toggleProps={ toggleProps }
46
53
  menuProps={ menuProps }
47
- icon={ null }
54
+ icon={ deviceIcons[ deviceType.toLowerCase() ] }
48
55
  >
49
56
  { () => (
50
57
  <>
@@ -29,8 +29,6 @@ function PublishDateTimePicker(
29
29
  />
30
30
  <DateTimePicker
31
31
  startOfWeek={ getSettings().l10n.startOfWeek }
32
- __nextRemoveHelpButton
33
- __nextRemoveResetButton
34
32
  onChange={ onChange }
35
33
  { ...additionalProps }
36
34
  />
@@ -74,6 +74,7 @@ export default function SpacingInputControl( {
74
74
 
75
75
  const previousValue = usePrevious( value );
76
76
  if (
77
+ !! value &&
77
78
  previousValue !== value &&
78
79
  ! isValueSpacingPreset( value ) &&
79
80
  showCustomValueControl !== true
@@ -139,6 +139,12 @@ _Required._ Called when the value changes. The second parameter is `null` unless
139
139
  }
140
140
  ```
141
141
 
142
+ ### `onKeydown`: `( event: KeyboardEvent ) => void`
143
+
144
+ A callback invoked on the keydown event.
145
+
146
+ - Required: No
147
+
142
148
  ### `label: String`
143
149
 
144
150
  _Optional._ If this property is added, a label will be generated using label property as the content.
@@ -267,6 +267,7 @@ class URLInput extends Component {
267
267
  }
268
268
 
269
269
  onKeyDown( event ) {
270
+ this.props.onKeyDown?.( event );
270
271
  const { showSuggestions, selectedSuggestion, suggestions, loading } =
271
272
  this.state;
272
273
 
@@ -309,11 +310,10 @@ class URLInput extends Component {
309
310
 
310
311
  // Submitting while loading should trigger onSubmit.
311
312
  case ENTER: {
312
- event.preventDefault();
313
313
  if ( this.props.onSubmit ) {
314
+ event.preventDefault();
314
315
  this.props.onSubmit( null, event );
315
316
  }
316
-
317
317
  break;
318
318
  }
319
319
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useDispatch, useSelect } from '@wordpress/data';
4
+ import { useDispatch, useSelect, useRegistry } from '@wordpress/data';
5
5
  import { useCallback, useState } from '@wordpress/element';
6
6
  import {
7
7
  useThrottle,
@@ -19,6 +19,7 @@ import {
19
19
  isPointContainedByRect,
20
20
  } from '../../utils/math';
21
21
  import { store as blockEditorStore } from '../../store';
22
+ import { unlock } from '../../lock-unlock';
22
23
 
23
24
  /** @typedef {import('../../utils/math').WPPoint} WPPoint */
24
25
  /** @typedef {import('../use-on-block-drop/types').WPDropOperation} WPDropOperation */
@@ -142,6 +143,7 @@ export default function useBlockDropZone( {
142
143
  // an empty string to represent top-level blocks.
143
144
  rootClientId: targetRootClientId = '',
144
145
  } = {} ) {
146
+ const registry = useRegistry();
145
147
  const [ dropTarget, setDropTarget ] = useState( {
146
148
  index: null,
147
149
  operation: 'insert',
@@ -150,15 +152,13 @@ export default function useBlockDropZone( {
150
152
  const isDisabled = useSelect(
151
153
  ( select ) => {
152
154
  const {
153
- getTemplateLock,
154
155
  __unstableIsWithinBlockOverlay,
155
156
  __unstableHasActiveBlockOverlayActive,
156
- } = select( blockEditorStore );
157
- const templateLock = getTemplateLock( targetRootClientId );
157
+ getBlockEditingMode,
158
+ } = unlock( select( blockEditorStore ) );
159
+ const blockEditingMode = getBlockEditingMode( targetRootClientId );
158
160
  return (
159
- [ 'all', 'contentOnly' ].some(
160
- ( lock ) => lock === templateLock
161
- ) ||
161
+ blockEditingMode !== 'default' ||
162
162
  __unstableHasActiveBlockOverlayActive( targetRootClientId ) ||
163
163
  __unstableIsWithinBlockOverlay( targetRootClientId )
164
164
  );
@@ -181,9 +181,14 @@ export default function useBlockDropZone( {
181
181
 
182
182
  // The block list is empty, don't show the insertion point but still allow dropping.
183
183
  if ( blocks.length === 0 ) {
184
- setDropTarget( {
185
- index: 0,
186
- operation: 'insert',
184
+ registry.batch( () => {
185
+ setDropTarget( {
186
+ index: 0,
187
+ operation: 'insert',
188
+ } );
189
+ showInsertionPoint( targetRootClientId, 0, {
190
+ operation: 'insert',
191
+ } );
187
192
  } );
188
193
  return;
189
194
  }
@@ -208,15 +213,24 @@ export default function useBlockDropZone( {
208
213
  getBlockListSettings( targetRootClientId )?.orientation
209
214
  );
210
215
 
211
- setDropTarget( {
212
- index: targetIndex,
213
- operation,
214
- } );
215
- showInsertionPoint( targetRootClientId, targetIndex, {
216
- operation,
216
+ registry.batch( () => {
217
+ setDropTarget( {
218
+ index: targetIndex,
219
+ operation,
220
+ } );
221
+ showInsertionPoint( targetRootClientId, targetIndex, {
222
+ operation,
223
+ } );
217
224
  } );
218
225
  },
219
- [ targetRootClientId ]
226
+ [
227
+ getBlocks,
228
+ targetRootClientId,
229
+ getBlockListSettings,
230
+ registry,
231
+ showInsertionPoint,
232
+ getBlockIndex,
233
+ ]
220
234
  ),
221
235
  200
222
236
  );
@@ -47,12 +47,20 @@ export default function useResizeCanvas( deviceType ) {
47
47
 
48
48
  const contentInlineStyles = ( device ) => {
49
49
  const height = device === 'Mobile' ? '768px' : '1024px';
50
+ const marginVertical = marginValue() + 'px';
51
+ const marginHorizontal = 'auto';
52
+
50
53
  switch ( device ) {
51
54
  case 'Tablet':
52
55
  case 'Mobile':
53
56
  return {
54
57
  width: getCanvasWidth( device ),
55
- margin: marginValue() + 'px auto',
58
+ // Keeping margin styles separate to avoid warnings
59
+ // when those props get overridden in the iframe component
60
+ marginTop: marginVertical,
61
+ marginBottom: marginVertical,
62
+ marginLeft: marginHorizontal,
63
+ marginRight: marginHorizontal,
56
64
  height,
57
65
  borderRadius: '2px 2px 2px 2px',
58
66
  border: '1px solid #ddd',
@@ -19,6 +19,9 @@ describe( 'isNavigationCandidate', () => {
19
19
  elements.inputCheckbox = document.createElement( 'input' );
20
20
  elements.inputCheckbox.setAttribute( 'type', 'checkbox' );
21
21
 
22
+ elements.inputNumber = document.createElement( 'input' );
23
+ elements.inputNumber.setAttribute( 'type', 'number' );
24
+
22
25
  elements.contentEditable = document.createElement( 'p' );
23
26
  elements.contentEditable.contentEditable = true;
24
27
  } );
@@ -47,6 +50,18 @@ describe( 'isNavigationCandidate', () => {
47
50
  } );
48
51
  } );
49
52
 
53
+ it( 'should return false if vertically navigating inputs with vertial support like number', () => {
54
+ [ UP, DOWN ].forEach( ( keyCode ) => {
55
+ const result = isNavigationCandidate(
56
+ elements.inputNumber,
57
+ keyCode,
58
+ false
59
+ );
60
+
61
+ expect( result ).toBe( false );
62
+ } );
63
+ } );
64
+
50
65
  it( 'should return false if horizontally navigating input', () => {
51
66
  [ LEFT, RIGHT ].forEach( ( keyCode ) => {
52
67
  const result = isNavigationCandidate(
@@ -32,19 +32,32 @@ import { store as blockEditorStore } from '../../store';
32
32
  */
33
33
  export function isNavigationCandidate( element, keyCode, hasModifier ) {
34
34
  const isVertical = keyCode === UP || keyCode === DOWN;
35
+ const { tagName } = element;
36
+ const elementType = element.getAttribute( 'type' );
35
37
 
36
- // Currently, all elements support unmodified vertical navigation.
38
+ // Native inputs should not navigate vertically, unless they are simple types that don't need up/down arrow keys.
37
39
  if ( isVertical && ! hasModifier ) {
40
+ if ( tagName === 'INPUT' ) {
41
+ const verticalInputTypes = [
42
+ 'date',
43
+ 'datetime-local',
44
+ 'month',
45
+ 'number',
46
+ 'range',
47
+ 'time',
48
+ 'week',
49
+ ];
50
+ return ! verticalInputTypes.includes( elementType );
51
+ }
38
52
  return true;
39
53
  }
40
54
 
41
- const { tagName } = element;
42
-
43
55
  // Native inputs should not navigate horizontally, unless they are simple types that don't need left/right arrow keys.
44
56
  if ( tagName === 'INPUT' ) {
45
57
  const simpleInputTypes = [
46
58
  'button',
47
59
  'checkbox',
60
+ 'number',
48
61
  'color',
49
62
  'file',
50
63
  'image',
@@ -52,7 +65,7 @@ export function isNavigationCandidate( element, keyCode, hasModifier ) {
52
65
  'reset',
53
66
  'submit',
54
67
  ];
55
- return simpleInputTypes.includes( element.getAttribute( 'type' ) );
68
+ return simpleInputTypes.includes( elementType );
56
69
  }
57
70
 
58
71
  // Native textareas should not navigate horizontally.