@wordpress/block-editor 15.19.1-next.v.202605131032.0 → 15.20.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 (352) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/build/components/block-card/index.cjs +51 -41
  3. package/build/components/block-card/index.cjs.map +3 -3
  4. package/build/components/block-heading-level-dropdown/heading-level-icon.cjs.map +3 -3
  5. package/build/components/block-icon/index.cjs +7 -1
  6. package/build/components/block-icon/index.cjs.map +3 -3
  7. package/build/components/block-inspector/index.cjs +156 -11
  8. package/build/components/block-inspector/index.cjs.map +3 -3
  9. package/build/components/block-inspector/inspector-pre-tabs-slot-fill.cjs +38 -0
  10. package/build/components/block-inspector/inspector-pre-tabs-slot-fill.cjs.map +7 -0
  11. package/build/components/block-list/use-block-props/index.cjs +1 -1
  12. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  13. package/build/components/block-list/use-block-props/use-focus-handler.cjs +3 -4
  14. package/build/components/block-list/use-block-props/use-focus-handler.cjs.map +3 -3
  15. package/build/components/block-list/use-block-props/use-is-hovered.cjs +24 -14
  16. package/build/components/block-list/use-block-props/use-is-hovered.cjs.map +3 -3
  17. package/build/components/block-lock/modal.cjs.map +3 -3
  18. package/build/components/block-patterns-list/index.cjs +13 -2
  19. package/build/components/block-patterns-list/index.cjs.map +2 -2
  20. package/build/components/block-popover/index.cjs +13 -3
  21. package/build/components/block-popover/index.cjs.map +2 -2
  22. package/build/components/block-toolbar/switch-section-style.cjs.map +3 -3
  23. package/build/components/block-visibility/modal.cjs.map +3 -3
  24. package/build/components/block-visibility/viewport-visibility-info.cjs.map +3 -3
  25. package/build/components/colors-gradients/control.cjs +7 -4
  26. package/build/components/colors-gradients/control.cjs.map +2 -2
  27. package/build/components/global-styles/advanced-panel.cjs +24 -22
  28. package/build/components/global-styles/advanced-panel.cjs.map +3 -3
  29. package/build/components/global-styles/color-panel.cjs +95 -58
  30. package/build/components/global-styles/color-panel.cjs.map +2 -2
  31. package/build/components/global-styles/dimensions-panel.cjs +11 -5
  32. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  33. package/build/components/global-styles/index.cjs +3 -0
  34. package/build/components/global-styles/index.cjs.map +2 -2
  35. package/build/components/global-styles/shadow-panel-components.cjs +38 -26
  36. package/build/components/global-styles/shadow-panel-components.cjs.map +2 -2
  37. package/build/components/global-styles/state-control-badges.cjs +69 -0
  38. package/build/components/global-styles/state-control-badges.cjs.map +7 -0
  39. package/build/components/global-styles/state-control.cjs +54 -63
  40. package/build/components/global-styles/state-control.cjs.map +3 -3
  41. package/build/components/iframe/index.cjs +0 -3
  42. package/build/components/iframe/index.cjs.map +2 -2
  43. package/build/components/iframe/use-scale-canvas.cjs +4 -1
  44. package/build/components/iframe/use-scale-canvas.cjs.map +2 -2
  45. package/build/components/inserter/hooks/use-patterns-state.cjs +4 -6
  46. package/build/components/inserter/hooks/use-patterns-state.cjs.map +2 -2
  47. package/build/components/inserter/index.cjs +1 -0
  48. package/build/components/inserter/index.cjs.map +2 -2
  49. package/build/components/inserter/media-tab/media-preview.cjs +27 -18
  50. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  51. package/build/components/inserter/media-tab/utils.cjs +1 -1
  52. package/build/components/inserter/media-tab/utils.cjs.map +2 -2
  53. package/build/components/inserter/panel.cjs.map +3 -3
  54. package/build/components/inspector-controls/block-support-tools-panel.cjs +10 -2
  55. package/build/components/inspector-controls/block-support-tools-panel.cjs.map +2 -2
  56. package/build/components/inspector-controls/fill.cjs +14 -4
  57. package/build/components/inspector-controls/fill.cjs.map +2 -2
  58. package/build/components/inspector-controls/groups.cjs +2 -0
  59. package/build/components/inspector-controls/groups.cjs.map +2 -2
  60. package/build/components/inspector-controls-tabs/index.cjs +13 -8
  61. package/build/components/inspector-controls-tabs/index.cjs.map +3 -3
  62. package/build/components/inspector-controls-tabs/settings-tab.cjs +1 -4
  63. package/build/components/inspector-controls-tabs/settings-tab.cjs.map +3 -3
  64. package/build/components/inspector-controls-tabs/styles-tab.cjs +9 -0
  65. package/build/components/inspector-controls-tabs/styles-tab.cjs.map +3 -3
  66. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.cjs +11 -5
  67. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.cjs.map +2 -2
  68. package/build/components/list-view/block-select-button.cjs +20 -8
  69. package/build/components/list-view/block-select-button.cjs.map +2 -2
  70. package/build/components/list-view/block.cjs +2 -1
  71. package/build/components/list-view/block.cjs.map +2 -2
  72. package/build/components/preset-input-control/custom-value-controls.cjs +10 -1
  73. package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
  74. package/build/components/preset-input-control/index.cjs.map +3 -3
  75. package/build/components/provider/use-media-upload-settings.cjs +1 -0
  76. package/build/components/provider/use-media-upload-settings.cjs.map +2 -2
  77. package/build/components/rich-text/event-listeners/enter.cjs +9 -2
  78. package/build/components/rich-text/event-listeners/enter.cjs.map +3 -3
  79. package/build/components/rich-text/event-listeners/paste-handler.cjs +4 -4
  80. package/build/components/rich-text/event-listeners/paste-handler.cjs.map +3 -3
  81. package/build/hooks/background.cjs +13 -3
  82. package/build/hooks/background.cjs.map +2 -2
  83. package/build/hooks/block-fields/link/index.cjs.map +3 -3
  84. package/build/hooks/block-fields/media/index.cjs.map +3 -3
  85. package/build/hooks/block-style-state.cjs +112 -0
  86. package/build/hooks/block-style-state.cjs.map +7 -0
  87. package/build/hooks/border.cjs +13 -3
  88. package/build/hooks/border.cjs.map +2 -2
  89. package/build/hooks/color.cjs +28 -9
  90. package/build/hooks/color.cjs.map +2 -2
  91. package/build/hooks/dimensions.cjs +15 -6
  92. package/build/hooks/dimensions.cjs.map +2 -2
  93. package/build/hooks/layout-child.cjs +147 -61
  94. package/build/hooks/layout-child.cjs.map +2 -2
  95. package/build/hooks/layout.cjs +263 -56
  96. package/build/hooks/layout.cjs.map +3 -3
  97. package/build/hooks/state-utils.cjs +94 -0
  98. package/build/hooks/state-utils.cjs.map +7 -0
  99. package/build/hooks/states.cjs +124 -0
  100. package/build/hooks/states.cjs.map +7 -0
  101. package/build/hooks/style.cjs +304 -17
  102. package/build/hooks/style.cjs.map +3 -3
  103. package/build/hooks/typography.cjs +14 -5
  104. package/build/hooks/typography.cjs.map +2 -2
  105. package/build/layouts/constrained.cjs +128 -55
  106. package/build/layouts/constrained.cjs.map +3 -3
  107. package/build/layouts/flex.cjs +119 -31
  108. package/build/layouts/flex.cjs.map +3 -3
  109. package/build/layouts/grid.cjs +103 -40
  110. package/build/layouts/grid.cjs.map +3 -3
  111. package/build/private-apis.cjs +2 -0
  112. package/build/private-apis.cjs.map +2 -2
  113. package/build/store/private-actions.cjs +18 -0
  114. package/build/store/private-actions.cjs.map +2 -2
  115. package/build/store/private-keys.cjs +10 -2
  116. package/build/store/private-keys.cjs.map +2 -2
  117. package/build/store/private-selectors.cjs +26 -2
  118. package/build/store/private-selectors.cjs.map +2 -2
  119. package/build/store/reducer.cjs +70 -1
  120. package/build/store/reducer.cjs.map +2 -2
  121. package/build/store/utils.cjs +1 -1
  122. package/build/store/utils.cjs.map +2 -2
  123. package/build/utils/color-values.cjs +44 -0
  124. package/build/utils/color-values.cjs.map +7 -0
  125. package/build-module/components/block-card/index.mjs +52 -45
  126. package/build-module/components/block-card/index.mjs.map +2 -2
  127. package/build-module/components/block-heading-level-dropdown/heading-level-icon.mjs +2 -2
  128. package/build-module/components/block-heading-level-dropdown/heading-level-icon.mjs.map +2 -2
  129. package/build-module/components/block-icon/index.mjs +8 -2
  130. package/build-module/components/block-icon/index.mjs.map +2 -2
  131. package/build-module/components/block-inspector/index.mjs +166 -13
  132. package/build-module/components/block-inspector/index.mjs.map +2 -2
  133. package/build-module/components/block-inspector/inspector-pre-tabs-slot-fill.mjs +12 -0
  134. package/build-module/components/block-inspector/inspector-pre-tabs-slot-fill.mjs.map +7 -0
  135. package/build-module/components/block-list/use-block-props/index.mjs +1 -1
  136. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  137. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +7 -5
  138. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs.map +2 -2
  139. package/build-module/components/block-list/use-block-props/use-is-hovered.mjs +28 -15
  140. package/build-module/components/block-list/use-block-props/use-is-hovered.mjs.map +2 -2
  141. package/build-module/components/block-lock/modal.mjs +4 -4
  142. package/build-module/components/block-lock/modal.mjs.map +2 -2
  143. package/build-module/components/block-patterns-list/index.mjs +14 -4
  144. package/build-module/components/block-patterns-list/index.mjs.map +2 -2
  145. package/build-module/components/block-popover/index.mjs +13 -3
  146. package/build-module/components/block-popover/index.mjs.map +2 -2
  147. package/build-module/components/block-toolbar/switch-section-style.mjs +2 -2
  148. package/build-module/components/block-toolbar/switch-section-style.mjs.map +2 -2
  149. package/build-module/components/block-visibility/modal.mjs +2 -2
  150. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  151. package/build-module/components/block-visibility/viewport-visibility-info.mjs +2 -2
  152. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  153. package/build-module/components/colors-gradients/control.mjs +7 -4
  154. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  155. package/build-module/components/global-styles/advanced-panel.mjs +25 -27
  156. package/build-module/components/global-styles/advanced-panel.mjs.map +2 -2
  157. package/build-module/components/global-styles/color-panel.mjs +96 -59
  158. package/build-module/components/global-styles/color-panel.mjs.map +2 -2
  159. package/build-module/components/global-styles/dimensions-panel.mjs +14 -5
  160. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  161. package/build-module/components/global-styles/index.mjs +2 -0
  162. package/build-module/components/global-styles/index.mjs.map +2 -2
  163. package/build-module/components/global-styles/shadow-panel-components.mjs +39 -28
  164. package/build-module/components/global-styles/shadow-panel-components.mjs.map +2 -2
  165. package/build-module/components/global-styles/state-control-badges.mjs +48 -0
  166. package/build-module/components/global-styles/state-control-badges.mjs.map +7 -0
  167. package/build-module/components/global-styles/state-control.mjs +57 -71
  168. package/build-module/components/global-styles/state-control.mjs.map +2 -2
  169. package/build-module/components/iframe/index.mjs +0 -3
  170. package/build-module/components/iframe/index.mjs.map +2 -2
  171. package/build-module/components/iframe/use-scale-canvas.mjs +4 -1
  172. package/build-module/components/iframe/use-scale-canvas.mjs.map +2 -2
  173. package/build-module/components/inserter/hooks/use-patterns-state.mjs +8 -7
  174. package/build-module/components/inserter/hooks/use-patterns-state.mjs.map +2 -2
  175. package/build-module/components/inserter/index.mjs +1 -0
  176. package/build-module/components/inserter/index.mjs.map +2 -2
  177. package/build-module/components/inserter/media-tab/media-preview.mjs +27 -19
  178. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  179. package/build-module/components/inserter/media-tab/utils.mjs +1 -1
  180. package/build-module/components/inserter/media-tab/utils.mjs.map +2 -2
  181. package/build-module/components/inserter/panel.mjs +2 -2
  182. package/build-module/components/inserter/panel.mjs.map +2 -2
  183. package/build-module/components/inspector-controls/block-support-tools-panel.mjs +10 -2
  184. package/build-module/components/inspector-controls/block-support-tools-panel.mjs.map +2 -2
  185. package/build-module/components/inspector-controls/fill.mjs +18 -5
  186. package/build-module/components/inspector-controls/fill.mjs.map +2 -2
  187. package/build-module/components/inspector-controls/groups.mjs +2 -0
  188. package/build-module/components/inspector-controls/groups.mjs.map +2 -2
  189. package/build-module/components/inspector-controls-tabs/index.mjs +14 -10
  190. package/build-module/components/inspector-controls-tabs/index.mjs.map +2 -2
  191. package/build-module/components/inspector-controls-tabs/settings-tab.mjs +1 -4
  192. package/build-module/components/inspector-controls-tabs/settings-tab.mjs.map +2 -2
  193. package/build-module/components/inspector-controls-tabs/styles-tab.mjs +9 -0
  194. package/build-module/components/inspector-controls-tabs/styles-tab.mjs.map +2 -2
  195. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.mjs +11 -5
  196. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.mjs.map +2 -2
  197. package/build-module/components/list-view/block-select-button.mjs +20 -9
  198. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  199. package/build-module/components/list-view/block.mjs +2 -1
  200. package/build-module/components/list-view/block.mjs.map +2 -2
  201. package/build-module/components/preset-input-control/custom-value-controls.mjs +10 -2
  202. package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
  203. package/build-module/components/preset-input-control/index.mjs +2 -2
  204. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  205. package/build-module/components/provider/use-media-upload-settings.mjs +1 -0
  206. package/build-module/components/provider/use-media-upload-settings.mjs.map +2 -2
  207. package/build-module/components/rich-text/event-listeners/enter.mjs +9 -2
  208. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  209. package/build-module/components/rich-text/event-listeners/paste-handler.mjs +4 -4
  210. package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
  211. package/build-module/hooks/background.mjs +18 -3
  212. package/build-module/hooks/background.mjs.map +2 -2
  213. package/build-module/hooks/block-fields/link/index.mjs +3 -3
  214. package/build-module/hooks/block-fields/link/index.mjs.map +2 -2
  215. package/build-module/hooks/block-fields/media/index.mjs +3 -3
  216. package/build-module/hooks/block-fields/media/index.mjs.map +2 -2
  217. package/build-module/hooks/block-style-state.mjs +79 -0
  218. package/build-module/hooks/block-style-state.mjs.map +7 -0
  219. package/build-module/hooks/border.mjs +18 -3
  220. package/build-module/hooks/border.mjs.map +2 -2
  221. package/build-module/hooks/color.mjs +33 -9
  222. package/build-module/hooks/color.mjs.map +2 -2
  223. package/build-module/hooks/dimensions.mjs +20 -6
  224. package/build-module/hooks/dimensions.mjs.map +2 -2
  225. package/build-module/hooks/layout-child.mjs +141 -61
  226. package/build-module/hooks/layout-child.mjs.map +2 -2
  227. package/build-module/hooks/layout.mjs +270 -58
  228. package/build-module/hooks/layout.mjs.map +2 -2
  229. package/build-module/hooks/state-utils.mjs +64 -0
  230. package/build-module/hooks/state-utils.mjs.map +7 -0
  231. package/build-module/hooks/states.mjs +85 -0
  232. package/build-module/hooks/states.mjs.map +7 -0
  233. package/build-module/hooks/style.mjs +309 -18
  234. package/build-module/hooks/style.mjs.map +2 -2
  235. package/build-module/hooks/typography.mjs +19 -5
  236. package/build-module/hooks/typography.mjs.map +2 -2
  237. package/build-module/layouts/constrained.mjs +130 -57
  238. package/build-module/layouts/constrained.mjs.map +2 -2
  239. package/build-module/layouts/flex.mjs +123 -35
  240. package/build-module/layouts/flex.mjs.map +2 -2
  241. package/build-module/layouts/grid.mjs +105 -42
  242. package/build-module/layouts/grid.mjs.map +2 -2
  243. package/build-module/private-apis.mjs +4 -0
  244. package/build-module/private-apis.mjs.map +2 -2
  245. package/build-module/store/private-actions.mjs +16 -0
  246. package/build-module/store/private-actions.mjs.map +2 -2
  247. package/build-module/store/private-keys.mjs +7 -1
  248. package/build-module/store/private-keys.mjs.map +2 -2
  249. package/build-module/store/private-selectors.mjs +25 -2
  250. package/build-module/store/private-selectors.mjs.map +2 -2
  251. package/build-module/store/reducer.mjs +69 -1
  252. package/build-module/store/reducer.mjs.map +2 -2
  253. package/build-module/store/utils.mjs +5 -2
  254. package/build-module/store/utils.mjs.map +2 -2
  255. package/build-module/utils/color-values.mjs +19 -0
  256. package/build-module/utils/color-values.mjs.map +7 -0
  257. package/build-style/content-rtl.css +18 -3
  258. package/build-style/content.css +18 -3
  259. package/build-style/style-rtl.css +14 -17
  260. package/build-style/style.css +14 -17
  261. package/package.json +41 -41
  262. package/src/components/audio-player/index.native.js +7 -3
  263. package/src/components/block-card/index.js +67 -60
  264. package/src/components/block-heading-level-dropdown/heading-level-icon.js +2 -2
  265. package/src/components/block-icon/index.js +5 -2
  266. package/src/components/block-icon/index.native.js +2 -2
  267. package/src/components/block-inspector/index.js +153 -7
  268. package/src/components/block-inspector/inspector-pre-tabs-slot-fill.js +11 -0
  269. package/src/components/block-list/block-selection-button.native.js +3 -3
  270. package/src/components/block-list/content.scss +0 -6
  271. package/src/components/block-list/use-block-props/index.js +1 -1
  272. package/src/components/block-list/use-block-props/use-focus-handler.js +8 -6
  273. package/src/components/block-list/use-block-props/use-is-hovered.js +32 -15
  274. package/src/components/block-lock/modal.js +4 -4
  275. package/src/components/block-patterns-list/index.js +14 -5
  276. package/src/components/block-patterns-list/stories/index.story.jsx +2 -0
  277. package/src/components/block-patterns-list/style.scss +0 -1
  278. package/src/components/block-popover/index.js +20 -10
  279. package/src/components/block-toolbar/switch-section-style.js +2 -2
  280. package/src/components/block-visibility/modal.js +2 -2
  281. package/src/components/block-visibility/viewport-visibility-info.js +2 -2
  282. package/src/components/colors/test/with-colors.js +1 -1
  283. package/src/components/colors-gradients/control.js +10 -8
  284. package/src/components/colors-gradients/test/control.js +98 -1
  285. package/src/components/global-styles/advanced-panel.js +44 -39
  286. package/src/components/global-styles/color-panel.js +133 -60
  287. package/src/components/global-styles/dimensions-panel.js +17 -4
  288. package/src/components/global-styles/index.js +1 -0
  289. package/src/components/global-styles/shadow-panel-components.js +29 -19
  290. package/src/components/global-styles/state-control-badges.js +58 -0
  291. package/src/components/global-styles/state-control.js +28 -36
  292. package/src/components/global-styles/test/color-panel.js +135 -0
  293. package/src/components/iframe/index.js +0 -3
  294. package/src/components/iframe/use-scale-canvas.js +8 -2
  295. package/src/components/inserter/hooks/use-patterns-state.js +12 -7
  296. package/src/components/inserter/index.js +1 -0
  297. package/src/components/inserter/media-tab/media-preview.js +29 -20
  298. package/src/components/inserter/media-tab/utils.js +1 -1
  299. package/src/components/inserter/panel.js +2 -2
  300. package/src/components/inserter/style.scss +1 -0
  301. package/src/components/inserter-button/index.native.js +5 -2
  302. package/src/components/inspector-controls/block-support-tools-panel.js +10 -2
  303. package/src/components/inspector-controls/fill.js +18 -5
  304. package/src/components/inspector-controls/groups.js +2 -0
  305. package/src/components/inspector-controls-tabs/index.js +9 -5
  306. package/src/components/inspector-controls-tabs/settings-tab.js +1 -7
  307. package/src/components/inspector-controls-tabs/styles-tab.js +6 -0
  308. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +13 -7
  309. package/src/components/list-view/block-select-button.js +19 -9
  310. package/src/components/list-view/block.js +6 -1
  311. package/src/components/media-replace-flow/style.scss +0 -18
  312. package/src/components/preset-input-control/custom-value-controls.js +13 -6
  313. package/src/components/preset-input-control/index.js +2 -2
  314. package/src/components/provider/use-media-upload-settings.js +1 -0
  315. package/src/components/rich-text/event-listeners/enter.js +14 -2
  316. package/src/components/rich-text/event-listeners/paste-handler.js +5 -4
  317. package/src/components/unsupported-block-details/index.native.js +6 -2
  318. package/src/components/video-player/index.native.js +2 -2
  319. package/src/components/warning/index.native.js +2 -2
  320. package/src/hooks/background.js +59 -37
  321. package/src/hooks/block-fields/link/index.js +3 -3
  322. package/src/hooks/block-fields/media/index.js +3 -3
  323. package/src/hooks/block-style-state.js +127 -0
  324. package/src/hooks/border.js +25 -6
  325. package/src/hooks/color.js +40 -18
  326. package/src/hooks/dimensions.js +32 -11
  327. package/src/hooks/layout-child.js +179 -62
  328. package/src/hooks/layout.js +349 -75
  329. package/src/hooks/layout.scss +6 -0
  330. package/src/hooks/state-utils.js +158 -0
  331. package/src/hooks/states.js +109 -0
  332. package/src/hooks/style.js +456 -19
  333. package/src/hooks/test/block-style-state.js +270 -0
  334. package/src/hooks/test/layout.js +185 -0
  335. package/src/hooks/test/state-utils.js +193 -0
  336. package/src/hooks/test/style.js +301 -1
  337. package/src/hooks/typography.js +33 -14
  338. package/src/layouts/constrained.js +182 -95
  339. package/src/layouts/flex.js +141 -36
  340. package/src/layouts/grid.js +122 -32
  341. package/src/layouts/test/flex.js +57 -20
  342. package/src/private-apis.js +4 -0
  343. package/src/store/private-actions.js +32 -0
  344. package/src/store/private-keys.js +4 -0
  345. package/src/store/private-selectors.js +44 -2
  346. package/src/store/reducer.js +105 -1
  347. package/src/store/test/private-actions.js +26 -0
  348. package/src/store/test/private-selectors.js +90 -0
  349. package/src/store/test/reducer.js +363 -0
  350. package/src/store/utils.js +6 -2
  351. package/src/utils/color-values.js +28 -0
  352. package/src/utils/test/color-values.js +78 -0
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import {
5
5
  Button,
6
- Icon,
6
+ Icon as WCIcon,
7
7
  __experimentalGrid as Grid,
8
8
  Popover,
9
9
  } from '@wordpress/components';
