@wordpress/block-editor 12.0.0 → 12.2.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 (627) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -1
  3. package/build/autocompleters/block.js +13 -5
  4. package/build/autocompleters/block.js.map +1 -1
  5. package/build/components/block-breadcrumb/index.js +6 -3
  6. package/build/components/block-breadcrumb/index.js.map +1 -1
  7. package/build/components/block-controls/slot.js +12 -4
  8. package/build/components/block-controls/slot.js.map +1 -1
  9. package/build/components/block-controls/slot.native.js +10 -1
  10. package/build/components/block-controls/slot.native.js.map +1 -1
  11. package/build/components/block-draggable/index.js +11 -7
  12. package/build/components/block-draggable/index.js.map +1 -1
  13. package/build/components/block-draggable/use-scroll-when-dragging.js +2 -2
  14. package/build/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  15. package/build/components/block-editing-mode/index.js +84 -0
  16. package/build/components/block-editing-mode/index.js.map +1 -0
  17. package/build/components/block-list/block-invalid-warning.native.js +15 -7
  18. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  19. package/build/components/block-list/block-list-block-context.js +15 -0
  20. package/build/components/block-list/block-list-block-context.js.map +1 -0
  21. package/build/components/block-list/block-list-item-cell.native.js +15 -2
  22. package/build/components/block-list/block-list-item-cell.native.js.map +1 -1
  23. package/build/components/block-list/block-list-item.native.js +158 -195
  24. package/build/components/block-list/block-list-item.native.js.map +1 -1
  25. package/build/components/block-list/block-outline.native.js +57 -0
  26. package/build/components/block-list/block-outline.native.js.map +1 -0
  27. package/build/components/block-list/block.js +29 -37
  28. package/build/components/block-list/block.js.map +1 -1
  29. package/build/components/block-list/block.native.js +347 -311
  30. package/build/components/block-list/block.native.js.map +1 -1
  31. package/build/components/block-list/index.native.js +260 -357
  32. package/build/components/block-list/index.native.js.map +1 -1
  33. package/build/components/block-list/insertion-point.native.js +4 -2
  34. package/build/components/block-list/insertion-point.native.js.map +1 -1
  35. package/build/components/block-list/use-block-props/index.js +2 -2
  36. package/build/components/block-list/use-block-props/index.js.map +1 -1
  37. package/build/components/block-list/use-in-between-inserter.js +7 -5
  38. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  39. package/build/components/block-list-appender/index.js +15 -1
  40. package/build/components/block-list-appender/index.js.map +1 -1
  41. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +19 -4
  42. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  43. package/build/components/block-settings-menu/block-settings-dropdown.js +8 -10
  44. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  45. package/build/components/block-settings-menu-controls/index.js +15 -4
  46. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  47. package/build/components/block-styles/preview-panel.js +1 -2
  48. package/build/components/block-styles/preview-panel.js.map +1 -1
  49. package/build/components/block-switcher/block-transformations-menu.js +8 -0
  50. package/build/components/block-switcher/block-transformations-menu.js.map +1 -1
  51. package/build/components/block-switcher/block-variation-transformations.js +125 -0
  52. package/build/components/block-switcher/block-variation-transformations.js.map +1 -0
  53. package/build/components/block-switcher/index.js +34 -12
  54. package/build/components/block-switcher/index.js.map +1 -1
  55. package/build/components/block-switcher/pattern-transformations-menu.js +3 -3
  56. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  57. package/build/components/block-toolbar/index.js +9 -7
  58. package/build/components/block-toolbar/index.js.map +1 -1
  59. package/build/components/block-tools/block-contextual-toolbar.js +22 -65
  60. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  61. package/build/components/block-tools/insertion-point.js +11 -5
  62. package/build/components/block-tools/insertion-point.js.map +1 -1
  63. package/build/components/block-tools/selected-block-popover.js +3 -8
  64. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  65. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  66. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  67. package/build/components/convert-to-group-buttons/index.js +7 -2
  68. package/build/components/convert-to-group-buttons/index.js.map +1 -1
  69. package/build/components/convert-to-group-buttons/index.native.js +87 -3
  70. package/build/components/convert-to-group-buttons/index.native.js.map +1 -1
  71. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +23 -37
  72. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  73. package/build/components/global-styles/advanced-panel.js +86 -0
  74. package/build/components/global-styles/advanced-panel.js.map +1 -0
  75. package/build/components/global-styles/color-panel.js +4 -1
  76. package/build/components/global-styles/color-panel.js.map +1 -1
  77. package/build/components/global-styles/dimensions-panel.js +9 -8
  78. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  79. package/build/components/global-styles/hooks.js +1 -2
  80. package/build/components/global-styles/hooks.js.map +1 -1
  81. package/build/components/global-styles/index.js +24 -0
  82. package/build/components/global-styles/index.js.map +1 -1
  83. package/build/components/global-styles/typography-panel.js +1 -1
  84. package/build/components/global-styles/typography-panel.js.map +1 -1
  85. package/build/components/global-styles/use-global-styles-output.js +27 -4
  86. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  87. package/build/components/global-styles/utils.js +30 -0
  88. package/build/components/global-styles/utils.js.map +1 -1
  89. package/build/components/iframe/index.js +14 -7
  90. package/build/components/iframe/index.js.map +1 -1
  91. package/build/components/image-editor/use-save-image.js +24 -8
  92. package/build/components/image-editor/use-save-image.js.map +1 -1
  93. package/build/components/inner-blocks/index.js +2 -1
  94. package/build/components/inner-blocks/index.js.map +1 -1
  95. package/build/components/inner-blocks/index.native.js +7 -7
  96. package/build/components/inner-blocks/index.native.js.map +1 -1
  97. package/build/components/inner-blocks/use-nested-settings-update.js +13 -5
  98. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  99. package/build/components/inserter/index.js +3 -7
  100. package/build/components/inserter/index.js.map +1 -1
  101. package/build/components/inserter/quick-inserter.js +2 -4
  102. package/build/components/inserter/quick-inserter.js.map +1 -1
  103. package/build/components/inserter/search-results.js +19 -6
  104. package/build/components/inserter/search-results.js.map +1 -1
  105. package/build/components/inserter-draggable-blocks/index.js +5 -0
  106. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  107. package/build/components/inspector-controls/fill.js +1 -1
  108. package/build/components/inspector-controls/fill.js.map +1 -1
  109. package/build/components/inspector-controls/fill.native.js +1 -1
  110. package/build/components/inspector-controls/fill.native.js.map +1 -1
  111. package/build/components/inspector-controls/slot.js +3 -6
  112. package/build/components/inspector-controls/slot.js.map +1 -1
  113. package/build/components/inspector-controls/slot.native.js +1 -1
  114. package/build/components/inspector-controls/slot.native.js.map +1 -1
  115. package/build/components/line-height-control/index.js +7 -2
  116. package/build/components/line-height-control/index.js.map +1 -1
  117. package/build/components/link-control/use-internal-input-value.js +9 -8
  118. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  119. package/build/components/list-view/appender.js +6 -1
  120. package/build/components/list-view/appender.js.map +1 -1
  121. package/build/components/list-view/block-contents.js +9 -2
  122. package/build/components/list-view/block-contents.js.map +1 -1
  123. package/build/components/list-view/block-select-button.js +2 -1
  124. package/build/components/list-view/block-select-button.js.map +1 -1
  125. package/build/components/list-view/block.js +25 -29
  126. package/build/components/list-view/block.js.map +1 -1
  127. package/build/components/list-view/branch.js +1 -3
  128. package/build/components/list-view/branch.js.map +1 -1
  129. package/build/components/list-view/index.js +43 -22
  130. package/build/components/list-view/index.js.map +1 -1
  131. package/build/components/list-view/use-list-view-client-ids.js +27 -3
  132. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  133. package/build/components/list-view/use-list-view-drop-zone.js +163 -11
  134. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  135. package/build/components/media-placeholder/index.js +68 -7
  136. package/build/components/media-placeholder/index.js.map +1 -1
  137. package/build/components/multi-selection-inspector/index.js +2 -2
  138. package/build/components/multi-selection-inspector/index.js.map +1 -1
  139. package/build/components/preview-options/index.js +6 -1
  140. package/build/components/preview-options/index.js.map +1 -1
  141. package/build/components/publish-date-time-picker/index.js +0 -2
  142. package/build/components/publish-date-time-picker/index.js.map +1 -1
  143. package/build/components/spacing-sizes-control/spacing-input-control.js +1 -1
  144. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  145. package/build/components/url-input/index.js +4 -2
  146. package/build/components/url-input/index.js.map +1 -1
  147. package/build/components/use-block-drop-zone/index.js +25 -15
  148. package/build/components/use-block-drop-zone/index.js.map +1 -1
  149. package/build/components/use-resize-canvas/index.js +8 -1
  150. package/build/components/use-resize-canvas/index.js.map +1 -1
  151. package/build/components/writing-flow/use-arrow-nav.js +13 -7
  152. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  153. package/build/hooks/align.js +4 -8
  154. package/build/hooks/align.js.map +1 -1
  155. package/build/hooks/behaviors.js +115 -0
  156. package/build/hooks/behaviors.js.map +1 -0
  157. package/build/hooks/border.js +1 -1
  158. package/build/hooks/border.js.map +1 -1
  159. package/build/hooks/color.js +1 -1
  160. package/build/hooks/color.js.map +1 -1
  161. package/build/hooks/content-lock-ui.js +8 -12
  162. package/build/hooks/content-lock-ui.js.map +1 -1
  163. package/build/hooks/dimensions.js +0 -30
  164. package/build/hooks/dimensions.js.map +1 -1
  165. package/build/hooks/duotone.js +5 -9
  166. package/build/hooks/duotone.js.map +1 -1
  167. package/build/hooks/index.js +2 -0
  168. package/build/hooks/index.js.map +1 -1
  169. package/build/hooks/index.native.js +8 -0
  170. package/build/hooks/index.native.js.map +1 -1
  171. package/build/hooks/layout.js +10 -11
  172. package/build/hooks/layout.js.map +1 -1
  173. package/build/hooks/position.js +1 -1
  174. package/build/hooks/position.js.map +1 -1
  175. package/build/hooks/style.js +1 -1
  176. package/build/hooks/style.js.map +1 -1
  177. package/build/hooks/use-editor-wrapper-styles.native.js +255 -0
  178. package/build/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  179. package/build/hooks/use-typography-props.js +14 -10
  180. package/build/hooks/use-typography-props.js.map +1 -1
  181. package/build/index.native.js +31 -0
  182. package/build/index.native.js.map +1 -0
  183. package/build/private-apis.js +4 -7
  184. package/build/private-apis.js.map +1 -1
  185. package/build/store/private-actions.js +46 -0
  186. package/build/store/private-actions.js.map +1 -1
  187. package/build/store/private-selectors.js +88 -0
  188. package/build/store/private-selectors.js.map +1 -1
  189. package/build/store/reducer.js +36 -1
  190. package/build/store/reducer.js.map +1 -1
  191. package/build/store/selectors.js +28 -18
  192. package/build/store/selectors.js.map +1 -1
  193. package/build/utils/order-inserter-block-items.js +41 -0
  194. package/build/utils/order-inserter-block-items.js.map +1 -0
  195. package/build/utils/use-should-contextual-toolbar-show.js +16 -12
  196. package/build/utils/use-should-contextual-toolbar-show.js.map +1 -1
  197. package/build-module/autocompleters/block.js +12 -5
  198. package/build-module/autocompleters/block.js.map +1 -1
  199. package/build-module/components/block-breadcrumb/index.js +5 -3
  200. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  201. package/build-module/components/block-controls/slot.js +11 -4
  202. package/build-module/components/block-controls/slot.js.map +1 -1
  203. package/build-module/components/block-controls/slot.native.js +9 -1
  204. package/build-module/components/block-controls/slot.native.js.map +1 -1
  205. package/build-module/components/block-draggable/index.js +10 -6
  206. package/build-module/components/block-draggable/index.js.map +1 -1
  207. package/build-module/components/block-draggable/use-scroll-when-dragging.js +2 -2
  208. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  209. package/build-module/components/block-editing-mode/index.js +72 -0
  210. package/build-module/components/block-editing-mode/index.js.map +1 -0
  211. package/build-module/components/block-list/block-invalid-warning.native.js +16 -8
  212. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  213. package/build-module/components/block-list/block-list-block-context.js +6 -0
  214. package/build-module/components/block-list/block-list-block-context.js.map +1 -0
  215. package/build-module/components/block-list/block-list-item-cell.native.js +13 -2
  216. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -1
  217. package/build-module/components/block-list/block-list-item.native.js +160 -190
  218. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  219. package/build-module/components/block-list/block-outline.native.js +44 -0
  220. package/build-module/components/block-list/block-outline.native.js.map +1 -0
  221. package/build-module/components/block-list/block.js +26 -34
  222. package/build-module/components/block-list/block.js.map +1 -1
  223. package/build-module/components/block-list/block.native.js +345 -310
  224. package/build-module/components/block-list/block.native.js.map +1 -1
  225. package/build-module/components/block-list/index.native.js +263 -355
  226. package/build-module/components/block-list/index.native.js.map +1 -1
  227. package/build-module/components/block-list/insertion-point.native.js +4 -2
  228. package/build-module/components/block-list/insertion-point.native.js.map +1 -1
  229. package/build-module/components/block-list/use-block-props/index.js +1 -1
  230. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  231. package/build-module/components/block-list/use-in-between-inserter.js +6 -5
  232. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  233. package/build-module/components/block-list-appender/index.js +15 -1
  234. package/build-module/components/block-list-appender/index.js.map +1 -1
  235. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +18 -4
  236. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  237. package/build-module/components/block-settings-menu/block-settings-dropdown.js +8 -9
  238. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  239. package/build-module/components/block-settings-menu-controls/index.js +13 -5
  240. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  241. package/build-module/components/block-styles/preview-panel.js +1 -2
  242. package/build-module/components/block-styles/preview-panel.js.map +1 -1
  243. package/build-module/components/block-switcher/block-transformations-menu.js +7 -0
  244. package/build-module/components/block-switcher/block-transformations-menu.js.map +1 -1
  245. package/build-module/components/block-switcher/block-variation-transformations.js +108 -0
  246. package/build-module/components/block-switcher/block-variation-transformations.js.map +1 -0
  247. package/build-module/components/block-switcher/index.js +33 -12
  248. package/build-module/components/block-switcher/index.js.map +1 -1
  249. package/build-module/components/block-switcher/pattern-transformations-menu.js +3 -3
  250. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  251. package/build-module/components/block-toolbar/index.js +8 -7
  252. package/build-module/components/block-toolbar/index.js.map +1 -1
  253. package/build-module/components/block-tools/block-contextual-toolbar.js +22 -65
  254. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  255. package/build-module/components/block-tools/insertion-point.js +11 -5
  256. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  257. package/build-module/components/block-tools/selected-block-popover.js +3 -7
  258. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  259. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  260. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  261. package/build-module/components/convert-to-group-buttons/index.js +7 -2
  262. package/build-module/components/convert-to-group-buttons/index.js.map +1 -1
  263. package/build-module/components/convert-to-group-buttons/index.native.js +76 -1
  264. package/build-module/components/convert-to-group-buttons/index.native.js.map +1 -1
  265. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +22 -36
  266. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  267. package/build-module/components/global-styles/advanced-panel.js +74 -0
  268. package/build-module/components/global-styles/advanced-panel.js.map +1 -0
  269. package/build-module/components/global-styles/color-panel.js +5 -2
  270. package/build-module/components/global-styles/color-panel.js.map +1 -1
  271. package/build-module/components/global-styles/dimensions-panel.js +9 -8
  272. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  273. package/build-module/components/global-styles/hooks.js +1 -2
  274. package/build-module/components/global-styles/hooks.js.map +1 -1
  275. package/build-module/components/global-styles/index.js +3 -1
  276. package/build-module/components/global-styles/index.js.map +1 -1
  277. package/build-module/components/global-styles/typography-panel.js +1 -1
  278. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  279. package/build-module/components/global-styles/use-global-styles-output.js +25 -4
  280. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  281. package/build-module/components/global-styles/utils.js +25 -0
  282. package/build-module/components/global-styles/utils.js.map +1 -1
  283. package/build-module/components/iframe/index.js +15 -8
  284. package/build-module/components/iframe/index.js.map +1 -1
  285. package/build-module/components/image-editor/use-save-image.js +24 -8
  286. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  287. package/build-module/components/inner-blocks/index.js +2 -1
  288. package/build-module/components/inner-blocks/index.js.map +1 -1
  289. package/build-module/components/inner-blocks/index.native.js +7 -6
  290. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  291. package/build-module/components/inner-blocks/use-nested-settings-update.js +13 -5
  292. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  293. package/build-module/components/inserter/index.js +3 -7
  294. package/build-module/components/inserter/index.js.map +1 -1
  295. package/build-module/components/inserter/quick-inserter.js +2 -4
  296. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  297. package/build-module/components/inserter/search-results.js +16 -6
  298. package/build-module/components/inserter/search-results.js.map +1 -1
  299. package/build-module/components/inserter-draggable-blocks/index.js +4 -0
  300. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  301. package/build-module/components/inspector-controls/fill.js +1 -1
  302. package/build-module/components/inspector-controls/fill.js.map +1 -1
  303. package/build-module/components/inspector-controls/fill.native.js +1 -1
  304. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  305. package/build-module/components/inspector-controls/slot.js +4 -7
  306. package/build-module/components/inspector-controls/slot.js.map +1 -1
  307. package/build-module/components/inspector-controls/slot.native.js +1 -1
  308. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  309. package/build-module/components/line-height-control/index.js +7 -2
  310. package/build-module/components/line-height-control/index.js.map +1 -1
  311. package/build-module/components/link-control/use-internal-input-value.js +9 -8
  312. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  313. package/build-module/components/list-view/appender.js +6 -2
  314. package/build-module/components/list-view/appender.js.map +1 -1
  315. package/build-module/components/list-view/block-contents.js +9 -3
  316. package/build-module/components/list-view/block-contents.js.map +1 -1
  317. package/build-module/components/list-view/block-select-button.js +2 -1
  318. package/build-module/components/list-view/block-select-button.js.map +1 -1
  319. package/build-module/components/list-view/block.js +24 -29
  320. package/build-module/components/list-view/block.js.map +1 -1
  321. package/build-module/components/list-view/branch.js +1 -3
  322. package/build-module/components/list-view/branch.js.map +1 -1
  323. package/build-module/components/list-view/index.js +44 -23
  324. package/build-module/components/list-view/index.js.map +1 -1
  325. package/build-module/components/list-view/use-list-view-client-ids.js +26 -3
  326. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  327. package/build-module/components/list-view/use-list-view-drop-zone.js +160 -11
  328. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  329. package/build-module/components/media-placeholder/index.js +66 -7
  330. package/build-module/components/media-placeholder/index.js.map +1 -1
  331. package/build-module/components/multi-selection-inspector/index.js +2 -2
  332. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  333. package/build-module/components/preview-options/index.js +7 -2
  334. package/build-module/components/preview-options/index.js.map +1 -1
  335. package/build-module/components/publish-date-time-picker/index.js +0 -2
  336. package/build-module/components/publish-date-time-picker/index.js.map +1 -1
  337. package/build-module/components/spacing-sizes-control/spacing-input-control.js +1 -1
  338. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  339. package/build-module/components/url-input/index.js +4 -2
  340. package/build-module/components/url-input/index.js.map +1 -1
  341. package/build-module/components/use-block-drop-zone/index.js +25 -16
  342. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  343. package/build-module/components/use-resize-canvas/index.js +8 -1
  344. package/build-module/components/use-resize-canvas/index.js.map +1 -1
  345. package/build-module/components/writing-flow/use-arrow-nav.js +13 -7
  346. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  347. package/build-module/hooks/align.js +4 -7
  348. package/build-module/hooks/align.js.map +1 -1
  349. package/build-module/hooks/behaviors.js +97 -0
  350. package/build-module/hooks/behaviors.js.map +1 -0
  351. package/build-module/hooks/border.js +1 -1
  352. package/build-module/hooks/border.js.map +1 -1
  353. package/build-module/hooks/color.js +1 -1
  354. package/build-module/hooks/color.js.map +1 -1
  355. package/build-module/hooks/content-lock-ui.js +8 -11
  356. package/build-module/hooks/content-lock-ui.js.map +1 -1
  357. package/build-module/hooks/dimensions.js +0 -28
  358. package/build-module/hooks/dimensions.js.map +1 -1
  359. package/build-module/hooks/duotone.js +4 -7
  360. package/build-module/hooks/duotone.js.map +1 -1
  361. package/build-module/hooks/index.js +1 -0
  362. package/build-module/hooks/index.js.map +1 -1
  363. package/build-module/hooks/index.native.js +1 -0
  364. package/build-module/hooks/index.native.js.map +1 -1
  365. package/build-module/hooks/layout.js +9 -11
  366. package/build-module/hooks/layout.js.map +1 -1
  367. package/build-module/hooks/position.js +1 -1
  368. package/build-module/hooks/position.js.map +1 -1
  369. package/build-module/hooks/style.js +1 -1
  370. package/build-module/hooks/style.js.map +1 -1
  371. package/build-module/hooks/use-editor-wrapper-styles.native.js +242 -0
  372. package/build-module/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  373. package/build-module/hooks/use-typography-props.js +14 -10
  374. package/build-module/hooks/use-typography-props.js.map +1 -1
  375. package/build-module/index.native.js +6 -0
  376. package/build-module/index.native.js.map +1 -0
  377. package/build-module/private-apis.js +3 -5
  378. package/build-module/private-apis.js.map +1 -1
  379. package/build-module/store/private-actions.js +42 -0
  380. package/build-module/store/private-actions.js.map +1 -1
  381. package/build-module/store/private-selectors.js +79 -0
  382. package/build-module/store/private-selectors.js.map +1 -1
  383. package/build-module/store/reducer.js +34 -1
  384. package/build-module/store/reducer.js.map +1 -1
  385. package/build-module/store/selectors.js +26 -17
  386. package/build-module/store/selectors.js.map +1 -1
  387. package/build-module/utils/order-inserter-block-items.js +32 -0
  388. package/build-module/utils/order-inserter-block-items.js.map +1 -0
  389. package/build-module/utils/use-should-contextual-toolbar-show.js +16 -12
  390. package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -1
  391. package/build-style/content-rtl.css +32 -14
  392. package/build-style/content.css +32 -14
  393. package/build-style/default-editor-styles-rtl.css +1 -1
  394. package/build-style/default-editor-styles.css +1 -1
  395. package/build-style/style-rtl.css +56 -77
  396. package/build-style/style.css +57 -77
  397. package/package.json +32 -31
  398. package/src/autocompleters/block.js +15 -7
  399. package/src/components/block-breadcrumb/index.js +11 -3
  400. package/src/components/block-breadcrumb/style.scss +2 -1
  401. package/src/components/block-controls/slot.js +8 -4
  402. package/src/components/block-controls/slot.native.js +6 -1
  403. package/src/components/block-draggable/index.js +10 -6
  404. package/src/components/block-draggable/use-scroll-when-dragging.js +8 -2
  405. package/src/components/block-editing-mode/index.js +71 -0
  406. package/src/components/block-list/block-invalid-warning.native.js +17 -9
  407. package/src/components/block-list/block-list-block-context.js +6 -0
  408. package/src/components/block-list/block-list-item-cell.native.js +10 -1
  409. package/src/components/block-list/block-list-item.native.js +180 -208
  410. package/src/components/block-list/block-outline.native.js +58 -0
  411. package/src/components/block-list/block.js +38 -56
  412. package/src/components/block-list/block.native.js +531 -501
  413. package/src/components/block-list/content.scss +5 -6
  414. package/src/components/block-list/index.native.js +324 -382
  415. package/src/components/block-list/insertion-point.native.js +2 -2
  416. package/src/components/block-list/test/block-invalid-warning.native.js +48 -0
  417. package/src/components/block-list/test/index.native.js +205 -0
  418. package/src/components/block-list/use-block-props/index.js +1 -1
  419. package/src/components/block-list/use-in-between-inserter.js +7 -3
  420. package/src/components/block-list-appender/index.js +22 -4
  421. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +26 -1
  422. package/src/components/block-mover/style.scss +1 -0
  423. package/src/components/block-pattern-setup/style.scss +1 -4
  424. package/src/components/block-patterns-list/style.scss +1 -4
  425. package/src/components/block-settings-menu/block-settings-dropdown.js +10 -17
  426. package/src/components/block-settings-menu-controls/index.js +24 -4
  427. package/src/components/block-styles/preview-panel.js +1 -3
  428. package/src/components/block-styles/style.scss +4 -4
  429. package/src/components/block-switcher/block-transformations-menu.js +12 -0
  430. package/src/components/block-switcher/block-variation-transformations.js +115 -0
  431. package/src/components/block-switcher/index.js +38 -5
  432. package/src/components/block-switcher/pattern-transformations-menu.js +5 -5
  433. package/src/components/block-switcher/style.scss +6 -5
  434. package/src/components/block-toolbar/index.js +10 -11
  435. package/src/components/block-tools/block-contextual-toolbar.js +32 -67
  436. package/src/components/block-tools/insertion-point.js +23 -9
  437. package/src/components/block-tools/selected-block-popover.js +3 -5
  438. package/src/components/block-tools/style.scss +8 -0
  439. package/src/components/button-block-appender/content.scss +22 -0
  440. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +16 -2
  441. package/src/components/convert-to-group-buttons/index.js +9 -2
  442. package/src/components/convert-to-group-buttons/index.native.js +79 -1
  443. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +32 -38
  444. package/src/components/global-styles/advanced-panel.js +82 -0
  445. package/src/components/global-styles/color-panel.js +6 -1
  446. package/src/components/global-styles/dimensions-panel.js +9 -8
  447. package/src/components/global-styles/hooks.js +1 -5
  448. package/src/components/global-styles/index.js +6 -1
  449. package/src/components/global-styles/style.scss +17 -0
  450. package/src/components/global-styles/test/utils.js +57 -1
  451. package/src/components/global-styles/typography-panel.js +1 -1
  452. package/src/components/global-styles/use-global-styles-output.js +21 -3
  453. package/src/components/global-styles/utils.js +27 -0
  454. package/src/components/iframe/index.js +22 -12
  455. package/src/components/image-editor/use-save-image.js +20 -9
  456. package/src/components/inner-blocks/README.md +5 -0
  457. package/src/components/inner-blocks/index.js +2 -0
  458. package/src/components/inner-blocks/index.native.js +16 -6
  459. package/src/components/inner-blocks/use-nested-settings-update.js +20 -3
  460. package/src/components/inserter/index.js +1 -9
  461. package/src/components/inserter/quick-inserter.js +0 -2
  462. package/src/components/inserter/search-results.js +32 -6
  463. package/src/components/inserter-draggable-blocks/index.js +4 -0
  464. package/src/components/inspector-controls/fill.js +1 -1
  465. package/src/components/inspector-controls/fill.native.js +1 -1
  466. package/src/components/inspector-controls/slot.js +4 -9
  467. package/src/components/inspector-controls/slot.native.js +1 -1
  468. package/src/components/line-height-control/index.js +7 -2
  469. package/src/components/line-height-control/stories/index.js +1 -1
  470. package/src/components/link-control/test/index.js +42 -0
  471. package/src/components/link-control/use-internal-input-value.js +8 -7
  472. package/src/components/list-view/appender.js +3 -2
  473. package/src/components/list-view/block-contents.js +32 -20
  474. package/src/components/list-view/block-select-button.js +5 -1
  475. package/src/components/list-view/block.js +34 -37
  476. package/src/components/list-view/branch.js +1 -7
  477. package/src/components/list-view/index.js +42 -17
  478. package/src/components/list-view/style.scss +7 -7
  479. package/src/components/list-view/test/use-list-view-drop-zone.js +88 -12
  480. package/src/components/list-view/use-list-view-client-ids.js +21 -4
  481. package/src/components/list-view/use-list-view-drop-zone.js +194 -11
  482. package/src/components/media-placeholder/index.js +74 -1
  483. package/src/components/multi-selection-inspector/index.js +2 -2
  484. package/src/components/preview-options/index.js +9 -2
  485. package/src/components/publish-date-time-picker/index.js +0 -2
  486. package/src/components/spacing-sizes-control/spacing-input-control.js +1 -0
  487. package/src/components/url-input/README.md +6 -0
  488. package/src/components/url-input/index.js +2 -2
  489. package/src/components/use-block-drop-zone/index.js +31 -17
  490. package/src/components/use-resize-canvas/index.js +9 -1
  491. package/src/components/writing-flow/test/index.js +15 -0
  492. package/src/components/writing-flow/use-arrow-nav.js +17 -4
  493. package/src/hooks/align.js +5 -12
  494. package/src/hooks/behaviors.js +104 -0
  495. package/src/hooks/border.js +2 -1
  496. package/src/hooks/color.js +2 -1
  497. package/src/hooks/content-lock-ui.js +3 -15
  498. package/src/hooks/dimensions.js +0 -40
  499. package/src/hooks/duotone.js +4 -11
  500. package/src/hooks/index.js +1 -0
  501. package/src/hooks/index.native.js +1 -0
  502. package/src/hooks/layout.js +14 -20
  503. package/src/hooks/position.js +2 -1
  504. package/src/hooks/style.js +2 -1
  505. package/src/hooks/test/use-editor-wrapper-styles.native.js +282 -0
  506. package/src/hooks/test/use-typography-props.js +47 -2
  507. package/src/hooks/use-editor-wrapper-styles.native.js +250 -0
  508. package/src/hooks/use-editor-wrapper-styles.native.scss +11 -0
  509. package/src/hooks/use-typography-props.js +10 -11
  510. package/src/index.native.js +6 -0
  511. package/src/private-apis.js +2 -4
  512. package/src/store/private-actions.js +39 -0
  513. package/src/store/private-selectors.js +95 -0
  514. package/src/store/reducer.js +27 -0
  515. package/src/store/selectors.js +25 -15
  516. package/src/store/test/private-actions.js +32 -1
  517. package/src/store/test/private-selectors.js +158 -0
  518. package/src/store/test/reducer.js +48 -0
  519. package/src/style.scss +0 -3
  520. package/src/utils/order-inserter-block-items.js +26 -0
  521. package/src/utils/use-should-contextual-toolbar-show.js +19 -9
  522. package/tsconfig.json +1 -0
  523. package/tsconfig.tsbuildinfo +1 -1
  524. package/build/components/block-list/block-list-compact.native.js +0 -75
  525. package/build/components/block-list/block-list-compact.native.js.map +0 -1
  526. package/build/components/off-canvas-editor/appender.js +0 -125
  527. package/build/components/off-canvas-editor/appender.js.map +0 -1
  528. package/build/components/off-canvas-editor/block-contents.js +0 -141
  529. package/build/components/off-canvas-editor/block-contents.js.map +0 -1
  530. package/build/components/off-canvas-editor/block-select-button.js +0 -126
  531. package/build/components/off-canvas-editor/block-select-button.js.map +0 -1
  532. package/build/components/off-canvas-editor/block.js +0 -297
  533. package/build/components/off-canvas-editor/block.js.map +0 -1
  534. package/build/components/off-canvas-editor/branch.js +0 -197
  535. package/build/components/off-canvas-editor/branch.js.map +0 -1
  536. package/build/components/off-canvas-editor/context.js +0 -19
  537. package/build/components/off-canvas-editor/context.js.map +0 -1
  538. package/build/components/off-canvas-editor/drop-indicator.js +0 -118
  539. package/build/components/off-canvas-editor/drop-indicator.js.map +0 -1
  540. package/build/components/off-canvas-editor/expander.js +0 -41
  541. package/build/components/off-canvas-editor/expander.js.map +0 -1
  542. package/build/components/off-canvas-editor/index.js +0 -236
  543. package/build/components/off-canvas-editor/index.js.map +0 -1
  544. package/build/components/off-canvas-editor/leaf-more-menu.js +0 -146
  545. package/build/components/off-canvas-editor/leaf-more-menu.js.map +0 -1
  546. package/build/components/off-canvas-editor/leaf.js +0 -60
  547. package/build/components/off-canvas-editor/leaf.js.map +0 -1
  548. package/build/components/off-canvas-editor/link-ui.js +0 -186
  549. package/build/components/off-canvas-editor/link-ui.js.map +0 -1
  550. package/build/components/off-canvas-editor/update-attributes.js +0 -108
  551. package/build/components/off-canvas-editor/update-attributes.js.map +0 -1
  552. package/build/components/off-canvas-editor/use-block-selection.js +0 -139
  553. package/build/components/off-canvas-editor/use-block-selection.js.map +0 -1
  554. package/build/components/off-canvas-editor/use-inserted-block.js +0 -58
  555. package/build/components/off-canvas-editor/use-inserted-block.js.map +0 -1
  556. package/build/components/off-canvas-editor/use-list-view-client-ids.js +0 -33
  557. package/build/components/off-canvas-editor/use-list-view-client-ids.js.map +0 -1
  558. package/build/components/off-canvas-editor/use-list-view-drop-zone.js +0 -235
  559. package/build/components/off-canvas-editor/use-list-view-drop-zone.js.map +0 -1
  560. package/build/components/off-canvas-editor/use-list-view-expand-selected-item.js +0 -60
  561. package/build/components/off-canvas-editor/use-list-view-expand-selected-item.js.map +0 -1
  562. package/build/components/off-canvas-editor/utils.js +0 -60
  563. package/build/components/off-canvas-editor/utils.js.map +0 -1
  564. package/build-module/components/block-list/block-list-compact.native.js +0 -60
  565. package/build-module/components/block-list/block-list-compact.native.js.map +0 -1
  566. package/build-module/components/off-canvas-editor/appender.js +0 -108
  567. package/build-module/components/off-canvas-editor/appender.js.map +0 -1
  568. package/build-module/components/off-canvas-editor/block-contents.js +0 -121
  569. package/build-module/components/off-canvas-editor/block-contents.js.map +0 -1
  570. package/build-module/components/off-canvas-editor/block-select-button.js +0 -107
  571. package/build-module/components/off-canvas-editor/block-select-button.js.map +0 -1
  572. package/build-module/components/off-canvas-editor/block.js +0 -273
  573. package/build-module/components/off-canvas-editor/block.js.map +0 -1
  574. package/build-module/components/off-canvas-editor/branch.js +0 -179
  575. package/build-module/components/off-canvas-editor/branch.js.map +0 -1
  576. package/build-module/components/off-canvas-editor/context.js +0 -7
  577. package/build-module/components/off-canvas-editor/context.js.map +0 -1
  578. package/build-module/components/off-canvas-editor/drop-indicator.js +0 -111
  579. package/build-module/components/off-canvas-editor/drop-indicator.js.map +0 -1
  580. package/build-module/components/off-canvas-editor/expander.js +0 -32
  581. package/build-module/components/off-canvas-editor/expander.js.map +0 -1
  582. package/build-module/components/off-canvas-editor/index.js +0 -213
  583. package/build-module/components/off-canvas-editor/index.js.map +0 -1
  584. package/build-module/components/off-canvas-editor/leaf-more-menu.js +0 -128
  585. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +0 -1
  586. package/build-module/components/off-canvas-editor/leaf.js +0 -45
  587. package/build-module/components/off-canvas-editor/leaf.js.map +0 -1
  588. package/build-module/components/off-canvas-editor/link-ui.js +0 -166
  589. package/build-module/components/off-canvas-editor/link-ui.js.map +0 -1
  590. package/build-module/components/off-canvas-editor/update-attributes.js +0 -97
  591. package/build-module/components/off-canvas-editor/update-attributes.js.map +0 -1
  592. package/build-module/components/off-canvas-editor/use-block-selection.js +0 -124
  593. package/build-module/components/off-canvas-editor/use-block-selection.js.map +0 -1
  594. package/build-module/components/off-canvas-editor/use-inserted-block.js +0 -47
  595. package/build-module/components/off-canvas-editor/use-inserted-block.js.map +0 -1
  596. package/build-module/components/off-canvas-editor/use-list-view-client-ids.js +0 -24
  597. package/build-module/components/off-canvas-editor/use-list-view-client-ids.js.map +0 -1
  598. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js +0 -220
  599. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js.map +0 -1
  600. package/build-module/components/off-canvas-editor/use-list-view-expand-selected-item.js +0 -50
  601. package/build-module/components/off-canvas-editor/use-list-view-expand-selected-item.js.map +0 -1
  602. package/build-module/components/off-canvas-editor/utils.js +0 -44
  603. package/build-module/components/off-canvas-editor/utils.js.map +0 -1
  604. package/src/components/block-list/block-list-compact.native.js +0 -63
  605. package/src/components/off-canvas-editor/README.md +0 -5
  606. package/src/components/off-canvas-editor/appender.js +0 -124
  607. package/src/components/off-canvas-editor/block-contents.js +0 -156
  608. package/src/components/off-canvas-editor/block-select-button.js +0 -128
  609. package/src/components/off-canvas-editor/block.js +0 -347
  610. package/src/components/off-canvas-editor/branch.js +0 -238
  611. package/src/components/off-canvas-editor/context.js +0 -8
  612. package/src/components/off-canvas-editor/drop-indicator.js +0 -126
  613. package/src/components/off-canvas-editor/expander.js +0 -26
  614. package/src/components/off-canvas-editor/index.js +0 -271
  615. package/src/components/off-canvas-editor/leaf-more-menu.js +0 -157
  616. package/src/components/off-canvas-editor/leaf.js +0 -52
  617. package/src/components/off-canvas-editor/link-ui.js +0 -167
  618. package/src/components/off-canvas-editor/style.scss +0 -34
  619. package/src/components/off-canvas-editor/test/use-inserted-block.js +0 -108
  620. package/src/components/off-canvas-editor/test/utils.js +0 -50
  621. package/src/components/off-canvas-editor/update-attributes.js +0 -99
  622. package/src/components/off-canvas-editor/use-block-selection.js +0 -169
  623. package/src/components/off-canvas-editor/use-inserted-block.js +0 -47
  624. package/src/components/off-canvas-editor/use-list-view-client-ids.js +0 -29
  625. package/src/components/off-canvas-editor/use-list-view-drop-zone.js +0 -260
  626. package/src/components/off-canvas-editor/use-list-view-expand-selected-item.js +0 -58
  627. package/src/components/off-canvas-editor/utils.js +0 -58
