@wordpress/block-editor 14.3.3 → 14.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 (418) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +46 -0
  3. package/build/autocompleters/link.js +2 -1
  4. package/build/autocompleters/link.js.map +1 -1
  5. package/build/components/block-actions/index.js +1 -13
  6. package/build/components/block-actions/index.js.map +1 -1
  7. package/build/components/block-inspector/index.js +56 -75
  8. package/build/components/block-inspector/index.js.map +1 -1
  9. package/build/components/block-list/block.js +5 -19
  10. package/build/components/block-list/block.js.map +1 -1
  11. package/build/components/block-list/index.js +5 -8
  12. package/build/components/block-list/index.js.map +1 -1
  13. package/build/components/block-list/use-block-props/index.js +3 -11
  14. package/build/components/block-list/use-block-props/index.js.map +1 -1
  15. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js +9 -12
  16. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +1 -1
  17. package/build/components/block-list/use-in-between-inserter.js +5 -3
  18. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  19. package/build/components/block-list/zoom-out-separator.js +14 -6
  20. package/build/components/block-list/zoom-out-separator.js.map +1 -1
  21. package/build/components/block-navigation/dropdown.js +2 -4
  22. package/build/components/block-navigation/dropdown.js.map +1 -1
  23. package/build/components/block-parent-selector/index.js +13 -10
  24. package/build/components/block-parent-selector/index.js.map +1 -1
  25. package/build/components/block-pattern-setup/setup-toolbar.js +10 -20
  26. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  27. package/build/components/block-patterns-paging/index.js +11 -13
  28. package/build/components/block-patterns-paging/index.js.map +1 -1
  29. package/build/components/block-quick-navigation/index.js +2 -4
  30. package/build/components/block-quick-navigation/index.js.map +1 -1
  31. package/build/components/block-settings-menu/block-settings-dropdown.js +79 -76
  32. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  33. package/build/components/block-settings-menu-controls/index.js +1 -6
  34. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  35. package/build/components/block-switcher/index.js +17 -14
  36. package/build/components/block-switcher/index.js.map +1 -1
  37. package/build/components/block-toolbar/index.js +16 -19
  38. package/build/components/block-toolbar/index.js.map +1 -1
  39. package/build/components/block-toolbar/use-has-block-toolbar.js +3 -5
  40. package/build/components/block-toolbar/use-has-block-toolbar.js.map +1 -1
  41. package/build/components/block-tools/index.js +8 -11
  42. package/build/components/block-tools/index.js.map +1 -1
  43. package/build/components/block-tools/insertion-point.js +1 -4
  44. package/build/components/block-tools/insertion-point.js.map +1 -1
  45. package/build/components/block-tools/use-show-block-tools.js +2 -5
  46. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  47. package/build/components/block-tools/zoom-out-mode-inserter-button.js +1 -12
  48. package/build/components/block-tools/zoom-out-mode-inserter-button.js.map +1 -1
  49. package/build/components/block-tools/zoom-out-mode-inserters.js +14 -17
  50. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  51. package/build/components/block-tools/zoom-out-toolbar.js +2 -12
  52. package/build/components/block-tools/zoom-out-toolbar.js.map +1 -1
  53. package/build/components/block-variation-picker/index.js +2 -4
  54. package/build/components/block-variation-picker/index.js.map +1 -1
  55. package/build/components/block-variation-transforms/index.js +3 -4
  56. package/build/components/block-variation-transforms/index.js.map +1 -1
  57. package/build/components/button-block-appender/index.js +2 -4
  58. package/build/components/button-block-appender/index.js.map +1 -1
  59. package/build/components/colors-gradients/dropdown.js +2 -4
  60. package/build/components/colors-gradients/dropdown.js.map +1 -1
  61. package/build/components/global-styles/border-panel.js +1 -1
  62. package/build/components/global-styles/border-panel.js.map +1 -1
  63. package/build/components/global-styles/color-panel.js +2 -4
  64. package/build/components/global-styles/color-panel.js.map +1 -1
  65. package/build/components/global-styles/dimensions-panel.js +3 -3
  66. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  67. package/build/components/global-styles/filters-panel.js +2 -4
  68. package/build/components/global-styles/filters-panel.js.map +1 -1
  69. package/build/components/global-styles/shadow-panel-components.js +24 -29
  70. package/build/components/global-styles/shadow-panel-components.js.map +1 -1
  71. package/build/components/inner-blocks/index.js +1 -9
  72. package/build/components/inner-blocks/index.js.map +1 -1
  73. package/build/components/inserter/block-types-tab.js +1 -1
  74. package/build/components/inserter/block-types-tab.js.map +1 -1
  75. package/build/components/inserter/hooks/use-block-types-state.js +24 -5
  76. package/build/components/inserter/hooks/use-block-types-state.js.map +1 -1
  77. package/build/components/inserter/hooks/use-insertion-point.js +22 -12
  78. package/build/components/inserter/hooks/use-insertion-point.js.map +1 -1
  79. package/build/components/inserter/hooks/use-patterns-state.js +23 -10
  80. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  81. package/build/components/inserter/media-tab/media-preview.js +35 -13
  82. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  83. package/build/components/inserter/menu.js +2 -2
  84. package/build/components/inserter/menu.js.map +1 -1
  85. package/build/components/inserter/mobile-tab-navigation.js +5 -5
  86. package/build/components/inserter/mobile-tab-navigation.js.map +1 -1
  87. package/build/components/inserter/quick-inserter.js +4 -4
  88. package/build/components/inserter/quick-inserter.js.map +1 -1
  89. package/build/components/inspector-controls-tabs/index.js +11 -8
  90. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  91. package/build/components/inspector-popover-header/index.js +4 -8
  92. package/build/components/inspector-popover-header/index.js.map +1 -1
  93. package/build/components/link-control/index.js +5 -10
  94. package/build/components/link-control/index.js.map +1 -1
  95. package/build/components/link-control/settings-drawer.js +2 -4
  96. package/build/components/link-control/settings-drawer.js.map +1 -1
  97. package/build/components/list-view/block-contents.js +1 -25
  98. package/build/components/list-view/block-contents.js.map +1 -1
  99. package/build/components/list-view/block-select-button.js +1 -4
  100. package/build/components/list-view/block-select-button.js.map +1 -1
  101. package/build/components/media-placeholder/index.js +29 -43
  102. package/build/components/media-placeholder/index.js.map +1 -1
  103. package/build/components/rich-text/index.js +4 -8
  104. package/build/components/rich-text/index.js.map +1 -1
  105. package/build/components/skip-to-selected-block/index.js +2 -4
  106. package/build/components/skip-to-selected-block/index.js.map +1 -1
  107. package/build/components/tool-selector/index.js +13 -12
  108. package/build/components/tool-selector/index.js.map +1 -1
  109. package/build/components/url-input/button.js +14 -16
  110. package/build/components/url-input/button.js.map +1 -1
  111. package/build/components/url-input/index.js +2 -4
  112. package/build/components/url-input/index.js.map +1 -1
  113. package/build/components/use-block-commands/index.js +0 -61
  114. package/build/components/use-block-commands/index.js.map +1 -1
  115. package/build/components/writing-flow/use-tab-nav.js +2 -25
  116. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  117. package/build/hooks/block-bindings.js +6 -13
  118. package/build/hooks/block-bindings.js.map +1 -1
  119. package/build/hooks/duotone.js +4 -1
  120. package/build/hooks/duotone.js.map +1 -1
  121. package/build/hooks/layout-child.js +3 -1
  122. package/build/hooks/layout-child.js.map +1 -1
  123. package/build/hooks/position.js +3 -2
  124. package/build/hooks/position.js.map +1 -1
  125. package/build/hooks/use-bindings-attributes.js +5 -4
  126. package/build/hooks/use-bindings-attributes.js.map +1 -1
  127. package/build/layouts/flex.js +6 -38
  128. package/build/layouts/flex.js.map +1 -1
  129. package/build/private-apis.js +0 -2
  130. package/build/private-apis.js.map +1 -1
  131. package/build/store/actions.js +13 -14
  132. package/build/store/actions.js.map +1 -1
  133. package/build/store/private-actions.js +15 -0
  134. package/build/store/private-actions.js.map +1 -1
  135. package/build/store/private-selectors.js +104 -7
  136. package/build/store/private-selectors.js.map +1 -1
  137. package/build/store/reducer.js +22 -26
  138. package/build/store/reducer.js.map +1 -1
  139. package/build/store/selectors.js +127 -56
  140. package/build/store/selectors.js.map +1 -1
  141. package/build/store/utils.js +4 -3
  142. package/build/store/utils.js.map +1 -1
  143. package/build/utils/block-bindings.js +50 -0
  144. package/build/utils/block-bindings.js.map +1 -1
  145. package/build/utils/index.js +7 -0
  146. package/build/utils/index.js.map +1 -1
  147. package/build-module/autocompleters/link.js +2 -1
  148. package/build-module/autocompleters/link.js.map +1 -1
  149. package/build-module/components/block-actions/index.js +1 -13
  150. package/build-module/components/block-actions/index.js.map +1 -1
  151. package/build-module/components/block-inspector/index.js +57 -76
  152. package/build-module/components/block-inspector/index.js.map +1 -1
  153. package/build-module/components/block-list/block.js +5 -19
  154. package/build-module/components/block-list/block.js.map +1 -1
  155. package/build-module/components/block-list/index.js +5 -8
  156. package/build-module/components/block-list/index.js.map +1 -1
  157. package/build-module/components/block-list/use-block-props/index.js +3 -11
  158. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  159. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js +9 -12
  160. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +1 -1
  161. package/build-module/components/block-list/use-in-between-inserter.js +5 -3
  162. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  163. package/build-module/components/block-list/zoom-out-separator.js +14 -6
  164. package/build-module/components/block-list/zoom-out-separator.js.map +1 -1
  165. package/build-module/components/block-navigation/dropdown.js +2 -4
  166. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  167. package/build-module/components/block-parent-selector/index.js +13 -10
  168. package/build-module/components/block-parent-selector/index.js.map +1 -1
  169. package/build-module/components/block-pattern-setup/setup-toolbar.js +10 -20
  170. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  171. package/build-module/components/block-patterns-paging/index.js +11 -13
  172. package/build-module/components/block-patterns-paging/index.js.map +1 -1
  173. package/build-module/components/block-quick-navigation/index.js +2 -4
  174. package/build-module/components/block-quick-navigation/index.js.map +1 -1
  175. package/build-module/components/block-settings-menu/block-settings-dropdown.js +79 -76
  176. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  177. package/build-module/components/block-settings-menu-controls/index.js +2 -7
  178. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  179. package/build-module/components/block-switcher/index.js +17 -14
  180. package/build-module/components/block-switcher/index.js.map +1 -1
  181. package/build-module/components/block-toolbar/index.js +17 -20
  182. package/build-module/components/block-toolbar/index.js.map +1 -1
  183. package/build-module/components/block-toolbar/use-has-block-toolbar.js +3 -5
  184. package/build-module/components/block-toolbar/use-has-block-toolbar.js.map +1 -1
  185. package/build-module/components/block-tools/index.js +8 -11
  186. package/build-module/components/block-tools/index.js.map +1 -1
  187. package/build-module/components/block-tools/insertion-point.js +1 -4
  188. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  189. package/build-module/components/block-tools/use-show-block-tools.js +2 -5
  190. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  191. package/build-module/components/block-tools/zoom-out-mode-inserter-button.js +1 -12
  192. package/build-module/components/block-tools/zoom-out-mode-inserter-button.js.map +1 -1
  193. package/build-module/components/block-tools/zoom-out-mode-inserters.js +14 -17
  194. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  195. package/build-module/components/block-tools/zoom-out-toolbar.js +2 -12
  196. package/build-module/components/block-tools/zoom-out-toolbar.js.map +1 -1
  197. package/build-module/components/block-variation-picker/index.js +2 -4
  198. package/build-module/components/block-variation-picker/index.js.map +1 -1
  199. package/build-module/components/block-variation-transforms/index.js +3 -4
  200. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  201. package/build-module/components/button-block-appender/index.js +2 -4
  202. package/build-module/components/button-block-appender/index.js.map +1 -1
  203. package/build-module/components/colors-gradients/dropdown.js +2 -4
  204. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  205. package/build-module/components/global-styles/border-panel.js +1 -1
  206. package/build-module/components/global-styles/border-panel.js.map +1 -1
  207. package/build-module/components/global-styles/color-panel.js +2 -4
  208. package/build-module/components/global-styles/color-panel.js.map +1 -1
  209. package/build-module/components/global-styles/dimensions-panel.js +1 -1
  210. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  211. package/build-module/components/global-styles/filters-panel.js +2 -4
  212. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  213. package/build-module/components/global-styles/shadow-panel-components.js +25 -30
  214. package/build-module/components/global-styles/shadow-panel-components.js.map +1 -1
  215. package/build-module/components/inner-blocks/index.js +1 -9
  216. package/build-module/components/inner-blocks/index.js.map +1 -1
  217. package/build-module/components/inserter/block-types-tab.js +1 -1
  218. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  219. package/build-module/components/inserter/hooks/use-block-types-state.js +27 -8
  220. package/build-module/components/inserter/hooks/use-block-types-state.js.map +1 -1
  221. package/build-module/components/inserter/hooks/use-insertion-point.js +22 -12
  222. package/build-module/components/inserter/hooks/use-insertion-point.js.map +1 -1
  223. package/build-module/components/inserter/hooks/use-patterns-state.js +23 -10
  224. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  225. package/build-module/components/inserter/media-tab/media-preview.js +35 -13
  226. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  227. package/build-module/components/inserter/menu.js +2 -2
  228. package/build-module/components/inserter/menu.js.map +1 -1
  229. package/build-module/components/inserter/mobile-tab-navigation.js +6 -6
  230. package/build-module/components/inserter/mobile-tab-navigation.js.map +1 -1
  231. package/build-module/components/inserter/quick-inserter.js +4 -4
  232. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  233. package/build-module/components/inspector-controls-tabs/index.js +12 -9
  234. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  235. package/build-module/components/inspector-popover-header/index.js +4 -8
  236. package/build-module/components/inspector-popover-header/index.js.map +1 -1
  237. package/build-module/components/link-control/index.js +5 -10
  238. package/build-module/components/link-control/index.js.map +1 -1
  239. package/build-module/components/link-control/settings-drawer.js +2 -4
  240. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  241. package/build-module/components/list-view/block-contents.js +1 -25
  242. package/build-module/components/list-view/block-contents.js.map +1 -1
  243. package/build-module/components/list-view/block-select-button.js +2 -5
  244. package/build-module/components/list-view/block-select-button.js.map +1 -1
  245. package/build-module/components/media-placeholder/index.js +30 -44
  246. package/build-module/components/media-placeholder/index.js.map +1 -1
  247. package/build-module/components/rich-text/index.js +4 -8
  248. package/build-module/components/rich-text/index.js.map +1 -1
  249. package/build-module/components/skip-to-selected-block/index.js +2 -4
  250. package/build-module/components/skip-to-selected-block/index.js.map +1 -1
  251. package/build-module/components/tool-selector/index.js +13 -12
  252. package/build-module/components/tool-selector/index.js.map +1 -1
  253. package/build-module/components/url-input/button.js +15 -17
  254. package/build-module/components/url-input/button.js.map +1 -1
  255. package/build-module/components/url-input/index.js +2 -4
  256. package/build-module/components/url-input/index.js.map +1 -1
  257. package/build-module/components/use-block-commands/index.js +1 -62
  258. package/build-module/components/use-block-commands/index.js.map +1 -1
  259. package/build-module/components/writing-flow/use-tab-nav.js +3 -26
  260. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  261. package/build-module/hooks/block-bindings.js +6 -13
  262. package/build-module/hooks/block-bindings.js.map +1 -1
  263. package/build-module/hooks/duotone.js +4 -1
  264. package/build-module/hooks/duotone.js.map +1 -1
  265. package/build-module/hooks/layout-child.js +4 -1
  266. package/build-module/hooks/layout-child.js.map +1 -1
  267. package/build-module/hooks/position.js +4 -1
  268. package/build-module/hooks/position.js.map +1 -1
  269. package/build-module/hooks/use-bindings-attributes.js +5 -4
  270. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  271. package/build-module/layouts/flex.js +7 -39
  272. package/build-module/layouts/flex.js.map +1 -1
  273. package/build-module/private-apis.js +0 -2
  274. package/build-module/private-apis.js.map +1 -1
  275. package/build-module/store/actions.js +12 -12
  276. package/build-module/store/actions.js.map +1 -1
  277. package/build-module/store/private-actions.js +14 -0
  278. package/build-module/store/private-actions.js.map +1 -1
  279. package/build-module/store/private-selectors.js +98 -7
  280. package/build-module/store/private-selectors.js.map +1 -1
  281. package/build-module/store/reducer.js +21 -25
  282. package/build-module/store/reducer.js.map +1 -1
  283. package/build-module/store/selectors.js +129 -58
  284. package/build-module/store/selectors.js.map +1 -1
  285. package/build-module/store/utils.js +3 -2
  286. package/build-module/store/utils.js.map +1 -1
  287. package/build-module/utils/block-bindings.js +50 -0
  288. package/build-module/utils/block-bindings.js.map +1 -1
  289. package/build-module/utils/index.js +1 -0
  290. package/build-module/utils/index.js.map +1 -1
  291. package/build-style/content-rtl.css +16 -70
  292. package/build-style/content.css +16 -70
  293. package/build-style/default-editor-styles-rtl.css +10 -1
  294. package/build-style/default-editor-styles.css +10 -1
  295. package/build-style/style-rtl.css +51 -149
  296. package/build-style/style.css +51 -149
  297. package/package.json +32 -32
  298. package/src/autocompleters/link.js +2 -1
  299. package/src/components/block-actions/index.js +1 -13
  300. package/src/components/block-draggable/style.scss +2 -2
  301. package/src/components/block-inspector/index.js +79 -95
  302. package/src/components/block-inspector/style.scss +2 -0
  303. package/src/components/block-list/block.js +7 -28
  304. package/src/components/block-list/content.scss +1 -61
  305. package/src/components/block-list/index.js +21 -29
  306. package/src/components/block-list/use-block-props/index.js +3 -10
  307. package/src/components/block-list/use-block-props/use-zoom-out-mode-exit.js +19 -11
  308. package/src/components/block-list/use-in-between-inserter.js +5 -2
  309. package/src/components/block-list/zoom-out-separator.js +24 -8
  310. package/src/components/block-navigation/dropdown.js +1 -2
  311. package/src/components/block-parent-selector/index.js +13 -10
  312. package/src/components/block-pattern-setup/setup-toolbar.js +5 -10
  313. package/src/components/block-patterns-paging/index.js +8 -7
  314. package/src/components/block-patterns-paging/style.scss +10 -27
  315. package/src/components/block-quick-navigation/index.js +1 -2
  316. package/src/components/block-settings-menu/block-settings-dropdown.js +120 -106
  317. package/src/components/block-settings-menu-controls/index.js +0 -15
  318. package/src/components/block-switcher/index.js +37 -30
  319. package/src/components/block-toolbar/index.js +22 -34
  320. package/src/components/block-toolbar/style.scss +10 -1
  321. package/src/components/block-toolbar/use-has-block-toolbar.js +19 -31
  322. package/src/components/block-tools/index.js +7 -16
  323. package/src/components/block-tools/insertion-point.js +1 -4
  324. package/src/components/block-tools/style.scss +3 -88
  325. package/src/components/block-tools/use-show-block-tools.js +2 -12
  326. package/src/components/block-tools/zoom-out-mode-inserter-button.js +2 -17
  327. package/src/components/block-tools/zoom-out-mode-inserters.js +11 -19
  328. package/src/components/block-tools/zoom-out-toolbar.js +2 -13
  329. package/src/components/block-variation-picker/index.js +1 -2
  330. package/src/components/block-variation-transforms/index.js +2 -2
  331. package/src/components/button-block-appender/content.scss +0 -5
  332. package/src/components/button-block-appender/index.js +1 -2
  333. package/src/components/colors-gradients/dropdown.js +1 -5
  334. package/src/components/font-family/README.md +5 -1
  335. package/src/components/global-styles/border-panel.js +1 -1
  336. package/src/components/global-styles/color-panel.js +1 -5
  337. package/src/components/global-styles/dimensions-panel.js +1 -1
  338. package/src/components/global-styles/filters-panel.js +1 -2
  339. package/src/components/global-styles/shadow-panel-components.js +28 -33
  340. package/src/components/global-styles/style.scss +5 -0
  341. package/src/components/inner-blocks/index.js +1 -16
  342. package/src/components/inserter/block-types-tab.js +1 -1
  343. package/src/components/inserter/hooks/use-block-types-state.js +34 -14
  344. package/src/components/inserter/hooks/use-insertion-point.js +35 -13
  345. package/src/components/inserter/hooks/use-patterns-state.js +46 -9
  346. package/src/components/inserter/media-tab/media-preview.js +38 -12
  347. package/src/components/inserter/menu.js +2 -2
  348. package/src/components/inserter/mobile-tab-navigation.js +10 -13
  349. package/src/components/inserter/quick-inserter.js +5 -4
  350. package/src/components/inserter/style.scss +0 -28
  351. package/src/components/inspector-controls-tabs/index.js +21 -20
  352. package/src/components/inspector-controls-tabs/style.scss +2 -6
  353. package/src/components/inspector-popover-header/index.js +2 -4
  354. package/src/components/inspector-popover-header/style.scss +0 -13
  355. package/src/components/link-control/index.js +2 -5
  356. package/src/components/link-control/settings-drawer.js +1 -2
  357. package/src/components/list-view/block-contents.js +1 -28
  358. package/src/components/list-view/block-select-button.js +2 -5
  359. package/src/components/list-view/style.scss +18 -14
  360. package/src/components/media-placeholder/content.scss +3 -19
  361. package/src/components/media-placeholder/index.js +23 -29
  362. package/src/components/rich-text/index.js +4 -13
  363. package/src/components/skip-to-selected-block/index.js +1 -2
  364. package/src/components/skip-to-selected-block/style.scss +0 -9
  365. package/src/components/tool-selector/index.js +14 -9
  366. package/src/components/tool-selector/style.scss +5 -0
  367. package/src/components/url-input/button.js +16 -12
  368. package/src/components/url-input/index.js +1 -2
  369. package/src/components/url-input/style.scss +0 -6
  370. package/src/components/use-block-commands/index.js +0 -58
  371. package/src/components/writing-flow/use-tab-nav.js +4 -36
  372. package/src/content.scss +0 -1
  373. package/src/hooks/block-bindings.js +9 -10
  374. package/src/hooks/duotone.js +4 -1
  375. package/src/hooks/layout-child.js +4 -1
  376. package/src/hooks/position.js +4 -1
  377. package/src/hooks/use-bindings-attributes.js +66 -63
  378. package/src/layouts/flex.js +10 -53
  379. package/src/private-apis.js +0 -2
  380. package/src/store/actions.js +14 -13
  381. package/src/store/private-actions.js +14 -0
  382. package/src/store/private-selectors.js +120 -16
  383. package/src/store/reducer.js +22 -28
  384. package/src/store/selectors.js +203 -114
  385. package/src/store/test/private-actions.js +15 -0
  386. package/src/store/test/private-selectors.js +34 -0
  387. package/src/store/test/reducer.js +40 -4
  388. package/src/store/test/selectors.js +183 -20
  389. package/src/store/utils.js +4 -2
  390. package/src/utils/block-bindings.js +49 -0
  391. package/src/utils/index.js +1 -0
  392. package/build/components/block-controls/use-has-block-controls.js +0 -43
  393. package/build/components/block-controls/use-has-block-controls.js.map +0 -1
  394. package/build/components/block-list/use-block-props/use-nav-mode-exit.js +0 -54
  395. package/build/components/block-list/use-block-props/use-nav-mode-exit.js.map +0 -1
  396. package/build/components/block-tools/block-selection-button.js +0 -259
  397. package/build/components/block-tools/block-selection-button.js.map +0 -1
  398. package/build/components/block-tools/block-toolbar-breadcrumb.js +0 -57
  399. package/build/components/block-tools/block-toolbar-breadcrumb.js.map +0 -1
  400. package/build/components/inserter/tabs.js +0 -78
  401. package/build/components/inserter/tabs.js.map +0 -1
  402. package/build-module/components/block-controls/use-has-block-controls.js +0 -34
  403. package/build-module/components/block-controls/use-has-block-controls.js.map +0 -1
  404. package/build-module/components/block-list/use-block-props/use-nav-mode-exit.js +0 -48
  405. package/build-module/components/block-list/use-block-props/use-nav-mode-exit.js.map +0 -1
  406. package/build-module/components/block-tools/block-selection-button.js +0 -254
  407. package/build-module/components/block-tools/block-selection-button.js.map +0 -1
  408. package/build-module/components/block-tools/block-toolbar-breadcrumb.js +0 -49
  409. package/build-module/components/block-tools/block-toolbar-breadcrumb.js.map +0 -1
  410. package/build-module/components/inserter/tabs.js +0 -72
  411. package/build-module/components/inserter/tabs.js.map +0 -1
  412. package/src/components/block-controls/use-has-block-controls.js +0 -35
  413. package/src/components/block-list/use-block-props/use-nav-mode-exit.js +0 -46
  414. package/src/components/block-tools/block-selection-button.js +0 -302
  415. package/src/components/block-tools/block-toolbar-breadcrumb.js +0 -51
  416. package/src/components/inner-blocks/content.scss +0 -13
  417. package/src/components/inserter/tabs.js +0 -78
  418. package/src/components/inserter/test/block-types-tab.native.js +0 -67
