@wordpress/block-editor 15.21.0 → 15.22.1-next.v.202606191442.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 (554) hide show
  1. package/CHANGELOG.md +23 -1
  2. package/build/components/block-card/index.cjs +4 -5
  3. package/build/components/block-card/index.cjs.map +2 -2
  4. package/build/components/block-compare/index.cjs +2 -2
  5. package/build/components/block-compare/index.cjs.map +2 -2
  6. package/build/components/block-inspector/index.cjs +3 -4
  7. package/build/components/block-inspector/index.cjs.map +2 -2
  8. package/build/components/block-mover/mover-description.cjs +6 -6
  9. package/build/components/block-mover/mover-description.cjs.map +1 -1
  10. package/build/components/block-patterns-list/index.cjs +1 -1
  11. package/build/components/block-patterns-list/index.cjs.map +2 -2
  12. package/build/components/block-patterns-paging/index.cjs +4 -4
  13. package/build/components/block-patterns-paging/index.cjs.map +2 -2
  14. package/build/components/block-popover/use-popover-scroll.cjs.map +1 -1
  15. package/build/components/block-quick-navigation/index.cjs +7 -5
  16. package/build/components/block-quick-navigation/index.cjs.map +2 -2
  17. package/build/components/block-switcher/block-transformations-menu.cjs +16 -15
  18. package/build/components/block-switcher/block-transformations-menu.cjs.map +2 -2
  19. package/build/components/block-switcher/index.cjs +4 -4
  20. package/build/components/block-switcher/index.cjs.map +2 -2
  21. package/build/components/block-toolbar/edit-section-button.cjs.map +1 -1
  22. package/build/components/block-tools/use-block-toolbar-popover-props.cjs +10 -4
  23. package/build/components/block-tools/use-block-toolbar-popover-props.cjs.map +2 -2
  24. package/build/components/child-layout-control/index.cjs +51 -19
  25. package/build/components/child-layout-control/index.cjs.map +2 -2
  26. package/build/components/dimensions-tool/index.cjs +4 -5
  27. package/build/components/dimensions-tool/index.cjs.map +2 -2
  28. package/build/components/dimensions-tool/scale-tool.cjs +1 -1
  29. package/build/components/dimensions-tool/scale-tool.cjs.map +2 -2
  30. package/build/components/global-styles/advanced-panel.cjs +23 -15
  31. package/build/components/global-styles/advanced-panel.cjs.map +2 -2
  32. package/build/components/global-styles/background-panel.cjs +2 -2
  33. package/build/components/global-styles/background-panel.cjs.map +2 -2
  34. package/build/components/global-styles/border-panel.cjs +2 -0
  35. package/build/components/global-styles/border-panel.cjs.map +2 -2
  36. package/build/components/global-styles/dimensions-panel.cjs +2 -2
  37. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  38. package/build/components/global-styles/shadow-panel-components.cjs.map +2 -2
  39. package/build/components/grid/grid-item-resizer.cjs.map +1 -1
  40. package/build/components/grid/grid-visualizer.cjs.map +1 -1
  41. package/build/components/iframe/index.cjs +6 -3
  42. package/build/components/iframe/index.cjs.map +3 -3
  43. package/build/components/image-editor/use-transform-image.cjs.map +1 -1
  44. package/build/components/inner-blocks/use-inner-block-template-sync.cjs +3 -1
  45. package/build/components/inner-blocks/use-inner-block-template-sync.cjs.map +2 -2
  46. package/build/components/inserter/get-appender-label.cjs.map +1 -1
  47. package/build/components/inserter/hooks/use-patterns-state.cjs +1 -1
  48. package/build/components/inserter/hooks/use-patterns-state.cjs.map +2 -2
  49. package/build/components/inserter/index.cjs +179 -220
  50. package/build/components/inserter/index.cjs.map +3 -3
  51. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  52. package/build/components/inserter/search-items.cjs.map +1 -1
  53. package/build/components/inserter/search-results.cjs +1 -1
  54. package/build/components/inserter/search-results.cjs.map +2 -2
  55. package/build/components/inspector-controls/fill.cjs +1 -3
  56. package/build/components/inspector-controls/fill.cjs.map +2 -2
  57. package/build/components/inspector-controls-tabs/index.cjs.map +2 -2
  58. package/build/components/inspector-controls-tabs/styles-tab.cjs +1 -1
  59. package/build/components/inspector-controls-tabs/styles-tab.cjs.map +2 -2
  60. package/build/components/keyboard-shortcuts/index.cjs.map +1 -1
  61. package/build/components/line-height-control/index.cjs.map +1 -1
  62. package/build/components/link-control/index.cjs +1 -1
  63. package/build/components/link-control/index.cjs.map +1 -1
  64. package/build/components/link-control/normalize-url.cjs.map +1 -1
  65. package/build/components/list-view/block-select-button.cjs +10 -12
  66. package/build/components/list-view/block-select-button.cjs.map +2 -2
  67. package/build/components/list-view/block.cjs +2 -1
  68. package/build/components/list-view/block.cjs.map +2 -2
  69. package/build/components/list-view/utils.cjs.map +1 -1
  70. package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
  71. package/build/components/provider/index.cjs.map +1 -1
  72. package/build/components/provider/use-block-sync.cjs +11 -2
  73. package/build/components/provider/use-block-sync.cjs.map +2 -2
  74. package/build/components/rich-text/event-listeners/before-input-rules.cjs +5 -5
  75. package/build/components/rich-text/event-listeners/before-input-rules.cjs.map +3 -3
  76. package/build/components/rich-text/event-listeners/delete.cjs +4 -4
  77. package/build/components/rich-text/event-listeners/delete.cjs.map +3 -3
  78. package/build/components/rich-text/event-listeners/enter.cjs +7 -2
  79. package/build/components/rich-text/event-listeners/enter.cjs.map +2 -2
  80. package/build/components/rich-text/event-listeners/input-events.cjs +4 -4
  81. package/build/components/rich-text/event-listeners/input-events.cjs.map +3 -3
  82. package/build/components/rich-text/event-listeners/input-rules.cjs +17 -4
  83. package/build/components/rich-text/event-listeners/input-rules.cjs.map +3 -3
  84. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs +4 -4
  85. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs.map +3 -3
  86. package/build/components/rich-text/event-listeners/paste-handler.cjs.map +1 -1
  87. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs +4 -4
  88. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs.map +3 -3
  89. package/build/components/rich-text/event-listeners/shortcuts.cjs +4 -4
  90. package/build/components/rich-text/event-listeners/shortcuts.cjs.map +3 -3
  91. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs +4 -4
  92. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs.map +3 -3
  93. package/build/components/rich-text/index.cjs +1 -23
  94. package/build/components/rich-text/index.cjs.map +2 -2
  95. package/build/components/rich-text/prevent-event-discovery.cjs +1 -1
  96. package/build/components/rich-text/prevent-event-discovery.cjs.map +1 -1
  97. package/build/components/use-block-commands/index.cjs +5 -5
  98. package/build/components/use-block-commands/index.cjs.map +2 -2
  99. package/build/components/writing-flow/use-tab-nav.cjs.map +1 -1
  100. package/build/hooks/anchor.cjs +12 -16
  101. package/build/hooks/anchor.cjs.map +2 -2
  102. package/build/hooks/background.cjs.map +1 -1
  103. package/build/hooks/block-fields/index.cjs +13 -2
  104. package/build/hooks/block-fields/index.cjs.map +2 -2
  105. package/build/hooks/border.cjs +0 -3
  106. package/build/hooks/border.cjs.map +2 -2
  107. package/build/hooks/color.cjs +1 -4
  108. package/build/hooks/color.cjs.map +2 -2
  109. package/build/hooks/dimensions.cjs +13 -5
  110. package/build/hooks/dimensions.cjs.map +2 -2
  111. package/build/hooks/fit-text.cjs +11 -0
  112. package/build/hooks/fit-text.cjs.map +2 -2
  113. package/build/hooks/layout-child.cjs +27 -2
  114. package/build/hooks/layout-child.cjs.map +2 -2
  115. package/build/hooks/list-view.cjs +10 -7
  116. package/build/hooks/list-view.cjs.map +2 -2
  117. package/build/hooks/position.cjs +19 -22
  118. package/build/hooks/position.cjs.map +2 -2
  119. package/build/hooks/spacing-visualizer.cjs.map +1 -1
  120. package/build/hooks/state-utils.cjs.map +1 -1
  121. package/build/hooks/style.cjs +42 -2
  122. package/build/hooks/style.cjs.map +2 -2
  123. package/build/hooks/supports.cjs +0 -7
  124. package/build/hooks/supports.cjs.map +2 -2
  125. package/build/private-apis.cjs +4 -0
  126. package/build/private-apis.cjs.map +2 -2
  127. package/build/store/actions.cjs +7 -3
  128. package/build/store/actions.cjs.map +2 -2
  129. package/build/store/private-actions.cjs +1 -2
  130. package/build/store/private-actions.cjs.map +2 -2
  131. package/build/store/private-selectors.cjs +42 -2
  132. package/build/store/private-selectors.cjs.map +2 -2
  133. package/build/store/reducer.cjs +14 -6
  134. package/build/store/reducer.cjs.map +2 -2
  135. package/build/store/selectors.cjs +60 -41
  136. package/build/store/selectors.cjs.map +2 -2
  137. package/build/utils/dom.cjs.map +1 -1
  138. package/build/utils/selection.cjs +1 -1
  139. package/build-module/components/block-card/index.mjs +5 -6
  140. package/build-module/components/block-card/index.mjs.map +2 -2
  141. package/build-module/components/block-compare/index.mjs +1 -1
  142. package/build-module/components/block-compare/index.mjs.map +2 -2
  143. package/build-module/components/block-inspector/index.mjs +3 -5
  144. package/build-module/components/block-inspector/index.mjs.map +2 -2
  145. package/build-module/components/block-mover/mover-description.mjs +6 -6
  146. package/build-module/components/block-mover/mover-description.mjs.map +1 -1
  147. package/build-module/components/block-patterns-list/index.mjs +1 -1
  148. package/build-module/components/block-patterns-list/index.mjs.map +2 -2
  149. package/build-module/components/block-patterns-paging/index.mjs +4 -4
  150. package/build-module/components/block-patterns-paging/index.mjs.map +2 -2
  151. package/build-module/components/block-popover/use-popover-scroll.mjs.map +1 -1
  152. package/build-module/components/block-quick-navigation/index.mjs +8 -6
  153. package/build-module/components/block-quick-navigation/index.mjs.map +2 -2
  154. package/build-module/components/block-switcher/block-transformations-menu.mjs +16 -15
  155. package/build-module/components/block-switcher/block-transformations-menu.mjs.map +2 -2
  156. package/build-module/components/block-switcher/index.mjs +4 -4
  157. package/build-module/components/block-switcher/index.mjs.map +2 -2
  158. package/build-module/components/block-toolbar/edit-section-button.mjs.map +1 -1
  159. package/build-module/components/block-tools/use-block-toolbar-popover-props.mjs +10 -4
  160. package/build-module/components/block-tools/use-block-toolbar-popover-props.mjs.map +2 -2
  161. package/build-module/components/child-layout-control/index.mjs +51 -19
  162. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  163. package/build-module/components/dimensions-tool/index.mjs +4 -5
  164. package/build-module/components/dimensions-tool/index.mjs.map +2 -2
  165. package/build-module/components/dimensions-tool/scale-tool.mjs +1 -1
  166. package/build-module/components/dimensions-tool/scale-tool.mjs.map +2 -2
  167. package/build-module/components/global-styles/advanced-panel.mjs +23 -15
  168. package/build-module/components/global-styles/advanced-panel.mjs.map +2 -2
  169. package/build-module/components/global-styles/background-panel.mjs +3 -3
  170. package/build-module/components/global-styles/background-panel.mjs.map +2 -2
  171. package/build-module/components/global-styles/border-panel.mjs +2 -0
  172. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  173. package/build-module/components/global-styles/dimensions-panel.mjs +3 -4
  174. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  175. package/build-module/components/global-styles/shadow-panel-components.mjs.map +2 -2
  176. package/build-module/components/grid/grid-item-resizer.mjs.map +1 -1
  177. package/build-module/components/grid/grid-visualizer.mjs.map +1 -1
  178. package/build-module/components/iframe/index.mjs +6 -3
  179. package/build-module/components/iframe/index.mjs.map +2 -2
  180. package/build-module/components/image-editor/use-transform-image.mjs.map +1 -1
  181. package/build-module/components/inner-blocks/use-inner-block-template-sync.mjs +3 -1
  182. package/build-module/components/inner-blocks/use-inner-block-template-sync.mjs.map +2 -2
  183. package/build-module/components/inserter/get-appender-label.mjs.map +1 -1
  184. package/build-module/components/inserter/hooks/use-patterns-state.mjs +1 -1
  185. package/build-module/components/inserter/hooks/use-patterns-state.mjs.map +2 -2
  186. package/build-module/components/inserter/index.mjs +185 -222
  187. package/build-module/components/inserter/index.mjs.map +3 -3
  188. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  189. package/build-module/components/inserter/search-items.mjs.map +1 -1
  190. package/build-module/components/inserter/search-results.mjs +1 -1
  191. package/build-module/components/inserter/search-results.mjs.map +2 -2
  192. package/build-module/components/inspector-controls/fill.mjs +1 -3
  193. package/build-module/components/inspector-controls/fill.mjs.map +2 -2
  194. package/build-module/components/inspector-controls-tabs/index.mjs.map +2 -2
  195. package/build-module/components/inspector-controls-tabs/styles-tab.mjs +1 -1
  196. package/build-module/components/inspector-controls-tabs/styles-tab.mjs.map +2 -2
  197. package/build-module/components/keyboard-shortcuts/index.mjs.map +1 -1
  198. package/build-module/components/line-height-control/index.mjs.map +1 -1
  199. package/build-module/components/link-control/index.mjs +1 -1
  200. package/build-module/components/link-control/index.mjs.map +1 -1
  201. package/build-module/components/link-control/normalize-url.mjs.map +1 -1
  202. package/build-module/components/list-view/block-select-button.mjs +10 -12
  203. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  204. package/build-module/components/list-view/block.mjs +2 -1
  205. package/build-module/components/list-view/block.mjs.map +2 -2
  206. package/build-module/components/list-view/utils.mjs.map +1 -1
  207. package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
  208. package/build-module/components/provider/index.mjs.map +1 -1
  209. package/build-module/components/provider/use-block-sync.mjs +11 -2
  210. package/build-module/components/provider/use-block-sync.mjs.map +2 -2
  211. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs +5 -5
  212. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs.map +2 -2
  213. package/build-module/components/rich-text/event-listeners/delete.mjs +4 -4
  214. package/build-module/components/rich-text/event-listeners/delete.mjs.map +2 -2
  215. package/build-module/components/rich-text/event-listeners/enter.mjs +7 -2
  216. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  217. package/build-module/components/rich-text/event-listeners/input-events.mjs +4 -4
  218. package/build-module/components/rich-text/event-listeners/input-events.mjs.map +2 -2
  219. package/build-module/components/rich-text/event-listeners/input-rules.mjs +17 -4
  220. package/build-module/components/rich-text/event-listeners/input-rules.mjs.map +2 -2
  221. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs +4 -4
  222. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs.map +2 -2
  223. package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +1 -1
  224. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs +4 -4
  225. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs.map +2 -2
  226. package/build-module/components/rich-text/event-listeners/shortcuts.mjs +4 -4
  227. package/build-module/components/rich-text/event-listeners/shortcuts.mjs.map +2 -2
  228. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs +4 -4
  229. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs.map +2 -2
  230. package/build-module/components/rich-text/index.mjs +1 -23
  231. package/build-module/components/rich-text/index.mjs.map +2 -2
  232. package/build-module/components/rich-text/prevent-event-discovery.mjs +1 -1
  233. package/build-module/components/rich-text/prevent-event-discovery.mjs.map +1 -1
  234. package/build-module/components/use-block-commands/index.mjs +5 -5
  235. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  236. package/build-module/components/writing-flow/use-tab-nav.mjs.map +1 -1
  237. package/build-module/hooks/anchor.mjs +12 -16
  238. package/build-module/hooks/anchor.mjs.map +2 -2
  239. package/build-module/hooks/background.mjs.map +1 -1
  240. package/build-module/hooks/block-fields/index.mjs +13 -2
  241. package/build-module/hooks/block-fields/index.mjs.map +2 -2
  242. package/build-module/hooks/border.mjs +1 -4
  243. package/build-module/hooks/border.mjs.map +2 -2
  244. package/build-module/hooks/color.mjs +2 -5
  245. package/build-module/hooks/color.mjs.map +2 -2
  246. package/build-module/hooks/dimensions.mjs +13 -6
  247. package/build-module/hooks/dimensions.mjs.map +2 -2
  248. package/build-module/hooks/fit-text.mjs +11 -0
  249. package/build-module/hooks/fit-text.mjs.map +2 -2
  250. package/build-module/hooks/layout-child.mjs +27 -2
  251. package/build-module/hooks/layout-child.mjs.map +2 -2
  252. package/build-module/hooks/list-view.mjs +10 -7
  253. package/build-module/hooks/list-view.mjs.map +2 -2
  254. package/build-module/hooks/position.mjs +20 -23
  255. package/build-module/hooks/position.mjs.map +2 -2
  256. package/build-module/hooks/spacing-visualizer.mjs.map +1 -1
  257. package/build-module/hooks/state-utils.mjs.map +1 -1
  258. package/build-module/hooks/style.mjs +44 -3
  259. package/build-module/hooks/style.mjs.map +2 -2
  260. package/build-module/hooks/supports.mjs +0 -7
  261. package/build-module/hooks/supports.mjs.map +2 -2
  262. package/build-module/private-apis.mjs +8 -0
  263. package/build-module/private-apis.mjs.map +2 -2
  264. package/build-module/store/actions.mjs +7 -3
  265. package/build-module/store/actions.mjs.map +2 -2
  266. package/build-module/store/private-actions.mjs +1 -2
  267. package/build-module/store/private-actions.mjs.map +2 -2
  268. package/build-module/store/private-selectors.mjs +39 -1
  269. package/build-module/store/private-selectors.mjs.map +2 -2
  270. package/build-module/store/reducer.mjs +14 -6
  271. package/build-module/store/reducer.mjs.map +2 -2
  272. package/build-module/store/selectors.mjs +62 -42
  273. package/build-module/store/selectors.mjs.map +2 -2
  274. package/build-module/utils/dom.mjs.map +1 -1
  275. package/build-module/utils/selection.mjs +1 -1
  276. package/build-style/content-rtl.css +12 -0
  277. package/build-style/content.css +12 -0
  278. package/build-style/style-rtl.css +26 -8
  279. package/build-style/style.css +26 -8
  280. package/package.json +54 -46
  281. package/src/components/block-breadcrumb/README.md +2 -2
  282. package/src/components/block-card/index.js +7 -13
  283. package/src/components/block-compare/README.md +6 -6
  284. package/src/components/block-compare/index.js +1 -3
  285. package/src/components/block-inspector/index.js +2 -10
  286. package/src/components/block-patterns-list/index.js +1 -2
  287. package/src/components/block-preview/README.md +1 -1
  288. package/src/components/block-quick-navigation/index.js +7 -7
  289. package/src/components/block-switcher/block-transformations-menu.js +16 -18
  290. package/src/components/block-switcher/index.js +4 -4
  291. package/src/components/block-tools/use-block-toolbar-popover-props.js +10 -4
  292. package/src/components/block-types-list/README.md +0 -19
  293. package/src/components/child-layout-control/index.js +65 -20
  294. package/src/components/child-layout-control/test/index.js +64 -0
  295. package/src/components/dimensions-tool/index.js +4 -9
  296. package/src/components/dimensions-tool/scale-tool.js +1 -2
  297. package/src/components/dimensions-tool/test/index.js +89 -11
  298. package/src/components/global-styles/advanced-panel.js +5 -1
  299. package/src/components/global-styles/background-panel.js +3 -3
  300. package/src/components/global-styles/border-panel.js +2 -0
  301. package/src/components/global-styles/dimensions-panel.js +13 -15
  302. package/src/components/global-styles/shadow-panel-components.js +0 -1
  303. package/src/components/iframe/index.js +8 -3
  304. package/src/components/inner-blocks/use-inner-block-template-sync.js +3 -1
  305. package/src/components/inserter/hooks/use-patterns-state.js +1 -1
  306. package/src/components/inserter/index.js +257 -288
  307. package/src/components/inserter/media-tab/media-preview.js +0 -1
  308. package/src/components/inserter/search-results.js +1 -3
  309. package/src/components/inspector-controls/fill.js +6 -8
  310. package/src/components/inspector-controls-tabs/index.js +0 -1
  311. package/src/components/inspector-controls-tabs/styles-tab.js +5 -1
  312. package/src/components/justify-content-control/README.md +1 -1
  313. package/src/components/list-view/block-select-button.js +9 -14
  314. package/src/components/list-view/block.js +1 -0
  315. package/src/components/media-placeholder/README.md +1 -29
  316. package/src/components/media-upload/README.md +0 -19
  317. package/src/components/preset-input-control/custom-value-controls.js +0 -1
  318. package/src/components/provider/test/use-block-sync.js +40 -0
  319. package/src/components/provider/use-block-sync.js +12 -2
  320. package/src/components/rich-text/event-listeners/before-input-rules.js +5 -4
  321. package/src/components/rich-text/event-listeners/delete.js +9 -4
  322. package/src/components/rich-text/event-listeners/enter.js +9 -2
  323. package/src/components/rich-text/event-listeners/input-events.js +13 -4
  324. package/src/components/rich-text/event-listeners/input-rules.js +20 -4
  325. package/src/components/rich-text/event-listeners/insert-replacement-text.js +9 -4
  326. package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +9 -4
  327. package/src/components/rich-text/event-listeners/shortcuts.js +13 -4
  328. package/src/components/rich-text/event-listeners/undo-automatic-change.js +5 -4
  329. package/src/components/rich-text/index.js +1 -33
  330. package/src/components/unit-control/README.md +1 -1
  331. package/src/components/url-popover/README.md +1 -1
  332. package/src/components/use-block-commands/index.js +5 -5
  333. package/src/hooks/anchor.js +9 -17
  334. package/src/hooks/block-fields/index.js +27 -2
  335. package/src/hooks/border.js +1 -5
  336. package/src/hooks/color.js +1 -6
  337. package/src/hooks/dimensions.js +15 -8
  338. package/src/hooks/fit-text.js +16 -0
  339. package/src/hooks/layout-child.js +41 -2
  340. package/src/hooks/list-view.js +10 -11
  341. package/src/hooks/position.js +23 -27
  342. package/src/hooks/style.js +80 -2
  343. package/src/hooks/supports.js +0 -9
  344. package/src/hooks/test/dimensions.js +71 -0
  345. package/src/hooks/test/layout-child.js +165 -0
  346. package/src/hooks/test/style.js +126 -4
  347. package/src/private-apis.js +8 -0
  348. package/src/store/actions.js +13 -3
  349. package/src/store/private-actions.js +1 -4
  350. package/src/store/private-selectors.js +89 -0
  351. package/src/store/reducer.js +19 -7
  352. package/src/store/selectors.js +91 -53
  353. package/src/store/test/actions.js +21 -0
  354. package/src/store/test/private-selectors.js +138 -0
  355. package/src/store/test/reducer.js +46 -0
  356. package/src/store/test/selectors.js +77 -0
  357. package/build/components/media-upload-progress/constants.cjs +0 -46
  358. package/build/components/media-upload-progress/constants.cjs.map +0 -7
  359. package/build/components/rich-text/native/format-edit.cjs +0 -60
  360. package/build/components/rich-text/native/format-edit.cjs.map +0 -7
  361. package/build/components/rich-text/native/index.cjs +0 -28
  362. package/build/components/rich-text/native/index.cjs.map +0 -7
  363. package/build/components/rich-text/native/use-format-types.cjs +0 -139
  364. package/build/components/rich-text/native/use-format-types.cjs.map +0 -7
  365. package/build-module/components/media-upload-progress/constants.mjs +0 -16
  366. package/build-module/components/media-upload-progress/constants.mjs.map +0 -7
  367. package/build-module/components/rich-text/native/format-edit.mjs +0 -39
  368. package/build-module/components/rich-text/native/format-edit.mjs.map +0 -7
  369. package/build-module/components/rich-text/native/index.mjs +0 -7
  370. package/build-module/components/rich-text/native/index.mjs.map +0 -7
  371. package/build-module/components/rich-text/native/use-format-types.mjs +0 -114
  372. package/build-module/components/rich-text/native/use-format-types.mjs.map +0 -7
  373. package/src/components/audio-player/audio-url-parser.native.js +0 -20
  374. package/src/components/audio-player/index.native.js +0 -225
  375. package/src/components/audio-player/styles.native.scss +0 -114
  376. package/src/components/audio-player/test/audio-url-parser.native.js +0 -53
  377. package/src/components/block-alignment-control/test/index.native.js +0 -37
  378. package/src/components/block-alignment-control/ui.native.js +0 -86
  379. package/src/components/block-caption/README.md +0 -104
  380. package/src/components/block-caption/index.native.js +0 -89
  381. package/src/components/block-caption/styles.native.scss +0 -7
  382. package/src/components/block-controls/slot.native.js +0 -33
  383. package/src/components/block-draggable/draggable-chip.native.js +0 -49
  384. package/src/components/block-draggable/dropping-insertion-point.native.js +0 -181
  385. package/src/components/block-draggable/dropping-insertion-point.native.scss +0 -8
  386. package/src/components/block-draggable/index.native.js +0 -467
  387. package/src/components/block-draggable/style.native.scss +0 -19
  388. package/src/components/block-draggable/test/__snapshots__/index.native.js.snap +0 -73
  389. package/src/components/block-draggable/test/helpers.native.js +0 -182
  390. package/src/components/block-draggable/test/index.native.js +0 -419
  391. package/src/components/block-draggable/use-scroll-when-dragging.native.js +0 -135
  392. package/src/components/block-edit/edit.native.js +0 -49
  393. package/src/components/block-edit/test/edit.native.js +0 -65
  394. package/src/components/block-heading-level-dropdown/index.native.js +0 -68
  395. package/src/components/block-icon/index.native.js +0 -47
  396. package/src/components/block-icon/style.native.scss +0 -7
  397. package/src/components/block-list/block-crash-boundary.native.js +0 -43
  398. package/src/components/block-list/block-crash-warning.native.js +0 -21
  399. package/src/components/block-list/block-invalid-warning.native.js +0 -70
  400. package/src/components/block-list/block-list-context.native.js +0 -172
  401. package/src/components/block-list/block-list-item-cell.native.js +0 -62
  402. package/src/components/block-list/block-list-item.native.js +0 -209
  403. package/src/components/block-list/block-list-item.native.scss +0 -16
  404. package/src/components/block-list/block-outline.native.js +0 -77
  405. package/src/components/block-list/block-selection-button.native.js +0 -100
  406. package/src/components/block-list/block-selection-button.native.scss +0 -34
  407. package/src/components/block-list/block.native.js +0 -716
  408. package/src/components/block-list/block.native.scss +0 -62
  409. package/src/components/block-list/grid-item.native.js +0 -58
  410. package/src/components/block-list/index.native.js +0 -437
  411. package/src/components/block-list/insertion-point.native.js +0 -36
  412. package/src/components/block-list/style.native.scss +0 -117
  413. package/src/components/block-list/test/block-invalid-warning.native.js +0 -62
  414. package/src/components/block-list/test/block-list-context.native.js +0 -243
  415. package/src/components/block-list/test/block-outline.native.js +0 -255
  416. package/src/components/block-list/test/fixtures/block-list-context.native.js +0 -79
  417. package/src/components/block-list/test/index.native.js +0 -205
  418. package/src/components/block-list/use-block-props/index.native.js +0 -10
  419. package/src/components/block-list/use-scroll-upon-insertion.native.js +0 -52
  420. package/src/components/block-list-appender/index.native.js +0 -70
  421. package/src/components/block-list-appender/style.native.scss +0 -8
  422. package/src/components/block-media-update-progress/README.md +0 -100
  423. package/src/components/block-media-update-progress/index.native.js +0 -299
  424. package/src/components/block-media-update-progress/styles.native.scss +0 -9
  425. package/src/components/block-media-update-progress/test/index.native.js +0 -543
  426. package/src/components/block-mover/index.native.js +0 -193
  427. package/src/components/block-mover/mover-description.native.js +0 -155
  428. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +0 -218
  429. package/src/components/block-mover/test/index.native.js +0 -186
  430. package/src/components/block-settings/button.native.js +0 -41
  431. package/src/components/block-settings/container.native.js +0 -91
  432. package/src/components/block-settings/container.native.scss +0 -4
  433. package/src/components/block-settings/index.native.js +0 -5
  434. package/src/components/block-styles/index.native.js +0 -94
  435. package/src/components/block-styles/preview.native.js +0 -109
  436. package/src/components/block-styles/style.native.scss +0 -64
  437. package/src/components/block-switcher/block-transformations-menu.native.js +0 -91
  438. package/src/components/block-toolbar/block-toolbar-menu.native.js +0 -477
  439. package/src/components/block-toolbar/index.native.js +0 -126
  440. package/src/components/block-toolbar/test/__snapshots__/block-toolbar-menu.native.js.snap +0 -125
  441. package/src/components/block-toolbar/test/block-toolbar-menu.native.js +0 -405
  442. package/src/components/block-toolbar/test/index.native.js +0 -36
  443. package/src/components/block-types-list/index.native.js +0 -175
  444. package/src/components/block-types-list/style.native.scss +0 -25
  445. package/src/components/block-variation-picker/index.native.js +0 -107
  446. package/src/components/block-variation-picker/style.native.scss +0 -32
  447. package/src/components/button-block-appender/index.native.js +0 -92
  448. package/src/components/button-block-appender/styles.native.scss +0 -43
  449. package/src/components/caption/README.md +0 -44
  450. package/src/components/caption/index.native.js +0 -61
  451. package/src/components/colors-gradients/panel-color-gradient-settings.native.js +0 -59
  452. package/src/components/contrast-checker/index.native.js +0 -113
  453. package/src/components/contrast-checker/style.native.scss +0 -26
  454. package/src/components/convert-to-group-buttons/index.native.js +0 -79
  455. package/src/components/default-block-appender/index.native.js +0 -113
  456. package/src/components/default-block-appender/style.native.scss +0 -18
  457. package/src/components/floating-toolbar/floatingToolbar.android.scss +0 -4
  458. package/src/components/floating-toolbar/floatingToolbar.ios.scss +0 -3
  459. package/src/components/floating-toolbar/index.native.js +0 -141
  460. package/src/components/floating-toolbar/styles.native.scss +0 -43
  461. package/src/components/font-sizes/index.native.js +0 -7
  462. package/src/components/global-styles/color-panel.native.js +0 -207
  463. package/src/components/global-styles/test/use-global-styles-context.native.js +0 -435
  464. package/src/components/global-styles/use-global-styles-context.native.js +0 -592
  465. package/src/components/gradients/index.native.js +0 -2
  466. package/src/components/image-link-destinations/index.native.js +0 -152
  467. package/src/components/image-link-destinations/style.native.scss +0 -16
  468. package/src/components/index.native.js +0 -108
  469. package/src/components/inner-blocks/constants.native.js +0 -5
  470. package/src/components/inner-blocks/index.native.js +0 -221
  471. package/src/components/inner-blocks/warning-max-depth-exceeded.native.js +0 -124
  472. package/src/components/inserter/block-types-tab.native.js +0 -76
  473. package/src/components/inserter/hooks/use-block-type-impressions.native.js +0 -47
  474. package/src/components/inserter/hooks/use-clipboard-block.native.js +0 -40
  475. package/src/components/inserter/index.native.js +0 -424
  476. package/src/components/inserter/menu.native.js +0 -237
  477. package/src/components/inserter/no-results.native.js +0 -49
  478. package/src/components/inserter/reusable-blocks-tab.native.js +0 -45
  479. package/src/components/inserter/search-results.native.js +0 -67
  480. package/src/components/inserter/style.native.scss +0 -83
  481. package/src/components/inserter/tabs.native.js +0 -152
  482. package/src/components/inserter/test/__snapshots__/index.native.js.snap +0 -117
  483. package/src/components/inserter/test/fixtures/index.native.js +0 -12
  484. package/src/components/inserter/test/index.native.js +0 -273
  485. package/src/components/inserter/test/reusable-blocks-tab.native.js +0 -62
  486. package/src/components/inserter/test/utils.native.js +0 -37
  487. package/src/components/inserter/utils.native.js +0 -46
  488. package/src/components/inserter-button/index.native.js +0 -108
  489. package/src/components/inserter-button/style.native.scss +0 -72
  490. package/src/components/inspector-controls/fill.native.js +0 -62
  491. package/src/components/inspector-controls/slot.native.js +0 -35
  492. package/src/components/inspector-controls-tabs/advanced-controls-panel.native.js +0 -31
  493. package/src/components/line-height-control/index.native.js +0 -28
  494. package/src/components/media-placeholder/index.native.js +0 -258
  495. package/src/components/media-placeholder/styles.native.scss +0 -108
  496. package/src/components/media-replace-flow/index.native.js +0 -12
  497. package/src/components/media-upload/constants.native.js +0 -14
  498. package/src/components/media-upload/index.native.js +0 -356
  499. package/src/components/media-upload/style.native.scss +0 -4
  500. package/src/components/media-upload/test/index.native.js +0 -172
  501. package/src/components/media-upload-progress/README.md +0 -100
  502. package/src/components/media-upload-progress/constants.js +0 -6
  503. package/src/components/media-upload-progress/index.native.js +0 -233
  504. package/src/components/media-upload-progress/styles.native.scss +0 -15
  505. package/src/components/media-upload-progress/test/index.native.js +0 -220
  506. package/src/components/plain-text/index.native.js +0 -164
  507. package/src/components/plain-text/style.native.scss +0 -10
  508. package/src/components/provider/index.native.js +0 -32
  509. package/src/components/rich-text/embed-handler-picker.native.js +0 -65
  510. package/src/components/rich-text/file-paste-handler.native.js +0 -3
  511. package/src/components/rich-text/format-toolbar/index.native.js +0 -21
  512. package/src/components/rich-text/format-toolbar-container.native.js +0 -16
  513. package/src/components/rich-text/index.native.js +0 -701
  514. package/src/components/rich-text/input-event.native.js +0 -10
  515. package/src/components/rich-text/native/format-edit.js +0 -44
  516. package/src/components/rich-text/native/get-format-colors.native.js +0 -47
  517. package/src/components/rich-text/native/index.js +0 -1
  518. package/src/components/rich-text/native/index.native.js +0 -1389
  519. package/src/components/rich-text/native/style.native.scss +0 -28
  520. package/src/components/rich-text/native/test/__snapshots__/index.native.js.snap +0 -79
  521. package/src/components/rich-text/native/test/index.native.js +0 -345
  522. package/src/components/rich-text/native/test/performance/rich-text.native.js +0 -44
  523. package/src/components/rich-text/native/toolbar-button-with-options.native.js +0 -61
  524. package/src/components/rich-text/native/use-format-types.js +0 -146
  525. package/src/components/rich-text/remove-browser-shortcuts.native.js +0 -1
  526. package/src/components/rich-text/shortcut.native.js +0 -10
  527. package/src/components/ungroup-button/README.md +0 -23
  528. package/src/components/ungroup-button/index.native.js +0 -77
  529. package/src/components/unsupported-block-details/index.native.js +0 -187
  530. package/src/components/unsupported-block-details/style.native.scss +0 -56
  531. package/src/components/url-input/index.native.js +0 -33
  532. package/src/components/use-block-drop-zone/index.native.js +0 -207
  533. package/src/components/use-on-block-drop/index.native.js +0 -115
  534. package/src/components/use-unsupported-block-editor/index.native.js +0 -59
  535. package/src/components/video-player/gridicon-play.native.js +0 -13
  536. package/src/components/video-player/index.native.js +0 -133
  537. package/src/components/video-player/styles.native.scss +0 -29
  538. package/src/components/warning/index.native.js +0 -64
  539. package/src/components/warning/style.native.scss +0 -47
  540. package/src/hooks/align.native.js +0 -49
  541. package/src/hooks/custom-class-name.native.js +0 -70
  542. package/src/hooks/index.native.js +0 -36
  543. package/src/hooks/layout.native.js +0 -23
  544. package/src/hooks/test/__snapshots__/align.native.js.snap +0 -73
  545. package/src/hooks/test/__snapshots__/anchor.native.js.snap +0 -7
  546. package/src/hooks/test/align.native.js +0 -134
  547. package/src/hooks/test/anchor.native.js +0 -32
  548. package/src/hooks/test/use-editor-wrapper-styles.native.js +0 -282
  549. package/src/hooks/typography.native.js +0 -60
  550. package/src/hooks/use-editor-wrapper-styles.native.js +0 -250
  551. package/src/hooks/use-editor-wrapper-styles.native.scss +0 -12
  552. package/src/index.native.js +0 -6
  553. package/src/private-apis.native.js +0 -21
  554. package/src/store/defaults.native.js +0 -23
