@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
@@ -1,7 +1,11 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { registerBlockType, unregisterBlockType } from '@wordpress/blocks';
4
+ import {
5
+ registerBlockType,
6
+ unregisterBlockType,
7
+ privateApis as blocksPrivateApis,
8
+ } from '@wordpress/blocks';
5
9
 
6
10
  /**
7
11
  * Internal dependencies
@@ -29,9 +33,15 @@ import {
29
33
  hasSelectedStyleState,
30
34
  isSelectedBlockStyleStateShownOnCanvas,
31
35
  shouldRenderBlockListView,
36
+ getStyleOverrides,
37
+ canHostEditableRoot,
32
38
  } from '../private-selectors';
33
39
  import { getBlockEditingMode } from '../selectors';
34
40
  import { deviceTypeKey } from '../private-keys';
41
+ import reducer from '../reducer';
42
+ import { unlock } from '../../lock-unlock';
43
+
44
+ const { editableRootKey } = unlock( blocksPrivateApis );
35
45
 
36
46
  describe( 'private selectors', () => {
37
47
  describe( 'isBlockInterfaceHidden', () => {
@@ -1349,6 +1359,27 @@ describe( 'private selectors', () => {
1349
1359
  } );
1350
1360
  } );
1351
1361
 
1362
+ describe( 'getStyleOverrides', () => {
1363
+ it( 'sorts overrides by the order of the blocks they belong to', () => {
1364
+ const state = {
1365
+ blocks: {
1366
+ order: new Map( [ [ '', [ 'block-1', 'block-2' ] ] ] ),
1367
+ },
1368
+ styleOverrides: new Map( [
1369
+ [ 'override-2', { clientId: 'block-2', css: '.b{}' } ],
1370
+ [ 'override-1', { clientId: 'block-1', css: '.a{}' } ],
1371
+ [ 'override-global', { css: '.global{}' } ],
1372
+ ] ),
1373
+ };
1374
+
1375
+ expect( getStyleOverrides( state ) ).toEqual( [
1376
+ [ 'override-global', { css: '.global{}' } ],
1377
+ [ 'override-1', { clientId: 'block-1', css: '.a{}' } ],
1378
+ [ 'override-2', { clientId: 'block-2', css: '.b{}' } ],
1379
+ ] );
1380
+ } );
1381
+ } );
1382
+
1352
1383
  describe( 'getBlockStyles', () => {
1353
1384
  it( 'should return an empty object when no client IDs are provided', () => {
1354
1385
  const state = {
@@ -1882,6 +1913,79 @@ describe( 'private selectors', () => {
1882
1913
  expect( isBlockHiddenAnywhere( state, 'block-1' ) ).toBe( false );
1883
1914
  } );
1884
1915
 
1916
+ it( 'should ignore viewport visibility for unavailable breakpoints', () => {
1917
+ const state = {
1918
+ settings: {
1919
+ __experimentalFeatures: {
1920
+ viewport: {
1921
+ mobile: '480px',
1922
+ },
1923
+ },
1924
+ },
1925
+ blocks: {
1926
+ byClientId: new Map( [
1927
+ [
1928
+ 'block-1',
1929
+ { name: 'core/test-block-with-visibility' },
1930
+ ],
1931
+ ] ),
1932
+ attributes: new Map( [
1933
+ [
1934
+ 'block-1',
1935
+ {
1936
+ metadata: {
1937
+ blockVisibility: {
1938
+ viewport: {
1939
+ tablet: false,
1940
+ },
1941
+ },
1942
+ },
1943
+ },
1944
+ ],
1945
+ ] ),
1946
+ },
1947
+ };
1948
+
1949
+ expect( isBlockHiddenAnywhere( state, 'block-1' ) ).toBe( false );
1950
+ } );
1951
+
1952
+ it( 'should use tablet visibility for a single tablet breakpoint', () => {
1953
+ const state = {
1954
+ settings: {
1955
+ __experimentalFeatures: {
1956
+ viewport: {
1957
+ tablet: '64rem',
1958
+ },
1959
+ },
1960
+ },
1961
+ blocks: {
1962
+ byClientId: new Map( [
1963
+ [
1964
+ 'block-1',
1965
+ { name: 'core/test-block-with-visibility' },
1966
+ ],
1967
+ ] ),
1968
+ attributes: new Map( [
1969
+ [
1970
+ 'block-1',
1971
+ {
1972
+ metadata: {
1973
+ blockVisibility: {
1974
+ viewport: {
1975
+ mobile: false,
1976
+ tablet: false,
1977
+ },
1978
+ },
1979
+ },
1980
+ },
1981
+ ],
1982
+ ] ),
1983
+ },
1984
+ };
1985
+
1986
+ expect( isBlockHiddenAnywhere( state, 'block-1' ) ).toBe( true );
1987
+ } );
1988
+
1885
1989
  it( 'should handle non-existent block gracefully', () => {
1886
1990
  const state = {
1887
1991
  blocks: {
@@ -1976,6 +2080,44 @@ describe( 'private selectors', () => {
1976
2080
  isBlockHiddenAtViewport( state, 'block-1', 'Tablet' )
1977
2081
  ).toBe( false );
1978
2082
  } );
2083
+
2084
+ it( 'ignores viewport visibility for unavailable breakpoints', () => {
2085
+ const state = {
2086
+ settings: {
2087
+ __experimentalFeatures: {
2088
+ viewport: {
2089
+ mobile: '480px',
2090
+ },
2091
+ },
2092
+ },
2093
+ blocks: {
2094
+ byClientId: new Map( [
2095
+ [
2096
+ 'block-1',
2097
+ { name: 'core/test-block-with-visibility' },
2098
+ ],
2099
+ ] ),
2100
+ attributes: new Map( [
2101
+ [
2102
+ 'block-1',
2103
+ {
2104
+ metadata: {
2105
+ blockVisibility: {
2106
+ viewport: {
2107
+ tablet: false,
2108
+ },
2109
+ },
2110
+ },
2111
+ },
2112
+ ],
2113
+ ] ),
2114
+ },
2115
+ };
2116
+
2117
+ expect(
2118
+ isBlockHiddenAtViewport( state, 'block-1', 'Tablet' )
2119
+ ).toBe( false );
2120
+ } );
1979
2121
  } );
1980
2122
 
1981
2123
  describe( 'isBlockHiddenAnywhere in different devices', () => {
@@ -2417,4 +2559,132 @@ describe( 'private selectors', () => {
2417
2559
  );
2418
2560
  } );
2419
2561
  } );
2562
+
2563
+ describe( 'canHostEditableRoot', () => {
2564
+ beforeEach( () => {
2565
+ registerBlockType( 'core/test-editable-root', {
2566
+ apiVersion: 3,
2567
+ save: () => null,
2568
+ category: 'text',
2569
+ title: 'Editable root',
2570
+ [ editableRootKey ]: true,
2571
+ } );
2572
+ registerBlockType( 'core/test-plain', {
2573
+ apiVersion: 3,
2574
+ save: () => null,
2575
+ category: 'text',
2576
+ title: 'Plain',
2577
+ } );
2578
+ } );
2579
+
2580
+ afterEach( () => {
2581
+ unregisterBlockType( 'core/test-editable-root' );
2582
+ unregisterBlockType( 'core/test-plain' );
2583
+ } );
2584
+
2585
+ const createState = () => ( {
2586
+ blocks: {
2587
+ byClientId: new Map( [
2588
+ [ 'a', { name: 'core/test-editable-root' } ],
2589
+ [ 'b', { name: 'core/test-editable-root' } ],
2590
+ ] ),
2591
+ attributes: new Map( [
2592
+ [ 'a', { content: 'a' } ],
2593
+ [ 'b', { content: 'b' } ],
2594
+ ] ),
2595
+ order: new Map( [
2596
+ [ '', [ 'a', 'b' ] ],
2597
+ [ 'a', [] ],
2598
+ [ 'b', [] ],
2599
+ ] ),
2600
+ parents: new Map( [
2601
+ [ 'a', '' ],
2602
+ [ 'b', '' ],
2603
+ ] ),
2604
+ blockEditingModes: new Map(),
2605
+ },
2606
+ derivedBlockEditingModes: new Map(),
2607
+ blocksMode: {},
2608
+ } );
2609
+
2610
+ it( 'should return true for a block supporting editableRoot with editable siblings', () => {
2611
+ expect( canHostEditableRoot( createState(), 'a' ) ).toBe( true );
2612
+ } );
2613
+
2614
+ it( 'should return false for a lone block', () => {
2615
+ const state = createState();
2616
+ state.blocks.order = new Map( [
2617
+ [ '', [ 'a' ] ],
2618
+ [ 'a', [] ],
2619
+ ] );
2620
+
2621
+ expect( canHostEditableRoot( state, 'a' ) ).toBe( false );
2622
+ } );
2623
+
2624
+ it( 'should return false when a sibling is not editable', () => {
2625
+ const state = createState();
2626
+ state.derivedBlockEditingModes = new Map( [ [ 'b', 'disabled' ] ] );
2627
+
2628
+ expect( canHostEditableRoot( state, 'a' ) ).toBe( false );
2629
+ } );
2630
+
2631
+ // The sibling scan is O(siblings) and runs in every rich text instance.
2632
+ it( 'should not recompute when only block attributes change', () => {
2633
+ const state = createState();
2634
+ expect( canHostEditableRoot( state, 'a' ) ).toBe( true );
2635
+
2636
+ // Change the uncached result without touching a dependant.
2637
+ state.blocks.byClientId.set( 'a', { name: 'core/test-plain' } );
2638
+
2639
+ const nextState = {
2640
+ ...state,
2641
+ blocks: {
2642
+ ...state.blocks,
2643
+ attributes: new Map( [
2644
+ [ 'a', { content: 'typed' } ],
2645
+ [ 'b', { content: 'b' } ],
2646
+ ] ),
2647
+ },
2648
+ };
2649
+
2650
+ expect( canHostEditableRoot( nextState, 'a' ) ).toBe( true );
2651
+
2652
+ nextState.blocks.byClientId = new Map( state.blocks.byClientId );
2653
+ expect( canHostEditableRoot( nextState, 'a' ) ).toBe( false );
2654
+ } );
2655
+
2656
+ // The memoization above is only reachable if the reducer preserves
2657
+ // these references through a keystroke.
2658
+ it( 'should keep its dependants referentially stable while typing', () => {
2659
+ const block = ( clientId ) => ( {
2660
+ clientId,
2661
+ name: 'core/test-editable-root',
2662
+ attributes: { content: clientId },
2663
+ innerBlocks: [],
2664
+ } );
2665
+ const state = reducer( reducer( undefined, { type: '@@init' } ), {
2666
+ type: 'RESET_BLOCKS',
2667
+ blocks: [ block( 'a' ), block( 'b' ) ],
2668
+ } );
2669
+
2670
+ const next = reducer( state, {
2671
+ type: 'UPDATE_BLOCK_ATTRIBUTES',
2672
+ clientIds: [ 'a' ],
2673
+ attributes: { content: 'typed' },
2674
+ } );
2675
+
2676
+ // Guards against the assertions below passing vacuously.
2677
+ expect( next.blocks.attributes ).not.toBe(
2678
+ state.blocks.attributes
2679
+ );
2680
+
2681
+ const before = canHostEditableRoot.getDependants( state );
2682
+ const after = canHostEditableRoot.getDependants( next );
2683
+
2684
+ expect( after ).toHaveLength( before.length );
2685
+ after.forEach( ( dependant, index ) => {
2686
+ expect( dependant ).toBe( before[ index ] );
2687
+ } );
2688
+ } );
2689
+ } );
2420
2690
  } );
package/src/style.scss CHANGED
@@ -35,9 +35,11 @@
35
35
  @use "./components/fit-text-size-warning/style.scss" as *;
36
36
  @use "./components/font-appearance-control/style.scss" as *;
37
37
  @use "./components/global-styles/style.scss" as *;
38
+ @use "./components/global-styles/inheritance/style.scss" as *;
38
39
  @use "./components/grid/style.scss" as *;
39
40
  @use "./components/height-control/style.scss" as *;
40
41
  @use "./components/iframe/style.scss" as *;
42
+ @use "./components/image-editor/style.scss" as *;
41
43
  @use "./components/inserter-list-item/style.scss" as *;
42
44
  @use "./components/inspector-controls/styles.scss" as *;
43
45
  @use "./components/inspector-controls-tabs/style.scss" as *;
@@ -1,8 +1,58 @@
1
1
  type Binding = { source?: string };
2
2
  type Bindings = Record< string, Binding >;
3
+ type BlockBindingsSource = { usesContext?: readonly string[] };
3
4
 
4
5
  const DEFAULT_ATTRIBUTE = '__default';
5
6
  const PATTERN_OVERRIDES_SOURCE = 'core/pattern-overrides';
7
+ const EMPTY_CONTEXT: Record< string, unknown > = {};
8
+
9
+ /**
10
+ * Assembles the context made available to a block's bindings sources: the
11
+ * entries of the surrounding block context declared by the block type's
12
+ * `usesContext`, plus the entries declared by the given sources' `usesContext`.
13
+ *
14
+ * Only entries present in the surrounding block context are copied — a
15
+ * declared key with no provider never becomes an own (undefined-valued) key
16
+ * of the result, so `key in context` checks stay meaningful.
17
+ *
18
+ * @param blockContext The surrounding block context.
19
+ * @param blockTypeUsesContext The block type's declared context needs.
20
+ * @param sources Block-bindings sources whose declared context to add.
21
+ *
22
+ * @return The context for resolving the block's bindings.
23
+ */
24
+ export function getBlockBindingsContext(
25
+ blockContext: Record< string, unknown >,
26
+ blockTypeUsesContext: readonly string[] | undefined,
27
+ sources: readonly ( BlockBindingsSource | undefined )[] | undefined
28
+ ): Record< string, unknown > {
29
+ let context: Record< string, unknown > | undefined;
30
+ if ( blockTypeUsesContext ) {
31
+ for ( const [ key, value ] of Object.entries( blockContext ) ) {
32
+ if ( blockTypeUsesContext.includes( key ) ) {
33
+ if ( context === undefined ) {
34
+ context = {};
35
+ }
36
+ context[ key ] = value;
37
+ }
38
+ }
39
+ }
40
+ if ( sources ) {
41
+ for ( const source of sources ) {
42
+ source?.usesContext?.forEach( ( key ) => {
43
+ if ( key in blockContext ) {
44
+ if ( context === undefined ) {
45
+ context = {};
46
+ }
47
+ context[ key ] = blockContext[ key ];
48
+ }
49
+ } );
50
+ }
51
+ }
52
+ // A stable empty object avoids re-renders for consumers that compare the
53
+ // context by reference.
54
+ return context ?? EMPTY_CONTEXT;
55
+ }
6
56
 
