@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-editor",
3
- "version": "17.1.0",
3
+ "version": "17.2.1-next.v.202609171837.0",
4
4
  "description": "Generic block editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -60,65 +60,64 @@
60
60
  ],
61
61
  "dependencies": {
62
62
  "@react-spring/web": "^9.4.5",
63
- "@wordpress/a11y": "^4.55.0",
64
- "@wordpress/base-styles": "^13.1.0",
65
- "@wordpress/blob": "^4.55.0",
66
- "@wordpress/block-serialization-default-parser": "^5.55.0",
67
- "@wordpress/blocks": "^16.0.0",
68
- "@wordpress/commands": "^1.55.0",
69
- "@wordpress/components": "^40.1.0",
70
- "@wordpress/compose": "^8.8.0",
71
- "@wordpress/data": "^10.55.0",
72
- "@wordpress/dataviews": "^19.0.0",
73
- "@wordpress/date": "^5.55.0",
74
- "@wordpress/deprecated": "^4.55.0",
75
- "@wordpress/dom": "^4.55.0",
76
- "@wordpress/element": "^8.7.0",
77
- "@wordpress/global-styles-engine": "^1.22.0",
78
- "@wordpress/hooks": "^4.55.0",
79
- "@wordpress/html-entities": "^4.55.0",
80
- "@wordpress/i18n": "^6.28.0",
81
- "@wordpress/icons": "^16.0.0",
82
- "@wordpress/image-cropper": "^1.19.0",
83
- "@wordpress/interactivity": "^6.55.0",
84
- "@wordpress/is-shallow-equal": "^5.55.0",
85
- "@wordpress/kebab-case": "^1.2.0",
86
- "@wordpress/keyboard-shortcuts": "^5.55.0",
87
- "@wordpress/keycodes": "^4.55.0",
88
- "@wordpress/notices": "^5.55.0",
89
- "@wordpress/preferences": "^4.55.0",
90
- "@wordpress/priority-queue": "^3.55.0",
91
- "@wordpress/private-apis": "^1.55.0",
92
- "@wordpress/rich-text": "^7.55.0",
93
- "@wordpress/style-engine": "^2.55.0",
94
- "@wordpress/token-list": "^3.55.0",
95
- "@wordpress/ui": "^0.22.0",
96
- "@wordpress/upload-media": "^0.40.0",
97
- "@wordpress/url": "^4.55.0",
98
- "@wordpress/warning": "^3.55.0",
63
+ "@wordpress/a11y": "^4.55.1-next.v.202609171837.0",
64
+ "@wordpress/base-styles": "^13.2.1-next.v.202609171837.0",
65
+ "@wordpress/blob": "^4.55.1-next.v.202609171837.0",
66
+ "@wordpress/block-serialization-default-parser": "^5.55.1-next.v.202609171837.0",
67
+ "@wordpress/blocks": "^16.1.1-next.v.202609171837.0",
68
+ "@wordpress/commands": "^1.55.2-next.v.202609171837.0",
69
+ "@wordpress/components": "^41.0.1-next.v.202609171837.0",
70
+ "@wordpress/compose": "^8.8.2-next.v.202609171837.0",
71
+ "@wordpress/data": "^10.56.1-next.v.202609171837.0",
72
+ "@wordpress/dataviews": "^19.0.2-next.v.202609171837.0",
73
+ "@wordpress/date": "^5.55.1-next.v.202609171837.0",
74
+ "@wordpress/deprecated": "^4.55.1-next.v.202609171837.0",
75
+ "@wordpress/dom": "^4.55.2-next.v.202609171837.0",
76
+ "@wordpress/element": "^8.7.1-next.v.202609171837.0",
77
+ "@wordpress/global-styles-engine": "^1.23.1-next.v.202609171837.0",
78
+ "@wordpress/hooks": "^4.55.1-next.v.202609171837.0",
79
+ "@wordpress/html-entities": "^4.55.1-next.v.202609171837.0",
80
+ "@wordpress/i18n": "^6.28.1-next.v.202609171837.0",
81
+ "@wordpress/icons": "^17.0.1-next.v.202609171837.0",
82
+ "@wordpress/image-cropper": "^1.19.1-next.v.202609171837.0",
83
+ "@wordpress/interactivity": "^6.55.1-next.v.202609171837.0",
84
+ "@wordpress/is-shallow-equal": "^5.55.1-next.v.202609171837.0",
85
+ "@wordpress/kebab-case": "^1.2.1-next.v.202609171837.0",
86
+ "@wordpress/keyboard-shortcuts": "^5.56.1-next.v.202609171837.0",
87
+ "@wordpress/keycodes": "^4.56.1-next.v.202609171837.0",
88
+ "@wordpress/notices": "^5.55.1-next.v.202609171837.0",
89
+ "@wordpress/preferences": "^4.55.1-next.v.202609171837.0",
90
+ "@wordpress/priority-queue": "^3.55.1-next.v.202609171837.0",
91
+ "@wordpress/private-apis": "^1.55.1-next.v.202609171837.0",
92
+ "@wordpress/rich-text": "^7.55.2-next.v.202609171837.0",
93
+ "@wordpress/style-engine": "^2.56.1-next.v.202609171837.0",
94
+ "@wordpress/token-list": "^3.55.1-next.v.202609171837.0",
95
+ "@wordpress/ui": "^0.23.1-next.v.202609171837.0",
96
+ "@wordpress/upload-media": "^0.40.2-next.v.202609171837.0",
97
+ "@wordpress/url": "^4.55.1-next.v.202609171837.0",
98
+ "@wordpress/warning": "^3.55.1-next.v.202609171837.0",
99
99
  "change-case": "^4.1.2",
100
100
  "clsx": "^2.1.1",
101
- "colord": "^2.9.3",
101
+ "colord": "^2.9.4",
102
102
  "diff": "^8.0.3",
103
103
  "fast-deep-equal": "^3.1.3",
104
104
  "parsel-js": "^1.1.2",
105
105
  "postcss": "^8.4.38",
106
106
  "postcss-prefix-selector": "^1.16.0",
107
107
  "postcss-urlrebase": "^1.4.0",
108
- "react-autosize-textarea": "^7.1.0",
109
108
  "react-easy-crop": "^5.4.2",
110
109
  "remove-accents": "^0.5.0"
111
110
  },
