@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
@@ -9,10 +9,13 @@ import clsx from 'clsx';
9
9
  import { speak } from '@wordpress/a11y';
10
10
  import { __, _x, sprintf } from '@wordpress/i18n';
11
11
  import { Dropdown, Button } from '@wordpress/components';
12
- import { Component } from '@wordpress/element';
13
- import { withDispatch, withSelect } from '@wordpress/data';
14
- import { compose, ifCondition } from '@wordpress/compose';
15
- import { createBlock, store as blocksStore } from '@wordpress/blocks';
12
+ import { useDispatch, useSelect } from '@wordpress/data';
13
+ import {
14
+ createBlock,
15
+ store as blocksStore,
16
+ __experimentalGetBlockLabel as getBlockLabel,
17
+ } from '@wordpress/blocks';
18
+ import { forwardRef } from '@wordpress/element';
16
19
  import { plus } from '@wordpress/icons';
17
20
 
18
21
  /**
@@ -23,15 +26,18 @@ import QuickInserter from './quick-inserter';
23
26
  import { store as blockEditorStore } from '../../store';
24
27
  import { getAppenderLabel } from './get-appender-label';
25
28
 
26
- const defaultRenderToggle = ( {
27
- onToggle,
28
- disabled,
29
- isOpen,
30
- blockTitle,
31
- hasSingleBlockType,
32
- appenderLabel,
33
- toggleProps = {},
34
- } ) => {
29
+ const UnforwardedInserterToggle = (
30
+ {
31
+ onToggle,
32
+ disabled,
33
+ isOpen,
34
+ blockTitle,
35
+ hasSingleBlockType,
36
+ appenderLabel,
37
+ toggleProps = {},
38
+ },
39
+ ref
40
+ ) => {
35
41
  const {
36
42
  as: Wrapper = Button,
37
43
  label: labelProp,
@@ -65,6 +71,7 @@ const defaultRenderToggle = ( {
65
71
 
66
72
  return (
67
73
  <Wrapper
74
+ ref={ ref }
68
75
  __next40pxDefaultSize={ toggleProps.as ? undefined : true }
69
76
  icon={ plus }
70
77
  label={ label }
@@ -80,78 +87,236 @@ const defaultRenderToggle = ( {
80
87
  );
81
88
  };
82
89
 
83
- class Inserter extends Component {
84
- constructor() {
85
- super( ...arguments );
90
+ const InserterToggle = forwardRef( UnforwardedInserterToggle );
91
+
92
+ const UnforwardedInserter = (
93
+ {
94
+ clientId,
95
+ rootClientId,
96
+ disabled,
97
+ isAppender,
98
+ position,
99
+ selectBlockOnInsert,
100
+ shouldDirectInsert = true,
101
+ showInserterHelpPanel,
102
+ // This prop is experimental to give some time for the quick inserter to mature
103
+ // Feel free to make them stable after a few releases.
104
+ __experimentalIsQuick: isQuick,
105
+ onSelectOrClose,
106
+ onToggle,
107
+ renderToggle: renderToggleProp,
108
+ toggleProps,
109
+ },
110
+ ref
111
+ ) => {
112
+ const {
113
+ hasItems,
114
+ hasSingleBlockType,
115
+ blockTitle,
116
+ allowedBlockType,
117
+ blockToInsert,
118
+ appenderLabel,
119
+ targetRootClientId,
120
+ } = useSelect(
121
+ ( select ) => {
122
+ const {
123
+ getBlockRootClientId,
124
+ hasInserterItems,
125
+ getAllowedBlocks,
126
+ getDirectInsertBlock,
127
+ getBlockListSettings,
128
+ } = select( blockEditorStore );
129
+ const { getBlockVariations, getBlockType } = select( blocksStore );
86
130
 
87
- this.onToggle = this.onToggle.bind( this );
88
- this.renderToggle = this.renderToggle.bind( this );
89
- this.renderContent = this.renderContent.bind( this );
131
+ const _targetRootClientId =
132
+ rootClientId || getBlockRootClientId( clientId ) || undefined;
133
+
134
+ const allowedBlocks = getAllowedBlocks( _targetRootClientId );
135
+ const directInsertBlock =
136
+ shouldDirectInsert &&
137
+ getDirectInsertBlock( _targetRootClientId );
138
+ const { defaultBlock } =
139
+ getBlockListSettings( _targetRootClientId ) ?? {};
140
+
141
+ const _hasSingleBlockType =
142
+ allowedBlocks?.length === 1 &&
143
+ getBlockVariations( allowedBlocks[ 0 ].name, 'inserter' )
144
+ ?.length === 0;
145
+ const _allowedBlockType = _hasSingleBlockType
146
+ ? allowedBlocks[ 0 ]
147
+ : null;
148
+
149
+ // Single-block-type parents get adjacent-attribute copying
150
+ // without needing to set `directInsert: true`.
151
+ let _blockToInsert = directInsertBlock || null;
152
+ if (
153
+ ! _blockToInsert &&
154
+ _hasSingleBlockType &&
155
+ defaultBlock?.name === _allowedBlockType.name
156
+ ) {
157
+ _blockToInsert = defaultBlock;
158
+ }
159
+
160
+ const defaultBlockType = directInsertBlock
161
+ ? getBlockType( directInsertBlock.name )
162
+ : null;
163
+ return {
164
+ hasItems: hasInserterItems( _targetRootClientId ),
165
+ hasSingleBlockType: _hasSingleBlockType,
166
+ blockTitle: _allowedBlockType ? _allowedBlockType.title : '',
167
+ allowedBlockType: _allowedBlockType,
168
+ blockToInsert: _blockToInsert,
169
+ appenderLabel: getAppenderLabel(
170
+ directInsertBlock,
171
+ defaultBlockType
172
+ ),
173
+ targetRootClientId: _targetRootClientId,
174
+ };
175
+ },
176
+ [ rootClientId, clientId, shouldDirectInsert ]
177
+ );
178
+
179
+ const { insertBlock } = useDispatch( blockEditorStore );
180
+ const {
181
+ getBlock,
182
+ getBlockIndex,
183
+ getBlockOrder,
184
+ getBlockRootClientId,
185
+ getBlockSelectionEnd,
186
+ getPreviousBlockClientId,
187
+ } = useSelect( blockEditorStore );
188
+ const { getActiveBlockVariation, getBlockType } = useSelect( blocksStore );
189
+
190
+ // The global inserter (no isAppender, no rootClientId, no clientId) should
191
+ // always render, even with no items.
192
+ if ( ! hasItems && ( isAppender || targetRootClientId || clientId ) ) {
193
+ return null;
90
194
  }
91
195
 
92
- onToggle( isOpen ) {
93
- const { onToggle } = this.props;
196
+ function insertOnlyAllowedBlock() {
197
+ const blockName = blockToInsert?.name ?? allowedBlockType.name;
94
198
 
95
- // Surface toggle callback to parent component.
96
- if ( onToggle ) {
97
- onToggle( isOpen );
199
+ function getAdjacentBlockAttributes( attributesToCopy ) {
200
+ if ( ! attributesToCopy?.length ) {
201
+ return {};
202
+ }
203
+
204
+ // Find the adjacent block of the same type whose attributes
205
+ // should be copied: previous sibling when inserting next to
206
+ // an existing block, otherwise the last child of the root.
207
+ let adjacentAttributes;
208
+ if ( clientId ) {
209
+ const currentBlock = getBlock( clientId );
210
+ const previousBlock = getBlock(
211
+ getPreviousBlockClientId( clientId )
212
+ );
213
+ if ( currentBlock?.name === previousBlock?.name ) {
214
+ adjacentAttributes = previousBlock?.attributes;
215
+ }
216
+ } else if ( targetRootClientId ) {
217
+ const lastInnerBlock =
218
+ getBlock( targetRootClientId )?.innerBlocks?.at( -1 );
219
+ if ( lastInnerBlock?.name === blockName ) {
220
+ adjacentAttributes = lastInnerBlock.attributes;
221
+ }
222
+ }
223
+
224
+ if ( ! adjacentAttributes ) {
225
+ return {};
226
+ }
227
+
228
+ return Object.fromEntries(
229
+ attributesToCopy
230
+ .filter( ( attr ) => attr in adjacentAttributes )
231
+ .map( ( attr ) => [ attr, adjacentAttributes[ attr ] ] )
232
+ );
98
233
  }
99
- }
100
234
 
101
- /**
102
- * Render callback to display Dropdown toggle element.
103
- *
104
- * @param {Object} options
105
- * @param {Function} options.onToggle Callback to invoke when toggle is
106
- * pressed.
107
- * @param {boolean} options.isOpen Whether dropdown is currently open.
108
- *
109
- * @return {Element} Dropdown toggle element.
110
- */
111
- renderToggle( { onToggle, isOpen } ) {
112
- const {
113
- disabled,
114
- blockTitle,
115
- hasSingleBlockType,
116
- appenderLabel,
117
- toggleProps,
118
- hasItems,
119
- renderToggle = defaultRenderToggle,
120
- } = this.props;
235
+ function getInsertionIndex() {
236
+ // If the clientId is defined, we insert at the position of the block.
237
+ if ( clientId ) {
238
+ return getBlockIndex( clientId );
239
+ }
240
+
241
+ // If there a selected block, we insert after the selected block.
242
+ const end = getBlockSelectionEnd();
243
+ if (
244
+ ! isAppender &&
245
+ end &&
246
+ getBlockRootClientId( end ) === targetRootClientId
247
+ ) {
248
+ return getBlockIndex( end ) + 1;
249
+ }
121
250
 
122
- return renderToggle( {
123
- onToggle,
251
+ // Otherwise, we insert at the end of the current rootClientId.
252
+ return getBlockOrder( targetRootClientId ).length;
253
+ }
254
+
255
+ // Attempt to augment the inserted block with attributes from an adjacent block.
256
+ // This ensures styling from nearby blocks is preserved in the newly inserted block.
257
+ // See: https://github.com/WordPress/gutenberg/issues/37904
258
+ const newAttributes = getAdjacentBlockAttributes(
259
+ blockToInsert?.attributesToCopy
260
+ );
261
+
262
+ const newBlock = createBlock( blockName, {
263
+ ...blockToInsert?.attributes,
264
+ ...newAttributes,
265
+ } );
266
+
267
+ insertBlock(
268
+ newBlock,
269
+ getInsertionIndex(),
270
+ targetRootClientId,
271
+ selectBlockOnInsert
272
+ );
273
+
274
+ onSelectOrClose?.( newBlock );
275
+
276
+ const blockTypeToInsert = getBlockType( blockName );
277
+ let blockLabelToInsert;
278
+ if ( blockTypeToInsert ) {
279
+ blockLabelToInsert = getBlockLabel(
280
+ blockTypeToInsert,
281
+ newBlock.attributes
282
+ );
283
+
284
+ if ( blockLabelToInsert === blockTypeToInsert.title ) {
285
+ blockLabelToInsert =
286
+ getActiveBlockVariation( blockName, newBlock.attributes )
287
+ ?.title || blockLabelToInsert;
288
+ }
289
+ }
290
+
291
+ if ( blockLabelToInsert ) {
292
+ const message = sprintf(
293
+ // translators: %s: the name of the block that has been added
294
+ __( '%s block added' ),
295
+ blockLabelToInsert
296
+ );
297
+ speak( message );
298
+ }
299
+ }
300
+
301
+ function renderToggle( { onToggle: dropdownOnToggle, isOpen } ) {
302
+ const toggleArgs = {
303
+ onToggle: dropdownOnToggle,
124
304
  isOpen,
125
305
  disabled: disabled || ! hasItems,
126
306
  blockTitle,
127
307
  hasSingleBlockType,
128
308
  appenderLabel,
129
309
  toggleProps,
130
- } );
131
- }
310
+ };
311
+
312
+ if ( renderToggleProp ) {
313
+ return renderToggleProp( toggleArgs );
314
+ }
132
315
 
