@wordpress/block-editor 11.4.0 → 11.6.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 (400) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/build/components/block-inspector/index.js +11 -10
  3. package/build/components/block-inspector/index.js.map +1 -1
  4. package/build/components/block-inspector/useBlockInspectorAnimationSettings.js +46 -0
  5. package/build/components/block-inspector/useBlockInspectorAnimationSettings.js.map +1 -0
  6. package/build/components/block-list/block-invalid-warning.js +63 -80
  7. package/build/components/block-list/block-invalid-warning.js.map +1 -1
  8. package/build/components/block-lock/modal.js +1 -0
  9. package/build/components/block-lock/modal.js.map +1 -1
  10. package/build/components/block-settings-menu/block-settings-dropdown.js +2 -2
  11. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  12. package/build/components/block-settings-menu-controls/index.js +1 -1
  13. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  14. package/build/components/block-styles/index.js +2 -1
  15. package/build/components/block-styles/index.js.map +1 -1
  16. package/build/components/block-switcher/block-transformations-menu.native.js +1 -0
  17. package/build/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  18. package/build/components/child-layout-control/index.js +107 -0
  19. package/build/components/child-layout-control/index.js.map +1 -0
  20. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +6 -3
  21. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  22. package/build/components/date-format-picker/index.js +3 -3
  23. package/build/components/date-format-picker/index.js.map +1 -1
  24. package/build/components/global-styles/border-panel.js +306 -0
  25. package/build/components/global-styles/border-panel.js.map +1 -0
  26. package/build/components/global-styles/dimensions-panel.js +594 -0
  27. package/build/components/global-styles/dimensions-panel.js.map +1 -0
  28. package/build/components/global-styles/hooks.js +127 -37
  29. package/build/components/global-styles/hooks.js.map +1 -1
  30. package/build/components/global-styles/index.js +36 -2
  31. package/build/components/global-styles/index.js.map +1 -1
  32. package/build/components/global-styles/typography-panel.js +87 -27
  33. package/build/components/global-styles/typography-panel.js.map +1 -1
  34. package/build/components/global-styles/use-global-styles-output.js +21 -14
  35. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  36. package/build/components/global-styles/utils.js +2 -0
  37. package/build/components/global-styles/utils.js.map +1 -1
  38. package/build/components/index.native.js +23 -0
  39. package/build/components/index.native.js.map +1 -1
  40. package/build/components/inserter/index.js +29 -17
  41. package/build/components/inserter/index.js.map +1 -1
  42. package/build/components/inserter/media-tab/hooks.js +10 -11
  43. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  44. package/build/components/inserter/media-tab/media-list.js +5 -108
  45. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  46. package/build/components/inserter/media-tab/media-preview.js +242 -0
  47. package/build/components/inserter/media-tab/media-preview.js.map +1 -0
  48. package/build/components/inserter/menu.js +1 -1
  49. package/build/components/inserter/menu.js.map +1 -1
  50. package/build/components/inserter/quick-inserter.js +4 -2
  51. package/build/components/inserter/quick-inserter.js.map +1 -1
  52. package/build/components/inserter/search-results.js +10 -3
  53. package/build/components/inserter/search-results.js.map +1 -1
  54. package/build/components/inserter/tabs.js +1 -1
  55. package/build/components/inserter/tabs.js.map +1 -1
  56. package/build/components/inspector-controls/block-support-tools-panel.js +1 -1
  57. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  58. package/build/components/inspector-controls/fill.js +38 -9
  59. package/build/components/inspector-controls/fill.js.map +1 -1
  60. package/build/components/link-control/index.js +1 -1
  61. package/build/components/link-control/index.js.map +1 -1
  62. package/build/components/link-control/search-item.js +5 -2
  63. package/build/components/link-control/search-item.js.map +1 -1
  64. package/build/components/link-control/settings-drawer.js +1 -1
  65. package/build/components/link-control/settings-drawer.js.map +1 -1
  66. package/build/components/link-control/settings.js +1 -0
  67. package/build/components/link-control/settings.js.map +1 -1
  68. package/build/components/list-view/block.js +17 -3
  69. package/build/components/list-view/block.js.map +1 -1
  70. package/build/components/list-view/branch.js +2 -2
  71. package/build/components/list-view/branch.js.map +1 -1
  72. package/build/components/list-view/expander.js +2 -1
  73. package/build/components/list-view/expander.js.map +1 -1
  74. package/build/components/list-view/leaf.js +10 -6
  75. package/build/components/list-view/leaf.js.map +1 -1
  76. package/build/components/list-view/use-block-selection.js +1 -2
  77. package/build/components/list-view/use-block-selection.js.map +1 -1
  78. package/build/components/list-view/use-list-view-scroll-into-view.js +51 -0
  79. package/build/components/list-view/use-list-view-scroll-into-view.js.map +1 -0
  80. package/build/components/off-canvas-editor/appender.js +33 -13
  81. package/build/components/off-canvas-editor/appender.js.map +1 -1
  82. package/build/components/off-canvas-editor/branch.js +6 -3
  83. package/build/components/off-canvas-editor/branch.js.map +1 -1
  84. package/build/components/off-canvas-editor/index.js +8 -2
  85. package/build/components/off-canvas-editor/index.js.map +1 -1
  86. package/build/components/off-canvas-editor/leaf-more-menu.js +34 -4
  87. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  88. package/build/components/provider/use-block-sync.js +17 -3
  89. package/build/components/provider/use-block-sync.js.map +1 -1
  90. package/build/components/responsive-block-control/index.js +1 -0
  91. package/build/components/responsive-block-control/index.js.map +1 -1
  92. package/build/components/rich-text/format-toolbar-container.js +0 -3
  93. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  94. package/build/components/rich-text/index.js +9 -43
  95. package/build/components/rich-text/index.js.map +1 -1
  96. package/build/components/rich-text/use-delete.js +73 -0
  97. package/build/components/rich-text/use-delete.js.map +1 -0
  98. package/build/components/rich-text/use-input-rules.js +14 -6
  99. package/build/components/rich-text/use-input-rules.js.map +1 -1
  100. package/build/components/writing-flow/use-selection-observer.js +4 -1
  101. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  102. package/build/hooks/align.js +3 -1
  103. package/build/hooks/align.js.map +1 -1
  104. package/build/hooks/border.js +91 -240
  105. package/build/hooks/border.js.map +1 -1
  106. package/build/hooks/custom-class-name.js +4 -4
  107. package/build/hooks/custom-class-name.js.map +1 -1
  108. package/build/hooks/custom-class-name.native.js +3 -4
  109. package/build/hooks/custom-class-name.native.js.map +1 -1
  110. package/build/hooks/dimensions.js +72 -190
  111. package/build/hooks/dimensions.js.map +1 -1
  112. package/build/hooks/duotone.js +94 -25
  113. package/build/hooks/duotone.js.map +1 -1
  114. package/build/hooks/gap.js +0 -202
  115. package/build/hooks/gap.js.map +1 -1
  116. package/build/hooks/layout.js +33 -27
  117. package/build/hooks/layout.js.map +1 -1
  118. package/build/hooks/margin.js +7 -163
  119. package/build/hooks/margin.js.map +1 -1
  120. package/build/hooks/padding.js +7 -163
  121. package/build/hooks/padding.js.map +1 -1
  122. package/build/hooks/supports.js +7 -1
  123. package/build/hooks/supports.js.map +1 -1
  124. package/build/hooks/typography.js +52 -66
  125. package/build/hooks/typography.js.map +1 -1
  126. package/build/hooks/utils.js +101 -0
  127. package/build/hooks/utils.js.map +1 -1
  128. package/build/layouts/constrained.js +6 -2
  129. package/build/layouts/constrained.js.map +1 -1
  130. package/build/layouts/flex.js +1 -0
  131. package/build/layouts/flex.js.map +1 -1
  132. package/build/private-apis.js +4 -1
  133. package/build/private-apis.js.map +1 -1
  134. package/build/store/actions.js +28 -14
  135. package/build/store/actions.js.map +1 -1
  136. package/build/store/defaults.js +28 -1
  137. package/build/store/defaults.js.map +1 -1
  138. package/build/store/reducer.js +53 -47
  139. package/build/store/reducer.js.map +1 -1
  140. package/build/store/selectors.js +24 -4
  141. package/build/store/selectors.js.map +1 -1
  142. package/build/utils/parse-css-unit-to-px.js +49 -10
  143. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  144. package/build-module/components/block-inspector/index.js +9 -9
  145. package/build-module/components/block-inspector/index.js.map +1 -1
  146. package/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js +37 -0
  147. package/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js.map +1 -0
  148. package/build-module/components/block-list/block-invalid-warning.js +66 -78
  149. package/build-module/components/block-list/block-invalid-warning.js.map +1 -1
  150. package/build-module/components/block-lock/modal.js +1 -0
  151. package/build-module/components/block-lock/modal.js.map +1 -1
  152. package/build-module/components/block-settings-menu/block-settings-dropdown.js +2 -2
  153. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  154. package/build-module/components/block-settings-menu-controls/index.js +1 -1
  155. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  156. package/build-module/components/block-styles/index.js +2 -1
  157. package/build-module/components/block-styles/index.js.map +1 -1
  158. package/build-module/components/block-switcher/block-transformations-menu.native.js +1 -0
  159. package/build-module/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  160. package/build-module/components/child-layout-control/index.js +98 -0
  161. package/build-module/components/child-layout-control/index.js.map +1 -0
  162. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +6 -3
  163. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  164. package/build-module/components/date-format-picker/index.js +4 -4
  165. package/build-module/components/date-format-picker/index.js.map +1 -1
  166. package/build-module/components/global-styles/border-panel.js +291 -0
  167. package/build-module/components/global-styles/border-panel.js.map +1 -0
  168. package/build-module/components/global-styles/dimensions-panel.js +574 -0
  169. package/build-module/components/global-styles/dimensions-panel.js.map +1 -0
  170. package/build-module/components/global-styles/hooks.js +123 -34
  171. package/build-module/components/global-styles/hooks.js.map +1 -1
  172. package/build-module/components/global-styles/index.js +3 -1
  173. package/build-module/components/global-styles/index.js.map +1 -1
  174. package/build-module/components/global-styles/typography-panel.js +88 -27
  175. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  176. package/build-module/components/global-styles/use-global-styles-output.js +21 -14
  177. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  178. package/build-module/components/global-styles/utils.js +2 -0
  179. package/build-module/components/global-styles/utils.js.map +1 -1
  180. package/build-module/components/index.native.js +2 -1
  181. package/build-module/components/index.native.js.map +1 -1
  182. package/build-module/components/inserter/index.js +28 -16
  183. package/build-module/components/inserter/index.js.map +1 -1
  184. package/build-module/components/inserter/media-tab/hooks.js +10 -11
  185. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  186. package/build-module/components/inserter/media-tab/media-list.js +6 -105
  187. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  188. package/build-module/components/inserter/media-tab/media-preview.js +222 -0
  189. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -0
  190. package/build-module/components/inserter/menu.js +1 -1
  191. package/build-module/components/inserter/menu.js.map +1 -1
  192. package/build-module/components/inserter/quick-inserter.js +4 -2
  193. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  194. package/build-module/components/inserter/search-results.js +10 -3
  195. package/build-module/components/inserter/search-results.js.map +1 -1
  196. package/build-module/components/inserter/tabs.js +1 -1
  197. package/build-module/components/inserter/tabs.js.map +1 -1
  198. package/build-module/components/inspector-controls/block-support-tools-panel.js +1 -1
  199. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  200. package/build-module/components/inspector-controls/fill.js +39 -9
  201. package/build-module/components/inspector-controls/fill.js.map +1 -1
  202. package/build-module/components/link-control/index.js +1 -1
  203. package/build-module/components/link-control/index.js.map +1 -1
  204. package/build-module/components/link-control/search-item.js +4 -2
  205. package/build-module/components/link-control/search-item.js.map +1 -1
  206. package/build-module/components/link-control/settings-drawer.js +1 -1
  207. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  208. package/build-module/components/link-control/settings.js +1 -0
  209. package/build-module/components/link-control/settings.js.map +1 -1
  210. package/build-module/components/list-view/block.js +16 -3
  211. package/build-module/components/list-view/block.js.map +1 -1
  212. package/build-module/components/list-view/branch.js +2 -2
  213. package/build-module/components/list-view/branch.js.map +1 -1
  214. package/build-module/components/list-view/expander.js +2 -1
  215. package/build-module/components/list-view/expander.js.map +1 -1
  216. package/build-module/components/list-view/leaf.js +8 -4
  217. package/build-module/components/list-view/leaf.js.map +1 -1
  218. package/build-module/components/list-view/use-block-selection.js +1 -2
  219. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  220. package/build-module/components/list-view/use-list-view-scroll-into-view.js +42 -0
  221. package/build-module/components/list-view/use-list-view-scroll-into-view.js.map +1 -0
  222. package/build-module/components/off-canvas-editor/appender.js +33 -14
  223. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  224. package/build-module/components/off-canvas-editor/branch.js +6 -3
  225. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  226. package/build-module/components/off-canvas-editor/index.js +8 -2
  227. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  228. package/build-module/components/off-canvas-editor/leaf-more-menu.js +36 -7
  229. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  230. package/build-module/components/provider/use-block-sync.js +17 -3
  231. package/build-module/components/provider/use-block-sync.js.map +1 -1
  232. package/build-module/components/responsive-block-control/index.js +1 -0
  233. package/build-module/components/responsive-block-control/index.js.map +1 -1
  234. package/build-module/components/rich-text/format-toolbar-container.js +0 -3
  235. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  236. package/build-module/components/rich-text/index.js +9 -43
  237. package/build-module/components/rich-text/index.js.map +1 -1
  238. package/build-module/components/rich-text/use-delete.js +62 -0
  239. package/build-module/components/rich-text/use-delete.js.map +1 -0
  240. package/build-module/components/rich-text/use-input-rules.js +14 -6
  241. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  242. package/build-module/components/writing-flow/use-selection-observer.js +4 -1
  243. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  244. package/build-module/hooks/align.js +3 -1
  245. package/build-module/hooks/align.js.map +1 -1
  246. package/build-module/hooks/border.js +93 -240
  247. package/build-module/hooks/border.js.map +1 -1
  248. package/build-module/hooks/custom-class-name.js +4 -4
  249. package/build-module/hooks/custom-class-name.js.map +1 -1
  250. package/build-module/hooks/custom-class-name.native.js +3 -4
  251. package/build-module/hooks/custom-class-name.native.js.map +1 -1
  252. package/build-module/hooks/dimensions.js +75 -187
  253. package/build-module/hooks/dimensions.js.map +1 -1
  254. package/build-module/hooks/duotone.js +86 -24
  255. package/build-module/hooks/duotone.js.map +1 -1
  256. package/build-module/hooks/gap.js +0 -183
  257. package/build-module/hooks/gap.js.map +1 -1
  258. package/build-module/hooks/layout.js +33 -27
  259. package/build-module/hooks/layout.js.map +1 -1
  260. package/build-module/hooks/margin.js +4 -143
  261. package/build-module/hooks/margin.js.map +1 -1
  262. package/build-module/hooks/padding.js +4 -143
  263. package/build-module/hooks/padding.js.map +1 -1
  264. package/build-module/hooks/supports.js +7 -1
  265. package/build-module/hooks/supports.js.map +1 -1
  266. package/build-module/hooks/typography.js +54 -66
  267. package/build-module/hooks/typography.js.map +1 -1
  268. package/build-module/hooks/utils.js +96 -0
  269. package/build-module/hooks/utils.js.map +1 -1
  270. package/build-module/layouts/constrained.js +6 -2
  271. package/build-module/layouts/constrained.js.map +1 -1
  272. package/build-module/layouts/flex.js +1 -0
  273. package/build-module/layouts/flex.js.map +1 -1
  274. package/build-module/private-apis.js +3 -1
  275. package/build-module/private-apis.js.map +1 -1
  276. package/build-module/store/actions.js +28 -14
  277. package/build-module/store/actions.js.map +1 -1
  278. package/build-module/store/defaults.js +28 -1
  279. package/build-module/store/defaults.js.map +1 -1
  280. package/build-module/store/reducer.js +53 -45
  281. package/build-module/store/reducer.js.map +1 -1
  282. package/build-module/store/selectors.js +22 -4
  283. package/build-module/store/selectors.js.map +1 -1
  284. package/build-module/utils/parse-css-unit-to-px.js +49 -10
  285. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  286. package/build-style/style-rtl.css +39 -27
  287. package/build-style/style.css +39 -27
  288. package/package.json +31 -31
  289. package/src/components/block-draggable/test/__snapshots__/index.native.js.snap +24 -24
  290. package/src/components/block-inspector/index.js +11 -14
  291. package/src/components/block-inspector/style.scss +3 -0
  292. package/src/components/block-inspector/useBlockInspectorAnimationSettings.js +53 -0
  293. package/src/components/block-list/block-invalid-warning.js +72 -64
  294. package/src/components/block-lock/modal.js +1 -0
  295. package/src/components/block-lock/style.scss +0 -9
  296. package/src/components/block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap +20 -20
  297. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +35 -17
  298. package/src/components/block-preview/test/index.js +0 -2
  299. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -1
  300. package/src/components/block-settings-menu-controls/index.js +2 -1
  301. package/src/components/block-styles/index.js +5 -1
  302. package/src/components/block-styles/style.scss +2 -2
  303. package/src/components/block-switcher/block-transformations-menu.native.js +1 -0
  304. package/src/components/child-layout-control/index.js +106 -0
  305. package/src/components/color-palette/test/__snapshots__/control.js.snap +17 -15
  306. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +48 -38
  307. package/src/components/date-format-picker/index.js +6 -8
  308. package/src/components/date-format-picker/style.scss +0 -5
  309. package/src/components/global-styles/border-panel.js +285 -0
  310. package/src/components/global-styles/dimensions-panel.js +627 -0
  311. package/src/components/global-styles/hooks.js +160 -44
  312. package/src/components/global-styles/index.js +7 -1
  313. package/src/components/global-styles/test/use-global-styles-output.js +1 -1
  314. package/src/components/global-styles/typography-panel.js +81 -9
  315. package/src/components/global-styles/use-global-styles-output.js +17 -16
  316. package/src/components/global-styles/utils.js +2 -0
  317. package/src/components/index.native.js +5 -0
  318. package/src/components/inner-blocks/test/__snapshots__/index.js.snap +1 -1
  319. package/src/components/inserter/index.js +30 -11
  320. package/src/components/inserter/media-tab/hooks.js +9 -8
  321. package/src/components/inserter/media-tab/media-list.js +3 -122
  322. package/src/components/inserter/media-tab/media-preview.js +268 -0
  323. package/src/components/inserter/menu.js +0 -1
  324. package/src/components/inserter/quick-inserter.js +2 -0
  325. package/src/components/inserter/search-results.js +7 -1
  326. package/src/components/inserter/style.scss +25 -0
  327. package/src/components/inserter/tabs.js +1 -9
  328. package/src/components/inserter/test/__snapshots__/index.native.js.snap +15 -15
  329. package/src/components/inspector-controls/block-support-tools-panel.js +0 -1
  330. package/src/components/inspector-controls/fill.js +32 -8
  331. package/src/components/link-control/index.js +1 -1
  332. package/src/components/link-control/search-item.js +3 -1
  333. package/src/components/link-control/settings-drawer.js +2 -1
  334. package/src/components/link-control/settings.js +1 -0
  335. package/src/components/link-control/style.scss +18 -12
  336. package/src/components/link-control/test/index.js +3 -5
  337. package/src/components/list-view/block.js +19 -1
  338. package/src/components/list-view/branch.js +1 -2
  339. package/src/components/list-view/expander.js +1 -0
  340. package/src/components/list-view/leaf.js +43 -29
  341. package/src/components/list-view/use-block-selection.js +0 -2
  342. package/src/components/list-view/use-list-view-scroll-into-view.js +48 -0
  343. package/src/components/media-replace-flow/style.scss +7 -9
  344. package/src/components/off-canvas-editor/appender.js +44 -21
  345. package/src/components/off-canvas-editor/branch.js +4 -1
  346. package/src/components/off-canvas-editor/index.js +7 -1
  347. package/src/components/off-canvas-editor/leaf-more-menu.js +57 -15
  348. package/src/components/provider/use-block-sync.js +21 -4
  349. package/src/components/responsive-block-control/index.js +1 -0
  350. package/src/components/rich-text/format-toolbar-container.js +1 -7
  351. package/src/components/rich-text/index.js +8 -44
  352. package/src/components/rich-text/use-delete.js +59 -0
  353. package/src/components/rich-text/use-input-rules.js +13 -5
  354. package/src/components/spacing-sizes-control/style.scss +1 -1
  355. package/src/components/url-popover/stories/index.js +1 -0
  356. package/src/components/url-popover/test/index.js +0 -2
  357. package/src/components/writing-flow/use-selection-observer.js +5 -1
  358. package/src/hooks/align.js +1 -1
  359. package/src/hooks/border.js +94 -225
  360. package/src/hooks/custom-class-name.js +4 -4
  361. package/src/hooks/custom-class-name.native.js +3 -4
  362. package/src/hooks/dimensions.js +85 -269
  363. package/src/hooks/duotone.js +100 -30
  364. package/src/hooks/gap.js +0 -208
  365. package/src/hooks/layout.js +38 -22
  366. package/src/hooks/margin.js +1 -164
  367. package/src/hooks/padding.js +1 -163
  368. package/src/hooks/supports.js +6 -0
  369. package/src/hooks/test/__snapshots__/align.native.js.snap +24 -24
  370. package/src/hooks/test/duotone.js +102 -0
  371. package/src/hooks/test/style.js +2 -1
  372. package/src/hooks/test/use-typography-props.js +2 -0
  373. package/src/hooks/typography.js +68 -88
  374. package/src/hooks/utils.js +126 -0
  375. package/src/layouts/constrained.js +23 -17
  376. package/src/layouts/flex.js +1 -0
  377. package/src/private-apis.js +2 -0
  378. package/src/store/actions.js +16 -6
  379. package/src/store/defaults.js +14 -1
  380. package/src/store/reducer.js +68 -43
  381. package/src/store/selectors.js +28 -4
  382. package/src/store/test/actions.js +4 -2
  383. package/src/utils/parse-css-unit-to-px.js +48 -13
  384. package/src/utils/test/parse-css-unit-to-px.js +13 -2
  385. package/tsconfig.tsbuildinfo +1 -1
  386. package/build/hooks/border-radius.js +0 -100
  387. package/build/hooks/border-radius.js.map +0 -1
  388. package/build/hooks/child-layout.js +0 -213
  389. package/build/hooks/child-layout.js.map +0 -1
  390. package/build/hooks/min-height.js +0 -139
  391. package/build/hooks/min-height.js.map +0 -1
  392. package/build-module/hooks/border-radius.js +0 -84
  393. package/build-module/hooks/border-radius.js.map +0 -1
  394. package/build-module/hooks/child-layout.js +0 -193
  395. package/build-module/hooks/child-layout.js.map +0 -1
  396. package/build-module/hooks/min-height.js +0 -116
  397. package/build-module/hooks/min-height.js.map +0 -1
  398. package/src/hooks/border-radius.js +0 -70
  399. package/src/hooks/child-layout.js +0 -195
  400. package/src/hooks/min-height.js +0 -104
