@wordpress/block-editor 17.1.0 → 17.2.1-next.v.202609171837.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 (541) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +214 -214
  3. package/build/autocompleters/block.cjs.map +2 -2
  4. package/build/components/alignment-control/ui.cjs.map +2 -2
  5. package/build/components/background-image-control/index.cjs +1 -1
  6. package/build/components/background-image-control/index.cjs.map +2 -2
  7. package/build/components/block-alignment-control/ui.cjs +21 -7
  8. package/build/components/block-alignment-control/ui.cjs.map +3 -3
  9. package/build/components/block-alignment-control/use-available-alignments.cjs +60 -13
  10. package/build/components/block-alignment-control/use-available-alignments.cjs.map +2 -2
  11. package/build/components/block-allowed-blocks/allowed-blocks-control.cjs.map +2 -2
  12. package/build/components/block-bindings/attribute-control.cjs +30 -30
  13. package/build/components/block-bindings/attribute-control.cjs.map +3 -3
  14. package/build/components/block-bindings/source-fields-list.cjs +27 -32
  15. package/build/components/block-bindings/source-fields-list.cjs.map +3 -3
  16. package/build/components/block-canvas/index.cjs.map +2 -2
  17. package/build/components/block-card/index.cjs +1 -2
  18. package/build/components/block-card/index.cjs.map +3 -3
  19. package/build/components/block-edit/edit.cjs.map +2 -2
  20. package/build/components/block-heading-level-dropdown/index.cjs.map +2 -2
  21. package/build/components/block-icon/index.cjs.map +2 -2
  22. package/build/components/block-inspector/edit-contents.cjs.map +2 -2
  23. package/build/components/block-inspector/index.cjs +27 -8
  24. package/build/components/block-inspector/index.cjs.map +3 -3
  25. package/build/components/block-keyboard-shortcuts/index.cjs.map +2 -2
  26. package/build/components/block-list/block-html.cjs +1 -12
  27. package/build/components/block-list/block-html.cjs.map +3 -3
  28. package/build/components/block-list/block.cjs +2 -4
  29. package/build/components/block-list/block.cjs.map +2 -2
  30. package/build/components/block-list/layout.cjs +1 -1
  31. package/build/components/block-list/layout.cjs.map +2 -2
  32. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  33. package/build/components/block-lock/modal.cjs +1 -3
  34. package/build/components/block-lock/modal.cjs.map +2 -2
  35. package/build/components/block-parent-selector/index.cjs +8 -5
  36. package/build/components/block-parent-selector/index.cjs.map +2 -2
  37. package/build/components/block-popover/index.cjs.map +2 -2
  38. package/build/components/block-rename/modal.cjs.map +2 -2
  39. package/build/components/block-settings-menu/block-settings-dropdown.cjs.map +2 -2
  40. package/build/components/block-styles/utils.cjs.map +2 -2
  41. package/build/components/block-switcher/index.cjs.map +2 -2
  42. package/build/components/block-toolbar/edit-section-button.cjs.map +2 -2
  43. package/build/components/block-toolbar/index.cjs +6 -4
  44. package/build/components/block-toolbar/index.cjs.map +2 -2
  45. package/build/components/block-toolbar/switch-section-style.cjs.map +2 -2
  46. package/build/components/block-variation-transforms/index.cjs +28 -18
  47. package/build/components/block-variation-transforms/index.cjs.map +3 -3
  48. package/build/components/block-visibility/modal.cjs.map +2 -2
  49. package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
  50. package/build/components/border-radius-control/index.cjs.map +2 -2
  51. package/build/components/color-palette/with-color-context.cjs.map +2 -2
  52. package/build/components/colors/with-colors.cjs.map +2 -2
  53. package/build/components/colors-gradients/control.cjs.map +2 -2
  54. package/build/components/contrast-checker/index.cjs.map +2 -2
  55. package/build/components/date-format-picker/index.cjs.map +2 -2
  56. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +3 -3
  57. package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
  58. package/build/components/font-sizes/with-font-sizes.cjs.map +2 -2
  59. package/build/components/global-styles/background-panel.cjs +1 -1
  60. package/build/components/global-styles/background-panel.cjs.map +2 -2
  61. package/build/components/global-styles/border-panel.cjs +1 -1
  62. package/build/components/global-styles/border-panel.cjs.map +2 -2
  63. package/build/components/global-styles/color-gradient-dropdown-item.cjs +1 -1
  64. package/build/components/global-styles/color-gradient-dropdown-item.cjs.map +2 -2
  65. package/build/components/global-styles/color-panel.cjs +1 -1
  66. package/build/components/global-styles/color-panel.cjs.map +2 -2
  67. package/build/components/global-styles/dimensions-panel.cjs +1 -1
  68. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  69. package/build/components/global-styles/filters-panel.cjs +1 -1
  70. package/build/components/global-styles/filters-panel.cjs.map +2 -2
  71. package/build/components/global-styles/hooks.cjs +1 -0
  72. package/build/components/global-styles/hooks.cjs.map +2 -2
  73. package/build/components/global-styles/inheritance/index.cjs +3 -3
  74. package/build/components/global-styles/inheritance/index.cjs.map +2 -2
  75. package/build/components/global-styles/inherited-value-context.cjs +0 -5
  76. package/build/components/global-styles/inherited-value-context.cjs.map +2 -2
  77. package/build/components/global-styles/state-control-badges.cjs +0 -1
  78. package/build/components/global-styles/state-control-badges.cjs.map +2 -2
  79. package/build/components/global-styles/state-control.cjs +6 -4
  80. package/build/components/global-styles/state-control.cjs.map +2 -2
  81. package/build/components/global-styles/text-shadow-panel.cjs +254 -0
  82. package/build/components/global-styles/text-shadow-panel.cjs.map +7 -0
  83. package/build/components/global-styles/typography-panel.cjs +46 -5
  84. package/build/components/global-styles/typography-panel.cjs.map +2 -2
  85. package/build/components/global-styles/typography-utils.cjs.map +2 -2
  86. package/build/components/global-styles/utils.cjs.map +2 -2
  87. package/build/components/html-element-control/index.cjs.map +3 -3
  88. package/build/components/iframe/index.cjs.map +2 -2
  89. package/build/components/iframe/use-scale-canvas.cjs.map +2 -2
  90. package/build/components/image-size-control/index.cjs.map +3 -3
  91. package/build/components/inner-blocks/index.cjs +6 -1
  92. package/build/components/inner-blocks/index.cjs.map +2 -2
  93. package/build/components/inner-content/index.cjs.map +2 -2
  94. package/build/components/inserter/block-patterns-tab/use-pattern-categories.cjs +4 -23
  95. package/build/components/inserter/block-patterns-tab/use-pattern-categories.cjs.map +2 -2
  96. package/build/components/inserter/block-patterns-tab/utils.cjs +26 -0
  97. package/build/components/inserter/block-patterns-tab/utils.cjs.map +2 -2
  98. package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
  99. package/build/components/inserter/hooks/use-insertion-point.cjs.map +2 -2
  100. package/build/components/inserter/hooks/use-patterns-state.cjs.map +2 -2
  101. package/build/components/inserter/media-tab/media-panel.cjs.map +2 -2
  102. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  103. package/build/components/inserter-list-item/index.cjs.map +2 -2
  104. package/build/components/inspector-controls/list-view-content-popover.cjs.map +2 -2
  105. package/build/components/link-control/search-results.cjs.map +2 -2
  106. package/build/components/link-control/use-search-handler.cjs +3 -0
  107. package/build/components/link-control/use-search-handler.cjs.map +2 -2
  108. package/build/components/list-view/branch.cjs.map +2 -2
  109. package/build/components/list-view/drop-indicator.cjs.map +2 -2
  110. package/build/components/list-view/index.cjs.map +2 -2
  111. package/build/components/list-view/use-list-view-drop-zone.cjs.map +2 -2
  112. package/build/components/list-view/utils.cjs.map +2 -2
  113. package/build/components/media-replace-flow/index.cjs +4 -1
  114. package/build/components/media-replace-flow/index.cjs.map +2 -2
  115. package/build/components/plain-text/index.cjs +1 -2
  116. package/build/components/plain-text/index.cjs.map +3 -3
  117. package/build/components/preset-input-control/index.cjs.map +2 -2
  118. package/build/components/provider/index.cjs +3 -1
  119. package/build/components/provider/index.cjs.map +2 -2
  120. package/build/components/provider/use-block-sync.cjs.map +2 -2
  121. package/build/components/publish-date-time-picker/index.cjs.map +2 -2
  122. package/build/components/resizable-box-popover/index.cjs +1 -1
  123. package/build/components/resizable-box-popover/index.cjs.map +1 -1
  124. package/build/components/resolution-tool/index.cjs.map +3 -3
  125. package/build/components/rich-text/event-listeners/enter.cjs +8 -22
  126. package/build/components/rich-text/event-listeners/enter.cjs.map +2 -2
  127. package/build/components/rich-text/format-edit.cjs.map +2 -2
  128. package/build/components/rich-text/index.cjs +20 -0
  129. package/build/components/rich-text/index.cjs.map +2 -2
  130. package/build/components/rich-text/multiline.cjs +10 -2
  131. package/build/components/rich-text/multiline.cjs.map +2 -2
  132. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.cjs.map +2 -2
  133. package/build/components/typewriter/index.cjs.map +2 -2
  134. package/build/components/use-block-commands/index.cjs.map +2 -2
  135. package/build/components/writing-flow/index.cjs +3 -0
  136. package/build/components/writing-flow/index.cjs.map +2 -2
  137. package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
  138. package/build/components/writing-flow/use-selection-observer.cjs +5 -3
  139. package/build/components/writing-flow/use-selection-observer.cjs.map +2 -2
  140. package/build/hooks/align.cjs +3 -5
  141. package/build/hooks/align.cjs.map +2 -2
  142. package/build/hooks/background.cjs.map +2 -2
  143. package/build/hooks/block-bindings.cjs.map +2 -2
  144. package/build/hooks/border.cjs.map +2 -2
  145. package/build/hooks/contrast-checker.cjs.map +2 -2
  146. package/build/hooks/dimensions.cjs.map +2 -2
  147. package/build/hooks/duotone.cjs.map +2 -2
  148. package/build/hooks/elements.cjs.map +2 -2
  149. package/build/hooks/fit-text.cjs.map +2 -2
  150. package/build/hooks/gap.cjs +2 -1
  151. package/build/hooks/gap.cjs.map +3 -3
  152. package/build/hooks/index.cjs +4 -2
  153. package/build/hooks/index.cjs.map +3 -3
  154. package/build/hooks/layout-child.cjs.map +2 -2
  155. package/build/hooks/layout.cjs +15 -14
  156. package/build/hooks/layout.cjs.map +3 -3
  157. package/build/hooks/position.cjs +3 -31
  158. package/build/hooks/position.cjs.map +2 -2
  159. package/build/hooks/states.cjs +3 -2
  160. package/build/hooks/states.cjs.map +2 -2
  161. package/build/hooks/text-shadow.cjs +100 -0
  162. package/build/hooks/text-shadow.cjs.map +7 -0
  163. package/build/hooks/typography.cjs +30 -6
  164. package/build/hooks/typography.cjs.map +2 -2
  165. package/build/hooks/utils.cjs +24 -2
  166. package/build/hooks/utils.cjs.map +2 -2
  167. package/build/layouts/grid.cjs.map +2 -2
  168. package/build/layouts/utils.cjs +7 -2
  169. package/build/layouts/utils.cjs.map +2 -2
  170. package/build/private-apis.cjs +9 -6
  171. package/build/private-apis.cjs.map +2 -2
  172. package/build/store/actions.cjs +26 -4
  173. package/build/store/actions.cjs.map +3 -3
  174. package/build/store/private-selectors.cjs.map +2 -2
  175. package/build/store/reducer.cjs.map +2 -2
  176. package/build/store/selectors.cjs.map +2 -2
  177. package/build/utils/get-font-styles-and-weights.cjs.map +2 -2
  178. package/build/utils/transform-styles/index.cjs.map +1 -1
  179. package/build-module/autocompleters/block.mjs.map +2 -2
  180. package/build-module/components/alignment-control/ui.mjs.map +2 -2
  181. package/build-module/components/background-image-control/index.mjs +2 -2
  182. package/build-module/components/background-image-control/index.mjs.map +2 -2
  183. package/build-module/components/block-alignment-control/ui.mjs +21 -7
  184. package/build-module/components/block-alignment-control/ui.mjs.map +2 -2
  185. package/build-module/components/block-alignment-control/use-available-alignments.mjs +56 -13
  186. package/build-module/components/block-alignment-control/use-available-alignments.mjs.map +2 -2
  187. package/build-module/components/block-allowed-blocks/allowed-blocks-control.mjs.map +2 -2
  188. package/build-module/components/block-bindings/attribute-control.mjs +31 -32
  189. package/build-module/components/block-bindings/attribute-control.mjs.map +2 -2
  190. package/build-module/components/block-bindings/source-fields-list.mjs +25 -30
  191. package/build-module/components/block-bindings/source-fields-list.mjs.map +2 -2
  192. package/build-module/components/block-canvas/index.mjs.map +2 -2
  193. package/build-module/components/block-card/index.mjs +3 -8
  194. package/build-module/components/block-card/index.mjs.map +2 -2
  195. package/build-module/components/block-edit/edit.mjs.map +2 -2
  196. package/build-module/components/block-heading-level-dropdown/index.mjs.map +2 -2
  197. package/build-module/components/block-icon/index.mjs.map +2 -2
  198. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  199. package/build-module/components/block-inspector/index.mjs +29 -10
  200. package/build-module/components/block-inspector/index.mjs.map +2 -2
  201. package/build-module/components/block-keyboard-shortcuts/index.mjs.map +2 -2
  202. package/build-module/components/block-list/block-html.mjs +1 -2
  203. package/build-module/components/block-list/block-html.mjs.map +2 -2
  204. package/build-module/components/block-list/block.mjs +2 -4
  205. package/build-module/components/block-list/block.mjs.map +2 -2
  206. package/build-module/components/block-list/layout.mjs +1 -1
  207. package/build-module/components/block-list/layout.mjs.map +2 -2
  208. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  209. package/build-module/components/block-lock/modal.mjs +1 -3
  210. package/build-module/components/block-lock/modal.mjs.map +2 -2
  211. package/build-module/components/block-parent-selector/index.mjs +8 -5
  212. package/build-module/components/block-parent-selector/index.mjs.map +2 -2
  213. package/build-module/components/block-popover/index.mjs.map +2 -2
  214. package/build-module/components/block-rename/modal.mjs.map +2 -2
  215. package/build-module/components/block-settings-menu/block-settings-dropdown.mjs.map +2 -2
  216. package/build-module/components/block-styles/utils.mjs.map +2 -2
  217. package/build-module/components/block-switcher/index.mjs.map +2 -2
  218. package/build-module/components/block-toolbar/edit-section-button.mjs.map +2 -2
  219. package/build-module/components/block-toolbar/index.mjs +6 -4
  220. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  221. package/build-module/components/block-toolbar/switch-section-style.mjs.map +2 -2
  222. package/build-module/components/block-variation-transforms/index.mjs +30 -21
  223. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  224. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  225. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  226. package/build-module/components/border-radius-control/index.mjs.map +2 -2
  227. package/build-module/components/color-palette/with-color-context.mjs.map +2 -2
  228. package/build-module/components/colors/with-colors.mjs.map +2 -2
  229. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  230. package/build-module/components/contrast-checker/index.mjs.map +2 -2
  231. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  232. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +2 -2
  233. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  234. package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
  235. package/build-module/components/font-sizes/with-font-sizes.mjs.map +2 -2
  236. package/build-module/components/global-styles/background-panel.mjs +2 -2
  237. package/build-module/components/global-styles/background-panel.mjs.map +2 -2
  238. package/build-module/components/global-styles/border-panel.mjs +2 -2
  239. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  240. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs +2 -2
  241. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs.map +2 -2
  242. package/build-module/components/global-styles/color-panel.mjs +2 -2
  243. package/build-module/components/global-styles/color-panel.mjs.map +2 -2
  244. package/build-module/components/global-styles/dimensions-panel.mjs +2 -2
  245. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  246. package/build-module/components/global-styles/filters-panel.mjs +2 -2
  247. package/build-module/components/global-styles/filters-panel.mjs.map +2 -2
  248. package/build-module/components/global-styles/hooks.mjs +1 -0
  249. package/build-module/components/global-styles/hooks.mjs.map +2 -2
  250. package/build-module/components/global-styles/inheritance/index.mjs +2 -2
  251. package/build-module/components/global-styles/inheritance/index.mjs.map +2 -2
  252. package/build-module/components/global-styles/inherited-value-context.mjs +0 -5
  253. package/build-module/components/global-styles/inherited-value-context.mjs.map +2 -2
  254. package/build-module/components/global-styles/state-control-badges.mjs +0 -1
  255. package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
  256. package/build-module/components/global-styles/state-control.mjs +6 -4
  257. package/build-module/components/global-styles/state-control.mjs.map +2 -2
  258. package/build-module/components/global-styles/text-shadow-panel.mjs +224 -0
  259. package/build-module/components/global-styles/text-shadow-panel.mjs.map +7 -0
  260. package/build-module/components/global-styles/typography-panel.mjs +47 -6
  261. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  262. package/build-module/components/global-styles/typography-utils.mjs.map +2 -2
  263. package/build-module/components/global-styles/utils.mjs.map +2 -2
  264. package/build-module/components/html-element-control/index.mjs +2 -2
  265. package/build-module/components/html-element-control/index.mjs.map +2 -2
  266. package/build-module/components/iframe/index.mjs.map +2 -2
  267. package/build-module/components/iframe/use-scale-canvas.mjs.map +2 -2
  268. package/build-module/components/image-size-control/index.mjs +2 -2
  269. package/build-module/components/image-size-control/index.mjs.map +2 -2
  270. package/build-module/components/inner-blocks/index.mjs +6 -1
  271. package/build-module/components/inner-blocks/index.mjs.map +2 -2
  272. package/build-module/components/inner-content/index.mjs.map +2 -2
  273. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.mjs +6 -24
  274. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.mjs.map +2 -2
  275. package/build-module/components/inserter/block-patterns-tab/utils.mjs +25 -0
  276. package/build-module/components/inserter/block-patterns-tab/utils.mjs.map +2 -2
  277. package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
  278. package/build-module/components/inserter/hooks/use-insertion-point.mjs.map +2 -2
  279. package/build-module/components/inserter/hooks/use-patterns-state.mjs.map +2 -2
  280. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  281. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  282. package/build-module/components/inserter-list-item/index.mjs.map +2 -2
  283. package/build-module/components/inspector-controls/list-view-content-popover.mjs.map +2 -2
  284. package/build-module/components/link-control/search-results.mjs.map +2 -2
  285. package/build-module/components/link-control/use-search-handler.mjs +3 -0
  286. package/build-module/components/link-control/use-search-handler.mjs.map +2 -2
  287. package/build-module/components/list-view/branch.mjs.map +2 -2
  288. package/build-module/components/list-view/drop-indicator.mjs.map +2 -2
  289. package/build-module/components/list-view/index.mjs.map +2 -2
  290. package/build-module/components/list-view/use-list-view-drop-zone.mjs.map +2 -2
  291. package/build-module/components/list-view/utils.mjs.map +2 -2
  292. package/build-module/components/media-replace-flow/index.mjs +4 -1
  293. package/build-module/components/media-replace-flow/index.mjs.map +2 -2
  294. package/build-module/components/plain-text/index.mjs +1 -2
  295. package/build-module/components/plain-text/index.mjs.map +2 -2
  296. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  297. package/build-module/components/provider/index.mjs +3 -1
  298. package/build-module/components/provider/index.mjs.map +2 -2
  299. package/build-module/components/provider/use-block-sync.mjs.map +2 -2
  300. package/build-module/components/publish-date-time-picker/index.mjs.map +2 -2
  301. package/build-module/components/resizable-box-popover/index.mjs +1 -1
  302. package/build-module/components/resizable-box-popover/index.mjs.map +1 -1
  303. package/build-module/components/resolution-tool/index.mjs +2 -2
  304. package/build-module/components/resolution-tool/index.mjs.map +2 -2
  305. package/build-module/components/rich-text/event-listeners/enter.mjs +8 -22
  306. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  307. package/build-module/components/rich-text/format-edit.mjs.map +2 -2
  308. package/build-module/components/rich-text/index.mjs +21 -0
  309. package/build-module/components/rich-text/index.mjs.map +2 -2
  310. package/build-module/components/rich-text/multiline.mjs +11 -3
  311. package/build-module/components/rich-text/multiline.mjs.map +2 -2
  312. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.mjs.map +2 -2
  313. package/build-module/components/typewriter/index.mjs.map +2 -2
  314. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  315. package/build-module/components/writing-flow/index.mjs +3 -0
  316. package/build-module/components/writing-flow/index.mjs.map +2 -2
  317. package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
  318. package/build-module/components/writing-flow/use-selection-observer.mjs +5 -3
  319. package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
  320. package/build-module/hooks/align.mjs +6 -6
  321. package/build-module/hooks/align.mjs.map +2 -2
  322. package/build-module/hooks/background.mjs.map +2 -2
  323. package/build-module/hooks/block-bindings.mjs.map +2 -2
  324. package/build-module/hooks/border.mjs.map +2 -2
  325. package/build-module/hooks/contrast-checker.mjs.map +2 -2
  326. package/build-module/hooks/dimensions.mjs.map +2 -2
  327. package/build-module/hooks/duotone.mjs.map +2 -2
  328. package/build-module/hooks/elements.mjs.map +2 -2
  329. package/build-module/hooks/fit-text.mjs.map +2 -2
  330. package/build-module/hooks/gap.mjs +2 -1
  331. package/build-module/hooks/gap.mjs.map +2 -2
  332. package/build-module/hooks/index.mjs +4 -2
  333. package/build-module/hooks/index.mjs.map +2 -2
  334. package/build-module/hooks/layout-child.mjs.map +2 -2
  335. package/build-module/hooks/layout.mjs +6 -5
  336. package/build-module/hooks/layout.mjs.map +2 -2
  337. package/build-module/hooks/position.mjs +5 -33
  338. package/build-module/hooks/position.mjs.map +2 -2
  339. package/build-module/hooks/states.mjs +3 -2
  340. package/build-module/hooks/states.mjs.map +2 -2
  341. package/build-module/hooks/text-shadow.mjs +65 -0
  342. package/build-module/hooks/text-shadow.mjs.map +7 -0
  343. package/build-module/hooks/typography.mjs +30 -6
  344. package/build-module/hooks/typography.mjs.map +2 -2
  345. package/build-module/hooks/utils.mjs +24 -2
  346. package/build-module/hooks/utils.mjs.map +2 -2
  347. package/build-module/layouts/grid.mjs.map +2 -2
  348. package/build-module/layouts/utils.mjs +5 -1
  349. package/build-module/layouts/utils.mjs.map +2 -2
  350. package/build-module/private-apis.mjs +6 -2
  351. package/build-module/private-apis.mjs.map +2 -2
  352. package/build-module/store/actions.mjs +28 -5
  353. package/build-module/store/actions.mjs.map +3 -3
  354. package/build-module/store/private-selectors.mjs.map +2 -2
  355. package/build-module/store/reducer.mjs.map +2 -2
  356. package/build-module/store/selectors.mjs.map +2 -2
  357. package/build-module/utils/get-font-styles-and-weights.mjs.map +2 -2
  358. package/build-module/utils/transform-styles/index.mjs.map +1 -1
  359. package/build-style/content-rtl.css +7 -2
  360. package/build-style/content.css +7 -2
  361. package/build-style/style-rtl.css +90 -25
  362. package/build-style/style.css +92 -25
  363. package/package.json +42 -43
  364. package/src/autocompleters/block.jsx +4 -4
  365. package/src/components/alignment-control/ui.jsx +1 -1
  366. package/src/components/background-image-control/index.jsx +3 -3
  367. package/src/components/block-alignment-control/test/index.jsdom.test.jsx +267 -0
  368. package/src/components/block-alignment-control/ui.jsx +47 -9
  369. package/src/components/block-alignment-control/use-available-alignments.js +106 -20
  370. package/src/components/block-allowed-blocks/allowed-blocks-control.jsx +1 -1
  371. package/src/components/block-bindings/attribute-control.jsx +27 -29
  372. package/src/components/block-bindings/source-fields-list.jsx +22 -32
  373. package/src/components/block-bindings/test/attribute-control.jsdom.test.jsx +115 -0
  374. package/src/components/block-canvas/index.jsx +1 -1
  375. package/src/components/block-card/index.jsx +5 -11
  376. package/src/components/block-card/style.scss +1 -0
  377. package/src/components/block-edit/edit.jsx +1 -1
  378. package/src/components/block-heading-level-dropdown/index.jsx +1 -1
  379. package/src/components/block-icon/index.jsx +1 -1
  380. package/src/components/block-icon/test/index.browser.test.jsx +74 -0
  381. package/src/components/block-inspector/edit-contents.jsx +2 -2
  382. package/src/components/block-inspector/index.jsx +46 -15
  383. package/src/components/block-inspector/style.scss +16 -0
  384. package/src/components/block-keyboard-shortcuts/index.jsx +2 -2
  385. package/src/components/block-list/block-html.jsx +2 -3
  386. package/src/components/block-list/block.jsx +7 -5
  387. package/src/components/block-list/content.scss +3 -2
  388. package/src/components/block-list/layout.jsx +4 -1
  389. package/src/components/block-list/test/layout.jsdom.test.js +40 -0
  390. package/src/components/block-list/use-block-props/index.js +1 -1
  391. package/src/components/block-lock/modal.jsx +2 -3
  392. package/src/components/block-lock/style.scss +1 -1
  393. package/src/components/block-mover/style.scss +0 -13
  394. package/src/components/block-parent-selector/index.jsx +12 -6
  395. package/src/components/block-patterns-list/style.scss +1 -1
  396. package/src/components/block-popover/index.jsx +1 -1
  397. package/src/components/block-rename/modal.jsx +3 -3
  398. package/src/components/block-settings-menu/block-settings-dropdown.jsx +1 -1
  399. package/src/components/block-styles/utils.js +1 -1
  400. package/src/components/block-switcher/index.jsx +3 -3
  401. package/src/components/block-toolbar/edit-section-button.jsx +2 -2
  402. package/src/components/block-toolbar/index.jsx +8 -4
  403. package/src/components/block-toolbar/switch-section-style.jsx +1 -1
  404. package/src/components/block-variation-transforms/index.jsx +24 -23
  405. package/src/components/block-variation-transforms/test/index.jsdom.test.jsx +93 -0
  406. package/src/components/block-visibility/modal.jsx +7 -7
  407. package/src/components/block-visibility/style.scss +1 -1
  408. package/src/components/block-visibility/viewport-visibility-info.jsx +5 -7
  409. package/src/components/border-radius-control/index.jsx +2 -2
  410. package/src/components/border-radius-control/test/index.jsdom.test.jsx +0 -22
  411. package/src/components/border-radius-control/test/select.browser.test.js +30 -0
  412. package/src/components/color-palette/with-color-context.jsx +1 -1
  413. package/src/components/colors/with-colors.jsx +1 -1
  414. package/src/components/colors-gradients/control.jsx +2 -2
  415. package/src/components/colors-gradients/test/{control.jsdom.test.jsx → control.browser.test.jsx} +6 -9
  416. package/src/components/contrast-checker/index.jsx +2 -2
  417. package/src/components/date-format-picker/index.jsx +2 -2
  418. package/src/components/dimensions-tool/aspect-ratio-tool.jsx +4 -4
  419. package/src/components/dimensions-tool/test/index.jsdom.test.jsx +17 -11
  420. package/src/components/dimensions-tool/width-height-tool.jsx +2 -2
  421. package/src/components/font-sizes/with-font-sizes.jsx +2 -3
  422. package/src/components/global-styles/background-panel.jsx +2 -2
  423. package/src/components/global-styles/border-panel.jsx +2 -2
  424. package/src/components/global-styles/color-gradient-dropdown-item.jsx +3 -3
  425. package/src/components/global-styles/color-panel.jsx +3 -3
  426. package/src/components/global-styles/dimensions-panel.jsx +6 -6
  427. package/src/components/global-styles/filters-panel.jsx +2 -2
  428. package/src/components/global-styles/hooks.js +1 -0
  429. package/src/components/global-styles/inheritance/index.jsx +9 -6
  430. package/src/components/global-styles/inheritance/test/{index.jsdom.test.jsx → index.browser.test.jsx} +34 -28
  431. package/src/components/global-styles/inherited-value-context.js +1 -9
  432. package/src/components/global-styles/state-control-badges.jsx +0 -1
  433. package/src/components/global-styles/state-control.jsx +12 -3
  434. package/src/components/global-styles/style.scss +68 -0
  435. package/src/components/global-styles/test/{color-panel.jsdom.test.jsx → color-panel.browser.test.jsx} +53 -54
  436. package/src/components/global-styles/test/inherited-value-context-core.jsdom.test.js +17 -26
  437. package/src/components/global-styles/test/{typography-panel-core.jsdom.test.jsx → typography-panel-core.browser.test.jsx} +84 -39
  438. package/src/components/global-styles/test/{typography-panel.jsdom.test.jsx → typography-panel.browser.test.jsx} +80 -122
  439. package/src/components/global-styles/text-shadow-panel.tsx +257 -0
  440. package/src/components/global-styles/typography-panel.jsx +52 -13
  441. package/src/components/global-styles/typography-utils.js +2 -2
  442. package/src/components/global-styles/utils.js +1 -1
  443. package/src/components/html-element-control/index.jsx +2 -2
  444. package/src/components/iframe/index.jsx +1 -1
  445. package/src/components/iframe/use-scale-canvas.js +1 -1
  446. package/src/components/image-size-control/index.jsx +2 -2
  447. package/src/components/inner-blocks/index.jsx +9 -1
  448. package/src/components/inner-content/index.jsx +1 -1
  449. package/src/components/inserter/block-patterns-tab/use-pattern-categories.js +7 -33
  450. package/src/components/inserter/block-patterns-tab/utils.js +44 -0
  451. package/src/components/inserter/hooks/use-block-types-state.js +2 -2
  452. package/src/components/inserter/hooks/use-insertion-point.js +1 -1
  453. package/src/components/inserter/hooks/use-patterns-state.js +1 -1
  454. package/src/components/inserter/media-tab/media-panel.jsx +9 -9
  455. package/src/components/inserter/media-tab/media-preview.jsx +1 -1
  456. package/src/components/inserter-list-item/index.jsx +1 -1
  457. package/src/components/inserter-list-item/style.scss +2 -2
  458. package/src/components/inspector-controls/list-view-content-popover.jsx +1 -1
  459. package/src/components/link-control/search-results.jsx +1 -1
  460. package/src/components/link-control/style.scss +1 -1
  461. package/src/components/link-control/test/index.jsdom.test.jsx +38 -110
  462. package/src/components/link-control/test/keyboard-selection.browser.test.js +110 -0
  463. package/src/components/link-control/use-search-handler.js +8 -3
  464. package/src/components/list-view/branch.jsx +1 -1
  465. package/src/components/list-view/drop-indicator.jsx +3 -3
  466. package/src/components/list-view/index.jsx +1 -1
  467. package/src/components/list-view/style.scss +1 -9
  468. package/src/components/list-view/use-list-view-drop-zone.js +1 -1
  469. package/src/components/list-view/utils.js +1 -1
  470. package/src/components/media-replace-flow/index.jsx +4 -1
  471. package/src/components/navigable-toolbar/test/index.browser.test.js +6 -7
  472. package/src/components/plain-text/README.md +3 -2
  473. package/src/components/plain-text/content.scss +0 -1
  474. package/src/components/plain-text/index.jsx +2 -3
  475. package/src/components/plain-text/style.scss +4 -0
  476. package/src/components/preset-input-control/index.jsx +2 -2
  477. package/src/components/preset-input-control/test/index.jsdom.test.jsx +0 -56
  478. package/src/components/preset-input-control/test/interaction.browser.test.js +63 -0
  479. package/src/components/provider/index.jsx +5 -3
  480. package/src/components/provider/use-block-sync.js +5 -5
  481. package/src/components/publish-date-time-picker/index.jsx +1 -1
  482. package/src/components/resizable-box-popover/index.jsx +1 -1
  483. package/src/components/resolution-tool/index.jsx +2 -2
  484. package/src/components/responsive-block-control/style.scss +1 -2
  485. package/src/components/responsive-block-control/test/index.jsdom.test.jsx +2 -2
  486. package/src/components/rich-text/event-listeners/enter.js +16 -23
  487. package/src/components/rich-text/format-edit.jsx +1 -1
  488. package/src/components/rich-text/index.jsx +39 -2
  489. package/src/components/rich-text/multiline.jsx +11 -3
  490. package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  491. package/src/components/spacing-sizes-control/test/index.jsdom.test.jsx +0 -21
  492. package/src/components/spacing-sizes-control/test/select.browser.test.js +58 -0
  493. package/src/components/typewriter/index.jsx +1 -1
  494. package/src/components/url-input/test/fixtures/validated-input-control-deprecation.js +1 -1
  495. package/src/components/use-block-commands/index.js +1 -1
  496. package/src/components/use-block-drop-zone/test/index.js +2 -2
  497. package/src/components/writing-flow/index.jsx +8 -0
  498. package/src/components/writing-flow/use-clipboard-handler.js +1 -1
  499. package/src/components/writing-flow/use-selection-observer.js +15 -6
  500. package/src/content.scss +1 -0
  501. package/src/hooks/align.jsx +22 -6
  502. package/src/hooks/background.jsx +1 -1
  503. package/src/hooks/block-bindings.jsx +1 -1
  504. package/src/hooks/block-hooks.scss +0 -6
  505. package/src/hooks/border.jsx +2 -2
  506. package/src/hooks/contrast-checker.js +1 -1
  507. package/src/hooks/dimensions.jsx +2 -2
  508. package/src/hooks/duotone.jsx +3 -3
  509. package/src/hooks/elements.jsx +3 -3
  510. package/src/hooks/fit-text.jsx +1 -1
  511. package/src/hooks/gap.js +2 -4
  512. package/src/hooks/index.js +3 -1
  513. package/src/hooks/layout-child.jsx +3 -4
  514. package/src/hooks/layout.jsx +17 -18
  515. package/src/hooks/position.jsx +5 -36
  516. package/src/hooks/states.jsx +6 -2
  517. package/src/hooks/test/layout.jsdom.test.js +44 -1
  518. package/src/hooks/text-shadow.ts +105 -0
  519. package/src/hooks/typography.jsx +58 -30
  520. package/src/hooks/utils.jsx +23 -1
  521. package/src/layouts/grid.jsx +2 -2
  522. package/src/layouts/test/flex.jsdom.test.jsx +4 -3
  523. package/src/layouts/test/utils.js +48 -1
  524. package/src/layouts/utils.js +19 -0
  525. package/src/private-apis.js +4 -0
  526. package/src/store/actions.js +50 -10
  527. package/src/store/private-selectors.js +5 -5
  528. package/src/store/reducer.js +6 -6
  529. package/src/store/selectors.js +3 -3
  530. package/src/store/test/actions.jsdom.test.js +60 -0
  531. package/src/style.scss +1 -0
  532. package/src/utils/get-font-styles-and-weights.ts +1 -1
  533. package/src/utils/transform-styles/index.ts +1 -1
  534. package/build/hooks/cross-origin-isolation.cjs +0 -56
  535. package/build/hooks/cross-origin-isolation.cjs.map +0 -7
  536. package/build-module/hooks/cross-origin-isolation.mjs +0 -54
  537. package/build-module/hooks/cross-origin-isolation.mjs.map +0 -7
  538. package/src/components/block-icon/test/__snapshots__/index.jsdom.test.jsx.snap +0 -27
  539. package/src/components/block-icon/test/index.jsdom.test.jsx +0 -67
  540. package/src/hooks/cross-origin-isolation.js +0 -73
  541. package/src/hooks/test/cross-origin-isolation.jsdom.test.js +0 -173