112
111
  "devDependencies": {
113
- "@ariakit/test": "^0.7.4",
114
112
  "@testing-library/dom": "^10.4.1",
115
113
  "@testing-library/react": "^16.3.3",
116
114
  "@testing-library/user-event": "^14.6.1",
117
115
  "@types/postcss-prefix-selector": "^1.16.3",
118
- "@wordpress/block-library": "^11.0.0",
116
+ "@wordpress/block-library": "^11.0.2-next.v.202609171837.0",
119
117
  "deep-freeze": "^0.0.1",
120
118
  "storybook": "^10.5.3",
121
- "vitest": "^5.0.0"
119
+ "vitest": "^5.0.0",
120
+ "vitest-browser-react": "^2.3.0"
122
121
  },
123
122
  "peerDependencies": {
124
123
  "@types/react": "^18 || ^19",
@@ -133,5 +132,5 @@
133
132
  "publishConfig": {
134
133
  "access": "public"
135
134
  },
136
- "gitHead": "485f42ae8a1c58ceea18371a507fd4acfa86fbd8"
135
+ "gitHead": "7fc9f6676debc888d2f071d17cb71837040d4b48"
137
136
  }
@@ -71,11 +71,11 @@ function createBlockCompleter() {
71
71
  categories,
72
72
  collections,
73
73
  filterValue
74
- )
74
+ )
75
75
  : orderInserterBlockItems(
76
76
  orderBy( items, 'frecency', 'desc' ),
77
77
  prioritizedBlocks
78
- );
78
+ );
79
79
 
80
80
  return initialFilteredItems
81
81
  .filter( ( item ) => item.id !== selectedBlockId )
@@ -133,7 +133,7 @@ function createBlockCompleter() {
133
133
  syncStatus === 'unsynced'
134
134
  ? ( blocks ?? [] ).map( ( block ) =>
135
135
  cloneBlock( block )
136
- )
136
+ )
137
137
  : createBlock(
138
138
  name,
139
139
  initialAttributes,
@@ -141,7 +141,7 @@ function createBlockCompleter() {
141
141
  innerBlocks
142
142
  ),
143
143
  innerContent
144
- ),
144
+ ),
145
145
  };
