@wordpress/block-editor 14.1.0 → 14.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (630) 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 +8 -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 +4 -1
  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 +8 -2
  16. package/build/components/block-edit/multiple-usage-warning.js.map +1 -1
  17. package/build/components/block-inspector/index.js +27 -9
  18. package/build/components/block-inspector/index.js.map +1 -1
  19. package/build/components/block-list/block-invalid-warning.js +6 -3
  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/use-block-props/index.js +5 -1
  24. package/build/components/block-list/use-block-props/index.js.map +1 -1
  25. package/build/components/block-list/use-block-props/use-focus-first-element.js +1 -0
  26. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  27. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js +46 -0
  28. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +1 -0
  29. package/build/components/block-lock/toolbar.js +3 -3
  30. package/build/components/block-lock/toolbar.js.map +1 -1
  31. package/build/components/block-mover/button.js +4 -1
  32. package/build/components/block-mover/button.js.map +1 -1
  33. package/build/components/block-mover/index.js +4 -1
  34. package/build/components/block-mover/index.js.map +1 -1
  35. package/build/components/block-navigation/dropdown.js +4 -1
  36. package/build/components/block-navigation/dropdown.js.map +1 -1
  37. package/build/components/block-pattern-setup/index.js +1 -4
  38. package/build/components/block-pattern-setup/index.js.map +1 -1
  39. package/build/components/block-pattern-setup/setup-toolbar.js +22 -7
  40. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  41. package/build/components/block-patterns-list/index.js +11 -14
  42. package/build/components/block-patterns-list/index.js.map +1 -1
  43. package/build/components/block-patterns-paging/index.js +12 -3
  44. package/build/components/block-patterns-paging/index.js.map +1 -1
  45. package/build/components/block-popover/index.js +2 -15
  46. package/build/components/block-popover/index.js.map +1 -1
  47. package/build/components/block-quick-navigation/index.js +4 -1
  48. package/build/components/block-quick-navigation/index.js.map +1 -1
  49. package/build/components/block-settings-menu-controls/index.js +4 -0
  50. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  51. package/build/components/block-switcher/index.js +22 -17
  52. package/build/components/block-switcher/index.js.map +1 -1
  53. package/build/components/block-switcher/pattern-transformations-menu.js +1 -4
  54. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  55. package/build/components/block-toolbar/index.js +12 -11
  56. package/build/components/block-toolbar/index.js.map +1 -1
  57. package/build/components/block-toolbar/shuffle.js +6 -2
  58. package/build/components/block-toolbar/shuffle.js.map +1 -1
  59. package/build/components/block-tools/block-selection-button.js +8 -2
  60. package/build/components/block-tools/block-selection-button.js.map +1 -1
  61. package/build/components/block-tools/block-toolbar-popover.js +10 -6
  62. package/build/components/block-tools/block-toolbar-popover.js.map +1 -1
  63. package/build/components/block-tools/use-block-toolbar-popover-props.js +2 -1
  64. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  65. package/build/components/block-tools/zoom-out-mode-inserters.js +4 -9
  66. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  67. package/build/components/block-tools/zoom-out-popover.js +3 -4
  68. package/build/components/block-tools/zoom-out-popover.js.map +1 -1
  69. package/build/components/block-tools/zoom-out-toolbar.js +14 -5
  70. package/build/components/block-tools/zoom-out-toolbar.js.map +1 -1
  71. package/build/components/block-variation-picker/index.js +4 -1
  72. package/build/components/block-variation-picker/index.js.map +1 -1
  73. package/build/components/block-variation-transforms/index.js +4 -1
  74. package/build/components/block-variation-transforms/index.js.map +1 -1
  75. package/build/components/button-block-appender/index.js +14 -3
  76. package/build/components/button-block-appender/index.js.map +1 -1
  77. package/build/components/colors-gradients/dropdown.js +4 -1
  78. package/build/components/colors-gradients/dropdown.js.map +1 -1
  79. package/build/components/content-lock/index.js +13 -0
  80. package/build/components/content-lock/index.js.map +1 -0
  81. package/build/components/content-lock/modify-content-lock-menu-item.js +64 -0
  82. package/build/components/content-lock/modify-content-lock-menu-item.js.map +1 -0
  83. package/build/components/editor-styles/index.js +4 -3
  84. package/build/components/editor-styles/index.js.map +1 -1
  85. package/build/components/global-styles/background-panel.js +8 -12
  86. package/build/components/global-styles/background-panel.js.map +1 -1
  87. package/build/components/global-styles/color-panel.js +8 -5
  88. package/build/components/global-styles/color-panel.js.map +1 -1
  89. package/build/components/global-styles/color-panel.native.js +1 -1
  90. package/build/components/global-styles/color-panel.native.js.map +1 -1
  91. package/build/components/global-styles/dimensions-panel.js +34 -37
  92. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  93. package/build/components/global-styles/filters-panel.js +4 -1
  94. package/build/components/global-styles/filters-panel.js.map +1 -1
  95. package/build/components/global-styles/shadow-panel-components.js +13 -7
  96. package/build/components/global-styles/shadow-panel-components.js.map +1 -1
  97. package/build/components/global-styles/typography-utils.js +17 -6
  98. package/build/components/global-styles/typography-utils.js.map +1 -1
  99. package/build/components/global-styles/utils.js +4 -6
  100. package/build/components/global-styles/utils.js.map +1 -1
  101. package/build/components/grid/grid-item-movers.js +2 -2
  102. package/build/components/grid/grid-item-movers.js.map +1 -1
  103. package/build/components/iframe/index.js +5 -5
  104. package/build/components/iframe/index.js.map +1 -1
  105. package/build/components/inner-blocks/index.js +2 -4
  106. package/build/components/inner-blocks/index.js.map +1 -1
  107. package/build/components/inner-blocks/use-inner-block-template-sync.js +3 -3
  108. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  109. package/build/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +4 -1
  110. package/build/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -1
  111. package/build/components/inserter/block-patterns-tab/index.js +4 -1
  112. package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
  113. package/build/components/inserter/library.js +2 -4
  114. package/build/components/inserter/library.js.map +1 -1
  115. package/build/components/inserter/media-tab/hooks.js +3 -3
  116. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  117. package/build/components/inserter/media-tab/media-list.js +1 -4
  118. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  119. package/build/components/inserter/media-tab/media-preview.js +8 -2
  120. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  121. package/build/components/inserter/media-tab/media-tab.js +4 -1
  122. package/build/components/inserter/media-tab/media-tab.js.map +1 -1
  123. package/build/components/inserter/menu.js +7 -24
  124. package/build/components/inserter/menu.js.map +1 -1
  125. package/build/components/inserter/quick-inserter.js +4 -1
  126. package/build/components/inserter/quick-inserter.js.map +1 -1
  127. package/build/components/inserter-list-item/index.js +4 -4
  128. package/build/components/inserter-list-item/index.js.map +1 -1
  129. package/build/components/inserter-listbox/index.js +3 -7
  130. package/build/components/inserter-listbox/index.js.map +1 -1
  131. package/build/components/inserter-listbox/item.js +4 -1
  132. package/build/components/inserter-listbox/item.js.map +1 -1
  133. package/build/components/inspector-controls/groups.js +2 -0
  134. package/build/components/inspector-controls/groups.js.map +1 -1
  135. package/build/components/inspector-controls-tabs/index.js +4 -1
  136. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  137. package/build/components/inspector-controls-tabs/settings-tab.js +3 -1
  138. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  139. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +2 -1
  140. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  141. package/build/components/inspector-popover-header/index.js +8 -2
  142. package/build/components/inspector-popover-header/index.js.map +1 -1
  143. package/build/components/letter-spacing-control/index.js +7 -4
  144. package/build/components/letter-spacing-control/index.js.map +1 -1
  145. package/build/components/link-control/index.js +19 -10
  146. package/build/components/link-control/index.js.map +1 -1
  147. package/build/components/link-control/settings-drawer.js +4 -1
  148. package/build/components/link-control/settings-drawer.js.map +1 -1
  149. package/build/components/list-view/block-select-button.js +4 -1
  150. package/build/components/list-view/block-select-button.js.map +1 -1
  151. package/build/components/media-placeholder/index.js +28 -7
  152. package/build/components/media-placeholder/index.js.map +1 -1
  153. package/build/components/media-replace-flow/index.js +8 -1
  154. package/build/components/media-replace-flow/index.js.map +1 -1
  155. package/build/components/provider/use-block-sync.js +19 -19
  156. package/build/components/provider/use-block-sync.js.map +1 -1
  157. package/build/components/rich-text/event-listeners/paste-handler.js +12 -1
  158. package/build/components/rich-text/event-listeners/paste-handler.js.map +1 -1
  159. package/build/components/rich-text/index.js +38 -30
  160. package/build/components/rich-text/index.js.map +1 -1
  161. package/build/components/rich-text/use-mark-persistent.js +5 -5
  162. package/build/components/rich-text/use-mark-persistent.js.map +1 -1
  163. package/build/components/skip-to-selected-block/index.js +4 -1
  164. package/build/components/skip-to-selected-block/index.js.map +1 -1
  165. package/build/components/tool-selector/index.js +4 -1
  166. package/build/components/tool-selector/index.js.map +1 -1
  167. package/build/components/url-input/button.js +12 -3
  168. package/build/components/url-input/button.js.map +1 -1
  169. package/build/components/url-input/index.js +4 -1
  170. package/build/components/url-input/index.js.map +1 -1
  171. package/build/components/use-block-drop-zone/index.js +4 -6
  172. package/build/components/use-block-drop-zone/index.js.map +1 -1
  173. package/build/components/writing-flow/index.js +2 -1
  174. package/build/components/writing-flow/index.js.map +1 -1
  175. package/build/components/writing-flow/use-arrow-nav.js +4 -1
  176. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  177. package/build/components/writing-flow/use-event-redirect.js +66 -0
  178. package/build/components/writing-flow/use-event-redirect.js.map +1 -0
  179. package/build/components/writing-flow/use-input.js +31 -1
  180. package/build/components/writing-flow/use-input.js.map +1 -1
  181. package/build/components/writing-flow/use-select-all.js +14 -1
  182. package/build/components/writing-flow/use-select-all.js.map +1 -1
  183. package/build/components/writing-flow/use-selection-observer.js +20 -6
  184. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  185. package/build/components/writing-flow/use-tab-nav.js +4 -4
  186. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  187. package/build/components/writing-flow/utils.js +27 -0
  188. package/build/components/writing-flow/utils.js.map +1 -1
  189. package/build/hooks/block-bindings.js +32 -29
  190. package/build/hooks/block-bindings.js.map +1 -1
  191. package/build/hooks/content-lock-ui.js +8 -26
  192. package/build/hooks/content-lock-ui.js.map +1 -1
  193. package/build/hooks/duotone.js +0 -4
  194. package/build/hooks/duotone.js.map +1 -1
  195. package/build/hooks/layout.js +4 -1
  196. package/build/hooks/layout.js.map +1 -1
  197. package/build/hooks/spacing-visualizer.js +3 -3
  198. package/build/hooks/spacing-visualizer.js.map +1 -1
  199. package/build/hooks/style.js +1 -5
  200. package/build/hooks/style.js.map +1 -1
  201. package/build/hooks/use-bindings-attributes.js +19 -20
  202. package/build/hooks/use-bindings-attributes.js.map +1 -1
  203. package/build/hooks/use-zoom-out.js +7 -7
  204. package/build/hooks/use-zoom-out.js.map +1 -1
  205. package/build/layouts/constrained.js +41 -41
  206. package/build/layouts/constrained.js.map +1 -1
  207. package/build/layouts/flex.js +4 -1
  208. package/build/layouts/flex.js.map +1 -1
  209. package/build/layouts/utils.js +1 -7
  210. package/build/layouts/utils.js.map +1 -1
  211. package/build/private-apis.js +2 -1
  212. package/build/private-apis.js.map +1 -1
  213. package/build/store/actions.js +2 -7
  214. package/build/store/actions.js.map +1 -1
  215. package/build/store/private-actions.js +1 -0
  216. package/build/store/private-actions.js.map +1 -1
  217. package/build/store/private-keys.js +2 -1
  218. package/build/store/private-keys.js.map +1 -1
  219. package/build/store/private-selectors.js +13 -15
  220. package/build/store/private-selectors.js.map +1 -1
  221. package/build/store/reducer.js +1 -8
  222. package/build/store/reducer.js.map +1 -1
  223. package/build/store/selectors.js +19 -43
  224. package/build/store/selectors.js.map +1 -1
  225. package/build/store/utils.js +48 -0
  226. package/build/store/utils.js.map +1 -1
  227. package/build/utils/block-bindings.js +16 -11
  228. package/build/utils/block-bindings.js.map +1 -1
  229. package/build/utils/dom.js +101 -0
  230. package/build/utils/dom.js.map +1 -1
  231. package/build/utils/get-font-styles-and-weights.js +4 -4
  232. package/build/utils/get-font-styles-and-weights.js.map +1 -1
  233. package/build/utils/transform-styles/index.js +120 -16
  234. package/build/utils/transform-styles/index.js.map +1 -1
  235. package/build-module/components/block-alignment-matrix-control/index.js +1 -1
  236. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  237. package/build-module/components/block-breadcrumb/index.js +8 -2
  238. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  239. package/build-module/components/block-canvas/index.js +9 -1
  240. package/build-module/components/block-canvas/index.js.map +1 -1
  241. package/build-module/components/block-compare/block-view.js +4 -1
  242. package/build-module/components/block-compare/block-view.js.map +1 -1
  243. package/build-module/components/block-draggable/index.js +4 -4
  244. package/build-module/components/block-draggable/index.js.map +1 -1
  245. package/build-module/components/block-draggable/use-scroll-when-dragging.js +25 -25
  246. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  247. package/build-module/components/block-edit/multiple-usage-warning.js +8 -2
  248. package/build-module/components/block-edit/multiple-usage-warning.js.map +1 -1
  249. package/build-module/components/block-inspector/index.js +27 -9
  250. package/build-module/components/block-inspector/index.js.map +1 -1
  251. package/build-module/components/block-list/block-invalid-warning.js +6 -3
  252. package/build-module/components/block-list/block-invalid-warning.js.map +1 -1
  253. package/build-module/components/block-list/block.js +5 -1
  254. package/build-module/components/block-list/block.js.map +1 -1
  255. package/build-module/components/block-list/use-block-props/index.js +5 -1
  256. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  257. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +1 -0
  258. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  259. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js +40 -0
  260. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +1 -0
  261. package/build-module/components/block-lock/toolbar.js +3 -3
  262. package/build-module/components/block-lock/toolbar.js.map +1 -1
  263. package/build-module/components/block-mover/button.js +4 -1
  264. package/build-module/components/block-mover/button.js.map +1 -1
  265. package/build-module/components/block-mover/index.js +4 -1
  266. package/build-module/components/block-mover/index.js.map +1 -1
  267. package/build-module/components/block-navigation/dropdown.js +4 -1
  268. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  269. package/build-module/components/block-pattern-setup/index.js +1 -4
  270. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  271. package/build-module/components/block-pattern-setup/setup-toolbar.js +23 -8
  272. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  273. package/build-module/components/block-patterns-list/index.js +11 -14
  274. package/build-module/components/block-patterns-list/index.js.map +1 -1
  275. package/build-module/components/block-patterns-paging/index.js +12 -3
  276. package/build-module/components/block-patterns-paging/index.js.map +1 -1
  277. package/build-module/components/block-popover/index.js +2 -15
  278. package/build-module/components/block-popover/index.js.map +1 -1
  279. package/build-module/components/block-quick-navigation/index.js +4 -1
  280. package/build-module/components/block-quick-navigation/index.js.map +1 -1
  281. package/build-module/components/block-settings-menu-controls/index.js +4 -0
  282. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  283. package/build-module/components/block-switcher/index.js +22 -17
  284. package/build-module/components/block-switcher/index.js.map +1 -1
  285. package/build-module/components/block-switcher/pattern-transformations-menu.js +1 -4
  286. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  287. package/build-module/components/block-toolbar/index.js +12 -11
  288. package/build-module/components/block-toolbar/index.js.map +1 -1
  289. package/build-module/components/block-toolbar/shuffle.js +6 -2
  290. package/build-module/components/block-toolbar/shuffle.js.map +1 -1
  291. package/build-module/components/block-tools/block-selection-button.js +8 -2
  292. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  293. package/build-module/components/block-tools/block-toolbar-popover.js +10 -6
  294. package/build-module/components/block-tools/block-toolbar-popover.js.map +1 -1
  295. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +2 -1
  296. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  297. package/build-module/components/block-tools/zoom-out-mode-inserters.js +4 -9
  298. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  299. package/build-module/components/block-tools/zoom-out-popover.js +3 -4
  300. package/build-module/components/block-tools/zoom-out-popover.js.map +1 -1
  301. package/build-module/components/block-tools/zoom-out-toolbar.js +15 -6
  302. package/build-module/components/block-tools/zoom-out-toolbar.js.map +1 -1
  303. package/build-module/components/block-variation-picker/index.js +4 -1
  304. package/build-module/components/block-variation-picker/index.js.map +1 -1
  305. package/build-module/components/block-variation-transforms/index.js +4 -1
  306. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  307. package/build-module/components/button-block-appender/index.js +15 -4
  308. package/build-module/components/button-block-appender/index.js.map +1 -1
  309. package/build-module/components/colors-gradients/dropdown.js +4 -1
  310. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  311. package/build-module/components/content-lock/index.js +2 -0
  312. package/build-module/components/content-lock/index.js.map +1 -0
  313. package/build-module/components/content-lock/modify-content-lock-menu-item.js +57 -0
  314. package/build-module/components/content-lock/modify-content-lock-menu-item.js.map +1 -0
  315. package/build-module/components/editor-styles/index.js +4 -3
  316. package/build-module/components/editor-styles/index.js.map +1 -1
  317. package/build-module/components/global-styles/background-panel.js +8 -12
  318. package/build-module/components/global-styles/background-panel.js.map +1 -1
  319. package/build-module/components/global-styles/color-panel.js +7 -4
  320. package/build-module/components/global-styles/color-panel.js.map +1 -1
  321. package/build-module/components/global-styles/color-panel.native.js +2 -2
  322. package/build-module/components/global-styles/color-panel.native.js.map +1 -1
  323. package/build-module/components/global-styles/dimensions-panel.js +36 -39
  324. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  325. package/build-module/components/global-styles/filters-panel.js +4 -1
  326. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  327. package/build-module/components/global-styles/shadow-panel-components.js +13 -7
  328. package/build-module/components/global-styles/shadow-panel-components.js.map +1 -1
  329. package/build-module/components/global-styles/typography-utils.js +17 -6
  330. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  331. package/build-module/components/global-styles/utils.js +4 -6
  332. package/build-module/components/global-styles/utils.js.map +1 -1
  333. package/build-module/components/grid/grid-item-movers.js +3 -3
  334. package/build-module/components/grid/grid-item-movers.js.map +1 -1
  335. package/build-module/components/iframe/index.js +5 -5
  336. package/build-module/components/iframe/index.js.map +1 -1
  337. package/build-module/components/inner-blocks/index.js +2 -4
  338. package/build-module/components/inner-blocks/index.js.map +1 -1
  339. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +3 -3
  340. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  341. package/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +4 -1
  342. package/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -1
  343. package/build-module/components/inserter/block-patterns-tab/index.js +4 -1
  344. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
  345. package/build-module/components/inserter/library.js +2 -4
  346. package/build-module/components/inserter/library.js.map +1 -1
  347. package/build-module/components/inserter/media-tab/hooks.js +3 -3
  348. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  349. package/build-module/components/inserter/media-tab/media-list.js +1 -4
  350. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  351. package/build-module/components/inserter/media-tab/media-preview.js +8 -2
  352. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  353. package/build-module/components/inserter/media-tab/media-tab.js +4 -1
  354. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
  355. package/build-module/components/inserter/menu.js +7 -24
  356. package/build-module/components/inserter/menu.js.map +1 -1
  357. package/build-module/components/inserter/quick-inserter.js +4 -1
  358. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  359. package/build-module/components/inserter-list-item/index.js +4 -4
  360. package/build-module/components/inserter-list-item/index.js.map +1 -1
  361. package/build-module/components/inserter-listbox/index.js +3 -7
  362. package/build-module/components/inserter-listbox/index.js.map +1 -1
  363. package/build-module/components/inserter-listbox/item.js +4 -1
  364. package/build-module/components/inserter-listbox/item.js.map +1 -1
  365. package/build-module/components/inspector-controls/groups.js +2 -0
  366. package/build-module/components/inspector-controls/groups.js.map +1 -1
  367. package/build-module/components/inspector-controls-tabs/index.js +4 -1
  368. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  369. package/build-module/components/inspector-controls-tabs/settings-tab.js +3 -1
  370. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  371. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +2 -1
  372. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  373. package/build-module/components/inspector-popover-header/index.js +8 -2
  374. package/build-module/components/inspector-popover-header/index.js.map +1 -1
  375. package/build-module/components/letter-spacing-control/index.js +7 -4
  376. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  377. package/build-module/components/link-control/index.js +19 -10
  378. package/build-module/components/link-control/index.js.map +1 -1
  379. package/build-module/components/link-control/settings-drawer.js +4 -1
  380. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  381. package/build-module/components/list-view/block-select-button.js +4 -1
  382. package/build-module/components/list-view/block-select-button.js.map +1 -1
  383. package/build-module/components/media-placeholder/index.js +28 -7
  384. package/build-module/components/media-placeholder/index.js.map +1 -1
  385. package/build-module/components/media-replace-flow/index.js +8 -1
  386. package/build-module/components/media-replace-flow/index.js.map +1 -1
  387. package/build-module/components/provider/use-block-sync.js +19 -19
  388. package/build-module/components/provider/use-block-sync.js.map +1 -1
  389. package/build-module/components/rich-text/event-listeners/paste-handler.js +12 -1
  390. package/build-module/components/rich-text/event-listeners/paste-handler.js.map +1 -1
  391. package/build-module/components/rich-text/index.js +39 -31
  392. package/build-module/components/rich-text/index.js.map +1 -1
  393. package/build-module/components/rich-text/use-mark-persistent.js +5 -5
  394. package/build-module/components/rich-text/use-mark-persistent.js.map +1 -1
  395. package/build-module/components/skip-to-selected-block/index.js +4 -1
  396. package/build-module/components/skip-to-selected-block/index.js.map +1 -1
  397. package/build-module/components/tool-selector/index.js +4 -1
  398. package/build-module/components/tool-selector/index.js.map +1 -1
  399. package/build-module/components/url-input/button.js +12 -3
  400. package/build-module/components/url-input/button.js.map +1 -1
  401. package/build-module/components/url-input/index.js +4 -1
  402. package/build-module/components/url-input/index.js.map +1 -1
  403. package/build-module/components/use-block-drop-zone/index.js +4 -6
  404. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  405. package/build-module/components/writing-flow/index.js +2 -1
  406. package/build-module/components/writing-flow/index.js.map +1 -1
  407. package/build-module/components/writing-flow/use-arrow-nav.js +4 -1
  408. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  409. package/build-module/components/writing-flow/use-event-redirect.js +60 -0
  410. package/build-module/components/writing-flow/use-event-redirect.js.map +1 -0
  411. package/build-module/components/writing-flow/use-input.js +31 -1
  412. package/build-module/components/writing-flow/use-input.js.map +1 -1
  413. package/build-module/components/writing-flow/use-select-all.js +14 -1
  414. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  415. package/build-module/components/writing-flow/use-selection-observer.js +16 -2
  416. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  417. package/build-module/components/writing-flow/use-tab-nav.js +4 -4
  418. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  419. package/build-module/components/writing-flow/utils.js +26 -0
  420. package/build-module/components/writing-flow/utils.js.map +1 -1
  421. package/build-module/hooks/block-bindings.js +34 -31
  422. package/build-module/hooks/block-bindings.js.map +1 -1
  423. package/build-module/hooks/content-lock-ui.js +10 -30
  424. package/build-module/hooks/content-lock-ui.js.map +1 -1
  425. package/build-module/hooks/duotone.js +0 -4
  426. package/build-module/hooks/duotone.js.map +1 -1
  427. package/build-module/hooks/layout.js +4 -1
  428. package/build-module/hooks/layout.js.map +1 -1
  429. package/build-module/hooks/spacing-visualizer.js +3 -3
  430. package/build-module/hooks/spacing-visualizer.js.map +1 -1
  431. package/build-module/hooks/style.js +1 -5
  432. package/build-module/hooks/style.js.map +1 -1
  433. package/build-module/hooks/use-bindings-attributes.js +19 -20
  434. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  435. package/build-module/hooks/use-zoom-out.js +7 -7
  436. package/build-module/hooks/use-zoom-out.js.map +1 -1
  437. package/build-module/layouts/constrained.js +43 -43
  438. package/build-module/layouts/constrained.js.map +1 -1
  439. package/build-module/layouts/flex.js +4 -1
  440. package/build-module/layouts/flex.js.map +1 -1
  441. package/build-module/layouts/utils.js +1 -7
  442. package/build-module/layouts/utils.js.map +1 -1
  443. package/build-module/private-apis.js +3 -2
  444. package/build-module/private-apis.js.map +1 -1
  445. package/build-module/store/actions.js +2 -7
  446. package/build-module/store/actions.js.map +1 -1
  447. package/build-module/store/private-actions.js +1 -0
  448. package/build-module/store/private-actions.js.map +1 -1
  449. package/build-module/store/private-keys.js +1 -0
  450. package/build-module/store/private-keys.js.map +1 -1
  451. package/build-module/store/private-selectors.js +12 -15
  452. package/build-module/store/private-selectors.js.map +1 -1
  453. package/build-module/store/reducer.js +1 -7
  454. package/build-module/store/reducer.js.map +1 -1
  455. package/build-module/store/selectors.js +22 -46
  456. package/build-module/store/selectors.js.map +1 -1
  457. package/build-module/store/utils.js +46 -0
  458. package/build-module/store/utils.js.map +1 -1
  459. package/build-module/utils/block-bindings.js +17 -12
  460. package/build-module/utils/block-bindings.js.map +1 -1
  461. package/build-module/utils/dom.js +99 -0
  462. package/build-module/utils/dom.js.map +1 -1
  463. package/build-module/utils/get-font-styles-and-weights.js +4 -4
  464. package/build-module/utils/get-font-styles-and-weights.js.map +1 -1
  465. package/build-module/utils/transform-styles/index.js +120 -16
  466. package/build-module/utils/transform-styles/index.js.map +1 -1
  467. package/build-style/content-rtl.css +2 -11
  468. package/build-style/content.css +2 -11
  469. package/build-style/style-rtl.css +17 -38
  470. package/build-style/style.css +17 -38
  471. package/build-types/utils/dom.d.ts +25 -0
  472. package/build-types/utils/dom.d.ts.map +1 -1
  473. package/package.json +34 -32
  474. package/src/components/block-alignment-matrix-control/index.js +1 -1
  475. package/src/components/block-breadcrumb/index.js +4 -0
  476. package/src/components/block-breadcrumb/style.scss +1 -1
  477. package/src/components/block-canvas/index.js +9 -1
  478. package/src/components/block-compare/block-view.js +7 -1
  479. package/src/components/block-draggable/content.scss +1 -1
  480. package/src/components/block-draggable/index.js +4 -4
  481. package/src/components/block-draggable/style.scss +1 -1
  482. package/src/components/block-draggable/use-scroll-when-dragging.js +25 -25
  483. package/src/components/block-edit/multiple-usage-warning.js +4 -0
  484. package/src/components/block-inspector/index.js +22 -6
  485. package/src/components/block-list/block-invalid-warning.js +4 -2
  486. package/src/components/block-list/block.js +6 -2
  487. package/src/components/block-list/content.scss +2 -3
  488. package/src/components/block-list/use-block-props/index.js +3 -0
  489. package/src/components/block-list/use-block-props/use-focus-first-element.js +1 -0
  490. package/src/components/block-list/use-block-props/use-zoom-out-mode-exit.js +44 -0
  491. package/src/components/block-lock/style.scss +1 -1
  492. package/src/components/block-lock/toolbar.js +3 -3
  493. package/src/components/block-mover/button.js +2 -0
  494. package/src/components/block-mover/index.js +2 -0
  495. package/src/components/block-mover/style.scss +1 -1
  496. package/src/components/block-navigation/dropdown.js +2 -0
  497. package/src/components/block-pattern-setup/index.js +3 -7
  498. package/src/components/block-pattern-setup/setup-toolbar.js +17 -4
  499. package/src/components/block-pattern-setup/style.scss +2 -2
  500. package/src/components/block-patterns-list/index.js +15 -13
  501. package/src/components/block-patterns-list/style.scss +2 -2
  502. package/src/components/block-patterns-paging/index.js +6 -0
  503. package/src/components/block-popover/index.js +7 -28
  504. package/src/components/block-popover/style.scss +1 -1
  505. package/src/components/block-quick-navigation/index.js +2 -0
  506. package/src/components/block-settings-menu-controls/index.js +7 -1
  507. package/src/components/block-switcher/index.js +26 -20
  508. package/src/components/block-switcher/pattern-transformations-menu.js +3 -7
  509. package/src/components/block-switcher/style.scss +5 -6
  510. package/src/components/block-toolbar/index.js +17 -8
  511. package/src/components/block-toolbar/shuffle.js +9 -7
  512. package/src/components/block-tools/block-selection-button.js +4 -0
  513. package/src/components/block-tools/block-toolbar-popover.js +10 -6
  514. package/src/components/block-tools/style.scss +3 -4
  515. package/src/components/block-tools/use-block-toolbar-popover-props.js +2 -1
  516. package/src/components/block-tools/zoom-out-mode-inserters.js +2 -5
  517. package/src/components/block-tools/zoom-out-popover.js +3 -7
  518. package/src/components/block-tools/zoom-out-toolbar.js +20 -6
  519. package/src/components/block-variation-picker/README.md +2 -2
  520. package/src/components/block-variation-picker/index.js +6 -1
  521. package/src/components/block-variation-transforms/index.js +2 -0
  522. package/src/components/block-variation-transforms/style.scss +1 -1
  523. package/src/components/button-block-appender/content.scss +0 -1
  524. package/src/components/button-block-appender/index.js +14 -3
  525. package/src/components/color-palette/test/control.js +15 -2
  526. package/src/components/colors-gradients/dropdown.js +5 -1
  527. package/src/components/colors-gradients/style.scss +4 -4
  528. package/src/components/content-lock/index.js +1 -0
  529. package/src/components/content-lock/modify-content-lock-menu-item.js +58 -0
  530. package/src/components/default-block-appender/content.scss +0 -1
  531. package/src/components/editor-styles/index.js +4 -3
  532. package/src/components/global-styles/background-panel.js +6 -14
  533. package/src/components/global-styles/color-panel.js +8 -4
  534. package/src/components/global-styles/color-panel.native.js +2 -2
  535. package/src/components/global-styles/dimensions-panel.js +40 -40
  536. package/src/components/global-styles/filters-panel.js +5 -1
  537. package/src/components/global-styles/shadow-panel-components.js +12 -8
  538. package/src/components/global-styles/style.scss +3 -4
  539. package/src/components/global-styles/test/typography-utils.js +96 -5
  540. package/src/components/global-styles/test/utils.js +10 -0
  541. package/src/components/global-styles/typography-utils.js +22 -6
  542. package/src/components/global-styles/utils.js +4 -6
  543. package/src/components/grid/grid-item-movers.js +3 -3
  544. package/src/components/grid/style.scss +1 -1
  545. package/src/components/iframe/index.js +5 -5
  546. package/src/components/inner-blocks/index.js +2 -2
  547. package/src/components/inner-blocks/use-inner-block-template-sync.js +3 -3
  548. package/src/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +2 -0
  549. package/src/components/inserter/block-patterns-tab/index.js +2 -0
  550. package/src/components/inserter/library.js +0 -2
  551. package/src/components/inserter/media-tab/hooks.js +3 -3
  552. package/src/components/inserter/media-tab/media-list.js +1 -4
  553. package/src/components/inserter/media-tab/media-preview.js +12 -2
  554. package/src/components/inserter/media-tab/media-tab.js +2 -0
  555. package/src/components/inserter/menu.js +15 -29
  556. package/src/components/inserter/quick-inserter.js +2 -0
  557. package/src/components/inserter/style.scss +6 -8
  558. package/src/components/inserter-list-item/index.js +4 -4
  559. package/src/components/inserter-list-item/style.scss +1 -3
  560. package/src/components/inserter-listbox/index.js +2 -8
  561. package/src/components/inserter-listbox/item.js +9 -1
  562. package/src/components/inspector-controls/groups.js +2 -0
  563. package/src/components/inspector-controls-tabs/index.js +2 -0
  564. package/src/components/inspector-controls-tabs/settings-tab.js +1 -0
  565. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +5 -2
  566. package/src/components/inspector-popover-header/index.js +4 -0
  567. package/src/components/letter-spacing-control/README.md +8 -1
  568. package/src/components/letter-spacing-control/index.js +7 -4
  569. package/src/components/link-control/index.js +17 -8
  570. package/src/components/link-control/settings-drawer.js +2 -0
  571. package/src/components/link-control/style.scss +1 -3
  572. package/src/components/list-view/block-select-button.js +2 -0
  573. package/src/components/list-view/style.scss +14 -16
  574. package/src/components/media-placeholder/index.js +14 -0
  575. package/src/components/media-replace-flow/index.js +12 -1
  576. package/src/components/provider/use-block-sync.js +20 -20
  577. package/src/components/responsive-block-control/README.md +3 -27
  578. package/src/components/rich-text/content.scss +1 -1
  579. package/src/components/rich-text/event-listeners/paste-handler.js +6 -1
  580. package/src/components/rich-text/index.js +54 -41
  581. package/src/components/rich-text/style.scss +1 -1
  582. package/src/components/rich-text/use-mark-persistent.js +5 -5
  583. package/src/components/skip-to-selected-block/index.js +2 -0
  584. package/src/components/spacing-sizes-control/style.scss +1 -0
  585. package/src/components/tool-selector/index.js +2 -0
  586. package/src/components/url-input/button.js +6 -0
  587. package/src/components/url-input/index.js +2 -0
  588. package/src/components/url-popover/stories/index.story.js +7 -1
  589. package/src/components/use-block-drop-zone/index.js +4 -4
  590. package/src/components/warning/content.scss +3 -10
  591. package/src/components/writing-flow/index.js +2 -0
  592. package/src/components/writing-flow/use-arrow-nav.js +9 -2
  593. package/src/components/writing-flow/use-event-redirect.js +72 -0
  594. package/src/components/writing-flow/use-input.js +36 -1
  595. package/src/components/writing-flow/use-select-all.js +18 -1
  596. package/src/components/writing-flow/use-selection-observer.js +23 -3
  597. package/src/components/writing-flow/use-tab-nav.js +4 -4
  598. package/src/components/writing-flow/utils.js +30 -0
  599. package/src/hooks/block-bindings.js +42 -43
  600. package/src/hooks/block-bindings.scss +1 -9
  601. package/src/hooks/content-lock-ui.js +11 -36
  602. package/src/hooks/duotone.js +0 -4
  603. package/src/hooks/layout.js +2 -0
  604. package/src/hooks/layout.scss +3 -11
  605. package/src/hooks/spacing-visualizer.js +3 -3
  606. package/src/hooks/style.js +1 -4
  607. package/src/hooks/use-bindings-attributes.js +23 -24
  608. package/src/hooks/use-zoom-out.js +7 -7
  609. package/src/layouts/constrained.js +50 -47
  610. package/src/layouts/flex.js +2 -0
  611. package/src/layouts/test/grid.js +2 -2
  612. package/src/layouts/test/utils.js +6 -8
  613. package/src/layouts/utils.js +1 -9
  614. package/src/private-apis.js +2 -0
  615. package/src/store/actions.js +4 -6
  616. package/src/store/private-actions.js +1 -0
  617. package/src/store/private-keys.js +1 -0
  618. package/src/store/private-selectors.js +12 -11
  619. package/src/store/reducer.js +0 -5
  620. package/src/store/selectors.js +32 -51
  621. package/src/store/utils.js +50 -0
  622. package/src/utils/block-bindings.js +15 -16
  623. package/src/utils/dom.js +117 -0
  624. package/src/utils/get-font-styles-and-weights.js +12 -4
  625. package/src/utils/test/get-font-styles-and-weights.js +148 -0
  626. package/src/utils/test/transform-styles.js +259 -50
  627. package/src/utils/transform-styles/index.js +132 -21
  628. package/tsconfig.json +1 -0
  629. package/tsconfig.tsbuildinfo +1 -1
  630. package/src/utils/test/__snapshots__/transform-styles.js.snap +0 -109
