@wordpress/block-editor 8.0.17 → 8.1.2-next.f435e9e01b.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 (496) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +19 -6
  4. package/build/components/block-caption/index.native.js +14 -3
  5. package/build/components/block-caption/index.native.js.map +1 -1
  6. package/build/components/block-edit/index.js +9 -0
  7. package/build/components/block-edit/index.js.map +1 -1
  8. package/build/components/block-inspector/index.js +14 -19
  9. package/build/components/block-inspector/index.js.map +1 -1
  10. package/build/components/block-list-appender/index.js +3 -11
  11. package/build/components/block-list-appender/index.js.map +1 -1
  12. package/build/components/block-media-update-progress/index.native.js +2 -1
  13. package/build/components/block-media-update-progress/index.native.js.map +1 -1
  14. package/build/components/block-preview/auto.js +10 -2
  15. package/build/components/block-preview/auto.js.map +1 -1
  16. package/build/components/block-settings/container.native.js +2 -1
  17. package/build/components/block-settings/container.native.js.map +1 -1
  18. package/build/components/block-styles/index.js +110 -134
  19. package/build/components/block-styles/index.js.map +1 -1
  20. package/build/components/block-styles/menu-items.js +63 -0
  21. package/build/components/block-styles/menu-items.js.map +1 -0
  22. package/build/components/block-styles/preview-panel.js +45 -0
  23. package/build/components/block-styles/preview-panel.js.map +1 -0
  24. package/build/components/block-styles/preview.native.js +2 -2
  25. package/build/components/block-styles/preview.native.js.map +1 -1
  26. package/build/components/block-styles/use-styles-for-block.js +119 -0
  27. package/build/components/block-styles/use-styles-for-block.js.map +1 -0
  28. package/build/components/block-styles/utils.js +39 -0
  29. package/build/components/block-styles/utils.js.map +1 -1
  30. package/build/components/block-switcher/block-styles-menu.js +3 -23
  31. package/build/components/block-switcher/block-styles-menu.js.map +1 -1
  32. package/build/components/block-tools/back-compat.js +2 -1
  33. package/build/components/block-tools/back-compat.js.map +1 -1
  34. package/build/components/block-tools/block-selection-button.js +5 -1
  35. package/build/components/block-tools/block-selection-button.js.map +1 -1
  36. package/build/components/block-tools/insertion-point.js +11 -1
  37. package/build/components/block-tools/insertion-point.js.map +1 -1
  38. package/build/components/block-types-list/index.native.js +2 -2
  39. package/build/components/block-types-list/index.native.js.map +1 -1
  40. package/build/components/button-block-appender/index.js +2 -1
  41. package/build/components/button-block-appender/index.js.map +1 -1
  42. package/build/components/colors-gradients/dropdown.js +1 -1
  43. package/build/components/colors-gradients/dropdown.js.map +1 -1
  44. package/build/components/colors-gradients/panel-color-gradient-settings.native.js +6 -3
  45. package/build/components/colors-gradients/panel-color-gradient-settings.native.js.map +1 -1
  46. package/build/components/colors-gradients/tools-panel-color-dropdown.js +89 -0
  47. package/build/components/colors-gradients/tools-panel-color-dropdown.js.map +1 -0
  48. package/build/components/contrast-checker/index.js +80 -44
  49. package/build/components/contrast-checker/index.js.map +1 -1
  50. package/build/components/contrast-checker/index.native.js +108 -0
  51. package/build/components/contrast-checker/index.native.js.map +1 -0
  52. package/build/components/default-block-appender/index.js +16 -19
  53. package/build/components/default-block-appender/index.js.map +1 -1
  54. package/build/components/default-style-picker/index.js +18 -3
  55. package/build/components/default-style-picker/index.js.map +1 -1
  56. package/build/components/iframe/index.js +4 -5
  57. package/build/components/iframe/index.js.map +1 -1
  58. package/build/components/index.js +18 -18
  59. package/build/components/index.js.map +1 -1
  60. package/build/components/index.native.js +18 -0
  61. package/build/components/index.native.js.map +1 -1
  62. package/build/components/inner-blocks/default-block-appender.js +2 -4
  63. package/build/components/inner-blocks/default-block-appender.js.map +1 -1
  64. package/build/components/inner-blocks/use-nested-settings-update.js +16 -14
  65. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  66. package/build/components/inserter/index.js +61 -3
  67. package/build/components/inserter/index.js.map +1 -1
  68. package/build/components/inserter/index.native.js +1 -1
  69. package/build/components/inserter/index.native.js.map +1 -1
  70. package/build/components/inserter/library.js +5 -3
  71. package/build/components/inserter/library.js.map +1 -1
  72. package/build/components/inserter/menu.js +11 -3
  73. package/build/components/inserter/menu.js.map +1 -1
  74. package/build/components/inserter/search-items.js +3 -1
  75. package/build/components/inserter/search-items.js.map +1 -1
  76. package/build/components/inserter/tabs.native.js +7 -4
  77. package/build/components/inserter/tabs.native.js.map +1 -1
  78. package/build/components/inspector-controls/block-support-slot-container.js +2 -1
  79. package/build/components/inspector-controls/block-support-slot-container.js.map +1 -1
  80. package/build/components/inspector-controls/block-support-tools-panel.js +14 -44
  81. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  82. package/build/components/inspector-controls/fill.native.js +3 -5
  83. package/build/components/inspector-controls/fill.native.js.map +1 -1
  84. package/build/components/inspector-controls/groups.js +4 -0
  85. package/build/components/inspector-controls/groups.js.map +1 -1
  86. package/build/components/inspector-controls/slot.js +1 -3
  87. package/build/components/inspector-controls/slot.js.map +1 -1
  88. package/build/components/letter-spacing-control/index.js +6 -6
  89. package/build/components/letter-spacing-control/index.js.map +1 -1
  90. package/build/components/line-height-control/index.native.js +3 -2
  91. package/build/components/line-height-control/index.native.js.map +1 -1
  92. package/build/components/link-control/link-preview.js +1 -1
  93. package/build/components/link-control/link-preview.js.map +1 -1
  94. package/build/components/link-control/search-item.js +11 -1
  95. package/build/components/link-control/search-item.js.map +1 -1
  96. package/build/components/link-control/search-results.js +2 -1
  97. package/build/components/link-control/search-results.js.map +1 -1
  98. package/build/components/link-control/use-search-handler.js +18 -5
  99. package/build/components/link-control/use-search-handler.js.map +1 -1
  100. package/build/components/list-view/block-contents.js +3 -1
  101. package/build/components/list-view/block-contents.js.map +1 -1
  102. package/build/components/list-view/block-select-button.js +26 -4
  103. package/build/components/list-view/block-select-button.js.map +1 -1
  104. package/build/components/list-view/block.js +10 -1
  105. package/build/components/list-view/block.js.map +1 -1
  106. package/build/components/media-placeholder/index.js +3 -11
  107. package/build/components/media-placeholder/index.js.map +1 -1
  108. package/build/components/media-replace-flow/index.js +32 -6
  109. package/build/components/media-replace-flow/index.js.map +1 -1
  110. package/build/components/media-replace-flow/index.native.js +13 -0
  111. package/build/components/media-replace-flow/index.native.js.map +1 -0
  112. package/build/components/media-upload-progress/index.native.js +2 -1
  113. package/build/components/media-upload-progress/index.native.js.map +1 -1
  114. package/build/components/panel-color-settings/index.js +7 -3
  115. package/build/components/panel-color-settings/index.js.map +1 -1
  116. package/build/components/provider/block-refs-provider.js +4 -1
  117. package/build/components/provider/block-refs-provider.js.map +1 -1
  118. package/build/components/rich-text/file-paste-handler.js +1 -1
  119. package/build/components/rich-text/file-paste-handler.js.map +1 -1
  120. package/build/components/rich-text/index.js +2 -1
  121. package/build/components/rich-text/index.js.map +1 -1
  122. package/build/components/rich-text/index.native.js +2 -1
  123. package/build/components/rich-text/index.native.js.map +1 -1
  124. package/build/components/rich-text/prevent-event-discovery.js +33 -0
  125. package/build/components/rich-text/prevent-event-discovery.js.map +1 -0
  126. package/build/components/rich-text/use-input-rules.js +3 -1
  127. package/build/components/rich-text/use-input-rules.js.map +1 -1
  128. package/build/components/rich-text/use-paste-handler.js +14 -5
  129. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  130. package/build/components/rich-text/utils.js +2 -1
  131. package/build/components/rich-text/utils.js.map +1 -1
  132. package/build/components/selection-scroll-into-view/index.js +2 -1
  133. package/build/components/selection-scroll-into-view/index.js.map +1 -1
  134. package/build/components/use-display-block-controls/index.native.js +45 -0
  135. package/build/components/use-display-block-controls/index.native.js.map +1 -0
  136. package/build/components/use-on-block-drop/index.js +7 -3
  137. package/build/components/use-on-block-drop/index.js.map +1 -1
  138. package/build/components/writing-flow/use-multi-selection.js +3 -1
  139. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  140. package/build/hooks/border-color.js +63 -5
  141. package/build/hooks/border-color.js.map +1 -1
  142. package/build/hooks/border-radius.js +47 -0
  143. package/build/hooks/border-radius.js.map +1 -1
  144. package/build/hooks/border-style.js +41 -0
  145. package/build/hooks/border-style.js.map +1 -1
  146. package/build/hooks/border-width.js +70 -31
  147. package/build/hooks/border-width.js.map +1 -1
  148. package/build/hooks/border.js +81 -11
  149. package/build/hooks/border.js.map +1 -1
  150. package/build/hooks/color-panel.js +25 -16
  151. package/build/hooks/color-panel.js.map +1 -1
  152. package/build/hooks/color-panel.native.js +77 -0
  153. package/build/hooks/color-panel.native.js.map +1 -0
  154. package/build/hooks/color.js +179 -12
  155. package/build/hooks/color.js.map +1 -1
  156. package/build/hooks/font-size.js +14 -0
  157. package/build/hooks/font-size.js.map +1 -1
  158. package/build/hooks/index.native.js +2 -0
  159. package/build/hooks/index.native.js.map +1 -1
  160. package/build/hooks/layout.native.js +20 -0
  161. package/build/hooks/layout.native.js.map +1 -0
  162. package/build/hooks/letter-spacing.js +1 -1
  163. package/build/hooks/letter-spacing.js.map +1 -1
  164. package/build/hooks/typography.js +1 -1
  165. package/build/hooks/typography.js.map +1 -1
  166. package/build/hooks/typography.native.js +2 -4
  167. package/build/hooks/typography.native.js.map +1 -1
  168. package/build/hooks/utils.js +55 -0
  169. package/build/hooks/utils.js.map +1 -1
  170. package/build/store/actions.js +1 -2
  171. package/build/store/actions.js.map +1 -1
  172. package/build/store/defaults.js +5 -2
  173. package/build/store/defaults.js.map +1 -1
  174. package/build/store/defaults.native.js +2 -6
  175. package/build/store/defaults.native.js.map +1 -1
  176. package/build/store/selectors.js +10 -5
  177. package/build/store/selectors.js.map +1 -1
  178. package/build/utils/get-paste-event-data.js +1 -1
  179. package/build/utils/get-paste-event-data.js.map +1 -1
  180. package/build/utils/parse-css-unit-to-px.js +1 -1
  181. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  182. package/build-module/components/block-caption/index.native.js +13 -3
  183. package/build-module/components/block-caption/index.native.js.map +1 -1
  184. package/build-module/components/block-edit/index.js +9 -0
  185. package/build-module/components/block-edit/index.js.map +1 -1
  186. package/build-module/components/block-inspector/index.js +14 -19
  187. package/build-module/components/block-inspector/index.js.map +1 -1
  188. package/build-module/components/block-list-appender/index.js +3 -10
  189. package/build-module/components/block-list-appender/index.js.map +1 -1
  190. package/build-module/components/block-media-update-progress/index.native.js +2 -1
  191. package/build-module/components/block-media-update-progress/index.native.js.map +1 -1
  192. package/build-module/components/block-preview/auto.js +10 -2
  193. package/build-module/components/block-preview/auto.js.map +1 -1
  194. package/build-module/components/block-settings/container.native.js +2 -1
  195. package/build-module/components/block-settings/container.native.js.map +1 -1
  196. package/build-module/components/block-styles/index.js +112 -133
  197. package/build-module/components/block-styles/index.js.map +1 -1
  198. package/build-module/components/block-styles/menu-items.js +50 -0
  199. package/build-module/components/block-styles/menu-items.js.map +1 -0
  200. package/build-module/components/block-styles/preview-panel.js +35 -0
  201. package/build-module/components/block-styles/preview-panel.js.map +1 -0
  202. package/build-module/components/block-styles/preview.native.js +2 -2
  203. package/build-module/components/block-styles/preview.native.js.map +1 -1
  204. package/build-module/components/block-styles/use-styles-for-block.js +107 -0
  205. package/build-module/components/block-styles/use-styles-for-block.js.map +1 -0
  206. package/build-module/components/block-styles/utils.js +34 -0
  207. package/build-module/components/block-styles/utils.js.map +1 -1
  208. package/build-module/components/block-switcher/block-styles-menu.js +3 -21
  209. package/build-module/components/block-switcher/block-styles-menu.js.map +1 -1
  210. package/build-module/components/block-tools/back-compat.js +2 -1
  211. package/build-module/components/block-tools/back-compat.js.map +1 -1
  212. package/build-module/components/block-tools/block-selection-button.js +5 -1
  213. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  214. package/build-module/components/block-tools/insertion-point.js +11 -1
  215. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  216. package/build-module/components/block-types-list/index.native.js +2 -2
  217. package/build-module/components/block-types-list/index.native.js.map +1 -1
  218. package/build-module/components/button-block-appender/index.js +2 -1
  219. package/build-module/components/button-block-appender/index.js.map +1 -1
  220. package/build-module/components/colors-gradients/dropdown.js +1 -1
  221. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  222. package/build-module/components/colors-gradients/panel-color-gradient-settings.native.js +7 -4
  223. package/build-module/components/colors-gradients/panel-color-gradient-settings.native.js.map +1 -1
  224. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js +75 -0
  225. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js.map +1 -0
  226. package/build-module/components/contrast-checker/index.js +80 -45
  227. package/build-module/components/contrast-checker/index.js.map +1 -1
  228. package/build-module/components/contrast-checker/index.native.js +90 -0
  229. package/build-module/components/contrast-checker/index.native.js.map +1 -0
  230. package/build-module/components/default-block-appender/index.js +15 -18
  231. package/build-module/components/default-block-appender/index.js.map +1 -1
  232. package/build-module/components/default-style-picker/index.js +17 -3
  233. package/build-module/components/default-style-picker/index.js.map +1 -1
  234. package/build-module/components/iframe/index.js +4 -5
  235. package/build-module/components/iframe/index.js.map +1 -1
  236. package/build-module/components/index.js +2 -2
  237. package/build-module/components/index.js.map +1 -1
  238. package/build-module/components/index.native.js +2 -0
  239. package/build-module/components/index.native.js.map +1 -1
  240. package/build-module/components/inner-blocks/default-block-appender.js +2 -4
  241. package/build-module/components/inner-blocks/default-block-appender.js.map +1 -1
  242. package/build-module/components/inner-blocks/use-nested-settings-update.js +16 -14
  243. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  244. package/build-module/components/inserter/index.js +61 -3
  245. package/build-module/components/inserter/index.js.map +1 -1
  246. package/build-module/components/inserter/index.native.js +2 -2
  247. package/build-module/components/inserter/index.native.js.map +1 -1
  248. package/build-module/components/inserter/library.js +5 -3
  249. package/build-module/components/inserter/library.js.map +1 -1
  250. package/build-module/components/inserter/menu.js +11 -4
  251. package/build-module/components/inserter/menu.js.map +1 -1
  252. package/build-module/components/inserter/search-items.js +3 -1
  253. package/build-module/components/inserter/search-items.js.map +1 -1
  254. package/build-module/components/inserter/tabs.native.js +7 -4
  255. package/build-module/components/inserter/tabs.native.js.map +1 -1
  256. package/build-module/components/inspector-controls/block-support-slot-container.js +2 -1
  257. package/build-module/components/inspector-controls/block-support-slot-container.js.map +1 -1
  258. package/build-module/components/inspector-controls/block-support-tools-panel.js +15 -44
  259. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  260. package/build-module/components/inspector-controls/fill.native.js +3 -5
  261. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  262. package/build-module/components/inspector-controls/groups.js +4 -0
  263. package/build-module/components/inspector-controls/groups.js.map +1 -1
  264. package/build-module/components/inspector-controls/slot.js +1 -3
  265. package/build-module/components/inspector-controls/slot.js.map +1 -1
  266. package/build-module/components/letter-spacing-control/index.js +6 -6
  267. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  268. package/build-module/components/line-height-control/index.native.js +3 -2
  269. package/build-module/components/line-height-control/index.native.js.map +1 -1
  270. package/build-module/components/link-control/link-preview.js +1 -1
  271. package/build-module/components/link-control/link-preview.js.map +1 -1
  272. package/build-module/components/link-control/search-item.js +11 -1
  273. package/build-module/components/link-control/search-item.js.map +1 -1
  274. package/build-module/components/link-control/search-results.js +2 -1
  275. package/build-module/components/link-control/search-results.js.map +1 -1
  276. package/build-module/components/link-control/use-search-handler.js +18 -5
  277. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  278. package/build-module/components/list-view/block-contents.js +3 -1
  279. package/build-module/components/list-view/block-contents.js.map +1 -1
  280. package/build-module/components/list-view/block-select-button.js +25 -4
  281. package/build-module/components/list-view/block-select-button.js.map +1 -1
  282. package/build-module/components/list-view/block.js +8 -1
  283. package/build-module/components/list-view/block.js.map +1 -1
  284. package/build-module/components/media-placeholder/index.js +3 -10
  285. package/build-module/components/media-placeholder/index.js.map +1 -1
  286. package/build-module/components/media-replace-flow/index.js +32 -6
  287. package/build-module/components/media-replace-flow/index.js.map +1 -1
  288. package/build-module/components/media-replace-flow/index.native.js +4 -0
  289. package/build-module/components/media-replace-flow/index.native.js.map +1 -0
  290. package/build-module/components/media-upload-progress/index.native.js +2 -1
  291. package/build-module/components/media-upload-progress/index.native.js.map +1 -1
  292. package/build-module/components/panel-color-settings/index.js +7 -3
  293. package/build-module/components/panel-color-settings/index.js.map +1 -1
  294. package/build-module/components/provider/block-refs-provider.js +4 -1
  295. package/build-module/components/provider/block-refs-provider.js.map +1 -1
  296. package/build-module/components/rich-text/file-paste-handler.js +1 -1
  297. package/build-module/components/rich-text/file-paste-handler.js.map +1 -1
  298. package/build-module/components/rich-text/index.js +2 -1
  299. package/build-module/components/rich-text/index.js.map +1 -1
  300. package/build-module/components/rich-text/index.native.js +2 -1
  301. package/build-module/components/rich-text/index.native.js.map +1 -1
  302. package/build-module/components/rich-text/prevent-event-discovery.js +25 -0
  303. package/build-module/components/rich-text/prevent-event-discovery.js.map +1 -0
  304. package/build-module/components/rich-text/use-input-rules.js +2 -1
  305. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  306. package/build-module/components/rich-text/use-paste-handler.js +14 -5
  307. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  308. package/build-module/components/rich-text/utils.js +2 -1
  309. package/build-module/components/rich-text/utils.js.map +1 -1
  310. package/build-module/components/selection-scroll-into-view/index.js +2 -1
  311. package/build-module/components/selection-scroll-into-view/index.js.map +1 -1
  312. package/build-module/components/use-display-block-controls/index.native.js +34 -0
  313. package/build-module/components/use-display-block-controls/index.native.js.map +1 -0
  314. package/build-module/components/use-on-block-drop/index.js +7 -3
  315. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  316. package/build-module/components/writing-flow/use-multi-selection.js +3 -4
  317. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  318. package/build-module/hooks/border-color.js +61 -7
  319. package/build-module/hooks/border-color.js.map +1 -1
  320. package/build-module/hooks/border-radius.js +42 -0
  321. package/build-module/hooks/border-radius.js.map +1 -1
  322. package/build-module/hooks/border-style.js +36 -0
  323. package/build-module/hooks/border-style.js.map +1 -1
  324. package/build-module/hooks/border-width.js +66 -32
  325. package/build-module/hooks/border-width.js.map +1 -1
  326. package/build-module/hooks/border.js +80 -12
  327. package/build-module/hooks/border.js.map +1 -1
  328. package/build-module/hooks/color-panel.js +24 -14
  329. package/build-module/hooks/color-panel.js.map +1 -1
  330. package/build-module/hooks/color-panel.native.js +62 -0
  331. package/build-module/hooks/color-panel.native.js.map +1 -0
  332. package/build-module/hooks/color.js +177 -13
  333. package/build-module/hooks/color.js.map +1 -1
  334. package/build-module/hooks/font-size.js +12 -1
  335. package/build-module/hooks/font-size.js.map +1 -1
  336. package/build-module/hooks/index.native.js +1 -0
  337. package/build-module/hooks/index.native.js.map +1 -1
  338. package/build-module/hooks/layout.native.js +16 -0
  339. package/build-module/hooks/layout.native.js.map +1 -0
  340. package/build-module/hooks/letter-spacing.js +1 -1
  341. package/build-module/hooks/letter-spacing.js.map +1 -1
  342. package/build-module/hooks/typography.js +1 -1
  343. package/build-module/hooks/typography.js.map +1 -1
  344. package/build-module/hooks/typography.native.js +2 -4
  345. package/build-module/hooks/typography.native.js.map +1 -1
  346. package/build-module/hooks/utils.js +52 -1
  347. package/build-module/hooks/utils.js.map +1 -1
  348. package/build-module/store/actions.js +1 -2
  349. package/build-module/store/actions.js.map +1 -1
  350. package/build-module/store/defaults.js +5 -2
  351. package/build-module/store/defaults.js.map +1 -1
  352. package/build-module/store/defaults.native.js +2 -5
  353. package/build-module/store/defaults.native.js.map +1 -1
  354. package/build-module/store/selectors.js +10 -5
  355. package/build-module/store/selectors.js.map +1 -1
  356. package/build-module/utils/get-paste-event-data.js +1 -1
  357. package/build-module/utils/get-paste-event-data.js.map +1 -1
  358. package/build-module/utils/parse-css-unit-to-px.js +1 -1
  359. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  360. package/build-style/style-rtl.css +256 -191
  361. package/build-style/style.css +256 -191
  362. package/package.json +30 -30
  363. package/src/components/block-caption/index.native.js +22 -4
  364. package/src/components/block-card/README.md +1 -1
  365. package/src/components/block-edit/index.js +8 -0
  366. package/src/components/block-edit/test/edit.native.js +10 -9
  367. package/src/components/block-inspector/index.js +18 -16
  368. package/src/components/block-list-appender/index.js +5 -21
  369. package/src/components/block-media-update-progress/index.native.js +1 -1
  370. package/src/components/block-media-update-progress/test/index.native.js +136 -93
  371. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +108 -47
  372. package/src/components/block-mover/test/index.native.js +5 -5
  373. package/src/components/block-preview/README.md +14 -26
  374. package/src/components/block-preview/auto.js +7 -2
  375. package/src/components/block-preview/test/index.js +2 -0
  376. package/src/components/block-settings/container.native.js +1 -0
  377. package/src/components/block-styles/index.js +125 -145
  378. package/src/components/block-styles/menu-items.js +49 -0
  379. package/src/components/block-styles/preview-panel.js +36 -0
  380. package/src/components/block-styles/preview.native.js +5 -2
  381. package/src/components/block-styles/style.scss +59 -51
  382. package/src/components/block-styles/test/{index.js → utils.js} +60 -1
  383. package/src/components/block-styles/use-styles-for-block.js +99 -0
  384. package/src/components/block-styles/utils.js +39 -0
  385. package/src/components/block-switcher/block-styles-menu.js +3 -38
  386. package/src/components/block-tools/back-compat.js +1 -0
  387. package/src/components/block-tools/block-selection-button.js +7 -1
  388. package/src/components/block-tools/insertion-point.js +10 -1
  389. package/src/components/block-types-list/index.native.js +5 -2
  390. package/src/components/border-radius-control/style.scss +1 -1
  391. package/src/components/border-style-control/style.scss +0 -1
  392. package/src/components/button-block-appender/index.js +1 -0
  393. package/src/components/color-palette/test/__snapshots__/control.js.snap +9 -5
  394. package/src/components/colors-gradients/dropdown.js +48 -43
  395. package/src/components/colors-gradients/panel-color-gradient-settings.native.js +13 -2
  396. package/src/components/colors-gradients/style.scss +10 -5
  397. package/src/components/colors-gradients/tools-panel-color-dropdown.js +85 -0
  398. package/src/components/contrast-checker/README.md +3 -1
  399. package/src/components/contrast-checker/index.js +107 -64
  400. package/src/components/contrast-checker/index.native.js +113 -0
  401. package/src/components/contrast-checker/style.native.scss +26 -0
  402. package/src/components/contrast-checker/test/index.js +236 -2
  403. package/src/components/default-block-appender/index.js +17 -24
  404. package/src/components/default-block-appender/style.scss +4 -0
  405. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +12 -24
  406. package/src/components/default-block-appender/test/index.js +4 -14
  407. package/src/components/default-style-picker/index.js +18 -6
  408. package/src/components/iframe/index.js +7 -3
  409. package/src/components/index.js +2 -2
  410. package/src/components/index.native.js +2 -0
  411. package/src/components/inner-blocks/README.md +2 -0
  412. package/src/components/inner-blocks/default-block-appender.js +2 -7
  413. package/src/components/inner-blocks/use-nested-settings-update.js +16 -14
  414. package/src/components/inserter/index.js +77 -5
  415. package/src/components/inserter/index.native.js +2 -2
  416. package/src/components/inserter/library.js +17 -12
  417. package/src/components/inserter/menu.js +31 -13
  418. package/src/components/inserter/search-items.js +3 -1
  419. package/src/components/inserter/tabs.native.js +5 -4
  420. package/src/components/inserter/test/block-types-tab.native.js +9 -10
  421. package/src/components/inserter/test/index.native.js +3 -7
  422. package/src/components/inserter/test/reusable-blocks-tab.native.js +8 -10
  423. package/src/components/inspector-controls/block-support-slot-container.js +3 -1
  424. package/src/components/inspector-controls/block-support-tools-panel.js +41 -58
  425. package/src/components/inspector-controls/fill.native.js +4 -3
  426. package/src/components/inspector-controls/groups.js +4 -0
  427. package/src/components/inspector-controls/slot.js +2 -7
  428. package/src/components/letter-spacing-control/index.js +6 -6
  429. package/src/components/line-height-control/index.native.js +2 -1
  430. package/src/components/link-control/README.md +1 -1
  431. package/src/components/link-control/link-preview.js +1 -1
  432. package/src/components/link-control/search-item.js +11 -2
  433. package/src/components/link-control/search-results.js +1 -0
  434. package/src/components/link-control/style.scss +5 -10
  435. package/src/components/link-control/test/index.js +4 -0
  436. package/src/components/link-control/use-search-handler.js +25 -4
  437. package/src/components/list-view/block-contents.js +2 -0
  438. package/src/components/list-view/block-select-button.js +22 -1
  439. package/src/components/list-view/block.js +11 -0
  440. package/src/components/media-placeholder/index.js +3 -10
  441. package/src/components/media-replace-flow/index.js +35 -5
  442. package/src/components/media-replace-flow/index.native.js +3 -0
  443. package/src/components/media-upload/test/index.native.js +28 -47
  444. package/src/components/media-upload-progress/index.native.js +1 -0
  445. package/src/components/media-upload-progress/test/index.native.js +60 -47
  446. package/src/components/panel-color-settings/index.js +8 -4
  447. package/src/components/provider/block-refs-provider.js +4 -1
  448. package/src/components/rich-text/file-paste-handler.js +3 -1
  449. package/src/components/rich-text/index.js +1 -0
  450. package/src/components/rich-text/index.native.js +1 -0
  451. package/src/components/rich-text/prevent-event-discovery.js +23 -0
  452. package/src/components/rich-text/use-input-rules.js +2 -1
  453. package/src/components/rich-text/use-paste-handler.js +16 -3
  454. package/src/components/rich-text/utils.js +1 -0
  455. package/src/components/selection-scroll-into-view/index.js +1 -0
  456. package/src/components/url-input/README.md +5 -0
  457. package/src/components/use-display-block-controls/index.native.js +38 -0
  458. package/src/components/use-on-block-drop/index.js +7 -3
  459. package/src/components/writing-flow/test/use-multi-selection.js +36 -0
  460. package/src/components/writing-flow/use-multi-selection.js +12 -9
  461. package/src/hooks/border-color.js +55 -3
  462. package/src/hooks/border-radius.js +32 -0
  463. package/src/hooks/border-style.js +26 -0
  464. package/src/hooks/border-width.js +56 -32
  465. package/src/hooks/border.js +115 -20
  466. package/src/hooks/border.scss +3 -17
  467. package/src/hooks/color-panel.js +25 -19
  468. package/src/hooks/color-panel.native.js +63 -0
  469. package/src/hooks/color.js +182 -12
  470. package/src/hooks/color.scss +85 -0
  471. package/src/hooks/font-size.js +29 -1
  472. package/src/hooks/index.native.js +1 -0
  473. package/src/hooks/layout.native.js +23 -0
  474. package/src/hooks/letter-spacing.js +1 -1
  475. package/src/hooks/typography.js +1 -1
  476. package/src/hooks/typography.native.js +1 -3
  477. package/src/hooks/utils.js +69 -1
  478. package/src/store/actions.js +1 -2
  479. package/src/store/defaults.js +2 -1
  480. package/src/store/defaults.native.js +2 -6
  481. package/src/store/selectors.js +10 -5
  482. package/src/style.scss +4 -3
  483. package/src/utils/get-paste-event-data.js +1 -1
  484. package/src/utils/parse-css-unit-to-px.js +1 -1
  485. package/src/utils/test/parse-css-unit-to-px.js +3 -0
  486. package/tsconfig.tsbuildinfo +1 -1
  487. package/build/components/preserve-scroll-in-reorder/index.js +0 -22
  488. package/build/components/preserve-scroll-in-reorder/index.js.map +0 -1
  489. package/build/components/use-canvas-click-redirect/index.js +0 -66
  490. package/build/components/use-canvas-click-redirect/index.js.map +0 -1
  491. package/build-module/components/preserve-scroll-in-reorder/index.js +0 -12
  492. package/build-module/components/preserve-scroll-in-reorder/index.js.map +0 -1
  493. package/build-module/components/use-canvas-click-redirect/index.js +0 -54
  494. package/build-module/components/use-canvas-click-redirect/index.js.map +0 -1
  495. package/src/components/preserve-scroll-in-reorder/index.js +0 -12
  496. package/src/components/use-canvas-click-redirect/index.js +0 -57