133
- /**
134
- * Render callback to display Dropdown content element.
135
- *
136
- * @param {Object} options
137
- * @param {Function} options.onClose Callback to invoke when dropdown is
138
- * closed.
139
- *
140
- * @return {Element} Dropdown content element.
141
- */
142
- renderContent( { onClose } ) {
143
- const {
144
- rootClientId,
145
- clientId,
146
- isAppender,
147
- showInserterHelpPanel,
148
- // This prop is experimental to give some time for the quick inserter to mature
149
- // Feel free to make them stable after a few releases.
150
- __experimentalIsQuick: isQuick,
151
- onSelectOrClose,
152
- selectBlockOnInsert,
153
- } = this.props;
316
+ return <InserterToggle ref={ ref } { ...toggleArgs } />;
317
+ }
154
318
 
319
+ function renderContent( { onClose } ) {
155
320
  if ( isQuick ) {
156
321
  return (
157
322
  <QuickInserter
@@ -168,7 +333,7 @@ class Inserter extends Component {
168
333
  }
169
334
  onClose();
170
335
  } }
171
- rootClientId={ rootClientId }
336
+ rootClientId={ targetRootClientId }
172
337
  clientId={ clientId }
173
338
  isAppender={ isAppender }
174
339
  selectBlockOnInsert={ selectBlockOnInsert }
@@ -182,7 +347,7 @@ class Inserter extends Component {
182
347
  onClose();
183
348
  } }
