@wordpress/block-editor 13.2.0 → 13.4.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 (538) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +0 -5
  3. package/build/components/alignment-control/ui.js +2 -2
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-alignment-control/ui.js +1 -1
  6. package/build/components/block-alignment-control/ui.js.map +1 -1
  7. package/build/components/block-alignment-control/ui.native.js +1 -1
  8. package/build/components/block-alignment-control/ui.native.js.map +1 -1
  9. package/build/components/block-breadcrumb/index.js +12 -1
  10. package/build/components/block-breadcrumb/index.js.map +1 -1
  11. package/build/components/block-inspector/index.js +6 -3
  12. package/build/components/block-inspector/index.js.map +1 -1
  13. package/build/components/block-list/use-block-props/index.js +3 -1
  14. package/build/components/block-list/use-block-props/index.js.map +1 -1
  15. package/build/components/block-list/use-block-props/use-block-refs.js +9 -2
  16. package/build/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  17. package/build/components/block-list/use-block-props/use-is-hovered.js +25 -9
  18. package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  19. package/build/components/block-list/use-in-between-inserter.js +3 -2
  20. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  21. package/build/components/block-lock/modal.js +2 -0
  22. package/build/components/block-lock/modal.js.map +1 -1
  23. package/build/components/block-lock/toolbar.js +0 -1
  24. package/build/components/block-lock/toolbar.js.map +1 -1
  25. package/build/components/block-mover/button.js +1 -1
  26. package/build/components/block-mover/button.js.map +1 -1
  27. package/build/components/block-mover/index.js +1 -1
  28. package/build/components/block-mover/index.js.map +1 -1
  29. package/build/components/block-pattern-setup/setup-toolbar.js +2 -2
  30. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  31. package/build/components/block-patterns-paging/index.js +5 -7
  32. package/build/components/block-patterns-paging/index.js.map +1 -1
  33. package/build/components/block-quick-navigation/index.js +20 -17
  34. package/build/components/block-quick-navigation/index.js.map +1 -1
  35. package/build/components/block-removal-warning-modal/index.js +2 -0
  36. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  37. package/build/components/block-rename/modal.js +4 -12
  38. package/build/components/block-rename/modal.js.map +1 -1
  39. package/build/components/block-switcher/index.js +1 -1
  40. package/build/components/block-switcher/index.js.map +1 -1
  41. package/build/components/block-switcher/pattern-transformations-menu.js +11 -12
  42. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  43. package/build/components/block-switcher/preview-block-popover.js +20 -17
  44. package/build/components/block-switcher/preview-block-popover.js.map +1 -1
  45. package/build/components/block-toolbar/shuffle.js +6 -2
  46. package/build/components/block-toolbar/shuffle.js.map +1 -1
  47. package/build/components/block-tools/block-selection-button.js +7 -58
  48. package/build/components/block-tools/block-selection-button.js.map +1 -1
  49. package/build/components/block-tools/block-toolbar-breadcrumb.js +9 -2
  50. package/build/components/block-tools/block-toolbar-breadcrumb.js.map +1 -1
  51. package/build/components/block-tools/index.js +14 -1
  52. package/build/components/block-tools/index.js.map +1 -1
  53. package/build/components/block-tools/use-show-block-tools.js +9 -8
  54. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  55. package/build/components/block-tools/zoom-out-mode-inserter-button.js +45 -0
  56. package/build/components/block-tools/zoom-out-mode-inserter-button.js.map +1 -0
  57. package/build/components/block-tools/zoom-out-mode-inserters.js +29 -28
  58. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  59. package/build/components/block-tools/zoom-out-popover.js +58 -0
  60. package/build/components/block-tools/zoom-out-popover.js.map +1 -0
  61. package/build/components/block-tools/zoom-out-toolbar.js +138 -0
  62. package/build/components/block-tools/zoom-out-toolbar.js.map +1 -0
  63. package/build/components/button-block-appender/index.js +3 -1
  64. package/build/components/button-block-appender/index.js.map +1 -1
  65. package/build/components/child-layout-control/index.js +26 -18
  66. package/build/components/child-layout-control/index.js.map +1 -1
  67. package/build/components/date-format-picker/index.js +1 -1
  68. package/build/components/date-format-picker/index.js.map +1 -1
  69. package/build/components/default-block-appender/index.js +7 -4
  70. package/build/components/default-block-appender/index.js.map +1 -1
  71. package/build/components/dimensions-tool/index.js +6 -4
  72. package/build/components/dimensions-tool/index.js.map +1 -1
  73. package/build/components/font-appearance-control/index.js +22 -62
  74. package/build/components/font-appearance-control/index.js.map +1 -1
  75. package/build/components/global-styles/background-panel.js +185 -116
  76. package/build/components/global-styles/background-panel.js.map +1 -1
  77. package/build/components/global-styles/border-panel.js +2 -1
  78. package/build/components/global-styles/border-panel.js.map +1 -1
  79. package/build/components/global-styles/color-panel.js +2 -1
  80. package/build/components/global-styles/color-panel.js.map +1 -1
  81. package/build/components/global-styles/dimensions-panel.js +2 -1
  82. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  83. package/build/components/global-styles/filters-panel.js +2 -1
  84. package/build/components/global-styles/filters-panel.js.map +1 -1
  85. package/build/components/global-styles/hooks.js +13 -1
  86. package/build/components/global-styles/hooks.js.map +1 -1
  87. package/build/components/global-styles/image-settings-panel.js +2 -1
  88. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  89. package/build/components/global-styles/typography-panel.js +45 -24
  90. package/build/components/global-styles/typography-panel.js.map +1 -1
  91. package/build/components/global-styles/typography-utils.js +121 -0
  92. package/build/components/global-styles/typography-utils.js.map +1 -1
  93. package/build/components/global-styles/use-global-styles-output.js +47 -13
  94. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  95. package/build/components/global-styles/utils.js +17 -7
  96. package/build/components/global-styles/utils.js.map +1 -1
  97. package/build/components/grid/grid-item-movers.js +90 -48
  98. package/build/components/grid/grid-item-movers.js.map +1 -1
  99. package/build/components/grid/grid-item-resizer.js +2 -2
  100. package/build/components/grid/grid-item-resizer.js.map +1 -1
  101. package/build/components/grid/grid-visualizer.js +117 -37
  102. package/build/components/grid/grid-visualizer.js.map +1 -1
  103. package/build/components/grid/use-grid-layout-sync.js +60 -41
  104. package/build/components/grid/use-grid-layout-sync.js.map +1 -1
  105. package/build/components/index.js +1 -9
  106. package/build/components/index.js.map +1 -1
  107. package/build/components/inner-blocks/index.js +2 -2
  108. package/build/components/inner-blocks/index.js.map +1 -1
  109. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -19
  110. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  111. package/build/components/inserter/block-patterns-tab/patterns-filter.js +20 -23
  112. package/build/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  113. package/build/components/inserter/media-tab/media-panel.js +1 -0
  114. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  115. package/build/components/inserter/menu.js +26 -4
  116. package/build/components/inserter/menu.js.map +1 -1
  117. package/build/components/inserter/preview-panel.js +20 -3
  118. package/build/components/inserter/preview-panel.js.map +1 -1
  119. package/build/components/inserter/quick-inserter.js +2 -1
  120. package/build/components/inserter/quick-inserter.js.map +1 -1
  121. package/build/components/inserter-draggable-blocks/index.js +10 -3
  122. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  123. package/build/components/inspector-controls/block-support-tools-panel.js +2 -1
  124. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  125. package/build/components/inspector-controls-tabs/settings-tab.js +1 -2
  126. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  127. package/build/components/link-control/link-preview.js +1 -1
  128. package/build/components/link-control/link-preview.js.map +1 -1
  129. package/build/components/list-view/block-select-button.js +2 -6
  130. package/build/components/list-view/block-select-button.js.map +1 -1
  131. package/build/components/list-view/block.js +2 -2
  132. package/build/components/list-view/block.js.map +1 -1
  133. package/build/components/list-view/utils.js +3 -1
  134. package/build/components/list-view/utils.js.map +1 -1
  135. package/build/components/media-placeholder/index.js +19 -23
  136. package/build/components/media-placeholder/index.js.map +1 -1
  137. package/build/components/navigable-toolbar/index.js +3 -1
  138. package/build/components/navigable-toolbar/index.js.map +1 -1
  139. package/build/components/rich-text/format-toolbar/index.js +1 -1
  140. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  141. package/build/components/rich-text/index.js +1 -1
  142. package/build/components/rich-text/index.js.map +1 -1
  143. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -3
  144. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  145. package/build/components/tabbed-sidebar/index.js +66 -0
  146. package/build/components/tabbed-sidebar/index.js.map +1 -0
  147. package/build/components/url-popover/image-url-input-ui.js +3 -3
  148. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  149. package/build/components/url-popover/index.js +3 -0
  150. package/build/components/url-popover/index.js.map +1 -1
  151. package/build/hooks/background.js +26 -4
  152. package/build/hooks/background.js.map +1 -1
  153. package/build/hooks/block-hooks.js +11 -17
  154. package/build/hooks/block-hooks.js.map +1 -1
  155. package/build/hooks/block-style-variation.js +169 -4
  156. package/build/hooks/block-style-variation.js.map +1 -1
  157. package/build/hooks/duotone.js +16 -11
  158. package/build/hooks/duotone.js.map +1 -1
  159. package/build/hooks/grid-visualizer.js +62 -0
  160. package/build/hooks/grid-visualizer.js.map +1 -0
  161. package/build/hooks/index.js +15 -2
  162. package/build/hooks/index.js.map +1 -1
  163. package/build/hooks/layout-child.js +47 -23
  164. package/build/hooks/layout-child.js.map +1 -1
  165. package/build/hooks/position.js +4 -15
  166. package/build/hooks/position.js.map +1 -1
  167. package/build/hooks/use-bindings-attributes.js +96 -55
  168. package/build/hooks/use-bindings-attributes.js.map +1 -1
  169. package/build/hooks/utils.js +2 -0
  170. package/build/hooks/utils.js.map +1 -1
  171. package/build/layouts/constrained.js +50 -4
  172. package/build/layouts/constrained.js.map +1 -1
  173. package/build/layouts/grid.js +92 -51
  174. package/build/layouts/grid.js.map +1 -1
  175. package/build/private-apis.js +6 -4
  176. package/build/private-apis.js.map +1 -1
  177. package/build/store/actions.js +18 -1
  178. package/build/store/actions.js.map +1 -1
  179. package/build/store/defaults.js +0 -2
  180. package/build/store/defaults.js.map +1 -1
  181. package/build/store/defaults.native.js +0 -3
  182. package/build/store/defaults.native.js.map +1 -1
  183. package/build/store/private-keys.js +2 -1
  184. package/build/store/private-keys.js.map +1 -1
  185. package/build/store/reducer.js +19 -1
  186. package/build/store/reducer.js.map +1 -1
  187. package/build/store/selectors.js +13 -1
  188. package/build/store/selectors.js.map +1 -1
  189. package/build/utils/format-font-style.js +45 -0
  190. package/build/utils/format-font-style.js.map +1 -0
  191. package/build/utils/format-font-weight.js +68 -0
  192. package/build/utils/format-font-weight.js.map +1 -0
  193. package/build/utils/get-editor-region.js +34 -0
  194. package/build/utils/get-editor-region.js.map +1 -0
  195. package/build/utils/get-font-styles-and-weights.js +167 -0
  196. package/build/utils/get-font-styles-and-weights.js.map +1 -0
  197. package/build/utils/pasting.js +5 -13
  198. package/build/utils/pasting.js.map +1 -1
  199. package/build-module/components/alignment-control/ui.js +2 -2
  200. package/build-module/components/alignment-control/ui.js.map +1 -1
  201. package/build-module/components/block-alignment-control/ui.js +1 -1
  202. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  203. package/build-module/components/block-alignment-control/ui.native.js +1 -1
  204. package/build-module/components/block-alignment-control/ui.native.js.map +1 -1
  205. package/build-module/components/block-breadcrumb/index.js +12 -1
  206. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  207. package/build-module/components/block-inspector/index.js +6 -3
  208. package/build-module/components/block-inspector/index.js.map +1 -1
  209. package/build-module/components/block-list/use-block-props/index.js +3 -1
  210. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  211. package/build-module/components/block-list/use-block-props/use-block-refs.js +11 -4
  212. package/build-module/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  213. package/build-module/components/block-list/use-block-props/use-is-hovered.js +26 -9
  214. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  215. package/build-module/components/block-list/use-in-between-inserter.js +3 -2
  216. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  217. package/build-module/components/block-lock/modal.js +2 -0
  218. package/build-module/components/block-lock/modal.js.map +1 -1
  219. package/build-module/components/block-lock/toolbar.js +0 -1
  220. package/build-module/components/block-lock/toolbar.js.map +1 -1
  221. package/build-module/components/block-mover/button.js +1 -1
  222. package/build-module/components/block-mover/button.js.map +1 -1
  223. package/build-module/components/block-mover/index.js +1 -1
  224. package/build-module/components/block-mover/index.js.map +1 -1
  225. package/build-module/components/block-pattern-setup/setup-toolbar.js +2 -2
  226. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  227. package/build-module/components/block-patterns-paging/index.js +5 -7
  228. package/build-module/components/block-patterns-paging/index.js.map +1 -1
  229. package/build-module/components/block-quick-navigation/index.js +20 -17
  230. package/build-module/components/block-quick-navigation/index.js.map +1 -1
  231. package/build-module/components/block-removal-warning-modal/index.js +2 -0
  232. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  233. package/build-module/components/block-rename/modal.js +5 -13
  234. package/build-module/components/block-rename/modal.js.map +1 -1
  235. package/build-module/components/block-switcher/index.js +1 -1
  236. package/build-module/components/block-switcher/index.js.map +1 -1
  237. package/build-module/components/block-switcher/pattern-transformations-menu.js +12 -13
  238. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  239. package/build-module/components/block-switcher/preview-block-popover.js +20 -17
  240. package/build-module/components/block-switcher/preview-block-popover.js.map +1 -1
  241. package/build-module/components/block-toolbar/shuffle.js +6 -2
  242. package/build-module/components/block-toolbar/shuffle.js.map +1 -1
  243. package/build-module/components/block-tools/block-selection-button.js +10 -61
  244. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  245. package/build-module/components/block-tools/block-toolbar-breadcrumb.js +9 -2
  246. package/build-module/components/block-tools/block-toolbar-breadcrumb.js.map +1 -1
  247. package/build-module/components/block-tools/index.js +14 -1
  248. package/build-module/components/block-tools/index.js.map +1 -1
  249. package/build-module/components/block-tools/use-show-block-tools.js +9 -8
  250. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  251. package/build-module/components/block-tools/zoom-out-mode-inserter-button.js +37 -0
  252. package/build-module/components/block-tools/zoom-out-mode-inserter-button.js.map +1 -0
  253. package/build-module/components/block-tools/zoom-out-mode-inserters.js +30 -29
  254. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  255. package/build-module/components/block-tools/zoom-out-popover.js +49 -0
  256. package/build-module/components/block-tools/zoom-out-popover.js.map +1 -0
  257. package/build-module/components/block-tools/zoom-out-toolbar.js +131 -0
  258. package/build-module/components/block-tools/zoom-out-toolbar.js.map +1 -0
  259. package/build-module/components/button-block-appender/index.js +3 -1
  260. package/build-module/components/button-block-appender/index.js.map +1 -1
  261. package/build-module/components/child-layout-control/index.js +27 -19
  262. package/build-module/components/child-layout-control/index.js.map +1 -1
  263. package/build-module/components/date-format-picker/index.js +2 -2
  264. package/build-module/components/date-format-picker/index.js.map +1 -1
  265. package/build-module/components/default-block-appender/index.js +7 -4
  266. package/build-module/components/default-block-appender/index.js.map +1 -1
  267. package/build-module/components/dimensions-tool/index.js +6 -4
  268. package/build-module/components/dimensions-tool/index.js.map +1 -1
  269. package/build-module/components/font-appearance-control/index.js +24 -62
  270. package/build-module/components/font-appearance-control/index.js.map +1 -1
  271. package/build-module/components/global-styles/background-panel.js +188 -119
  272. package/build-module/components/global-styles/background-panel.js.map +1 -1
  273. package/build-module/components/global-styles/border-panel.js +3 -2
  274. package/build-module/components/global-styles/border-panel.js.map +1 -1
  275. package/build-module/components/global-styles/color-panel.js +3 -2
  276. package/build-module/components/global-styles/color-panel.js.map +1 -1
  277. package/build-module/components/global-styles/dimensions-panel.js +3 -2
  278. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  279. package/build-module/components/global-styles/filters-panel.js +3 -2
  280. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  281. package/build-module/components/global-styles/hooks.js +13 -1
  282. package/build-module/components/global-styles/hooks.js.map +1 -1
  283. package/build-module/components/global-styles/image-settings-panel.js +3 -2
  284. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  285. package/build-module/components/global-styles/typography-panel.js +47 -26
  286. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  287. package/build-module/components/global-styles/typography-utils.js +117 -0
  288. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  289. package/build-module/components/global-styles/use-global-styles-output.js +47 -13
  290. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  291. package/build-module/components/global-styles/utils.js +15 -6
  292. package/build-module/components/global-styles/utils.js.map +1 -1
  293. package/build-module/components/grid/grid-item-movers.js +93 -50
  294. package/build-module/components/grid/grid-item-movers.js.map +1 -1
  295. package/build-module/components/grid/grid-item-resizer.js +2 -2
  296. package/build-module/components/grid/grid-item-resizer.js.map +1 -1
  297. package/build-module/components/grid/grid-visualizer.js +118 -38
  298. package/build-module/components/grid/grid-visualizer.js.map +1 -1
  299. package/build-module/components/grid/use-grid-layout-sync.js +61 -42
  300. package/build-module/components/grid/use-grid-layout-sync.js.map +1 -1
  301. package/build-module/components/index.js +0 -5
  302. package/build-module/components/index.js.map +1 -1
  303. package/build-module/components/inner-blocks/index.js +2 -2
  304. package/build-module/components/inner-blocks/index.js.map +1 -1
  305. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -19
  306. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  307. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js +20 -23
  308. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  309. package/build-module/components/inserter/media-tab/media-panel.js +1 -0
  310. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  311. package/build-module/components/inserter/menu.js +26 -4
  312. package/build-module/components/inserter/menu.js.map +1 -1
  313. package/build-module/components/inserter/preview-panel.js +20 -3
  314. package/build-module/components/inserter/preview-panel.js.map +1 -1
  315. package/build-module/components/inserter/quick-inserter.js +2 -1
  316. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  317. package/build-module/components/inserter-draggable-blocks/index.js +10 -3
  318. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  319. package/build-module/components/inspector-controls/block-support-tools-panel.js +3 -2
  320. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  321. package/build-module/components/inspector-controls-tabs/settings-tab.js +1 -2
  322. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  323. package/build-module/components/link-control/link-preview.js +1 -1
  324. package/build-module/components/link-control/link-preview.js.map +1 -1
  325. package/build-module/components/list-view/block-select-button.js +3 -7
  326. package/build-module/components/list-view/block-select-button.js.map +1 -1
  327. package/build-module/components/list-view/block.js +2 -2
  328. package/build-module/components/list-view/block.js.map +1 -1
  329. package/build-module/components/list-view/utils.js +3 -1
  330. package/build-module/components/list-view/utils.js.map +1 -1
  331. package/build-module/components/media-placeholder/index.js +19 -23
  332. package/build-module/components/media-placeholder/index.js.map +1 -1
  333. package/build-module/components/navigable-toolbar/index.js +3 -1
  334. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  335. package/build-module/components/rich-text/format-toolbar/index.js +1 -1
  336. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  337. package/build-module/components/rich-text/index.js +1 -1
  338. package/build-module/components/rich-text/index.js.map +1 -1
  339. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -3
  340. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  341. package/build-module/components/tabbed-sidebar/index.js +60 -0
  342. package/build-module/components/tabbed-sidebar/index.js.map +1 -0
  343. package/build-module/components/url-popover/image-url-input-ui.js +3 -3
  344. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  345. package/build-module/components/url-popover/index.js +3 -0
  346. package/build-module/components/url-popover/index.js.map +1 -1
  347. package/build-module/hooks/background.js +26 -4
  348. package/build-module/hooks/background.js.map +1 -1
  349. package/build-module/hooks/block-hooks.js +11 -17
  350. package/build-module/hooks/block-hooks.js.map +1 -1
  351. package/build-module/hooks/block-style-variation.js +168 -4
  352. package/build-module/hooks/block-style-variation.js.map +1 -1
  353. package/build-module/hooks/duotone.js +16 -11
  354. package/build-module/hooks/duotone.js.map +1 -1
  355. package/build-module/hooks/grid-visualizer.js +61 -0
  356. package/build-module/hooks/grid-visualizer.js.map +1 -0
  357. package/build-module/hooks/index.js +3 -0
  358. package/build-module/hooks/index.js.map +1 -1
  359. package/build-module/hooks/layout-child.js +47 -23
  360. package/build-module/hooks/layout-child.js.map +1 -1
  361. package/build-module/hooks/position.js +4 -15
  362. package/build-module/hooks/position.js.map +1 -1
  363. package/build-module/hooks/use-bindings-attributes.js +96 -56
  364. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  365. package/build-module/hooks/utils.js +2 -0
  366. package/build-module/hooks/utils.js.map +1 -1
  367. package/build-module/layouts/constrained.js +50 -4
  368. package/build-module/layouts/constrained.js.map +1 -1
  369. package/build-module/layouts/grid.js +92 -51
  370. package/build-module/layouts/grid.js.map +1 -1
  371. package/build-module/private-apis.js +8 -6
  372. package/build-module/private-apis.js.map +1 -1
  373. package/build-module/store/actions.js +15 -0
  374. package/build-module/store/actions.js.map +1 -1
  375. package/build-module/store/defaults.js +0 -2
  376. package/build-module/store/defaults.js.map +1 -1
  377. package/build-module/store/defaults.native.js +0 -3
  378. package/build-module/store/defaults.native.js.map +1 -1
  379. package/build-module/store/private-keys.js +1 -0
  380. package/build-module/store/private-keys.js.map +1 -1
  381. package/build-module/store/reducer.js +18 -1
  382. package/build-module/store/reducer.js.map +1 -1
  383. package/build-module/store/selectors.js +10 -0
  384. package/build-module/store/selectors.js.map +1 -1
  385. package/build-module/utils/format-font-style.js +39 -0
  386. package/build-module/utils/format-font-style.js.map +1 -0
  387. package/build-module/utils/format-font-weight.js +62 -0
  388. package/build-module/utils/format-font-weight.js.map +1 -0
  389. package/build-module/utils/get-editor-region.js +28 -0
  390. package/build-module/utils/get-editor-region.js.map +1 -0
  391. package/build-module/utils/get-font-styles-and-weights.js +160 -0
  392. package/build-module/utils/get-font-styles-and-weights.js.map +1 -0
  393. package/build-module/utils/pasting.js +5 -13
  394. package/build-module/utils/pasting.js.map +1 -1
  395. package/build-style/content-rtl.css +7 -6
  396. package/build-style/content.css +7 -6
  397. package/build-style/style-rtl.css +356 -181
  398. package/build-style/style.css +356 -181
  399. package/build-types/components/block-context/index.d.ts +2 -2
  400. package/build-types/components/block-context/index.d.ts.map +1 -1
  401. package/build-types/utils/dom.d.ts.map +1 -1
  402. package/package.json +32 -32
  403. package/src/components/alignment-control/ui.js +2 -2
  404. package/src/components/block-alignment-control/ui.js +1 -1
  405. package/src/components/block-alignment-control/ui.native.js +1 -1
  406. package/src/components/block-breadcrumb/index.js +16 -1
  407. package/src/components/block-context/README.md +4 -4
  408. package/src/components/block-inspector/index.js +8 -4
  409. package/src/components/block-list/content.scss +2 -16
  410. package/src/components/block-list/use-block-props/index.js +1 -1
  411. package/src/components/block-list/use-block-props/use-block-refs.js +19 -3
  412. package/src/components/block-list/use-block-props/use-is-hovered.js +26 -11
  413. package/src/components/block-list/use-in-between-inserter.js +5 -1
  414. package/src/components/block-lock/modal.js +10 -2
  415. package/src/components/block-lock/style.scss +4 -8
  416. package/src/components/block-lock/toolbar.js +0 -1
  417. package/src/components/block-mover/button.js +1 -1
  418. package/src/components/block-mover/index.js +1 -1
  419. package/src/components/block-pattern-setup/setup-toolbar.js +2 -2
  420. package/src/components/block-patterns-paging/index.js +8 -11
  421. package/src/components/block-patterns-paging/style.scss +0 -5
  422. package/src/components/block-quick-navigation/index.js +21 -28
  423. package/src/components/block-removal-warning-modal/index.js +10 -2
  424. package/src/components/block-rename/modal.js +2 -8
  425. package/src/components/block-switcher/index.js +1 -1
  426. package/src/components/block-switcher/pattern-transformations-menu.js +17 -15
  427. package/src/components/block-switcher/preview-block-popover.js +20 -14
  428. package/src/components/block-switcher/style.scss +8 -17
  429. package/src/components/block-switcher/test/index.js +6 -6
  430. package/src/components/block-toolbar/shuffle.js +9 -1
  431. package/src/components/block-toolbar/style.scss +1 -11
  432. package/src/components/block-tools/block-selection-button.js +11 -83
  433. package/src/components/block-tools/block-toolbar-breadcrumb.js +9 -4
  434. package/src/components/block-tools/index.js +21 -1
  435. package/src/components/block-tools/style.scss +23 -0
  436. package/src/components/block-tools/use-show-block-tools.js +21 -10
  437. package/src/components/block-tools/zoom-out-mode-inserter-button.js +47 -0
  438. package/src/components/block-tools/zoom-out-mode-inserters.js +44 -33
  439. package/src/components/block-tools/zoom-out-popover.js +50 -0
  440. package/src/components/block-tools/zoom-out-toolbar.js +140 -0
  441. package/src/components/button-block-appender/index.js +2 -1
  442. package/src/components/child-layout-control/index.js +41 -23
  443. package/src/components/date-format-picker/index.js +2 -2
  444. package/src/components/date-format-picker/style.scss +0 -9
  445. package/src/components/default-block-appender/index.js +11 -4
  446. package/src/components/dimensions-tool/index.js +97 -89
  447. package/src/components/font-appearance-control/index.js +24 -82
  448. package/src/components/font-appearance-control/style.scss +3 -5
  449. package/src/components/global-styles/background-panel.js +266 -167
  450. package/src/components/global-styles/border-panel.js +3 -2
  451. package/src/components/global-styles/color-panel.js +3 -2
  452. package/src/components/global-styles/dimensions-panel.js +3 -2
  453. package/src/components/global-styles/filters-panel.js +3 -2
  454. package/src/components/global-styles/hooks.js +14 -1
  455. package/src/components/global-styles/image-settings-panel.js +3 -2
  456. package/src/components/global-styles/style.scss +116 -19
  457. package/src/components/global-styles/test/typography-utils.js +594 -0
  458. package/src/components/global-styles/test/use-global-styles-output.js +3 -1
  459. package/src/components/global-styles/typography-panel.js +56 -27
  460. package/src/components/global-styles/typography-utils.js +159 -0
  461. package/src/components/global-styles/use-global-styles-output.js +45 -10
  462. package/src/components/global-styles/utils.js +17 -6
  463. package/src/components/grid/grid-item-movers.js +140 -86
  464. package/src/components/grid/grid-item-resizer.js +3 -2
  465. package/src/components/grid/grid-visualizer.js +172 -55
  466. package/src/components/grid/style.scss +157 -8
  467. package/src/components/grid/use-grid-layout-sync.js +88 -46
  468. package/src/components/iframe/content.scss +2 -1
  469. package/src/components/index.js +0 -5
  470. package/src/components/inner-blocks/index.js +6 -2
  471. package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -16
  472. package/src/components/inserter/block-patterns-tab/patterns-filter.js +40 -44
  473. package/src/components/inserter/media-tab/media-panel.js +1 -0
  474. package/src/components/inserter/menu.js +47 -13
  475. package/src/components/inserter/preview-panel.js +27 -4
  476. package/src/components/inserter/quick-inserter.js +6 -1
  477. package/src/components/inserter/style.scss +58 -92
  478. package/src/components/inserter-draggable-blocks/index.js +11 -3
  479. package/src/components/inspector-controls/block-support-tools-panel.js +3 -3
  480. package/src/components/inspector-controls-tabs/settings-tab.js +0 -2
  481. package/src/components/inspector-controls-tabs/style.scss +0 -21
  482. package/src/components/link-control/link-preview.js +1 -1
  483. package/src/components/list-view/block-select-button.js +3 -13
  484. package/src/components/list-view/block.js +10 -3
  485. package/src/components/list-view/style.scss +2 -1
  486. package/src/components/list-view/utils.js +13 -2
  487. package/src/components/media-placeholder/index.js +22 -32
  488. package/src/components/navigable-toolbar/index.js +3 -1
  489. package/src/components/rich-text/format-toolbar/index.js +1 -1
  490. package/src/components/rich-text/index.js +1 -1
  491. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -2
  492. package/src/components/tabbed-sidebar/README.md +76 -0
  493. package/src/components/tabbed-sidebar/index.js +70 -0
  494. package/src/components/tabbed-sidebar/style.scss +53 -0
  495. package/src/components/url-popover/image-url-input-ui.js +3 -3
  496. package/src/components/url-popover/index.js +3 -0
  497. package/src/components/url-popover/style.scss +1 -0
  498. package/src/hooks/background.js +25 -10
  499. package/src/hooks/block-hooks.js +9 -16
  500. package/src/hooks/block-style-variation.js +202 -3
  501. package/src/hooks/duotone.js +16 -12
  502. package/src/hooks/grid-visualizer.js +62 -0
  503. package/src/hooks/index.js +3 -0
  504. package/src/hooks/layout-child.js +64 -39
  505. package/src/hooks/position.js +3 -20
  506. package/src/hooks/test/get-variation-styles-with-ref-values.js +91 -0
  507. package/src/hooks/use-bindings-attributes.js +107 -63
  508. package/src/hooks/utils.js +2 -0
  509. package/src/layouts/constrained.js +53 -4
  510. package/src/layouts/grid.js +148 -51
  511. package/src/private-apis.js +12 -7
  512. package/src/store/actions.js +15 -0
  513. package/src/store/defaults.js +0 -2
  514. package/src/store/defaults.native.js +0 -3
  515. package/src/store/private-keys.js +1 -0
  516. package/src/store/reducer.js +18 -0
  517. package/src/store/selectors.js +10 -0
  518. package/src/style.scss +1 -1
  519. package/src/utils/format-font-style.js +40 -0
  520. package/src/utils/format-font-weight.js +63 -0
  521. package/src/utils/get-editor-region.js +31 -0
  522. package/src/utils/get-font-styles-and-weights.js +191 -0
  523. package/src/utils/pasting.js +5 -12
  524. package/src/utils/test/format-font-style.js +34 -0
  525. package/src/utils/test/format-font-weight.js +66 -0
  526. package/src/utils/test/get-font-styles-and-weights.js +513 -0
  527. package/tsconfig.tsbuildinfo +1 -1
  528. package/build/components/inserter/reusable-block-rename-hint.js +0 -71
  529. package/build/components/inserter/reusable-block-rename-hint.js.map +0 -1
  530. package/build/components/inspector-controls-tabs/settings-tab-hint.js +0 -53
  531. package/build/components/inspector-controls-tabs/settings-tab-hint.js.map +0 -1
  532. package/build-module/components/inserter/reusable-block-rename-hint.js +0 -64
  533. package/build-module/components/inserter/reusable-block-rename-hint.js.map +0 -1
  534. package/build-module/components/inspector-controls-tabs/settings-tab-hint.js +0 -47
  535. package/build-module/components/inspector-controls-tabs/settings-tab-hint.js.map +0 -1
  536. package/src/components/inserter/reusable-block-rename-hint.js +0 -69
  537. package/src/components/inspector-controls-tabs/settings-tab-hint.js +0 -52
  538. package/src/hooks/position.scss +0 -18
