@wordpress/block-editor 11.8.0 → 12.1.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 (454) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +16 -4
  3. package/build/components/block-controls/slot.js +12 -4
  4. package/build/components/block-controls/slot.js.map +1 -1
  5. package/build/components/block-controls/slot.native.js +10 -1
  6. package/build/components/block-controls/slot.native.js.map +1 -1
  7. package/build/components/block-draggable/index.js +11 -7
  8. package/build/components/block-draggable/index.js.map +1 -1
  9. package/build/components/block-draggable/use-scroll-when-dragging.js +2 -2
  10. package/build/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  11. package/build/components/block-info-slot-fill/index.js +47 -0
  12. package/build/components/block-info-slot-fill/index.js.map +1 -0
  13. package/build/components/block-inspector/index.js +4 -2
  14. package/build/components/block-inspector/index.js.map +1 -1
  15. package/build/components/block-list/block-invalid-warning.native.js +15 -7
  16. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  17. package/build/components/block-list/block-list-item-cell.native.js +15 -2
  18. package/build/components/block-list/block-list-item-cell.native.js.map +1 -1
  19. package/build/components/block-list/block-list-item.native.js +158 -195
  20. package/build/components/block-list/block-list-item.native.js.map +1 -1
  21. package/build/components/block-list/block-outline.native.js +57 -0
  22. package/build/components/block-list/block-outline.native.js.map +1 -0
  23. package/build/components/block-list/block.native.js +343 -300
  24. package/build/components/block-list/block.native.js.map +1 -1
  25. package/build/components/block-list/index.native.js +202 -298
  26. package/build/components/block-list/index.native.js.map +1 -1
  27. package/build/components/block-list/insertion-point.native.js +4 -2
  28. package/build/components/block-list/insertion-point.native.js.map +1 -1
  29. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  30. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  31. package/build/components/block-settings-menu/block-settings-dropdown.js +8 -10
  32. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  33. package/build/components/block-settings-menu-controls/index.js +15 -4
  34. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  35. package/build/components/block-toolbar/index.js +2 -1
  36. package/build/components/block-toolbar/index.js.map +1 -1
  37. package/build/components/block-tools/block-contextual-toolbar.js +40 -11
  38. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  39. package/build/components/block-tools/selected-block-popover.js +8 -30
  40. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  41. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  42. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  43. package/build/components/editor-styles/index.js +4 -3
  44. package/build/components/editor-styles/index.js.map +1 -1
  45. package/build/components/font-sizes/fluid-utils.js +21 -14
  46. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  47. package/build/components/global-styles/advanced-panel.js +86 -0
  48. package/build/components/global-styles/advanced-panel.js.map +1 -0
  49. package/build/components/global-styles/border-panel.js +2 -32
  50. package/build/components/global-styles/border-panel.js.map +1 -1
  51. package/build/components/global-styles/color-panel.js +16 -13
  52. package/build/components/global-styles/color-panel.js.map +1 -1
  53. package/build/components/global-styles/color-panel.native.js +174 -0
  54. package/build/components/global-styles/color-panel.native.js.map +1 -0
  55. package/build/components/global-styles/dimensions-panel.js +12 -12
  56. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  57. package/build/components/global-styles/effects-panel.js +1 -1
  58. package/build/components/global-styles/effects-panel.js.map +1 -1
  59. package/build/components/global-styles/filters-panel.js +78 -14
  60. package/build/components/global-styles/filters-panel.js.map +1 -1
  61. package/build/components/global-styles/hooks.js +1 -2
  62. package/build/components/global-styles/hooks.js.map +1 -1
  63. package/build/components/global-styles/index.js +24 -0
  64. package/build/components/global-styles/index.js.map +1 -1
  65. package/build/components/global-styles/typography-panel.js +10 -10
  66. package/build/components/global-styles/typography-panel.js.map +1 -1
  67. package/build/components/global-styles/use-global-styles-output.js +114 -81
  68. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  69. package/build/components/global-styles/utils.js +30 -0
  70. package/build/components/global-styles/utils.js.map +1 -1
  71. package/build/components/image-editor/use-save-image.js +24 -8
  72. package/build/components/image-editor/use-save-image.js.map +1 -1
  73. package/build/components/index.js +7 -0
  74. package/build/components/index.js.map +1 -1
  75. package/build/components/inserter/block-types-tab.js +12 -7
  76. package/build/components/inserter/block-types-tab.js.map +1 -1
  77. package/build/components/inserter/index.js +2 -1
  78. package/build/components/inserter/index.js.map +1 -1
  79. package/build/components/inserter-draggable-blocks/index.js +5 -0
  80. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  81. package/build/components/inspector-controls/fill.js +1 -1
  82. package/build/components/inspector-controls/fill.js.map +1 -1
  83. package/build/components/inspector-controls/fill.native.js +1 -1
  84. package/build/components/inspector-controls/fill.native.js.map +1 -1
  85. package/build/components/inspector-controls/groups.js +2 -0
  86. package/build/components/inspector-controls/groups.js.map +1 -1
  87. package/build/components/inspector-controls/slot.js +3 -6
  88. package/build/components/inspector-controls/slot.js.map +1 -1
  89. package/build/components/inspector-controls/slot.native.js +1 -1
  90. package/build/components/inspector-controls/slot.native.js.map +1 -1
  91. package/build/components/inspector-controls-tabs/styles-tab.js +2 -0
  92. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  93. package/build/components/line-height-control/index.js +7 -2
  94. package/build/components/line-height-control/index.js.map +1 -1
  95. package/build/components/link-control/use-internal-input-value.js +9 -8
  96. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  97. package/build/components/list-view/block-contents.js +7 -2
  98. package/build/components/list-view/block-contents.js.map +1 -1
  99. package/build/components/list-view/block-select-button.js +9 -3
  100. package/build/components/list-view/block-select-button.js.map +1 -1
  101. package/build/components/list-view/block.js +16 -25
  102. package/build/components/list-view/block.js.map +1 -1
  103. package/build/components/list-view/drop-indicator.js +37 -10
  104. package/build/components/list-view/drop-indicator.js.map +1 -1
  105. package/build/components/list-view/index.js +38 -18
  106. package/build/components/list-view/index.js.map +1 -1
  107. package/build/components/list-view/leaf.js +2 -1
  108. package/build/components/list-view/leaf.js.map +1 -1
  109. package/build/components/list-view/use-block-selection.js +1 -1
  110. package/build/components/list-view/use-block-selection.js.map +1 -1
  111. package/build/components/list-view/use-list-view-drop-zone.js +163 -11
  112. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  113. package/build/components/media-placeholder/index.js +68 -7
  114. package/build/components/media-placeholder/index.js.map +1 -1
  115. package/build/components/media-replace-flow/index.js +5 -5
  116. package/build/components/media-replace-flow/index.js.map +1 -1
  117. package/build/components/multi-selection-inspector/index.js +2 -2
  118. package/build/components/multi-selection-inspector/index.js.map +1 -1
  119. package/build/components/navigable-toolbar/index.js +12 -4
  120. package/build/components/navigable-toolbar/index.js.map +1 -1
  121. package/build/components/off-canvas-editor/appender.js +2 -7
  122. package/build/components/off-canvas-editor/appender.js.map +1 -1
  123. package/build/components/off-canvas-editor/leaf-more-menu.js +3 -1
  124. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  125. package/build/components/preview-options/index.js +6 -1
  126. package/build/components/preview-options/index.js.map +1 -1
  127. package/build/components/spacing-sizes-control/spacing-input-control.js +1 -1
  128. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  129. package/build/components/url-input/index.js +1 -2
  130. package/build/components/url-input/index.js.map +1 -1
  131. package/build/hooks/align.js +1 -1
  132. package/build/hooks/align.js.map +1 -1
  133. package/build/hooks/border.js +1 -1
  134. package/build/hooks/border.js.map +1 -1
  135. package/build/hooks/color.js +1 -1
  136. package/build/hooks/color.js.map +1 -1
  137. package/build/hooks/content-lock-ui.js +8 -12
  138. package/build/hooks/content-lock-ui.js.map +1 -1
  139. package/build/hooks/duotone.js +29 -4
  140. package/build/hooks/duotone.js.map +1 -1
  141. package/build/hooks/index.native.js +8 -0
  142. package/build/hooks/index.native.js.map +1 -1
  143. package/build/hooks/layout.js +2 -2
  144. package/build/hooks/layout.js.map +1 -1
  145. package/build/hooks/position.js +1 -1
  146. package/build/hooks/position.js.map +1 -1
  147. package/build/hooks/style.js +1 -1
  148. package/build/hooks/style.js.map +1 -1
  149. package/build/hooks/use-editor-wrapper-styles.native.js +255 -0
  150. package/build/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  151. package/build/hooks/use-typography-props.js +14 -10
  152. package/build/hooks/use-typography-props.js.map +1 -1
  153. package/build/hooks/utils.js +15 -3
  154. package/build/hooks/utils.js.map +1 -1
  155. package/build/index.native.js +31 -0
  156. package/build/index.native.js.map +1 -0
  157. package/build/private-apis.js +10 -1
  158. package/build/private-apis.js.map +1 -1
  159. package/build/store/actions.js +7 -0
  160. package/build/store/actions.js.map +1 -1
  161. package/build/utils/object.js +5 -5
  162. package/build/utils/object.js.map +1 -1
  163. package/build/utils/transform-styles/index.js +2 -2
  164. package/build/utils/transform-styles/index.js.map +1 -1
  165. package/build/utils/use-should-contextual-toolbar-show.js +72 -0
  166. package/build/utils/use-should-contextual-toolbar-show.js.map +1 -0
  167. package/build-module/components/block-controls/slot.js +11 -4
  168. package/build-module/components/block-controls/slot.js.map +1 -1
  169. package/build-module/components/block-controls/slot.native.js +9 -1
  170. package/build-module/components/block-controls/slot.native.js.map +1 -1
  171. package/build-module/components/block-draggable/index.js +10 -6
  172. package/build-module/components/block-draggable/index.js.map +1 -1
  173. package/build-module/components/block-draggable/use-scroll-when-dragging.js +2 -2
  174. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  175. package/build-module/components/block-info-slot-fill/index.js +34 -0
  176. package/build-module/components/block-info-slot-fill/index.js.map +1 -0
  177. package/build-module/components/block-inspector/index.js +3 -2
  178. package/build-module/components/block-inspector/index.js.map +1 -1
  179. package/build-module/components/block-list/block-invalid-warning.native.js +16 -8
  180. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  181. package/build-module/components/block-list/block-list-item-cell.native.js +13 -2
  182. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -1
  183. package/build-module/components/block-list/block-list-item.native.js +160 -190
  184. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  185. package/build-module/components/block-list/block-outline.native.js +44 -0
  186. package/build-module/components/block-list/block-outline.native.js.map +1 -0
  187. package/build-module/components/block-list/block.native.js +341 -299
  188. package/build-module/components/block-list/block.native.js.map +1 -1
  189. package/build-module/components/block-list/index.native.js +203 -293
  190. package/build-module/components/block-list/index.native.js.map +1 -1
  191. package/build-module/components/block-list/insertion-point.native.js +4 -2
  192. package/build-module/components/block-list/insertion-point.native.js.map +1 -1
  193. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  194. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  195. package/build-module/components/block-settings-menu/block-settings-dropdown.js +8 -9
  196. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  197. package/build-module/components/block-settings-menu-controls/index.js +13 -5
  198. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  199. package/build-module/components/block-toolbar/index.js +2 -1
  200. package/build-module/components/block-toolbar/index.js.map +1 -1
  201. package/build-module/components/block-tools/block-contextual-toolbar.js +37 -11
  202. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  203. package/build-module/components/block-tools/selected-block-popover.js +8 -29
  204. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  205. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  206. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  207. package/build-module/components/editor-styles/index.js +4 -3
  208. package/build-module/components/editor-styles/index.js.map +1 -1
  209. package/build-module/components/font-sizes/fluid-utils.js +21 -14
  210. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  211. package/build-module/components/global-styles/advanced-panel.js +74 -0
  212. package/build-module/components/global-styles/advanced-panel.js.map +1 -0
  213. package/build-module/components/global-styles/border-panel.js +2 -32
  214. package/build-module/components/global-styles/border-panel.js.map +1 -1
  215. package/build-module/components/global-styles/color-panel.js +18 -15
  216. package/build-module/components/global-styles/color-panel.js.map +1 -1
  217. package/build-module/components/global-styles/color-panel.native.js +150 -0
  218. package/build-module/components/global-styles/color-panel.native.js.map +1 -0
  219. package/build-module/components/global-styles/dimensions-panel.js +13 -13
  220. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  221. package/build-module/components/global-styles/effects-panel.js +2 -2
  222. package/build-module/components/global-styles/effects-panel.js.map +1 -1
  223. package/build-module/components/global-styles/filters-panel.js +78 -16
  224. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  225. package/build-module/components/global-styles/hooks.js +1 -2
  226. package/build-module/components/global-styles/hooks.js.map +1 -1
  227. package/build-module/components/global-styles/index.js +3 -1
  228. package/build-module/components/global-styles/index.js.map +1 -1
  229. package/build-module/components/global-styles/typography-panel.js +11 -11
  230. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  231. package/build-module/components/global-styles/use-global-styles-output.js +112 -81
  232. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  233. package/build-module/components/global-styles/utils.js +25 -0
  234. package/build-module/components/global-styles/utils.js.map +1 -1
  235. package/build-module/components/image-editor/use-save-image.js +24 -8
  236. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  237. package/build-module/components/index.js +1 -1
  238. package/build-module/components/index.js.map +1 -1
  239. package/build-module/components/inserter/block-types-tab.js +12 -6
  240. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  241. package/build-module/components/inserter/index.js +2 -1
  242. package/build-module/components/inserter/index.js.map +1 -1
  243. package/build-module/components/inserter-draggable-blocks/index.js +4 -0
  244. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  245. package/build-module/components/inspector-controls/fill.js +1 -1
  246. package/build-module/components/inspector-controls/fill.js.map +1 -1
  247. package/build-module/components/inspector-controls/fill.native.js +1 -1
  248. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  249. package/build-module/components/inspector-controls/groups.js +2 -0
  250. package/build-module/components/inspector-controls/groups.js.map +1 -1
  251. package/build-module/components/inspector-controls/slot.js +4 -7
  252. package/build-module/components/inspector-controls/slot.js.map +1 -1
  253. package/build-module/components/inspector-controls/slot.native.js +1 -1
  254. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  255. package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -0
  256. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  257. package/build-module/components/line-height-control/index.js +7 -2
  258. package/build-module/components/line-height-control/index.js.map +1 -1
  259. package/build-module/components/link-control/use-internal-input-value.js +9 -8
  260. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  261. package/build-module/components/list-view/block-contents.js +7 -3
  262. package/build-module/components/list-view/block-contents.js.map +1 -1
  263. package/build-module/components/list-view/block-select-button.js +9 -3
  264. package/build-module/components/list-view/block-select-button.js.map +1 -1
  265. package/build-module/components/list-view/block.js +18 -26
  266. package/build-module/components/list-view/block.js.map +1 -1
  267. package/build-module/components/list-view/drop-indicator.js +36 -10
  268. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  269. package/build-module/components/list-view/index.js +39 -19
  270. package/build-module/components/list-view/index.js.map +1 -1
  271. package/build-module/components/list-view/leaf.js +2 -1
  272. package/build-module/components/list-view/leaf.js.map +1 -1
  273. package/build-module/components/list-view/use-block-selection.js +1 -1
  274. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  275. package/build-module/components/list-view/use-list-view-drop-zone.js +160 -11
  276. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  277. package/build-module/components/media-placeholder/index.js +66 -7
  278. package/build-module/components/media-placeholder/index.js.map +1 -1
  279. package/build-module/components/media-replace-flow/index.js +5 -5
  280. package/build-module/components/media-replace-flow/index.js.map +1 -1
  281. package/build-module/components/multi-selection-inspector/index.js +2 -2
  282. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  283. package/build-module/components/navigable-toolbar/index.js +12 -4
  284. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  285. package/build-module/components/off-canvas-editor/appender.js +1 -5
  286. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  287. package/build-module/components/off-canvas-editor/leaf-more-menu.js +3 -1
  288. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  289. package/build-module/components/preview-options/index.js +7 -2
  290. package/build-module/components/preview-options/index.js.map +1 -1
  291. package/build-module/components/spacing-sizes-control/spacing-input-control.js +1 -1
  292. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  293. package/build-module/components/url-input/index.js +1 -2
  294. package/build-module/components/url-input/index.js.map +1 -1
  295. package/build-module/hooks/align.js +1 -1
  296. package/build-module/hooks/align.js.map +1 -1
  297. package/build-module/hooks/border.js +1 -1
  298. package/build-module/hooks/border.js.map +1 -1
  299. package/build-module/hooks/color.js +1 -1
  300. package/build-module/hooks/color.js.map +1 -1
  301. package/build-module/hooks/content-lock-ui.js +8 -11
  302. package/build-module/hooks/content-lock-ui.js.map +1 -1
  303. package/build-module/hooks/duotone.js +28 -5
  304. package/build-module/hooks/duotone.js.map +1 -1
  305. package/build-module/hooks/index.native.js +1 -0
  306. package/build-module/hooks/index.native.js.map +1 -1
  307. package/build-module/hooks/layout.js +2 -2
  308. package/build-module/hooks/layout.js.map +1 -1
  309. package/build-module/hooks/position.js +1 -1
  310. package/build-module/hooks/position.js.map +1 -1
  311. package/build-module/hooks/style.js +1 -1
  312. package/build-module/hooks/style.js.map +1 -1
  313. package/build-module/hooks/use-editor-wrapper-styles.native.js +242 -0
  314. package/build-module/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  315. package/build-module/hooks/use-typography-props.js +14 -10
  316. package/build-module/hooks/use-typography-props.js.map +1 -1
  317. package/build-module/hooks/utils.js +16 -4
  318. package/build-module/hooks/utils.js.map +1 -1
  319. package/build-module/index.native.js +6 -0
  320. package/build-module/index.native.js.map +1 -0
  321. package/build-module/private-apis.js +7 -1
  322. package/build-module/private-apis.js.map +1 -1
  323. package/build-module/store/actions.js +7 -0
  324. package/build-module/store/actions.js.map +1 -1
  325. package/build-module/utils/object.js +4 -4
  326. package/build-module/utils/object.js.map +1 -1
  327. package/build-module/utils/transform-styles/index.js +2 -2
  328. package/build-module/utils/transform-styles/index.js.map +1 -1
  329. package/build-module/utils/use-should-contextual-toolbar-show.js +60 -0
  330. package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -0
  331. package/build-style/content-rtl.css +9 -7
  332. package/build-style/content.css +9 -7
  333. package/build-style/style-rtl.css +257 -56
  334. package/build-style/style.css +257 -56
  335. package/package.json +32 -32
  336. package/src/components/block-breadcrumb/style.scss +2 -1
  337. package/src/components/block-controls/slot.js +8 -4
  338. package/src/components/block-controls/slot.native.js +6 -1
  339. package/src/components/block-draggable/index.js +10 -6
  340. package/src/components/block-draggable/use-scroll-when-dragging.js +8 -2
  341. package/src/components/block-info-slot-fill/index.js +24 -0
  342. package/src/components/block-inspector/index.js +3 -0
  343. package/src/components/block-list/block-invalid-warning.native.js +17 -9
  344. package/src/components/block-list/block-list-item-cell.native.js +10 -1
  345. package/src/components/block-list/block-list-item.native.js +180 -208
  346. package/src/components/block-list/block-outline.native.js +58 -0
  347. package/src/components/block-list/block.native.js +564 -524
  348. package/src/components/block-list/content.scss +16 -16
  349. package/src/components/block-list/index.native.js +229 -298
  350. package/src/components/block-list/insertion-point.native.js +2 -2
  351. package/src/components/block-list/test/block-invalid-warning.native.js +48 -0
  352. package/src/components/block-list/test/index.native.js +205 -0
  353. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -1
  354. package/src/components/block-mobile-toolbar/test/block-actions-menu.native.js +9 -9
  355. package/src/components/block-mover/style.scss +10 -4
  356. package/src/components/block-mover/test/index.native.js +4 -4
  357. package/src/components/block-pattern-setup/style.scss +1 -4
  358. package/src/components/block-patterns-list/style.scss +1 -4
  359. package/src/components/block-settings-menu/block-settings-dropdown.js +10 -17
  360. package/src/components/block-settings-menu-controls/index.js +24 -4
  361. package/src/components/block-styles/style.scss +4 -4
  362. package/src/components/block-toolbar/index.js +4 -3
  363. package/src/components/block-toolbar/style.scss +56 -33
  364. package/src/components/block-tools/block-contextual-toolbar.js +64 -15
  365. package/src/components/block-tools/selected-block-popover.js +11 -46
  366. package/src/components/block-tools/style.scss +165 -3
  367. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +16 -2
  368. package/src/components/editor-styles/index.js +9 -5
  369. package/src/components/font-sizes/fluid-utils.js +31 -14
  370. package/src/components/font-sizes/test/fluid-utils.js +5 -16
  371. package/src/components/global-styles/advanced-panel.js +82 -0
  372. package/src/components/global-styles/border-panel.js +1 -30
  373. package/src/components/global-styles/color-panel.js +19 -14
  374. package/src/components/global-styles/color-panel.native.js +207 -0
  375. package/src/components/global-styles/dimensions-panel.js +23 -13
  376. package/src/components/global-styles/effects-panel.js +2 -2
  377. package/src/components/global-styles/filters-panel.js +90 -17
  378. package/src/components/global-styles/hooks.js +1 -5
  379. package/src/components/global-styles/index.js +6 -1
  380. package/src/components/global-styles/style.scss +16 -1
  381. package/src/components/global-styles/test/typography-utils.js +63 -22
  382. package/src/components/global-styles/test/use-global-styles-output.js +126 -4
  383. package/src/components/global-styles/test/utils.js +57 -1
  384. package/src/components/global-styles/typography-panel.js +38 -12
  385. package/src/components/global-styles/use-global-styles-output.js +85 -67
  386. package/src/components/global-styles/utils.js +27 -0
  387. package/src/components/image-editor/use-save-image.js +20 -9
  388. package/src/components/index.js +1 -0
  389. package/src/components/inserter/block-types-tab.js +9 -6
  390. package/src/components/inserter/index.js +1 -1
  391. package/src/components/inserter-draggable-blocks/index.js +4 -0
  392. package/src/components/inspector-controls/fill.js +1 -1
  393. package/src/components/inspector-controls/fill.native.js +1 -1
  394. package/src/components/inspector-controls/groups.js +2 -0
  395. package/src/components/inspector-controls/slot.js +4 -9
  396. package/src/components/inspector-controls/slot.native.js +1 -1
  397. package/src/components/inspector-controls-tabs/styles-tab.js +1 -0
  398. package/src/components/line-height-control/index.js +7 -2
  399. package/src/components/line-height-control/stories/index.js +1 -1
  400. package/src/components/link-control/test/index.js +42 -0
  401. package/src/components/link-control/use-internal-input-value.js +8 -7
  402. package/src/components/list-view/block-contents.js +26 -20
  403. package/src/components/list-view/block-select-button.js +11 -2
  404. package/src/components/list-view/block.js +28 -33
  405. package/src/components/list-view/drop-indicator.js +67 -22
  406. package/src/components/list-view/index.js +33 -14
  407. package/src/components/list-view/leaf.js +1 -0
  408. package/src/components/list-view/style.scss +18 -3
  409. package/src/components/list-view/test/use-list-view-drop-zone.js +88 -12
  410. package/src/components/list-view/use-block-selection.js +1 -1
  411. package/src/components/list-view/use-list-view-drop-zone.js +194 -11
  412. package/src/components/media-placeholder/index.js +74 -1
  413. package/src/components/media-replace-flow/README.md +3 -2
  414. package/src/components/media-replace-flow/index.js +4 -5
  415. package/src/components/multi-selection-inspector/index.js +2 -2
  416. package/src/components/navigable-toolbar/index.js +12 -3
  417. package/src/components/off-canvas-editor/appender.js +1 -4
  418. package/src/components/off-canvas-editor/leaf-more-menu.js +2 -1
  419. package/src/components/preview-options/index.js +9 -2
  420. package/src/components/spacing-sizes-control/spacing-input-control.js +1 -0
  421. package/src/components/url-input/index.js +1 -2
  422. package/src/components/url-popover/test/__snapshots__/index.js.snap +3 -3
  423. package/src/hooks/align.js +2 -1
  424. package/src/hooks/border.js +2 -1
  425. package/src/hooks/color.js +2 -1
  426. package/src/hooks/content-lock-ui.js +3 -15
  427. package/src/hooks/duotone.js +47 -25
  428. package/src/hooks/index.native.js +1 -0
  429. package/src/hooks/layout.js +4 -2
  430. package/src/hooks/position.js +2 -1
  431. package/src/hooks/style.js +2 -1
  432. package/src/hooks/test/anchor.js +113 -0
  433. package/src/hooks/test/color.js +0 -9
  434. package/src/hooks/test/use-editor-wrapper-styles.native.js +282 -0
  435. package/src/hooks/test/use-typography-props.js +49 -4
  436. package/src/hooks/test/utils.js +20 -101
  437. package/src/hooks/use-editor-wrapper-styles.native.js +250 -0
  438. package/src/hooks/use-editor-wrapper-styles.native.scss +11 -0
  439. package/src/hooks/use-typography-props.js +10 -11
  440. package/src/hooks/utils.js +20 -3
  441. package/src/index.native.js +6 -0
  442. package/src/private-apis.js +6 -0
  443. package/src/store/actions.js +7 -0
  444. package/src/utils/object.js +4 -4
  445. package/src/utils/test/object.js +21 -21
  446. package/src/utils/transform-styles/index.js +2 -2
  447. package/src/utils/use-should-contextual-toolbar-show.js +85 -0
  448. package/tsconfig.json +2 -0
  449. package/tsconfig.tsbuildinfo +1 -1
  450. package/build/hooks/color-panel.native.js +0 -77
  451. package/build/hooks/color-panel.native.js.map +0 -1
  452. package/build-module/hooks/color-panel.native.js +0 -62
  453. package/build-module/hooks/color-panel.native.js.map +0 -1
  454. package/src/hooks/color-panel.native.js +0 -63
