@wordpress/block-editor 9.4.0 → 9.7.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 (483) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -8
  3. package/build/components/block-list/block-invalid-warning.native.js +54 -6
  4. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  5. package/build/components/block-list/block.js +14 -4
  6. package/build/components/block-list/block.js.map +1 -1
  7. package/build/components/block-list/block.native.js +2 -1
  8. package/build/components/block-list/block.native.js.map +1 -1
  9. package/build/components/block-list/index.native.js +5 -4
  10. package/build/components/block-list/index.native.js.map +1 -1
  11. package/build/components/block-list/layout.js +20 -5
  12. package/build/components/block-list/layout.js.map +1 -1
  13. package/build/components/block-list/use-block-props/use-block-class-names.js +5 -2
  14. package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  15. package/build/components/block-lock/modal.js +37 -7
  16. package/build/components/block-lock/modal.js.map +1 -1
  17. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  18. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  19. package/build/components/block-mover/mover-description.js +95 -32
  20. package/build/components/block-mover/mover-description.js.map +1 -1
  21. package/build/components/block-pattern-setup/index.js +5 -17
  22. package/build/components/block-pattern-setup/index.js.map +1 -1
  23. package/build/components/block-popover/inbetween.js +2 -2
  24. package/build/components/block-popover/inbetween.js.map +1 -1
  25. package/build/components/block-popover/index.js +1 -1
  26. package/build/components/block-popover/index.js.map +1 -1
  27. package/build/components/block-settings-menu/block-mode-toggle.js +1 -1
  28. package/build/components/block-settings-menu/block-mode-toggle.js.map +1 -1
  29. package/build/components/block-settings-menu/block-settings-dropdown.js +4 -1
  30. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  31. package/build/components/block-settings-menu-controls/index.js +1 -1
  32. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  33. package/build/components/block-styles/index.js +3 -6
  34. package/build/components/block-styles/index.js.map +1 -1
  35. package/build/components/block-styles/preview.native.js.map +1 -1
  36. package/build/components/block-switcher/index.js +7 -1
  37. package/build/components/block-switcher/index.js.map +1 -1
  38. package/build/components/block-title/index.js +8 -2
  39. package/build/components/block-title/index.js.map +1 -1
  40. package/build/components/block-title/use-block-display-title.js +12 -5
  41. package/build/components/block-title/use-block-display-title.js.map +1 -1
  42. package/build/components/block-tools/block-contextual-toolbar.js +1 -1
  43. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  44. package/build/components/block-tools/block-selection-button.js +1 -7
  45. package/build/components/block-tools/block-selection-button.js.map +1 -1
  46. package/build/components/block-tools/index.js +4 -1
  47. package/build/components/block-tools/index.js.map +1 -1
  48. package/build/components/block-types-list/index.js +1 -1
  49. package/build/components/block-types-list/index.js.map +1 -1
  50. package/build/components/block-types-list/index.native.js +65 -23
  51. package/build/components/block-types-list/index.native.js.map +1 -1
  52. package/build/components/border-radius-control/index.js +5 -1
  53. package/build/components/border-radius-control/index.js.map +1 -1
  54. package/build/components/colors/utils.js +6 -2
  55. package/build/components/colors/utils.js.map +1 -1
  56. package/build/components/colors/with-colors.js +1 -1
  57. package/build/components/colors/with-colors.js.map +1 -1
  58. package/build/components/colors-gradients/control.js +49 -39
  59. package/build/components/colors-gradients/control.js.map +1 -1
  60. package/build/components/colors-gradients/dropdown.js +9 -3
  61. package/build/components/colors-gradients/dropdown.js.map +1 -1
  62. package/build/components/date-format-picker/index.js +1 -1
  63. package/build/components/date-format-picker/index.js.map +1 -1
  64. package/build/components/font-appearance-control/index.js +10 -4
  65. package/build/components/font-appearance-control/index.js.map +1 -1
  66. package/build/components/iframe/index.js +19 -6
  67. package/build/components/iframe/index.js.map +1 -1
  68. package/build/components/image-editor/cropper.js +4 -3
  69. package/build/components/image-editor/cropper.js.map +1 -1
  70. package/build/components/image-editor/index.js +3 -1
  71. package/build/components/image-editor/index.js.map +1 -1
  72. package/build/components/image-size-control/index.js +3 -1
  73. package/build/components/image-size-control/index.js.map +1 -1
  74. package/build/components/index.js +13 -6
  75. package/build/components/index.js.map +1 -1
  76. package/build/components/index.native.js +11 -4
  77. package/build/components/index.native.js.map +1 -1
  78. package/build/components/inserter/block-types-tab.native.js +30 -16
  79. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  80. package/build/components/inserter/index.native.js +8 -3
  81. package/build/components/inserter/index.native.js.map +1 -1
  82. package/build/components/inserter/preview-panel.js +8 -8
  83. package/build/components/inserter/preview-panel.js.map +1 -1
  84. package/build/components/inserter/reusable-blocks-tab.native.js +5 -1
  85. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  86. package/build/components/inserter/search-results.native.js +5 -2
  87. package/build/components/inserter/search-results.native.js.map +1 -1
  88. package/build/components/inserter/utils.native.js +21 -0
  89. package/build/components/inserter/utils.native.js.map +1 -1
  90. package/build/components/inserter-list-item/index.js +7 -20
  91. package/build/components/inserter-list-item/index.js.map +1 -1
  92. package/build/components/letter-spacing-control/index.js +6 -3
  93. package/build/components/letter-spacing-control/index.js.map +1 -1
  94. package/build/components/line-height-control/index.js +6 -3
  95. package/build/components/line-height-control/index.js.map +1 -1
  96. package/build/components/link-control/index.js +1 -1
  97. package/build/components/link-control/index.js.map +1 -1
  98. package/build/components/link-control/is-url-like.js +1 -7
  99. package/build/components/link-control/is-url-like.js.map +1 -1
  100. package/build/components/link-control/use-search-handler.js +1 -7
  101. package/build/components/link-control/use-search-handler.js.map +1 -1
  102. package/build/components/list-view/block-select-button.js +15 -7
  103. package/build/components/list-view/block-select-button.js.map +1 -1
  104. package/build/components/list-view/branch.js +1 -7
  105. package/build/components/list-view/branch.js.map +1 -1
  106. package/build/components/list-view/drop-indicator.js +1 -1
  107. package/build/components/list-view/drop-indicator.js.map +1 -1
  108. package/build/components/list-view/expander.js +3 -1
  109. package/build/components/list-view/expander.js.map +1 -1
  110. package/build/components/media-placeholder/index.js +13 -2
  111. package/build/components/media-placeholder/index.js.map +1 -1
  112. package/build/components/media-replace-flow/index.js +3 -6
  113. package/build/components/media-replace-flow/index.js.map +1 -1
  114. package/build/components/media-upload/index.native.js +8 -3
  115. package/build/components/media-upload/index.native.js.map +1 -1
  116. package/build/components/observe-typing/index.js +22 -8
  117. package/build/components/observe-typing/index.js.map +1 -1
  118. package/build/components/preview-options/index.js +2 -2
  119. package/build/components/preview-options/index.js.map +1 -1
  120. package/build/components/{use-no-recursive-renders → recursion-provider}/index.js +40 -18
  121. package/build/components/recursion-provider/index.js.map +1 -0
  122. package/build/components/rich-text/format-toolbar-container.js +61 -12
  123. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  124. package/build/components/rich-text/index.js +8 -2
  125. package/build/components/rich-text/index.js.map +1 -1
  126. package/build/components/rich-text/index.native.js +3 -1
  127. package/build/components/rich-text/index.native.js.map +1 -1
  128. package/build/components/rich-text/use-before-input-rules.js +110 -0
  129. package/build/components/rich-text/use-before-input-rules.js.map +1 -0
  130. package/build/components/rich-text/use-format-types.js +36 -16
  131. package/build/components/rich-text/use-format-types.js.map +1 -1
  132. package/build/components/text-decoration-control/index.js +3 -1
  133. package/build/components/text-decoration-control/index.js.map +1 -1
  134. package/build/components/text-transform-control/index.js +3 -1
  135. package/build/components/text-transform-control/index.js.map +1 -1
  136. package/build/components/url-popover/image-url-input-ui.js +4 -1
  137. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  138. package/build/components/url-popover/index.js +2 -1
  139. package/build/components/url-popover/index.js.map +1 -1
  140. package/build/components/writing-flow/use-arrow-nav.js +38 -27
  141. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  142. package/build/components/writing-flow/use-drag-selection.js +9 -2
  143. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  144. package/build/components/writing-flow/use-multi-selection.js +3 -47
  145. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  146. package/build/components/writing-flow/use-select-all.js +3 -1
  147. package/build/components/writing-flow/use-select-all.js.map +1 -1
  148. package/build/components/writing-flow/use-selection-observer.js +1 -3
  149. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  150. package/build/components/writing-flow/use-tab-nav.js +1 -1
  151. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  152. package/build/hooks/color.js +2 -4
  153. package/build/hooks/color.js.map +1 -1
  154. package/build/hooks/index.js +8 -0
  155. package/build/hooks/index.js.map +1 -1
  156. package/build/hooks/layout.js +61 -15
  157. package/build/hooks/layout.js.map +1 -1
  158. package/build/hooks/style.js +41 -31
  159. package/build/hooks/style.js.map +1 -1
  160. package/build/hooks/utils.js +5 -3
  161. package/build/hooks/utils.js.map +1 -1
  162. package/build/index.js +7 -0
  163. package/build/index.js.map +1 -1
  164. package/build/layouts/flex.js +40 -36
  165. package/build/layouts/flex.js.map +1 -1
  166. package/build/layouts/flow.js +35 -37
  167. package/build/layouts/flow.js.map +1 -1
  168. package/build/layouts/utils.js +35 -3
  169. package/build/layouts/utils.js.map +1 -1
  170. package/build/store/actions.js +15 -18
  171. package/build/store/actions.js.map +1 -1
  172. package/build/store/index.js +0 -4
  173. package/build/store/index.js.map +1 -1
  174. package/build/store/reducer.js +5 -3
  175. package/build/store/reducer.js.map +1 -1
  176. package/build/store/selectors.js +3 -3
  177. package/build/store/selectors.js.map +1 -1
  178. package/build/utils/block-variation-transforms.js +15 -9
  179. package/build/utils/block-variation-transforms.js.map +1 -1
  180. package/build/utils/pasting.js +9 -1
  181. package/build/utils/pasting.js.map +1 -1
  182. package/build-module/components/block-list/block-invalid-warning.native.js +50 -6
  183. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  184. package/build-module/components/block-list/block.js +15 -5
  185. package/build-module/components/block-list/block.js.map +1 -1
  186. package/build-module/components/block-list/block.native.js +2 -1
  187. package/build-module/components/block-list/block.native.js.map +1 -1
  188. package/build-module/components/block-list/index.native.js +4 -2
  189. package/build-module/components/block-list/index.native.js.map +1 -1
  190. package/build-module/components/block-list/layout.js +19 -4
  191. package/build-module/components/block-list/layout.js.map +1 -1
  192. package/build-module/components/block-list/use-block-props/use-block-class-names.js +5 -2
  193. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  194. package/build-module/components/block-lock/modal.js +39 -8
  195. package/build-module/components/block-lock/modal.js.map +1 -1
  196. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +2 -2
  197. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  198. package/build-module/components/block-mover/mover-description.js +97 -33
  199. package/build-module/components/block-mover/mover-description.js.map +1 -1
  200. package/build-module/components/block-pattern-setup/index.js +6 -18
  201. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  202. package/build-module/components/block-popover/inbetween.js +2 -2
  203. package/build-module/components/block-popover/inbetween.js.map +1 -1
  204. package/build-module/components/block-popover/index.js +1 -1
  205. package/build-module/components/block-popover/index.js.map +1 -1
  206. package/build-module/components/block-settings-menu/block-mode-toggle.js +1 -1
  207. package/build-module/components/block-settings-menu/block-mode-toggle.js.map +1 -1
  208. package/build-module/components/block-settings-menu/block-settings-dropdown.js +4 -1
  209. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  210. package/build-module/components/block-settings-menu-controls/index.js +2 -2
  211. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  212. package/build-module/components/block-styles/index.js +4 -7
  213. package/build-module/components/block-styles/index.js.map +1 -1
  214. package/build-module/components/block-styles/preview.native.js.map +1 -1
  215. package/build-module/components/block-switcher/index.js +7 -1
  216. package/build-module/components/block-switcher/index.js.map +1 -1
  217. package/build-module/components/block-title/index.js +8 -2
  218. package/build-module/components/block-title/index.js.map +1 -1
  219. package/build-module/components/block-title/use-block-display-title.js +12 -5
  220. package/build-module/components/block-title/use-block-display-title.js.map +1 -1
  221. package/build-module/components/block-tools/block-contextual-toolbar.js +1 -1
  222. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  223. package/build-module/components/block-tools/block-selection-button.js +1 -7
  224. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  225. package/build-module/components/block-tools/index.js +4 -1
  226. package/build-module/components/block-tools/index.js.map +1 -1
  227. package/build-module/components/block-types-list/index.js +1 -1
  228. package/build-module/components/block-types-list/index.js.map +1 -1
  229. package/build-module/components/block-types-list/index.native.js +67 -25
  230. package/build-module/components/block-types-list/index.native.js.map +1 -1
  231. package/build-module/components/border-radius-control/index.js +6 -2
  232. package/build-module/components/border-radius-control/index.js.map +1 -1
  233. package/build-module/components/colors/utils.js +7 -3
  234. package/build-module/components/colors/utils.js.map +1 -1
  235. package/build-module/components/colors/with-colors.js +2 -2
  236. package/build-module/components/colors/with-colors.js.map +1 -1
  237. package/build-module/components/colors-gradients/control.js +50 -40
  238. package/build-module/components/colors-gradients/control.js.map +1 -1
  239. package/build-module/components/colors-gradients/dropdown.js +10 -4
  240. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  241. package/build-module/components/date-format-picker/index.js +1 -1
  242. package/build-module/components/date-format-picker/index.js.map +1 -1
  243. package/build-module/components/font-appearance-control/index.js +7 -4
  244. package/build-module/components/font-appearance-control/index.js.map +1 -1
  245. package/build-module/components/iframe/index.js +19 -6
  246. package/build-module/components/iframe/index.js.map +1 -1
  247. package/build-module/components/image-editor/cropper.js +4 -3
  248. package/build-module/components/image-editor/cropper.js.map +1 -1
  249. package/build-module/components/image-editor/index.js +3 -1
  250. package/build-module/components/image-editor/index.js.map +1 -1
  251. package/build-module/components/image-size-control/index.js +3 -1
  252. package/build-module/components/image-size-control/index.js.map +1 -1
  253. package/build-module/components/index.js +1 -1
  254. package/build-module/components/index.js.map +1 -1
  255. package/build-module/components/index.native.js +1 -1
  256. package/build-module/components/index.native.js.map +1 -1
  257. package/build-module/components/inserter/block-types-tab.native.js +31 -15
  258. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  259. package/build-module/components/inserter/index.native.js +9 -2
  260. package/build-module/components/inserter/index.native.js.map +1 -1
  261. package/build-module/components/inserter/preview-panel.js +9 -9
  262. package/build-module/components/inserter/preview-panel.js.map +1 -1
  263. package/build-module/components/inserter/reusable-blocks-tab.native.js +6 -2
  264. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  265. package/build-module/components/inserter/search-results.native.js +6 -3
  266. package/build-module/components/inserter/search-results.native.js.map +1 -1
  267. package/build-module/components/inserter/utils.native.js +19 -0
  268. package/build-module/components/inserter/utils.native.js.map +1 -1
  269. package/build-module/components/inserter-list-item/index.js +5 -18
  270. package/build-module/components/inserter-list-item/index.js.map +1 -1
  271. package/build-module/components/letter-spacing-control/index.js +5 -3
  272. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  273. package/build-module/components/line-height-control/index.js +5 -3
  274. package/build-module/components/line-height-control/index.js.map +1 -1
  275. package/build-module/components/link-control/index.js +1 -1
  276. package/build-module/components/link-control/index.js.map +1 -1
  277. package/build-module/components/link-control/is-url-like.js +1 -6
  278. package/build-module/components/link-control/is-url-like.js.map +1 -1
  279. package/build-module/components/link-control/use-search-handler.js +1 -6
  280. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  281. package/build-module/components/list-view/block-select-button.js +16 -8
  282. package/build-module/components/list-view/block-select-button.js.map +1 -1
  283. package/build-module/components/list-view/branch.js +1 -6
  284. package/build-module/components/list-view/branch.js.map +1 -1
  285. package/build-module/components/list-view/drop-indicator.js +1 -1
  286. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  287. package/build-module/components/list-view/expander.js +3 -2
  288. package/build-module/components/list-view/expander.js.map +1 -1
  289. package/build-module/components/media-placeholder/index.js +13 -2
  290. package/build-module/components/media-placeholder/index.js.map +1 -1
  291. package/build-module/components/media-replace-flow/index.js +4 -7
  292. package/build-module/components/media-replace-flow/index.js.map +1 -1
  293. package/build-module/components/media-upload/index.native.js +9 -2
  294. package/build-module/components/media-upload/index.native.js.map +1 -1
  295. package/build-module/components/observe-typing/index.js +22 -8
  296. package/build-module/components/observe-typing/index.js.map +1 -1
  297. package/build-module/components/preview-options/index.js +2 -2
  298. package/build-module/components/preview-options/index.js.map +1 -1
  299. package/build-module/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -19
  300. package/build-module/components/recursion-provider/index.js.map +1 -0
  301. package/build-module/components/rich-text/format-toolbar-container.js +58 -12
  302. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  303. package/build-module/components/rich-text/index.js +7 -2
  304. package/build-module/components/rich-text/index.js.map +1 -1
  305. package/build-module/components/rich-text/index.native.js +3 -1
  306. package/build-module/components/rich-text/index.native.js.map +1 -1
  307. package/build-module/components/rich-text/use-before-input-rules.js +96 -0
  308. package/build-module/components/rich-text/use-before-input-rules.js.map +1 -0
  309. package/build-module/components/rich-text/use-format-types.js +37 -18
  310. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  311. package/build-module/components/text-decoration-control/index.js +4 -2
  312. package/build-module/components/text-decoration-control/index.js.map +1 -1
  313. package/build-module/components/text-transform-control/index.js +4 -2
  314. package/build-module/components/text-transform-control/index.js.map +1 -1
  315. package/build-module/components/url-popover/image-url-input-ui.js +4 -1
  316. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  317. package/build-module/components/url-popover/index.js +2 -1
  318. package/build-module/components/url-popover/index.js.map +1 -1
  319. package/build-module/components/writing-flow/use-arrow-nav.js +40 -29
  320. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  321. package/build-module/components/writing-flow/use-drag-selection.js +9 -2
  322. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  323. package/build-module/components/writing-flow/use-multi-selection.js +3 -45
  324. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  325. package/build-module/components/writing-flow/use-select-all.js +3 -1
  326. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  327. package/build-module/components/writing-flow/use-selection-observer.js +1 -3
  328. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  329. package/build-module/components/writing-flow/use-tab-nav.js +1 -1
  330. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  331. package/build-module/hooks/color.js +2 -3
  332. package/build-module/hooks/color.js.map +1 -1
  333. package/build-module/hooks/index.js +1 -0
  334. package/build-module/hooks/index.js.map +1 -1
  335. package/build-module/hooks/layout.js +62 -16
  336. package/build-module/hooks/layout.js.map +1 -1
  337. package/build-module/hooks/style.js +44 -35
  338. package/build-module/hooks/style.js.map +1 -1
  339. package/build-module/hooks/utils.js +5 -2
  340. package/build-module/hooks/utils.js.map +1 -1
  341. package/build-module/index.js +1 -1
  342. package/build-module/index.js.map +1 -1
  343. package/build-module/layouts/flex.js +41 -33
  344. package/build-module/layouts/flex.js.map +1 -1
  345. package/build-module/layouts/flow.js +35 -38
  346. package/build-module/layouts/flow.js.map +1 -1
  347. package/build-module/layouts/utils.js +33 -3
  348. package/build-module/layouts/utils.js.map +1 -1
  349. package/build-module/store/actions.js +9 -10
  350. package/build-module/store/actions.js.map +1 -1
  351. package/build-module/store/index.js +0 -4
  352. package/build-module/store/index.js.map +1 -1
  353. package/build-module/store/reducer.js +5 -2
  354. package/build-module/store/reducer.js.map +1 -1
  355. package/build-module/store/selectors.js +4 -4
  356. package/build-module/store/selectors.js.map +1 -1
  357. package/build-module/utils/block-variation-transforms.js +14 -7
  358. package/build-module/utils/block-variation-transforms.js.map +1 -1
  359. package/build-module/utils/pasting.js +9 -1
  360. package/build-module/utils/pasting.js.map +1 -1
  361. package/build-style/style-rtl.css +72 -14
  362. package/build-style/style.css +72 -14
  363. package/package.json +28 -28
  364. package/src/components/block-list/block-invalid-warning.native.js +42 -7
  365. package/src/components/block-list/block.js +15 -4
  366. package/src/components/block-list/block.native.js +1 -0
  367. package/src/components/block-list/index.native.js +2 -2
  368. package/src/components/block-list/layout.js +15 -3
  369. package/src/components/block-list/style.scss +1 -1
  370. package/src/components/block-list/use-block-props/use-block-class-names.js +5 -1
  371. package/src/components/block-lock/modal.js +47 -9
  372. package/src/components/block-lock/style.scss +10 -0
  373. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
  374. package/src/components/block-mover/mover-description.js +131 -48
  375. package/src/components/block-mover/test/mover-description.js +55 -3
  376. package/src/components/block-pattern-setup/index.js +3 -15
  377. package/src/components/block-pattern-setup/style.scss +4 -2
  378. package/src/components/block-popover/inbetween.js +2 -1
  379. package/src/components/block-popover/index.js +1 -1
  380. package/src/components/block-popover/style.scss +25 -2
  381. package/src/components/block-settings-menu/block-mode-toggle.js +1 -0
  382. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -1
  383. package/src/components/block-settings-menu-controls/index.js +2 -2
  384. package/src/components/block-styles/index.js +4 -7
  385. package/src/components/block-styles/preview.native.js +1 -0
  386. package/src/components/block-styles/style.scss +10 -0
  387. package/src/components/block-switcher/index.js +7 -1
  388. package/src/components/block-title/index.js +3 -2
  389. package/src/components/block-title/use-block-display-title.js +11 -5
  390. package/src/components/block-tools/block-contextual-toolbar.js +3 -1
  391. package/src/components/block-tools/block-selection-button.js +0 -5
  392. package/src/components/block-tools/index.js +4 -1
  393. package/src/components/block-types-list/index.js +1 -1
  394. package/src/components/block-types-list/index.native.js +76 -24
  395. package/src/components/block-types-list/style.native.scss +18 -0
  396. package/src/components/border-radius-control/index.js +6 -1
  397. package/src/components/color-palette/test/__snapshots__/control.js.snap +91 -79
  398. package/src/components/colors/test/__snapshots__/with-colors.js.snap +1 -1
  399. package/src/components/colors/test/with-colors.js +1 -1
  400. package/src/components/colors/utils.js +5 -2
  401. package/src/components/colors/with-colors.js +2 -2
  402. package/src/components/colors-gradients/control.js +82 -65
  403. package/src/components/colors-gradients/dropdown.js +14 -3
  404. package/src/components/colors-gradients/style.scss +34 -9
  405. package/src/components/colors-gradients/test/control.js +16 -23
  406. package/src/components/date-format-picker/index.js +1 -0
  407. package/src/components/font-appearance-control/index.js +3 -0
  408. package/src/components/iframe/index.js +25 -6
  409. package/src/components/image-editor/cropper.js +9 -3
  410. package/src/components/image-editor/index.js +2 -0
  411. package/src/components/image-size-control/README.md +7 -0
  412. package/src/components/image-size-control/index.js +2 -0
  413. package/src/components/index.js +4 -1
  414. package/src/components/index.native.js +4 -1
  415. package/src/components/inserter/block-types-tab.native.js +42 -21
  416. package/src/components/inserter/index.native.js +7 -2
  417. package/src/components/inserter/preview-panel.js +6 -14
  418. package/src/components/inserter/reusable-blocks-tab.native.js +4 -2
  419. package/src/components/inserter/search-results.native.js +4 -2
  420. package/src/components/inserter/style.scss +1 -1
  421. package/src/components/inserter/test/block-types-tab.native.js +2 -0
  422. package/src/components/inserter/test/utils.native.js +37 -0
  423. package/src/components/inserter/utils.native.js +11 -0
  424. package/src/components/inserter-list-item/index.js +5 -18
  425. package/src/components/letter-spacing-control/index.js +2 -0
  426. package/src/components/line-height-control/index.js +2 -0
  427. package/src/components/link-control/index.js +1 -0
  428. package/src/components/link-control/is-url-like.js +1 -6
  429. package/src/components/link-control/test/index.js +6 -4
  430. package/src/components/link-control/use-search-handler.js +1 -6
  431. package/src/components/list-view/block-select-button.js +29 -14
  432. package/src/components/list-view/branch.js +1 -6
  433. package/src/components/list-view/drop-indicator.js +1 -1
  434. package/src/components/list-view/expander.js +4 -2
  435. package/src/components/list-view/style.scss +18 -4
  436. package/src/components/media-placeholder/index.js +19 -0
  437. package/src/components/media-replace-flow/index.js +3 -6
  438. package/src/components/media-replace-flow/test/index.js +14 -4
  439. package/src/components/media-upload/index.native.js +7 -3
  440. package/src/components/observe-typing/index.js +17 -14
  441. package/src/components/preview-options/index.js +2 -2
  442. package/src/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -28
  443. package/src/components/{use-no-recursive-renders/test/use-no-recursive-renders.js → recursion-provider/test/index.js} +5 -6
  444. package/src/components/rich-text/README.md +13 -1
  445. package/src/components/rich-text/format-toolbar-container.js +63 -14
  446. package/src/components/rich-text/index.js +3 -0
  447. package/src/components/rich-text/index.native.js +2 -0
  448. package/src/components/rich-text/use-before-input-rules.js +91 -0
  449. package/src/components/rich-text/use-format-types.js +38 -17
  450. package/src/components/text-decoration-control/index.js +4 -2
  451. package/src/components/text-transform-control/index.js +4 -2
  452. package/src/components/url-popover/image-url-input-ui.js +3 -0
  453. package/src/components/url-popover/index.js +1 -0
  454. package/src/components/url-popover/test/__snapshots__/index.js.snap +3 -0
  455. package/src/components/writing-flow/use-arrow-nav.js +36 -34
  456. package/src/components/writing-flow/use-drag-selection.js +7 -1
  457. package/src/components/writing-flow/use-multi-selection.js +1 -48
  458. package/src/components/writing-flow/use-select-all.js +2 -1
  459. package/src/components/writing-flow/use-selection-observer.js +2 -3
  460. package/src/components/writing-flow/use-tab-nav.js +1 -1
  461. package/src/hooks/color.js +10 -3
  462. package/src/hooks/index.js +1 -0
  463. package/src/hooks/layout.js +66 -23
  464. package/src/hooks/style.js +46 -39
  465. package/src/hooks/utils.js +7 -3
  466. package/src/index.js +1 -0
  467. package/src/layouts/flex.js +47 -41
  468. package/src/layouts/flow.js +35 -34
  469. package/src/layouts/test/flex.js +21 -0
  470. package/src/layouts/test/flow.js +21 -0
  471. package/src/layouts/test/utils.js +138 -0
  472. package/src/layouts/utils.js +44 -3
  473. package/src/store/actions.js +10 -11
  474. package/src/store/index.js +0 -4
  475. package/src/store/reducer.js +3 -2
  476. package/src/store/selectors.js +3 -4
  477. package/src/utils/block-variation-transforms.js +13 -6
  478. package/src/utils/pasting.js +10 -1
  479. package/src/utils/test/block-variation-transforms.js +24 -0
  480. package/src/utils/test/pasting.js +10 -0
  481. package/tsconfig.json +2 -1
  482. package/build/components/use-no-recursive-renders/index.js.map +0 -1
  483. package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
