@wordpress/block-editor 16.0.1-next.v.202607070741.0 → 16.1.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 +27 -1
  2. package/README.md +8 -0
  3. package/build/components/alignment-control/ui.cjs +2 -4
  4. package/build/components/alignment-control/ui.cjs.map +2 -2
  5. package/build/components/background-image-control/index.cjs +40 -10
  6. package/build/components/background-image-control/index.cjs.map +2 -2
  7. package/build/components/block-alignment-control/ui.cjs +5 -3
  8. package/build/components/block-alignment-control/ui.cjs.map +2 -2
  9. package/build/components/block-canvas/index.cjs +6 -1
  10. package/build/components/block-canvas/index.cjs.map +2 -2
  11. package/build/components/block-controls/groups.cjs +3 -1
  12. package/build/components/block-controls/groups.cjs.map +2 -2
  13. package/build/components/block-edit/edit.cjs +10 -18
  14. package/build/components/block-edit/edit.cjs.map +2 -2
  15. package/build/components/block-inspector/index.cjs +73 -46
  16. package/build/components/block-inspector/index.cjs.map +2 -2
  17. package/build/components/block-list/block-html.cjs +4 -1
  18. package/build/components/block-list/block-html.cjs.map +2 -2
  19. package/build/components/block-list/block.cjs +9 -3
  20. package/build/components/block-list/block.cjs.map +3 -3
  21. package/build/components/block-list/index.cjs +1 -3
  22. package/build/components/block-list/index.cjs.map +2 -2
  23. package/build/components/block-list/use-block-props/index.cjs +7 -2
  24. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  25. package/build/components/block-list/use-block-props/use-focus-first-element.cjs +9 -4
  26. package/build/components/block-list/use-block-props/use-focus-first-element.cjs.map +2 -2
  27. package/build/components/block-list/use-block-props/use-focus-handler.cjs +11 -4
  28. package/build/components/block-list/use-block-props/use-focus-handler.cjs.map +2 -2
  29. package/build/components/block-list/use-block-props/use-register-block-event-handlers.cjs +48 -0
  30. package/build/components/block-list/use-block-props/use-register-block-event-handlers.cjs.map +7 -0
  31. package/build/components/block-parent-selector/index.cjs +2 -2
  32. package/build/components/block-parent-selector/index.cjs.map +2 -2
  33. package/build/components/block-toolbar/index.cjs +43 -24
  34. package/build/components/block-toolbar/index.cjs.map +2 -2
  35. package/build/components/block-toolbar/switch-section-style.cjs +4 -2
  36. package/build/components/block-toolbar/switch-section-style.cjs.map +3 -3
  37. package/build/components/block-tools/empty-block-inserter.cjs +2 -7
  38. package/build/components/block-tools/empty-block-inserter.cjs.map +2 -2
  39. package/build/components/block-tools/index.cjs +7 -2
  40. package/build/components/block-tools/index.cjs.map +2 -2
  41. package/build/components/block-vertical-alignment-control/ui.cjs +3 -5
  42. package/build/components/block-vertical-alignment-control/ui.cjs.map +2 -2
  43. package/build/components/block-visibility/modal.cjs +20 -6
  44. package/build/components/block-visibility/modal.cjs.map +2 -2
  45. package/build/components/block-visibility/use-block-visibility.cjs +16 -6
  46. package/build/components/block-visibility/use-block-visibility.cjs.map +3 -3
  47. package/build/components/block-visibility/utils.cjs +15 -2
  48. package/build/components/block-visibility/utils.cjs.map +3 -3
  49. package/build/components/block-visibility/viewport-menu-item.cjs +7 -1
  50. package/build/components/block-visibility/viewport-menu-item.cjs.map +2 -2
  51. package/build/components/block-visibility/viewport-toolbar.cjs +5 -0
  52. package/build/components/block-visibility/viewport-toolbar.cjs.map +2 -2
  53. package/build/components/block-visibility/viewport-visibility-info.cjs +5 -1
  54. package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
  55. package/build/components/border-radius-control/utils.cjs +8 -58
  56. package/build/components/border-radius-control/utils.cjs.map +2 -2
  57. package/build/components/child-layout-control/index.cjs +0 -4
  58. package/build/components/child-layout-control/index.cjs.map +2 -2
  59. package/build/components/colors-gradients/control.cjs +5 -3
  60. package/build/components/colors-gradients/control.cjs.map +2 -2
  61. package/build/components/dimension-control/index.cjs +30 -20
  62. package/build/components/dimension-control/index.cjs.map +3 -3
  63. package/build/components/dimensions-tool/aspect-ratio-tool.cjs +9 -2
  64. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +3 -3
  65. package/build/components/editor-styles/index.cjs +9 -1
  66. package/build/components/editor-styles/index.cjs.map +2 -2
  67. package/build/components/global-styles/background-panel.cjs +66 -25
  68. package/build/components/global-styles/background-panel.cjs.map +3 -3
  69. package/build/components/global-styles/border-panel.cjs +153 -55
  70. package/build/components/global-styles/border-panel.cjs.map +3 -3
  71. package/build/components/global-styles/color-gradient-dropdown-item.cjs +46 -14
  72. package/build/components/global-styles/color-gradient-dropdown-item.cjs.map +3 -3
  73. package/build/components/global-styles/color-panel.cjs +63 -17
  74. package/build/components/global-styles/color-panel.cjs.map +2 -2
  75. package/build/components/global-styles/dimensions-panel.cjs +242 -64
  76. package/build/components/global-styles/dimensions-panel.cjs.map +3 -3
  77. package/build/components/global-styles/filters-panel.cjs +59 -20
  78. package/build/components/global-styles/filters-panel.cjs.map +3 -3
  79. package/build/components/global-styles/hooks.cjs +4 -1
  80. package/build/components/global-styles/hooks.cjs.map +2 -2
  81. package/build/components/global-styles/inheritance/index.cjs +142 -0
  82. package/build/components/global-styles/inheritance/index.cjs.map +7 -0
  83. package/build/components/global-styles/inherited-value-context.cjs +173 -0
  84. package/build/components/global-styles/inherited-value-context.cjs.map +7 -0
  85. package/build/components/global-styles/shadow-panel-components.cjs +38 -20
  86. package/build/components/global-styles/shadow-panel-components.cjs.map +2 -2
  87. package/build/components/global-styles/state-control-badges.cjs +39 -3
  88. package/build/components/global-styles/state-control-badges.cjs.map +2 -2
  89. package/build/components/global-styles/state-control.cjs +1 -1
  90. package/build/components/global-styles/state-control.cjs.map +2 -2
  91. package/build/components/global-styles/typography-panel.cjs +271 -79
  92. package/build/components/global-styles/typography-panel.cjs.map +3 -3
  93. package/build/components/image-size-control/index.cjs +2 -4
  94. package/build/components/image-size-control/index.cjs.map +2 -2
  95. package/build/components/inserter/media-tab/hooks.cjs +33 -6
  96. package/build/components/inserter/media-tab/hooks.cjs.map +2 -2
  97. package/build/components/inserter/media-tab/media-panel.cjs +78 -16
  98. package/build/components/inserter/media-tab/media-panel.cjs.map +3 -3
  99. package/build/components/inspector-controls-tabs/styles-tab.cjs +10 -1
  100. package/build/components/inspector-controls-tabs/styles-tab.cjs.map +2 -2
  101. package/build/components/keyboard-shortcuts/index.cjs +19 -11
  102. package/build/components/keyboard-shortcuts/index.cjs.map +2 -2
  103. package/build/components/line-height-control/index.cjs +1 -2
  104. package/build/components/line-height-control/index.cjs.map +2 -2
  105. package/build/components/link-control/index.cjs +3 -1
  106. package/build/components/link-control/index.cjs.map +2 -2
  107. package/build/components/list-view/block.cjs +13 -4
  108. package/build/components/list-view/block.cjs.map +2 -2
  109. package/build/components/media-placeholder/index.cjs +0 -1
  110. package/build/components/media-placeholder/index.cjs.map +2 -2
  111. package/build/components/preset-input-control/index.cjs +2 -1
  112. package/build/components/preset-input-control/index.cjs.map +2 -2
  113. package/build/components/provider/block-refs-provider.cjs +8 -2
  114. package/build/components/provider/block-refs-provider.cjs.map +2 -2
  115. package/build/components/provider/index.cjs +1 -1
  116. package/build/components/provider/index.cjs.map +2 -2
  117. package/build/components/provider/use-block-sync.cjs +18 -6
  118. package/build/components/provider/use-block-sync.cjs.map +2 -2
  119. package/build/components/provider/use-media-upload-settings.cjs +3 -1
  120. package/build/components/provider/use-media-upload-settings.cjs.map +2 -2
  121. package/build/components/rich-text/event-listeners/before-input-rules.cjs +3 -4
  122. package/build/components/rich-text/event-listeners/before-input-rules.cjs.map +3 -3
  123. package/build/components/rich-text/event-listeners/delete.cjs +2 -3
  124. package/build/components/rich-text/event-listeners/delete.cjs.map +3 -3
  125. package/build/components/rich-text/event-listeners/enter.cjs +3 -2
  126. package/build/components/rich-text/event-listeners/enter.cjs.map +3 -3
  127. package/build/components/rich-text/event-listeners/input-events.cjs +3 -3
  128. package/build/components/rich-text/event-listeners/input-events.cjs.map +3 -3
  129. package/build/components/rich-text/event-listeners/input-rules.cjs +3 -4
  130. package/build/components/rich-text/event-listeners/input-rules.cjs.map +3 -3
  131. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs +3 -3
  132. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs.map +3 -3
  133. package/build/components/rich-text/event-listeners/paste-handler.cjs +2 -1
  134. package/build/components/rich-text/event-listeners/paste-handler.cjs.map +3 -3
  135. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs +3 -3
  136. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs.map +3 -3
  137. package/build/components/rich-text/event-listeners/shortcuts.cjs +3 -3
  138. package/build/components/rich-text/event-listeners/shortcuts.cjs.map +3 -3
  139. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs +3 -3
  140. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs.map +3 -3
  141. package/build/components/rich-text/index.cjs +76 -17
  142. package/build/components/rich-text/index.cjs.map +2 -2
  143. package/build/components/spacing-sizes-control/utils.cjs +6 -19
  144. package/build/components/spacing-sizes-control/utils.cjs.map +2 -2
  145. package/build/components/text-indent-control/index.cjs +8 -2
  146. package/build/components/text-indent-control/index.cjs.map +2 -2
  147. package/build/components/typewriter/index.cjs +129 -136
  148. package/build/components/typewriter/index.cjs.map +3 -3
  149. package/build/components/url-input/index.cjs +303 -344
  150. package/build/components/url-input/index.cjs.map +3 -3
  151. package/build/components/use-block-commands/index.cjs +21 -17
  152. package/build/components/use-block-commands/index.cjs.map +2 -2
  153. package/build/components/use-on-block-drop/index.cjs +1 -1
  154. package/build/components/use-on-block-drop/index.cjs.map +2 -2
  155. package/build/components/writing-flow/index.cjs +14 -1
  156. package/build/components/writing-flow/index.cjs.map +3 -3
  157. package/build/components/writing-flow/use-arrow-nav.cjs +42 -6
  158. package/build/components/writing-flow/use-arrow-nav.cjs.map +2 -2
  159. package/build/components/writing-flow/use-click-selection.cjs +29 -3
  160. package/build/components/writing-flow/use-click-selection.cjs.map +2 -2
  161. package/build/components/writing-flow/use-clipboard-handler.cjs +4 -1
  162. package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
  163. package/build/components/writing-flow/use-drag-selection.cjs +3 -8
  164. package/build/components/writing-flow/use-drag-selection.cjs.map +2 -2
  165. package/build/components/writing-flow/use-editable-root-event-handlers.cjs +179 -0
  166. package/build/components/writing-flow/use-editable-root-event-handlers.cjs.map +7 -0
  167. package/build/components/writing-flow/use-editable-root.cjs +75 -0
  168. package/build/components/writing-flow/use-editable-root.cjs.map +7 -0
  169. package/build/components/writing-flow/use-home-end.cjs +64 -0
  170. package/build/components/writing-flow/use-home-end.cjs.map +7 -0
  171. package/build/components/writing-flow/use-input.cjs +15 -5
  172. package/build/components/writing-flow/use-input.cjs.map +2 -2
  173. package/build/components/writing-flow/use-multi-selection.cjs +2 -2
  174. package/build/components/writing-flow/use-multi-selection.cjs.map +2 -2
  175. package/build/components/writing-flow/use-select-all.cjs +14 -2
  176. package/build/components/writing-flow/use-select-all.cjs.map +2 -2
  177. package/build/components/writing-flow/use-selection-observer.cjs +132 -22
  178. package/build/components/writing-flow/use-selection-observer.cjs.map +3 -3
  179. package/build/components/writing-flow/utils.cjs +28 -2
  180. package/build/components/writing-flow/utils.cjs.map +2 -2
  181. package/build/hooks/background.cjs +14 -10
  182. package/build/hooks/background.cjs.map +2 -2
  183. package/build/hooks/block-fields/rich-text/index.cjs +2 -3
  184. package/build/hooks/block-fields/rich-text/index.cjs.map +3 -3
  185. package/build/hooks/block-style-variation.cjs +4 -45
  186. package/build/hooks/block-style-variation.cjs.map +3 -3
  187. package/build/hooks/border.cjs +19 -4
  188. package/build/hooks/border.cjs.map +2 -2
  189. package/build/hooks/custom-css.cjs +6 -2
  190. package/build/hooks/custom-css.cjs.map +2 -2
  191. package/build/hooks/dimensions.cjs +15 -4
  192. package/build/hooks/dimensions.cjs.map +2 -2
  193. package/build/hooks/duotone.cjs +26 -14
  194. package/build/hooks/duotone.cjs.map +3 -3
  195. package/build/hooks/elements.cjs +15 -5
  196. package/build/hooks/elements.cjs.map +2 -2
  197. package/build/hooks/grid-visualizer.cjs +5 -3
  198. package/build/hooks/grid-visualizer.cjs.map +2 -2
  199. package/build/hooks/layout-child.cjs +22 -12
  200. package/build/hooks/layout-child.cjs.map +3 -3
  201. package/build/hooks/layout.cjs +28 -13
  202. package/build/hooks/layout.cjs.map +3 -3
  203. package/build/hooks/line-height.cjs +1 -2
  204. package/build/hooks/line-height.cjs.map +2 -2
  205. package/build/hooks/states.cjs +27 -7
  206. package/build/hooks/states.cjs.map +3 -3
  207. package/build/hooks/style.cjs +31 -9
  208. package/build/hooks/style.cjs.map +3 -3
  209. package/build/hooks/text-align.cjs +36 -6
  210. package/build/hooks/text-align.cjs.map +3 -3
  211. package/build/hooks/typography.cjs +14 -5
  212. package/build/hooks/typography.cjs.map +2 -2
  213. package/build/layouts/constrained.cjs +14 -6
  214. package/build/layouts/constrained.cjs.map +2 -2
  215. package/build/layouts/flex.cjs +27 -19
  216. package/build/layouts/flex.cjs.map +2 -2
  217. package/build/layouts/grid.cjs +0 -2
  218. package/build/layouts/grid.cjs.map +2 -2
  219. package/build/private-apis.cjs +9 -5
  220. package/build/private-apis.cjs.map +3 -3
  221. package/build/store/actions.cjs +11 -6
  222. package/build/store/actions.cjs.map +2 -2
  223. package/build/store/private-selectors.cjs +41 -3
  224. package/build/store/private-selectors.cjs.map +3 -3
  225. package/build/store/reducer.cjs +6 -6
  226. package/build/store/reducer.cjs.map +2 -2
  227. package/build/store/selectors.cjs +23 -0
  228. package/build/store/selectors.cjs.map +2 -2
  229. package/build/utils/block-bindings.cjs +29 -0
  230. package/build/utils/block-bindings.cjs.map +2 -2
  231. package/build/utils/dom.cjs +14 -0
  232. package/build/utils/dom.cjs.map +2 -2
  233. package/build/{components/rich-text/input-event.cjs → utils/native-undo.cjs} +29 -24
  234. package/build/utils/native-undo.cjs.map +7 -0
  235. package/build-module/components/alignment-control/ui.mjs +2 -4
  236. package/build-module/components/alignment-control/ui.mjs.map +2 -2
  237. package/build-module/components/background-image-control/index.mjs +43 -10
  238. package/build-module/components/background-image-control/index.mjs.map +2 -2
  239. package/build-module/components/block-alignment-control/ui.mjs +5 -3
  240. package/build-module/components/block-alignment-control/ui.mjs.map +2 -2
  241. package/build-module/components/block-canvas/index.mjs +7 -2
  242. package/build-module/components/block-canvas/index.mjs.map +2 -2
  243. package/build-module/components/block-controls/groups.mjs +3 -1
  244. package/build-module/components/block-controls/groups.mjs.map +2 -2
  245. package/build-module/components/block-edit/edit.mjs +11 -18
  246. package/build-module/components/block-edit/edit.mjs.map +2 -2
  247. package/build-module/components/block-inspector/index.mjs +74 -46
  248. package/build-module/components/block-inspector/index.mjs.map +2 -2
  249. package/build-module/components/block-list/block-html.mjs +4 -1
  250. package/build-module/components/block-list/block-html.mjs.map +2 -2
  251. package/build-module/components/block-list/block.mjs +9 -3
  252. package/build-module/components/block-list/block.mjs.map +3 -3
  253. package/build-module/components/block-list/index.mjs +1 -3
  254. package/build-module/components/block-list/index.mjs.map +2 -2
  255. package/build-module/components/block-list/use-block-props/index.mjs +7 -2
  256. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  257. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs +9 -4
  258. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs.map +2 -2
  259. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +11 -4
  260. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs.map +2 -2
  261. package/build-module/components/block-list/use-block-props/use-register-block-event-handlers.mjs +28 -0
  262. package/build-module/components/block-list/use-block-props/use-register-block-event-handlers.mjs.map +7 -0
  263. package/build-module/components/block-parent-selector/index.mjs +2 -2
  264. package/build-module/components/block-parent-selector/index.mjs.map +2 -2
  265. package/build-module/components/block-toolbar/index.mjs +43 -24
  266. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  267. package/build-module/components/block-toolbar/switch-section-style.mjs +4 -2
  268. package/build-module/components/block-toolbar/switch-section-style.mjs.map +2 -2
  269. package/build-module/components/block-tools/empty-block-inserter.mjs +2 -7
  270. package/build-module/components/block-tools/empty-block-inserter.mjs.map +2 -2
  271. package/build-module/components/block-tools/index.mjs +7 -2
  272. package/build-module/components/block-tools/index.mjs.map +2 -2
  273. package/build-module/components/block-vertical-alignment-control/ui.mjs +4 -6
  274. package/build-module/components/block-vertical-alignment-control/ui.mjs.map +2 -2
  275. package/build-module/components/block-visibility/modal.mjs +22 -10
  276. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  277. package/build-module/components/block-visibility/use-block-visibility.mjs +17 -7
  278. package/build-module/components/block-visibility/use-block-visibility.mjs.map +2 -2
  279. package/build-module/components/block-visibility/utils.mjs +18 -3
  280. package/build-module/components/block-visibility/utils.mjs.map +2 -2
  281. package/build-module/components/block-visibility/viewport-menu-item.mjs +7 -1
  282. package/build-module/components/block-visibility/viewport-menu-item.mjs.map +2 -2
  283. package/build-module/components/block-visibility/viewport-toolbar.mjs +5 -0
  284. package/build-module/components/block-visibility/viewport-toolbar.mjs.map +2 -2
  285. package/build-module/components/block-visibility/viewport-visibility-info.mjs +5 -1
  286. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  287. package/build-module/components/border-radius-control/utils.mjs +11 -53
  288. package/build-module/components/border-radius-control/utils.mjs.map +2 -2
  289. package/build-module/components/child-layout-control/index.mjs +0 -4
  290. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  291. package/build-module/components/colors-gradients/control.mjs +5 -3
  292. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  293. package/build-module/components/dimension-control/index.mjs +30 -20
  294. package/build-module/components/dimension-control/index.mjs.map +2 -2
  295. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +10 -6
  296. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  297. package/build-module/components/editor-styles/index.mjs +9 -1
  298. package/build-module/components/editor-styles/index.mjs.map +2 -2
  299. package/build-module/components/global-styles/background-panel.mjs +71 -29
  300. package/build-module/components/global-styles/background-panel.mjs.map +2 -2
  301. package/build-module/components/global-styles/border-panel.mjs +157 -56
  302. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  303. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs +51 -15
  304. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs.map +2 -2
  305. package/build-module/components/global-styles/color-panel.mjs +63 -17
  306. package/build-module/components/global-styles/color-panel.mjs.map +2 -2
  307. package/build-module/components/global-styles/dimensions-panel.mjs +248 -66
  308. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  309. package/build-module/components/global-styles/filters-panel.mjs +64 -21
  310. package/build-module/components/global-styles/filters-panel.mjs.map +2 -2
  311. package/build-module/components/global-styles/hooks.mjs +4 -1
  312. package/build-module/components/global-styles/hooks.mjs.map +2 -2
  313. package/build-module/components/global-styles/inheritance/index.mjs +108 -0
  314. package/build-module/components/global-styles/inheritance/index.mjs.map +7 -0
  315. package/build-module/components/global-styles/inherited-value-context.mjs +141 -0
  316. package/build-module/components/global-styles/inherited-value-context.mjs.map +7 -0
  317. package/build-module/components/global-styles/shadow-panel-components.mjs +38 -20
  318. package/build-module/components/global-styles/shadow-panel-components.mjs.map +2 -2
  319. package/build-module/components/global-styles/state-control-badges.mjs +41 -5
  320. package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
  321. package/build-module/components/global-styles/state-control.mjs +1 -1
  322. package/build-module/components/global-styles/state-control.mjs.map +2 -2
  323. package/build-module/components/global-styles/typography-panel.mjs +276 -80
  324. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  325. package/build-module/components/image-size-control/index.mjs +2 -4
  326. package/build-module/components/image-size-control/index.mjs.map +2 -2
  327. package/build-module/components/inserter/media-tab/hooks.mjs +33 -6
  328. package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
  329. package/build-module/components/inserter/media-tab/media-panel.mjs +86 -18
  330. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  331. package/build-module/components/inspector-controls-tabs/styles-tab.mjs +6 -1
  332. package/build-module/components/inspector-controls-tabs/styles-tab.mjs.map +2 -2
  333. package/build-module/components/keyboard-shortcuts/index.mjs +19 -11
  334. package/build-module/components/keyboard-shortcuts/index.mjs.map +2 -2
  335. package/build-module/components/line-height-control/index.mjs +1 -2
  336. package/build-module/components/line-height-control/index.mjs.map +2 -2
  337. package/build-module/components/link-control/index.mjs +4 -2
  338. package/build-module/components/link-control/index.mjs.map +2 -2
  339. package/build-module/components/list-view/block.mjs +13 -4
  340. package/build-module/components/list-view/block.mjs.map +2 -2
  341. package/build-module/components/media-placeholder/index.mjs +0 -1
  342. package/build-module/components/media-placeholder/index.mjs.map +2 -2
  343. package/build-module/components/preset-input-control/index.mjs +2 -1
  344. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  345. package/build-module/components/provider/block-refs-provider.mjs +8 -2
  346. package/build-module/components/provider/block-refs-provider.mjs.map +2 -2
  347. package/build-module/components/provider/index.mjs +1 -1
  348. package/build-module/components/provider/index.mjs.map +2 -2
  349. package/build-module/components/provider/use-block-sync.mjs +18 -6
  350. package/build-module/components/provider/use-block-sync.mjs.map +2 -2
  351. package/build-module/components/provider/use-media-upload-settings.mjs +3 -1
  352. package/build-module/components/provider/use-media-upload-settings.mjs.map +2 -2
  353. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs +8 -5
  354. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs.map +2 -2
  355. package/build-module/components/rich-text/event-listeners/delete.mjs +7 -4
  356. package/build-module/components/rich-text/event-listeners/delete.mjs.map +2 -2
  357. package/build-module/components/rich-text/event-listeners/enter.mjs +8 -3
  358. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  359. package/build-module/components/rich-text/event-listeners/input-events.mjs +3 -3
  360. package/build-module/components/rich-text/event-listeners/input-events.mjs.map +2 -2
  361. package/build-module/components/rich-text/event-listeners/input-rules.mjs +8 -5
  362. package/build-module/components/rich-text/event-listeners/input-rules.mjs.map +2 -2
  363. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs +3 -3
  364. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs.map +2 -2
  365. package/build-module/components/rich-text/event-listeners/paste-handler.mjs +8 -2
  366. package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
  367. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs +3 -3
  368. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs.map +2 -2
  369. package/build-module/components/rich-text/event-listeners/shortcuts.mjs +3 -3
  370. package/build-module/components/rich-text/event-listeners/shortcuts.mjs.map +2 -2
  371. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs +3 -3
  372. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs.map +2 -2
  373. package/build-module/components/rich-text/index.mjs +79 -14
  374. package/build-module/components/rich-text/index.mjs.map +2 -2
  375. package/build-module/components/spacing-sizes-control/utils.mjs +6 -18
  376. package/build-module/components/spacing-sizes-control/utils.mjs.map +2 -2
  377. package/build-module/components/text-indent-control/index.mjs +8 -2
  378. package/build-module/components/text-indent-control/index.mjs.map +2 -2
  379. package/build-module/components/typewriter/index.mjs +129 -136
  380. package/build-module/components/typewriter/index.mjs.map +2 -2
  381. package/build-module/components/url-input/index.mjs +306 -353
  382. package/build-module/components/url-input/index.mjs.map +2 -2
  383. package/build-module/components/use-block-commands/index.mjs +21 -17
  384. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  385. package/build-module/components/use-on-block-drop/index.mjs +2 -2
  386. package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
  387. package/build-module/components/writing-flow/index.mjs +14 -1
  388. package/build-module/components/writing-flow/index.mjs.map +2 -2
  389. package/build-module/components/writing-flow/use-arrow-nav.mjs +43 -7
  390. package/build-module/components/writing-flow/use-arrow-nav.mjs.map +2 -2
  391. package/build-module/components/writing-flow/use-click-selection.mjs +29 -3
  392. package/build-module/components/writing-flow/use-click-selection.mjs.map +2 -2
  393. package/build-module/components/writing-flow/use-clipboard-handler.mjs +5 -2
  394. package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
  395. package/build-module/components/writing-flow/use-drag-selection.mjs +1 -6
  396. package/build-module/components/writing-flow/use-drag-selection.mjs.map +2 -2
  397. package/build-module/components/writing-flow/use-editable-root-event-handlers.mjs +154 -0
  398. package/build-module/components/writing-flow/use-editable-root-event-handlers.mjs.map +7 -0
  399. package/build-module/components/writing-flow/use-editable-root.mjs +54 -0
  400. package/build-module/components/writing-flow/use-editable-root.mjs.map +7 -0
  401. package/build-module/components/writing-flow/use-home-end.mjs +43 -0
  402. package/build-module/components/writing-flow/use-home-end.mjs.map +7 -0
  403. package/build-module/components/writing-flow/use-input.mjs +15 -5
  404. package/build-module/components/writing-flow/use-input.mjs.map +2 -2
  405. package/build-module/components/writing-flow/use-multi-selection.mjs +2 -2
  406. package/build-module/components/writing-flow/use-multi-selection.mjs.map +2 -2
  407. package/build-module/components/writing-flow/use-select-all.mjs +19 -3
  408. package/build-module/components/writing-flow/use-select-all.mjs.map +2 -2
  409. package/build-module/components/writing-flow/use-selection-observer.mjs +134 -21
  410. package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
  411. package/build-module/components/writing-flow/utils.mjs +26 -1
  412. package/build-module/components/writing-flow/utils.mjs.map +2 -2
  413. package/build-module/hooks/background.mjs +14 -10
  414. package/build-module/hooks/background.mjs.map +2 -2
  415. package/build-module/hooks/block-fields/rich-text/index.mjs +2 -6
  416. package/build-module/hooks/block-fields/rich-text/index.mjs.map +2 -2
  417. package/build-module/hooks/block-style-variation.mjs +8 -44
  418. package/build-module/hooks/block-style-variation.mjs.map +2 -2
  419. package/build-module/hooks/border.mjs +19 -4
  420. package/build-module/hooks/border.mjs.map +2 -2
  421. package/build-module/hooks/custom-css.mjs +7 -3
  422. package/build-module/hooks/custom-css.mjs.map +2 -2
  423. package/build-module/hooks/dimensions.mjs +15 -4
  424. package/build-module/hooks/dimensions.mjs.map +2 -2
  425. package/build-module/hooks/duotone.mjs +20 -9
  426. package/build-module/hooks/duotone.mjs.map +2 -2
  427. package/build-module/hooks/elements.mjs +15 -5
  428. package/build-module/hooks/elements.mjs.map +2 -2
  429. package/build-module/hooks/grid-visualizer.mjs +5 -3
  430. package/build-module/hooks/grid-visualizer.mjs.map +2 -2
  431. package/build-module/hooks/layout-child.mjs +22 -12
  432. package/build-module/hooks/layout-child.mjs.map +2 -2
  433. package/build-module/hooks/layout.mjs +28 -13
  434. package/build-module/hooks/layout.mjs.map +2 -2
  435. package/build-module/hooks/line-height.mjs +1 -2
  436. package/build-module/hooks/line-height.mjs.map +2 -2
  437. package/build-module/hooks/states.mjs +27 -7
  438. package/build-module/hooks/states.mjs.map +2 -2
  439. package/build-module/hooks/style.mjs +40 -11
  440. package/build-module/hooks/style.mjs.map +2 -2
  441. package/build-module/hooks/text-align.mjs +39 -10
  442. package/build-module/hooks/text-align.mjs.map +2 -2
  443. package/build-module/hooks/typography.mjs +14 -5
  444. package/build-module/hooks/typography.mjs.map +2 -2
  445. package/build-module/layouts/constrained.mjs +14 -6
  446. package/build-module/layouts/constrained.mjs.map +2 -2
  447. package/build-module/layouts/flex.mjs +27 -19
  448. package/build-module/layouts/flex.mjs.map +2 -2
  449. package/build-module/layouts/grid.mjs +0 -2
  450. package/build-module/layouts/grid.mjs.map +2 -2
  451. package/build-module/private-apis.mjs +7 -3
  452. package/build-module/private-apis.mjs.map +2 -2
  453. package/build-module/store/actions.mjs +12 -7
  454. package/build-module/store/actions.mjs.map +2 -2
  455. package/build-module/store/private-selectors.mjs +42 -3
  456. package/build-module/store/private-selectors.mjs.map +2 -2
  457. package/build-module/store/reducer.mjs +6 -6
  458. package/build-module/store/reducer.mjs.map +2 -2
  459. package/build-module/store/selectors.mjs +23 -0
  460. package/build-module/store/selectors.mjs.map +2 -2
  461. package/build-module/utils/block-bindings.mjs +28 -0
  462. package/build-module/utils/block-bindings.mjs.map +2 -2
  463. package/build-module/utils/dom.mjs +13 -0
  464. package/build-module/utils/dom.mjs.map +2 -2
  465. package/build-module/utils/native-undo.mjs +29 -0
  466. package/build-module/utils/native-undo.mjs.map +7 -0
  467. package/build-style/content-rtl.css +14 -27
  468. package/build-style/content.css +14 -27
  469. package/build-style/default-editor-styles-rtl.css +1 -1
  470. package/build-style/default-editor-styles.css +1 -1
  471. package/build-style/style-rtl.css +191 -61
  472. package/build-style/style.css +191 -61
  473. package/build-types/components/block-context/index.d.ts +7 -0
  474. package/build-types/components/block-context/index.d.ts.map +1 -1
  475. package/build-types/utils/block-bindings.d.ts +19 -0
  476. package/build-types/utils/block-bindings.d.ts.map +1 -1
  477. package/build-types/utils/dom.d.ts +11 -0
  478. package/build-types/utils/dom.d.ts.map +1 -1
  479. package/build-types/utils/get-px-from-css-unit.d.ts +2 -2
  480. package/build-types/utils/get-px-from-css-unit.d.ts.map +1 -1
  481. package/build-types/utils/pasting.d.ts +1 -1
  482. package/build-types/utils/pasting.d.ts.map +1 -1
  483. package/package.json +43 -44
  484. package/src/components/alignment-control/test/__snapshots__/index.js.snap +1 -1
  485. package/src/components/alignment-control/ui.js +2 -4
  486. package/src/components/background-image-control/index.js +74 -37
  487. package/src/components/background-image-control/style.scss +13 -4
  488. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +3 -3
  489. package/src/components/block-alignment-control/test/index.js +1 -1
  490. package/src/components/block-alignment-control/ui.js +4 -2
  491. package/src/components/block-breadcrumb/test/__snapshots__/index.js.snap +1 -1
  492. package/src/components/block-canvas/index.js +9 -2
  493. package/src/components/block-card/style.scss +1 -1
  494. package/src/components/block-compare/test/__snapshots__/block-view.js.snap +1 -1
  495. package/src/components/block-controls/groups.js +2 -0
  496. package/src/components/block-edit/edit.js +13 -31
  497. package/src/components/block-icon/test/__snapshots__/index.js.snap +1 -1
  498. package/src/components/block-inspector/index.js +60 -31
  499. package/src/components/block-list/block-html.js +5 -0
  500. package/src/components/block-list/block.js +6 -0
  501. package/src/components/block-list/content.scss +1 -11
  502. package/src/components/block-list/index.js +0 -2
  503. package/src/components/block-list/use-block-props/index.js +7 -1
  504. package/src/components/block-list/use-block-props/use-focus-first-element.js +23 -4
  505. package/src/components/block-list/use-block-props/use-focus-handler.js +35 -9
  506. package/src/components/block-list/use-block-props/use-register-block-event-handlers.js +45 -0
  507. package/src/components/block-lock/style.scss +1 -1
  508. package/src/components/block-manager/style.scss +1 -1
  509. package/src/components/block-navigation/style.scss +1 -1
  510. package/src/components/block-parent-selector/index.js +5 -2
  511. package/src/components/block-quick-navigation/style.scss +1 -3
  512. package/src/components/block-styles/style.scss +2 -2
  513. package/src/components/block-toolbar/index.js +41 -18
  514. package/src/components/block-toolbar/switch-section-style.js +5 -2
  515. package/src/components/block-tools/empty-block-inserter.js +3 -7
  516. package/src/components/block-tools/index.js +7 -0
  517. package/src/components/block-types-list/style.scss +0 -1
  518. package/src/components/block-vertical-alignment-control/test/__snapshots__/index.js.snap +3 -3
  519. package/src/components/block-vertical-alignment-control/test/index.js +18 -2
  520. package/src/components/block-vertical-alignment-control/ui.js +3 -5
  521. package/src/components/block-visibility/modal.js +24 -10
  522. package/src/components/block-visibility/style.scss +1 -1
  523. package/src/components/block-visibility/test/use-block-visibility.js +128 -35
  524. package/src/components/block-visibility/test/utils.js +11 -0
  525. package/src/components/block-visibility/use-block-visibility.js +33 -11
  526. package/src/components/block-visibility/utils.js +31 -6
  527. package/src/components/block-visibility/viewport-menu-item.js +10 -1
  528. package/src/components/block-visibility/viewport-toolbar.js +6 -0
  529. package/src/components/block-visibility/viewport-visibility-info.js +5 -1
  530. package/src/components/border-radius-control/test/utils.js +0 -41
  531. package/src/components/border-radius-control/utils.js +16 -107
  532. package/src/components/button-block-appender/content.scss +7 -9
  533. package/src/components/child-layout-control/index.js +0 -4
  534. package/src/components/color-palette/test/__snapshots__/control.js.snap +3 -3
  535. package/src/components/colors-gradients/control.js +6 -3
  536. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +1 -1
  537. package/src/components/dimension-control/index.js +13 -1
  538. package/src/components/dimensions-tool/aspect-ratio-tool.js +13 -6
  539. package/src/components/editor-styles/index.js +16 -1
  540. package/src/components/font-family/stories/index.story.jsx +1 -1
  541. package/src/components/global-styles/background-panel.js +107 -34
  542. package/src/components/global-styles/border-panel.js +219 -48
  543. package/src/components/global-styles/color-gradient-dropdown-item.js +93 -28
  544. package/src/components/global-styles/color-panel.js +92 -11
  545. package/src/components/global-styles/dimensions-panel.js +422 -71
  546. package/src/components/global-styles/filters-panel.js +88 -28
  547. package/src/components/global-styles/hooks.js +8 -1
  548. package/src/components/global-styles/inheritance/index.js +204 -0
  549. package/src/components/global-styles/inheritance/style.scss +184 -0
  550. package/src/components/global-styles/inheritance/test/index.js +281 -0
  551. package/src/components/global-styles/inherited-value-context.js +271 -0
  552. package/src/components/global-styles/shadow-panel-components.js +48 -26
  553. package/src/components/global-styles/state-control-badges.js +45 -6
  554. package/src/components/global-styles/state-control.js +2 -2
  555. package/src/components/global-styles/style.scss +5 -0
  556. package/src/components/global-styles/test/background-panel.js +338 -1
  557. package/src/components/global-styles/test/border-panel.js +441 -0
  558. package/src/components/global-styles/test/color-panel.js +182 -2
  559. package/src/components/global-styles/test/dimensions-panel.js +753 -0
  560. package/src/components/global-styles/test/filters-panel.js +194 -0
  561. package/src/components/global-styles/test/inherited-value-context-core.js +98 -0
  562. package/src/components/global-styles/test/inherited-value-context.js +454 -0
  563. package/src/components/global-styles/test/state-control-badges.js +65 -0
  564. package/src/components/global-styles/test/typography-panel-core.js +185 -0
  565. package/src/components/global-styles/test/typography-panel.js +849 -12
  566. package/src/components/global-styles/typography-panel.js +449 -101
  567. package/src/components/image-editor/style.scss +33 -0
  568. package/src/components/image-size-control/index.js +0 -2
  569. package/src/components/inner-blocks/test/__snapshots__/index.js.snap +1 -1
  570. package/src/components/inserter/media-tab/hooks.js +55 -7
  571. package/src/components/inserter/media-tab/media-panel.js +117 -21
  572. package/src/components/inserter/media-tab/test/hooks.js +63 -0
  573. package/src/components/inserter/media-tab/test/media-panel.js +127 -0
  574. package/src/components/inserter/style.scss +19 -16
  575. package/src/components/inserter-list-item/style.scss +0 -15
  576. package/src/components/inspector-controls-tabs/styles-tab.js +5 -1
  577. package/src/components/keyboard-shortcuts/index.js +28 -11
  578. package/src/components/line-height-control/index.js +1 -2
  579. package/src/components/link-control/index.js +7 -2
  580. package/src/components/link-control/style.scss +2 -2
  581. package/src/components/link-control/test/index.js +6 -6
  582. package/src/components/link-picker/style.scss +1 -2
  583. package/src/components/list-view/block.js +13 -4
  584. package/src/components/list-view/style.scss +4 -5
  585. package/src/components/media-placeholder/index.js +0 -1
  586. package/src/components/multi-selection-inspector/style.scss +1 -1
  587. package/src/components/preset-input-control/index.js +4 -1
  588. package/src/components/provider/block-refs-provider.js +12 -2
  589. package/src/components/provider/index.js +2 -2
  590. package/src/components/provider/use-block-sync.js +18 -6
  591. package/src/components/provider/use-media-upload-settings.js +2 -0
  592. package/src/components/responsive-block-control/style.scss +1 -1
  593. package/src/components/rich-text/event-listeners/before-input-rules.js +8 -5
  594. package/src/components/rich-text/event-listeners/delete.js +7 -4
  595. package/src/components/rich-text/event-listeners/enter.js +10 -4
  596. package/src/components/rich-text/event-listeners/input-events.js +4 -3
  597. package/src/components/rich-text/event-listeners/input-rules.js +8 -5
  598. package/src/components/rich-text/event-listeners/insert-replacement-text.js +4 -3
  599. package/src/components/rich-text/event-listeners/paste-handler.js +15 -3
  600. package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +4 -3
  601. package/src/components/rich-text/event-listeners/shortcuts.js +4 -3
  602. package/src/components/rich-text/event-listeners/undo-automatic-change.js +4 -3
  603. package/src/components/rich-text/index.js +116 -26
  604. package/src/components/skip-to-selected-block/style.scss +1 -1
  605. package/src/components/spacing-sizes-control/test/utils.js +16 -5
  606. package/src/components/spacing-sizes-control/utils.js +11 -28
  607. package/src/components/text-indent-control/index.js +8 -0
  608. package/src/components/typewriter/index.js +228 -224
  609. package/src/components/url-input/index.js +363 -431
  610. package/src/components/url-input/test/index.js +592 -0
  611. package/src/components/use-block-commands/index.js +27 -17
  612. package/src/components/use-on-block-drop/index.js +2 -2
  613. package/src/components/warning/test/__snapshots__/index.js.snap +1 -1
  614. package/src/components/writing-flow/index.js +17 -1
  615. package/src/components/writing-flow/use-arrow-nav.js +90 -13
  616. package/src/components/writing-flow/use-click-selection.js +55 -5
  617. package/src/components/writing-flow/use-clipboard-handler.js +5 -2
  618. package/src/components/writing-flow/use-drag-selection.js +1 -14
  619. package/src/components/writing-flow/use-editable-root-event-handlers.js +266 -0
  620. package/src/components/writing-flow/use-editable-root.js +112 -0
  621. package/src/components/writing-flow/use-home-end.js +71 -0
  622. package/src/components/writing-flow/use-input.js +25 -8
  623. package/src/components/writing-flow/use-multi-selection.js +2 -3
  624. package/src/components/writing-flow/use-select-all.js +33 -3
  625. package/src/components/writing-flow/use-selection-observer.js +218 -42
  626. package/src/components/writing-flow/utils.js +62 -0
  627. package/src/hooks/background.js +27 -24
  628. package/src/hooks/block-fields/link/styles.scss +1 -6
  629. package/src/hooks/block-fields/media/styles.scss +1 -6
  630. package/src/hooks/block-fields/rich-text/index.js +6 -9
  631. package/src/hooks/block-fields/rich-text/styles.scss +1 -1
  632. package/src/hooks/block-style-variation.js +8 -74
  633. package/src/hooks/border.js +19 -4
  634. package/src/hooks/custom-css.js +15 -6
  635. package/src/hooks/dimensions.js +17 -4
  636. package/src/hooks/duotone.js +26 -8
  637. package/src/hooks/elements.js +14 -4
  638. package/src/hooks/grid-visualizer.js +40 -36
  639. package/src/hooks/layout-child.js +19 -9
  640. package/src/hooks/layout.js +48 -31
  641. package/src/hooks/line-height.js +0 -1
  642. package/src/hooks/states.js +38 -9
  643. package/src/hooks/style.js +67 -17
  644. package/src/hooks/test/inherited-value-wiring.js +411 -0
  645. package/src/hooks/test/preset-round-trip.js +456 -0
  646. package/src/hooks/test/style.js +29 -0
  647. package/src/hooks/test/text-align.js +34 -1
  648. package/src/hooks/text-align.js +41 -10
  649. package/src/hooks/typography.js +35 -24
  650. package/src/layouts/constrained.js +5 -1
  651. package/src/layouts/flex.js +5 -1
  652. package/src/layouts/grid.js +0 -2
  653. package/src/private-apis.js +11 -2
  654. package/src/store/actions.js +53 -19
  655. package/src/store/private-selectors.js +82 -6
  656. package/src/store/reducer.js +9 -9
  657. package/src/store/selectors.js +56 -8
  658. package/src/store/test/actions.js +1 -1
  659. package/src/store/test/private-selectors.js +271 -1
  660. package/src/style.scss +2 -0
  661. package/src/utils/block-bindings.ts +50 -0
  662. package/src/utils/dom.ts +33 -0
  663. package/src/utils/native-undo.js +56 -0
  664. package/src/utils/test/block-bindings.js +181 -0
  665. package/build/components/duotone/utils.cjs +0 -87
  666. package/build/components/duotone/utils.cjs.map +0 -7
  667. package/build/components/rich-text/input-event.cjs.map +0 -7
  668. package/build/components/rich-text/shortcut.cjs +0 -51
  669. package/build/components/rich-text/shortcut.cjs.map +0 -7
  670. package/build-module/components/duotone/utils.mjs +0 -59
  671. package/build-module/components/duotone/utils.mjs.map +0 -7
  672. package/build-module/components/rich-text/input-event.mjs +0 -25
  673. package/build-module/components/rich-text/input-event.mjs.map +0 -7
  674. package/build-module/components/rich-text/shortcut.mjs +0 -26
  675. package/build-module/components/rich-text/shortcut.mjs.map +0 -7
  676. package/src/components/duotone/utils.js +0 -90
  677. package/src/components/rich-text/input-event.js +0 -31
  678. package/src/components/rich-text/shortcut.js +0 -32
  679. package/src/hooks/test/get-variation-styles-with-ref-values.js +0 -91
