@wordpress/block-editor 14.1.0 → 14.2.1-next.5368f64a9.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 (679) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +1 -10
  3. package/build/components/block-alignment-matrix-control/index.js +2 -2
  4. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  5. package/build/components/block-breadcrumb/index.js +2 -2
  6. package/build/components/block-breadcrumb/index.js.map +1 -1
  7. package/build/components/block-canvas/index.js +8 -1
  8. package/build/components/block-canvas/index.js.map +1 -1
  9. package/build/components/block-compare/block-view.js +1 -0
  10. package/build/components/block-compare/block-view.js.map +1 -1
  11. package/build/components/block-draggable/index.js +4 -4
  12. package/build/components/block-draggable/index.js.map +1 -1
  13. package/build/components/block-draggable/use-scroll-when-dragging.js +25 -25
  14. package/build/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  15. package/build/components/block-edit/multiple-usage-warning.js +2 -0
  16. package/build/components/block-edit/multiple-usage-warning.js.map +1 -1
  17. package/build/components/block-inspector/index.js +27 -11
  18. package/build/components/block-inspector/index.js.map +1 -1
  19. package/build/components/block-list/block-invalid-warning.js +3 -2
  20. package/build/components/block-list/block-invalid-warning.js.map +1 -1
  21. package/build/components/block-list/block.js +5 -1
  22. package/build/components/block-list/block.js.map +1 -1
  23. package/build/components/block-list/index.js +14 -3
  24. package/build/components/block-list/index.js.map +1 -1
  25. package/build/components/block-list/use-block-props/index.js +5 -1
  26. package/build/components/block-list/use-block-props/index.js.map +1 -1
  27. package/build/components/block-list/use-block-props/use-focus-first-element.js +1 -0
  28. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  29. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js +53 -0
  30. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +1 -0
  31. package/build/components/block-list/zoom-out-separator.js +98 -0
  32. package/build/components/block-list/zoom-out-separator.js.map +1 -0
  33. package/build/components/block-lock/toolbar.js +3 -3
  34. package/build/components/block-lock/toolbar.js.map +1 -1
  35. package/build/components/block-mover/button.js +1 -0
  36. package/build/components/block-mover/button.js.map +1 -1
  37. package/build/components/block-mover/index.js +1 -0
  38. package/build/components/block-mover/index.js.map +1 -1
  39. package/build/components/block-navigation/dropdown.js +4 -1
  40. package/build/components/block-navigation/dropdown.js.map +1 -1
  41. package/build/components/block-pattern-setup/index.js +2 -10
  42. package/build/components/block-pattern-setup/index.js.map +1 -1
  43. package/build/components/block-pattern-setup/setup-toolbar.js +22 -7
  44. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  45. package/build/components/block-patterns-list/index.js +12 -20
  46. package/build/components/block-patterns-list/index.js.map +1 -1
  47. package/build/components/block-patterns-paging/index.js +12 -3
  48. package/build/components/block-patterns-paging/index.js.map +1 -1
  49. package/build/components/block-popover/index.js +2 -15
  50. package/build/components/block-popover/index.js.map +1 -1
  51. package/build/components/block-quick-navigation/index.js +4 -1
  52. package/build/components/block-quick-navigation/index.js.map +1 -1
  53. package/build/components/block-settings-menu-controls/index.js +4 -0
  54. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  55. package/build/components/block-switcher/index.js +30 -19
  56. package/build/components/block-switcher/index.js.map +1 -1
  57. package/build/components/block-switcher/pattern-transformations-menu.js +2 -10
  58. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  59. package/build/components/block-toolbar/index.js +19 -12
  60. package/build/components/block-toolbar/index.js.map +1 -1
  61. package/build/components/block-toolbar/shuffle.js +6 -2
  62. package/build/components/block-toolbar/shuffle.js.map +1 -1
  63. package/build/components/block-tools/block-selection-button.js +8 -2
  64. package/build/components/block-tools/block-selection-button.js.map +1 -1
  65. package/build/components/block-tools/block-toolbar-popover.js +10 -6
  66. package/build/components/block-tools/block-toolbar-popover.js.map +1 -1
  67. package/build/components/block-tools/index.js +1 -1
  68. package/build/components/block-tools/index.js.map +1 -1
  69. package/build/components/block-tools/use-block-toolbar-popover-props.js +2 -1
  70. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  71. package/build/components/block-tools/zoom-out-mode-inserters.js +7 -21
  72. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  73. package/build/components/block-tools/zoom-out-popover.js +3 -4
  74. package/build/components/block-tools/zoom-out-popover.js.map +1 -1
  75. package/build/components/block-tools/zoom-out-toolbar.js +26 -7
  76. package/build/components/block-tools/zoom-out-toolbar.js.map +1 -1
  77. package/build/components/block-variation-picker/index.js +4 -1
  78. package/build/components/block-variation-picker/index.js.map +1 -1
  79. package/build/components/block-variation-transforms/index.js +4 -1
  80. package/build/components/block-variation-transforms/index.js.map +1 -1
  81. package/build/components/button-block-appender/index.js +20 -23
  82. package/build/components/button-block-appender/index.js.map +1 -1
  83. package/build/components/colors-gradients/dropdown.js +4 -1
  84. package/build/components/colors-gradients/dropdown.js.map +1 -1
  85. package/build/components/content-lock/index.js +13 -0
  86. package/build/components/content-lock/index.js.map +1 -0
  87. package/build/components/content-lock/modify-content-lock-menu-item.js +64 -0
  88. package/build/components/content-lock/modify-content-lock-menu-item.js.map +1 -0
  89. package/build/components/editor-styles/index.js +4 -3
  90. package/build/components/editor-styles/index.js.map +1 -1
  91. package/build/components/global-styles/background-panel.js +8 -12
  92. package/build/components/global-styles/background-panel.js.map +1 -1
  93. package/build/components/global-styles/color-panel.js +8 -5
  94. package/build/components/global-styles/color-panel.js.map +1 -1
  95. package/build/components/global-styles/color-panel.native.js +1 -1
  96. package/build/components/global-styles/color-panel.native.js.map +1 -1
  97. package/build/components/global-styles/dimensions-panel.js +34 -37
  98. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  99. package/build/components/global-styles/filters-panel.js +4 -1
  100. package/build/components/global-styles/filters-panel.js.map +1 -1
  101. package/build/components/global-styles/shadow-panel-components.js +14 -17
  102. package/build/components/global-styles/shadow-panel-components.js.map +1 -1
  103. package/build/components/global-styles/typography-utils.js +17 -6
  104. package/build/components/global-styles/typography-utils.js.map +1 -1
  105. package/build/components/global-styles/utils.js +4 -6
  106. package/build/components/global-styles/utils.js.map +1 -1
  107. package/build/components/grid/grid-item-movers.js +2 -2
  108. package/build/components/grid/grid-item-movers.js.map +1 -1
  109. package/build/components/iframe/get-compatibility-styles.js +1 -1
  110. package/build/components/iframe/get-compatibility-styles.js.map +1 -1
  111. package/build/components/iframe/index.js +5 -5
  112. package/build/components/iframe/index.js.map +1 -1
  113. package/build/components/inner-blocks/index.js +2 -4
  114. package/build/components/inner-blocks/index.js.map +1 -1
  115. package/build/components/inner-blocks/use-inner-block-template-sync.js +3 -3
  116. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  117. package/build/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +4 -1
  118. package/build/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -1
  119. package/build/components/inserter/block-patterns-tab/index.js +4 -1
  120. package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
  121. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js +23 -13
  122. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  123. package/build/components/inserter/index.js +4 -11
  124. package/build/components/inserter/index.js.map +1 -1
  125. package/build/components/inserter/library.js +2 -4
  126. package/build/components/inserter/library.js.map +1 -1
  127. package/build/components/inserter/media-tab/hooks.js +3 -3
  128. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  129. package/build/components/inserter/media-tab/media-list.js +1 -8
  130. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  131. package/build/components/inserter/media-tab/media-preview.js +9 -7
  132. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  133. package/build/components/inserter/media-tab/media-tab.js +4 -1
  134. package/build/components/inserter/media-tab/media-tab.js.map +1 -1
  135. package/build/components/inserter/menu.js +7 -24
  136. package/build/components/inserter/menu.js.map +1 -1
  137. package/build/components/inserter/quick-inserter.js +4 -5
  138. package/build/components/inserter/quick-inserter.js.map +1 -1
  139. package/build/components/inserter-list-item/index.js +4 -4
  140. package/build/components/inserter-list-item/index.js.map +1 -1
  141. package/build/components/inserter-listbox/index.js +3 -13
  142. package/build/components/inserter-listbox/index.js.map +1 -1
  143. package/build/components/inserter-listbox/item.js +6 -11
  144. package/build/components/inserter-listbox/item.js.map +1 -1
  145. package/build/components/inserter-listbox/row.js +1 -9
  146. package/build/components/inserter-listbox/row.js.map +1 -1
  147. package/build/components/inspector-controls/groups.js +2 -0
  148. package/build/components/inspector-controls/groups.js.map +1 -1
  149. package/build/components/inspector-controls-tabs/index.js +4 -1
  150. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  151. package/build/components/inspector-controls-tabs/settings-tab.js +3 -1
  152. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  153. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +2 -1
  154. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  155. package/build/components/inspector-popover-header/index.js +8 -2
  156. package/build/components/inspector-popover-header/index.js.map +1 -1
  157. package/build/components/letter-spacing-control/index.js +7 -4
  158. package/build/components/letter-spacing-control/index.js.map +1 -1
  159. package/build/components/link-control/index.js +19 -10
  160. package/build/components/link-control/index.js.map +1 -1
  161. package/build/components/link-control/settings-drawer.js +4 -1
  162. package/build/components/link-control/settings-drawer.js.map +1 -1
  163. package/build/components/list-view/block-select-button.js +4 -1
  164. package/build/components/list-view/block-select-button.js.map +1 -1
  165. package/build/components/list-view/index.js +3 -7
  166. package/build/components/list-view/index.js.map +1 -1
  167. package/build/components/media-placeholder/index.js +32 -11
  168. package/build/components/media-placeholder/index.js.map +1 -1
  169. package/build/components/media-replace-flow/index.js +8 -1
  170. package/build/components/media-replace-flow/index.js.map +1 -1
  171. package/build/components/provider/use-block-sync.js +19 -19
  172. package/build/components/provider/use-block-sync.js.map +1 -1
  173. package/build/components/rich-text/event-listeners/paste-handler.js +12 -1
  174. package/build/components/rich-text/event-listeners/paste-handler.js.map +1 -1
  175. package/build/components/rich-text/index.js +38 -30
  176. package/build/components/rich-text/index.js.map +1 -1
  177. package/build/components/rich-text/use-mark-persistent.js +5 -5
  178. package/build/components/rich-text/use-mark-persistent.js.map +1 -1
  179. package/build/components/skip-to-selected-block/index.js +4 -1
  180. package/build/components/skip-to-selected-block/index.js.map +1 -1
  181. package/build/components/tool-selector/index.js +4 -1
  182. package/build/components/tool-selector/index.js.map +1 -1
  183. package/build/components/url-input/button.js +12 -3
  184. package/build/components/url-input/button.js.map +1 -1
  185. package/build/components/url-input/index.js +4 -1
  186. package/build/components/url-input/index.js.map +1 -1
  187. package/build/components/use-block-drop-zone/index.js +31 -7
  188. package/build/components/use-block-drop-zone/index.js.map +1 -1
  189. package/build/components/writing-flow/index.js +2 -1
  190. package/build/components/writing-flow/index.js.map +1 -1
  191. package/build/components/writing-flow/use-arrow-nav.js +4 -1
  192. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  193. package/build/components/writing-flow/use-event-redirect.js +66 -0
  194. package/build/components/writing-flow/use-event-redirect.js.map +1 -0
  195. package/build/components/writing-flow/use-input.js +31 -1
  196. package/build/components/writing-flow/use-input.js.map +1 -1
  197. package/build/components/writing-flow/use-select-all.js +14 -1
  198. package/build/components/writing-flow/use-select-all.js.map +1 -1
  199. package/build/components/writing-flow/use-selection-observer.js +20 -6
  200. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  201. package/build/components/writing-flow/use-tab-nav.js +4 -4
  202. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  203. package/build/components/writing-flow/utils.js +27 -0
  204. package/build/components/writing-flow/utils.js.map +1 -1
  205. package/build/hooks/block-bindings.js +32 -29
  206. package/build/hooks/block-bindings.js.map +1 -1
  207. package/build/hooks/content-lock-ui.js +8 -26
  208. package/build/hooks/content-lock-ui.js.map +1 -1
  209. package/build/hooks/duotone.js +0 -4
  210. package/build/hooks/duotone.js.map +1 -1
  211. package/build/hooks/layout.js +4 -2
  212. package/build/hooks/layout.js.map +1 -1
  213. package/build/hooks/spacing-visualizer.js +3 -3
  214. package/build/hooks/spacing-visualizer.js.map +1 -1
  215. package/build/hooks/style.js +1 -5
  216. package/build/hooks/style.js.map +1 -1
  217. package/build/hooks/use-bindings-attributes.js +19 -20
  218. package/build/hooks/use-bindings-attributes.js.map +1 -1
  219. package/build/hooks/use-zoom-out.js +7 -7
  220. package/build/hooks/use-zoom-out.js.map +1 -1
  221. package/build/layouts/constrained.js +41 -42
  222. package/build/layouts/constrained.js.map +1 -1
  223. package/build/layouts/flex.js +4 -1
  224. package/build/layouts/flex.js.map +1 -1
  225. package/build/layouts/grid.js +19 -16
  226. package/build/layouts/grid.js.map +1 -1
  227. package/build/layouts/utils.js +1 -7
  228. package/build/layouts/utils.js.map +1 -1
  229. package/build/private-apis.js +2 -3
  230. package/build/private-apis.js.map +1 -1
  231. package/build/store/actions.js +2 -7
  232. package/build/store/actions.js.map +1 -1
  233. package/build/store/private-actions.js +1 -0
  234. package/build/store/private-actions.js.map +1 -1
  235. package/build/store/private-keys.js +2 -1
  236. package/build/store/private-keys.js.map +1 -1
  237. package/build/store/private-selectors.js +16 -18
  238. package/build/store/private-selectors.js.map +1 -1
  239. package/build/store/reducer.js +1 -10
  240. package/build/store/reducer.js.map +1 -1
  241. package/build/store/selectors.js +19 -43
  242. package/build/store/selectors.js.map +1 -1
  243. package/build/store/utils.js +48 -0
  244. package/build/store/utils.js.map +1 -1
  245. package/build/utils/block-bindings.js +16 -11
  246. package/build/utils/block-bindings.js.map +1 -1
  247. package/build/utils/dom.js +101 -0
  248. package/build/utils/dom.js.map +1 -1
  249. package/build/utils/get-font-styles-and-weights.js +4 -4
  250. package/build/utils/get-font-styles-and-weights.js.map +1 -1
  251. package/build/utils/transform-styles/index.js +120 -16
  252. package/build/utils/transform-styles/index.js.map +1 -1
  253. package/build-module/components/block-alignment-matrix-control/index.js +1 -1
  254. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  255. package/build-module/components/block-breadcrumb/index.js +2 -2
  256. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  257. package/build-module/components/block-canvas/index.js +9 -1
  258. package/build-module/components/block-canvas/index.js.map +1 -1
  259. package/build-module/components/block-compare/block-view.js +1 -0
  260. package/build-module/components/block-compare/block-view.js.map +1 -1
  261. package/build-module/components/block-draggable/index.js +4 -4
  262. package/build-module/components/block-draggable/index.js.map +1 -1
  263. package/build-module/components/block-draggable/use-scroll-when-dragging.js +25 -25
  264. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  265. package/build-module/components/block-edit/multiple-usage-warning.js +2 -0
  266. package/build-module/components/block-edit/multiple-usage-warning.js.map +1 -1
  267. package/build-module/components/block-inspector/index.js +27 -11
  268. package/build-module/components/block-inspector/index.js.map +1 -1
  269. package/build-module/components/block-list/block-invalid-warning.js +3 -2
  270. package/build-module/components/block-list/block-invalid-warning.js.map +1 -1
  271. package/build-module/components/block-list/block.js +5 -1
  272. package/build-module/components/block-list/block.js.map +1 -1
  273. package/build-module/components/block-list/index.js +14 -3
  274. package/build-module/components/block-list/index.js.map +1 -1
  275. package/build-module/components/block-list/use-block-props/index.js +5 -1
  276. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  277. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +1 -0
  278. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  279. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js +47 -0
  280. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +1 -0
  281. package/build-module/components/block-list/zoom-out-separator.js +90 -0
  282. package/build-module/components/block-list/zoom-out-separator.js.map +1 -0
  283. package/build-module/components/block-lock/toolbar.js +3 -3
  284. package/build-module/components/block-lock/toolbar.js.map +1 -1
  285. package/build-module/components/block-mover/button.js +1 -0
  286. package/build-module/components/block-mover/button.js.map +1 -1
  287. package/build-module/components/block-mover/index.js +1 -0
  288. package/build-module/components/block-mover/index.js.map +1 -1
  289. package/build-module/components/block-navigation/dropdown.js +4 -1
  290. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  291. package/build-module/components/block-pattern-setup/index.js +2 -10
  292. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  293. package/build-module/components/block-pattern-setup/setup-toolbar.js +23 -8
  294. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  295. package/build-module/components/block-patterns-list/index.js +12 -20
  296. package/build-module/components/block-patterns-list/index.js.map +1 -1
  297. package/build-module/components/block-patterns-paging/index.js +12 -3
  298. package/build-module/components/block-patterns-paging/index.js.map +1 -1
  299. package/build-module/components/block-popover/index.js +2 -15
  300. package/build-module/components/block-popover/index.js.map +1 -1
  301. package/build-module/components/block-quick-navigation/index.js +4 -1
  302. package/build-module/components/block-quick-navigation/index.js.map +1 -1
  303. package/build-module/components/block-settings-menu-controls/index.js +4 -0
  304. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  305. package/build-module/components/block-switcher/index.js +30 -19
  306. package/build-module/components/block-switcher/index.js.map +1 -1
  307. package/build-module/components/block-switcher/pattern-transformations-menu.js +2 -10
  308. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  309. package/build-module/components/block-toolbar/index.js +19 -12
  310. package/build-module/components/block-toolbar/index.js.map +1 -1
  311. package/build-module/components/block-toolbar/shuffle.js +6 -2
  312. package/build-module/components/block-toolbar/shuffle.js.map +1 -1
  313. package/build-module/components/block-tools/block-selection-button.js +8 -2
  314. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  315. package/build-module/components/block-tools/block-toolbar-popover.js +10 -6
  316. package/build-module/components/block-tools/block-toolbar-popover.js.map +1 -1
  317. package/build-module/components/block-tools/index.js +1 -1
  318. package/build-module/components/block-tools/index.js.map +1 -1
  319. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +2 -1
  320. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  321. package/build-module/components/block-tools/zoom-out-mode-inserters.js +7 -22
  322. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  323. package/build-module/components/block-tools/zoom-out-popover.js +3 -4
  324. package/build-module/components/block-tools/zoom-out-popover.js.map +1 -1
  325. package/build-module/components/block-tools/zoom-out-toolbar.js +27 -8
  326. package/build-module/components/block-tools/zoom-out-toolbar.js.map +1 -1
  327. package/build-module/components/block-variation-picker/index.js +4 -1
  328. package/build-module/components/block-variation-picker/index.js.map +1 -1
  329. package/build-module/components/block-variation-transforms/index.js +4 -1
  330. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  331. package/build-module/components/button-block-appender/index.js +22 -26
  332. package/build-module/components/button-block-appender/index.js.map +1 -1
  333. package/build-module/components/colors-gradients/dropdown.js +4 -1
  334. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  335. package/build-module/components/content-lock/index.js +2 -0
  336. package/build-module/components/content-lock/index.js.map +1 -0
  337. package/build-module/components/content-lock/modify-content-lock-menu-item.js +57 -0
  338. package/build-module/components/content-lock/modify-content-lock-menu-item.js.map +1 -0
  339. package/build-module/components/editor-styles/index.js +4 -3
  340. package/build-module/components/editor-styles/index.js.map +1 -1
  341. package/build-module/components/global-styles/background-panel.js +8 -12
  342. package/build-module/components/global-styles/background-panel.js.map +1 -1
  343. package/build-module/components/global-styles/color-panel.js +7 -4
  344. package/build-module/components/global-styles/color-panel.js.map +1 -1
  345. package/build-module/components/global-styles/color-panel.native.js +2 -2
  346. package/build-module/components/global-styles/color-panel.native.js.map +1 -1
  347. package/build-module/components/global-styles/dimensions-panel.js +36 -39
  348. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  349. package/build-module/components/global-styles/filters-panel.js +4 -1
  350. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  351. package/build-module/components/global-styles/shadow-panel-components.js +14 -17
  352. package/build-module/components/global-styles/shadow-panel-components.js.map +1 -1
  353. package/build-module/components/global-styles/typography-utils.js +17 -6
  354. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  355. package/build-module/components/global-styles/utils.js +4 -6
  356. package/build-module/components/global-styles/utils.js.map +1 -1
  357. package/build-module/components/grid/grid-item-movers.js +3 -3
  358. package/build-module/components/grid/grid-item-movers.js.map +1 -1
  359. package/build-module/components/iframe/get-compatibility-styles.js +1 -1
  360. package/build-module/components/iframe/get-compatibility-styles.js.map +1 -1
  361. package/build-module/components/iframe/index.js +5 -5
  362. package/build-module/components/iframe/index.js.map +1 -1
  363. package/build-module/components/inner-blocks/index.js +2 -4
  364. package/build-module/components/inner-blocks/index.js.map +1 -1
  365. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +3 -3
  366. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  367. package/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +4 -1
  368. package/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -1
  369. package/build-module/components/inserter/block-patterns-tab/index.js +4 -1
  370. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
  371. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js +23 -13
  372. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  373. package/build-module/components/inserter/index.js +4 -11
  374. package/build-module/components/inserter/index.js.map +1 -1
  375. package/build-module/components/inserter/library.js +2 -4
  376. package/build-module/components/inserter/library.js.map +1 -1
  377. package/build-module/components/inserter/media-tab/hooks.js +3 -3
  378. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  379. package/build-module/components/inserter/media-tab/media-list.js +1 -8
  380. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  381. package/build-module/components/inserter/media-tab/media-preview.js +10 -8
  382. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  383. package/build-module/components/inserter/media-tab/media-tab.js +4 -1
  384. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
  385. package/build-module/components/inserter/menu.js +7 -24
  386. package/build-module/components/inserter/menu.js.map +1 -1
  387. package/build-module/components/inserter/quick-inserter.js +5 -6
  388. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  389. package/build-module/components/inserter-list-item/index.js +4 -4
  390. package/build-module/components/inserter-list-item/index.js.map +1 -1
  391. package/build-module/components/inserter-listbox/index.js +3 -11
  392. package/build-module/components/inserter-listbox/index.js.map +1 -1
  393. package/build-module/components/inserter-listbox/item.js +7 -12
  394. package/build-module/components/inserter-listbox/item.js.map +1 -1
  395. package/build-module/components/inserter-listbox/row.js +2 -10
  396. package/build-module/components/inserter-listbox/row.js.map +1 -1
  397. package/build-module/components/inspector-controls/groups.js +2 -0
  398. package/build-module/components/inspector-controls/groups.js.map +1 -1
  399. package/build-module/components/inspector-controls-tabs/index.js +4 -1
  400. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  401. package/build-module/components/inspector-controls-tabs/settings-tab.js +3 -1
  402. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  403. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +2 -1
  404. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  405. package/build-module/components/inspector-popover-header/index.js +8 -2
  406. package/build-module/components/inspector-popover-header/index.js.map +1 -1
  407. package/build-module/components/letter-spacing-control/index.js +7 -4
  408. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  409. package/build-module/components/link-control/index.js +19 -10
  410. package/build-module/components/link-control/index.js.map +1 -1
  411. package/build-module/components/link-control/settings-drawer.js +4 -1
  412. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  413. package/build-module/components/list-view/block-select-button.js +4 -1
  414. package/build-module/components/list-view/block-select-button.js.map +1 -1
  415. package/build-module/components/list-view/index.js +3 -7
  416. package/build-module/components/list-view/index.js.map +1 -1
  417. package/build-module/components/media-placeholder/index.js +32 -11
  418. package/build-module/components/media-placeholder/index.js.map +1 -1
  419. package/build-module/components/media-replace-flow/index.js +8 -1
  420. package/build-module/components/media-replace-flow/index.js.map +1 -1
  421. package/build-module/components/provider/use-block-sync.js +19 -19
  422. package/build-module/components/provider/use-block-sync.js.map +1 -1
  423. package/build-module/components/rich-text/event-listeners/paste-handler.js +12 -1
  424. package/build-module/components/rich-text/event-listeners/paste-handler.js.map +1 -1
  425. package/build-module/components/rich-text/index.js +39 -31
  426. package/build-module/components/rich-text/index.js.map +1 -1
  427. package/build-module/components/rich-text/use-mark-persistent.js +5 -5
  428. package/build-module/components/rich-text/use-mark-persistent.js.map +1 -1
  429. package/build-module/components/skip-to-selected-block/index.js +4 -1
  430. package/build-module/components/skip-to-selected-block/index.js.map +1 -1
  431. package/build-module/components/tool-selector/index.js +4 -1
  432. package/build-module/components/tool-selector/index.js.map +1 -1
  433. package/build-module/components/url-input/button.js +12 -3
  434. package/build-module/components/url-input/button.js.map +1 -1
  435. package/build-module/components/url-input/index.js +4 -1
  436. package/build-module/components/url-input/index.js.map +1 -1
  437. package/build-module/components/use-block-drop-zone/index.js +31 -7
  438. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  439. package/build-module/components/writing-flow/index.js +2 -1
  440. package/build-module/components/writing-flow/index.js.map +1 -1
  441. package/build-module/components/writing-flow/use-arrow-nav.js +4 -1
  442. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  443. package/build-module/components/writing-flow/use-event-redirect.js +60 -0
  444. package/build-module/components/writing-flow/use-event-redirect.js.map +1 -0
  445. package/build-module/components/writing-flow/use-input.js +31 -1
  446. package/build-module/components/writing-flow/use-input.js.map +1 -1
  447. package/build-module/components/writing-flow/use-select-all.js +14 -1
  448. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  449. package/build-module/components/writing-flow/use-selection-observer.js +16 -2
  450. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  451. package/build-module/components/writing-flow/use-tab-nav.js +4 -4
  452. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  453. package/build-module/components/writing-flow/utils.js +26 -0
  454. package/build-module/components/writing-flow/utils.js.map +1 -1
  455. package/build-module/hooks/block-bindings.js +34 -31
  456. package/build-module/hooks/block-bindings.js.map +1 -1
  457. package/build-module/hooks/content-lock-ui.js +10 -30
  458. package/build-module/hooks/content-lock-ui.js.map +1 -1
  459. package/build-module/hooks/duotone.js +0 -4
  460. package/build-module/hooks/duotone.js.map +1 -1
  461. package/build-module/hooks/layout.js +4 -2
  462. package/build-module/hooks/layout.js.map +1 -1
  463. package/build-module/hooks/spacing-visualizer.js +3 -3
  464. package/build-module/hooks/spacing-visualizer.js.map +1 -1
  465. package/build-module/hooks/style.js +1 -5
  466. package/build-module/hooks/style.js.map +1 -1
  467. package/build-module/hooks/use-bindings-attributes.js +19 -20
  468. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  469. package/build-module/hooks/use-zoom-out.js +7 -7
  470. package/build-module/hooks/use-zoom-out.js.map +1 -1
  471. package/build-module/layouts/constrained.js +44 -45
  472. package/build-module/layouts/constrained.js.map +1 -1
  473. package/build-module/layouts/flex.js +4 -1
  474. package/build-module/layouts/flex.js.map +1 -1
  475. package/build-module/layouts/grid.js +21 -18
  476. package/build-module/layouts/grid.js.map +1 -1
  477. package/build-module/layouts/utils.js +1 -7
  478. package/build-module/layouts/utils.js.map +1 -1
  479. package/build-module/private-apis.js +3 -4
  480. package/build-module/private-apis.js.map +1 -1
  481. package/build-module/store/actions.js +2 -7
  482. package/build-module/store/actions.js.map +1 -1
  483. package/build-module/store/private-actions.js +1 -0
  484. package/build-module/store/private-actions.js.map +1 -1
  485. package/build-module/store/private-keys.js +1 -0
  486. package/build-module/store/private-keys.js.map +1 -1
  487. package/build-module/store/private-selectors.js +15 -18
  488. package/build-module/store/private-selectors.js.map +1 -1
  489. package/build-module/store/reducer.js +1 -9
  490. package/build-module/store/reducer.js.map +1 -1
  491. package/build-module/store/selectors.js +22 -46
  492. package/build-module/store/selectors.js.map +1 -1
  493. package/build-module/store/utils.js +46 -0
  494. package/build-module/store/utils.js.map +1 -1
  495. package/build-module/utils/block-bindings.js +17 -12
  496. package/build-module/utils/block-bindings.js.map +1 -1
  497. package/build-module/utils/dom.js +99 -0
  498. package/build-module/utils/dom.js.map +1 -1
  499. package/build-module/utils/get-font-styles-and-weights.js +4 -4
  500. package/build-module/utils/get-font-styles-and-weights.js.map +1 -1
  501. package/build-module/utils/transform-styles/index.js +120 -16
  502. package/build-module/utils/transform-styles/index.js.map +1 -1
  503. package/build-style/content-rtl.css +19 -11
  504. package/build-style/content.css +19 -11
  505. package/build-style/style-rtl.css +27 -108
  506. package/build-style/style.css +27 -108
  507. package/build-types/utils/dom.d.ts +25 -0
  508. package/build-types/utils/dom.d.ts.map +1 -1
  509. package/package.json +34 -32
  510. package/src/components/block-alignment-matrix-control/index.js +1 -1
  511. package/src/components/block-breadcrumb/index.js +2 -2
  512. package/src/components/block-breadcrumb/style.scss +1 -30
  513. package/src/components/block-canvas/index.js +9 -1
  514. package/src/components/block-compare/block-view.js +6 -1
  515. package/src/components/block-compare/test/__snapshots__/block-view.js.snap +1 -1
  516. package/src/components/block-draggable/content.scss +1 -1
  517. package/src/components/block-draggable/index.js +4 -4
  518. package/src/components/block-draggable/style.scss +1 -1
  519. package/src/components/block-draggable/use-scroll-when-dragging.js +25 -25
  520. package/src/components/block-edit/multiple-usage-warning.js +2 -0
  521. package/src/components/block-inspector/index.js +22 -7
  522. package/src/components/block-inspector/style.scss +2 -4
  523. package/src/components/block-list/block-invalid-warning.js +3 -2
  524. package/src/components/block-list/block.js +6 -2
  525. package/src/components/block-list/content.scss +23 -3
  526. package/src/components/block-list/index.js +59 -38
  527. package/src/components/block-list/use-block-props/index.js +3 -0
  528. package/src/components/block-list/use-block-props/use-focus-first-element.js +1 -0
  529. package/src/components/block-list/use-block-props/use-zoom-out-mode-exit.js +56 -0
  530. package/src/components/block-list/zoom-out-separator.js +110 -0
  531. package/src/components/block-lock/style.scss +1 -1
  532. package/src/components/block-lock/toolbar.js +3 -3
  533. package/src/components/block-mover/button.js +1 -0
  534. package/src/components/block-mover/index.js +1 -0
  535. package/src/components/block-mover/style.scss +1 -1
  536. package/src/components/block-navigation/dropdown.js +2 -0
  537. package/src/components/block-pattern-setup/index.js +3 -15
  538. package/src/components/block-pattern-setup/setup-toolbar.js +17 -4
  539. package/src/components/block-pattern-setup/style.scss +2 -2
  540. package/src/components/block-patterns-list/index.js +15 -18
  541. package/src/components/block-patterns-list/style.scss +2 -2
  542. package/src/components/block-patterns-paging/index.js +6 -0
  543. package/src/components/block-popover/index.js +7 -28
  544. package/src/components/block-popover/style.scss +1 -1
  545. package/src/components/block-quick-navigation/index.js +2 -0
  546. package/src/components/block-settings-menu-controls/index.js +7 -1
  547. package/src/components/block-switcher/index.js +45 -23
  548. package/src/components/block-switcher/pattern-transformations-menu.js +3 -12
  549. package/src/components/block-switcher/style.scss +5 -30
  550. package/src/components/block-toolbar/index.js +27 -11
  551. package/src/components/block-toolbar/shuffle.js +9 -7
  552. package/src/components/block-toolbar/style.scss +4 -1
  553. package/src/components/block-tools/block-selection-button.js +4 -0
  554. package/src/components/block-tools/block-toolbar-popover.js +10 -6
  555. package/src/components/block-tools/index.js +1 -1
  556. package/src/components/block-tools/style.scss +3 -4
  557. package/src/components/block-tools/use-block-toolbar-popover-props.js +2 -1
  558. package/src/components/block-tools/zoom-out-mode-inserters.js +2 -17
  559. package/src/components/block-tools/zoom-out-popover.js +3 -7
  560. package/src/components/block-tools/zoom-out-toolbar.js +31 -6
  561. package/src/components/block-variation-picker/README.md +2 -2
  562. package/src/components/block-variation-picker/index.js +6 -1
  563. package/src/components/block-variation-transforms/index.js +2 -0
  564. package/src/components/block-variation-transforms/style.scss +1 -1
  565. package/src/components/button-block-appender/content.scss +0 -1
  566. package/src/components/button-block-appender/index.js +30 -28
  567. package/src/components/color-palette/test/control.js +15 -2
  568. package/src/components/colors-gradients/dropdown.js +5 -1
  569. package/src/components/colors-gradients/style.scss +4 -4
  570. package/src/components/content-lock/index.js +1 -0
  571. package/src/components/content-lock/modify-content-lock-menu-item.js +58 -0
  572. package/src/components/default-block-appender/content.scss +0 -1
  573. package/src/components/editor-styles/index.js +4 -3
  574. package/src/components/global-styles/background-panel.js +6 -14
  575. package/src/components/global-styles/color-panel.js +8 -4
  576. package/src/components/global-styles/color-panel.native.js +2 -2
  577. package/src/components/global-styles/dimensions-panel.js +40 -40
  578. package/src/components/global-styles/filters-panel.js +5 -1
  579. package/src/components/global-styles/shadow-panel-components.js +11 -15
  580. package/src/components/global-styles/style.scss +3 -4
  581. package/src/components/global-styles/test/typography-utils.js +96 -5
  582. package/src/components/global-styles/test/utils.js +10 -0
  583. package/src/components/global-styles/typography-utils.js +22 -6
  584. package/src/components/global-styles/utils.js +4 -6
  585. package/src/components/grid/grid-item-movers.js +3 -3
  586. package/src/components/grid/style.scss +1 -1
  587. package/src/components/iframe/get-compatibility-styles.js +6 -1
  588. package/src/components/iframe/index.js +5 -5
  589. package/src/components/inner-blocks/index.js +2 -2
  590. package/src/components/inner-blocks/use-inner-block-template-sync.js +3 -3
  591. package/src/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +2 -0
  592. package/src/components/inserter/block-patterns-tab/index.js +2 -0
  593. package/src/components/inserter/block-patterns-tab/pattern-category-previews.js +32 -15
  594. package/src/components/inserter/index.js +4 -10
  595. package/src/components/inserter/library.js +0 -2
  596. package/src/components/inserter/media-tab/hooks.js +3 -3
  597. package/src/components/inserter/media-tab/media-list.js +1 -7
  598. package/src/components/inserter/media-tab/media-preview.js +15 -8
  599. package/src/components/inserter/media-tab/media-tab.js +2 -0
  600. package/src/components/inserter/menu.js +15 -29
  601. package/src/components/inserter/quick-inserter.js +3 -4
  602. package/src/components/inserter/style.scss +10 -8
  603. package/src/components/inserter-list-item/index.js +4 -4
  604. package/src/components/inserter-list-item/style.scss +1 -3
  605. package/src/components/inserter-listbox/index.js +2 -11
  606. package/src/components/inserter-listbox/item.js +12 -14
  607. package/src/components/inserter-listbox/row.js +2 -9
  608. package/src/components/inspector-controls/groups.js +2 -0
  609. package/src/components/inspector-controls-tabs/index.js +2 -0
  610. package/src/components/inspector-controls-tabs/settings-tab.js +1 -0
  611. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +5 -2
  612. package/src/components/inspector-popover-header/index.js +4 -0
  613. package/src/components/letter-spacing-control/README.md +8 -1
  614. package/src/components/letter-spacing-control/index.js +7 -4
  615. package/src/components/link-control/index.js +17 -8
  616. package/src/components/link-control/settings-drawer.js +2 -0
  617. package/src/components/link-control/style.scss +1 -3
  618. package/src/components/list-view/block-select-button.js +2 -0
  619. package/src/components/list-view/index.js +3 -8
  620. package/src/components/list-view/style.scss +14 -16
  621. package/src/components/media-placeholder/README.md +2 -2
  622. package/src/components/media-placeholder/index.js +21 -4
  623. package/src/components/media-replace-flow/index.js +12 -1
  624. package/src/components/provider/use-block-sync.js +20 -20
  625. package/src/components/responsive-block-control/README.md +3 -27
  626. package/src/components/rich-text/content.scss +1 -1
  627. package/src/components/rich-text/event-listeners/paste-handler.js +6 -1
  628. package/src/components/rich-text/index.js +54 -41
  629. package/src/components/rich-text/style.scss +1 -1
  630. package/src/components/rich-text/use-mark-persistent.js +5 -5
  631. package/src/components/skip-to-selected-block/index.js +2 -0
  632. package/src/components/spacing-sizes-control/style.scss +1 -0
  633. package/src/components/tool-selector/index.js +2 -0
  634. package/src/components/url-input/button.js +6 -0
  635. package/src/components/url-input/index.js +2 -0
  636. package/src/components/url-popover/stories/index.story.js +7 -1
  637. package/src/components/use-block-drop-zone/index.js +37 -5
  638. package/src/components/warning/content.scss +3 -10
  639. package/src/components/writing-flow/index.js +2 -0
  640. package/src/components/writing-flow/use-arrow-nav.js +9 -2
  641. package/src/components/writing-flow/use-event-redirect.js +72 -0
  642. package/src/components/writing-flow/use-input.js +36 -1
  643. package/src/components/writing-flow/use-select-all.js +18 -1
  644. package/src/components/writing-flow/use-selection-observer.js +23 -3
  645. package/src/components/writing-flow/use-tab-nav.js +4 -4
  646. package/src/components/writing-flow/utils.js +30 -0
  647. package/src/hooks/block-bindings.js +42 -43
  648. package/src/hooks/block-bindings.scss +1 -9
  649. package/src/hooks/content-lock-ui.js +11 -36
  650. package/src/hooks/duotone.js +0 -4
  651. package/src/hooks/layout.js +2 -1
  652. package/src/hooks/layout.scss +5 -27
  653. package/src/hooks/spacing-visualizer.js +3 -3
  654. package/src/hooks/style.js +1 -4
  655. package/src/hooks/use-bindings-attributes.js +23 -24
  656. package/src/hooks/use-zoom-out.js +7 -7
  657. package/src/layouts/constrained.js +53 -48
  658. package/src/layouts/flex.js +2 -0
  659. package/src/layouts/grid.js +29 -22
  660. package/src/layouts/test/grid.js +2 -2
  661. package/src/layouts/test/utils.js +6 -8
  662. package/src/layouts/utils.js +1 -9
  663. package/src/private-apis.js +2 -2
  664. package/src/store/actions.js +4 -6
  665. package/src/store/private-actions.js +1 -0
  666. package/src/store/private-keys.js +1 -0
  667. package/src/store/private-selectors.js +18 -14
  668. package/src/store/reducer.js +0 -7
  669. package/src/store/selectors.js +32 -51
  670. package/src/store/utils.js +50 -0
  671. package/src/utils/block-bindings.js +15 -16
  672. package/src/utils/dom.js +117 -0
  673. package/src/utils/get-font-styles-and-weights.js +12 -4
  674. package/src/utils/test/get-font-styles-and-weights.js +148 -0
  675. package/src/utils/test/transform-styles.js +259 -50
  676. package/src/utils/transform-styles/index.js +132 -21
  677. package/tsconfig.json +1 -0
  678. package/tsconfig.tsbuildinfo +1 -1
  679. package/src/utils/test/__snapshots__/transform-styles.js.snap +0 -109