@@ -6,13 +6,11 @@ import { View, Platform, TouchableWithoutFeedback } from 'react-native';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { Component } from '@wordpress/element';
10
- import { withDispatch, withSelect } from '@wordpress/data';
11
- import { compose, withPreferredColorScheme } from '@wordpress/compose';
9
+ import { useRef, useState } from '@wordpress/element';
10
+ import { useSelect, useDispatch } from '@wordpress/data';
12
11
  import { createBlock } from '@wordpress/blocks';
13
12
  import {
14
13
  KeyboardAwareFlatList,
15
- ReadableContentView,
16
14
  WIDE_ALIGNMENTS,
17
15
  alignmentHelpers,
18
16
  } from '@wordpress/components';
@@ -27,23 +25,16 @@ import BlockListItem from './block-list-item';
27
25
  import BlockListItemCell from './block-list-item-cell';
28
26
  import {
29
27
  BlockListProvider,
30
- BlockListConsumer,
31
28
  DEFAULT_BLOCK_LIST_CONTEXT,
32
29
  } from './block-list-context';
33
30
  import { BlockDraggableWrapper } from '../block-draggable';
31
+ import { useEditorWrapperStyles } from '../../hooks/use-editor-wrapper-styles';
34
32
  import { store as blockEditorStore } from '../../store';
