@wordpress/block-editor 15.19.1-next.v.202605131006.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
@@ -1,7 +1,19 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { registerBlockType, unregisterBlockType } from '@wordpress/blocks';
5
+
1
6
  /**
2
7
  * Internal dependencies
3
8
  */
4
- import _style, { getInlineStyles, omitStyle } from '../style';
9
+ import _style, {
10
+ getCanvasStateStyleValue,
11
+ getBlockStateStylesCSS,
12
+ getInlineStyles,
13
+ getResponsiveStateCSSRules,
14
+ getStateStylesCSS,
15
+ omitStyle,
16
+ } from '../style';
5
17
 
6
18
  describe( 'getInlineStyles', () => {
7
19
  it( 'should return an empty object when called with undefined', () => {
@@ -116,6 +128,294 @@ describe( 'getInlineStyles', () => {
116
128
  } );
117
129
  } );
118
130
 
131
+ describe( 'getStateStylesCSS', () => {
132
+ it( 'adds fallback border style without important', () => {
133
+ expect(
134
+ getStateStylesCSS(
135
+ {
136
+ border: {
137
+ color: '#000000',
138
+ width: '2px',
139
+ },
140
+ },
141
+ '.wp-block-test:hover'
142
+ )
143
+ ).toBe(
144
+ '.wp-block-test:hover { border-color: #000000 !important; border-width: 2px !important; }\n.wp-block-test:hover { border-style: solid; }'
145
+ );
146
+ } );
147
+
148
+ it( 'adds important to authored border style', () => {
149
+ expect(
150
+ getStateStylesCSS(
151
+ {
152
+ border: {
153
+ style: 'solid',
154
+ },
155
+ },
156
+ '.wp-block-test:hover'
157
+ )
158
+ ).toBe( '.wp-block-test:hover { border-style: solid !important; }' );
159
+ } );
160
+
161
+ it( 'adds important to authored side border style', () => {
162
+ expect(
163
+ getStateStylesCSS(
164
+ {
165
+ border: {
166
+ top: {
167
+ style: 'dashed',
168
+ },
169
+ },
170
+ },
171
+ '.wp-block-test:hover'
172
+ )
173
+ ).toBe(
174
+ '.wp-block-test:hover { border-top-style: dashed !important; }'
175
+ );
176
+ } );
177
+
178
+ it( 'adds fallback side border style without important', () => {
179
+ expect(
180
+ getStateStylesCSS(
181
+ {
182
+ border: {
183
+ top: {
184
+ width: '2px',
185
+ },
186
+ },
187
+ },
188
+ '.wp-block-test:hover'
189
+ )
190
+ ).toBe(
191
+ '.wp-block-test:hover { border-top-width: 2px !important; }\n.wp-block-test:hover { border-top-style: solid; }'
192
+ );
193
+ } );
194
+
195
+ it( 'adds important to side border color', () => {
196
+ expect(
197
+ getStateStylesCSS(
198
+ {
199
+ border: {
200
+ top: {
201
+ color: '#0000ff',
202
+ },
203
+ },
204
+ },
205
+ '.wp-block-test:hover'
206
+ )
207
+ ).toBe(
208
+ '.wp-block-test:hover { border-top-color: #0000ff !important; }\n.wp-block-test:hover { border-top-style: solid; }'
209
+ );
210
+ } );
211
+ } );
212
+
213
+ describe( 'getBlockStateStylesCSS', () => {
214
+ beforeEach( () => {
215
+ registerBlockType( 'test/state-button', {
216
+ apiVersion: 3,
217
+ title: 'State Button',
218
+ category: 'text',
219
+ attributes: {},
220
+ edit: () => null,
221
+ save: () => null,
222
+ selectors: {
223
+ root: '.wp-block-button .wp-block-button__link',
224
+ dimensions: {
225
+ root: '.wp-block-button',
226
+ width: '.wp-block-button',
227
+ },
228
+ },
229
+ } );
230
+ } );
231
+
232
+ afterEach( () => {
233
+ unregisterBlockType( 'test/state-button' );
234
+ } );
235
+
236
+ it( 'routes state styles through feature selectors', () => {
237
+ expect(
238
+ getBlockStateStylesCSS(
239
+ {
240
+ color: { background: '#ff00d0' },
241
+ dimensions: { width: '50%' },
242
+ },
243
+ {
244
+ name: 'test/state-button',
245
+ baseSelector: '.wp-elements-abc123',
246
+ state: ':hover',
247
+ }
248
+ )
249
+ ).toBe(
250
+ '.wp-elements-abc123 .wp-block-button__link:hover { background-color: #ff00d0 !important; }\n.wp-elements-abc123:hover { width: 50% !important; }'
251
+ );
252
+ } );
253
+
254
+ it( 'routes canvas preview styles through feature selectors without the pseudo state', () => {
255
+ expect(
256
+ getBlockStateStylesCSS(
257
+ {
258
+ color: { background: '#ff00d0' },
259
+ dimensions: { width: '50%' },
260
+ },
261
+ {
262
+ name: 'test/state-button',
263
+ baseSelector: '[data-block="client-id"]',
264
+ }
265
+ )
266
+ ).toBe(
267
+ '[data-block="client-id"] .wp-block-button__link { background-color: #ff00d0 !important; }\n[data-block="client-id"] { width: 50% !important; }'
268
+ );
269
+ } );
270
+ } );
271
+
272
+ describe( 'getResponsiveStateCSSRules', () => {
273
+ beforeEach( () => {
274
+ registerBlockType( 'test/state-button', {
275
+ apiVersion: 3,
276
+ title: 'State Button',
277
+ category: 'text',
278
+ attributes: {},
279
+ edit: () => null,
280
+ save: () => null,
281
+ selectors: {
282
+ root: '.wp-block-button .wp-block-button__link',
283
+ dimensions: {
284
+ root: '.wp-block-button',
285
+ width: '.wp-block-button',
286
+ },
287
+ },
288
+ } );
289
+ } );
290
+
291
+ afterEach( () => {
292
+ unregisterBlockType( 'test/state-button' );
293
+ } );
294
+
295
+ it( 'generates media-query scoped root styles for viewport states', () => {
296
+ expect(
297
+ getResponsiveStateCSSRules(
298
+ {
299
+ mobile: {
300
+ color: { text: 'red' },
301
+ },
302
+ },
303
+ 'core/paragraph',
304
+ '.wp-elements-1'
305
+ )
306
+ ).toEqual( [
307
+ '@media (width <= 480px){.wp-elements-1 { color: red !important; }}',
308
+ ] );
309
+ } );
310
+
311
+ it( 'routes viewport styles through feature selectors', () => {
312
+ expect(
313
+ getResponsiveStateCSSRules(
314
+ {
315
+ mobile: {
316
+ color: { background: '#ff00d0' },
317
+ dimensions: { width: '50%' },
318
+ },
319
+ },
320
+ 'test/state-button',
321
+ '.wp-elements-1'
322
+ )
323
+ ).toEqual( [
324
+ '@media (width <= 480px){.wp-elements-1 .wp-block-button__link { background-color: #ff00d0 !important; }\n.wp-elements-1 { width: 50% !important; }}',
325
+ ] );
326
+ } );
327
+
328
+ it( 'generates media-query scoped pseudo styles for viewport states', () => {
329
+ expect(
330
+ getResponsiveStateCSSRules(
331
+ {
332
+ mobile: {
333
+ ':hover': {
334
+ color: { background: 'black' },
335
+ },
336
+ },
337
+ },
338
+ 'core/button',
339
+ '.wp-elements-1'
340
+ )
341
+ ).toEqual( [
342
+ '@media (width <= 480px){.wp-elements-1:hover { background-color: black !important; }}',
343
+ ] );
344
+ } );
345
+
346
+ it( 'generates media-query scoped element styles for viewport states', () => {
347
+ expect(
348
+ getResponsiveStateCSSRules(
349
+ {
350
+ mobile: {
351
+ elements: {
352
+ link: {
353
+ color: { text: 'blue' },
354
+ },
355
+ },
356
+ },
357
+ },
358
+ 'core/paragraph',
359
+ '.wp-elements-1'
360
+ )
361
+ ).toEqual( [
362
+ '@media (width <= 480px){.wp-elements-1 a:where(:not(.wp-element-button)) { color: blue; }}',
363
+ ] );
364
+ } );
365
+ } );
366
+
367
+ describe( 'getCanvasStateStyleValue', () => {
368
+ it( 'returns the selected pseudo state value without a viewport state', () => {
369
+ expect(
370
+ getCanvasStateStyleValue(
371
+ {
372
+ ':hover': {
373
+ color: { text: 'red' },
374
+ },
375
+ },
376
+ { viewport: 'default', pseudo: ':hover' }
377
+ )
378
+ ).toEqual( {
379
+ color: { text: 'red' },
380
+ } );
381
+ } );
382
+
383
+ it( 'falls back to default viewport pseudo styles for responsive pseudo states', () => {
384
+ expect(
385
+ getCanvasStateStyleValue(
386
+ {
387
+ ':hover': {
388
+ color: { text: 'red' },
389
+ },
390
+ },
391
+ { viewport: 'mobile', pseudo: ':hover' }
392
+ )
393
+ ).toEqual( {
394
+ color: { text: 'red' },
395
+ } );
396
+ } );
397
+
398
+ it( 'merges responsive pseudo styles over default viewport pseudo styles', () => {
399
+ expect(
400
+ getCanvasStateStyleValue(
401
+ {
402
+ ':hover': {
403
+ color: { background: 'blue', text: 'red' },
404
+ },
405
+ mobile: {
406
+ ':hover': {
407
+ color: { text: 'yellow' },
408
+ },
409
+ },
410
+ },
411
+ { viewport: 'mobile', pseudo: ':hover' }
412
+ )
413
+ ).toEqual( {
414
+ color: { background: 'blue', text: 'yellow' },
415
+ } );
416
+ } );
417
+ } );
418
+
119
419
  describe( 'addSaveProps', () => {
120
420
  const blockSettings = {
121
421
  save: () => <div className="default" />,
@@ -21,6 +21,12 @@ import { TEXT_ALIGN_SUPPORT_KEY } from './text-align';
21
21
  import { FIT_TEXT_SUPPORT_KEY } from './fit-text';
22
22
  import { cleanEmptyObject } from './utils';
23
23
  import { store as blockEditorStore } from '../store';
24
+ import {
25
+ getStyleForState,
26
+ isDefaultBlockStyleState,
27
+ setStyleForState,
28
+ useBlockStyleState,
29
+ } from './block-style-state';
24
30
 
25
31
  function omit( object, keys ) {
26
32
  return Object.fromEntries(
@@ -117,6 +123,7 @@ function TypographyInspectorControl( { children, resetAllFilter } ) {
117
123
  }
118
124
 
119
125
  export function TypographyPanel( { clientId, name, setAttributes, settings } ) {
126
+ const selectedState = useBlockStyleState();
120
127
  const isEnabled = useHasTypographyPanel( settings );
121
128
 
122
129
  const { style, fontFamily, fontSize, fitText } = useSelect(
@@ -140,23 +147,35 @@ export function TypographyPanel( { clientId, name, setAttributes, settings } ) {
140
147
  },
141
148
  [ clientId, isEnabled ]
142
149
  );
143
- const value = useMemo(
144
- () => attributesToStyle( { style, fontFamily, fontSize } ),
145
- [ style, fontSize, fontFamily ]
146
- );
147
150
 
148
- const onChange = ( newStyle ) => {
149
- const newAttributes = styleToAttributes( newStyle );
151
+ const isStateSelected = ! isDefaultBlockStyleState( selectedState );
150
152
 
151
- // If setting a font size and fitText is currently enabled, disable it
152
- const hasFontSize =
153
- newAttributes.fontSize || newAttributes.style?.typography?.fontSize;
154
- if ( hasFontSize && fitText ) {
155
- newAttributes.fitText = undefined;
153
+ const value = useMemo( () => {
154
+ if ( isStateSelected ) {
155
+ return getStyleForState( style, selectedState );
156
156
  }
157
-
158
- setAttributes( newAttributes );
159
- };
157
+ return attributesToStyle( { style, fontFamily, fontSize } );
158
+ }, [ isStateSelected, selectedState, style, fontSize, fontFamily ] );
159
+
160
+ const onChange = isStateSelected
161
+ ? ( newStyle ) => {
162
+ setAttributes( {
163
+ style: setStyleForState( style, selectedState, newStyle ),
164
+ } );
165
+ }
166
+ : ( newStyle ) => {
167
+ const newAttributes = styleToAttributes( newStyle );
168
+
169
+ // If setting a font size and fitText is currently enabled, disable it.
170
+ const hasFontSize =
171
+ newAttributes.fontSize ||
172
+ newAttributes.style?.typography?.fontSize;
173
+ if ( hasFontSize && fitText ) {
174
+ newAttributes.fitText = undefined;
175
+ }
176
+
177
+ setAttributes( newAttributes );
178
+ };
160
179
 
161
180
  if ( ! isEnabled ) {
162
181
  return null;