@wordpress/block-editor 15.22.1 → 16.0.1-next.v.202607070741.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 (379) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/build/autocompleters/block.cjs +10 -2
  3. package/build/autocompleters/block.cjs.map +2 -2
  4. package/build/components/background-image-control/index.cjs +0 -2
  5. package/build/components/background-image-control/index.cjs.map +2 -2
  6. package/build/components/block-inspector/edit-contents.cjs +3 -0
  7. package/build/components/block-inspector/edit-contents.cjs.map +3 -3
  8. package/build/components/block-inspector/index.cjs +18 -36
  9. package/build/components/block-inspector/index.cjs.map +2 -2
  10. package/build/components/block-list/block-invalid-warning.cjs +8 -19
  11. package/build/components/block-list/block-invalid-warning.cjs.map +2 -2
  12. package/build/components/block-styles/use-styles-for-block.cjs +2 -1
  13. package/build/components/block-styles/use-styles-for-block.cjs.map +2 -2
  14. package/build/components/block-title/use-block-display-title.cjs +7 -2
  15. package/build/components/block-title/use-block-display-title.cjs.map +2 -2
  16. package/build/components/block-toolbar/block-toolbar-icon.cjs +10 -14
  17. package/build/components/block-toolbar/block-toolbar-icon.cjs.map +2 -2
  18. package/build/components/block-variation-transforms/index.cjs +0 -1
  19. package/build/components/block-variation-transforms/index.cjs.map +2 -2
  20. package/build/components/child-layout-control/index.cjs +0 -2
  21. package/build/components/child-layout-control/index.cjs.map +2 -2
  22. package/build/components/colors-gradients/control.cjs +5 -5
  23. package/build/components/colors-gradients/control.cjs.map +2 -2
  24. package/build/components/date-format-picker/index.cjs +0 -1
  25. package/build/components/date-format-picker/index.cjs.map +2 -2
  26. package/build/components/dimensions-tool/aspect-ratio-tool.cjs +1 -2
  27. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +2 -2
  28. package/build/components/dimensions-tool/scale-tool.cjs +0 -1
  29. package/build/components/dimensions-tool/scale-tool.cjs.map +2 -2
  30. package/build/components/dimensions-tool/width-height-tool.cjs +2 -4
  31. package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
  32. package/build/components/font-appearance-control/index.cjs +6 -25
  33. package/build/components/font-appearance-control/index.cjs.map +3 -3
  34. package/build/components/font-family/index.cjs +6 -15
  35. package/build/components/font-family/index.cjs.map +3 -3
  36. package/build/components/font-sizes/font-size-picker.cjs +1 -2
  37. package/build/components/font-sizes/font-size-picker.cjs.map +2 -2
  38. package/build/components/global-styles/border-panel.cjs +0 -1
  39. package/build/components/global-styles/border-panel.cjs.map +2 -2
  40. package/build/components/global-styles/dimensions-panel.cjs +0 -3
  41. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  42. package/build/components/global-styles/typography-panel.cjs +4 -10
  43. package/build/components/global-styles/typography-panel.cjs.map +2 -2
  44. package/build/components/height-control/index.cjs +0 -2
  45. package/build/components/height-control/index.cjs.map +2 -2
  46. package/build/components/html-element-control/index.cjs +0 -1
  47. package/build/components/html-element-control/index.cjs.map +2 -2
  48. package/build/components/image-editor/index.cjs +5 -0
  49. package/build/components/image-editor/index.cjs.map +3 -3
  50. package/build/components/image-editor/zoom-dropdown.cjs +0 -1
  51. package/build/components/image-editor/zoom-dropdown.cjs.map +2 -2
  52. package/build/components/image-size-control/index.cjs +1 -3
  53. package/build/components/image-size-control/index.cjs.map +2 -2
  54. package/build/components/inner-content/index.cjs +107 -0
  55. package/build/components/inner-content/index.cjs.map +7 -0
  56. package/build/components/inserter/hooks/use-block-types-state.cjs +10 -2
  57. package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
  58. package/build/components/inserter/media-tab/hooks.cjs +34 -6
  59. package/build/components/inserter/media-tab/hooks.cjs.map +2 -2
  60. package/build/components/inserter/media-tab/media-list.cjs +3 -1
  61. package/build/components/inserter/media-tab/media-list.cjs.map +2 -2
  62. package/build/components/inserter/media-tab/media-panel.cjs +224 -27
  63. package/build/components/inserter/media-tab/media-panel.cjs.map +3 -3
  64. package/build/components/inserter/media-tab/media-preview.cjs +32 -17
  65. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  66. package/build/components/inserter/media-tab/media-tab.cjs +26 -6
  67. package/build/components/inserter/media-tab/media-tab.cjs.map +2 -2
  68. package/build/components/inserter/mobile-tab-navigation.cjs +6 -1
  69. package/build/components/inserter/mobile-tab-navigation.cjs.map +2 -2
  70. package/build/components/inserter/no-results.cjs +2 -2
  71. package/build/components/inserter/no-results.cjs.map +2 -2
  72. package/build/components/inserter/preview-panel.cjs +2 -1
  73. package/build/components/inserter/preview-panel.cjs.map +2 -2
  74. package/build/components/inserter-list-item/index.cjs +8 -2
  75. package/build/components/inserter-list-item/index.cjs.map +2 -2
  76. package/build/components/letter-spacing-control/index.cjs +0 -24
  77. package/build/components/letter-spacing-control/index.cjs.map +3 -3
  78. package/build/components/line-height-control/index.cjs +7 -22
  79. package/build/components/line-height-control/index.cjs.map +3 -3
  80. package/build/components/list-view/block-select-button.cjs +90 -84
  81. package/build/components/list-view/block-select-button.cjs.map +2 -2
  82. package/build/components/list-view/block.cjs +51 -20
  83. package/build/components/list-view/block.cjs.map +2 -2
  84. package/build/components/list-view/expander.cjs +1 -1
  85. package/build/components/list-view/expander.cjs.map +2 -2
  86. package/build/components/list-view/use-list-view-client-ids.cjs +2 -2
  87. package/build/components/list-view/use-list-view-client-ids.cjs.map +2 -2
  88. package/build/components/observe-typing/index.cjs +4 -3
  89. package/build/components/observe-typing/index.cjs.map +2 -2
  90. package/build/components/preset-input-control/custom-value-controls.cjs +1 -3
  91. package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
  92. package/build/components/preset-input-control/index.cjs +1 -3
  93. package/build/components/preset-input-control/index.cjs.map +2 -2
  94. package/build/components/resolution-tool/index.cjs +1 -2
  95. package/build/components/resolution-tool/index.cjs.map +2 -2
  96. package/build/components/text-alignment-control/index.cjs +0 -1
  97. package/build/components/text-alignment-control/index.cjs.map +2 -2
  98. package/build/components/text-decoration-control/index.cjs +0 -1
  99. package/build/components/text-decoration-control/index.cjs.map +2 -2
  100. package/build/components/text-indent-control/index.cjs +0 -8
  101. package/build/components/text-indent-control/index.cjs.map +2 -2
  102. package/build/components/text-transform-control/index.cjs +0 -1
  103. package/build/components/text-transform-control/index.cjs.map +2 -2
  104. package/build/components/use-block-display-information/index.cjs +10 -8
  105. package/build/components/use-block-display-information/index.cjs.map +2 -2
  106. package/build/components/use-on-block-drop/index.cjs +3 -7
  107. package/build/components/use-on-block-drop/index.cjs.map +2 -2
  108. package/build/components/use-resize-canvas/index.cjs +16 -53
  109. package/build/components/use-resize-canvas/index.cjs.map +3 -3
  110. package/build/components/writing-mode-control/index.cjs +0 -1
  111. package/build/components/writing-mode-control/index.cjs.map +2 -2
  112. package/build/hooks/font-size.cjs +1 -2
  113. package/build/hooks/font-size.cjs.map +2 -2
  114. package/build/hooks/layout.cjs +5 -3
  115. package/build/hooks/layout.cjs.map +2 -2
  116. package/build/hooks/position.cjs +36 -16
  117. package/build/hooks/position.cjs.map +2 -2
  118. package/build/hooks/states.cjs +10 -21
  119. package/build/hooks/states.cjs.map +2 -2
  120. package/build/layouts/constrained.cjs +21 -21
  121. package/build/layouts/constrained.cjs.map +2 -2
  122. package/build/layouts/flex.cjs +0 -3
  123. package/build/layouts/flex.cjs.map +2 -2
  124. package/build/layouts/grid.cjs +51 -9
  125. package/build/layouts/grid.cjs.map +2 -2
  126. package/build/private-apis.cjs +4 -2
  127. package/build/private-apis.cjs.map +3 -3
  128. package/build/store/actions.cjs.map +2 -2
  129. package/build/store/private-actions.cjs +16 -0
  130. package/build/store/private-actions.cjs.map +2 -2
  131. package/build/store/private-keys.cjs +3 -3
  132. package/build/store/private-keys.cjs.map +2 -2
  133. package/build/store/private-selectors.cjs +96 -10
  134. package/build/store/private-selectors.cjs.map +2 -2
  135. package/build/store/reducer.cjs +19 -3
  136. package/build/store/reducer.cjs.map +2 -2
  137. package/build/store/selectors.cjs +13 -0
  138. package/build/store/selectors.cjs.map +2 -2
  139. package/build-module/autocompleters/block.mjs +10 -2
  140. package/build-module/autocompleters/block.mjs.map +2 -2
  141. package/build-module/components/background-image-control/index.mjs +0 -2
  142. package/build-module/components/background-image-control/index.mjs.map +2 -2
  143. package/build-module/components/block-inspector/edit-contents.mjs +4 -1
  144. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  145. package/build-module/components/block-inspector/index.mjs +18 -36
  146. package/build-module/components/block-inspector/index.mjs.map +2 -2
  147. package/build-module/components/block-list/block-invalid-warning.mjs +8 -19
  148. package/build-module/components/block-list/block-invalid-warning.mjs.map +2 -2
  149. package/build-module/components/block-styles/use-styles-for-block.mjs +2 -1
  150. package/build-module/components/block-styles/use-styles-for-block.mjs.map +2 -2
  151. package/build-module/components/block-title/use-block-display-title.mjs +7 -2
  152. package/build-module/components/block-title/use-block-display-title.mjs.map +2 -2
  153. package/build-module/components/block-toolbar/block-toolbar-icon.mjs +10 -14
  154. package/build-module/components/block-toolbar/block-toolbar-icon.mjs.map +2 -2
  155. package/build-module/components/block-variation-transforms/index.mjs +0 -1
  156. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  157. package/build-module/components/child-layout-control/index.mjs +0 -2
  158. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  159. package/build-module/components/colors-gradients/control.mjs +5 -5
  160. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  161. package/build-module/components/date-format-picker/index.mjs +0 -1
  162. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  163. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +1 -2
  164. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  165. package/build-module/components/dimensions-tool/scale-tool.mjs +0 -1
  166. package/build-module/components/dimensions-tool/scale-tool.mjs.map +2 -2
  167. package/build-module/components/dimensions-tool/width-height-tool.mjs +2 -4
  168. package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
  169. package/build-module/components/font-appearance-control/index.mjs +6 -15
  170. package/build-module/components/font-appearance-control/index.mjs.map +2 -2
  171. package/build-module/components/font-family/index.mjs +6 -15
  172. package/build-module/components/font-family/index.mjs.map +2 -2
  173. package/build-module/components/font-sizes/font-size-picker.mjs +1 -2
  174. package/build-module/components/font-sizes/font-size-picker.mjs.map +2 -2
  175. package/build-module/components/global-styles/border-panel.mjs +0 -1
  176. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  177. package/build-module/components/global-styles/dimensions-panel.mjs +0 -3
  178. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  179. package/build-module/components/global-styles/typography-panel.mjs +4 -10
  180. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  181. package/build-module/components/height-control/index.mjs +0 -2
  182. package/build-module/components/height-control/index.mjs.map +2 -2
  183. package/build-module/components/html-element-control/index.mjs +0 -1
  184. package/build-module/components/html-element-control/index.mjs.map +2 -2
  185. package/build-module/components/image-editor/index.mjs +5 -0
  186. package/build-module/components/image-editor/index.mjs.map +2 -2
  187. package/build-module/components/image-editor/zoom-dropdown.mjs +0 -1
  188. package/build-module/components/image-editor/zoom-dropdown.mjs.map +2 -2
  189. package/build-module/components/image-size-control/index.mjs +1 -3
  190. package/build-module/components/image-size-control/index.mjs.map +2 -2
  191. package/build-module/components/inner-content/index.mjs +82 -0
  192. package/build-module/components/inner-content/index.mjs.map +7 -0
  193. package/build-module/components/inserter/hooks/use-block-types-state.mjs +10 -2
  194. package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
  195. package/build-module/components/inserter/media-tab/hooks.mjs +33 -6
  196. package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
  197. package/build-module/components/inserter/media-tab/media-list.mjs +3 -1
  198. package/build-module/components/inserter/media-tab/media-list.mjs.map +2 -2
  199. package/build-module/components/inserter/media-tab/media-panel.mjs +227 -30
  200. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  201. package/build-module/components/inserter/media-tab/media-preview.mjs +33 -18
  202. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  203. package/build-module/components/inserter/media-tab/media-tab.mjs +27 -7
  204. package/build-module/components/inserter/media-tab/media-tab.mjs.map +2 -2
  205. package/build-module/components/inserter/mobile-tab-navigation.mjs +6 -1
  206. package/build-module/components/inserter/mobile-tab-navigation.mjs.map +2 -2
  207. package/build-module/components/inserter/no-results.mjs +2 -2
  208. package/build-module/components/inserter/no-results.mjs.map +2 -2
  209. package/build-module/components/inserter/preview-panel.mjs +2 -1
  210. package/build-module/components/inserter/preview-panel.mjs.map +2 -2
  211. package/build-module/components/inserter-list-item/index.mjs +8 -2
  212. package/build-module/components/inserter-list-item/index.mjs.map +2 -2
  213. package/build-module/components/letter-spacing-control/index.mjs +0 -14
  214. package/build-module/components/letter-spacing-control/index.mjs.map +2 -2
  215. package/build-module/components/line-height-control/index.mjs +7 -12
  216. package/build-module/components/line-height-control/index.mjs.map +2 -2
  217. package/build-module/components/list-view/block-select-button.mjs +90 -84
  218. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  219. package/build-module/components/list-view/block.mjs +51 -20
  220. package/build-module/components/list-view/block.mjs.map +2 -2
  221. package/build-module/components/list-view/expander.mjs +1 -1
  222. package/build-module/components/list-view/expander.mjs.map +2 -2
  223. package/build-module/components/list-view/use-list-view-client-ids.mjs +2 -2
  224. package/build-module/components/list-view/use-list-view-client-ids.mjs.map +2 -2
  225. package/build-module/components/observe-typing/index.mjs +4 -3
  226. package/build-module/components/observe-typing/index.mjs.map +2 -2
  227. package/build-module/components/preset-input-control/custom-value-controls.mjs +1 -3
  228. package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
  229. package/build-module/components/preset-input-control/index.mjs +1 -3
  230. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  231. package/build-module/components/resolution-tool/index.mjs +1 -2
  232. package/build-module/components/resolution-tool/index.mjs.map +2 -2
  233. package/build-module/components/text-alignment-control/index.mjs +0 -1
  234. package/build-module/components/text-alignment-control/index.mjs.map +2 -2
  235. package/build-module/components/text-decoration-control/index.mjs +0 -1
  236. package/build-module/components/text-decoration-control/index.mjs.map +2 -2
  237. package/build-module/components/text-indent-control/index.mjs +0 -8
  238. package/build-module/components/text-indent-control/index.mjs.map +2 -2
  239. package/build-module/components/text-transform-control/index.mjs +0 -1
  240. package/build-module/components/text-transform-control/index.mjs.map +2 -2
  241. package/build-module/components/use-block-display-information/index.mjs +10 -8
  242. package/build-module/components/use-block-display-information/index.mjs.map +2 -2
  243. package/build-module/components/use-on-block-drop/index.mjs +4 -7
  244. package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
  245. package/build-module/components/use-resize-canvas/index.mjs +6 -53
  246. package/build-module/components/use-resize-canvas/index.mjs.map +2 -2
  247. package/build-module/components/writing-mode-control/index.mjs +0 -1
  248. package/build-module/components/writing-mode-control/index.mjs.map +2 -2
  249. package/build-module/hooks/font-size.mjs +1 -2
  250. package/build-module/hooks/font-size.mjs.map +2 -2
  251. package/build-module/hooks/layout.mjs +4 -3
  252. package/build-module/hooks/layout.mjs.map +2 -2
  253. package/build-module/hooks/position.mjs +38 -18
  254. package/build-module/hooks/position.mjs.map +2 -2
  255. package/build-module/hooks/states.mjs +10 -21
  256. package/build-module/hooks/states.mjs.map +2 -2
  257. package/build-module/layouts/constrained.mjs +21 -21
  258. package/build-module/layouts/constrained.mjs.map +2 -2
  259. package/build-module/layouts/flex.mjs +0 -3
  260. package/build-module/layouts/flex.mjs.map +2 -2
  261. package/build-module/layouts/grid.mjs +52 -9
  262. package/build-module/layouts/grid.mjs.map +2 -2
  263. package/build-module/private-apis.mjs +5 -3
  264. package/build-module/private-apis.mjs.map +2 -2
  265. package/build-module/store/actions.mjs.map +2 -2
  266. package/build-module/store/private-actions.mjs +14 -0
  267. package/build-module/store/private-actions.mjs.map +2 -2
  268. package/build-module/store/private-keys.mjs +2 -2
  269. package/build-module/store/private-keys.mjs.map +2 -2
  270. package/build-module/store/private-selectors.mjs +93 -10
  271. package/build-module/store/private-selectors.mjs.map +2 -2
  272. package/build-module/store/reducer.mjs +17 -3
  273. package/build-module/store/reducer.mjs.map +2 -2
  274. package/build-module/store/selectors.mjs +13 -0
  275. package/build-module/store/selectors.mjs.map +2 -2
  276. package/build-style/content-rtl.css +11 -5
  277. package/build-style/content.css +11 -5
  278. package/build-style/style-rtl.css +113 -3
  279. package/build-style/style.css +113 -3
  280. package/package.json +43 -41
  281. package/src/autocompleters/block.js +10 -3
  282. package/src/autocompleters/test/block.js +53 -0
  283. package/src/components/background-image-control/index.js +0 -2
  284. package/src/components/block-inspector/edit-contents.js +5 -1
  285. package/src/components/block-inspector/index.js +25 -44
  286. package/src/components/block-list/block-invalid-warning.js +8 -19
  287. package/src/components/block-patterns-list/stories/index.story.jsx +1 -1
  288. package/src/components/block-styles/use-styles-for-block.js +1 -0
  289. package/src/components/block-title/use-block-display-title.js +7 -2
  290. package/src/components/block-toolbar/block-toolbar-icon.js +11 -16
  291. package/src/components/block-toolbar/test/block-toolbar-icon.js +32 -9
  292. package/src/components/block-variation-transforms/index.js +0 -1
  293. package/src/components/child-layout-control/index.js +0 -2
  294. package/src/components/color-palette/test/__snapshots__/control.js.snap +11 -106
  295. package/src/components/colors-gradients/control.js +4 -4
  296. package/src/components/colors-gradients/style.scss +2 -2
  297. package/src/components/date-format-picker/index.js +0 -1
  298. package/src/components/dimensions-tool/aspect-ratio-tool.js +0 -1
  299. package/src/components/dimensions-tool/scale-tool.js +0 -1
  300. package/src/components/dimensions-tool/width-height-tool.js +0 -2
  301. package/src/components/font-appearance-control/index.js +6 -19
  302. package/src/components/font-family/README.md +0 -9
  303. package/src/components/font-family/index.js +6 -19
  304. package/src/components/font-family/stories/index.story.jsx +0 -1
  305. package/src/components/font-sizes/font-size-picker.js +0 -1
  306. package/src/components/global-styles/border-panel.js +0 -1
  307. package/src/components/global-styles/dimensions-panel.js +0 -3
  308. package/src/components/global-styles/typography-panel.js +0 -6
  309. package/src/components/height-control/index.js +0 -2
  310. package/src/components/html-element-control/index.js +0 -1
  311. package/src/components/iframe/content.scss +3 -3
  312. package/src/components/image-editor/index.js +22 -0
  313. package/src/components/image-editor/zoom-dropdown.js +0 -1
  314. package/src/components/image-size-control/index.js +0 -2
  315. package/src/components/inner-content/index.js +119 -0
  316. package/src/components/inner-content/test/index.js +81 -0
  317. package/src/components/inserter/hooks/use-block-types-state.js +10 -2
  318. package/src/components/inserter/media-tab/hooks.js +59 -9
  319. package/src/components/inserter/media-tab/media-list.js +2 -0
  320. package/src/components/inserter/media-tab/media-panel.js +256 -17
  321. package/src/components/inserter/media-tab/media-preview.js +34 -17
  322. package/src/components/inserter/media-tab/media-tab.js +20 -2
  323. package/src/components/inserter/media-tab/test/hooks.js +204 -0
  324. package/src/components/inserter/mobile-tab-navigation.js +6 -1
  325. package/src/components/inserter/no-results.js +2 -2
  326. package/src/components/inserter/preview-panel.js +1 -0
  327. package/src/components/inserter/style.scss +110 -1
  328. package/src/components/inserter-list-item/index.js +8 -2
  329. package/src/components/letter-spacing-control/README.md +0 -8
  330. package/src/components/letter-spacing-control/index.js +5 -23
  331. package/src/components/letter-spacing-control/stories/index.story.jsx +0 -12
  332. package/src/components/line-height-control/README.md +0 -8
  333. package/src/components/line-height-control/index.js +7 -16
  334. package/src/components/line-height-control/stories/index.story.jsx +0 -1
  335. package/src/components/line-height-control/test/index.js +1 -7
  336. package/src/components/link-picker/test/index.js +3 -1
  337. package/src/components/list-view/block-select-button.js +5 -1
  338. package/src/components/list-view/block.js +57 -20
  339. package/src/components/list-view/expander.js +5 -1
  340. package/src/components/list-view/style.scss +19 -0
  341. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  342. package/src/components/observe-typing/index.js +9 -4
  343. package/src/components/preset-input-control/custom-value-controls.js +0 -2
  344. package/src/components/preset-input-control/index.js +0 -2
  345. package/src/components/resolution-tool/index.js +0 -1
  346. package/src/components/responsive-block-control/test/index.js +1 -5
  347. package/src/components/text-alignment-control/index.js +0 -1
  348. package/src/components/text-decoration-control/index.js +0 -1
  349. package/src/components/text-indent-control/index.js +7 -16
  350. package/src/components/text-transform-control/index.js +0 -1
  351. package/src/components/use-block-display-information/index.js +9 -13
  352. package/src/components/use-block-display-information/test/index.js +47 -9
  353. package/src/components/use-on-block-drop/index.js +4 -7
  354. package/src/components/use-resize-canvas/index.js +10 -71
  355. package/src/components/writing-mode-control/index.js +0 -1
  356. package/src/hooks/block-hooks.scss +15 -0
  357. package/src/hooks/font-size.js +0 -1
  358. package/src/hooks/layout.js +5 -4
  359. package/src/hooks/position.js +44 -23
  360. package/src/hooks/states.js +24 -26
  361. package/src/hooks/test/cross-origin-isolation.js +0 -4
  362. package/src/hooks/test/layout.js +75 -1
  363. package/src/layouts/constrained.js +51 -28
  364. package/src/layouts/flex.js +0 -3
  365. package/src/layouts/grid.js +59 -7
  366. package/src/layouts/test/constrained.js +91 -0
  367. package/src/layouts/test/grid.js +71 -0
  368. package/src/private-apis.js +4 -2
  369. package/src/store/actions.js +1 -0
  370. package/src/store/private-actions.js +31 -0
  371. package/src/store/private-keys.js +1 -1
  372. package/src/store/private-selectors.js +184 -11
  373. package/src/store/reducer.js +37 -2
  374. package/src/store/selectors.js +41 -0
  375. package/src/store/test/private-selectors.js +436 -10
  376. package/src/store/test/reducer.js +41 -13
  377. package/src/store/test/selectors.js +133 -0
  378. package/src/style.scss +1 -0
  379. package/src/components/use-resize-canvas/README.md +0 -37
