@wordpress/block-editor 7.0.4 → 8.0.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 (347) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +31 -0
  3. package/build/components/alignment-control/ui.js +1 -2
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-icon/index.js +5 -1
  6. package/build/components/block-icon/index.js.map +1 -1
  7. package/build/components/block-inspector/index.js +4 -0
  8. package/build/components/block-inspector/index.js.map +1 -1
  9. package/build/components/block-list/index.native.js +1 -1
  10. package/build/components/block-list/index.native.js.map +1 -1
  11. package/build/components/block-list/use-block-props/use-multi-selection.js +21 -8
  12. package/build/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  13. package/build/components/block-navigation/dropdown.js +0 -1
  14. package/build/components/block-navigation/dropdown.js.map +1 -1
  15. package/build/components/block-patterns-list/index.js +1 -8
  16. package/build/components/block-patterns-list/index.js.map +1 -1
  17. package/build/components/block-settings/container.native.js +5 -2
  18. package/build/components/block-settings/container.native.js.map +1 -1
  19. package/build/components/block-settings-menu/block-settings-dropdown.js +22 -2
  20. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  21. package/build/components/block-styles/preview.native.js +2 -2
  22. package/build/components/block-styles/preview.native.js.map +1 -1
  23. package/build/components/colors-gradients/control.js +8 -47
  24. package/build/components/colors-gradients/control.js.map +1 -1
  25. package/build/components/colors-gradients/panel-color-gradient-settings.js +81 -6
  26. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  27. package/build/components/duotone-control/index.js +5 -2
  28. package/build/components/duotone-control/index.js.map +1 -1
  29. package/build/components/font-appearance-control/index.js +27 -15
  30. package/build/components/font-appearance-control/index.js.map +1 -1
  31. package/build/components/iframe/index.js +1 -1
  32. package/build/components/iframe/index.js.map +1 -1
  33. package/build/components/index.js +20 -2
  34. package/build/components/index.js.map +1 -1
  35. package/build/components/index.native.js +2 -2
  36. package/build/components/index.native.js.map +1 -1
  37. package/build/components/inner-blocks/index.js +5 -4
  38. package/build/components/inner-blocks/index.js.map +1 -1
  39. package/build/components/inner-blocks/index.native.js +4 -3
  40. package/build/components/inner-blocks/index.native.js.map +1 -1
  41. package/build/components/inserter/block-patterns-explorer/explorer.js +62 -0
  42. package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
  43. package/build/components/inserter/block-patterns-explorer/patterns-list.js +111 -0
  44. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
  45. package/build/components/inserter/block-patterns-explorer/sidebar.js +78 -0
  46. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
  47. package/build/components/inserter/block-patterns-tab.js +74 -45
  48. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  49. package/build/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
  50. package/build/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  51. package/build/components/inserter/pattern-panel.js +19 -10
  52. package/build/components/inserter/pattern-panel.js.map +1 -1
  53. package/build/components/inspector-controls/groups.js +3 -1
  54. package/build/components/inspector-controls/groups.js.map +1 -1
  55. package/build/components/letter-spacing-control/index.js +9 -6
  56. package/build/components/letter-spacing-control/index.js.map +1 -1
  57. package/build/components/link-control/index.js +88 -35
  58. package/build/components/link-control/index.js.map +1 -1
  59. package/build/components/link-control/link-preview.js +19 -6
  60. package/build/components/link-control/link-preview.js.map +1 -1
  61. package/build/components/link-control/search-input.js +12 -3
  62. package/build/components/link-control/search-input.js.map +1 -1
  63. package/build/components/list-view/block.js +49 -23
  64. package/build/components/list-view/block.js.map +1 -1
  65. package/build/components/list-view/branch.js +92 -73
  66. package/build/components/list-view/branch.js.map +1 -1
  67. package/build/components/list-view/index.js +39 -16
  68. package/build/components/list-view/index.js.map +1 -1
  69. package/build/components/list-view/leaf.js +1 -1
  70. package/build/components/list-view/leaf.js.map +1 -1
  71. package/build/components/list-view/use-list-view-client-ids.js +8 -58
  72. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  73. package/build/components/rich-text/embed-handler-picker.native.js +1 -0
  74. package/build/components/rich-text/embed-handler-picker.native.js.map +1 -1
  75. package/build/components/rich-text/format-edit.js +28 -2
  76. package/build/components/rich-text/format-edit.js.map +1 -1
  77. package/build/components/rich-text/format-toolbar/index.js +2 -1
  78. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  79. package/build/components/url-input/index.js +11 -4
  80. package/build/components/url-input/index.js.map +1 -1
  81. package/build/components/use-setting/index.js +48 -9
  82. package/build/components/use-setting/index.js.map +1 -1
  83. package/build/hooks/border.js +5 -5
  84. package/build/hooks/border.js.map +1 -1
  85. package/build/hooks/color-panel.js +2 -1
  86. package/build/hooks/color-panel.js.map +1 -1
  87. package/build/hooks/duotone.js +16 -5
  88. package/build/hooks/duotone.js.map +1 -1
  89. package/build/hooks/font-appearance.js +49 -6
  90. package/build/hooks/font-appearance.js.map +1 -1
  91. package/build/hooks/font-family.js +37 -16
  92. package/build/hooks/font-family.js.map +1 -1
  93. package/build/hooks/font-size.js +51 -9
  94. package/build/hooks/font-size.js.map +1 -1
  95. package/build/hooks/index.js +8 -0
  96. package/build/hooks/index.js.map +1 -1
  97. package/build/hooks/index.native.js +8 -0
  98. package/build/hooks/index.native.js.map +1 -1
  99. package/build/hooks/letter-spacing.js +44 -7
  100. package/build/hooks/letter-spacing.js.map +1 -1
  101. package/build/hooks/line-height.js +45 -8
  102. package/build/hooks/line-height.js.map +1 -1
  103. package/build/hooks/margin.js +1 -1
  104. package/build/hooks/margin.js.map +1 -1
  105. package/build/hooks/padding.js +1 -1
  106. package/build/hooks/padding.js.map +1 -1
  107. package/build/hooks/text-decoration.js +42 -6
  108. package/build/hooks/text-decoration.js.map +1 -1
  109. package/build/hooks/text-transform.js +42 -6
  110. package/build/hooks/text-transform.js.map +1 -1
  111. package/build/hooks/typography.js +108 -8
  112. package/build/hooks/typography.js.map +1 -1
  113. package/build/hooks/use-cached-truthy.js +29 -0
  114. package/build/hooks/use-cached-truthy.js.map +1 -0
  115. package/build/index.js +7 -0
  116. package/build/index.js.map +1 -1
  117. package/build/layouts/flex.js +120 -28
  118. package/build/layouts/flex.js.map +1 -1
  119. package/build/store/actions.js +303 -265
  120. package/build/store/actions.js.map +1 -1
  121. package/build/store/index.js +1 -3
  122. package/build/store/index.js.map +1 -1
  123. package/build/store/reducer.js +23 -22
  124. package/build/store/reducer.js.map +1 -1
  125. package/build/store/selectors.js +44 -35
  126. package/build/store/selectors.js.map +1 -1
  127. package/build-module/components/alignment-control/ui.js +1 -2
  128. package/build-module/components/alignment-control/ui.js.map +1 -1
  129. package/build-module/components/block-icon/index.js +5 -1
  130. package/build-module/components/block-icon/index.js.map +1 -1
  131. package/build-module/components/block-inspector/index.js +4 -0
  132. package/build-module/components/block-inspector/index.js.map +1 -1
  133. package/build-module/components/block-list/index.native.js +1 -1
  134. package/build-module/components/block-list/index.native.js.map +1 -1
  135. package/build-module/components/block-list/use-block-props/use-multi-selection.js +21 -8
  136. package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  137. package/build-module/components/block-navigation/dropdown.js +0 -1
  138. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  139. package/build-module/components/block-patterns-list/index.js +1 -6
  140. package/build-module/components/block-patterns-list/index.js.map +1 -1
  141. package/build-module/components/block-settings/container.native.js +6 -3
  142. package/build-module/components/block-settings/container.native.js.map +1 -1
  143. package/build-module/components/block-settings-menu/block-settings-dropdown.js +24 -4
  144. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  145. package/build-module/components/block-styles/preview.native.js +2 -2
  146. package/build-module/components/block-styles/preview.native.js.map +1 -1
  147. package/build-module/components/colors-gradients/control.js +12 -53
  148. package/build-module/components/colors-gradients/control.js.map +1 -1
  149. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +82 -6
  150. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  151. package/build-module/components/duotone-control/index.js +5 -2
  152. package/build-module/components/duotone-control/index.js.map +1 -1
  153. package/build-module/components/font-appearance-control/index.js +23 -15
  154. package/build-module/components/font-appearance-control/index.js.map +1 -1
  155. package/build-module/components/iframe/index.js +1 -1
  156. package/build-module/components/iframe/index.js.map +1 -1
  157. package/build-module/components/index.js +3 -1
  158. package/build-module/components/index.js.map +1 -1
  159. package/build-module/components/index.native.js +1 -1
  160. package/build-module/components/index.native.js.map +1 -1
  161. package/build-module/components/inner-blocks/index.js +6 -5
  162. package/build-module/components/inner-blocks/index.js.map +1 -1
  163. package/build-module/components/inner-blocks/index.native.js +5 -4
  164. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  165. package/build-module/components/inserter/block-patterns-explorer/explorer.js +50 -0
  166. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
  167. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +92 -0
  168. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
  169. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +69 -0
  170. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
  171. package/build-module/components/inserter/block-patterns-tab.js +75 -46
  172. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  173. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
  174. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  175. package/build-module/components/inserter/pattern-panel.js +21 -13
  176. package/build-module/components/inserter/pattern-panel.js.map +1 -1
  177. package/build-module/components/inspector-controls/groups.js +3 -1
  178. package/build-module/components/inspector-controls/groups.js.map +1 -1
  179. package/build-module/components/letter-spacing-control/index.js +9 -6
  180. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  181. package/build-module/components/link-control/index.js +88 -36
  182. package/build-module/components/link-control/index.js.map +1 -1
  183. package/build-module/components/link-control/link-preview.js +19 -7
  184. package/build-module/components/link-control/link-preview.js.map +1 -1
  185. package/build-module/components/link-control/search-input.js +11 -3
  186. package/build-module/components/link-control/search-input.js.map +1 -1
  187. package/build-module/components/list-view/block.js +49 -24
  188. package/build-module/components/list-view/block.js.map +1 -1
  189. package/build-module/components/list-view/branch.js +92 -73
  190. package/build-module/components/list-view/branch.js.map +1 -1
  191. package/build-module/components/list-view/index.js +41 -18
  192. package/build-module/components/list-view/index.js.map +1 -1
  193. package/build-module/components/list-view/leaf.js +1 -1
  194. package/build-module/components/list-view/leaf.js.map +1 -1
  195. package/build-module/components/list-view/use-list-view-client-ids.js +8 -58
  196. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  197. package/build-module/components/rich-text/embed-handler-picker.native.js +1 -0
  198. package/build-module/components/rich-text/embed-handler-picker.native.js.map +1 -1
  199. package/build-module/components/rich-text/format-edit.js +28 -3
  200. package/build-module/components/rich-text/format-edit.js.map +1 -1
  201. package/build-module/components/rich-text/format-toolbar/index.js +2 -1
  202. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  203. package/build-module/components/url-input/index.js +11 -4
  204. package/build-module/components/url-input/index.js.map +1 -1
  205. package/build-module/components/use-setting/index.js +48 -9
  206. package/build-module/components/use-setting/index.js.map +1 -1
  207. package/build-module/hooks/border.js +5 -5
  208. package/build-module/hooks/border.js.map +1 -1
  209. package/build-module/hooks/color-panel.js +2 -1
  210. package/build-module/hooks/color-panel.js.map +1 -1
  211. package/build-module/hooks/duotone.js +16 -5
  212. package/build-module/hooks/duotone.js.map +1 -1
  213. package/build-module/hooks/font-appearance.js +45 -6
  214. package/build-module/hooks/font-appearance.js.map +1 -1
  215. package/build-module/hooks/font-family.js +33 -16
  216. package/build-module/hooks/font-family.js.map +1 -1
  217. package/build-module/hooks/font-size.js +47 -9
  218. package/build-module/hooks/font-size.js.map +1 -1
  219. package/build-module/hooks/index.js +1 -0
  220. package/build-module/hooks/index.js.map +1 -1
  221. package/build-module/hooks/index.native.js +1 -0
  222. package/build-module/hooks/index.native.js.map +1 -1
  223. package/build-module/hooks/letter-spacing.js +40 -7
  224. package/build-module/hooks/letter-spacing.js.map +1 -1
  225. package/build-module/hooks/line-height.js +41 -8
  226. package/build-module/hooks/line-height.js.map +1 -1
  227. package/build-module/hooks/margin.js +1 -1
  228. package/build-module/hooks/margin.js.map +1 -1
  229. package/build-module/hooks/padding.js +1 -1
  230. package/build-module/hooks/padding.js.map +1 -1
  231. package/build-module/hooks/text-decoration.js +38 -6
  232. package/build-module/hooks/text-decoration.js.map +1 -1
  233. package/build-module/hooks/text-transform.js +38 -6
  234. package/build-module/hooks/text-transform.js.map +1 -1
  235. package/build-module/hooks/typography.js +117 -17
  236. package/build-module/hooks/typography.js.map +1 -1
  237. package/build-module/hooks/use-cached-truthy.js +21 -0
  238. package/build-module/hooks/use-cached-truthy.js.map +1 -0
  239. package/build-module/index.js +1 -1
  240. package/build-module/index.js.map +1 -1
  241. package/build-module/layouts/flex.js +124 -32
  242. package/build-module/layouts/flex.js.map +1 -1
  243. package/build-module/store/actions.js +266 -241
  244. package/build-module/store/actions.js.map +1 -1
  245. package/build-module/store/index.js +1 -2
  246. package/build-module/store/index.js.map +1 -1
  247. package/build-module/store/reducer.js +23 -22
  248. package/build-module/store/reducer.js.map +1 -1
  249. package/build-module/store/selectors.js +42 -30
  250. package/build-module/store/selectors.js.map +1 -1
  251. package/build-style/style-rtl.css +160 -57
  252. package/build-style/style.css +160 -57
  253. package/package.json +13 -14
  254. package/src/components/alignment-control/test/__snapshots__/index.js.snap +0 -2
  255. package/src/components/alignment-control/ui.js +1 -4
  256. package/src/components/block-draggable/style.scss +19 -4
  257. package/src/components/block-icon/index.js +4 -1
  258. package/src/components/block-inspector/index.js +5 -0
  259. package/src/components/block-list/index.native.js +1 -1
  260. package/src/components/block-list/use-block-props/use-multi-selection.js +27 -7
  261. package/src/components/block-navigation/dropdown.js +0 -1
  262. package/src/components/block-patterns-list/index.js +1 -8
  263. package/src/components/block-patterns-list/style.scss +22 -12
  264. package/src/components/block-settings/container.native.js +7 -0
  265. package/src/components/block-settings-menu/block-settings-dropdown.js +19 -7
  266. package/src/components/block-styles/preview.native.js +2 -2
  267. package/src/components/block-switcher/test/__snapshots__/index.js.snap +1 -1
  268. package/src/components/color-palette/test/__snapshots__/control.js.snap +88 -63
  269. package/src/components/colors-gradients/control.js +19 -62
  270. package/src/components/colors-gradients/panel-color-gradient-settings.js +76 -6
  271. package/src/components/colors-gradients/style.scss +3 -14
  272. package/src/components/colors-gradients/test/control.js +0 -16
  273. package/src/components/duotone-control/index.js +6 -0
  274. package/src/components/duotone-control/style.scss +27 -12
  275. package/src/components/font-appearance-control/index.js +22 -14
  276. package/src/components/iframe/index.js +1 -1
  277. package/src/components/index.js +3 -4
  278. package/src/components/index.native.js +1 -4
  279. package/src/components/inner-blocks/index.js +4 -4
  280. package/src/components/inner-blocks/index.native.js +7 -4
  281. package/src/components/inserter/block-patterns-explorer/explorer.js +50 -0
  282. package/src/components/inserter/block-patterns-explorer/patterns-list.js +122 -0
  283. package/src/components/inserter/block-patterns-explorer/sidebar.js +73 -0
  284. package/src/components/inserter/block-patterns-tab.js +107 -80
  285. package/src/components/inserter/hooks/use-block-type-impressions.native.js +14 -21
  286. package/src/components/inserter/pattern-panel.js +33 -16
  287. package/src/components/inserter/style.scss +64 -1
  288. package/src/components/inserter/test/block-types-tab.native.js +1 -1
  289. package/src/components/inserter/test/fixtures/index.native.js +12 -0
  290. package/src/components/inspector-controls/groups.js +4 -0
  291. package/src/components/letter-spacing-control/index.js +12 -6
  292. package/src/components/link-control/README.md +7 -0
  293. package/src/components/link-control/index.js +99 -34
  294. package/src/components/link-control/link-preview.js +21 -9
  295. package/src/components/link-control/search-input.js +9 -3
  296. package/src/components/link-control/style.scss +32 -16
  297. package/src/components/link-control/test/index.js +179 -4
  298. package/src/components/list-view/block.js +67 -23
  299. package/src/components/list-view/branch.js +113 -91
  300. package/src/components/list-view/index.js +58 -19
  301. package/src/components/list-view/leaf.js +1 -1
  302. package/src/components/list-view/style.scss +14 -3
  303. package/src/components/list-view/use-list-view-client-ids.js +7 -66
  304. package/src/components/rich-text/embed-handler-picker.native.js +1 -0
  305. package/src/components/rich-text/format-edit.js +36 -2
  306. package/src/components/rich-text/format-toolbar/index.js +3 -0
  307. package/src/components/url-input/index.js +14 -4
  308. package/src/components/use-setting/index.js +49 -11
  309. package/src/hooks/border.js +8 -11
  310. package/src/hooks/color-panel.js +1 -0
  311. package/src/hooks/duotone.js +21 -7
  312. package/src/hooks/font-appearance.js +38 -7
  313. package/src/hooks/font-family.js +29 -13
  314. package/src/hooks/font-size.js +42 -6
  315. package/src/hooks/index.js +1 -0
  316. package/src/hooks/index.native.js +1 -0
  317. package/src/hooks/layout.scss +3 -1
  318. package/src/hooks/letter-spacing.js +35 -7
  319. package/src/hooks/line-height.js +37 -9
  320. package/src/hooks/margin.js +1 -1
  321. package/src/hooks/padding.js +1 -1
  322. package/src/hooks/text-decoration.js +34 -6
  323. package/src/hooks/text-transform.js +34 -6
  324. package/src/hooks/typography.js +165 -15
  325. package/src/hooks/typography.scss +16 -0
  326. package/src/hooks/use-cached-truthy.js +20 -0
  327. package/src/index.js +1 -0
  328. package/src/layouts/flex.js +137 -41
  329. package/src/store/actions.js +223 -391
  330. package/src/store/index.js +1 -2
  331. package/src/store/reducer.js +36 -18
  332. package/src/store/selectors.js +52 -47
  333. package/src/store/test/actions.js +395 -694
  334. package/src/store/test/selectors.js +79 -21
  335. package/src/style.scss +1 -1
  336. package/src/utils/test/parse-css-unit-to-px.js +127 -167
  337. package/build/components/text-decoration-and-transform/index.js +0 -39
  338. package/build/components/text-decoration-and-transform/index.js.map +0 -1
  339. package/build/store/controls.js +0 -44
  340. package/build/store/controls.js.map +0 -1
  341. package/build-module/components/text-decoration-and-transform/index.js +0 -30
  342. package/build-module/components/text-decoration-and-transform/index.js.map +0 -1
  343. package/build-module/store/controls.js +0 -32
  344. package/build-module/store/controls.js.map +0 -1
  345. package/src/components/text-decoration-and-transform/index.js +0 -36
  346. package/src/components/text-decoration-and-transform/style.scss +0 -3
  347. package/src/store/controls.js +0 -39
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = ListViewBlock;
8
+ exports.default = void 0;
9
9
 