@@ -65,12 +65,31 @@ function useStylesCompatibility() {
65
65
  return;
66
66
  }
67
67
 
68
- const isMatch = Array.from( cssRules ).find(
69
- ( { selectorText } ) =>
70
- selectorText &&
71
- ( selectorText.includes( `.${ BODY_CLASS_NAME }` ) ||
72
- selectorText.includes( `.${ BLOCK_PREFIX }` ) )
73
- );
68
+ function matchFromRules( _cssRules ) {
69
+ return Array.from( _cssRules ).find(
70
+ ( {
71
+ selectorText,
72
+ conditionText,
73
+ cssRules: __cssRules,
74
+ } ) => {
75
+ // If the rule is conditional then it will not have selector text.
76
+ // Recurse into child CSS ruleset to determine selector eligibility.
77
+ if ( conditionText ) {
78
+ return matchFromRules( __cssRules );
79
+ }
80
+
81
+ return (
82
+ selectorText &&
83
+ ( selectorText.includes(
84
+ `.${ BODY_CLASS_NAME }`
85
+ ) ||
86
+ selectorText.includes( `.${ BLOCK_PREFIX }` ) )
87
+ );
88
+ }
89
+ );
90
+ }
91
+
92
+ const isMatch = matchFromRules( cssRules );
74
93
 