@@ -63,7 +63,7 @@ function InserterTabs( {
63
63
  }, [ tabIndex ] );
64
64
 
65
65
  const { tabs, tabKeys } = useMemo( () => {
66
- const filteredTabs = InserterTabs.TABS.filter(
66
+ const filteredTabs = InserterTabs.getTabs().filter(
67
67
  ( { name } ) => showReusableBlocks || name !== 'reusable'
68
68
  );
69
69
  return {
@@ -114,8 +114,9 @@ function InserterTabs( {
114
114
  }
115
115
 
116
116
  function TabsControl( { onChangeTab, showReusableBlocks } ) {
117
+ const tabs = InserterTabs.getTabs();
117
118
  const segments = useMemo( () => {
118
- const filteredTabs = InserterTabs.TABS.filter(
119
+ const filteredTabs = tabs.filter(
119
120
  ( { name } ) => showReusableBlocks || name !== 'reusable'
120
121
  );
121
122
  return filteredTabs.map( ( { title } ) => title );
@@ -123,7 +124,7 @@ function TabsControl( { onChangeTab, showReusableBlocks } ) {
123
124
 
124
125
  const segmentHandler = useCallback(
125
126
  ( selectedTab ) => {
126
- const tabTitles = InserterTabs.TABS.map( ( { title } ) => title );
127
+ const tabTitles = tabs.map( ( { title } ) => title );
127
128
  onChangeTab( tabTitles.indexOf( selectedTab ) );
128
129
  },
129
130
  [ onChangeTab ]
@@ -139,7 +140,7 @@ function TabsControl( { onChangeTab, showReusableBlocks } ) {
139
140
 
140
141
  InserterTabs.Control = TabsControl;
141
142
 
142
- InserterTabs.TABS = [
143
+ InserterTabs.getTabs = () => [
143
144
  { name: 'blocks', title: __( 'Blocks' ), component: BlockTypesTab },
144
145
  { name: 'reusable', title: __( 'Reusable' ), component: ReusableBlocksTab },
145
146
  ];
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { shallow } from 'enzyme';
4
+ import { render } from 'test/helpers';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -13,9 +13,7 @@ import { useSelect } from '@wordpress/data';
13
13
  */
14
14
  import items from './fixtures';
15
15
  import BlockTypesTab from '../block-types-tab';
16
- import BlockTypesList from '../../block-types-list';
17
16
 
18
- jest.mock( '../../block-types-list' );
19
17
  jest.mock( '../hooks/use-clipboard-block' );
20
18
  jest.mock( '@wordpress/data/src/components/use-select' );
21
19
 
@@ -35,11 +33,11 @@ describe( 'BlockTypesTab component', () => {
35
33
  } );
36
34
 
37
35
  it( 'renders without crashing', () => {
38
- const component = shallow(
36
+ const component = render(
39
37
  <BlockTypesTab
40
38
  rootClientId={ 0 }
41
39
  onSelect={ jest.fn() }
42
- listProps={ {} }
40
+ listProps={ { contentContainerStyle: {} } }
43
41
  />
44
42
  );
45
43
  expect( component ).toBeTruthy();
@@ -52,15 +50,16 @@ describe( 'BlockTypesTab component', () => {
52
50
  ( { id, category } ) =>
53
51
  category !== 'reusable' && id !== 'core-embed/a-paragraph-embed'
54
52
  );
55
- const component = shallow(
53
+ const component = render(
56
54
  <BlockTypesTab
57
55
  rootClientId={ 0 }
58
56
  onSelect={ jest.fn() }
59
- listProps={ {} }
57
+ listProps={ { contentContainerStyle: {} } }
60
58
  />
61
59
  );
62
- expect( component.find( BlockTypesList ).prop( 'items' ) ).toEqual(
63
- blockItems
64
- );
60
+
61
+ blockItems.forEach( ( item ) => {
62
+ expect( component.getByText( item.title ) ).toBeTruthy();
63
+ } );
65
64
  } );
66
65
  } );
@@ -1,13 +1,12 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import renderer from 'react-test-renderer';
4
+ import { render } from 'test/helpers';
5
5
 
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
9
  import { Inserter } from '../index';
10
- import '../../..'; // Ensure store dependencies are imported via root.
11
10
 
12
11
  const getStylesFromColorScheme = () => {
13
12
  return { color: 'white' };
@@ -15,13 +14,10 @@ const getStylesFromColorScheme = () => {
15
14
 
16
15
  describe( 'Inserter', () => {
17
16
  it( 'button contains the testID "add-block-button"', () => {
18
- const testRenderer = renderer.create(
17
+ const screen = render(
19
18
  <Inserter getStylesFromColorScheme={ getStylesFromColorScheme } />
20
19
  );
21
- const testInstance = testRenderer.root;
22
20
 
23
- expect( () => {
24
- testInstance.findByProps( { testID: 'add-block-button' } );
25
- } ).not.toThrow();
21
+ expect( screen.getByTestId( 'add-block-button' ) ).toBeTruthy();
26
22
  } );
27
23
  } );
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { shallow } from 'enzyme';
4
+ import { render } from 'test/helpers';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -13,9 +13,7 @@ import { useSelect } from '@wordpress/data';
13
13
  */
14
14
  import items from './fixtures';
15
15
  import ReusableBlocksTab from '../reusable-blocks-tab';
16
- import BlockTypesList from '../../block-types-list';
17
16
 
18
- jest.mock( '../../block-types-list' );
19
17
  jest.mock( '@wordpress/data/src/components/use-select' );
20
18
 
21
19
  const fetchReusableBlocks = jest.fn();
@@ -34,11 +32,11 @@ describe( 'ReusableBlocksTab component', () => {
34
32
  } );
35
33
 
36
34
  it( 'renders without crashing', () => {
37
- const component = shallow(
35
+ const component = render(
38
36
  <ReusableBlocksTab
39
37
  rootClientId={ 0 }
40
38
  onSelect={ jest.fn() }
41
- listProps={ {} }
39
+ listProps={ { contentContainerStyle: {} } }
42
40
  />
43
41
  );
44
42
  expect( component ).toBeTruthy();
@@ -50,15 +48,15 @@ describe( 'ReusableBlocksTab component', () => {
50
48
  const reusableBlockItems = items.filter(
51
49
  ( { category } ) => category === 'reusable'
52
50
  );
53
- const component = shallow(
51
+ const component = render(
54
52
  <ReusableBlocksTab
55
53
  rootClientId={ 0 }
56
54
  onSelect={ jest.fn() }
57
- listProps={ {} }
55
+ listProps={ { contentContainerStyle: {} } }
58
56
  />
59
57
  );
60
- expect( component.find( BlockTypesList ).prop( 'items' ) ).toEqual(
61
- reusableBlockItems
62
- );
58
+ reusableBlockItems.forEach( ( { title } ) => {
59
+ expect( component.getByText( title ) ).toBeTruthy();
60
+ } );
63
61
  } );
64
62
  } );
@@ -6,5 +6,7 @@ import { useContext } from '@wordpress/element';
6
6
 
7
7
  export default function BlockSupportSlotContainer( { Slot, ...props } ) {
8
8
  const toolsPanelContext = useContext( ToolsPanelContext );
9
- return <Slot { ...props } fillProps={ toolsPanelContext } />;
9
+ return (
10
+ <Slot { ...props } fillProps={ toolsPanelContext } bubblesVirtually />
11
+ );
10
12
  }
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';
5
5
  import { useDispatch, useSelect } from '@wordpress/data';
6
+ import { useCallback } from '@wordpress/element';
6
7
 
7
8
  /**
8
9
  * Internal dependencies
@@ -11,74 +12,54 @@ import { store as blockEditorStore } from '../../store';
11
12
  import { cleanEmptyObject } from '../../hooks/utils';
12
13
 
13
14
  export default function BlockSupportToolsPanel( { children, group, label } ) {
14
- const { attributes, clientIds, panelId } = useSelect( ( select ) => {
15
- const {
16
- getBlockAttributes,
17
- getMultiSelectedBlockClientIds,
18
- getSelectedBlockClientId,
19
- hasMultiSelection,
20
- } = select( blockEditorStore );
21
-
22
- // When we currently have a multi-selection, the value returned from
23
- // `getSelectedBlockClientId()` is `null`. When a `null` value is used
24
- // for the `panelId`, a `ToolsPanel` will still allow panel items to
25
- // register themselves despite their panelIds not matching.
26
- const selectedBlockClientId = getSelectedBlockClientId();
27
-
28
- if ( hasMultiSelection() ) {
29
- const selectedBlockClientIds = getMultiSelectedBlockClientIds();
30
- const selectedBlockAttributes = selectedBlockClientIds.reduce(
31
- ( blockAttributes, blockId ) => {
32
- blockAttributes[ blockId ] = getBlockAttributes( blockId );
33
- return blockAttributes;
34
- },
35
- {}
36
- );
15
+ const { updateBlockAttributes } = useDispatch( blockEditorStore );
16
+ const {
17
+ getBlockAttributes,
18
+ getMultiSelectedBlockClientIds,
19
+ getSelectedBlockClientId,
20
+ hasMultiSelection,
21
+ } = useSelect( blockEditorStore );
37
22
 
38
- return {
39
- panelId: selectedBlockClientId,
40
- clientIds: selectedBlockClientIds,
41
- attributes: selectedBlockAttributes,
42
- };
43
- }
23
+ const panelId = getSelectedBlockClientId();
24
+ const resetAll = useCallback(
25
+ ( resetFilters = [] ) => {
26
+ const newAttributes = {};
44
27
 
45
- return {
46
- panelId: selectedBlockClientId,
47
- clientIds: [ selectedBlockClientId ],
48
- attributes: {
49
- [ selectedBlockClientId ]: getBlockAttributes(
50
- selectedBlockClientId
51
- ),
52
- },
53
- };
54
- }, [] );
55
- const { updateBlockAttributes } = useDispatch( blockEditorStore );
28
+ const clientIds = hasMultiSelection()
29
+ ? getMultiSelectedBlockClientIds()
30
+ : [ panelId ];
56
31
 
57
- const resetAll = ( resetFilters = [] ) => {
58
- const newAttributes = {};
32
+ clientIds.forEach( ( clientId ) => {
33
+ const { style } = getBlockAttributes( clientId );
34
+ let newBlockAttributes = { style };
59
35
 
60
- clientIds.forEach( ( clientId ) => {
61
- const { style } = attributes[ clientId ];
62
- let newBlockAttributes = { style };
36
+ resetFilters.forEach( ( resetFilter ) => {
37
+ newBlockAttributes = {
38
+ ...newBlockAttributes,
39
+ ...resetFilter( newBlockAttributes ),
40
+ };
41
+ } );
63
42
 
64
- resetFilters.forEach( ( resetFilter ) => {
43
+ // Enforce a cleaned style object.
65
44
  newBlockAttributes = {
66
45
  ...newBlockAttributes,
67
- ...resetFilter( newBlockAttributes ),
46
+ style: cleanEmptyObject( newBlockAttributes.style ),
68
47
  };
69
- } );
70
-
71
- // Enforce a cleaned style object.
72
- newBlockAttributes = {
73
- ...newBlockAttributes,
74
- style: cleanEmptyObject( newBlockAttributes.style ),
75
- };
76
48
 
77
- newAttributes[ clientId ] = newBlockAttributes;
78
- } );
49
+ newAttributes[ clientId ] = newBlockAttributes;
50
+ } );
79
51
 
80
- updateBlockAttributes( clientIds, newAttributes, true );
81
- };
52
+ updateBlockAttributes( clientIds, newAttributes, true );
53
+ },
54
+ [
55
+ cleanEmptyObject,
56
+ getBlockAttributes,
57
+ getMultiSelectedBlockClientIds,
58
+ hasMultiSelection,
59
+ panelId,
60
+ updateBlockAttributes,
61
+ ]
62
+ );
82
63
 
83
64
  return (
84
65
  <ToolsPanel
@@ -89,6 +70,8 @@ export default function BlockSupportToolsPanel( { children, group, label } ) {
89
70
  panelId={ panelId }
90
71
  hasInnerWrapper={ true }
91
72
  shouldRenderPlaceholderItems={ true } // Required to maintain fills ordering.
73
+ __experimentalFirstVisibleItemClass="first"
74
+ __experimentalLastVisibleItemClass="last"
92
75
  >
93
76
  { children }
94
77
  </ToolsPanel>
@@ -14,7 +14,7 @@ import warning from '@wordpress/warning';
14
14
  * Internal dependencies
15
15
  */
16
16
  import groups from './groups';
17
- import { useBlockEditContext } from '../block-edit/context';
17
+ import useDisplayBlockControls from '../use-display-block-controls';
18
18
  import { BlockSettingsButton } from '../block-settings';
19
19
 
20
20
  export default function InspectorControlsFill( {
@@ -22,13 +22,14 @@ export default function InspectorControlsFill( {
22
22
  __experimentalGroup: group = 'default',
23
23
  ...props
24
24
  } ) {
25
- const { isSelected } = useBlockEditContext();
25
+ const isDisplayed = useDisplayBlockControls();
26
+
26
27
  const Fill = groups[ group ]?.Fill;
27
28
  if ( ! Fill ) {
28
29
  warning( `Unknown InspectorControl group "${ group }" provided.` );
29
30
  return null;
30
31
  }
31
- if ( ! isSelected ) {
32
+ if ( ! isDisplayed ) {
32
33
  return null;
33
34
  }
34
35
 
@@ -5,6 +5,8 @@ import { createSlotFill } from '@wordpress/components';
5
5
 
6
6
  const InspectorControlsDefault = createSlotFill( 'InspectorControls' );
7
7
  const InspectorControlsAdvanced = createSlotFill( 'InspectorAdvancedControls' );
8
+ const InspectorControlsBorder = createSlotFill( 'InspectorControlsBorder' );
9
+ const InspectorControlsColor = createSlotFill( 'InspectorControlsColor' );
8
10
  const InspectorControlsDimensions = createSlotFill(
9
11
  'InspectorControlsDimensions'
10
12
  );
@@ -15,6 +17,8 @@ const InspectorControlsTypography = createSlotFill(
15
17
  const groups = {
16
18
  default: InspectorControlsDefault,
17
19
  advanced: InspectorControlsAdvanced,
20
+ border: InspectorControlsBorder,
21
+ color: InspectorControlsColor,
18
22
  dimensions: InspectorControlsDimensions,
19
23
  typography: InspectorControlsTypography,
20
24
  };
@@ -13,7 +13,6 @@ import groups from './groups';
13
13
 
14
14
  export default function InspectorControlsSlot( {
15
15
  __experimentalGroup: group = 'default',
16
- bubblesVirtually = true,
17
16
  label,
18
17
  ...props
19
18
  } ) {
@@ -32,14 +31,10 @@ export default function InspectorControlsSlot( {
32
31
  if ( label ) {
33
32
  return (
34
33
  <BlockSupportToolsPanel group={ group } label={ label }>
35
- <BlockSupportSlotContainer
36
- { ...props }
37
- bubblesVirtually={ bubblesVirtually }
38
- Slot={ Slot }
39
- />
34
+ <BlockSupportSlotContainer { ...props } Slot={ Slot } />
40
35
  </BlockSupportToolsPanel>
41
36
  );
42
37
  }
43
38
 
44
- return <Slot { ...props } bubblesVirtually={ bubblesVirtually } />;
39
+ return <Slot { ...props } bubblesVirtually />;
45
40
  }
@@ -15,12 +15,12 @@ import useSetting from '../../components/use-setting';
15
15
  /**
16
16
  * Control for letter-spacing.
17
17
  *
18
- * @param {Object} props Component props.
19
- * @param {string} props.value Currently selected letter-spacing.
20
- * @param {Function} props.onChange Handles change in letter-spacing selection.
21
- * @param {boolean} props.__unstableInputWidth Input width to pass through to inner UnitControl.
18
+ * @param {Object} props Component props.
19
+ * @param {string} props.value Currently selected letter-spacing.
20
+ * @param {Function} props.onChange Handles change in letter-spacing selection.
21
+ * @param {string|number|undefined} props.__unstableInputWidth Input width to pass through to inner UnitControl. Should be a valid CSS value.
22
22
  *
23
- * @return {WPElement} Letter-spacing control.
23
+ * @return {WPElement} Letter-spacing control.
24
24
  */
25
25
  export default function LetterSpacingControl( {
26
26
  value,
@@ -33,7 +33,7 @@ export default function LetterSpacingControl( {
33
33
  } );
34
34
  return (
35
35
  <UnitControl
36
- label={ __( 'Letter-spacing' ) }
36
+ label={ __( 'Letter spacing' ) }
37
37
  value={ value }
38
38
  __unstableInputWidth={ __unstableInputWidth }
39
39
  units={ units }
@@ -14,7 +14,8 @@ export default function LineHeightControl( { value: lineHeight, onChange } ) {
14
14
  return (
15
15
  <UnitControl
16
16
  label={ __( 'Line Height' ) }
17
- min={ 0 }
17
+ // Set minimun value of 1 since lower values break on Android
18
+ min={ 1 }
18
19
  max={ 5 }
19
20
  step={ STEP }
20
21
  value={ value }
@@ -114,7 +114,7 @@ Controls the query parameters used to search for suggestions. For example, to li
114
114
 
115
115
  ```jsx
116
116
  <LinkControl
117
- suggestionQuery={ {
117
+ suggestionsQuery={ {
118
118
  type: 'post',
119
119
  subtype: 'page',
120
120
  } }
@@ -99,7 +99,7 @@ export default function LinkPreview( {
99
99
  </>
100
100
  ) : (
101
101
  <span className="block-editor-link-control__search-item-error-notice">
102
- Link is empty
102
+ { __( 'Link is empty' ) }
103
103
  </span>
104
104
  ) }
105
105
  </span>
@@ -36,6 +36,7 @@ export const LinkControlSearchItem = ( {
36
36
  icon={ globe }
37
37
  />
38
38
  ) }
39
+
39
40
  <span className="block-editor-link-control__search-item-header">
40
41
  <span className="block-editor-link-control__search-item-title">
41
42
  <TextHighlight
@@ -57,12 +58,20 @@ export const LinkControlSearchItem = ( {
57
58
  </span>
58
59
  { shouldShowType && suggestion.type && (
59
60
  <span className="block-editor-link-control__search-item-type">
60
- { /* Rename 'post_tag' to 'tag'. Ideally, the API would return the localised CPT or taxonomy label. */ }
61
- { suggestion.type === 'post_tag' ? 'tag' : suggestion.type }
61
+ { getVisualTypeName( suggestion ) }
62
62
  </span>
63
63
  ) }
64
64
  </Button>
65
65
  );
66
66
  };
67
67
 
68
+ function getVisualTypeName( suggestion ) {
69
+ if ( suggestion.isFrontPage ) {
70
+ return 'front page';
71
+ }
72
+
73
+ // Rename 'post_tag' to 'tag'. Ideally, the API would return the localised CPT or taxonomy label.
74
+ return suggestion.type === 'post_tag' ? 'tag' : suggestion.type;
75
+ }
76
+
68
77
  export default LinkControlSearchItem;
@@ -132,6 +132,7 @@ export default function LinkControlSearchResults( {
132
132
  ) }
133
133
  searchTerm={ currentInputValue }
134
134
  shouldShowType={ shouldShowSuggestionsTypes }
135
+ isFrontPage={ suggestion?.isFrontPage }
135
136
  />
136
137
  );
137
138
  } ) }
@@ -61,7 +61,7 @@ $preview-image-height: 140px;
61
61
  // Specificity overide of URLInput defaults.
62
62
  &.block-editor-url-input input[type="text"].block-editor-url-input__input {
63
63
  @include input-control;
64
- width: calc(100% - #{$grid-unit-20*2});
64
+ width: calc(100% - #{$grid-unit-20 * 2});
65
65
  display: block;
66
66
  padding: 11px $grid-unit-20;
67
67
  padding-right: ( $button-size * $block-editor-link-control-number-of-actions ); // width of reset and submit buttons
@@ -287,6 +287,7 @@ $preview-image-height: 140px;
287
287
  font-size: 0.9em;
288
288
  background-color: $gray-100;
289
289
  border-radius: 2px;
290
+ white-space: nowrap; // tags shouldn't go over two lines.
290
291
  }
291
292
 
292
293
  .block-editor-link-control__search-item-description {
@@ -482,16 +483,10 @@ $preview-image-height: 140px;
482
483
  * Position spinner to the left of the actions.
483
484
  *
484
485
  * Compensate for:
485
- * - Input margin ($grid-unit-20)
486
- * - Border (1px)
487
- * - Vertically, for the difference in height between the input (40px)
488
- * and the spinner.
489
- * - Horizontally, adjust for the width occupied by the icon buttons,
490
- * then artificially create spacing that mimics as if the spinner
491
- * were center-padded to the same width as an icon button.
486
+ * - Input padding right ($button-size)
492
487
  */
493
- top: $grid-unit-20 + 1px + ( ( 40px - $spinner-size ) * 0.5 );
494
- right: $grid-unit-20 + 1px + ( $button-size * $block-editor-link-control-number-of-actions ) + ( ( $button-size - $spinner-size ) * 0.5 );
488
+ top: calc(50% - #{$spinner-size} / 2);
489
+ right: $button-size;
495
490
  }
496
491
  }
497
492
 
@@ -51,6 +51,8 @@ jest.mock( '@wordpress/data/src/components/use-dispatch', () => ( {
51
51
  useDispatch: () => ( { saveEntityRecords: jest.fn() } ),
52
52
  } ) );
53
53
 
54
+ jest.useRealTimers();
55
+
54
56
  /**
55
57
  * Wait for next tick of event loop. This is required
56
58
  * because the `fetchSearchSuggestions` Promise will
@@ -1634,6 +1636,7 @@ describe( 'Selecting links', () => {
1634
1636
  );
1635
1637
 
1636
1638
  // We should have highlighted the first item using the keyboard
1639
+ // eslint-disable-next-line jest/no-conditional-expect
1637
1640
  expect( selectedSearchResultElement ).toEqual(
1638
1641
  secondSearchSuggestion
1639
1642
  );
@@ -1648,6 +1651,7 @@ describe( 'Selecting links', () => {
1648
1651
  );
1649
1652
 
1650
1653
  // We should be back to highlighting the first search result again
1654
+ // eslint-disable-next-line jest/no-conditional-expect
1651
1655
  expect( selectedSearchResultElement ).toEqual(
1652
1656
  firstSearchSuggestion
1653
1657
  );
@@ -52,21 +52,39 @@ const handleEntitySearch = async (
52
52
  fetchSearchSuggestions,
53
53
  directEntryHandler,
54
54
  withCreateSuggestion,
55
- withURLSuggestion
55
+ withURLSuggestion,
56
+ pageOnFront
56
57
  ) => {
57
58
  const { isInitialSuggestions } = suggestionsQuery;
59
+ let resultsIncludeFrontPage = false;
58
60
 
59
61
  let results = await Promise.all( [
60
62
  fetchSearchSuggestions( val, suggestionsQuery ),
61
63
  directEntryHandler( val ),
62
64
  ] );
63
65
 
66
+ // Identify front page and update type to match.
67
+ results[ 0 ] = results[ 0 ].map( ( result ) => {
68
+ if ( Number( result.id ) === pageOnFront ) {
69
+ resultsIncludeFrontPage = true;
70
+ result.isFrontPage = true;
71
+ return result;
72
+ }
73
+
74
+ return result;
75
+ } );
76
+
64
77
  const couldBeURL = ! val.includes( ' ' );
65
78
 
66
79
  // If it's potentially a URL search then concat on a URL search suggestion
67
80
  // just for good measure. That way once the actual results run out we always
68
81
  // have a URL option to fallback on.
69
- if ( couldBeURL && withURLSuggestion && ! isInitialSuggestions ) {
82
+ if (
83
+ ! resultsIncludeFrontPage &&
84
+ couldBeURL &&
85
+ withURLSuggestion &&
86
+ ! isInitialSuggestions
87
+ ) {
70
88
  results = results[ 0 ].concat( results[ 1 ] );
71
89
  } else {
72
90
  results = results[ 0 ];
@@ -109,9 +127,11 @@ export default function useSearchHandler(
109
127
  withCreateSuggestion,
110
128
  withURLSuggestion
111
129
  ) {
112
- const { fetchSearchSuggestions } = useSelect( ( select ) => {
130
+ const { fetchSearchSuggestions, pageOnFront } = useSelect( ( select ) => {
113
131
  const { getSettings } = select( blockEditorStore );
132
+
114
133
  return {
134
+ pageOnFront: getSettings().pageOnFront,
115
135
  fetchSearchSuggestions: getSettings()
116
136
  .__experimentalFetchLinkSuggestions,
117
137
  };
@@ -131,7 +151,8 @@ export default function useSearchHandler(
131
151
  fetchSearchSuggestions,
132
152
  directEntryHandler,
133
153
  withCreateSuggestion,
134
- withURLSuggestion
154
+ withURLSuggestion,
155
+ pageOnFront
135
156
  );
136
157
  },
137
158
  [ directEntryHandler, fetchSearchSuggestions, withCreateSuggestion ]
@@ -26,6 +26,7 @@ const ListViewBlockContents = forwardRef(
26
26
  position,
27
27
  siblingBlockCount,
28
28
  level,
29
+ isExpanded,
29
30
  ...props
30
31
  },
31
32
  ref
@@ -71,6 +72,7 @@ const ListViewBlockContents = forwardRef(
71
72
  draggable={ draggable }
72
73
  onDragStart={ onDragStart }
73
74
  onDragEnd={ onDragEnd }
75
+ isExpanded={ isExpanded }
74
76
  { ...props }
75
77
  />
76
78
  ) }