@@ -274,6 +274,23 @@ export function isDropTargetValid(
274
274
  return areBlocksAllowed && targetMatchesDraggedBlockParents;
275
275
  }
276
276
 
277
+ /**
278
+ * Checks if the given element is an insertion point.
279
+ *
280
+ * @param {EventTarget|null} targetToCheck - The element to check.
281
+ * @param {Document} ownerDocument - The owner document of the element.
282
+ * @return {boolean} True if the element is a insertion point, false otherwise.
283
+ */
284
+ function isInsertionPoint( targetToCheck, ownerDocument ) {
285
+ const { defaultView } = ownerDocument;
286
+
287
+ return !! (
288
+ defaultView &&
289
+ targetToCheck instanceof defaultView.HTMLElement &&
290
+ targetToCheck.dataset.isInsertionPoint
291
+ );
292
+ }
293
+
277
294
  /**
278
295
  * @typedef {Object} WPBlockDropZoneConfig
279
296
  * @property {?HTMLElement} dropZoneElement Optional element to be used as the drop zone.
@@ -313,8 +330,8 @@ export default function useBlockDropZone( {
313
330
  getAllowedBlocks,
314
331
  isDragging,
315
332
  isGroupable,
316
- getSettings,
317
333
  isZoomOutMode,
334
+ getSectionRootClientId,
318
335
  } = unlock( useSelect( blockEditorStore ) );
319
336
  const {
320
337
  showInsertionPoint,
@@ -360,7 +377,7 @@ export default function useBlockDropZone( {
360
377
  return;
361
378
  }
362
379
 
363
- const { sectionRootClientId } = unlock( getSettings() );
380
+ const sectionRootClientId = getSectionRootClientId();
364
381
 
365
382
  // In Zoom Out mode, if the target is not the section root provided by settings then
366
383
  // do not allow dropping as the drop target is not within the root (that which is
@@ -422,6 +439,10 @@ export default function useBlockDropZone( {
422
439
  const [ targetIndex, operation, nearestSide ] =
423
440
  dropTargetPosition;
424
441
 
442
+ if ( isZoomOutMode() && operation !== 'insert' ) {
443
+ return;
444
+ }
445
+
425
446
  if ( operation === 'group' ) {
426
447
  const targetBlock = blocks[ targetIndex ];
427
448
  const areAllImages = [
@@ -492,6 +513,8 @@ export default function useBlockDropZone( {
492
513
  getBlockNamesByClientId,
493
514
  getDraggedBlockClientIds,
494
515
  getBlockType,
516
+ getSectionRootClientId,
517
+ isZoomOutMode,
495
518
  getBlocks,
496
519
  getBlockListSettings,
497
520
  dropZoneElement,
@@ -504,8 +527,6 @@ export default function useBlockDropZone( {
504
527
  isGroupable,
505
528
  getBlockVariations,
506
529
  getGroupingBlockName,
507
- getSettings,
508
- isZoomOutMode,
509
530
  ]
510
531
  ),
511
532
  200
@@ -521,7 +542,18 @@ export default function useBlockDropZone( {
521
542
  // https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget
522
543
  throttled( event, event.currentTarget.ownerDocument );
523
544
  },
524
- onDragLeave() {
545
+ onDragLeave( event ) {
546
+ const { ownerDocument } = event.currentTarget;
547
+
548
+ // If the drag event is leaving the drop zone and entering an insertion point,
549
+ // do not hide the insertion point as it is conceptually within the dropzone.
550
+ if (
551
+ isInsertionPoint( event.relatedTarget, ownerDocument ) ||
552
+ isInsertionPoint( event.target, ownerDocument )
553
+ ) {
554
+ return;
555
+ }
556
+
525
557
  throttled.cancel();
526
558
  hideInsertionPoint();
527
559
  },
@@ -7,7 +7,7 @@
7
7
 
8
8
  // Block UI appearance.
9
9
  border: $border-width solid $gray-900;
10
- border-radius: $radius-block-ui;
10
+ border-radius: $radius-small;
11
11
  background-color: $white;
12
12
 
13
13
  .block-editor-warning__message {
@@ -30,21 +30,14 @@
30
30
  flex-wrap: wrap;
31
31
  align-items: baseline;
32
32
  width: 100%;
33
+ gap: $grid-unit-15;
33
34
  }
34
35
 
35
36
  .block-editor-warning__actions {
36
37
  align-items: center;
37
38
  display: flex;
38
- margin-top: 1em;
39
+ gap: $grid-unit-10;
39
40
  }
40
-
41
- .block-editor-warning__action {
42
- margin: 0 $grid-unit-10 0 0;
43
- }
44
- }
45
-
46
- .block-editor-warning__secondary {
47
- margin: auto 0 auto $grid-unit-10;
48
41
  }
49
42
 
50
43
  .components-popover.block-editor-warning__dropdown {
@@ -23,6 +23,7 @@ import useSelectionObserver from './use-selection-observer';
23
23
  import useClickSelection from './use-click-selection';
24
24
  import useInput from './use-input';
25
25
  import useClipboardHandler from './use-clipboard-handler';
26
+ import useEventRedirect from './use-event-redirect';
26
27
  import { store as blockEditorStore } from '../../store';
27
28
 
28
29
  export function useWritingFlow() {
@@ -65,6 +66,7 @@ export function useWritingFlow() {
65
66
  },
66
67
  [ hasMultiSelection ]
67
68
  ),
69
+ useEventRedirect(),
68
70
  ] ),
69
71
  after,
70
72
  ];
@@ -19,6 +19,7 @@ import { useRefEffect } from '@wordpress/compose';
19
19
  */