@@ -8,11 +8,14 @@ import { reset as resetIcon } from '@wordpress/icons';
8
8
  import { __ } from '@wordpress/i18n';
9
9
 
10
10
  /**
11
- * Whether the inspector surfaces inherited Global Styles values.
11
+ * Whether the inspector marks up which controls are showing an inherited
12
+ * Global Styles value.
12
13
  *
13
- * Behind the `gutenberg-global-styles-inheritance-ui` Gutenberg experiment,
14
- * so the treatment is off unless someone opts in on the Experiments screen.
15
- * With it off, the panels show locally-set values alone.
14
+ * This gates the indicators only: the dotted underline on an inherited label
15
+ * and the blue dot that resets a local override. The inherited values
16
+ * themselves reach the controls either way. Behind the
17
+ * `gutenberg-global-styles-inheritance-ui` Gutenberg experiment, so the
18
+ * indicators are off unless someone opts in on the Experiments screen.
16
19
  *
17
20
  * Evaluated per call rather than once at module scope, so tests can toggle
18
21
  * the experiment and so a later move to a store-backed setting only has to
@@ -20,9 +23,9 @@ import { __ } from '@wordpress/i18n';
20
23
  * down as a prop, and `undefined` would trigger a receiving component's own
21
24
  * default parameter.
22
25
  *
23
- * @return {boolean} Whether the inherited-value treatment is enabled.
26
+ * @return {boolean} Whether the indicator treatment is enabled.
24
27
  */
