@wordpress/block-editor 15.22.1 → 16.0.1-next.v.202607070741.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 (379) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/build/autocompleters/block.cjs +10 -2
  3. package/build/autocompleters/block.cjs.map +2 -2
  4. package/build/components/background-image-control/index.cjs +0 -2
  5. package/build/components/background-image-control/index.cjs.map +2 -2
  6. package/build/components/block-inspector/edit-contents.cjs +3 -0
  7. package/build/components/block-inspector/edit-contents.cjs.map +3 -3
  8. package/build/components/block-inspector/index.cjs +18 -36
  9. package/build/components/block-inspector/index.cjs.map +2 -2
  10. package/build/components/block-list/block-invalid-warning.cjs +8 -19
  11. package/build/components/block-list/block-invalid-warning.cjs.map +2 -2
  12. package/build/components/block-styles/use-styles-for-block.cjs +2 -1
  13. package/build/components/block-styles/use-styles-for-block.cjs.map +2 -2
  14. package/build/components/block-title/use-block-display-title.cjs +7 -2
  15. package/build/components/block-title/use-block-display-title.cjs.map +2 -2
  16. package/build/components/block-toolbar/block-toolbar-icon.cjs +10 -14
  17. package/build/components/block-toolbar/block-toolbar-icon.cjs.map +2 -2
  18. package/build/components/block-variation-transforms/index.cjs +0 -1
  19. package/build/components/block-variation-transforms/index.cjs.map +2 -2
  20. package/build/components/child-layout-control/index.cjs +0 -2
  21. package/build/components/child-layout-control/index.cjs.map +2 -2
  22. package/build/components/colors-gradients/control.cjs +5 -5
  23. package/build/components/colors-gradients/control.cjs.map +2 -2
  24. package/build/components/date-format-picker/index.cjs +0 -1
  25. package/build/components/date-format-picker/index.cjs.map +2 -2
  26. package/build/components/dimensions-tool/aspect-ratio-tool.cjs +1 -2
  27. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +2 -2
  28. package/build/components/dimensions-tool/scale-tool.cjs +0 -1
  29. package/build/components/dimensions-tool/scale-tool.cjs.map +2 -2
  30. package/build/components/dimensions-tool/width-height-tool.cjs +2 -4
  31. package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
  32. package/build/components/font-appearance-control/index.cjs +6 -25
  33. package/build/components/font-appearance-control/index.cjs.map +3 -3
  34. package/build/components/font-family/index.cjs +6 -15
  35. package/build/components/font-family/index.cjs.map +3 -3
  36. package/build/components/font-sizes/font-size-picker.cjs +1 -2
  37. package/build/components/font-sizes/font-size-picker.cjs.map +2 -2
  38. package/build/components/global-styles/border-panel.cjs +0 -1
  39. package/build/components/global-styles/border-panel.cjs.map +2 -2
  40. package/build/components/global-styles/dimensions-panel.cjs +0 -3
  41. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  42. package/build/components/global-styles/typography-panel.cjs +4 -10
  43. package/build/components/global-styles/typography-panel.cjs.map +2 -2
  44. package/build/components/height-control/index.cjs +0 -2
  45. package/build/components/height-control/index.cjs.map +2 -2
  46. package/build/components/html-element-control/index.cjs +0 -1
  47. package/build/components/html-element-control/index.cjs.map +2 -2
  48. package/build/components/image-editor/index.cjs +5 -0
  49. package/build/components/image-editor/index.cjs.map +3 -3
  50. package/build/components/image-editor/zoom-dropdown.cjs +0 -1
  51. package/build/components/image-editor/zoom-dropdown.cjs.map +2 -2
  52. package/build/components/image-size-control/index.cjs +1 -3
  53. package/build/components/image-size-control/index.cjs.map +2 -2
  54. package/build/components/inner-content/index.cjs +107 -0
  55. package/build/components/inner-content/index.cjs.map +7 -0
  56. package/build/components/inserter/hooks/use-block-types-state.cjs +10 -2
  57. package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
  58. package/build/components/inserter/media-tab/hooks.cjs +34 -6
  59. package/build/components/inserter/media-tab/hooks.cjs.map +2 -2
  60. package/build/components/inserter/media-tab/media-list.cjs +3 -1
  61. package/build/components/inserter/media-tab/media-list.cjs.map +2 -2
  62. package/build/components/inserter/media-tab/media-panel.cjs +224 -27
  63. package/build/components/inserter/media-tab/media-panel.cjs.map +3 -3
  64. package/build/components/inserter/media-tab/media-preview.cjs +32 -17
  65. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  66. package/build/components/inserter/media-tab/media-tab.cjs +26 -6
  67. package/build/components/inserter/media-tab/media-tab.cjs.map +2 -2
  68. package/build/components/inserter/mobile-tab-navigation.cjs +6 -1
  69. package/build/components/inserter/mobile-tab-navigation.cjs.map +2 -2
  70. package/build/components/inserter/no-results.cjs +2 -2
  71. package/build/components/inserter/no-results.cjs.map +2 -2
  72. package/build/components/inserter/preview-panel.cjs +2 -1
  73. package/build/components/inserter/preview-panel.cjs.map +2 -2
  74. package/build/components/inserter-list-item/index.cjs +8 -2
  75. package/build/components/inserter-list-item/index.cjs.map +2 -2
  76. package/build/components/letter-spacing-control/index.cjs +0 -24
  77. package/build/components/letter-spacing-control/index.cjs.map +3 -3
  78. package/build/components/line-height-control/index.cjs +7 -22
  79. package/build/components/line-height-control/index.cjs.map +3 -3
  80. package/build/components/list-view/block-select-button.cjs +90 -84
  81. package/build/components/list-view/block-select-button.cjs.map +2 -2
  82. package/build/components/list-view/block.cjs +51 -20
  83. package/build/components/list-view/block.cjs.map +2 -2
  84. package/build/components/list-view/expander.cjs +1 -1
  85. package/build/components/list-view/expander.cjs.map +2 -2
  86. package/build/components/list-view/use-list-view-client-ids.cjs +2 -2
  87. package/build/components/list-view/use-list-view-client-ids.cjs.map +2 -2
  88. package/build/components/observe-typing/index.cjs +4 -3
  89. package/build/components/observe-typing/index.cjs.map +2 -2
  90. package/build/components/preset-input-control/custom-value-controls.cjs +1 -3
  91. package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
  92. package/build/components/preset-input-control/index.cjs +1 -3
  93. package/build/components/preset-input-control/index.cjs.map +2 -2
  94. package/build/components/resolution-tool/index.cjs +1 -2
  95. package/build/components/resolution-tool/index.cjs.map +2 -2
  96. package/build/components/text-alignment-control/index.cjs +0 -1
  97. package/build/components/text-alignment-control/index.cjs.map +2 -2
  98. package/build/components/text-decoration-control/index.cjs +0 -1
  99. package/build/components/text-decoration-control/index.cjs.map +2 -2
  100. package/build/components/text-indent-control/index.cjs +0 -8
  101. package/build/components/text-indent-control/index.cjs.map +2 -2
  102. package/build/components/text-transform-control/index.cjs +0 -1
  103. package/build/components/text-transform-control/index.cjs.map +2 -2
  104. package/build/components/use-block-display-information/index.cjs +10 -8
  105. package/build/components/use-block-display-information/index.cjs.map +2 -2
  106. package/build/components/use-on-block-drop/index.cjs +3 -7
  107. package/build/components/use-on-block-drop/index.cjs.map +2 -2
  108. package/build/components/use-resize-canvas/index.cjs +16 -53
  109. package/build/components/use-resize-canvas/index.cjs.map +3 -3
  110. package/build/components/writing-mode-control/index.cjs +0 -1
  111. package/build/components/writing-mode-control/index.cjs.map +2 -2
  112. package/build/hooks/font-size.cjs +1 -2
  113. package/build/hooks/font-size.cjs.map +2 -2
  114. package/build/hooks/layout.cjs +5 -3
  115. package/build/hooks/layout.cjs.map +2 -2
  116. package/build/hooks/position.cjs +36 -16
  117. package/build/hooks/position.cjs.map +2 -2
  118. package/build/hooks/states.cjs +10 -21
  119. package/build/hooks/states.cjs.map +2 -2
  120. package/build/layouts/constrained.cjs +21 -21
  121. package/build/layouts/constrained.cjs.map +2 -2
  122. package/build/layouts/flex.cjs +0 -3
  123. package/build/layouts/flex.cjs.map +2 -2
  124. package/build/layouts/grid.cjs +51 -9
  125. package/build/layouts/grid.cjs.map +2 -2
  126. package/build/private-apis.cjs +4 -2
  127. package/build/private-apis.cjs.map +3 -3
  128. package/build/store/actions.cjs.map +2 -2
  129. package/build/store/private-actions.cjs +16 -0
  130. package/build/store/private-actions.cjs.map +2 -2
  131. package/build/store/private-keys.cjs +3 -3
  132. package/build/store/private-keys.cjs.map +2 -2
  133. package/build/store/private-selectors.cjs +96 -10
  134. package/build/store/private-selectors.cjs.map +2 -2
  135. package/build/store/reducer.cjs +19 -3
  136. package/build/store/reducer.cjs.map +2 -2
  137. package/build/store/selectors.cjs +13 -0
  138. package/build/store/selectors.cjs.map +2 -2
  139. package/build-module/autocompleters/block.mjs +10 -2
  140. package/build-module/autocompleters/block.mjs.map +2 -2
  141. package/build-module/components/background-image-control/index.mjs +0 -2
  142. package/build-module/components/background-image-control/index.mjs.map +2 -2
  143. package/build-module/components/block-inspector/edit-contents.mjs +4 -1
  144. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  145. package/build-module/components/block-inspector/index.mjs +18 -36
  146. package/build-module/components/block-inspector/index.mjs.map +2 -2
  147. package/build-module/components/block-list/block-invalid-warning.mjs +8 -19
  148. package/build-module/components/block-list/block-invalid-warning.mjs.map +2 -2
  149. package/build-module/components/block-styles/use-styles-for-block.mjs +2 -1
  150. package/build-module/components/block-styles/use-styles-for-block.mjs.map +2 -2
  151. package/build-module/components/block-title/use-block-display-title.mjs +7 -2
  152. package/build-module/components/block-title/use-block-display-title.mjs.map +2 -2
  153. package/build-module/components/block-toolbar/block-toolbar-icon.mjs +10 -14
  154. package/build-module/components/block-toolbar/block-toolbar-icon.mjs.map +2 -2
  155. package/build-module/components/block-variation-transforms/index.mjs +0 -1
  156. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  157. package/build-module/components/child-layout-control/index.mjs +0 -2
  158. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  159. package/build-module/components/colors-gradients/control.mjs +5 -5
  160. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  161. package/build-module/components/date-format-picker/index.mjs +0 -1
  162. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  163. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +1 -2
  164. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  165. package/build-module/components/dimensions-tool/scale-tool.mjs +0 -1
  166. package/build-module/components/dimensions-tool/scale-tool.mjs.map +2 -2
  167. package/build-module/components/dimensions-tool/width-height-tool.mjs +2 -4
  168. package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
  169. package/build-module/components/font-appearance-control/index.mjs +6 -15
  170. package/build-module/components/font-appearance-control/index.mjs.map +2 -2
  171. package/build-module/components/font-family/index.mjs +6 -15
  172. package/build-module/components/font-family/index.mjs.map +2 -2
  173. package/build-module/components/font-sizes/font-size-picker.mjs +1 -2
  174. package/build-module/components/font-sizes/font-size-picker.mjs.map +2 -2
  175. package/build-module/components/global-styles/border-panel.mjs +0 -1
  176. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  177. package/build-module/components/global-styles/dimensions-panel.mjs +0 -3
  178. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  179. package/build-module/components/global-styles/typography-panel.mjs +4 -10
  180. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  181. package/build-module/components/height-control/index.mjs +0 -2
  182. package/build-module/components/height-control/index.mjs.map +2 -2
  183. package/build-module/components/html-element-control/index.mjs +0 -1
  184. package/build-module/components/html-element-control/index.mjs.map +2 -2
  185. package/build-module/components/image-editor/index.mjs +5 -0
  186. package/build-module/components/image-editor/index.mjs.map +2 -2
  187. package/build-module/components/image-editor/zoom-dropdown.mjs +0 -1
  188. package/build-module/components/image-editor/zoom-dropdown.mjs.map +2 -2
  189. package/build-module/components/image-size-control/index.mjs +1 -3
  190. package/build-module/components/image-size-control/index.mjs.map +2 -2
  191. package/build-module/components/inner-content/index.mjs +82 -0
  192. package/build-module/components/inner-content/index.mjs.map +7 -0
  193. package/build-module/components/inserter/hooks/use-block-types-state.mjs +10 -2
  194. package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
  195. package/build-module/components/inserter/media-tab/hooks.mjs +33 -6
  196. package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
  197. package/build-module/components/inserter/media-tab/media-list.mjs +3 -1
  198. package/build-module/components/inserter/media-tab/media-list.mjs.map +2 -2
  199. package/build-module/components/inserter/media-tab/media-panel.mjs +227 -30
  200. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  201. package/build-module/components/inserter/media-tab/media-preview.mjs +33 -18
  202. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  203. package/build-module/components/inserter/media-tab/media-tab.mjs +27 -7
  204. package/build-module/components/inserter/media-tab/media-tab.mjs.map +2 -2
  205. package/build-module/components/inserter/mobile-tab-navigation.mjs +6 -1
  206. package/build-module/components/inserter/mobile-tab-navigation.mjs.map +2 -2
  207. package/build-module/components/inserter/no-results.mjs +2 -2
  208. package/build-module/components/inserter/no-results.mjs.map +2 -2
  209. package/build-module/components/inserter/preview-panel.mjs +2 -1
  210. package/build-module/components/inserter/preview-panel.mjs.map +2 -2
  211. package/build-module/components/inserter-list-item/index.mjs +8 -2
  212. package/build-module/components/inserter-list-item/index.mjs.map +2 -2
  213. package/build-module/components/letter-spacing-control/index.mjs +0 -14
  214. package/build-module/components/letter-spacing-control/index.mjs.map +2 -2
  215. package/build-module/components/line-height-control/index.mjs +7 -12
  216. package/build-module/components/line-height-control/index.mjs.map +2 -2
  217. package/build-module/components/list-view/block-select-button.mjs +90 -84
  218. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  219. package/build-module/components/list-view/block.mjs +51 -20
  220. package/build-module/components/list-view/block.mjs.map +2 -2
  221. package/build-module/components/list-view/expander.mjs +1 -1
  222. package/build-module/components/list-view/expander.mjs.map +2 -2
  223. package/build-module/components/list-view/use-list-view-client-ids.mjs +2 -2
  224. package/build-module/components/list-view/use-list-view-client-ids.mjs.map +2 -2
  225. package/build-module/components/observe-typing/index.mjs +4 -3
  226. package/build-module/components/observe-typing/index.mjs.map +2 -2
  227. package/build-module/components/preset-input-control/custom-value-controls.mjs +1 -3
  228. package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
  229. package/build-module/components/preset-input-control/index.mjs +1 -3
  230. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  231. package/build-module/components/resolution-tool/index.mjs +1 -2
  232. package/build-module/components/resolution-tool/index.mjs.map +2 -2
  233. package/build-module/components/text-alignment-control/index.mjs +0 -1
  234. package/build-module/components/text-alignment-control/index.mjs.map +2 -2
  235. package/build-module/components/text-decoration-control/index.mjs +0 -1
  236. package/build-module/components/text-decoration-control/index.mjs.map +2 -2
  237. package/build-module/components/text-indent-control/index.mjs +0 -8
  238. package/build-module/components/text-indent-control/index.mjs.map +2 -2
  239. package/build-module/components/text-transform-control/index.mjs +0 -1
  240. package/build-module/components/text-transform-control/index.mjs.map +2 -2
  241. package/build-module/components/use-block-display-information/index.mjs +10 -8
  242. package/build-module/components/use-block-display-information/index.mjs.map +2 -2
  243. package/build-module/components/use-on-block-drop/index.mjs +4 -7
  244. package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
  245. package/build-module/components/use-resize-canvas/index.mjs +6 -53
  246. package/build-module/components/use-resize-canvas/index.mjs.map +2 -2
  247. package/build-module/components/writing-mode-control/index.mjs +0 -1
  248. package/build-module/components/writing-mode-control/index.mjs.map +2 -2
  249. package/build-module/hooks/font-size.mjs +1 -2
  250. package/build-module/hooks/font-size.mjs.map +2 -2
  251. package/build-module/hooks/layout.mjs +4 -3
  252. package/build-module/hooks/layout.mjs.map +2 -2
  253. package/build-module/hooks/position.mjs +38 -18
  254. package/build-module/hooks/position.mjs.map +2 -2
  255. package/build-module/hooks/states.mjs +10 -21
  256. package/build-module/hooks/states.mjs.map +2 -2
  257. package/build-module/layouts/constrained.mjs +21 -21
  258. package/build-module/layouts/constrained.mjs.map +2 -2
  259. package/build-module/layouts/flex.mjs +0 -3
  260. package/build-module/layouts/flex.mjs.map +2 -2
  261. package/build-module/layouts/grid.mjs +52 -9
  262. package/build-module/layouts/grid.mjs.map +2 -2
  263. package/build-module/private-apis.mjs +5 -3
  264. package/build-module/private-apis.mjs.map +2 -2
  265. package/build-module/store/actions.mjs.map +2 -2
  266. package/build-module/store/private-actions.mjs +14 -0
  267. package/build-module/store/private-actions.mjs.map +2 -2
  268. package/build-module/store/private-keys.mjs +2 -2
  269. package/build-module/store/private-keys.mjs.map +2 -2
  270. package/build-module/store/private-selectors.mjs +93 -10
  271. package/build-module/store/private-selectors.mjs.map +2 -2
  272. package/build-module/store/reducer.mjs +17 -3
  273. package/build-module/store/reducer.mjs.map +2 -2
  274. package/build-module/store/selectors.mjs +13 -0
  275. package/build-module/store/selectors.mjs.map +2 -2
  276. package/build-style/content-rtl.css +11 -5
  277. package/build-style/content.css +11 -5
  278. package/build-style/style-rtl.css +113 -3
  279. package/build-style/style.css +113 -3
  280. package/package.json +43 -41
  281. package/src/autocompleters/block.js +10 -3
  282. package/src/autocompleters/test/block.js +53 -0
  283. package/src/components/background-image-control/index.js +0 -2
  284. package/src/components/block-inspector/edit-contents.js +5 -1
  285. package/src/components/block-inspector/index.js +25 -44
  286. package/src/components/block-list/block-invalid-warning.js +8 -19
  287. package/src/components/block-patterns-list/stories/index.story.jsx +1 -1
  288. package/src/components/block-styles/use-styles-for-block.js +1 -0
  289. package/src/components/block-title/use-block-display-title.js +7 -2
  290. package/src/components/block-toolbar/block-toolbar-icon.js +11 -16
  291. package/src/components/block-toolbar/test/block-toolbar-icon.js +32 -9
  292. package/src/components/block-variation-transforms/index.js +0 -1
  293. package/src/components/child-layout-control/index.js +0 -2
  294. package/src/components/color-palette/test/__snapshots__/control.js.snap +11 -106
  295. package/src/components/colors-gradients/control.js +4 -4
  296. package/src/components/colors-gradients/style.scss +2 -2
  297. package/src/components/date-format-picker/index.js +0 -1
  298. package/src/components/dimensions-tool/aspect-ratio-tool.js +0 -1
  299. package/src/components/dimensions-tool/scale-tool.js +0 -1
  300. package/src/components/dimensions-tool/width-height-tool.js +0 -2
  301. package/src/components/font-appearance-control/index.js +6 -19
  302. package/src/components/font-family/README.md +0 -9
  303. package/src/components/font-family/index.js +6 -19
  304. package/src/components/font-family/stories/index.story.jsx +0 -1
  305. package/src/components/font-sizes/font-size-picker.js +0 -1
  306. package/src/components/global-styles/border-panel.js +0 -1
  307. package/src/components/global-styles/dimensions-panel.js +0 -3
  308. package/src/components/global-styles/typography-panel.js +0 -6
  309. package/src/components/height-control/index.js +0 -2
  310. package/src/components/html-element-control/index.js +0 -1
  311. package/src/components/iframe/content.scss +3 -3
  312. package/src/components/image-editor/index.js +22 -0
  313. package/src/components/image-editor/zoom-dropdown.js +0 -1
  314. package/src/components/image-size-control/index.js +0 -2
  315. package/src/components/inner-content/index.js +119 -0
  316. package/src/components/inner-content/test/index.js +81 -0
  317. package/src/components/inserter/hooks/use-block-types-state.js +10 -2
  318. package/src/components/inserter/media-tab/hooks.js +59 -9
  319. package/src/components/inserter/media-tab/media-list.js +2 -0
  320. package/src/components/inserter/media-tab/media-panel.js +256 -17
  321. package/src/components/inserter/media-tab/media-preview.js +34 -17
  322. package/src/components/inserter/media-tab/media-tab.js +20 -2
  323. package/src/components/inserter/media-tab/test/hooks.js +204 -0
  324. package/src/components/inserter/mobile-tab-navigation.js +6 -1
  325. package/src/components/inserter/no-results.js +2 -2
  326. package/src/components/inserter/preview-panel.js +1 -0
  327. package/src/components/inserter/style.scss +110 -1
  328. package/src/components/inserter-list-item/index.js +8 -2
  329. package/src/components/letter-spacing-control/README.md +0 -8
  330. package/src/components/letter-spacing-control/index.js +5 -23
  331. package/src/components/letter-spacing-control/stories/index.story.jsx +0 -12
  332. package/src/components/line-height-control/README.md +0 -8
  333. package/src/components/line-height-control/index.js +7 -16
  334. package/src/components/line-height-control/stories/index.story.jsx +0 -1
  335. package/src/components/line-height-control/test/index.js +1 -7
  336. package/src/components/link-picker/test/index.js +3 -1
  337. package/src/components/list-view/block-select-button.js +5 -1
  338. package/src/components/list-view/block.js +57 -20
  339. package/src/components/list-view/expander.js +5 -1
  340. package/src/components/list-view/style.scss +19 -0
  341. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  342. package/src/components/observe-typing/index.js +9 -4
  343. package/src/components/preset-input-control/custom-value-controls.js +0 -2
  344. package/src/components/preset-input-control/index.js +0 -2
  345. package/src/components/resolution-tool/index.js +0 -1
  346. package/src/components/responsive-block-control/test/index.js +1 -5
  347. package/src/components/text-alignment-control/index.js +0 -1
  348. package/src/components/text-decoration-control/index.js +0 -1
  349. package/src/components/text-indent-control/index.js +7 -16
  350. package/src/components/text-transform-control/index.js +0 -1
  351. package/src/components/use-block-display-information/index.js +9 -13
  352. package/src/components/use-block-display-information/test/index.js +47 -9
  353. package/src/components/use-on-block-drop/index.js +4 -7
  354. package/src/components/use-resize-canvas/index.js +10 -71
  355. package/src/components/writing-mode-control/index.js +0 -1
  356. package/src/hooks/block-hooks.scss +15 -0
  357. package/src/hooks/font-size.js +0 -1
  358. package/src/hooks/layout.js +5 -4
  359. package/src/hooks/position.js +44 -23
  360. package/src/hooks/states.js +24 -26
  361. package/src/hooks/test/cross-origin-isolation.js +0 -4
  362. package/src/hooks/test/layout.js +75 -1
  363. package/src/layouts/constrained.js +51 -28
  364. package/src/layouts/flex.js +0 -3
  365. package/src/layouts/grid.js +59 -7
  366. package/src/layouts/test/constrained.js +91 -0
  367. package/src/layouts/test/grid.js +71 -0
  368. package/src/private-apis.js +4 -2
  369. package/src/store/actions.js +1 -0
  370. package/src/store/private-actions.js +31 -0
  371. package/src/store/private-keys.js +1 -1
  372. package/src/store/private-selectors.js +184 -11
  373. package/src/store/reducer.js +37 -2
  374. package/src/store/selectors.js +41 -0
  375. package/src/store/test/private-selectors.js +436 -10
  376. package/src/store/test/reducer.js +41 -13
  377. package/src/store/test/selectors.js +133 -0
  378. package/src/style.scss +1 -0
  379. package/src/components/use-resize-canvas/README.md +0 -37
