@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
@@ -9,7 +9,6 @@ import { createReduxStore, registerStore } from '@wordpress/data';
9
9
  import reducer from './reducer';
10
10
  import * as selectors from './selectors';
11
11
  import * as actions from './actions';
12
- import controls from './controls';
13
12
  import { STORE_NAME } from './constants';
14
13
 
15
14
  /**
@@ -23,7 +22,7 @@ export const storeConfig = {
23
22
  reducer,
24
23
  selectors,
25
24
  actions,
26
- controls,
25
+ __experimentalUseThunks: true,
27
26
  };
28
27
 
29
28
  /**
@@ -240,32 +240,40 @@ function buildBlockTree( state, blocks ) {
240
240
  return result;
241
241
  }
242
242
 
243
- function updateParentInnerBlocksInTree( state, tree, updatedClientIds ) {
244
- const clientIds = new Set( [] );
243
+ function updateParentInnerBlocksInTree(
244
+ state,
245
+ tree,
246
+ updatedClientIds,
247
+ updateChildrenOfUpdatedClientIds = false
248
+ ) {
249
+ const uncontrolledParents = new Set( [] );
245
250
  const controlledParents = new Set();
246
251
  for ( const clientId of updatedClientIds ) {
247
- let current = clientId;
252
+ let current = updateChildrenOfUpdatedClientIds
253
+ ? clientId
254
+ : state.parents[ clientId ];
248
255
  do {
249
256
  if ( state.controlledInnerBlocks[ current ] ) {
250
- controlledParents.add( current );
257
+ // Should stop on controlled blocks.
251
258
  // If we reach a controlled parent, break out of the loop.
259
+ controlledParents.add( current );
252
260
  break;
253
261
  } else {
254
- clientIds.add( current );
262
+ // else continue traversing up through parents.
263
+ uncontrolledParents.add( current );
264
+ current = state.parents[ current ];
255
265
  }
256
- // Should stop on controlled blocks.
257
- current = state.parents[ current ];
258
266
  } while ( current !== undefined );
259
267
  }
260
268
 
261
269
  // To make sure the order of assignments doesn't matter,
262
270
  // we first create empty objects and mutates the inner blocks later.
263
- for ( const clientId of clientIds ) {
271
+ for ( const clientId of uncontrolledParents ) {
264
272
  tree[ clientId ] = {
265
273
  ...tree[ clientId ],
266
274
  };
267
275
  }
268
- for ( const clientId of clientIds ) {
276
+ for ( const clientId of uncontrolledParents ) {
269
277
  tree[ clientId ].innerBlocks = ( state.order[ clientId ] || [] ).map(
270
278
  ( subClientId ) => tree[ subClientId ]
271
279
  );
@@ -311,7 +319,8 @@ const withBlockTree = ( reducer ) => ( state = {}, action ) => {
311
319
  ...newState.tree,
312
320
  ...subTree,
313
321
  },
314
- action.rootClientId ? [ action.rootClientId ] : [ '' ]
322
+ action.rootClientId ? [ action.rootClientId ] : [ '' ],
323
+ true
315
324
  );
316
325
  break;
317
326
  }
@@ -321,11 +330,13 @@ const withBlockTree = ( reducer ) => ( state = {}, action ) => {
321
330
  {
322
331
  ...newState.tree,
323
332
  [ action.clientId ]: {
333
+ ...newState.tree[ action.clientId ],
324
334
  ...newState.byClientId[ action.clientId ],
325
335
  attributes: newState.attributes[ action.clientId ],
326
336
  },
327
337
  },
328
- [ action.clientId ]
338
+ [ action.clientId ],
339
+ false
329
340
  );
330
341
  break;
331
342
  case 'UPDATE_BLOCK_ATTRIBUTES': {
@@ -345,7 +356,8 @@ const withBlockTree = ( reducer ) => ( state = {}, action ) => {
345
356
  ...newState.tree,
346
357
  ...newSubTree,
347
358
  },
348
- action.clientIds
359
+ action.clientIds,
360
+ false
349
361
  );
350
362
  break;
351
363
  }
@@ -364,7 +376,8 @@ const withBlockTree = ( reducer ) => ( state = {}, action ) => {
364
376
  ),
365
377
  ...subTree,
366
378
  },
367
- action.blocks.map( ( b ) => b.clientId )
379
+ action.blocks.map( ( b ) => b.clientId ),
380
+ false
368
381
  );
369
382
 
370
383
  // If there are no replaced blocks, it means we're removing blocks so we need to update their parent.
@@ -381,7 +394,8 @@ const withBlockTree = ( reducer ) => ( state = {}, action ) => {
381
394
  newState.tree = updateParentInnerBlocksInTree(
382
395
  newState,
383
396
  newState.tree,
384
- parentsOfRemovedBlocks
397
+ parentsOfRemovedBlocks,
398
+ true
385
399
  );
386
400
  break;
387
401
  }
@@ -406,7 +420,8 @@ const withBlockTree = ( reducer ) => ( state = {}, action ) => {
406
420
  )
407
421
  )
408
422
  ),
409
- parentsOfRemovedBlocks
423
+ parentsOfRemovedBlocks,
424
+ true
410
425
  );
411
426
  break;
412
427
  case 'MOVE_BLOCKS_TO_POSITION': {
@@ -423,7 +438,8 @@ const withBlockTree = ( reducer ) => ( state = {}, action ) => {
423
438
  newState.tree = updateParentInnerBlocksInTree(
424
439
  newState,
425
440
  newState.tree,
426
- updatedBlockUids
441
+ updatedBlockUids,
442
+ true
427
443
  );
428
444
  break;
429
445
  }
@@ -435,7 +451,8 @@ const withBlockTree = ( reducer ) => ( state = {}, action ) => {
435
451
  newState.tree = updateParentInnerBlocksInTree(
436
452
  newState,
437
453
  newState.tree,
438
- updatedBlockUids
454
+ updatedBlockUids,
455
+ true
439
456
  );
440
457
  break;
441
458
  }
@@ -462,7 +479,8 @@ const withBlockTree = ( reducer ) => ( state = {}, action ) => {
462
479
  return result;
463
480
  }, {} ),
464
481
  },
465
- updatedBlockUids
482
+ updatedBlockUids,
483
+ false
466
484
  );
467
485
  }
468
486
  }
@@ -1563,20 +1563,55 @@ export const getInserterItems = createSelector(
1563
1563
  buildScope: 'inserter',
1564
1564
  } );
1565
1565
 
1566
- const buildReusableBlockInserterItem = ( reusableBlock ) => {
1567
- const id = `core/block/${ reusableBlock.id }`;
1566
+ /*
1567
+ * Matches block comment delimiters amid serialized content.
1568
+ *
1569
+ * @see `tokenizer` in `@wordpress/block-serialization-default-parser`
1570
+ * package
1571
+ *
1572
+ * blockParserTokenizer differs from the original tokenizer in the
1573
+ * following ways:
1574
+ *
1575
+ * - removed global flag (/g)
1576
+ * - prepended ^\s*
1577
+ *
1578
+ */
1579
+ const blockParserTokenizer = /^\s*<!--\s+(\/)?wp:([a-z][a-z0-9_-]*\/)?([a-z][a-z0-9_-]*)\s+({(?:(?=([^}]+|}+(?=})|(?!}\s+\/?-->)[^])*)\5|[^]*?)}\s+)?(\/)?-->/;
1568
1580
 
