@wordpress/block-editor 11.0.0 → 11.2.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 (470) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/LICENSE.md +1 -1
  3. package/README.md +2 -1
  4. package/build/components/alignment-control/ui.js +1 -7
  5. package/build/components/alignment-control/ui.js.map +1 -1
  6. package/build/components/block-actions/index.js +9 -0
  7. package/build/components/block-actions/index.js.map +1 -1
  8. package/build/components/block-alignment-control/use-available-alignments.js +4 -3
  9. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  10. package/build/components/block-icon/index.js +4 -2
  11. package/build/components/block-icon/index.js.map +1 -1
  12. package/build/components/block-inspector/index.js +58 -5
  13. package/build/components/block-inspector/index.js.map +1 -1
  14. package/build/components/block-list-appender/index.js +46 -34
  15. package/build/components/block-list-appender/index.js.map +1 -1
  16. package/build/components/block-list-appender/index.native.js +39 -34
  17. package/build/components/block-list-appender/index.native.js.map +1 -1
  18. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +18 -18
  19. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  20. package/build/components/block-mobile-toolbar/index.native.js +1 -1
  21. package/build/components/block-mobile-toolbar/index.native.js.map +1 -1
  22. package/build/components/block-pattern-setup/index.js +14 -7
  23. package/build/components/block-pattern-setup/index.js.map +1 -1
  24. package/build/components/block-preview/auto.js +1 -4
  25. package/build/components/block-preview/auto.js.map +1 -1
  26. package/build/components/block-settings-menu/block-settings-dropdown.js +4 -1
  27. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  28. package/build/components/block-styles/index.js +3 -1
  29. package/build/components/block-styles/index.js.map +1 -1
  30. package/build/components/block-styles/index.native.js +1 -3
  31. package/build/components/block-styles/index.native.js.map +1 -1
  32. package/build/components/block-styles/utils.js +7 -10
  33. package/build/components/block-styles/utils.js.map +1 -1
  34. package/build/components/block-toolbar/index.native.js +6 -8
  35. package/build/components/block-toolbar/index.native.js.map +1 -1
  36. package/build/components/block-tools/selected-block-popover.js +1 -3
  37. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  38. package/build/components/block-tools/use-block-toolbar-popover-props.js +43 -10
  39. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  40. package/build/components/block-variation-picker/index.js +1 -1
  41. package/build/components/block-variation-picker/index.js.map +1 -1
  42. package/build/components/colors/utils.js +2 -6
  43. package/build/components/colors/utils.js.map +1 -1
  44. package/build/components/colors-gradients/control.js +0 -3
  45. package/build/components/colors-gradients/control.js.map +1 -1
  46. package/build/components/colors-gradients/dropdown.js +0 -2
  47. package/build/components/colors-gradients/dropdown.js.map +1 -1
  48. package/build/components/colors-gradients/panel-color-gradient-settings.js +2 -19
  49. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  50. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -3
  51. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  52. package/build/components/copy-handler/index.js +37 -9
  53. package/build/components/copy-handler/index.js.map +1 -1
  54. package/build/components/default-style-picker/index.js +1 -0
  55. package/build/components/default-style-picker/index.js.map +1 -1
  56. package/build/components/font-sizes/fluid-utils.js +5 -2
  57. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  58. package/build/components/font-sizes/utils.js +10 -4
  59. package/build/components/font-sizes/utils.js.map +1 -1
  60. package/build/components/font-sizes/with-font-sizes.js +14 -12
  61. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  62. package/build/components/gradients/use-gradient.js +2 -8
  63. package/build/components/gradients/use-gradient.js.map +1 -1
  64. package/build/components/iframe/index.js +48 -101
  65. package/build/components/iframe/index.js.map +1 -1
  66. package/build/components/iframe/use-compatibility-styles.js +98 -0
  67. package/build/components/iframe/use-compatibility-styles.js.map +1 -0
  68. package/build/components/image-size-control/index.js +1 -0
  69. package/build/components/image-size-control/index.js.map +1 -1
  70. package/build/components/inner-blocks/index.js +6 -2
  71. package/build/components/inner-blocks/index.js.map +1 -1
  72. package/build/components/inserter/block-patterns-tab.js +4 -4
  73. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  74. package/build/components/inserter/hooks/use-insertion-point.js +4 -3
  75. package/build/components/inserter/hooks/use-insertion-point.js.map +1 -1
  76. package/build/components/inserter/index.js +16 -6
  77. package/build/components/inserter/index.js.map +1 -1
  78. package/build/components/inserter/media-tab/hooks.js +8 -5
  79. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  80. package/build/components/inserter/menu.js +11 -5
  81. package/build/components/inserter/menu.js.map +1 -1
  82. package/build/components/inserter/quick-inserter.js +6 -3
  83. package/build/components/inserter/quick-inserter.js.map +1 -1
  84. package/build/components/inserter/search-items.js +15 -14
  85. package/build/components/inserter/search-items.js.map +1 -1
  86. package/build/components/inserter/search-results.js +4 -2
  87. package/build/components/inserter/search-results.js.map +1 -1
  88. package/build/components/inspector-controls/groups.js +3 -1
  89. package/build/components/inspector-controls/groups.js.map +1 -1
  90. package/build/components/inspector-controls-tabs/position-controls-panel.js +46 -0
  91. package/build/components/inspector-controls-tabs/position-controls-panel.js.map +1 -0
  92. package/build/components/inspector-controls-tabs/settings-tab.js +3 -1
  93. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  94. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +4 -11
  95. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  96. package/build/components/link-control/search-input.js +1 -0
  97. package/build/components/link-control/search-input.js.map +1 -1
  98. package/build/components/list-view/block-select-button.js +1 -1
  99. package/build/components/list-view/block-select-button.js.map +1 -1
  100. package/build/components/off-canvas-editor/appender.js +3 -44
  101. package/build/components/off-canvas-editor/appender.js.map +1 -1
  102. package/build/components/off-canvas-editor/block-contents.js +38 -5
  103. package/build/components/off-canvas-editor/block-contents.js.map +1 -1
  104. package/build/components/off-canvas-editor/block-select-button.js +3 -2
  105. package/build/components/off-canvas-editor/block-select-button.js.map +1 -1
  106. package/build/components/off-canvas-editor/block.js +51 -57
  107. package/build/components/off-canvas-editor/block.js.map +1 -1
  108. package/build/components/off-canvas-editor/index.js +12 -5
  109. package/build/components/off-canvas-editor/index.js.map +1 -1
  110. package/build/components/off-canvas-editor/use-inserted-block.js +58 -0
  111. package/build/components/off-canvas-editor/use-inserted-block.js.map +1 -0
  112. package/build/components/provider/index.js +3 -1
  113. package/build/components/provider/index.js.map +1 -1
  114. package/build/components/responsive-block-control/label.js.map +1 -1
  115. package/build/components/rich-text/format-edit.js +12 -10
  116. package/build/components/rich-text/format-edit.js.map +1 -1
  117. package/build/components/rich-text/index.js.map +1 -1
  118. package/build/components/rich-text/use-enter.js +4 -5
  119. package/build/components/rich-text/use-enter.js.map +1 -1
  120. package/build/components/rich-text/use-paste-handler.js +21 -12
  121. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  122. package/build/components/spacing-sizes-control/index.js +0 -1
  123. package/build/components/spacing-sizes-control/index.js.map +1 -1
  124. package/build/components/spacing-sizes-control/utils.js +1 -1
  125. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  126. package/build/components/typewriter/index.js +1 -1
  127. package/build/components/typewriter/index.js.map +1 -1
  128. package/build/components/url-input/button.js +1 -0
  129. package/build/components/url-input/button.js.map +1 -1
  130. package/build/components/url-input/index.js +15 -1
  131. package/build/components/url-input/index.js.map +1 -1
  132. package/build/components/url-popover/image-url-input-ui.js +2 -2
  133. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  134. package/build/components/url-popover/link-editor.js +1 -0
  135. package/build/components/url-popover/link-editor.js.map +1 -1
  136. package/build/components/use-paste-styles/index.js +188 -0
  137. package/build/components/use-paste-styles/index.js.map +1 -0
  138. package/build/components/writing-flow/index.js +1 -1
  139. package/build/components/writing-flow/index.js.map +1 -1
  140. package/build/components/writing-flow/use-arrow-nav.js +22 -29
  141. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  142. package/build/hooks/border.js +0 -1
  143. package/build/hooks/border.js.map +1 -1
  144. package/build/hooks/color-panel.js +0 -1
  145. package/build/hooks/color-panel.js.map +1 -1
  146. package/build/hooks/color.js +1 -2
  147. package/build/hooks/color.js.map +1 -1
  148. package/build/hooks/font-family.js +4 -4
  149. package/build/hooks/font-family.js.map +1 -1
  150. package/build/hooks/font-size.js +5 -3
  151. package/build/hooks/font-size.js.map +1 -1
  152. package/build/hooks/index.js +2 -0
  153. package/build/hooks/index.js.map +1 -1
  154. package/build/hooks/metadata.js +1 -1
  155. package/build/hooks/metadata.js.map +1 -1
  156. package/build/hooks/position.js +376 -0
  157. package/build/hooks/position.js.map +1 -0
  158. package/build/hooks/supports.js +328 -0
  159. package/build/hooks/supports.js.map +1 -0
  160. package/build/hooks/use-typography-props.js +11 -8
  161. package/build/hooks/use-typography-props.js.map +1 -1
  162. package/build/store/reducer.js +27 -9
  163. package/build/store/reducer.js.map +1 -1
  164. package/build/store/selectors.js +9 -7
  165. package/build/store/selectors.js.map +1 -1
  166. package/build/utils/pasting.js +6 -11
  167. package/build/utils/pasting.js.map +1 -1
  168. package/build-module/components/alignment-control/ui.js +1 -6
  169. package/build-module/components/alignment-control/ui.js.map +1 -1
  170. package/build-module/components/block-actions/index.js +6 -0
  171. package/build-module/components/block-actions/index.js.map +1 -1
  172. package/build-module/components/block-alignment-control/use-available-alignments.js +4 -3
  173. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  174. package/build-module/components/block-icon/index.js +4 -2
  175. package/build-module/components/block-icon/index.js.map +1 -1
  176. package/build-module/components/block-inspector/index.js +58 -6
  177. package/build-module/components/block-inspector/index.js.map +1 -1
  178. package/build-module/components/block-list-appender/index.js +46 -34
  179. package/build-module/components/block-list-appender/index.js.map +1 -1
  180. package/build-module/components/block-list-appender/index.native.js +39 -32
  181. package/build-module/components/block-list-appender/index.native.js.map +1 -1
  182. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +18 -18
  183. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  184. package/build-module/components/block-mobile-toolbar/index.native.js +1 -1
  185. package/build-module/components/block-mobile-toolbar/index.native.js.map +1 -1
  186. package/build-module/components/block-pattern-setup/index.js +14 -7
  187. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  188. package/build-module/components/block-preview/auto.js +1 -4
  189. package/build-module/components/block-preview/auto.js.map +1 -1
  190. package/build-module/components/block-settings-menu/block-settings-dropdown.js +4 -1
  191. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  192. package/build-module/components/block-styles/index.js +2 -1
  193. package/build-module/components/block-styles/index.js.map +1 -1
  194. package/build-module/components/block-styles/index.native.js +1 -2
  195. package/build-module/components/block-styles/index.native.js.map +1 -1
  196. package/build-module/components/block-styles/utils.js +7 -9
  197. package/build-module/components/block-styles/utils.js.map +1 -1
  198. package/build-module/components/block-toolbar/index.native.js +6 -8
  199. package/build-module/components/block-toolbar/index.native.js.map +1 -1
  200. package/build-module/components/block-tools/selected-block-popover.js +1 -2
  201. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  202. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +42 -11
  203. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  204. package/build-module/components/block-variation-picker/index.js +1 -1
  205. package/build-module/components/block-variation-picker/index.js.map +1 -1
  206. package/build-module/components/colors/utils.js +3 -7
  207. package/build-module/components/colors/utils.js.map +1 -1
  208. package/build-module/components/colors-gradients/control.js +0 -3
  209. package/build-module/components/colors-gradients/control.js.map +1 -1
  210. package/build-module/components/colors-gradients/dropdown.js +0 -2
  211. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  212. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +4 -19
  213. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  214. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -2
  215. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  216. package/build-module/components/copy-handler/index.js +38 -10
  217. package/build-module/components/copy-handler/index.js.map +1 -1
  218. package/build-module/components/default-style-picker/index.js +1 -0
  219. package/build-module/components/default-style-picker/index.js.map +1 -1
  220. package/build-module/components/font-sizes/fluid-utils.js +5 -2
  221. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  222. package/build-module/components/font-sizes/utils.js +11 -5
  223. package/build-module/components/font-sizes/utils.js.map +1 -1
  224. package/build-module/components/font-sizes/with-font-sizes.js +14 -11
  225. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  226. package/build-module/components/gradients/use-gradient.js +2 -7
  227. package/build-module/components/gradients/use-gradient.js.map +1 -1
  228. package/build-module/components/iframe/index.js +46 -102
  229. package/build-module/components/iframe/index.js.map +1 -1
  230. package/build-module/components/iframe/use-compatibility-styles.js +90 -0
  231. package/build-module/components/iframe/use-compatibility-styles.js.map +1 -0
  232. package/build-module/components/image-size-control/index.js +1 -0
  233. package/build-module/components/image-size-control/index.js.map +1 -1
  234. package/build-module/components/inner-blocks/index.js +6 -2
  235. package/build-module/components/inner-blocks/index.js.map +1 -1
  236. package/build-module/components/inserter/block-patterns-tab.js +4 -4
  237. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  238. package/build-module/components/inserter/hooks/use-insertion-point.js +4 -3
  239. package/build-module/components/inserter/hooks/use-insertion-point.js.map +1 -1
  240. package/build-module/components/inserter/index.js +16 -6
  241. package/build-module/components/inserter/index.js.map +1 -1
  242. package/build-module/components/inserter/media-tab/hooks.js +8 -5
  243. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  244. package/build-module/components/inserter/menu.js +11 -5
  245. package/build-module/components/inserter/menu.js.map +1 -1
  246. package/build-module/components/inserter/quick-inserter.js +6 -3
  247. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  248. package/build-module/components/inserter/search-items.js +15 -13
  249. package/build-module/components/inserter/search-items.js.map +1 -1
  250. package/build-module/components/inserter/search-results.js +4 -2
  251. package/build-module/components/inserter/search-results.js.map +1 -1
  252. package/build-module/components/inspector-controls/groups.js +3 -1
  253. package/build-module/components/inspector-controls/groups.js.map +1 -1
  254. package/build-module/components/inspector-controls-tabs/position-controls-panel.js +33 -0
  255. package/build-module/components/inspector-controls-tabs/position-controls-panel.js.map +1 -0
  256. package/build-module/components/inspector-controls-tabs/settings-tab.js +2 -1
  257. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  258. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +4 -11
  259. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  260. package/build-module/components/link-control/search-input.js +1 -0
  261. package/build-module/components/link-control/search-input.js.map +1 -1
  262. package/build-module/components/list-view/block-select-button.js +1 -1
  263. package/build-module/components/list-view/block-select-button.js.map +1 -1
  264. package/build-module/components/off-canvas-editor/appender.js +5 -44
  265. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  266. package/build-module/components/off-canvas-editor/block-contents.js +37 -7
  267. package/build-module/components/off-canvas-editor/block-contents.js.map +1 -1
  268. package/build-module/components/off-canvas-editor/block-select-button.js +3 -2
  269. package/build-module/components/off-canvas-editor/block-select-button.js.map +1 -1
  270. package/build-module/components/off-canvas-editor/block.js +54 -60
  271. package/build-module/components/off-canvas-editor/block.js.map +1 -1
  272. package/build-module/components/off-canvas-editor/index.js +12 -5
  273. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  274. package/build-module/components/off-canvas-editor/use-inserted-block.js +47 -0
  275. package/build-module/components/off-canvas-editor/use-inserted-block.js.map +1 -0
  276. package/build-module/components/provider/index.js +3 -1
  277. package/build-module/components/provider/index.js.map +1 -1
  278. package/build-module/components/responsive-block-control/label.js +1 -2
  279. package/build-module/components/responsive-block-control/label.js.map +1 -1
  280. package/build-module/components/rich-text/format-edit.js +12 -9
  281. package/build-module/components/rich-text/format-edit.js.map +1 -1
  282. package/build-module/components/rich-text/index.js.map +1 -1
  283. package/build-module/components/rich-text/use-enter.js +4 -5
  284. package/build-module/components/rich-text/use-enter.js.map +1 -1
  285. package/build-module/components/rich-text/use-paste-handler.js +22 -12
  286. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  287. package/build-module/components/spacing-sizes-control/index.js +0 -1
  288. package/build-module/components/spacing-sizes-control/index.js.map +1 -1
  289. package/build-module/components/spacing-sizes-control/utils.js +1 -1
  290. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  291. package/build-module/components/typewriter/index.js +1 -1
  292. package/build-module/components/typewriter/index.js.map +1 -1
  293. package/build-module/components/url-input/button.js +1 -0
  294. package/build-module/components/url-input/button.js.map +1 -1
  295. package/build-module/components/url-input/index.js +14 -1
  296. package/build-module/components/url-input/index.js.map +1 -1
  297. package/build-module/components/url-popover/image-url-input-ui.js +3 -3
  298. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  299. package/build-module/components/url-popover/link-editor.js +1 -0
  300. package/build-module/components/url-popover/link-editor.js.map +1 -1
  301. package/build-module/components/use-paste-styles/index.js +174 -0
  302. package/build-module/components/use-paste-styles/index.js.map +1 -0
  303. package/build-module/components/writing-flow/index.js +1 -1
  304. package/build-module/components/writing-flow/index.js.map +1 -1
  305. package/build-module/components/writing-flow/use-arrow-nav.js +22 -29
  306. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  307. package/build-module/hooks/border.js +0 -1
  308. package/build-module/hooks/border.js.map +1 -1
  309. package/build-module/hooks/color-panel.js +0 -1
  310. package/build-module/hooks/color-panel.js.map +1 -1
  311. package/build-module/hooks/color.js +1 -2
  312. package/build-module/hooks/color.js.map +1 -1
  313. package/build-module/hooks/font-family.js +5 -5
  314. package/build-module/hooks/font-family.js.map +1 -1
  315. package/build-module/hooks/font-size.js +5 -3
  316. package/build-module/hooks/font-size.js.map +1 -1
  317. package/build-module/hooks/index.js +1 -0
  318. package/build-module/hooks/index.js.map +1 -1
  319. package/build-module/hooks/metadata.js +1 -1
  320. package/build-module/hooks/metadata.js.map +1 -1
  321. package/build-module/hooks/position.js +337 -0
  322. package/build-module/hooks/position.js.map +1 -0
  323. package/build-module/hooks/supports.js +257 -0
  324. package/build-module/hooks/supports.js.map +1 -0
  325. package/build-module/hooks/use-typography-props.js +11 -8
  326. package/build-module/hooks/use-typography-props.js.map +1 -1
  327. package/build-module/store/reducer.js +27 -8
  328. package/build-module/store/reducer.js.map +1 -1
  329. package/build-module/store/selectors.js +9 -7
  330. package/build-module/store/selectors.js.map +1 -1
  331. package/build-module/utils/pasting.js +6 -10
  332. package/build-module/utils/pasting.js.map +1 -1
  333. package/build-style/content-rtl.css +60 -3
  334. package/build-style/content.css +60 -3
  335. package/build-style/default-editor-styles-rtl.css +3 -3
  336. package/build-style/default-editor-styles.css +3 -3
  337. package/build-style/style-rtl.css +62 -69
  338. package/build-style/style.css +62 -69
  339. package/package.json +29 -29
  340. package/src/components/alignment-control/test/index.js +2 -0
  341. package/src/components/alignment-control/ui.js +1 -7
  342. package/src/components/block-actions/index.js +5 -0
  343. package/src/components/block-alignment-control/test/index.js +2 -0
  344. package/src/components/block-alignment-control/use-available-alignments.js +4 -3
  345. package/src/components/block-icon/index.js +4 -2
  346. package/src/components/block-icon/test/index.js +9 -5
  347. package/src/components/block-inspector/index.js +79 -4
  348. package/src/components/block-inspector/style.scss +7 -0
  349. package/src/components/block-list-appender/index.js +65 -54
  350. package/src/components/block-list-appender/index.native.js +45 -34
  351. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +18 -22
  352. package/src/components/block-mobile-toolbar/index.native.js +1 -1
  353. package/src/components/block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap +125 -0
  354. package/src/components/block-mobile-toolbar/test/block-actions-menu.native.js +439 -0
  355. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +42 -0
  356. package/src/components/block-mover/test/index.native.js +157 -1
  357. package/src/components/block-pattern-setup/index.js +15 -6
  358. package/src/components/block-pattern-setup/style.scss +29 -1
  359. package/src/components/block-preview/auto.js +2 -4
  360. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -0
  361. package/src/components/block-styles/index.js +4 -1
  362. package/src/components/block-styles/index.native.js +1 -2
  363. package/src/components/block-styles/utils.js +5 -7
  364. package/src/components/block-switcher/test/index.js +3 -2
  365. package/src/components/block-toolbar/index.native.js +8 -11
  366. package/src/components/block-tools/selected-block-popover.js +1 -3
  367. package/src/components/block-tools/use-block-toolbar-popover-props.js +68 -12
  368. package/src/components/block-variation-picker/index.js +5 -1
  369. package/src/components/block-vertical-alignment-control/test/index.js +2 -0
  370. package/src/components/button-block-appender/{style.scss → content.scss} +0 -0
  371. package/src/components/colors/test/with-colors.js +2 -0
  372. package/src/components/colors/utils.js +5 -3
  373. package/src/components/colors-gradients/control.js +0 -7
  374. package/src/components/colors-gradients/dropdown.js +0 -2
  375. package/src/components/colors-gradients/panel-color-gradient-settings.js +4 -22
  376. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -2
  377. package/src/components/copy-handler/index.js +53 -7
  378. package/src/components/default-block-appender/test/index.js +2 -0
  379. package/src/components/default-style-picker/index.js +1 -0
  380. package/src/components/font-sizes/fluid-utils.js +7 -1
  381. package/src/components/font-sizes/utils.js +5 -3
  382. package/src/components/font-sizes/with-font-sizes.js +36 -36
  383. package/src/components/gradients/use-gradient.js +2 -7
  384. package/src/components/iframe/index.js +60 -122
  385. package/src/components/iframe/use-compatibility-styles.js +101 -0
  386. package/src/components/image-size-control/index.js +1 -0
  387. package/src/components/image-size-control/test/index.js +147 -79
  388. package/src/components/inner-blocks/index.js +4 -2
  389. package/src/components/inserter/block-patterns-tab.js +7 -4
  390. package/src/components/inserter/hooks/use-insertion-point.js +3 -2
  391. package/src/components/inserter/index.js +61 -43
  392. package/src/components/inserter/media-tab/hooks.js +5 -4
  393. package/src/components/inserter/menu.js +8 -4
  394. package/src/components/inserter/quick-inserter.js +3 -0
  395. package/src/components/inserter/search-items.js +1 -2
  396. package/src/components/inserter/search-results.js +2 -0
  397. package/src/components/inserter/test/__snapshots__/index.native.js.snap +117 -0
  398. package/src/components/inserter/test/index.native.js +255 -1
  399. package/src/components/inspector-controls/groups.js +2 -0
  400. package/src/components/inspector-controls-tabs/position-controls-panel.js +37 -0
  401. package/src/components/inspector-controls-tabs/settings-tab.js +2 -0
  402. package/src/components/inspector-controls-tabs/style.scss +15 -0
  403. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +3 -8
  404. package/src/components/link-control/search-input.js +1 -0
  405. package/src/components/link-control/style.scss +1 -0
  406. package/src/components/link-control/test/index.js +18 -4
  407. package/src/components/list-view/block-select-button.js +1 -1
  408. package/src/components/list-view/style.scss +14 -10
  409. package/src/components/media-replace-flow/test/index.js +2 -0
  410. package/src/components/off-canvas-editor/appender.js +4 -49
  411. package/src/components/off-canvas-editor/block-contents.js +84 -23
  412. package/src/components/off-canvas-editor/block-select-button.js +6 -2
  413. package/src/components/off-canvas-editor/block.js +90 -105
  414. package/src/components/off-canvas-editor/index.js +21 -2
  415. package/src/components/off-canvas-editor/style.scss +5 -1
  416. package/src/components/off-canvas-editor/test/use-inserted-block.js +108 -0
  417. package/src/components/off-canvas-editor/use-inserted-block.js +47 -0
  418. package/src/components/provider/index.js +4 -1
  419. package/src/components/responsive-block-control/label.js +2 -3
  420. package/src/components/responsive-block-control/test/index.js +4 -2
  421. package/src/components/rich-text/format-edit.js +6 -10
  422. package/src/components/rich-text/index.js +1 -0
  423. package/src/components/rich-text/use-enter.js +4 -4
  424. package/src/components/rich-text/use-paste-handler.js +33 -14
  425. package/src/components/spacing-sizes-control/index.js +0 -1
  426. package/src/components/spacing-sizes-control/utils.js +1 -1
  427. package/src/components/typewriter/index.js +3 -1
  428. package/src/components/url-input/README.md +5 -0
  429. package/src/components/url-input/button.js +1 -0
  430. package/src/components/url-input/index.js +15 -1
  431. package/src/components/url-input/test/button.js +2 -0
  432. package/src/components/url-popover/image-url-input-ui.js +5 -4
  433. package/src/components/url-popover/link-editor.js +1 -0
  434. package/src/components/url-popover/test/index.js +21 -5
  435. package/src/components/use-paste-styles/index.js +230 -0
  436. package/src/components/warning/test/index.js +2 -0
  437. package/src/components/writing-flow/index.js +1 -1
  438. package/src/components/writing-flow/use-arrow-nav.js +20 -28
  439. package/src/content.scss +1 -0
  440. package/src/hooks/border.js +0 -1
  441. package/src/hooks/color-panel.js +0 -1
  442. package/src/hooks/color.js +0 -2
  443. package/src/hooks/font-family.js +3 -5
  444. package/src/hooks/font-size.js +13 -4
  445. package/src/hooks/index.js +1 -0
  446. package/src/hooks/metadata.js +1 -2
  447. package/src/hooks/position.js +375 -0
  448. package/src/hooks/position.scss +18 -0
  449. package/src/hooks/supports.js +302 -0
  450. package/src/hooks/test/__snapshots__/align.native.js.snap +73 -0
  451. package/src/hooks/test/align.native.js +133 -0
  452. package/src/hooks/test/use-typography-props.js +26 -0
  453. package/src/hooks/use-typography-props.js +15 -7
  454. package/src/store/reducer.js +20 -8
  455. package/src/store/selectors.js +7 -8
  456. package/src/store/test/reducer.js +45 -3
  457. package/src/store/test/selectors.js +12 -9
  458. package/src/style.scss +2 -1
  459. package/src/utils/pasting.js +3 -9
  460. package/tsconfig.tsbuildinfo +1 -1
  461. package/build/components/colors-gradients/use-common-single-multiple-selects.js +0 -21
  462. package/build/components/colors-gradients/use-common-single-multiple-selects.js.map +0 -1
  463. package/build/components/rich-text/file-paste-handler.js +0 -21
  464. package/build/components/rich-text/file-paste-handler.js.map +0 -1
  465. package/build-module/components/colors-gradients/use-common-single-multiple-selects.js +0 -11
  466. package/build-module/components/colors-gradients/use-common-single-multiple-selects.js.map +0 -1
  467. package/build-module/components/rich-text/file-paste-handler.js +0 -13
  468. package/build-module/components/rich-text/file-paste-handler.js.map +0 -1
  469. package/src/components/colors-gradients/use-common-single-multiple-selects.js +0 -11
  470. package/src/components/rich-text/file-paste-handler.js +0 -13
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, screen, fireEvent } from '@testing-library/react';
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
5
6
 