184
349
  onClose={ onClose }
185
- rootClientId={ rootClientId }
350
+ rootClientId={ targetRootClientId }
186
351
  clientId={ clientId }
187
352
  isAppender={ isAppender }
188
353
  showInserterHelpPanel={ showInserterHelpPanel }
@@ -190,223 +355,27 @@ class Inserter extends Component {
190
355
  );
191
356
  }
192
357
 
193
- render() {
194
- const {
195
- position,
196
- hasSingleBlockType,
197
- blockToInsert,
198
- insertOnlyAllowedBlock,
199
- __experimentalIsQuick: isQuick,
200
- onSelectOrClose,
201
- } = this.props;
202
-
203
- if ( hasSingleBlockType || blockToInsert ) {
204
- return this.renderToggle( { onToggle: insertOnlyAllowedBlock } );
205
- }
206
-
207
- return (
208
- <Dropdown
209
- className="block-editor-inserter"
210
- contentClassName={ clsx( 'block-editor-inserter__popover', {
211
- 'is-quick': isQuick,
212
- } ) }
213
- popoverProps={ { position, shift: true } }
214
- onToggle={ this.onToggle }
215
- expandOnMobile
216
- headerTitle={ __( 'Add a block' ) }
217
- renderToggle={ this.renderToggle }
218
- renderContent={ this.renderContent }
219
- onClose={ onSelectOrClose }
220
- />
221
- );
358
+ if ( hasSingleBlockType || blockToInsert ) {
359
+ return renderToggle( { onToggle: insertOnlyAllowedBlock } );
222
360
  }
223
- }
224
-
225
- export default compose( [
226
- withSelect(
227
- ( select, { clientId, rootClientId, shouldDirectInsert = true } ) => {
228
- const {
229
- getBlockRootClientId,
230
- hasInserterItems,
231
- getAllowedBlocks,
232
- getDirectInsertBlock,
233
- getBlockListSettings,
234
- } = select( blockEditorStore );
235
- const { getBlockVariations, getBlockType } = select( blocksStore );
236
-
237
- rootClientId =
238
- rootClientId || getBlockRootClientId( clientId ) || undefined;
239
-
240
- const allowedBlocks = getAllowedBlocks( rootClientId );
241
- const directInsertBlock =
242
- shouldDirectInsert && getDirectInsertBlock( rootClientId );
243
- const { defaultBlock } = getBlockListSettings( rootClientId ) ?? {};
244
-
245
- const hasSingleBlockType =
246
- allowedBlocks?.length === 1 &&
247
- getBlockVariations( allowedBlocks[ 0 ].name, 'inserter' )
248
- ?.length === 0;
249
- const allowedBlockType = hasSingleBlockType
250
- ? allowedBlocks[ 0 ]
251
- : null;
252
361
 
253
- // Single-block-type parents get adjacent-attribute copying
254
- // without needing to set `directInsert: true`.
255
- let blockToInsert = directInsertBlock || null;
256
- if (
257
- ! blockToInsert &&
258
- hasSingleBlockType &&
259
- defaultBlock?.name === allowedBlockType.name
260
- ) {
261
- blockToInsert = defaultBlock;
262
- }
263
-
264
- const defaultBlockType = directInsertBlock
265
- ? getBlockType( directInsertBlock.name )
266
- : null;
267
- const appenderLabel = getAppenderLabel(
268
- directInsertBlock,
269
- defaultBlockType
270
- );
271
-
272
- return {
273
- hasItems: hasInserterItems( rootClientId ),
274
- hasSingleBlockType,
275
- blockTitle: allowedBlockType ? allowedBlockType.title : '',
276
- allowedBlockType,
277
- blockToInsert,
278
- appenderLabel,
279
- rootClientId,
280
- };
281
- }
282
- ),
283
- withDispatch( ( dispatch, ownProps, { select } ) => {
284
- return {
285
- insertOnlyAllowedBlock() {
286
- const {
287
- rootClientId,
288
- clientId,
289
- isAppender,
290
- hasSingleBlockType,
291
- allowedBlockType,
292
- blockToInsert,
293
- onSelectOrClose,
294
- selectBlockOnInsert,
295
- } = ownProps;
296
-
297
- if ( ! hasSingleBlockType && ! blockToInsert ) {
298
- return;
299
- }
300
-
301
- const blockName = blockToInsert?.name ?? allowedBlockType.name;
302
-
303
- function getAdjacentBlockAttributes( attributesToCopy ) {
304
- if ( ! attributesToCopy?.length ) {
305
- return {};
306
- }
307
-
308
- const { getBlock, getPreviousBlockClientId } =
309
- select( blockEditorStore );
310
-
311
- // Find the adjacent block of the same type whose attributes
312
- // should be copied: previous sibling when inserting next to
313
- // an existing block, otherwise the last child of the root.
314
- let adjacentAttributes;
315
- if ( clientId ) {
316
- const currentBlock = getBlock( clientId );
317
- const previousBlock = getBlock(
318
- getPreviousBlockClientId( clientId )
319
- );
320
- if ( currentBlock?.name === previousBlock?.name ) {
321
- adjacentAttributes = previousBlock?.attributes;
322
- }
323
- } else if ( rootClientId ) {
324
- const lastInnerBlock =
325
- getBlock( rootClientId )?.innerBlocks?.at( -1 );
326
- if ( lastInnerBlock?.name === blockName ) {
327
- adjacentAttributes = lastInnerBlock.attributes;
328
- }
329
- }
330
-
331
- if ( ! adjacentAttributes ) {
332
- return {};
333
- }
334
-
335
- return Object.fromEntries(
336
- attributesToCopy
337
- .filter( ( attr ) => attr in adjacentAttributes )
338
- .map( ( attr ) => [
339
- attr,
340
- adjacentAttributes[ attr ],
341
- ] )
342
- );
343
- }
344
-
345
- function getInsertionIndex() {
346
- const {
347
- getBlockIndex,
348
- getBlockSelectionEnd,
349
- getBlockOrder,
350
- getBlockRootClientId,
351
- } = select( blockEditorStore );
352
-
353
- // If the clientId is defined, we insert at the position of the block.
354
- if ( clientId ) {
355
- return getBlockIndex( clientId );
356
- }
357
-
358
- // If there a selected block, we insert after the selected block.
359
- const end = getBlockSelectionEnd();
360
- if (
361
- ! isAppender &&
362
- end &&
363
- getBlockRootClientId( end ) === rootClientId
364
- ) {
365
- return getBlockIndex( end ) + 1;
366
- }
367
-
368
- // Otherwise, we insert at the end of the current rootClientId.
369
- return getBlockOrder( rootClientId ).length;
370
- }
371
-
372
- const { insertBlock } = dispatch( blockEditorStore );
373
-
374
- // Attempt to augment the inserted block with attributes from an adjacent block.
375
- // This ensures styling from nearby blocks is preserved in the newly inserted block.
376
- // See: https://github.com/WordPress/gutenberg/issues/37904
377
- const newAttributes = getAdjacentBlockAttributes(
378
- blockToInsert?.attributesToCopy
379
- );
380
-
381
- const newBlock = createBlock( blockName, {
382
- ...( blockToInsert?.attributes || {} ),
383
- ...newAttributes,
384
- } );
385
-
386
- insertBlock(
387
- newBlock,
388
- getInsertionIndex(),
389
- rootClientId,
390
- selectBlockOnInsert
391
- );
362
+ return (
363
+ <Dropdown
364
+ className="block-editor-inserter"
365
+ contentClassName={ clsx( 'block-editor-inserter__popover', {
366
+ 'is-quick': isQuick,
367
+ } ) }
368
+ popoverProps={ { position, shift: true } }
369
+ onToggle={ onToggle }
370
+ expandOnMobile
371
+ headerTitle={ __( 'Add a block' ) }
372
+ renderToggle={ renderToggle }
373
+ renderContent={ renderContent }
374
+ onClose={ onSelectOrClose }
375
+ />
376
+ );
377
+ };
392
378
 
393
- if ( onSelectOrClose ) {
394
- onSelectOrClose( newBlock );
395
- }
379
+ const Inserter = forwardRef( UnforwardedInserter );
396
380
 
397
- const message = sprintf(
398
- // translators: %s: the name of the block that has been added
399
- __( '%s block added' ),
400
- allowedBlockType.title
401
- );
402
- speak( message );
403
- },
404
- };
405
- } ),
406
- // The global inserter should always be visible, we are using ( ! isAppender && ! rootClientId && ! clientId ) as
407
- // a way to detect the global Inserter.
408
- ifCondition(
409
- ( { hasItems, isAppender, rootClientId, clientId } ) =>
410
- hasItems || ( ! isAppender && ! rootClientId && ! clientId )
411
- ),
412
- ] )( Inserter );
381
+ export default Inserter;
@@ -27,7 +27,6 @@ import { store as noticesStore } from '@wordpress/notices';
27
27
  import { isBlobURL } from '@wordpress/blob';