146
146
  },
147
147
  };
@@ -54,7 +54,7 @@ function AlignmentUI( {
54
54
  : {
55
55
  toggleProps: description ? { description } : {},
56
56
  popoverProps: POPOVER_PROPS,
57
- };
57
+ };
58
58
 
59
59
  return (
60
60
  <UIComponent
@@ -30,7 +30,7 @@ import { getResolvedValue } from '@wordpress/global-styles-engine';
30
30
  import { hasBackgroundImageValue } from '../global-styles/background-panel';
31
31
  import {
32
32
  InheritanceResetButton,
33
- isGlobalStylesInheritanceEnabled,
33
+ isGlobalStylesInheritanceIndicatorUIEnabled,
34
34
  } from '../global-styles/inheritance';
35
35
  import { setImmutably } from '../../utils/object';
36
36
  import MediaReplaceFlow from '../media-replace-flow';
@@ -160,7 +160,7 @@ function InspectorImagePreviewItem( {
160
160
  /* translators: %s: file name */
161
161
  __( 'Background image: %s' ),
162
162
  filename || label
163
- )
163
+ )
164
164
  : __( 'No background image selected' ) }
165
165
  </VisuallyHidden>
166
166
  </FlexBlock>
@@ -687,7 +687,7 @@ export default function BackgroundImagePanel( {
687
687
  inheritedValue = value,
688
688
  settings,
689
689
  defaultValues = {},
690
- showInheritanceLabelIndicators = isGlobalStylesInheritanceEnabled(),
690
+ showInheritanceLabelIndicators = isGlobalStylesInheritanceIndicatorUIEnabled(),
691
691
  } ) {
692
692
  /*
693
693
  * Resolve inherited `ref` pointers for background controls.
@@ -2,6 +2,8 @@ import { afterEach, describe, expect, test, vi } from 'vitest';
2
2
  import { render, screen } from '@testing-library/react';
3
3
  import userEvent from '@testing-library/user-event';
4
4
  import BlockAlignmentUI from '../ui';
5
+ import { LayoutProvider } from '../../block-list/layout';
6
+ import { BlockEditorProvider } from '../../provider';
5
7
 
6
8
  describe( 'BlockAlignmentUI', () => {
7
9
  const alignment = 'left';
@@ -115,3 +117,268 @@ describe( 'BlockAlignmentUI', () => {
115
117
  expect( onChange ).toHaveBeenCalledWith( 'center' );
116
118
  } );
117
119
  } );
120
+
121
+ /**
122
+ * A theme offering both wide and full. Without one, those alignments were never
123
+ * on the table and are not reported as withheld.
124
+ */
125
+ const THEME_LAYOUT = { contentSize: '600px', wideSize: '1200px' };
126
+
127
+ function renderWithTheme( ui, layout = THEME_LAYOUT, settings = {} ) {
128
+ return render(
129
+ <BlockEditorProvider
130
+ value={ [] }
131
+ settings={ { __experimentalFeatures: { layout }, ...settings } }
132
+ >
133
+ { ui }
134
+ </BlockEditorProvider>
135
+ );
136
+ }
137
+
138
+ describe( 'BlockAlignmentUI unavailable alignments', () => {
139
+ // The block supports every alignment; the default flow layout offers only
140
+ // none/left/center/right, so wide and full are taken away by the parent.
141
+ const controls = [ 'left', 'center', 'right', 'wide', 'full' ];
142
+ const onChange = vi.fn();
143
+
144
+ afterEach( () => {
145
+ onChange.mockClear();
146
+ } );
147
+
148
+ async function openMenu() {
149
+ const user = userEvent.setup();
150
+ renderWithTheme(
151
+ <BlockAlignmentUI onChange={ onChange } controls={ controls } />
152
+ );
153
+ await user.click(
154
+ screen.getByRole( 'button', { name: 'Align block' } )
155
+ );
156
+ return user;
157
+ }
158
+
159
+ test( 'lists them rather than omitting them, in their usual position', async () => {
160
+ await openMenu();
161
+
162
+ expect(
163
+ screen
164
+ .getAllByRole( 'menuitemradio' )
165
+ .map( ( item ) => item.textContent )
166
+ ).toEqual( [
167
+ 'None',
168
+ 'Wide widthNot available',
169
+ 'Full widthNot available',
170
+ 'Align left',
171
+ 'Align center',
172
+ 'Align right',
173
+ ] );
174
+ } );
175
+
176
+ test( 'marks them as disabled while keeping them reachable', async () => {
177
+ await openMenu();
178
+
179
+ const wide = screen.getByRole( 'menuitemradio', {
180
+ name: /Wide width/,
181
+ } );
182
+
183
+ expect( wide ).toHaveAttribute( 'aria-disabled', 'true' );
184
+ // `disabled` would remove it from the accessibility tree entirely,
185
+ // taking the explanation with it.
186
+ expect( wide ).toBeEnabled();
187
+ } );
188
+
189
+ test( 'does not change the alignment when one is chosen', async () => {
190
+ const user = await openMenu();
191
+
192
+ await user.click(
193
+ screen.getByRole( 'menuitemradio', { name: /Full width/ } )
194
+ );
195
+
196
+ expect( onChange ).not.toHaveBeenCalled();
197
+ } );
198
+
199
+ test( 'leaves the menu alone when the layout offers every alignment', async () => {
200
+ const user = userEvent.setup();
201
+ renderWithTheme(
202
+ <LayoutProvider
203
+ value={ {
204
+ type: 'constrained',
205
+ contentSize: '600px',
206
+ wideSize: '1200px',
207
+ } }
208
+ >
209
+ <BlockAlignmentUI onChange={ onChange } controls={ controls } />
210
+ </LayoutProvider>
211
+ );
212
+ await user.click(
213
+ screen.getByRole( 'button', { name: 'Align block' } )
214
+ );
215
+
216
+ expect( screen.queryAllByText( 'Not available' ) ).toHaveLength( 0 );
217
+ expect(
218
+ screen
219
+ .getAllByRole( 'menuitemradio' )
220
+ .map( ( item ) => item.textContent )
221
+ ).toEqual( [
222
+ 'NoneMax 600px wide',
223
+ 'Wide widthMax 1200px wide',
224
+ 'Full width',
225
+ 'Align left',
226
+ 'Align center',
227
+ 'Align right',
228
+ ] );
229
+ } );
230
+ } );
231
+
232
+ describe( 'BlockAlignmentUI with no available alignments', () => {
233
+ // Group supports only wide and full, so a flow layout leaves it nothing.
234
+ const controls = [ 'wide', 'full' ];
235
+ const onChange = vi.fn();
236
+
237
+ afterEach( () => {
238
+ onChange.mockClear();
239
+ } );
240
+
241
+ test( 'still offers None alongside what the layout withholds', async () => {
242
+ const user = userEvent.setup();
243
+ renderWithTheme(
244
+ <BlockAlignmentUI onChange={ onChange } controls={ controls } />
245
+ );
246
+
247
+ await user.click(
248
+ screen.getByRole( 'button', { name: 'Align block' } )
249
+ );
250
+
251
+ expect(
252
+ screen
253
+ .getAllByRole( 'menuitemradio' )
254
+ .map( ( item ) => item.textContent )
255
+ ).toEqual( [
256
+ 'None',
257
+ 'Wide widthNot available',
258
+ 'Full widthNot available',
259
+ ] );
260
+ } );
261
+
262
+ test( 'renders nothing when the layout places children itself', () => {
263
+ const { container } = renderWithTheme(
264
+ <LayoutProvider value={ { type: 'flex' } }>
265
+ <BlockAlignmentUI onChange={ onChange } controls={ controls } />
266
+ </LayoutProvider>
267
+ );
268
+
269
+ expect( container ).toBeEmptyDOMElement();
270
+ } );
271
+ } );
272
+
273
+ describe( 'BlockAlignmentUI when the theme withholds alignments', () => {
274
+ // A theme offering neither is curating its own options globally, so those
275
+ // alignments stay hidden rather than being reported as unavailable.
276
+ const controls = [ 'left', 'center', 'right', 'wide', 'full' ];
277
+ const onChange = vi.fn();
278
+
279
+ afterEach( () => {
280
+ onChange.mockClear();
281
+ } );
282
+
283
+ async function openMenuForTheme( layout ) {
284
+ const user = userEvent.setup();
285
+ renderWithTheme(
286
+ <BlockAlignmentUI onChange={ onChange } controls={ controls } />,
287
+ layout
288
+ );
289
+ await user.click(
290
+ screen.getByRole( 'button', { name: 'Align block' } )
291
+ );
292
+ }
293
+
294
+ function menuItems() {
295
+ return screen
296
+ .getAllByRole( 'menuitemradio' )
297
+ .map( ( item ) => item.textContent );
298
+ }
299
+
300
+ test( 'hides both when the theme sets no layout at all', async () => {
301
+ // No provider at all, so the store holds no global layout.
302
+ const user = userEvent.setup();
303
+ render(
304
+ <BlockAlignmentUI onChange={ onChange } controls={ controls } />
305
+ );
306
+ await user.click(
307
+ screen.getByRole( 'button', { name: 'Align block' } )
308
+ );
309
+
310
+ expect( menuItems() ).toEqual( [
311
+ 'None',
312
+ 'Align left',
313
+ 'Align center',
314
+ 'Align right',
315
+ ] );
316
+ } );
317
+
318
+ test( 'hides Wide when the theme sets no wide size', async () => {
319
+ await openMenuForTheme( { contentSize: '600px' } );
320
+
321
+ expect( menuItems() ).toEqual( [
322
+ 'None',
323
+ 'Full widthNot available',
324
+ 'Align left',
325
+ 'Align center',
326
+ 'Align right',
327
+ ] );
328
+ } );
329
+ } );
330
+
331
+ describe( 'BlockAlignmentUI on a theme without layout support', () => {
332
+ // Classic themes opt into wide alignments with `add_theme_support`, which
333
+ // arrives as the `alignWide` setting. There is no layout to withhold
334
+ // anything, so the menu either offers wide and full or leaves them out.
335
+ const controls = [ 'left', 'center', 'right', 'wide', 'full' ];
336
+ const onChange = vi.fn();
337
+
338
+ afterEach( () => {
339
+ onChange.mockClear();
340
+ } );
341
+
342
+ async function openMenuWithAlignWide( alignWide ) {
343
+ const user = userEvent.setup();
344
+ renderWithTheme(
345
+ <BlockAlignmentUI onChange={ onChange } controls={ controls } />,
346
+ undefined,
347
+ { supportsLayout: false, alignWide }
348
+ );
349
+ await user.click(
350
+ screen.getByRole( 'button', { name: 'Align block' } )
351
+ );
352
+ }
353
+
354
+ function menuItems() {
355
+ return screen
356
+ .getAllByRole( 'menuitemradio' )
357
+ .map( ( item ) => item.textContent );
358
+ }
359
+
360
+ test( 'offers both when the theme supports wide alignments', async () => {
361
+ await openMenuWithAlignWide( true );
362
+
363
+ expect( screen.queryAllByText( 'Not available' ) ).toHaveLength( 0 );
364
+ expect( menuItems() ).toEqual( [
365
+ 'None',
366
+ 'Align left',
367
+ 'Align center',
368
+ 'Align right',
369
+ 'Wide width',
370
+ 'Full width',
371
+ ] );
372
+ } );
373
+
374
+ test( 'hides both when the theme does not support wide alignments', async () => {
375
+ await openMenuWithAlignWide( false );
376
+
377
+ expect( menuItems() ).toEqual( [
378
+ 'None',
379
+ 'Align left',
380
+ 'Align center',
381
+ 'Align right',
382
+ ] );
383
+ } );
384
+ } );
@@ -6,7 +6,7 @@ import {
6
6
  MenuGroup,
7
7
  MenuItem,
8
8
  } from '@wordpress/components';
9
- import useAvailableAlignments from './use-available-alignments';
9
+ import { useAlignmentMenu } from './use-available-alignments';
10
10
  import { BLOCK_ALIGNMENTS_CONTROLS, DEFAULT_CONTROL } from './constants';
11
11
 
12
12
  function BlockAlignmentUI( {
@@ -18,13 +18,39 @@ function BlockAlignmentUI( {
18
18
  label = __( 'Align block' ),
19
19
  description,
20
20
  } ) {
21
- const enabledControls = useAvailableAlignments( controls );
22
- const hasEnabledControls = !! enabledControls.length;
21
+ /*
22
+ * Wide and Full are the alignments users look for and fail to find. When a
23
+ * parent layout does not offer them they disappear from this menu with no
24
+ * explanation, which reads as the editor losing the setting. List them as
25
+ * unavailable instead, so the menu says why it cannot do what was asked.
26
+ */
27
+ const { enabled: enabledControls, unavailable: unavailableControls } =
28
+ useAlignmentMenu( controls );
23
29
 
24
- if ( ! hasEnabledControls ) {
30
+ if ( ! enabledControls.length && ! unavailableControls.length ) {
25
31
  return null;
26
32
  }
27
33
 
34
+ /*
35
+ * A block whose alignments are all unavailable still needs somewhere to
36
+ * anchor them, and `None` is always a valid choice for it.
37
+ */
38
+ const menuControls = enabledControls.length
39
+ ? [ ...enabledControls ]
40
+ : [ { name: 'none' } ];
41
+ const enabledNames = menuControls.map( ( { name } ) => name );
42
+
43
+ // Unavailable alignments sit where they would have sat had they been
44
+ // offered, which is directly after `none`.
45
+ menuControls.splice(
46
+ enabledNames.indexOf( 'none' ) + 1,
47
+ 0,
48
+ ...unavailableControls.map( ( name ) => ( {
49
+ name,
50
+ isUnavailable: true,
51
+ } ) )
52
+ );
53
+
28
54
  function onChangeAlignment( align ) {
29
55
  onChange( [ value, 'none' ].includes( align ) ? undefined : align );
30
56
  }
@@ -53,20 +79,27 @@ function BlockAlignmentUI( {
53
79
  onClick: () => onChangeAlignment( controlName ),
54
80
  };
55
81
  } ),
56
- }
82
+ }
57
83
  : {
58
84
  toggleProps: description ? { description } : {},
59
85
  children: ( { onClose } ) => {
60
86
  return (
61
87
  <>
62
88
  <MenuGroup className="block-editor-block-alignment-control__menu-group">
63
- { enabledControls.map(
64
- ( { name: controlName, info } ) => {
89
+ { menuControls.map(
90
+ ( {
91
+ name: controlName,
92
+ info,
93
+ isUnavailable,
94
+ } ) => {
65
95
  const { icon, title } =
66
96
  BLOCK_ALIGNMENTS_CONTROLS[
67
97
  controlName
68
98
  ];
69
99
  // If no value is provided, mark as selected the `none` option.
100
+ // An unavailable alignment can still be the saved value, and
101
+ // showing it as selected is how the menu says the setting
102
+ // exists but has no effect in this position.
70
103
  const isSelected =
71
104
  controlName === value ||
72
105
  ( ! value &&
@@ -83,6 +116,7 @@ function BlockAlignmentUI( {
83
116
  }
84
117
  ) }
85
118
  isSelected={ isSelected }
119
+ disabled={ isUnavailable }
86
120
  onClick={ () => {
87
121
  onChangeAlignment(
88
122
  controlName
@@ -90,7 +124,11 @@ function BlockAlignmentUI( {
90
124
  onClose();
91
125
  } }
92
126
  role="menuitemradio"
93
- info={ info }
127
+ info={
128
+ isUnavailable
129
+ ? __( 'Not available' )
130
+ : info
131
+ }
94
132
  >
95
133
  { title }
96
134
  </MenuItem>
@@ -101,7 +139,7 @@ function BlockAlignmentUI( {
101
139
  </>
102
140
  );
103
141
  },
104
- };
142
+ };
105
143
 
106
144
  return <UIComponent { ...commonProps } { ...extraProps } />;
107
145
  }