@wordpress/block-editor 12.20.0 → 12.22.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 (558) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/block-actions/index.js +47 -36
  3. package/build/components/block-actions/index.js.map +1 -1
  4. package/build/components/block-bindings-toolbar-indicator/index.js +25 -0
  5. package/build/components/block-bindings-toolbar-indicator/index.js.map +1 -0
  6. package/build/components/block-edit/context.js +2 -1
  7. package/build/components/block-edit/context.js.map +1 -1
  8. package/build/components/block-edit/index.js +8 -3
  9. package/build/components/block-edit/index.js.map +1 -1
  10. package/build/components/block-heading-level-dropdown/index.js +5 -5
  11. package/build/components/block-heading-level-dropdown/index.js.map +1 -1
  12. package/build/components/block-heading-level-dropdown/index.native.js +5 -4
  13. package/build/components/block-heading-level-dropdown/index.native.js.map +1 -1
  14. package/build/components/block-inspector/index.js +5 -4
  15. package/build/components/block-inspector/index.js.map +1 -1
  16. package/build/components/block-list/block-crash-boundary.native.js +49 -0
  17. package/build/components/block-list/block-crash-boundary.native.js.map +1 -0
  18. package/build/components/block-list/block-crash-warning.native.js +24 -0
  19. package/build/components/block-list/block-crash-warning.native.js.map +1 -0
  20. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  21. package/build/components/block-list/block-list-item.native.js +1 -1
  22. package/build/components/block-list/block-list-item.native.js.map +1 -1
  23. package/build/components/block-list/block-outline.native.js +23 -7
  24. package/build/components/block-list/block-outline.native.js.map +1 -1
  25. package/build/components/block-list/block-selection-button.native.js.map +1 -1
  26. package/build/components/block-list/block.native.js +7 -5
  27. package/build/components/block-list/block.native.js.map +1 -1
  28. package/build/components/block-list/use-block-props/index.js +8 -1
  29. package/build/components/block-list/use-block-props/index.js.map +1 -1
  30. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
  31. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  32. package/build/components/block-mover/index.native.js.map +1 -1
  33. package/build/components/block-popover/cover.js +68 -0
  34. package/build/components/block-popover/cover.js.map +1 -0
  35. package/build/components/block-popover/drop-zone.js +2 -3
  36. package/build/components/block-popover/drop-zone.js.map +1 -1
  37. package/build/components/block-popover/index.js +1 -19
  38. package/build/components/block-popover/index.js.map +1 -1
  39. package/build/components/block-preview/index.js +2 -1
  40. package/build/components/block-preview/index.js.map +1 -1
  41. package/build/components/block-removal-warning-modal/index.js +2 -4
  42. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  43. package/build/components/block-rename/modal.js.map +1 -1
  44. package/build/components/block-settings/container.native.js +2 -1
  45. package/build/components/block-settings/container.native.js.map +1 -1
  46. package/build/components/block-settings-menu/block-settings-dropdown.js +41 -39
  47. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  48. package/build/components/block-settings-menu-controls/index.js +1 -3
  49. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  50. package/build/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  51. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  52. package/build/components/block-toolbar/index.js +24 -11
  53. package/build/components/block-toolbar/index.js.map +1 -1
  54. package/build/components/block-toolbar/shuffle.js +89 -0
  55. package/build/components/block-toolbar/shuffle.js.map +1 -0
  56. package/build/components/block-toolbar/use-has-block-toolbar.js +43 -0
  57. package/build/components/block-toolbar/use-has-block-toolbar.js.map +1 -0
  58. package/build/components/block-tools/block-selection-button.js +5 -1
  59. package/build/components/block-tools/block-selection-button.js.map +1 -1
  60. package/build/components/block-tools/empty-block-inserter.js +2 -5
  61. package/build/components/block-tools/empty-block-inserter.js.map +1 -1
  62. package/build/components/block-tools/index.js +9 -26
  63. package/build/components/block-tools/index.js.map +1 -1
  64. package/build/components/block-tools/use-show-block-tools.js +60 -0
  65. package/build/components/block-tools/use-show-block-tools.js.map +1 -0
  66. package/build/components/caption/index.native.js.map +1 -1
  67. package/build/components/child-layout-control/index.js +108 -11
  68. package/build/components/child-layout-control/index.js.map +1 -1
  69. package/build/components/color-palette/control.js.map +1 -1
  70. package/build/components/colors-gradients/control.js +1 -1
  71. package/build/components/colors-gradients/control.js.map +1 -1
  72. package/build/components/convert-to-group-buttons/toolbar.js +11 -0
  73. package/build/components/convert-to-group-buttons/toolbar.js.map +1 -1
  74. package/build/components/global-styles/border-panel.js +21 -8
  75. package/build/components/global-styles/border-panel.js.map +1 -1
  76. package/build/components/global-styles/color-panel.js +1 -1
  77. package/build/components/global-styles/color-panel.js.map +1 -1
  78. package/build/components/global-styles/dimensions-panel.js +8 -33
  79. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  80. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  81. package/build/components/global-styles/index.js +6 -0
  82. package/build/components/global-styles/index.js.map +1 -1
  83. package/build/components/global-styles/shadow-panel-components.js +80 -23
  84. package/build/components/global-styles/shadow-panel-components.js.map +1 -1
  85. package/build/components/global-styles/typography-utils.js +7 -5
  86. package/build/components/global-styles/typography-utils.js.map +1 -1
  87. package/build/components/global-styles/use-global-styles-output.js +16 -16
  88. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  89. package/build/components/global-styles/utils.js +2 -4
  90. package/build/components/global-styles/utils.js.map +1 -1
  91. package/build/components/grid-visualizer/grid-item-resizer.js +77 -0
  92. package/build/components/grid-visualizer/grid-item-resizer.js.map +1 -0
  93. package/build/components/grid-visualizer/grid-visualizer.js +81 -0
  94. package/build/components/grid-visualizer/grid-visualizer.js.map +1 -0
  95. package/build/components/grid-visualizer/index.js +20 -0
  96. package/build/components/grid-visualizer/index.js.map +1 -0
  97. package/build/components/grid-visualizer/utils.js +10 -0
  98. package/build/components/grid-visualizer/utils.js.map +1 -0
  99. package/build/components/iframe/index.js +66 -17
  100. package/build/components/iframe/index.js.map +1 -1
  101. package/build/components/index.native.js +7 -0
  102. package/build/components/index.native.js.map +1 -1
  103. package/build/components/inner-blocks/use-nested-settings-update.js +8 -2
  104. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  105. package/build/components/inserter/block-patterns-explorer/index.js +3 -6
  106. package/build/components/inserter/block-patterns-explorer/index.js.map +1 -1
  107. package/build/components/inserter/block-patterns-explorer/pattern-list.js +3 -1
  108. package/build/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  109. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  110. package/build/components/inserter/menu.native.js.map +1 -1
  111. package/build/components/inserter/mobile-tab-navigation.js +2 -2
  112. package/build/components/inserter/mobile-tab-navigation.js.map +1 -1
  113. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  114. package/build/components/inspector-controls-tabs/advanced-controls-panel.native.js +36 -0
  115. package/build/components/inspector-controls-tabs/advanced-controls-panel.native.js.map +1 -0
  116. package/build/components/inspector-controls-tabs/index.js +1 -1
  117. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  118. package/build/components/inspector-controls-tabs/styles-tab.js +1 -1
  119. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  120. package/build/components/link-control/link-preview.js +4 -1
  121. package/build/components/link-control/link-preview.js.map +1 -1
  122. package/build/components/link-control/search-input.js.map +1 -1
  123. package/build/components/list-view/block-select-button.js +0 -2
  124. package/build/components/list-view/block-select-button.js.map +1 -1
  125. package/build/components/list-view/block.js +4 -11
  126. package/build/components/list-view/block.js.map +1 -1
  127. package/build/components/list-view/branch.js.map +1 -1
  128. package/build/components/list-view/drop-indicator.js.map +1 -1
  129. package/build/components/list-view/index.js.map +1 -1
  130. package/build/components/list-view/use-clipboard-handler.js +2 -1
  131. package/build/components/list-view/use-clipboard-handler.js.map +1 -1
  132. package/build/components/list-view/utils.js +5 -3
  133. package/build/components/list-view/utils.js.map +1 -1
  134. package/build/components/panel-color-settings/index.js.map +1 -1
  135. package/build/components/provider/index.js.map +1 -1
  136. package/build/components/resizable-box-popover/index.js +3 -5
  137. package/build/components/resizable-box-popover/index.js.map +1 -1
  138. package/build/components/responsive-block-control/index.js +1 -1
  139. package/build/components/responsive-block-control/index.js.map +1 -1
  140. package/build/components/rich-text/index.js +46 -26
  141. package/build/components/rich-text/index.js.map +1 -1
  142. package/build/components/rich-text/use-enter.js +3 -0
  143. package/build/components/rich-text/use-enter.js.map +1 -1
  144. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  145. package/build/components/spacing-sizes-control/sides-dropdown/index.js +1 -1
  146. package/build/components/spacing-sizes-control/sides-dropdown/index.js.map +1 -1
  147. package/build/components/url-popover/index.js +3 -3
  148. package/build/components/url-popover/index.js.map +1 -1
  149. package/build/components/use-moving-animation/index.js +4 -0
  150. package/build/components/use-moving-animation/index.js.map +1 -1
  151. package/build/components/warning/index.native.js +9 -4
  152. package/build/components/warning/index.native.js.map +1 -1
  153. package/build/components/writing-flow/use-clipboard-handler.js +2 -1
  154. package/build/components/writing-flow/use-clipboard-handler.js.map +1 -1
  155. package/build/components/writing-flow/utils.js +23 -6
  156. package/build/components/writing-flow/utils.js.map +1 -1
  157. package/build/hooks/anchor.js +7 -8
  158. package/build/hooks/anchor.js.map +1 -1
  159. package/build/hooks/background.js +39 -2
  160. package/build/hooks/background.js.map +1 -1
  161. package/build/hooks/block-hooks.js +34 -8
  162. package/build/hooks/block-hooks.js.map +1 -1
  163. package/build/hooks/border.js +6 -4
  164. package/build/hooks/border.js.map +1 -1
  165. package/build/hooks/dimensions.js +3 -4
  166. package/build/hooks/dimensions.js.map +1 -1
  167. package/build/hooks/font-size.js +6 -7
  168. package/build/hooks/font-size.js.map +1 -1
  169. package/build/hooks/index.js +3 -2
  170. package/build/hooks/index.js.map +1 -1
  171. package/build/hooks/layout-child.js +67 -6
  172. package/build/hooks/layout-child.js.map +1 -1
  173. package/build/hooks/layout.js +32 -14
  174. package/build/hooks/layout.js.map +1 -1
  175. package/build/hooks/line-height.js.map +1 -1
  176. package/build/hooks/position.js +1 -1
  177. package/build/hooks/position.js.map +1 -1
  178. package/build/hooks/spacing-visualizer.js +115 -0
  179. package/build/hooks/spacing-visualizer.js.map +1 -0
  180. package/build/hooks/use-bindings-attributes.js +171 -48
  181. package/build/hooks/use-bindings-attributes.js.map +1 -1
  182. package/build/hooks/use-typography-props.js +1 -2
  183. package/build/hooks/use-typography-props.js.map +1 -1
  184. package/build/layouts/grid.js +6 -2
  185. package/build/layouts/grid.js.map +1 -1
  186. package/build/private-apis.js +7 -3
  187. package/build/private-apis.js.map +1 -1
  188. package/build/private-apis.native.js +3 -1
  189. package/build/private-apis.native.js.map +1 -1
  190. package/build/store/actions.js +42 -12
  191. package/build/store/actions.js.map +1 -1
  192. package/build/store/private-actions.js +29 -55
  193. package/build/store/private-actions.js.map +1 -1
  194. package/build/store/private-selectors.js +0 -8
  195. package/build/store/private-selectors.js.map +1 -1
  196. package/build/store/reducer.js +34 -46
  197. package/build/store/reducer.js.map +1 -1
  198. package/build/store/selectors.js +27 -15
  199. package/build/store/selectors.js.map +1 -1
  200. package/build-module/components/block-actions/index.js +47 -36
  201. package/build-module/components/block-actions/index.js.map +1 -1
  202. package/build-module/components/block-bindings-toolbar-indicator/index.js +18 -0
  203. package/build-module/components/block-bindings-toolbar-indicator/index.js.map +1 -0
  204. package/build-module/components/block-edit/context.js +1 -0
  205. package/build-module/components/block-edit/context.js.map +1 -1
  206. package/build-module/components/block-edit/index.js +9 -4
  207. package/build-module/components/block-edit/index.js.map +1 -1
  208. package/build-module/components/block-heading-level-dropdown/index.js +5 -5
  209. package/build-module/components/block-heading-level-dropdown/index.js.map +1 -1
  210. package/build-module/components/block-heading-level-dropdown/index.native.js +5 -4
  211. package/build-module/components/block-heading-level-dropdown/index.native.js.map +1 -1
  212. package/build-module/components/block-inspector/index.js +6 -5
  213. package/build-module/components/block-inspector/index.js.map +1 -1
  214. package/build-module/components/block-list/block-crash-boundary.native.js +42 -0
  215. package/build-module/components/block-list/block-crash-boundary.native.js.map +1 -0
  216. package/build-module/components/block-list/block-crash-warning.native.js +15 -0
  217. package/build-module/components/block-list/block-crash-warning.native.js.map +1 -0
  218. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  219. package/build-module/components/block-list/block-list-item.native.js +1 -1
  220. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  221. package/build-module/components/block-list/block-outline.native.js +23 -7
  222. package/build-module/components/block-list/block-outline.native.js.map +1 -1
  223. package/build-module/components/block-list/block-selection-button.native.js.map +1 -1
  224. package/build-module/components/block-list/block.native.js +7 -5
  225. package/build-module/components/block-list/block.native.js.map +1 -1
  226. package/build-module/components/block-list/use-block-props/index.js +9 -2
  227. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  228. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
  229. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  230. package/build-module/components/block-mover/index.native.js.map +1 -1
  231. package/build-module/components/block-popover/cover.js +60 -0
  232. package/build-module/components/block-popover/cover.js.map +1 -0
  233. package/build-module/components/block-popover/drop-zone.js +2 -3
  234. package/build-module/components/block-popover/drop-zone.js.map +1 -1
  235. package/build-module/components/block-popover/index.js +1 -19
  236. package/build-module/components/block-popover/index.js.map +1 -1
  237. package/build-module/components/block-preview/index.js +2 -1
  238. package/build-module/components/block-preview/index.js.map +1 -1
  239. package/build-module/components/block-removal-warning-modal/index.js +3 -5
  240. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  241. package/build-module/components/block-rename/modal.js.map +1 -1
  242. package/build-module/components/block-settings/container.native.js +3 -2
  243. package/build-module/components/block-settings/container.native.js.map +1 -1
  244. package/build-module/components/block-settings-menu/block-settings-dropdown.js +42 -40
  245. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  246. package/build-module/components/block-settings-menu-controls/index.js +1 -3
  247. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  248. package/build-module/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  249. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  250. package/build-module/components/block-toolbar/index.js +24 -12
  251. package/build-module/components/block-toolbar/index.js.map +1 -1
  252. package/build-module/components/block-toolbar/shuffle.js +82 -0
  253. package/build-module/components/block-toolbar/shuffle.js.map +1 -0
  254. package/build-module/components/block-toolbar/use-has-block-toolbar.js +36 -0
  255. package/build-module/components/block-toolbar/use-has-block-toolbar.js.map +1 -0
  256. package/build-module/components/block-tools/block-selection-button.js +5 -1
  257. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  258. package/build-module/components/block-tools/empty-block-inserter.js +2 -5
  259. package/build-module/components/block-tools/empty-block-inserter.js.map +1 -1
  260. package/build-module/components/block-tools/index.js +9 -26
  261. package/build-module/components/block-tools/index.js.map +1 -1
  262. package/build-module/components/block-tools/use-show-block-tools.js +54 -0
  263. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -0
  264. package/build-module/components/caption/index.native.js.map +1 -1
  265. package/build-module/components/child-layout-control/index.js +109 -12
  266. package/build-module/components/child-layout-control/index.js.map +1 -1
  267. package/build-module/components/color-palette/control.js.map +1 -1
  268. package/build-module/components/colors-gradients/control.js +1 -1
  269. package/build-module/components/colors-gradients/control.js.map +1 -1
  270. package/build-module/components/convert-to-group-buttons/toolbar.js +12 -1
  271. package/build-module/components/convert-to-group-buttons/toolbar.js.map +1 -1
  272. package/build-module/components/global-styles/border-panel.js +22 -10
  273. package/build-module/components/global-styles/border-panel.js.map +1 -1
  274. package/build-module/components/global-styles/color-panel.js +1 -1
  275. package/build-module/components/global-styles/color-panel.js.map +1 -1
  276. package/build-module/components/global-styles/dimensions-panel.js +9 -34
  277. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  278. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  279. package/build-module/components/global-styles/index.js +1 -1
  280. package/build-module/components/global-styles/index.js.map +1 -1
  281. package/build-module/components/global-styles/shadow-panel-components.js +82 -24
  282. package/build-module/components/global-styles/shadow-panel-components.js.map +1 -1
  283. package/build-module/components/global-styles/typography-utils.js +7 -5
  284. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  285. package/build-module/components/global-styles/use-global-styles-output.js +17 -17
  286. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  287. package/build-module/components/global-styles/utils.js +2 -4
  288. package/build-module/components/global-styles/utils.js.map +1 -1
  289. package/build-module/components/grid-visualizer/grid-item-resizer.js +69 -0
  290. package/build-module/components/grid-visualizer/grid-item-resizer.js.map +1 -0
  291. package/build-module/components/grid-visualizer/grid-visualizer.js +73 -0
  292. package/build-module/components/grid-visualizer/grid-visualizer.js.map +1 -0
  293. package/build-module/components/grid-visualizer/index.js +3 -0
  294. package/build-module/components/grid-visualizer/index.js.map +1 -0
  295. package/build-module/components/grid-visualizer/utils.js +4 -0
  296. package/build-module/components/grid-visualizer/utils.js.map +1 -0
  297. package/build-module/components/iframe/index.js +66 -17
  298. package/build-module/components/iframe/index.js.map +1 -1
  299. package/build-module/components/index.native.js +1 -1
  300. package/build-module/components/index.native.js.map +1 -1
  301. package/build-module/components/inner-blocks/use-nested-settings-update.js +8 -2
  302. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  303. package/build-module/components/inserter/block-patterns-explorer/index.js +3 -6
  304. package/build-module/components/inserter/block-patterns-explorer/index.js.map +1 -1
  305. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js +3 -1
  306. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  307. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  308. package/build-module/components/inserter/menu.native.js.map +1 -1
  309. package/build-module/components/inserter/mobile-tab-navigation.js +2 -2
  310. package/build-module/components/inserter/mobile-tab-navigation.js.map +1 -1
  311. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  312. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.native.js +28 -0
  313. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.native.js.map +1 -0
  314. package/build-module/components/inspector-controls-tabs/index.js +1 -1
  315. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  316. package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -2
  317. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  318. package/build-module/components/link-control/link-preview.js +5 -2
  319. package/build-module/components/link-control/link-preview.js.map +1 -1
  320. package/build-module/components/link-control/search-input.js.map +1 -1
  321. package/build-module/components/list-view/block-select-button.js +0 -2
  322. package/build-module/components/list-view/block-select-button.js.map +1 -1
  323. package/build-module/components/list-view/block.js +6 -13
  324. package/build-module/components/list-view/block.js.map +1 -1
  325. package/build-module/components/list-view/branch.js.map +1 -1
  326. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  327. package/build-module/components/list-view/index.js.map +1 -1
  328. package/build-module/components/list-view/use-clipboard-handler.js +3 -2
  329. package/build-module/components/list-view/use-clipboard-handler.js.map +1 -1
  330. package/build-module/components/list-view/utils.js +2 -1
  331. package/build-module/components/list-view/utils.js.map +1 -1
  332. package/build-module/components/panel-color-settings/index.js.map +1 -1
  333. package/build-module/components/provider/index.js.map +1 -1
  334. package/build-module/components/resizable-box-popover/index.js +3 -5
  335. package/build-module/components/resizable-box-popover/index.js.map +1 -1
  336. package/build-module/components/responsive-block-control/index.js +1 -1
  337. package/build-module/components/responsive-block-control/index.js.map +1 -1
  338. package/build-module/components/rich-text/index.js +47 -28
  339. package/build-module/components/rich-text/index.js.map +1 -1
  340. package/build-module/components/rich-text/use-enter.js +3 -0
  341. package/build-module/components/rich-text/use-enter.js.map +1 -1
  342. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  343. package/build-module/components/spacing-sizes-control/sides-dropdown/index.js +1 -1
  344. package/build-module/components/spacing-sizes-control/sides-dropdown/index.js.map +1 -1
  345. package/build-module/components/url-popover/index.js +3 -3
  346. package/build-module/components/url-popover/index.js.map +1 -1
  347. package/build-module/components/use-moving-animation/index.js +4 -0
  348. package/build-module/components/use-moving-animation/index.js.map +1 -1
  349. package/build-module/components/warning/index.native.js +9 -4
  350. package/build-module/components/warning/index.native.js.map +1 -1
  351. package/build-module/components/writing-flow/use-clipboard-handler.js +3 -2
  352. package/build-module/components/writing-flow/use-clipboard-handler.js.map +1 -1
  353. package/build-module/components/writing-flow/utils.js +22 -7
  354. package/build-module/components/writing-flow/utils.js.map +1 -1
  355. package/build-module/hooks/anchor.js +8 -9
  356. package/build-module/hooks/anchor.js.map +1 -1
  357. package/build-module/hooks/background.js +38 -1
  358. package/build-module/hooks/background.js.map +1 -1
  359. package/build-module/hooks/block-hooks.js +34 -8
  360. package/build-module/hooks/block-hooks.js.map +1 -1
  361. package/build-module/hooks/border.js +7 -5
  362. package/build-module/hooks/border.js.map +1 -1
  363. package/build-module/hooks/dimensions.js +1 -2
  364. package/build-module/hooks/dimensions.js.map +1 -1
  365. package/build-module/hooks/font-size.js +7 -8
  366. package/build-module/hooks/font-size.js.map +1 -1
  367. package/build-module/hooks/index.js +3 -2
  368. package/build-module/hooks/index.js.map +1 -1
  369. package/build-module/hooks/layout-child.js +67 -6
  370. package/build-module/hooks/layout-child.js.map +1 -1
  371. package/build-module/hooks/layout.js +32 -14
  372. package/build-module/hooks/layout.js.map +1 -1
  373. package/build-module/hooks/line-height.js.map +1 -1
  374. package/build-module/hooks/position.js +1 -1
  375. package/build-module/hooks/position.js.map +1 -1
  376. package/build-module/hooks/spacing-visualizer.js +106 -0
  377. package/build-module/hooks/spacing-visualizer.js.map +1 -0
  378. package/build-module/hooks/use-bindings-attributes.js +172 -49
  379. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  380. package/build-module/hooks/use-typography-props.js +2 -3
  381. package/build-module/hooks/use-typography-props.js.map +1 -1
  382. package/build-module/layouts/grid.js +6 -2
  383. package/build-module/layouts/grid.js.map +1 -1
  384. package/build-module/private-apis.js +7 -3
  385. package/build-module/private-apis.js.map +1 -1
  386. package/build-module/private-apis.native.js +3 -1
  387. package/build-module/private-apis.native.js.map +1 -1
  388. package/build-module/store/actions.js +42 -12
  389. package/build-module/store/actions.js.map +1 -1
  390. package/build-module/store/private-actions.js +29 -54
  391. package/build-module/store/private-actions.js.map +1 -1
  392. package/build-module/store/private-selectors.js +0 -6
  393. package/build-module/store/private-selectors.js.map +1 -1
  394. package/build-module/store/reducer.js +34 -46
  395. package/build-module/store/reducer.js.map +1 -1
  396. package/build-module/store/selectors.js +23 -13
  397. package/build-module/store/selectors.js.map +1 -1
  398. package/build-style/content-rtl.css +22 -2
  399. package/build-style/content.css +22 -2
  400. package/build-style/default-editor-styles-rtl.css +1 -0
  401. package/build-style/default-editor-styles.css +1 -0
  402. package/build-style/style-rtl.css +106 -27
  403. package/build-style/style.css +106 -27
  404. package/package.json +31 -31
  405. package/src/components/block-actions/index.js +59 -55
  406. package/src/components/block-bindings-toolbar-indicator/index.js +20 -0
  407. package/src/components/block-bindings-toolbar-indicator/style.scss +16 -0
  408. package/src/components/block-draggable/test/index.native.js +2 -2
  409. package/src/components/block-edit/context.js +1 -0
  410. package/src/components/block-edit/index.js +5 -1
  411. package/src/components/block-heading-level-dropdown/README.md +5 -5
  412. package/src/components/block-heading-level-dropdown/index.js +5 -5
  413. package/src/components/block-heading-level-dropdown/index.native.js +5 -4
  414. package/src/components/block-inspector/index.js +7 -5
  415. package/src/components/block-list/block-crash-boundary.native.js +43 -0
  416. package/src/components/block-list/block-crash-warning.native.js +19 -0
  417. package/src/components/block-list/block-invalid-warning.native.js +1 -1
  418. package/src/components/block-list/block-list-item.native.js +1 -1
  419. package/src/components/block-list/block-outline.native.js +36 -21
  420. package/src/components/block-list/block-selection-button.native.js +1 -3
  421. package/src/components/block-list/block.native.js +14 -10
  422. package/src/components/block-list/content.scss +21 -1
  423. package/src/components/block-list/test/block-outline.native.js +255 -0
  424. package/src/components/block-list/use-block-props/index.js +12 -2
  425. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -7
  426. package/src/components/block-mover/index.native.js +1 -1
  427. package/src/components/block-popover/cover.js +63 -0
  428. package/src/components/block-popover/drop-zone.js +3 -4
  429. package/src/components/block-popover/index.js +1 -28
  430. package/src/components/block-preview/index.js +3 -1
  431. package/src/components/block-removal-warning-modal/index.js +5 -19
  432. package/src/components/block-rename/modal.js +1 -1
  433. package/src/components/block-settings/container.native.js +5 -1
  434. package/src/components/block-settings-menu/block-settings-dropdown.js +53 -65
  435. package/src/components/block-settings-menu-controls/README.md +0 -9
  436. package/src/components/block-settings-menu-controls/index.js +1 -6
  437. package/src/components/block-switcher/block-transformations-menu.native.js +1 -1
  438. package/src/components/block-toolbar/block-toolbar-menu.native.js +2 -2
  439. package/src/components/block-toolbar/index.js +22 -16
  440. package/src/components/block-toolbar/shuffle.js +93 -0
  441. package/src/components/block-toolbar/test/index.native.js +1 -7
  442. package/src/components/block-toolbar/use-has-block-toolbar.js +49 -0
  443. package/src/components/block-tools/block-selection-button.js +4 -0
  444. package/src/components/block-tools/empty-block-inserter.js +3 -6
  445. package/src/components/block-tools/index.js +13 -36
  446. package/src/components/block-tools/use-show-block-tools.js +73 -0
  447. package/src/components/caption/index.native.js +1 -1
  448. package/src/components/child-layout-control/index.js +148 -36
  449. package/src/components/color-palette/control.js +1 -1
  450. package/src/components/colors-gradients/control.js +1 -1
  451. package/src/components/colors-gradients/test/control.js +2 -2
  452. package/src/components/contrast-checker/test/index.js +10 -10
  453. package/src/components/convert-to-group-buttons/toolbar.js +13 -1
  454. package/src/components/default-block-appender/content.scss +5 -2
  455. package/src/components/global-styles/border-panel.js +35 -24
  456. package/src/components/global-styles/color-panel.js +1 -1
  457. package/src/components/global-styles/dimensions-panel.js +9 -34
  458. package/src/components/global-styles/image-settings-panel.js +1 -1
  459. package/src/components/global-styles/index.js +5 -1
  460. package/src/components/global-styles/shadow-panel-components.js +92 -23
  461. package/src/components/global-styles/style.scss +33 -10
  462. package/src/components/global-styles/test/typography-utils.js +231 -81
  463. package/src/components/global-styles/test/use-global-styles-output.js +31 -0
  464. package/src/components/global-styles/typography-utils.js +10 -7
  465. package/src/components/global-styles/use-global-styles-output.js +17 -17
  466. package/src/components/global-styles/utils.js +2 -26
  467. package/src/components/grid-visualizer/grid-item-resizer.js +100 -0
  468. package/src/components/grid-visualizer/grid-visualizer.js +81 -0
  469. package/src/components/grid-visualizer/index.js +2 -0
  470. package/src/components/grid-visualizer/style.scss +33 -0
  471. package/src/components/grid-visualizer/utils.js +5 -0
  472. package/src/components/iframe/index.js +89 -26
  473. package/src/components/index.native.js +1 -0
  474. package/src/components/inner-blocks/use-nested-settings-update.js +12 -2
  475. package/src/components/inserter/block-patterns-explorer/index.js +2 -9
  476. package/src/components/inserter/block-patterns-explorer/pattern-list.js +7 -1
  477. package/src/components/inserter/media-tab/media-preview.js +1 -1
  478. package/src/components/inserter/menu.native.js +3 -3
  479. package/src/components/inserter/mobile-tab-navigation.js +2 -2
  480. package/src/components/inserter/style.scss +10 -0
  481. package/src/components/inspector-controls/block-support-tools-panel.js +2 -2
  482. package/src/components/inspector-controls-tabs/advanced-controls-panel.native.js +31 -0
  483. package/src/components/inspector-controls-tabs/index.js +1 -1
  484. package/src/components/inspector-controls-tabs/styles-tab.js +2 -2
  485. package/src/components/line-height-control/test/index.js +1 -1
  486. package/src/components/link-control/link-preview.js +9 -2
  487. package/src/components/link-control/search-input.js +1 -1
  488. package/src/components/link-control/style.scss +9 -5
  489. package/src/components/list-view/block-select-button.js +0 -2
  490. package/src/components/list-view/block.js +12 -21
  491. package/src/components/list-view/branch.js +1 -1
  492. package/src/components/list-view/drop-indicator.js +1 -1
  493. package/src/components/list-view/index.js +1 -1
  494. package/src/components/list-view/style.scss +34 -16
  495. package/src/components/list-view/use-clipboard-handler.js +3 -2
  496. package/src/components/list-view/utils.js +4 -1
  497. package/src/components/panel-color-settings/index.js +1 -1
  498. package/src/components/panel-color-settings/test/index.js +3 -3
  499. package/src/components/provider/index.js +1 -4
  500. package/src/components/resizable-box-popover/index.js +4 -6
  501. package/src/components/responsive-block-control/README.md +4 -4
  502. package/src/components/responsive-block-control/index.js +1 -1
  503. package/src/components/responsive-block-control/test/index.js +5 -5
  504. package/src/components/rich-text/README.md +6 -0
  505. package/src/components/rich-text/index.js +76 -53
  506. package/src/components/rich-text/use-enter.js +4 -0
  507. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +4 -4
  508. package/src/components/spacing-sizes-control/sides-dropdown/index.js +1 -1
  509. package/src/components/url-popover/index.js +5 -5
  510. package/src/components/url-popover/style.scss +1 -0
  511. package/src/components/use-moving-animation/index.js +1 -0
  512. package/src/components/warning/index.native.js +19 -15
  513. package/src/components/writing-flow/use-clipboard-handler.js +3 -2
  514. package/src/components/writing-flow/utils.js +31 -16
  515. package/src/hooks/anchor.js +41 -61
  516. package/src/hooks/background.js +49 -4
  517. package/src/hooks/block-hooks.js +47 -9
  518. package/src/hooks/block-hooks.scss +6 -0
  519. package/src/hooks/border.js +16 -4
  520. package/src/hooks/dimensions.js +1 -2
  521. package/src/hooks/font-size.js +7 -12
  522. package/src/hooks/index.js +3 -0
  523. package/src/hooks/layout-child.js +82 -8
  524. package/src/hooks/layout.js +34 -19
  525. package/src/hooks/line-height.js +1 -1
  526. package/src/hooks/position.js +1 -1
  527. package/src/hooks/spacing-visualizer.js +126 -0
  528. package/src/hooks/{padding.scss → spacing.scss} +1 -1
  529. package/src/hooks/test/__snapshots__/anchor.native.js.snap +7 -0
  530. package/src/hooks/test/anchor.native.js +32 -0
  531. package/src/hooks/use-bindings-attributes.js +215 -65
  532. package/src/hooks/use-typography-props.js +2 -8
  533. package/src/layouts/grid.js +8 -3
  534. package/src/private-apis.js +6 -2
  535. package/src/private-apis.native.js +2 -0
  536. package/src/store/actions.js +56 -18
  537. package/src/store/private-actions.js +34 -79
  538. package/src/store/private-selectors.js +0 -8
  539. package/src/store/reducer.js +43 -64
  540. package/src/store/selectors.js +41 -46
  541. package/src/store/test/actions.js +0 -4
  542. package/src/style.scss +3 -1
  543. package/tsconfig.json +1 -0
  544. package/build/hooks/margin.js +0 -86
  545. package/build/hooks/margin.js.map +0 -1
  546. package/build/hooks/padding.js +0 -78
  547. package/build/hooks/padding.js.map +0 -1
  548. package/build/utils/use-can-block-toolbar-be-focused.js +0 -46
  549. package/build/utils/use-can-block-toolbar-be-focused.js.map +0 -1
  550. package/build-module/hooks/margin.js +0 -78
  551. package/build-module/hooks/margin.js.map +0 -1
  552. package/build-module/hooks/padding.js +0 -70
  553. package/build-module/hooks/padding.js.map +0 -1
  554. package/build-module/utils/use-can-block-toolbar-be-focused.js +0 -40
  555. package/build-module/utils/use-can-block-toolbar-be-focused.js.map +0 -1
  556. package/src/hooks/margin.js +0 -91
  557. package/src/hooks/padding.js +0 -82
  558. package/src/utils/use-can-block-toolbar-be-focused.js +0 -48