@@ -104,7 +104,7 @@ export default function Link( { data, field, onChange } ) {
104
104
  >
105
105
  { url && (
106
106
  <>
107
- <Icon icon={ link } size={ 24 } />
107
+ <WCIcon icon={ link } size={ 24 } />
108
108
  <span className="block-editor-content-only-controls__link-title">
109
109
  { url }
110
110
  </span>
@@ -112,7 +112,7 @@ export default function Link( { data, field, onChange } ) {
112
112
  ) }
113
113
  { ! url && (
114
114
  <>
115
- <Icon
115
+ <WCIcon
116
116
  icon={ link }
117
117
  size={ 24 }
118
118
  style={ { opacity: 0.3 } }
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import {
5
5
  Button,
6
- Icon,
6
+ Icon as WCIcon,
7
7
  __experimentalGrid as Grid,
8
8
  } from '@wordpress/components';
9
9
  import { useSelect } from '@wordpress/data';
@@ -92,11 +92,11 @@ function MediaThumbnail( { data, field, attachment, config } ) {
92
92
  }
93
93
 
94
94
  if ( icon ) {
95
- return <Icon icon={ icon } size={ 20 } />;
95
+ return <WCIcon icon={ icon } size={ 20 } />;
96
96
  }
97
97
  }
98
98
 
99
- return <Icon icon={ mediaIcon } size={ 20 } />;
99
+ return <WCIcon icon={ mediaIcon } size={ 20 } />;
100
100
  }
101
101
 
102
102
  export default function Media( { data, field, onChange, config = {} } ) {
@@ -0,0 +1,127 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { createContext, useContext } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { cleanEmptyObject } from './utils';
10
+ import { getValueFromObjectPath, setImmutably } from '../utils/object';
11
+
12
+ const DEFAULT_STATE_VALUE = 'default';
13
+
14
+ export const DEFAULT_BLOCK_STYLE_STATE = {
15
+ viewport: DEFAULT_STATE_VALUE,
16
+ pseudo: DEFAULT_STATE_VALUE,
17
+ };
18
+
19
+ const BlockStyleStateContext = createContext( DEFAULT_BLOCK_STYLE_STATE );
20
+
21
+ export const BlockStyleStateProvider = BlockStyleStateContext.Provider;
22
+
23
+ export function useBlockStyleState() {
24
+ return useContext( BlockStyleStateContext );
25
+ }
26
+
27
+ /**
28
+ * Returns true when a viewport style state is selected.
29
+ *
30
+ * @param {Object} selectedState Selected block style state.
31
+ * @return {boolean} Whether a viewport state is selected.
32
+ */
33
+ export function hasViewportBlockStyleState( selectedState ) {
34
+ return (
35
+ !! selectedState?.viewport &&
36
+ selectedState.viewport !== DEFAULT_STATE_VALUE
37
+ );
38
+ }
39
+
40
+ /**
41
+ * Returns true when a pseudo style state is selected.
42
+ *
43
+ * @param {Object} selectedState Selected block style state.
44
+ * @return {boolean} Whether a pseudo state is selected.
45
+ */
46
+ export function hasPseudoBlockStyleState( selectedState ) {
47
+ return (
48
+ !! selectedState?.pseudo && selectedState.pseudo !== DEFAULT_STATE_VALUE
49
+ );
50
+ }
51
+
52
+ /**
53
+ * Returns true when the default style state is selected.
54
+ *
55
+ * @param {Object} selectedState Selected block style state.
56
+ * @return {boolean} Whether the default style state is selected.
57
+ */
58
+ export function isDefaultBlockStyleState( selectedState ) {
59
+ return (
60
+ ! hasViewportBlockStyleState( selectedState ) &&
61
+ ! hasPseudoBlockStyleState( selectedState )
62
+ );
63
+ }
64
+
65
+ /**
66
+ * Returns the style object path for the selected block style state.
67
+ *
68
+ * @param {Object} selectedState Selected block style state.
69
+ * @return {string[]} Object path for the selected state styles.
70
+ */
71
+ function getStyleStatePath( selectedState ) {
72
+ if ( isDefaultBlockStyleState( selectedState ) ) {
73
+ return [];
74
+ }
75
+
76
+ return [ selectedState.viewport, selectedState.pseudo ].filter(
77
+ ( state ) => state && state !== DEFAULT_STATE_VALUE
78
+ );
79
+ }
80
+
81
+ export function getStyleForState( style, selectedState ) {
82
+ const path = getStyleStatePath( selectedState );
83
+ if ( ! path.length ) {
84
+ return style;
85
+ }
86
+ return getValueFromObjectPath( style, path );
87
+ }
88
+
89
+ export function setStyleForState( style, selectedState, newStyle ) {
90
+ const path = getStyleStatePath( selectedState );
91
+ if ( ! path.length ) {
92
+ return cleanEmptyObject( newStyle );
93
+ }
94
+ return cleanEmptyObject( setImmutably( style, path, newStyle ) );
95
+ }
96
+
97
+ export function scopeResetAllFilterToState( selectedState, resetAllFilter ) {
98
+ if ( ! resetAllFilter || isDefaultBlockStyleState( selectedState ) ) {
99
+ return resetAllFilter;
100
+ }
101
+
102
+ return ( attributes ) => {
103
+ const existingStateStyle =
104
+ getStyleForState( attributes?.style, selectedState ) || {};
105
+ const updatedStateAttributes = resetAllFilter( {
106
+ style: existingStateStyle,
107
+ } );
108
+ const updatedStateStyle =
109
+ updatedStateAttributes &&
110
+ typeof updatedStateAttributes === 'object' &&
111
+ ! Array.isArray( updatedStateAttributes ) &&
112
+ Object.prototype.hasOwnProperty.call(
113
+ updatedStateAttributes,
114
+ 'style'
115
+ )
116
+ ? updatedStateAttributes.style
117
+ : updatedStateAttributes;
118
+
119
+ return {
120
+ style: setStyleForState(
121
+ attributes?.style,
122
+ selectedState,
123
+ updatedStateStyle
124
+ ),
125
+ };
126
+ };
127
+ }
@@ -11,6 +11,7 @@ import { __experimentalHasSplitBorders as hasSplitBorders } from '@wordpress/com
11
11
  import { Platform, useCallback, useMemo } from '@wordpress/element';
12
12
  import { addFilter } from '@wordpress/hooks';
13
13
  import { useSelect } from '@wordpress/data';
14
+ import { __ } from '@wordpress/i18n';
14
15
 
15
16
  /**
16
17
  * Internal dependencies
@@ -29,7 +30,12 @@ import {
29
30
  BorderPanel as StylesBorderPanel,
30
31
  } from '../components/global-styles';
31
32
  import { store as blockEditorStore } from '../store';
32
- import { __ } from '@wordpress/i18n';
33
+ import {
34
+ getStyleForState,
35
+ isDefaultBlockStyleState,
36
+ setStyleForState,
37
+ useBlockStyleState,
38
+ } from './block-style-state';
33
39
 
34
40
  export const BORDER_SUPPORT_KEY = '__experimentalBorder';
35
41
  export const SHADOW_SUPPORT_KEY = 'shadow';
@@ -141,6 +147,7 @@ function BordersInspectorControl( { label, children, resetAllFilter } ) {
141
147
  }
142
148
 
143
149
  export function BorderPanel( { clientId, name, setAttributes, settings } ) {
150
+ const selectedState = useBlockStyleState();
144
151
  const isEnabled = useHasBorderPanel( settings );
145
152
  const { style, borderColor } = useSelect(
146
153
  ( select ) => {
@@ -154,13 +161,25 @@ export function BorderPanel( { clientId, name, setAttributes, settings } ) {
154
161
  },
155
162
  [ clientId, isEnabled ]
156
163
  );
164
+
165
+ const isStateSelected = ! isDefaultBlockStyleState( selectedState );
166
+
157
167
  const value = useMemo( () => {
168
+ if ( isStateSelected ) {
169
+ return getStyleForState( style, selectedState );
170
+ }
158
171
  return attributesToStyle( { style, borderColor } );
159
- }, [ style, borderColor ] );
160
-
161
- const onChange = ( newStyle ) => {
162
- setAttributes( styleToAttributes( newStyle ) );
163
- };
172
+ }, [ isStateSelected, selectedState, style, borderColor ] );
173
+
174
+ const onChange = isStateSelected
175
+ ? ( newStyle ) => {
176
+ setAttributes( {
177
+ style: setStyleForState( style, selectedState, newStyle ),
178
+ } );
179
+ }
180
+ : ( newStyle ) => {
181
+ setAttributes( styleToAttributes( newStyle ) );
182
+ };
164
183
 
165
184
  if ( ! isEnabled ) {
166
185
  return null;
@@ -31,8 +31,15 @@ import {
31
31
  useHasColorPanel,
32
32
  default as StylesColorPanel,
33
33
  } from '../components/global-styles/color-panel';
34
+ import { extractPresetSlug } from '../utils/color-values';
34
35
  import BlockColorContrastChecker from './contrast-checker';
35
36
  import { store as blockEditorStore } from '../store';
37
+ import {
38
+ getStyleForState,
39
+ isDefaultBlockStyleState,
40
+ setStyleForState,
41
+ useBlockStyleState,
42
+ } from './block-style-state';
36
43
 
37
44
  export const COLOR_SUPPORT_KEY = 'color';
38
45
 
@@ -191,19 +198,14 @@ export function addSaveProps( props, blockNameOrType, attributes ) {
191
198
 
192
199
  function styleToAttributes( style ) {
193
200
  const textColorValue = style?.color?.text;
194
- const textColorSlug = textColorValue?.startsWith( 'var:preset|color|' )
195
- ? textColorValue.substring( 'var:preset|color|'.length )
196
- : undefined;
201
+ const textColorSlug = extractPresetSlug( textColorValue, 'color' );
197
202
  const backgroundColorValue = style?.color?.background;
198
- const backgroundColorSlug = backgroundColorValue?.startsWith(
199
- 'var:preset|color|'
200
- )
201
- ? backgroundColorValue.substring( 'var:preset|color|'.length )
202
- : undefined;
203
+ const backgroundColorSlug = extractPresetSlug(
204
+ backgroundColorValue,
205
+ 'color'
206
+ );
203
207
  const gradientValue = style?.color?.gradient;
204
- const gradientSlug = gradientValue?.startsWith( 'var:preset|gradient|' )
205
- ? gradientValue.substring( 'var:preset|gradient|'.length )
206
- : undefined;
208
+ const gradientSlug = extractPresetSlug( gradientValue, 'gradient' );
207
209
  const updatedStyle = { ...style };
208
210
  updatedStyle.color = {
209
211
  ...updatedStyle.color,
@@ -269,6 +271,7 @@ export function ColorEdit( {
269
271
  label,
270
272
  defaultControls,
271
273
  } ) {
274
+ const selectedState = useBlockStyleState();
272
275
  const isEnabled = useHasColorPanel( settings );
273
276
 
274
277
  const { style, textColor, backgroundColor, gradient } = useSelect(
@@ -292,18 +295,39 @@ export function ColorEdit( {
292
295
  },
293
296
  [ clientId, isEnabled ]
294
297
  );
298
+
299
+ const isStateSelected = ! isDefaultBlockStyleState( selectedState );
300
+
295
301
  const value = useMemo( () => {
302
+ if ( isStateSelected ) {
303
+ return getStyleForState( style, selectedState );
304
+ }
296
305
  return attributesToStyle( {
297
306
  style,
298
307
  textColor,
299
308
  backgroundColor,
300
309
  gradient,
301
310
  } );
302
- }, [ style, textColor, backgroundColor, gradient ] );
311
+ }, [
312
+ isStateSelected,
313
+ selectedState,
314
+ style,
315
+ textColor,
316
+ backgroundColor,
317
+ gradient,
318
+ ] );
319
+
320
+ const onChange = isStateSelected
321
+ ? ( newStyle ) => {
322
+ setAttributes( {
323
+ style: setStyleForState( style, selectedState, newStyle ),
324
+ } );
325
+ }
326
+ : ( newStyle ) => {
327
+ setAttributes( styleToAttributes( newStyle ) );
328
+ };
303
329
 
304
- const onChange = ( newStyle ) => {
305
- setAttributes( styleToAttributes( newStyle ) );
306
- };
330
+ const Wrapper = asWrapper || ColorInspectorControl;
307
331
 
308
332
  if ( ! isEnabled ) {
309
333
  return null;
@@ -317,6 +341,7 @@ export function ColorEdit( {
317
341
  ] );
318
342
 
319
343
  const enableContrastChecking =
344
+ ! isStateSelected &&
320
345
  Platform.OS === 'web' &&
321
346
  ! value?.color?.gradient &&
322
347
  ( settings?.color?.text || settings?.color?.link ) &&
@@ -329,9 +354,6 @@ export function ColorEdit( {
329
354
  'enableContrastChecker',
330
355
  ] );
331
356
 
332
- // Use provided wrapper or default to ColorInspectorControl
333
- const Wrapper = asWrapper || ColorInspectorControl;
334
-
335
357
  return (
336
358
  <StylesColorPanel
337
359
  as={ Wrapper }
@@ -23,6 +23,12 @@ import { MarginVisualizer, PaddingVisualizer } from './spacing-visualizer';
23
23
  import { store as blockEditorStore } from '../store';
24
24
  import { unlock } from '../lock-unlock';
25
25
  import { cleanEmptyObject, shouldSkipSerialization } from './utils';
26
+ import {
27
+ getStyleForState,
28
+ isDefaultBlockStyleState,
29
+ setStyleForState,
30
+ useBlockStyleState,
31
+ } from './block-style-state';
26
32
 
27
33
  export const DIMENSIONS_SUPPORT_KEY = 'dimensions';
28
34
  export const SPACING_SUPPORT_KEY = 'spacing';
@@ -69,8 +75,10 @@ function DimensionsInspectorControl( { children, resetAllFilter } ) {
69
75
  }
70
76
 
71
77
  export function DimensionsPanel( { clientId, name, setAttributes, settings } ) {
72
- const isEnabled = useHasDimensionsPanel( settings );
73
- const value = useSelect(
78
+ const selectedState = useBlockStyleState();
79
+ const isStateSelected = ! isDefaultBlockStyleState( selectedState );
80
+ const isEnabled = useHasDimensionsPanel( settings, selectedState );
81
+ const style = useSelect(
74
82
  ( select ) => {
75
83
  // Early return to avoid subscription when disabled
76
84
  if ( ! isEnabled ) {
@@ -81,13 +89,21 @@ export function DimensionsPanel( { clientId, name, setAttributes, settings } ) {
81
89
  },
82
90
  [ clientId, isEnabled ]
83
91
  );
84
-
85
92
  const [ visualizedProperty, setVisualizedProperty ] = useVisualizer();
86
- const onChange = ( newStyle ) => {
87
- setAttributes( {
88
- style: cleanEmptyObject( newStyle ),
89
- } );
90
- };
93
+ const value = isStateSelected
94
+ ? getStyleForState( style, selectedState )
95
+ : style;
96
+ const onChange = isStateSelected
97
+ ? ( newStyle ) => {
98
+ setAttributes( {
99
+ style: setStyleForState( style, selectedState, newStyle ),
100
+ } );
101
+ }
102
+ : ( newStyle ) => {
103
+ setAttributes( {
104
+ style: cleanEmptyObject( newStyle ),
105
+ } );
106
+ };
91
107
 
92
108
  if ( ! isEnabled ) {
93
109
  return null;
@@ -119,9 +135,13 @@ export function DimensionsPanel( { clientId, name, setAttributes, settings } ) {
119
135
  value={ value }
120
136
  onChange={ onChange }
121
137
  defaultControls={ defaultControls }
122
- onVisualize={ setVisualizedProperty }
138
+ styleState={ selectedState }
139
+ onVisualize={
140
+ isStateSelected ? undefined : setVisualizedProperty
141
+ }
123
142
  />
124
- { !! settings?.spacing?.padding &&
143
+ { ! isStateSelected &&
144
+ !! settings?.spacing?.padding &&
125
145
  visualizedProperty === 'padding' && (
126
146
  <PaddingVisualizer
127
147
  forceShow={ visualizedProperty === 'padding' }
@@ -129,7 +149,8 @@ export function DimensionsPanel( { clientId, name, setAttributes, settings } ) {
129
149
  value={ value }
130
150
  />
131
151
  ) }
132
- { !! settings?.spacing?.margin &&
152
+ { ! isStateSelected &&
153
+ !! settings?.spacing?.margin &&
133
154
  visualizedProperty === 'margin' && (
134
155
  <MarginVisualizer
135
156
  forceShow={ visualizedProperty === 'margin' }