35
33
 
36
34
  const identity = ( x ) => x;
37
35
 
38
36
  const stylesMemo = {};
39
- const getStyles = (
40
- isRootList,
41
- isStackedHorizontally,
42
- horizontalAlignment
43
- ) => {
44
- if ( isRootList ) {
45
- return;
46
- }
37
+ const getStyles = ( isStackedHorizontally, horizontalAlignment ) => {
47
38
  const styleName = `${ isStackedHorizontally }-${ horizontalAlignment }`;
48
39
  if ( stylesMemo[ styleName ] ) {
49
40
  return stylesMemo[ styleName ];
@@ -57,83 +48,116 @@ const getStyles = (
57
48
  return computedStyles;
58
49
  };
59
50
 
60
- export class BlockList extends Component {
61
- constructor() {
62
- super( ...arguments );
63
- this.extraData = {
64
- parentWidth: this.props.parentWidth,
65
- renderFooterAppender: this.props.renderFooterAppender,
66
- renderAppender: this.props.renderAppender,
67
- onDeleteBlock: this.props.onDeleteBlock,
68
- contentStyle: this.props.contentStyle,
69
- };
70
- this.renderItem = this.renderItem.bind( this );
71
- this.renderBlockListFooter = this.renderBlockListFooter.bind( this );
72
- this.scrollViewInnerRef = this.scrollViewInnerRef.bind( this );
73
- this.addBlockToEndOfPost = this.addBlockToEndOfPost.bind( this );
74
- this.shouldFlatListPreventAutomaticScroll =
75
- this.shouldFlatListPreventAutomaticScroll.bind( this );
76
- this.shouldShowInnerBlockAppender =
77
- this.shouldShowInnerBlockAppender.bind( this );
78
- this.renderEmptyList = this.renderEmptyList.bind( this );
79
- this.getExtraData = this.getExtraData.bind( this );
80
- this.getCellRendererComponent =
81
- this.getCellRendererComponent.bind( this );
82
-
83
- this.onLayout = this.onLayout.bind( this );
84
-
85
- this.state = {
86
- blockWidth: this.props.blockWidth || 0,
87
- };
88
- }
51
+ export default function BlockList( {
52
+ blockWidth: initialBlockWidth,
53
+ contentResizeMode,
54
+ contentStyle,
55
+ filterInnerBlocks,
56
+ gridProperties,
57
+ header,
58
+ horizontal,
59
+ horizontalAlignment,
60
+ marginHorizontal = styles.defaultBlock.marginLeft,
61
+ marginVertical = styles.defaultBlock.marginTop,
62
+ onAddBlock,
63
+ onDeleteBlock,
64
+ orientation,
65
+ parentWidth,
66
+ renderAppender,
67
+ renderFooterAppender,
68
+ rootClientId,
69
+ withFooter = true,
70
+ } ) {
71
+ const {
72
+ blockClientIds,
73
+ blockCount,
74
+ blockInsertionPointIsVisible,
75
+ isReadOnly,
76
+ isRootList,
77
+ isFloatingToolbarVisible,
78
+ isStackedHorizontally,
79
+ maxWidth,
80
+ isRTL,
81
+ } = useSelect(
82
+ ( select ) => {
83
+ const {
84
+ getBlockCount,
85
+ getBlockHierarchyRootClientId,
86
+ getBlockOrder,
87
+ getSelectedBlockClientId,
88
+ isBlockInsertionPointVisible,
89
+ getSettings,
90
+ } = select( blockEditorStore );
89
91
 
90
- addBlockToEndOfPost( newBlock ) {
91
- this.props.insertBlock( newBlock, this.props.blockCount );
92
- }
92
+ const selectedBlockClientId = getSelectedBlockClientId();
93
+ const rootBlockId = getBlockHierarchyRootClientId(
94
+ selectedBlockClientId
95
+ );
93
96
 
94
- scrollViewInnerRef( ref ) {
95
- this.scrollViewRef = ref;
96
- }
97
+ let blockOrder = getBlockOrder( rootClientId );
98
+ // Display only block which fulfill the condition in passed `filterInnerBlocks` function.
99
+ if ( filterInnerBlocks ) {
100
+ blockOrder = filterInnerBlocks( blockOrder );
101
+ }
97
102
 
98
- shouldFlatListPreventAutomaticScroll() {
99
- return this.props.isBlockInsertionPointVisible;
100
- }
103
+ const {
104
+ isRTL: isRTLSetting,
105
+ maxWidth: maxWidthSetting,
106
+ readOnly,
107
+ } = getSettings();
101
108
 
102
- shouldShowInnerBlockAppender() {
103
- const { blockClientIds, renderAppender } = this.props;
104
- return renderAppender && blockClientIds.length > 0;
105
- }
109
+ return {
110
+ blockClientIds: blockOrder,
111
+ blockCount: getBlockCount(),
112
+ blockInsertionPointIsVisible:
113
+ Platform.OS === 'ios' && isBlockInsertionPointVisible(),
114
+ isReadOnly: readOnly,
115
+ isRootList: rootClientId === undefined,
116
+ isFloatingToolbarVisible:
117
+ !! selectedBlockClientId && !! getBlockCount( rootBlockId ),
118
+ isStackedHorizontally: orientation === 'horizontal',
119
+ maxWidth: maxWidthSetting,
120
+ isRTL: isRTLSetting,
121
+ };
122
+ },
123
+ [ filterInnerBlocks, orientation, rootClientId ]
124
+ );
106
125
 
107
- renderEmptyList() {
108
- return (
109
- <EmptyListComponentCompose
110
- rootClientId={ this.props.rootClientId }
111
- renderAppender={ this.props.renderAppender }
112
- renderFooterAppender={ this.props.renderFooterAppender }
113
- />
114
- );
115
- }
126
+ const { insertBlock, clearSelectedBlock } = useDispatch( blockEditorStore );
116
127
 
117
- getExtraData() {
118
- const {
119
- parentWidth,
120
- renderFooterAppender,
121
- onDeleteBlock,
122
- contentStyle,
123
- renderAppender,
124
- gridProperties,
125
- } = this.props;
126
- const { blockWidth } = this.state;
128
+ const extraData = useRef( {
129
+ parentWidth,
130
+ renderFooterAppender,
131
+ renderAppender,
132
+ onDeleteBlock,
133
+ contentStyle,
134
+ } );
135
+
136
+ const [ blockWidth, setBlockWidth ] = useState( initialBlockWidth || 0 );
137
+
138
+ const addBlockToEndOfPost = ( newBlock ) => {
139
+ insertBlock( newBlock, blockCount );
140
+ };
141
+
142
+ const scrollViewRef = useRef( null );
143
+
144
+ const shouldFlatListPreventAutomaticScroll = () =>
145
+ blockInsertionPointIsVisible;
146
+
147
+ const shouldShowInnerBlockAppender = () =>
148
+ renderAppender && blockClientIds.length > 0;
149
+
150
+ const getExtraData = () => {
127
151
  if (
128
- this.extraData.parentWidth !== parentWidth ||
129
- this.extraData.renderFooterAppender !== renderFooterAppender ||
130
- this.extraData.onDeleteBlock !== onDeleteBlock ||
131
- this.extraData.contentStyle !== contentStyle ||
132
- this.extraData.renderAppender !== renderAppender ||
133
- this.extraData.blockWidth !== blockWidth ||
134
- this.extraData.gridProperties !== gridProperties
152
+ extraData.current.parentWidth !== parentWidth ||
153
+ extraData.current.renderFooterAppender !== renderFooterAppender ||
154
+ extraData.current.onDeleteBlock !== onDeleteBlock ||
155
+ extraData.current.contentStyle !== contentStyle ||
156
+ extraData.current.renderAppender !== renderAppender ||
157
+ extraData.current.blockWidth !== blockWidth ||
158
+ extraData.current.gridProperties !== gridProperties
135
159
  ) {
136
- this.extraData = {
160
+ extraData.current = {
137
161
  parentWidth,
138
162
  renderFooterAppender,
139
163
  onDeleteBlock,
@@ -143,184 +167,21 @@ export class BlockList extends Component {
143
167
  gridProperties,
144
168
  };
145
169
  }
146
- return this.extraData;
147
- }
148
-
149
- getCellRendererComponent( { children, item, onLayout } ) {
150
- const { rootClientId } = this.props;
151
- return (
152
- <BlockListItemCell
153
- children={ children }
154
- clientId={ item }
155
- onLayout={ onLayout }
156
- rootClientId={ rootClientId }
157
- />
158
- );
159
- }
170
+ return extraData.current;
171
+ };
160
172
 
161
- onLayout( { nativeEvent } ) {
173
+ const onLayout = ( { nativeEvent } ) => {
162
174
  const { layout } = nativeEvent;
163
- const { blockWidth } = this.state;
164
- const { isRootList, maxWidth } = this.props;
165
175
 
166
176
  const layoutWidth = Math.floor( layout.width );
167
177
  if ( isRootList && blockWidth !== layoutWidth ) {
168
- this.setState( {
169
- blockWidth: Math.min( layoutWidth, maxWidth ),
170
- } );
178
+ setBlockWidth( Math.min( layoutWidth, maxWidth ) );
171
179
  } else if ( ! isRootList && ! blockWidth ) {
172
- this.setState( { blockWidth: Math.min( layoutWidth, maxWidth ) } );
180
+ setBlockWidth( Math.min( layoutWidth, maxWidth ) );
173
181
  }
174
- }
175
-
176
- render() {
177
- const { isRootList, isRTL } = this.props;
178
- // Use of Context to propagate the main scroll ref to its children e.g InnerBlocks.
179
- const blockList = isRootList ? (
180
- <BlockListProvider
181
- value={ {
182
- ...DEFAULT_BLOCK_LIST_CONTEXT,
183
- scrollRef: this.scrollViewRef,
184
- } }
185
- >
186
- <BlockDraggableWrapper isRTL={ isRTL }>
187
- { ( { onScroll } ) => this.renderList( { onScroll } ) }
188
- </BlockDraggableWrapper>
189
- </BlockListProvider>
190
- ) : (
191
- <BlockListConsumer>
192
- { ( { scrollRef } ) =>
193
- this.renderList( {
194
- parentScrollRef: scrollRef,
195
- } )
196
- }
197
- </BlockListConsumer>
198
- );
199
-
200
- return blockList;
201
- }
202
-
203
- renderList( extraProps = {} ) {
204
- const {
205
- clearSelectedBlock,
206
- blockClientIds,
207
- title,
208
- header,
209
- isReadOnly,
210
- isRootList,
211
- horizontal,
212
- marginVertical = styles.defaultBlock.marginTop,
213
- marginHorizontal = styles.defaultBlock.marginLeft,
214
- isFloatingToolbarVisible,
215
- isStackedHorizontally,
216
- horizontalAlignment,
217
- contentResizeMode,
218
- blockWidth,
219
- } = this.props;
220
- const { parentScrollRef, onScroll } = extraProps;
221
-
222
- const { blockToolbar, headerToolbar, floatingToolbar } = styles;
223
-
224
- const containerStyle = {
225
- flex: isRootList ? 1 : 0,
226
- // We set negative margin in the parent to remove the edge spacing between parent block and child block in ineer blocks.
227
- marginVertical: isRootList ? 0 : -marginVertical,
228
- marginHorizontal: isRootList ? 0 : -marginHorizontal,
229
- };
230
-
231
- const isContentStretch = contentResizeMode === 'stretch';
232
- const isMultiBlocks = blockClientIds.length > 1;
233
- const { isWider } = alignmentHelpers;
234
- const extraScrollHeight =
235
- headerToolbar.height +
236
- blockToolbar.height +
237
- ( isFloatingToolbarVisible ? floatingToolbar.height : 0 );
238
-
239
- const scrollViewStyle = [
240
- { flex: isRootList ? 1 : 0 },
241
- ! isRootList && styles.overflowVisible,
242
- ];
243
-
244
- return (
245
- <View
246
- style={ containerStyle }
247
- onAccessibilityEscape={ clearSelectedBlock }
248
- onLayout={ this.onLayout }
249
- testID="block-list-wrapper"
250
- >
251
- <KeyboardAwareFlatList
252
- { ...( Platform.OS === 'android'
253
- ? { removeClippedSubviews: false }
254
- : {} ) } // Disable clipping on Android to fix focus losing. See https://github.com/wordpress-mobile/gutenberg-mobile/pull/741#issuecomment-472746541
255
- accessibilityLabel="block-list"
256
- innerRef={ ( ref ) => {
257
- this.scrollViewInnerRef( parentScrollRef || ref );
258
- } }
259
- extraScrollHeight={ extraScrollHeight }
260
- keyboardShouldPersistTaps="always"
261
- scrollViewStyle={ scrollViewStyle }
262
- extraData={ this.getExtraData() }
263
- scrollEnabled={ isRootList }
264
- contentContainerStyle={ [
265
- horizontal && styles.horizontalContentContainer,
266
- isWider( blockWidth, 'medium' ) &&
267
- ( isContentStretch && isMultiBlocks
268
- ? styles.horizontalContentContainerStretch
269
- : styles.horizontalContentContainerCenter ),
270
- ] }
271
- style={ getStyles(
272
- isRootList,
273
- isStackedHorizontally,
274
- horizontalAlignment
275
- ) }
276
- data={ blockClientIds }
277
- keyExtractor={ identity }
278
- renderItem={ this.renderItem }
279
- CellRendererComponent={ this.getCellRendererComponent }
280
- shouldPreventAutomaticScroll={
281
- this.shouldFlatListPreventAutomaticScroll
282
- }
283
- title={ title }
284
- ListHeaderComponent={ header }
285
- ListEmptyComponent={ ! isReadOnly && this.renderEmptyList }
286
- ListFooterComponent={ this.renderBlockListFooter }
287
- onScroll={ onScroll }
288
- />
289
- { this.shouldShowInnerBlockAppender() && (
290
- <View
291
- style={ {
292
- marginHorizontal:
293
- marginHorizontal -
294
- styles.innerAppender.marginLeft,
295
- } }
296
- >
297
- <BlockListAppender
298
- rootClientId={ this.props.rootClientId }
299
- renderAppender={ this.props.renderAppender }
300
- showSeparator
301
- />
302
- </View>
303
- ) }
304
- </View>
305
- );
306
- }
307
-
308
- renderItem( { item: clientId } ) {
309
- const {
310
- contentResizeMode,
311
- contentStyle,
312
- onAddBlock,
313
- onDeleteBlock,
314
- rootClientId,
315
- isStackedHorizontally,
316
- blockClientIds,
317
- parentWidth,
318
- marginVertical = styles.defaultBlock.marginTop,
319
- marginHorizontal = styles.defaultBlock.marginLeft,
320
- gridProperties,
321
- } = this.props;
322
- const { blockWidth } = this.state;
182
+ };
323
183
 
184
+ const renderItem = ( { item: clientId, index } ) => {
324
185
  // Extracting the grid item properties here to avoid
325
186
  // re-renders in the blockListItem component.
326
187
  const isGridItem = !! gridProperties;
@@ -331,6 +192,7 @@ export class BlockList extends Component {
331
192
  };
332
193
  return (
333
194
  <BlockListItem
195
+ index={ index }
334
196
  isStackedHorizontally={ isStackedHorizontally }
335
197
  rootClientId={ rootClientId }
336
198
  clientId={ clientId }
@@ -341,141 +203,204 @@ export class BlockList extends Component {
341
203
  marginVertical={ marginVertical }
342
204
  marginHorizontal={ marginHorizontal }
343
205
  onDeleteBlock={ onDeleteBlock }
344
- shouldShowInnerBlockAppender={
345
- this.shouldShowInnerBlockAppender
346
- }
206
+ shouldShowInnerBlockAppender={ shouldShowInnerBlockAppender }
347
207
  blockWidth={ blockWidth }
348
208
  isGridItem={ isGridItem }
349
209
  { ...gridItemProps }
350
210
  />
351
211
  );
352
- }
353
-
354
- renderBlockListFooter() {
355
- const paragraphBlock = createBlock( 'core/paragraph' );
356
- const {
357
- isReadOnly,
358
- withFooter = true,
359
- renderFooterAppender,
360
- } = this.props;
361
-
362
- if ( ! isReadOnly && withFooter ) {
363
- return (
212
+ };
213
+
214
+ const { blockToolbar, headerToolbar, floatingToolbar } = styles;
215
+
216
+ const containerStyle = {
217
+ flex: isRootList ? 1 : 0,
218
+ // We set negative margin in the parent to remove the edge spacing between parent block and child block in ineer blocks.
219
+ marginVertical: isRootList ? 0 : -marginVertical,
220
+ marginHorizontal: isRootList ? 0 : -marginHorizontal,
221
+ };
222
+
223
+ const isContentStretch = contentResizeMode === 'stretch';
224
+ const isMultiBlocks = blockClientIds.length > 1;
225
+ const { isWider } = alignmentHelpers;
226
+ const extraScrollHeight =
227
+ headerToolbar.height +
228
+ blockToolbar.height +
229
+ ( isFloatingToolbarVisible ? floatingToolbar.height : 0 );
230
+
231
+ return (
232
+ <View
233
+ style={ containerStyle }
234
+ onAccessibilityEscape={ clearSelectedBlock }
235
+ onLayout={ onLayout }
236
+ testID="block-list-wrapper"
237
+ >
238
+ { isRootList ? (
239
+ <BlockListProvider
240
+ value={ {
241
+ ...DEFAULT_BLOCK_LIST_CONTEXT,
242
+ scrollRef: scrollViewRef.current,
243
+ } }
244
+ >
245
+ <BlockDraggableWrapper isRTL={ isRTL }>
246
+ { ( { onScroll } ) => (
247
+ <KeyboardAwareFlatList
248
+ { ...( Platform.OS === 'android'
249
+ ? { removeClippedSubviews: false }
250
+ : {} ) } // Disable clipping on Android to fix focus losing. See https://github.com/wordpress-mobile/gutenberg-mobile/pull/741#issuecomment-472746541
251
+ accessibilityLabel="block-list"
252
+ innerRef={ ( ref ) => {
253
+ scrollViewRef.current = ref;
254
+ } }
255
+ extraScrollHeight={ extraScrollHeight }
256
+ keyboardShouldPersistTaps="always"
257
+ scrollViewStyle={ { flex: 1 } }
258
+ extraData={ getExtraData() }
259
+ scrollEnabled={ isRootList }
260
+ contentContainerStyle={ [
261
+ horizontal &&
262
+ styles.horizontalContentContainer,
263
+ isWider( blockWidth, 'medium' ) &&
264
+ ( isContentStretch && isMultiBlocks
265
+ ? styles.horizontalContentContainerStretch
266
+ : styles.horizontalContentContainerCenter ),
267
+ ] }
268
+ data={ blockClientIds }
269
+ keyExtractor={ identity }
270
+ renderItem={ renderItem }
271
+ CellRendererComponent={ BlockListItemCell }
272
+ shouldPreventAutomaticScroll={
273
+ shouldFlatListPreventAutomaticScroll
274
+ }
275
+ ListHeaderComponent={ header }
276
+ ListEmptyComponent={
277
+ ! isReadOnly && (
278
+ <EmptyList
279
+ orientation={ orientation }
280
+ rootClientId={ rootClientId }
281
+ renderAppender={ renderAppender }
282
+ renderFooterAppender={
283
+ renderFooterAppender
284
+ }
285
+ />
286
+ )
287
+ }
288
+ ListFooterComponent={
289
+ <Footer
290
+ addBlockToEndOfPost={
291
+ addBlockToEndOfPost
292
+ }
293
+ isReadOnly={ isReadOnly }
294
+ renderFooterAppender={
295
+ renderFooterAppender
296
+ }
297
+ withFooter={ withFooter }
298
+ />
299
+ }
300
+ onScroll={ onScroll }
301
+ />
302
+ ) }
303
+ </BlockDraggableWrapper>
304
+ </BlockListProvider>
305
+ ) : (
364
306
  <>
365
- <TouchableWithoutFeedback
366
- accessibilityLabel={ __( 'Add paragraph block' ) }
367
- testID={ __( 'Add paragraph block' ) }
368
- onPress={ () => {
369
- this.addBlockToEndOfPost( paragraphBlock );
370
- } }
371
- >
372
- <View style={ styles.blockListFooter } />
373
- </TouchableWithoutFeedback>
307
+ { blockClientIds.length > 0 ? (
308
+ <View style={ [ { flex: 0 }, styles.overflowVisible ] }>
309
+ <View
310
+ style={ [
311
+ ...getStyles(
312
+ isStackedHorizontally,
313
+ horizontalAlignment
314
+ ),
315
+ horizontal &&
316
+ styles.horizontalContentContainer,
317
+ ] }
318
+ >
319
+ { blockClientIds.map(
320
+ ( currentClientId, index ) => {
321
+ return (
322
+ <View key={ currentClientId }>
323
+ { renderItem( {
324
+ item: currentClientId,
325
+ index,
326
+ } ) }
327
+ </View>
328
+ );
329
+ }
330
+ ) }
331
+ <Footer
332
+ addBlockToEndOfPost={ addBlockToEndOfPost }
333
+ isReadOnly={ isReadOnly }
334
+ renderFooterAppender={
335
+ renderFooterAppender
336
+ }
337
+ withFooter={ withFooter }
338
+ />
339
+ </View>
340
+ </View>
341
+ ) : (
342
+ <EmptyList
343
+ orientation={ orientation }
344
+ rootClientId={ rootClientId }
345
+ renderAppender={ renderAppender }
346
+ renderFooterAppender={ renderFooterAppender }
347
+ />
348
+ ) }
374
349
  </>
375
- );
376
- } else if ( renderFooterAppender ) {
377
- return renderFooterAppender();
378
- }
379
- return null;
380
- }
381
- }
382
-
383
- export default compose( [
384
- withSelect(
385
- ( select, { rootClientId, orientation, filterInnerBlocks } ) => {
386
- const {
387
- getBlockCount,
388
- getBlockHierarchyRootClientId,
389
- getBlockOrder,
390
- getSelectedBlockClientId,
391
- isBlockInsertionPointVisible,
392
- getSettings,
393
- } = select( blockEditorStore );
394
-
395
- const isStackedHorizontally = orientation === 'horizontal';
396
-
397
- const selectedBlockClientId = getSelectedBlockClientId();
398
-
399
- let blockClientIds = getBlockOrder( rootClientId );
400
- // Display only block which fulfill the condition in passed `filterInnerBlocks` function.
401
- if ( filterInnerBlocks ) {
402
- blockClientIds = filterInnerBlocks( blockClientIds );
403
- }
404
-
405
- const { maxWidth } = getSettings();
406
- const isReadOnly = getSettings().readOnly;
407
-
408
- const blockCount = getBlockCount();
409
- const rootBlockId = getBlockHierarchyRootClientId(
410
- selectedBlockClientId
411
- );
412
-
413
- const isFloatingToolbarVisible =
414
- !! selectedBlockClientId && !! getBlockCount( rootBlockId );
415
- const isRTL = getSettings().isRTL;
416
-
417
- return {
418
- blockClientIds,
419
- blockCount,
420
- isBlockInsertionPointVisible:
421
- Platform.OS === 'ios' && isBlockInsertionPointVisible(),
422
- isReadOnly,
423
- isRootList: rootClientId === undefined,
424
- isFloatingToolbarVisible,
425
- isStackedHorizontally,
426
- maxWidth,
427
- isRTL,
428
- };
429
- }
430
- ),
431
- withDispatch( ( dispatch ) => {
432
- const { insertBlock, replaceBlock, clearSelectedBlock } =
433
- dispatch( blockEditorStore );
434
-
435
- return {
436
- clearSelectedBlock,
437
- insertBlock,
438
- replaceBlock,
439
- };
440
- } ),
441
- withPreferredColorScheme,
442
- ] )( BlockList );
443
-
444
- class EmptyListComponent extends Component {
445
- render() {
446
- const {
447
- shouldShowInsertionPoint,
448
- rootClientId,
449
- renderAppender,
450
- renderFooterAppender,
451
- } = this.props;
452
-
453
- if ( renderFooterAppender || renderAppender === false ) {
454
- return null;
455
- }
456
-
457
- return (
458
- <View style={ styles.defaultAppender }>
459
- <ReadableContentView
460
- align={
461
- renderAppender
462
- ? WIDE_ALIGNMENTS.alignments.full
463
- : undefined
464
- }
350
+ ) }
351
+ { shouldShowInnerBlockAppender() && (
352
+ <View
353
+ style={ {
354
+ marginHorizontal:
355
+ marginHorizontal - styles.innerAppender.marginLeft,
356
+ } }
465
357
  >
466
358
  <BlockListAppender
467
359
  rootClientId={ rootClientId }
468
360
  renderAppender={ renderAppender }
469
- showSeparator={ shouldShowInsertionPoint }
361
+ showSeparator
470
362
  />
471
- </ReadableContentView>
472
- </View>
363
+ </View>
364
+ ) }
365
+ </View>
366
+ );
367
+ }
368
+
369
+ function Footer( {
370
+ addBlockToEndOfPost,
371
+ isReadOnly,
372
+ renderFooterAppender,
373
+ withFooter,
374
+ } ) {
375
+ if ( ! isReadOnly && withFooter ) {
376
+ return (
377
+ <>
378
+ <TouchableWithoutFeedback
379
+ accessibilityLabel={ __( 'Add paragraph block' ) }
380
+ testID={ __( 'Add paragraph block' ) }
381
+ onPress={ () => {
382
+ const paragraphBlock = createBlock( 'core/paragraph' );
383
+ addBlockToEndOfPost( paragraphBlock );
384
+ } }
385
+ >
386
+ <View style={ styles.blockListFooter } />
387
+ </TouchableWithoutFeedback>
388
+ </>
473
389
  );
390
+ } else if ( renderFooterAppender ) {
391
+ return <View>{ renderFooterAppender() }</View>;
474
392
  }
393
+
394
+ return null;
475
395
  }
476
396
 
477
- const EmptyListComponentCompose = compose( [
478
- withSelect( ( select, { rootClientId, orientation } ) => {
397
+ function EmptyList( {
398
+ orientation,
399
+ renderAppender,
400
+ renderFooterAppender,
401
+ rootClientId,
402
+ } ) {
403
+ const { shouldShowInsertionPoint } = useSelect( ( select ) => {
479
404
  const {
480
405
  getBlockOrder,
481
406
  getBlockInsertionPoint,
@@ -486,17 +411,34 @@ const EmptyListComponentCompose = compose( [
486
411
  const blockClientIds = getBlockOrder( rootClientId );
487
412
  const insertionPoint = getBlockInsertionPoint();
488
413
  const blockInsertionPointIsVisible = isBlockInsertionPointVisible();
489
- const shouldShowInsertionPoint =
490
- ! isStackedHorizontally &&
491
- blockInsertionPointIsVisible &&
492
- insertionPoint.rootClientId === rootClientId &&
493
- // If list is empty, show the insertion point (via the default appender)
494
- ( blockClientIds.length === 0 ||
495
- // Or if the insertion point is right before the denoted block.
496
- ! blockClientIds[ insertionPoint.index ] );
497
414
 
498
415
  return {
499
- shouldShowInsertionPoint,
416
+ shouldShowInsertionPoint:
417
+ ! isStackedHorizontally &&
418
+ blockInsertionPointIsVisible &&
419
+ insertionPoint.rootClientId === rootClientId &&
420
+ // If list is empty, show the insertion point (via the default appender)
421
+ ( blockClientIds.length === 0 ||
422
+ // Or if the insertion point is right before the denoted block.
423
+ ! blockClientIds[ insertionPoint.index ] ),
500
424
  };
501
- } ),
502
- ] )( EmptyListComponent );
425
+ } );
426
+ const align = renderAppender ? WIDE_ALIGNMENTS.alignments.full : undefined;
427
+ const [ wrapperStyles ] = useEditorWrapperStyles( { align } );
428
+
429
+ if ( renderFooterAppender || renderAppender === false ) {
430
+ return null;
431
+ }
432
+
433
+ const containerStyles = [ styles.defaultAppender, wrapperStyles ];
434
+
435
+ return (
436
+ <View style={ containerStyles }>
437
+ <BlockListAppender
438
+ rootClientId={ rootClientId }
439
+ renderAppender={ renderAppender }
440
+ showSeparator={ shouldShowInsertionPoint }
441
+ />
442
+ </View>
443
+ );
444
+ }