@@ -21,7 +21,7 @@ import { createSelector, createRegistrySelector } from '@wordpress/data';
21
21
  * Internal dependencies
22
22
  */
23
23
  import {
24
- withRootClientIdOptionKey,
24
+ isFiltered,
25
25
  checkAllowListRecursive,
26
26
  checkAllowList,
27
27
  getAllPatternsDependants,
@@ -38,6 +38,8 @@ import {
38
38
  getTemporarilyEditingAsBlocks,
39
39
  getTemporarilyEditingFocusModeToRevert,
40
40
  getSectionRootClientId,
41
+ isSectionBlock,
42
+ getParentSectionBlock,
41
43
  } from './private-selectors';
42
44
 
43
45
  /**
@@ -78,7 +80,9 @@ const EMPTY_ARRAY = [];
78
80
  */
79
81
  const EMPTY_SET = new Set();
80
82
 
81
- const EMPTY_OBJECT = {};
83
+ const DEFAULT_INSERTER_OPTIONS = {
84
+ [ isFiltered ]: true,
85
+ };
82
86
 
83
87
  /**
84
88
  * Returns a block's name given its client ID, or null if no block exists with
@@ -1450,8 +1454,7 @@ export function isCaretWithinFormattedText() {
1450
1454
  }
1451
1455
 
1452
1456
  /**
1453
- * Returns the insertion point, the index at which the new inserted block would
1454
- * be placed. Defaults to the last index.
1457
+ * Returns the location of the insertion cue. Defaults to the last index.
1455
1458
  *
1456
1459
  * @param {Object} state Editor state.
1457
1460
  *
@@ -1462,11 +1465,11 @@ export const getBlockInsertionPoint = createSelector(
1462
1465
  let rootClientId, index;
1463
1466
 
1464
1467
  const {
1465
- insertionPoint,
1468
+ insertionCue,
1466
1469
  selection: { selectionEnd },
1467
1470
  } = state;
1468
- if ( insertionPoint !== null ) {
1469
- return insertionPoint;
1471
+ if ( insertionCue !== null ) {
1472
+ return insertionCue;
1470
1473
  }
1471
1474
 
1472
1475
  const { clientId } = selectionEnd;
@@ -1481,7 +1484,7 @@ export const getBlockInsertionPoint = createSelector(
1481
1484
  return { rootClientId, index };
1482
1485
  },
1483
1486
  ( state ) => [
1484
- state.insertionPoint,
1487
+ state.insertionCue,
1485
1488
  state.selection.selectionEnd.clientId,
1486
1489
  state.blocks.parents,
1487
1490
  state.blocks.order,
@@ -1489,14 +1492,14 @@ export const getBlockInsertionPoint = createSelector(
1489
1492
  );
1490
1493
 
1491
1494
  /**
1492
- * Returns true if we should show the block insertion point.
1495
+ * Returns true if the block insertion point is visible.
1493
1496
  *
1494
1497
  * @param {Object} state Global application state.
1495
1498
  *
1496
1499
  * @return {?boolean} Whether the insertion point is visible or not.
1497
1500
  */
1498
1501
  export function isBlockInsertionPointVisible( state ) {
1499
- return state.insertionPoint !== null;
1502
+ return state.insertionCue !== null;
1500
1503
  }
1501
1504
 
1502
1505
  /**
@@ -1537,6 +1540,59 @@ export function getTemplateLock( state, rootClientId ) {
1537
1540
  return getBlockListSettings( state, rootClientId )?.templateLock ?? false;
1538
1541
  }
1539
1542
 
1543
+ /**
1544
+ * Determines if the given block type is visible in the inserter.
1545
+ * Note that this is different than whether a block is allowed to be inserted.
1546
+ * In some cases, the block is not allowed in a given position but
1547
+ * it should still be visible in the inserter to be able to add it
1548
+ * to a different position.
1549
+ *
1550
+ * @param {Object} state Editor state.
1551
+ * @param {string|Object} blockNameOrType The block type object, e.g., the response
1552
+ * from the block directory; or a string name of
1553
+ * an installed block type, e.g.' core/paragraph'.
1554
+ *
1555
+ * @return {boolean} Whether the given block type is allowed to be inserted.
1556
+ */
1557
+ const isBlockVisibleInTheInserter = ( state, blockNameOrType ) => {
1558
+ let blockType;
1559
+ let blockName;
1560
+ if ( blockNameOrType && 'object' === typeof blockNameOrType ) {
1561
+ blockType = blockNameOrType;
1562
+ blockName = blockNameOrType.name;
1563
+ } else {
1564
+ blockType = getBlockType( blockNameOrType );
1565
+ blockName = blockNameOrType;
1566
+ }
1567
+ if ( ! blockType ) {
1568
+ return false;
1569
+ }
1570
+
1571
+ const { allowedBlockTypes } = getSettings( state );
1572
+
1573
+ const isBlockAllowedInEditor = checkAllowList(
1574
+ allowedBlockTypes,
1575
+ blockName,
1576
+ true
1577
+ );
1578
+ if ( ! isBlockAllowedInEditor ) {
1579
+ return false;
1580
+ }
1581
+
1582
+ // If parent blocks are not visible, child blocks should be hidden too.
1583
+ if ( !! blockType.parent?.length ) {
1584
+ return blockType.parent.some(
1585
+ ( name ) =>
1586
+ isBlockVisibleInTheInserter( state, name ) ||
1587
+ // Exception for blocks with post-content parent,
1588
+ // the root level is often consider as "core/post-content".
1589
+ // This exception should only apply to the post editor ideally though.
1590
+ name === 'core/post-content'
1591
+ );
1592
+ }
1593
+ return true;
1594
+ };
1595
+
1540
1596
  /**
1541
1597
  * Determines if the given block type is allowed to be inserted into the block list.
1542
1598
  * This function is not exported and not memoized because using a memoized selector
@@ -1555,6 +1611,10 @@ const canInsertBlockTypeUnmemoized = (
1555
1611
  blockName,
1556
1612
  rootClientId = null
1557
1613
  ) => {
1614
+ if ( ! isBlockVisibleInTheInserter( state, blockName ) ) {
1615
+ return false;
1616
+ }
1617
+
1558
1618
  let blockType;
1559
1619
  if ( blockName && 'object' === typeof blockName ) {
1560
1620
  blockType = blockName;
@@ -1562,23 +1622,14 @@ const canInsertBlockTypeUnmemoized = (
1562
1622
  } else {
1563
1623
  blockType = getBlockType( blockName );
1564
1624
  }
1565
- if ( ! blockType ) {
1566
- return false;
1567
- }
1568
-
1569
- const { allowedBlockTypes } = getSettings( state );
1570
1625
 
1571
- const isBlockAllowedInEditor = checkAllowList(
1572
- allowedBlockTypes,
1573
- blockName,
1574
- true
1575
- );
1576
- if ( ! isBlockAllowedInEditor ) {
1626
+ const isLocked = !! getTemplateLock( state, rootClientId );
1627
+ if ( isLocked ) {
1577
1628
  return false;
1578
1629
  }
1579
1630
 
1580
- const isLocked = !! getTemplateLock( state, rootClientId );
1581
- if ( isLocked ) {
1631
+ const _isSectionBlock = !! isSectionBlock( state, rootClientId );
1632
+ if ( _isSectionBlock ) {
1582
1633
  return false;
1583
1634
  }
1584
1635
 
@@ -1733,6 +1784,11 @@ export function canRemoveBlock( state, clientId ) {
1733
1784
  return false;
1734
1785
  }
1735
1786
 
1787
+ const isBlockWithinSection = !! getParentSectionBlock( state, clientId );
1788
+ if ( isBlockWithinSection ) {
1789
+ return false;
1790
+ }
1791
+
1736
1792
  return getBlockEditingMode( state, rootClientId ) !== 'disabled';
1737
1793
  }
1738
1794
 
@@ -1959,6 +2015,7 @@ const buildBlockTypeItem =
1959
2015
  description: blockType.description,
1960
2016
  category: blockType.category,
1961
2017
  keywords: blockType.keywords,
2018
+ parent: blockType.parent,
1962
2019
  variations: inserterVariations,
1963
2020
  example: blockType.example,
1964
2021
  utility: 1, // Deprecated.
@@ -1996,7 +2053,7 @@ const buildBlockTypeItem =
1996
2053
  */
1997
2054
  export const getInserterItems = createRegistrySelector( ( select ) =>
1998
2055
  createSelector(
1999
- ( state, rootClientId = null, options = EMPTY_OBJECT ) => {
2056
+ ( state, rootClientId = null, options = DEFAULT_INSERTER_OPTIONS ) => {
2000
2057
  const buildReusableBlockInserterItem = ( reusableBlock ) => {
2001
2058
  const icon = ! reusableBlock.wp_pattern_sync_status
2002
2059
  ? {
@@ -2044,56 +2101,7 @@ export const getInserterItems = createRegistrySelector( ( select ) =>
2044
2101
  )
2045
2102
  .map( buildBlockTypeInserterItem );
2046
2103
 
2047
- if ( options[ withRootClientIdOptionKey ] ) {
2048
- blockTypeInserterItems = blockTypeInserterItems.reduce(
2049
- ( accumulator, item ) => {
2050
- item.rootClientId = rootClientId ?? '';
2051
-
2052
- while (
2053
- ! canInsertBlockTypeUnmemoized(
2054
- state,
2055
- item.name,
2056
- item.rootClientId
2057
- )
2058
- ) {
2059
- if ( ! item.rootClientId ) {
2060
- let sectionRootClientId;
2061
- try {
2062
- sectionRootClientId =
2063
- getSectionRootClientId( state );
2064
- } catch ( e ) {}
2065
- if (
2066
- sectionRootClientId &&
2067
- canInsertBlockTypeUnmemoized(
2068
- state,
2069
- item.name,
2070
- sectionRootClientId
2071
- )
2072
- ) {
2073
- item.rootClientId = sectionRootClientId;
2074
- } else {
2075
- delete item.rootClientId;
2076
- }
2077
- break;
2078
- } else {
2079
- const parentClientId = getBlockRootClientId(
2080
- state,
2081
- item.rootClientId
2082
- );
2083
- item.rootClientId = parentClientId;
2084
- }
2085
- }
2086
-
2087
- // We could also add non insertable items and gray them out.
2088
- if ( item.hasOwnProperty( 'rootClientId' ) ) {
2089
- accumulator.push( item );
2090
- }
2091
-
2092
- return accumulator;
2093
- },
2094
- []
2095
- );
2096
- } else {
2104
+ if ( options[ isFiltered ] !== false ) {
2097
2105
  blockTypeInserterItems = blockTypeInserterItems.filter(
2098
2106
  ( blockType ) =>
2099
2107
  canIncludeBlockTypeInInserter(
@@ -2102,6 +2110,19 @@ export const getInserterItems = createRegistrySelector( ( select ) =>
2102
2110
  rootClientId
2103
2111
  )
2104
2112
  );
2113
+ } else {
2114
+ blockTypeInserterItems = blockTypeInserterItems
2115
+ .filter( ( blockType ) =>
2116
+ isBlockVisibleInTheInserter( state, blockType )
2117
+ )
2118
+ .map( ( blockType ) => ( {
2119
+ ...blockType,
2120
+ isAllowedInCurrentRoot: canIncludeBlockTypeInInserter(
2121
+ state,
2122
+ blockType,
2123
+ rootClientId
2124
+ ),
2125
+ } ) );
2105
2126
  }
2106
2127
 
2107
2128
  const items = blockTypeInserterItems.reduce(
@@ -2373,37 +2394,50 @@ const getAllowedPatternsDependants = ( select ) => ( state, rootClientId ) => [
2373
2394
  */
2374
2395
  export const __experimentalGetAllowedPatterns = createRegistrySelector(
2375
2396
  ( select ) => {
2376
- return createSelector( ( state, rootClientId = null ) => {
2377
- const { getAllPatterns } = unlock( select( STORE_NAME ) );
2378
- const patterns = getAllPatterns();
2379
- const { allowedBlockTypes } = getSettings( state );
2380
- const parsedPatterns = patterns
2381
- .filter( ( { inserter = true } ) => !! inserter )
2382
- .map( ( pattern ) => {
2383
- return {
2384
- ...pattern,
2385
- get blocks() {
2386
- return getParsedPattern( pattern ).blocks;
2387
- },
2388
- };
2389
- } );
2390
-
2391
- const availableParsedPatterns = parsedPatterns.filter(
2392
- ( pattern ) =>
2393
- checkAllowListRecursive(
2394
- getGrammar( pattern ),
2395
- allowedBlockTypes
2396
- )
2397
- );
2398
- const patternsAllowed = availableParsedPatterns.filter(
2399
- ( pattern ) =>
2400
- getGrammar( pattern ).every( ( { blockName: name } ) =>
2401
- canInsertBlockType( state, name, rootClientId )
2402
- )
2403
- );
2397
+ return createSelector(
2398
+ (
2399
+ state,
2400
+ rootClientId = null,
2401
+ options = DEFAULT_INSERTER_OPTIONS
2402
+ ) => {
2403
+ const { getAllPatterns } = unlock( select( STORE_NAME ) );
2404
+ const patterns = getAllPatterns();
2405
+ const { allowedBlockTypes } = getSettings( state );
2406
+ const parsedPatterns = patterns
2407
+ .filter( ( { inserter = true } ) => !! inserter )
2408
+ .map( ( pattern ) => {
2409
+ return {
2410
+ ...pattern,
2411
+ get blocks() {
2412
+ return getParsedPattern( pattern ).blocks;
2413
+ },
2414
+ };
2415
+ } );
2416
+
2417
+ const availableParsedPatterns = parsedPatterns.filter(
2418
+ ( pattern ) =>
2419
+ checkAllowListRecursive(
2420
+ getGrammar( pattern ),
2421
+ allowedBlockTypes
2422
+ )
2423
+ );
2424
+ const patternsAllowed = availableParsedPatterns.filter(
2425
+ ( pattern ) =>
2426
+ getGrammar( pattern ).every( ( { blockName: name } ) =>
2427
+ options[ isFiltered ] !== false
2428
+ ? canInsertBlockType(
2429
+ state,
2430
+ name,
2431
+ rootClientId
2432
+ )
2433
+ : isBlockVisibleInTheInserter( state, name )
2434
+ )
2435
+ );
2404
2436
 
2405
- return patternsAllowed;
2406
- }, getAllowedPatternsDependants( select ) );
2437
+ return patternsAllowed;
2438
+ },
2439
+ getAllowedPatternsDependants( select )
2440
+ );
2407
2441
  }
2408
2442
  );
2409
2443
 
@@ -2674,12 +2708,17 @@ export function __unstableGetEditorMode( state ) {
2674
2708
  /**
2675
2709
  * Returns whether block moving mode is enabled.
2676
2710
  *
2677
- * @param {Object} state Editor state.
2678
- *
2679
- * @return {string} Client Id of moving block.
2711
+ * @deprecated
2680
2712
  */
2681
- export function hasBlockMovingClientId( state ) {
2682
- return state.hasBlockMovingClientId;
2713
+ export function hasBlockMovingClientId() {
2714
+ deprecated(
2715
+ 'wp.data.select( "core/block-editor" ).hasBlockMovingClientId',
2716
+ {
2717
+ since: '6.7',
2718
+ hint: 'Block moving mode feature has been removed',
2719
+ }
2720
+ );
2721
+ return false;
2683
2722
  }
2684
2723
 
2685
2724
  /**
@@ -2862,11 +2901,9 @@ export function __unstableHasActiveBlockOverlayActive( state, clientId ) {
2862
2901
  '__experimentalDisableBlockOverlay',
2863
2902
  false
2864
2903
  );
2865
- const shouldEnableIfUnselected =
2866
- editorMode === 'navigation' ||
2867
- ( blockSupportDisable
2868
- ? false
2869
- : areInnerBlocksControlled( state, clientId ) );
2904
+ const shouldEnableIfUnselected = blockSupportDisable
2905
+ ? false
2906
+ : areInnerBlocksControlled( state, clientId );
2870
2907
 
2871
2908
  return (
2872
2909
  shouldEnableIfUnselected &&
@@ -2886,6 +2923,14 @@ export function __unstableIsWithinBlockOverlay( state, clientId ) {
2886
2923
  return false;
2887
2924
  }
2888
2925
 
2926
+ function isWithinBlock( state, clientId, parentClientId ) {
2927
+ let parent = state.blocks.parents.get( clientId );
2928
+ while ( !! parent && parent !== parentClientId ) {
2929
+ parent = state.blocks.parents.get( parent );
2930
+ }
2931
+ return parent === parentClientId;
2932
+ }
2933
+
2889
2934
  /**
2890
2935
  * @typedef {import('../components/block-editing-mode').BlockEditingMode} BlockEditingMode
2891
2936
  */
@@ -2953,15 +2998,58 @@ export const getBlockEditingMode = createRegistrySelector(
2953
2998
  return 'disabled';
2954
2999
  }
2955
3000
 
3001
+ if ( editorMode === 'navigation' ) {
3002
+ const sectionRootClientId = getSectionRootClientId( state );
3003
+
3004
+ // The root section is "default mode"
3005
+ if ( clientId === sectionRootClientId ) {
3006
+ return 'default';
3007
+ }
3008
+
3009
+ // Sections should always be contentOnly in navigation mode.
3010
+ const sectionsClientIds = getBlockOrder(
3011
+ state,
3012
+ sectionRootClientId
3013
+ );
3014
+ if ( sectionsClientIds.includes( clientId ) ) {
3015
+ return 'contentOnly';
3016
+ }
3017
+
3018
+ // Blocks outside sections should be disabled.
3019
+ const isWithinSectionRoot = isWithinBlock(
3020
+ state,
3021
+ clientId,
3022
+ sectionRootClientId
3023
+ );
3024
+ if ( ! isWithinSectionRoot ) {
3025
+ return 'disabled';
3026
+ }
3027
+
3028
+ // The rest of the blocks depend on whether they are content blocks or not.
3029
+ // This "flattens" the sections tree.
3030
+ const name = getBlockName( state, clientId );
3031
+ const { hasContentRoleAttribute } = unlock(
3032
+ select( blocksStore )
3033
+ );
3034
+ const isContent = hasContentRoleAttribute( name );
3035
+
3036
+ return isContent ? 'contentOnly' : 'disabled';
3037
+ }
3038
+
3039
+ // In normal mode, consider that an explicitely set editing mode takes over.
2956
3040
  const blockEditingMode = state.blockEditingModes.get( clientId );
2957
3041
  if ( blockEditingMode ) {
2958
3042
  return blockEditingMode;
2959
3043
  }
3044
+
3045
+ // In normal mode, top level is default mode.
2960
3046
  if ( ! clientId ) {
2961
3047
  return 'default';
2962
3048
  }
3049
+
2963
3050
  const rootClientId = getBlockRootClientId( state, clientId );
2964
3051
  const templateLock = getTemplateLock( state, rootClientId );
3052
+ // If the parent of the block is contentOnly locked, check whether it's a content block.
2965
3053
  if ( templateLock === 'contentOnly' ) {
2966
3054
  const name = getBlockName( state, clientId );
2967
3055
  const { hasContentRoleAttribute } = unlock(
@@ -2970,6 +3058,7 @@ export const getBlockEditingMode = createRegistrySelector(
2970
3058
  const isContent = hasContentRoleAttribute( name );
2971
3059
  return isContent ? 'contentOnly' : 'disabled';
2972
3060
  }
3061
+ // Otherwise, check if there's an ancestor that is contentOnly
2973
3062
  const parentMode = getBlockEditingMode( state, rootClientId );
2974
3063
  return parentMode === 'contentOnly' ? 'default' : parentMode;
2975
3064
  }
@@ -6,6 +6,7 @@ import {
6
6
  showBlockInterface,
7
7
  expandBlock,
8
8
  __experimentalUpdateSettings,
9
+ setInsertionPoint,
9
10
  setOpenedBlockSettingsMenu,
10
11
  startDragging,
11
12
  stopDragging,
@@ -123,4 +124,18 @@ describe( 'private actions', () => {
123
124
  } );
124
125
  } );
125
126
  } );
127
+
128
+ describe( 'setInsertionPoint', () => {
129
+ it( 'should return the SET_INSERTION_POINT action', () => {
130
+ expect(
131
+ setInsertionPoint( {
132
+ rootClientId: '',
133
+ index: '123',
134
+ } )
135
+ ).toEqual( {
136
+ type: 'SET_INSERTION_POINT',
137
+ value: { rootClientId: '', index: '123' },
138
+ } );
139
+ } );
140
+ } );
126
141
  } );
@@ -394,6 +394,10 @@ describe( 'private selectors', () => {
394
394
  parents: new Map( [
395
395
  [ '6cf70164-9097-4460-bcbf-200560546988', '' ],
396
396
  ] ),
397
+ order: new Map( [
398
+ [ '6cf70164-9097-4460-bcbf-200560546988', [] ],
399
+ [ '', [ '6cf70164-9097-4460-bcbf-200560546988' ] ],
400
+ ] ),
397
401
  },
398
402
  blockEditingModes: new Map(),
399
403
  };
@@ -424,6 +428,21 @@ describe( 'private selectors', () => {
424
428
  'e178812d-ce5e-48c7-a945-8ae4ffcbbb7c',
425
429
  ],
426
430
  ] ),
431
+
432
+ order: new Map( [
433
+ [
434
+ 'ef45d5fd-5234-4fd5-ac4f-c3736c7f9337',
435
+ [
436
+ '9b9c5c3f-2e46-4f02-9e14-9fe9515b958f',
437
+ 'e178812d-ce5e-48c7-a945-8ae4ffcbbb7c',
438
+ ],
439
+ ],
440
+ [
441
+ 'e178812d-ce5e-48c7-a945-8ae4ffcbbb7c',
442
+ [ '4c2b7140-fffd-44b4-b2a7-820c670a6514' ],
443
+ ],
444
+ [ '', [ 'ef45d5fd-5234-4fd5-ac4f-c3736c7f9337' ] ],
445
+ ] ),
427
446
  },
428
447
  blockEditingModes: new Map( [
429
448
  [ '', 'disabled' ],
@@ -461,6 +480,21 @@ describe( 'private selectors', () => {
461
480
  'e178812d-ce5e-48c7-a945-8ae4ffcbbb7c',
462
481
  ],
463
482
  ] ),
483
+ order: new Map( [
484
+ [
485
+ 'ef45d5fd-5234-4fd5-ac4f-c3736c7f9337',
486
+ [ '9b9c5c3f-2e46-4f02-9e14-9fe9515b958f' ],
487
+ ],
488
+ [
489
+ '9b9c5c3f-2e46-4f02-9e14-9fe9515b958f',
490
+ [ 'e178812d-ce5e-48c7-a945-8ae4ffcbbb7c' ],
491
+ ],
492
+ [
493
+ 'e178812d-ce5e-48c7-a945-8ae4ffcbbb7c',
494
+ [ '4c2b7140-fffd-44b4-b2a7-820c670a6514' ],
495
+ ],
496
+ [ '', [ 'ef45d5fd-5234-4fd5-ac4f-c3736c7f9337' ] ],
497
+ ] ),
464
498
  },
465
499
  blockEditingModes: new Map( [
466
500
  [ '', 'disabled' ],
@@ -28,6 +28,7 @@ import {
28
28
  isMultiSelecting,
29
29
  preferences,
30
30
  blocksMode,
31
+ insertionCue,
31
32
  insertionPoint,
32
33
  template,
33
34
  blockListSettings,
@@ -2378,15 +2379,15 @@ describe( 'state', () => {
2378
2379
  } );
2379
2380
  } );
2380
2381
 
2381
- describe( 'insertionPoint', () => {
2382
+ describe( 'insertionCue', () => {
2382
2383
  it( 'should default to null', () => {
2383
- const state = insertionPoint( undefined, {} );
2384
+ const state = insertionCue( undefined, {} );
2384
2385
 
2385
2386
  expect( state ).toBe( null );
2386
2387
  } );
2387
2388
 
2388
2389
  it( 'should set insertion point', () => {
2389
- const state = insertionPoint( null, {
2390
+ const state = insertionCue( null, {
2390
2391
  type: 'SHOW_INSERTION_POINT',
2391
2392
  rootClientId: 'clientId1',
2392
2393
  index: 0,
@@ -2403,7 +2404,7 @@ describe( 'state', () => {
2403
2404
  rootClientId: 'clientId1',
2404
2405
  index: 0,
2405
2406
  } );
2406
- const state = insertionPoint( original, {
2407
+ const state = insertionCue( original, {
2407
2408
  type: 'HIDE_INSERTION_POINT',
2408
2409
  } );
2409
2410
 
@@ -3485,4 +3486,39 @@ describe( 'state', () => {
3485
3486
  expect( state ).toBe( null );
3486
3487
  } );
3487
3488
  } );
3489
+
3490
+ describe( 'insertionPoint', () => {
3491
+ it( 'should default to null', () => {
3492
+ const state = insertionPoint( undefined, {} );
3493
+
3494
+ expect( state ).toBe( null );
3495
+ } );
3496
+
3497
+ it( 'should set insertion point', () => {
3498
+ const state = insertionPoint( null, {
3499
+ type: 'SET_INSERTION_POINT',
3500
+ value: {
3501
+ rootClientId: 'clientId1',
3502
+ index: 4,
3503
+ },
3504
+ } );
3505
+
3506
+ expect( state ).toEqual( {
3507
+ rootClientId: 'clientId1',
3508
+ index: 4,
3509
+ } );
3510
+ } );
3511
+
3512
+ it( 'should clear the insertion point on block selection', () => {
3513
+ const original = deepFreeze( {
3514
+ rootClientId: 'clientId1',
3515
+ index: 4,
3516
+ } );
3517
+ const state = insertionPoint( original, {
3518
+ type: 'SELECT_BLOCK',
3519
+ } );
3520
+
3521
+ expect( state ).toBe( null );
3522
+ } );
3523
+ } );
3488
3524
  } );