20
20
  import { getBlockClientId, isInSameBlock } from '../../utils/dom';
21
21
  import { store as blockEditorStore } from '../../store';
22
+ import { getSelectionRoot } from './utils';
22
23
 
23
24
  /**
24
25
  * Returns true if the element should consider edge navigation upon a keyboard
@@ -190,8 +191,7 @@ export default function useArrowNav() {
190
191
  return;
191
192
  }
192
193
 
193
- const { keyCode, target, shiftKey, ctrlKey, altKey, metaKey } =
194
- event;
194
+ const { keyCode, shiftKey, ctrlKey, altKey, metaKey } = event;
195
195
  const isUp = keyCode === UP;
196
196
  const isDown = keyCode === DOWN;
197
197
  const isLeft = keyCode === LEFT;
@@ -233,6 +233,11 @@ export default function useArrowNav() {
233
233
  return;
234
234
  }
235
235
 
236
+ const target =
237
+ ownerDocument.activeElement === node
238
+ ? getSelectionRoot( ownerDocument )
239
+ : event.target;
240
+
236
241
  // Abort if our current target is not a candidate for navigation
237
242
  // (e.g. preserve native input behaviors).
238
243
  if ( ! isNavigationCandidate( target, keyCode, hasModifier ) ) {
@@ -274,6 +279,7 @@ export default function useArrowNav() {
274
279
  ( altKey ? isHorizontalEdge( target, isReverseDir ) : true ) &&
275
280
  ! keepCaretInsideBlock
276
281
  ) {
282
+ node.contentEditable = false;
277
283
  const closestTabbable = getClosestTabbable(
278
284
  target,
279
285
  isReverse,
@@ -297,6 +303,7 @@ export default function useArrowNav() {
297
303
  isHorizontalEdge( target, isReverseDir ) &&
298
304
  ! keepCaretInsideBlock
299
305
  ) {
306
+ node.contentEditable = false;
300
307
  const closestTabbable = getClosestTabbable(
301
308
  target,
302
309
  isReverseDir,
@@ -0,0 +1,72 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useRefEffect } from '@wordpress/compose';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { getSelectionRoot } from './utils';
10
+
11
+ /**
12
+ * Whenever content editable is enabled on writing flow, it will have focus, so
13
+ * we need to dispatch some events to the root of the selection to ensure
14
+ * compatibility with rich text. In the future, perhaps the rich text event
15
+ * handlers should be attached to the window instead.
16
+ *
17
+ * Alternatively, we could try to find a way to always maintain rich text focus.
18
+ */
19
+ export default function useEventRedirect() {
20
+ return useRefEffect( ( node ) => {
21
+ function onInput( event ) {
22
+ if ( event.target !== node ) {
23
+ return;
24
+ }
25
+
26
+ const { ownerDocument } = node;
27
+ const { defaultView } = ownerDocument;
28
+ const prototype = Object.getPrototypeOf( event );
29
+ const constructorName = prototype.constructor.name;
30
+ const Constructor = defaultView[ constructorName ];
31
+ const root = getSelectionRoot( ownerDocument );
32
+
33
+ if ( ! root || root === node ) {
34
+ return;
35
+ }
36
+
37
+ const init = {};
38
+
39
+ for ( const key in event ) {
40
+ init[ key ] = event[ key ];
41
+ }
42
+
43
+ init.bubbles = false;
44
+
45
+ const newEvent = new Constructor( event.type, init );
46
+ const cancelled = ! root.dispatchEvent( newEvent );
47
+
48
+ if ( cancelled ) {
49
+ event.preventDefault();
50
+ }
51
+ }
52
+
53
+ const events = [
54
+ 'beforeinput',
55
+ 'input',
56
+ 'compositionstart',
57
+ 'compositionend',
58
+ 'compositionupdate',
59
+ 'keydown',
60
+ ];
61
+
62
+ events.forEach( ( eventType ) => {
63
+ node.addEventListener( eventType, onInput );
64
+ } );
65
+
66
+ return () => {
67
+ events.forEach( ( eventType ) => {
68
+ node.removeEventListener( eventType, onInput );
69
+ } );
70
+ };
71
+ }, [] );
72
+ }
@@ -16,6 +16,7 @@ import {
16
16
  * Internal dependencies
17
17
  */
18
18
  import { store as blockEditorStore } from '../../store';
19
+ import { getSelectionRoot } from './utils';
19
20
 
20
21
  /**
21
22
  * Handles input for selections across blocks.
@@ -49,7 +50,24 @@ export default function useInput() {
49
50
  // DOM. This will cause React errors (and the DOM should only be
50
51
  // altered in a controlled fashion).
51
52
  if ( node.contentEditable === 'true' ) {
52
- event.preventDefault();
53
+ const selection = node.ownerDocument.defaultView.getSelection();
54
+ const range = selection.rangeCount
55
+ ? selection.getRangeAt( 0 )
56
+ : null;
57
+ const root = getSelectionRoot( node.ownerDocument );
58
+
59
+ // If selection is contained within a nested editable, allow
60
+ // input. We need to ensure that selection is maintained.
61
+ if ( root ) {
62
+ node.contentEditable = false;
63
+ root.focus();
64
+ selection.removeAllRanges();
65
+ if ( range ) {
66
+ selection.addRange( range );
67
+ }
68
+ } else {
69
+ event.preventDefault();
70
+ }
53
71
  }
54
72
  }
55
73
 
@@ -59,6 +77,23 @@ export default function useInput() {
59
77
  }
60
78
 
61
79
  if ( ! hasMultiSelection() ) {
80
+ const { ownerDocument } = node;
81
+ if ( node === ownerDocument.activeElement ) {
82
+ if ( event.key === 'End' || event.key === 'Home' ) {
83
+ const selectionRoot = getSelectionRoot( ownerDocument );
84
+ const selection =
85
+ ownerDocument.defaultView.getSelection();
86
+ selection.selectAllChildren( selectionRoot );
87
+ const method =
88
+ event.key === 'End'
89
+ ? 'collapseToEnd'
90
+ : 'collapseToStart';
91
+ selection[ method ]();
92
+ event.preventDefault();
93
+ return;
94
+ }
95
+ }
96
+
62
97
  if ( event.keyCode === ENTER ) {
63
98
  if ( event.shiftKey || __unstableIsFullySelected() ) {
64
99
  return;
@@ -10,6 +10,7 @@ import { useRefEffect } from '@wordpress/compose';
10
10
  * Internal dependencies
11
11
  */
12
12
  import { store as blockEditorStore } from '../../store';
13
+ import { getSelectionRoot } from './utils';
13
14
 
14
15
  export default function useSelectAll() {
15
16
  const { getBlockOrder, getSelectedBlockClientIds, getBlockRootClientId } =
@@ -23,12 +24,27 @@ export default function useSelectAll() {
23
24
  return;
24
25
  }
25
26
 
27
+ const selectionRoot = getSelectionRoot( node.ownerDocument );
26
28
  const selectedClientIds = getSelectedBlockClientIds();
27
29
 
30
+ // Abort if there is selection, but it is not within a block.
31
+ if ( selectionRoot && ! selectedClientIds.length ) {
32
+ return;
33
+ }
34
+
28
35
  if (
36
+ selectionRoot &&
29
37
  selectedClientIds.length < 2 &&
30
- ! isEntirelySelected( event.target )
38
+ ! isEntirelySelected( selectionRoot )
31
39
  ) {
40
+ if ( node === node.ownerDocument.activeElement ) {
41
+ event.preventDefault();
42
+ node.ownerDocument.defaultView
43
+ .getSelection()
44
+ .selectAllChildren( selectionRoot );
45
+ return;
46
+ }
47
+
32
48
  return;
33
49
  }
34
50
 
@@ -45,6 +61,7 @@ export default function useSelectAll() {
45
61
  node.ownerDocument.defaultView
46
62
  .getSelection()
47
63
  .removeAllRanges();
64
+ node.contentEditable = 'false';
48
65
  selectBlock( rootClientId );
49
66
  }
50
67
  return;
@@ -4,6 +4,7 @@
4
4
  import { useSelect, useDispatch } from '@wordpress/data';
5
5
  import { useRefEffect } from '@wordpress/compose';
6
6
  import { create } from '@wordpress/rich-text';
7
+ import { isSelectionForward } from '@wordpress/dom';
7
8
 
8
9
  /**
9
10
  * Internal dependencies
@@ -53,6 +54,14 @@ function extractSelectionEndNode( selection ) {
53
54
  return focusNode;
54
55
  }
55
56
 
57
+ // When the selection is forward (the selection ends with the focus node),
58
+ // the selection may extend into the next element with an offset of 0. This
59
+ // may trigger multi selection even though the selection does not visually
60
+ // end in the next block.
61
+ if ( focusOffset === 0 && isSelectionForward( selection ) ) {
62
+ return focusNode.previousSibling ?? focusNode.parentElement;
63
+ }
64
+
56
65
  return focusNode.childNodes[ focusOffset ];
57
66
  }
58
67
 
@@ -98,8 +107,12 @@ function getRichTextElement( node ) {
98
107
  export default function useSelectionObserver() {
99
108
  const { multiSelect, selectBlock, selectionChange } =
100
109
  useDispatch( blockEditorStore );
101
- const { getBlockParents, getBlockSelectionStart, isMultiSelecting } =
102
- useSelect( blockEditorStore );
110
+ const {
111
+ getBlockParents,
112
+ getBlockSelectionStart,
113
+ isMultiSelecting,
114
+ getSelectedBlockClientId,
115
+ } = useSelect( blockEditorStore );
103
116
  return useRefEffect(
104
117
  ( node ) => {
105
118
  const { ownerDocument } = node;
@@ -182,10 +195,17 @@ export default function useSelectionObserver() {
182
195
  return;
183
196
  }
184
197
 
198
+ setContentEditableWrapper(
199
+ node,
200
+ !! ( startClientId && endClientId )
201
+ );
202
+
185
203
  const isSingularSelection = startClientId === endClientId;
186
204
  if ( isSingularSelection ) {
187
205
  if ( ! isMultiSelecting() ) {
188
- selectBlock( startClientId );
206
+ if ( getSelectedBlockClientId() !== startClientId ) {
207
+ selectBlock( startClientId );
208
+ }
189
209
  } else {
190
210
  multiSelect( startClientId, startClientId );
191
211
  }
@@ -36,12 +36,12 @@ export default function useTabNav() {
36
36
 
37
37
  // Reference that holds the a flag for enabling or disabling
38
38
  // capturing on the focus capture elements.
39
- const noCapture = useRef();
39
+ const noCaptureRef = useRef();
40
40
 
41
41
  function onFocusCapture( event ) {
42
42
  // Do not capture incoming focus if set by us in WritingFlow.
43
- if ( noCapture.current ) {
44
- noCapture.current = null;
43
+ if ( noCaptureRef.current ) {
44
+ noCaptureRef.current = null;
45
45
  } else if ( hasMultiSelection() ) {
46
46
  container.current.focus();
47
47
  } else if ( getSelectedBlockClientId() ) {
@@ -165,7 +165,7 @@ export default function useTabNav() {
165
165
  // Disable focus capturing on the focus capture element, so it
166
166
  // doesn't refocus this block and so it allows default behaviour
167
167
  // (moving focus to the next tabbable element).
168
- noCapture.current = true;
168
+ noCaptureRef.current = true;
169
169
 
170
170
  // Focusing the focus capture element, which is located above and
171
171
  // below the editor, should not scroll the page all the way up or
@@ -116,3 +116,33 @@ function toPlainText( html ) {
116
116
  // Merge any consecutive line breaks
117
117
  return plainText.replace( /\n\n+/g, '\n\n' );
118
118
  }
119
+
120
+ /**
121
+ * Gets the current content editable root element based on the selection.
122
+ * @param {Document} ownerDocument
123
+ * @return {Element|undefined} The content editable root element.
124
+ */
125
+ export function getSelectionRoot( ownerDocument ) {
126
+ const { defaultView } = ownerDocument;
127
+ const { anchorNode, focusNode } = defaultView.getSelection();
128
+
129
+ if ( ! anchorNode || ! focusNode ) {
130
+ return;
131
+ }
132
+
133
+ const anchorElement = (
134
+ anchorNode.nodeType === anchorNode.ELEMENT_NODE
135
+ ? anchorNode
136
+ : anchorNode.parentElement
137
+ ).closest( '[contenteditable]' );
138
+
139
+ if ( ! anchorElement ) {
140
+ return;
141
+ }
142
+
143
+ if ( ! anchorElement.contains( focusNode ) ) {
144
+ return;
145
+ }
146
+
147
+ return anchorElement;
148
+ }
@@ -9,11 +9,10 @@ import {
9
9
  __experimentalText as Text,
10
10
  __experimentalToolsPanel as ToolsPanel,
11
11
  __experimentalToolsPanelItem as ToolsPanelItem,
12
- __experimentalTruncate as Truncate,
13
12
  __experimentalVStack as VStack,
14
13
  privateApis as componentsPrivateApis,
15
14
  } from '@wordpress/components';
16
- import { useRegistry } from '@wordpress/data';
15
+ import { useRegistry, useSelect } from '@wordpress/data';
17
16
  import { useContext, Fragment } from '@wordpress/element';
18
17
  import { useViewportMatch } from '@wordpress/compose';
19
18
 
@@ -28,15 +27,9 @@ import { unlock } from '../lock-unlock';
28
27
  import InspectorControls from '../components/inspector-controls';
29
28
  import BlockContext from '../components/block-context';
30
29
  import { useBlockBindingsUtils } from '../utils/block-bindings';
30
+ import { store as blockEditorStore } from '../store';
31
31
 
32
- const {
33
- DropdownMenuV2: DropdownMenu,
34
- DropdownMenuGroupV2: DropdownMenuGroup,
35
- DropdownMenuRadioItemV2: DropdownMenuRadioItem,
36
- DropdownMenuItemLabelV2: DropdownMenuItemLabel,
37
- DropdownMenuItemHelpTextV2: DropdownMenuItemHelpText,
38
- DropdownMenuSeparatorV2: DropdownMenuSeparator,
39
- } = unlock( componentsPrivateApis );
32
+ const { DropdownMenuV2 } = unlock( componentsPrivateApis );
40
33
 
41
34
  const useToolsPanelDropdownMenuProps = () => {
42
35
  const isMobile = useViewportMatch( 'medium', '<' );
@@ -60,19 +53,14 @@ function BlockBindingsPanelDropdown( { fieldsList, attribute, binding } ) {
60
53
  <>
61
54
  { Object.entries( fieldsList ).map( ( [ name, fields ], i ) => (
62
55
  <Fragment key={ name }>
63
- <DropdownMenuGroup>
56
+ <DropdownMenuV2.Group>
64
57
  { Object.keys( fieldsList ).length > 1 && (
65
- <Text
66
- className="block-editor-bindings__source-label"
67
- upperCase
68
- variant="muted"
69
- aria-hidden
70
- >
58
+ <DropdownMenuV2.GroupLabel>
71
59
  { registeredSources[ name ].label }
72
- </Text>
60
+ </DropdownMenuV2.GroupLabel>
73
61
  ) }
74
62
  { Object.entries( fields ).map( ( [ key, value ] ) => (
75
- <DropdownMenuRadioItem
63
+ <DropdownMenuV2.RadioItem
76
64
  key={ key }
77
65
  onChange={ () =>
78
66
  updateBlockBindings( {
@@ -86,17 +74,17 @@ function BlockBindingsPanelDropdown( { fieldsList, attribute, binding } ) {
86
74
  value={ key }
87
75
  checked={ key === currentKey }
88
76
  >
89
- <DropdownMenuItemLabel>
77
+ <DropdownMenuV2.ItemLabel>
90
78
  { key }
91
- </DropdownMenuItemLabel>
92
- <DropdownMenuItemHelpText>
79
+ </DropdownMenuV2.ItemLabel>
80
+ <DropdownMenuV2.ItemHelpText>
93
81
  { value }
94
- </DropdownMenuItemHelpText>
95
- </DropdownMenuRadioItem>
82
+ </DropdownMenuV2.ItemHelpText>
83
+ </DropdownMenuV2.RadioItem>
96
84
  ) ) }
97
- </DropdownMenuGroup>
85
+ </DropdownMenuV2.Group>
98
86
  { i !== Object.keys( fieldsList ).length - 1 && (
99
- <DropdownMenuSeparator />
87
+ <DropdownMenuV2.Separator />
100
88
  ) }
101
89
  </Fragment>
102
90
  ) ) }
@@ -108,17 +96,19 @@ function BlockBindingsAttribute( { attribute, binding } ) {
108
96
  const { source: sourceName, args } = binding || {};
109
97
  const sourceProps =
110
98
  unlock( blocksPrivateApis ).getBlockBindingsSource( sourceName );
99
+ const isSourceInvalid = ! sourceProps;
111
100
  return (
112
- <VStack>
113
- <Truncate>{ attribute }</Truncate>
101
+ <VStack className="block-editor-bindings__item">
102
+ <Text truncate>{ attribute }</Text>
114
103
  { !! binding && (
115
104
  <Text
116
- variant="muted"
117
- className="block-editor-bindings__item-explanation"
105
+ truncate
106
+ variant={ ! isSourceInvalid && 'muted' }
107
+ isDestructive={ isSourceInvalid }
118
108
  >
119
- <Truncate>
120
- { args?.key || sourceProps?.label || sourceName }
121
- </Truncate>
109
+ { isSourceInvalid
110
+ ? __( 'Invalid source' )
111
+ : args?.key || sourceProps?.label || sourceName }
122
112
  </Text>
123
113
  ) }
124
114
  </VStack>
@@ -162,12 +152,11 @@ function EditableBlockBindingsPanelItems( {
162
152
  } );
163
153
  } }
164
154
  >
165
- <DropdownMenu
155
+ <DropdownMenuV2
166
156
  placement={
167
157
  isMobile ? 'bottom-start' : 'left-start'
168
158
  }
169
159
  gutter={ isMobile ? 8 : 36 }
170
- className="block-editor-bindings__popover"
171
160
  trigger={
172
161
  <Item>
173
162
  <BlockBindingsAttribute
@@ -182,7 +171,7 @@ function EditableBlockBindingsPanelItems( {
182
171
  attribute={ attribute }
183
172
  binding={ binding }
184
173
  />
185
- </DropdownMenu>
174
+ </DropdownMenuV2>
186
175
  </ToolsPanelItem>
187
176
  );
188
177
  } ) }
@@ -208,6 +197,13 @@ export const BlockBindingsPanel = ( { name: blockName, metadata } ) => {
208
197
  }
209
198
  } );
210
199
 
200
+ const { canUpdateBlockBindings } = useSelect( ( select ) => {
201
+ return {
202
+ canUpdateBlockBindings:
203
+ select( blockEditorStore ).getSettings().canUpdateBlockBindings,
204
+ };
205
+ }, [] );
206
+
211
207
  if ( ! bindableAttributes || bindableAttributes.length === 0 ) {
212
208
  return null;
213
209
  }
@@ -243,17 +239,16 @@ export const BlockBindingsPanel = ( { name: blockName, metadata } ) => {
243
239
  }
244
240
  } );
245
241
 
246
- // Lock the UI when the experiment is not enabled or there are no fields to connect to.
242
+ // Lock the UI when the user can't update bindings or there are no fields to connect to.
247
243
  const readOnly =
248
- ! window.__experimentalBlockBindingsUI ||
249
- ! Object.keys( fieldsList ).length;
244
+ ! canUpdateBlockBindings || ! Object.keys( fieldsList ).length;
250
245
 
251
246
  if ( readOnly && Object.keys( filteredBindings ).length === 0 ) {
252
247
  return null;
253
248
  }
254
249
 
255
250
  return (
256
- <InspectorControls>
251
+ <InspectorControls group="bindings">
257
252
  <ToolsPanel
258
253
  label={ __( 'Attributes' ) }
259
254
  resetAll={ () => {
@@ -275,9 +270,13 @@ export const BlockBindingsPanel = ( { name: blockName, metadata } ) => {
275
270
  />
276
271
  ) }
277
272
  </ItemGroup>
278
- <Text variant="muted">
279
- { __( 'Attributes connected to various sources.' ) }
280
- </Text>
273
+ <ItemGroup>
274
+ <Text variant="muted">
275
+ { __(
276
+ 'Attributes connected to custom fields or other dynamic data.'
277
+ ) }
278
+ </Text>
279
+ </ItemGroup>
281
280
  </ToolsPanel>
282
281
  </InspectorControls>
283
282
  );
@@ -1,14 +1,6 @@
1
1
  div.block-editor-bindings__panel {
2
2
  grid-template-columns: repeat(auto-fit, minmax(100%, 1fr));
3
- button:hover .block-editor-bindings__item-explanation {
3
+ button:hover .block-editor-bindings__item span {
4
4
  color: inherit;
5
5
  }
6
6
  }
7
-
8
- .block-editor-bindings__popover {
9
- // This won't be needed if `DropdownMenuGroup` component handles the label.
10
- .block-editor-bindings__source-label {
11
- grid-column: 2;
12
- margin: $grid-unit-10 0;
13
- }
14
- }