@wordpress/block-editor 13.1.0 → 13.3.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 (437) hide show
  1. package/CHANGELOG.md +21 -17
  2. package/README.md +1 -2
  3. package/build/components/block-breadcrumb/index.js +12 -1
  4. package/build/components/block-breadcrumb/index.js.map +1 -1
  5. package/build/components/block-lock/modal.js +67 -67
  6. package/build/components/block-lock/modal.js.map +1 -1
  7. package/build/components/block-lock/toolbar.js +0 -1
  8. package/build/components/block-lock/toolbar.js.map +1 -1
  9. package/build/components/block-mover/button.js +1 -1
  10. package/build/components/block-mover/button.js.map +1 -1
  11. package/build/components/block-mover/index.js +12 -6
  12. package/build/components/block-mover/index.js.map +1 -1
  13. package/build/components/block-pattern-setup/setup-toolbar.js +2 -2
  14. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  15. package/build/components/block-patterns-paging/index.js +5 -7
  16. package/build/components/block-patterns-paging/index.js.map +1 -1
  17. package/build/components/block-quick-navigation/index.js +20 -17
  18. package/build/components/block-quick-navigation/index.js.map +1 -1
  19. package/build/components/block-rename/modal.js +4 -12
  20. package/build/components/block-rename/modal.js.map +1 -1
  21. package/build/components/block-toolbar/shuffle.js +4 -1
  22. package/build/components/block-toolbar/shuffle.js.map +1 -1
  23. package/build/components/block-tools/block-selection-button.js +7 -58
  24. package/build/components/block-tools/block-selection-button.js.map +1 -1
  25. package/build/components/block-tools/block-toolbar-breadcrumb.js +9 -2
  26. package/build/components/block-tools/block-toolbar-breadcrumb.js.map +1 -1
  27. package/build/components/block-tools/index.js +14 -1
  28. package/build/components/block-tools/index.js.map +1 -1
  29. package/build/components/block-tools/use-show-block-tools.js +4 -2
  30. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  31. package/build/components/block-tools/zoom-out-mode-inserters.js +5 -4
  32. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  33. package/build/components/block-tools/zoom-out-popover.js +57 -0
  34. package/build/components/block-tools/zoom-out-popover.js.map +1 -0
  35. package/build/components/block-tools/zoom-out-toolbar.js +138 -0
  36. package/build/components/block-tools/zoom-out-toolbar.js.map +1 -0
  37. package/build/components/button-block-appender/index.js +3 -1
  38. package/build/components/button-block-appender/index.js.map +1 -1
  39. package/build/components/child-layout-control/index.js +193 -127
  40. package/build/components/child-layout-control/index.js.map +1 -1
  41. package/build/components/date-format-picker/index.js +10 -1
  42. package/build/components/date-format-picker/index.js.map +1 -1
  43. package/build/components/dimensions-tool/index.js +6 -4
  44. package/build/components/dimensions-tool/index.js.map +1 -1
  45. package/build/components/font-appearance-control/index.js +26 -61
  46. package/build/components/font-appearance-control/index.js.map +1 -1
  47. package/build/components/global-styles/background-panel.js +178 -116
  48. package/build/components/global-styles/background-panel.js.map +1 -1
  49. package/build/components/global-styles/border-panel.js +2 -1
  50. package/build/components/global-styles/border-panel.js.map +1 -1
  51. package/build/components/global-styles/color-panel.js +2 -1
  52. package/build/components/global-styles/color-panel.js.map +1 -1
  53. package/build/components/global-styles/dimensions-panel.js +2 -1
  54. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  55. package/build/components/global-styles/filters-panel.js +2 -1
  56. package/build/components/global-styles/filters-panel.js.map +1 -1
  57. package/build/components/global-styles/hooks.js +8 -0
  58. package/build/components/global-styles/hooks.js.map +1 -1
  59. package/build/components/global-styles/image-settings-panel.js +2 -1
  60. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  61. package/build/components/global-styles/typography-panel.js +50 -12
  62. package/build/components/global-styles/typography-panel.js.map +1 -1
  63. package/build/components/global-styles/typography-utils.js +50 -0
  64. package/build/components/global-styles/typography-utils.js.map +1 -1
  65. package/build/components/global-styles/use-global-styles-output.js +25 -9
  66. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  67. package/build/components/global-styles/utils.js +17 -7
  68. package/build/components/global-styles/utils.js.map +1 -1
  69. package/build/components/grid/grid-item-movers.js +94 -0
  70. package/build/components/grid/grid-item-movers.js.map +1 -0
  71. package/build/components/{grid-visualizer → grid}/grid-item-resizer.js +18 -56
  72. package/build/components/grid/grid-item-resizer.js.map +1 -0
  73. package/build/components/grid/grid-visualizer.js +305 -0
  74. package/build/components/grid/grid-visualizer.js.map +1 -0
  75. package/build/components/{grid-visualizer → grid}/index.js +14 -0
  76. package/build/components/grid/index.js.map +1 -0
  77. package/build/components/grid/use-get-number-of-blocks-before-cell.js +40 -0
  78. package/build/components/grid/use-get-number-of-blocks-before-cell.js.map +1 -0
  79. package/build/components/grid/use-grid-layout-sync.js +169 -0
  80. package/build/components/grid/use-grid-layout-sync.js.map +1 -0
  81. package/build/components/grid/utils.js +145 -0
  82. package/build/components/grid/utils.js.map +1 -0
  83. package/build/components/image-editor/aspect-ratio-dropdown.js +0 -1
  84. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  85. package/build/components/inner-blocks/index.js +1 -1
  86. package/build/components/inner-blocks/index.js.map +1 -1
  87. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -19
  88. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  89. package/build/components/inserter/menu.js +26 -4
  90. package/build/components/inserter/menu.js.map +1 -1
  91. package/build/components/inserter/quick-inserter.js +2 -1
  92. package/build/components/inserter/quick-inserter.js.map +1 -1
  93. package/build/components/inspector-controls/block-support-tools-panel.js +2 -1
  94. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  95. package/build/components/link-control/link-preview.js +1 -1
  96. package/build/components/link-control/link-preview.js.map +1 -1
  97. package/build/components/media-placeholder/index.js +19 -23
  98. package/build/components/media-placeholder/index.js.map +1 -1
  99. package/build/components/navigable-toolbar/index.js +3 -1
  100. package/build/components/navigable-toolbar/index.js.map +1 -1
  101. package/build/components/rich-text/event-listeners/input-rules.js +1 -0
  102. package/build/components/rich-text/event-listeners/input-rules.js.map +1 -1
  103. package/build/components/rich-text/index.native.js +10 -4
  104. package/build/components/rich-text/index.native.js.map +1 -1
  105. package/build/components/rich-text/native/index.native.js +14 -0
  106. package/build/components/rich-text/native/index.native.js.map +1 -1
  107. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +5 -1
  108. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  109. package/build/components/tabbed-sidebar/index.js +66 -0
  110. package/build/components/tabbed-sidebar/index.js.map +1 -0
  111. package/build/components/url-popover/index.js +3 -0
  112. package/build/components/url-popover/index.js.map +1 -1
  113. package/build/hooks/background.js +26 -4
  114. package/build/hooks/background.js.map +1 -1
  115. package/build/hooks/block-hooks.js +11 -17
  116. package/build/hooks/block-hooks.js.map +1 -1
  117. package/build/hooks/block-style-variation.js +195 -11
  118. package/build/hooks/block-style-variation.js.map +1 -1
  119. package/build/hooks/duotone.js +16 -11
  120. package/build/hooks/duotone.js.map +1 -1
  121. package/build/hooks/grid-visualizer.js +65 -0
  122. package/build/hooks/grid-visualizer.js.map +1 -0
  123. package/build/hooks/index.js +15 -2
  124. package/build/hooks/index.js.map +1 -1
  125. package/build/hooks/layout-child.js +65 -40
  126. package/build/hooks/layout-child.js.map +1 -1
  127. package/build/hooks/position.js +2 -9
  128. package/build/hooks/position.js.map +1 -1
  129. package/build/hooks/use-bindings-attributes.js +16 -6
  130. package/build/hooks/use-bindings-attributes.js.map +1 -1
  131. package/build/hooks/utils.js +5 -2
  132. package/build/hooks/utils.js.map +1 -1
  133. package/build/layouts/constrained.js +44 -2
  134. package/build/layouts/constrained.js.map +1 -1
  135. package/build/layouts/grid.js +92 -76
  136. package/build/layouts/grid.js.map +1 -1
  137. package/build/lock-unlock.js +1 -1
  138. package/build/lock-unlock.js.map +1 -1
  139. package/build/private-apis.js +6 -1
  140. package/build/private-apis.js.map +1 -1
  141. package/build/store/actions.js +17 -1
  142. package/build/store/actions.js.map +1 -1
  143. package/build/store/defaults.js +0 -2
  144. package/build/store/defaults.js.map +1 -1
  145. package/build/store/defaults.native.js +0 -3
  146. package/build/store/defaults.native.js.map +1 -1
  147. package/build/store/private-keys.js +2 -1
  148. package/build/store/private-keys.js.map +1 -1
  149. package/build/utils/format-font-style.js +45 -0
  150. package/build/utils/format-font-style.js.map +1 -0
  151. package/build/utils/format-font-weight.js +68 -0
  152. package/build/utils/format-font-weight.js.map +1 -0
  153. package/build/utils/get-editor-region.js +34 -0
  154. package/build/utils/get-editor-region.js.map +1 -0
  155. package/build/utils/get-font-styles-and-weights.js +167 -0
  156. package/build/utils/get-font-styles-and-weights.js.map +1 -0
  157. package/build/utils/pasting.js +5 -13
  158. package/build/utils/pasting.js.map +1 -1
  159. package/build-module/components/block-breadcrumb/index.js +12 -1
  160. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  161. package/build-module/components/block-lock/modal.js +67 -67
  162. package/build-module/components/block-lock/modal.js.map +1 -1
  163. package/build-module/components/block-lock/toolbar.js +0 -1
  164. package/build-module/components/block-lock/toolbar.js.map +1 -1
  165. package/build-module/components/block-mover/button.js +1 -1
  166. package/build-module/components/block-mover/button.js.map +1 -1
  167. package/build-module/components/block-mover/index.js +12 -6
  168. package/build-module/components/block-mover/index.js.map +1 -1
  169. package/build-module/components/block-pattern-setup/setup-toolbar.js +2 -2
  170. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  171. package/build-module/components/block-patterns-paging/index.js +5 -7
  172. package/build-module/components/block-patterns-paging/index.js.map +1 -1
  173. package/build-module/components/block-quick-navigation/index.js +20 -17
  174. package/build-module/components/block-quick-navigation/index.js.map +1 -1
  175. package/build-module/components/block-rename/modal.js +5 -13
  176. package/build-module/components/block-rename/modal.js.map +1 -1
  177. package/build-module/components/block-toolbar/shuffle.js +4 -1
  178. package/build-module/components/block-toolbar/shuffle.js.map +1 -1
  179. package/build-module/components/block-tools/block-selection-button.js +10 -61
  180. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  181. package/build-module/components/block-tools/block-toolbar-breadcrumb.js +9 -2
  182. package/build-module/components/block-tools/block-toolbar-breadcrumb.js.map +1 -1
  183. package/build-module/components/block-tools/index.js +14 -1
  184. package/build-module/components/block-tools/index.js.map +1 -1
  185. package/build-module/components/block-tools/use-show-block-tools.js +4 -2
  186. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  187. package/build-module/components/block-tools/zoom-out-mode-inserters.js +5 -4
  188. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  189. package/build-module/components/block-tools/zoom-out-popover.js +48 -0
  190. package/build-module/components/block-tools/zoom-out-popover.js.map +1 -0
  191. package/build-module/components/block-tools/zoom-out-toolbar.js +131 -0
  192. package/build-module/components/block-tools/zoom-out-toolbar.js.map +1 -0
  193. package/build-module/components/button-block-appender/index.js +3 -1
  194. package/build-module/components/button-block-appender/index.js.map +1 -1
  195. package/build-module/components/child-layout-control/index.js +194 -128
  196. package/build-module/components/child-layout-control/index.js.map +1 -1
  197. package/build-module/components/date-format-picker/index.js +11 -3
  198. package/build-module/components/date-format-picker/index.js.map +1 -1
  199. package/build-module/components/dimensions-tool/index.js +6 -4
  200. package/build-module/components/dimensions-tool/index.js.map +1 -1
  201. package/build-module/components/font-appearance-control/index.js +28 -63
  202. package/build-module/components/font-appearance-control/index.js.map +1 -1
  203. package/build-module/components/global-styles/background-panel.js +181 -119
  204. package/build-module/components/global-styles/background-panel.js.map +1 -1
  205. package/build-module/components/global-styles/border-panel.js +3 -2
  206. package/build-module/components/global-styles/border-panel.js.map +1 -1
  207. package/build-module/components/global-styles/color-panel.js +3 -2
  208. package/build-module/components/global-styles/color-panel.js.map +1 -1
  209. package/build-module/components/global-styles/dimensions-panel.js +3 -2
  210. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  211. package/build-module/components/global-styles/filters-panel.js +3 -2
  212. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  213. package/build-module/components/global-styles/hooks.js +8 -0
  214. package/build-module/components/global-styles/hooks.js.map +1 -1
  215. package/build-module/components/global-styles/image-settings-panel.js +3 -2
  216. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  217. package/build-module/components/global-styles/typography-panel.js +52 -14
  218. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  219. package/build-module/components/global-styles/typography-utils.js +48 -0
  220. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  221. package/build-module/components/global-styles/use-global-styles-output.js +25 -9
  222. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  223. package/build-module/components/global-styles/utils.js +15 -6
  224. package/build-module/components/global-styles/utils.js.map +1 -1
  225. package/build-module/components/grid/grid-item-movers.js +87 -0
  226. package/build-module/components/grid/grid-item-movers.js.map +1 -0
  227. package/build-module/components/{grid-visualizer → grid}/grid-item-resizer.js +13 -51
  228. package/build-module/components/grid/grid-item-resizer.js.map +1 -0
  229. package/build-module/components/grid/grid-visualizer.js +297 -0
  230. package/build-module/components/grid/grid-visualizer.js.map +1 -0
  231. package/build-module/components/grid/index.js +5 -0
  232. package/build-module/components/grid/index.js.map +1 -0
  233. package/build-module/components/grid/use-get-number-of-blocks-before-cell.js +33 -0
  234. package/build-module/components/grid/use-get-number-of-blocks-before-cell.js.map +1 -0
  235. package/build-module/components/grid/use-grid-layout-sync.js +162 -0
  236. package/build-module/components/grid/use-grid-layout-sync.js.map +1 -0
  237. package/build-module/components/grid/utils.js +131 -0
  238. package/build-module/components/grid/utils.js.map +1 -0
  239. package/build-module/components/image-editor/aspect-ratio-dropdown.js +0 -1
  240. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  241. package/build-module/components/inner-blocks/index.js +1 -1
  242. package/build-module/components/inner-blocks/index.js.map +1 -1
  243. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -19
  244. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  245. package/build-module/components/inserter/menu.js +26 -4
  246. package/build-module/components/inserter/menu.js.map +1 -1
  247. package/build-module/components/inserter/quick-inserter.js +2 -1
  248. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  249. package/build-module/components/inspector-controls/block-support-tools-panel.js +3 -2
  250. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  251. package/build-module/components/link-control/link-preview.js +1 -1
  252. package/build-module/components/link-control/link-preview.js.map +1 -1
  253. package/build-module/components/media-placeholder/index.js +19 -23
  254. package/build-module/components/media-placeholder/index.js.map +1 -1
  255. package/build-module/components/navigable-toolbar/index.js +3 -1
  256. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  257. package/build-module/components/rich-text/event-listeners/input-rules.js +1 -1
  258. package/build-module/components/rich-text/event-listeners/input-rules.js.map +1 -1
  259. package/build-module/components/rich-text/index.native.js +11 -5
  260. package/build-module/components/rich-text/index.native.js.map +1 -1
  261. package/build-module/components/rich-text/native/index.native.js +14 -0
  262. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  263. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +5 -1
  264. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  265. package/build-module/components/tabbed-sidebar/index.js +60 -0
  266. package/build-module/components/tabbed-sidebar/index.js.map +1 -0
  267. package/build-module/components/url-popover/index.js +3 -0
  268. package/build-module/components/url-popover/index.js.map +1 -1
  269. package/build-module/hooks/background.js +26 -4
  270. package/build-module/hooks/background.js.map +1 -1
  271. package/build-module/hooks/block-hooks.js +11 -17
  272. package/build-module/hooks/block-hooks.js.map +1 -1
  273. package/build-module/hooks/block-style-variation.js +193 -11
  274. package/build-module/hooks/block-style-variation.js.map +1 -1
  275. package/build-module/hooks/duotone.js +16 -11
  276. package/build-module/hooks/duotone.js.map +1 -1
  277. package/build-module/hooks/grid-visualizer.js +64 -0
  278. package/build-module/hooks/grid-visualizer.js.map +1 -0
  279. package/build-module/hooks/index.js +3 -0
  280. package/build-module/hooks/index.js.map +1 -1
  281. package/build-module/hooks/layout-child.js +63 -38
  282. package/build-module/hooks/layout-child.js.map +1 -1
  283. package/build-module/hooks/position.js +2 -9
  284. package/build-module/hooks/position.js.map +1 -1
  285. package/build-module/hooks/use-bindings-attributes.js +16 -6
  286. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  287. package/build-module/hooks/utils.js +5 -2
  288. package/build-module/hooks/utils.js.map +1 -1
  289. package/build-module/layouts/constrained.js +44 -2
  290. package/build-module/layouts/constrained.js.map +1 -1
  291. package/build-module/layouts/grid.js +92 -76
  292. package/build-module/layouts/grid.js.map +1 -1
  293. package/build-module/lock-unlock.js +1 -1
  294. package/build-module/lock-unlock.js.map +1 -1
  295. package/build-module/private-apis.js +8 -3
  296. package/build-module/private-apis.js.map +1 -1
  297. package/build-module/store/actions.js +17 -1
  298. package/build-module/store/actions.js.map +1 -1
  299. package/build-module/store/defaults.js +0 -2
  300. package/build-module/store/defaults.js.map +1 -1
  301. package/build-module/store/defaults.native.js +0 -3
  302. package/build-module/store/defaults.native.js.map +1 -1
  303. package/build-module/store/private-keys.js +1 -0
  304. package/build-module/store/private-keys.js.map +1 -1
  305. package/build-module/utils/format-font-style.js +39 -0
  306. package/build-module/utils/format-font-style.js.map +1 -0
  307. package/build-module/utils/format-font-weight.js +62 -0
  308. package/build-module/utils/format-font-weight.js.map +1 -0
  309. package/build-module/utils/get-editor-region.js +28 -0
  310. package/build-module/utils/get-editor-region.js.map +1 -0
  311. package/build-module/utils/get-font-styles-and-weights.js +160 -0
  312. package/build-module/utils/get-font-styles-and-weights.js.map +1 -0
  313. package/build-module/utils/pasting.js +5 -13
  314. package/build-module/utils/pasting.js.map +1 -1
  315. package/build-style/content-rtl.css +1 -0
  316. package/build-style/content.css +1 -0
  317. package/build-style/style-rtl.css +238 -106
  318. package/build-style/style.css +238 -106
  319. package/package.json +32 -32
  320. package/src/components/block-breadcrumb/index.js +16 -1
  321. package/src/components/block-lock/modal.js +95 -82
  322. package/src/components/block-lock/style.scss +11 -1
  323. package/src/components/block-lock/toolbar.js +0 -1
  324. package/src/components/block-mover/button.js +1 -1
  325. package/src/components/block-mover/index.js +37 -24
  326. package/src/components/block-pattern-setup/setup-toolbar.js +2 -2
  327. package/src/components/block-patterns-paging/index.js +8 -11
  328. package/src/components/block-patterns-paging/style.scss +18 -0
  329. package/src/components/block-quick-navigation/index.js +21 -28
  330. package/src/components/block-rename/modal.js +2 -8
  331. package/src/components/block-switcher/test/index.js +6 -6
  332. package/src/components/block-toolbar/shuffle.js +4 -1
  333. package/src/components/block-toolbar/style.scss +1 -11
  334. package/src/components/block-tools/block-selection-button.js +11 -83
  335. package/src/components/block-tools/block-toolbar-breadcrumb.js +9 -4
  336. package/src/components/block-tools/index.js +21 -1
  337. package/src/components/block-tools/style.scss +15 -0
  338. package/src/components/block-tools/use-show-block-tools.js +14 -6
  339. package/src/components/block-tools/zoom-out-mode-inserters.js +5 -4
  340. package/src/components/block-tools/zoom-out-popover.js +49 -0
  341. package/src/components/block-tools/zoom-out-toolbar.js +140 -0
  342. package/src/components/button-block-appender/index.js +2 -1
  343. package/src/components/child-layout-control/index.js +243 -160
  344. package/src/components/date-format-picker/index.js +10 -1
  345. package/src/components/date-format-picker/style.scss +0 -9
  346. package/src/components/dimensions-tool/index.js +97 -89
  347. package/src/components/font-appearance-control/index.js +29 -83
  348. package/src/components/font-appearance-control/style.scss +3 -5
  349. package/src/components/global-styles/background-panel.js +249 -170
  350. package/src/components/global-styles/border-panel.js +3 -2
  351. package/src/components/global-styles/color-panel.js +3 -2
  352. package/src/components/global-styles/dimensions-panel.js +3 -2
  353. package/src/components/global-styles/filters-panel.js +3 -2
  354. package/src/components/global-styles/hooks.js +9 -0
  355. package/src/components/global-styles/image-settings-panel.js +3 -2
  356. package/src/components/global-styles/style.scss +105 -20
  357. package/src/components/global-styles/test/typography-utils.js +269 -0
  358. package/src/components/global-styles/test/use-global-styles-output.js +38 -3
  359. package/src/components/global-styles/typography-panel.js +49 -12
  360. package/src/components/global-styles/typography-utils.js +63 -0
  361. package/src/components/global-styles/use-global-styles-output.js +25 -9
  362. package/src/components/global-styles/utils.js +17 -6
  363. package/src/components/grid/grid-item-movers.js +112 -0
  364. package/src/components/{grid-visualizer → grid}/grid-item-resizer.js +15 -52
  365. package/src/components/grid/grid-visualizer.js +384 -0
  366. package/src/components/grid/index.js +4 -0
  367. package/src/components/grid/style.scss +98 -0
  368. package/src/components/grid/use-get-number-of-blocks-before-cell.js +30 -0
  369. package/src/components/grid/use-grid-layout-sync.js +170 -0
  370. package/src/components/grid/utils.js +178 -0
  371. package/src/components/iframe/content.scss +1 -0
  372. package/src/components/image-editor/aspect-ratio-dropdown.js +0 -1
  373. package/src/components/inner-blocks/index.js +4 -1
  374. package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -16
  375. package/src/components/inserter/menu.js +47 -13
  376. package/src/components/inserter/quick-inserter.js +6 -1
  377. package/src/components/inserter/style.scss +1 -49
  378. package/src/components/inspector-controls/block-support-tools-panel.js +3 -3
  379. package/src/components/link-control/link-preview.js +1 -1
  380. package/src/components/media-placeholder/index.js +22 -32
  381. package/src/components/navigable-toolbar/index.js +3 -1
  382. package/src/components/rich-text/event-listeners/input-rules.js +1 -1
  383. package/src/components/rich-text/index.native.js +10 -8
  384. package/src/components/rich-text/native/index.native.js +17 -0
  385. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +6 -1
  386. package/src/components/tabbed-sidebar/README.md +76 -0
  387. package/src/components/tabbed-sidebar/index.js +70 -0
  388. package/src/components/tabbed-sidebar/style.scss +53 -0
  389. package/src/components/url-popover/index.js +3 -0
  390. package/src/hooks/background.js +25 -10
  391. package/src/hooks/block-hooks.js +9 -16
  392. package/src/hooks/block-style-variation.js +226 -9
  393. package/src/hooks/duotone.js +16 -12
  394. package/src/hooks/grid-visualizer.js +64 -0
  395. package/src/hooks/index.js +3 -0
  396. package/src/hooks/layout-child.js +75 -39
  397. package/src/hooks/position.js +3 -10
  398. package/src/hooks/test/get-variation-styles-with-ref-values.js +91 -0
  399. package/src/hooks/use-bindings-attributes.js +18 -4
  400. package/src/hooks/utils.js +5 -1
  401. package/src/layouts/constrained.js +43 -2
  402. package/src/layouts/grid.js +175 -88
  403. package/src/lock-unlock.js +1 -1
  404. package/src/private-apis.js +12 -1
  405. package/src/store/actions.js +21 -1
  406. package/src/store/defaults.js +0 -2
  407. package/src/store/defaults.native.js +0 -3
  408. package/src/store/private-keys.js +1 -0
  409. package/src/style.scss +2 -2
  410. package/src/utils/format-font-style.js +40 -0
  411. package/src/utils/format-font-weight.js +63 -0
  412. package/src/utils/get-editor-region.js +31 -0
  413. package/src/utils/get-font-styles-and-weights.js +191 -0
  414. package/src/utils/pasting.js +5 -12
  415. package/src/utils/test/format-font-style.js +34 -0
  416. package/src/utils/test/format-font-weight.js +66 -0
  417. package/src/utils/test/get-font-styles-and-weights.js +513 -0
  418. package/tsconfig.tsbuildinfo +1 -1
  419. package/build/components/grid-visualizer/grid-item-resizer.js.map +0 -1
  420. package/build/components/grid-visualizer/grid-visualizer.js +0 -92
  421. package/build/components/grid-visualizer/grid-visualizer.js.map +0 -1
  422. package/build/components/grid-visualizer/index.js.map +0 -1
  423. package/build/components/grid-visualizer/utils.js +0 -10
  424. package/build/components/grid-visualizer/utils.js.map +0 -1
  425. package/build-module/components/grid-visualizer/grid-item-resizer.js.map +0 -1
  426. package/build-module/components/grid-visualizer/grid-visualizer.js +0 -84
  427. package/build-module/components/grid-visualizer/grid-visualizer.js.map +0 -1
  428. package/build-module/components/grid-visualizer/index.js +0 -3
  429. package/build-module/components/grid-visualizer/index.js.map +0 -1
  430. package/build-module/components/grid-visualizer/utils.js +0 -4
  431. package/build-module/components/grid-visualizer/utils.js.map +0 -1
  432. package/src/components/grid-visualizer/grid-visualizer.js +0 -101
  433. package/src/components/grid-visualizer/index.js +0 -2
  434. package/src/components/grid-visualizer/style.scss +0 -34
  435. package/src/components/grid-visualizer/utils.js +0 -5
  436. package/src/hooks/position.scss +0 -18
  437. /package/src/components/font-sizes/{README.MD → README.md} +0 -0
