@wordpress/block-editor 11.0.0 → 11.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/LICENSE.md +1 -1
  3. package/README.md +2 -1
  4. package/build/components/alignment-control/ui.js +1 -7
  5. package/build/components/alignment-control/ui.js.map +1 -1
  6. package/build/components/block-actions/index.js +9 -0
  7. package/build/components/block-actions/index.js.map +1 -1
  8. package/build/components/block-alignment-control/use-available-alignments.js +4 -3
  9. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  10. package/build/components/block-icon/index.js +4 -2
  11. package/build/components/block-icon/index.js.map +1 -1
  12. package/build/components/block-inspector/index.js +58 -5
  13. package/build/components/block-inspector/index.js.map +1 -1
  14. package/build/components/block-list-appender/index.js +46 -34
  15. package/build/components/block-list-appender/index.js.map +1 -1
  16. package/build/components/block-list-appender/index.native.js +39 -34
  17. package/build/components/block-list-appender/index.native.js.map +1 -1
  18. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +18 -18
  19. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  20. package/build/components/block-mobile-toolbar/index.native.js +1 -1
  21. package/build/components/block-mobile-toolbar/index.native.js.map +1 -1
  22. package/build/components/block-pattern-setup/index.js +14 -7
  23. package/build/components/block-pattern-setup/index.js.map +1 -1
  24. package/build/components/block-preview/auto.js +1 -4
  25. package/build/components/block-preview/auto.js.map +1 -1
  26. package/build/components/block-settings-menu/block-settings-dropdown.js +4 -1
  27. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  28. package/build/components/block-styles/index.js +3 -1
  29. package/build/components/block-styles/index.js.map +1 -1
  30. package/build/components/block-styles/index.native.js +1 -3
  31. package/build/components/block-styles/index.native.js.map +1 -1
  32. package/build/components/block-styles/utils.js +7 -10
  33. package/build/components/block-styles/utils.js.map +1 -1
  34. package/build/components/block-toolbar/index.native.js +6 -8
  35. package/build/components/block-toolbar/index.native.js.map +1 -1
  36. package/build/components/block-tools/selected-block-popover.js +1 -3
  37. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  38. package/build/components/block-tools/use-block-toolbar-popover-props.js +43 -10
  39. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  40. package/build/components/block-variation-picker/index.js +1 -1
  41. package/build/components/block-variation-picker/index.js.map +1 -1
  42. package/build/components/colors/utils.js +2 -6
  43. package/build/components/colors/utils.js.map +1 -1
  44. package/build/components/colors-gradients/control.js +0 -3
  45. package/build/components/colors-gradients/control.js.map +1 -1
  46. package/build/components/colors-gradients/dropdown.js +0 -2
  47. package/build/components/colors-gradients/dropdown.js.map +1 -1
  48. package/build/components/colors-gradients/panel-color-gradient-settings.js +2 -19
  49. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  50. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -3
  51. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  52. package/build/components/copy-handler/index.js +37 -9
  53. package/build/components/copy-handler/index.js.map +1 -1
  54. package/build/components/default-style-picker/index.js +1 -0
  55. package/build/components/default-style-picker/index.js.map +1 -1
  56. package/build/components/font-sizes/fluid-utils.js +5 -2
  57. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  58. package/build/components/font-sizes/utils.js +10 -4
  59. package/build/components/font-sizes/utils.js.map +1 -1
  60. package/build/components/font-sizes/with-font-sizes.js +14 -12
  61. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  62. package/build/components/gradients/use-gradient.js +2 -8
  63. package/build/components/gradients/use-gradient.js.map +1 -1
  64. package/build/components/iframe/index.js +48 -101
  65. package/build/components/iframe/index.js.map +1 -1
  66. package/build/components/iframe/use-compatibility-styles.js +98 -0
  67. package/build/components/iframe/use-compatibility-styles.js.map +1 -0
  68. package/build/components/image-size-control/index.js +1 -0
  69. package/build/components/image-size-control/index.js.map +1 -1
  70. package/build/components/inner-blocks/index.js +6 -2
  71. package/build/components/inner-blocks/index.js.map +1 -1
  72. package/build/components/inserter/block-patterns-tab.js +4 -4
  73. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  74. package/build/components/inserter/hooks/use-insertion-point.js +4 -3
  75. package/build/components/inserter/hooks/use-insertion-point.js.map +1 -1
  76. package/build/components/inserter/index.js +16 -6
  77. package/build/components/inserter/index.js.map +1 -1
  78. package/build/components/inserter/media-tab/hooks.js +8 -5
  79. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  80. package/build/components/inserter/menu.js +11 -5
  81. package/build/components/inserter/menu.js.map +1 -1
  82. package/build/components/inserter/quick-inserter.js +6 -3
  83. package/build/components/inserter/quick-inserter.js.map +1 -1
  84. package/build/components/inserter/search-items.js +15 -14
  85. package/build/components/inserter/search-items.js.map +1 -1
  86. package/build/components/inserter/search-results.js +4 -2
  87. package/build/components/inserter/search-results.js.map +1 -1
  88. package/build/components/inspector-controls/groups.js +3 -1
  89. package/build/components/inspector-controls/groups.js.map +1 -1
  90. package/build/components/inspector-controls-tabs/position-controls-panel.js +46 -0
  91. package/build/components/inspector-controls-tabs/position-controls-panel.js.map +1 -0
  92. package/build/components/inspector-controls-tabs/settings-tab.js +3 -1
  93. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  94. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +4 -11
  95. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  96. package/build/components/link-control/search-input.js +1 -0
  97. package/build/components/link-control/search-input.js.map +1 -1
  98. package/build/components/list-view/block-select-button.js +1 -1
  99. package/build/components/list-view/block-select-button.js.map +1 -1
  100. package/build/components/off-canvas-editor/appender.js +3 -44
  101. package/build/components/off-canvas-editor/appender.js.map +1 -1
  102. package/build/components/off-canvas-editor/block-contents.js +38 -5
  103. package/build/components/off-canvas-editor/block-contents.js.map +1 -1
  104. package/build/components/off-canvas-editor/block-select-button.js +3 -2
  105. package/build/components/off-canvas-editor/block-select-button.js.map +1 -1
  106. package/build/components/off-canvas-editor/block.js +51 -57
  107. package/build/components/off-canvas-editor/block.js.map +1 -1
  108. package/build/components/off-canvas-editor/index.js +12 -5
  109. package/build/components/off-canvas-editor/index.js.map +1 -1
  110. package/build/components/off-canvas-editor/use-inserted-block.js +58 -0
  111. package/build/components/off-canvas-editor/use-inserted-block.js.map +1 -0
  112. package/build/components/provider/index.js +3 -1
  113. package/build/components/provider/index.js.map +1 -1
  114. package/build/components/responsive-block-control/label.js.map +1 -1
  115. package/build/components/rich-text/format-edit.js +12 -10
  116. package/build/components/rich-text/format-edit.js.map +1 -1
  117. package/build/components/rich-text/index.js.map +1 -1
  118. package/build/components/rich-text/use-enter.js +4 -5
  119. package/build/components/rich-text/use-enter.js.map +1 -1
  120. package/build/components/rich-text/use-paste-handler.js +21 -12
  121. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  122. package/build/components/spacing-sizes-control/index.js +0 -1
  123. package/build/components/spacing-sizes-control/index.js.map +1 -1
  124. package/build/components/spacing-sizes-control/utils.js +1 -1
  125. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  126. package/build/components/typewriter/index.js +1 -1
  127. package/build/components/typewriter/index.js.map +1 -1
  128. package/build/components/url-input/button.js +1 -0
  129. package/build/components/url-input/button.js.map +1 -1
  130. package/build/components/url-input/index.js +15 -1
  131. package/build/components/url-input/index.js.map +1 -1
  132. package/build/components/url-popover/image-url-input-ui.js +2 -2
  133. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  134. package/build/components/url-popover/link-editor.js +1 -0
  135. package/build/components/url-popover/link-editor.js.map +1 -1
  136. package/build/components/use-paste-styles/index.js +188 -0
  137. package/build/components/use-paste-styles/index.js.map +1 -0
  138. package/build/components/writing-flow/index.js +1 -1
  139. package/build/components/writing-flow/index.js.map +1 -1
  140. package/build/components/writing-flow/use-arrow-nav.js +22 -29
  141. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  142. package/build/hooks/border.js +0 -1
  143. package/build/hooks/border.js.map +1 -1
  144. package/build/hooks/color-panel.js +0 -1
  145. package/build/hooks/color-panel.js.map +1 -1
  146. package/build/hooks/color.js +1 -2
  147. package/build/hooks/color.js.map +1 -1
  148. package/build/hooks/font-family.js +4 -4
  149. package/build/hooks/font-family.js.map +1 -1
  150. package/build/hooks/font-size.js +5 -3
  151. package/build/hooks/font-size.js.map +1 -1
  152. package/build/hooks/index.js +2 -0
  153. package/build/hooks/index.js.map +1 -1
  154. package/build/hooks/metadata.js +1 -1
  155. package/build/hooks/metadata.js.map +1 -1
  156. package/build/hooks/position.js +376 -0
  157. package/build/hooks/position.js.map +1 -0
  158. package/build/hooks/supports.js +328 -0
  159. package/build/hooks/supports.js.map +1 -0
  160. package/build/hooks/use-typography-props.js +11 -8
  161. package/build/hooks/use-typography-props.js.map +1 -1
  162. package/build/store/reducer.js +27 -9
  163. package/build/store/reducer.js.map +1 -1
  164. package/build/store/selectors.js +9 -7
  165. package/build/store/selectors.js.map +1 -1
  166. package/build/utils/pasting.js +6 -11
  167. package/build/utils/pasting.js.map +1 -1
  168. package/build-module/components/alignment-control/ui.js +1 -6
  169. package/build-module/components/alignment-control/ui.js.map +1 -1
  170. package/build-module/components/block-actions/index.js +6 -0
  171. package/build-module/components/block-actions/index.js.map +1 -1
  172. package/build-module/components/block-alignment-control/use-available-alignments.js +4 -3
  173. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  174. package/build-module/components/block-icon/index.js +4 -2
  175. package/build-module/components/block-icon/index.js.map +1 -1
  176. package/build-module/components/block-inspector/index.js +58 -6
  177. package/build-module/components/block-inspector/index.js.map +1 -1
  178. package/build-module/components/block-list-appender/index.js +46 -34
  179. package/build-module/components/block-list-appender/index.js.map +1 -1
  180. package/build-module/components/block-list-appender/index.native.js +39 -32
  181. package/build-module/components/block-list-appender/index.native.js.map +1 -1
  182. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +18 -18
  183. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  184. package/build-module/components/block-mobile-toolbar/index.native.js +1 -1
  185. package/build-module/components/block-mobile-toolbar/index.native.js.map +1 -1
  186. package/build-module/components/block-pattern-setup/index.js +14 -7
  187. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  188. package/build-module/components/block-preview/auto.js +1 -4
  189. package/build-module/components/block-preview/auto.js.map +1 -1
  190. package/build-module/components/block-settings-menu/block-settings-dropdown.js +4 -1
  191. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  192. package/build-module/components/block-styles/index.js +2 -1
  193. package/build-module/components/block-styles/index.js.map +1 -1
  194. package/build-module/components/block-styles/index.native.js +1 -2
  195. package/build-module/components/block-styles/index.native.js.map +1 -1
  196. package/build-module/components/block-styles/utils.js +7 -9
  197. package/build-module/components/block-styles/utils.js.map +1 -1
  198. package/build-module/components/block-toolbar/index.native.js +6 -8
  199. package/build-module/components/block-toolbar/index.native.js.map +1 -1
  200. package/build-module/components/block-tools/selected-block-popover.js +1 -2
  201. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  202. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +42 -11
  203. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  204. package/build-module/components/block-variation-picker/index.js +1 -1
  205. package/build-module/components/block-variation-picker/index.js.map +1 -1
  206. package/build-module/components/colors/utils.js +3 -7
  207. package/build-module/components/colors/utils.js.map +1 -1
  208. package/build-module/components/colors-gradients/control.js +0 -3
  209. package/build-module/components/colors-gradients/control.js.map +1 -1
  210. package/build-module/components/colors-gradients/dropdown.js +0 -2
  211. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  212. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +4 -19
  213. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  214. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -2
  215. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  216. package/build-module/components/copy-handler/index.js +38 -10
  217. package/build-module/components/copy-handler/index.js.map +1 -1
  218. package/build-module/components/default-style-picker/index.js +1 -0
  219. package/build-module/components/default-style-picker/index.js.map +1 -1
  220. package/build-module/components/font-sizes/fluid-utils.js +5 -2
  221. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  222. package/build-module/components/font-sizes/utils.js +11 -5
  223. package/build-module/components/font-sizes/utils.js.map +1 -1
  224. package/build-module/components/font-sizes/with-font-sizes.js +14 -11
  225. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  226. package/build-module/components/gradients/use-gradient.js +2 -7
  227. package/build-module/components/gradients/use-gradient.js.map +1 -1
  228. package/build-module/components/iframe/index.js +46 -102
  229. package/build-module/components/iframe/index.js.map +1 -1
  230. package/build-module/components/iframe/use-compatibility-styles.js +90 -0
  231. package/build-module/components/iframe/use-compatibility-styles.js.map +1 -0
  232. package/build-module/components/image-size-control/index.js +1 -0
  233. package/build-module/components/image-size-control/index.js.map +1 -1
  234. package/build-module/components/inner-blocks/index.js +6 -2
  235. package/build-module/components/inner-blocks/index.js.map +1 -1
  236. package/build-module/components/inserter/block-patterns-tab.js +4 -4
  237. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  238. package/build-module/components/inserter/hooks/use-insertion-point.js +4 -3
  239. package/build-module/components/inserter/hooks/use-insertion-point.js.map +1 -1
  240. package/build-module/components/inserter/index.js +16 -6
  241. package/build-module/components/inserter/index.js.map +1 -1
  242. package/build-module/components/inserter/media-tab/hooks.js +8 -5
  243. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  244. package/build-module/components/inserter/menu.js +11 -5
  245. package/build-module/components/inserter/menu.js.map +1 -1
  246. package/build-module/components/inserter/quick-inserter.js +6 -3
  247. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  248. package/build-module/components/inserter/search-items.js +15 -13
  249. package/build-module/components/inserter/search-items.js.map +1 -1
  250. package/build-module/components/inserter/search-results.js +4 -2
  251. package/build-module/components/inserter/search-results.js.map +1 -1
  252. package/build-module/components/inspector-controls/groups.js +3 -1
  253. package/build-module/components/inspector-controls/groups.js.map +1 -1
  254. package/build-module/components/inspector-controls-tabs/position-controls-panel.js +33 -0
  255. package/build-module/components/inspector-controls-tabs/position-controls-panel.js.map +1 -0
  256. package/build-module/components/inspector-controls-tabs/settings-tab.js +2 -1
  257. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  258. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +4 -11
  259. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  260. package/build-module/components/link-control/search-input.js +1 -0
  261. package/build-module/components/link-control/search-input.js.map +1 -1
  262. package/build-module/components/list-view/block-select-button.js +1 -1
  263. package/build-module/components/list-view/block-select-button.js.map +1 -1
  264. package/build-module/components/off-canvas-editor/appender.js +5 -44
  265. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  266. package/build-module/components/off-canvas-editor/block-contents.js +37 -7
  267. package/build-module/components/off-canvas-editor/block-contents.js.map +1 -1
  268. package/build-module/components/off-canvas-editor/block-select-button.js +3 -2
  269. package/build-module/components/off-canvas-editor/block-select-button.js.map +1 -1
  270. package/build-module/components/off-canvas-editor/block.js +54 -60
  271. package/build-module/components/off-canvas-editor/block.js.map +1 -1
  272. package/build-module/components/off-canvas-editor/index.js +12 -5
  273. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  274. package/build-module/components/off-canvas-editor/use-inserted-block.js +47 -0
  275. package/build-module/components/off-canvas-editor/use-inserted-block.js.map +1 -0
  276. package/build-module/components/provider/index.js +3 -1
  277. package/build-module/components/provider/index.js.map +1 -1
  278. package/build-module/components/responsive-block-control/label.js +1 -2
  279. package/build-module/components/responsive-block-control/label.js.map +1 -1
  280. package/build-module/components/rich-text/format-edit.js +12 -9
  281. package/build-module/components/rich-text/format-edit.js.map +1 -1
  282. package/build-module/components/rich-text/index.js.map +1 -1
  283. package/build-module/components/rich-text/use-enter.js +4 -5
  284. package/build-module/components/rich-text/use-enter.js.map +1 -1
  285. package/build-module/components/rich-text/use-paste-handler.js +22 -12
  286. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  287. package/build-module/components/spacing-sizes-control/index.js +0 -1
  288. package/build-module/components/spacing-sizes-control/index.js.map +1 -1
  289. package/build-module/components/spacing-sizes-control/utils.js +1 -1
  290. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  291. package/build-module/components/typewriter/index.js +1 -1
  292. package/build-module/components/typewriter/index.js.map +1 -1
  293. package/build-module/components/url-input/button.js +1 -0
  294. package/build-module/components/url-input/button.js.map +1 -1
  295. package/build-module/components/url-input/index.js +14 -1
  296. package/build-module/components/url-input/index.js.map +1 -1
  297. package/build-module/components/url-popover/image-url-input-ui.js +3 -3
  298. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  299. package/build-module/components/url-popover/link-editor.js +1 -0
  300. package/build-module/components/url-popover/link-editor.js.map +1 -1
  301. package/build-module/components/use-paste-styles/index.js +174 -0
  302. package/build-module/components/use-paste-styles/index.js.map +1 -0
  303. package/build-module/components/writing-flow/index.js +1 -1
  304. package/build-module/components/writing-flow/index.js.map +1 -1
  305. package/build-module/components/writing-flow/use-arrow-nav.js +22 -29
  306. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  307. package/build-module/hooks/border.js +0 -1
  308. package/build-module/hooks/border.js.map +1 -1
  309. package/build-module/hooks/color-panel.js +0 -1
  310. package/build-module/hooks/color-panel.js.map +1 -1
  311. package/build-module/hooks/color.js +1 -2
  312. package/build-module/hooks/color.js.map +1 -1
  313. package/build-module/hooks/font-family.js +5 -5
  314. package/build-module/hooks/font-family.js.map +1 -1
  315. package/build-module/hooks/font-size.js +5 -3
  316. package/build-module/hooks/font-size.js.map +1 -1
  317. package/build-module/hooks/index.js +1 -0
  318. package/build-module/hooks/index.js.map +1 -1
  319. package/build-module/hooks/metadata.js +1 -1
  320. package/build-module/hooks/metadata.js.map +1 -1
  321. package/build-module/hooks/position.js +337 -0
  322. package/build-module/hooks/position.js.map +1 -0
  323. package/build-module/hooks/supports.js +257 -0
  324. package/build-module/hooks/supports.js.map +1 -0
  325. package/build-module/hooks/use-typography-props.js +11 -8
  326. package/build-module/hooks/use-typography-props.js.map +1 -1
  327. package/build-module/store/reducer.js +27 -8
  328. package/build-module/store/reducer.js.map +1 -1
  329. package/build-module/store/selectors.js +9 -7
  330. package/build-module/store/selectors.js.map +1 -1
  331. package/build-module/utils/pasting.js +6 -10
  332. package/build-module/utils/pasting.js.map +1 -1
  333. package/build-style/content-rtl.css +60 -3
  334. package/build-style/content.css +60 -3
  335. package/build-style/default-editor-styles-rtl.css +3 -3
  336. package/build-style/default-editor-styles.css +3 -3
  337. package/build-style/style-rtl.css +62 -69
  338. package/build-style/style.css +62 -69
  339. package/package.json +29 -29
  340. package/src/components/alignment-control/test/index.js +2 -0
  341. package/src/components/alignment-control/ui.js +1 -7
  342. package/src/components/block-actions/index.js +5 -0
  343. package/src/components/block-alignment-control/test/index.js +2 -0
  344. package/src/components/block-alignment-control/use-available-alignments.js +4 -3
  345. package/src/components/block-icon/index.js +4 -2
  346. package/src/components/block-icon/test/index.js +9 -5
  347. package/src/components/block-inspector/index.js +79 -4
  348. package/src/components/block-inspector/style.scss +7 -0
  349. package/src/components/block-list-appender/index.js +65 -54
  350. package/src/components/block-list-appender/index.native.js +45 -34
  351. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +18 -22
  352. package/src/components/block-mobile-toolbar/index.native.js +1 -1
  353. package/src/components/block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap +125 -0
  354. package/src/components/block-mobile-toolbar/test/block-actions-menu.native.js +439 -0
  355. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +42 -0
  356. package/src/components/block-mover/test/index.native.js +157 -1
  357. package/src/components/block-pattern-setup/index.js +15 -6
  358. package/src/components/block-pattern-setup/style.scss +29 -1
  359. package/src/components/block-preview/auto.js +2 -4
  360. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -0
  361. package/src/components/block-styles/index.js +4 -1
  362. package/src/components/block-styles/index.native.js +1 -2
  363. package/src/components/block-styles/utils.js +5 -7
  364. package/src/components/block-switcher/test/index.js +3 -2
  365. package/src/components/block-toolbar/index.native.js +8 -11
  366. package/src/components/block-tools/selected-block-popover.js +1 -3
  367. package/src/components/block-tools/use-block-toolbar-popover-props.js +68 -12
  368. package/src/components/block-variation-picker/index.js +5 -1
  369. package/src/components/block-vertical-alignment-control/test/index.js +2 -0
  370. package/src/components/button-block-appender/{style.scss → content.scss} +0 -0
  371. package/src/components/colors/test/with-colors.js +2 -0
  372. package/src/components/colors/utils.js +5 -3
  373. package/src/components/colors-gradients/control.js +0 -7
  374. package/src/components/colors-gradients/dropdown.js +0 -2
  375. package/src/components/colors-gradients/panel-color-gradient-settings.js +4 -22
  376. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -2
  377. package/src/components/copy-handler/index.js +53 -7
  378. package/src/components/default-block-appender/test/index.js +2 -0
  379. package/src/components/default-style-picker/index.js +1 -0
  380. package/src/components/font-sizes/fluid-utils.js +7 -1
  381. package/src/components/font-sizes/utils.js +5 -3
  382. package/src/components/font-sizes/with-font-sizes.js +36 -36
  383. package/src/components/gradients/use-gradient.js +2 -7
  384. package/src/components/iframe/index.js +60 -122
  385. package/src/components/iframe/use-compatibility-styles.js +101 -0
  386. package/src/components/image-size-control/index.js +1 -0
  387. package/src/components/image-size-control/test/index.js +147 -79
  388. package/src/components/inner-blocks/index.js +4 -2
  389. package/src/components/inserter/block-patterns-tab.js +7 -4
  390. package/src/components/inserter/hooks/use-insertion-point.js +3 -2
  391. package/src/components/inserter/index.js +61 -43
  392. package/src/components/inserter/media-tab/hooks.js +5 -4
  393. package/src/components/inserter/menu.js +8 -4
  394. package/src/components/inserter/quick-inserter.js +3 -0
  395. package/src/components/inserter/search-items.js +1 -2
  396. package/src/components/inserter/search-results.js +2 -0
  397. package/src/components/inserter/test/__snapshots__/index.native.js.snap +117 -0
  398. package/src/components/inserter/test/index.native.js +255 -1
  399. package/src/components/inspector-controls/groups.js +2 -0
  400. package/src/components/inspector-controls-tabs/position-controls-panel.js +37 -0
  401. package/src/components/inspector-controls-tabs/settings-tab.js +2 -0
  402. package/src/components/inspector-controls-tabs/style.scss +15 -0
  403. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +3 -8
  404. package/src/components/link-control/search-input.js +1 -0
  405. package/src/components/link-control/style.scss +1 -0
  406. package/src/components/link-control/test/index.js +18 -4
  407. package/src/components/list-view/block-select-button.js +1 -1
  408. package/src/components/list-view/style.scss +14 -10
  409. package/src/components/media-replace-flow/test/index.js +2 -0
  410. package/src/components/off-canvas-editor/appender.js +4 -49
  411. package/src/components/off-canvas-editor/block-contents.js +84 -23
  412. package/src/components/off-canvas-editor/block-select-button.js +6 -2
  413. package/src/components/off-canvas-editor/block.js +90 -105
  414. package/src/components/off-canvas-editor/index.js +21 -2
  415. package/src/components/off-canvas-editor/style.scss +5 -1
  416. package/src/components/off-canvas-editor/test/use-inserted-block.js +108 -0
  417. package/src/components/off-canvas-editor/use-inserted-block.js +47 -0
  418. package/src/components/provider/index.js +4 -1
  419. package/src/components/responsive-block-control/label.js +2 -3
  420. package/src/components/responsive-block-control/test/index.js +4 -2
  421. package/src/components/rich-text/format-edit.js +6 -10
  422. package/src/components/rich-text/index.js +1 -0
  423. package/src/components/rich-text/use-enter.js +4 -4
  424. package/src/components/rich-text/use-paste-handler.js +33 -14
  425. package/src/components/spacing-sizes-control/index.js +0 -1
  426. package/src/components/spacing-sizes-control/utils.js +1 -1
  427. package/src/components/typewriter/index.js +3 -1
  428. package/src/components/url-input/README.md +5 -0
  429. package/src/components/url-input/button.js +1 -0
  430. package/src/components/url-input/index.js +15 -1
  431. package/src/components/url-input/test/button.js +2 -0
  432. package/src/components/url-popover/image-url-input-ui.js +5 -4
  433. package/src/components/url-popover/link-editor.js +1 -0
  434. package/src/components/url-popover/test/index.js +21 -5
  435. package/src/components/use-paste-styles/index.js +230 -0
  436. package/src/components/warning/test/index.js +2 -0
  437. package/src/components/writing-flow/index.js +1 -1
  438. package/src/components/writing-flow/use-arrow-nav.js +20 -28
  439. package/src/content.scss +1 -0
  440. package/src/hooks/border.js +0 -1
  441. package/src/hooks/color-panel.js +0 -1
  442. package/src/hooks/color.js +0 -2
  443. package/src/hooks/font-family.js +3 -5
  444. package/src/hooks/font-size.js +13 -4
  445. package/src/hooks/index.js +1 -0
  446. package/src/hooks/metadata.js +1 -2
  447. package/src/hooks/position.js +375 -0
  448. package/src/hooks/position.scss +18 -0
  449. package/src/hooks/supports.js +302 -0
  450. package/src/hooks/test/__snapshots__/align.native.js.snap +73 -0
  451. package/src/hooks/test/align.native.js +133 -0
  452. package/src/hooks/test/use-typography-props.js +26 -0
  453. package/src/hooks/use-typography-props.js +15 -7
  454. package/src/store/reducer.js +20 -8
  455. package/src/store/selectors.js +7 -8
  456. package/src/store/test/reducer.js +45 -3
  457. package/src/store/test/selectors.js +12 -9
  458. package/src/style.scss +2 -1
  459. package/src/utils/pasting.js +3 -9
  460. package/tsconfig.tsbuildinfo +1 -1
  461. package/build/components/colors-gradients/use-common-single-multiple-selects.js +0 -21
  462. package/build/components/colors-gradients/use-common-single-multiple-selects.js.map +0 -1
  463. package/build/components/rich-text/file-paste-handler.js +0 -21
  464. package/build/components/rich-text/file-paste-handler.js.map +0 -1
  465. package/build-module/components/colors-gradients/use-common-single-multiple-selects.js +0 -11
  466. package/build-module/components/colors-gradients/use-common-single-multiple-selects.js.map +0 -1
  467. package/build-module/components/rich-text/file-paste-handler.js +0 -13
  468. package/build-module/components/rich-text/file-paste-handler.js.map +0 -1
  469. package/src/components/colors-gradients/use-common-single-multiple-selects.js +0 -11
  470. package/src/components/rich-text/file-paste-handler.js +0 -13
