@wordpress/block-editor 10.2.0 → 10.4.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 (482) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +41 -0
  3. package/build/components/alignment-control/ui.js +1 -1
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-alignment-control/constants.js +1 -1
  6. package/build/components/block-alignment-control/constants.js.map +1 -1
  7. package/build/components/block-alignment-matrix-control/index.js +1 -1
  8. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  9. package/build/components/block-compare/index.js +1 -3
  10. package/build/components/block-compare/index.js.map +1 -1
  11. package/build/components/block-draggable/draggable-chip.js +4 -2
  12. package/build/components/block-draggable/draggable-chip.js.map +1 -1
  13. package/build/components/block-edit/index.js +4 -2
  14. package/build/components/block-edit/index.js.map +1 -1
  15. package/build/components/block-inspector/index.js +4 -4
  16. package/build/components/block-inspector/index.js.map +1 -1
  17. package/build/components/block-list/block-list-compact.native.js +1 -0
  18. package/build/components/block-list/block-list-compact.native.js.map +1 -1
  19. package/build/components/block-list/block.js +75 -15
  20. package/build/components/block-list/block.js.map +1 -1
  21. package/build/components/block-list/block.native.js +79 -12
  22. package/build/components/block-list/block.native.js.map +1 -1
  23. package/build/components/block-list/use-in-between-inserter.js +7 -23
  24. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  25. package/build/components/block-lock/modal.js +9 -6
  26. package/build/components/block-lock/modal.js.map +1 -1
  27. package/build/components/block-parent-selector/index.js +3 -3
  28. package/build/components/block-parent-selector/index.js.map +1 -1
  29. package/build/components/block-patterns-list/index.js +5 -4
  30. package/build/components/block-patterns-list/index.js.map +1 -1
  31. package/build/components/block-popover/drop-zone.js +85 -0
  32. package/build/components/block-popover/drop-zone.js.map +1 -0
  33. package/build/components/block-popover/inbetween.js +2 -1
  34. package/build/components/block-popover/inbetween.js.map +1 -1
  35. package/build/components/block-popover/index.js +4 -2
  36. package/build/components/block-popover/index.js.map +1 -1
  37. package/build/components/block-preview/auto.js +2 -2
  38. package/build/components/block-preview/auto.js.map +1 -1
  39. package/build/components/block-preview/index.js +8 -13
  40. package/build/components/block-preview/index.js.map +1 -1
  41. package/build/components/block-preview/live.js +3 -7
  42. package/build/components/block-preview/live.js.map +1 -1
  43. package/build/components/block-selection-clearer/index.js +9 -1
  44. package/build/components/block-selection-clearer/index.js.map +1 -1
  45. package/build/components/block-settings-menu/block-settings-dropdown.js +19 -19
  46. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  47. package/build/components/block-styles/index.js +18 -42
  48. package/build/components/block-styles/index.js.map +1 -1
  49. package/build/components/block-switcher/index.js +2 -8
  50. package/build/components/block-switcher/index.js.map +1 -1
  51. package/build/components/block-switcher/preview-block-popover.js +1 -1
  52. package/build/components/block-switcher/preview-block-popover.js.map +1 -1
  53. package/build/components/block-toolbar/index.js +4 -4
  54. package/build/components/block-toolbar/index.js.map +1 -1
  55. package/build/components/block-tools/back-compat.js +2 -1
  56. package/build/components/block-tools/back-compat.js.map +1 -1
  57. package/build/components/block-tools/insertion-point.js +56 -16
  58. package/build/components/block-tools/insertion-point.js.map +1 -1
  59. package/build/components/block-tools/selected-block-popover.js +15 -3
  60. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  61. package/build/components/block-vertical-alignment-control/ui.js +1 -1
  62. package/build/components/block-vertical-alignment-control/ui.js.map +1 -1
  63. package/build/components/border-radius-control/all-input-control.js +2 -1
  64. package/build/components/border-radius-control/all-input-control.js.map +1 -1
  65. package/build/components/border-radius-control/index.js +2 -1
  66. package/build/components/border-radius-control/index.js.map +1 -1
  67. package/build/components/border-radius-control/input-controls.js +2 -1
  68. package/build/components/border-radius-control/input-controls.js.map +1 -1
  69. package/build/components/colors-gradients/control.js +1 -1
  70. package/build/components/colors-gradients/control.js.map +1 -1
  71. package/build/components/colors-gradients/panel-color-gradient-settings.js +2 -2
  72. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  73. package/build/components/duotone-control/index.js +1 -1
  74. package/build/components/duotone-control/index.js.map +1 -1
  75. package/build/components/font-sizes/fluid-utils.js +256 -0
  76. package/build/components/font-sizes/fluid-utils.js.map +1 -0
  77. package/build/components/font-sizes/index.js +8 -0
  78. package/build/components/font-sizes/index.js.map +1 -1
  79. package/build/components/font-sizes/with-font-sizes.js +1 -1
  80. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  81. package/build/components/iframe/index.js +1 -1
  82. package/build/components/iframe/index.js.map +1 -1
  83. package/build/components/image-editor/constants.js +1 -1
  84. package/build/components/image-editor/constants.js.map +1 -1
  85. package/build/components/index.js +0 -9
  86. package/build/components/index.js.map +1 -1
  87. package/build/components/inner-blocks/index.js +6 -2
  88. package/build/components/inner-blocks/index.js.map +1 -1
  89. package/build/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  90. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  91. package/build/components/inserter/block-patterns-tab.js +151 -78
  92. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  93. package/build/components/inserter/hooks/use-insertion-point.js +2 -7
  94. package/build/components/inserter/hooks/use-insertion-point.js.map +1 -1
  95. package/build/components/inserter/menu.js +14 -3
  96. package/build/components/inserter/menu.js.map +1 -1
  97. package/build/components/inserter/search-items.js +23 -2
  98. package/build/components/inserter/search-items.js.map +1 -1
  99. package/build/components/inserter-draggable-blocks/index.js +4 -2
  100. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  101. package/build/components/line-height-control/index.js +2 -1
  102. package/build/components/line-height-control/index.js.map +1 -1
  103. package/build/components/list-view/drop-indicator.js +2 -1
  104. package/build/components/list-view/drop-indicator.js.map +1 -1
  105. package/build/components/list-view/use-list-view-drop-zone.js +1 -14
  106. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  107. package/build/components/media-replace-flow/index.js +1 -1
  108. package/build/components/media-replace-flow/index.js.map +1 -1
  109. package/build/components/preview-options/index.js +2 -3
  110. package/build/components/preview-options/index.js.map +1 -1
  111. package/build/components/rich-text/format-toolbar/index.js +1 -1
  112. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  113. package/build/components/rich-text/format-toolbar-container.js +1 -1
  114. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  115. package/build/components/rich-text/use-paste-handler.js +1 -1
  116. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  117. package/build/components/spacing-sizes-control/all-input-control.js +6 -2
  118. package/build/components/spacing-sizes-control/all-input-control.js.map +1 -1
  119. package/build/components/spacing-sizes-control/axial-input-controls.js +6 -2
  120. package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -1
  121. package/build/components/spacing-sizes-control/index.js +6 -2
  122. package/build/components/spacing-sizes-control/index.js.map +1 -1
  123. package/build/components/spacing-sizes-control/input-controls.js +6 -2
  124. package/build/components/spacing-sizes-control/input-controls.js.map +1 -1
  125. package/build/components/spacing-sizes-control/spacing-input-control.js +45 -8
  126. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  127. package/build/components/url-input/index.js +1 -1
  128. package/build/components/url-input/index.js.map +1 -1
  129. package/build/components/use-block-drop-zone/index.js +98 -57
  130. package/build/components/use-block-drop-zone/index.js.map +1 -1
  131. package/build/components/use-on-block-drop/index.js +12 -12
  132. package/build/components/use-on-block-drop/index.js.map +1 -1
  133. package/build/components/use-on-block-drop/types.js +6 -0
  134. package/build/components/use-on-block-drop/types.js.map +1 -0
  135. package/build/hooks/align.js +1 -3
  136. package/build/hooks/align.js.map +1 -1
  137. package/build/hooks/align.native.js +1 -7
  138. package/build/hooks/align.native.js.map +1 -1
  139. package/build/hooks/border.js +1 -0
  140. package/build/hooks/border.js.map +1 -1
  141. package/build/hooks/dimensions.js +32 -4
  142. package/build/hooks/dimensions.js.map +1 -1
  143. package/build/hooks/font-size.js +61 -0
  144. package/build/hooks/font-size.js.map +1 -1
  145. package/build/hooks/layout.js +4 -3
  146. package/build/hooks/layout.js.map +1 -1
  147. package/build/hooks/margin.js +24 -17
  148. package/build/hooks/margin.js.map +1 -1
  149. package/build/hooks/padding.js +20 -12
  150. package/build/hooks/padding.js.map +1 -1
  151. package/build/hooks/style.js +126 -4
  152. package/build/hooks/style.js.map +1 -1
  153. package/build/hooks/use-typography-props.js +17 -3
  154. package/build/hooks/use-typography-props.js.map +1 -1
  155. package/build/hooks/utils.js +8 -7
  156. package/build/hooks/utils.js.map +1 -1
  157. package/build/layouts/constrained.js +0 -1
  158. package/build/layouts/constrained.js.map +1 -1
  159. package/build/layouts/flex.js +1 -1
  160. package/build/layouts/flex.js.map +1 -1
  161. package/build/store/actions.js +63 -45
  162. package/build/store/actions.js.map +1 -1
  163. package/build/store/array.js +1 -7
  164. package/build/store/array.js.map +1 -1
  165. package/build/store/defaults.js +3 -0
  166. package/build/store/defaults.js.map +1 -1
  167. package/build/store/reducer.js +31 -15
  168. package/build/store/reducer.js.map +1 -1
  169. package/build/store/selectors.js +46 -29
  170. package/build/store/selectors.js.map +1 -1
  171. package/build/utils/math.js +14 -0
  172. package/build/utils/math.js.map +1 -1
  173. package/build/utils/pre-parse-patterns.js +19 -2
  174. package/build/utils/pre-parse-patterns.js.map +1 -1
  175. package/build-module/components/alignment-control/ui.js +1 -1
  176. package/build-module/components/alignment-control/ui.js.map +1 -1
  177. package/build-module/components/block-alignment-control/constants.js +1 -1
  178. package/build-module/components/block-alignment-control/constants.js.map +1 -1
  179. package/build-module/components/block-alignment-matrix-control/index.js +1 -1
  180. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  181. package/build-module/components/block-compare/index.js +2 -3
  182. package/build-module/components/block-compare/index.js.map +1 -1
  183. package/build-module/components/block-draggable/draggable-chip.js +7 -3
  184. package/build-module/components/block-draggable/draggable-chip.js.map +1 -1
  185. package/build-module/components/block-edit/index.js +4 -2
  186. package/build-module/components/block-edit/index.js.map +1 -1
  187. package/build-module/components/block-inspector/index.js +4 -4
  188. package/build-module/components/block-inspector/index.js.map +1 -1
  189. package/build-module/components/block-list/block-list-compact.native.js +1 -0
  190. package/build-module/components/block-list/block-list-compact.native.js.map +1 -1
  191. package/build-module/components/block-list/block.js +75 -15
  192. package/build-module/components/block-list/block.js.map +1 -1
  193. package/build-module/components/block-list/block.native.js +80 -13
  194. package/build-module/components/block-list/block.native.js.map +1 -1
  195. package/build-module/components/block-list/use-in-between-inserter.js +8 -24
  196. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  197. package/build-module/components/block-lock/modal.js +10 -8
  198. package/build-module/components/block-lock/modal.js.map +1 -1
  199. package/build-module/components/block-parent-selector/index.js +3 -3
  200. package/build-module/components/block-parent-selector/index.js.map +1 -1
  201. package/build-module/components/block-patterns-list/index.js +5 -4
  202. package/build-module/components/block-patterns-list/index.js.map +1 -1
  203. package/build-module/components/block-popover/drop-zone.js +70 -0
  204. package/build-module/components/block-popover/drop-zone.js.map +1 -0
  205. package/build-module/components/block-popover/inbetween.js +2 -1
  206. package/build-module/components/block-popover/inbetween.js.map +1 -1
  207. package/build-module/components/block-popover/index.js +4 -2
  208. package/build-module/components/block-popover/index.js.map +1 -1
  209. package/build-module/components/block-preview/auto.js +1 -1
  210. package/build-module/components/block-preview/auto.js.map +1 -1
  211. package/build-module/components/block-preview/index.js +8 -12
  212. package/build-module/components/block-preview/index.js.map +1 -1
  213. package/build-module/components/block-preview/live.js +3 -6
  214. package/build-module/components/block-preview/live.js.map +1 -1
  215. package/build-module/components/block-selection-clearer/index.js +9 -1
  216. package/build-module/components/block-selection-clearer/index.js.map +1 -1
  217. package/build-module/components/block-settings-menu/block-settings-dropdown.js +20 -19
  218. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  219. package/build-module/components/block-styles/index.js +19 -44
  220. package/build-module/components/block-styles/index.js.map +1 -1
  221. package/build-module/components/block-switcher/index.js +2 -7
  222. package/build-module/components/block-switcher/index.js.map +1 -1
  223. package/build-module/components/block-switcher/preview-block-popover.js +1 -1
  224. package/build-module/components/block-switcher/preview-block-popover.js.map +1 -1
  225. package/build-module/components/block-toolbar/index.js +4 -4
  226. package/build-module/components/block-toolbar/index.js.map +1 -1
  227. package/build-module/components/block-tools/back-compat.js +2 -1
  228. package/build-module/components/block-tools/back-compat.js.map +1 -1
  229. package/build-module/components/block-tools/insertion-point.js +54 -16
  230. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  231. package/build-module/components/block-tools/selected-block-popover.js +15 -3
  232. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  233. package/build-module/components/block-vertical-alignment-control/ui.js +1 -1
  234. package/build-module/components/block-vertical-alignment-control/ui.js.map +1 -1
  235. package/build-module/components/border-radius-control/all-input-control.js +2 -1
  236. package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
  237. package/build-module/components/border-radius-control/index.js +2 -1
  238. package/build-module/components/border-radius-control/index.js.map +1 -1
  239. package/build-module/components/border-radius-control/input-controls.js +2 -1
  240. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  241. package/build-module/components/colors-gradients/control.js +2 -2
  242. package/build-module/components/colors-gradients/control.js.map +1 -1
  243. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +3 -3
  244. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  245. package/build-module/components/duotone-control/index.js +1 -1
  246. package/build-module/components/duotone-control/index.js.map +1 -1
  247. package/build-module/components/font-sizes/fluid-utils.js +245 -0
  248. package/build-module/components/font-sizes/fluid-utils.js.map +1 -0
  249. package/build-module/components/font-sizes/index.js +1 -0
  250. package/build-module/components/font-sizes/index.js.map +1 -1
  251. package/build-module/components/font-sizes/with-font-sizes.js +2 -2
  252. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  253. package/build-module/components/iframe/index.js +1 -1
  254. package/build-module/components/iframe/index.js.map +1 -1
  255. package/build-module/components/image-editor/constants.js +1 -1
  256. package/build-module/components/image-editor/constants.js.map +1 -1
  257. package/build-module/components/index.js +0 -1
  258. package/build-module/components/index.js.map +1 -1
  259. package/build-module/components/inner-blocks/index.js +6 -2
  260. package/build-module/components/inner-blocks/index.js.map +1 -1
  261. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  262. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  263. package/build-module/components/inserter/block-patterns-tab.js +148 -81
  264. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  265. package/build-module/components/inserter/hooks/use-insertion-point.js +2 -6
  266. package/build-module/components/inserter/hooks/use-insertion-point.js.map +1 -1
  267. package/build-module/components/inserter/menu.js +10 -3
  268. package/build-module/components/inserter/menu.js.map +1 -1
  269. package/build-module/components/inserter/search-items.js +23 -3
  270. package/build-module/components/inserter/search-items.js.map +1 -1
  271. package/build-module/components/inserter-draggable-blocks/index.js +4 -2
  272. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  273. package/build-module/components/line-height-control/index.js +2 -1
  274. package/build-module/components/line-height-control/index.js.map +1 -1
  275. package/build-module/components/list-view/drop-indicator.js +2 -1
  276. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  277. package/build-module/components/list-view/use-list-view-drop-zone.js +1 -14
  278. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  279. package/build-module/components/media-replace-flow/index.js +1 -1
  280. package/build-module/components/media-replace-flow/index.js.map +1 -1
  281. package/build-module/components/preview-options/index.js +2 -3
  282. package/build-module/components/preview-options/index.js.map +1 -1
  283. package/build-module/components/rich-text/format-toolbar/index.js +1 -1
  284. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  285. package/build-module/components/rich-text/format-toolbar-container.js +1 -1
  286. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  287. package/build-module/components/rich-text/use-paste-handler.js +1 -1
  288. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  289. package/build-module/components/spacing-sizes-control/all-input-control.js +6 -2
  290. package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -1
  291. package/build-module/components/spacing-sizes-control/axial-input-controls.js +6 -2
  292. package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -1
  293. package/build-module/components/spacing-sizes-control/index.js +6 -2
  294. package/build-module/components/spacing-sizes-control/index.js.map +1 -1
  295. package/build-module/components/spacing-sizes-control/input-controls.js +6 -2
  296. package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -1
  297. package/build-module/components/spacing-sizes-control/spacing-input-control.js +44 -8
  298. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  299. package/build-module/components/url-input/index.js +1 -1
  300. package/build-module/components/url-input/index.js.map +1 -1
  301. package/build-module/components/use-block-drop-zone/index.js +98 -58
  302. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  303. package/build-module/components/use-on-block-drop/index.js +12 -12
  304. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  305. package/build-module/components/use-on-block-drop/types.js +2 -0
  306. package/build-module/components/use-on-block-drop/types.js.map +1 -0
  307. package/build-module/hooks/align.js +1 -2
  308. package/build-module/hooks/align.js.map +1 -1
  309. package/build-module/hooks/align.native.js +1 -6
  310. package/build-module/hooks/align.native.js.map +1 -1
  311. package/build-module/hooks/border.js +1 -0
  312. package/build-module/hooks/border.js.map +1 -1
  313. package/build-module/hooks/dimensions.js +32 -4
  314. package/build-module/hooks/dimensions.js.map +1 -1
  315. package/build-module/hooks/font-size.js +60 -1
  316. package/build-module/hooks/font-size.js.map +1 -1
  317. package/build-module/hooks/layout.js +5 -4
  318. package/build-module/hooks/layout.js.map +1 -1
  319. package/build-module/hooks/margin.js +25 -18
  320. package/build-module/hooks/margin.js.map +1 -1
  321. package/build-module/hooks/padding.js +21 -13
  322. package/build-module/hooks/padding.js.map +1 -1
  323. package/build-module/hooks/style.js +124 -3
  324. package/build-module/hooks/style.js.map +1 -1
  325. package/build-module/hooks/use-typography-props.js +17 -4
  326. package/build-module/hooks/use-typography-props.js.map +1 -1
  327. package/build-module/hooks/utils.js +8 -8
  328. package/build-module/hooks/utils.js.map +1 -1
  329. package/build-module/layouts/constrained.js +0 -1
  330. package/build-module/layouts/constrained.js.map +1 -1
  331. package/build-module/layouts/flex.js +1 -1
  332. package/build-module/layouts/flex.js.map +1 -1
  333. package/build-module/store/actions.js +59 -42
  334. package/build-module/store/actions.js.map +1 -1
  335. package/build-module/store/array.js +1 -6
  336. package/build-module/store/array.js.map +1 -1
  337. package/build-module/store/defaults.js +3 -0
  338. package/build-module/store/defaults.js.map +1 -1
  339. package/build-module/store/reducer.js +32 -16
  340. package/build-module/store/reducer.js.map +1 -1
  341. package/build-module/store/selectors.js +47 -30
  342. package/build-module/store/selectors.js.map +1 -1
  343. package/build-module/utils/math.js +12 -0
  344. package/build-module/utils/math.js.map +1 -1
  345. package/build-module/utils/pre-parse-patterns.js +19 -2
  346. package/build-module/utils/pre-parse-patterns.js.map +1 -1
  347. package/build-style/style-rtl.css +292 -206
  348. package/build-style/style.css +288 -202
  349. package/package.json +29 -28
  350. package/src/components/alignment-control/ui.js +1 -1
  351. package/src/components/block-alignment-control/constants.js +1 -1
  352. package/src/components/block-alignment-matrix-control/index.js +1 -1
  353. package/src/components/block-breadcrumb/test/__snapshots__/index.js.snap +13 -11
  354. package/src/components/block-breadcrumb/test/index.js +2 -2
  355. package/src/components/block-compare/index.js +3 -2
  356. package/src/components/block-draggable/draggable-chip.js +4 -2
  357. package/src/components/block-edit/index.js +2 -1
  358. package/src/components/block-inspector/index.js +8 -7
  359. package/src/components/block-list/block-list-compact.native.js +1 -0
  360. package/src/components/block-list/block.js +113 -7
  361. package/src/components/block-list/block.native.js +123 -9
  362. package/src/components/block-list/style.scss +93 -126
  363. package/src/components/block-list/use-in-between-inserter.js +8 -19
  364. package/src/components/block-lock/modal.js +12 -7
  365. package/src/components/block-mover/stories/index.js +1 -1
  366. package/src/components/block-mover/style.scss +35 -1
  367. package/src/components/block-parent-selector/index.js +3 -3
  368. package/src/components/block-patterns-list/index.js +9 -5
  369. package/src/components/block-patterns-list/style.scss +7 -3
  370. package/src/components/block-popover/README.md +8 -0
  371. package/src/components/block-popover/drop-zone.js +63 -0
  372. package/src/components/block-popover/inbetween.js +1 -0
  373. package/src/components/block-popover/index.js +3 -1
  374. package/src/components/block-popover/style.scss +17 -5
  375. package/src/components/block-preview/auto.js +1 -1
  376. package/src/components/block-preview/index.js +15 -11
  377. package/src/components/block-preview/live.js +2 -7
  378. package/src/components/block-preview/test/index.js +1 -7
  379. package/src/components/block-selection-clearer/index.js +7 -2
  380. package/src/components/block-selection-clearer/test/index.js +118 -0
  381. package/src/components/block-settings-menu/block-settings-dropdown.js +29 -18
  382. package/src/components/block-settings-menu/test/block-mode-toggle.js +17 -17
  383. package/src/components/block-styles/index.js +26 -49
  384. package/src/components/block-switcher/index.js +2 -7
  385. package/src/components/block-switcher/preview-block-popover.js +1 -1
  386. package/src/components/block-switcher/test/index.js +2 -2
  387. package/src/components/block-toolbar/index.js +4 -6
  388. package/src/components/block-toolbar/style.scss +38 -14
  389. package/src/components/block-tools/back-compat.js +1 -0
  390. package/src/components/block-tools/insertion-point.js +49 -15
  391. package/src/components/block-tools/selected-block-popover.js +14 -1
  392. package/src/components/block-variation-picker/README.md +1 -1
  393. package/src/components/block-vertical-alignment-control/ui.js +1 -1
  394. package/src/components/border-radius-control/all-input-control.js +1 -0
  395. package/src/components/border-radius-control/index.js +1 -0
  396. package/src/components/border-radius-control/input-controls.js +1 -0
  397. package/src/components/border-radius-control/style.scss +15 -24
  398. package/src/components/button-block-appender/style.scss +4 -2
  399. package/src/components/color-palette/test/__snapshots__/control.js.snap +86 -104
  400. package/src/components/color-palette/test/control.js +11 -15
  401. package/src/components/colors-gradients/control.js +2 -2
  402. package/src/components/colors-gradients/panel-color-gradient-settings.js +3 -4
  403. package/src/components/colors-gradients/test/control.js +49 -77
  404. package/src/components/duotone-control/index.js +1 -1
  405. package/src/components/font-sizes/fluid-utils.js +296 -0
  406. package/src/components/font-sizes/index.js +1 -0
  407. package/src/components/font-sizes/test/fluid-utils.js +168 -0
  408. package/src/components/font-sizes/with-font-sizes.js +2 -3
  409. package/src/components/iframe/index.js +1 -1
  410. package/src/components/image-editor/constants.js +1 -1
  411. package/src/components/image-size-control/test/index.js +47 -60
  412. package/src/components/index.js +0 -1
  413. package/src/components/inner-blocks/index.js +5 -1
  414. package/src/components/inner-blocks/test/index.js +4 -0
  415. package/src/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  416. package/src/components/inserter/block-patterns-tab.js +232 -98
  417. package/src/components/inserter/hooks/use-insertion-point.js +3 -11
  418. package/src/components/inserter/menu.js +15 -2
  419. package/src/components/inserter/search-items.js +23 -3
  420. package/src/components/inserter/style.scss +94 -9
  421. package/src/components/inserter/test/reusable-blocks-tab.js +6 -6
  422. package/src/components/inserter/test/search-items.js +6 -0
  423. package/src/components/inserter-draggable-blocks/index.js +12 -2
  424. package/src/components/inserter-list-item/style.scss +22 -1
  425. package/src/components/letter-spacing-control/README.md +55 -0
  426. package/src/components/line-height-control/index.js +1 -0
  427. package/src/components/link-control/README.md +3 -3
  428. package/src/components/link-control/test/index.js +1 -1
  429. package/src/components/list-view/drop-indicator.js +1 -0
  430. package/src/components/list-view/style.scss +1 -36
  431. package/src/components/list-view/use-list-view-drop-zone.js +4 -18
  432. package/src/components/media-replace-flow/index.js +1 -1
  433. package/src/components/media-replace-flow/test/index.js +69 -51
  434. package/src/components/panel-color-settings/test/index.js +4 -4
  435. package/src/components/preview-options/index.js +2 -2
  436. package/src/components/preview-options/style.scss +1 -1
  437. package/src/components/provider/test/use-block-sync.js +131 -165
  438. package/src/components/responsive-block-control/test/index.js +4 -4
  439. package/src/components/rich-text/format-toolbar/index.js +1 -1
  440. package/src/components/rich-text/format-toolbar-container.js +1 -1
  441. package/src/components/rich-text/use-paste-handler.js +1 -1
  442. package/src/components/spacing-sizes-control/all-input-control.js +4 -0
  443. package/src/components/spacing-sizes-control/axial-input-controls.js +4 -0
  444. package/src/components/spacing-sizes-control/index.js +4 -0
  445. package/src/components/spacing-sizes-control/input-controls.js +4 -0
  446. package/src/components/spacing-sizes-control/spacing-input-control.js +26 -3
  447. package/src/components/spacing-sizes-control/style.scss +27 -19
  448. package/src/components/url-input/index.js +1 -1
  449. package/src/components/use-block-drop-zone/index.js +136 -79
  450. package/src/components/use-block-drop-zone/test/index.js +333 -81
  451. package/src/components/use-on-block-drop/index.js +11 -12
  452. package/src/components/use-on-block-drop/types.ts +1 -0
  453. package/src/hooks/align.js +3 -2
  454. package/src/hooks/align.native.js +5 -8
  455. package/src/hooks/border.js +1 -0
  456. package/src/hooks/dimensions.js +32 -5
  457. package/src/hooks/font-size.js +76 -0
  458. package/src/hooks/layout.js +7 -9
  459. package/src/hooks/margin.js +20 -14
  460. package/src/hooks/padding.js +20 -16
  461. package/src/hooks/style.js +122 -3
  462. package/src/hooks/test/align.js +96 -72
  463. package/src/hooks/test/style.js +206 -1
  464. package/src/hooks/test/use-typography-props.js +22 -0
  465. package/src/hooks/use-typography-props.js +18 -3
  466. package/src/hooks/utils.js +10 -7
  467. package/src/layouts/constrained.js +0 -1
  468. package/src/layouts/flex.js +1 -1
  469. package/src/store/actions.js +24 -12
  470. package/src/store/array.js +1 -6
  471. package/src/store/defaults.js +3 -0
  472. package/src/store/reducer.js +31 -24
  473. package/src/store/selectors.js +28 -21
  474. package/src/store/test/actions.js +0 -9
  475. package/src/store/test/selectors.js +1 -1
  476. package/src/utils/math.js +17 -0
  477. package/src/utils/pre-parse-patterns.js +12 -7
  478. package/build/components/inserter/pattern-panel.js +0 -87
  479. package/build/components/inserter/pattern-panel.js.map +0 -1
  480. package/build-module/components/inserter/pattern-panel.js +0 -74
  481. package/build-module/components/inserter/pattern-panel.js.map +0 -1
  482. package/src/components/inserter/pattern-panel.js +0 -93
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Internal dependencies
3
3
  */