1569
- const referencedBlocks = __experimentalGetParsedReusableBlock(
1570
- state,
1571
- reusableBlock.id
1572
- );
1573
- let referencedBlockType;
1574
- if ( referencedBlocks.length === 1 ) {
1575
- referencedBlockType = getBlockType(
1576
- referencedBlocks[ 0 ].name
1577
- );
1581
+ const buildReusableBlockInserterItem = ( reusableBlock ) => {
1582
+ let icon = symbol;
1583
+
1584
+ /*
1585
+ * Instead of always displaying a generic "symbol" icon for every
1586
+ * reusable block, try to use an icon that represents the first
1587
+ * outermost block contained in the reusable block. This requires
1588
+ * scanning the serialized form of the reusable block to find its
1589
+ * first block delimiter, then looking up the corresponding block
1590
+ * type, if available.
1591
+ */
1592
+ if ( Platform.OS === 'web' ) {
1593
+ const content =
1594
+ typeof reusableBlock.content.raw === 'string'
1595
+ ? reusableBlock.content.raw
1596
+ : reusableBlock.content;
1597
+ const rawBlockMatch = content.match( blockParserTokenizer );
1598
+ if ( rawBlockMatch ) {
1599
+ const [
1600
+ ,
1601
+ ,
1602
+ namespace = 'core/',
1603
+ blockName,
1604
+ ] = rawBlockMatch;
1605
+ const referencedBlockType = getBlockType(
1606
+ namespace + blockName
1607
+ );
1608
+ if ( referencedBlockType ) {
1609
+ icon = referencedBlockType.icon;
1610
+ }
1611
+ }
1578
1612
  }
1579
1613
 
1614
+ const id = `core/block/${ reusableBlock.id }`;
1580
1615
  const { time, count = 0 } = getInsertUsage( state, id ) || {};
1581
1616
  const frecency = calculateFrecency( time, count );
1582
1617
 
@@ -1585,10 +1620,7 @@ export const getInserterItems = createSelector(
1585
1620
  name: 'core/block',
1586
1621
  initialAttributes: { ref: reusableBlock.id },
1587
1622
  title: reusableBlock.title.raw,
1588
- icon:
1589
- referencedBlockType && Platform.OS === 'web'
1590
- ? referencedBlockType.icon
1591
- : symbol,
1623
+ icon,
1592
1624
  category: 'reusable',
1593
1625
  keywords: [],
1594
1626
  isDisabled: false,
@@ -1869,9 +1901,11 @@ const getAllAllowedPatterns = createSelector(
1869
1901
  ( state ) => {
1870
1902
  const patterns = state.settings.__experimentalBlockPatterns;
1871
1903
  const { allowedBlockTypes } = getSettings( state );
1872
- const parsedPatterns = patterns.map( ( { name } ) =>
1873
- __experimentalGetParsedPattern( state, name )
1874
- );
1904
+ const parsedPatterns = patterns
1905
+ .filter( ( { inserter = true } ) => !! inserter )
1906
+ .map( ( { name } ) =>
1907
+ __experimentalGetParsedPattern( state, name )
1908
+ );
1875
1909
  const allowedPatterns = parsedPatterns.filter( ( { blocks } ) =>
1876
1910
  checkAllowListRecursive( blocks, allowedBlockTypes )
1877
1911
  );
@@ -2072,35 +2106,6 @@ export const __experimentalGetBlockListSettingsForBlocks = createSelector(
2072
2106
  ( state ) => [ state.blockListSettings ]
2073
2107
  );
2074
2108
 
2075
- /**
2076
- * Returns the parsed block saved as shared block with the given ID.
2077
- *
2078
- * @param {Object} state Global application state.
2079
- * @param {number|string} ref The shared block's ID.
2080
- *
2081
- * @return {Object} The parsed block.
2082
- */
2083
- export const __experimentalGetParsedReusableBlock = createSelector(
2084
- ( state, ref ) => {
2085
- const reusableBlock = find(
2086
- getReusableBlocks( state ),
2087
- ( block ) => block.id === ref
2088
- );
2089
- if ( ! reusableBlock ) {
2090
- return null;
2091
- }
2092
-
2093
- // Only reusableBlock.content.raw should be used here, `reusableBlock.content` is a
2094
- // workaround until #22127 is fixed.
2095
- return parse(
2096
- typeof reusableBlock.content.raw === 'string'
2097
- ? reusableBlock.content.raw
2098
- : reusableBlock.content
2099
- );
2100
- },
2101
- ( state ) => [ getReusableBlocks( state ) ]
2102
- );
2103
-
2104
2109
  /**
2105
2110
  * Returns the title of a given reusable block
2106
2111
  *