25
- export const isGlobalStylesInheritanceEnabled = () =>
28
+ export const isGlobalStylesInheritanceIndicatorUIEnabled = () =>
26
29
  !! window.__experimentalGlobalStylesInheritanceUI;
27
30
 
28
31
  /**
@@ -1,6 +1,7 @@
1
1
  import { describe, expect, test, vi } from 'vitest';
2
- import { render, screen } from '@testing-library/react';
3
- import { click } from '@ariakit/test';
2
+ import { userEvent } from 'vitest/browser';
3
+ import { screen } from '@testing-library/react';
4
+ import { render } from 'vitest-browser-react';
4
5
  import { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';
5
6
  import {
6
7
  getInheritanceProps,
@@ -8,11 +9,11 @@ import {
8
9
  InheritanceToolsPanelItem,
9
10
  } from '../';
10
11
 
11
- globalThis.wpVitest.mockMatchMedia();
12
-
13
12
  describe( 'InheritanceResetButton', () => {
14
- test( 'renders an always-visible reset button labelled for the inherited value', () => {
15
- render( <InheritanceResetButton onResetToInherited={ () => {} } /> );
13
+ test( 'renders an always-visible reset button labelled for the inherited value', async () => {
14
+ await render(
15
+ <InheritanceResetButton onResetToInherited={ () => {} } />
16
+ );
16
17
  expect(
17
18
  screen.getByRole( 'button', {
18
19
  name: 'Reset to inherited value',
@@ -22,17 +23,19 @@ describe( 'InheritanceResetButton', () => {
22
23
 
23
24
  test( 'invokes the reset handler when activated', async () => {
24
25
  const onResetToInherited = vi.fn();
25
- render(
26
+ await render(
26
27
  <InheritanceResetButton onResetToInherited={ onResetToInherited } />
27
28
  );
28
- await click(
29
+ await userEvent.click(
29
30
  screen.getByRole( 'button', { name: 'Reset to inherited value' } )
30
31
  );
31
32
  expect( onResetToInherited ).toHaveBeenCalledTimes( 1 );
32
33
  } );
33
34
 
34
- test( 'does not expose a menu or a push-to-Global-Styles action', () => {
35
- render( <InheritanceResetButton onResetToInherited={ () => {} } /> );
35
+ test( 'does not expose a menu or a push-to-Global-Styles action', async () => {
36
+ await render(
37
+ <InheritanceResetButton onResetToInherited={ () => {} } />
38
+ );
36
39
  expect( screen.queryByRole( 'menu' ) ).not.toBeInTheDocument();
37
40
  expect(
38
41
  screen.queryByRole( 'menuitem', { name: /Make default/ } )
@@ -135,8 +138,8 @@ describe( 'getInheritanceProps', () => {
135
138
  } );
136
139
 
137
140
  describe( 'InheritanceToolsPanelItem inherited state', () => {
138
- function renderInheritedItem( label, labelClassName ) {
139
- return render(
141
+ async function renderInheritedItem( label, labelClassName ) {
142
+ return await render(
140
143
  <ToolsPanel label="Panel" panelId="panel">
141
144
  <InheritanceToolsPanelItem
142
145
  { ...getInheritanceProps( true, false ) }
@@ -159,8 +162,8 @@ describe( 'InheritanceToolsPanelItem inherited state', () => {
159
162
  [ 'input-control', 'components-input-control__label' ],
160
163
  ] )(
161
164
  'nests the %s label inside the inherited-from-global-styles item',
162
- ( _name, labelClassName ) => {
163
- renderInheritedItem( 'Line height', labelClassName );
165
+ async ( _name, labelClassName ) => {
166
+ await renderInheritedItem( 'Line height', labelClassName );
164
167
  const label = screen.getByText( 'Line height' );
165
168
  expect( label ).toHaveClass( labelClassName );
166
169
  expect(
@@ -170,8 +173,11 @@ describe( 'InheritanceToolsPanelItem inherited state', () => {
170
173
  }
171
174
  );
172
175
 
173
- test( 'does not render a reset dot in the inherited state', () => {
174
- renderInheritedItem( 'Line height', 'components-base-control__label' );
176
+ test( 'does not render a reset dot in the inherited state', async () => {
177
+ await renderInheritedItem(
178
+ 'Line height',
179
+ 'components-base-control__label'
180
+ );
175
181
  expect(
176
182
  screen.queryByRole( 'button', {
177
183
  name: 'Reset to inherited value',
@@ -181,8 +187,8 @@ describe( 'InheritanceToolsPanelItem inherited state', () => {
181
187
  } );
182
188
 
183
189
  describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
184
- function renderItem( props ) {
185
- return render(
190
+ async function renderItem( props ) {
191
+ return await render(
186
192
  <ToolsPanel label="Panel" panelId="panel">
187
193
  <InheritanceToolsPanelItem
188
194
  label="Line height"
@@ -199,8 +205,8 @@ describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
199
205
  );
200
206
  }
201
207
 
202
- test( 'renders the reset dot as a sibling of the control, not inside the label', () => {
203
- renderItem( {
208
+ test( 'renders the reset dot as a sibling of the control, not inside the label', async () => {
209
+ await renderItem( {
204
210
  hasLocalOverride: true,
205
211
  onDeselect: () => {},
206
212
  } );
@@ -217,10 +223,10 @@ describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
217
223
  ).toBeNull();
218
224
  } );
219
225
 
220
- test( 'does not render the item reset dot when showLocalOverrideActionsInLabel is false', () => {
226
+ test( 'does not render the item reset dot when showLocalOverrideActionsInLabel is false', async () => {
221
227
  // Color/background render their own reset control next to a custom
222
228
  // toggle, so the item must not render a second one.
223
- renderItem( {
229
+ await renderItem( {
224
230
  hasLocalOverride: true,
225
231
  showLocalOverrideActionsInLabel: false,
226
232
  onDeselect: () => {},
@@ -234,15 +240,15 @@ describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
234
240
 
235
241
  test( 'the reset dot invokes the deselect handler', async () => {
236
242
  const onDeselect = vi.fn();
237
- renderItem( { hasLocalOverride: true, onDeselect } );
238
- await click(
243
+ await renderItem( { hasLocalOverride: true, onDeselect } );
244
+ await userEvent.click(
239
245
  screen.getByRole( 'button', { name: 'Reset to inherited value' } )
240
246
  );
241
247
  expect( onDeselect ).toHaveBeenCalled();
242
248
  } );
243
249
 
244
- test( 'does not offset the reset dot by default', () => {
245
- renderItem( { hasLocalOverride: true, onDeselect: () => {} } );
250
+ test( 'does not offset the reset dot by default', async () => {
251
+ await renderItem( { hasLocalOverride: true, onDeselect: () => {} } );
246
252
  const resetButton = screen.getByRole( 'button', {
247
253
  name: 'Reset to inherited value',
248
254
  } );
@@ -254,8 +260,8 @@ describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
254
260
  );
255
261
  } );
256
262
 
257
- test( 'offsets the reset dot when the control has an inline-end toggle', () => {
258
- renderItem( {
263
+ test( 'offsets the reset dot when the control has an inline-end toggle', async () => {
264
+ await renderItem( {
259
265
  hasLocalOverride: true,
260
266
  hasInlineEndToggle: true,
261
267
  onDeselect: () => {},
@@ -11,13 +11,9 @@ import { getVariationNameFromClass } from '../../hooks/block-style-variation';
11
11
  import { useBlockEditContext } from '../block-edit/context';
12
12
  import BlockContext from '../block-context';
13
13
  import { unlock } from '../../lock-unlock';
14
- import { isGlobalStylesInheritanceEnabled } from './inheritance';
15
14
 
16
15
  const { resolveStyle } = unlock( globalStylesEnginePrivateApis );
17
16
 
18
- // Undefined so the panels fall back to their `inheritedValue = value` default.
19
- const NO_RESOLVED_STYLE = { value: undefined, sources: undefined };
20
-
21
17
  /**
22
18
  * Reads the Global Styles payload and returns it as a `GlobalStylesConfig`
23
19
  * (`{ styles, _links }`), the shape `resolveStyle` expects. `_links` carries
@@ -225,7 +221,7 @@ function useVariationAndElements( blockName, className ) {
225
221
  *
226
222
  * Before the `globalStylesDataKey` payload settles (hydration) or when
227
223
  * `blockName` is missing, the hook returns empty value and source objects, so
228
- * each panel's `inheritedValue = value` default preserves pre-feature behavior.
224
+ * each panel reads no inherited value and renders its local value alone.
229
225
  *
230
226
  * @param {?string} blockName Selected block name (e.g. `core/heading`).
231
227
  * @param {?string} className Block `className` used to detect an applied variation.
@@ -240,10 +236,6 @@ export function useResolvedStyle( blockName, className, selectedState = null ) {
240
236
  const globalStyles = useRawGlobalStyles();
241
237
 
242
238
  return useMemo( () => {
243
- // Skip the cascade merge entirely when the experiment is off.
244
- if ( ! isGlobalStylesInheritanceEnabled() ) {
245
- return NO_RESOLVED_STYLE;
246
- }
247
239
  if ( ! blockName ) {
248
240
  return { value: {}, sources: {} };
249
241
  }
@@ -57,7 +57,6 @@ export default function StateControlBadges( {
57
57
  <WCBadge
58
58
  key={ state.key }
59
59
  className="block-editor-global-styles-state-control__badge"
60
- intent="info"
61
60
  >
62
61
  { state.label }
63
62
  { !! state.tooltipText && (
@@ -16,6 +16,7 @@ import { Stack } from '@wordpress/ui';
16
16
  * @param {Function} props.onChangePseudoState Callback when pseudo state selection changes.
17
17
  * @param {boolean} props.showText Whether to show text label on the toggle. Default true.
18
18
  * @param {Object} props.popoverProps Popover props for the dropdown menu.
19
+ * @param {Element} props.children Optional menu content rendered after the state groups.
19
20
  * @return {Element|null} State control component.
20
21
  */