10
10
  var _element = require("@wordpress/element");
11
11
 
@@ -42,12 +42,10 @@ var _store = require("../../store");
42
42
  */
43
43
  function ListViewBlock({
44
44
  block,
45
- isSelected,
46
45
  isDragged,
46
+ isSelected,
47
47
  isBranchSelected,
48
- isLastOfSelectedBranch,
49
- onClick,
50
- onToggleExpanded,
48
+ selectBlock,
51
49
  position,
52
50
  level,
53
51
  rowCount,
@@ -64,16 +62,19 @@ function ListViewBlock({
64
62
  const {
65
63
  toggleBlockHighlight
66
64
  } = (0, _data.useDispatch)(_store.store);
65
+ const {
66
+ __experimentalFeatures: withExperimentalFeatures,
67
+ __experimentalPersistentListViewFeatures: withExperimentalPersistentListViewFeatures,
68
+ __experimentalHideContainerBlockActions: hideContainerBlockActions,
69
+ isTreeGridMounted,
70
+ expand,
71
+ collapse
72
+ } = (0, _context.useListViewContext)();
67
73
  const hasSiblings = siblingBlockCount > 0;
68
74
  const hasRenderedMovers = showBlockMovers && hasSiblings;
69
75
  const moverCellClassName = (0, _classnames.default)('block-editor-list-view-block__mover-cell', {
70
76
  'is-visible': isHovered || isSelected
71
77
  });
72
- const {
73
- __experimentalFeatures: withExperimentalFeatures,
74
- __experimentalPersistentListViewFeatures: withExperimentalPersistentListViewFeatures,
75
- isTreeGridMounted
76
- } = (0, _context.useListViewContext)();
77
78
  const listViewBlockSettingsClassName = (0, _classnames.default)('block-editor-list-view-block__menu-cell', {
78
79
  'is-visible': isHovered || isSelected
79
80
  }); // If ListView has experimental features related to the Persistent List View,
@@ -86,22 +87,43 @@ function ListViewBlock({
86
87
  }
87
88
  }, []);
88
89
  const highlightBlock = withExperimentalPersistentListViewFeatures ? toggleBlockHighlight : () => {};
89
-
90
- const onMouseEnter = () => {
90
+ const onMouseEnter = (0, _element.useCallback)(() => {
91
91
  setIsHovered(true);
92
92
  highlightBlock(clientId, true);
93
- };
94
-
95
- const onMouseLeave = () => {
93
+ }, [clientId, setIsHovered, highlightBlock]);
94
+ const onMouseLeave = (0, _element.useCallback)(() => {
96
95
  setIsHovered(false);
97
96
  highlightBlock(clientId, false);
98
- };
97
+ }, [clientId, setIsHovered, highlightBlock]);
98
+ const selectEditorBlock = (0, _element.useCallback)(event => {
99
+ event.stopPropagation();
100
+ selectBlock(clientId);
101
+ }, [clientId, selectBlock]);
102
+ const toggleExpanded = (0, _element.useCallback)(event => {
103
+ event.stopPropagation();
104
+
105
+ if (isExpanded === true) {
106
+ collapse(clientId);
107
+ } else if (isExpanded === false) {
108
+ expand(clientId);
109
+ }
110
+ }, [clientId, expand, collapse, isExpanded]);
111
+ const showBlockActions = withExperimentalFeatures && ( //hide actions for blocks like core/widget-areas
112
+ !hideContainerBlockActions || hideContainerBlockActions && level > 1);
113
+ const hideBlockActions = withExperimentalFeatures && !showBlockActions;
114
+ let colSpan;
115
+
116
+ if (hasRenderedMovers) {
117
+ colSpan = 2;
118
+ } else if (hideBlockActions) {
119
+ colSpan = 3;
120
+ }
99
121
 
100
122
  const classes = (0, _classnames.default)({
101
123
  'is-selected': isSelected,
102
124
  'is-branch-selected': withExperimentalPersistentListViewFeatures && isBranchSelected,
103
- 'is-last-of-selected-branch': withExperimentalPersistentListViewFeatures && isLastOfSelectedBranch,
104
- 'is-dragging': isDragged
125
+ 'is-dragging': isDragged,
126
+ 'has-single-cell': hideBlockActions
105
127
  });
106
128
  return (0, _element.createElement)(_leaf.default, {
107
129
  className: classes,
@@ -118,7 +140,7 @@ function ListViewBlock({
118
140
  isExpanded: isExpanded
119
141
  }, (0, _element.createElement)(_components.__experimentalTreeGridCell, {
120
142
  className: "block-editor-list-view-block__contents-cell",
121
- colSpan: hasRenderedMovers ? undefined : 2,
143
+ colSpan: colSpan,
122
144
  ref: cellRef
123
145
  }, ({
124
146
  ref,
@@ -128,8 +150,8 @@ function ListViewBlock({
128
150
  className: "block-editor-list-view-block__contents-container"
129
151
  }, (0, _element.createElement)(_blockContents.default, {
130
152
  block: block,
131
- onClick: onClick,
132
- onToggleExpanded: onToggleExpanded,
153
+ onClick: selectEditorBlock,
154
+ onToggleExpanded: toggleExpanded,
133
155
  isSelected: isSelected,
134
156
  position: position,
135
157
  siblingBlockCount: siblingBlockCount,
@@ -160,7 +182,7 @@ function ListViewBlock({
160
182
  ref: ref,
161
183
  tabIndex: tabIndex,
162
184
  onFocus: onFocus
163
- })))), withExperimentalFeatures && (0, _element.createElement)(_components.__experimentalTreeGridCell, {
185
+ })))), showBlockActions && (0, _element.createElement)(_components.__experimentalTreeGridCell, {
164
186
  className: listViewBlockSettingsClassName
165
187
  }, ({
166
188
  ref,
@@ -176,7 +198,11 @@ function ListViewBlock({
176
198
  onFocus
177
199
  },
178
200
  disableOpenOnArrowDown: true,
179
- __experimentalSelectBlock: onClick
201
+ __experimentalSelectBlock: selectEditorBlock
180
202
  })));
181
203
  }
204
+
205
+ var _default = (0, _element.memo)(ListViewBlock);
206
+
207
+ exports.default = _default;
182
208
  //# sourceMappingURL=block.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/block.js"],"names":["ListViewBlock","block","isSelected","isDragged","isBranchSelected","isLastOfSelectedBranch","onClick","onToggleExpanded","position","level","rowCount","siblingBlockCount","showBlockMovers","path","isExpanded","cellRef","isHovered","setIsHovered","clientId","toggleBlockHighlight","blockEditorStore","hasSiblings","hasRenderedMovers","moverCellClassName","__experimentalFeatures","withExperimentalFeatures","__experimentalPersistentListViewFeatures","withExperimentalPersistentListViewFeatures","isTreeGridMounted","listViewBlockSettingsClassName","current","focus","highlightBlock","onMouseEnter","onMouseLeave","classes","undefined","ref","tabIndex","onFocus","moreVertical","className"],"mappings":";;;;;;;;;AAaA;;AAVA;;AAKA;;AAIA;;AAEA;;AAKA;;AACA;;AAIA;;AACA;;AACA;;AACA;;AA3BA;AACA;AACA;;AAGA;AACA;AACA;;AASA;AACA;AACA;AAWe,SAASA,aAAT,CAAwB;AACtCC,EAAAA,KADsC;AAEtCC,EAAAA,UAFsC;AAGtCC,EAAAA,SAHsC;AAItCC,EAAAA,gBAJsC;AAKtCC,EAAAA,sBALsC;AAMtCC,EAAAA,OANsC;AAOtCC,EAAAA,gBAPsC;AAQtCC,EAAAA,QARsC;AAStCC,EAAAA,KATsC;AAUtCC,EAAAA,QAVsC;AAWtCC,EAAAA,iBAXsC;AAYtCC,EAAAA,eAZsC;AAatCC,EAAAA,IAbsC;AActCC,EAAAA;AAdsC,CAAxB,EAeX;AACH,QAAMC,OAAO,GAAG,qBAAQ,IAAR,CAAhB;AACA,QAAM,CAAEC,SAAF,EAAaC,YAAb,IAA8B,uBAAU,KAAV,CAApC;AACA,QAAM;AAAEC,IAAAA;AAAF,MAAejB,KAArB;AAEA,QAAM;AAAEkB,IAAAA;AAAF,MAA2B,uBAAaC,YAAb,CAAjC;AAEA,QAAMC,WAAW,GAAGV,iBAAiB,GAAG,CAAxC;AACA,QAAMW,iBAAiB,GAAGV,eAAe,IAAIS,WAA7C;AACA,QAAME,kBAAkB,GAAG,yBAC1B,0CAD0B,EAE1B;AAAE,kBAAcP,SAAS,IAAId;AAA7B,GAF0B,CAA3B;AAIA,QAAM;AACLsB,IAAAA,sBAAsB,EAAEC,wBADnB;AAELC,IAAAA,wCAAwC,EAAEC,0CAFrC;AAGLC,IAAAA;AAHK,MAIF,kCAJJ;AAKA,QAAMC,8BAA8B,GAAG,yBACtC,yCADsC,EAEtC;AAAE,kBAAcb,SAAS,IAAId;AAA7B,GAFsC,CAAvC,CAlBG,CAuBH;AACA;AACA;;AACA,0BAAW,MAAM;AAChB,QACCyB,0CAA0C,IAC1C,CAAEC,iBADF,IAEA1B,UAHD,EAIE;AACDa,MAAAA,OAAO,CAACe,OAAR,CAAgBC,KAAhB;AACA;AACD,GARD,EAQG,EARH;AAUA,QAAMC,cAAc,GAAGL,0CAA0C,GAC9DR,oBAD8D,GAE9D,MAAM,CAAE,CAFX;;AAIA,QAAMc,YAAY,GAAG,MAAM;AAC1BhB,IAAAA,YAAY,CAAE,IAAF,CAAZ;AACAe,IAAAA,cAAc,CAAEd,QAAF,EAAY,IAAZ,CAAd;AACA,GAHD;;AAIA,QAAMgB,YAAY,GAAG,MAAM;AAC1BjB,IAAAA,YAAY,CAAE,KAAF,CAAZ;AACAe,IAAAA,cAAc,CAAEd,QAAF,EAAY,KAAZ,CAAd;AACA,GAHD;;AAKA,QAAMiB,OAAO,GAAG,yBAAY;AAC3B,mBAAejC,UADY;AAE3B,0BACCyB,0CAA0C,IAAIvB,gBAHpB;AAI3B,kCACCuB,0CAA0C,IAC1CtB,sBAN0B;AAO3B,mBAAeF;AAPY,GAAZ,CAAhB;AAUA,SACC,4BAAC,aAAD;AACC,IAAA,SAAS,EAAGgC,OADb;AAEC,IAAA,YAAY,EAAGF,YAFhB;AAGC,IAAA,YAAY,EAAGC,YAHhB;AAIC,IAAA,OAAO,EAAGD,YAJX;AAKC,IAAA,MAAM,EAAGC,YALV;AAMC,IAAA,KAAK,EAAGzB,KANT;AAOC,IAAA,QAAQ,EAAGD,QAPZ;AAQC,IAAA,QAAQ,EAAGE,QARZ;AASC,IAAA,IAAI,EAAGG,IATR;AAUC,IAAA,EAAE,EAAI,mBAAmBK,QAAU,EAVpC;AAWC,kBAAaA,QAXd;AAYC,IAAA,UAAU,EAAGJ;AAZd,KAcC,4BAAC,sCAAD;AACC,IAAA,SAAS,EAAC,6CADX;AAEC,IAAA,OAAO,EAAGQ,iBAAiB,GAAGc,SAAH,GAAe,CAF3C;AAGC,IAAA,GAAG,EAAGrB;AAHP,KAKG,CAAE;AAAEsB,IAAAA,GAAF;AAAOC,IAAAA,QAAP;AAAiBC,IAAAA;AAAjB,GAAF,KACD;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,4BAAC,sBAAD;AACC,IAAA,KAAK,EAAGtC,KADT;AAEC,IAAA,OAAO,EAAGK,OAFX;AAGC,IAAA,gBAAgB,EAAGC,gBAHpB;AAIC,IAAA,UAAU,EAAGL,UAJd;AAKC,IAAA,QAAQ,EAAGM,QALZ;AAMC,IAAA,iBAAiB,EAAGG,iBANrB;AAOC,IAAA,KAAK,EAAGF,KAPT;AAQC,IAAA,GAAG,EAAG4B,GARP;AASC,IAAA,QAAQ,EAAGC,QATZ;AAUC,IAAA,OAAO,EAAGC;AAVX,IADD,CANF,CAdD,EAoCGjB,iBAAiB,IAClB,qDACC,4BAAC,sCAAD;AACC,IAAA,SAAS,EAAGC,kBADb;AAEC,IAAA,eAAe;AAFhB,KAIC,4BAAC,sCAAD,QACG,CAAE;AAAEc,IAAAA,GAAF;AAAOC,IAAAA,QAAP;AAAiBC,IAAAA;AAAjB,GAAF,KACD,4BAAC,0BAAD;AACC,IAAA,WAAW,EAAC,UADb;AAEC,IAAA,SAAS,EAAG,CAAErB,QAAF,CAFb;AAGC,IAAA,GAAG,EAAGmB,GAHP;AAIC,IAAA,QAAQ,EAAGC,QAJZ;AAKC,IAAA,OAAO,EAAGC;AALX,IAFF,CAJD,EAeC,4BAAC,sCAAD,QACG,CAAE;AAAEF,IAAAA,GAAF;AAAOC,IAAAA,QAAP;AAAiBC,IAAAA;AAAjB,GAAF,KACD,4BAAC,4BAAD;AACC,IAAA,WAAW,EAAC,UADb;AAEC,IAAA,SAAS,EAAG,CAAErB,QAAF,CAFb;AAGC,IAAA,GAAG,EAAGmB,GAHP;AAIC,IAAA,QAAQ,EAAGC,QAJZ;AAKC,IAAA,OAAO,EAAGC;AALX,IAFF,CAfD,CADD,CArCF,EAoEGd,wBAAwB,IACzB,4BAAC,sCAAD;AAAc,IAAA,SAAS,EAAGI;AAA1B,KACG,CAAE;AAAEQ,IAAAA,GAAF;AAAOC,IAAAA,QAAP;AAAiBC,IAAAA;AAAjB,GAAF,KACD,4BAAC,8BAAD;AACC,IAAA,SAAS,EAAG,CAAErB,QAAF,CADb;AAEC,IAAA,IAAI,EAAGsB,mBAFR;AAGC,IAAA,WAAW,EAAG;AACbH,MAAAA,GADa;AAEbI,MAAAA,SAAS,EAAE,oCAFE;AAGbH,MAAAA,QAHa;AAIbC,MAAAA;AAJa,KAHf;AASC,IAAA,sBAAsB,MATvB;AAUC,IAAA,yBAAyB,EAAGjC;AAV7B,IAFF,CArEF,CADD;AAyFA","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalTreeGridCell as TreeGridCell,\n\t__experimentalTreeGridItem as TreeGridItem,\n} from '@wordpress/components';\nimport { moreVertical } from '@wordpress/icons';\nimport { useState, useRef, useEffect } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport ListViewLeaf from './leaf';\nimport {\n\tBlockMoverUpButton,\n\tBlockMoverDownButton,\n} from '../block-mover/button';\nimport ListViewBlockContents from './block-contents';\nimport BlockSettingsDropdown from '../block-settings-menu/block-settings-dropdown';\nimport { useListViewContext } from './context';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function ListViewBlock( {\n\tblock,\n\tisSelected,\n\tisDragged,\n\tisBranchSelected,\n\tisLastOfSelectedBranch,\n\tonClick,\n\tonToggleExpanded,\n\tposition,\n\tlevel,\n\trowCount,\n\tsiblingBlockCount,\n\tshowBlockMovers,\n\tpath,\n\tisExpanded,\n} ) {\n\tconst cellRef = useRef( null );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst { clientId } = block;\n\n\tconst { toggleBlockHighlight } = useDispatch( blockEditorStore );\n\n\tconst hasSiblings = siblingBlockCount > 0;\n\tconst hasRenderedMovers = showBlockMovers && hasSiblings;\n\tconst moverCellClassName = classnames(\n\t\t'block-editor-list-view-block__mover-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\tconst {\n\t\t__experimentalFeatures: withExperimentalFeatures,\n\t\t__experimentalPersistentListViewFeatures: withExperimentalPersistentListViewFeatures,\n\t\tisTreeGridMounted,\n\t} = useListViewContext();\n\tconst listViewBlockSettingsClassName = classnames(\n\t\t'block-editor-list-view-block__menu-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\t// If ListView has experimental features related to the Persistent List View,\n\t// only focus the selected list item on mount; otherwise the list would always\n\t// try to steal the focus from the editor canvas.\n\tuseEffect( () => {\n\t\tif (\n\t\t\twithExperimentalPersistentListViewFeatures &&\n\t\t\t! isTreeGridMounted &&\n\t\t\tisSelected\n\t\t) {\n\t\t\tcellRef.current.focus();\n\t\t}\n\t}, [] );\n\n\tconst highlightBlock = withExperimentalPersistentListViewFeatures\n\t\t? toggleBlockHighlight\n\t\t: () => {};\n\n\tconst onMouseEnter = () => {\n\t\tsetIsHovered( true );\n\t\thighlightBlock( clientId, true );\n\t};\n\tconst onMouseLeave = () => {\n\t\tsetIsHovered( false );\n\t\thighlightBlock( clientId, false );\n\t};\n\n\tconst classes = classnames( {\n\t\t'is-selected': isSelected,\n\t\t'is-branch-selected':\n\t\t\twithExperimentalPersistentListViewFeatures && isBranchSelected,\n\t\t'is-last-of-selected-branch':\n\t\t\twithExperimentalPersistentListViewFeatures &&\n\t\t\tisLastOfSelectedBranch,\n\t\t'is-dragging': isDragged,\n\t} );\n\n\treturn (\n\t\t<ListViewLeaf\n\t\t\tclassName={ classes }\n\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\tonFocus={ onMouseEnter }\n\t\t\tonBlur={ onMouseLeave }\n\t\t\tlevel={ level }\n\t\t\tposition={ position }\n\t\t\trowCount={ rowCount }\n\t\t\tpath={ path }\n\t\t\tid={ `list-view-block-${ clientId }` }\n\t\t\tdata-block={ clientId }\n\t\t\tisExpanded={ isExpanded }\n\t\t>\n\t\t\t<TreeGridCell\n\t\t\t\tclassName=\"block-editor-list-view-block__contents-cell\"\n\t\t\t\tcolSpan={ hasRenderedMovers ? undefined : 2 }\n\t\t\t\tref={ cellRef }\n\t\t\t>\n\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t<div className=\"block-editor-list-view-block__contents-container\">\n\t\t\t\t\t\t<ListViewBlockContents\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\tonClick={ onClick }\n\t\t\t\t\t\t\tonToggleExpanded={ onToggleExpanded }\n\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\tsiblingBlockCount={ siblingBlockCount }\n\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</TreeGridCell>\n\t\t\t{ hasRenderedMovers && (\n\t\t\t\t<>\n\t\t\t\t\t<TreeGridCell\n\t\t\t\t\t\tclassName={ moverCellClassName }\n\t\t\t\t\t\twithoutGridItem\n\t\t\t\t\t>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverUpButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverDownButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t</TreeGridCell>\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ withExperimentalFeatures && (\n\t\t\t\t<TreeGridCell className={ listViewBlockSettingsClassName }>\n\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t<BlockSettingsDropdown\n\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\t\tref,\n\t\t\t\t\t\t\t\tclassName: 'block-editor-list-view-block__menu',\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\tonFocus,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tdisableOpenOnArrowDown\n\t\t\t\t\t\t\t__experimentalSelectBlock={ onClick }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</TreeGridCell>\n\t\t\t) }\n\t\t</ListViewLeaf>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/block.js"],"names":["ListViewBlock","block","isDragged","isSelected","isBranchSelected","selectBlock","position","level","rowCount","siblingBlockCount","showBlockMovers","path","isExpanded","cellRef","isHovered","setIsHovered","clientId","toggleBlockHighlight","blockEditorStore","__experimentalFeatures","withExperimentalFeatures","__experimentalPersistentListViewFeatures","withExperimentalPersistentListViewFeatures","__experimentalHideContainerBlockActions","hideContainerBlockActions","isTreeGridMounted","expand","collapse","hasSiblings","hasRenderedMovers","moverCellClassName","listViewBlockSettingsClassName","current","focus","highlightBlock","onMouseEnter","onMouseLeave","selectEditorBlock","event","stopPropagation","toggleExpanded","showBlockActions","hideBlockActions","colSpan","classes","ref","tabIndex","onFocus","moreVertical","className"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalTreeGridCell as TreeGridCell,\n\t__experimentalTreeGridItem as TreeGridItem,\n} from '@wordpress/components';\nimport { moreVertical } from '@wordpress/icons';\nimport {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tmemo,\n} from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport ListViewLeaf from './leaf';\nimport {\n\tBlockMoverUpButton,\n\tBlockMoverDownButton,\n} from '../block-mover/button';\nimport ListViewBlockContents from './block-contents';\nimport BlockSettingsDropdown from '../block-settings-menu/block-settings-dropdown';\nimport { useListViewContext } from './context';\nimport { store as blockEditorStore } from '../../store';\n\nfunction ListViewBlock( {\n\tblock,\n\tisDragged,\n\tisSelected,\n\tisBranchSelected,\n\tselectBlock,\n\tposition,\n\tlevel,\n\trowCount,\n\tsiblingBlockCount,\n\tshowBlockMovers,\n\tpath,\n\tisExpanded,\n} ) {\n\tconst cellRef = useRef( null );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst { clientId } = block;\n\n\tconst { toggleBlockHighlight } = useDispatch( blockEditorStore );\n\n\tconst {\n\t\t__experimentalFeatures: withExperimentalFeatures,\n\t\t__experimentalPersistentListViewFeatures: withExperimentalPersistentListViewFeatures,\n\t\t__experimentalHideContainerBlockActions: hideContainerBlockActions,\n\t\tisTreeGridMounted,\n\t\texpand,\n\t\tcollapse,\n\t} = useListViewContext();\n\n\tconst hasSiblings = siblingBlockCount > 0;\n\tconst hasRenderedMovers = showBlockMovers && hasSiblings;\n\tconst moverCellClassName = classnames(\n\t\t'block-editor-list-view-block__mover-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\tconst listViewBlockSettingsClassName = classnames(\n\t\t'block-editor-list-view-block__menu-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\t// If ListView has experimental features related to the Persistent List View,\n\t// only focus the selected list item on mount; otherwise the list would always\n\t// try to steal the focus from the editor canvas.\n\tuseEffect( () => {\n\t\tif (\n\t\t\twithExperimentalPersistentListViewFeatures &&\n\t\t\t! isTreeGridMounted &&\n\t\t\tisSelected\n\t\t) {\n\t\t\tcellRef.current.focus();\n\t\t}\n\t}, [] );\n\n\tconst highlightBlock = withExperimentalPersistentListViewFeatures\n\t\t? toggleBlockHighlight\n\t\t: () => {};\n\n\tconst onMouseEnter = useCallback( () => {\n\t\tsetIsHovered( true );\n\t\thighlightBlock( clientId, true );\n\t}, [ clientId, setIsHovered, highlightBlock ] );\n\tconst onMouseLeave = useCallback( () => {\n\t\tsetIsHovered( false );\n\t\thighlightBlock( clientId, false );\n\t}, [ clientId, setIsHovered, highlightBlock ] );\n\n\tconst selectEditorBlock = useCallback(\n\t\t( event ) => {\n\t\t\tevent.stopPropagation();\n\t\t\tselectBlock( clientId );\n\t\t},\n\t\t[ clientId, selectBlock ]\n\t);\n\n\tconst toggleExpanded = useCallback(\n\t\t( event ) => {\n\t\t\tevent.stopPropagation();\n\t\t\tif ( isExpanded === true ) {\n\t\t\t\tcollapse( clientId );\n\t\t\t} else if ( isExpanded === false ) {\n\t\t\t\texpand( clientId );\n\t\t\t}\n\t\t},\n\t\t[ clientId, expand, collapse, isExpanded ]\n\t);\n\n\tconst showBlockActions =\n\t\twithExperimentalFeatures &&\n\t\t//hide actions for blocks like core/widget-areas\n\t\t( ! hideContainerBlockActions ||\n\t\t\t( hideContainerBlockActions && level > 1 ) );\n\n\tconst hideBlockActions = withExperimentalFeatures && ! showBlockActions;\n\n\tlet colSpan;\n\tif ( hasRenderedMovers ) {\n\t\tcolSpan = 2;\n\t} else if ( hideBlockActions ) {\n\t\tcolSpan = 3;\n\t}\n\n\tconst classes = classnames( {\n\t\t'is-selected': isSelected,\n\t\t'is-branch-selected':\n\t\t\twithExperimentalPersistentListViewFeatures && isBranchSelected,\n\t\t'is-dragging': isDragged,\n\t\t'has-single-cell': hideBlockActions,\n\t} );\n\n\treturn (\n\t\t<ListViewLeaf\n\t\t\tclassName={ classes }\n\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\tonFocus={ onMouseEnter }\n\t\t\tonBlur={ onMouseLeave }\n\t\t\tlevel={ level }\n\t\t\tposition={ position }\n\t\t\trowCount={ rowCount }\n\t\t\tpath={ path }\n\t\t\tid={ `list-view-block-${ clientId }` }\n\t\t\tdata-block={ clientId }\n\t\t\tisExpanded={ isExpanded }\n\t\t>\n\t\t\t<TreeGridCell\n\t\t\t\tclassName=\"block-editor-list-view-block__contents-cell\"\n\t\t\t\tcolSpan={ colSpan }\n\t\t\t\tref={ cellRef }\n\t\t\t>\n\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t<div className=\"block-editor-list-view-block__contents-container\">\n\t\t\t\t\t\t<ListViewBlockContents\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\tonClick={ selectEditorBlock }\n\t\t\t\t\t\t\tonToggleExpanded={ toggleExpanded }\n\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\tsiblingBlockCount={ siblingBlockCount }\n\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</TreeGridCell>\n\t\t\t{ hasRenderedMovers && (\n\t\t\t\t<>\n\t\t\t\t\t<TreeGridCell\n\t\t\t\t\t\tclassName={ moverCellClassName }\n\t\t\t\t\t\twithoutGridItem\n\t\t\t\t\t>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverUpButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverDownButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t</TreeGridCell>\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ showBlockActions && (\n\t\t\t\t<TreeGridCell className={ listViewBlockSettingsClassName }>\n\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t<BlockSettingsDropdown\n\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\t\tref,\n\t\t\t\t\t\t\t\tclassName: 'block-editor-list-view-block__menu',\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\tonFocus,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tdisableOpenOnArrowDown\n\t\t\t\t\t\t\t__experimentalSelectBlock={ selectEditorBlock }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</TreeGridCell>\n\t\t\t) }\n\t\t</ListViewLeaf>\n\t);\n}\n\nexport default memo( ListViewBlock );\n"]}
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = ListViewBranch;
8
+ exports.default = void 0;
9
9
 
10
10
  var _element = require("@wordpress/element");
11
11
 
@@ -15,12 +15,10 @@ var _data = require("@wordpress/data");
15
15
 
16
16
  var _block = _interopRequireDefault(require("./block"));
17
17
 
18
- var _appender = _interopRequireDefault(require("./appender"));
18
+ var _context = require("./context");
19
19
 
20
20
  var _utils = require("./utils");
21
21
 
22
- var _context = require("./context");
23
-
24
22
  /**
25
23
  * External dependencies
26
24
  */
@@ -32,121 +30,142 @@ var _context = require("./context");
32
30
  /**
33
31
  * Internal dependencies
34
32
  */
33
+
34
+ /**
35
+ * Given a block, returns the total number of blocks in that subtree. This is used to help determine
36
+ * the list position of a block.
37
+ *
38
+ * When a block is collapsed, we do not count their children as part of that total. In the current drag
39
+ * implementation dragged blocks and their children are not counted.
40
+ *
41
+ * @param {Object} block block tree
42
+ * @param {Object} expandedState state that notes which branches are collapsed
43
+ * @param {Array} draggedClientIds a list of dragged client ids
44
+ * @return {number} block count
45
+ */
46
+ function countBlocks(block, expandedState, draggedClientIds) {
47
+ var _expandedState$block$;
48
+
49
+ const isDragged = draggedClientIds === null || draggedClientIds === void 0 ? void 0 : draggedClientIds.includes(block.clientId);
50
+
51
+ if (isDragged) {
52
+ return 0;
53
+ }
54
+
55
+ const isExpanded = (_expandedState$block$ = expandedState[block.clientId]) !== null && _expandedState$block$ !== void 0 ? _expandedState$block$ : true;
56
+
57
+ if (isExpanded) {
58
+ return 1 + block.innerBlocks.reduce(countReducer(expandedState, draggedClientIds), 0);
59
+ }
60
+
61
+ return 1;
62
+ }
63
+
64
+ const countReducer = (expandedState, draggedClientIds) => (count, block) => {
65
+ var _expandedState$block$2;
66
+
67
+ const isDragged = draggedClientIds === null || draggedClientIds === void 0 ? void 0 : draggedClientIds.includes(block.clientId);
68
+
69
+ if (isDragged) {
70
+ return count;
71
+ }
72
+
73
+ const isExpanded = (_expandedState$block$2 = expandedState[block.clientId]) !== null && _expandedState$block$2 !== void 0 ? _expandedState$block$2 : true;
74
+
75
+ if (isExpanded && block.innerBlocks.length > 0) {
76
+ return count + countBlocks(block, expandedState, draggedClientIds);
77
+ }
78
+
79
+ return count + 1;
80
+ };
81
+
35
82
  function ListViewBranch(props) {
36
83
  const {
37
84
  blocks,
38
85
  selectBlock,
39
- showAppender,
40
86
  showBlockMovers,
41
87
  showNestedBlocks,
42
- parentBlockClientId,
88
+ selectedClientIds,
43
89
  level = 1,
44
- terminatedLevels = [],
45
- path = [],
90
+ path = '',
46
91
  isBranchSelected = false,
47
- isLastOfBranch = false
92
+ listPosition = 0,
93
+ fixedListWindow
48
94
  } = props;
49
95
  const {
50
96
  expandedState,
51
- expand,
52
- collapse,
53
97
  draggedClientIds,
54
- selectedClientIds
98
+ __experimentalPersistentListViewFeatures
55
99
  } = (0, _context.useListViewContext)();
56
- const isTreeRoot = !parentBlockClientId;
57
100
  const filteredBlocks = (0, _lodash.compact)(blocks);
58
-
59
- const itemHasAppender = parentClientId => showAppender && !isTreeRoot && (0, _utils.isClientIdSelected)(parentClientId, selectedClientIds);
60
-
61
- const hasAppender = itemHasAppender(parentBlockClientId); // Add +1 to the rowCount to take the block appender into account.
62
-
63
101
  const blockCount = filteredBlocks.length;
64
- const rowCount = hasAppender ? blockCount + 1 : blockCount;
65
- const appenderPosition = rowCount;
66
- return (0, _element.createElement)(_element.Fragment, null, (0, _lodash.map)(filteredBlocks, (block, index) => {
102
+ let nextPosition = listPosition;
103
+ return (0, _element.createElement)(_element.Fragment, null, filteredBlocks.map((block, index) => {
67
104
  var _expandedState$client;
68
105
 
69
106
  const {
70
107
  clientId,
71
108
  innerBlocks
72
109
  } = block;
110
+
111
+ if (index > 0) {
112
+ nextPosition += countBlocks(filteredBlocks[index - 1], expandedState, draggedClientIds);
113
+ }
114
+
115
+ const usesWindowing = __experimentalPersistentListViewFeatures;
116
+ const {
117
+ itemInView
118
+ } = fixedListWindow;
119
+ const blockInView = !usesWindowing || itemInView(nextPosition);
73
120
  const position = index + 1;
74
- const isLastRowAtLevel = rowCount === position;
75
- const updatedTerminatedLevels = isLastRowAtLevel ? [...terminatedLevels, level] : terminatedLevels;
76
- const updatedPath = [...path, position];
121
+ const updatedPath = path.length > 0 ? `${path}_${position}` : `${position}`;
77
122
  const hasNestedBlocks = showNestedBlocks && !!innerBlocks && !!innerBlocks.length;
78
- const hasNestedAppender = itemHasAppender(clientId);
79
- const hasNestedBranch = hasNestedBlocks || hasNestedAppender;
80
- const isSelected = (0, _utils.isClientIdSelected)(clientId, selectedClientIds);
81
- const isSelectedBranch = isBranchSelected || isSelected && hasNestedBranch; // Logic needed to target the last item of a selected branch which might be deeply nested.
82
- // This is currently only needed for styling purposes. See: `.is-last-of-selected-branch`.
83
-
84
- const isLastBlock = index === blockCount - 1;
85
- const isLast = isSelected || isLastOfBranch && isLastBlock;
86
- const isLastOfSelectedBranch = isLastOfBranch && !hasNestedBranch && isLastBlock;
87
- const isExpanded = hasNestedBranch ? (_expandedState$client = expandedState[clientId]) !== null && _expandedState$client !== void 0 ? _expandedState$client : true : undefined;
88
-
89
- const selectBlockWithClientId = event => {
90
- event.stopPropagation();
91
- selectBlock(clientId);
92
- };
93
-
94
- const toggleExpanded = event => {
95
- event.stopPropagation();
96
-
97
- if (isExpanded === true) {
98
- collapse(clientId);
99
- } else if (isExpanded === false) {
100
- expand(clientId);
101
- }
102
- }; // Make updates to the selected or dragged blocks synchronous,
123
+ const isExpanded = hasNestedBlocks ? (_expandedState$client = expandedState[clientId]) !== null && _expandedState$client !== void 0 ? _expandedState$client : true : undefined;
124
+ const isDragged = !!(draggedClientIds !== null && draggedClientIds !== void 0 && draggedClientIds.includes(clientId));
125
+ const showBlock = isDragged || blockInView; // Make updates to the selected or dragged blocks synchronous,
103
126
  // but asynchronous for any other block.
104
127
 
105
-
106
- const isDragged = !!(draggedClientIds !== null && draggedClientIds !== void 0 && draggedClientIds.includes(clientId));
128
+ const isSelected = (0, _utils.isClientIdSelected)(clientId, selectedClientIds);
129
+ const isSelectedBranch = isBranchSelected || isSelected && hasNestedBlocks;
107
130
  return (0, _element.createElement)(_data.AsyncModeProvider, {
108
131
  key: clientId,
109
132
  value: !isSelected
110
- }, (0, _element.createElement)(_block.default, {
133
+ }, showBlock && (0, _element.createElement)(_block.default, {
111
134
  block: block,
112
- onClick: selectBlockWithClientId,
113
- onToggleExpanded: toggleExpanded,
114
- isDragged: isDragged,
135
+ selectBlock: selectBlock,
115
136
  isSelected: isSelected,
116
137
  isBranchSelected: isSelectedBranch,
117
- isLastOfSelectedBranch: isLastOfSelectedBranch,
138
+ isDragged: isDragged,
118
139
  level: level,
119
140
  position: position,
120
- rowCount: rowCount,
141
+ rowCount: blockCount,
121
142
  siblingBlockCount: blockCount,
122
143
  showBlockMovers: showBlockMovers,
123
- terminatedLevels: terminatedLevels,
124
144
  path: updatedPath,
125
- isExpanded: isExpanded
126
- }), hasNestedBranch && isExpanded && !isDragged && (0, _element.createElement)(ListViewBranch, {
145
+ isExpanded: isExpanded,
146
+ listPosition: nextPosition
147
+ }), !showBlock && (0, _element.createElement)("tr", null, (0, _element.createElement)("td", {
148
+ className: "block-editor-list-view-placeholder"
149
+ })), hasNestedBlocks && isExpanded && !isDragged && (0, _element.createElement)(ListViewBranch, {
127
150
  blocks: innerBlocks,
128
151
  selectBlock: selectBlock,
129
- isBranchSelected: isSelectedBranch,
130
- isLastOfBranch: isLast,
131
- showAppender: showAppender,
132
152
  showBlockMovers: showBlockMovers,
133
153
  showNestedBlocks: showNestedBlocks,
134
- parentBlockClientId: clientId,
135
154
  level: level + 1,
136
- terminatedLevels: updatedTerminatedLevels,
137
- path: updatedPath
155
+ path: updatedPath,
156
+ listPosition: nextPosition + 1,
157
+ fixedListWindow: fixedListWindow,
158
+ isBranchSelected: isSelectedBranch,
159
+ selectedClientIds: selectedClientIds
138
160
  }));
139
- }), hasAppender && (0, _element.createElement)(_appender.default, {
140
- parentBlockClientId: parentBlockClientId,
141
- position: rowCount,
142
- rowCount: appenderPosition,
143
- level: level,
144
- terminatedLevels: terminatedLevels,
145
- path: [...path, appenderPosition]
146
161
  }));
147
162
  }
148
163
 
149
164
  ListViewBranch.defaultProps = {
150
165
  selectBlock: () => {}
151
166
  };
167
+
168
+ var _default = (0, _element.memo)(ListViewBranch);
169
+
170
+ exports.default = _default;
152
171
  //# sourceMappingURL=branch.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/branch.js"],"names":["ListViewBranch","props","blocks","selectBlock","showAppender","showBlockMovers","showNestedBlocks","parentBlockClientId","level","terminatedLevels","path","isBranchSelected","isLastOfBranch","expandedState","expand","collapse","draggedClientIds","selectedClientIds","isTreeRoot","filteredBlocks","itemHasAppender","parentClientId","hasAppender","blockCount","length","rowCount","appenderPosition","block","index","clientId","innerBlocks","position","isLastRowAtLevel","updatedTerminatedLevels","updatedPath","hasNestedBlocks","hasNestedAppender","hasNestedBranch","isSelected","isSelectedBranch","isLastBlock","isLast","isLastOfSelectedBranch","isExpanded","undefined","selectBlockWithClientId","event","stopPropagation","toggleExpanded","isDragged","includes","defaultProps"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { map, compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { AsyncModeProvider } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport ListViewBlock from './block';\nimport ListViewAppender from './appender';\nimport { isClientIdSelected } from './utils';\nimport { useListViewContext } from './context';\n\nexport default function ListViewBranch( props ) {\n\tconst {\n\t\tblocks,\n\t\tselectBlock,\n\t\tshowAppender,\n\t\tshowBlockMovers,\n\t\tshowNestedBlocks,\n\t\tparentBlockClientId,\n\t\tlevel = 1,\n\t\tterminatedLevels = [],\n\t\tpath = [],\n\t\tisBranchSelected = false,\n\t\tisLastOfBranch = false,\n\t} = props;\n\n\tconst {\n\t\texpandedState,\n\t\texpand,\n\t\tcollapse,\n\t\tdraggedClientIds,\n\t\tselectedClientIds,\n\t} = useListViewContext();\n\n\tconst isTreeRoot = ! parentBlockClientId;\n\tconst filteredBlocks = compact( blocks );\n\tconst itemHasAppender = ( parentClientId ) =>\n\t\tshowAppender &&\n\t\t! isTreeRoot &&\n\t\tisClientIdSelected( parentClientId, selectedClientIds );\n\tconst hasAppender = itemHasAppender( parentBlockClientId );\n\t// Add +1 to the rowCount to take the block appender into account.\n\tconst blockCount = filteredBlocks.length;\n\tconst rowCount = hasAppender ? blockCount + 1 : blockCount;\n\tconst appenderPosition = rowCount;\n\n\treturn (\n\t\t<>\n\t\t\t{ map( filteredBlocks, ( block, index ) => {\n\t\t\t\tconst { clientId, innerBlocks } = block;\n\t\t\t\tconst position = index + 1;\n\t\t\t\tconst isLastRowAtLevel = rowCount === position;\n\t\t\t\tconst updatedTerminatedLevels = isLastRowAtLevel\n\t\t\t\t\t? [ ...terminatedLevels, level ]\n\t\t\t\t\t: terminatedLevels;\n\t\t\t\tconst updatedPath = [ ...path, position ];\n\t\t\t\tconst hasNestedBlocks =\n\t\t\t\t\tshowNestedBlocks && !! innerBlocks && !! innerBlocks.length;\n\t\t\t\tconst hasNestedAppender = itemHasAppender( clientId );\n\t\t\t\tconst hasNestedBranch = hasNestedBlocks || hasNestedAppender;\n\n\t\t\t\tconst isSelected = isClientIdSelected(\n\t\t\t\t\tclientId,\n\t\t\t\t\tselectedClientIds\n\t\t\t\t);\n\t\t\t\tconst isSelectedBranch =\n\t\t\t\t\tisBranchSelected || ( isSelected && hasNestedBranch );\n\n\t\t\t\t// Logic needed to target the last item of a selected branch which might be deeply nested.\n\t\t\t\t// This is currently only needed for styling purposes. See: `.is-last-of-selected-branch`.\n\t\t\t\tconst isLastBlock = index === blockCount - 1;\n\t\t\t\tconst isLast = isSelected || ( isLastOfBranch && isLastBlock );\n\t\t\t\tconst isLastOfSelectedBranch =\n\t\t\t\t\tisLastOfBranch && ! hasNestedBranch && isLastBlock;\n\n\t\t\t\tconst isExpanded = hasNestedBranch\n\t\t\t\t\t? expandedState[ clientId ] ?? true\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst selectBlockWithClientId = ( event ) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tselectBlock( clientId );\n\t\t\t\t};\n\n\t\t\t\tconst toggleExpanded = ( event ) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tif ( isExpanded === true ) {\n\t\t\t\t\t\tcollapse( clientId );\n\t\t\t\t\t} else if ( isExpanded === false ) {\n\t\t\t\t\t\texpand( clientId );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Make updates to the selected or dragged blocks synchronous,\n\t\t\t\t// but asynchronous for any other block.\n\t\t\t\tconst isDragged = !! draggedClientIds?.includes( clientId );\n\n\t\t\t\treturn (\n\t\t\t\t\t<AsyncModeProvider key={ clientId } value={ ! isSelected }>\n\t\t\t\t\t\t<ListViewBlock\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\tonClick={ selectBlockWithClientId }\n\t\t\t\t\t\t\tonToggleExpanded={ toggleExpanded }\n\t\t\t\t\t\t\tisDragged={ isDragged }\n\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\tisLastOfSelectedBranch={ isLastOfSelectedBranch }\n\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\trowCount={ rowCount }\n\t\t\t\t\t\t\tsiblingBlockCount={ blockCount }\n\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\tterminatedLevels={ terminatedLevels }\n\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ hasNestedBranch && isExpanded && ! isDragged && (\n\t\t\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\t\t\tblocks={ innerBlocks }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tisLastOfBranch={ isLast }\n\t\t\t\t\t\t\t\tshowAppender={ showAppender }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tshowNestedBlocks={ showNestedBlocks }\n\t\t\t\t\t\t\t\tparentBlockClientId={ clientId }\n\t\t\t\t\t\t\t\tlevel={ level + 1 }\n\t\t\t\t\t\t\t\tterminatedLevels={ updatedTerminatedLevels }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</AsyncModeProvider>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ hasAppender && (\n\t\t\t\t<ListViewAppender\n\t\t\t\t\tparentBlockClientId={ parentBlockClientId }\n\t\t\t\t\tposition={ rowCount }\n\t\t\t\t\trowCount={ appenderPosition }\n\t\t\t\t\tlevel={ level }\n\t\t\t\t\tterminatedLevels={ terminatedLevels }\n\t\t\t\t\tpath={ [ ...path, appenderPosition ] }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nListViewBranch.defaultProps = {\n\tselectBlock: () => {},\n};\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/branch.js"],"names":["countBlocks","block","expandedState","draggedClientIds","isDragged","includes","clientId","isExpanded","innerBlocks","reduce","countReducer","count","length","ListViewBranch","props","blocks","selectBlock","showBlockMovers","showNestedBlocks","selectedClientIds","level","path","isBranchSelected","listPosition","fixedListWindow","__experimentalPersistentListViewFeatures","filteredBlocks","blockCount","nextPosition","map","index","usesWindowing","itemInView","blockInView","position","updatedPath","hasNestedBlocks","undefined","showBlock","isSelected","isSelectedBranch","defaultProps"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { memo } from '@wordpress/element';\nimport { AsyncModeProvider } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport ListViewBlock from './block';\nimport { useListViewContext } from './context';\nimport { isClientIdSelected } from './utils';\n\n/**\n * Given a block, returns the total number of blocks in that subtree. This is used to help determine\n * the list position of a block.\n *\n * When a block is collapsed, we do not count their children as part of that total. In the current drag\n * implementation dragged blocks and their children are not counted.\n *\n * @param {Object} block block tree\n * @param {Object} expandedState state that notes which branches are collapsed\n * @param {Array} draggedClientIds a list of dragged client ids\n * @return {number} block count\n */\nfunction countBlocks( block, expandedState, draggedClientIds ) {\n\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\tif ( isDragged ) {\n\t\treturn 0;\n\t}\n\tconst isExpanded = expandedState[ block.clientId ] ?? true;\n\tif ( isExpanded ) {\n\t\treturn (\n\t\t\t1 +\n\t\t\tblock.innerBlocks.reduce(\n\t\t\t\tcountReducer( expandedState, draggedClientIds ),\n\t\t\t\t0\n\t\t\t)\n\t\t);\n\t}\n\treturn 1;\n}\nconst countReducer = ( expandedState, draggedClientIds ) => (\n\tcount,\n\tblock\n) => {\n\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\tif ( isDragged ) {\n\t\treturn count;\n\t}\n\tconst isExpanded = expandedState[ block.clientId ] ?? true;\n\tif ( isExpanded && block.innerBlocks.length > 0 ) {\n\t\treturn count + countBlocks( block, expandedState, draggedClientIds );\n\t}\n\treturn count + 1;\n};\n\nfunction ListViewBranch( props ) {\n\tconst {\n\t\tblocks,\n\t\tselectBlock,\n\t\tshowBlockMovers,\n\t\tshowNestedBlocks,\n\t\tselectedClientIds,\n\t\tlevel = 1,\n\t\tpath = '',\n\t\tisBranchSelected = false,\n\t\tlistPosition = 0,\n\t\tfixedListWindow,\n\t} = props;\n\n\tconst {\n\t\texpandedState,\n\t\tdraggedClientIds,\n\t\t__experimentalPersistentListViewFeatures,\n\t} = useListViewContext();\n\n\tconst filteredBlocks = compact( blocks );\n\tconst blockCount = filteredBlocks.length;\n\tlet nextPosition = listPosition;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredBlocks.map( ( block, index ) => {\n\t\t\t\tconst { clientId, innerBlocks } = block;\n\n\t\t\t\tif ( index > 0 ) {\n\t\t\t\t\tnextPosition += countBlocks(\n\t\t\t\t\t\tfilteredBlocks[ index - 1 ],\n\t\t\t\t\t\texpandedState,\n\t\t\t\t\t\tdraggedClientIds\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst usesWindowing = __experimentalPersistentListViewFeatures;\n\n\t\t\t\tconst { itemInView } = fixedListWindow;\n\n\t\t\t\tconst blockInView =\n\t\t\t\t\t! usesWindowing || itemInView( nextPosition );\n\n\t\t\t\tconst position = index + 1;\n\t\t\t\tconst updatedPath =\n\t\t\t\t\tpath.length > 0\n\t\t\t\t\t\t? `${ path }_${ position }`\n\t\t\t\t\t\t: `${ position }`;\n\t\t\t\tconst hasNestedBlocks =\n\t\t\t\t\tshowNestedBlocks && !! innerBlocks && !! innerBlocks.length;\n\n\t\t\t\tconst isExpanded = hasNestedBlocks\n\t\t\t\t\t? expandedState[ clientId ] ?? true\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst isDragged = !! draggedClientIds?.includes( clientId );\n\n\t\t\t\tconst showBlock = isDragged || blockInView;\n\n\t\t\t\t// Make updates to the selected or dragged blocks synchronous,\n\t\t\t\t// but asynchronous for any other block.\n\t\t\t\tconst isSelected = isClientIdSelected(\n\t\t\t\t\tclientId,\n\t\t\t\t\tselectedClientIds\n\t\t\t\t);\n\t\t\t\tconst isSelectedBranch =\n\t\t\t\t\tisBranchSelected || ( isSelected && hasNestedBlocks );\n\t\t\t\treturn (\n\t\t\t\t\t<AsyncModeProvider key={ clientId } value={ ! isSelected }>\n\t\t\t\t\t\t{ showBlock && (\n\t\t\t\t\t\t\t<ListViewBlock\n\t\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tisDragged={ isDragged }\n\t\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\t\trowCount={ blockCount }\n\t\t\t\t\t\t\t\tsiblingBlockCount={ blockCount }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\t\t\tlistPosition={ nextPosition }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ ! showBlock && (\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td className=\"block-editor-list-view-placeholder\" />\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasNestedBlocks && isExpanded && ! isDragged && (\n\t\t\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\t\t\tblocks={ innerBlocks }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tshowNestedBlocks={ showNestedBlocks }\n\t\t\t\t\t\t\t\tlevel={ level + 1 }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t\tlistPosition={ nextPosition + 1 }\n\t\t\t\t\t\t\t\tfixedListWindow={ fixedListWindow }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</AsyncModeProvider>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n\nListViewBranch.defaultProps = {\n\tselectBlock: () => {},\n};\n\nexport default memo( ListViewBranch );\n"]}
@@ -69,29 +69,44 @@ const expanded = (state, action) => {
69
69
  * @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.
70
70
  * @param {Function} props.onSelect Block selection callback.
71
71
  * @param {boolean} props.showNestedBlocks Flag to enable displaying nested blocks.
72
- * @param {boolean} props.showOnlyCurrentHierarchy Flag to limit the list to the current hierarchy of blocks.
72
+ * @param {boolean} props.showBlockMovers Flag to enable block movers
73
73
  * @param {boolean} props.__experimentalFeatures Flag to enable experimental features.
74
74
  * @param {boolean} props.__experimentalPersistentListViewFeatures Flag to enable features for the Persistent List View experiment.
75
+ * @param {boolean} props.__experimentalHideContainerBlockActions Flag to hide actions of top level blocks (like core/widget-area)
75
76
  * @param {Object} ref Forwarded ref
76
77
  */
77
78
 
78
79
 
79
80
  function ListView({
80
81
  blocks,
81
- showOnlyCurrentHierarchy,
82
82
  onSelect = noop,
83
83
  __experimentalFeatures,
84
84
  __experimentalPersistentListViewFeatures,
85
+ __experimentalHideContainerBlockActions,
86
+ showNestedBlocks,
87
+ showBlockMovers,
85
88
  ...props
86
89
  }, ref) {
87
90
  const {
88
91
  clientIdsTree,
89
- selectedClientIds,
90
- draggedClientIds
91
- } = (0, _useListViewClientIds.default)(blocks, showOnlyCurrentHierarchy, __experimentalPersistentListViewFeatures);
92
+ draggedClientIds,
93
+ selectedClientIds
94
+ } = (0, _useListViewClientIds.default)(blocks);
92
95
  const {
93
96
  selectBlock
94
97
  } = (0, _data.useDispatch)(_store.store);
98
+ const {
99
+ visibleBlockCount
100
+ } = (0, _data.useSelect)(select => {
101
+ const {
102
+ getGlobalBlockCount,
103
+ getClientIdsOfDescendants
104
+ } = select(_store.store);
105
+ const draggedBlockCount = (draggedClientIds === null || draggedClientIds === void 0 ? void 0 : draggedClientIds.length) > 0 ? getClientIdsOfDescendants(draggedClientIds).length + 1 : 0;
106
+ return {
107
+ visibleBlockCount: getGlobalBlockCount() - draggedBlockCount
108
+ };
109
+ }, [draggedClientIds]);
95
110
  const selectEditorBlock = (0, _element.useCallback)(clientId => {
96
111
  selectBlock(clientId);
97
112
  onSelect(clientId);
@@ -106,7 +121,14 @@ function ListView({
106
121
  const isMounted = (0, _element.useRef)(false);
107
122
  (0, _element.useEffect)(() => {
108
123
  isMounted.current = true;
109
- }, []);
124
+ }, []); // List View renders a fixed number of items and relies on each having a fixed item height of 36px.
125
+ // If this value changes, we should also change the itemHeight value set in useFixedWindowList.
126
+ // See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.
127
+
128
+ const [fixedListWindow] = (0, _compose.__experimentalUseFixedWindowList)(elementRef, 36, visibleBlockCount, {
129
+ useWindowing: __experimentalPersistentListViewFeatures,
130
+ windowOverscan: 40
131
+ });
110
132
  const expand = (0, _element.useCallback)(clientId => {
111
133
  if (!clientId) {
112
134
  return;
@@ -127,29 +149,26 @@ function ListView({
127
149
  clientId
128
150
  });
129
151
  }, [setExpandedState]);
130
-
131
- const expandRow = row => {
152
+ const expandRow = (0, _element.useCallback)(row => {
132
153
  var _row$dataset;
133
154
 
134
155
  expand(row === null || row === void 0 ? void 0 : (_row$dataset = row.dataset) === null || _row$dataset === void 0 ? void 0 : _row$dataset.block);
135
- };
136
-
137
- const collapseRow = row => {
156
+ }, [expand]);
157
+ const collapseRow = (0, _element.useCallback)(row => {
138
158
  var _row$dataset2;
139
159
 
140
160
  collapse(row === null || row === void 0 ? void 0 : (_row$dataset2 = row.dataset) === null || _row$dataset2 === void 0 ? void 0 : _row$dataset2.block);
141
- };
142
-
161
+ }, [collapse]);
143
162
  const contextValue = (0, _element.useMemo)(() => ({
144
163
  __experimentalFeatures,
145
164
  __experimentalPersistentListViewFeatures,
165
+ __experimentalHideContainerBlockActions,
146
166
  isTreeGridMounted: isMounted.current,
147
167
  draggedClientIds,
148
- selectedClientIds,
149
168
  expandedState,
150
169
  expand,
151
170
  collapse
152
- }), [__experimentalFeatures, __experimentalPersistentListViewFeatures, isMounted.current, draggedClientIds, selectedClientIds, expandedState, expand, collapse]);
171
+ }), [__experimentalFeatures, __experimentalPersistentListViewFeatures, __experimentalHideContainerBlockActions, isMounted.current, draggedClientIds, expandedState, expand, collapse]);
153
172
  return (0, _element.createElement)(_data.AsyncModeProvider, {
154
173
  value: true
155
174
  }, (0, _element.createElement)(_dropIndicator.default, {
@@ -165,7 +184,11 @@ function ListView({
165
184
  value: contextValue
166
185
  }, (0, _element.createElement)(_branch.default, (0, _extends2.default)({
167
186
  blocks: clientIdsTree,
168
- selectBlock: selectEditorBlock
187
+ selectBlock: selectEditorBlock,
188
+ showNestedBlocks: showNestedBlocks,
189
+ showBlockMovers: showBlockMovers,
190
+ fixedListWindow: fixedListWindow,
191
+ selectedClientIds: selectedClientIds
169
192
  }, props)))));
170
193
  }
171
194