@@ -12,6 +12,7 @@ import {
12
12
  } from '@wordpress/components';
13
13
  import warning from '@wordpress/warning';
14
14
  import deprecated from '@wordpress/deprecated';
15
+ import { useEffect } from '@wordpress/element';
15
16
 
16
17
  /**
17
18
  * Internal dependencies
@@ -23,6 +24,7 @@ export default function InspectorControlsFill( {
23
24
  children,
24
25
  group = 'default',
25
26
  __experimentalGroup,
27
+ resetAllFilter,
26
28
  } ) {
27
29
  if ( __experimentalGroup ) {
28
30
  deprecated(
@@ -50,18 +52,40 @@ export default function InspectorControlsFill( {
50
52
  <StyleProvider document={ document }>
51
53
  <Fill>
52
54
  { ( fillProps ) => {
53
- // Children passed to InspectorControlsFill will not have
54
- // access to any React Context whose Provider is part of
55
- // the InspectorControlsSlot tree. So we re-create the
56
- // Provider in this subtree.
57
- const value = ! isEmpty( fillProps ) ? fillProps : null;
58
55
  return (
59
- <ToolsPanelContext.Provider value={ value }>
60
- { children }
61
- </ToolsPanelContext.Provider>
56
+ <ToolsPanelInspectorControl
57
+ fillProps={ fillProps }
58
+ children={ children }
59
+ resetAllFilter={ resetAllFilter }
60
+ />
62
61
  );
63
62
  } }
64
63
  </Fill>
65
64
  </StyleProvider>
66
65
  );
67
66
  }
67
+
68
+ function ToolsPanelInspectorControl( { children, resetAllFilter, fillProps } ) {
69
+ const { registerResetAllFilter, deregisterResetAllFilter } = fillProps;
70
+ useEffect( () => {
71
+ if ( resetAllFilter && registerResetAllFilter ) {
72
+ registerResetAllFilter( resetAllFilter );
73
+ }
74
+ return () => {
75
+ if ( resetAllFilter && deregisterResetAllFilter ) {
76
+ deregisterResetAllFilter( resetAllFilter );
77
+ }
78
+ };
79
+ }, [ resetAllFilter, registerResetAllFilter, deregisterResetAllFilter ] );
80
+
81
+ // Children passed to InspectorControlsFill will not have
82
+ // access to any React Context whose Provider is part of
83
+ // the InspectorControlsSlot tree. So we re-create the
84
+ // Provider in this subtree.
85
+ const value = ! isEmpty( fillProps ) ? fillProps : null;
86
+ return (
87
+ <ToolsPanelContext.Provider value={ value }>
88
+ { children }
89
+ </ToolsPanelContext.Provider>
90
+ );
91
+ }
@@ -366,7 +366,7 @@ function LinkControl( {
366
366
  <Button
367
367
  variant="primary"
368
368
  onClick={ handleSubmit }
369
- className="xblock-editor-link-control__search-submit"
369
+ className="block-editor-link-control__search-submit"
370
370
  disabled={ currentInputIsEmpty } // Disallow submitting empty values.
371
371
  >
372
372
  { __( 'Apply' ) }
@@ -18,6 +18,7 @@ import {
18
18
  category,
19
19
  file,
20
20
  } from '@wordpress/icons';
21
+ import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
21
22
 
22
23
  const ICONS_MAP = {
23
24
  post: postList,
@@ -72,7 +73,8 @@ export const LinkControlSearchItem = ( {
72
73
  <span className="block-editor-link-control__search-item-header">
73
74
  <span className="block-editor-link-control__search-item-title">
74
75
  <TextHighlight
75
- text={ suggestion.title }
76
+ // The component expects a plain text string.
77
+ text={ stripHTML( suggestion.title ) }
76
78
  highlight={ searchTerm }
77
79
  />
78
80
  </span>
@@ -11,6 +11,7 @@ import { settings as settingsIcon } from '@wordpress/icons';
11
11
  import { useReducedMotion, useInstanceId } from '@wordpress/compose';
12
12
  import { __ } from '@wordpress/i18n';
13
13
  import { Fragment } from '@wordpress/element';
14
+
14
15
  /**
15
16
  * Internal dependencies
16
17
  */