@@ -78,7 +78,10 @@ export default function useScrollWhenDragging() {
78
78
  SCROLL_INACTIVE_DISTANCE_PX,
79
79
  0
80
80
  );
81
- const distancePercentage = dragDistance / moveableDistance;
81
+ const distancePercentage =
82
+ moveableDistance === 0 || dragDistance === 0
83
+ ? 0
84
+ : dragDistance / moveableDistance;
82
85
  velocityY.current = VELOCITY_MULTIPLIER * distancePercentage;
83
86
  } else if ( event.clientY < offsetDragStartPosition ) {
84
87
  // User is dragging upwards.
@@ -92,7 +95,10 @@ export default function useScrollWhenDragging() {
92
95
  SCROLL_INACTIVE_DISTANCE_PX,
93
96
  0
94
97
  );
95
- const distancePercentage = dragDistance / moveableDistance;
98
+ const distancePercentage =
99
+ moveableDistance === 0 || dragDistance === 0
100
+ ? 0
101
+ : dragDistance / moveableDistance;
96
102
  velocityY.current = -VELOCITY_MULTIPLIER * distancePercentage;
97
103
  } else {
98
104
  velocityY.current = 0;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { privateApis as componentsPrivateApis } from '@wordpress/components';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { unlock } from '../../lock-unlock';
10
+ import useDisplayBlockControls from '../use-display-block-controls';
11
+
12
+ const { createPrivateSlotFill } = unlock( componentsPrivateApis );
13
+ const { Fill, Slot } = createPrivateSlotFill( 'BlockInformation' );
14
+
15
+ const BlockInfo = ( props ) => {
16
+ const isDisplayed = useDisplayBlockControls();
17
+ if ( ! isDisplayed ) {
18
+ return null;
19
+ }
20
+ return <Fill { ...props } />;
21
+ };
22
+ BlockInfo.Slot = ( props ) => <Slot { ...props } />;
23
+
24
+ export default BlockInfo;
@@ -37,6 +37,7 @@ import useInspectorControlsTabs from '../inspector-controls-tabs/use-inspector-c
37
37
  import AdvancedControls from '../inspector-controls-tabs/advanced-controls-panel';
38
38
  import PositionControls from '../inspector-controls-tabs/position-controls-panel';
39
39
  import useBlockInspectorAnimationSettings from './useBlockInspectorAnimationSettings';
40
+ import BlockInfo from '../block-info-slot-fill';
40
41
 
41
42
  function useContentBlocks( blockTypes, block ) {
42
43
  const contentBlocksObjectAux = useMemo( () => {
@@ -115,6 +116,7 @@ function BlockInspectorLockedBlocks( { topLevelLockedBlock } ) {
115
116
  className={ blockInformation.isSynced && 'is-synced' }
116
117
  />
117
118
  <BlockVariationTransforms blockClientId={ topLevelLockedBlock } />
119
+ <BlockInfo.Slot />
118
120
  <VStack
119
121
  spacing={ 1 }
120
122
  padding={ 4 }
@@ -326,6 +328,7 @@ const BlockInspectorSingleBlock = ( { clientId, blockName } ) => {
326
328
  className={ blockInformation.isSynced && 'is-synced' }
327
329
  />
328
330
  <BlockVariationTransforms blockClientId={ clientId } />
331
+ <BlockInfo.Slot />
329
332
  { showTabs && (
330
333
  <InspectorControlsTabs
331
334
  hasBlockStyles={ hasBlockStyles }
@@ -8,7 +8,7 @@ import { TouchableWithoutFeedback } from 'react-native';
8
8
  */
9
9
  import { __, sprintf } from '@wordpress/i18n';
10
10
  import { useSelect, useDispatch } from '@wordpress/data';
11
- import { createBlock } from '@wordpress/blocks';
11
+ import { createBlock, getBlockType } from '@wordpress/blocks';
12
12
 
13
13
  /**
14
14
  * Internal dependencies
@@ -16,22 +16,30 @@ import { createBlock } from '@wordpress/blocks';
16
16
  import Warning from '../warning';
17
17
  import { store as blockEditorStore } from '../../store';
18
18
 
19
- export default function BlockInvalidWarning( { blockTitle, icon, clientId } ) {
20
- const accessibilityLabel = sprintf(
21
- /* translators: accessibility text for blocks with invalid content. %d: localized block title */
22
- __( '%s block. This block has invalid content' ),
23
- blockTitle
24
- );
25
-
19
+ export default function BlockInvalidWarning( { clientId } ) {
26
20
  const selector = ( select ) => {
27
21
  const { getBlock } = select( blockEditorStore );
28
22
  const block = getBlock( clientId );
23
+ const { name } = block || {};
24
+
25
+ const blockType = getBlockType( name || 'core/missing' );
26
+ const title = blockType?.title;
27
+ const blockIcon = blockType?.icon;
28
+
29
29
  return {
30
30
  block,
31
+ blockTitle: title,
32
+ icon: blockIcon,
31
33
  };
32
34
  };
33
35
 
34
- const { block } = useSelect( selector, [ clientId ] );
36
+ const { block, blockTitle, icon } = useSelect( selector, [ clientId ] );
37
+
38
+ const accessibilityLabel = sprintf(
39
+ /* translators: accessibility text for blocks with invalid content. %d: localized block title */
40
+ __( '%s block. This block has invalid content' ),
41
+ blockTitle
42
+ );
35
43
 
36
44
  const { replaceBlock } = useDispatch( blockEditorStore );
37
45
 
@@ -7,14 +7,23 @@ import { View } from 'react-native';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import { useEffect, useCallback } from '@wordpress/element';
10
+ import { useSelect } from '@wordpress/data';
10
11
 
11
12
  /**
12
13
  * Internal dependencies
13
14
  */
14
15
  import { useBlockListContext } from './block-list-context';
16
+ import { store as blockEditorStore } from '../../store';
15
17
 
16
- function BlockListItemCell( { children, clientId, rootClientId, onLayout } ) {
18
+ function BlockListItemCell( { children, item: clientId, onLayout } ) {
17
19
  const { blocksLayouts, updateBlocksLayouts } = useBlockListContext();
20
+ const { rootClientId } = useSelect(
21
+ ( select ) => {
22
+ const { getBlockRootClientId } = select( blockEditorStore );
23
+ return { rootClientId: getBlockRootClientId( clientId ) };
24
+ },
25
+ [ clientId ]
26
+ );
18
27
 
19
28
  useEffect( () => {
20
29
  return () => {
@@ -1,237 +1,209 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { View, Dimensions } from 'react-native';
4
+ import { View } from 'react-native';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { Component } from '@wordpress/element';
10
- import { withSelect } from '@wordpress/data';
11
- import { compose } from '@wordpress/compose';
12
- import { ReadableContentView, alignmentHelpers } from '@wordpress/components';
9
+ import { useSelect } from '@wordpress/data';
13
10
 
14
11
  /**
15
12
  * Internal dependencies
16
13
  */
17
- import BlockListBlock from './block';
18
- import BlockInsertionPoint from './insertion-point';
14
+ import Block from './block';
19
15
  import Grid from './grid-item';
20
-
21
- import styles from './block-list-item.native.scss';
16
+ import BlockInsertionPoint from './insertion-point';
22
17
  import { store as blockEditorStore } from '../../store';
18
+ import { useEditorWrapperStyles } from '../../hooks/use-editor-wrapper-styles';
23
19
 
24
- const stretchStyle = {
25
- flex: 1,
26
- };
27
-
28
- export class BlockListItem extends Component {
29
- getMarginHorizontal() {
30
- const {
31
- blockAlignment,
32
- marginHorizontal,
33
- parentBlockAlignment,
34
- hasParents,
35
- blockName,
36
- parentBlockName,
37
- parentWidth,
38
- blockWidth,
39
- } = this.props;
40
- const { isFullWidth, isWideWidth, isWider, isContainerRelated } =
41
- alignmentHelpers;
42
-
43
- if ( isFullWidth( blockAlignment ) ) {
44
- if ( ! hasParents ) {
45
- return 0;
46
- }
47
- return marginHorizontal;
48
- }
49
- if ( isWideWidth( blockAlignment ) ) {
50
- return marginHorizontal;
51
- }
52
-
53
- const screenWidth = Math.floor( Dimensions.get( 'window' ).width );
54
-
55
- if (
56
- isFullWidth( parentBlockAlignment ) &&
57
- ! isWider( blockWidth, 'medium' )
58
- ) {
59
- if (
60
- isContainerRelated( blockName ) ||
61
- isWider( screenWidth, 'mobile' )
62
- ) {
63
- return marginHorizontal;
64
- }
65
- return marginHorizontal * 2;
66
- }
67
-
68
- if (
69
- isContainerRelated( parentBlockName ) &&
70
- ! isContainerRelated( blockName )
71
- ) {
72
- const isScreenWidthEqual = parentWidth === screenWidth;
73
- if ( isScreenWidthEqual || isWider( screenWidth, 'mobile' ) ) {
74
- return marginHorizontal;
75
- }
76
- }
77
-
78
- return marginHorizontal;
79
- }
80
-
81
- getContentStyles( readableContentViewStyle ) {
82
- const { blockAlignment, blockName, hasParents, parentBlockName } =
83
- this.props;
84
- const { isFullWidth, isContainerRelated } = alignmentHelpers;
85
-
86
- return [
87
- readableContentViewStyle,
88
- isFullWidth( blockAlignment ) &&
89
- ! hasParents && {
90
- width: styles.fullAlignment.width,
91
- },
92
- ! blockAlignment &&
93
- hasParents &&
94
- ! isContainerRelated( parentBlockName ) &&
95
- isContainerRelated( blockName ) && {
96
- paddingHorizontal: styles.fullAlignmentPadding.paddingLeft,
97
- },
98
- ];
99
- }
100
-
101
- renderContent() {
102
- const {
103
- blockAlignment,
104
- clientId,
105
- isReadOnly,
106
- shouldShowInsertionPointBefore,
107
- shouldShowInsertionPointAfter,
108
- contentResizeMode,
109
- shouldShowInnerBlockAppender,
110
- parentWidth,
111
- marginHorizontal,
112
- blockName,
113
- blockWidth,
114
- ...restProps
115
- } = this.props;
116
-
117
- const readableContentViewStyle =
118
- contentResizeMode === 'stretch' && stretchStyle;
119
- const { isContainerRelated } = alignmentHelpers;
120
-
121
- return (
122
- <ReadableContentView
123
- align={ blockAlignment }
124
- style={ [
125
- readableContentViewStyle,
126
- isContainerRelated( blockName ) &&
127
- parentWidth && {
128
- maxWidth: parentWidth + 2 * marginHorizontal,
129
- },
130
- ] }
131
- >
132
- <View
133
- style={ this.getContentStyles( readableContentViewStyle ) }
134
- pointerEvents={ isReadOnly ? 'box-only' : 'auto' }
135
- >
136
- { shouldShowInsertionPointBefore && (
137
- <BlockInsertionPoint />
138
- ) }
139
- <BlockListBlock
140
- key={ clientId }
141
- showTitle={ false }
142
- clientId={ clientId }
143
- parentWidth={ parentWidth }
144
- { ...restProps }
145
- marginHorizontal={ this.getMarginHorizontal() }
146
- blockWidth={ blockWidth }
147
- />
148
- { ! shouldShowInnerBlockAppender() &&
149
- shouldShowInsertionPointAfter && (
150
- <BlockInsertionPoint />
151
- ) }
152
- </View>
153
- </ReadableContentView>
154
- );
155
- }
156
-
157
- render() {
158
- const { parentWidth, blockWidth, isGridItem } = this.props;
159
-
160
- if ( ! blockWidth ) {
161
- return null;
162
- }
163
-
164
- if ( isGridItem ) {
165
- const { numOfColumns, tileCount, tileIndex } = this.props;
166
- return (
167
- <Grid
168
- maxWidth={ parentWidth }
169
- numOfColumns={ numOfColumns }
170
- tileCount={ tileCount }
171
- index={ tileIndex }
172
- >
173
- { this.renderContent() }
174
- </Grid>
175
- );
176
- }
177
- return this.renderContent();
178
- }
179
- }
180
-
181
- export default compose( [
182
- withSelect(
183
- ( select, { rootClientId, isStackedHorizontally, clientId } ) => {
20
+ /**
21
+ * BlockListItemContent component. Renders a block with an optional insertion point.
22
+ *
23
+ * @param {Object} props Component properties.
24
+ * @param {number} props.blockWidth The width of the block.
25
+ * @param {string} props.clientId The block client ID.
26
+ * @param {string} props.contentResizeMode The content resize mode, e.g "stretch".
27
+ * @param {Object} props.contentStyle Styles for the block content
28
+ * @param {Object} props.index Block item index
29
+ * @param {boolean} props.isStackedHorizontally Whether the block is stacked horizontally.
30
+ * @param {number} props.marginHorizontal The horizontal margin.
31
+ * @param {number} props.marginVertical The vertical margin.
32
+ * @param {Function} props.onAddBlock On add block callback.
33
+ * @param {Function} props.onDeleteBlock On delete block callback.
34
+ * @param {number} props.parentWidth The width of the parent block.
35
+ * @param {string} props.rootClientId The root client ID.
36
+ * @param {Function} props.shouldShowInnerBlockAppender Whether to show the inner block appender.
37
+ *
38
+ * @return {WPComponent} The rendered block list item content.
39
+ */
40
+ function BlockListItemContent( {
41
+ blockWidth,
42
+ clientId,
43
+ contentResizeMode,
44
+ contentStyle,
45
+ index,
46
+ isStackedHorizontally,
47
+ marginHorizontal,
48
+ marginVertical,
49
+ onAddBlock,
50
+ onDeleteBlock,
51
+ parentWidth,
52
+ rootClientId,
53
+ shouldShowInnerBlockAppender,
54
+ } ) {
55
+ const {
56
+ blockAlignment,
57
+ blockName,
58
+ hasParents,
59
+ parentBlockAlignment,
60
+ parentBlockName,
61
+ shouldShowInsertionPointAfter,
62
+ shouldShowInsertionPointBefore,
63
+ } = useSelect(
64
+ ( select ) => {
184
65
  const {
185
- getBlockOrder,
66
+ getBlockAttributes,
186
67
  getBlockInsertionPoint,
68
+ getBlockName,
69
+ getBlockOrder,
187
70
  isBlockInsertionPointVisible,
188
- getSettings,
189
- getBlockParents,
190
- getBlock,
191
71
  } = select( blockEditorStore );
192
-
193
72
  const blockClientIds = getBlockOrder( rootClientId );
194
73
  const insertionPoint = getBlockInsertionPoint();
195
- const blockInsertionPointIsVisible = isBlockInsertionPointVisible();
196
- const shouldShowInsertionPointBefore =
197
- ! isStackedHorizontally &&
198
- blockInsertionPointIsVisible &&
199
- insertionPoint.rootClientId === rootClientId &&
200
- // If list is empty, show the insertion point (via the default appender)
201
- ( blockClientIds.length === 0 ||
202
- // Or if the insertion point is right before the denoted block.
203
- blockClientIds[ insertionPoint.index ] === clientId );
204
-
205
- const shouldShowInsertionPointAfter =
74
+
75
+ const insertionPointVisibleInCurrentRoot =
206
76
  ! isStackedHorizontally &&
207
- blockInsertionPointIsVisible &&
208
- insertionPoint.rootClientId === rootClientId &&
209
- // If the insertion point is at the end of the list.
210
- blockClientIds.length === insertionPoint.index &&
211
- // And the denoted block is the last one on the list, show the indicator at the end of the block.
77
+ isBlockInsertionPointVisible() &&
78
+ insertionPoint.rootClientId === rootClientId;
79
+
80
+ const isListEmpty = blockClientIds.length === 0;
81
+ const isInsertionPointBeforeBlock =
82
+ blockClientIds[ insertionPoint.index ] === clientId;
83
+ const isInsertionPointAtEnd =
84
+ blockClientIds.length === insertionPoint.index;
85
+ const isBlockLastInList =
212
86
  blockClientIds[ insertionPoint.index - 1 ] === clientId;
213
87
 
214
- const isReadOnly = getSettings().readOnly;
88
+ const showInsertionPointBefore =
89
+ insertionPointVisibleInCurrentRoot &&
90
+ ( isListEmpty || isInsertionPointBeforeBlock );
91
+
92
+ const showInsertionPointAfter =
93
+ insertionPointVisibleInCurrentRoot &&
94
+ isInsertionPointAtEnd &&
95
+ isBlockLastInList;
215
96
 
216
- const { attributes, name } = getBlock( clientId ) || {};
217
- const { align } = attributes || {};
218
- const parents = getBlockParents( clientId, true );
219
- const hasParents = !! parents.length;
220
- const parentBlock = hasParents ? getBlock( parents[ 0 ] ) : {};
221
- const { align: parentBlockAlignment } =
222
- parentBlock?.attributes || {};
223
- const { name: parentBlockName } = parentBlock || {};
97
+ const blockHasParents = !! rootClientId;
98
+ const name = getBlockName( clientId );
99
+ const parentName = getBlockName( rootClientId );
100
+ const { align } = getBlockAttributes( clientId ) || {};
101
+ const { align: parentBlockAlign } =
102
+ getBlockAttributes( rootClientId ) || {};
224
103
 
225
104
  return {
226
- shouldShowInsertionPointBefore,
227
- shouldShowInsertionPointAfter,
228
- isReadOnly,
229
- hasParents,
230
105
  blockAlignment: align,
231
- parentBlockAlignment,
232
106
  blockName: name,
233
- parentBlockName,
107
+ hasParents: blockHasParents,
108
+ parentBlockAlignment: parentBlockAlign,
109
+ parentBlockName: parentName,
110
+ shouldShowInsertionPointAfter: showInsertionPointAfter,
111
+ shouldShowInsertionPointBefore: showInsertionPointBefore,
234
112
  };
235
- }
236
- ),
237
- ] )( BlockListItem );
113
+ },
114
+ [ isStackedHorizontally, rootClientId, clientId ]
115
+ );
116
+
117
+ const [ wrapperStyles, margin ] = useEditorWrapperStyles( {
118
+ align: blockAlignment,
119
+ blockName,
120
+ blockWidth,
121
+ contentResizeMode,
122
+ hasParents,
123
+ marginHorizontal,
124
+ parentBlockAlignment,
125
+ parentBlockName,
126
+ parentWidth,
127
+ } );
128
+
129
+ const shouldShowBlockInsertionPointAfter =
130
+ ! shouldShowInnerBlockAppender() && shouldShowInsertionPointAfter;
131
+
132
+ return (
133
+ <View style={ wrapperStyles }>
134
+ { shouldShowInsertionPointBefore && (
135
+ <BlockInsertionPoint
136
+ testID={ `block-insertion-point-before-row-${ index + 1 }` }
137
+ />
138
+ ) }
139
+ <Block
140
+ blockWidth={ blockWidth }
141
+ clientId={ clientId }
142
+ contentStyle={ contentStyle }
143
+ isStackedHorizontally={ isStackedHorizontally }
144
+ marginHorizontal={ margin }
145
+ marginVertical={ marginVertical }
146
+ onAddBlock={ onAddBlock }
147
+ parentBlockAlignment={ parentBlockAlignment }
148
+ onDeleteBlock={ onDeleteBlock }
149
+ parentWidth={ parentWidth }
150
+ rootClientId={ rootClientId }
151
+ />
152
+ { shouldShowBlockInsertionPointAfter && (
153
+ <BlockInsertionPoint
154
+ testID={ `block-insertion-point-after-row-${ index + 1 }` }
155
+ />
156
+ ) }
157
+ </View>
158
+ );
159
+ }
160
+
161
+ /**
162
+ * BlockListItem component. Renders a block list item either as a grid item or as a standalone item.
163
+ *
164
+ * @param {Object} props Component properties.
165
+ * @param {boolean} props.isGridItem Whether the block is a grid item.
166
+ * @param {number} props.numOfColumns The number of columns for grid layout.
167
+ * @param {number} props.parentWidth The width of the parent block.
168
+ * @param {number} props.tileCount The total number of tiles in the grid.
169
+ * @param {number} props.tileIndex The index of the current tile in the grid.
170
+ * @param {number} props.blockWidth The width of the block.
171
+ * @param {string} props.clientId The block client ID.
172
+ * @param {string} props.contentResizeMode The content resize mode, e.g "stretch".
173
+ * @param {Object} props.contentStyle Styles for the block content
174
+ * @param {Object} props.index Block item index
175
+ * @param {boolean} props.isStackedHorizontally Whether the block is stacked horizontally.
176
+ * @param {number} props.marginHorizontal The horizontal margin.
177
+ * @param {number} props.marginVertical The vertical margin.
178
+ * @param {Function} props.onAddBlock On add block callback.
179
+ * @param {Function} props.onDeleteBlock On delete block callback.
180
+ * @param {string} props.rootClientId The root client ID.
181
+ * @param {Function} props.shouldShowInnerBlockAppender Whether to show the inner block appender.
182
+ *
183
+ * @return {WPComponent|null} The rendered block list item or null if the block width is not provided.
184
+ */
185
+ function BlockListItem( props ) {
186
+ const { isGridItem, numOfColumns, tileCount, tileIndex, ...restProps } =
187
+ props;
188
+
189
+ if ( ! props?.blockWidth ) {
190
+ return null;
191
+ }
192
+
193
+ if ( isGridItem ) {
194
+ return (
195
+ <Grid
196
+ maxWidth={ props?.parentWidth }
197
+ numOfColumns={ numOfColumns }
198
+ tileCount={ tileCount }
199
+ index={ tileIndex }
200
+ >
201
+ <BlockListItemContent { ...restProps } />
202
+ </Grid>
203
+ );
204
+ }
205
+
206
+ return <BlockListItemContent { ...restProps } />;
207
+ }
208
+
209
+ export default BlockListItem;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { View } from 'react-native';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { usePreferredColorSchemeStyle } from '@wordpress/compose';
10
+ import { alignmentHelpers } from '@wordpress/components';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import styles from './block.scss';
16
+
17
+ function BlockOutline( {
18
+ align,
19
+ blockWidth,
20
+ isParentSelected,
21
+ isSelected,
22
+ name,
23
+ screenWidth,
24
+ } ) {
25
+ const { isFullWidth, isContainerRelated } = alignmentHelpers;
26
+ const isScreenWidthWider = blockWidth < screenWidth;
27
+
28
+ const styleSolidBorder = [
29
+ styles.solidBorder,
30
+ isFullWidth( align ) && isScreenWidthWider && styles.borderFullWidth,
31
+ isFullWidth( align ) &&
32
+ isContainerRelated( name ) &&
33
+ isScreenWidthWider &&
34
+ styles.containerBorderFullWidth,
35
+ usePreferredColorSchemeStyle(
36
+ styles.solidBorderColor,
37
+ styles.solidBorderColorDark
38
+ ),
39
+ ];
40
+ const styleDashedBorder = [
41
+ styles.dashedBorder,
42
+ usePreferredColorSchemeStyle(
43
+ styles.dashedBorderColor,
44
+ styles.dashedBorderColorDark
45
+ ),
46
+ ];
47
+
48
+ return (
49
+ <>
50
+ { isSelected && (
51
+ <View pointerEvents="box-none" style={ styleSolidBorder } />
52
+ ) }
53
+ { isParentSelected && <View style={ styleDashedBorder } /> }
54
+ </>
55
+ );
56
+ }
57
+
58
+ export default BlockOutline;