6
7
  /**
7
8
  * Internal dependencies
@@ -11,8 +12,6 @@ import ImageSizeControl from '../index';
11
12
  describe( 'ImageSizeControl', () => {
12
13
  const mockOnChange = jest.fn();
13
14
  const mockOnChangeImage = jest.fn();
14
- const getHeightInput = () => screen.getByLabelText( 'Height' );
15
- const getWidthInput = () => screen.getByLabelText( 'Width' );
16
15
 
17
16
  afterEach( () => {
18
17
  // Cleanup on exiting.
@@ -31,8 +30,12 @@ describe( 'ImageSizeControl', () => {
31
30
  />
32
31
  );
33
32
 
34
- expect( getHeightInput().value ).toBe( '300' );
35
- expect( getWidthInput().value ).toBe( '400' );
33
+ expect(
34
+ screen.getByRole( 'spinbutton', { name: 'Height' } )
35
+ ).toHaveValue( 300 );
36
+ expect(
37
+ screen.getByRole( 'spinbutton', { name: 'Width' } )
38
+ ).toHaveValue( 400 );
36
39
  } );
37
40
 
38
41
  it( 'returns default dimensions when custom dimensions are undefined', () => {
@@ -44,15 +47,23 @@ describe( 'ImageSizeControl', () => {
44
47
  />
45
48
  );
46
49
 
47
- expect( getHeightInput().value ).toBe( '100' );
48
- expect( getWidthInput().value ).toBe( '200' );
50
+ expect(
51
+ screen.getByRole( 'spinbutton', { name: 'Height' } )
52
+ ).toHaveValue( 100 );
53
+ expect(
54
+ screen.getByRole( 'spinbutton', { name: 'Width' } )
55
+ ).toHaveValue( 200 );
49
56
  } );
50
57
 
51
- it( 'returns empty string when custom and default dimensions are undefined', () => {
58
+ it( 'returns no value when custom and default dimensions are undefined', () => {
52
59
  render( <ImageSizeControl onChange={ mockOnChange } /> );
53
60
 
54
- expect( getHeightInput().value ).toBe( '' );
55
- expect( getWidthInput().value ).toBe( '' );
61
+ expect(
62
+ screen.getByRole( 'spinbutton', { name: 'Height' } )
63
+ ).toHaveValue( null );
64
+ expect(
65
+ screen.getByRole( 'spinbutton', { name: 'Width' } )
66
+ ).toHaveValue( null );
56
67
  } );
57
68
 
58
69
  it( 'returns default dimensions when initially undefined defaults are defined on rerender', () => {
@@ -62,12 +73,14 @@ describe( 'ImageSizeControl', () => {
62
73
  <ImageSizeControl onChange={ mockOnChange } />
63
74
  );
64
75
 
65
- const heightInput = getHeightInput();
66
- const widthInput = getWidthInput();
76
+ const heightInput = screen.getByRole( 'spinbutton', {
77
+ name: 'Height',
78
+ } );
79
+ const widthInput = screen.getByRole( 'spinbutton', { name: 'Width' } );
67
80
 
68
81
  // The dimensions are initially set to an empty string.
69
- expect( heightInput.value ).toBe( '' );
70
- expect( widthInput.value ).toBe( '' );
82
+ expect( heightInput ).toHaveValue( null );
83
+ expect( widthInput ).toHaveValue( null );
71
84
 
72
85
  // When new default dimensions are passed on a rerender (for example after they
73
86
  // are calculated following an image upload), update values to the new defaults.
@@ -80,48 +93,66 @@ describe( 'ImageSizeControl', () => {
80
93
  );
81
94
 
82
95
  // The dimensions should update to the defaults.
83
- expect( heightInput.value ).toBe( '300' );
84
- expect( widthInput.value ).toBe( '400' );
96
+ expect( heightInput ).toHaveValue( 300 );
97
+ expect( widthInput ).toHaveValue( 400 );
85
98
  } );
86
99
 
87
100
  describe( 'updating dimension inputs', () => {
88
- it( 'updates height and calls onChange', () => {
101
+ it( 'updates height and calls onChange', async () => {
102
+ const user = userEvent.setup();
89
103
  render( <ImageSizeControl onChange={ mockOnChange } /> );
90
104
 
91
- const heightInput = getHeightInput();
92
- const widthInput = getWidthInput();
105
+ const heightInput = screen.getByRole( 'spinbutton', {
106
+ name: 'Height',
107
+ } );
108
+ const widthInput = screen.getByRole( 'spinbutton', {
109
+ name: 'Width',
110
+ } );
93
111
 
94
- expect( heightInput.value ).toBe( '' );
95
- expect( widthInput.value ).toBe( '' );
112
+ expect( heightInput ).toHaveValue( null );
113
+ expect( widthInput ).toHaveValue( null );
96
114
 
97
- fireEvent.change( heightInput, { target: { value: '500' } } );
115
+ const newHeight = '500';
98
116
 
99
- expect( mockOnChange ).toHaveBeenCalledTimes( 1 );
100
- expect( mockOnChange ).toHaveBeenCalledWith( { height: 500 } );
117
+ await user.clear( heightInput );
118
+ await user.type( heightInput, newHeight );
101
119
 
102
- expect( heightInput.value ).toBe( '500' );
103
- expect( widthInput.value ).toBe( '' );
120
+ expect( mockOnChange ).toHaveBeenCalledTimes( newHeight.length );
121
+ expect( mockOnChange ).toHaveBeenLastCalledWith( { height: 500 } );
122
+
123
+ expect( heightInput ).toHaveValue( 500 );
124
+ expect( widthInput ).toHaveValue( null );
104
125
  } );
105
126
 
106
- it( 'updates width and calls onChange', () => {
127
+ it( 'updates width and calls onChange', async () => {
128
+ const user = userEvent.setup();
129
+
107
130
  render( <ImageSizeControl onChange={ mockOnChange } /> );
108
131
 
109
- const heightInput = getHeightInput();
110
- const widthInput = getWidthInput();
132
+ const heightInput = screen.getByRole( 'spinbutton', {
133
+ name: 'Height',
134
+ } );
135
+ const widthInput = screen.getByRole( 'spinbutton', {
136
+ name: 'Width',
137
+ } );
111
138
 
112
- expect( heightInput.value ).toBe( '' );
113
- expect( widthInput.value ).toBe( '' );
139
+ expect( heightInput ).toHaveValue( null );
140
+ expect( widthInput ).toHaveValue( null );
114
141
 
115
- fireEvent.change( widthInput, { target: { value: '500' } } );
142
+ const newWidth = '500';
143
+ await user.clear( widthInput );
144
+ await user.type( widthInput, newWidth );
116
145
 
117
- expect( mockOnChange ).toHaveBeenCalledTimes( 1 );
118
- expect( mockOnChange ).toHaveBeenCalledWith( { width: 500 } );
146
+ expect( mockOnChange ).toHaveBeenCalledTimes( newWidth.length );
147
+ expect( mockOnChange ).toHaveBeenLastCalledWith( { width: 500 } );
119
148
 
120
- expect( heightInput.value ).toBe( '' );
121
- expect( widthInput.value ).toBe( '500' );
149
+ expect( heightInput ).toHaveValue( null );
150
+ expect( widthInput ).toHaveValue( 500 );
122
151
  } );
123
152
 
124
- it( 'updates height and calls onChange for empty value', () => {
153
+ it( 'updates height and calls onChange for empty value', async () => {
154
+ const user = userEvent.setup();
155
+
125
156
  render(
126
157
  <ImageSizeControl
127
158
  imageHeight="100"
@@ -130,27 +161,33 @@ describe( 'ImageSizeControl', () => {
130
161
  />
131
162
  );
132
163
 
133
- const heightInput = getHeightInput();
134
- const widthInput = getWidthInput();
164
+ const heightInput = screen.getByRole( 'spinbutton', {
165
+ name: 'Height',
166
+ } );
167
+ const widthInput = screen.getByRole( 'spinbutton', {
168
+ name: 'Width',
169
+ } );
135
170
 
136
- expect( heightInput.value ).toBe( '100' );
137
- expect( widthInput.value ).toBe( '100' );
171
+ expect( heightInput ).toHaveValue( 100 );
172
+ expect( widthInput ).toHaveValue( 100 );
138
173
 
139
- fireEvent.change( heightInput, { target: { value: '' } } );
174
+ await user.clear( heightInput );
140
175
 
141
176
  // onChange is called and sets the dimension to undefined rather than
142
177
  // the empty string.
143
178
  expect( mockOnChange ).toHaveBeenCalledTimes( 1 );
144
- expect( mockOnChange ).toHaveBeenCalledWith( {
179
+ expect( mockOnChange ).toHaveBeenLastCalledWith( {
145
180
  height: undefined,
146
181
  } );
147
182
 
148
183
  // Height is updated to empty value and does not reset to default.
149
- expect( heightInput.value ).toBe( '' );
150
- expect( widthInput.value ).toBe( '100' );
184
+ expect( heightInput ).toHaveValue( null );
185
+ expect( widthInput ).toHaveValue( 100 );
151
186
  } );
152
187
 
153
- it( 'updates width and calls onChange for empty value', () => {
188
+ it( 'updates width and calls onChange for empty value', async () => {
189
+ const user = userEvent.setup();
190
+
154
191
  render(
155
192
  <ImageSizeControl
156
193
  imageHeight="100"
@@ -159,29 +196,35 @@ describe( 'ImageSizeControl', () => {
159
196
  />
160
197
  );
161
198
 
162
- const heightInput = getHeightInput();
163
- const widthInput = getWidthInput();
199
+ const heightInput = screen.getByRole( 'spinbutton', {
200
+ name: 'Height',
201
+ } );
202
+ const widthInput = screen.getByRole( 'spinbutton', {
203
+ name: 'Width',
204
+ } );
164
205
 
165
- expect( heightInput.value ).toBe( '100' );
166
- expect( widthInput.value ).toBe( '100' );
206
+ expect( heightInput ).toHaveValue( 100 );
207
+ expect( widthInput ).toHaveValue( 100 );
167
208
 
168
- fireEvent.change( widthInput, { target: { value: '' } } );
209
+ await user.clear( widthInput );
169
210
 
170
211
  // onChange is called and sets the dimension to undefined rather than
171
212
  // the empty string.
172
213
  expect( mockOnChange ).toHaveBeenCalledTimes( 1 );
173
- expect( mockOnChange ).toHaveBeenCalledWith( {
214
+ expect( mockOnChange ).toHaveBeenLastCalledWith( {
174
215
  width: undefined,
175
216
  } );
176
217
 
177
218
  // Width is updated to empty value and does not reset to default.
178
- expect( heightInput.value ).toBe( '100' );
179
- expect( widthInput.value ).toBe( '' );
219
+ expect( heightInput ).toHaveValue( 100 );
220
+ expect( widthInput ).toHaveValue( null );
180
221
  } );
181
222
  } );
182
223
 
183
224
  describe( 'reset button', () => {
184
- it( 'resets both height and width to default values', () => {
225
+ it( 'resets both height and width to default values', async () => {
226
+ const user = userEvent.setup();
227
+
185
228
  render(
186
229
  <ImageSizeControl
187
230
  imageHeight="100"
@@ -192,29 +235,35 @@ describe( 'ImageSizeControl', () => {
192
235
  />
193
236
  );
194
237
 
195
- const heightInput = getHeightInput();
196
- const widthInput = getWidthInput();
238
+ const heightInput = screen.getByRole( 'spinbutton', {
239
+ name: 'Height',
240
+ } );
241
+ const widthInput = screen.getByRole( 'spinbutton', {
242
+ name: 'Width',
243
+ } );
197
244
 
198
245
  // The initial dimension values display first.
199
- expect( heightInput.value ).toBe( '300' );
200
- expect( widthInput.value ).toBe( '400' );
246
+ expect( heightInput ).toHaveValue( 300 );
247
+ expect( widthInput ).toHaveValue( 400 );
201
248
 
202
- fireEvent.click( screen.getByText( 'Reset' ) );
249
+ await user.click( screen.getByRole( 'button', { name: 'Reset' } ) );
203
250
 
204
251
  // Both attributes are set to undefined to clear custom values.
205
- expect( mockOnChange ).toHaveBeenCalledWith( {
252
+ expect( mockOnChange ).toHaveBeenLastCalledWith( {
206
253
  height: undefined,
207
254
  width: undefined,
208
255
  } );
209
256
 
210
257
  // The inputs display the default values once more.
211
- expect( heightInput.value ).toBe( '100' );
212
- expect( widthInput.value ).toBe( '200' );
258
+ expect( heightInput ).toHaveValue( 100 );
259
+ expect( widthInput ).toHaveValue( 200 );
213
260
  } );
214
261
  } );
215
262
 
216
263
  describe( 'image size percentage presets', () => {
217
- it( 'updates height and width attributes on selection', () => {
264
+ it( 'updates height and width attributes on selection', async () => {
265
+ const user = userEvent.setup();
266
+
218
267
  render(
219
268
  <ImageSizeControl
220
269
  imageHeight="100"
@@ -223,18 +272,25 @@ describe( 'ImageSizeControl', () => {
223
272
  />
224
273
  );
225
274
 
226
- fireEvent.click( screen.getByText( '50%' ) );
275
+ const button = screen.getByRole( 'button', {
276
+ name: '50%',
277
+ pressed: false,
278
+ } );
279
+
280
+ await user.click( button );
227
281
 
228
- expect( screen.getByText( '50%' ) ).toHaveClass( 'is-pressed' );
282
+ expect( button ).toHaveClass( 'is-pressed' );
229
283
 
230
284
  // Both attributes are set to the rounded scaled value.
231
- expect( mockOnChange ).toHaveBeenCalledWith( {
285
+ expect( mockOnChange ).toHaveBeenLastCalledWith( {
232
286
  height: 50,
233
287
  width: 101,
234
288
  } );
235
289
  } );
236
290
 
237
- it( 'updates height and width inputs on selection', () => {
291
+ it( 'updates height and width inputs on selection', async () => {
292
+ const user = userEvent.setup();
293
+
238
294
  render(
239
295
  <ImageSizeControl
240
296
  imageHeight="100"
@@ -243,11 +299,20 @@ describe( 'ImageSizeControl', () => {
243
299
  />
244
300
  );
245
301
 
246
- fireEvent.click( screen.getByText( '50%' ) );
302
+ const button = screen.getByRole( 'button', {
303
+ name: '50%',
304
+ pressed: false,
305
+ } );
306
+
307
+ await user.click( button );
247
308
 
248
309
  // Both attributes are set to the rounded scaled value.
249
- expect( getHeightInput().value ).toBe( '50' );
250
- expect( getWidthInput().value ).toBe( '101' );
310
+ expect(
311
+ screen.getByRole( 'spinbutton', { name: 'Height' } )
312
+ ).toHaveValue( 50 );
313
+ expect(
314
+ screen.getByRole( 'spinbutton', { name: 'Width' } )
315
+ ).toHaveValue( 101 );
251
316
  } );
252
317
  } );
253
318
 
@@ -268,12 +333,14 @@ describe( 'ImageSizeControl', () => {
268
333
  />
269
334
  );
270
335
 
271
- expect( screen.getByLabelText( 'Image size' ).value ).toBe(
272
- 'medium'
273
- );
336
+ expect(
337
+ screen.getByRole( 'combobox', { name: 'Image size' } )
338
+ ).toHaveValue( 'medium' );
274
339
  } );
275
340
 
276
- it( 'calls onChangeImage with selected slug on selection', () => {
341
+ it( 'calls onChangeImage with selected slug on selection', async () => {
342
+ const user = userEvent.setup();
343
+
277
344
  render(
278
345
  <ImageSizeControl
279
346
  imageSizeOptions={ IMAGE_SIZE_OPTIONS }
@@ -283,12 +350,13 @@ describe( 'ImageSizeControl', () => {
283
350
  />
284
351
  );
285
352
 
286
- fireEvent.change( screen.getByLabelText( 'Image size' ), {
287
- target: { value: 'thumbnail' },
288
- } );
353
+ await user.selectOptions(
354
+ screen.getByRole( 'combobox', { name: 'Image size' } ),
355
+ 'thumbnail'
356
+ );
289
357
 
290
358
  // onChangeImage is called with the slug and the event.
291
- expect( mockOnChangeImage ).toHaveBeenCalledWith(
359
+ expect( mockOnChangeImage ).toHaveBeenLastCalledWith(
292
360
  'thumbnail',
293
361
  expect.any( Object )
294
362
  );
@@ -87,8 +87,10 @@ function UncontrolledInnerBlocks( props ) {
87
87
 
88
88
  const blockType = getBlockType( block.name );
89
89
 
90
- if ( ! blockType || ! blockType.providesContext ) {
91
- return {};
90
+ if (
91
+ Object.keys( blockType?.providesContext ?? {} ).length === 0
92
+ ) {
93
+ return { name: block.name };
92
94
  }
93
95
 
94
96
  return {
@@ -28,8 +28,11 @@ import BlockPatternList from '../block-patterns-list';
28
28
  import PatternsExplorerModal from './block-patterns-explorer/explorer';
29
29
  import MobileTabNavigation from './mobile-tab-navigation';
30
30
 
31
- function usePatternsCategories() {
32
- const [ allPatterns, allCategories ] = usePatternsState();
31
+ function usePatternsCategories( rootClientId ) {
32
+ const [ allPatterns, allCategories ] = usePatternsState(
33
+ undefined,
34
+ rootClientId
35
+ );
33
36
 
34
37
  const hasRegisteredCategory = useCallback(
35
38
  ( pattern ) => {
@@ -128,7 +131,7 @@ export function BlockPatternsCategoryPanel( {
128
131
  rootClientId
129
132
  );
130
133
 
131
- const availableCategories = usePatternsCategories();
134
+ const availableCategories = usePatternsCategories( rootClientId );
132
135
  const currentCategoryPatterns = useMemo(
133
136
  () =>
134
137
  allPatterns.filter( ( pattern ) => {
@@ -184,7 +187,7 @@ function BlockPatternsTabs( {
184
187
  rootClientId,
185
188
  } ) {
186
189
  const [ showPatternsExplorer, setShowPatternsExplorer ] = useState( false );
187
- const categories = usePatternsCategories();
190
+ const categories = usePatternsCategories( rootClientId );
188
191
  const isMobile = useViewportMatch( 'medium', '<' );
189
192
  return (
190
193
  <>
@@ -39,6 +39,7 @@ function useInsertionPoint( {
39
39
  isAppender,
40
40
  onSelect,
41
41
  shouldFocusBlock = true,
42
+ selectBlockOnInsert = true,
42
43
  } ) {
43
44
  const { getSelectedBlock } = useSelect( blockEditorStore );
44
45
  const { destinationRootClientId, destinationIndex } = useSelect(
@@ -108,7 +109,7 @@ function useInsertionPoint( {
108
109
  blocks,
109
110
  destinationIndex,
110
111
  destinationRootClientId,
111
- true,
112
+ selectBlockOnInsert,
112
113
  shouldFocusBlock || shouldForceFocusBlock ? 0 : null,
113
114
  meta
114
115
  );
@@ -122,7 +123,7 @@ function useInsertionPoint( {
122
123
  speak( message );
123
124
 
124
125
  if ( onSelect ) {
125
- onSelect();
126
+ onSelect( blocks );
126
127
  }
127
128
  },
128
129
  [
@@ -143,18 +143,31 @@ class Inserter extends Component {
143
143
  // Feel free to make them stable after a few releases.
144
144
  __experimentalIsQuick: isQuick,
145
145
  prioritizePatterns,
146
+ onSelectOrClose,
147
+ selectBlockOnInsert,
146
148
  } = this.props;
147
149
 
148
150
  if ( isQuick ) {
149
151
  return (
150
152
  <QuickInserter
151
- onSelect={ () => {
153
+ onSelect={ ( blocks ) => {
154
+ const firstBlock =
155
+ Array.isArray( blocks ) && blocks?.length
156
+ ? blocks[ 0 ]
157
+ : blocks;
158
+ if (
159
+ onSelectOrClose &&
160
+ typeof onSelectOrClose === 'function'
161
+ ) {
162
+ onSelectOrClose( firstBlock );
163
+ }
152
164
  onClose();
153
165
  } }
154
166
  rootClientId={ rootClientId }
155
167
  clientId={ clientId }
156
168
  isAppender={ isAppender }
157
169
  prioritizePatterns={ prioritizePatterns }
170
+ selectBlockOnInsert={ selectBlockOnInsert }
158
171
  />
159
172
  );
160
173
  }
@@ -207,48 +220,53 @@ class Inserter extends Component {
207
220
  }
208
221
 
209
222
  export default compose( [
210
- withSelect( ( select, { clientId, rootClientId } ) => {
211
- const {
212
- getBlockRootClientId,
213
- hasInserterItems,
214
- __experimentalGetAllowedBlocks,
215
- __experimentalGetDirectInsertBlock,
216
- getSettings,
217
- } = select( blockEditorStore );
218
-
219
- const { getBlockVariations } = select( blocksStore );
220
-
221
- rootClientId =
222
- rootClientId || getBlockRootClientId( clientId ) || undefined;
223
-
224
- const allowedBlocks = __experimentalGetAllowedBlocks( rootClientId );
225
-
226
- const directInsertBlock =
227
- __experimentalGetDirectInsertBlock( rootClientId );
228
-
229
- const settings = getSettings();
230
-
231
- const hasSingleBlockType =
232
- allowedBlocks?.length === 1 &&
233
- getBlockVariations( allowedBlocks[ 0 ].name, 'inserter' )
234
- ?.length === 0;
235
-
236
- let allowedBlockType = false;
237
- if ( hasSingleBlockType ) {
238
- allowedBlockType = allowedBlocks[ 0 ];
223
+ withSelect(
224
+ ( select, { clientId, rootClientId, shouldDirectInsert = true } ) => {
225
+ const {
226
+ getBlockRootClientId,
227
+ hasInserterItems,
228
+ __experimentalGetAllowedBlocks,
229
+ __experimentalGetDirectInsertBlock,
230
+ getSettings,
231
+ } = select( blockEditorStore );
232
+
233
+ const { getBlockVariations } = select( blocksStore );
234
+
235
+ rootClientId =
236
+ rootClientId || getBlockRootClientId( clientId ) || undefined;
237
+
238
+ const allowedBlocks =
239
+ __experimentalGetAllowedBlocks( rootClientId );
240
+
241
+ const directInsertBlock =
242
+ shouldDirectInsert &&
243
+ __experimentalGetDirectInsertBlock( rootClientId );
244
+
245
+ const settings = getSettings();
246
+
247
+ const hasSingleBlockType =
248
+ allowedBlocks?.length === 1 &&
249
+ getBlockVariations( allowedBlocks[ 0 ].name, 'inserter' )
250
+ ?.length === 0;
251
+
252
+ let allowedBlockType = false;
253
+ if ( hasSingleBlockType ) {
254
+ allowedBlockType = allowedBlocks[ 0 ];
255
+ }
256
+
257
+ return {
258
+ hasItems: hasInserterItems( rootClientId ),
259
+ hasSingleBlockType,
260
+ blockTitle: allowedBlockType ? allowedBlockType.title : '',
261
+ allowedBlockType,
262
+ directInsertBlock,
263
+ rootClientId,
264
+ prioritizePatterns:
265
+ settings.__experimentalPreferPatternsOnRoot &&
266
+ ! rootClientId,
267
+ };
239
268
  }
240
-
241
- return {
242
- hasItems: hasInserterItems( rootClientId ),
243
- hasSingleBlockType,
244
- blockTitle: allowedBlockType ? allowedBlockType.title : '',
245
- allowedBlockType,
246
- directInsertBlock,
247
- rootClientId,
248
- prioritizePatterns:
249
- settings.__experimentalPreferPatternsOnRoot && ! rootClientId,
250
- };
251
- } ),
269
+ ),
252
270
  withDispatch( ( dispatch, ownProps, { select } ) => {
253
271
  return {
254
272
  insertOnlyAllowedBlock() {
@@ -380,7 +398,7 @@ export default compose( [
380
398
 
381
399
  if ( onSelectOrClose ) {
382
400
  onSelectOrClose( {
383
- insertedBlockId: blockToInsert?.clientId,
401
+ clientId: blockToInsert?.clientId,
384
402
  } );
385
403
  }
386
404
 
@@ -66,14 +66,15 @@ export function useMediaCategories( rootClientId ) {
66
66
  per_page: 1,
67
67
  _fields: [ 'id' ],
68
68
  };
69
- const [ image, video, audio ] = await Promise.all( [
69
+ const [ image, video, audio ] = await Promise.allSettled( [
70
70
  fetchMedia( { ...query, media_type: 'image' } ),
71
71
  fetchMedia( { ...query, media_type: 'video' } ),
72
72
  fetchMedia( { ...query, media_type: 'audio' } ),
73
73
  ] );
74
- const showImage = canInsertImage && !! image.length;
75
- const showVideo = canInsertVideo && !! video.length;
76
- const showAudio = canInsertAudio && !! audio.length;
74
+ // The `value` property is only present if the promise's status is "fulfilled".
75
+ const showImage = canInsertImage && !! image.value?.length;
76
+ const showVideo = canInsertVideo && !! video.value?.length;
77
+ const showAudio = canInsertAudio && !! audio.value?.length;
77
78
  setCategories(
78
79
  MEDIA_CATEGORIES.filter(
79
80
  ( { mediaType } ) =>
@@ -67,20 +67,24 @@ function InserterMenu(
67
67
  insertionIndex: __experimentalInsertionIndex,
68
68
  shouldFocusBlock,
69
69
  } );
70
- const { showPatterns, hasReusableBlocks } = useSelect(
70
+ const { showPatterns, inserterItems } = useSelect(
71
71
  ( select ) => {
72
- const { __experimentalGetAllowedPatterns, getSettings } =
72
+ const { __experimentalGetAllowedPatterns, getInserterItems } =
73
73
  select( blockEditorStore );
74
74
  return {
75
75
  showPatterns: !! __experimentalGetAllowedPatterns(
76
76
  destinationRootClientId
77
77
  ).length,
78
- hasReusableBlocks:
79
- !! getSettings().__experimentalReusableBlocks?.length,
78
+ inserterItems: getInserterItems( destinationRootClientId ),
80
79
  };
81
80
  },
82
81
  [ destinationRootClientId ]
83
82
  );
83
+ const hasReusableBlocks = useMemo( () => {
84
+ return inserterItems.some(
85
+ ( { category } ) => category === 'reusable'
86
+ );
87
+ }, [ inserterItems ] );
84
88
 
85
89
  const mediaCategories = useMediaCategories( destinationRootClientId );
86
90
  const showMedia = !! mediaCategories.length;
@@ -31,6 +31,7 @@ export default function QuickInserter( {
31
31
  clientId,
32
32
  isAppender,
33
33
  prioritizePatterns,
34
+ selectBlockOnInsert,
34
35
  } ) {
35
36
  const [ filterValue, setFilterValue ] = useState( '' );
36
37
  const [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {
@@ -38,6 +39,7 @@ export default function QuickInserter( {
38
39
  rootClientId,
39
40
  clientId,
40
41
  isAppender,
42
+ selectBlockOnInsert,
41
43
  } );
42
44
  const [ blockTypes ] = useBlockTypesState(
43
45
  destinationRootClientId,
@@ -121,6 +123,7 @@ export default function QuickInserter( {
121
123
  maxBlockTypes={ SHOWN_BLOCK_TYPES }
122
124
  isDraggable={ false }
123
125
  prioritizePatterns={ prioritizePatterns }
126
+ selectBlockOnInsert={ selectBlockOnInsert }
124
127
  />
125
128
  </div>
126
129