@@ -46,7 +47,7 @@ function LinkSettingsDrawer( {
46
47
  aria-expanded={ settingsOpen }
47
48
  onClick={ () => setSettingsOpen( ! settingsOpen ) }
48
49
  icon={ settingsIcon }
49
- label={ __( 'Toggle link settings' ) }
50
+ label={ __( 'Link Settings' ) }
50
51
  aria-controls={ settingsDrawerId }
51
52
  />
52
53
  <MaybeAnimatePresence>
@@ -20,6 +20,7 @@ const LinkControlSettings = ( { value, onChange = noop, settings } ) => {
20
20
 
21
21
  const theSettings = settings.map( ( setting ) => (
22
22
  <ToggleControl
23
+ __nextHasNoMarginBottom
23
24
  className="block-editor-link-control__setting"
24
25
  key={ setting.id }
25
26
  label={ setting.title }
@@ -22,6 +22,20 @@ $preview-image-height: 140px;
22
22
  width: 90vw;
23
23
  max-width: $modal-min-width;
24
24
  }
25
+
26
+ .show-icon-labels & {
27
+ .components-button.has-icon {
28
+ // Hide the button icons when labels are set to display...
29
+ svg {
30
+ display: none;
31
+ }
32
+ // ... and display labels.
33
+ // Uses ::before as ::after is already used for active tab styling.
34
+ &::before {
35
+ content: attr(aria-label);
36
+ }
37
+ }
38
+ }
25
39
  }
26
40
 
27
41
  // Provides positioning context for reset button. Without this then when an
@@ -72,7 +86,7 @@ $preview-image-height: 140px;
72
86
  }
73
87
 
74
88
  .block-editor-link-control__search-error {
75
- margin: -$grid-unit-20*0.5 $grid-unit-20 $grid-unit-20; // negative margin to bring the error a bit closer to the button
89
+ margin: -$grid-unit-20 * 0.5 $grid-unit-20 $grid-unit-20; // negative margin to bring the error a bit closer to the button
76
90
  }
77
91
 
78
92
  .block-editor-link-control__search-actions {
@@ -83,10 +97,6 @@ $preview-image-height: 140px;
83
97
  order: 20;
84
98
  }
85
99
 
86
- .components-button .block-editor-link-control__search-submit .has-icon {
87
- margin: -1px;
88
- }
89
-
90
100
  .block-editor-link-control__search-results-wrapper {
91
101
  position: relative;
92
102
  margin-top: -$grid-unit-20 + 1px;
@@ -103,7 +113,7 @@ $preview-image-height: 140px;
103
113
  }
104
114
 
105
115
  &::before {
106
- height: $grid-unit-20*0.5;
116
+ height: $grid-unit-20 * 0.5;
107
117
  top: 0;
108
118
  bottom: auto;
109
119
  }
@@ -123,7 +133,7 @@ $preview-image-height: 140px;
123
133
 
124
134
  .block-editor-link-control__search-results {
125
135
  margin: 0;
126
- padding: $grid-unit-20*0.5 $grid-unit-20 $grid-unit-20*0.5;
136
+ padding: $grid-unit-20 * 0.5 $grid-unit-20 $grid-unit-20 * 0.5;
127
137
  max-height: 200px;
128
138
  overflow-y: auto; // allow results list to scroll
129
139
 
@@ -224,7 +234,6 @@ $preview-image-height: 140px;
224
234
  max-height: 32px;
225
235
  }
226
236
 
227
-
228
237
  .block-editor-link-control__search-item-info,
229
238
  .block-editor-link-control__search-item-title {
230
239
  overflow: hidden;
@@ -344,16 +353,13 @@ $preview-image-height: 140px;
344
353
  width: 100%;
345
354
  }
346
355
 
347
-
348
356
  .block-editor-link-control__search-item.is-fetching {
349
-
350
357
  .block-editor-link-control__search-item-description {
351
358
  &::before,
352
359
  &::after {
353
360
  animation: loadingpulse 1s linear infinite;
354
361
  animation-delay: 0.5s; // avoid animating for fast network responses
355
362
  }
356
-
357
363
  }
358
364
 
359
365
  .block-editor-link-control__search-item-image {
@@ -403,7 +409,7 @@ $preview-image-height: 140px;
403
409
  &::before {
404
410
  content: "";
405
411
  position: absolute;
406
- top: -#{$block-selected-child-margin*2};
412
+ top: -#{$block-selected-child-margin * 2};
407
413
  left: 0;
408
414
  display: block;
409
415
  width: 100%;
@@ -51,8 +51,6 @@ jest.mock( '@wordpress/data/src/components/use-dispatch', () => ( {
51
51
  useDispatch: () => ( { saveEntityRecords: jest.fn() } ),
52
52
  } ) );
53
53
 
54
- jest.useRealTimers();
55
-
56
54
  jest.mock( '@wordpress/compose', () => ( {
57
55
  ...jest.requireActual( '@wordpress/compose' ),
58
56
  useReducedMotion: jest.fn( () => true ),
@@ -1670,7 +1668,7 @@ describe( 'Addition Settings UI', () => {
1670
1668
  render( <LinkControlConsumer /> );
1671
1669
 
1672
1670
  const settingsToggle = screen.queryByRole( 'button', {
1673
- name: 'Toggle link settings',
1671
+ name: 'Link Settings',
1674
1672
  ariaControls: 'link-settings-1',
1675
1673
  } );
1676
1674
 
@@ -1690,7 +1688,7 @@ describe( 'Addition Settings UI', () => {
1690
1688
  const user = userEvent.setup();
1691
1689
 
1692
1690
  const settingsToggle = screen.queryByRole( 'button', {
1693
- name: 'Toggle link settings',
1691
+ name: 'Link Settings',
1694
1692
  ariaControls: 'link-settings-1',
1695
1693
  } );
1696
1694
 
@@ -2241,7 +2239,7 @@ describe( 'Controlling link title text', () => {
2241
2239
 
2242
2240
  async function toggleSettingsDrawer( user ) {
2243
2241
  const settingsToggle = screen.queryByRole( 'button', {
2244
- name: 'Toggle link settings',
2242
+ name: 'Link Settings',
2245
2243
  } );
2246
2244
 
2247
2245
  await user.click( settingsToggle );
@@ -27,6 +27,7 @@ import { sprintf, __ } from '@wordpress/i18n';
27
27
  * Internal dependencies
28
28
  */
29
29
  import ListViewLeaf from './leaf';
30
+ import useListViewScrollIntoView from './use-list-view-scroll-into-view';
30
31
  import {
31
32
  BlockMoverUpButton,
32
33
  BlockMoverDownButton,
@@ -57,6 +58,7 @@ function ListViewBlock( {
57
58
  isSyncedBranch,
58
59
  } ) {
59
60
  const cellRef = useRef( null );
61
+ const rowRef = useRef( null );
60
62
  const [ isHovered, setIsHovered ] = useState( false );
61
63
  const { clientId } = block;
62
64
 
@@ -220,6 +222,19 @@ function ListViewBlock( {
220
222
  ? selectedClientIds
221
223
  : [ clientId ];
222
224
 
225
+ // Pass in a ref to the row, so that it can be scrolled
226
+ // into view when selected. For long lists, the placeholder for the
227
+ // selected block is also observed, within ListViewLeafPlaceholder.
228
+ useListViewScrollIntoView( {
229
+ isSelected,
230
+ rowItemRef: rowRef,
231
+ selectedClientIds,
232
+ } );
233
+
234
+ // Detect if there is a block in the canvas currently being edited and multi-selection is not happening.
235
+ const currentlyEditingBlockInCanvas =
236
+ isSelected && selectedClientIds.length === 1;
237
+
223
238
  return (
224
239
  <ListViewLeaf
225
240
  className={ classes }
@@ -235,6 +250,7 @@ function ListViewBlock( {
235
250
  data-block={ clientId }
236
251
  isExpanded={ canExpand ? isExpanded : undefined }
237
252
  aria-selected={ !! isSelected || forceSelectionContentLock }
253
+ ref={ rowRef }
238
254
  >
239
255
  <TreeGridCell
240
256
  className="block-editor-list-view-block__contents-cell"
@@ -256,7 +272,9 @@ function ListViewBlock( {
256
272
  siblingBlockCount={ siblingBlockCount }
257
273
  level={ level }
258
274
  ref={ ref }
259
- tabIndex={ tabIndex }
275
+ tabIndex={
276
+ currentlyEditingBlockInCanvas ? 0 : tabIndex
277
+ }
260
278
  onFocus={ onFocus }
261
279
  isExpanded={ isExpanded }
262
280
  selectedClientIds={ selectedClientIds }
@@ -155,8 +155,6 @@ function ListViewBranch( props ) {
155
155
 
156
156
  const isDragged = !! draggedClientIds?.includes( clientId );
157
157
 
158
- const showBlock = isDragged || blockInView;
159
-
160
158
  // Make updates to the selected or dragged blocks synchronous,
161
159
  // but asynchronous for any other block.
162
160
  const isSelected = isClientIdSelected(
@@ -165,6 +163,7 @@ function ListViewBranch( props ) {
165
163
  );
166
164
  const isSelectedBranch =
167
165
  isBranchSelected || ( isSelected && hasNestedBlocks );
166
+ const showBlock = isDragged || blockInView || isSelected;
168
167
  return (
169
168
  <AsyncModeProvider key={ clientId } value={ ! isSelected }>
170
169
  { showBlock && (
@@ -19,6 +19,7 @@ export default function ListViewExpander( { onClick } ) {
19
19
  className="block-editor-list-view__expander"
20
20
  onClick={ ( event ) => onClick( event, { forceToggle: true } ) }
21
21
  aria-hidden="true"
22
+ data-testid="list-view-expander"
22
23
  >
23
24
  <Icon icon={ isRTL() ? chevronLeftSmall : chevronRightSmall } />
24
25
  </span>
@@ -8,6 +8,8 @@ import classnames from 'classnames';
8
8
  * WordPress dependencies
9
9
  */
10
10
  import { __experimentalTreeGridRow as TreeGridRow } from '@wordpress/components';
11
+ import { useMergeRefs } from '@wordpress/compose';
12
+ import { forwardRef } from '@wordpress/element';
11
13
 
12
14
  /**
13
15
  * Internal dependencies
@@ -16,33 +18,45 @@ import useMovingAnimation from '../use-moving-animation';
16
18
 
17
19
  const AnimatedTreeGridRow = animated( TreeGridRow );
18
20
 
19
- export default function ListViewLeaf( {
20
- isSelected,
21
- position,
22
- level,
23
- rowCount,
24
- children,
25
- className,
26
- path,
27
- ...props
28
- } ) {
29
- const ref = useMovingAnimation( {
30
- isSelected,
31
- adjustScrolling: false,
32
- enableAnimation: true,
33
- triggerAnimationOnChange: path,
34
- } );
21
+ const ListViewLeaf = forwardRef(
22
+ (
23
+ {
24
+ isSelected,
25
+ position,
26
+ level,
27
+ rowCount,
28
+ children,
29
+ className,
30
+ path,
31
+ ...props
32
+ },
33
+ ref
34
+ ) => {
35
+ const animationRef = useMovingAnimation( {
36
+ isSelected,
37
+ adjustScrolling: false,
38
+ enableAnimation: true,
39
+ triggerAnimationOnChange: path,
40
+ } );
35
41
 
36
- return (
37
- <AnimatedTreeGridRow
38
- ref={ ref }
39
- className={ classnames( 'block-editor-list-view-leaf', className ) }
40
- level={ level }
41
- positionInSet={ position }
42
- setSize={ rowCount }
43
- { ...props }
44
- >
45
- { children }
46
- </AnimatedTreeGridRow>
47
- );
48
- }
42
+ const mergedRef = useMergeRefs( [ ref, animationRef ] );
43
+
44
+ return (
45
+ <AnimatedTreeGridRow
46
+ ref={ mergedRef }
47
+ className={ classnames(
48
+ 'block-editor-list-view-leaf',
49
+ className
50
+ ) }
51
+ level={ level }
52
+ positionInSet={ position }
53
+ setSize={ rowCount }
54
+ { ...props }
55
+ >
56
+ { children }
57
+ </AnimatedTreeGridRow>
58
+ );
59
+ }
60
+ );
61
+
62
+ export default ListViewLeaf;
@@ -21,7 +21,6 @@ export default function useBlockSelection() {
21
21
  getBlockName,
22
22
  getBlockParents,
23
23
  getBlockSelectionStart,
24
- getBlockSelectionEnd,
25
24
  getSelectedBlockClientIds,
26
25
  hasMultiSelection,
27
26
  hasSelectedBlock,
@@ -154,7 +153,6 @@ export default function useBlockSelection() {
154
153
  getBlockType,
155
154
  getBlockParents,
156
155
  getBlockSelectionStart,
157
- getBlockSelectionEnd,
158
156
  getSelectedBlockClientIds,
159
157
  hasMultiSelection,
160
158
  hasSelectedBlock,
@@ -0,0 +1,48 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { getScrollContainer } from '@wordpress/dom';
5
+ import { useLayoutEffect } from '@wordpress/element';
6
+
7
+ export default function useListViewScrollIntoView( {
8
+ isSelected,
9
+ selectedClientIds,
10
+ rowItemRef,
11
+ } ) {
12
+ const isSingleSelection = selectedClientIds.length === 1;
13
+
14
+ useLayoutEffect( () => {
15
+ // Skip scrolling into view if this particular block isn't selected,
16
+ // or if more than one block is selected overall. This is to avoid
17
+ // scrolling the view in a multi selection where the user has intentionally
18
+ // selected multiple blocks within the list view, but the initially
19
+ // selected block may be out of view.
20
+ if ( ! isSelected || ! isSingleSelection || ! rowItemRef.current ) {
21
+ return;
22
+ }
23
+
24
+ const scrollContainer = getScrollContainer( rowItemRef.current );
25
+ const { ownerDocument } = rowItemRef.current;
26
+
27
+ const windowScroll =
28
+ scrollContainer === ownerDocument.body ||
29
+ scrollContainer === ownerDocument.documentElement;
30
+
31
+ // If the there is no scroll container, of if the scroll container is the window,
32
+ // do not scroll into view, as the block is already in view.
33
+ if ( windowScroll || ! scrollContainer ) {
34
+ return;
35
+ }
36
+
37
+ const rowRect = rowItemRef.current.getBoundingClientRect();
38
+ const scrollContainerRect = scrollContainer.getBoundingClientRect();
39
+
40
+ // If the selected block is not currently visible, scroll to it.
41
+ if (
42
+ rowRect.top < scrollContainerRect.top ||
43
+ rowRect.bottom > scrollContainerRect.bottom
44
+ ) {
45
+ rowItemRef.current.scrollIntoView();
46
+ }
47
+ }, [ isSelected, isSingleSelection, rowItemRef ] );
48
+ }
@@ -23,24 +23,22 @@
23
23
  }
24
24
 
25
25
  .block-editor-link-control {
26
- width: 220px; // Hardcoded width avoids resizing of control when switching between preview/edit.
26
+ width: 300px; // Hardcoded width avoids resizing of control when switching between preview/edit.
27
27
 
28
28
  .block-editor-url-input {
29
29
  padding: 0; // Cancel unnecessary default 1px padding in this case.
30
30
  margin: 0; // Reset default LinkControl margins.
31
31
  }
32
32
 
33
- .components-base-control .components-base-control__field {
34
- margin-bottom: 0;
35
- }
36
-
37
- .block-editor-link-control__search-item-title {
38
- max-width: 180px;
33
+ .block-editor-link-control__search-item-title,
34
+ .block-editor-link-control__search-item-info {
35
+ max-width: 200px;
39
36
  white-space: nowrap;
40
37
  }
41
38
 
42
- .block-editor-link-control__search-item-info {
43
- white-space: nowrap;
39
+ .block-editor-link-control__tools {
40
+ justify-content: flex-end;
41
+ padding: $grid-unit-20 var(--wp-admin-border-width-focus) var(--wp-admin-border-width-focus);
44
42
  }
45
43
 
46
44
  .block-editor-link-control__search-item.is-current {
@@ -4,7 +4,12 @@
4
4
  import { useInstanceId } from '@wordpress/compose';
5
5
  import { speak } from '@wordpress/a11y';
6
6
  import { useSelect } from '@wordpress/data';
7
- import { forwardRef, useState, useEffect } from '@wordpress/element';
7
+ import {
8
+ forwardRef,
9
+ useState,
10
+ useEffect,
11
+ useCallback,
12
+ } from '@wordpress/element';
8
13
  import { __, sprintf } from '@wordpress/i18n';
9
14
 
10
15
  /**
@@ -12,29 +17,33 @@ import { __, sprintf } from '@wordpress/i18n';
12
17
  */
13
18
  import { store as blockEditorStore } from '../../store';
14
19
  import useBlockDisplayTitle from '../block-title/use-block-display-title';
15
- import Inserter from '../inserter';
20
+
21
+ import { unlock } from '../../lock-unlock';
22
+ import { privateApis as blockEditorPrivateApis } from '../../private-apis';
23
+
24
+ const prioritizedInserterBlocks = [
25
+ 'core/navigation-link/page',
26
+ 'core/navigation-link',
27
+ ];
16
28
 
17
29
  export const Appender = forwardRef(
18
- ( { nestingLevel, blockCount, ...props }, ref ) => {
30
+ ( { nestingLevel, blockCount, clientId, ...props }, ref ) => {
19
31
  const [ insertedBlock, setInsertedBlock ] = useState( null );
20
32
 
21
33
  const instanceId = useInstanceId( Appender );
22
- const { hideInserter, clientId } = useSelect( ( select ) => {
23
- const {
24
- getTemplateLock,
25
- __unstableGetEditorMode,
26
- getSelectedBlockClientId,
27
- } = select( blockEditorStore );
34
+ const { hideInserter } = useSelect(
35
+ ( select ) => {
36
+ const { getTemplateLock, __unstableGetEditorMode } =
37
+ select( blockEditorStore );
28
38
 
29
- const _clientId = getSelectedBlockClientId();
30
-
31
- return {
32
- clientId: getSelectedBlockClientId(),
33
- hideInserter:
34
- !! getTemplateLock( _clientId ) ||
35
- __unstableGetEditorMode() === 'zoom-out',
36
- };
37
- }, [] );
39
+ return {
40
+ hideInserter:
41
+ !! getTemplateLock( clientId ) ||
42
+ __unstableGetEditorMode() === 'zoom-out',
43
+ };
44
+ },
45
+ [ clientId ]
46
+ );
38
47
 
39
48
  const blockTitle = useBlockDisplayTitle( {
40
49
  clientId,
@@ -61,10 +70,23 @@ export const Appender = forwardRef(
61
70
  );
62
71
  }, [ insertedBlockTitle ] );
63
72
 
73
+ const orderInitialBlockItems = useCallback( ( items ) => {
74
+ items.sort( ( { id: aName }, { id: bName } ) => {
75
+ // Sort block items according to `prioritizedInserterBlocks`.
76
+ let aIndex = prioritizedInserterBlocks.indexOf( aName );
77
+ let bIndex = prioritizedInserterBlocks.indexOf( bName );
78
+ // All other block items should come after that.
79
+ if ( aIndex < 0 ) aIndex = prioritizedInserterBlocks.length;
80
+ if ( bIndex < 0 ) bIndex = prioritizedInserterBlocks.length;
81
+ return aIndex - bIndex;
82
+ } );
83
+ return items;
84
+ }, [] );
85
+
64
86
  if ( hideInserter ) {
65
87
  return null;
66
88
  }
67
-
89
+ const { PrivateInserter } = unlock( blockEditorPrivateApis );
68
90
  const descriptionId = `off-canvas-editor-appender__${ instanceId }`;
69
91
  const description = sprintf(
70
92
  /* translators: 1: The name of the block. 2: The numerical position of the block. 3: The level of nesting for the block. */
@@ -76,11 +98,11 @@ export const Appender = forwardRef(
76
98
 
77
99
  return (
78
100
  <div className="offcanvas-editor-appender">
79
- <Inserter
101
+ <PrivateInserter
80
102
  ref={ ref }
81
103
  rootClientId={ clientId }
82
104
  position="bottom right"
83
- isAppender={ true }
105
+ isAppender
84
106
  selectBlockOnInsert={ false }
85
107
  shouldDirectInsert={ false }
86
108
  __experimentalIsQuick
@@ -91,6 +113,7 @@ export const Appender = forwardRef(
91
113
  setInsertedBlock( maybeInsertedBlock );
92
114
  }
93
115
  } }
116
+ orderInitialBlockItems={ orderInitialBlockItems }
94
117
  />
95
118
  <div
96
119
  className="offcanvas-editor-appender__description"
@@ -97,6 +97,7 @@ function ListViewBranch( props ) {
97
97
  isExpanded,
98
98
  parentId,
99
99
  shouldShowInnerBlocks = true,
100
+ showAppender: showAppenderProp = true,
100
101
  } = props;
101
102
 
102
103
  const isContentLocked = useSelect(
@@ -117,7 +118,7 @@ function ListViewBranch( props ) {
117
118
  }
118
119
 
119
120
  // Only show the appender at the first level.
120
- const showAppender = level === 1;
121
+ const showAppender = showAppenderProp && level === 1;
121
122
 
122
123
  const filteredBlocks = blocks.filter( Boolean );
123
124
  const blockCount = filteredBlocks.length;
@@ -205,6 +206,7 @@ function ListViewBranch( props ) {
205
206
  isBranchSelected={ isSelectedBranch }
206
207
  selectedClientIds={ selectedClientIds }
207
208
  isExpanded={ isExpanded }
209
+ showAppender={ showAppenderProp }
208
210
  />
209
211
  ) }
210
212
  </AsyncModeProvider>
@@ -220,6 +222,7 @@ function ListViewBranch( props ) {
220
222
  <TreeGridCell>
221
223
  { ( treeGridCellProps ) => (
222
224
  <Appender
225
+ clientId={ parentId }
223
226
  nestingLevel={ level }
224
227
  blockCount={ blockCount }
225
228
  { ...treeGridCellProps }