@@ -0,0 +1,204 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { renderHook, act, waitFor } from '@testing-library/react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { useDelayedLoading, useMediaResults } from '../hooks';
10
+
11
+ describe( 'useDelayedLoading', () => {
12
+ beforeEach( () => {
13
+ jest.useFakeTimers();
14
+ } );
15
+ afterEach( () => {
16
+ jest.useRealTimers();
17
+ } );
18
+
19
+ it( 'does not surface loading before the delay elapses', () => {
20
+ const { result } = renderHook( () => useDelayedLoading( true, 400 ) );
21
+ expect( result.current ).toBe( false );
22
+ act( () => {
23
+ jest.advanceTimersByTime( 399 );
24
+ } );
25
+ expect( result.current ).toBe( false );
26
+ } );
27
+
28
+ it( 'surfaces loading once the delay elapses', () => {
29
+ const { result } = renderHook( () => useDelayedLoading( true, 400 ) );
30
+ act( () => {
31
+ jest.advanceTimersByTime( 400 );
32
+ } );
33
+ expect( result.current ).toBe( true );
34
+ } );
35
+
36
+ it( 'never surfaces loading for an operation that ends before the delay', () => {
37
+ const { result, rerender } = renderHook(
38
+ ( { isLoading } ) => useDelayedLoading( isLoading, 400 ),
39
+ { initialProps: { isLoading: true } }
40
+ );
41
+ act( () => {
42
+ jest.advanceTimersByTime( 200 );
43
+ } );
44
+ rerender( { isLoading: false } );
45
+ act( () => {
46
+ jest.advanceTimersByTime( 400 );
47
+ } );
48
+ expect( result.current ).toBe( false );
49
+ } );
50
+
51
+ it( 'resets once loading finishes', () => {
52
+ const { result, rerender } = renderHook(
53
+ ( { isLoading } ) => useDelayedLoading( isLoading, 400 ),
54
+ { initialProps: { isLoading: true } }
55
+ );
56
+ act( () => {
57
+ jest.advanceTimersByTime( 400 );
58
+ } );
59
+ expect( result.current ).toBe( true );
60
+ rerender( { isLoading: false } );
61
+ expect( result.current ).toBe( false );
62
+ } );
63
+ } );
64
+
65
+ describe( 'useMediaResults', () => {
66
+ const createCategory = ( name, items ) => ( {
67
+ name,
68
+ fetch: jest.fn( async () => items ),
69
+ } );
70
+
71
+ it( 'fetches and returns media for the query', async () => {
72
+ const category = createCategory( 'images', [ { id: 1 } ] );
73
+ const { result } = renderHook( () =>
74
+ useMediaResults( category, { search: '' }, 0 )
75
+ );
76
+ await waitFor( () => expect( result.current.isLoading ).toBe( false ) );
77
+ expect( category.fetch ).toHaveBeenCalledWith( { search: '' } );
78
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] );
79
+ } );
80
+
81
+ it( 'clears the previous results when the query changes', async () => {
82
+ const category = createCategory( 'images', [ { id: 1 } ] );
83
+ const { result, rerender } = renderHook(
84
+ ( { query } ) => useMediaResults( category, query, 0 ),
85
+ { initialProps: { query: { search: 'a' } } }
86
+ );
87
+ await waitFor( () =>
88
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] )
89
+ );
90
+
91
+ // Hold the next request open so the intermediate (cleared) state is observable.
92
+ let resolveFetch;
93
+ category.fetch.mockImplementationOnce(
94
+ () =>
95
+ new Promise( ( resolve ) => {
96
+ resolveFetch = resolve;
97
+ } )
98
+ );
99
+ rerender( { query: { search: 'b' } } );
100
+
101
+ // A query change blanks the grid while the new request is in flight.
102
+ await waitFor( () => expect( result.current.mediaList ).toEqual( [] ) );
103
+ await act( async () => {
104
+ resolveFetch( [ { id: 2 } ] );
105
+ } );
106
+ expect( result.current.mediaList ).toEqual( [ { id: 2 } ] );
107
+ } );
108
+
109
+ it( 'keeps the existing results while a refresh (refreshKey bump) refetches', async () => {
110
+ const category = createCategory( 'attached-images', [ { id: 1 } ] );
111
+ const { result, rerender } = renderHook(
112
+ ( { refreshKey } ) =>
113
+ useMediaResults( category, { search: '' }, refreshKey ),
114
+ { initialProps: { refreshKey: 0 } }
115
+ );
116
+ await waitFor( () =>
117
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] )
118
+ );
119
+
120
+ // Hold the refetch open so we can assert the grid is not blanked.
121
+ let resolveFetch;
122
+ category.fetch.mockImplementationOnce(
123
+ () =>
124
+ new Promise( ( resolve ) => {
125
+ resolveFetch = resolve;
126
+ } )
127
+ );
128
+ rerender( { refreshKey: 1 } );
129
+
130
+ // Same query, only `refreshKey` changed: existing items stay put.
131
+ await waitFor( () => expect( result.current.isLoading ).toBe( true ) );
132
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] );
133
+ await act( async () => {
134
+ resolveFetch( [ { id: 2 } ] );
135
+ } );
136
+ expect( result.current.mediaList ).toEqual( [ { id: 2 } ] );
137
+ } );
138
+
139
+ it( 'clears and refetches when the category source changes with the same name and query', async () => {
140
+ const firstCategory = createCategory( 'attached-images', [
141
+ { id: 1 },
142
+ ] );
143
+ const { result, rerender } = renderHook(
144
+ ( { category } ) => useMediaResults( category, { search: '' }, 0 ),
145
+ { initialProps: { category: firstCategory } }
146
+ );
147
+ await waitFor( () =>
148
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] )
149
+ );
150
+
151
+ let resolveFetch;
152
+ const secondCategory = {
153
+ name: 'attached-images',
154
+ fetch: jest.fn(
155
+ () =>
156
+ new Promise( ( resolve ) => {
157
+ resolveFetch = resolve;
158
+ } )
159
+ ),
160
+ };
161
+ rerender( { category: secondCategory } );
162
+
163
+ await waitFor( () =>
164
+ expect( secondCategory.fetch ).toHaveBeenCalledWith( {
165
+ search: '',
166
+ } )
167
+ );
168
+ expect( result.current.mediaList ).toEqual( [] );
169
+ expect( result.current.isLoading ).toBe( true );
170
+
171
+ await act( async () => {
172
+ resolveFetch( [ { id: 2 } ] );
173
+ } );
174
+ expect( result.current.mediaList ).toEqual( [ { id: 2 } ] );
175
+ } );
176
+
177
+ it( 'does not refetch when only the category wrapper changes', async () => {
178
+ const fetch = jest.fn( async () => [ { id: 1 } ] );
179
+ const { result, rerender } = renderHook(
180
+ ( { category } ) => useMediaResults( category, { search: '' }, 0 ),
181
+ {
182
+ initialProps: {
183
+ category: {
184
+ name: 'images',
185
+ fetch,
186
+ },
187
+ },
188
+ }
189
+ );
190
+ await waitFor( () =>
191
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] )
192
+ );
193
+
194
+ rerender( {
195
+ category: {
196
+ name: 'images',
197
+ fetch,
198
+ },
199
+ } );
200
+
201
+ expect( fetch ).toHaveBeenCalledTimes( 1 );
202
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] );
203
+ } );
204
+ } );
@@ -41,7 +41,11 @@ function ScreenHeader( { title } ) {
41
41
  );