28
28
  import { getFilename } from '@wordpress/url';
29
29
 
30
- // eslint-disable-next-line @wordpress/use-recommended-components -- `Tooltip` is not yet on the recommended `@wordpress/ui` allow-list; landing as a migration step ahead of the wider rollout.
31
30
  import { Tooltip } from '@wordpress/ui';
32
31
 
33
32
  /**
@@ -181,9 +181,7 @@ function InserterSearchResults( {
181
181
 
182
182
  const patternsUI = !! filteredBlockPatterns.length && (
183
183
  <InserterPanel
184
- title={
185
- <VisuallyHidden>{ __( 'Block patterns' ) }</VisuallyHidden>
186
- }
184
+ title={ <VisuallyHidden>{ __( 'Patterns' ) }</VisuallyHidden> }
187
185
  >
188
186
  <div className="block-editor-inserter__quick-inserter-patterns">
189
187
  <BlockPatternsList
@@ -26,7 +26,6 @@ import {
26
26
  import { ListViewContentFill } from './list-view-content-popover';
27
27
 
28
28
  const PATTERN_EDITING_GROUPS = [ 'content', 'list' ];
29
- const TEMPLATE_PART_GROUPS = [ 'default', 'settings', 'advanced' ];
30
29
 
31
30
  export default function InspectorControlsFill( {
32
31
  children,
@@ -56,17 +55,16 @@ export default function InspectorControlsFill( {
56
55
 
57
56
  // During pattern editing:
58
57
  // - All blocks can show pattern editing groups (content, list).
59
- // - Template parts can show a settings tab (default, settings, advanced groups).
58
+ // - Template parts can show any inspector group.
60
59
  // - Other blocks cannot show a settings tab.
61
60
  if ( context[ mayDisplayPatternEditingControlsKey ] ) {
62
- // Template parts are allowed to show a settings tab to allow access to the
63
- // 'Design' and 'Advanced' panels.
61
+ // Template parts have also historically supported
62
+ // any block inspector groups for extenders. The settings
63
+ // tab is also used by core for the 'Design' panel. Specifically
64
+ // for that block the restrictions on allowed groups are lessened.
64
65
  const isTemplatePart = context.name === 'core/template-part';
65
- const isTemplatePartGroup = TEMPLATE_PART_GROUPS.includes( group );
66
66
  const isPatternEditingGroup = PATTERN_EDITING_GROUPS.includes( group );
67
-
68
- const canShowGroup =
69
- ( isTemplatePart && isTemplatePartGroup ) || isPatternEditingGroup;
67
+ const canShowGroup = isTemplatePart || isPatternEditingGroup;
70
68
 
71
69
  if ( ! canShowGroup ) {
72
70
  return null;
@@ -9,7 +9,6 @@ import { useEffect, useState, useRef } from '@wordpress/element';
9
9
  import { store as preferencesStore } from '@wordpress/preferences';
10
10
  import { useSelect, useDispatch } from '@wordpress/data';
11
11
 
12
- // eslint-disable-next-line @wordpress/use-recommended-components -- `Tooltip` is not yet on the recommended `@wordpress/ui` allow-list; landing as a migration step ahead of the wider rollout.
13
12
  import { Tooltip } from '@wordpress/ui';
14
13
 
15
14
  /**
@@ -79,7 +79,11 @@ const StylesTab = ( {
79
79
  contentClientIds={ contentClientIds }
80
80
  />
81
81
  ) }
82
- { ! isSectionBlock && (
82
+ {
83
+ // Extenders have in the past always been allowed to add controls to group
84
+ // the restrictions are lessened for that block.
85
+ }
86
+ { ( ! isSectionBlock || blockName === 'core/template-part' ) && (
83
87
  <>
84
88
  <InspectorControls.Slot
85
89
  group="color"
@@ -27,7 +27,7 @@ const MyJustifyToolbar = ( { attributes, setAttributes } ) => (
27
27
  );
28
28
  ```
29
29
 
30
- **NOTE:** The justfify toolbar does not add any classes to your component, you must do this using the `setAttributes` function. The toolbar does define the following classnames you should use:
30
+ **NOTE:** The justify toolbar does not add any classes to your component, you must do this using the `setAttributes` function. The toolbar does define the following classnames you should use:
31
31
 
32
32
  items-justified-left
33
33
  items-justified-center