@@ -7,6 +7,8 @@ import {
7
7
  pasteHandler,
8
8
  store as blocksStore,
9
9
  createBlock,
10
+ findTransform,
11
+ getBlockTransforms,
10
12
  } from '@wordpress/blocks';
11
13
  import {
12
14
  documentHasSelection,
@@ -84,6 +86,7 @@ export function useClipboardHandler() {
84
86
  __unstableIsSelectionCollapsed,
85
87
  __unstableIsSelectionMergeable,
86
88
  __unstableGetSelectedBlocksWithPartialSelection,
89
+ canInsertBlockType,
87
90
  } = useSelect( blockEditorStore );
88
91
  const {
89
92
  flashBlock,
@@ -91,6 +94,7 @@ export function useClipboardHandler() {
91
94
  replaceBlocks,
92
95
  __unstableDeleteSelection,
93
96
  __unstableExpandSelection,
97
+ insertBlocks,
94
98
  } = useDispatch( blockEditorStore );
95
99
  const notifyCopy = useNotifyCopy();
96
100
 
@@ -201,13 +205,55 @@ export function useClipboardHandler() {
201
205
  __experimentalCanUserUseUnfilteredHTML:
202
206
  canUserUseUnfilteredHTML,
203
207
  } = getSettings();
204
- const { plainText, html } = getPasteEventData( event );
205
- const blocks = pasteHandler( {
206
- HTML: html,
207
- plainText,
208
- mode: 'BLOCKS',
209
- canUserUseUnfilteredHTML,
210
- } );
208
+ const { plainText, html, files } = getPasteEventData( event );
209
+ let blocks = [];
210
+
211
+ if ( files.length ) {
212
+ const fromTransforms = getBlockTransforms( 'from' );
213
+ blocks = files
214
+ .reduce( ( accumulator, file ) => {
215
+ const transformation = findTransform(
216
+ fromTransforms,
217
+ ( transform ) =>
218
+ transform.type === 'files' &&
219
+ transform.isMatch( [ file ] )
220
+ );
221
+ if ( transformation ) {
222
+ accumulator.push(
223
+ transformation.transform( [ file ] )
224
+ );
225
+ }
226
+ return accumulator;
227
+ }, [] )
228
+ .flat();
229
+ } else {
230
+ blocks = pasteHandler( {
231
+ HTML: html,
232
+ plainText,
233
+ mode: 'BLOCKS',
234
+ canUserUseUnfilteredHTML,
235
+ } );
236
+ }
237
+
238
+ if ( selectedBlockClientIds.length === 1 ) {
239
+ const [ selectedBlockClientId ] = selectedBlockClientIds;
240
+
241
+ if (
242
+ blocks.every( ( block ) =>
243
+ canInsertBlockType(
244
+ block.name,
245
+ selectedBlockClientId
246
+ )
247
+ )
248
+ ) {
249
+ insertBlocks(
250
+ blocks,
251
+ undefined,
252
+ selectedBlockClientId
253
+ );
254
+ return;
255
+ }
256
+ }
211
257
 
212
258
  replaceBlocks(
213
259
  selectedBlockClientIds,
@@ -9,6 +9,8 @@ import userEvent from '@testing-library/user-event';
9
9
  */
10
10
  import { DefaultBlockAppender, ZWNBSP } from '../';
11
11
 
12
+ jest.useFakeTimers();
13
+
12
14
  describe( 'DefaultBlockAppender', () => {
13
15
  it( 'should match snapshot', () => {
14
16
  const onAppend = jest.fn();
@@ -58,6 +58,7 @@ export default function DefaultStylePicker( { blockName } ) {
58
58
  onUpdatePreferredStyleVariations && (
59
59
  <div className="default-style-picker__default-switcher">
60
60
  <SelectControl
61
+ __nextHasNoMarginBottom
61
62
  options={ selectOptions }
62
63
  value={ preferredStyle || '' }
63
64
  label={ __( 'Default Style' ) }
@@ -40,6 +40,7 @@ const DEFAULT_MINIMUM_FONT_SIZE_LIMIT = '14px';
40
40
  * @param {?string} args.minimumFontSize Minimum font size for any clamp() calculation. Optional.
41
41
  * @param {?number} args.scaleFactor A scale factor to determine how fast a font scales within boundaries. Optional.
42
42
  * @param {?number} args.minimumFontSizeFactor How much to scale defaultFontSize by to derive minimumFontSize. Optional.
43
+ * @param {?string} args.minimumFontSizeLimit The smallest a calculated font size may be. Optional.
43
44
  *
44
45
  * @return {string|null} A font-size value using clamp().
45
46
  */
@@ -51,8 +52,13 @@ export function getComputedFluidTypographyValue( {
51
52
  maximumViewPortWidth = DEFAULT_MAXIMUM_VIEWPORT_WIDTH,
52
53
  scaleFactor = DEFAULT_SCALE_FACTOR,
53
54
  minimumFontSizeFactor = DEFAULT_MINIMUM_FONT_SIZE_FACTOR,
54
- minimumFontSizeLimit = DEFAULT_MINIMUM_FONT_SIZE_LIMIT,
55
+ minimumFontSizeLimit,
55
56
  } ) {
57
+ // Validate incoming settings and set defaults.
58
+ minimumFontSizeLimit = !! getTypographyValueAndUnit( minimumFontSizeLimit )
59
+ ? minimumFontSizeLimit
60
+ : DEFAULT_MINIMUM_FONT_SIZE_LIMIT;
61
+
56
62
  /*
57
63
  * Calculates missing minimumFontSize and maximumFontSize from
58
64
  * defaultFontSize if provided.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { find, kebabCase } from 'lodash';
4
+ import { kebabCase } from 'lodash';
5
5
 
6
6
  /**
7
7
  * Returns the font size object based on an array of named font sizes and the namedFontSize and customFontSize values.
@@ -20,7 +20,9 @@ export const getFontSize = (
20
20
  customFontSizeAttribute
21
21
  ) => {
22
22
  if ( fontSizeAttribute ) {
23
- const fontSizeObject = find( fontSizes, { slug: fontSizeAttribute } );
23
+ const fontSizeObject = fontSizes?.find(
24
+ ( { slug } ) => slug === fontSizeAttribute
25
+ );
24
26
  if ( fontSizeObject ) {
25
27
  return fontSizeObject;
26
28
  }
@@ -39,7 +41,7 @@ export const getFontSize = (
39
41
  * @return {Object} Font size object.
40
42
  */
41
43
  export function getFontSizeObjectByValue( fontSizes, value ) {
42
- const fontSizeObject = find( fontSizes, { size: value } );
44
+ const fontSizeObject = fontSizes?.find( ( { size } ) => size === value );
43
45
  if ( fontSizeObject ) {
44
46
  return fontSizeObject;
45
47
  }
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { find, pickBy } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -107,9 +102,9 @@ export default ( ...fontSizeNames ) => {
107
102
  customFontSizeAttributeName
108
103
  ) {
109
104
  return ( fontSizeValue ) => {
110
- const fontSizeObject = find( this.props.fontSizes, {
111
- size: Number( fontSizeValue ),
112
- } );
105
+ const fontSizeObject = this.props.fontSizes?.find(
106
+ ( { size } ) => size === Number( fontSizeValue )
107
+ );
113
108
  this.props.setAttributes( {
114
109
  [ fontSizeAttributeName ]:
115
110
  fontSizeObject && fontSizeObject.slug
@@ -160,35 +155,40 @@ export default ( ...fontSizeNames ) => {
160
155
  }
161
156
 
162
157
  const newState = Object.entries(
163
- pickBy(
164
- fontSizeAttributeNames,
165
- didAttributesChange
158
+ fontSizeAttributeNames
159
+ )
160
+ .filter( ( [ key, value ] ) =>
161
+ didAttributesChange( value, key )
166
162
  )
167
- ).reduce(
168
- (
169
- newStateAccumulator,
170
- [
171
- fontSizeAttributeName,
172
- customFontSizeAttributeName,
173
- ]
174
- ) => {
175
- const fontSizeAttributeValue =
176
- attributes[ fontSizeAttributeName ];
177
- const fontSizeObject = getFontSize(
178
- fontSizes,
179
- fontSizeAttributeValue,
180
- attributes[ customFontSizeAttributeName ]
181
- );
182
- newStateAccumulator[ fontSizeAttributeName ] = {
183
- ...fontSizeObject,
184
- class: getFontSizeClass(
185
- fontSizeAttributeValue
186
- ),
187
- };
188
- return newStateAccumulator;
189
- },
190
- {}
191
- );
163
+ .reduce(
164
+ (
165
+ newStateAccumulator,
166
+ [
167
+ fontSizeAttributeName,
168
+ customFontSizeAttributeName,
169
+ ]
170
+ ) => {
171
+ const fontSizeAttributeValue =
172
+ attributes[ fontSizeAttributeName ];
173
+ const fontSizeObject = getFontSize(
174
+ fontSizes,
175
+ fontSizeAttributeValue,
176
+ attributes[
177
+ customFontSizeAttributeName
178
+ ]
179
+ );
180
+ newStateAccumulator[
181
+ fontSizeAttributeName
182
+ ] = {
183
+ ...fontSizeObject,
184
+ class: getFontSizeClass(
185
+ fontSizeAttributeValue
186
+ ),
187
+ };
188
+ return newStateAccumulator;
189
+ },
190
+ {}
191
+ );
192
192
 
193
193
  return {
194
194
  ...previousState,
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { find } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -32,7 +27,7 @@ export function __experimentalGetGradientClass( gradientSlug ) {
32
27
  * @return {string} Gradient value.
33
28
  */
34
29
  export function getGradientValueBySlug( gradients, slug ) {
35
- const gradient = find( gradients, [ 'slug', slug ] );
30
+ const gradient = gradients?.find( ( g ) => g.slug === slug );
36
31
  return gradient && gradient.gradient;
37
32
  }
38
33
 
@@ -40,7 +35,7 @@ export function __experimentalGetGradientObjectByGradientValue(
40
35
  gradients,
41
36
  value
42
37
  ) {
43
- const gradient = find( gradients, [ 'gradient', value ] );
38
+ const gradient = gradients?.find( ( g ) => g.gradient === value );
44
39
  return gradient;
45
40
  }
46
41
 
@@ -12,6 +12,7 @@ import {
12
12
  forwardRef,
13
13
  useMemo,
14
14
  useReducer,
15
+ renderToString,
15
16
  } from '@wordpress/element';
16
17
  import { __ } from '@wordpress/i18n';
17
18
  import {
@@ -20,103 +21,15 @@ import {
20
21
  useRefEffect,
21
22
  } from '@wordpress/compose';
22
23
  import { __experimentalStyleProvider as StyleProvider } from '@wordpress/components';
24
+ import { useSelect } from '@wordpress/data';
23
25
 
24
26
  /**
25
27
  * Internal dependencies
26
28
  */
27
29
  import { useBlockSelectionClearer } from '../block-selection-clearer';
28
30
  import { useWritingFlow } from '../writing-flow';
29
-
30
- const BODY_CLASS_NAME = 'editor-styles-wrapper';
31
- const BLOCK_PREFIX = 'wp-block';
32
-
33
- /**
34
- * Clones stylesheets targetting the editor canvas to the given document. A
35
- * stylesheet is considered targetting the editor a canvas if it contains the
36
- * `editor-styles-wrapper`, `wp-block`, or `wp-block-*` class selectors.
37
- *
38
- * Ideally, this hook should be removed in the future and styles should be added
39
- * explicitly as editor styles.
40
- */
41
- function useStylesCompatibility() {
42
- return useRefEffect( ( node ) => {
43
- // Search the document for stylesheets targetting the editor canvas.
44
- Array.from( document.styleSheets ).forEach( ( styleSheet ) => {
45
- try {
46
- // May fail for external styles.
47
- // eslint-disable-next-line no-unused-expressions
48
- styleSheet.cssRules;
49
- } catch ( e ) {
50
- return;
51
- }
52
-
53
- const { ownerNode, cssRules } = styleSheet;
54
-
55
- if ( ! cssRules ) {
56
- return;
57
- }
58
-
59
- // Generally, ignore inline styles. We add inline styles belonging to a
60
- // stylesheet later, which may or may not match the selectors.
61
- if ( ownerNode.tagName !== 'LINK' ) {
62
- return;
63
- }
64
-
65
- // Don't try to add the reset styles, which were removed as a dependency
66
- // from `edit-blocks` for the iframe since we don't need to reset admin
67
- // styles.
68
- if ( ownerNode.id === 'wp-reset-editor-styles-css' ) {
69
- return;
70
- }
71
-
72
- function matchFromRules( _cssRules ) {
73
- return Array.from( _cssRules ).find(
74
- ( {
75
- selectorText,
76
- conditionText,
77
- cssRules: __cssRules,
78
- } ) => {
79
- // If the rule is conditional then it will not have selector text.
80
- // Recurse into child CSS ruleset to determine selector eligibility.
81
- if ( conditionText ) {
82
- return matchFromRules( __cssRules );
83
- }
84
-
85
- return (
86
- selectorText &&
87
- ( selectorText.includes(
88
- `.${ BODY_CLASS_NAME }`
89
- ) ||
90
- selectorText.includes( `.${ BLOCK_PREFIX }` ) )
91
- );
92
- }
93
- );
94
- }
95
-
96
- const isMatch = matchFromRules( cssRules );
97
-
98
- if (
99
- isMatch &&
100
- ! node.ownerDocument.getElementById( ownerNode.id )
101
- ) {
102
- // Display warning once we have a way to add style dependencies to the editor.
103
- // See: https://github.com/WordPress/gutenberg/pull/37466.
104
- node.appendChild( ownerNode.cloneNode( true ) );
105
-
106
- // Add inline styles belonging to the stylesheet.
107
- const inlineCssId = ownerNode.id.replace(
108
- '-css',
109
- '-inline-css'
110
- );
111
- const inlineCssElement = document.getElementById( inlineCssId );
112
-
113
- if ( inlineCssElement ) {
114
- node.appendChild( inlineCssElement.cloneNode( true ) );
115
- }
116
- }
117
- } );
118
- }, [] );
119
- }
31
+ import { useCompatibilityStyles } from './use-compatibility-styles';
32
+ import { store as blockEditorStore } from '../../store';
120
33
 
121
34
  /**
122
35
  * Bubbles some event types (keydown, keypress, and dragover) to parent document
@@ -187,24 +100,31 @@ async function loadScript( head, { id, src } ) {
187
100
  } );
188
101
  }
189
102
 
190
- function Iframe(
191
- {
192
- contentRef,
193
- children,
194
- head,
195
- tabIndex = 0,
196
- assets,
197
- scale = 1,
198
- frameSize = 0,
199
- readonly,
200
- ...props
201
- },
202
- ref
203
- ) {
103
+ function Iframe( {
104
+ contentRef,
105
+ children,
106
+ head,
107
+ tabIndex = 0,
108
+ scale = 1,
109
+ frameSize = 0,
110
+ readonly,
111
+ forwardedRef: ref,
112
+ ...props
113
+ } ) {
114
+ const assets = useSelect(
115
+ ( select ) =>
116
+ select( blockEditorStore ).getSettings().__unstableResolvedAssets,
117
+ []
118
+ );
204
119
  const [ , forceRender ] = useReducer( () => ( {} ) );
205
120
  const [ iframeDocument, setIframeDocument ] = useState();
206
121
  const [ bodyClasses, setBodyClasses ] = useState( [] );
207
122
  const styles = useParsedAssets( assets?.styles );
123
+ const styleIds = styles.map( ( style ) => style.id );
124
+ const compatStyles = useCompatibilityStyles();
125
+ const neededCompatStyles = compatStyles.filter(
126
+ ( style ) => ! styleIds.includes( style.id )
127
+ );
208
128
  const scripts = useParsedAssets( assets?.scripts );
209
129
  const clearerRef = useBlockSelectionClearer();
210
130
  const [ before, writingFlowRef, after ] = useWritingFlow();
@@ -288,12 +208,11 @@ function Iframe(
288
208
  } );
289
209
  }, [] );
290
210
  const bodyRef = useMergeRefs( [ contentRef, clearerRef, writingFlowRef ] );
291
- const styleCompatibilityRef = useStylesCompatibility();
292
211
 
293
- head = (
212
+ const styleAssets = (
294
213
  <>
295
214
  <style>{ 'html{height:auto!important;}body{margin:0}' }</style>
296
- { styles.map(
215
+ { [ ...styles, ...neededCompatStyles ].map(
297
216
  ( { tagName, href, id, rel, media, textContent } ) => {
298
217
  const TagName = tagName.toLowerCase();
299
218
 
@@ -310,10 +229,16 @@ function Iframe(
310
229
  );
311
230
  }
312
231
  ) }
313
- { head }
314
232
  </>
315
233
  );
316
234
 
235
+ // Correct doctype is required to enable rendering in standards
236
+ // mode. Also preload the styles to avoid a flash of unstyled
237
+ // content.
238
+ const srcDoc = useMemo( () => {
239
+ return '<!doctype html>' + renderToString( styleAssets );
240
+ }, [] );
241
+
317
242
  return (
318
243
  <>
319
244
  { tabIndex >= 0 && before }
@@ -321,14 +246,17 @@ function Iframe(
321
246
  { ...props }
322
247
  ref={ useMergeRefs( [ ref, setRef ] ) }
323
248
  tabIndex={ tabIndex }
324
- // Correct doctype is required to enable rendering in standards mode
325
- srcDoc="<!doctype html>"
249
+ // Correct doctype is required to enable rendering in standards
250
+ // mode. Also preload the styles to avoid a flash of unstyled
251
+ // content.
252
+ srcDoc={ srcDoc }
326
253
  title={ __( 'Editor canvas' ) }
327
254
  >
328
255
  { iframeDocument &&
329
256
  createPortal(
330
257
  <>
331
258
  <head ref={ headRef }>
259
+ { styleAssets }
332
260
  { head }
333
261
  <style>
334
262
  { `html { transition: background 5s; ${
@@ -342,7 +270,7 @@ function Iframe(
342
270
  ref={ bodyRef }
343
271
  className={ classnames(
344
272
  'block-editor-iframe__body',
345
- BODY_CLASS_NAME,
273
+ 'editor-styles-wrapper',
346
274
  ...bodyClasses
347
275
  ) }
348
276
  style={ {
@@ -359,15 +287,6 @@ function Iframe(
359
287
  inert={ readonly ? 'true' : undefined }
360
288
  >
361
289
  { contentResizeListener }
362
- { /*
363
- * This is a wrapper for the extra styles and scripts
364
- * rendered imperatively by cloning the parent,
365
- * it's important that this div's content remains uncontrolled.
366
- */ }
367
- <div
368
- style={ { display: 'none' } }
369
- ref={ styleCompatibilityRef }
370
- />
371
290
  <StyleProvider document={ iframeDocument }>
372
291
  { children }
373
292
  </StyleProvider>
@@ -381,4 +300,23 @@ function Iframe(
381
300
  );
382
301
  }
383
302
 
384
- export default forwardRef( Iframe );
303
+ function IframeIfReady( props, ref ) {
304
+ const isInitialised = useSelect(
305
+ ( select ) =>
306
+ select( blockEditorStore ).getSettings().__internalIsInitialized,
307
+ []
308
+ );
309
+
310
+ // We shouldn't render the iframe until the editor settings are initialised.
311
+ // The initial settings are needed to get the styles for the srcDoc, which
312
+ // cannot be changed after the iframe is mounted. srcDoc is used to to set
313
+ // the initial iframe HTML, which is required to avoid a flash of unstyled
314
+ // content.
315
+ if ( ! isInitialised ) {
316
+ return null;
317
+ }
318
+
319
+ return <Iframe { ...props } forwardedRef={ ref } />;
320
+ }
321
+
322
+ export default forwardRef( IframeIfReady );
@@ -0,0 +1,101 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useMemo } from '@wordpress/element';
5
+
6
+ /**
7
+ * Returns a list of stylesheets that target the editor canvas. A stylesheet is
8
+ * considered targetting the editor a canvas if it contains the
9
+ * `editor-styles-wrapper`, `wp-block`, or `wp-block-*` class selectors.
10
+ *
11
+ * Ideally, this hook should be removed in the future and styles should be added
12
+ * explicitly as editor styles.
13
+ */
14
+ export function useCompatibilityStyles() {
15
+ // Only memoize the result once on load, since these stylesheets should not
16
+ // change.
17
+ return useMemo( () => {
18
+ // Search the document for stylesheets targetting the editor canvas.
19
+ return Array.from( document.styleSheets ).reduce(
20
+ ( accumulator, styleSheet ) => {
21
+ try {
22
+ // May fail for external styles.
23
+ // eslint-disable-next-line no-unused-expressions
24
+ styleSheet.cssRules;
25
+ } catch ( e ) {
26
+ return accumulator;
27
+ }
28
+
29
+ const { ownerNode, cssRules } = styleSheet;
30
+
31
+ // Stylesheet is added by another stylesheet. See
32
+ // https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet/ownerNode#notes.
33
+ if ( ownerNode === null ) {
34
+ return accumulator;
35
+ }
36
+
37
+ if ( ! cssRules ) {
38
+ return accumulator;
39
+ }
40
+
41
+ // Generally, ignore inline styles. We add inline styles belonging to a
42
+ // stylesheet later, which may or may not match the selectors.
43
+ if ( ownerNode.tagName !== 'LINK' ) {
44
+ return accumulator;
45
+ }
46
+
47
+ // Don't try to add the reset styles, which were removed as a dependency
48
+ // from `edit-blocks` for the iframe since we don't need to reset admin
49
+ // styles.
50
+ if ( ownerNode.id === 'wp-reset-editor-styles-css' ) {
51
+ return accumulator;
52
+ }
53
+
54
+ function matchFromRules( _cssRules ) {
55
+ return Array.from( _cssRules ).find(
56
+ ( {
57
+ selectorText,
58
+ conditionText,
59
+ cssRules: __cssRules,
60
+ } ) => {
61
+ // If the rule is conditional then it will not have selector text.
62
+ // Recurse into child CSS ruleset to determine selector eligibility.
63
+ if ( conditionText ) {
64
+ return matchFromRules( __cssRules );
65
+ }
66
+
67
+ return (
68
+ selectorText &&
69
+ ( selectorText.includes(
70
+ '.editor-styles-wrapper'
71
+ ) ||
72
+ selectorText.includes( '.wp-block' ) )
73
+ );
74
+ }
75
+ );
76
+ }
77
+
78
+ if ( matchFromRules( cssRules ) ) {
79
+ // Display warning once we have a way to add style dependencies to the editor.
80
+ // See: https://github.com/WordPress/gutenberg/pull/37466.
81
+ accumulator.push( ownerNode.cloneNode( true ) );
82
+
83
+ // Add inline styles belonging to the stylesheet.
84
+ const inlineCssId = ownerNode.id.replace(
85
+ '-css',
86
+ '-inline-css'
87
+ );
88
+ const inlineCssElement =
89
+ document.getElementById( inlineCssId );
90
+
91
+ if ( inlineCssElement ) {
92
+ accumulator.push( inlineCssElement.cloneNode( true ) );
93
+ }
94
+ }
95
+
96
+ return accumulator;
97
+ },
98
+ []
99
+ );
100
+ }, [] );
101
+ }
@@ -41,6 +41,7 @@ export default function ImageSizeControl( {
41
41
  <>
42
42
  { ! isEmpty( imageSizeOptions ) && (
43
43
  <SelectControl
44
+ __nextHasNoMarginBottom
44
45
  label={ __( 'Image size' ) }
45
46
  value={ slug }
46
47
  options={ imageSizeOptions }