@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
@@ -0,0 +1,281 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+ import { click } from '@ariakit/test';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import {
16
+ getInheritanceProps,
17
+ InheritanceResetButton,
18
+ InheritanceToolsPanelItem,
19
+ } from '../';
20
+
21
+ describe( 'InheritanceResetButton', () => {
22
+ test( 'renders an always-visible reset button labelled for the inherited value', () => {
23
+ render( <InheritanceResetButton onResetToInherited={ () => {} } /> );
24
+ expect(
25
+ screen.getByRole( 'button', {
26
+ name: 'Reset to inherited value',
27
+ } )
28
+ ).toBeVisible();
29
+ } );
30
+
31
+ test( 'invokes the reset handler when activated', async () => {
32
+ const onResetToInherited = jest.fn();
33
+ render(
34
+ <InheritanceResetButton onResetToInherited={ onResetToInherited } />
35
+ );
36
+ await click(
37
+ screen.getByRole( 'button', { name: 'Reset to inherited value' } )
38
+ );
39
+ expect( onResetToInherited ).toHaveBeenCalledTimes( 1 );
40
+ } );
41
+
42
+ test( 'does not expose a menu or a push-to-Global-Styles action', () => {
43
+ render( <InheritanceResetButton onResetToInherited={ () => {} } /> );
44
+ expect( screen.queryByRole( 'menu' ) ).not.toBeInTheDocument();
45
+ expect(
46
+ screen.queryByRole( 'menuitem', { name: /Make default/ } )
47
+ ).not.toBeInTheDocument();
48
+ } );
49
+ } );
50
+
51
+ describe( 'getInheritanceProps', () => {
52
+ test( 'returns explicit false state when neither flag is set', () => {
53
+ expect( getInheritanceProps( false, false ) ).toEqual( {
54
+ isInherited: false,
55
+ hasLocalOverride: false,
56
+ } );
57
+ } );
58
+
59
+ test( 'returns ONLY the inherited className when isInherited is set', () => {
60
+ // The inherited state is conveyed purely through the className hook
61
+ // (`is-inherited-from-global-styles`), which the SCSS uses to apply
62
+ // the dotted-underline label treatment. No dot is rendered.
63
+ expect( getInheritanceProps( true, false ) ).toEqual( {
64
+ className: 'is-inherited-from-global-styles',
65
+ isInherited: true,
66
+ hasLocalOverride: false,
67
+ } );
68
+ } );
69
+
70
+ test( 'returns the local-override className when hasLocalOverride is set', () => {
71
+ expect( getInheritanceProps( false, true ) ).toEqual( {
72
+ className: 'has-local-override-from-global-styles',
73
+ isInherited: false,
74
+ hasLocalOverride: true,
75
+ } );
76
+ } );
77
+
78
+ test( 'returns ONLY the local-override className when both flags are passed (mutual exclusion)', () => {
79
+ // A buggy caller could pass both as `true`. The visual
80
+ // contract is mutual exclusion — local-override always wins.
81
+ const result = getInheritanceProps( true, true );
82
+ expect( result.className ).toContain(
83
+ 'has-local-override-from-global-styles'
84
+ );
85
+ expect( result.isInherited ).toBe( false );
86
+ expect( result.hasLocalOverride ).toBe( true );
87
+ } );
88
+
89
+ test( 'coerces truthy/falsy non-boolean inputs', () => {
90
+ // Common pattern: callers pass an undefined or null inherited
91
+ // value that we want to treat as "no local override" rather
92
+ // than letting it slip through as truthy.
93
+ expect( getInheritanceProps( undefined, undefined ) ).toEqual( {
94
+ isInherited: false,
95
+ hasLocalOverride: false,
96
+ } );
97
+ expect( getInheritanceProps( null, null ) ).toEqual( {
98
+ isInherited: false,
99
+ hasLocalOverride: false,
100
+ } );
101
+ expect( getInheritanceProps( '', '' ) ).toEqual( {
102
+ isInherited: false,
103
+ hasLocalOverride: false,
104
+ } );
105
+ // Truthy non-boolean
106
+ expect( getInheritanceProps( 'inherited', 0 ) ).toEqual( {
107
+ className: 'is-inherited-from-global-styles',
108
+ isInherited: true,
109
+ hasLocalOverride: false,
110
+ } );
111
+ expect( getInheritanceProps( 0, 'local' ) ).toEqual( {
112
+ className: 'has-local-override-from-global-styles',
113
+ isInherited: false,
114
+ hasLocalOverride: true,
115
+ } );
116
+ } );
117
+
118
+ test( 'merges a base className with the inherited class hook', () => {
119
+ expect( getInheritanceProps( true, false, 'single-column' ) ).toEqual( {
120
+ className: 'single-column is-inherited-from-global-styles',
121
+ isInherited: true,
122
+ hasLocalOverride: false,
123
+ } );
124
+ } );
125
+
126
+ test( 'merges a base className with the local-override class hook', () => {
127
+ expect( getInheritanceProps( false, true, 'single-column' ) ).toEqual( {
128
+ className: 'single-column has-local-override-from-global-styles',
129
+ isInherited: false,
130
+ hasLocalOverride: true,
131
+ } );
132
+ } );
133
+
134
+ test( 'returns just the base className when neither flag is set', () => {
135
+ expect( getInheritanceProps( false, false, 'single-column' ) ).toEqual(
136
+ {
137
+ className: 'single-column',
138
+ isInherited: false,
139
+ hasLocalOverride: false,
140
+ }
141
+ );
142
+ } );
143
+ } );
144
+
145
+ describe( 'InheritanceToolsPanelItem inherited state', () => {
146
+ function renderInheritedItem( label, labelClassName ) {
147
+ return render(
148
+ <ToolsPanel label="Panel" panelId="panel">
149
+ <InheritanceToolsPanelItem
150
+ { ...getInheritanceProps( true, false ) }
151
+ label={ label }
152
+ panelId="panel"
153
+ isShownByDefault
154
+ hasValue={ () => false }
155
+ >
156
+ <div className={ labelClassName }>{ label }</div>
157
+ </InheritanceToolsPanelItem>
158
+ </ToolsPanel>
159
+ );
160
+ }
161
+
162
+ // The SCSS treatment keys off the label class, and controls on a bare
163
+ // `UnitControl`/`NumberControl` expose `input-control__label` rather than
164
+ // the usual `base-control__label`, so guard both.
165
+ test.each( [
166
+ [ 'base-control', 'components-base-control__label' ],
167
+ [ 'input-control', 'components-input-control__label' ],
168
+ ] )(
169
+ 'nests the %s label inside the inherited-from-global-styles item',
170
+ ( _name, labelClassName ) => {
171
+ renderInheritedItem( 'Line height', labelClassName );
172
+ const label = screen.getByText( 'Line height' );
173
+ expect( label ).toHaveClass( labelClassName );
174
+ expect(
175
+ // eslint-disable-next-line testing-library/no-node-access
176
+ label.closest( '.is-inherited-from-global-styles' )
177
+ ).not.toBeNull();
178
+ }
179
+ );
180
+
181
+ test( 'does not render a reset dot in the inherited state', () => {
182
+ renderInheritedItem( 'Line height', 'components-base-control__label' );
183
+ expect(
184
+ screen.queryByRole( 'button', {
185
+ name: 'Reset to inherited value',
186
+ } )
187
+ ).not.toBeInTheDocument();
188
+ } );
189
+ } );
190
+
191
+ describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
192
+ function renderItem( props ) {
193
+ return render(
194
+ <ToolsPanel label="Panel" panelId="panel">
195
+ <InheritanceToolsPanelItem
196
+ label="Line height"
197
+ panelId="panel"
198
+ isShownByDefault
199
+ hasValue={ () => false }
200
+ { ...props }
201
+ >
202
+ <div className="components-base-control__label">
203
+ Line height
204
+ </div>
205
+ </InheritanceToolsPanelItem>
206
+ </ToolsPanel>
207
+ );
208
+ }
209
+
210
+ test( 'renders the reset dot as a sibling of the control, not inside the label', () => {
211
+ renderItem( {
212
+ hasLocalOverride: true,
213
+ onDeselect: () => {},
214
+ } );
215
+ const resetButton = screen.getByRole( 'button', {
216
+ name: 'Reset to inherited value',
217
+ } );
218
+ expect( resetButton ).toBeVisible();
219
+
220
+ // The reset dot is a plain sibling; it must never be nested inside
221
+ // the label (which would create an interactive-in-label a11y issue).
222
+ expect(
223
+ // eslint-disable-next-line testing-library/no-node-access
224
+ resetButton.closest( '.components-base-control__label' )
225
+ ).toBeNull();
226
+ } );
227
+
228
+ test( 'does not render the item reset dot when showLocalOverrideActionsInLabel is false', () => {
229
+ // Color/background render their own reset control next to a custom
230
+ // toggle, so the item must not render a second one.
231
+ renderItem( {
232
+ hasLocalOverride: true,
233
+ showLocalOverrideActionsInLabel: false,
234
+ onDeselect: () => {},
235
+ } );
236
+ expect(
237
+ screen.queryByRole( 'button', {
238
+ name: 'Reset to inherited value',
239
+ } )
240
+ ).not.toBeInTheDocument();
241
+ } );
242
+
243
+ test( 'the reset dot invokes the deselect handler', async () => {
244
+ const onDeselect = jest.fn();
245
+ renderItem( { hasLocalOverride: true, onDeselect } );
246
+ await click(
247
+ screen.getByRole( 'button', { name: 'Reset to inherited value' } )
248
+ );
249
+ expect( onDeselect ).toHaveBeenCalled();
250
+ } );
251
+
252
+ test( 'does not offset the reset dot by default', () => {
253
+ renderItem( { hasLocalOverride: true, onDeselect: () => {} } );
254
+ const resetButton = screen.getByRole( 'button', {
255
+ name: 'Reset to inherited value',
256
+ } );
257
+ const affordance =
258
+ // eslint-disable-next-line testing-library/no-node-access
259
+ resetButton.closest( '.global-styles-inheritance-affordance' );
260
+ expect( affordance ).not.toHaveClass(
261
+ 'global-styles-inheritance-affordance--offset-toggle'
262
+ );
263
+ } );
264
+
265
+ test( 'offsets the reset dot when the control has an inline-end toggle', () => {
266
+ renderItem( {
267
+ hasLocalOverride: true,
268
+ hasInlineEndToggle: true,
269
+ onDeselect: () => {},
270
+ } );
271
+ const resetButton = screen.getByRole( 'button', {
272
+ name: 'Reset to inherited value',
273
+ } );
274
+ const affordance =
275
+ // eslint-disable-next-line testing-library/no-node-access
276
+ resetButton.closest( '.global-styles-inheritance-affordance' );
277
+ expect( affordance ).toHaveClass(
278
+ 'global-styles-inheritance-affordance--offset-toggle'
279
+ );
280
+ } );
281
+ } );
@@ -0,0 +1,271 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useContext, useMemo } from '@wordpress/element';
5
+ import { useSelect } from '@wordpress/data';
6
+ import { store as blocksStore } from '@wordpress/blocks';
7
+ import { privateApis as globalStylesEnginePrivateApis } from '@wordpress/global-styles-engine';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import { store as blockEditorStore } from '../../store';
13
+ import {
14
+ globalStylesDataKey,
15
+ globalStylesLinksDataKey,
16
+ } from '../../store/private-keys';
17
+ import { getVariationNameFromClass } from '../../hooks/block-style-variation';
18
+ import { useBlockEditContext } from '../block-edit/context';
19
+ import BlockContext from '../block-context';
20
+ import { unlock } from '../../lock-unlock';
21
+ import { isGlobalStylesInheritanceEnabled } from './inheritance';
22
+
23
+ const { resolveStyle } = unlock( globalStylesEnginePrivateApis );
24
+
25
+ // Undefined so the panels fall back to their `inheritedValue = value` default.
26
+ const NO_RESOLVED_STYLE = { value: undefined, sources: undefined };
27
+
28
+ /**
29
+ * Reads the Global Styles payload and returns it as a `GlobalStylesConfig`
30
+ * (`{ styles, _links }`), the shape `resolveStyle` expects. `_links` carries
31
+ * the theme-file map used to resolve pointers such as background images.
32
+ *
33
+ * @return {?Object} Global Styles config, or `null` before the payload settles.
34
+ */
35
+ function useRawGlobalStyles() {
36
+ const { rawGlobalStylesData, links } = useSelect( ( select ) => {
37
+ const settings = select( blockEditorStore ).getSettings();
38
+ return {
39
+ rawGlobalStylesData: settings[ globalStylesDataKey ] ?? null,
40
+ links: settings[ globalStylesLinksDataKey ] ?? null,
41
+ };
42
+ }, [] );
43
+ return useMemo(
44
+ () =>
45
+ rawGlobalStylesData
46
+ ? { styles: rawGlobalStylesData, _links: links ?? undefined }
47
+ : null,
48
+ [ rawGlobalStylesData, links ]
49
+ );
50
+ }
51
+
52
+ /**
53
+ * Blocks whose heading level is handed down by a parent through block context
54
+ * rather than held in their own `level` attribute, mapped to that context key
55
+ * and the level they fall back to.
56
+ *
57
+ * Accordion Heading is the only one: the parent Accordion owns the level, and
58
+ * the child's `level` attribute has no default and is absent on pattern-,
59
+ * template- and paste-inserted blocks.
60
+ */
61
+ const CONTEXT_HEADING_LEVEL_BLOCKS = {
62
+ 'core/accordion-heading': {
63
+ contextKey: 'core/accordion-heading-level',
64
+ fallbackLevel: 3,
65
+ },
66
+ };
67
+
68
+ /**
69
+ * Resolves the heading level that selects a block's `h1`-`h6` element layer.
70
+ *
71
+ * @param {string} blockName Block name.
72
+ * @param {?number} levelAttribute The block's own `level` attribute, if it has one.
73
+ * @param {?number} contextLevel Level supplied by a parent through block context.
74
+ * @return {?number} Resolved heading level, or `undefined` when the block has none.
75
+ */
76
+ function getHeadingLevel( blockName, levelAttribute, contextLevel ) {
77
+ const contextOwned = CONTEXT_HEADING_LEVEL_BLOCKS[ blockName ];
78
+ if ( ! contextOwned ) {
79
+ return levelAttribute;
80
+ }
81
+ // Mirrors the block's own chain (Accordion Heading saves `h${ level || 3 }`),
82
+ // so `0` coerces to the fallback instead of reading as a level-0 state.
83
+ return levelAttribute || contextLevel || contextOwned.fallbackLevel;
84
+ }
85
+
86
+ /**
87
+ * Reads the heading level a parent supplies through block context.
88
+ *
89
+ * Only the blocks in `CONTEXT_HEADING_LEVEL_BLOCKS` read a key: the value
90
+ * reaches every descendant, so an ordinary Heading inside an Accordion Panel
91
+ * must not pick it up. Returns a primitive so callers can use it as a
92
+ * `useSelect` dependency.
93
+ *
94
+ * @param {?string} blockName Block name.
95
+ * @return {?number} Level from block context, or `undefined`.
96
+ */
97
+ function useContextHeadingLevel( blockName ) {
98
+ const blockContext = useContext( BlockContext );
99
+ const contextKey = CONTEXT_HEADING_LEVEL_BLOCKS[ blockName ]?.contextKey;
100
+ return contextKey ? blockContext[ contextKey ] : undefined;
101
+ }
102
+
103
+ /**
104
+ * Maps a block to the root-level Global Styles *element* layers that paint it
105
+ * on the canvas, in addition to (or instead of) the block's own class — e.g. a
106
+ * Button renders `.wp-element-button`, a level-2 Heading renders `<h2>`.
107
+ *
108
+ * Keys are ordered low to high precedence, so a level-specific `h2` wins over
109
+ * the generic `heading`. A level of `0` (e.g. a Site or Post Title rendered as
110
+ * a paragraph) renders no heading tag, so no element layer applies.
111
+ *
112
+ * Hand-maintained by necessity: the block-to-element relationship is not
113
+ * inferable from block metadata. `supports.color.link` and friends mark blocks
114
+ * that *contain* an element, not blocks that *are* one, and only the inverse
115
+ * element-to-selector map exists (`__EXPERIMENTAL_ELEMENTS`). Standardizing it
116
+ * as a block property is tracked in
117
+ * https://github.com/WordPress/gutenberg/issues/80438.
118
+ *
119
+ * Only blocks that *are* a link fold the `link` layer (e.g. Read More, Login/out
120
+ * and the pagination links render `<a>` as their whole selves). Blocks that
121
+ * merely *contain* a link — the heading family, Paragraph, Group, and the
122
+ * hybrid blocks with a Link colour control (Post Author Name, Post Date, …) —
123
+ * get no `link` layer: their inner-link control reads the
124
+ * `inheritedValue.elements.link` passthrough instead, so folding `link` in would
125
+ * bleed link color into the block's own text.
126
+ *
127
+ * @param {string} blockName Block name.
128
+ * @param {?number} headingLevel Resolved heading level, from `getHeadingLevel`.
129
+ * @return {string[]} Ordered element keys, low to high precedence.
130
+ */
131
+ function getElementLayers( blockName, headingLevel ) {
132
+ switch ( blockName ) {
133
+ case 'core/button':
134
+ return [ 'button' ];
135
+ case 'core/accordion-heading':
136
+ case 'core/heading':
137
+ case 'core/post-title':
138
+ case 'core/site-title':
139
+ case 'core/query-title':
140
+ case 'core/comments-title':
141
+ case 'core/term-name':
142
+ case 'core/site-tagline':
143
+ if ( headingLevel === 0 ) {
144
+ return [];
145
+ }
146
+ return headingLevel
147
+ ? [ 'heading', `h${ headingLevel }` ]
148
+ : [ 'heading' ];
149
+ // Whole-block link blocks: the entire block renders as an `<a>`, so the
150
+ // root `styles.elements.link` layer paints it, mirroring how `button`
151
+ // paints Button. For the blocks whose `color.text` support is disabled
152
+ // this is inert at the (hidden) text control while their typography
153
+ // controls now reflect the link element; Read More (`color.text: true`)
154
+ // surfaces the inherited link color at its Text control.
155
+ case 'core/read-more':
156
+ case 'core/loginout':
157
+ case 'core/post-navigation-link':
158
+ case 'core/query-pagination-next':
159
+ case 'core/query-pagination-previous':
160
+ case 'core/query-pagination-numbers':
161
+ case 'core/comments-pagination-next':
162
+ case 'core/comments-pagination-previous':
163
+ case 'core/comments-pagination-numbers':
164
+ case 'core/comment-edit-link':
165
+ case 'core/comment-reply-link':
166
+ case 'core/post-comments-link':
167
+ return [ 'link' ];
168
+ default:
169
+ return [];
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Internal hook that derives the active block-style-variation slug from a
175
+ * block's `className` by matching registered styles via
176
+ * `getVariationNameFromClass`, together with the element layers that paint
177
+ * the block. Both come from a single store subscription.
178
+ *
179
+ * The lookup is scoped to a single `useSelect` subscription; the
180
+ * `@wordpress/blocks` registered-styles slice changes only when a block's
181
+ * styles are (un)registered, so this subscription is cold in steady-state
182
+ * editor use.
183
+ *
184
+ * The block's `clientId` comes from the block edit context rather than an
185
+ * argument: these panels always render inside `BlockEditContextProvider`, so
186
+ * the caller does not have to thread it through.
187
+ *
188
+ * @param {?string} blockName Block name (e.g. `core/heading`).
189
+ * @param {?string} className Space-separated class string from block attributes.
190
+ * @return {{ variationName: ?string, headingLevel: ?number }} Variation slug
191
+ * (without the `is-style-` prefix) and the block's heading level, if any.
192
+ */
193
+ function useVariationAndElements( blockName, className ) {
194
+ const { clientId } = useBlockEditContext();
195
+ const contextHeadingLevel = useContextHeadingLevel( blockName );
196
+ return useSelect(
197
+ ( select ) => {
198
+ if ( ! blockName ) {
199
+ return { variationName: null, headingLevel: undefined };
200
+ }
201
+ const registeredStyles =
202
+ select( blocksStore ).getBlockStyles( blockName );
203
+ const { level } =
204
+ select( blockEditorStore ).getBlockAttributes( clientId ) || {};
205
+ // Primitives only: `useSelect` shallow-compares this object, so
206
+ // returning a fresh array here would re-render on every action.
207
+ return {
208
+ variationName: className
209
+ ? getVariationNameFromClass( className, registeredStyles )
210
+ : null,
211
+ headingLevel: getHeadingLevel(
212
+ blockName,
213
+ level,
214
+ contextHeadingLevel
215
+ ),
216
+ };
217
+ },
218
+ [ blockName, className, clientId, contextHeadingLevel ]
219
+ );
220
+ }
221
+
222
+ /**
223
+ * Hook: computes the merged, cascade-resolved `inheritedValue` payload and
224
+ * source map for a selected block, ready to hand to a shared Global Styles
225
+ * panel via props.
226
+ *
227
+ * It reads the merged Global Styles payload and the block's applied variation,
228
+ * then folds the Root ‹ Block-type ‹ applied-variation cascade (resolving
229
+ * `{ ref }` envelopes and theme-file pointers) via the pure `resolveStyle`
230
+ * resolver in `@wordpress/global-styles-engine`. All store access lives here;
231
+ * the panels stay presentational.
232
+ *
233
+ * Before the `globalStylesDataKey` payload settles (hydration) or when
234
+ * `blockName` is missing, the hook returns empty value and source objects, so
235
+ * each panel's `inheritedValue = value` default preserves pre-feature behavior.
236
+ *
237
+ * @param {?string} blockName Selected block name (e.g. `core/heading`).
238
+ * @param {?string} className Block `className` used to detect an applied variation.
239
+ * @param {?Object} [selectedState] Selected block style state (`{ viewport, pseudo }`), or null for the default state.
240
+ * @return {{ value: Object, sources: Object }} Merged panel-scoped payload and source map.
241
+ */
242
+ export function useResolvedStyle( blockName, className, selectedState = null ) {
243
+ const { variationName, headingLevel } = useVariationAndElements(
244
+ blockName,
245
+ className
246
+ );
247
+ const globalStyles = useRawGlobalStyles();
248
+
249
+ return useMemo( () => {
250
+ // Skip the cascade merge entirely when the experiment is off.
251
+ if ( ! isGlobalStylesInheritanceEnabled() ) {
252
+ return NO_RESOLVED_STYLE;
253
+ }
254
+ if ( ! blockName ) {
255
+ return { value: {}, sources: {} };
256
+ }
257
+ return resolveStyle( globalStyles, {
258
+ blockName,
259
+ variationName,
260
+ elements: getElementLayers( blockName, headingLevel ),
261
+ viewport: selectedState?.viewport ?? null,
262
+ pseudoState: selectedState?.pseudo ?? null,
263
+ } );
264
+ }, [
265
+ blockName,
266
+ variationName,
267
+ headingLevel,
268
+ globalStyles,
269
+ selectedState,
270
+ ] );
271
+ }
@@ -22,6 +22,11 @@ import clsx from 'clsx';
22
22
 
23
23
  import { Tooltip } from '@wordpress/ui';
24
24
 
25
+ /**
26
+ * Internal dependencies
27
+ */
28
+ import { InheritanceResetButton } from './inheritance';
29
+
25
30
  /**
26
31
  * Shared reference to an empty array for cases where it is important to avoid
27
32
  * returning a new array reference on every invocation.
@@ -119,7 +124,15 @@ export function ShadowIndicator( { type, label, isActive, onSelect, shadow } ) {
119
124
  );
120
125
  }
121
126
 
122
- export function ShadowPopover( { shadow, onShadowChange, settings } ) {
127
+ export function ShadowPopover( {
128
+ shadow,
129
+ onShadowChange,
130
+ settings,
131
+ className,
132
+ hasLocalValue = !! shadow,
133
+ hasLocalOverride = false,
134
+ onReset,
135
+ } ) {
123
136
  const popoverProps = {
124
137
  placement: 'left-start',
125
138
  offset: 36,
@@ -129,8 +142,15 @@ export function ShadowPopover( { shadow, onShadowChange, settings } ) {
129
142
  return (
130
143
  <Dropdown
131
144
  popoverProps={ popoverProps }
132
- className="block-editor-global-styles__shadow-dropdown"
133
- renderToggle={ renderShadowToggle( shadow, onShadowChange ) }
145
+ className={ clsx(
146
+ 'block-editor-global-styles__shadow-dropdown',
147
+ className
148
+ ) }
149
+ renderToggle={ renderShadowToggle( shadow, onShadowChange, {
150
+ hasLocalValue,
151
+ hasLocalOverride,
152
+ onReset: onReset ?? ( () => onShadowChange( undefined ) ),
153
+ } ) }
134
154
  renderContent={ () => (
135
155
  <DropdownContentWrapper paddingSize="medium">
136
156
  <ShadowPopoverContainer
@@ -144,7 +164,8 @@ export function ShadowPopover( { shadow, onShadowChange, settings } ) {
144
164
  );
145
165
  }
146
166
 
147
- function renderShadowToggle( shadow, onShadowChange ) {
167
+ function renderShadowToggle( shadow, onShadowChange, resetConfig ) {
168
+ const { hasLocalValue, hasLocalOverride, onReset } = resetConfig;
148
169
  return function ShadowToggle( { onToggle, isOpen } ) {
149
170
  const shadowButtonRef = useRef( undefined );
150
171
 
@@ -158,20 +179,13 @@ function renderShadowToggle( shadow, onShadowChange ) {
158
179
  ref: shadowButtonRef,
159
180
  };
160
181
 
161
- const removeButtonProps = {
162
- onClick: () => {
163
- if ( isOpen ) {
164
- onToggle();
165
- }
166
- onShadowChange( undefined );
167
- // Return focus to parent button.
168
- shadowButtonRef.current?.focus();
169
- },
170
- className: clsx(
171
- 'block-editor-global-styles__shadow-editor__remove-button',
172
- { 'is-open': isOpen }
173
- ),
174
- label: __( 'Remove' ),
182
+ const handleReset = () => {
183
+ if ( isOpen ) {
184
+ onToggle();
185
+ }
186
+ onReset();
187
+ // Return focus to parent button.
188
+ shadowButtonRef.current?.focus();
175
189
  };
176
190
 
177
191
  return (
@@ -186,14 +200,22 @@ function renderShadowToggle( shadow, onShadowChange ) {
186
200
  <FlexItem>{ __( 'Drop shadow' ) }</FlexItem>
187
201
  </HStack>
188
202
  </Button>
189
- { !! shadow && (
190
- <Button
191
- __next40pxDefaultSize
192
- size="small"
193
- icon={ reset }
194
- { ...removeButtonProps }
195
- />
196
- ) }
203
+ { hasLocalValue &&
204
+ ( hasLocalOverride ? (
205
+ <InheritanceResetButton
206
+ className="block-editor-global-styles__shadow-editor__remove-button"
207
+ onResetToInherited={ handleReset }
208
+ />
209
+ ) : (
210
+ <Button
211
+ __next40pxDefaultSize
212
+ size="small"
213
+ icon={ reset }
214
+ label={ __( 'Remove' ) }
215
+ className="block-editor-global-styles__shadow-editor__remove-button"
216
+ onClick={ handleReset }
217
+ />
218
+ ) ) }
197
219
  </>
198
220
  );
199
221
  };