42
42
  }
43
43
 
44
- export default function MobileTabNavigation( { categories, children } ) {
44
+ export default function MobileTabNavigation( {
45
+ categories,
46
+ children,
47
+ screenClassName,
48
+ } ) {
45
49
  return (
46
50
  <Navigator
47
51
  initialPath="/"
@@ -71,6 +75,7 @@ export default function MobileTabNavigation( { categories, children } ) {
71
75
  { categories.map( ( category ) => (
72
76
  <Navigator.Screen
73
77
  key={ category.name }
78
+ className={ screenClassName }
74
79
  path={ `/category/${ category.name }` }
75
80
  >
76
81
  <ScreenHeader title={ __( 'Back' ) } />
@@ -3,10 +3,10 @@
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
5
 
6
- function InserterNoResults() {
6
+ function InserterNoResults( { children = __( 'No results found.' ) } ) {
7
7
  return (
8
8
  <div className="block-editor-inserter__no-results">
9
- <p>{ __( 'No results found.' ) }</p>
9
+ <p>{ children }</p>
10
10
  </div>
11
11
  );
12
12
  }
@@ -28,6 +28,7 @@ function InserterPreviewPanel( { item } ) {
28
28
  ...initialAttributes,
29
29
  },
30
30
  innerBlocks: example.innerBlocks,
31
+ innerContent: example.innerContent,
31
32
  } );
32
33
  }, [ name, example, initialAttributes ] );
33
34
  // Same as height of BlockPreviewPanel.
@@ -469,14 +469,31 @@ $block-inserter-tabs-height: 44px;
469
469
  }
470
470
  }
471
471
 
472
+ // On mobile the media category renders inside a `Navigator.Screen`. The screen
473
+ // is a grid item the navigator aligns to the start (so it's content-height by
474
+ // default); stretch it to full height and make it a flex column so the panel
475
+ // below the back-button header fills the remaining space rather than overflowing.
476
+ .block-editor-inserter__media-mobile-screen {
477
+ display: flex;
478
+ flex-direction: column;
479
+ align-self: stretch;
480
+ }
481
+
472
482
  .block-editor-inserter__media-panel {
473
- min-height: 100%;
474
483
  padding: 0 $grid-unit-20;
475
484
  display: flex;
476
485
  flex-direction: column;
486
+ // Mobile: fill the height left below the screen's back-button header so the
487
+ // results scroll internally and the attach footer stays on-screen.
488
+ flex: 1;
489
+ min-height: 0;
477
490
 
478
491
  @include break-medium {
479
492
  padding: 0;
493
+ // Desktop: the panel lives in the absolutely-positioned category panel,
494
+ // so fill its height directly instead.
495
+ flex: 0 1 auto;
496
+ min-height: 100%;
480
497
  }
481
498
 
482
499
  .block-editor-inserter__media-panel-spinner {
@@ -494,6 +511,90 @@ $block-inserter-tabs-height: 44px;
494
511
  padding: $grid-unit-20 $grid-unit-30 $grid-unit-20;
495
512
  }
496
513
  }
514
+
515
+ // The empty state grows to fill, alongside `-results`/`-spinner`, so the
516
+ // attach footer below stays pinned to the bottom in every state.
517
+ .block-editor-inserter__no-results {
518
+ flex-grow: 1;
519
+ }
520
+
521
+ .block-editor-inserter__media-panel-attach {
522
+ // Match the padding (and so the height) of the "Open Media Library"
523
+ // footer button in the adjacent column, so the two line up.
524
+ &.components-button {
525
+ justify-content: center;
526
+ padding: $grid-unit-20;
527
+ }
528
+ // Balanced breathing room above and below the footer button.
529
+ // `flex-shrink: 0` keeps it full height as a flex child rather than
530
+ // collapsing to its content.
531
+ flex-shrink: 0;
532
+ margin-top: $grid-unit-20;
533
+ margin-bottom: $grid-unit-20;
534
+ @include break-medium() {
535
+ margin-left: $grid-unit-30;
536
+ margin-right: $grid-unit-30;
537
+ }
538
+ }
539
+
540
+ .block-editor-inserter__media-panel-results {
541
+ // Take over the scroll host role the media list had when it was a direct
542
+ // flex child of the panel: grow to fill and constrain height
543
+ // (`min-height: 0` lets the inner list's `overflow-y: auto` engage).
544
+ display: flex;
545
+ flex-direction: column;
546
+ flex-grow: 1;
547
+ min-height: 0;
548
+
549
+ // While an attach/detach refetch is in flight, dim the existing grid (and
550
+ // gently pulse it) rather than clearing it or blocking it with a spinner.
551
+ // Mirrors the DataViews "refreshing" treatment; the delayed `is-loading`
552
+ // class (see `useDelayedLoading`) means quick refetches show nothing.
553
+ &.is-loading .block-editor-inserter__media-list {
554
+ opacity: 0.5;
555
+ pointer-events: none;
556
+
557
+ @media not ( prefers-reduced-motion ) {
558
+ opacity: 1;
559
+ animation: inserter-media-panel-pulse 1s ease-in-out infinite;
560
+ }
561
+ }
562
+ }
563
+
564
+ // When the attach footer is present it supplies the breathing room beneath
565
+ // the grid, so drop the list's own bottom padding — otherwise scrolling to
566
+ // the end leaves a doubled gap before the footer.
567
+ &.has-attach-footer .block-editor-inserter__media-list {
568
+ padding-bottom: 0;
569
+ }
570
+ }
571
+
572
+ @keyframes inserter-media-panel-pulse {
573
+ 0%,
574
+ 100% {
575
+ opacity: 1;
576
+ }
577
+ 50% {
578
+ opacity: 0.5;
579
+ }
580
+ }
581
+
582
+ .block-editor-inserter__media-panel-detach-modal {
583
+ // Render above the ellipsis dropdown (a `.components-popover`) it opens from,
584
+ // which otherwise stacks over the modal. Matches other dropdown-triggered
585
+ // modals (e.g. block rename).
586
+ z-index: z-index(".block-editor-inserter__media-panel-detach-modal");
587
+
588
+ p {
589
+ margin-top: 0;
590
+ }
591
+ }
592
+
593
+ .block-editor-inserter__media-panel-detach-actions {
594
+ display: flex;
595
+ justify-content: flex-end;
596
+ gap: $grid-unit-10;
597
+ margin-top: $grid-unit-20;
497
598
  }
498
599
 
499
600
  .block-editor-inserter__media-list__list-item {
@@ -513,7 +614,15 @@ $block-inserter-tabs-height: 44px;
513
614
  .block-editor-inserter__media-list__item-preview > * {
514
615
  outline-color: rgba($black, 0.3);
515
616
  }
617
+ }
516
618
 
619
+ // Reveal the per-item options button on hover, and — so keyboard users can
620
+ // reach it — whenever focus is within the item (e.g. its preview is
621
+ // focused). The button is `display: none` by default, which can never
622
+ // receive focus, so without `:focus-within` the detach/report action is
623
+ // unreachable by keyboard.
624
+ &.is-hovered,
625
+ &:focus-within {
517
626
  .block-editor-inserter__media-list__item-preview-options > button {
518
627
  display: block;
519
628
  }
@@ -44,10 +44,16 @@ function InserterListItem( {
44
44
  createBlock(
45
45
  item.name,
46
46
  item.initialAttributes,
47
- createBlocksFromInnerBlocksTemplate( item.innerBlocks )
47
+ createBlocksFromInnerBlocksTemplate( item.innerBlocks ),
48
+ item.innerContent
48
49
  ),
49
50
  ],
50
- [ item.name, item.initialAttributes, item.innerBlocks ]
51
+ [
52
+ item.name,
53
+ item.initialAttributes,
54
+ item.innerBlocks,
55
+ item.innerContent,
56
+ ]
51
57
  );
52
58
 
53
59
  const isSynced =
@@ -19,7 +19,6 @@ const MyLetterSpacingControl = () => (
19
19
  value={ value }
20
20
  onChange={ onChange }
21
21
  __unstableInputWidth="auto"
22
- __next40pxDefaultSize
23
22
  />
24
23
  );
25
24
  ```
@@ -46,13 +45,6 @@ A callback function invoked when the value is changed.
46
45
 
47
46
  Input width to pass through to inner UnitControl. Should be a valid CSS value.
48
47
 
49
- #### `__next40pxDefaultSize`
50
-
51
- - **Type:** `boolean`
52
- - **Default:** `false`
53
-
54
- Start opting into the larger default height that will become the default size in a future version.
55
-
56
48
  ## Related components
57
49
 
58
50
  Block Editor components are components that can be used to compose the UI of your block editor. Thus, they can only be used under a [`BlockEditorProvider`](https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/provider/README.md) in the components tree.
@@ -5,7 +5,6 @@ import {
5
5
  __experimentalUnitControl as UnitControl,
6
6
  __experimentalUseCustomUnits as useCustomUnits,
7
7
  } from '@wordpress/components';
8
- import deprecated from '@wordpress/deprecated';
9
8
  import { __ } from '@wordpress/i18n';
10
9
 
11
10
  /**
@@ -16,16 +15,15 @@ import { useSettings } from '../../components/use-settings';
16
15
  /**
17
16
  * Control for letter-spacing.
18
17
  *
19
- * @param {Object} props Component props.
20
- * @param {boolean} props.__next40pxDefaultSize Start opting into the larger default height that will become the default size in a future version.
21
- * @param {string} props.value Currently selected letter-spacing.
22
- * @param {Function} props.onChange Handles change in letter-spacing selection.
23
- * @param {string|number|undefined} props.__unstableInputWidth Input width to pass through to inner UnitControl. Should be a valid CSS value.
18
+ * @param {Object} props Component props.
19
+ * @param {boolean} [props.__next40pxDefaultSize] Start opting into the larger default height that will become the default size in a future version.
20
+ * @param {string} props.value Currently selected letter-spacing.
21
+ * @param {Function} props.onChange Handles change in letter-spacing selection.
22
+ * @param {string|number|undefined} props.__unstableInputWidth Input width to pass through to inner UnitControl. Should be a valid CSS value.
24
23
  *
25
24
  * @return {Element} Letter-spacing control.
26
25
  */
27
26
  export default function LetterSpacingControl( {
28
- __next40pxDefaultSize = false,
29
27
  value,
30
28
  onChange,
31
29
  __unstableInputWidth = '60px',
@@ -37,24 +35,8 @@ export default function LetterSpacingControl( {
37
35
  defaultValues: { px: 2, em: 0.2, rem: 0.2 },
38
36
  } );
39
37
 
40
- if (
41
- ! __next40pxDefaultSize &&
42
- ( otherProps.size === undefined || otherProps.size === 'default' )
43
- ) {
44
- deprecated(
45
- `36px default size for wp.blockEditor.__experimentalLetterSpacingControl`,
46
- {
47
- since: '6.8',
48
- version: '7.1',
49
- hint: 'Set the `__next40pxDefaultSize` prop to true to start opting into the new default size, which will become the default in a future version.',
50
- }
51
- );
52
- }
53
-
54
38
  return (
55
39
  <UnitControl
56
- __next40pxDefaultSize={ __next40pxDefaultSize }
57
- __shouldNotWarnDeprecated36pxSize
58
40
  { ...otherProps }
59
41
  label={ __( 'Letter spacing' ) }
60
42
  value={ value }
@@ -46,24 +46,12 @@ const meta = {
46
46
  defaultValue: { summary: '60px' },
47
47
  },
48
48
  },
49
- __next40pxDefaultSize: {
50
- control: 'boolean',
51
- description:
52
- 'Start opting into the larger default height that will become the default size in a future version.',
53
- table: {
54
- type: { summary: 'boolean' },
55
- defaultValue: { summary: 'false' },
56
- },
57
- },
58
49
  },
59
50
  };
60
51
 
61
52
  export default meta;
62
53
 
63
54
  export const Default = {
64
- args: {
65
- __next40pxDefaultSize: true,
66
- },
67
55
  render: function Template( { onChange, ...args } ) {
68
56
  const [ value, setValue ] = useState( '' );
69
57
  return (
@@ -18,7 +18,6 @@ const MyLineHeightControl = () => (
18
18
  <LineHeightControl
19
19
  value={ lineHeight }
20
20
  onChange={ onChange }
21
- __next40pxDefaultSize
22
21
  />
23
22
  );
24
23
  ```
@@ -37,13 +36,6 @@ The value of the line height.
37
36
 
38
37
  A callback function that handles the application of the line height value.
39
38
 
40
- #### `__next40pxDefaultSize`
41
-
42
- - **Type:** `boolean`
43
- - **Default:** `false`
44
-
45
- Start opting into the larger default height that will become the default size in a future version.
46
-
47
39
  ## Related components
48
40
 
49
41
  Block Editor components are components that can be used to compose the UI of your block editor. Thus, they can only be used under a [`BlockEditorProvider`](https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/provider/README.md) in the components tree.
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import { __experimentalNumberControl as NumberControl } from '@wordpress/components';
6
- import deprecated from '@wordpress/deprecated';
7
6
 
8
7
  /**
9
8
  * Internal dependencies
@@ -17,8 +16,12 @@ import {
17
16
  } from './utils';
18
17
 
19
18
  const LineHeightControl = ( {
20
- /** Start opting into the larger default height that will become the default size in a future version. */
21
- __next40pxDefaultSize = false,
19
+ /**
20
+ * Start opting into the larger default height that will become the default size in a future version.
21
+ *
22
+ * @deprecated Default behavior since WordPress 7.1. Prop can be safely removed.
23
+ */
24
+ __next40pxDefaultSize: _next40pxDefaultSize,
22
25
  value: lineHeight,
23
26
  onChange,
24
27
  __unstableInputWidth = '60px',
@@ -90,23 +93,11 @@ const LineHeightControl = ( {
90
93
  onChange( `${ nextValue }` );
91
94
  };
92
95
 
93
- if (
94
- ! __next40pxDefaultSize &&
95
- ( otherProps.size === undefined || otherProps.size === 'default' )
96
- ) {
97
- deprecated( `36px default size for wp.blockEditor.LineHeightControl`, {
98
- since: '6.8',
99
- version: '7.1',
100
- hint: 'Set the `__next40pxDefaultSize` prop to true to start opting into the new default size, which will become the default in a future version.',
101
- } );
102
- }
103
-
104
96
  return (
105
97
  <div className="block-editor-line-height-control">
106
98
  <NumberControl
107
99
  { ...otherProps }
108
- __shouldNotWarnDeprecated36pxSize
109
- __next40pxDefaultSize={ __next40pxDefaultSize }
100
+ __next40pxDefaultSize
110
101
  __unstableInputWidth={ __unstableInputWidth }
111
102
  __unstableStateReducer={ stateReducer }
112
103
  onChange={ handleOnChange }
@@ -22,7 +22,6 @@ const Template = ( props ) => {
22
22
 
23
23
  export const Default = Template.bind( {} );
24
24
  Default.args = {
25
- __next40pxDefaultSize: true,
26
25
  __unstableInputWidth: '100px',
27
26
  };
28
27
 
@@ -19,13 +19,7 @@ const SPIN = STEP * SPIN_FACTOR;
19
19
 
20
20
  const ControlledLineHeightControl = () => {
21
21
  const [ value, setValue ] = useState();
22
- return (
23
- <LineHeightControl
24
- value={ value }
25
- onChange={ setValue }
26
- __next40pxDefaultSize
27
- />
28
- );
22
+ return <LineHeightControl value={ value } onChange={ setValue } />;
29
23
  };
30
24
 
31
25
  describe( 'LineHeightControl', () => {
@@ -141,7 +141,9 @@ describe( 'LinkPicker', () => {
141
141
  );
142
142
 
143
143
  const button = screen.getByRole( 'button' );
144
- const image = within( button ).getByRole( 'img', { hidden: true } );
144
+ const image = within( button ).getByRole( 'presentation', {
145
+ hidden: true,
146
+ } );
145
147
 
146
148
  expect( image ).toHaveAttribute(
147
149
  'src',
@@ -46,6 +46,7 @@ function ListViewBlockSelectButton(
46
46
  isExpanded,
47
47
  ariaDescribedBy,
48
48
  visibilityLabel,
49
+ isDisabled = false,
49
50
  },
50
51
  ref
51
52
  ) {
@@ -79,6 +80,8 @@ function ListViewBlockSelectButton(
79
80
  }
80
81
 
81
82
  return (
83
+ // Disabled list view items intentionally omit href so TreeGrid skips them.
84
+ // eslint-disable-next-line jsx-a11y/anchor-is-valid
82
85
  <a
83
86
  className={ clsx(
84
87
  'block-editor-list-view-block-select-button',
@@ -94,7 +97,8 @@ function ListViewBlockSelectButton(
94
97
  onDragStart={ onDragStartHandler }
95
98
  onDragEnd={ onDragEnd }
96
99
  draggable={ draggable }
97
- href={ `#block-${ clientId }` }
100
+ href={ isDisabled ? undefined : `#block-${ clientId }` }
101
+ aria-disabled={ isDisabled ? true : undefined }
98
102
  aria-describedby={ ariaDescribedBy }
99
103
  aria-expanded={ isExpanded }
100
104
  >