@@ -3,7 +3,10 @@
3
3
  */
4
4
  import { useSelect, useDispatch } from '@wordpress/data';
5
5
  import { useRefEffect } from '@wordpress/compose';
6
- import { create } from '@wordpress/rich-text';
6
+ import {
7
+ create,
8
+ privateApis as richTextPrivateApis,
9
+ } from '@wordpress/rich-text';
7
10
  import { isSelectionForward } from '@wordpress/dom';
8
11
 
9
12
  /**
@@ -11,6 +14,10 @@ import { isSelectionForward } from '@wordpress/dom';
11
14
  */
12
15
  import { store as blockEditorStore } from '../../store';
13
16
  import { getBlockClientId } from '../../utils/dom';
17
+ import { setContentEditableWrapper } from './utils';
18
+ import { unlock } from '../../lock-unlock';
19
+
20
+ const { ownsSelection } = unlock( richTextPrivateApis );
14
21
 
15
22
  /**
16
23
  * Extract the selection start node from the selection. When the anchor node is
@@ -39,11 +46,13 @@ function extractSelectionStartNode( selection ) {
39
46
  * a text node, the selection offset is the index of a child node. The selection
40
47
  * reaches up to but excluding that child node.
41
48
  *
42
- * @param {Selection} selection The selection.
49
+ * @param {Selection} selection The selection.
50
+ * @param {boolean} isTripleClick Whether the selection comes from a triple
51
+ * click.
43
52
  *
44
53
  * @return {Element} The selection start node.
45
54
  */