@@ -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
- }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { ToolbarButton, MenuItem } from '@wordpress/components';
4
+ import { ToolbarButton } from '@wordpress/components';
5
5
  import { useDispatch, useSelect } from '@wordpress/data';
6
6
  import { __ } from '@wordpress/i18n';
7
7
  import { useCallback } from '@wordpress/element';
@@ -10,7 +10,7 @@ import { useCallback } from '@wordpress/element';
10
10
  * Internal dependencies
11
11
  */
12
12
  import { store as blockEditorStore } from '../store';
13
- import { BlockControls, BlockSettingsMenuControls } from '../components';
13
+ import { BlockControls } from '../components';
14
14
  import { unlock } from '../lock-unlock';
15
15
 
16
16
  // The implementation of content locking is mainly in this file, although the mechanism
@@ -19,7 +19,7 @@ import { unlock } from '../lock-unlock';
19
19
  // Besides the components on this file and the file referenced above the implementation
20
20
  // also includes artifacts on the store (actions, reducers, and selector).
21
21
 
22
- function ContentLockControlsPure( { clientId, isSelected } ) {
22
+ function ContentLockControlsPure( { clientId } ) {
23
23
  const { templateLock, isLockedByParent, isEditingAsBlocks } = useSelect(
24
24
  ( select ) => {
25
25
  const {
@@ -36,9 +36,7 @@ function ContentLockControlsPure( { clientId, isSelected } ) {
36
36
  [ clientId ]
37
37
  );
38
38
 
39
- const { stopEditingAsBlocks, modifyContentLockBlock } = unlock(
40
- useDispatch( blockEditorStore )
41
- );
39
+ const { stopEditingAsBlocks } = unlock( useDispatch( blockEditorStore ) );
42
40
  const isContentLocked =
43
41
  ! isLockedByParent && templateLock === 'contentOnly';
44
42
 
@@ -51,38 +49,15 @@ function ContentLockControlsPure( { clientId, isSelected } ) {
51
49
  }
52
50
 
53
51
  const showStopEditingAsBlocks = isEditingAsBlocks && ! isContentLocked;
54
- const showStartEditingAsBlocks =
55
- ! isEditingAsBlocks && isContentLocked && isSelected;
56
52
 
57
53
  return (
58
- <>
59
- { showStopEditingAsBlocks && (
60
- <>
61
- <BlockControls group="other">
62
- <ToolbarButton onClick={ stopEditingAsBlockCallback }>
63
- { __( 'Done' ) }
64
- </ToolbarButton>
65
- </BlockControls>
66
- </>
67
- ) }
68
- { showStartEditingAsBlocks && (
69
- <BlockSettingsMenuControls>
70
- { ( { selectedClientIds, onClose } ) =>
71
- selectedClientIds.length === 1 &&
72
- selectedClientIds[ 0 ] === clientId && (
73
- <MenuItem
74
- onClick={ () => {
75
- modifyContentLockBlock( clientId );
76
- onClose();
77
- } }
78
- >
79
- { __( 'Modify' ) }
80
- </MenuItem>
81
- )
82
- }
83
- </BlockSettingsMenuControls>
84
- ) }
85
- </>
54
+ showStopEditingAsBlocks && (
55
+ <BlockControls group="other">
56
+ <ToolbarButton onClick={ stopEditingAsBlockCallback }>
57
+ { __( 'Done' ) }
58
+ </ToolbarButton>
59
+ </BlockControls>
60
+ )
86
61
  );
87
62
  }
88
63
 
@@ -251,10 +251,6 @@ function useDuotoneStyles( {
251
251
  const selectors = duotoneSelector.split( ',' );
252
252
 
253
253
  const selectorsScoped = selectors.map( ( selectorPart ) => {
254
- // Extra .editor-styles-wrapper specificity is needed in the editor
255
- // since we're not using inline styles to apply the filter. We need to
256
- // override duotone applied by global styles and theme.json.
257
-
258
254
  // Assuming the selector part is a subclass selector (not a tag name)
259
255
  // so we can prepend the filter id class. If we want to support elements
260
256
  // such as `img` or namespaces, we'll need to add a case for that here.
@@ -320,6 +320,8 @@ function LayoutTypeSwitcher( { type, onChange } ) {
320
320
  { getLayoutTypes().map( ( { name, label } ) => {
321
321
  return (
322
322
  <Button
323
+ // TODO: Switch to `true` (40px size) if possible
324
+ __next40pxDefaultSize={ false }
323
325
  key={ name }
324
326
  isPressed={ type === name }
325
327
  onClick={ () => onChange( name ) }
@@ -1,15 +1,7 @@
1
- .block-editor-hooks__layout-controls {
1
+ .block-editor-hooks__layout-controls-units {
2
2
  display: flex;
3
- margin-bottom: $grid-unit-10;
4
-
5
- .block-editor-hooks__layout-controls-unit {
6
- display: flex;
7
- margin-right: $grid-unit-30;
8
-
9
- svg {
10
- margin: auto 0 $grid-unit-05 $grid-unit-10;
11
- }
12
- }
3
+ flex-direction: column;
4
+ gap: $grid-unit-20;
13
5
  }
14
6
 
15
7
  .block-editor-block-inspector .block-editor-hooks__layout-controls-unit-input {
@@ -36,16 +36,16 @@ function SpacingVisualizer( { clientId, value, computeStyle, forceShow } ) {
36
36
  );
37
37
  }, [ blockElement, value ] );
38
38
 
39
- const previousValue = useRef( value );
39
+ const previousValueRef = useRef( value );
40
40
  const [ isActive, setIsActive ] = useState( false );
41
41
 
42
42
  useEffect( () => {
43
- if ( isShallowEqual( value, previousValue.current ) || forceShow ) {
43
+ if ( isShallowEqual( value, previousValueRef.current ) || forceShow ) {
44
44
  return;
45
45
  }
46
46
 
47
47
  setIsActive( true );
48
- previousValue.current = value;
48
+ previousValueRef.current = value;
49
49
 
50
50
  const timeout = setTimeout( () => {
51
51
  setIsActive( false );
@@ -381,10 +381,7 @@ function useBlockProps( { name, style } ) {
381
381
  useBlockProps
382
382
  ) }`;
383
383
 
384
- // The .editor-styles-wrapper selector is required on elements styles. As it is
385
- // added to all other editor styles, not providing it causes reset and global
386
- // styles to override element styles because of higher specificity.
387
- const baseElementSelector = `.editor-styles-wrapper .${ blockElementsContainerIdentifier }`;
384
+ const baseElementSelector = `.${ blockElementsContainerIdentifier }`;
388
385
  const blockElementStyles = style?.elements;
389
386
 
390
387
  const styles = useMemo( () => {
@@ -10,6 +10,7 @@ import { addFilter } from '@wordpress/hooks';
10
10
  /**
11
11
  * Internal dependencies
12
12
  */
13
+ import isURLLike from '../components/link-control/is-url-like';
13
14
  import { unlock } from '../lock-unlock';
14
15
  import BlockContext from '../components/block-context';
15
16
 
@@ -134,10 +135,7 @@ export const withBlockBindingSupport = createHigherOrderComponent(
134
135
  ) ) {
135
136
  const { source: sourceName, args: sourceArgs } = binding;
136
137
  const source = sources[ sourceName ];
137
- if (
138
- ! source?.getValues ||
139
- ! canBindAttribute( name, attributeName )
140
- ) {
138
+ if ( ! source || ! canBindAttribute( name, attributeName ) ) {
141
139
  continue;
142
140
  }
143
141
 
@@ -161,29 +159,30 @@ export const withBlockBindingSupport = createHigherOrderComponent(
161
159
  }
162
160
 
163
161
  // Get values in batch if the source supports it.
164
- const values = source.getValues( {
165
- registry,
166
- context,
167
- clientId,
168
- bindings,
169
- } );
162
+ let values = {};
163
+ if ( ! source.getValues ) {
164
+ Object.keys( bindings ).forEach( ( attr ) => {
165
+ // Default to the `key` or the source label when `getValues` doesn't exist
166
+ values[ attr ] =
167
+ bindings[ attr ].args?.key || source.label;
168
+ } );
169
+ } else {
170
+ values = source.getValues( {
171
+ registry,
172
+ context,
173
+ clientId,
174
+ bindings,
175
+ } );
176
+ }
170
177
  for ( const [ attributeName, value ] of Object.entries(
171
178
  values
172
179
  ) ) {
173
- // Use placeholder when value is undefined.
174
- if ( value === undefined ) {
175
- if ( attributeName === 'url' ) {
176
- attributes[ attributeName ] = null;
177
- } else {
178
- attributes[ attributeName ] =
179
- source.getPlaceholder?.( {
180
- registry,
181
- context,
182
- clientId,
183
- attributeName,
184
- args: bindings[ attributeName ].args,
185
- } );
186
- }
180
+ if (
181
+ attributeName === 'url' &&
182
+ ( ! value || ! isURLLike( value ) )
183
+ ) {
184
+ // Return null if value is not a valid URL.
185
+ attributes[ attributeName ] = null;
187
186
  } else {
188
187
  attributes[ attributeName ] = value;
189
188
  }