@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
@@ -9,34 +9,34 @@ exports.default = void 0;
9
9
 
10
10
  var _element = require("@wordpress/element");
11
11
 
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
12
  var _reactNative = require("react-native");
15
13
 
16
14
  var _components = require("@wordpress/components");
17
15
 
18
- var _data = require("@wordpress/data");
19
-
20
- var _compose = require("@wordpress/compose");
21
-
22
16
  var _blocks = require("@wordpress/blocks");
23
17
 
24
- var _blockEditor = require("@wordpress/block-editor");
18
+ var _data = require("@wordpress/data");
25
19
 
26
- var _block = _interopRequireDefault(require("./block.scss"));
20
+ var _compose = require("@wordpress/compose");
27
21
 
28
22
  var _blockEdit = _interopRequireDefault(require("../block-edit"));
29
23
 
24
+ var _blockDraggable = _interopRequireDefault(require("../block-draggable"));
25
+
30
26
  var _blockInvalidWarning = _interopRequireDefault(require("./block-invalid-warning"));
31
27
 
32
28
  var _blockMobileToolbar = _interopRequireDefault(require("../block-mobile-toolbar"));
33
29
 
34
- var _store = require("../../store");
30
+ var _blockOutline = _interopRequireDefault(require("./block-outline"));
35
31
 
36
- var _blockDraggable = _interopRequireDefault(require("../block-draggable"));
32
+ var _block = _interopRequireDefault(require("./block.scss"));
33
+
34
+ var _store = require("../../store");
37
35
 
38
36
  var _layout = require("./layout");
39
37
 
38
+ var _useSetting = _interopRequireDefault(require("../use-setting"));
39
+
40
40
  /**
41
41
  * External dependencies
42
42
  */
@@ -48,331 +48,371 @@ var _layout = require("./layout");
48
48
  /**
49
49
  * Internal dependencies
50
50
  */