75
94
  if (
76
95
  isMatch &&
@@ -23,6 +23,7 @@ export default function ImageCropper( {
23
23
  clientWidth,
24
24
  naturalHeight,
25
25
  naturalWidth,
26
+ borderProps,
26
27
  } ) {
27
28
  const {
28
29
  isInProgress,
@@ -44,10 +45,15 @@ export default function ImageCropper( {
44
45
 
45
46
  return (
46
47
  <div
47
- className={ classnames( 'wp-block-image__crop-area', {
48
- 'is-applying': isInProgress,
49
- } ) }
48
+ className={ classnames(
49
+ 'wp-block-image__crop-area',
50
+ borderProps?.className,
51
+ {
52
+ 'is-applying': isInProgress,
53
+ }
54
+ ) }
50
55
  style={ {
56
+ ...borderProps?.style,
51
57
  width: width || clientWidth,
52
58
  height: editedHeight,
53
59
  } }
@@ -20,10 +20,12 @@ export default function ImageEditor( {
20
20
  clientWidth,
21
21
  naturalHeight,
22
22
  naturalWidth,
23
+ borderProps,
23
24
  } ) {
24
25
  return (
25
26
  <>
26
27
  <Cropper
28
+ borderProps={ borderProps }
27
29
  url={ url }
28
30
  width={ width }
29
31
  height={ height }
@@ -32,6 +32,13 @@ const MyImageSizeControl = () => {
32
32
 
33
33
  The component accepts the following props:
34
34
 
35
+ ### imageSizeHelp
36
+
37
+ If this property is added, a help text will be generated for the image size control, using imageSizeHelp property as the content.
38
+
39
+ - Type: `String|WPElement`
40
+ - Required: No
41
+
35
42
  ### slug
36
43
 
37
44
  The currently-selected image size slug (`thumbnail`, `large`, etc). This is used by the parent component to get the specific image, which is used to populate `imageHeight` & `imageWidth`. This is not required, but necessary when `imageSizeOptions` is used.
@@ -23,6 +23,7 @@ const IMAGE_SIZE_PRESETS = [ 25, 50, 75, 100 ];
23
23
  const noop = () => {};
24
24
 
25
25
  export default function ImageSizeControl( {
26
+ imageSizeHelp,
26
27
  imageWidth,
27
28
  imageHeight,
28
29
  imageSizeOptions = [],
@@ -44,6 +45,7 @@ export default function ImageSizeControl( {
44
45
  value={ slug }
45
46
  options={ imageSizeOptions }
46
47
  onChange={ onChangeImage }
48
+ help={ imageSizeHelp }
47
49
  />
48
50
  ) }
49
51
  { isResizable && (
@@ -147,7 +147,10 @@ export { default as Warning } from './warning';
147
147
  export { default as WritingFlow } from './writing-flow';
148
148
  export { default as useBlockDisplayInformation } from './use-block-display-information';
149
149
  export { default as __unstableIframe } from './iframe';
150
- export { default as __experimentalUseNoRecursiveRenders } from './use-no-recursive-renders';
150
+ export {
151
+ RecursionProvider as __experimentalRecursionProvider,
152
+ useHasRecursion as __experimentalUseHasRecursion,
153
+ } from './recursion-provider';
151
154
  export { default as __experimentalBlockPatternsList } from './block-patterns-list';
152
155
  export { default as __experimentalPublishDateTimePicker } from './publish-date-time-picker';
153
156
  export { default as __experimentalInspectorPopoverHeader } from './inspector-popover-header';
@@ -59,7 +59,10 @@ export { default as Caption } from './caption';
59
59
  export { default as PanelColorSettings } from './panel-color-settings';
60
60
  export { default as __experimentalPanelColorGradientSettings } from './colors-gradients/panel-color-gradient-settings';
61
61
  export { default as useSetting } from './use-setting';
62
- export { default as __experimentalUseNoRecursiveRenders } from './use-no-recursive-renders';
62
+ export {
63
+ RecursionProvider as __experimentalRecursionProvider,
64
+ useHasRecursion as __experimentalUseHasRecursion,
65
+ } from './recursion-provider';
63
66
  export { default as Warning } from './warning';
64
67
  export { default as ContrastChecker } from './contrast-checker';
65
68
  export { default as useMultipleOriginColorsAndGradients } from './colors-gradients/use-multiple-origin-colors-and-gradients';
@@ -1,36 +1,29 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useSelect } from '@wordpress/data';
4
+ import { useMemo } from '@wordpress/element';
5
5
 
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
9
  import BlockTypesList from '../block-types-list';
10
10
  import useClipboardBlock from './hooks/use-clipboard-block';
11
- import { store as blockEditorStore } from '../../store';
12
11
  import useBlockTypeImpressions from './hooks/use-block-type-impressions';
13
- import { filterInserterItems } from './utils';
12
+ import { createInserterSection, filterInserterItems } from './utils';
13
+ import useBlockTypesState from './hooks/use-block-types-state';
14
14
 
15
- function BlockTypesTab( { onSelect, rootClientId, listProps } ) {
16
- const clipboardBlock = useClipboardBlock( rootClientId );
17
-
18
- const { blockTypes } = useSelect(
19
- ( select ) => {
20
- const { getInserterItems } = select( blockEditorStore );
21
- const blockItems = filterInserterItems(
22
- getInserterItems( rootClientId )
23
- );
15
+ const getBlockNamespace = ( item ) => item.name.split( '/' )[ 0 ];
24
16
 
25
- return {
26
- blockTypes: clipboardBlock
27
- ? [ clipboardBlock, ...blockItems ]
28
- : blockItems,
29
- };
30
- },
31
- [ rootClientId ]
17
+ function BlockTypesTab( { onSelect, rootClientId, listProps } ) {
18
+ const [ rawBlockTypes, , collections ] = useBlockTypesState(
19
+ rootClientId,
20
+ onSelect
32
21
  );
33
-
22
+ const clipboardBlock = useClipboardBlock( rootClientId );
23
+ const filteredBlockTypes = filterInserterItems( rawBlockTypes );
24
+ const blockTypes = clipboardBlock
25
+ ? [ clipboardBlock, ...filteredBlockTypes ]
26
+ : filteredBlockTypes;
34
27
  const { items, trackBlockTypeSelected } =
35
28
  useBlockTypeImpressions( blockTypes );
36
29
 
@@ -39,10 +32,38 @@ function BlockTypesTab( { onSelect, rootClientId, listProps } ) {
39
32
  onSelect( ...args );
40
33
  };
41
34
 
35
+ const collectionSections = useMemo( () => {
36
+ const result = [];
37
+ Object.keys( collections ).forEach( ( namespace ) => {
38
+ const data = items.filter(
39
+ ( item ) => getBlockNamespace( item ) === namespace
40
+ );
41
+ if ( data.length > 0 ) {
42
+ result.push(
43
+ createInserterSection( {
44
+ key: `collection-${ namespace }`,
45
+ metadata: {
46
+ icon: collections[ namespace ].icon,
47
+ title: collections[ namespace ].title,
48
+ },
49
+ items: data,
50
+ } )
51
+ );
52
+ }
53
+ } );
54
+
55
+ return result;
56
+ }, [ items, collections ] );
57
+
58
+ const sections = [
59
+ createInserterSection( { key: 'default', items } ),
60
+ ...collectionSections,
61
+ ];
62
+
42
63
  return (
43
64
  <BlockTypesList
44
65
  name="Blocks"
45
- items={ items }
66
+ sections={ sections }
46
67
  onSelect={ handleSelect }
47
68
  listProps={ listProps }
48
69
  />
@@ -2,7 +2,6 @@
2
2
  * External dependencies
3
3
  */
4
4
  import { AccessibilityInfo, Platform, Text } from 'react-native';
5
- import { delay } from 'lodash';
6
5
 
7
6
  /**
8
7
  * WordPress dependencies
@@ -80,6 +79,8 @@ const defaultRenderToggle = ( {
80
79
  };
81
80
 
82
81
  export class Inserter extends Component {
82
+ announcementTimeout;
83
+
83
84
  constructor() {
84
85
  super( ...arguments );
85
86
 
@@ -88,6 +89,10 @@ export class Inserter extends Component {
88
89
  this.renderContent = this.renderContent.bind( this );
89
90
  }
90
91
 
92
+ componentWillUnmount() {
93
+ clearTimeout( this.announcementTimeout );
94
+ }
95
+
91
96
  getInsertionOptions() {
92
97
  const addBeforeOption = {
93
98
  value: 'before',
@@ -217,7 +222,7 @@ export class Inserter extends Component {
217
222
  const announcement = isOpen
218
223
  ? __( 'Scrollable block menu opened. Select a block.' )
219
224
  : __( 'Scrollable block menu closed.' );
220
- delay(
225
+ this.announcementTimeout = setTimeout(
221
226
  () =>
222
227
  AccessibilityInfo.announceForAccessibility(
223
228
  announcement
@@ -5,7 +5,6 @@ import {
5
5
  isReusableBlock,
6
6
  createBlock,
7
7
  getBlockFromExample,
8
- getBlockType,
9
8
  } from '@wordpress/blocks';
10
9
  import { __ } from '@wordpress/i18n';
11
10
 
@@ -16,31 +15,24 @@ import BlockCard from '../block-card';
16
15
  import BlockPreview from '../block-preview';
17
16
 
18
17
  function InserterPreviewPanel( { item } ) {
19
- const { name, title, icon, description, initialAttributes } = item;
20
- const hoveredItemBlockType = getBlockType( name );
18
+ const { name, title, icon, description, initialAttributes, example } = item;
21
19
  const isReusable = isReusableBlock( item );
22
20
  return (
23
21
  <div className="block-editor-inserter__preview-container">
24
22
  <div className="block-editor-inserter__preview">
25
- { isReusable || hoveredItemBlockType?.example ? (
23
+ { isReusable || example ? (
26
24
  <div className="block-editor-inserter__preview-content">
27
25
  <BlockPreview
28
26
  __experimentalPadding={ 16 }
29
- viewportWidth={
30
- hoveredItemBlockType.example?.viewportWidth ??
31
- 500
32
- }
27
+ viewportWidth={ example?.viewportWidth ?? 500 }
33
28
  blocks={
34
- hoveredItemBlockType.example
29
+ example
35
30
  ? getBlockFromExample( item.name, {
36
31
  attributes: {
37
- ...hoveredItemBlockType.example
38
- .attributes,
32
+ ...example.attributes,
39
33
  ...initialAttributes,
40
34
  },
41
- innerBlocks:
42
- hoveredItemBlockType.example
43
- .innerBlocks,
35
+ innerBlocks: example.innerBlocks,
44
36
  } )
45
37
  : createBlock( name, initialAttributes )
46
38
  }
@@ -8,7 +8,7 @@ import { useSelect } from '@wordpress/data';
8
8
  */
9
9
  import BlockTypesList from '../block-types-list';
10
10
  import { store as blockEditorStore } from '../../store';
11
- import { filterInserterItems } from './utils';
11
+ import { createInserterSection, filterInserterItems } from './utils';
12
12
 
13
13
  function ReusableBlocksTab( { onSelect, rootClientId, listProps } ) {
14
14
  const { items } = useSelect(
@@ -23,10 +23,12 @@ function ReusableBlocksTab( { onSelect, rootClientId, listProps } ) {
23
23
  [ rootClientId ]
24
24
  );
25
25
 
26
+ const sections = [ createInserterSection( { key: 'reuseable', items } ) ];
27
+
26
28
  return (
27
29
  <BlockTypesList
28
30
  name="ReusableBlocks"
29
- items={ items }
31
+ sections={ sections }
30
32
  onSelect={ onSelect }
31
33
  listProps={ listProps }
32
34
  />
@@ -11,7 +11,7 @@ import BlockTypesList from '../block-types-list';
11
11
  import InserterNoResults from './no-results';
12
12
  import { store as blockEditorStore } from '../../store';
13
13
  import useBlockTypeImpressions from './hooks/use-block-type-impressions';
14
- import { filterInserterItems } from './utils';
14
+ import { createInserterSection, filterInserterItems } from './utils';
15
15
 
16
16
  function InserterSearchResults( {
17
17
  filterValue,
@@ -51,7 +51,9 @@ function InserterSearchResults( {
51
51
  <BlockTypesList
52
52
  name="Blocks"
53
53
  initialNumToRender={ isFullScreen ? 10 : 3 }
54
- { ...{ items, onSelect: handleSelect, listProps } }
54
+ sections={ [ createInserterSection( { key: 'search', items } ) ] }
55
+ onSelect={ handleSelect }
56
+ listProps={ listProps }
55
57
  />
56
58
  );
57
59
  }
@@ -342,7 +342,7 @@ $block-inserter-tabs-height: 44px;
342
342
  .block-editor-block-patterns-explorer {
343
343
  &__sidebar {
344
344
  position: absolute;
345
- top: $header-height;
345
+ top: $header-height + $grid-unit-20;
346
346
  left: 0;
347
347
  bottom: 0;
348
348
  width: $sidebar-width;
@@ -18,6 +18,8 @@ jest.mock( '../hooks/use-clipboard-block' );
18
18
  jest.mock( '@wordpress/data/src/components/use-select' );
19
19
 
20
20
  const selectMock = {
21
+ getCategories: jest.fn().mockReturnValue( [] ),
22
+ getCollections: jest.fn().mockReturnValue( [] ),
21
23
  getInserterItems: jest.fn().mockReturnValue( [] ),
22
24
  canInsertBlockType: jest.fn(),
23
25
  getBlockType: jest.fn(),
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { createInserterSection } from '../utils';
5
+
6
+ describe( 'createInserterSection', () => {
7
+ it( 'returns the expected object shape', () => {
8
+ const key = 'mock-1';
9
+ const items = [ 1, 2, 3 ];
10
+ const metadata = { icon: 'icon-mock', title: 'Title Mock' };
11
+
12
+ expect( createInserterSection( { key, metadata, items } ) ).toEqual(
13
+ expect.objectContaining( {
14
+ metadata,
15
+ data: [ { key, list: items } ],
16
+ } )
17
+ );
18
+ } );
19
+
20
+ it( 'return always includes metadata', () => {
21
+ const key = 'mock-1';
22
+ const items = [ 1, 2, 3 ];
23
+
24
+ expect( createInserterSection( { key, items } ) ).toEqual(
25
+ expect.objectContaining( {
26
+ metadata: {},
27
+ data: [ { key, list: items } ],
28
+ } )
29
+ );
30
+ } );
31
+
32
+ it( 'requires a unique key', () => {
33
+ expect( () => {
34
+ createInserterSection( { items: [ 1, 2, 3 ] } );
35
+ } ).toThrow( 'A unique key for the section must be provided.' );
36
+ } );
37
+ } );
@@ -33,3 +33,14 @@ export function filterInserterItems(
33
33
  blockAllowed( block, { onlyReusable, allowReusable } )
34
34
  );
35
35
  }
36
+
37
+ export function createInserterSection( { key, metadata = {}, items } ) {
38
+ if ( ! key ) {
39
+ throw new Error( 'A unique key for the section must be provided.' );
40
+ }
41
+
42
+ return {
43
+ metadata,
44
+ data: [ { key, list: items } ],
45
+ };
46
+ }
@@ -11,7 +11,8 @@ import {
11
11
  createBlock,
12
12
  createBlocksFromInnerBlocksTemplate,
13
13
  } from '@wordpress/blocks';
14
- import { ENTER } from '@wordpress/keycodes';
14
+ import { __experimentalTruncate as Truncate } from '@wordpress/components';
15
+ import { ENTER, isAppleOS } from '@wordpress/keycodes';
15
16
 
16
17
  /**
17
18
  * Internal dependencies
@@ -20,22 +21,6 @@ import BlockIcon from '../block-icon';
20
21
  import { InserterListboxItem } from '../inserter-listbox';
21
22
  import InserterDraggableBlocks from '../inserter-draggable-blocks';
22
23
 
23
- /**
24
- * Return true if platform is MacOS.
25
- *
26
- * @param {Object} _window window object by default; used for DI testing.
27
- *
28
- * @return {boolean} True if MacOS; false otherwise.
29
- */
30
- function isAppleOS( _window = window ) {
31
- const { platform } = _window.navigator;
32
-
33
- return (
34
- platform.indexOf( 'Mac' ) !== -1 ||
35
- [ 'iPad', 'iPhone' ].includes( platform )
36
- );
37
- }
38
-
39
24
  function InserterListItem( {
40
25
  className,
41
26
  isFirst,
@@ -135,7 +120,9 @@ function InserterListItem( {
135
120
  <BlockIcon icon={ item.icon } showColors />
136
121
  </span>
137
122
  <span className="block-editor-block-types-list__item-title">
138
- { item.title }
123
+ <Truncate numberOfLines={ 3 }>
124
+ { item.title }
125
+ </Truncate>
139
126
  </span>
140
127
  </InserterListboxItem>
141
128
  </div>
@@ -26,6 +26,7 @@ export default function LetterSpacingControl( {
26
26
  value,
27
27
  onChange,
28
28
  __unstableInputWidth = '60px',
29
+ ...otherProps
29
30
  } ) {
30
31
  const units = useCustomUnits( {
31
32
  availableUnits: useSetting( 'spacing.units' ) || [ 'px', 'em', 'rem' ],
@@ -33,6 +34,7 @@ export default function LetterSpacingControl( {
33
34
  } );
34
35
  return (
35
36
  <UnitControl
37
+ { ...otherProps }
36
38
  label={ __( 'Letter spacing' ) }
37
39
  value={ value }
38
40
  __unstableInputWidth={ __unstableInputWidth }
@@ -21,6 +21,7 @@ const LineHeightControl = ( {
21
21
  /** Start opting into the new margin-free styles that will become the default in a future version. */
22
22
  __nextHasNoMarginBottom = false,
23
23
  __unstableInputWidth = '60px',
24
+ ...otherProps
24
25
  } ) => {
25
26
  const isDefined = isLineHeightDefined( lineHeight );
26
27
 
@@ -89,6 +90,7 @@ const LineHeightControl = ( {
89
90
  style={ deprecatedStyles }
90
91
  >
91
92
  <NumberControl
93
+ { ...otherProps }
92
94
  __unstableInputWidth={ __unstableInputWidth }
93
95
  __unstableStateReducer={ stateReducer }
94
96
  onChange={ onChange }
@@ -235,6 +235,7 @@ function LinkControl( {
235
235
  internalTextValue !== value?.title
236
236
  ) {
237
237
  onChange( {
238
+ ...value,
238
239
  url: currentInputValue,
239
240
  title: internalTextValue,
240
241
  } );
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { startsWith } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -20,6 +15,6 @@ import { isURL } from '@wordpress/url';
20
15
  * @return {boolean} whether or not the value is potentially a URL.
21
16
  */
22
17
  export default function isURLLike( val ) {
23
- const isInternal = startsWith( val, '#' );
18
+ const isInternal = val?.startsWith( '#' );
24
19
  return isURL( val ) || ( val && val.includes( 'www.' ) ) || isInternal;
25
20
  }
@@ -2417,10 +2417,12 @@ describe( 'Controlling link title text', () => {
2417
2417
  Simulate.keyDown( textInput, { keyCode: ENTER } );
2418
2418
  } );
2419
2419
 
2420
- expect( mockOnChange ).toHaveBeenCalledWith( {
2421
- title: textValue,
2422
- url: selectedLink.url,
2423
- } );
2420
+ expect( mockOnChange ).toHaveBeenCalledWith(
2421
+ expect.objectContaining( {
2422
+ title: textValue,
2423
+ url: selectedLink.url,
2424
+ } )
2425
+ );
2424
2426
 
2425
2427
  // The text input should not be showing as the form is submitted.
2426
2428
  expect(
@@ -5,11 +5,6 @@ import { getProtocol, prependHTTP } from '@wordpress/url';
5
5
  import { useCallback } from '@wordpress/element';
6
6
  import { useSelect } from '@wordpress/data';
7
7
 
8
- /**
9
- * External dependencies
10
- */
11
- import { startsWith } from 'lodash';
12
-
13
8
  /**
14
9
  * Internal dependencies
15
10
  */
@@ -38,7 +33,7 @@ export const handleDirectEntry = ( val ) => {
38
33
  type = TEL_TYPE;
39
34
  }
40
35
 
41
- if ( startsWith( val, '#' ) ) {
36
+ if ( val?.startsWith( '#' ) ) {
42
37
  type = INTERNAL_TYPE;
43
38
  }
44
39
 
@@ -6,7 +6,11 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { Button } from '@wordpress/components';
9
+ import {
10
+ Button,
11
+ __experimentalHStack as HStack,
12
+ __experimentalTruncate as Truncate,
13
+ } from '@wordpress/components';
10
14
  import { forwardRef } from '@wordpress/element';
11
15
  import { Icon, lock } from '@wordpress/icons';
12
16
  import { SPACE, ENTER } from '@wordpress/keycodes';
@@ -16,7 +20,7 @@ import { SPACE, ENTER } from '@wordpress/keycodes';
16
20
  */
17
21
  import BlockIcon from '../block-icon';
18
22
  import useBlockDisplayInformation from '../use-block-display-information';
19
- import BlockTitle from '../block-title';
23
+ import useBlockDisplayTitle from '../block-title/use-block-display-title';
20
24
  import ListViewExpander from './expander';
21
25
  import { useBlockLock } from '../block-lock';
22
26
 
@@ -35,6 +39,10 @@ function ListViewBlockSelectButton(
35
39
  ref
36
40
  ) {
37
41
  const blockInformation = useBlockDisplayInformation( clientId );
42
+ const blockTitle = useBlockDisplayTitle( {
43
+ clientId,
44
+ context: 'list-view',
45
+ } );
38
46
  const { isLocked } = useBlockLock( clientId );
39
47
 
40
48
  // The `href` attribute triggers the browser's native HTML drag operations.
@@ -72,19 +80,26 @@ function ListViewBlockSelectButton(
72
80
  >
73
81
  <ListViewExpander onClick={ onToggleExpanded } />
74
82
  <BlockIcon icon={ blockInformation?.icon } showColors />
75
- <span className="block-editor-list-view-block-select-button__title">
76
- <BlockTitle clientId={ clientId } maximumLength={ 35 } />
77
- </span>
78
- { blockInformation?.anchor && (
79
- <span className="block-editor-list-view-block-select-button__anchor">
80
- { blockInformation.anchor }
83
+ <HStack
84
+ alignment="center"
85
+ className="block-editor-list-view-block-select-button__label-wrapper"
86
+ justify="flex-start"
87
+ spacing={ 1 }
88
+ >
89
+ <span className="block-editor-list-view-block-select-button__title">
90
+ <Truncate ellipsizeMode="auto">{ blockTitle }</Truncate>
81
91
  </span>
82
- ) }
83
- { isLocked && (
84
- <span className="block-editor-list-view-block-select-button__lock">
85
- <Icon icon={ lock } />
86
- </span>
87
- ) }
92
+ { blockInformation?.anchor && (
93
+ <span className="block-editor-list-view-block-select-button__anchor">
94
+ { blockInformation.anchor }
95
+ </span>
96
+ ) }
97
+ { isLocked && (
98
+ <span className="block-editor-list-view-block-select-button__lock">
99
+ <Icon icon={ lock } />
100
+ </span>
101
+ ) }
102
+ </HStack>
88
103
  </Button>
89
104
  </>
90
105
  );
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { compact } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -95,7 +90,7 @@ function ListViewBranch( props ) {
95
90
 
96
91
  const { expandedState, draggedClientIds } = useListViewContext();
97
92
 
98
- const filteredBlocks = compact( blocks );
93
+ const filteredBlocks = blocks.filter( Boolean );
99
94
  const blockCount = filteredBlocks.length;
100
95
  let nextPosition = listPosition;
101
96
 
@@ -81,7 +81,7 @@ export default function ListViewDropIndicator( {
81
81
  left: rect.left + indent,
82
82
  right: rect.right,
83
83
  width: 0,
84
- height: rect.height,
84
+ height: 0,
85
85
  ownerDocument,
86
86
  };
87
87