@@ -0,0 +1,297 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useState, useEffect, forwardRef, useMemo } from '@wordpress/element';
10
+ import { useSelect, useDispatch } from '@wordpress/data';
11
+ import { __experimentalUseDropZone as useDropZone } from '@wordpress/compose';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import { __unstableUseBlockElement as useBlockElement } from '../block-list/use-block-props/use-block-refs';
17
+ import BlockPopoverCover from '../block-popover/cover';
18
+ import { range, GridRect, getGridInfo } from './utils';
19
+ import { store as blockEditorStore } from '../../store';
20
+ import { useGetNumberOfBlocksBeforeCell } from './use-get-number-of-blocks-before-cell';
21
+ import ButtonBlockAppender from '../button-block-appender';
22
+ import { jsx as _jsx } from "react/jsx-runtime";
23
+ export function GridVisualizer({
24
+ clientId,
25
+ contentRef,
26
+ parentLayout
27
+ }) {
28
+ const isDistractionFree = useSelect(select => select(blockEditorStore).getSettings().isDistractionFree, []);
29
+ const gridElement = useBlockElement(clientId);
30
+ if (isDistractionFree || !gridElement) {
31
+ return null;
32
+ }
33
+ const isManualGrid = parentLayout?.isManualPlacement && window.__experimentalEnableGridInteractivity;
34
+ return /*#__PURE__*/_jsx(GridVisualizerGrid, {
35
+ gridClientId: clientId,
36
+ gridElement: gridElement,
37
+ isManualGrid: isManualGrid,
38
+ ref: contentRef
39
+ });
40
+ }
41
+ const GridVisualizerGrid = forwardRef(({
42
+ gridClientId,
43
+ gridElement,
44
+ isManualGrid
45
+ }, ref) => {
46
+ const [gridInfo, setGridInfo] = useState(() => getGridInfo(gridElement));
47
+ const [isDroppingAllowed, setIsDroppingAllowed] = useState(false);
48
+ useEffect(() => {
49
+ const observers = [];
50
+ for (const element of [gridElement, ...gridElement.children]) {
51
+ const observer = new window.ResizeObserver(() => {
52
+ setGridInfo(getGridInfo(gridElement));
53
+ });
54
+ observer.observe(element);
55
+ observers.push(observer);
56
+ }
57
+ return () => {
58
+ for (const observer of observers) {
59
+ observer.disconnect();
60
+ }
61
+ };
62
+ }, [gridElement]);
63
+ useEffect(() => {
64
+ function onGlobalDrag() {
65
+ setIsDroppingAllowed(true);
66
+ }
67
+ function onGlobalDragEnd() {
68
+ setIsDroppingAllowed(false);
69
+ }
70
+ document.addEventListener('drag', onGlobalDrag);
71
+ document.addEventListener('dragend', onGlobalDragEnd);
72
+ return () => {
73
+ document.removeEventListener('drag', onGlobalDrag);
74
+ document.removeEventListener('dragend', onGlobalDragEnd);
75
+ };
76
+ }, []);
77
+ return /*#__PURE__*/_jsx(BlockPopoverCover, {
78
+ className: clsx('block-editor-grid-visualizer', {
79
+ 'is-dropping-allowed': isDroppingAllowed
80
+ }),
81
+ clientId: gridClientId,
82
+ __unstablePopoverSlot: "block-toolbar",
83
+ children: /*#__PURE__*/_jsx("div", {
84
+ ref: ref,
85
+ className: "block-editor-grid-visualizer__grid",
86
+ style: gridInfo.style,
87
+ children: isManualGrid ? /*#__PURE__*/_jsx(ManualGridVisualizer, {
88
+ gridClientId: gridClientId,
89
+ gridInfo: gridInfo
90
+ }) : Array.from({
91
+ length: gridInfo.numItems
92
+ }, (_, i) => /*#__PURE__*/_jsx(GridVisualizerCell, {
93
+ color: gridInfo.currentColor
94
+ }, i))
95
+ })
96
+ });
97
+ });
98
+ function ManualGridVisualizer({
99
+ gridClientId,
100
+ gridInfo
101
+ }) {
102
+ const [highlightedRect, setHighlightedRect] = useState(null);
103
+ const gridItems = useSelect(select => select(blockEditorStore).getBlocks(gridClientId), [gridClientId]);
104
+ const occupiedRects = useMemo(() => {
105
+ const rects = [];
106
+ for (const block of gridItems) {
107
+ const {
108
+ columnStart,
109
+ rowStart,
110
+ columnSpan = 1,
111
+ rowSpan = 1
112
+ } = block.attributes.style?.layout || {};
113
+ if (!columnStart || !rowStart) {
114
+ continue;
115
+ }
116
+ rects.push(new GridRect({
117
+ columnStart,
118
+ rowStart,
119
+ columnSpan,
120
+ rowSpan
121
+ }));
122
+ }
123
+ return rects;
124
+ }, [gridItems]);
125
+ return range(1, gridInfo.numRows).map(row => range(1, gridInfo.numColumns).map(column => {
126
+ var _highlightedRect$cont;
127
+ const isCellOccupied = occupiedRects.some(rect => rect.contains(column, row));
128
+ const isHighlighted = (_highlightedRect$cont = highlightedRect?.contains(column, row)) !== null && _highlightedRect$cont !== void 0 ? _highlightedRect$cont : false;
129
+ return /*#__PURE__*/_jsx(GridVisualizerCell, {
130
+ color: gridInfo.currentColor,
131
+ className: isHighlighted && 'is-highlighted',
132
+ children: isCellOccupied ? /*#__PURE__*/_jsx(GridVisualizerDropZone, {
133
+ column: column,
134
+ row: row,
135
+ gridClientId: gridClientId,
136
+ gridInfo: gridInfo,
137
+ setHighlightedRect: setHighlightedRect
138
+ }) : /*#__PURE__*/_jsx(GridVisualizerAppender, {
139
+ column: column,
140
+ row: row,
141
+ gridClientId: gridClientId,
142
+ gridInfo: gridInfo,
143
+ setHighlightedRect: setHighlightedRect
144
+ })
145
+ }, `${row}-${column}`);
146
+ }));
147
+ }
148
+ function GridVisualizerCell({
149
+ color,
150
+ children,
151
+ className
152
+ }) {
153
+ return /*#__PURE__*/_jsx("div", {
154
+ className: clsx('block-editor-grid-visualizer__cell', className),
155
+ style: {
156
+ boxShadow: `inset 0 0 0 1px color-mix(in srgb, ${color} 20%, #0000)`,
157
+ color
158
+ },
159
+ children: children
160
+ });
161
+ }
162
+ function useGridVisualizerDropZone(column, row, gridClientId, gridInfo, setHighlightedRect) {
163
+ const {
164
+ getBlockAttributes,
165
+ getBlockRootClientId
166
+ } = useSelect(blockEditorStore);
167
+ const {
168
+ updateBlockAttributes,
169
+ moveBlocksToPosition,
170
+ __unstableMarkNextChangeAsNotPersistent
171
+ } = useDispatch(blockEditorStore);
172
+ const getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(gridClientId, gridInfo.numColumns);
173
+ return useDropZoneWithValidation({
174
+ validateDrag(srcClientId) {
175
+ const attributes = getBlockAttributes(srcClientId);
176
+ const rect = new GridRect({
177
+ columnStart: column,
178
+ rowStart: row,
179
+ columnSpan: attributes.style?.layout?.columnSpan,
180
+ rowSpan: attributes.style?.layout?.rowSpan
181
+ });
182
+ const isInBounds = new GridRect({
183
+ columnSpan: gridInfo.numColumns,
184
+ rowSpan: gridInfo.numRows
185
+ }).containsRect(rect);
186
+ return isInBounds;
187
+ },
188
+ onDragEnter(srcClientId) {
189
+ const attributes = getBlockAttributes(srcClientId);
190
+ setHighlightedRect(new GridRect({
191
+ columnStart: column,
192
+ rowStart: row,
193
+ columnSpan: attributes.style?.layout?.columnSpan,
194
+ rowSpan: attributes.style?.layout?.rowSpan
195
+ }));
196
+ },
197
+ onDragLeave() {
198
+ // onDragEnter can be called before onDragLeave if the user moves
199
+ // their mouse quickly, so only clear the highlight if it was set
200
+ // by this cell.
201
+ setHighlightedRect(prevHighlightedRect => prevHighlightedRect?.columnStart === column && prevHighlightedRect?.rowStart === row ? null : prevHighlightedRect);
202
+ },
203
+ onDrop(srcClientId) {
204
+ setHighlightedRect(null);
205
+ const attributes = getBlockAttributes(srcClientId);
206
+ updateBlockAttributes(srcClientId, {
207
+ style: {
208
+ ...attributes.style,
209
+ layout: {
210
+ ...attributes.style?.layout,
211
+ columnStart: column,
212
+ rowStart: row
213
+ }
214
+ }
215
+ });
216
+ __unstableMarkNextChangeAsNotPersistent();
217
+ moveBlocksToPosition([srcClientId], getBlockRootClientId(srcClientId), gridClientId, getNumberOfBlocksBeforeCell(column, row));
218
+ }
219
+ });
220
+ }
221
+ function GridVisualizerDropZone({
222
+ column,
223
+ row,
224
+ gridClientId,
225
+ gridInfo,
226
+ setHighlightedRect
227
+ }) {
228
+ return /*#__PURE__*/_jsx("div", {
229
+ className: "block-editor-grid-visualizer__drop-zone",
230
+ ref: useGridVisualizerDropZone(column, row, gridClientId, gridInfo, setHighlightedRect)
231
+ });
232
+ }
233
+ function GridVisualizerAppender({
234
+ column,
235
+ row,
236
+ gridClientId,
237
+ gridInfo,
238
+ setHighlightedRect
239
+ }) {
240
+ const {
241
+ updateBlockAttributes,
242
+ moveBlocksToPosition,
243
+ __unstableMarkNextChangeAsNotPersistent
244
+ } = useDispatch(blockEditorStore);
245
+ const getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(gridClientId, gridInfo.numColumns);
246
+ return /*#__PURE__*/_jsx(ButtonBlockAppender, {
247
+ rootClientId: gridClientId,
248
+ className: "block-editor-grid-visualizer__appender",
249
+ ref: useGridVisualizerDropZone(column, row, gridClientId, gridInfo, setHighlightedRect),
250
+ style: {
251
+ color: gridInfo.currentColor
252
+ },
253
+ onSelect: block => {
254
+ if (!block) {
255
+ return;
256
+ }
257
+ updateBlockAttributes(block.clientId, {
258
+ style: {
259
+ layout: {
260
+ columnStart: column,
261
+ rowStart: row
262
+ }
263
+ }
264
+ });
265
+ __unstableMarkNextChangeAsNotPersistent();
266
+ moveBlocksToPosition([block.clientId], gridClientId, gridClientId, getNumberOfBlocksBeforeCell(column, row));
267
+ }
268
+ });
269
+ }
270
+ function useDropZoneWithValidation({
271
+ validateDrag,
272
+ onDragEnter,
273
+ onDragLeave,
274
+ onDrop
275
+ }) {
276
+ const {
277
+ getDraggedBlockClientIds
278
+ } = useSelect(blockEditorStore);
279
+ return useDropZone({
280
+ onDragEnter() {
281
+ const [srcClientId] = getDraggedBlockClientIds();
282
+ if (srcClientId && validateDrag(srcClientId)) {
283
+ onDragEnter(srcClientId);
284
+ }
285
+ },
286
+ onDragLeave() {
287
+ onDragLeave();
288
+ },
289
+ onDrop() {
290
+ const [srcClientId] = getDraggedBlockClientIds();
291
+ if (srcClientId && validateDrag(srcClientId)) {
292
+ onDrop(srcClientId);
293
+ }
294
+ }
295
+ });
296
+ }
297
+ //# sourceMappingURL=grid-visualizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["clsx","useState","useEffect","forwardRef","useMemo","useSelect","useDispatch","__experimentalUseDropZone","useDropZone","__unstableUseBlockElement","useBlockElement","BlockPopoverCover","range","GridRect","getGridInfo","store","blockEditorStore","useGetNumberOfBlocksBeforeCell","ButtonBlockAppender","jsx","_jsx","GridVisualizer","clientId","contentRef","parentLayout","isDistractionFree","select","getSettings","gridElement","isManualGrid","isManualPlacement","window","__experimentalEnableGridInteractivity","GridVisualizerGrid","gridClientId","ref","gridInfo","setGridInfo","isDroppingAllowed","setIsDroppingAllowed","observers","element","children","observer","ResizeObserver","observe","push","disconnect","onGlobalDrag","onGlobalDragEnd","document","addEventListener","removeEventListener","className","__unstablePopoverSlot","style","ManualGridVisualizer","Array","from","length","numItems","_","i","GridVisualizerCell","color","currentColor","highlightedRect","setHighlightedRect","gridItems","getBlocks","occupiedRects","rects","block","columnStart","rowStart","columnSpan","rowSpan","attributes","layout","numRows","map","row","numColumns","column","_highlightedRect$cont","isCellOccupied","some","rect","contains","isHighlighted","GridVisualizerDropZone","GridVisualizerAppender","boxShadow","useGridVisualizerDropZone","getBlockAttributes","getBlockRootClientId","updateBlockAttributes","moveBlocksToPosition","__unstableMarkNextChangeAsNotPersistent","getNumberOfBlocksBeforeCell","useDropZoneWithValidation","validateDrag","srcClientId","isInBounds","containsRect","onDragEnter","onDragLeave","prevHighlightedRect","onDrop","rootClientId","onSelect","getDraggedBlockClientIds"],"sources":["@wordpress/block-editor/src/components/grid/grid-visualizer.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, forwardRef, useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __experimentalUseDropZone as useDropZone } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { __unstableUseBlockElement as useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport BlockPopoverCover from '../block-popover/cover';\nimport { range, GridRect, getGridInfo } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport { useGetNumberOfBlocksBeforeCell } from './use-get-number-of-blocks-before-cell';\nimport ButtonBlockAppender from '../button-block-appender';\n\nexport function GridVisualizer( { clientId, contentRef, parentLayout } ) {\n\tconst isDistractionFree = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().isDistractionFree,\n\t\t[]\n\t);\n\tconst gridElement = useBlockElement( clientId );\n\n\tif ( isDistractionFree || ! gridElement ) {\n\t\treturn null;\n\t}\n\n\tconst isManualGrid =\n\t\tparentLayout?.isManualPlacement &&\n\t\twindow.__experimentalEnableGridInteractivity;\n\treturn (\n\t\t<GridVisualizerGrid\n\t\t\tgridClientId={ clientId }\n\t\t\tgridElement={ gridElement }\n\t\t\tisManualGrid={ isManualGrid }\n\t\t\tref={ contentRef }\n\t\t/>\n\t);\n}\n\nconst GridVisualizerGrid = forwardRef(\n\t( { gridClientId, gridElement, isManualGrid }, ref ) => {\n\t\tconst [ gridInfo, setGridInfo ] = useState( () =>\n\t\t\tgetGridInfo( gridElement )\n\t\t);\n\t\tconst [ isDroppingAllowed, setIsDroppingAllowed ] = useState( false );\n\n\t\tuseEffect( () => {\n\t\t\tconst observers = [];\n\t\t\tfor ( const element of [ gridElement, ...gridElement.children ] ) {\n\t\t\t\tconst observer = new window.ResizeObserver( () => {\n\t\t\t\t\tsetGridInfo( getGridInfo( gridElement ) );\n\t\t\t\t} );\n\t\t\t\tobserver.observe( element );\n\t\t\t\tobservers.push( observer );\n\t\t\t}\n\t\t\treturn () => {\n\t\t\t\tfor ( const observer of observers ) {\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t};\n\t\t}, [ gridElement ] );\n\n\t\tuseEffect( () => {\n\t\t\tfunction onGlobalDrag() {\n\t\t\t\tsetIsDroppingAllowed( true );\n\t\t\t}\n\t\t\tfunction onGlobalDragEnd() {\n\t\t\t\tsetIsDroppingAllowed( false );\n\t\t\t}\n\t\t\tdocument.addEventListener( 'drag', onGlobalDrag );\n\t\t\tdocument.addEventListener( 'dragend', onGlobalDragEnd );\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener( 'drag', onGlobalDrag );\n\t\t\t\tdocument.removeEventListener( 'dragend', onGlobalDragEnd );\n\t\t\t};\n\t\t}, [] );\n\n\t\treturn (\n\t\t\t<BlockPopoverCover\n\t\t\t\tclassName={ clsx( 'block-editor-grid-visualizer', {\n\t\t\t\t\t'is-dropping-allowed': isDroppingAllowed,\n\t\t\t\t} ) }\n\t\t\t\tclientId={ gridClientId }\n\t\t\t\t__unstablePopoverSlot=\"block-toolbar\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tref={ ref }\n\t\t\t\t\tclassName=\"block-editor-grid-visualizer__grid\"\n\t\t\t\t\tstyle={ gridInfo.style }\n\t\t\t\t>\n\t\t\t\t\t{ isManualGrid ? (\n\t\t\t\t\t\t<ManualGridVisualizer\n\t\t\t\t\t\t\tgridClientId={ gridClientId }\n\t\t\t\t\t\t\tgridInfo={ gridInfo }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tArray.from( { length: gridInfo.numItems }, ( _, i ) => (\n\t\t\t\t\t\t\t<GridVisualizerCell\n\t\t\t\t\t\t\t\tkey={ i }\n\t\t\t\t\t\t\t\tcolor={ gridInfo.currentColor }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) )\n\t\t\t\t\t) }\n\t\t\t\t</div>\n\t\t\t</BlockPopoverCover>\n\t\t);\n\t}\n);\n\nfunction ManualGridVisualizer( { gridClientId, gridInfo } ) {\n\tconst [ highlightedRect, setHighlightedRect ] = useState( null );\n\n\tconst gridItems = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlocks( gridClientId ),\n\t\t[ gridClientId ]\n\t);\n\tconst occupiedRects = useMemo( () => {\n\t\tconst rects = [];\n\t\tfor ( const block of gridItems ) {\n\t\t\tconst {\n\t\t\t\tcolumnStart,\n\t\t\t\trowStart,\n\t\t\t\tcolumnSpan = 1,\n\t\t\t\trowSpan = 1,\n\t\t\t} = block.attributes.style?.layout || {};\n\t\t\tif ( ! columnStart || ! rowStart ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trects.push(\n\t\t\t\tnew GridRect( {\n\t\t\t\t\tcolumnStart,\n\t\t\t\t\trowStart,\n\t\t\t\t\tcolumnSpan,\n\t\t\t\t\trowSpan,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\t\treturn rects;\n\t}, [ gridItems ] );\n\n\treturn range( 1, gridInfo.numRows ).map( ( row ) =>\n\t\trange( 1, gridInfo.numColumns ).map( ( column ) => {\n\t\t\tconst isCellOccupied = occupiedRects.some( ( rect ) =>\n\t\t\t\trect.contains( column, row )\n\t\t\t);\n\t\t\tconst isHighlighted =\n\t\t\t\thighlightedRect?.contains( column, row ) ?? false;\n\t\t\treturn (\n\t\t\t\t<GridVisualizerCell\n\t\t\t\t\tkey={ `${ row }-${ column }` }\n\t\t\t\t\tcolor={ gridInfo.currentColor }\n\t\t\t\t\tclassName={ isHighlighted && 'is-highlighted' }\n\t\t\t\t>\n\t\t\t\t\t{ isCellOccupied ? (\n\t\t\t\t\t\t<GridVisualizerDropZone\n\t\t\t\t\t\t\tcolumn={ column }\n\t\t\t\t\t\t\trow={ row }\n\t\t\t\t\t\t\tgridClientId={ gridClientId }\n\t\t\t\t\t\t\tgridInfo={ gridInfo }\n\t\t\t\t\t\t\tsetHighlightedRect={ setHighlightedRect }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<GridVisualizerAppender\n\t\t\t\t\t\t\tcolumn={ column }\n\t\t\t\t\t\t\trow={ row }\n\t\t\t\t\t\t\tgridClientId={ gridClientId }\n\t\t\t\t\t\t\tgridInfo={ gridInfo }\n\t\t\t\t\t\t\tsetHighlightedRect={ setHighlightedRect }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</GridVisualizerCell>\n\t\t\t);\n\t\t} )\n\t);\n}\n\nfunction GridVisualizerCell( { color, children, className } ) {\n\treturn (\n\t\t<div\n\t\t\tclassName={ clsx(\n\t\t\t\t'block-editor-grid-visualizer__cell',\n\t\t\t\tclassName\n\t\t\t) }\n\t\t\tstyle={ {\n\t\t\t\tboxShadow: `inset 0 0 0 1px color-mix(in srgb, ${ color } 20%, #0000)`,\n\t\t\t\tcolor,\n\t\t\t} }\n\t\t>\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\nfunction useGridVisualizerDropZone(\n\tcolumn,\n\trow,\n\tgridClientId,\n\tgridInfo,\n\tsetHighlightedRect\n) {\n\tconst { getBlockAttributes, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tmoveBlocksToPosition,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\tgridClientId,\n\t\tgridInfo.numColumns\n\t);\n\n\treturn useDropZoneWithValidation( {\n\t\tvalidateDrag( srcClientId ) {\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tconst rect = new GridRect( {\n\t\t\t\tcolumnStart: column,\n\t\t\t\trowStart: row,\n\t\t\t\tcolumnSpan: attributes.style?.layout?.columnSpan,\n\t\t\t\trowSpan: attributes.style?.layout?.rowSpan,\n\t\t\t} );\n\t\t\tconst isInBounds = new GridRect( {\n\t\t\t\tcolumnSpan: gridInfo.numColumns,\n\t\t\t\trowSpan: gridInfo.numRows,\n\t\t\t} ).containsRect( rect );\n\t\t\treturn isInBounds;\n\t\t},\n\t\tonDragEnter( srcClientId ) {\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tsetHighlightedRect(\n\t\t\t\tnew GridRect( {\n\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\trowStart: row,\n\t\t\t\t\tcolumnSpan: attributes.style?.layout?.columnSpan,\n\t\t\t\t\trowSpan: attributes.style?.layout?.rowSpan,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tonDragLeave() {\n\t\t\t// onDragEnter can be called before onDragLeave if the user moves\n\t\t\t// their mouse quickly, so only clear the highlight if it was set\n\t\t\t// by this cell.\n\t\t\tsetHighlightedRect( ( prevHighlightedRect ) =>\n\t\t\t\tprevHighlightedRect?.columnStart === column &&\n\t\t\t\tprevHighlightedRect?.rowStart === row\n\t\t\t\t\t? null\n\t\t\t\t\t: prevHighlightedRect\n\t\t\t);\n\t\t},\n\t\tonDrop( srcClientId ) {\n\t\t\tsetHighlightedRect( null );\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tupdateBlockAttributes( srcClientId, {\n\t\t\t\tstyle: {\n\t\t\t\t\t...attributes.style,\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...attributes.style?.layout,\n\t\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\t\trowStart: row,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t} );\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tmoveBlocksToPosition(\n\t\t\t\t[ srcClientId ],\n\t\t\t\tgetBlockRootClientId( srcClientId ),\n\t\t\t\tgridClientId,\n\t\t\t\tgetNumberOfBlocksBeforeCell( column, row )\n\t\t\t);\n\t\t},\n\t} );\n}\n\nfunction GridVisualizerDropZone( {\n\tcolumn,\n\trow,\n\tgridClientId,\n\tgridInfo,\n\tsetHighlightedRect,\n} ) {\n\treturn (\n\t\t<div\n\t\t\tclassName=\"block-editor-grid-visualizer__drop-zone\"\n\t\t\tref={ useGridVisualizerDropZone(\n\t\t\t\tcolumn,\n\t\t\t\trow,\n\t\t\t\tgridClientId,\n\t\t\t\tgridInfo,\n\t\t\t\tsetHighlightedRect\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nfunction GridVisualizerAppender( {\n\tcolumn,\n\trow,\n\tgridClientId,\n\tgridInfo,\n\tsetHighlightedRect,\n} ) {\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tmoveBlocksToPosition,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\tgridClientId,\n\t\tgridInfo.numColumns\n\t);\n\n\treturn (\n\t\t<ButtonBlockAppender\n\t\t\trootClientId={ gridClientId }\n\t\t\tclassName=\"block-editor-grid-visualizer__appender\"\n\t\t\tref={ useGridVisualizerDropZone(\n\t\t\t\tcolumn,\n\t\t\t\trow,\n\t\t\t\tgridClientId,\n\t\t\t\tgridInfo,\n\t\t\t\tsetHighlightedRect\n\t\t\t) }\n\t\t\tstyle={ {\n\t\t\t\tcolor: gridInfo.currentColor,\n\t\t\t} }\n\t\t\tonSelect={ ( block ) => {\n\t\t\t\tif ( ! block ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tupdateBlockAttributes( block.clientId, {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\t\t\trowStart: row,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t[ block.clientId ],\n\t\t\t\t\tgridClientId,\n\t\t\t\t\tgridClientId,\n\t\t\t\t\tgetNumberOfBlocksBeforeCell( column, row )\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n}\n\nfunction useDropZoneWithValidation( {\n\tvalidateDrag,\n\tonDragEnter,\n\tonDragLeave,\n\tonDrop,\n} ) {\n\tconst { getDraggedBlockClientIds } = useSelect( blockEditorStore );\n\treturn useDropZone( {\n\t\tonDragEnter() {\n\t\t\tconst [ srcClientId ] = getDraggedBlockClientIds();\n\t\t\tif ( srcClientId && validateDrag( srcClientId ) ) {\n\t\t\t\tonDragEnter( srcClientId );\n\t\t\t}\n\t\t},\n\t\tonDragLeave() {\n\t\t\tonDragLeave();\n\t\t},\n\t\tonDrop() {\n\t\t\tconst [ srcClientId ] = getDraggedBlockClientIds();\n\t\t\tif ( srcClientId && validateDrag( srcClientId ) ) {\n\t\t\t\tonDrop( srcClientId );\n\t\t\t}\n\t\t},\n\t} );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ export { GridVisualizer } from './grid-visualizer';
2
+ export { GridItemResizer } from './grid-item-resizer';
3
+ export { GridItemMovers } from './grid-item-movers';
4
+ export { useGridLayoutSync } from './use-grid-layout-sync';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GridVisualizer","GridItemResizer","GridItemMovers","useGridLayoutSync"],"sources":["@wordpress/block-editor/src/components/grid/index.js"],"sourcesContent":["export { GridVisualizer } from './grid-visualizer';\nexport { GridItemResizer } from './grid-item-resizer';\nexport { GridItemMovers } from './grid-item-movers';\nexport { useGridLayoutSync } from './use-grid-layout-sync';\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,mBAAmB;AAClD,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,cAAc,QAAQ,oBAAoB;AACnD,SAASC,iBAAiB,QAAQ,wBAAwB","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { store as blockEditorStore } from '../../store';
10
+ export function useGetNumberOfBlocksBeforeCell(gridClientId, numColumns) {
11
+ const {
12
+ getBlockOrder,
13
+ getBlockAttributes
14
+ } = useSelect(blockEditorStore);
15
+ const getNumberOfBlocksBeforeCell = (column, row) => {
16
+ const targetIndex = (row - 1) * numColumns + column - 1;
17
+ let count = 0;
18
+ for (const clientId of getBlockOrder(gridClientId)) {
19
+ var _getBlockAttributes$s;
20
+ const {
21
+ columnStart,
22
+ rowStart
23
+ } = (_getBlockAttributes$s = getBlockAttributes(clientId).style?.layout) !== null && _getBlockAttributes$s !== void 0 ? _getBlockAttributes$s : {};
24
+ const cellIndex = (rowStart - 1) * numColumns + columnStart - 1;
25
+ if (cellIndex < targetIndex) {
26
+ count++;
27
+ }
28
+ }
29
+ return count;
30
+ };
31
+ return getNumberOfBlocksBeforeCell;
32
+ }
33
+ //# sourceMappingURL=use-get-number-of-blocks-before-cell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useSelect","store","blockEditorStore","useGetNumberOfBlocksBeforeCell","gridClientId","numColumns","getBlockOrder","getBlockAttributes","getNumberOfBlocksBeforeCell","column","row","targetIndex","count","clientId","_getBlockAttributes$s","columnStart","rowStart","style","layout","cellIndex"],"sources":["@wordpress/block-editor/src/components/grid/use-get-number-of-blocks-before-cell.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport function useGetNumberOfBlocksBeforeCell( gridClientId, numColumns ) {\n\tconst { getBlockOrder, getBlockAttributes } = useSelect( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = ( column, row ) => {\n\t\tconst targetIndex = ( row - 1 ) * numColumns + column - 1;\n\n\t\tlet count = 0;\n\t\tfor ( const clientId of getBlockOrder( gridClientId ) ) {\n\t\t\tconst { columnStart, rowStart } =\n\t\t\t\tgetBlockAttributes( clientId ).style?.layout ?? {};\n\t\t\tconst cellIndex = ( rowStart - 1 ) * numColumns + columnStart - 1;\n\t\t\tif ( cellIndex < targetIndex ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t};\n\n\treturn getNumberOfBlocksBeforeCell;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,iBAAiB;;AAE3C;AACA;AACA;AACA,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,aAAa;AAEvD,OAAO,SAASC,8BAA8BA,CAAEC,YAAY,EAAEC,UAAU,EAAG;EAC1E,MAAM;IAAEC,aAAa;IAAEC;EAAmB,CAAC,GAAGP,SAAS,CAAEE,gBAAiB,CAAC;EAE3E,MAAMM,2BAA2B,GAAGA,CAAEC,MAAM,EAAEC,GAAG,KAAM;IACtD,MAAMC,WAAW,GAAG,CAAED,GAAG,GAAG,CAAC,IAAKL,UAAU,GAAGI,MAAM,GAAG,CAAC;IAEzD,IAAIG,KAAK,GAAG,CAAC;IACb,KAAM,MAAMC,QAAQ,IAAIP,aAAa,CAAEF,YAAa,CAAC,EAAG;MAAA,IAAAU,qBAAA;MACvD,MAAM;QAAEC,WAAW;QAAEC;MAAS,CAAC,IAAAF,qBAAA,GAC9BP,kBAAkB,CAAEM,QAAS,CAAC,CAACI,KAAK,EAAEC,MAAM,cAAAJ,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;MACnD,MAAMK,SAAS,GAAG,CAAEH,QAAQ,GAAG,CAAC,IAAKX,UAAU,GAAGU,WAAW,GAAG,CAAC;MACjE,IAAKI,SAAS,GAAGR,WAAW,EAAG;QAC9BC,KAAK,EAAE;MACR;IACD;IACA,OAAOA,KAAK;EACb,CAAC;EAED,OAAOJ,2BAA2B;AACnC","ignoreList":[]}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useDispatch, useSelect } from '@wordpress/data';
5
+ import { useEffect } from '@wordpress/element';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import { store as blockEditorStore } from '../../store';
11
+ import { GridRect } from './utils';
12
+ export function useGridLayoutSync({
13
+ clientId: gridClientId
14
+ }) {
15
+ const {
16
+ gridLayout,
17
+ blockOrder
18
+ } = useSelect(select => {
19
+ var _getBlockAttributes$l;
20
+ const {
21
+ getBlockAttributes,
22
+ getBlockOrder
23
+ } = select(blockEditorStore);
24
+ return {
25
+ gridLayout: (_getBlockAttributes$l = getBlockAttributes(gridClientId).layout) !== null && _getBlockAttributes$l !== void 0 ? _getBlockAttributes$l : {},
26
+ blockOrder: getBlockOrder(gridClientId)
27
+ };
28
+ }, [gridClientId]);
29
+ const {
30
+ getBlockAttributes
31
+ } = useSelect(blockEditorStore);
32
+ const {
33
+ updateBlockAttributes,
34
+ __unstableMarkNextChangeAsNotPersistent
35
+ } = useDispatch(blockEditorStore);
36
+ useEffect(() => {
37
+ const updates = {};
38
+ const {
39
+ columnCount,
40
+ rowCount,
41
+ isManualPlacement
42
+ } = gridLayout;
43
+ if (isManualPlacement) {
44
+ const rects = [];
45
+
46
+ // Respect the position of blocks that already have a columnStart and rowStart value.
47
+ for (const clientId of blockOrder) {
48
+ const attributes = getBlockAttributes(clientId);
49
+ const {
50
+ columnStart,
51
+ rowStart,
52
+ columnSpan = 1,
53
+ rowSpan = 1
54
+ } = attributes.style?.layout || {};
55
+ if (!columnStart || !rowStart) {
56
+ continue;
57
+ }
58
+ rects.push(new GridRect({
59
+ columnStart,
60
+ rowStart,
61
+ columnSpan,
62
+ rowSpan
63
+ }));
64
+ }
65
+
66
+ // When in manual mode, ensure that every block has a columnStart and rowStart value.
67
+ for (const clientId of blockOrder) {
68
+ const attributes = getBlockAttributes(clientId);
69
+ const {
70
+ columnStart,
71
+ rowStart,
72
+ columnSpan = 1,
73
+ rowSpan = 1
74
+ } = attributes.style?.layout || {};
75
+ if (columnStart && rowStart) {
76
+ continue;
77
+ }
78
+ const [newColumnStart, newRowStart] = getFirstEmptyCell(rects, columnCount, columnSpan, rowSpan);
79
+ rects.push(new GridRect({
80
+ columnStart: newColumnStart,
81
+ rowStart: newRowStart,
82
+ columnSpan,
83
+ rowSpan
84
+ }));
85
+ updates[clientId] = {
86
+ style: {
87
+ ...attributes.style,
88
+ layout: {
89
+ ...attributes.style?.layout,
90
+ columnStart: newColumnStart,
91
+ rowStart: newRowStart
92
+ }
93
+ }
94
+ };
95
+ }
96
+
97
+ // Ensure there's enough rows to fit all blocks.
98
+ const bottomMostRow = Math.max(...rects.map(r => r.rowEnd));
99
+ if (!rowCount || rowCount < bottomMostRow) {
100
+ updates[gridClientId] = {
101
+ layout: {
102
+ ...gridLayout,
103
+ rowCount: bottomMostRow
104
+ }
105
+ };
106
+ }
107
+ } else {
108
+ // When in auto mode, remove all of the columnStart and rowStart values.
109
+ for (const clientId of blockOrder) {
110
+ const attributes = getBlockAttributes(clientId);
111
+ const {
112
+ columnStart,
113
+ rowStart,
114
+ ...layout
115
+ } = attributes.style?.layout || {};
116
+ // Only update attributes if columnStart or rowStart are set.
117
+ if (columnStart || rowStart) {
118
+ updates[clientId] = {
119
+ style: {
120
+ ...attributes.style,
121
+ layout
122
+ }
123
+ };
124
+ }
125
+ }
126
+
127
+ // Remove row styles in auto mode
128
+ if (rowCount) {
129
+ updates[gridClientId] = {
130
+ layout: {
131
+ ...gridLayout,
132
+ rowCount: undefined
133
+ }
134
+ };
135
+ }
136
+ }
137
+ if (Object.keys(updates).length) {
138
+ __unstableMarkNextChangeAsNotPersistent();
139
+ updateBlockAttributes(Object.keys(updates), updates, /* uniqueByBlock: */true);
140
+ }
141
+ }, [
142
+ // Actual deps to sync:
143
+ gridClientId, gridLayout, blockOrder,
144
+ // Needed for linter:
145
+ __unstableMarkNextChangeAsNotPersistent, getBlockAttributes, updateBlockAttributes]);
146
+ }
147
+ function getFirstEmptyCell(rects, columnCount, columnSpan = 1, rowSpan = 1) {
148
+ for (let row = 1;; row++) {
149
+ for (let column = 1; column <= columnCount; column++) {
150
+ const rect = new GridRect({
151
+ columnStart: column,
152
+ rowStart: row,
153
+ columnSpan,
154
+ rowSpan
155
+ });
156
+ if (!rects.some(r => r.intersectsRect(rect))) {
157
+ return [column, row];
158
+ }
159
+ }
160
+ }
161
+ }
162
+ //# sourceMappingURL=use-grid-layout-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useDispatch","useSelect","useEffect","store","blockEditorStore","GridRect","useGridLayoutSync","clientId","gridClientId","gridLayout","blockOrder","select","_getBlockAttributes$l","getBlockAttributes","getBlockOrder","layout","updateBlockAttributes","__unstableMarkNextChangeAsNotPersistent","updates","columnCount","rowCount","isManualPlacement","rects","attributes","columnStart","rowStart","columnSpan","rowSpan","style","push","newColumnStart","newRowStart","getFirstEmptyCell","bottomMostRow","Math","max","map","r","rowEnd","undefined","Object","keys","length","row","column","rect","some","intersectsRect"],"sources":["@wordpress/block-editor/src/components/grid/use-grid-layout-sync.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { GridRect } from './utils';\n\nexport function useGridLayoutSync( { clientId: gridClientId } ) {\n\tconst { gridLayout, blockOrder } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, getBlockOrder } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tgridLayout: getBlockAttributes( gridClientId ).layout ?? {},\n\t\t\t\tblockOrder: getBlockOrder( gridClientId ),\n\t\t\t};\n\t\t},\n\t\t[ gridClientId ]\n\t);\n\n\tconst { getBlockAttributes } = useSelect( blockEditorStore );\n\tconst { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\tconst updates = {};\n\n\t\tconst { columnCount, rowCount, isManualPlacement } = gridLayout;\n\n\t\tif ( isManualPlacement ) {\n\t\t\tconst rects = [];\n\n\t\t\t// Respect the position of blocks that already have a columnStart and rowStart value.\n\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\tconst {\n\t\t\t\t\tcolumnStart,\n\t\t\t\t\trowStart,\n\t\t\t\t\tcolumnSpan = 1,\n\t\t\t\t\trowSpan = 1,\n\t\t\t\t} = attributes.style?.layout || {};\n\t\t\t\tif ( ! columnStart || ! rowStart ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\trects.push(\n\t\t\t\t\tnew GridRect( {\n\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\trowStart,\n\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\trowSpan,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// When in manual mode, ensure that every block has a columnStart and rowStart value.\n\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\tconst {\n\t\t\t\t\tcolumnStart,\n\t\t\t\t\trowStart,\n\t\t\t\t\tcolumnSpan = 1,\n\t\t\t\t\trowSpan = 1,\n\t\t\t\t} = attributes.style?.layout || {};\n\t\t\t\tif ( columnStart && rowStart ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst [ newColumnStart, newRowStart ] = getFirstEmptyCell(\n\t\t\t\t\trects,\n\t\t\t\t\tcolumnCount,\n\t\t\t\t\tcolumnSpan,\n\t\t\t\t\trowSpan\n\t\t\t\t);\n\t\t\t\trects.push(\n\t\t\t\t\tnew GridRect( {\n\t\t\t\t\t\tcolumnStart: newColumnStart,\n\t\t\t\t\t\trowStart: newRowStart,\n\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\trowSpan,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t\tupdates[ clientId ] = {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...attributes.style,\n\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t...attributes.style?.layout,\n\t\t\t\t\t\t\tcolumnStart: newColumnStart,\n\t\t\t\t\t\t\trowStart: newRowStart,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Ensure there's enough rows to fit all blocks.\n\t\t\tconst bottomMostRow = Math.max( ...rects.map( ( r ) => r.rowEnd ) );\n\t\t\tif ( ! rowCount || rowCount < bottomMostRow ) {\n\t\t\t\tupdates[ gridClientId ] = {\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...gridLayout,\n\t\t\t\t\t\trowCount: bottomMostRow,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\t// When in auto mode, remove all of the columnStart and rowStart values.\n\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\tconst { columnStart, rowStart, ...layout } =\n\t\t\t\t\tattributes.style?.layout || {};\n\t\t\t\t// Only update attributes if columnStart or rowStart are set.\n\t\t\t\tif ( columnStart || rowStart ) {\n\t\t\t\t\tupdates[ clientId ] = {\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t...attributes.style,\n\t\t\t\t\t\t\tlayout,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove row styles in auto mode\n\t\t\tif ( rowCount ) {\n\t\t\t\tupdates[ gridClientId ] = {\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...gridLayout,\n\t\t\t\t\t\trowCount: undefined,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( Object.keys( updates ).length ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes(\n\t\t\t\tObject.keys( updates ),\n\t\t\t\tupdates,\n\t\t\t\t/* uniqueByBlock: */ true\n\t\t\t);\n\t\t}\n\t}, [\n\t\t// Actual deps to sync:\n\t\tgridClientId,\n\t\tgridLayout,\n\t\tblockOrder,\n\t\t// Needed for linter:\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\tgetBlockAttributes,\n\t\tupdateBlockAttributes,\n\t] );\n}\n\nfunction getFirstEmptyCell( rects, columnCount, columnSpan = 1, rowSpan = 1 ) {\n\tfor ( let row = 1; ; row++ ) {\n\t\tfor ( let column = 1; column <= columnCount; column++ ) {\n\t\t\tconst rect = new GridRect( {\n\t\t\t\tcolumnStart: column,\n\t\t\t\trowStart: row,\n\t\t\t\tcolumnSpan,\n\t\t\t\trowSpan,\n\t\t\t} );\n\t\t\tif ( ! rects.some( ( r ) => r.intersectsRect( rect ) ) ) {\n\t\t\t\treturn [ column, row ];\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":"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","ignoreList":[]}