46
- function extractSelectionEndNode( selection ) {
55
+ function extractSelectionEndNode( selection, isTripleClick ) {
47
56
  const { focusNode, focusOffset } = selection;
48
57
 
49
58
  if ( focusNode.nodeType === focusNode.TEXT_NODE ) {
@@ -54,11 +63,18 @@ function extractSelectionEndNode( selection ) {
54
63
  return focusNode;
55
64
  }
56
65
 
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 ) ) {
66
+ // A triple click selects the paragraph, but the browser extends the
67
+ // forward selection into the next element at an offset of 0. This may
68
+ // trigger multi selection even though the selection does not visually end
69
+ // in the next block. Keyboard selections that legitimately extend to the
70
+ // same boundary (e.g. Shift+ArrowDown into a focusable block, where the
71
+ // browser reports the boundary at the element instead of its first text
72
+ // position) must not be corrected, so only do this for triple clicks.
73
+ if (
74
+ focusOffset === 0 &&
75
+ isSelectionForward( selection ) &&
76
+ isTripleClick
77
+ ) {
62
78
  return focusNode.previousSibling ?? focusNode.parentElement;
63
79
  }
64
80
 
@@ -75,26 +91,6 @@ function findDepth( a, b ) {
75
91
  return depth;
76
92
  }
77
93
 
78
- /**
79
- * Sets the `contenteditable` wrapper element to `value`.
80
- *
81
- * @param {HTMLElement} node Block element.
82
- * @param {boolean} value `contentEditable` value (true or false)
83
- */
84
- function setContentEditableWrapper( node, value ) {
85
- // Since we are calling this on every selection change, check if the value
86
- // needs to be updated first because it trigger the browser to recalculate
87
- // style.
88
- if ( node.contentEditable !== String( value ) ) {
89
- node.contentEditable = value;
90
-
91
- // Firefox doesn't automatically move focus.
92
- if ( value ) {
93
- node.focus();
94
- }
95
- }
96
- }
97
-
98
94
  function getRichTextElement( node ) {
99
95
  const element =
100
96
  node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;
@@ -105,15 +101,45 @@ function getRichTextElement( node ) {
105
101
  * Sets a multi-selection based on the native selection across blocks.
106
102
  */
107
103
  export default function useSelectionObserver() {
108
- const { multiSelect, selectBlock, selectionChange } =
109
- useDispatch( blockEditorStore );
110
- const { getBlockParents, getBlockSelectionStart, isMultiSelecting } =
111
- useSelect( blockEditorStore );
104
+ const {
105
+ multiSelect,
106
+ selectBlock,
107
+ selectionChange,
108
+ startMultiSelect,
109
+ stopMultiSelect,
110
+ } = useDispatch( blockEditorStore );
111
+ const {
112
+ getBlockParents,
113
+ getBlockSelectionStart,
114
+ isMultiSelecting,
115
+ getSelectionStart,
116
+ getSelectionEnd,
117
+ getSelectedBlockClientId,
118
+ canHostEditableRoot,
119
+ } = unlock( useSelect( blockEditorStore ) );
112
120
  return useRefEffect(
113
121
  ( node ) => {
114
122
  const { ownerDocument } = node;
115
123
  const { defaultView } = ownerDocument;
116
124
 
125
+ let isTripleClick = false;
126
+
127
+ function onMouseDown( event ) {
128
+ isTripleClick = event.detail === 3;
129
+ // A shift+click makes a multi-selection: mark the gesture as
130
+ // in progress so the clicked block's focus handler does not
131
+ // select it (collapsing the native range being made), and so
132
+ // use-multi-selection does not clear the native selection.
133
+ // The selection is built on mouseup.
134
+ if ( event.shiftKey ) {
135
+ startMultiSelect();
136
+ }
137
+ }
138
+
139
+ function onKeyDown() {
140
+ isTripleClick = false;
141
+ }
142
+
117
143
  function onSelectionChange( event ) {
118
144
  const selection = defaultView.getSelection();
119
145
 
@@ -122,7 +148,10 @@ export default function useSelectionObserver() {
122
148
  }
123
149
 
124
150
  const startNode = extractSelectionStartNode( selection );
125
- const endNode = extractSelectionEndNode( selection );
151
+ const endNode = extractSelectionEndNode(
152
+ selection,
153
+ isTripleClick
154
+ );
126
155
 
127
156
  if (
128
157
  ! node.contains( startNode ) ||
@@ -139,6 +168,46 @@ export default function useSelectionObserver() {
139
168
  // For now we check if the event is a `mouse` event.
140
169
  const isClickShift = event.shiftKey && event.type === 'mouseup';
141
170
  if ( selection.isCollapsed && ! isClickShift ) {
171
+ const collapsedClientId = getBlockClientId( startNode );
172
+
173
+ // If the block supports an editable root, keep (or make)
174
+ // the wrapper contentEditable so the native selection can
175
+ // extend across blocks. The wrapper holds focus, so rich
176
+ // text instances don't sync the selection; do it here.
177
+ if (
178
+ ! isMultiSelecting() &&
179
+ collapsedClientId &&
180
+ // Only keep the wrapper editable when the collapsed
181
+ // selection is in the block that is actually selected.
182
+ // A stale native selection may linger in a previously
183
+ // selected editable root block (e.g. Firefox does not
184
+ // always move it), which must not re-enable the wrapper
185
+ // after another block has been selected.
186
+ collapsedClientId === getSelectedBlockClientId() &&
187
+ canHostEditableRoot( collapsedClientId )
188
+ ) {
189
+ setContentEditableWrapper( node, true );
190
+
191
+ // While the wrapper is editable it must hold focus: a
192
+ // nested editable element cannot retain it (the first
193
+ // DOM mutation moves focus to the host, inconsistently
194
+ // across browsers). Don't steal focus from UI elements
195
+ // (e.g. buttons) or editables outside the block (e.g.
196
+ // the post title). The rich text instance owning the
197
+ // selection syncs it to the store itself.
198
+ const { activeElement } = ownerDocument;
199
+ if (
200
+ activeElement !== node &&
201
+ activeElement?.isContentEditable &&
202
+ node.contains( activeElement ) &&
203
+ getBlockClientId( activeElement ) ===
204
+ collapsedClientId
205
+ ) {
206
+ node.focus();
207
+ }
208
+ return;
209
+ }
210
+
142
211
  if (
143
212
  node.contentEditable === 'true' &&
144
213
  ! isMultiSelecting()
@@ -210,7 +279,6 @@ export default function useSelectionObserver() {
210
279
  return;
211
280
  }
212
281
  }
213
-
214
282
  const isSingularSelection = startClientId === endClientId;
215
283
  if ( isSingularSelection ) {
216
284
  if ( ! isMultiSelecting() ) {
@@ -226,7 +294,16 @@ export default function useSelectionObserver() {
226
294
 
227
295
  if (
228
296
  richTextElement &&
229
- ownerDocument.activeElement !== richTextElement
297
+ // The rich text instance syncs the selection
298
+ // itself when its element is editable and owns the
299
+ // selection (also through a focused editing host).
300
+ // It may be temporarily non-editable while a drag
301
+ // that started outside it is in progress (see
302
+ // rich-text's preventFocusCapture).
303
+ ( richTextElement.contentEditable !== 'true' ||
304
+ ( ownerDocument.activeElement !==
305
+ richTextElement &&
306
+ ! ownsSelection( richTextElement ) ) )
230
307
  ) {
231
308
  const range = selection.getRangeAt( 0 );
232
309
  const richTextData = create( {
@@ -234,7 +311,7 @@ export default function useSelectionObserver() {
234
311
  range,
235
312
  __unstableIsEditableTree: true,
236
313
  } );
237
- selectionChange( {
314
+ const selectionUpdate = {
238
315
  start: {
239
316
  clientId: startClientId,
240
317
  attributeKey:
@@ -247,9 +324,34 @@ export default function useSelectionObserver() {
247
324
  attributeKey:
248
325
  richTextElement.dataset
249
326
  .wpBlockAttributeKey,
250
- offset: richTextData.end,
327
+ // Clamp the end offset to the element. A
328
+ // forward selection can overshoot past the
329
+ // rich text (e.g. a triple click extends
330
+ // into the next block at offset 0), leaving
331
+ // `end` undefined; that means the selection
332
+ // reaches through the end of this element's
333
+ // content.
334
+ offset:
335
+ richTextData.end ??
336
+ richTextData.text.length,
251
337
  },
252
- } );
338
+ };
339
+ const { start, end } = selectionUpdate;
340
+ const selectionStart = getSelectionStart();
341
+ const selectionEnd = getSelectionEnd();
342
+
343
+ // Skip the dispatch when the store already holds
344
+ // the same selection.
345
+ if (
346
+ selectionStart.clientId !== start.clientId ||
347
+ selectionEnd.clientId !== end.clientId ||
348
+ selectionStart.attributeKey !==
349
+ start.attributeKey ||
350
+ selectionStart.offset !== start.offset ||
351
+ selectionEnd.offset !== end.offset
352
+ ) {
353
+ selectionChange( selectionUpdate );
354
+ }
253
355
  } else {
254
356
  selectBlock( startClientId );
255
357
  }
@@ -267,9 +369,19 @@ export default function useSelectionObserver() {
267
369
  ];
268
370
  const depth = findDepth( startPath, endPath );
269
371
 
372
+ // If one path ends before they diverge, one block
373
+ // contains the other, so there are no sibling blocks
374
+ // to promote the selection to. Record the selection as
375
+ // is: it resolves to the outer block, which is treated
376
+ // as fully selected. See `getSelectionNestingAncestor`
377
+ // in the store.
378
+ const isAncestorDescendant =
379
+ depth >= startPath.length || depth >= endPath.length;
380
+
270
381
  if (
271
- startPath[ depth ] !== startClientId ||
272
- endPath[ depth ] !== endClientId
382
+ ! isAncestorDescendant &&
383
+ ( startPath[ depth ] !== startClientId ||
384
+ endPath[ depth ] !== endClientId )
273
385
  ) {
274
386
  multiSelect( startPath[ depth ], endPath[ depth ] );
275
387
  return;
@@ -318,17 +430,81 @@ export default function useSelectionObserver() {
318
430
  }
319
431
  }
320
432
 
433
+ // Native `selectionchange` events are asynchronous: a clipboard
434
+ // event may fire before the store has been updated with a cross
435
+ // block selection that was just made. Sync it before the clipboard
436
+ // handlers (bubble phase) read the store.
437
+ function ensureMultiBlockSelectionSync( event ) {
438
+ const selection = defaultView.getSelection();
439
+
440
+ if ( ! selection.rangeCount || selection.isCollapsed ) {
441
+ return;
442
+ }
443
+
444
+ // Only a selection across different blocks needs to be synced
445
+ // here; rich text owns selections within a single block.
446
+ const startClientId = getBlockClientId(
447
+ extractSelectionStartNode( selection )
448
+ );
449
+ const endClientId = getBlockClientId(
450
+ extractSelectionEndNode( selection, isTripleClick )
451
+ );
452
+
453
+ if ( startClientId !== endClientId ) {
454
+ onSelectionChange( event );
455
+ }
456
+ }
457
+
321
458
  ownerDocument.addEventListener(
322
459
  'selectionchange',
323
460
  onSelectionChange
324
461
  );
325
- defaultView.addEventListener( 'mouseup', onSelectionChange );
462
+ function onMouseUp( event ) {
463
+ onSelectionChange( event );
464
+ stopMultiSelect();
465
+ }
466
+
467
+ defaultView.addEventListener( 'mouseup', onMouseUp );
468
+ node.addEventListener( 'mousedown', onMouseDown );
469
+ node.addEventListener( 'keydown', onKeyDown );
470
+ ownerDocument.addEventListener(
471
+ 'copy',
472
+ ensureMultiBlockSelectionSync,
473
+ true
474
+ );
475
+ ownerDocument.addEventListener(
476
+ 'cut',
477
+ ensureMultiBlockSelectionSync,
478
+ true
479
+ );
480
+ ownerDocument.addEventListener(
481
+ 'paste',
482
+ ensureMultiBlockSelectionSync,
483
+ true
484
+ );
326
485
  return () => {
327
486
  ownerDocument.removeEventListener(
328
487
  'selectionchange',
329
488
  onSelectionChange
330
489
  );
331
- defaultView.removeEventListener( 'mouseup', onSelectionChange );
490
+ defaultView.removeEventListener( 'mouseup', onMouseUp );
491
+ node.removeEventListener( 'mousedown', onMouseDown );
492
+ node.removeEventListener( 'keydown', onKeyDown );
493
+ ownerDocument.removeEventListener(
494
+ 'copy',
495
+ ensureMultiBlockSelectionSync,
496
+ true
497
+ );
498
+ ownerDocument.removeEventListener(
499
+ 'cut',
500
+ ensureMultiBlockSelectionSync,
501
+ true
502
+ );
503
+ ownerDocument.removeEventListener(
504
+ 'paste',
505
+ ensureMultiBlockSelectionSync,
506
+ true
507
+ );
332
508
  };
333
509
  },
334
510
  [ multiSelect, selectBlock, selectionChange, getBlockParents ]
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
+ import { __ } from '@wordpress/i18n';
4
5
  import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
5
6
  import {
6
7
  serialize,
@@ -116,3 +117,64 @@ function toPlainText( html ) {
116
117
  // Merge any consecutive line breaks
117
118
  return plainText.replace( /\n\n+/g, '\n\n' );
118
119
  }
120
+
121
+ /**
122
+ * Makes the wrapper element an editing host, or stops it from being one. The
123
+ * ARIA attributes travel with the editability: while the wrapper is the
124
+ * active editing host it must present as a named multiline textbox, per the
125
+ * WAI-ARIA textbox role, which requires an accessible name.
126
+ *
127
+ * @param {HTMLElement} node Wrapper element.
128
+ * @param {boolean} value Whether the wrapper should be an
129
+ * editing host.
130
+ * @param {Object} options
131
+ * @param {boolean} options.focus Move focus to the wrapper when it
132
+ * becomes an editing host (Firefox does
133
+ * not automatically move it). Default
134
+ * true.
135
+ *
136
+ * @return {boolean} Whether the wrapper is an editing host now.
137
+ */
138
+ export function setContentEditableWrapper(
139
+ node,
140
+ value,
141
+ { focus = true } = {}
142
+ ) {
143
+ // Check first: this is called on every selection change, and setting
144
+ // contentEditable triggers a style recalculation.
145
+ if ( node.contentEditable === String( value ) ) {
146
+ return value;
147
+ }
148
+
149
+ node.contentEditable = value;
150
+
151
+ if ( ! value ) {
152
+ node.removeAttribute( 'role' );
153
+ node.removeAttribute( 'aria-multiline' );
154
+ node.removeAttribute( 'aria-label' );
155
+ return false;
156
+ }
157
+
158
+ // Only act as an editing host if the environment supports it (JSDOM
159
+ // does not implement contentEditable): without editing host semantics
160
+ // the wrapper must not claim focus or textbox semantics.
161
+ if ( ! node.isContentEditable ) {
162
+ node.removeAttribute( 'contenteditable' );
163
+ return false;
164
+ }
165
+
166
+ // Expose the host as a named multiline textbox so it has a role and
167
+ // accessible name once it takes focus. The label is generic because the
168
+ // host can span several blocks.
169
+ node.setAttribute( 'role', 'textbox' );
170
+ node.setAttribute( 'aria-multiline', 'true' );
171
+ node.setAttribute( 'aria-label', __( 'Editor canvas' ) );
172
+
173
+ if ( focus ) {
174
+ // Without preventScroll, focusing the wrapper scrolls the
175
+ // viewport to the top of the wrapper.
176
+ node.focus( { preventScroll: true } );
177
+ }
178
+
179
+ return true;
180
+ }
@@ -24,13 +24,13 @@ import {
24
24
  hasBackgroundImageValue,
25
25
  hasBackgroundGradientValue,
26
26
  } from '../components/global-styles/background-panel';
27
- import { globalStylesDataKey } from '../store/private-keys';
28
27
  import {
29
28
  getStyleForState,
30
29
  isDefaultBlockStyleState,
31
30
  setStyleForState,
32
31
  useBlockStyleState,
33
32
  } from './block-style-state';
33
+ import { useResolvedStyle } from '../components/global-styles/inherited-value-context';
34
34
 
35
35
  export const BACKGROUND_SUPPORT_KEY = 'background';
36
36
 
@@ -179,24 +179,25 @@ export function BackgroundImagePanel( {
179
179
  asWrapper,
180
180
  } ) {
181
181
  const selectedState = useBlockStyleState();
182
- const { style, className, backgroundColor, gradient, inheritedValue } =
183
- useSelect(
184
- ( select ) => {
185
- const { getBlockAttributes, getSettings } =
186
- select( blockEditorStore );
187
- const _settings = getSettings();
188
- const blockAttributes = getBlockAttributes( clientId );
189
- return {
190
- style: blockAttributes?.style,
191
- className: blockAttributes?.className,
192
- backgroundColor: blockAttributes?.backgroundColor,
193
- gradient: blockAttributes?.gradient,
194
- inheritedValue:
195
- _settings[ globalStylesDataKey ]?.blocks?.[ name ],
196
- };
197
- },
198
- [ clientId, name ]
199
- );
182
+ const { style, className, backgroundColor, gradient } = useSelect(
183
+ ( select ) => {
184
+ const { getBlockAttributes } = select( blockEditorStore );
185
+ const blockAttributes = getBlockAttributes( clientId );
186
+ return {
187
+ style: blockAttributes?.style,
188
+ className: blockAttributes?.className,
189
+ backgroundColor: blockAttributes?.backgroundColor,
190
+ gradient: blockAttributes?.gradient,
191
+ };
192
+ },
193
+ [ clientId ]
194
+ );
195
+
196
+ const { value: inheritedValue } = useResolvedStyle(
197
+ name,
198
+ className,
199
+ selectedState
200
+ );
200
201
 
201
202
  const backgroundGradientSupported = hasBackgroundSupport(
202
203
  name,
@@ -234,13 +235,15 @@ export function BackgroundImagePanel( {
234
235
  },
235
236
  } ),
236
237
  };
238
+ const value = isStateSelected
239
+ ? getStyleForState( style, selectedState )
240
+ : styleValue;
237
241
 
238
242
  // Skipped for gradients, which can't be reliably evaluated for contrast.
239
243
  const enableContrastChecking =
240
- ! isStateSelected &&
241
- ! styleValue?.color?.gradient &&
242
- ! styleValue?.background?.gradient &&
243
- !! styleValue?.color?.background &&
244
+ ! value?.color?.gradient &&
245
+ ! value?.background?.gradient &&
246
+ !! value?.color?.background &&
244
247
  ( settings?.color?.text || settings?.color?.link ) &&
245
248
  false !== getBlockSupport( name, [ 'color', 'enableContrastChecker' ] );
246
249
 
@@ -379,7 +382,6 @@ export function BackgroundImagePanel( {
379
382
 
380
383
  return (
381
384
  <StylesBackgroundPanel
382
- inheritedValue={ inheritedValue }
383
385
  as={ Wrapper }
384
386
  panelId={ clientId }
385
387
  defaultValues={ BACKGROUND_BLOCK_DEFAULT_VALUES }
@@ -392,6 +394,7 @@ export function BackgroundImagePanel( {
392
394
  : styleValue
393
395
  }
394
396
  contrastWarning={ contrastWarning }
397
+ inheritedValue={ inheritedValue }
395
398
  />
396
399
  );
397
400
  }
@@ -3,12 +3,7 @@
3
3
 
4
4
  .block-editor-content-only-controls__link {
5
5
  width: 100%;
6
- box-shadow: inset 0 0 0 $border-width $gray-400;
7
-
8
- &:focus:not(:disabled) {
9
- // Allow smooth transition between focused and unfocused box-shadow states.
10
- box-shadow: 0 0 0 currentColor inset, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
11
- }
6
+ border-color: $gray-400;
12
7
  }
13
8
 
14
9
  .block-editor-content-only-controls__link-row {
@@ -3,13 +3,8 @@
3
3
 
4
4
  .block-editor-content-only-controls__media {
5
5
  width: 100%;
6
- box-shadow: inset 0 0 0 $border-width $gray-400;
6
+ border-color: $gray-400;
7
7
  padding-right: $grid-unit-40;
8
-
9
- &:focus:not(:disabled) {
10
- // Allow smooth transition between focused and unfocused box-shadow states.
11
- box-shadow: 0 0 0 currentColor inset, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
12
- }
13
8
  }
14
9
 
15
10
  .block-editor-content-only-controls__media-replace-flow {
@@ -13,13 +13,10 @@ import { privateApis as richTextPrivateApis } from '@wordpress/rich-text';
13
13
  import { getAllowedFormats } from '../../../components/rich-text/utils';
14
14
  import { useEventListeners } from '../../../components/rich-text/event-listeners';
15
15
  import FormatEdit from '../../../components/rich-text/format-edit';
16
- import {
17
- keyboardShortcutContext,
18
- inputEventContext,
19
- } from '../../../components/rich-text';
20
16
  import { unlock } from '../../../lock-unlock';
21
17
 
22
- const { useRichText } = unlock( richTextPrivateApis );
18
+ const { useRichText, KeyboardShortcutContext, InputEventContext } =
19
+ unlock( richTextPrivateApis );
23
20
 
24
21
  export default function RichTextControl( {
25
22
  data,
@@ -84,8 +81,8 @@ export default function RichTextControl( {
84
81
  return (
85
82
  <>
86
83
  { isSelected && (
87
- <keyboardShortcutContext.Provider value={ keyboardShortcuts }>
88
- <inputEventContext.Provider value={ inputEvents }>
84
+ <KeyboardShortcutContext.Provider value={ keyboardShortcuts }>
85
+ <InputEventContext.Provider value={ inputEvents }>
89
86
  <div>
90
87
  <FormatEdit
91
88
  value={ value }
@@ -96,8 +93,8 @@ export default function RichTextControl( {
96
93
  isVisible={ false }
97
94
  />
98
95
  </div>
99
- </inputEventContext.Provider>
100
- </keyboardShortcutContext.Provider>
96
+ </InputEventContext.Provider>
97
+ </KeyboardShortcutContext.Provider>
101
98
  ) }
102
99
  <BaseControl { ...baseControlProps }>
103
100
  <div
@@ -8,7 +8,7 @@
8
8
  margin: 0;
9
9
  background: $white;
10
10
  color: $gray-900;
11
- @include input-control( var(--wp-admin-theme-color, #3858e9) );
11
+ @include input-control;
12
12
  border-color: $gray-600;
13
13
 
14
14
  &::placeholder {