@@ -26,7 +26,7 @@ A block instance (object) or a blocks array you would like to render a preview.
26
26
 
27
27
  Width of the preview container in pixels. Controls at what size the blocks will be rendered inside the preview.
28
28
 
29
- `viewportWidth` can be used to simulate how blocks look on different device sizes or to make sure make sure multiple previews will be rendered with the same scale, regardless of their content.
29
+ `viewportWidth` can be used to simulate how blocks look on different device sizes or to make sure multiple previews will be rendered with the same scale, regardless of their content.
30
30
 
31
31
  Set `viewportWidth` to `0` to make the viewport the same width as the container.
32
32
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { hasBlockSupport, getBlockType } from '@wordpress/blocks';
4
+ import { getBlockType } from '@wordpress/blocks';
5
5
  import { useSelect, useDispatch } from '@wordpress/data';
6
6
  import {
7
7
  Button,
@@ -20,6 +20,7 @@ import { store as blockEditorStore } from '../../store';
20
20
  import BlockIcon from '../block-icon';
21
21
  import useBlockDisplayInformation from '../use-block-display-information';
22
22
  import useBlockDisplayTitle from '../block-title/use-block-display-title';
23
+ import { unlock } from '../../lock-unlock';
23
24
 
24
25
  export default function BlockQuickNavigation( {
25
26
  clientIds,
@@ -52,7 +53,7 @@ function BlockQuickNavigationItem( {
52
53
  hasListViewTab,
53
54
  } ) {
54
55
  const blockInformation = useBlockDisplayInformation( clientId );
55
- const { isSelected, childBlocks, hasListViewSupport, blockName } =
56
+ const { isSelected, childBlocks, shouldRenderListView, blockName } =
56
57
  useSelect(
57
58
  ( select ) => {
58
59
  const {
@@ -60,7 +61,8 @@ function BlockQuickNavigationItem( {
60
61
  hasSelectedInnerBlock,
61
62
  getBlockOrder,
62
63
  getBlockName,
63
- } = select( blockEditorStore );
64
+ shouldRenderBlockListView,
65
+ } = unlock( select( blockEditorStore ) );
64
66
 
65
67
  const _blockName = getBlockName( clientId );
66
68
 
@@ -69,9 +71,7 @@ function BlockQuickNavigationItem( {
69
71
  isBlockSelected( clientId ) ||
70
72
  hasSelectedInnerBlock( clientId, /* deep: */ true ),
71
73
  childBlocks: getBlockOrder( clientId ),
72
- hasListViewSupport:
73
- _blockName === 'core/navigation' ||
74
- hasBlockSupport( _blockName, 'listView' ),
74
+ shouldRenderListView: shouldRenderBlockListView( clientId ),
75
75
  blockName: _blockName,
76
76
  };
77
77
  },
@@ -88,7 +88,7 @@ function BlockQuickNavigationItem( {
88
88
 
89
89
  const hasChildren = childBlocks && childBlocks.length > 0;
90
90
  const canNavigateToListView =
91
- hasChildren && hasListViewTab && hasListViewSupport;
91
+ hasChildren && hasListViewTab && shouldRenderListView;
92
92
 
93
93
  return (
94
94
  <Button
@@ -88,8 +88,7 @@ const BlockTransformationsMenu = ( {
88
88
  onSelectVariation,
89
89
  blocks,
90
90
  } ) => {
91
- const [ hoveredTransformItemName, setHoveredTransformItemName ] =
92
- useState();
91
+ const [ hoveredTransformItem, setHoveredTransformItem ] = useState();
93
92
 
94
93
  const { priorityTextTransformations, restTransformations } =
95
94
  useGroupedTransforms( possibleBlockTransformations );
@@ -101,17 +100,18 @@ const BlockTransformationsMenu = ( {
101
100
  <RestTransformationItems
102
101
  restTransformations={ restTransformations }
103
102
  onSelect={ onSelect }
104
- setHoveredTransformItemName={ setHoveredTransformItemName }
103
+ setHoveredTransformItem={ setHoveredTransformItem }
105
104
  />
106
105
  );
107
106
  return (
108
107
  <>
109
108
  <MenuGroup label={ __( 'Transform to' ) } className={ className }>
110
- { hoveredTransformItemName && (
109
+ { hoveredTransformItem && (
111
110
  <PreviewBlockPopover
112
111
  blocks={ switchToBlockType(
113
112
  blocks,
114
- hoveredTransformItemName
113
+ hoveredTransformItem.name,
114
+ hoveredTransformItem.variationName
115
115
  ) }
116
116
  />
117
117
  ) }
@@ -126,12 +126,10 @@ const BlockTransformationsMenu = ( {
126
126
  ) }
127
127
  { priorityTextTransformations.map( ( item ) => (
128
128
  <BlockTransformationItem
129
- key={ item.name }
129
+ key={ item.id || item.name }
130
130
  item={ item }
131
131
  onSelect={ onSelect }
132
- setHoveredTransformItemName={
133
- setHoveredTransformItemName
134
- }
132
+ setHoveredTransformItem={ setHoveredTransformItem }
135
133
  />
136
134
  ) ) }
137
135
  { ! hasBothContentTransformations && restTransformItems }
@@ -148,14 +146,14 @@ const BlockTransformationsMenu = ( {
148
146
  function RestTransformationItems( {
149
147
  restTransformations,
150
148
  onSelect,
151
- setHoveredTransformItemName,
149
+ setHoveredTransformItem,
152
150
  } ) {
153
151
  return restTransformations.map( ( item ) => (
154
152
  <BlockTransformationItem
155
- key={ item.name }
153
+ key={ item.id || item.name }
156
154
  item={ item }
157
155
  onSelect={ onSelect }
158
- setHoveredTransformItemName={ setHoveredTransformItemName }
156
+ setHoveredTransformItem={ setHoveredTransformItem }
159
157
  />
160
158
  ) );
161
159
  }
@@ -163,7 +161,7 @@ function RestTransformationItems( {
163
161
  function BlockTransformationItem( {
164
162
  item,
165
163
  onSelect,
166
- setHoveredTransformItemName,
164
+ setHoveredTransformItem,
167
165
  } ) {
168
166
  const { name, icon, title, isDisabled } = item;
169
167
  return (
@@ -171,13 +169,13 @@ function BlockTransformationItem( {
171
169
  className={ getBlockMenuDefaultClassName( name ) }
172
170
  onClick={ ( event ) => {
173
171
  event.preventDefault();
174
- onSelect( name );
172
+ onSelect( name, item.variationName );
175
173
  } }
176
174
  disabled={ isDisabled }
177
- onMouseLeave={ () => setHoveredTransformItemName( null ) }
178
- onMouseEnter={ () => setHoveredTransformItemName( name ) }
179
- onFocus={ () => setHoveredTransformItemName( name ) }
180
- onBlur={ () => setHoveredTransformItemName( null ) }
175
+ onMouseLeave={ () => setHoveredTransformItem( null ) }
176
+ onMouseEnter={ () => setHoveredTransformItem( item ) }
177
+ onFocus={ () => setHoveredTransformItem( item ) }
178
+ onBlur={ () => setHoveredTransformItem( null ) }
181
179
  >
182
180
  <BlockIcon icon={ icon } showColors />
183
181
  { title }
@@ -87,8 +87,8 @@ function BlockSwitcherDropdownMenuContents( { onClose, clientIds } ) {
87
87
  }
88
88
  }
89
89
  // Simple block transformation based on the `Block Transforms` API.
90
- function onBlockTransform( name ) {
91
- const newBlocks = switchToBlockType( blocks, name );
90
+ function onBlockTransform( name, variationName ) {
91
+ const newBlocks = switchToBlockType( blocks, name, variationName );
92
92
  replaceBlocks( clientIds, newBlocks );
93
93
  selectForMultipleBlocks( newBlocks );
94
94
  }
@@ -166,8 +166,8 @@ function BlockSwitcherDropdownMenuContents( { onClose, clientIds } ) {
166
166
  blockVariationTransformations
167
167
  }
168
168
  blocks={ blocks }
169
- onSelect={ ( name ) => {
170
- onBlockTransform( name );
169
+ onSelect={ ( name, variationName ) => {
170
+ onBlockTransform( name, variationName );
171
171
  onClose();
172
172
  } }
173
173
  onSelectVariation={ ( name ) => {
@@ -157,7 +157,13 @@ export default function useBlockToolbarPopoverProps( {
157
157
  isSticky
158
158
  )
159
159
  ),
160
- [ contentElement, selectedBlockElement, scrollContainer, toolbarHeight ]
160
+ [
161
+ contentElement,
162
+ selectedBlockElement,
163
+ scrollContainer,
164
+ toolbarHeight,
165
+ isSticky,
166
+ ]
161
167
  );
162
168
 
163
169
  // Update props when the block is moved. This also ensures the props are
@@ -173,18 +179,18 @@ export default function useBlockToolbarPopoverProps( {
173
179
 
174
180
  // Update the toolbar props on viewport resize.
175
181
  const contentView = contentElement?.ownerDocument?.defaultView;
176
- contentView?.addEventHandler?.( 'resize', updateProps );
182
+ contentView?.addEventListener?.( 'resize', updateProps );
177
183
 
178
184
  // Update the toolbar props on block resize.
179
185
  let resizeObserver;
180
186
  const blockView = selectedBlockElement?.ownerDocument?.defaultView;
181
- if ( blockView.ResizeObserver ) {
187
+ if ( blockView?.ResizeObserver ) {
182
188
  resizeObserver = new blockView.ResizeObserver( updateProps );
183
189
  resizeObserver.observe( selectedBlockElement );
184
190
  }
185
191
 
186
192
  return () => {
187
- contentView?.removeEventHandler?.( 'resize', updateProps );
193
+ contentView?.removeEventListener?.( 'resize', updateProps );
188
194
 
189
195
  if ( resizeObserver ) {
190
196
  resizeObserver.disconnect();
@@ -30,25 +30,6 @@ The blocks that will be displayed in the block list.
30
30
 
31
31
  - Type: `Array<Block>`
32
32
  - Required: Yes
33
- - Platform: Web | Mobile
34
-
35
- #### name
36
-
37
- Name of the list to be used as part of component's key.
38
-
39
- - Type: `String`
40
- - Required: Yes
41
- - Platform: Mobile
42
-
43
- #### listProps
44
-
45
- Extra `FlatList` props for customizing the list.
46
-
47
- On Mobile usually this component is rendered inside `BottomSheet` component, which already [generates these props](<(https://github.com/WordPress/gutenberg/blob/1ca1fe0c64dfe1a385221399fc94b0fb14f34199/packages/components/src/mobile/bottom-sheet/index.native.js#L355-L372)>) for this component.
48
-
49
- - Type: `String`
50
- - Required: No
51
- - Platform: Mobile
52
33
 
53
34
  ## Related components
54
35
 
@@ -23,15 +23,51 @@ import { useGetNumberOfBlocksBeforeCell } from '../grid/use-get-number-of-blocks
23
23
  import { store as blockEditorStore } from '../../store';
24
24
  import { useSettings } from '../use-settings';
25
25
 
26
- function helpText( selfStretch, parentLayout ) {
27
- const { orientation = 'horizontal' } = parentLayout;
26
+ // These are the serialized `selfStretch` values. `max` used to be called
27
+ // "Fixed" in the UI, but was renamed and replaced by `fixedNoShrink`.
28
+ const FLEX_CHILD_LAYOUT_VALUES = {
29
+ fit: 'fit',
30
+ grow: 'fill',
31
+ max: 'fixed',
32
+ fixed: 'fixedNoShrink',
33
+ };
28
34
 
29
- if ( selfStretch === 'fill' ) {
35
+ const FLEX_SIZE_VALUES = [
36
+ FLEX_CHILD_LAYOUT_VALUES.max,
37
+ FLEX_CHILD_LAYOUT_VALUES.fixed,
38
+ ];
39
+
40
+ function isFlexSizeValue( value ) {
41
+ return FLEX_SIZE_VALUES.includes( value );
42
+ }
43
+
44
+ function maxSizeLabel( parentLayout ) {
45
+ const { orientation = 'horizontal' } = parentLayout ?? {};
46
+ return orientation === 'horizontal'
47
+ ? _x( 'Max', 'Block with maximum width in flex layout' )
48
+ : _x( 'Max', 'Block with maximum height in flex layout' );
49
+ }
50
+
51
+ function helpText( flexControlValue, parentLayout ) {
52
+ const { orientation = 'horizontal' } = parentLayout ?? {};
53
+
54
+ if ( flexControlValue === FLEX_CHILD_LAYOUT_VALUES.grow ) {
30
55
  return __( 'Stretch to fill available space.' );
31
56
  }
32
- if ( selfStretch === 'fixed' && orientation === 'horizontal' ) {
57
+ if (
58
+ flexControlValue === FLEX_CHILD_LAYOUT_VALUES.max &&
59
+ orientation === 'horizontal'
60
+ ) {
61
+ return __( 'Specify a maximum width.' );
62
+ } else if ( flexControlValue === FLEX_CHILD_LAYOUT_VALUES.max ) {
63
+ return __( 'Specify a maximum height.' );
64
+ }
65
+ if (
66
+ flexControlValue === FLEX_CHILD_LAYOUT_VALUES.fixed &&
67
+ orientation === 'horizontal'
68
+ ) {
33
69
  return __( 'Specify a fixed width.' );
34
- } else if ( selfStretch === 'fixed' ) {
70
+ } else if ( flexControlValue === FLEX_CHILD_LAYOUT_VALUES.fixed ) {
35
71
  return __( 'Specify a fixed height.' );
36
72
  }
37
73
  return __( 'Fit contents.' );
@@ -99,6 +135,8 @@ function FlexControls( {
99
135
  } ) {
100
136
  const { selfStretch, flexSize } = childLayout;
101
137
  const { orientation = 'horizontal' } = parentLayout ?? {};
138
+ const flexControlValue = selfStretch || FLEX_CHILD_LAYOUT_VALUES.fit;
139
+ const hasFlexSizeValue = isFlexSizeValue( flexControlValue );
102
140
  const hasFlexValue = () => !! selfStretch;
103
141
  const flexResetLabel =
104
142
  orientation === 'horizontal' ? __( 'Width' ) : __( 'Height' );
@@ -121,13 +159,13 @@ function FlexControls( {
121
159
  };
122
160
 
123
161
  useEffect( () => {
124
- if ( selfStretch === 'fixed' && ! flexSize ) {
162
+ if ( isFlexSizeValue( selfStretch ) && ! flexSize ) {
125
163
  onChange( {
126
164
  ...childLayout,
127
- selfStretch: 'fit',
165
+ selfStretch: FLEX_CHILD_LAYOUT_VALUES.fit,
128
166
  } );
129
167
  }
130
- }, [] );
168
+ }, [] ); // eslint-disable-line react-hooks/exhaustive-deps
131
169
 
132
170
  return (
133
171
  <VStack
@@ -142,10 +180,12 @@ function FlexControls( {
142
180
  <ToggleGroupControl
143
181
  size="__unstable-large"
144
182
  label={ childLayoutOrientation( parentLayout ) }
145
- value={ selfStretch || 'fit' }
146
- help={ helpText( selfStretch, parentLayout ) }
183
+ value={ flexControlValue }
184
+ help={ helpText( flexControlValue, parentLayout ) }
147
185
  onChange={ ( value ) => {
148
- const newFlexSize = value !== 'fixed' ? null : flexSize;
186
+ const newFlexSize = isFlexSizeValue( value )
187
+ ? flexSize
188
+ : null;
149
189
  onChange( {
150
190
  selfStretch: value,
151
191
  flexSize: newFlexSize,
@@ -154,37 +194,42 @@ function FlexControls( {
154
194
  isBlock
155
195
  >
156
196
  <ToggleGroupControlOption
157
- key="fit"
158
- value="fit"
197
+ key={ FLEX_CHILD_LAYOUT_VALUES.fit }
198
+ value={ FLEX_CHILD_LAYOUT_VALUES.fit }
159
199
  label={ _x(
160
200
  'Fit',
161
201
  'Intrinsic block width in flex layout'
162
202
  ) }
163
203
  />
164
204
  <ToggleGroupControlOption
165
- key="fill"
166
- value="fill"
205
+ key={ FLEX_CHILD_LAYOUT_VALUES.grow }
206
+ value={ FLEX_CHILD_LAYOUT_VALUES.grow }
167
207
  label={ _x(
168
208
  'Grow',
169
209
  'Block with expanding width in flex layout'
170
210
  ) }
171
211
  />
172
212
  <ToggleGroupControlOption
173
- key="fixed"
174
- value="fixed"
213
+ key={ FLEX_CHILD_LAYOUT_VALUES.max }
214
+ value={ FLEX_CHILD_LAYOUT_VALUES.max }
215
+ label={ maxSizeLabel( parentLayout ) }
216
+ />
217
+ <ToggleGroupControlOption
218
+ key={ FLEX_CHILD_LAYOUT_VALUES.fixed }
219
+ value={ FLEX_CHILD_LAYOUT_VALUES.fixed }
175
220
  label={ _x(
176
221
  'Fixed',
177
222
  'Block with fixed width in flex layout'
178
223
  ) }
179
224
  />
180
225
  </ToggleGroupControl>
181
- { selfStretch === 'fixed' && (
226
+ { hasFlexSizeValue && (
182
227
  <UnitControl
183
228
  size="__unstable-large"
184
229
  units={ units }
185
230
  onChange={ ( value ) => {
186
231
  onChange( {
187
- selfStretch,
232
+ selfStretch: flexControlValue,
188
233
  flexSize: value,
189
234
  } );
190
235
  } }
@@ -199,7 +244,7 @@ function FlexControls( {
199
244
  }
200
245
 
201
246
  export function childLayoutOrientation( parentLayout ) {
202
- const { orientation = 'horizontal' } = parentLayout;
247
+ const { orientation = 'horizontal' } = parentLayout ?? {};
203
248
  return orientation === 'horizontal' ? __( 'Width' ) : __( 'Height' );
204
249
  }
205
250
 
@@ -14,6 +14,10 @@ import { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';
14
14
  */
15
15
  import ChildLayoutControl from '../';
16
16
 
17
+ jest.mock( '../../use-settings', () => ( {
18
+ useSettings: () => [ undefined ],
19
+ } ) );
20
+
17
21
  jest.mock( '@wordpress/data/src/components/use-select', () =>
18
22
  jest.fn( ( mapSelect ) => {
19
23
  if ( typeof mapSelect === 'function' ) {
@@ -123,4 +127,64 @@ describe( 'ChildLayoutControl', () => {
123
127
  columnSpan: 1,
124
128
  } );
125
129
  } );
130
+
131
+ it( 'shows legacy fixed flex sizing as max', () => {
132
+ renderControl( {
133
+ parentLayout: {
134
+ type: 'flex',
135
+ orientation: 'horizontal',
136
+ },
137
+ value: {
138
+ selfStretch: 'fixed',
139
+ flexSize: '320px',
140
+ },
141
+ } );
142
+
143
+ expect( screen.getByRole( 'radio', { name: 'Max' } ) ).toBeChecked();
144
+ } );
145
+
146
+ it( 'sets fixedNoShrink when selecting fixed flex sizing', async () => {
147
+ const user = userEvent.setup();
148
+ const onChange = jest.fn();
149
+
150
+ renderControl( {
151
+ parentLayout: {
152
+ type: 'flex',
153
+ orientation: 'horizontal',
154
+ },
155
+ value: {},
156
+ onChange,
157
+ } );
158
+
159
+ await user.click( screen.getByRole( 'radio', { name: 'Fixed' } ) );
160
+
161
+ expect( onChange ).toHaveBeenCalledWith( {
162
+ selfStretch: 'fixedNoShrink',
163
+ flexSize: undefined,
164
+ } );
165
+ } );
166
+
167
+ it( 'sets legacy fixed when selecting max sizing', async () => {
168
+ const user = userEvent.setup();
169
+ const onChange = jest.fn();
170
+
171
+ renderControl( {
172
+ parentLayout: {
173
+ type: 'flex',
174
+ orientation: 'horizontal',
175
+ },
176
+ value: {
177
+ selfStretch: 'fixedNoShrink',
178
+ flexSize: '320px',
179
+ },
180
+ onChange,
181
+ } );
182
+
183
+ await user.click( screen.getByRole( 'radio', { name: 'Max' } ) );
184
+
185
+ expect( onChange ).toHaveBeenCalledWith( {
186
+ selfStretch: 'fixed',
187
+ flexSize: '320px',
188
+ } );
189
+ } );
126
190
  } );
@@ -56,7 +56,7 @@ function DimensionsTool( {
56
56
  aspectRatioOptions, // Default options handled by AspectRatioTool.
57
57
  defaultAspectRatio = 'auto', // Match CSS default value for aspect-ratio.
58
58
  scaleOptions, // Default options handled by ScaleTool.
59
- defaultScale = 'fill', // Match CSS default value for object-fit.
59
+ defaultScale = 'cover',
60
60
  unitsOptions, // Default options handled by UnitControl.
61
61
  tools = [ 'aspectRatio', 'widthHeight', 'scale' ],
62
62
  } ) {
@@ -73,21 +73,19 @@ function DimensionsTool( {
73
73
  value.aspectRatio === undefined || value.aspectRatio === 'auto'
74
74
  ? null
75
75
  : value.aspectRatio;
76
- const scale =
77
- value.scale === undefined || value.scale === 'fill'
78
- ? null
79
- : value.scale;
76
+ const scale = value.scale === undefined ? null : value.scale;
80
77
 
81
78
  // Keep track of state internally, so when the value is cleared by means
82
79
  // other than directly editing that field, it's easier to restore the
83
80
  // previous value.
84
81
  const [ lastScale, setLastScale ] = useState( scale );
85
82
  const [ lastAspectRatio, setLastAspectRatio ] = useState( aspectRatio );
83
+ const hasCustomAspectRatio = !! ( width && height );
86
84
 
87
85
  // 'custom' is not a valid value for CSS aspect-ratio, but it is used in the
88
86
  // dropdown to indicate that setting both the width and height is the same
89
87
  // as a custom aspect ratio.
90
- const aspectRatioValue = width && height ? 'custom' : lastAspectRatio;
88
+ const aspectRatioValue = hasCustomAspectRatio ? 'custom' : aspectRatio;
91
89
 
92
90
  const showScaleControl = aspectRatio || ( width && height );
93
91
 
@@ -197,9 +195,6 @@ function DimensionsTool( {
197
195
  onChange={ ( nextScale ) => {
198
196
  const nextValue = { ...value };
199
197
 
200
- // 'fill' is CSS default, so it gets treated as null.
201
- nextScale = nextScale === 'fill' ? null : nextScale;
202
-
203
198
  setLastScale( nextScale );
204
199
 
205
200
  // Update scale.
@@ -86,8 +86,7 @@ export default function ScaleTool( {
86
86
  defaultValue = DEFAULT_SCALE_OPTIONS[ 0 ].value,
87
87
  isShownByDefault = true,
88
88
  } ) {
89
- // Match the CSS default so if the value is used directly in CSS it will look correct in the control.
90
- const displayValue = value ?? 'fill';
89
+ const displayValue = value ?? defaultValue;
91
90
 
92
91
  const scaleHelp = useMemo( () => {
93
92
  return options.reduce( ( acc, option ) => {
@@ -16,6 +16,17 @@ import { useState } from '@wordpress/element';
16
16
  import DimensionsTool from '../';
17
17
 
18
18
  const EMPTY_OBJECT = {};
19
+ const ASPECT_RATIO_OPTIONS = [
20
+ { label: 'Original', value: 'auto' },
21
+ { label: '16/9', value: '16/9' },
22
+ { label: '4/3', value: '4/3' },
23
+ {
24
+ label: 'Custom',
25
+ value: 'custom',
26
+ disabled: true,
27
+ hidden: true,
28
+ },
29
+ ];
19
30
 
20
31
  function Example( { initialValue, onChange, ...props } ) {
21
32
  const [ value, setValue ] = useState( initialValue );
@@ -33,16 +44,27 @@ function Example( { initialValue, onChange, ...props } ) {
33
44
  } }
34
45
  defaultScale="cover"
35
46
  defaultAspectRatio="auto"
36
- aspectRatioOptions={ [
37
- { label: 'Original', value: 'auto' },
38
- { label: '16/9', value: '16/9' },
39
- {
40
- label: 'Custom',
41
- value: 'custom',
42
- disabled: true,
43
- hidden: true,
44
- },
45
- ] }
47
+ aspectRatioOptions={ ASPECT_RATIO_OPTIONS }
48
+ value={ value }
49
+ { ...props }
50
+ />
51
+ </ToolsPanel>
52
+ );
53
+ }
54
+
55
+ function ControlledExample( { value, onChange, ...props } ) {
56
+ return (
57
+ <ToolsPanel
58
+ label="Dimensions"
59
+ panelId="panel-id"
60
+ resetAll={ () => onChange( EMPTY_OBJECT ) }
61
+ >
62
+ <DimensionsTool
63
+ panelId="panel-id"
64
+ onChange={ onChange }
65
+ defaultScale="cover"
66
+ defaultAspectRatio="auto"
67
+ aspectRatioOptions={ ASPECT_RATIO_OPTIONS }
46
68
  value={ value }
47
69
  { ...props }
48
70
  />
@@ -60,6 +82,39 @@ function Example( { initialValue, onChange, ...props } ) {
60
82
  // properties are treated differently from missing properties.
61
83
 
62
84
  describe( 'DimensionsTool', () => {
85
+ describe( 'controlled values', () => {
86
+ it( 'updates the aspect ratio control when the value prop changes', () => {
87
+ const onChange = jest.fn();
88
+ const { rerender } = render(
89
+ <ControlledExample
90
+ value={ { aspectRatio: '16/9' } }
91
+ onChange={ onChange }
92
+ />
93
+ );
94
+ const aspectRatioSelect = screen.getByRole( 'combobox', {
95
+ name: 'Aspect ratio',
96
+ } );
97
+
98
+ expect( aspectRatioSelect ).toHaveValue( '16/9' );
99
+
100
+ rerender(
101
+ <ControlledExample
102
+ value={ { aspectRatio: '4/3' } }
103
+ onChange={ onChange }
104
+ />
105
+ );
106
+ expect( aspectRatioSelect ).toHaveValue( '4/3' );
107
+
108
+ rerender(
109
+ <ControlledExample
110
+ value={ EMPTY_OBJECT }
111
+ onChange={ onChange }
112
+ />
113
+ );
114
+ expect( aspectRatioSelect ).toHaveValue( 'auto' );
115
+ } );
116
+ } );
117
+
63
118
  describe( 'updating aspectRatio', () => {
64
119
  it( 'when starting with empty initial state, setting aspectRatio also sets scale (0000) -> (1100)', async () => {
65
120
  const user = userEvent.setup();
@@ -323,7 +378,30 @@ describe( 'DimensionsTool', () => {
323
378
  } );
324
379
 
325
380
  describe( 'updating scale', () => {
326
- // No custom interactions here. Things should just update normally.
381
+ it( 'when default scale is cover, setting scale to fill preserves the fill value', async () => {
382
+ const user = userEvent.setup();
383
+ const onChange = jest.fn();
384
+
385
+ const initialValue = {
386
+ aspectRatio: '16/9',
387
+ scale: 'cover',
388
+ };
389
+
390
+ render(
391
+ <Example initialValue={ initialValue } onChange={ onChange } />
392
+ );
393
+
394
+ const scaleFillRadio = screen.getByRole( 'radio', {
395
+ name: 'Fill',
396
+ } );
397
+
398
+ await user.click( scaleFillRadio );
399
+ expect( scaleFillRadio ).toBeChecked();
400
+
401
+ expect( onChange.mock.calls ).toStrictEqual( [
402
+ [ { aspectRatio: '16/9', scale: 'fill' } ],
403
+ ] );
404
+ } );
327
405
  } );
328
406
 
329
407
  describe( 'updating dimensions', () => {
@@ -85,7 +85,11 @@ export default function AdvancedPanel( {
85
85
  }
86
86
 
87
87
  return (
88
- <Stack direction="column" gap="md">
88
+ <Stack
89
+ direction="column"
90
+ gap="md"
91
+ className="block-editor-global-styles-advanced-panel"
92
+ >
89
93
  { cssError && (
90
94
  <Notice status="error" onRemove={ () => setCSSError( null ) }>
91
95
  { cssError }