@@ -1,10 +1,25 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
1
6
  /**
2
7
  * WordPress dependencies
3
8
  */
4
9
  import { __ } from '@wordpress/i18n';
5
- import { ToolbarButton } from '@wordpress/components';
6
- import { arrowLeft, arrowUp, arrowDown, arrowRight } from '@wordpress/icons';
10
+ import {
11
+ VisuallyHidden,
12
+ ToolbarButton,
13
+ ToolbarGroup,
14
+ } from '@wordpress/components';
15
+ import {
16
+ chevronLeft,
17
+ chevronUp,
18
+ chevronDown,
19
+ chevronRight,
20
+ } from '@wordpress/icons';
7
21
  import { useDispatch } from '@wordpress/data';
22
+ import { useInstanceId } from '@wordpress/compose';
8
23
 
9
24
  /**
10
25
  * Internal dependencies
@@ -32,97 +47,136 @@ export function GridItemMovers( {
32
47
  const columnCount = parentLayout?.columnCount;
33
48
  const rowCount = parentLayout?.rowCount;
34
49
 
35
- const columnCountNumber = parseInt( columnCount, 10 );
36
- const rowStartNumber = parseInt( rowStart, 10 );
37
- const columnStartNumber = parseInt( columnStart, 10 );
38
-
39
50
  const getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(
40
51
  gridClientId,
41
- columnCountNumber
52
+ columnCount
42
53
  );
43
54
 
44
55
  return (
45
56
  <BlockControls group="parent">
57
+ <ToolbarGroup className="block-editor-grid-item-mover__move-button-container">
58
+ <GridItemMover
59
+ className="is-left-button"
60
+ icon={ chevronLeft }
61
+ label={ __( 'Move left' ) }
62
+ description={ __( 'Move left' ) }
63
+ isDisabled={ columnStart <= 1 }
64
+ onClick={ () => {
65
+ onChange( {
66
+ columnStart: columnStart - 1,
67
+ } );
68
+ __unstableMarkNextChangeAsNotPersistent();
69
+ moveBlocksToPosition(
70
+ [ blockClientId ],
71
+ gridClientId,
72
+ gridClientId,
73
+ getNumberOfBlocksBeforeCell(
74
+ columnStart - 1,
75
+ rowStart
76
+ )
77
+ );
78
+ } }
79
+ />
80
+ <div className="block-editor-grid-item-mover__move-vertical-button-container">
81
+ <GridItemMover
82
+ className="is-up-button"
83
+ icon={ chevronUp }
84
+ label={ __( 'Move up' ) }
85
+ description={ __( 'Move up' ) }
86
+ isDisabled={ rowStart <= 1 }
87
+ onClick={ () => {
88
+ onChange( {
89
+ rowStart: rowStart - 1,
90
+ } );
91
+ __unstableMarkNextChangeAsNotPersistent();
92
+ moveBlocksToPosition(
93
+ [ blockClientId ],
94
+ gridClientId,
95
+ gridClientId,
96
+ getNumberOfBlocksBeforeCell(
97
+ columnStart,
98
+ rowStart - 1
99
+ )
100
+ );
101
+ } }
102
+ />
103
+ <GridItemMover
104
+ className="is-down-button"
105
+ icon={ chevronDown }
106
+ label={ __( 'Move down' ) }
107
+ description={ __( 'Move down' ) }
108
+ isDisabled={ rowCount && rowEnd >= rowCount }
109
+ onClick={ () => {
110
+ onChange( {
111
+ rowStart: rowStart + 1,
112
+ } );
113
+ __unstableMarkNextChangeAsNotPersistent();
114
+ moveBlocksToPosition(
115
+ [ blockClientId ],
116
+ gridClientId,
117
+ gridClientId,
118
+ getNumberOfBlocksBeforeCell(
119
+ columnStart,
120
+ rowStart + 1
121
+ )
122
+ );
123
+ } }
124
+ />
125
+ </div>
126
+ <GridItemMover
127
+ className="is-right-button"
128
+ icon={ chevronRight }
129
+ label={ __( 'Move right' ) }
130
+ description={ __( 'Move right' ) }
131
+ isDisabled={ columnCount && columnEnd >= columnCount }
132
+ onClick={ () => {
133
+ onChange( {
134
+ columnStart: columnStart + 1,
135
+ } );
136
+ __unstableMarkNextChangeAsNotPersistent();
137
+ moveBlocksToPosition(
138
+ [ blockClientId ],
139
+ gridClientId,
140
+ gridClientId,
141
+ getNumberOfBlocksBeforeCell(
142
+ columnStart + 1,
143
+ rowStart
144
+ )
145
+ );
146
+ } }
147
+ />
148
+ </ToolbarGroup>
149
+ </BlockControls>
150
+ );
151
+ }
152
+
153
+ function GridItemMover( {
154
+ className,
155
+ icon,
156
+ label,
157
+ isDisabled,
158
+ onClick,
159
+ description,
160
+ } ) {
161
+ const instanceId = useInstanceId( GridItemMover );
162
+ const descriptionId = `block-editor-grid-item-mover-button__description-${ instanceId }`;
163
+ return (
164
+ <>
46
165
  <ToolbarButton
47
- icon={ arrowUp }
48
- label={ __( 'Move block up' ) }
49
- isDisabled={ rowStart <= 1 }
50
- onClick={ () => {
51
- onChange( {
52
- rowStart: rowStart - 1,
53
- } );
54
- __unstableMarkNextChangeAsNotPersistent();
55
- moveBlocksToPosition(
56
- [ blockClientId ],
57
- gridClientId,
58
- gridClientId,
59
- getNumberOfBlocksBeforeCell(
60
- columnStartNumber,
61
- rowStartNumber - 1
62
- )
63
- );
64
- } }
65
- />
66
- <ToolbarButton
67
- icon={ arrowDown }
68
- label={ __( 'Move block down' ) }
69
- isDisabled={ rowCount && rowEnd >= rowCount }
70
- onClick={ () => {
71
- onChange( {
72
- rowStart: rowStart + 1,
73
- } );
74
- __unstableMarkNextChangeAsNotPersistent();
75
- moveBlocksToPosition(
76
- [ blockClientId ],
77
- gridClientId,
78
- gridClientId,
79
- getNumberOfBlocksBeforeCell(
80
- columnStartNumber,
81
- rowStartNumber + 1
82
- )
83
- );
84
- } }
85
- />
86
- <ToolbarButton
87
- icon={ arrowLeft }
88
- label={ __( 'Move block left' ) }
89
- isDisabled={ columnStart <= 1 }
90
- onClick={ () => {
91
- onChange( {
92
- columnStart: columnStartNumber - 1,
93
- } );
94
- __unstableMarkNextChangeAsNotPersistent();
95
- moveBlocksToPosition(
96
- [ blockClientId ],
97
- gridClientId,
98
- gridClientId,
99
- getNumberOfBlocksBeforeCell(
100
- columnStartNumber - 1,
101
- rowStartNumber
102
- )
103
- );
104
- } }
105
- />
106
- <ToolbarButton
107
- icon={ arrowRight }
108
- label={ __( 'Move block right' ) }
109
- isDisabled={ columnCount && columnEnd >= columnCount }
110
- onClick={ () => {
111
- onChange( {
112
- columnStart: columnStartNumber + 1,
113
- } );
114
- __unstableMarkNextChangeAsNotPersistent();
115
- moveBlocksToPosition(
116
- [ blockClientId ],
117
- gridClientId,
118
- gridClientId,
119
- getNumberOfBlocksBeforeCell(
120
- columnStartNumber + 1,
121
- rowStartNumber
122
- )
123
- );
124
- } }
166
+ className={ clsx(
167
+ 'block-editor-grid-item-mover-button',
168
+ className
169
+ ) }
170
+ icon={ icon }
171
+ label={ label }
172
+ aria-describedby={ descriptionId }
173
+ onClick={ isDisabled ? null : onClick }
174
+ disabled={ isDisabled }
175
+ accessibleWhenDisabled
125
176
  />
126
- </BlockControls>
177
+ <VisuallyHidden id={ descriptionId }>
178
+ { description }
179
+ </VisuallyHidden>
180
+ </>
127
181
  );
128
182
  }
@@ -19,7 +19,7 @@ export function GridItemResizer( {
19
19
  } ) {
20
20
  const blockElement = useBlockElement( clientId );
21
21
  const rootBlockElement = blockElement?.parentElement;
22
- const { columnCount } = parentLayout;
22
+ const { isManualPlacement } = parentLayout;
23
23
 
24
24
  if ( ! blockElement || ! rootBlockElement ) {
25
25
  return null;
@@ -33,7 +33,8 @@ export function GridItemResizer( {
33
33
  rootBlockElement={ rootBlockElement }
34
34
  onChange={ onChange }
35
35
  isManualGrid={
36
- !! columnCount && window.__experimentalEnableGridInteractivity
36
+ isManualPlacement &&
37
+ window.__experimentalEnableGridInteractivity
37
38
  }
38
39
  />
39
40
  );
@@ -6,7 +6,7 @@ import clsx from 'clsx';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useState, useEffect, forwardRef } from '@wordpress/element';
9
+ import { useState, useEffect, forwardRef, useMemo } from '@wordpress/element';
10
10
  import { useSelect, useDispatch } from '@wordpress/data';
11
11
  import { __experimentalUseDropZone as useDropZone } from '@wordpress/compose';
12
12
 
@@ -18,6 +18,7 @@ import BlockPopoverCover from '../block-popover/cover';
18
18
  import { range, GridRect, getGridInfo } from './utils';
19
19
  import { store as blockEditorStore } from '../../store';
20
20
  import { useGetNumberOfBlocksBeforeCell } from './use-get-number-of-blocks-before-cell';
21
+ import ButtonBlockAppender from '../button-block-appender';
21
22
 
22
23
  export function GridVisualizer( { clientId, contentRef, parentLayout } ) {
23
24
  const isDistractionFree = useSelect(
@@ -32,11 +33,11 @@ export function GridVisualizer( { clientId, contentRef, parentLayout } ) {
32
33
  }
33
34
 
34
35
  const isManualGrid =
35
- parentLayout?.columnCount &&
36
+ parentLayout?.isManualPlacement &&
36
37
  window.__experimentalEnableGridInteractivity;
37
38
  return (
38
39
  <GridVisualizerGrid
39
- clientId={ clientId }
40
+ gridClientId={ clientId }
40
41
  gridElement={ gridElement }
41
42
  isManualGrid={ isManualGrid }
42
43
  ref={ contentRef }
@@ -45,12 +46,11 @@ export function GridVisualizer( { clientId, contentRef, parentLayout } ) {
45
46
  }
46
47
 
47
48
  const GridVisualizerGrid = forwardRef(
48
- ( { clientId, gridElement, isManualGrid }, ref ) => {
49
+ ( { gridClientId, gridElement, isManualGrid }, ref ) => {
49
50
  const [ gridInfo, setGridInfo ] = useState( () =>
50
51
  getGridInfo( gridElement )
51
52
  );
52
53
  const [ isDroppingAllowed, setIsDroppingAllowed ] = useState( false );
53
- const [ highlightedRect, setHighlightedRect ] = useState( null );
54
54
 
55
55
  useEffect( () => {
56
56
  const observers = [];
@@ -88,59 +88,110 @@ const GridVisualizerGrid = forwardRef(
88
88
  className={ clsx( 'block-editor-grid-visualizer', {
89
89
  'is-dropping-allowed': isDroppingAllowed,
90
90
  } ) }
91
- clientId={ clientId }
92
- __unstablePopoverSlot="block-toolbar"
91
+ clientId={ gridClientId }
92
+ __unstablePopoverSlot="__unstable-block-tools-after"
93
93
  >
94
94
  <div
95
95
  ref={ ref }
96
96
  className="block-editor-grid-visualizer__grid"
97
97
  style={ gridInfo.style }
98
98
  >
99
- { isManualGrid
100
- ? range( 1, gridInfo.numRows ).map( ( row ) =>
101
- range( 1, gridInfo.numColumns ).map(
102
- ( column ) => (
103
- <GridVisualizerCell
104
- key={ `${ row }-${ column }` }
105
- color={ gridInfo.currentColor }
106
- >
107
- <GridVisualizerDropZone
108
- column={ column }
109
- row={ row }
110
- gridClientId={ clientId }
111
- gridInfo={ gridInfo }
112
- highlightedRect={
113
- highlightedRect
114
- }
115
- setHighlightedRect={
116
- setHighlightedRect
117
- }
118
- />
119
- </GridVisualizerCell>
120
- )
121
- )
122
- )
123
- : Array.from(
124
- { length: gridInfo.numItems },
125
- ( _, i ) => (
126
- <GridVisualizerCell
127
- key={ i }
128
- color={ gridInfo.currentColor }
129
- />
130
- )
131
- ) }
99
+ { isManualGrid ? (
100
+ <ManualGridVisualizer
101
+ gridClientId={ gridClientId }
102
+ gridInfo={ gridInfo }
103
+ />
104
+ ) : (
105
+ Array.from( { length: gridInfo.numItems }, ( _, i ) => (
106
+ <GridVisualizerCell
107
+ key={ i }
108
+ color={ gridInfo.currentColor }
109
+ />
110
+ ) )
111
+ ) }
132
112
  </div>
133
113
  </BlockPopoverCover>
134
114
  );
135
115
  }
136
116
  );
137
117
 
138
- function GridVisualizerCell( { color, children } ) {
118
+ function ManualGridVisualizer( { gridClientId, gridInfo } ) {
119
+ const [ highlightedRect, setHighlightedRect ] = useState( null );
120
+
121
+ const gridItems = useSelect(
122
+ ( select ) => select( blockEditorStore ).getBlocks( gridClientId ),
123
+ [ gridClientId ]
124
+ );
125
+ const occupiedRects = useMemo( () => {
126
+ const rects = [];
127
+ for ( const block of gridItems ) {
128
+ const {
129
+ columnStart,
130
+ rowStart,
131
+ columnSpan = 1,
132
+ rowSpan = 1,
133
+ } = block.attributes.style?.layout || {};
134
+ if ( ! columnStart || ! rowStart ) {
135
+ continue;
136
+ }
137
+ rects.push(
138
+ new GridRect( {
139
+ columnStart,
140
+ rowStart,
141
+ columnSpan,
142
+ rowSpan,
143
+ } )
144
+ );
145
+ }
146
+ return rects;
147
+ }, [ gridItems ] );
148
+
149
+ return range( 1, gridInfo.numRows ).map( ( row ) =>
150
+ range( 1, gridInfo.numColumns ).map( ( column ) => {
151
+ const isCellOccupied = occupiedRects.some( ( rect ) =>
152
+ rect.contains( column, row )
153
+ );
154
+ const isHighlighted =
155
+ highlightedRect?.contains( column, row ) ?? false;
156
+ return (
157
+ <GridVisualizerCell
158
+ key={ `${ row }-${ column }` }
159
+ color={ gridInfo.currentColor }
160
+ className={ isHighlighted && 'is-highlighted' }
161
+ >
162
+ { isCellOccupied ? (
163
+ <GridVisualizerDropZone
164
+ column={ column }
165
+ row={ row }
166
+ gridClientId={ gridClientId }
167
+ gridInfo={ gridInfo }
168
+ setHighlightedRect={ setHighlightedRect }
169
+ />
170
+ ) : (
171
+ <GridVisualizerAppender
172
+ column={ column }
173
+ row={ row }
174
+ gridClientId={ gridClientId }
175
+ gridInfo={ gridInfo }
176
+ setHighlightedRect={ setHighlightedRect }
177
+ />
178
+ ) }
179
+ </GridVisualizerCell>
180
+ );
181
+ } )
182
+ );
183
+ }
184
+
185
+ function GridVisualizerCell( { color, children, className } ) {
139
186
  return (
140
187
  <div
141
- className="block-editor-grid-visualizer__cell"
188
+ className={ clsx(
189
+ 'block-editor-grid-visualizer__cell',
190
+ className
191
+ ) }
142
192
  style={ {
143
193
  boxShadow: `inset 0 0 0 1px color-mix(in srgb, ${ color } 20%, #0000)`,
194
+ color,
144
195
  } }
145
196
  >
146
197
  { children }
@@ -148,15 +199,15 @@ function GridVisualizerCell( { color, children } ) {
148
199
  );
149
200
  }
150
201
 
151
- function GridVisualizerDropZone( {
202
+ function useGridVisualizerDropZone(
152
203
  column,
153
204
  row,
154
205
  gridClientId,
155
206
  gridInfo,
156
- highlightedRect,
157
- setHighlightedRect,
158
- } ) {
159
- const { getBlockAttributes } = useSelect( blockEditorStore );
207
+ setHighlightedRect
208
+ ) {
209
+ const { getBlockAttributes, getBlockRootClientId } =
210
+ useSelect( blockEditorStore );
160
211
  const {
161
212
  updateBlockAttributes,
162
213
  moveBlocksToPosition,
@@ -168,7 +219,7 @@ function GridVisualizerDropZone( {
168
219
  gridInfo.numColumns
169
220
  );
170
221
 
171
- const ref = useDropZoneWithValidation( {
222
+ return useDropZoneWithValidation( {
172
223
  validateDrag( srcClientId ) {
173
224
  const attributes = getBlockAttributes( srcClientId );
174
225
  const rect = new GridRect( {
@@ -221,21 +272,87 @@ function GridVisualizerDropZone( {
221
272
  __unstableMarkNextChangeAsNotPersistent();
222
273
  moveBlocksToPosition(
223
274
  [ srcClientId ],
224
- gridClientId,
275
+ getBlockRootClientId( srcClientId ),
225
276
  gridClientId,
226
277
  getNumberOfBlocksBeforeCell( column, row )
227
278
  );
228
279
  },
229
280
  } );
281
+ }
230
282
 
231
- const isHighlighted = highlightedRect?.contains( column, row ) ?? false;
232
-
283
+ function GridVisualizerDropZone( {
284
+ column,
285
+ row,
286
+ gridClientId,
287
+ gridInfo,
288
+ setHighlightedRect,
289
+ } ) {
233
290
  return (
234
291
  <div
235
- ref={ ref }
236
- className={ clsx( 'block-editor-grid-visualizer__drop-zone', {
237
- 'is-highlighted': isHighlighted,
238
- } ) }
292
+ className="block-editor-grid-visualizer__drop-zone"
293
+ ref={ useGridVisualizerDropZone(
294
+ column,
295
+ row,
296
+ gridClientId,
297
+ gridInfo,
298
+ setHighlightedRect
299
+ ) }
300
+ />
301
+ );
302
+ }
303
+
304
+ function GridVisualizerAppender( {
305
+ column,
306
+ row,
307
+ gridClientId,
308
+ gridInfo,
309
+ setHighlightedRect,
310
+ } ) {
311
+ const {
312
+ updateBlockAttributes,
313
+ moveBlocksToPosition,
314
+ __unstableMarkNextChangeAsNotPersistent,
315
+ } = useDispatch( blockEditorStore );
316
+
317
+ const getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(
318
+ gridClientId,
319
+ gridInfo.numColumns
320
+ );
321
+
322
+ return (
323
+ <ButtonBlockAppender
324
+ rootClientId={ gridClientId }
325
+ className="block-editor-grid-visualizer__appender"
326
+ ref={ useGridVisualizerDropZone(
327
+ column,
328
+ row,
329
+ gridClientId,
330
+ gridInfo,
331
+ setHighlightedRect
332
+ ) }
333
+ style={ {
334
+ color: gridInfo.currentColor,
335
+ } }
336
+ onSelect={ ( block ) => {
337
+ if ( ! block ) {
338
+ return;
339
+ }
340
+ updateBlockAttributes( block.clientId, {
341
+ style: {
342
+ layout: {
343
+ columnStart: column,
344
+ rowStart: row,
345
+ },
346
+ },
347
+ } );
348
+ __unstableMarkNextChangeAsNotPersistent();
349
+ moveBlocksToPosition(
350
+ [ block.clientId ],
351
+ gridClientId,
352
+ gridClientId,
353
+ getNumberOfBlocksBeforeCell( column, row )
354
+ );
355
+ } }
239
356
  />
240
357
  );
241
358
  }