@@ -98,6 +98,7 @@ function ListViewBlock( {
98
98
  insertAfterBlock,
99
99
  insertBeforeBlock,
100
100
  showViewportModal,
101
+ stopEditingContentOnlySection,
101
102
  } = unlock( useDispatch( blockEditorStore ) );
102
103
 
103
104
  const debouncedToggleBlockHighlight = useDebounce(
@@ -125,21 +126,36 @@ function ListViewBlock( {
125
126
 
126
127
  const pasteStyles = usePasteStyles();
127
128
 
128
- const { block, blockName, allowRightClickOverrides } = useSelect(
129
+ const {
130
+ block,
131
+ blockName,
132
+ blockEditingMode,
133
+ allowRightClickOverrides,
134
+ editedSection,
135
+ } = useSelect(
129
136
  ( select ) => {
130
- const { getBlock, getBlockName, getSettings } = unlock(
131
- select( blockEditorStore )
132
- );
137
+ const {
138
+ getBlock,
139
+ getBlockName,
140
+ getBlockEditingMode: getBlockEditingModeForClientId,
141
+ getSettings,
142
+ getEditedContentOnlySection,
143
+ } = unlock( select( blockEditorStore ) );
133
144
 
134
145
  return {
135
146
  block: getBlock( clientId ),
136
147
  blockName: getBlockName( clientId ),
148
+ blockEditingMode: getBlockEditingModeForClientId( clientId ),
137
149
  allowRightClickOverrides:
138
150
  getSettings().allowRightClickOverrides,
151
+ editedSection: getEditedContentOnlySection(),
139
152
  };
140
153
  },
141
154
  [ clientId ]
142
155
  );
156
+
157
+ const isDisabled = blockEditingMode === 'disabled';
158
+
143
159
  const { canRename } = useBlockRename( blockName );
144
160
 
145
161
  const showBlockActions =
@@ -202,6 +218,13 @@ function ListViewBlock( {
202
218
  return;
203
219
  }
204
220
 
221
+ if ( editedSection && isMatch( 'core/block-editor/unselect', event ) ) {
222
+ event.stopPropagation();
223
+ event.preventDefault();
224
+ stopEditingContentOnlySection();
225
+ return;
226
+ }
227
+
205
228
  const isDeleteKey = [ BACKSPACE, DELETE ].includes( event.keyCode );
206
229
 
207
230
  // If multiple blocks are selected, deselect all blocks when the user
@@ -539,7 +562,8 @@ function ListViewBlock( {
539
562
  );
540
563
 
541
564
  const hasSiblings = siblingBlockCount > 0;
542
- const hasRenderedMovers = showBlockMovers && hasSiblings;
565
+ const canShowBlockActions = showBlockActions && ! isDisabled;
566
+ const hasRenderedMovers = showBlockMovers && hasSiblings && ! isDisabled;
543
567
  const moverCellClassName = clsx(
544
568
  'block-editor-list-view-block__mover-cell',
545
569
  { 'is-visible': isHovered || isSelected }
@@ -553,7 +577,7 @@ function ListViewBlock( {
553
577
  let colSpan;
554
578
  if ( hasRenderedMovers ) {
555
579
  colSpan = 2;
556
- } else if ( ! showBlockActions ) {
580
+ } else if ( ! canShowBlockActions ) {
557
581
  colSpan = 3;
558
582
  }
559
583
 
@@ -566,12 +590,13 @@ function ListViewBlock( {
566
590
  'is-dragging': isDragged,
567
591
  'has-single-cell': ! showBlockActions,
568
592
  'is-synced': blockInformation?.isSynced,
569
- 'is-draggable': canMoveBlock,
593
+ 'is-draggable': canMoveBlock && ! isDisabled,
570
594
  'is-displacement-normal': displacement === 'normal',
571
595
  'is-displacement-up': displacement === 'up',
572
596
  'is-displacement-down': displacement === 'down',
573
597
  'is-after-dragged-blocks': isAfterDraggedBlocks,
574
598
  'is-nesting': isNesting,
599
+ 'is-disabled': isDisabled,
575
600
  } );
576
601
 
577
602
  // Only include all selected blocks if the currently clicked on block
@@ -582,19 +607,28 @@ function ListViewBlock( {
582
607
  ? selectedClientIds
583
608
  : [ clientId ];
584
609
 
585
- // Detect if there is a block in the canvas currently being edited and multi-selection is not happening.
586
- const currentlyEditingBlockInCanvas =
587
- isSelected && selectedClientIds.length === 1;
610
+ const getListViewBlockTabIndex = ( rovingTabIndex ) => {
611
+ if ( isDisabled ) {
612
+ return -1;
613
+ }
614
+
615
+ // Detect if there is a block in the canvas currently being edited and multi-selection is not happening.
616
+ if ( isSelected && selectedClientIds.length === 1 ) {
617
+ return 0;
618
+ }
619
+
620
+ return rovingTabIndex;
621
+ };
588
622
 
589
623
  return (
590
624
  <ListViewLeaf
591
625
  className={ classes }
592
626
  isDragged={ isDragged }
593
627
  onKeyDown={ onKeyDown }
594
- onMouseEnter={ onMouseEnter }
595
- onMouseLeave={ onMouseLeave }
596
- onFocus={ onMouseEnter }
597
- onBlur={ onMouseLeave }
628
+ onMouseEnter={ isDisabled ? undefined : onMouseEnter }
629
+ onMouseLeave={ isDisabled ? undefined : onMouseLeave }
630
+ onFocus={ isDisabled ? undefined : onMouseEnter }
631
+ onBlur={ isDisabled ? undefined : onMouseLeave }
598
632
  level={ level }
599
633
  position={ position }
600
634
  rowCount={ rowCount }
@@ -615,22 +649,25 @@ function ListViewBlock( {
615
649
  <ListViewBlockContents
616
650
  block={ block }
617
651
  onClick={ selectEditorBlock }
618
- onContextMenu={ onContextMenu }
652
+ onContextMenu={
653
+ isDisabled ? undefined : onContextMenu
654
+ }
619
655
  onMouseDown={ onMouseDown }
620
- onToggleExpanded={ toggleExpanded }
656
+ onToggleExpanded={
657
+ isDisabled ? undefined : toggleExpanded
658
+ }
621
659
  isSelected={ isSelected }
622
660
  position={ position }
623
661
  siblingBlockCount={ siblingBlockCount }
624
662
  level={ level }
625
663
  ref={ ref }
626
- tabIndex={
627
- currentlyEditingBlockInCanvas ? 0 : tabIndex
628
- }
664
+ tabIndex={ getListViewBlockTabIndex( tabIndex ) }
629
665
  onFocus={ onFocus }
630
666
  isExpanded={ canEditBlock ? isExpanded : undefined }
631
667
  selectedClientIds={ selectedClientIds }
632
668
  ariaDescribedBy={ descriptionId }
633
669
  visibilityLabel={ blockVisibilityDescription }
670
+ isDisabled={ isDisabled }
634
671
  />
635
672
  <AriaReferencedText id={ descriptionId }>
636
673
  { [
@@ -676,7 +713,7 @@ function ListViewBlock( {
676
713
  </>
677
714
  ) }
678
715
 
679
- { showBlockActions && BlockSettingsMenu && (
716
+ { canShowBlockActions && BlockSettingsMenu && (
680
717
  <TreeGridCell
681
718
  className={ listViewBlockSettingsClassName }
682
719
  aria-selected={ !! isSelected }
@@ -15,7 +15,11 @@ export default function ListViewExpander( { onClick } ) {
15
15
  // For the current tree grid implementation, please do not try to make this a button.
16
16
  <span
17
17
  className="block-editor-list-view__expander"
18
- onClick={ ( event ) => onClick( event, { forceToggle: true } ) }
18
+ onClick={
19
+ onClick
20
+ ? ( event ) => onClick( event, { forceToggle: true } )
21
+ : undefined
22
+ }
19
23
  aria-hidden="true"
20
24
  data-testid="list-view-expander"
21
25
  >
@@ -447,6 +447,25 @@
447
447
  box-shadow: 0 0 0 $radius-small var(--wp-admin-theme-color);
448
448
  }
449
449
  }
450
+
451
+ &.is-disabled {
452
+ opacity: 0.2;
453
+ @media not ( prefers-reduced-motion ) {
454
+ transition: opacity 0.1s linear;
455
+ }
456
+
457
+ &:hover {
458
+ opacity: 0.2;
459
+ }
460
+
461
+ .block-editor-list-view__expander {
462
+ cursor: default;
463
+ }
464
+
465
+ .block-editor-list-view-block-select-button:hover {
466
+ color: inherit;
467
+ }
468
+ }
450
469
  }
451
470
 
452
471
  // First level of indentation is aria-level 2, max indent is 8.
@@ -16,14 +16,14 @@ export default function useListViewClientIds( { blocks, rootClientId } ) {
16
16
  const {
17
17
  getDraggedBlockClientIds,
18
18
  getSelectedBlockClientIds,
19
- getEnabledClientIdsTree,
19
+ getListViewClientIdsTree,
20
20
  } = unlock( select( blockEditorStore ) );
21
21
 
22
22
  return {
23
23
  selectedClientIds: getSelectedBlockClientIds(),
24
24
  draggedClientIds: getDraggedBlockClientIds(),
25
25
  clientIdsTree:
26
- blocks ?? getEnabledClientIdsTree( rootClientId ),
26
+ blocks ?? getListViewClientIdsTree( rootClientId ),
27
27
  };
28
28
  },
29
29
  [ blocks, rootClientId ]
@@ -129,6 +129,12 @@ export function useTypingObserver() {
129
129
  if ( isTyping ) {
130
130
  let timerId;
131
131
 
132
+ // Capture the window reference while the node is still
133
+ // attached. Reusing the reference we held at mount keeps the
134
+ // cleanup and the handlers working against the same window
135
+ // we set things up on.
136
+ const { defaultView } = node.ownerDocument;
137
+
132
138
  /**
133
139
  * Stops typing when focus transitions to a non-text field element.
134
140
  *
@@ -141,7 +147,7 @@ export function useTypingObserver() {
141
147
  // before the keydown event, wait until after current stack
142
148
  // before evaluating whether typing is to be stopped. Otherwise,
143
149
  // typing will re-start.
144
- timerId = node.ownerDocument.defaultView.setTimeout( () => {
150
+ timerId = defaultView.setTimeout( () => {
145
151
  if ( ! isTextField( target ) ) {
146
152
  stopTyping();
147
153
  }
@@ -168,8 +174,7 @@ export function useTypingObserver() {
168
174
  * uncollapsed (shift) selection.
169
175
  */
170
176
  function stopTypingOnSelectionUncollapse() {
171
- const selection =
172
- node.ownerDocument.defaultView.getSelection();
177
+ const selection = defaultView.getSelection();
173
178
  if ( ! selection.isCollapsed ) {
174
179
  stopTyping();
175
180
  }
@@ -184,7 +189,7 @@ export function useTypingObserver() {
184
189
  );
185
190
 
186
191
  return () => {
187
- node.ownerDocument.defaultView.clearTimeout( timerId );
192
+ defaultView.clearTimeout( timerId );
188
193
  node.removeEventListener(
189
194
  'focus',
190
195
  stopTypingOnNonTextField
@@ -71,7 +71,6 @@ export default function CustomValueControls( {
71
71
  onFocus={ onMouseOver }
72
72
  onMouseOut={ onMouseOut }
73
73
  onMouseOver={ onMouseOver }
74
- size="__unstable-large"
75
74
  units={ units }
76
75
  value={ [ parsedQuantity, computedUnit ].join( '' ) }
77
76
  placeholder={ allPlaceholder }
@@ -126,7 +125,6 @@ export default function CustomValueControls( {
126
125
  step={ step }
127
126
  value={ parsedQuantity }
128
127
  withInputField={ false }
129
- __next40pxDefaultSize
130
128
  />
131
129
  </>
132
130
  );
@@ -267,7 +267,6 @@ export default function PresetInputControl( {
267
267
  step={ 1 }
268
268
  value={ currentValue }
269
269
  withInputField={ false }
270
- __next40pxDefaultSize
271
270
  />
272
271
  ) }
273
272
  { hasPresets && ! showRangeControl && ! showCustomValueControl && (
@@ -295,7 +294,6 @@ export default function PresetInputControl( {
295
294
  onMouseOut={ onMouseOut }
296
295
  onMouseOver={ onMouseOver }
297
296
  options={ options }
298
- size="__unstable-large"
299
297
  value={
300
298
  // passing empty string as a fallback to continue using the
301
299
  // component in controlled mode
@@ -51,7 +51,6 @@ export default function ResolutionTool( {
51
51
  options={ options }
52
52
  onChange={ onChange }
53
53
  help={ __( 'Select the size of the source image.' ) }
54
- size="__unstable-large"
55
54
  />
56
55
  </ToolsPanelItem>
57
56
  );
@@ -39,11 +39,7 @@ const sizeOptions = [
39
39
  const renderTestDefaultControlComponent = ( labelComponent, device ) => {
40
40
  return (
41
41
  <>
42
- <SelectControl
43
- __next40pxDefaultSize
44
- label={ labelComponent }
45
- options={ sizeOptions }
46
- />
42
+ <SelectControl label={ labelComponent } options={ sizeOptions } />
47
43
  <p id={ device.id }>
48
44
  { device.label } is used here for testing purposes to ensure we
49
45
  have access to details about the device.
@@ -76,7 +76,6 @@ export default function TextAlignmentControl( {
76
76
  return (
77
77
  <ToggleGroupControl
78
78
  isDeselectable
79
- __next40pxDefaultSize
80
79
  label={ __( 'Text alignment' ) }
81
80
  className={ clsx(
82
81
  'block-editor-text-alignment-control',
@@ -49,7 +49,6 @@ export default function TextDecorationControl( {
49
49
  return (
50
50
  <ToggleGroupControl
51
51
  isDeselectable
52
- __next40pxDefaultSize
53
52
  label={ __( 'Decoration' ) }
54
53
  className={ clsx(
55
54
  'block-editor-text-decoration-control',
@@ -22,19 +22,17 @@ import { useSettings } from '../../components/use-settings';
22
22
  /**
23
23
  * Control for line text indent.
24
24
  *
25
- * @param {Object} props Component props.
26
- * @param {boolean} props.__next40pxDefaultSize Start opting into the larger default height that will become the default size in a future version.
27
- * @param {string} props.value Currently selected text indent.
28
- * @param {Function} props.onChange Handles change in text indent selection.
29
- * @param {string|number|undefined} props.__unstableInputWidth Input width to pass through to inner UnitControl. Should be a valid CSS value.
30
- * @param {boolean} props.withSlider Whether to show the slider control.
31
- * @param {boolean} props.hasBottomMargin Whether to add bottom margin below the control.
32
- * @param {string} props.help Help text to display below the control.
25
+ * @param {Object} props Component props.
26
+ * @param {string} props.value Currently selected text indent.
27
+ * @param {Function} props.onChange Handles change in text indent selection.
28
+ * @param {string|number|undefined} props.__unstableInputWidth Input width to pass through to inner UnitControl. Should be a valid CSS value.
29
+ * @param {boolean} props.withSlider Whether to show the slider control.
30
+ * @param {boolean} props.hasBottomMargin Whether to add bottom margin below the control.
31
+ * @param {string} props.help Help text to display below the control.
33
32
  *
34
33
  * @return {Element} Text indent control.
35
34
  */
36
35
  export default function TextIndentControl( {
37
- __next40pxDefaultSize = false,
38
36
  value,
39
37
  onChange,
40
38
  __unstableInputWidth = '60px',
@@ -68,8 +66,6 @@ export default function TextIndentControl( {
68
66
  if ( ! withSlider ) {
69
67
  return (
70
68
  <UnitControl
71
- __next40pxDefaultSize={ __next40pxDefaultSize }
72
- __shouldNotWarnDeprecated36pxSize
73
69
  { ...otherProps }
74
70
  label={ __( 'Line indent' ) }
75
71
  value={ value }
@@ -89,14 +85,11 @@ export default function TextIndentControl( {
89
85
  <Flex>
90
86
  <FlexItem isBlock>
91
87
  <UnitControl
92
- __next40pxDefaultSize={ __next40pxDefaultSize }
93
- __shouldNotWarnDeprecated36pxSize
94
88
  label={ __( 'Line indent' ) }
95
89
  labelPosition="top"
96
90
  hideLabelFromVision
97
91
  value={ value }
98
92
  onChange={ onChange }
99
- size={ otherProps.size }
100
93
  units={ units }
101
94
  __unstableInputWidth={ __unstableInputWidth }
102
95
  min={ 0 }
@@ -106,8 +99,6 @@ export default function TextIndentControl( {
106
99
  <FlexItem isBlock>
107
100
  <Spacer marginX={ 2 } marginBottom={ 0 }>
108
101
  <RangeControl
109
- __next40pxDefaultSize={ __next40pxDefaultSize }
110
- __shouldNotWarnDeprecated36pxSize
111
102
  label={ __( 'Line indent' ) }
112
103
  hideLabelFromVision
113
104
  value={ valueQuantity }
@@ -55,7 +55,6 @@ export default function TextTransformControl( { className, value, onChange } ) {
55
55
  return (
56
56
  <ToggleGroupControl
57
57
  isDeselectable
58
- __next40pxDefaultSize
59
58
  label={ __( 'Letter case' ) }
60
59
  className={ clsx(
61
60
  'block-editor-text-transform-control',
@@ -16,7 +16,6 @@ import { symbol } from '@wordpress/icons';
16
16
  */
17
17
  import { store as blockEditorStore } from '../../store';
18
18
  import { unlock } from '../../lock-unlock';
19
- import { isIsolatedEditorKey } from '../../store/private-keys';
20
19
 
21
20
  /** @typedef {import('@wordpress/blocks').WPIcon} WPIcon */
22
21
 
@@ -78,8 +77,8 @@ export default function useBlockDisplayInformation( clientId ) {
78
77
  const {
79
78
  getBlockName,
80
79
  getBlockAttributes,
80
+ getBlock,
81
81
  __experimentalGetParsedPattern,
82
- getSettings,
83
82
  } = blockEditorSelect;
84
83
  const { getBlockType, getActiveBlockVariation } =
85
84
  select( blocksStore );
@@ -89,20 +88,12 @@ export default function useBlockDisplayInformation( clientId ) {
89
88
  return null;
90
89
  }
91
90
  const attributes = getBlockAttributes( clientId );
92
- const { isWithinEditedContentOnlySection } =
93
- unlock( blockEditorSelect );
94
- const isIsolatedEditor = !! getSettings()?.[ isIsolatedEditorKey ];
91
+ const { isSectionBlock } = unlock( blockEditorSelect );
95
92
 
96
93
  // Check if this block is a pattern
97
94
  const patternName = attributes?.metadata?.patternName;
98
- const isEditedContentOnlySection =
99
- isWithinEditedContentOnlySection( clientId );
100
95
 
101
- if (
102
- patternName &&
103
- ! isEditedContentOnlySection &&
104
- ! isIsolatedEditor
105
- ) {
96
+ if ( patternName && isSectionBlock( clientId ) ) {
106
97
  const pattern = __experimentalGetParsedPattern( patternName );
107
98
  const positionLabel = getPositionTypeLabel( attributes );
108
99
  return {
@@ -118,7 +109,12 @@ export default function useBlockDisplayInformation( clientId ) {
118
109
  };
119
110
  }
120
111
 
121
- const match = getActiveBlockVariation( blockName, attributes );
112
+ const match = getActiveBlockVariation(
113
+ blockName,
114
+ attributes,
115
+ undefined,
116
+ getBlock?.( clientId )?.innerContent
117
+ );
122
118
  const isSynced =
123
119
  isReusableBlock( blockType ) || isTemplatePart( blockType );
124
120
  const syncedTitle = isSynced
@@ -14,7 +14,6 @@ import { symbol } from '@wordpress/icons';
14
14
  * Internal dependencies
15
15
  */
16
16
  import useBlockDisplayInformation from '../';
17
- import { isIsolatedEditorKey } from '../../../store/private-keys';
18
17
 
19
18
  jest.mock( '@wordpress/data/src/components/use-select', () => jest.fn() );
20
19
  jest.mock( '../../../lock-unlock', () => ( {
@@ -26,6 +25,7 @@ jest.mock( '../../../lock-unlock', () => ( {
26
25
  } ) );
27
26
 
28
27
  const groupIcon = 'group-icon';
28
+ const templatePartIcon = 'template-part-icon';
29
29
 
30
30
  function TestComponent( { onChange } ) {
31
31
  const blockInformation = useBlockDisplayInformation( 'client-id' );
@@ -56,19 +56,17 @@ function setupUseSelect( {
56
56
  description: 'Gather blocks in a layout container.',
57
57
  },
58
58
  getActiveBlockVariation = () => null,
59
- settings = {},
60
- isWithinEditedSection = false,
59
+ isSectionBlock = true,
61
60
  } = {} ) {
62
61
  useSelect.mockImplementation( ( mapSelect ) =>
63
62
  mapSelect( () => ( {
64
63
  getBlockName: () => blockName,
65
64
  getBlockAttributes: () => attributes,
66
- getSettings: () => settings,
67
65
  __experimentalGetParsedPattern: () => ( {
68
66
  title: 'Hero pattern',
69
67
  description: 'Pattern description.',
70
68
  } ),
71
- isWithinEditedContentOnlySection: () => isWithinEditedSection,
69
+ isSectionBlock: () => isSectionBlock,
72
70
  getBlockType: () => blockType,
73
71
  getActiveBlockVariation,
74
72
  } ) )
@@ -97,7 +95,7 @@ describe( 'useBlockDisplayInformation', () => {
97
95
  } );
98
96
 
99
97
  it( 'displays block information for a pattern section that is being edited', () => {
100
- setupUseSelect( { isWithinEditedSection: true } );
98
+ setupUseSelect( { isSectionBlock: false } );
101
99
  const onChange = jest.fn();
102
100
 
103
101
  render( <TestComponent onChange={ onChange } /> );
@@ -120,9 +118,7 @@ describe( 'useBlockDisplayInformation', () => {
120
118
  patternName: 'theme/header-wrapper',
121
119
  },
122
120
  },
123
- settings: {
124
- [ isIsolatedEditorKey ]: true,
125
- },
121
+ isSectionBlock: false,
126
122
  } );
127
123
  const onChange = jest.fn();
128
124
 
@@ -137,4 +133,46 @@ describe( 'useBlockDisplayInformation', () => {
137
133
  } )
138
134
  );
139
135
  } );
136
+
137
+ it( 'displays block information for a pattern wrapper when content-only editing is disabled', () => {
138
+ setupUseSelect( {
139
+ isSectionBlock: false,
140
+ } );
141
+ const onChange = jest.fn();
142
+
143
+ render( <TestComponent onChange={ onChange } /> );
144
+
145
+ expect( onChange ).toHaveBeenCalledWith(
146
+ expect.objectContaining( {
147
+ title: 'Group',
148
+ icon: groupIcon,
149
+ description: 'Gather blocks in a layout container.',
150
+ name: 'Hero pattern',
151
+ } )
152
+ );
153
+ } );
154
+
155
+ it( 'displays block information for section blocks without pattern metadata', () => {
156
+ setupUseSelect( {
157
+ attributes: {},
158
+ blockName: 'core/template-part',
159
+ blockType: {
160
+ name: 'core/template-part',
161
+ title: 'Template Part',
162
+ icon: templatePartIcon,
163
+ description: 'A template part.',
164
+ },
165
+ } );
166
+ const onChange = jest.fn();
167
+
168
+ render( <TestComponent onChange={ onChange } /> );
169
+
170
+ expect( onChange ).toHaveBeenCalledWith(
171
+ expect.objectContaining( {
172
+ title: 'Template Part',
173
+ icon: templatePartIcon,
174
+ description: 'A template part.',
175
+ } )
176
+ );
177
+ } );
140
178
  } );
@@ -5,6 +5,7 @@ import { useCallback } from '@wordpress/element';
5
5
  import {
6
6
  cloneBlock,
7
7
  createBlock,
8
+ __experimentalCloneSanitizedBlock,
8
9
  findTransform,
9
10
  getBlockTransforms,
10
11
  pasteHandler,
@@ -266,13 +267,9 @@ export default function useOnBlockDrop(
266
267
  blocks.unshift( targetBlock );
267
268
  }
268
269
 
269
- const groupInnerBlocks = blocks.map( ( block ) => {
270
- return createBlock(
271
- block.name,
272
- block.attributes,
273
- block.innerBlocks
274
- );
275
- } );
270
+ const groupInnerBlocks = blocks.map( ( block ) =>
271
+ __experimentalCloneSanitizedBlock( block )
272
+ );
276
273
 
277
274
  const areAllImages = blocks.every( ( block ) => {
278
275
  return block.name === 'core/image';