4
- import { getNearestBlockIndex } from '..';
4
+ import { getDropTargetPosition } from '..';
5
5
 
6
6
  const elementData = [
7
7
  {
@@ -31,19 +31,12 @@ const elementData = [
31
31
  },
32
32
  ];
33
33
 
34
- const createMockClassList = ( classes ) => {
35
- return {
36
- contains( textToMatch ) {
37
- return classes.includes( textToMatch );
38
- },
39
- };
40
- };
41
-
42
34
  const mapElements =
43
35
  ( orientation ) =>
44
- ( { top, right, bottom, left }, index ) => {
36
+ ( { top, right, bottom, left, isUnmodifiedDefaultBlock }, index ) => {
45
37
  return {
46
- dataset: { block: index + 1 },
38
+ isUnmodifiedDefaultBlock: !! isUnmodifiedDefaultBlock,
39
+ blockIndex: index,
47
40
  getBoundingClientRect() {
48
41
  return orientation === 'vertical'
49
42
  ? {
@@ -59,27 +52,21 @@ const mapElements =
59
52
  right: bottom,
60
53
  };
61
54
  },
62
- classList: createMockClassList( 'wp-block' ),
63
55
  };
64
56
  };
65
57
 
66
- const verticalElements = elementData.map( mapElements( 'vertical' ) );
58
+ const verticalBlocksData = elementData.map( mapElements( 'vertical' ) );
67
59
  // Flip the elementData to make a horizontal block list.
68
- const horizontalElements = elementData.map( mapElements( 'horizontal' ) );
60
+ const horizontalBlocksData = elementData.map( mapElements( 'horizontal' ) );
69
61
 
70
- describe( 'getNearestBlockIndex', () => {
71
- it( 'returns `undefined` for an empty list of elements', () => {
72
- const emptyElementList = [];
62
+ describe( 'getDropTargetPosition', () => {
63
+ it( 'returns `0` for an empty list of elements', () => {
73
64
  const position = { x: 0, y: 0 };
74
65
  const orientation = 'horizontal';
75
66
 
76
- const result = getNearestBlockIndex(
77
- emptyElementList,
78
- position,
79
- orientation
80
- );
67
+ const result = getDropTargetPosition( [], position, orientation );
81
68
 
82
- expect( result ).toBeUndefined();
69
+ expect( result ).toEqual( [ 0, 'insert' ] );
83
70
  } );
84
71
 
85
72
  describe( 'Vertical block lists', () => {
@@ -88,109 +75,109 @@ describe( 'getNearestBlockIndex', () => {
88
75
  it( 'returns `0` when the position is nearest to the start of the first block', () => {
89
76
  const position = { x: 0, y: 0 };
90
77
 
91
- const result = getNearestBlockIndex(
92
- verticalElements,
78
+ const result = getDropTargetPosition(
79
+ verticalBlocksData,
93
80
  position,
94
81
  orientation
95
82
  );
96
83
 
97
- expect( result ).toBe( 0 );
84
+ expect( result ).toEqual( [ 0, 'insert' ] );
98
85
  } );
99
86
 
100
87
  it( 'returns `1` when the position is nearest to the end of the first block', () => {
101
88
  const position = { x: 0, y: 190 };
102
89
 
103
- const result = getNearestBlockIndex(
104
- verticalElements,
90
+ const result = getDropTargetPosition(
91
+ verticalBlocksData,
105
92
  position,
106
93
  orientation
107
94
  );
108
95
 
109
- expect( result ).toBe( 1 );
96
+ expect( result ).toEqual( [ 1, 'insert' ] );
110
97
  } );
111
98
 
112
99
  it( 'returns `1` when the position is nearest to the start of the second block', () => {
113
100
  const position = { x: 0, y: 210 };
114
101
 
115
- const result = getNearestBlockIndex(
116
- verticalElements,
102
+ const result = getDropTargetPosition(
103
+ verticalBlocksData,
117
104
  position,
118
105
  orientation
119
106
  );
120
107
 
121
- expect( result ).toBe( 1 );
108
+ expect( result ).toEqual( [ 1, 'insert' ] );
122
109
  } );
123
110
 
124
111
  it( 'returns `2` when the position is nearest to the end of the second block', () => {
125
112
  const position = { x: 0, y: 450 };
126
113
 
127
- const result = getNearestBlockIndex(
128
- verticalElements,
114
+ const result = getDropTargetPosition(
115
+ verticalBlocksData,
129
116
  position,
130
117
  orientation
131
118
  );
132
119
 
133
- expect( result ).toBe( 2 );
120
+ expect( result ).toEqual( [ 2, 'insert' ] );
134
121
  } );
135
122
 
136
123
  it( 'returns `2` when the position is nearest to the start of the third block', () => {
137
124
  const position = { x: 0, y: 510 };
138
125
 
139
- const result = getNearestBlockIndex(
140
- verticalElements,
126
+ const result = getDropTargetPosition(
127
+ verticalBlocksData,
141
128
  position,
142
129
  orientation
143
130
  );
144
131
 
145
- expect( result ).toBe( 2 );
132
+ expect( result ).toEqual( [ 2, 'insert' ] );
146
133
  } );
147
134
 
148
135
  it( 'returns `3` when the position is nearest to the end of the third block', () => {
149
136
  const position = { x: 0, y: 880 };
150
137
 
151
- const result = getNearestBlockIndex(
152
- verticalElements,
138
+ const result = getDropTargetPosition(
139
+ verticalBlocksData,
153
140
  position,
154
141
  orientation
155
142
  );
156
143
 
157
- expect( result ).toBe( 3 );
144
+ expect( result ).toEqual( [ 3, 'insert' ] );
158
145
  } );
159
146
 
160
147
  it( 'returns `3` when the position is past the end of the third block', () => {
161
148
  const position = { x: 0, y: 920 };
162
149
 
163
- const result = getNearestBlockIndex(
164
- verticalElements,
150
+ const result = getDropTargetPosition(
151
+ verticalBlocksData,
165
152
  position,
166
153
  orientation
167
154
  );
168
155
 
169
- expect( result ).toBe( 3 );
156
+ expect( result ).toEqual( [ 3, 'insert' ] );
170
157
  } );
171
158
 
172
- it( 'returns `3` when the position is nearest to the start of the fourth block', () => {
159
+ it( 'returns `4` when the position is nearest to the start of the fourth block', () => {
173
160
  const position = { x: 401, y: 0 };
174
161
 
175
- const result = getNearestBlockIndex(
176
- verticalElements,
162
+ const result = getDropTargetPosition(
163
+ verticalBlocksData,
177
164
  position,
178
165
  orientation
179
166
  );
180
167
 
181
- expect( result ).toBe( 3 );
168
+ expect( result ).toEqual( [ 3, 'insert' ] );
182
169
  } );
183
170
 
184
- it( 'returns `4` when the position is nearest to the end of the fourth block', () => {
171
+ it( 'returns `5` when the position is nearest to the end of the fourth block', () => {
185
172
  const position = { x: 401, y: 300 };
186
173
 
187
- const result = getNearestBlockIndex(
188
- verticalElements,
174
+ const result = getDropTargetPosition(
175
+ verticalBlocksData,
189
176
  position,
190
177
  orientation
191
178
  );
192
179
 
193
- expect( result ).toBe( 4 );
180
+ expect( result ).toEqual( [ 4, 'insert' ] );
194
181
  } );
195
182
  } );
196
183
 
@@ -200,109 +187,374 @@ describe( 'getNearestBlockIndex', () => {
200
187
  it( 'returns `0` when the position is nearest to the start of the first block', () => {
201
188
  const position = { x: 0, y: 0 };
202
189
 
203
- const result = getNearestBlockIndex(
204
- horizontalElements,
190
+ const result = getDropTargetPosition(
191
+ horizontalBlocksData,
205
192
  position,
206
193
  orientation
207
194
  );
208
195
 
209
- expect( result ).toBe( 0 );
196
+ expect( result ).toEqual( [ 0, 'insert' ] );
210
197
  } );
211
198
 
212
199
  it( 'returns `1` when the position is nearest to the end of the first block', () => {
213
200
  const position = { x: 190, y: 0 };
214
201
 
215
- const result = getNearestBlockIndex(
216
- horizontalElements,
202
+ const result = getDropTargetPosition(
203
+ horizontalBlocksData,
217
204
  position,
218
205
  orientation
219
206
  );
220
207
 
221
- expect( result ).toBe( 1 );
208
+ expect( result ).toEqual( [ 1, 'insert' ] );
222
209
  } );
223
210
 
224
211
  it( 'returns `1` when the position is nearest to the start of the second block', () => {
225
212
  const position = { x: 210, y: 0 };
226
213
 
227
- const result = getNearestBlockIndex(
228
- horizontalElements,
214
+ const result = getDropTargetPosition(
215
+ horizontalBlocksData,
229
216
  position,
230
217
  orientation
231
218
  );
232
219
 
233
- expect( result ).toBe( 1 );
220
+ expect( result ).toEqual( [ 1, 'insert' ] );
234
221
  } );
235
222
 
236
223
  it( 'returns `2` when the position is nearest to the end of the second block', () => {
237
224
  const position = { x: 450, y: 0 };
238
225
 
239
- const result = getNearestBlockIndex(
240
- horizontalElements,
226
+ const result = getDropTargetPosition(
227
+ horizontalBlocksData,
241
228
  position,
242
229
  orientation
243
230
  );
244
231
 
245
- expect( result ).toBe( 2 );
232
+ expect( result ).toEqual( [ 2, 'insert' ] );
246
233
  } );
247
234
 
248
235
  it( 'returns `2` when the position is nearest to the start of the third block', () => {
249
236
  const position = { x: 510, y: 0 };
250
237
 
251
- const result = getNearestBlockIndex(
252
- horizontalElements,
238
+ const result = getDropTargetPosition(
239
+ horizontalBlocksData,
253
240
  position,
254
241
  orientation
255
242
  );
256
243
 
257
- expect( result ).toBe( 2 );
244
+ expect( result ).toEqual( [ 2, 'insert' ] );
258
245
  } );
259
246
 
260
247
  it( 'returns `3` when the position is nearest to the end of the third block', () => {
261
248
  const position = { x: 880, y: 0 };
262
249
 
263
- const result = getNearestBlockIndex(
264
- horizontalElements,
250
+ const result = getDropTargetPosition(
251
+ horizontalBlocksData,
265
252
  position,
266
253
  orientation
267
254
  );
268
255
 
269
- expect( result ).toBe( 3 );
256
+ expect( result ).toEqual( [ 3, 'insert' ] );
270
257
  } );
271
258
 
272
259
  it( 'returns `3` when the position is past the end of the third block', () => {
273
260
  const position = { x: 920, y: 0 };
274
261
 
275
- const result = getNearestBlockIndex(
276
- horizontalElements,
262
+ const result = getDropTargetPosition(
263
+ horizontalBlocksData,
277
264
  position,
278
265
  orientation
279
266
  );
280
267
 
281
- expect( result ).toBe( 3 );
268
+ expect( result ).toEqual( [ 3, 'insert' ] );
282
269
  } );
283
270
 
284
- it( 'returns `3` when the position is nearest to the start of the fourth block', () => {
271
+ it( 'returns `3` when the position is nearest to the start of the last block', () => {
285
272
  const position = { x: 0, y: 401 };
286
273
 
287
- const result = getNearestBlockIndex(
288
- horizontalElements,
274
+ const result = getDropTargetPosition(
275
+ horizontalBlocksData,
289
276
  position,
290
277
  orientation
291
278
  );
292
279
 
293
- expect( result ).toBe( 3 );
280
+ expect( result ).toEqual( [ 3, 'insert' ] );
294
281
  } );
295
282
 
296
- it( 'returns `4` when the position is nearest to the end of the fourth block', () => {
283
+ it( 'returns `4` when the position is nearest to the end of the last block', () => {
297
284
  const position = { x: 300, y: 401 };
298
285
 
299
- const result = getNearestBlockIndex(
300
- horizontalElements,
286
+ const result = getDropTargetPosition(
287
+ horizontalBlocksData,
301
288
  position,
302
289
  orientation
303
290
  );
304
291
 
305
- expect( result ).toBe( 4 );
292
+ expect( result ).toEqual( [ 4, 'insert' ] );
293
+ } );
294
+ } );
295
+
296
+ describe( 'Unmodified default blocks', () => {
297
+ const orientation = 'vertical';
298
+
299
+ it( 'handles replacement index when only the first block is an unmodified default block', () => {
300
+ const blocksData = [
301
+ {
302
+ left: 0,
303
+ top: 10,
304
+ right: 400,
305
+ bottom: 210,
306
+ isUnmodifiedDefaultBlock: true,
307
+ },
308
+ {
309
+ left: 0,
310
+ top: 220,
311
+ right: 400,
312
+ bottom: 420,
313
+ isUnmodifiedDefaultBlock: false,
314
+ },
315
+ ].map( mapElements( 'vertical' ) );
316
+
317
+ // Dropping above the first block.
318
+ expect(
319
+ getDropTargetPosition( blocksData, { x: 0, y: 0 }, orientation )
320
+ ).toEqual( [ 0, 'replace' ] );
321
+
322
+ // Dropping on the top half of the first block.
323
+ expect(
324
+ getDropTargetPosition(
325
+ blocksData,
326
+ { x: 0, y: 20 },
327
+ orientation
328
+ )
329
+ ).toEqual( [ 0, 'replace' ] );
330
+
331
+ // Dropping on the bottom half of the first block.
332
+ expect(
333
+ getDropTargetPosition(
334
+ blocksData,
335
+ { x: 0, y: 200 },
336
+ orientation
337
+ )
338
+ ).toEqual( [ 0, 'replace' ] );
339
+
340
+ // Dropping slightly after the first block.
341
+ expect(
342
+ getDropTargetPosition(
343
+ blocksData,
344
+ { x: 0, y: 211 },
345
+ orientation
346
+ )
347
+ ).toEqual( [ 0, 'replace' ] );
348
+
349
+ // Dropping slightly above the second block.
350
+ expect(
351
+ getDropTargetPosition(
352
+ blocksData,
353
+ { x: 0, y: 219 },
354
+ orientation
355
+ )
356
+ ).toEqual( [ 0, 'replace' ] );
357
+
358
+ // Dropping on the top half of the second block.
359
+ expect(
360
+ getDropTargetPosition(
361
+ blocksData,
362
+ { x: 0, y: 230 },
363
+ orientation
364
+ )
365
+ ).toEqual( [ 0, 'replace' ] );
366
+
367
+ // Dropping on the bottom half of the second block.
368
+ expect(
369
+ getDropTargetPosition(
370
+ blocksData,
371
+ { x: 0, y: 410 },
372
+ orientation
373
+ )
374
+ ).toEqual( [ 2, 'insert' ] );
375
+
376
+ // Dropping below the second block.
377
+ expect(
378
+ getDropTargetPosition(
379
+ blocksData,
380
+ { x: 0, y: 421 },
381
+ orientation
382
+ )
383
+ ).toEqual( [ 2, 'insert' ] );
384
+ } );
385
+
386
+ it( 'handles replacement index when only the second block is an unmodified default block', () => {
387
+ const blocksData = [
388
+ {
389
+ left: 0,
390
+ top: 10,
391
+ right: 400,
392
+ bottom: 210,
393
+ isUnmodifiedDefaultBlock: false,
394
+ },
395
+ {
396
+ left: 0,
397
+ top: 220,
398
+ right: 400,
399
+ bottom: 420,
400
+ isUnmodifiedDefaultBlock: true,
401
+ },
402
+ ].map( mapElements( 'vertical' ) );
403
+
404
+ // Dropping above the first block.
405
+ expect(
406
+ getDropTargetPosition( blocksData, { x: 0, y: 0 }, orientation )
407
+ ).toEqual( [ 0, 'insert' ] );
408
+
409
+ // Dropping on the top half of the first block.
410
+ expect(
411
+ getDropTargetPosition(
412
+ blocksData,
413
+ { x: 0, y: 20 },
414
+ orientation
415
+ )
416
+ ).toEqual( [ 0, 'insert' ] );
417
+
418
+ // Dropping on the bottom half of the first block.
419
+ expect(
420
+ getDropTargetPosition(
421
+ blocksData,
422
+ { x: 0, y: 200 },
423
+ orientation
424
+ )
425
+ ).toEqual( [ 1, 'replace' ] );
426
+
427
+ // Dropping slightly after the first block.
428
+ expect(
429
+ getDropTargetPosition(
430
+ blocksData,
431
+ { x: 0, y: 211 },
432
+ orientation
433
+ )
434
+ ).toEqual( [ 1, 'replace' ] );
435
+
436
+ // Dropping slightly above the second block.
437
+ expect(
438
+ getDropTargetPosition(
439
+ blocksData,
440
+ { x: 0, y: 219 },
441
+ orientation
442
+ )
443
+ ).toEqual( [ 1, 'replace' ] );
444
+
445
+ // Dropping on the top half of the second block.
446
+ expect(
447
+ getDropTargetPosition(
448
+ blocksData,
449
+ { x: 0, y: 230 },
450
+ orientation
451
+ )
452
+ ).toEqual( [ 1, 'replace' ] );
453
+
454
+ // Dropping on the bottom half of the second block.
455
+ expect(
456
+ getDropTargetPosition(
457
+ blocksData,
458
+ { x: 0, y: 410 },
459
+ orientation
460
+ )
461
+ ).toEqual( [ 1, 'replace' ] );
462
+
463
+ // Dropping below the second block.
464
+ expect(
465
+ getDropTargetPosition(
466
+ blocksData,
467
+ { x: 0, y: 421 },
468
+ orientation
469
+ )
470
+ ).toEqual( [ 1, 'replace' ] );
471
+ } );
472
+
473
+ it( 'returns replacement index when both blocks are unmodified default blocks', () => {
474
+ const blocksData = [
475
+ {
476
+ left: 0,
477
+ top: 10,
478
+ right: 400,
479
+ bottom: 210,
480
+ isUnmodifiedDefaultBlock: true,
481
+ },
482
+ {
483
+ left: 0,
484
+ top: 220,
485
+ right: 400,
486
+ bottom: 420,
487
+ isUnmodifiedDefaultBlock: true,
488
+ },
489
+ ].map( mapElements( 'vertical' ) );
490
+
491
+ // Dropping above the first block.
492
+ expect(
493
+ getDropTargetPosition( blocksData, { x: 0, y: 0 }, orientation )
494
+ ).toEqual( [ 0, 'replace' ] );
495
+
496
+ // Dropping on the top half of the first block.
497
+ expect(
498
+ getDropTargetPosition(
499
+ blocksData,
500
+ { x: 0, y: 20 },
501
+ orientation
502
+ )
503
+ ).toEqual( [ 0, 'replace' ] );
504
+
505
+ // Dropping on the bottom half of the first block.
506
+ expect(
507
+ getDropTargetPosition(
508
+ blocksData,
509
+ { x: 0, y: 200 },
510
+ orientation
511
+ )
512
+ ).toEqual( [ 0, 'replace' ] );
513
+
514
+ // Dropping slightly after the first block.
515
+ expect(
516
+ getDropTargetPosition(
517
+ blocksData,
518
+ { x: 0, y: 211 },
519
+ orientation
520
+ )
521
+ ).toEqual( [ 0, 'replace' ] );
522
+
523
+ // Dropping slightly above the second block.
524
+ expect(
525
+ getDropTargetPosition(
526
+ blocksData,
527
+ { x: 0, y: 219 },
528
+ orientation
529
+ )
530
+ ).toEqual( [ 1, 'replace' ] );
531
+
532
+ // Dropping on the top half of the second block.
533
+ expect(
534
+ getDropTargetPosition(
535
+ blocksData,
536
+ { x: 0, y: 230 },
537
+ orientation
538
+ )
539
+ ).toEqual( [ 1, 'replace' ] );
540
+
541
+ // Dropping on the bottom half of the second block.
542
+ expect(
543
+ getDropTargetPosition(
544
+ blocksData,
545
+ { x: 0, y: 410 },
546
+ orientation
547
+ )
548
+ ).toEqual( [ 1, 'replace' ] );
549
+
550
+ // Dropping below the second block.
551
+ expect(
552
+ getDropTargetPosition(
553
+ blocksData,
554
+ { x: 0, y: 421 },
555
+ orientation
556
+ )
557
+ ).toEqual( [ 1, 'replace' ] );
306
558
  } );
307
559
  } );
308
560
  } );
@@ -17,6 +17,7 @@ import { getFilesFromDataTransfer } from '@wordpress/dom';
17
17
  import { store as blockEditorStore } from '../../store';
18
18
 
19
19
  /** @typedef {import('@wordpress/element').WPSyntheticEvent} WPSyntheticEvent */
20
+ /** @typedef {import('./types').WPDropOperation} WPDropOperation */
20
21
 
21
22
  /**
22
23
  * Retrieve the data for a block drop event.
@@ -197,21 +198,19 @@ export function onHTMLDrop(
197
198
  /**
198
199
  * A React hook for handling block drop events.
199
200
  *
200
- * @typedef {'insert'|'replace'} DropAction The type of action to perform on drop.
201
+ * @param {string} targetRootClientId The root client id where the block(s) will be inserted.
202
+ * @param {number} targetBlockIndex The index where the block(s) will be inserted.
203
+ * @param {Object} options The optional options.
204
+ * @param {WPDropOperation} [options.operation] The type of operation to perform on drop. Could be `insert` or `replace` for now.
201
205
  *
202
- * @param {string} targetRootClientId The root client id where the block(s) will be inserted.
203
- * @param {number} targetBlockIndex The index where the block(s) will be inserted.
204
- * @param {Object} options The optional options.
205
- * @param {DropAction} options.action The type of action to perform on drop. Could be `insert` or `replace` for now.
206
- *
207
- * @return {Object} An object that contains the event handlers `onDrop`, `onFilesDrop` and `onHTMLDrop`.
206
+ * @return {Function} A function to be passed to the onDrop handler.
208
207
  */
209
208
  export default function useOnBlockDrop(
210
209
  targetRootClientId,
211
210
  targetBlockIndex,
212
211
  options = {}
213
212
  ) {
214
- const { action = 'insert' } = options;
213
+ const { operation = 'insert' } = options;
215
214
  const hasUploadPermissions = useSelect(
216
215
  ( select ) => select( blockEditorStore ).getSettings().mediaUpload,
217
216
  []
@@ -235,7 +234,7 @@ export default function useOnBlockDrop(
235
234
 
236
235
  const insertOrReplaceBlocks = useCallback(
237
236
  ( blocks, updateSelection = true, initialPosition = 0 ) => {
238
- if ( action === 'replace' ) {
237
+ if ( operation === 'replace' ) {
239
238
  const clientIds = getBlockOrder( targetRootClientId );
240
239
  const clientId = clientIds[ targetBlockIndex ];
241
240
 
@@ -251,7 +250,7 @@ export default function useOnBlockDrop(
251
250
  }
252
251
  },
253
252
  [
254
- action,
253
+ operation,
255
254
  getBlockOrder,
256
255
  insertBlocks,
257
256
  replaceBlocks,
@@ -262,7 +261,7 @@ export default function useOnBlockDrop(
262
261
 
263
262
  const moveBlocks = useCallback(
264
263
  ( sourceClientIds, sourceRootClientId, insertIndex ) => {
265
- if ( action === 'replace' ) {
264
+ if ( operation === 'replace' ) {
266
265
  const sourceBlocks = getBlocksByClientId( sourceClientIds );
267
266
  const targetBlockClientIds =
268
267
  getBlockOrder( targetRootClientId );
@@ -290,7 +289,7 @@ export default function useOnBlockDrop(
290
289
  }
291
290
  },
292
291
  [
293
- action,
292
+ operation,
294
293
  getBlockOrder,
295
294
  getBlocksByClientId,
296
295
  insertBlocks,
@@ -0,0 +1 @@
1
+ export type WPDropOperation = 'insert' | 'replace';
@@ -2,7 +2,6 @@
2
2
  * External dependencies
3
3
  */
4
4
  import classnames from 'classnames';
5
- import { without } from 'lodash';
6
5
 
7
6
  /**
8
7
  * WordPress dependencies
@@ -74,7 +73,9 @@ export function getValidAlignments(
74
73
  ! hasWideEnabled ||
75
74
  ( blockAlign === true && ! hasWideBlockSupport )
76
75
  ) {
77
- return without( validAlignments, ...WIDE_ALIGNMENTS );
76
+ return validAlignments.filter(
77
+ ( alignment ) => ! WIDE_ALIGNMENTS.includes( alignment )
78
+ );
78
79
  }
79
80
 
80
81
  return validAlignments;