@@ -24,10 +24,7 @@ import {
24
24
  getBlockStyleVariationSelector,
25
25
  } from './utils';
26
26
  import { getBlockCSSSelector } from './get-block-css-selector';
27
- import {
28
- getTypographyFontSizeValue,
29
- getFluidTypographyOptionsFromSettings,
30
- } from './typography-utils';
27
+ import { getTypographyFontSizeValue } from './typography-utils';
31
28
  import { GlobalStylesContext } from './context';
32
29
  import { useGlobalSetting } from './hooks';
33
30
  import { getDuotoneFilter } from '../duotone/utils';
@@ -412,7 +409,9 @@ export function getStylesDeclarations(
412
409
  let ruleValue = rule.value;
413
410
  if ( typeof ruleValue !== 'string' && ruleValue?.ref ) {
414
411
  const refPath = ruleValue.ref.split( '.' );
415
- ruleValue = getValueFromObjectPath( tree, refPath );
412
+ ruleValue = compileStyleValue(
413
+ getValueFromObjectPath( tree, refPath )
414
+ );
416
415
  // Presence of another ref indicates a reference to another dynamic value.
417
416
  // Pointing to another dynamic value is not supported.
418
417
  if ( ! ruleValue || ruleValue?.ref ) {
@@ -431,7 +430,7 @@ export function getStylesDeclarations(
431
430
  */
432
431
  ruleValue = getTypographyFontSizeValue(
433
432
  { size: ruleValue },
434
- getFluidTypographyOptionsFromSettings( tree?.settings )
433
+ tree?.settings
435
434
  );
436
435
  }
437
436
 
@@ -600,6 +599,7 @@ const STYLE_KEYS = [
600
599
  'filter',
601
600
  'outline',
602
601
  'shadow',
602
+ 'background',
603
603
  ];
604
604
 
605
605
  function pickStyleKeys( treeToPickFrom ) {
@@ -1194,15 +1194,13 @@ export function useGlobalStylesOutputWithConfig( mergedConfig = {} ) {
1194
1194
 
1195
1195
  const isTemplate = blockContext?.templateSlug !== undefined;
1196
1196
 
1197
- const getBlockStyles = useSelect( ( select ) => {
1198
- return select( blocksStore ).getBlockStyles;
1199
- }, [] );
1197
+ const { getBlockStyles } = useSelect( blocksStore );
1200
1198
 
1201
1199
  return useMemo( () => {
1202
1200
  if ( ! mergedConfig?.styles || ! mergedConfig?.settings ) {
1203
1201
  return [];
1204
1202
  }
1205
- mergedConfig = updateConfigWithSeparator( mergedConfig );
1203
+ const updatedConfig = updateConfigWithSeparator( mergedConfig );
1206
1204
 
1207
1205
  const blockSelectors = getBlockSelectors(
1208
1206
  getBlockTypes(),
@@ -1210,18 +1208,18 @@ export function useGlobalStylesOutputWithConfig( mergedConfig = {} ) {
1210
1208
  );
1211
1209
 
1212
1210
  const customProperties = toCustomProperties(
1213
- mergedConfig,
1211
+ updatedConfig,
1214
1212
  blockSelectors
1215
1213
  );
1216
1214
  const globalStyles = toStyles(
1217
- mergedConfig,
1215
+ updatedConfig,
1218
1216
  blockSelectors,
1219
1217
  hasBlockGapSupport,
1220
1218
  hasFallbackGapSupport,
1221
1219
  disableLayoutStyles,
1222
1220
  isTemplate
1223
1221
  );
1224
- const svgs = toSvgFilters( mergedConfig, blockSelectors );
1222
+ const svgs = toSvgFilters( updatedConfig, blockSelectors );
1225
1223
 
1226
1224
  const styles = [
1227
1225
  {
@@ -1234,7 +1232,7 @@ export function useGlobalStylesOutputWithConfig( mergedConfig = {} ) {
1234
1232
  },
1235
1233
  // Load custom CSS in own stylesheet so that any invalid CSS entered in the input won't break all the global styles in the editor.
1236
1234
  {
1237
- css: mergedConfig.styles.css ?? '',
1235
+ css: updatedConfig.styles.css ?? '',
1238
1236
  isGlobalStyles: true,
1239
1237
  },
1240
1238
  {
@@ -1248,11 +1246,11 @@ export function useGlobalStylesOutputWithConfig( mergedConfig = {} ) {
1248
1246
  // If there are, get the block selector and push the selector together with
1249
1247
  // the CSS value to the 'stylesheets' array.
1250
1248
  getBlockTypes().forEach( ( blockType ) => {
1251
- if ( mergedConfig.styles.blocks[ blockType.name ]?.css ) {
1249
+ if ( updatedConfig.styles.blocks[ blockType.name ]?.css ) {
1252
1250
  const selector = blockSelectors[ blockType.name ].selector;
1253
1251
  styles.push( {
1254
1252
  css: processCSSNesting(
1255
- mergedConfig.styles.blocks[ blockType.name ]?.css,
1253
+ updatedConfig.styles.blocks[ blockType.name ]?.css,
1256
1254
  selector
1257
1255
  ),
1258
1256
  isGlobalStyles: true,
@@ -1260,12 +1258,14 @@ export function useGlobalStylesOutputWithConfig( mergedConfig = {} ) {
1260
1258
  }
1261
1259
  } );
1262
1260
 
1263
- return [ styles, mergedConfig.settings ];
1261
+ return [ styles, updatedConfig.settings ];
1264
1262
  }, [
1265
1263
  hasBlockGapSupport,
1266
1264
  hasFallbackGapSupport,
1267
1265
  mergedConfig,
1268
1266
  disableLayoutStyles,
1267
+ isTemplate,
1268
+ getBlockStyles,
1269
1269
  ] );
1270
1270
  }
1271
1271
 
@@ -6,32 +6,11 @@ import fastDeepEqual from 'fast-deep-equal/es6';
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
- import {
10
- getTypographyFontSizeValue,
11
- getFluidTypographyOptionsFromSettings,
12
- } from './typography-utils';
9
+ import { getTypographyFontSizeValue } from './typography-utils';
13
10
  import { getValueFromObjectPath } from '../../utils/object';
14
11
 
15
12
  /* Supporting data. */
16
- export const ROOT_BLOCK_NAME = 'root';
17
13
  export const ROOT_BLOCK_SELECTOR = 'body';
18
- export const ROOT_BLOCK_SUPPORTS = [
19
- 'background',
20
- 'backgroundColor',
21
- 'color',
22
- 'linkColor',
23
- 'captionColor',
24
- 'buttonColor',
25
- 'headingColor',
26
- 'fontFamily',
27
- 'fontSize',
28
- 'fontStyle',
29
- 'fontWeight',
30
- 'lineHeight',
31
- 'textDecoration',
32
- 'textTransform',
33
- 'padding',
34
- ];
35
14
 
36
15
  export const PRESET_METADATA = [
37
16
  {
@@ -77,10 +56,7 @@ export const PRESET_METADATA = [
77
56
  {
78
57
  path: [ 'typography', 'fontSizes' ],
79
58
  valueFunc: ( preset, settings ) =>
80
- getTypographyFontSizeValue(
81
- preset,
82
- getFluidTypographyOptionsFromSettings( settings )
83
- ),
59
+ getTypographyFontSizeValue( preset, settings ),
84
60
  valueKey: 'size',
85
61
  cssVarInfix: 'font-size',
86
62
  classes: [ { classSuffix: 'font-size', propertyName: 'font-size' } ],
@@ -0,0 +1,100 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { ResizableBox } from '@wordpress/components';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { __unstableUseBlockElement as useBlockElement } from '../block-list/use-block-props/use-block-refs';
10
+ import BlockPopoverCover from '../block-popover/cover';
11
+ import { getComputedCSS } from './utils';
12
+
13
+ export function GridItemResizer( { clientId, onChange } ) {
14
+ const blockElement = useBlockElement( clientId );
15
+ if ( ! blockElement ) {
16
+ return null;
17
+ }
18
+ return (
19
+ <BlockPopoverCover
20
+ className="block-editor-grid-item-resizer"
21
+ clientId={ clientId }
22
+ __unstablePopoverSlot="block-toolbar"
23
+ >
24
+ <ResizableBox
25
+ className="block-editor-grid-item-resizer__box"
26
+ size={ {
27
+ width: '100%',
28
+ height: '100%',
29
+ } }
30
+ enable={ {
31
+ bottom: true,
32
+ bottomLeft: false,
33
+ bottomRight: false,
34
+ left: false,
35
+ right: true,
36
+ top: false,
37
+ topLeft: false,
38
+ topRight: false,
39
+ } }
40
+ onResizeStop={ ( event, direction, boxElement ) => {
41
+ const gridElement = blockElement.parentElement;
42
+ const columnGap = parseFloat(
43
+ getComputedCSS( gridElement, 'column-gap' )
44
+ );
45
+ const rowGap = parseFloat(
46
+ getComputedCSS( gridElement, 'row-gap' )
47
+ );
48
+ const gridColumnLines = getGridLines(
49
+ getComputedCSS( gridElement, 'grid-template-columns' ),
50
+ columnGap
51
+ );
52
+ const gridRowLines = getGridLines(
53
+ getComputedCSS( gridElement, 'grid-template-rows' ),
54
+ rowGap
55
+ );
56
+ const columnStart = getClosestLine(
57
+ gridColumnLines,
58
+ blockElement.offsetLeft
59
+ );
60
+ const rowStart = getClosestLine(
61
+ gridRowLines,
62
+ blockElement.offsetTop
63
+ );
64
+ const columnEnd = getClosestLine(
65
+ gridColumnLines,
66
+ blockElement.offsetLeft + boxElement.offsetWidth
67
+ );
68
+ const rowEnd = getClosestLine(
69
+ gridRowLines,
70
+ blockElement.offsetTop + boxElement.offsetHeight
71
+ );
72
+ onChange( {
73
+ columnSpan: Math.max( columnEnd - columnStart, 1 ),
74
+ rowSpan: Math.max( rowEnd - rowStart, 1 ),
75
+ } );
76
+ } }
77
+ />
78
+ </BlockPopoverCover>
79
+ );
80
+ }
81
+
82
+ function getGridLines( template, gap ) {
83
+ const lines = [ 0 ];
84
+ for ( const size of template.split( ' ' ) ) {
85
+ const line = parseFloat( size );
86
+ lines.push( lines[ lines.length - 1 ] + line + gap );
87
+ }
88
+ return lines;
89
+ }
90
+
91
+ function getClosestLine( lines, position ) {
92
+ return lines.reduce(
93
+ ( closest, line, index ) =>
94
+ Math.abs( line - position ) <
95
+ Math.abs( lines[ closest ] - position )
96
+ ? index
97
+ : closest,
98
+ 0
99
+ );
100
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useState, useEffect } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { __unstableUseBlockElement as useBlockElement } from '../block-list/use-block-props/use-block-refs';
10
+ import BlockPopoverCover from '../block-popover/cover';
11
+ import { getComputedCSS } from './utils';
12
+
13
+ export function GridVisualizer( { clientId } ) {
14
+ const blockElement = useBlockElement( clientId );
15
+ if ( ! blockElement ) {
16
+ return null;
17
+ }
18
+ return (
19
+ <BlockPopoverCover
20
+ className="block-editor-grid-visualizer"
21
+ clientId={ clientId }
22
+ __unstablePopoverSlot="block-toolbar"
23
+ >
24
+ <GridVisualizerGrid blockElement={ blockElement } />
25
+ </BlockPopoverCover>
26
+ );
27
+ }
28
+
29
+ function GridVisualizerGrid( { blockElement } ) {
30
+ const [ gridInfo, setGridInfo ] = useState( () =>
31
+ getGridInfo( blockElement )
32
+ );
33
+ useEffect( () => {
34
+ const observers = [];
35
+ for ( const element of [ blockElement, ...blockElement.children ] ) {
36
+ const observer = new window.ResizeObserver( () => {
37
+ setGridInfo( getGridInfo( blockElement ) );
38
+ } );
39
+ observer.observe( element );
40
+ observers.push( observer );
41
+ }
42
+ return () => {
43
+ for ( const observer of observers ) {
44
+ observer.disconnect();
45
+ }
46
+ };
47
+ }, [ blockElement ] );
48
+ return (
49
+ <div
50
+ className="block-editor-grid-visualizer__grid"
51
+ style={ gridInfo.style }
52
+ >
53
+ { Array.from( { length: gridInfo.numItems }, ( _, i ) => (
54
+ <div key={ i } className="block-editor-grid-visualizer__item" />
55
+ ) ) }
56
+ </div>
57
+ );
58
+ }
59
+
60
+ function getGridInfo( blockElement ) {
61
+ const gridTemplateColumns = getComputedCSS(
62
+ blockElement,
63
+ 'grid-template-columns'
64
+ );
65
+ const gridTemplateRows = getComputedCSS(
66
+ blockElement,
67
+ 'grid-template-rows'
68
+ );
69
+ const numColumns = gridTemplateColumns.split( ' ' ).length;
70
+ const numRows = gridTemplateRows.split( ' ' ).length;
71
+ const numItems = numColumns * numRows;
72
+ return {
73
+ numItems,
74
+ style: {
75
+ gridTemplateColumns,
76
+ gridTemplateRows,
77
+ gap: getComputedCSS( blockElement, 'gap' ),
78
+ padding: getComputedCSS( blockElement, 'padding' ),
79
+ },
80
+ };
81
+ }
@@ -0,0 +1,2 @@
1
+ export { GridVisualizer } from './grid-visualizer';
2
+ export { GridItemResizer } from './grid-item-resizer';
@@ -0,0 +1,33 @@
1
+ // TODO: Specificity hacks to get rid of all these darn !importants.
2
+
3
+ .block-editor-grid-visualizer {
4
+ z-index: z-index(".block-editor-grid-visualizer") !important;
5
+ }
6
+
7
+ .block-editor-grid-visualizer .components-popover__content * {
8
+ pointer-events: none !important;
9
+ }
10
+
11
+ .block-editor-grid-visualizer__grid {
12
+ display: grid;
13
+ }
14
+
15
+ .block-editor-grid-visualizer__item {
16
+ border: $border-width dashed $gray-300;
17
+ }
18
+
19
+ .block-editor-grid-item-resizer {
20
+ z-index: z-index(".block-editor-grid-visualizer") !important;
21
+ }
22
+
23
+ .block-editor-grid-item-resizer .components-popover__content * {
24
+ pointer-events: none !important;
25
+ }
26
+
27
+ .block-editor-grid-item-resizer__box {
28
+ border: $border-width solid var(--wp-admin-theme-color);
29
+
30
+ .components-resizable-box__handle {
31
+ pointer-events: all !important;
32
+ }
33
+ }
@@ -0,0 +1,5 @@
1
+ export function getComputedCSS( element, property ) {
2
+ return element.ownerDocument.defaultView
3
+ .getComputedStyle( element )
4
+ .getPropertyValue( property );
5
+ }
@@ -106,13 +106,14 @@ function Iframe( {
106
106
  tabIndex = 0,
107
107
  scale = 1,
108
108
  frameSize = 0,
109
- expand = false,
110
109
  readonly,
111
110
  forwardedRef: ref,
111
+ title = __( 'Editor canvas' ),
112
112
  ...props
113
113
  } ) {
114
114
  const { resolvedAssets, isPreviewMode } = useSelect( ( select ) => {
115
- const settings = select( blockEditorStore ).getSettings();
115
+ const { getSettings } = select( blockEditorStore );
116
+ const settings = getSettings();
116
117
  return {
117
118
  resolvedAssets: settings.__unstableResolvedAssets,
118
119
  isPreviewMode: settings.__unstableIsPreviewMode,
@@ -123,8 +124,11 @@ function Iframe( {
123
124
  const [ bodyClasses, setBodyClasses ] = useState( [] );
124
125
  const clearerRef = useBlockSelectionClearer();
125
126
  const [ before, writingFlowRef, after ] = useWritingFlow();
126
- const [ contentResizeListener, { height: contentHeight } ] =
127
- useResizeObserver();
127
+ const [
128
+ contentResizeListener,
129
+ { height: contentHeight, width: contentWidth },
130
+ ] = useResizeObserver();
131
+
128
132
  const setRef = useRefEffect( ( node ) => {
129
133
  node._load = () => {
130
134
  setIframeDocument( node.contentDocument );
@@ -139,6 +143,8 @@ function Iframe( {
139
143
  const { documentElement } = contentDocument;
140
144
  iFrameDocument = contentDocument;
141
145
 
146
+ documentElement.classList.add( 'block-editor-iframe__html' );
147
+
142
148
  clearerRef( documentElement );
143
149
 
144
150
  // Ideally ALL classes that are added through get_body_class should
@@ -201,6 +207,20 @@ function Iframe( {
201
207
  };
202
208
  }, [] );
203
209
 
210
+ const windowResizeRef = useRefEffect( ( node ) => {
211
+ const nodeWindow = node.ownerDocument.defaultView;
212
+
213
+ const onResize = () => {
214
+ setIframeWindowInnerHeight( nodeWindow.innerHeight );
215
+ };
216
+ nodeWindow.addEventListener( 'resize', onResize );
217
+ return () => {
218
+ nodeWindow.removeEventListener( 'resize', onResize );
219
+ };
220
+ }, [] );
221
+
222
+ const [ iframeWindowInnerHeight, setIframeWindowInnerHeight ] = useState();
223
+
204
224
  const disabledRef = useDisabled( { isDisabled: ! readonly } );
205
225
  const bodyRef = useMergeRefs( [
206
226
  useBubbleEvents( iframeDocument ),
@@ -208,6 +228,7 @@ function Iframe( {
208
228
  clearerRef,
209
229
  writingFlowRef,
210
230
  disabledRef,
231
+ windowResizeRef,
211
232
  ] );
212
233
 
213
234
  // Correct doctype is required to enable rendering in standards
@@ -218,7 +239,19 @@ function Iframe( {
218
239
  <head>
219
240
  <meta charset="utf-8">
220
241
  <script>window.frameElement._load()</script>
221
- <style>html{height:auto!important;min-height:100%;}body{margin:0}</style>
242
+ <style>
243
+ html{
244
+ height: auto !important;
245
+ min-height: 100%;
246
+ }
247
+
248
+ body {
249
+ margin: 0;
250
+ /* Default background color in case zoom out mode background
251
+ colors the html element */
252
+ background: white;
253
+ }
254
+ </style>
222
255
  ${ styles }
223
256
  ${ scripts }
224
257
  </head>
@@ -236,33 +269,63 @@ function Iframe( {
236
269
 
237
270
  useEffect( () => cleanup, [ cleanup ] );
238
271
 
239
- // We need to counter the margin created by scaling the iframe. If the scale
240
- // is e.g. 0.45, then the top + bottom margin is 0.55 (1 - scale). Just the
241
- // top or bottom margin is 0.55 / 2 ((1 - scale) / 2).
242
- const marginFromScaling = ( contentHeight * ( 1 - scale ) ) / 2;
272
+ useEffect( () => {
273
+ if ( ! iframeDocument ) {
274
+ return;
275
+ }
276
+
277
+ const _scale =
278
+ typeof scale === 'function'
279
+ ? scale( contentWidth, contentHeight )
280
+ : scale;
281
+
282
+ if ( _scale !== 1 ) {
283
+ // Hack to get proper margins when scaling the iframe document.
284
+ const bottomFrameSize = frameSize - contentHeight * ( 1 - _scale );
285
+
286
+ iframeDocument.body.classList.add( 'is-zoomed-out' );
287
+
288
+ iframeDocument.documentElement.style.transform = `scale( ${ _scale } )`;
289
+ iframeDocument.documentElement.style.marginTop = `${ frameSize }px`;
290
+ // TODO: `marginBottom` doesn't work in Firefox. We need another way to do this.
291
+ iframeDocument.documentElement.style.marginBottom = `${ bottomFrameSize }px`;
292
+ if ( iframeWindowInnerHeight > contentHeight * _scale ) {
293
+ iframeDocument.body.style.minHeight = `${ Math.floor(
294
+ ( iframeWindowInnerHeight - 2 * frameSize ) / _scale
295
+ ) }px`;
296
+ }
297
+
298
+ return () => {
299
+ iframeDocument.body.classList.remove( 'is-zoomed-out' );
300
+ iframeDocument.documentElement.style.transform = '';
301
+ iframeDocument.documentElement.style.marginTop = '';
302
+ iframeDocument.documentElement.style.marginBottom = '';
303
+ iframeDocument.body.style.minHeight = '';
304
+ };
305
+ }
306
+ }, [
307
+ scale,
308
+ frameSize,
309
+ iframeDocument,
310
+ contentHeight,
311
+ iframeWindowInnerHeight,
312
+ contentWidth,
313
+ ] );
314
+
315
+ // Make sure to not render the before and after focusable div elements in view
316
+ // mode. They're only needed to capture focus in edit mode.
317
+ const shouldRenderFocusCaptureElements = tabIndex >= 0 && ! isPreviewMode;
243
318
 
244
319
  return (
245
320
  <>
246
- { tabIndex >= 0 && before }
321
+ { shouldRenderFocusCaptureElements && before }
247
322
  { /* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */ }
248
323
  <iframe
249
324
  { ...props }
250
325
  style={ {
251
326
  border: 0,
252
327
  ...props.style,
253
- height: expand ? contentHeight : props.style?.height,
254
- marginTop:
255
- scale !== 1
256
- ? -marginFromScaling + frameSize
257
- : props.style?.marginTop,
258
- marginBottom:
259
- scale !== 1
260
- ? -marginFromScaling + frameSize
261
- : props.style?.marginBottom,
262
- transform:
263
- scale !== 1
264
- ? `scale( ${ scale } )`
265
- : props.style?.transform,
328
+ height: props.style?.height,
266
329
  transition: 'all .3s',
267
330
  } }
268
331
  ref={ useMergeRefs( [ ref, setRef ] ) }
@@ -271,7 +334,7 @@ function Iframe( {
271
334
  // mode. Also preload the styles to avoid a flash of unstyled
272
335
  // content.
273
336
  src={ src }
274
- title={ __( 'Editor canvas' ) }
337
+ title={ title }
275
338
  onKeyDown={ ( event ) => {
276
339
  if ( props.onKeyDown ) {
277
340
  props.onKeyDown( event );
@@ -282,7 +345,7 @@ function Iframe( {
282
345
  // though by doing so we also trigger another React event,
283
346
  // so we need to stop the propagation of this event to avoid
284
347
  // duplication.
285
- else if (
348
+ if (
286
349
  event.currentTarget.ownerDocument !==
287
350
  event.target.ownerDocument
288
351
  ) {
@@ -316,7 +379,7 @@ function Iframe( {
316
379
  iframeDocument.documentElement
317
380
  ) }
318
381
  </iframe>
319
- { tabIndex >= 0 && after }
382
+ { shouldRenderFocusCaptureElements && after }
320
383
  </>
321
384
  );
322
385
  }
@@ -49,6 +49,7 @@ export { default as MediaUploadProgress } from './media-upload-progress';
49
49
  export {
50
50
  MEDIA_UPLOAD_STATE_UPLOADING,
51
51
  MEDIA_UPLOAD_STATE_SUCCEEDED,
52
+ MEDIA_UPLOAD_STATE_PAUSED,
52
53
  MEDIA_UPLOAD_STATE_FAILED,
53
54
  MEDIA_UPLOAD_STATE_RESET,
54
55
  } from './media-upload-progress/constants';
@@ -37,11 +37,11 @@ function useShallowMemo( value ) {
37
37
  * in inner blocks.
38
38
  * @param {string[]} prioritizedInserterBlocks Block names and/or block variations to be prioritized in the inserter, in the format {blockName}/{variationName}.
39
39
  * @param {?WPDirectInsertBlock} defaultBlock The default block to insert: [ blockName, { blockAttributes } ].
40
- * @param {?Function|boolean} directInsert If a default block should be inserted directly by the appender.
40
+ * @param {?boolean} directInsert If a default block should be inserted directly by the appender.
41
41
  *
42
42
  * @param {?WPDirectInsertBlock} __experimentalDefaultBlock A deprecated prop for the default block to insert: [ blockName, { blockAttributes } ]. Use `defaultBlock` instead.
43
43
  *
44
- * @param {?Function|boolean} __experimentalDirectInsert A deprecated prop for whether a default block should be inserted directly by the appender. Use `directInsert` instead.
44
+ * @param {?boolean} __experimentalDirectInsert A deprecated prop for whether a default block should be inserted directly by the appender. Use `directInsert` instead.
45
45
  *
46
46
  * @param {string} [templateLock] The template lock specified for the inner
47
47
  * blocks component. (e.g. "all")
@@ -138,6 +138,16 @@ export default function useNestedSettingsUpdate(
138
138
  newSettings.directInsert = directInsert;
139
139
  }
140
140
 
141
+ if (
142
+ newSettings.directInsert !== undefined &&
143
+ typeof newSettings.directInsert !== 'boolean'
144
+ ) {
145
+ deprecated( 'Using `Function` as a `directInsert` argument', {
146
+ alternative: '`boolean` values',
147
+ since: '6.5',
148
+ } );
149
+ }
150
+
141
151
  // Batch updates to block list settings to avoid triggering cascading renders
142
152
  // for each container block included in a tree and optimize initial render.
143
153
  // To avoid triggering updateBlockListSettings for each container block
@@ -14,16 +14,11 @@ import { usePatternCategories } from '../block-patterns-tab/use-pattern-categori
14
14
 
15
15
  function PatternsExplorer( { initialCategory, rootClientId } ) {
16
16
  const [ searchValue, setSearchValue ] = useState( '' );
17
- const [ patternSourceFilter, setPatternSourceFilter ] = useState( 'all' );
18
-
19
17
  const [ selectedCategory, setSelectedCategory ] = useState(
20
18
  initialCategory?.name
21
19
  );
22
20
 
23
- const patternCategories = usePatternCategories(
24
- rootClientId,
25
- patternSourceFilter
26
- );
21
+ const patternCategories = usePatternCategories( rootClientId );
27
22
 
28
23
  return (
29
24
  <div className="block-editor-block-patterns-explorer">
@@ -33,14 +28,12 @@ function PatternsExplorer( { initialCategory, rootClientId } ) {
33
28
  onClickCategory={ setSelectedCategory }
34
29
  searchValue={ searchValue }
35
30
  setSearchValue={ setSearchValue }
36
- patternSourceFilter={ patternSourceFilter }
37
- setPatternSourceFilter={ setPatternSourceFilter }
38
31
  />
39
32
  <PatternList
40
33
  searchValue={ searchValue }
41
34
  selectedCategory={ selectedCategory }
42
35
  patternCategories={ patternCategories }
43
- patternSourceFilter={ patternSourceFilter }
36
+ rootClientId={ rootClientId }
44
37
  />
45
38
  </div>
46
39
  );
@@ -47,10 +47,16 @@ function PatternsListHeader( { filterValue, filteredBlockPatternsLength } ) {
47
47
  );
48
48
  }
49
49
 
50
- function PatternList( { searchValue, selectedCategory, patternCategories } ) {
50
+ function PatternList( {
51
+ searchValue,
52
+ selectedCategory,
53
+ patternCategories,
54
+ rootClientId,
55
+ } ) {
51
56
  const container = useRef();
52
57
  const debouncedSpeak = useDebounce( speak, 500 );
53
58
  const [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {
59
+ rootClientId,
54
60
  shouldFocusBlock: true,
55
61
  } );
56
62
  const [ patterns, , onClickPattern ] = usePatternsState(
@@ -211,7 +211,7 @@ export function MediaPreview( { media, onClick, category } ) {
211
211
  const onMouseLeave = useCallback( () => setIsHovered( false ), [] );
212
212
  return (
213
213
  <>
214
- <InserterDraggableBlocks isEnabled={ true } blocks={ [ block ] }>
214
+ <InserterDraggableBlocks isEnabled blocks={ [ block ] }>
215
215
  { ( { draggable, onDragStart, onDragEnd } ) => (
216
216
  <div
217
217
  className={ classnames(