@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,10 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import {
5
- __experimentalToolsPanel as ToolsPanel,
6
- __experimentalToolsPanelItem as ToolsPanelItem,
7
- } from '@wordpress/components';
4
+ import { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';
8
5
  import { useCallback } from '@wordpress/element';
9
6
  import { __ } from '@wordpress/i18n';
10
7
 
@@ -21,6 +18,11 @@ import {
21
18
  extractPresetSlug,
22
19
  encodeColorValueWithPalette,
23
20
  } from '../../utils/color-values';
21
+ import {
22
+ getInheritanceProps,
23
+ InheritanceToolsPanelItem,
24
+ isGlobalStylesInheritanceEnabled,
25
+ } from './inheritance';
24
26
 
25
27
  const DEFAULT_CONTROLS = {
26
28
  backgroundImage: true,
@@ -168,6 +170,7 @@ export default function BackgroundImagePanel( {
168
170
  defaultValues = {},
169
171
  headerLabel = __( 'Background' ),
170
172
  contrastWarning,
173
+ showInheritanceLabelIndicators = isGlobalStylesInheritanceEnabled(),
171
174
  } ) {
172
175
  const {
173
176
  colors,
@@ -259,6 +262,9 @@ export default function BackgroundImagePanel( {
259
262
  onChange( newValue );
260
263
  };
261
264
 
265
+ // Non-cascading root values are already dropped from `inheritedValue` by
266
+ // the builder, so inherited reads below are direct.
267
+
262
268
  // Background color (written to `color.background`).
263
269
  const backgroundColor = decodeValue( inheritedValue?.color?.background );
264
270
  const userBackgroundColor = decodeValue( value?.color?.background );
@@ -291,11 +297,11 @@ export default function BackgroundImagePanel( {
291
297
  // Legacy `color.gradient` setters.
292
298
  const legacyColorGradient = decodeValue( inheritedValue?.color?.gradient );
293
299
  const userLegacyColorGradient = decodeValue( value?.color?.gradient );
294
- const setLegacyColorGradient = ( newGradient ) => {
300
+ const setLegacyColorGradient = ( newGradient, newSlug ) => {
295
301
  const newValue = setImmutably(
296
302
  value,
297
303
  [ 'color', 'gradient' ],
298
- encodeGradientValue( newGradient )
304
+ encodeGradientValue( newGradient, newSlug )
299
305
  );
300
306
  newValue.color.background = undefined;
301
307
  onChange( newValue );
@@ -317,16 +323,31 @@ export default function BackgroundImagePanel( {
317
323
  // Set gradient value, encoding preset matches as slug references.
318
324
  // Also clear color.gradient to migrate from the legacy location,
319
325
  // matching the block inspector behavior in hooks/background.js.
320
- const setGradient = ( newGradient ) => {
326
+ const setGradient = ( newGradient, newSlug ) => {
321
327
  let newValue = setImmutably(
322
328
  value,
323
329
  [ 'background', 'gradient' ],
324
- encodeGradientValue( newGradient )
330
+ encodeGradientValue( newGradient, newSlug )
325
331
  );
326
332
  newValue = setImmutably( newValue, [ 'color', 'gradient' ], undefined );
327
333
  onChange( newValue );
328
334
  };
329
335
 
336
+ const inheritanceProps = ( isInherited, hasLocalOverride, classNames ) =>
337
+ showInheritanceLabelIndicators
338
+ ? getInheritanceProps( isInherited, hasLocalOverride, classNames )
339
+ : { className: classNames };
340
+
341
+ // The inherited value arrives already resolved (refs + theme-file pointers)
342
+ // with non-cascading root values dropped, so a presence check drives the
343
+ // label affordance and matches what `BackgroundImageControl` renders.
344
+ const inheritedBackgroundImage = hasBackgroundImageValue( {
345
+ background: {
346
+ backgroundImage: inheritedValue?.background?.backgroundImage,
347
+ },
348
+ } );
349
+ const hasLocalBackgroundImage = hasBackgroundImageValue( value );
350
+
330
351
  return (
331
352
  <Wrapper
332
353
  resetAllFilter={ resetAllFilter }
@@ -336,8 +357,13 @@ export default function BackgroundImagePanel( {
336
357
  headerLabel={ headerLabel }
337
358
  >
338
359
  { showBackgroundImageControl && (
339
- <ToolsPanelItem
340
- className="block-editor-color-gradient-item"
360
+ <InheritanceToolsPanelItem
361
+ { ...inheritanceProps(
362
+ inheritedBackgroundImage && ! hasLocalBackgroundImage,
363
+ hasLocalBackgroundImage && inheritedBackgroundImage,
364
+ 'block-editor-color-gradient-item'
365
+ ) }
366
+ showLocalOverrideActionsInLabel={ false }
341
367
  hasValue={ () => hasBackgroundImageValue( value ) }
342
368
  label={ __( 'Image' ) }
343
369
  onDeselect={ resetBackground }
@@ -351,8 +377,11 @@ export default function BackgroundImagePanel( {
351
377
  inheritedValue={ inheritedValue }
352
378
  defaultControls={ defaultControls }
353
379
  defaultValues={ defaultValues }
380
+ showInheritanceLabelIndicators={
381
+ showInheritanceLabelIndicators
382
+ }
354
383
  />
355
- </ToolsPanelItem>
384
+ </InheritanceToolsPanelItem>
356
385
  ) }
357
386
  { showBackgroundColorControl && (
358
387
  <ColorGradientDropdownItem
@@ -362,30 +391,36 @@ export default function BackgroundImagePanel( {
362
391
  isShownByDefault={ defaultControls.backgroundColor }
363
392
  indicators={ [ userBackgroundColor ?? backgroundColor ] }
364
393
  contrastWarning={ contrastWarning }
394
+ showInheritanceLabelIndicators={
395
+ showInheritanceLabelIndicators
396
+ }
397
+ isPlaceholder={
398
+ userBackgroundColor === undefined &&
399
+ backgroundColor !== undefined
400
+ }
401
+ hasInheritedValue={ backgroundColor !== undefined }
365
402
  tabs={ [
366
403
  {
367
404
  key: 'background',
368
405
  label: __( 'Color' ),
369
- inheritedValue:
370
- userBackgroundColor ?? backgroundColor,
371
- // Resolve the slug from the same source as the
372
- // displayed value (user value first, then the
373
- // inherited fallback). For a block instance the
374
- // selection lives in `value` while `inheritedValue`
375
- // only holds the global styles fallback, so reading
376
- // the slug from `inheritedValue` alone would miss it
377
- // and two same-hex presets would both appear selected.
378
- inheritedSlug:
379
- extractPresetSlug(
380
- value?.color?.background,
381
- 'color'
382
- ) ??
383
- extractPresetSlug(
384
- inheritedValue?.color?.background,
385
- 'color'
386
- ),
406
+ inheritedValue: backgroundColor,
407
+ // The picker selects by slug: `userSlug` when the
408
+ // block has its own value, otherwise
409
+ // `inheritedSlug`. Hex matching would mark two
410
+ // same-hex presets as both selected.
411
+ inheritedSlug: extractPresetSlug(
412
+ inheritedValue?.color?.background,
413
+ 'color'
414
+ ),
415
+ userSlug: extractPresetSlug(
416
+ value?.color?.background,
417
+ 'color'
418
+ ),
387
419
  setValue: setBackgroundColor,
388
420
  userValue: userBackgroundColor,
421
+ isPlaceholder:
422
+ userBackgroundColor === undefined &&
423
+ backgroundColor !== undefined,
389
424
  },
390
425
  ] }
391
426
  colorGradientControlSettings={ {
@@ -401,16 +436,36 @@ export default function BackgroundImagePanel( {
401
436
  hasValue={ () => hasBackgroundGradientValue( value ) }
402
437
  resetValue={ resetGradient }
403
438
  isShownByDefault={ defaultControls.gradient }
404
- indicators={ [ currentGradient ] }
439
+ indicators={ [ currentGradient ?? inheritedGradient ] }
440
+ showInheritanceLabelIndicators={
441
+ showInheritanceLabelIndicators
442
+ }
443
+ isPlaceholder={
444
+ currentGradient === undefined &&
445
+ inheritedGradient !== undefined
446
+ }
447
+ hasInheritedValue={ inheritedGradient !== undefined }
405
448
  tabs={ [
406
449
  {
407
450
  key: 'gradient',
408
451
  label: __( 'Gradient' ),
409
- inheritedValue:
410
- currentGradient ?? inheritedGradient,
452
+ inheritedValue: inheritedGradient,
453
+ inheritedSlug: extractPresetSlug(
454
+ inheritedValue?.background?.gradient ??
455
+ inheritedValue?.color?.gradient,
456
+ 'gradient'
457
+ ),
458
+ userSlug: extractPresetSlug(
459
+ value?.background?.gradient ??
460
+ value?.color?.gradient,
461
+ 'gradient'
462
+ ),
411
463
  setValue: setGradient,
412
464
  userValue: currentGradient,
413
465
  isGradient: true,
466
+ isPlaceholder:
467
+ currentGradient === undefined &&
468
+ inheritedGradient !== undefined,
414
469
  },
415
470
  ] }
416
471
  colorGradientControlSettings={ {
@@ -429,15 +484,33 @@ export default function BackgroundImagePanel( {
429
484
  indicators={ [
430
485
  userLegacyColorGradient ?? legacyColorGradient,
431
486
  ] }
487
+ showInheritanceLabelIndicators={
488
+ showInheritanceLabelIndicators
489
+ }
490
+ isPlaceholder={
491
+ userLegacyColorGradient === undefined &&
492
+ legacyColorGradient !== undefined
493
+ }
494
+ hasInheritedValue={ legacyColorGradient !== undefined }
432
495
  tabs={ [
433
496
  {
434
497
  key: 'gradient',
435
498
  label: __( 'Gradient' ),
436
- inheritedValue:
437
- userLegacyColorGradient ?? legacyColorGradient,
499
+ inheritedValue: legacyColorGradient,
500
+ inheritedSlug: extractPresetSlug(
501
+ inheritedValue?.color?.gradient,
502
+ 'gradient'
503
+ ),
504
+ userSlug: extractPresetSlug(
505
+ value?.color?.gradient,
506
+ 'gradient'
507
+ ),
438
508
  setValue: setLegacyColorGradient,
439
509
  userValue: userLegacyColorGradient,
440
510
  isGradient: true,
511
+ isPlaceholder:
512
+ userLegacyColorGradient === undefined &&
513
+ legacyColorGradient !== undefined,
441
514
  },
442
515
  ] }
443
516
  colorGradientControlSettings={ {
@@ -6,7 +6,6 @@ import {
6
6
  __experimentalHasSplitBorders as hasSplitBorders,
7
7
  __experimentalIsDefinedBorder as isDefinedBorder,
8
8
  __experimentalToolsPanel as ToolsPanel,
9
- __experimentalToolsPanelItem as ToolsPanelItem,
10
9
  BaseControl,
11
10
  } from '@wordpress/components';
12
11
  import { useCallback, useMemo } from '@wordpress/element';
@@ -22,6 +21,11 @@ import { useToolsPanelDropdownMenuProps } from './utils';
22
21
  import { setImmutably } from '../../utils/object';
23
22
  import { useBorderPanelLabel } from '../../hooks/border';
24
23
  import { ShadowPopover, useShadowPresets } from './shadow-panel-components';
24
+ import {
25
+ getInheritanceProps,
26
+ InheritanceToolsPanelItem,
27
+ isGlobalStylesInheritanceEnabled,
28
+ } from './inheritance';
25
29
 
26
30
  export function useHasBorderPanel( settings ) {
27
31
  const controls = Object.values( useHasBorderPanelControls( settings ) );
@@ -103,6 +107,7 @@ export default function BorderPanel( {
103
107
  panelId,
104
108
  name,
105
109
  defaultControls = DEFAULT_CONTROLS,
110
+ showInheritanceLabelIndicators = isGlobalStylesInheritanceEnabled(),
106
111
  } ) {
107
112
  const colors = useColorsPerOrigin( settings );
108
113
  const areCustomSolidsEnabled = settings?.color?.custom;
@@ -110,6 +115,14 @@ export default function BorderPanel( {
110
115
  ( rawValue ) => getValueFromVariable( { settings }, '', rawValue ),
111
116
  [ settings ]
112
117
  );
118
+ // Always keep the layout className (e.g. `single-column`); only the
119
+ // inheritance treatment is gated on `showInheritanceLabelIndicators`.
120
+ const inheritanceProps = ( isInherited, hasLocalOverride, className ) =>
121
+ getInheritanceProps(
122
+ showInheritanceLabelIndicators && isInherited,
123
+ showInheritanceLabelIndicators && hasLocalOverride,
124
+ className
125
+ );
113
126
  const encodeColorValue = ( colorValue ) => {
114
127
  const allColors = colors.flatMap(
115
128
  ( { colors: originColors } ) => originColors
@@ -121,61 +134,141 @@ export default function BorderPanel( {
121
134
  ? 'var:preset|color|' + colorObject.slug
122
135
  : colorValue;
123
136
  };
124
- const border = useMemo( () => {
125
- if ( hasSplitBorders( inheritedValue?.border ) ) {
126
- const borderValue = { ...inheritedValue?.border };
127
- [ 'top', 'right', 'bottom', 'left' ].forEach( ( side ) => {
128
- borderValue[ side ] = {
129
- ...borderValue[ side ],
130
- color: decodeValue( borderValue[ side ]?.color ),
131
- };
132
- } );
133
- return borderValue;
134
- }
135
- return {
136
- ...inheritedValue?.border,
137
- color: inheritedValue?.border?.color
138
- ? decodeValue( inheritedValue?.border?.color )
139
- : undefined,
140
- };
141
- }, [ inheritedValue?.border, decodeValue ] );
137
+ // Decode a `border` sub-tree (handles split borders + flat shape).
138
+ const decodeBorder = useCallback(
139
+ ( source ) => {
140
+ if ( ! source ) {
141
+ return undefined;
142
+ }
143
+ if ( hasSplitBorders( source ) ) {
144
+ const out = { ...source };
145
+ [ 'top', 'right', 'bottom', 'left' ].forEach( ( side ) => {
146
+ out[ side ] = {
147
+ ...out[ side ],
148
+ color: decodeValue( out[ side ]?.color ),
149
+ };
150
+ } );
151
+ return out;
152
+ }
153
+ return {
154
+ ...source,
155
+ color: source.color ? decodeValue( source.color ) : undefined,
156
+ };
157
+ },
158
+ [ decodeValue ]
159
+ );
160
+ // Local-then-inherited: prefer the user's locally-set border (whether
161
+ // flat or split) when defined, otherwise fall back to the inherited
162
+ // Global Styles border. The merge happens at the sub-tree root, not
163
+ // at the leaf level — borders are commonly authored as a single
164
+ // affordance in the inspector, so partial leaf merges would be
165
+ // surprising.
166
+ const localBorder = useMemo(
167
+ () => decodeBorder( value?.border ),
168
+ [ value?.border, decodeBorder ]
169
+ );
170
+ const inheritedBorder = useMemo(
171
+ () => decodeBorder( inheritedValue?.border ),
172
+ [ inheritedValue?.border, decodeBorder ]
173
+ );
174
+ const isBorderPlaceholder =
175
+ ! isDefinedBorder( value?.border ) &&
176
+ !! inheritedBorder &&
177
+ isDefinedBorder( inheritedBorder );
178
+ const border = isBorderPlaceholder ? inheritedBorder : localBorder;
142
179
  const setBorder = ( newBorder ) =>
143
180
  onChange( { ...value, border: newBorder } );
144
181
  const showBorderColor = useHasBorderColorControl( settings );
145
182
  const showBorderStyle = useHasBorderStyleControl( settings );
146
183
  const showBorderWidth = useHasBorderWidthControl( settings );
147
184
 
148
- // Border radius.
185
+ // Border radius. Display inherited values through the control's `values`
186
+ // prop when local values are empty so UnitControl can parse the numeric
187
+ // quantity and selected unit normally (e.g. `2.5em` -> `2.5` + `em`).
188
+ // `hasBorderRadius` remains local-only, so displaying the inherited value
189
+ // does not mark the ToolsPanel item as customised or commit on mount.
149
190
  const showBorderRadius = useHasBorderRadiusControl( settings );
150
- const borderRadiusValues = useMemo( () => {
151
- if ( typeof inheritedValue?.border?.radius !== 'object' ) {
152
- return decodeValue( inheritedValue?.border?.radius );
191
+ const localBorderRadius = useMemo( () => {
192
+ if ( typeof value?.border?.radius !== 'object' ) {
193
+ return decodeValue( value?.border?.radius );
194
+ }
195
+ return {
196
+ topLeft: decodeValue( value?.border?.radius?.topLeft ),
197
+ topRight: decodeValue( value?.border?.radius?.topRight ),
198
+ bottomLeft: decodeValue( value?.border?.radius?.bottomLeft ),
199
+ bottomRight: decodeValue( value?.border?.radius?.bottomRight ),
200
+ };
201
+ }, [ value?.border?.radius, decodeValue ] );
202
+ const inheritedBorderRadius = useMemo( () => {
203
+ const rawRadius = inheritedValue?.border?.radius;
204
+ if ( typeof rawRadius !== 'object' ) {
205
+ return decodeValue( rawRadius );
153
206
  }
154
-
155
207
  return {
156
- topLeft: decodeValue( inheritedValue?.border?.radius?.topLeft ),
157
- topRight: decodeValue( inheritedValue?.border?.radius?.topRight ),
158
- bottomLeft: decodeValue(
159
- inheritedValue?.border?.radius?.bottomLeft
160
- ),
161
- bottomRight: decodeValue(
162
- inheritedValue?.border?.radius?.bottomRight
163
- ),
208
+ topLeft: decodeValue( rawRadius?.topLeft ),
209
+ topRight: decodeValue( rawRadius?.topRight ),
210
+ bottomLeft: decodeValue( rawRadius?.bottomLeft ),
211
+ bottomRight: decodeValue( rawRadius?.bottomRight ),
164
212
  };
165
213
  }, [ inheritedValue?.border?.radius, decodeValue ] );
214
+ // Spread the local border, not the merged display value, or setting a
215
+ // radius bakes the inherited border into the local override. Mirror of
216
+ // the guard in `onBorderChange`.
166
217
  const setBorderRadius = ( newBorderRadius ) =>
167
- setBorder( { ...border, radius: newBorderRadius } );
218
+ setBorder( { ...value?.border, radius: newBorderRadius } );
168
219
  const hasBorderRadius = () => {
169
220
  const borderValues = value?.border?.radius;
170
221
  if ( typeof borderValues === 'object' ) {
171
- return Object.entries( borderValues ).some( Boolean );
222
+ return Object.entries( borderValues ).some( ( [ , v ] ) => !! v );
172
223
  }
173
224
  return !! borderValues;
174
225
  };
226
+ const isBorderRadiusPlaceholder =
227
+ ! hasBorderRadius() &&
228
+ inheritedBorderRadius !== undefined &&
229
+ inheritedBorderRadius !== '';
230
+ // Build an object value so unlinked-mode shows per-corner inherited
231
+ // values. The control accepts either a string or an object; passing the
232
+ // object form is correct in both modes (the control collapses to the
233
+ // `all`/first corner in linked mode).
234
+ const borderRadius = useMemo( () => {
235
+ if ( ! isBorderRadiusPlaceholder ) {
236
+ return localBorderRadius;
237
+ }
238
+ if ( typeof inheritedBorderRadius === 'string' ) {
239
+ return inheritedBorderRadius;
240
+ }
241
+ const obj = inheritedBorderRadius;
242
+ if ( ! obj ) {
243
+ return localBorderRadius;
244
+ }
245
+ const all =
246
+ obj.topLeft &&
247
+ obj.topLeft === obj.topRight &&
248
+ obj.topLeft === obj.bottomLeft &&
249
+ obj.topLeft === obj.bottomRight
250
+ ? obj.topLeft
251
+ : undefined;
252
+ return { all, ...obj };
253
+ }, [
254
+ isBorderRadiusPlaceholder,
255
+ localBorderRadius,
256
+ inheritedBorderRadius,
257
+ ] );
175
258
  const hasShadowControl = useHasShadowControl( settings );
176
259
 
177
- // Shadow
178
- const shadow = decodeValue( inheritedValue?.shadow );
260
+ // Shadow. At rest, the popover toggle button uses the placeholder
261
+ // treatment, and the popover preset list pre-selects the inherited shadow.
262
+ // The interceptor below recognises the user's "accept inherited" click as
263
+ // an explicit commit, mirroring the ToggleGroup pattern in the typography
264
+ // panel.
265
+ const localShadow = decodeValue( value?.shadow );
266
+ const inheritedShadow = decodeValue( inheritedValue?.shadow );
267
+ const isShadowPlaceholder =
268
+ localShadow === undefined &&
269
+ inheritedShadow !== undefined &&
270
+ inheritedShadow !== '';
271
+ const shadow = isShadowPlaceholder ? inheritedShadow : localShadow;
179
272
  const shadowPresets = settings?.shadow?.presets ?? {};
180
273
  const mergedShadowPresets =
181
274
  shadowPresets.custom ??
@@ -195,8 +288,30 @@ export default function BorderPanel( {
195
288
  )
196
289
  );
197
290
  };
291
+ // Display-without-commit interceptor for the shadow preset list. When the
292
+ // user is at the at-rest preselect (local is undefined, inherited is the
293
+ // active shadow), `ShadowPresets`' default toggle-off behaviour would
294
+ // interpret the click on the highlighted preset as `undefined` (clear).
295
+ // Re-route it to an explicit commit of the inherited value, so clicking
296
+ // the visible preselected preset is the user's "accept this inherited
297
+ // value" affordance.
298
+ const setShadowWithInheritedCommit = ( newValue ) => {
299
+ if ( isShadowPlaceholder && newValue === undefined ) {
300
+ setShadow( inheritedShadow );
301
+ return;
302
+ }
303
+ setShadow( newValue );
304
+ };
198
305
  const hasShadow = () => !! value?.shadow;
199
306
  const resetShadow = () => setShadow( undefined );
307
+ // A local override exists when the user has set a shadow that shadows an
308
+ // inherited one. Only then does the toggle render the blue-dot reset
309
+ // affordance (mirroring the color/gradient controls); a merely-inherited
310
+ // value at rest shows no reset button.
311
+ const hasShadowLocalOverride =
312
+ showInheritanceLabelIndicators &&
313
+ hasShadow() &&
314
+ inheritedShadow !== undefined;
200
315
 
201
316
  const resetBorder = () => {
202
317
  if ( hasBorderRadius() ) {
@@ -225,9 +340,22 @@ export default function BorderPanel( {
225
340
  }
226
341
 
227
342
  // As radius is maintained separately to color, style, and width
228
- // maintain its value. Undefined values here will be cleaned when
343
+ // maintain its value. Read from `value` (local-only) rather than
344
+ // `border` (the merged display value), otherwise an inherited
345
+ // radius gets baked into the local override every time the
346
+ // user touches color/style/width — which both pollutes the
347
+ // stored attribute and causes the radius `ToolsPanelItem` to
348
+ // flip into the `has-local-override-from-global-styles` state
349
+ // even though the user never customised the radius. The
350
+ // `radius` key must come after the spread so it wins over any
351
+ // `radius` field forwarded by `BorderBoxControl`'s inner
352
+ // `BorderControl`, which merges its incoming `value` with the
353
+ // changed prop. Undefined values here will be cleaned when
229
354
  // global styles are saved.
230
- setBorder( { radius: border?.radius, ...updatedBorder } );
355
+ setBorder( {
356
+ ...updatedBorder,
357
+ radius: value?.border?.radius,
358
+ } );
231
359
  };
232
360
 
233
361
  const resetAllFilter = useCallback( ( previousValue ) => {
@@ -262,13 +390,41 @@ export default function BorderPanel( {
262
390
  label={ label }
263
391
  >
264
392
  { ( showBorderWidth || showBorderColor ) && (
265
- <ToolsPanelItem
393
+ <InheritanceToolsPanelItem
394
+ { ...inheritanceProps(
395
+ isBorderPlaceholder,
396
+ isDefinedBorder( value?.border ) &&
397
+ !! inheritedBorder &&
398
+ isDefinedBorder( inheritedBorder )
399
+ ) }
266
400
  hasValue={ () => isDefinedBorder( value?.border ) }
267
401
  label={ __( 'Border' ) }
268
402
  onDeselect={ () => resetBorder() }
269
403
  isShownByDefault={ showBorderByDefault }
270
404
  panelId={ panelId }
271
405
  >
406
+ { ( showInheritanceLabelIndicators ||
407
+ hasShadowControl ) && (
408
+ // Render the visible label as `BaseControl.VisualLabel`
409
+ // (which produces `.components-base-control__label`)
410
+ // rather than passing `label` to `BorderBoxControl`,
411
+ // whose internal `<StyledLabel>` carries no stable
412
+ // className. The inheritance treatment and the
413
+ // local-override reset affordance both target
414
+ // `.components-base-control__label`, so the visible
415
+ // "Border" label has to be a `BaseControl` label to
416
+ // receive them.
417
+ //
418
+ // Render it whenever a Shadow control is also present so
419
+ // the two controls stay disambiguated (mirrors the
420
+ // Shadow label's `hasBorderControl` guard below, and
421
+ // trunk's `hideLabelFromVision={ ! hasShadowControl }`),
422
+ // even when inheritance indicators are off (e.g. in
423
+ // Global Styles).
424
+ <BaseControl.VisualLabel as="legend">
425
+ { __( 'Border' ) }
426
+ </BaseControl.VisualLabel>
427
+ ) }
272
428
  <BorderBoxControl
273
429
  colors={ colors }
274
430
  disableCustomColors={ ! areCustomSolidsEnabled }
@@ -279,34 +435,46 @@ export default function BorderPanel( {
279
435
  popoverPlacement="left-start"
280
436
  value={ border }
281
437
  __experimentalIsRenderedInSidebar
282
- hideLabelFromVision={ ! hasShadowControl }
283
- label={ __( 'Border' ) }
284
438
  />
285
- </ToolsPanelItem>
439
+ </InheritanceToolsPanelItem>
286
440
  ) }
287
441
  { showBorderRadius && (
288
- <ToolsPanelItem
442
+ <InheritanceToolsPanelItem
443
+ { ...inheritanceProps(
444
+ isBorderRadiusPlaceholder,
445
+ hasBorderRadius() && inheritedBorderRadius !== undefined
446
+ ) }
289
447
  hasValue={ hasBorderRadius }
290
448
  label={ __( 'Radius' ) }
449
+ hasInlineEndToggle
291
450
  onDeselect={ () => setBorderRadius( undefined ) }
292
451
  isShownByDefault={ defaultControls.radius }
293
452
  panelId={ panelId }
294
453
  >
295
454
  <BorderRadiusControl
296
455
  presets={ settings?.border?.radiusSizes }
297
- values={ borderRadiusValues }
456
+ values={ borderRadius }
298
457
  onChange={ ( newValue ) => {
299
458
  setBorderRadius( newValue || undefined );
300
459
  } }
301
460
  />
302
- </ToolsPanelItem>
461
+ </InheritanceToolsPanelItem>
303
462
  ) }
304
463
  { hasShadowControl && (
305
- <ToolsPanelItem
464
+ <InheritanceToolsPanelItem
465
+ { ...inheritanceProps(
466
+ isShadowPlaceholder,
467
+ hasShadow() && inheritedShadow !== undefined
468
+ ) }
306
469
  label={ __( 'Shadow' ) }
307
470
  hasValue={ hasShadow }
308
471
  onDeselect={ resetShadow }
309
472
  isShownByDefault={ defaultControls.shadow }
473
+ // The shadow toggle renders its own reset affordance (blue
474
+ // dot for a local override, default reset otherwise) inside
475
+ // the control, mirroring the color/gradient controls, so the
476
+ // panel item must not render a second sibling reset dot.
477
+ showLocalOverrideActionsInLabel={ false }
310
478
  panelId={ panelId }
311
479
  >
312
480
  { hasBorderControl ? (
@@ -317,10 +485,13 @@ export default function BorderPanel( {
317
485
 
318
486
  <ShadowPopover
319
487
  shadow={ shadow }
320
- onShadowChange={ setShadow }
488
+ onShadowChange={ setShadowWithInheritedCommit }
321
489
  settings={ settings }
490
+ hasLocalValue={ hasShadow() }
491
+ hasLocalOverride={ hasShadowLocalOverride }
492
+ onReset={ resetShadow }
322
493
  />
323
- </ToolsPanelItem>
494
+ </InheritanceToolsPanelItem>
324
495
  ) }
325
496
  </Wrapper>
326
497
  );