21
22
  export default function StateControl( {
@@ -27,6 +28,7 @@ export default function StateControl( {
27
28
  onChangePseudoState,
28
29
  showText = true,
29
30
  popoverProps = {},
31
+ children,
30
32
  } ) {
31
33
  if ( ! viewportStates.length && ! pseudoStates.length ) {
32
34
  return null;
@@ -102,7 +104,7 @@ export default function StateControl( {
102
104
  /* translators: %s: Current state (e.g. "Hover", "Focus") */
103
105
  __( 'State: %s' ),
104
106
  currentStateLabel
105
- )
107
+ )
106
108
  }
107
109
  popoverProps={ {
108
110
  placement: 'right-start',
@@ -120,7 +122,10 @@ export default function StateControl( {
120
122
  key={ `viewport-${ option.value }` }
121
123
  onClick={ () => {
122
124
  onChangeViewport?.( option.value );
123
- if ( ! hasPseudoStateOptions ) {
125
+ if (
126
+ ! hasPseudoStateOptions &&
127
+ ! children
128
+ ) {
124
129
  onClose();
125
130
  }
126
131
  } }
@@ -144,7 +149,10 @@ export default function StateControl( {
144
149
  onChangePseudoState?.(
145
150
  option.value
146
151
  );
147
- if ( ! hasViewportOptions ) {
152
+ if (
153
+ ! hasViewportOptions &&
154
+ ! children
155
+ ) {
148
156
  onClose();
149
157
  }
150
158
  } }
@@ -159,6 +167,7 @@ export default function StateControl( {
159
167
  ) ) }
160
168
  </MenuGroup>
161
169
  ) }
170
+ { children }
162
171
  </>
163
172
  ) }
164
173
  </DropdownMenu>
@@ -1,5 +1,6 @@
1
1
  @use "@wordpress/base-styles/variables" as *;
2
2
  @use "@wordpress/base-styles/colors" as *;
3
+ @use "@wordpress/base-styles/mixins";
3
4
 
4
5
  .block-editor-global-styles__toggle-icon {
5
6
  fill: currentColor;
@@ -146,3 +147,70 @@
146
147
  opacity: 1;
147
148
  }
148
149
  }
150
+
151
+ .block-editor-global-styles__text-shadow {
152
+ width: 260px;
153
+ padding: $grid-unit-10;
154
+ }
155
+
156
+ .block-editor-global-styles__text-shadow-preview {
157
+ display: flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ height: 80px;
161
+ border: $gray-300 1px solid;
162
+ border-radius: $radius-small;
163
+ font-size: 24px;
164
+ margin-bottom: $grid-unit-20;
165
+ @include mixins.checkerboard-background( 8px );
166
+ }
167
+
168
+ .block-editor-global-styles__text-shadow-list-item {
169
+ justify-content: space-between;
170
+ gap: $grid-unit-10;
171
+ width: 100%;
172
+ // The checkmark is always rendered so that its height is reserved and the
173
+ // list doesn't shift when the selection changes.
174
+ &:not(.is-active) svg {
175
+ opacity: 0;
176
+ }
177
+ }
178
+
179
+ .block-editor-global-styles__text-shadow-dropdown {
180
+ display: block;
181
+ padding: 0;
182
+ position: relative;
183
+ border: 1px solid $gray-300;
184
+ border-radius: $radius-small;
185
+ }
186
+
187
+ .block-editor-global-styles__text-shadow-dropdown-toggle {
188
+ width: 100%;
189
+ padding: $grid-unit-10;
190
+
191
+ &.is-open {
192
+ background-color: $gray-100;
193
+ }
194
+ }
195
+
196
+ .block-editor-global-styles__text-shadow-remove-button {
197
+ position: absolute;
198
+ right: $grid-unit;
199
+ top: $grid-unit;
200
+ opacity: 0;
201
+
202
+ @media not (prefers-reduced-motion) {
203
+ transition: opacity 0.1s ease-in-out;
204
+ }
205
+
206
+ .block-editor-global-styles__text-shadow-dropdown:hover &,
207
+ &:focus,
208
+ &:hover {
209
+ opacity: 1;
210
+ }
211
+
212
+ @media (hover: none) {
213
+ // Show reset button on devices that do not support hover.
214
+ opacity: 1;
215
+ }
216
+ }
@@ -1,6 +1,7 @@
1
1
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
2
- import { render, renderHook, screen } from '@testing-library/react';
3
- import { click, render as renderAriakit } from '@ariakit/test/react';
2
+ import { userEvent } from 'vitest/browser';
3
+ import { screen } from '@testing-library/react';
4
+ import { render, renderHook } from 'vitest-browser-react';
4
5
  import ColorPanel, {
5
6
  useHasColorPanel,
6
7
  useHasTextPanel,
@@ -11,10 +12,6 @@ import ColorPanel, {
11
12
  useHasCaptionPanel,
12
13
  } from '../color-panel';
13
14
 
14
- globalThis.wpVitest.mockMatchMedia();
15
-
16
- globalThis.wpVitest.mockResizeObserver();
17
-
18
15
  // The inheritance treatment sits behind the
19
16
  // `gutenberg-global-styles-inheritance-ui` experiment. Turn it on so these
20
17
  // tests exercise the inheriting path.
@@ -39,22 +36,22 @@ describe( 'useHasColorPanel', () => {
39
36
  // After moving top-level text color to TypographyPanel and top-level
40
37
  // background color to BackgroundPanel, the Color panel only aggregates
41
38
  // link and element controls (heading, button, caption).
42
- it( 'should be false when only text color is enabled', () => {
43
- const { result } = renderHook( () =>
39
+ it( 'should be false when only text color is enabled', async () => {
40
+ const { result } = await renderHook( () =>
44
41
  useHasColorPanel( settingsWithColors( { text: true } ) )
45
42
  );
46
43
  expect( result.current ).toBeFalsy();
47
44
  } );
48
45
 
49
- it( 'should be false when only background color is enabled', () => {
50
- const { result } = renderHook( () =>
46
+ it( 'should be false when only background color is enabled', async () => {
47
+ const { result } = await renderHook( () =>
51
48
  useHasColorPanel( settingsWithColors( { background: true } ) )
52
49
  );
53
50
  expect( result.current ).toBeFalsy();
54
51
  } );
55
52
 
56
- it( 'should be false when both text and background are enabled but no element controls are', () => {
57
- const { result } = renderHook( () =>
53
+ it( 'should be false when both text and background are enabled but no element controls are', async () => {
54
+ const { result } = await renderHook( () =>
58
55
  useHasColorPanel(
59
56
  settingsWithColors( { text: true, background: true } )
60
57
  )
@@ -62,65 +59,65 @@ describe( 'useHasColorPanel', () => {
62
59
  expect( result.current ).toBeFalsy();
63
60
  } );
64
61
 
65
- it( 'should be true when link color is enabled', () => {
66
- const { result } = renderHook( () =>
62
+ it( 'should be true when link color is enabled', async () => {
63
+ const { result } = await renderHook( () =>
67
64
  useHasColorPanel( settingsWithColors( { link: true } ) )
68
65
  );
69
66
  expect( result.current ).toBeTruthy();
70
67
  } );
71
68
 
72
- it( 'should be true when heading element is enabled', () => {
73
- const { result } = renderHook( () =>
69
+ it( 'should be true when heading element is enabled', async () => {
70
+ const { result } = await renderHook( () =>
74
71
  useHasColorPanel( settingsWithColors( { heading: true } ) )
75
72
  );
76
73
  expect( result.current ).toBeTruthy();
77
74
  } );
78
75
 
79
- it( 'should be true when button element is enabled', () => {
80
- const { result } = renderHook( () =>
76
+ it( 'should be true when button element is enabled', async () => {
77
+ const { result } = await renderHook( () =>
81
78
  useHasColorPanel( settingsWithColors( { button: true } ) )
82
79
  );
83
80
  expect( result.current ).toBeTruthy();
84
81
  } );
85
82
 
86
- it( 'should be true when caption element is enabled', () => {
87
- const { result } = renderHook( () =>
83
+ it( 'should be true when caption element is enabled', async () => {
84
+ const { result } = await renderHook( () =>
88
85
  useHasColorPanel( settingsWithColors( { caption: true } ) )
89
86
  );
90
87
  expect( result.current ).toBeTruthy();
91
88
  } );
92
89
 
93
- it( 'should be false when no color controls are enabled', () => {
94
- const { result } = renderHook( () => useHasColorPanel( {} ) );
90
+ it( 'should be false when no color controls are enabled', async () => {
91
+ const { result } = await renderHook( () => useHasColorPanel( {} ) );
95
92
  expect( result.current ).toBeFalsy();
96
93
  } );
97
94
  } );
98
95
 
99
96
  describe( 'useHasTextPanel', () => {
100
97
  // Still exported for TypographyPanel to consume as its text color gate.
101
- it( 'should be true when text color is enabled and colors exist', () => {
102
- const { result } = renderHook( () =>
98
+ it( 'should be true when text color is enabled and colors exist', async () => {
99
+ const { result } = await renderHook( () =>
103
100
  useHasTextPanel( settingsWithColors( { text: true } ) )
104
101
  );
105
102
  expect( result.current ).toBeTruthy();
106
103
  } );
107
104
 
108
- it( 'should be true when text color is enabled with custom colors support', () => {
109
- const { result } = renderHook( () =>
105
+ it( 'should be true when text color is enabled with custom colors support', async () => {
106
+ const { result } = await renderHook( () =>
110
107
  useHasTextPanel( { color: { text: true, custom: true } } )
111
108
  );
112
109
  expect( result.current ).toBeTruthy();
113
110
  } );
114
111
 
115
- it( 'should be false when text color is disabled', () => {
116
- const { result } = renderHook( () =>
112
+ it( 'should be false when text color is disabled', async () => {
113
+ const { result } = await renderHook( () =>
117
114
  useHasTextPanel( settingsWithColors( { text: false } ) )
118
115
  );
119
116
  expect( result.current ).toBeFalsy();
120
117
  } );
121
118
 
122
- it( 'should be false when no colors or custom support exist', () => {
123
- const { result } = renderHook( () =>
119
+ it( 'should be false when no colors or custom support exist', async () => {
120
+ const { result } = await renderHook( () =>
124
121
  useHasTextPanel( { color: { text: true } } )
125
122
  );
126
123
  expect( result.current ).toBeFalsy();
@@ -129,8 +126,8 @@ describe( 'useHasTextPanel', () => {
129
126
 
130
127
  describe( 'useHasBackgroundColorPanel', () => {
131
128
  // Still exported for BackgroundPanel to consume as its background color gate.
132
- it( 'should be true when background is enabled and colors exist', () => {
133
- const { result } = renderHook( () =>
129
+ it( 'should be true when background is enabled and colors exist', async () => {
130
+ const { result } = await renderHook( () =>
134
131
  useHasBackgroundColorPanel(
135
132
  settingsWithColors( { background: true } )
136
133
  )
@@ -138,8 +135,8 @@ describe( 'useHasBackgroundColorPanel', () => {
138
135
  expect( result.current ).toBeTruthy();
139
136
  } );
140
137
 
141
- it( 'should be true when only gradients are available', () => {
142
- const { result } = renderHook( () =>
138
+ it( 'should be true when only gradients are available', async () => {
139
+ const { result } = await renderHook( () =>
143
140
  useHasBackgroundColorPanel( {
144
141
  color: {
145
142
  background: true,
@@ -158,8 +155,8 @@ describe( 'useHasBackgroundColorPanel', () => {
158
155
  expect( result.current ).toBeTruthy();
159
156
  } );
160
157
 
161
- it( 'should be false when background color is disabled', () => {
162
- const { result } = renderHook( () =>
158
+ it( 'should be false when background color is disabled', async () => {
159
+ const { result } = await renderHook( () =>
163
160
  useHasBackgroundColorPanel(
164
161
  settingsWithColors( { background: false } )
165
162
  )
@@ -169,29 +166,29 @@ describe( 'useHasBackgroundColorPanel', () => {
169
166
  } );
170
167
 
171
168
  describe( 'element color hooks', () => {
172
- it( 'useHasLinkPanel is truthy when link is enabled with colors', () => {
173
- const { result } = renderHook( () =>
169
+ it( 'useHasLinkPanel is truthy when link is enabled with colors', async () => {
170
+ const { result } = await renderHook( () =>
174
171
  useHasLinkPanel( settingsWithColors( { link: true } ) )
175
172
  );
176
173
  expect( result.current ).toBeTruthy();
177
174
  } );
178
175
 
179
- it( 'useHasHeadingPanel is truthy when heading is enabled with colors', () => {
180
- const { result } = renderHook( () =>
176
+ it( 'useHasHeadingPanel is truthy when heading is enabled with colors', async () => {
177
+ const { result } = await renderHook( () =>
181
178
  useHasHeadingPanel( settingsWithColors( { heading: true } ) )
182
179
  );
183
180
  expect( result.current ).toBeTruthy();
184
181
  } );
185
182
 
186
- it( 'useHasButtonPanel is truthy when button is enabled with colors', () => {
187
- const { result } = renderHook( () =>
183
+ it( 'useHasButtonPanel is truthy when button is enabled with colors', async () => {
184
+ const { result } = await renderHook( () =>
188
185
  useHasButtonPanel( settingsWithColors( { button: true } ) )
189
186
  );
190
187
  expect( result.current ).toBeTruthy();
191
188
  } );
192
189
 
193
- it( 'useHasCaptionPanel is truthy when caption is enabled with colors', () => {
194
- const { result } = renderHook( () =>
190
+ it( 'useHasCaptionPanel is truthy when caption is enabled with colors', async () => {
191
+ const { result } = await renderHook( () =>
195
192
  useHasCaptionPanel( settingsWithColors( { caption: true } ) )
196
193
  );
197
194
  expect( result.current ).toBeTruthy();
@@ -238,7 +235,7 @@ describe( 'ColorPanel — duplicate-hex preset slug identity', () => {
238
235
  };
239
236
 
240
237
  it( 'marks only the local link preset as selected when another preset shares its hex', async () => {
241
- await renderAriakit(
238
+ await render(
242
239
  <ColorPanel
243
240
  value={ {
244
241
  elements: {
@@ -253,7 +250,9 @@ describe( 'ColorPanel — duplicate-hex preset slug identity', () => {
253
250
  />
254
251
  );
255
252
 
256
- await click( screen.getByRole( 'button', { name: /^Link/ } ) );
253
+ await userEvent.click(
254
+ screen.getByRole( 'button', { name: /^Link/ } )
255
+ );
257
256
  const swatches = await screen.findAllByRole( 'option' );
258
257
 
259
258
  // swatch[0] = 'Dark background', swatch[1] = 'Dark text'. Selection
@@ -264,8 +263,8 @@ describe( 'ColorPanel — duplicate-hex preset slug identity', () => {
264
263
  } );
265
264
 
266
265
  describe( 'ColorPanel — additional elements', () => {
267
- it( 'renders additional element color controls', () => {
268
- render(
266
+ it( 'renders additional element color controls', async () => {
267
+ await render(
269
268
  <ColorPanel
270
269
  value={ {} }
271
270
  settings={ settingsWithColors( {
@@ -289,7 +288,7 @@ describe( 'ColorPanel — additional elements', () => {
289
288
 
290
289
  describe( 'ColorPanel — inherited Global Styles label treatment', () => {
291
290
  describe( 'Link color', () => {
292
- it( 'exposes an accessible reset when local link.text overrides the inherited value', () => {
291
+ it( 'exposes an accessible reset when local link.text overrides the inherited value', async () => {
293
292
  const inheritedValue = {
294
293
  elements: { link: { color: { text: '#0000ff' } } },
295
294
  };
@@ -297,7 +296,7 @@ describe( 'ColorPanel — inherited Global Styles label treatment', () => {
297
296
  elements: { link: { color: { text: '#aaaaaa' } } },
298
297
  };
299
298
 
300
- render(
299
+ await render(
301
300
  <ColorPanel
302
301
  value={ value }
303
302
  inheritedValue={ inheritedValue }
@@ -338,8 +337,8 @@ describe( 'ColorPanel — inherited Global Styles label treatment', () => {
338
337
  },
339
338
  };
340
339
 
341
- it( 'paints an inherited link preset via its CSS custom property', () => {
342
- const { container } = render(
340
+ it( 'paints an inherited link preset via its CSS custom property', async () => {
341
+ const { container } = await render(
343
342
  <ColorPanel
344
343
  value={ {} }
345
344
  inheritedValue={ {
@@ -363,8 +362,8 @@ describe( 'ColorPanel — inherited Global Styles label treatment', () => {
363
362
  ).toBe( true );
364
363
  } );
365
364
 
366
- it( 'paints an inherited element (heading) preset via its CSS custom property', () => {
367
- const { container } = render(
365
+ it( 'paints an inherited element (heading) preset via its CSS custom property', async () => {
366
+ const { container } = await render(
368
367
  <ColorPanel
369
368
  value={ {} }
370
369
  inheritedValue={ {