@wordpress/block-editor 12.0.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 (311) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +1 -1
  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-list/block-invalid-warning.native.js +15 -7
  12. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  13. package/build/components/block-list/block-list-item-cell.native.js +15 -2
  14. package/build/components/block-list/block-list-item-cell.native.js.map +1 -1
  15. package/build/components/block-list/block-list-item.native.js +158 -195
  16. package/build/components/block-list/block-list-item.native.js.map +1 -1
  17. package/build/components/block-list/block-outline.native.js +57 -0
  18. package/build/components/block-list/block-outline.native.js.map +1 -0
  19. package/build/components/block-list/block.native.js +343 -299
  20. package/build/components/block-list/block.native.js.map +1 -1
  21. package/build/components/block-list/index.native.js +202 -298
  22. package/build/components/block-list/index.native.js.map +1 -1
  23. package/build/components/block-list/insertion-point.native.js +4 -2
  24. package/build/components/block-list/insertion-point.native.js.map +1 -1
  25. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  26. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  27. package/build/components/block-settings-menu/block-settings-dropdown.js +8 -10
  28. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  29. package/build/components/block-settings-menu-controls/index.js +15 -4
  30. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  31. package/build/components/block-tools/block-contextual-toolbar.js +17 -62
  32. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  33. package/build/components/block-tools/selected-block-popover.js +3 -8
  34. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  35. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  36. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  37. package/build/components/global-styles/advanced-panel.js +86 -0
  38. package/build/components/global-styles/advanced-panel.js.map +1 -0
  39. package/build/components/global-styles/color-panel.js +4 -1
  40. package/build/components/global-styles/color-panel.js.map +1 -1
  41. package/build/components/global-styles/dimensions-panel.js +6 -6
  42. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  43. package/build/components/global-styles/hooks.js +1 -2
  44. package/build/components/global-styles/hooks.js.map +1 -1
  45. package/build/components/global-styles/index.js +24 -0
  46. package/build/components/global-styles/index.js.map +1 -1
  47. package/build/components/global-styles/typography-panel.js +1 -1
  48. package/build/components/global-styles/typography-panel.js.map +1 -1
  49. package/build/components/global-styles/use-global-styles-output.js +27 -4
  50. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  51. package/build/components/global-styles/utils.js +30 -0
  52. package/build/components/global-styles/utils.js.map +1 -1
  53. package/build/components/image-editor/use-save-image.js +24 -8
  54. package/build/components/image-editor/use-save-image.js.map +1 -1
  55. package/build/components/inserter-draggable-blocks/index.js +5 -0
  56. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  57. package/build/components/inspector-controls/fill.js +1 -1
  58. package/build/components/inspector-controls/fill.js.map +1 -1
  59. package/build/components/inspector-controls/fill.native.js +1 -1
  60. package/build/components/inspector-controls/fill.native.js.map +1 -1
  61. package/build/components/inspector-controls/slot.js +3 -6
  62. package/build/components/inspector-controls/slot.js.map +1 -1
  63. package/build/components/inspector-controls/slot.native.js +1 -1
  64. package/build/components/inspector-controls/slot.native.js.map +1 -1
  65. package/build/components/line-height-control/index.js +7 -2
  66. package/build/components/line-height-control/index.js.map +1 -1
  67. package/build/components/link-control/use-internal-input-value.js +9 -8
  68. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  69. package/build/components/list-view/block-contents.js +7 -2
  70. package/build/components/list-view/block-contents.js.map +1 -1
  71. package/build/components/list-view/block-select-button.js +2 -1
  72. package/build/components/list-view/block-select-button.js.map +1 -1
  73. package/build/components/list-view/block.js +4 -4
  74. package/build/components/list-view/block.js.map +1 -1
  75. package/build/components/list-view/index.js +32 -18
  76. package/build/components/list-view/index.js.map +1 -1
  77. package/build/components/list-view/use-list-view-drop-zone.js +163 -11
  78. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  79. package/build/components/media-placeholder/index.js +68 -7
  80. package/build/components/media-placeholder/index.js.map +1 -1
  81. package/build/components/multi-selection-inspector/index.js +2 -2
  82. package/build/components/multi-selection-inspector/index.js.map +1 -1
  83. package/build/components/off-canvas-editor/leaf-more-menu.js +3 -1
  84. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  85. package/build/components/preview-options/index.js +6 -1
  86. package/build/components/preview-options/index.js.map +1 -1
  87. package/build/components/spacing-sizes-control/spacing-input-control.js +1 -1
  88. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  89. package/build/components/url-input/index.js +1 -2
  90. package/build/components/url-input/index.js.map +1 -1
  91. package/build/hooks/align.js +1 -1
  92. package/build/hooks/align.js.map +1 -1
  93. package/build/hooks/border.js +1 -1
  94. package/build/hooks/border.js.map +1 -1
  95. package/build/hooks/color.js +1 -1
  96. package/build/hooks/color.js.map +1 -1
  97. package/build/hooks/content-lock-ui.js +8 -12
  98. package/build/hooks/content-lock-ui.js.map +1 -1
  99. package/build/hooks/duotone.js +1 -1
  100. package/build/hooks/duotone.js.map +1 -1
  101. package/build/hooks/index.native.js +8 -0
  102. package/build/hooks/index.native.js.map +1 -1
  103. package/build/hooks/layout.js +2 -2
  104. package/build/hooks/layout.js.map +1 -1
  105. package/build/hooks/position.js +1 -1
  106. package/build/hooks/position.js.map +1 -1
  107. package/build/hooks/style.js +1 -1
  108. package/build/hooks/style.js.map +1 -1
  109. package/build/hooks/use-editor-wrapper-styles.native.js +255 -0
  110. package/build/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  111. package/build/hooks/use-typography-props.js +14 -10
  112. package/build/hooks/use-typography-props.js.map +1 -1
  113. package/build/index.native.js +31 -0
  114. package/build/index.native.js.map +1 -0
  115. package/build/utils/use-should-contextual-toolbar-show.js +16 -12
  116. package/build/utils/use-should-contextual-toolbar-show.js.map +1 -1
  117. package/build-module/components/block-controls/slot.js +11 -4
  118. package/build-module/components/block-controls/slot.js.map +1 -1
  119. package/build-module/components/block-controls/slot.native.js +9 -1
  120. package/build-module/components/block-controls/slot.native.js.map +1 -1
  121. package/build-module/components/block-draggable/index.js +10 -6
  122. package/build-module/components/block-draggable/index.js.map +1 -1
  123. package/build-module/components/block-draggable/use-scroll-when-dragging.js +2 -2
  124. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  125. package/build-module/components/block-list/block-invalid-warning.native.js +16 -8
  126. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  127. package/build-module/components/block-list/block-list-item-cell.native.js +13 -2
  128. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -1
  129. package/build-module/components/block-list/block-list-item.native.js +160 -190
  130. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  131. package/build-module/components/block-list/block-outline.native.js +44 -0
  132. package/build-module/components/block-list/block-outline.native.js.map +1 -0
  133. package/build-module/components/block-list/block.native.js +341 -298
  134. package/build-module/components/block-list/block.native.js.map +1 -1
  135. package/build-module/components/block-list/index.native.js +203 -293
  136. package/build-module/components/block-list/index.native.js.map +1 -1
  137. package/build-module/components/block-list/insertion-point.native.js +4 -2
  138. package/build-module/components/block-list/insertion-point.native.js.map +1 -1
  139. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  140. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  141. package/build-module/components/block-settings-menu/block-settings-dropdown.js +8 -9
  142. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  143. package/build-module/components/block-settings-menu-controls/index.js +13 -5
  144. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  145. package/build-module/components/block-tools/block-contextual-toolbar.js +18 -62
  146. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  147. package/build-module/components/block-tools/selected-block-popover.js +3 -7
  148. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  149. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  150. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  151. package/build-module/components/global-styles/advanced-panel.js +74 -0
  152. package/build-module/components/global-styles/advanced-panel.js.map +1 -0
  153. package/build-module/components/global-styles/color-panel.js +5 -2
  154. package/build-module/components/global-styles/color-panel.js.map +1 -1
  155. package/build-module/components/global-styles/dimensions-panel.js +6 -6
  156. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  157. package/build-module/components/global-styles/hooks.js +1 -2
  158. package/build-module/components/global-styles/hooks.js.map +1 -1
  159. package/build-module/components/global-styles/index.js +3 -1
  160. package/build-module/components/global-styles/index.js.map +1 -1
  161. package/build-module/components/global-styles/typography-panel.js +1 -1
  162. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  163. package/build-module/components/global-styles/use-global-styles-output.js +25 -4
  164. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  165. package/build-module/components/global-styles/utils.js +25 -0
  166. package/build-module/components/global-styles/utils.js.map +1 -1
  167. package/build-module/components/image-editor/use-save-image.js +24 -8
  168. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  169. package/build-module/components/inserter-draggable-blocks/index.js +4 -0
  170. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  171. package/build-module/components/inspector-controls/fill.js +1 -1
  172. package/build-module/components/inspector-controls/fill.js.map +1 -1
  173. package/build-module/components/inspector-controls/fill.native.js +1 -1
  174. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  175. package/build-module/components/inspector-controls/slot.js +4 -7
  176. package/build-module/components/inspector-controls/slot.js.map +1 -1
  177. package/build-module/components/inspector-controls/slot.native.js +1 -1
  178. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  179. package/build-module/components/line-height-control/index.js +7 -2
  180. package/build-module/components/line-height-control/index.js.map +1 -1
  181. package/build-module/components/link-control/use-internal-input-value.js +9 -8
  182. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  183. package/build-module/components/list-view/block-contents.js +7 -3
  184. package/build-module/components/list-view/block-contents.js.map +1 -1
  185. package/build-module/components/list-view/block-select-button.js +2 -1
  186. package/build-module/components/list-view/block-select-button.js.map +1 -1
  187. package/build-module/components/list-view/block.js +4 -4
  188. package/build-module/components/list-view/block.js.map +1 -1
  189. package/build-module/components/list-view/index.js +32 -18
  190. package/build-module/components/list-view/index.js.map +1 -1
  191. package/build-module/components/list-view/use-list-view-drop-zone.js +160 -11
  192. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  193. package/build-module/components/media-placeholder/index.js +66 -7
  194. package/build-module/components/media-placeholder/index.js.map +1 -1
  195. package/build-module/components/multi-selection-inspector/index.js +2 -2
  196. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  197. package/build-module/components/off-canvas-editor/leaf-more-menu.js +3 -1
  198. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  199. package/build-module/components/preview-options/index.js +7 -2
  200. package/build-module/components/preview-options/index.js.map +1 -1
  201. package/build-module/components/spacing-sizes-control/spacing-input-control.js +1 -1
  202. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  203. package/build-module/components/url-input/index.js +1 -2
  204. package/build-module/components/url-input/index.js.map +1 -1
  205. package/build-module/hooks/align.js +1 -1
  206. package/build-module/hooks/align.js.map +1 -1
  207. package/build-module/hooks/border.js +1 -1
  208. package/build-module/hooks/border.js.map +1 -1
  209. package/build-module/hooks/color.js +1 -1
  210. package/build-module/hooks/color.js.map +1 -1
  211. package/build-module/hooks/content-lock-ui.js +8 -11
  212. package/build-module/hooks/content-lock-ui.js.map +1 -1
  213. package/build-module/hooks/duotone.js +1 -1
  214. package/build-module/hooks/duotone.js.map +1 -1
  215. package/build-module/hooks/index.native.js +1 -0
  216. package/build-module/hooks/index.native.js.map +1 -1
  217. package/build-module/hooks/layout.js +2 -2
  218. package/build-module/hooks/layout.js.map +1 -1
  219. package/build-module/hooks/position.js +1 -1
  220. package/build-module/hooks/position.js.map +1 -1
  221. package/build-module/hooks/style.js +1 -1
  222. package/build-module/hooks/style.js.map +1 -1
  223. package/build-module/hooks/use-editor-wrapper-styles.native.js +242 -0
  224. package/build-module/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  225. package/build-module/hooks/use-typography-props.js +14 -10
  226. package/build-module/hooks/use-typography-props.js.map +1 -1
  227. package/build-module/index.native.js +6 -0
  228. package/build-module/index.native.js.map +1 -0
  229. package/build-module/utils/use-should-contextual-toolbar-show.js +16 -12
  230. package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -1
  231. package/build-style/content-rtl.css +0 -1
  232. package/build-style/content.css +0 -1
  233. package/build-style/style-rtl.css +37 -13
  234. package/build-style/style.css +37 -13
  235. package/package.json +31 -31
  236. package/src/components/block-breadcrumb/style.scss +2 -1
  237. package/src/components/block-controls/slot.js +8 -4
  238. package/src/components/block-controls/slot.native.js +6 -1
  239. package/src/components/block-draggable/index.js +10 -6
  240. package/src/components/block-draggable/use-scroll-when-dragging.js +8 -2
  241. package/src/components/block-list/block-invalid-warning.native.js +17 -9
  242. package/src/components/block-list/block-list-item-cell.native.js +10 -1
  243. package/src/components/block-list/block-list-item.native.js +180 -208
  244. package/src/components/block-list/block-outline.native.js +58 -0
  245. package/src/components/block-list/block.native.js +564 -523
  246. package/src/components/block-list/content.scss +0 -1
  247. package/src/components/block-list/index.native.js +229 -298
  248. package/src/components/block-list/insertion-point.native.js +2 -2
  249. package/src/components/block-list/test/block-invalid-warning.native.js +48 -0
  250. package/src/components/block-list/test/index.native.js +205 -0
  251. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -1
  252. package/src/components/block-pattern-setup/style.scss +1 -4
  253. package/src/components/block-patterns-list/style.scss +1 -4
  254. package/src/components/block-settings-menu/block-settings-dropdown.js +10 -17
  255. package/src/components/block-settings-menu-controls/index.js +24 -4
  256. package/src/components/block-styles/style.scss +4 -4
  257. package/src/components/block-tools/block-contextual-toolbar.js +28 -62
  258. package/src/components/block-tools/selected-block-popover.js +3 -5
  259. package/src/components/block-tools/style.scss +8 -0
  260. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +16 -2
  261. package/src/components/global-styles/advanced-panel.js +82 -0
  262. package/src/components/global-styles/color-panel.js +6 -1
  263. package/src/components/global-styles/dimensions-panel.js +6 -6
  264. package/src/components/global-styles/hooks.js +1 -5
  265. package/src/components/global-styles/index.js +6 -1
  266. package/src/components/global-styles/style.scss +14 -0
  267. package/src/components/global-styles/test/utils.js +57 -1
  268. package/src/components/global-styles/typography-panel.js +1 -1
  269. package/src/components/global-styles/use-global-styles-output.js +21 -3
  270. package/src/components/global-styles/utils.js +27 -0
  271. package/src/components/image-editor/use-save-image.js +20 -9
  272. package/src/components/inserter-draggable-blocks/index.js +4 -0
  273. package/src/components/inspector-controls/fill.js +1 -1
  274. package/src/components/inspector-controls/fill.native.js +1 -1
  275. package/src/components/inspector-controls/slot.js +4 -9
  276. package/src/components/inspector-controls/slot.native.js +1 -1
  277. package/src/components/line-height-control/index.js +7 -2
  278. package/src/components/line-height-control/stories/index.js +1 -1
  279. package/src/components/link-control/test/index.js +42 -0
  280. package/src/components/link-control/use-internal-input-value.js +8 -7
  281. package/src/components/list-view/block-contents.js +26 -20
  282. package/src/components/list-view/block-select-button.js +5 -1
  283. package/src/components/list-view/block.js +5 -2
  284. package/src/components/list-view/index.js +26 -14
  285. package/src/components/list-view/style.scss +5 -2
  286. package/src/components/list-view/test/use-list-view-drop-zone.js +88 -12
  287. package/src/components/list-view/use-list-view-drop-zone.js +194 -11
  288. package/src/components/media-placeholder/index.js +74 -1
  289. package/src/components/multi-selection-inspector/index.js +2 -2
  290. package/src/components/off-canvas-editor/leaf-more-menu.js +2 -1
  291. package/src/components/preview-options/index.js +9 -2
  292. package/src/components/spacing-sizes-control/spacing-input-control.js +1 -0
  293. package/src/components/url-input/index.js +1 -2
  294. package/src/hooks/align.js +2 -1
  295. package/src/hooks/border.js +2 -1
  296. package/src/hooks/color.js +2 -1
  297. package/src/hooks/content-lock-ui.js +3 -15
  298. package/src/hooks/duotone.js +1 -0
  299. package/src/hooks/index.native.js +1 -0
  300. package/src/hooks/layout.js +4 -2
  301. package/src/hooks/position.js +2 -1
  302. package/src/hooks/style.js +2 -1
  303. package/src/hooks/test/use-editor-wrapper-styles.native.js +282 -0
  304. package/src/hooks/test/use-typography-props.js +47 -2
  305. package/src/hooks/use-editor-wrapper-styles.native.js +250 -0
  306. package/src/hooks/use-editor-wrapper-styles.native.scss +11 -0
  307. package/src/hooks/use-typography-props.js +10 -11
  308. package/src/index.native.js +6 -0
  309. package/src/utils/use-should-contextual-toolbar-show.js +19 -9
  310. package/tsconfig.json +1 -0
  311. package/tsconfig.tsbuildinfo +1 -1
@@ -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;