7
57
  /**
8
58
  * Checks if the block has the `__default` binding for pattern overrides.
package/src/utils/dom.ts CHANGED
@@ -31,6 +31,39 @@ export function isInsideRootBlock( blockElement: Element, element: Element ) {
31
31
  return parentBlock === blockElement;
32
32
  }
33
33
 
34
+ /**
35
+ * Returns the editable element containing the selection, if the selection is
36
+ * fully contained within one. The root element (an editable wrapper) does not
37
+ * count as a containing editable element.
38
+ *
39
+ * @param selection The selection.
40
+ * @param root The editable wrapper element.
41
+ *
42
+ * @return The editable element containing the selection.
43
+ */
44
+ export function getSelectionEditableElement(
45
+ selection: Selection,
46
+ root: Element
47
+ ) {
48
+ const { anchorNode, focusNode } = selection;
49
+
50
+ if ( ! anchorNode || ! focusNode ) {
51
+ return;
52
+ }
53
+
54
+ const element =
55
+ anchorNode.nodeType === anchorNode.ELEMENT_NODE
56
+ ? ( anchorNode as Element )
57
+ : anchorNode.parentElement;
58
+ const editable = element?.closest( '[contenteditable="true"]' );
59
+
60
+ if ( ! editable || editable === root || ! editable.contains( focusNode ) ) {
61
+ return;
62
+ }
63
+
64
+ return editable;
65
+ }
66
+
34
67
  /**
35
68
  * Finds the block client ID given any DOM node inside the block.
36
69
  *
@@ -0,0 +1,56 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useRefEffect } from '@wordpress/compose';
5
+
6
+ /**
7
+ * Elements whose content the browser's own undo acts on (a dialog input, an
8
+ * HTML editing field, a search field), registered through `useNativeUndo`.
9
+ * The editor history must not act on events originating within them.
10
+ */
11
+ const nativeUndoNodes = new WeakSet();
12
+
13
+ /**
14
+ * Returns a ref that marks an element (and its descendants) as relying on
15
+ * the browser's own undo, so the editor history leaves the undo and redo
16
+ * shortcuts alone within it.
17
+ *
18
+ * @return {Function} Ref callback.
19
+ */
20
+ export function useNativeUndo() {
21
+ return useRefEffect( ( node ) => {
22
+ nativeUndoNodes.add( node );
23
+ return () => {
24
+ nativeUndoNodes.delete( node );
25
+ };
26
+ }, [] );
27
+ }
28
+
29
+ /**
30
+ * Returns true when the event originates from an element registered through
31
+ * `useNativeUndo`.
32
+ *
33
+ * Events coming from the editor canvas are re-dispatched on the iframe
34
+ * element, so the real target is resolved through the frame's focused
35
+ * element.
36
+ *
37
+ * @param {KeyboardEvent} event Keyboard event.
38
+ *
39
+ * @return {boolean} Whether the element relies on the browser's own undo.
40
+ */
41
+ export function usesNativeUndo( event ) {
42
+ let { target } = event;
43
+
44
+ if ( target?.nodeName === 'IFRAME' ) {
45
+ target = target.contentDocument?.activeElement;
46
+ }
47
+
48
+ while ( target ) {
49
+ if ( nativeUndoNodes.has( target ) ) {
50
+ return true;
51
+ }
52
+ target = target.parentElement;
53
+ }
54
+
55
+ return false;
56
+ }
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import {
5
+ getBlockBindingsContext,
6
+ hasPatternOverridesDefaultBinding,
7
+ replacePatternOverridesDefaultBinding,
8
+ } from '../block-bindings';
9
+
10
+ describe( 'hasPatternOverridesDefaultBinding', () => {
11
+ it( 'returns true when the `__default` binding targets pattern overrides', () => {
12
+ expect(
13
+ hasPatternOverridesDefaultBinding( {
14
+ __default: { source: 'core/pattern-overrides' },
15
+ } )
16
+ ).toBe( true );
17
+ } );
18
+
19
+ it( 'returns false when there is no `__default` binding', () => {
20
+ expect(
21
+ hasPatternOverridesDefaultBinding( {
22
+ content: { source: 'core/pattern-overrides' },
23
+ } )
24
+ ).toBe( false );
25
+ } );
26
+
27
+ it( 'returns false when the `__default` binding targets another source', () => {
28
+ expect(
29
+ hasPatternOverridesDefaultBinding( {
30
+ __default: { source: 'core/post-meta' },
31
+ } )
32
+ ).toBe( false );
33
+ } );
34
+
35
+ it( 'returns false for undefined bindings', () => {
36
+ expect( hasPatternOverridesDefaultBinding( undefined ) ).toBe( false );
37
+ } );
38
+ } );
39
+
40
+ describe( 'replacePatternOverridesDefaultBinding', () => {
41
+ it( 'expands `__default` to a binding for each supported attribute', () => {
42
+ const result = replacePatternOverridesDefaultBinding(
43
+ { __default: { source: 'core/pattern-overrides' } },
44
+ [ 'content', 'url', 'alt' ]
45
+ );
46
+
47
+ expect( result ).toEqual( {
48
+ content: { source: 'core/pattern-overrides' },
49
+ url: { source: 'core/pattern-overrides' },
50
+ alt: { source: 'core/pattern-overrides' },
51
+ } );
52
+ } );
53
+
54
+ it( 'retains explicit non-pattern-override bindings while expanding `__default`', () => {
55
+ const result = replacePatternOverridesDefaultBinding(
56
+ {
57
+ __default: { source: 'core/pattern-overrides' },
58
+ url: { source: 'core/post-meta', args: { key: 'my_url' } },
59
+ },
60
+ [ 'content', 'url' ]
61
+ );
62
+
63
+ expect( result ).toEqual( {
64
+ content: { source: 'core/pattern-overrides' },
65
+ url: { source: 'core/post-meta', args: { key: 'my_url' } },
66
+ } );
67
+ } );
68
+
69
+ it( 'returns the bindings untouched when there is no `__default` pattern-override binding', () => {
70
+ const bindings = { content: { source: 'core/pattern-overrides' } };
71
+
72
+ expect(
73
+ replacePatternOverridesDefaultBinding( bindings, [ 'content' ] )
74
+ ).toBe( bindings );
75
+ } );
76
+
77
+ // Regression guard: the `__default` expansion only iterates the block
78
+ // type's supported *attributes*, so it can never synthesize an
79
+ // `innerBlocks` binding. Existing `__default` pattern-override blocks
80
+ // must not implicitly gain an inner-block binding.
81
+ it( 'never synthesizes an `innerBlocks` binding when expanding `__default`', () => {
82
+ // A realistic set of supported *attribute* names — `innerBlocks` is not
83
+ // an attribute and is therefore never present here.
84
+ const supportedAttributes = [ 'content', 'url', 'alt', 'title' ];
85
+
86
+ const result = replacePatternOverridesDefaultBinding(
87
+ { __default: { source: 'core/pattern-overrides' } },
88
+ supportedAttributes
89
+ );
90
+
91
+ // Every produced binding key corresponds to a supported attribute…
92
+ expect( Object.keys( result ) ).toEqual( supportedAttributes );
93
+ // …and `innerBlocks` is never among them.
94
+ expect( result ).not.toHaveProperty( 'innerBlocks' );
95
+ } );
96
+
97
+ it( 'does not add an `innerBlocks` binding even when supportedAttributes is empty', () => {
98
+ const result = replacePatternOverridesDefaultBinding(
99
+ { __default: { source: 'core/pattern-overrides' } },
100
+ []
101
+ );
102
+
103
+ expect( result ).toEqual( {} );
104
+ expect( result ).not.toHaveProperty( 'innerBlocks' );
105
+ } );
106
+ } );
107
+
108
+ describe( 'getBlockBindingsContext', () => {
109
+ const blockContext = {
110
+ postId: 1,
111
+ postType: 'post',
112
+ 'pattern/overrides': { content: 'x' },
113
+ };
114
+
115
+ it( 'copies the block-type-declared entries present in the block context', () => {
116
+ expect(
117
+ getBlockBindingsContext(
118
+ blockContext,
119
+ [ 'postId', 'postType' ],
120
+ undefined
121
+ )
122
+ ).toEqual( { postId: 1, postType: 'post' } );
123
+ } );
124
+
125
+ it( 'omits block-type-declared keys absent from the block context', () => {
126
+ const result = getBlockBindingsContext(
127
+ blockContext,
128
+ [ 'postId', 'core/missing' ],
129
+ undefined
130
+ );
131
+
132
+ expect( result ).toEqual( { postId: 1 } );
133
+ // The declared-but-unprovided key must not become an own
134
+ // (undefined-valued) key, so `key in context` checks stay meaningful.
135
+ expect( result ).not.toHaveProperty( 'core/missing' );
136
+ } );
137
+
138
+ it( 'adds source-declared entries present in the block context', () => {
139
+ expect(
140
+ getBlockBindingsContext(
141
+ blockContext,
142
+ [ 'postId' ],
143
+ [
144
+ { usesContext: [ 'pattern/overrides' ] },
145
+ { usesContext: [ 'postType' ] },
146
+ ]
147
+ )
148
+ ).toEqual( {
149
+ postId: 1,
150
+ postType: 'post',
151
+ 'pattern/overrides': { content: 'x' },
152
+ } );
153
+ } );
154
+
155
+ it( 'omits source-declared keys absent from the block context', () => {
156
+ const result = getBlockBindingsContext( blockContext, undefined, [
157
+ { usesContext: [ 'core/missing' ] },
158
+ ] );
159
+
160
+ expect( result ).toEqual( {} );
161
+ expect( result ).not.toHaveProperty( 'core/missing' );
162
+ } );
163
+
164
+ it( 'ignores unregistered (undefined) sources and sources without usesContext', () => {
165
+ expect(
166
+ getBlockBindingsContext( blockContext, undefined, [
167
+ undefined,
168
+ {},
169
+ { usesContext: [ 'postId' ] },
170
+ ] )
171
+ ).toEqual( { postId: 1 } );
172
+ } );
173
+
174
+ it( 'returns a stable empty object when nothing is declared', () => {
175
+ const first = getBlockBindingsContext( blockContext, undefined, [] );
176
+ const second = getBlockBindingsContext( blockContext, [], undefined );
177
+
178
+ expect( first ).toEqual( {} );
179
+ expect( second ).toBe( first );
180
+ } );
181
+ } );