51
- const emptyArray = [];
51
+ const emptyArray = []; // Helper function to memoize the wrapperProps since getEditWrapperProps always returns a new reference.
52
+
53
+ const wrapperPropsCache = new WeakMap();
54
+ const emptyObj = {};
55
+
56
+ function getWrapperProps(value, getWrapperPropsFunction) {
57
+ if (!getWrapperPropsFunction) {
58
+ return emptyObj;
59
+ }
60
+
61
+ const cachedValue = wrapperPropsCache.get(value);
62
+
63
+ if (!cachedValue) {
64
+ const wrapperProps = getWrapperPropsFunction(value);
65
+ wrapperPropsCache.set(value, wrapperProps);
66
+ return wrapperProps;
67
+ }
52
68
 
53
- function BlockForType(_ref) {
69
+ return cachedValue;
70
+ }
71
+
72
+ function BlockWrapper(_ref) {
54
73
  let {
55
- attributes,
74
+ accessibilityLabel,
75
+ align,
76
+ blockWidth,
77
+ children,
56
78
  clientId,
57
- contentStyle,
58
- getBlockWidth,
59
- insertBlocksAfter,
79
+ draggingClientId,
80
+ draggingEnabled,
81
+ isDescendentBlockSelected,
82
+ isParentSelected,
60
83
  isSelected,
61
- onMerge,
62
- name,
63
- onBlockFocus,
64
- onChange,
84
+ isStackedHorizontally,
85
+ isTouchable,
86
+ marginHorizontal,
87
+ marginVertical,
65
88
  onDeleteBlock,
66
- onReplace,
67
- parentWidth,
68
- parentBlockAlignment,
69
- wrapperProps,
70
- blockWidth,
71
- baseGlobalStyles
89
+ onFocus
72
90
  } = _ref;
73
- const defaultColors = (0, _components.useMobileGlobalStylesColors)();
74
- const fontSizes = (0, _blockEditor.useSetting)('typography.fontSizes') || emptyArray;
75
- const globalStyle = (0, _components.useGlobalStyles)();
76
- const mergedStyle = (0, _element.useMemo)(() => {
77
- return (0, _components.getMergedGlobalStyles)(baseGlobalStyles, globalStyle, wrapperProps.style, attributes, defaultColors, name, fontSizes);
78
- }, [defaultColors, globalStyle, // I couldn't simply use attributes and wrapperProps.styles as a dependency because they are almost always a new reference.
79
- // Thanks to the JSON.stringify we check if the value is the same instead of reference.
80
- JSON.stringify(wrapperProps.style), JSON.stringify(Object.fromEntries(Object.entries(attributes !== null && attributes !== void 0 ? attributes : {}).filter(_ref2 => {
81
- let [key] = _ref2;
82
- return _components.GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES.includes(key);
83
- })))]);
84
- const parentLayout = (0, _layout.useLayout)();
85
- return (0, _element.createElement)(_components.GlobalStylesContext.Provider, {
86
- value: mergedStyle
87
- }, (0, _element.createElement)(_blockEdit.default, {
88
- name: name,
91
+ const {
92
+ width: screenWidth
93
+ } = (0, _reactNative.useWindowDimensions)();
94
+ const anchorNodeRef = (0, _element.useRef)();
95
+ const {
96
+ isFullWidth
97
+ } = _components.alignmentHelpers;
98
+ const isScreenWidthEqual = blockWidth === screenWidth;
99
+ const isFullWidthToolbar = isFullWidth(align) || isScreenWidthEqual;
100
+ const blockWrapperStyles = {
101
+ flex: 1
102
+ };
103
+ const blockWrapperStyle = [blockWrapperStyles, {
104
+ marginVertical,
105
+ marginHorizontal
106
+ }];
107
+ const accessible = !(isSelected || isDescendentBlockSelected);
108
+ return (0, _element.createElement)(_reactNative.Pressable, {
109
+ accessibilityLabel: accessibilityLabel,
110
+ accessibilityRole: "button",
111
+ accessible: accessible,
112
+ disabled: !isTouchable,
113
+ onPress: onFocus,
114
+ style: blockWrapperStyle
115
+ }, (0, _element.createElement)(_blockOutline.default, {
89
116
  isSelected: isSelected,
90
- attributes: attributes,
91
- setAttributes: onChange,
92
- onFocus: onBlockFocus,
93
- onReplace: onReplace,
94
- insertBlocksAfter: insertBlocksAfter,
95
- mergeBlocks: onMerge // Block level styles.
96
- ,
97
- wrapperProps: wrapperProps // Inherited styles merged with block level styles.
98
- ,
99
- style: mergedStyle,
117
+ isParentSelected: isParentSelected,
118
+ screenWidth: screenWidth
119
+ }), (0, _element.createElement)(_blockDraggable.default, {
100
120
  clientId: clientId,
101
- parentWidth: parentWidth,
102
- contentStyle: contentStyle,
103
- onDeleteBlock: onDeleteBlock,
121
+ draggingClientId: draggingClientId,
122
+ enabled: draggingEnabled,
123
+ testID: "draggable-trigger-content"
124
+ }, children), (0, _element.createElement)(_reactNative.View, {
125
+ style: _block.default.neutralToolbar,
126
+ ref: anchorNodeRef
127
+ }, isSelected && (0, _element.createElement)(_blockMobileToolbar.default, {
128
+ anchorNodeRef: anchorNodeRef.current,
104
129
  blockWidth: blockWidth,
105
- parentBlockAlignment: parentBlockAlignment,
106
- __unstableParentLayout: parentLayout
107
- }), (0, _element.createElement)(_reactNative.View, {
108
- onLayout: getBlockWidth
109
- }));
130
+ clientId: clientId,
131
+ draggingClientId: draggingClientId,
132
+ isFullWidth: isFullWidthToolbar,
133
+ isStackedHorizontally: isStackedHorizontally,
134
+ onDelete: onDeleteBlock
135
+ })));
110
136
  }
111
137
 
112
- class BlockListBlock extends _element.Component {
113
- constructor() {
114
- super(...arguments);
115
- this.insertBlocksAfter = this.insertBlocksAfter.bind(this);
116
- this.onFocus = this.onFocus.bind(this);
117
- this.getBlockWidth = this.getBlockWidth.bind(this);
118
- this.state = {
119
- blockWidth: this.props.blockWidth - 2 * this.props.marginHorizontal
120
- };
121
- this.anchorNodeRef = (0, _element.createRef)();
122
- }
138
+ function BlockListBlock(_ref2) {
139
+ let {
140
+ attributes,
141
+ blockWidth: blockWrapperWidth,
142
+ canRemove,
143
+ clientId,
144
+ contentStyle,
145
+ isLocked,
146
+ isSelected,
147
+ isSelectionEnabled,
148
+ isStackedHorizontally,
149
+ isValid,
150
+ marginHorizontal,
151
+ marginVertical,
152
+ name,
153
+ onDeleteBlock,
154
+ onInsertBlocksAfter,
155
+ onMerge,
156
+ onReplace,
157
+ parentBlockAlignment,
158
+ parentWidth,
159
+ rootClientId,
160
+ setAttributes,
161
+ toggleSelection
162
+ } = _ref2;
163
+ const {
164
+ baseGlobalStyles,
165
+ blockType,
166
+ draggingClientId,
167
+ draggingEnabled,
168
+ firstToSelectId,
169
+ isDescendantOfParentSelected,
170
+ isDescendentBlockSelected,
171
+ isParentSelected,
172
+ order
173
+ } = (0, _data.useSelect)(select => {
174
+ var _getSettings;
123
175
 
124
- onFocus() {
125
176
  const {
126
- firstToSelectId,
127
- isSelected,
128
- onSelect
129
- } = this.props;
177
+ getBlockCount,
178
+ getBlockHierarchyRootClientId,
179
+ getBlockIndex,
180
+ getBlockParents,
181
+ getLowestCommonAncestorWithSelectedBlock,
182
+ getSelectedBlockClientId,
183
+ getSettings,
184
+ hasSelectedInnerBlock
185
+ } = select(_store.store);
186
+ const currentBlockType = (0, _blocks.getBlockType)(name || 'core/missing');
187
+ const blockOrder = getBlockIndex(clientId);
188
+ const descendentBlockSelected = hasSelectedInnerBlock(clientId, true);
189
+ const selectedBlockClientId = getSelectedBlockClientId();
190
+ const parents = getBlockParents(clientId, true);
191
+ const parentSelected = // Set false as a default value to prevent re-render when it's changed from null to false.
192
+ (selectedBlockClientId || false) && selectedBlockClientId === rootClientId;
193
+ const selectedParents = clientId ? parents : [];
194
+ const descendantOfParentSelected = selectedParents.includes(rootClientId);
195
+ const hasInnerBlocks = getBlockCount(clientId) > 0;
196
+ const commonAncestor = getLowestCommonAncestorWithSelectedBlock(clientId);
197
+ const commonAncestorIndex = parents.indexOf(commonAncestor) - 1;
198
+ const firstBlockToSelectId = commonAncestor ? parents[commonAncestorIndex] : parents[parents.length - 1]; // For blocks with inner blocks, we only enable the dragging in the nested
199
+ // blocks if any of them are selected. This way we prevent the long-press
200
+ // gesture from being disabled for elements within the block UI.
201
+
202
+ const isDraggingEnabled = !hasInnerBlocks || isSelected || !descendentBlockSelected; // Dragging nested blocks is not supported yet. For this reason, the block to be dragged
203
+ // will be the top in the hierarchy.
204
+
205
+ const currentDraggingClientId = getBlockHierarchyRootClientId(clientId);
206
+ const globalStylesBaseStyles = (_getSettings = getSettings()) === null || _getSettings === void 0 ? void 0 : _getSettings.__experimentalGlobalStylesBaseStyles;
207
+ return {
208
+ baseGlobalStyles: globalStylesBaseStyles,
209
+ blockType: currentBlockType,
210
+ draggingClientId: currentDraggingClientId,
211
+ draggingEnabled: isDraggingEnabled,
212
+ firstToSelectId: firstBlockToSelectId,
213
+ isDescendantOfParentSelected: descendantOfParentSelected,
214
+ isDescendentBlockSelected: descendentBlockSelected,
215
+ isParentSelected: parentSelected,
216
+ order: blockOrder
217
+ };
218
+ }, [clientId, isSelected, name, rootClientId]);
219
+ const {
220
+ removeBlock,
221
+ selectBlock
222
+ } = (0, _data.useDispatch)(_store.store);
223
+ const initialBlockWidth = blockWrapperWidth - 2 * marginHorizontal;
224
+ const [blockWidth, setBlockWidth] = (0, _element.useState)(initialBlockWidth);
225
+ const parentLayout = (0, _layout.useLayout)() || {};
226
+ const defaultColors = (0, _components.useMobileGlobalStylesColors)();
227
+ const globalStyle = (0, _components.useGlobalStyles)();
228
+ const fontSizes = (0, _useSetting.default)('typography.fontSizes') || emptyArray;
229
+ const onRemove = (0, _element.useCallback)(() => removeBlock(clientId), [clientId, removeBlock]);
230
+ const onFocus = (0, _element.useCallback)(() => {
231
+ const blockId = firstToSelectId !== null && firstToSelectId !== void 0 ? firstToSelectId : clientId;
130
232
 
131
233
  if (!isSelected) {
132
- onSelect(firstToSelectId);
133
- }
134
- }
135
-
136
- insertBlocksAfter(blocks) {
137
- this.props.onInsertBlocks(blocks, this.props.order + 1);
138
-
139
- if (blocks[0]) {
140
- // Focus on the first block inserted.
141
- this.props.onSelect(blocks[0].clientId);
234
+ selectBlock(blockId);
142
235
  }
143
- }
144
-
145
- getBlockWidth(_ref3) {
236
+ }, [selectBlock, clientId, firstToSelectId, isSelected]);
237
+ const onLayout = (0, _element.useCallback)(_ref3 => {
146
238
  let {
147
239
  nativeEvent
148
240
  } = _ref3;
149
- const {
150
- layout
151
- } = nativeEvent;
152
- const {
153
- blockWidth
154
- } = this.state;
155
- const layoutWidth = Math.floor(layout.width);
241
+ const layoutWidth = Math.floor(nativeEvent.layout.width);
156
242
 
157
243
  if (!blockWidth || !layoutWidth) {
158
244
  return;
159
245
  }
160
246
 
161
247
  if (blockWidth !== layoutWidth) {
162
- this.setState({
163
- blockWidth: layoutWidth
164
- });
248
+ setBlockWidth(layoutWidth);
165
249
  }
166
- }
167
-
168
- getBlockForType() {
169
- const {
170
- blockWidth
171
- } = this.state;
172
- return (0, _element.createElement)(BlockForType, (0, _extends2.default)({}, this.props, {
173
- onBlockFocus: this.onFocus,
174
- insertBlocksAfter: this.insertBlocksAfter,
175
- getBlockWidth: this.getBlockWidth,
176
- blockWidth: blockWidth
177
- }));
178
- }
179
-
180
- renderBlockTitle() {
181
- return (0, _element.createElement)(_reactNative.View, {
182
- style: _block.default.blockTitle
183
- }, (0, _element.createElement)(_reactNative.Text, null, "BlockType: ", this.props.name));
184
- }
185
-
186
- render() {
187
- const {
188
- attributes,
189
- blockType,
190
- clientId,
191
- icon,
192
- isSelected,
193
- isValid,
194
- order,
195
- title,
196
- isDimmed,
197
- isTouchable,
198
- onDeleteBlock,
199
- isStackedHorizontally,
200
- isParentSelected,
201
- getStylesFromColorScheme,
202
- marginVertical,
203
- marginHorizontal,
204
- isInnerBlockSelected,
205
- name,
206
- draggingEnabled,
207
- draggingClientId
208
- } = this.props;
209
-
210
- if (!attributes || !blockType) {
211
- return null;
212
- }
213
-
214
- const {
215
- blockWidth
216
- } = this.state;
217
- const {
218
- align
219
- } = attributes;
220
- const accessibilityLabel = (0, _blocks.__experimentalGetAccessibleBlockLabel)(blockType, attributes, order + 1);
221
- const {
222
- isFullWidth,
223
- isContainerRelated
224
- } = _components.alignmentHelpers;
225
- const accessible = !(isSelected || isInnerBlockSelected);
226
- const screenWidth = Math.floor(_reactNative.Dimensions.get('window').width);
227
- const isScreenWidthEqual = blockWidth === screenWidth;
228
- const isScreenWidthWider = blockWidth < screenWidth;
229
- const isFullWidthToolbar = isFullWidth(align) || isScreenWidthEqual;
230
- return (0, _element.createElement)(_reactNative.TouchableWithoutFeedback, {
231
- onPress: this.onFocus,
232
- accessible: accessible,
233
- accessibilityRole: 'button'
234
- }, (0, _element.createElement)(_reactNative.View, {
235
- style: {
236
- flex: 1
237
- },
238
- accessibilityLabel: accessibilityLabel
239
- }, (0, _element.createElement)(_reactNative.View, {
240
- pointerEvents: isTouchable ? 'auto' : 'box-only',
241
- accessibilityLabel: accessibilityLabel,
242
- style: [{
243
- marginVertical,
244
- marginHorizontal,
245
- flex: 1
246
- }, isDimmed && _block.default.dimmed]
247
- }, isSelected && (0, _element.createElement)(_reactNative.View, {
248
- pointerEvents: "box-none",
249
- style: [_block.default.solidBorder, isFullWidth(align) && isScreenWidthWider && _block.default.borderFullWidth, isFullWidth(align) && isContainerRelated(name) && isScreenWidthWider && _block.default.containerBorderFullWidth, getStylesFromColorScheme(_block.default.solidBorderColor, _block.default.solidBorderColorDark)]
250
- }), isParentSelected && (0, _element.createElement)(_reactNative.View, {
251
- style: [_block.default.dashedBorder, getStylesFromColorScheme(_block.default.dashedBorderColor, _block.default.dashedBorderColorDark)]
252
- }), (0, _element.createElement)(_blockDraggable.default, {
253
- clientId: clientId,
254
- draggingClientId: draggingClientId,
255
- enabled: draggingEnabled,
256
- testID: "draggable-trigger-content"
257
- }, () => isValid ? this.getBlockForType() : (0, _element.createElement)(_blockInvalidWarning.default, {
258
- blockTitle: title,
259
- icon: icon,
260
- clientId: clientId
261
- })), (0, _element.createElement)(_reactNative.View, {
262
- style: _block.default.neutralToolbar,
263
- ref: this.anchorNodeRef
264
- }, isSelected && (0, _element.createElement)(_blockMobileToolbar.default, {
265
- clientId: clientId,
266
- onDelete: onDeleteBlock,
267
- isStackedHorizontally: isStackedHorizontally,
268
- blockWidth: blockWidth,
269
- anchorNodeRef: this.anchorNodeRef.current,
270
- isFullWidth: isFullWidthToolbar,
271
- draggingClientId: draggingClientId
272
- })))));
273
- }
274
-
275
- } // Helper function to memoize the wrapperProps since getEditWrapperProps always returns a new reference.
276
-
277
-
278
- const wrapperPropsCache = new WeakMap();
279
- const emptyObj = {};
280
-
281
- function getWrapperProps(value, getWrapperPropsFunction) {
282
- if (!getWrapperPropsFunction) {
283
- return emptyObj;
284
- }
285
-
286
- const cachedValue = wrapperPropsCache.get(value);
250
+ }, [blockWidth, setBlockWidth]); // Block level styles.
287
251
 
288
- if (!cachedValue) {
289
- const wrapperProps = getWrapperPropsFunction(value);
290
- wrapperPropsCache.set(value, wrapperProps);
291
- return wrapperProps;
292
- }
252
+ const wrapperProps = getWrapperProps(attributes, blockType.getEditWrapperProps); // Inherited styles merged with block level styles.
293
253
 
294
- return cachedValue;
254
+ const mergedStyle = (0, _element.useMemo)(() => {
255
+ return (0, _components.getMergedGlobalStyles)(baseGlobalStyles, globalStyle, wrapperProps.style, attributes, defaultColors, name, fontSizes); // eslint-disable-next-line react-hooks/exhaustive-deps
256
+ }, [// It is crucial to keep the dependencies array minimal to prevent unnecessary calls that could negatively impact performance.
257
+ // JSON.stringify is used for the following purposes:
258
+ // 1. To create a single, comparable value from the globalStyle, wrapperProps.style, and attributes objects. This allows useMemo to
259
+ // efficiently determine if a change has occurred in any of these objects.
260
+ // 2. To filter the attributes object, ensuring that only the relevant attributes (included in
261
+ // GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES) are considered as dependencies. This reduces the likelihood of
262
+ // unnecessary useMemo calls when other, unrelated attributes change.
263
+ // eslint-disable-next-line react-hooks/exhaustive-deps
264
+ JSON.stringify(globalStyle), // eslint-disable-next-line react-hooks/exhaustive-deps
265
+ JSON.stringify(wrapperProps.style), // eslint-disable-next-line react-hooks/exhaustive-deps
266
+ JSON.stringify(Object.fromEntries(Object.entries(attributes !== null && attributes !== void 0 ? attributes : {}).filter(_ref4 => {
267
+ let [key] = _ref4;
268
+ return _components.GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES.includes(key);
269
+ })))]);
270
+ const {
271
+ align
272
+ } = attributes;
273
+ const isFocused = isSelected || isDescendentBlockSelected;
274
+ const isTouchable = isSelected || isDescendantOfParentSelected || isParentSelected || !rootClientId;
275
+ const accessibilityLabel = (0, _blocks.__experimentalGetAccessibleBlockLabel)(blockType, attributes, order + 1);
276
+ return (0, _element.createElement)(BlockWrapper, {
277
+ accessibilityLabel: accessibilityLabel,
278
+ align: align,
279
+ blockWidth: blockWidth,
280
+ clientId: clientId,
281
+ draggingClientId: draggingClientId,
282
+ draggingEnabled: draggingEnabled,
283
+ isFocused: isFocused,
284
+ isDescendentBlockSelected: isDescendentBlockSelected,
285
+ isParentSelected: isParentSelected,
286
+ isSelected: isSelected,
287
+ isStackedHorizontally: isStackedHorizontally,
288
+ isTouchable: isTouchable,
289
+ marginHorizontal: marginHorizontal,
290
+ marginVertical: marginVertical,
291
+ onDeleteBlock: onDeleteBlock,
292
+ onFocus: onFocus
293
+ }, () => !isValid ? (0, _element.createElement)(_blockInvalidWarning.default, {
294
+ clientId: clientId
295
+ }) : (0, _element.createElement)(_components.GlobalStylesContext.Provider, {
296
+ value: mergedStyle
297
+ }, (0, _element.createElement)(_blockEdit.default, {
298
+ attributes: attributes,
299
+ blockWidth: blockWidth,
300
+ clientId: clientId,
301
+ contentStyle: contentStyle,
302
+ insertBlocksAfter: isLocked ? undefined : onInsertBlocksAfter,
303
+ isSelected: isSelected,
304
+ isSelectionEnabled: isSelectionEnabled,
305
+ mergeBlocks: canRemove ? onMerge : undefined,
306
+ name: name,
307
+ onFocus: onFocus,
308
+ onRemove: canRemove ? onRemove : undefined,
309
+ onReplace: canRemove ? onReplace : undefined,
310
+ parentBlockAlignment: parentBlockAlignment,
311
+ parentWidth: parentWidth,
312
+ setAttributes: setAttributes,
313
+ style: mergedStyle,
314
+ toggleSelection: toggleSelection,
315
+ __unstableParentLayout: Object.keys(parentLayout).length ? parentLayout : undefined,
316
+ wrapperProps: wrapperProps
317
+ }), (0, _element.createElement)(_reactNative.View, {
318
+ onLayout: onLayout
319
+ })));
295
320
  }
296
321
 
297
- var _default = (0, _compose.compose)([(0, _data.withSelect)((select, _ref4) => {
298
- var _getSettings;
299
-
322
+ const applyWithSelect = (0, _data.withSelect)((select, _ref5) => {
300
323
  let {
301
- clientId
302
- } = _ref4;
324
+ clientId,
325
+ rootClientId
326
+ } = _ref5;
303
327
  const {
304
- getBlockIndex,
305
- getBlockCount,
306
- getSettings,
307
328
  isBlockSelected,
308
- getBlock,
309
- getSelectedBlockClientId,
310
- getLowestCommonAncestorWithSelectedBlock,
311
- getBlockParents,
312
- hasSelectedInnerBlock,
313
- getBlockHierarchyRootClientId
329
+ getBlockMode,
330
+ isSelectionEnabled,
331
+ getTemplateLock,
332
+ __unstableGetBlockWithoutInnerBlocks,
333
+ canRemoveBlock,
334
+ canMoveBlock
314
335
  } = select(_store.store);
315
- const order = getBlockIndex(clientId);
336
+
337
+ const block = __unstableGetBlockWithoutInnerBlocks(clientId);
338
+
316
339
  const isSelected = isBlockSelected(clientId);
317
- const isInnerBlockSelected = hasSelectedInnerBlock(clientId);
318
- const block = getBlock(clientId);
340
+ const templateLock = getTemplateLock(rootClientId);
341
+ const canRemove = canRemoveBlock(clientId, rootClientId);
342
+ const canMove = canMoveBlock(clientId, rootClientId); // The fallback to `{}` is a temporary fix.
343
+ // This function should never be called when a block is not present in
344
+ // the state. It happens now because the order in withSelect rendering
345
+ // is not correct.
346
+
319
347
  const {
320
348
  name,
321
349
  attributes,
322
350
  isValid
323
- } = block || {};
324
- const blockType = (0, _blocks.getBlockType)(name || 'core/missing');
325
- const title = blockType === null || blockType === void 0 ? void 0 : blockType.title;
326
- const icon = blockType === null || blockType === void 0 ? void 0 : blockType.icon;
327
- const parents = getBlockParents(clientId, true);
328
- const parentId = parents[0] || '';
329
- const selectedBlockClientId = getSelectedBlockClientId();
330
- const commonAncestor = getLowestCommonAncestorWithSelectedBlock(clientId);
331
- const commonAncestorIndex = parents.indexOf(commonAncestor) - 1;
332
- const firstToSelectId = commonAncestor ? parents[commonAncestorIndex] : parents[parents.length - 1];
333
- const isParentSelected = // Set false as a default value to prevent re-render when it's changed from null to false.
334
- (selectedBlockClientId || false) && selectedBlockClientId === parentId;
335
- const selectedParents = selectedBlockClientId ? getBlockParents(selectedBlockClientId) : [];
336
- const isDescendantOfParentSelected = selectedParents.includes(parentId);
337
- const isTouchable = isSelected || isDescendantOfParentSelected || isParentSelected || parentId === '';
338
- const baseGlobalStyles = (_getSettings = getSettings()) === null || _getSettings === void 0 ? void 0 : _getSettings.__experimentalGlobalStylesBaseStyles;
339
- const hasInnerBlocks = getBlockCount(clientId) > 0; // For blocks with inner blocks, we only enable the dragging in the nested
340
- // blocks if any of them are selected. This way we prevent the long-press
341
- // gesture from being disabled for elements within the block UI.
342
-
343
- const draggingEnabled = !hasInnerBlocks || isSelected || !hasSelectedInnerBlock(clientId, true); // Dragging nested blocks is not supported yet. For this reason, the block to be dragged
344
- // will be the top in the hierarchy.
345
-
346
- const draggingClientId = getBlockHierarchyRootClientId(clientId);
351
+ } = block || {}; // Do not add new properties here, use `useSelect` instead to avoid
352
+ // leaking new props to the public API (editor.BlockListBlock filter).
353
+
347
354
  return {
348
- icon,
349
- name: name || 'core/missing',
350
- order,
351
- title,
355
+ mode: getBlockMode(clientId),
356
+ isSelectionEnabled: isSelectionEnabled(),
357
+ isLocked: !!templateLock,
358
+ canRemove,
359
+ canMove,
360
+ // Users of the editor.BlockListBlock filter used to be able to
361
+ // access the block prop.
362
+ // Ideally these blocks would rely on the clientId prop only.
363
+ // This is kept for backward compatibility reasons.
364
+ block,
365
+ name,
352
366
  attributes,
353
- blockType,
354
- draggingClientId,
355
- draggingEnabled,
356
- isSelected,
357
- isInnerBlockSelected,
358
367
  isValid,
359
- isParentSelected,
360
- firstToSelectId,
361
- isTouchable,
362
- baseGlobalStyles,
363
- wrapperProps: getWrapperProps(attributes, blockType.getEditWrapperProps)
368
+ isSelected
364
369
  };
365
- }), (0, _data.withDispatch)((dispatch, ownProps, registry) => {
370
+ });
371
+ const applyWithDispatch = (0, _data.withDispatch)((dispatch, ownProps, registry) => {
366
372
  const {
373
+ updateBlockAttributes,
367
374
  insertBlocks,
368
375
  mergeBlocks,
369
376
  replaceBlocks,
370
- selectBlock,
371
- updateBlockAttributes,
377
+ toggleSelection,
378
+ __unstableMarkLastChangeAsPersistent,
372
379
  moveBlocksToPosition,
373
380
  removeBlock
374
- } = dispatch(_store.store);
381
+ } = dispatch(_store.store); // Do not add new properties here, use `useDispatch` instead to avoid
382
+ // leaking new props to the public API (editor.BlockListBlock filter).
383
+
375
384
  return {
385
+ setAttributes(newAttributes) {
386
+ const {
387
+ getMultiSelectedBlockClientIds
388
+ } = registry.select(_store.store);
389
+ const multiSelectedBlockClientIds = getMultiSelectedBlockClientIds();
390
+ const {
391
+ clientId
392
+ } = ownProps;
393
+ const clientIds = multiSelectedBlockClientIds.length ? multiSelectedBlockClientIds : [clientId];
394
+ updateBlockAttributes(clientIds, newAttributes);
395
+ },
396
+
397
+ onInsertBlocks(blocks, index) {
398
+ const {
399
+ rootClientId
400
+ } = ownProps;
401
+ insertBlocks(blocks, index, rootClientId);
402
+ },
403
+
404
+ onInsertBlocksAfter(blocks) {
405
+ const {
406
+ clientId,
407
+ rootClientId
408
+ } = ownProps;
409
+ const {
410
+ getBlockIndex
411
+ } = registry.select(_store.store);
412
+ const index = getBlockIndex(clientId);
413
+ insertBlocks(blocks, index + 1, rootClientId);
414
+ },
415
+
376
416
  onMerge(forward) {
377
417
  const {
378
418
  clientId,
@@ -493,26 +533,30 @@ var _default = (0, _compose.compose)([(0, _data.withSelect)((select, _ref4) => {
493
533
  }
494
534
  },
495
535
 
496
- onInsertBlocks(blocks, index) {
497
- insertBlocks(blocks, index, ownProps.rootClientId);
498
- },
499
-
500
- onSelect() {
501
- let clientId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ownProps.clientId;
502
- let initialPosition = arguments.length > 1 ? arguments[1] : undefined;
503
- selectBlock(clientId, initialPosition);
504
- },
536
+ onReplace(blocks, indexToSelect, initialPosition) {
537
+ if (blocks.length && !(0, _blocks.isUnmodifiedDefaultBlock)(blocks[blocks.length - 1])) {
538
+ __unstableMarkLastChangeAsPersistent();
539
+ }
505
540
 
506
- onChange: attributes => {
507
- updateBlockAttributes(ownProps.clientId, attributes);
541
+ replaceBlocks([ownProps.clientId], blocks, indexToSelect, initialPosition);
508
542
  },
509
543
 
510
- onReplace(blocks, indexToSelect) {
511
- replaceBlocks([ownProps.clientId], blocks, indexToSelect);
544
+ toggleSelection(selectionEnabled) {
545
+ toggleSelection(selectionEnabled);
512
546
  }
513
547
 
514
548
  };
515
- }), _compose.withPreferredColorScheme])(BlockListBlock);
549
+ });
550
+
551
+ var _default = (0, _compose.compose)(_compose.pure, applyWithSelect, applyWithDispatch, // Block is sometimes not mounted at the right time, causing it be undefined
552
+ // see issue for more info
553
+ // https://github.com/WordPress/gutenberg/issues/17013
554
+ (0, _compose.ifCondition)(_ref6 => {
555
+ let {
556
+ block
557
+ } = _ref6;
558
+ return !!block;
559
+ }))(BlockListBlock);
516
560
 
517
561
  exports.default = _default;
518
562
  //# sourceMappingURL=block.native.js.map