@wordpress/block-editor 15.23.0 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (684) hide show
  1. package/CHANGELOG.md +33 -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-canvas/index.cjs +6 -1
  7. package/build/components/block-canvas/index.cjs.map +2 -2
  8. package/build/components/block-controls/groups.cjs +3 -1
  9. package/build/components/block-controls/groups.cjs.map +2 -2
  10. package/build/components/block-edit/edit.cjs +10 -18
  11. package/build/components/block-edit/edit.cjs.map +2 -2
  12. package/build/components/block-inspector/edit-contents.cjs +3 -0
  13. package/build/components/block-inspector/edit-contents.cjs.map +3 -3
  14. package/build/components/block-inspector/index.cjs +2 -3
  15. package/build/components/block-inspector/index.cjs.map +2 -2
  16. package/build/components/block-list/block-invalid-warning.cjs +8 -19
  17. package/build/components/block-list/block-invalid-warning.cjs.map +2 -2
  18. package/build/components/block-list/block.cjs +9 -3
  19. package/build/components/block-list/block.cjs.map +3 -3
  20. package/build/components/block-list/index.cjs +1 -3
  21. package/build/components/block-list/index.cjs.map +2 -2
  22. package/build/components/block-list/use-block-props/index.cjs +3 -1
  23. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  24. package/build/components/block-list/use-block-props/use-focus-first-element.cjs +9 -4
  25. package/build/components/block-list/use-block-props/use-focus-first-element.cjs.map +2 -2
  26. package/build/components/block-list/use-block-props/use-focus-handler.cjs +12 -4
  27. package/build/components/block-list/use-block-props/use-focus-handler.cjs.map +2 -2
  28. package/build/components/block-styles/use-styles-for-block.cjs +2 -1
  29. package/build/components/block-styles/use-styles-for-block.cjs.map +2 -2
  30. package/build/components/block-title/use-block-display-title.cjs +7 -2
  31. package/build/components/block-title/use-block-display-title.cjs.map +2 -2
  32. package/build/components/block-toolbar/block-toolbar-icon.cjs +10 -14
  33. package/build/components/block-toolbar/block-toolbar-icon.cjs.map +2 -2
  34. package/build/components/block-toolbar/index.cjs +43 -24
  35. package/build/components/block-toolbar/index.cjs.map +2 -2
  36. package/build/components/block-tools/index.cjs +7 -2
  37. package/build/components/block-tools/index.cjs.map +2 -2
  38. package/build/components/block-variation-transforms/index.cjs +0 -1
  39. package/build/components/block-variation-transforms/index.cjs.map +2 -2
  40. package/build/components/block-visibility/modal.cjs +20 -6
  41. package/build/components/block-visibility/modal.cjs.map +2 -2
  42. package/build/components/block-visibility/use-block-visibility.cjs +16 -6
  43. package/build/components/block-visibility/use-block-visibility.cjs.map +3 -3
  44. package/build/components/block-visibility/utils.cjs +15 -2
  45. package/build/components/block-visibility/utils.cjs.map +3 -3
  46. package/build/components/block-visibility/viewport-menu-item.cjs +7 -1
  47. package/build/components/block-visibility/viewport-menu-item.cjs.map +2 -2
  48. package/build/components/block-visibility/viewport-toolbar.cjs +5 -0
  49. package/build/components/block-visibility/viewport-toolbar.cjs.map +2 -2
  50. package/build/components/block-visibility/viewport-visibility-info.cjs +5 -1
  51. package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
  52. package/build/components/child-layout-control/index.cjs +0 -6
  53. package/build/components/child-layout-control/index.cjs.map +2 -2
  54. package/build/components/colors-gradients/control.cjs +5 -5
  55. package/build/components/colors-gradients/control.cjs.map +2 -2
  56. package/build/components/date-format-picker/index.cjs +0 -1
  57. package/build/components/date-format-picker/index.cjs.map +2 -2
  58. package/build/components/dimensions-tool/aspect-ratio-tool.cjs +1 -2
  59. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +2 -2
  60. package/build/components/dimensions-tool/scale-tool.cjs +0 -1
  61. package/build/components/dimensions-tool/scale-tool.cjs.map +2 -2
  62. package/build/components/dimensions-tool/width-height-tool.cjs +2 -4
  63. package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
  64. package/build/components/font-appearance-control/index.cjs +6 -25
  65. package/build/components/font-appearance-control/index.cjs.map +3 -3
  66. package/build/components/font-family/index.cjs +6 -15
  67. package/build/components/font-family/index.cjs.map +3 -3
  68. package/build/components/font-sizes/font-size-picker.cjs +1 -2
  69. package/build/components/font-sizes/font-size-picker.cjs.map +2 -2
  70. package/build/components/global-styles/border-panel.cjs +0 -1
  71. package/build/components/global-styles/border-panel.cjs.map +2 -2
  72. package/build/components/global-styles/dimensions-panel.cjs +0 -3
  73. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  74. package/build/components/global-styles/state-control-badges.cjs +39 -3
  75. package/build/components/global-styles/state-control-badges.cjs.map +2 -2
  76. package/build/components/global-styles/typography-panel.cjs +4 -11
  77. package/build/components/global-styles/typography-panel.cjs.map +2 -2
  78. package/build/components/height-control/index.cjs +0 -2
  79. package/build/components/height-control/index.cjs.map +2 -2
  80. package/build/components/html-element-control/index.cjs +0 -1
  81. package/build/components/html-element-control/index.cjs.map +2 -2
  82. package/build/components/image-editor/index.cjs +5 -0
  83. package/build/components/image-editor/index.cjs.map +3 -3
  84. package/build/components/image-editor/zoom-dropdown.cjs +0 -1
  85. package/build/components/image-editor/zoom-dropdown.cjs.map +2 -2
  86. package/build/components/image-size-control/index.cjs +3 -7
  87. package/build/components/image-size-control/index.cjs.map +2 -2
  88. package/build/components/inner-content/index.cjs +107 -0
  89. package/build/components/inner-content/index.cjs.map +7 -0
  90. package/build/components/inserter/hooks/use-block-types-state.cjs +10 -2
  91. package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
  92. package/build/components/inserter/media-tab/hooks.cjs +67 -12
  93. package/build/components/inserter/media-tab/hooks.cjs.map +2 -2
  94. package/build/components/inserter/media-tab/media-list.cjs +3 -1
  95. package/build/components/inserter/media-tab/media-list.cjs.map +2 -2
  96. package/build/components/inserter/media-tab/media-panel.cjs +287 -28
  97. package/build/components/inserter/media-tab/media-panel.cjs.map +3 -3
  98. package/build/components/inserter/media-tab/media-preview.cjs +32 -17
  99. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  100. package/build/components/inserter/media-tab/media-tab.cjs +26 -6
  101. package/build/components/inserter/media-tab/media-tab.cjs.map +2 -2
  102. package/build/components/inserter/mobile-tab-navigation.cjs +6 -1
  103. package/build/components/inserter/mobile-tab-navigation.cjs.map +2 -2
  104. package/build/components/inserter/no-results.cjs +2 -2
  105. package/build/components/inserter/no-results.cjs.map +2 -2
  106. package/build/components/inserter/preview-panel.cjs +2 -1
  107. package/build/components/inserter/preview-panel.cjs.map +2 -2
  108. package/build/components/inserter-list-item/index.cjs +8 -2
  109. package/build/components/inserter-list-item/index.cjs.map +2 -2
  110. package/build/components/keyboard-shortcuts/index.cjs +19 -11
  111. package/build/components/keyboard-shortcuts/index.cjs.map +2 -2
  112. package/build/components/letter-spacing-control/index.cjs +0 -24
  113. package/build/components/letter-spacing-control/index.cjs.map +3 -3
  114. package/build/components/line-height-control/index.cjs +6 -22
  115. package/build/components/line-height-control/index.cjs.map +3 -3
  116. package/build/components/list-view/block-select-button.cjs +90 -84
  117. package/build/components/list-view/block-select-button.cjs.map +2 -2
  118. package/build/components/list-view/block.cjs +61 -21
  119. package/build/components/list-view/block.cjs.map +2 -2
  120. package/build/components/list-view/expander.cjs +1 -1
  121. package/build/components/list-view/expander.cjs.map +2 -2
  122. package/build/components/list-view/use-list-view-client-ids.cjs +2 -2
  123. package/build/components/list-view/use-list-view-client-ids.cjs.map +2 -2
  124. package/build/components/media-placeholder/index.cjs +0 -1
  125. package/build/components/media-placeholder/index.cjs.map +2 -2
  126. package/build/components/observe-typing/index.cjs +4 -3
  127. package/build/components/observe-typing/index.cjs.map +2 -2
  128. package/build/components/preset-input-control/custom-value-controls.cjs +1 -3
  129. package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
  130. package/build/components/preset-input-control/index.cjs +1 -3
  131. package/build/components/preset-input-control/index.cjs.map +2 -2
  132. package/build/components/resolution-tool/index.cjs +1 -2
  133. package/build/components/resolution-tool/index.cjs.map +2 -2
  134. package/build/components/rich-text/event-listeners/before-input-rules.cjs +3 -4
  135. package/build/components/rich-text/event-listeners/before-input-rules.cjs.map +3 -3
  136. package/build/components/rich-text/event-listeners/delete.cjs +2 -3
  137. package/build/components/rich-text/event-listeners/delete.cjs.map +3 -3
  138. package/build/components/rich-text/event-listeners/enter.cjs +3 -2
  139. package/build/components/rich-text/event-listeners/enter.cjs.map +3 -3
  140. package/build/components/rich-text/event-listeners/input-events.cjs +3 -3
  141. package/build/components/rich-text/event-listeners/input-events.cjs.map +3 -3
  142. package/build/components/rich-text/event-listeners/input-rules.cjs +3 -4
  143. package/build/components/rich-text/event-listeners/input-rules.cjs.map +3 -3
  144. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs +3 -3
  145. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs.map +3 -3
  146. package/build/components/rich-text/event-listeners/paste-handler.cjs +2 -1
  147. package/build/components/rich-text/event-listeners/paste-handler.cjs.map +3 -3
  148. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs +3 -3
  149. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs.map +3 -3
  150. package/build/components/rich-text/event-listeners/shortcuts.cjs +3 -3
  151. package/build/components/rich-text/event-listeners/shortcuts.cjs.map +3 -3
  152. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs +3 -3
  153. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs.map +3 -3
  154. package/build/components/rich-text/index.cjs +66 -17
  155. package/build/components/rich-text/index.cjs.map +2 -2
  156. package/build/components/text-alignment-control/index.cjs +0 -1
  157. package/build/components/text-alignment-control/index.cjs.map +2 -2
  158. package/build/components/text-decoration-control/index.cjs +0 -1
  159. package/build/components/text-decoration-control/index.cjs.map +2 -2
  160. package/build/components/text-indent-control/index.cjs +0 -8
  161. package/build/components/text-indent-control/index.cjs.map +2 -2
  162. package/build/components/text-transform-control/index.cjs +0 -1
  163. package/build/components/text-transform-control/index.cjs.map +2 -2
  164. package/build/components/typewriter/index.cjs +129 -136
  165. package/build/components/typewriter/index.cjs.map +3 -3
  166. package/build/components/use-block-commands/index.cjs +21 -17
  167. package/build/components/use-block-commands/index.cjs.map +2 -2
  168. package/build/components/use-block-display-information/index.cjs +10 -8
  169. package/build/components/use-block-display-information/index.cjs.map +2 -2
  170. package/build/components/use-on-block-drop/index.cjs +3 -7
  171. package/build/components/use-on-block-drop/index.cjs.map +2 -2
  172. package/build/components/writing-flow/index.cjs +12 -1
  173. package/build/components/writing-flow/index.cjs.map +3 -3
  174. package/build/components/writing-flow/use-arrow-nav.cjs +18 -5
  175. package/build/components/writing-flow/use-arrow-nav.cjs.map +2 -2
  176. package/build/components/writing-flow/use-click-selection.cjs +2 -2
  177. package/build/components/writing-flow/use-click-selection.cjs.map +2 -2
  178. package/build/components/writing-flow/use-clipboard-handler.cjs +4 -1
  179. package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
  180. package/build/components/writing-flow/use-drag-selection.cjs +3 -8
  181. package/build/components/writing-flow/use-drag-selection.cjs.map +2 -2
  182. package/build/components/writing-flow/use-editable-root.cjs +112 -0
  183. package/build/components/writing-flow/use-editable-root.cjs.map +7 -0
  184. package/build/components/writing-flow/use-home-end.cjs +64 -0
  185. package/build/components/writing-flow/use-home-end.cjs.map +7 -0
  186. package/build/components/writing-flow/use-input.cjs +15 -5
  187. package/build/components/writing-flow/use-input.cjs.map +2 -2
  188. package/build/components/writing-flow/use-multi-selection.cjs +2 -2
  189. package/build/components/writing-flow/use-multi-selection.cjs.map +2 -2
  190. package/build/components/writing-flow/use-select-all.cjs +14 -2
  191. package/build/components/writing-flow/use-select-all.cjs.map +2 -2
  192. package/build/components/writing-flow/use-selection-observer.cjs +126 -20
  193. package/build/components/writing-flow/use-selection-observer.cjs.map +3 -3
  194. package/build/components/writing-flow/utils.cjs +39 -2
  195. package/build/components/writing-flow/utils.cjs.map +2 -2
  196. package/build/components/writing-mode-control/index.cjs +0 -1
  197. package/build/components/writing-mode-control/index.cjs.map +2 -2
  198. package/build/hooks/background.cjs +3 -2
  199. package/build/hooks/background.cjs.map +2 -2
  200. package/build/hooks/block-fields/rich-text/index.cjs +2 -3
  201. package/build/hooks/block-fields/rich-text/index.cjs.map +3 -3
  202. package/build/hooks/elements.cjs +1 -1
  203. package/build/hooks/elements.cjs.map +2 -2
  204. package/build/hooks/font-size.cjs +1 -2
  205. package/build/hooks/font-size.cjs.map +2 -2
  206. package/build/hooks/grid-visualizer.cjs +5 -3
  207. package/build/hooks/grid-visualizer.cjs.map +2 -2
  208. package/build/hooks/layout-child.cjs +22 -12
  209. package/build/hooks/layout-child.cjs.map +3 -3
  210. package/build/hooks/layout.cjs +33 -16
  211. package/build/hooks/layout.cjs.map +3 -3
  212. package/build/hooks/position.cjs +36 -16
  213. package/build/hooks/position.cjs.map +2 -2
  214. package/build/hooks/states.cjs +29 -12
  215. package/build/hooks/states.cjs.map +3 -3
  216. package/build/hooks/style.cjs +31 -9
  217. package/build/hooks/style.cjs.map +3 -3
  218. package/build/hooks/text-align.cjs +36 -6
  219. package/build/hooks/text-align.cjs.map +3 -3
  220. package/build/hooks/typography.cjs +1 -1
  221. package/build/hooks/typography.cjs.map +2 -2
  222. package/build/layouts/constrained.cjs +35 -27
  223. package/build/layouts/constrained.cjs.map +2 -2
  224. package/build/layouts/flex.cjs +27 -22
  225. package/build/layouts/flex.cjs.map +2 -2
  226. package/build/layouts/grid.cjs +51 -11
  227. package/build/layouts/grid.cjs.map +2 -2
  228. package/build/private-apis.cjs +4 -1
  229. package/build/private-apis.cjs.map +3 -3
  230. package/build/store/actions.cjs +2 -2
  231. package/build/store/actions.cjs.map +2 -2
  232. package/build/store/private-keys.cjs +3 -0
  233. package/build/store/private-keys.cjs.map +2 -2
  234. package/build/store/private-selectors.cjs +85 -6
  235. package/build/store/private-selectors.cjs.map +3 -3
  236. package/build/store/selectors.cjs +13 -0
  237. package/build/store/selectors.cjs.map +2 -2
  238. package/build/utils/block-bindings.cjs +29 -0
  239. package/build/utils/block-bindings.cjs.map +2 -2
  240. package/build/utils/dom.cjs +14 -0
  241. package/build/utils/dom.cjs.map +2 -2
  242. package/build-module/autocompleters/block.mjs +10 -2
  243. package/build-module/autocompleters/block.mjs.map +2 -2
  244. package/build-module/components/background-image-control/index.mjs +0 -2
  245. package/build-module/components/background-image-control/index.mjs.map +2 -2
  246. package/build-module/components/block-canvas/index.mjs +7 -2
  247. package/build-module/components/block-canvas/index.mjs.map +2 -2
  248. package/build-module/components/block-controls/groups.mjs +3 -1
  249. package/build-module/components/block-controls/groups.mjs.map +2 -2
  250. package/build-module/components/block-edit/edit.mjs +11 -18
  251. package/build-module/components/block-edit/edit.mjs.map +2 -2
  252. package/build-module/components/block-inspector/edit-contents.mjs +4 -1
  253. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  254. package/build-module/components/block-inspector/index.mjs +2 -3
  255. package/build-module/components/block-inspector/index.mjs.map +2 -2
  256. package/build-module/components/block-list/block-invalid-warning.mjs +8 -19
  257. package/build-module/components/block-list/block-invalid-warning.mjs.map +2 -2
  258. package/build-module/components/block-list/block.mjs +9 -3
  259. package/build-module/components/block-list/block.mjs.map +3 -3
  260. package/build-module/components/block-list/index.mjs +1 -3
  261. package/build-module/components/block-list/index.mjs.map +2 -2
  262. package/build-module/components/block-list/use-block-props/index.mjs +3 -1
  263. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  264. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs +9 -4
  265. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs.map +2 -2
  266. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +12 -4
  267. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs.map +2 -2
  268. package/build-module/components/block-styles/use-styles-for-block.mjs +2 -1
  269. package/build-module/components/block-styles/use-styles-for-block.mjs.map +2 -2
  270. package/build-module/components/block-title/use-block-display-title.mjs +7 -2
  271. package/build-module/components/block-title/use-block-display-title.mjs.map +2 -2
  272. package/build-module/components/block-toolbar/block-toolbar-icon.mjs +10 -14
  273. package/build-module/components/block-toolbar/block-toolbar-icon.mjs.map +2 -2
  274. package/build-module/components/block-toolbar/index.mjs +43 -24
  275. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  276. package/build-module/components/block-tools/index.mjs +7 -2
  277. package/build-module/components/block-tools/index.mjs.map +2 -2
  278. package/build-module/components/block-variation-transforms/index.mjs +0 -1
  279. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  280. package/build-module/components/block-visibility/modal.mjs +22 -10
  281. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  282. package/build-module/components/block-visibility/use-block-visibility.mjs +17 -7
  283. package/build-module/components/block-visibility/use-block-visibility.mjs.map +2 -2
  284. package/build-module/components/block-visibility/utils.mjs +18 -3
  285. package/build-module/components/block-visibility/utils.mjs.map +2 -2
  286. package/build-module/components/block-visibility/viewport-menu-item.mjs +7 -1
  287. package/build-module/components/block-visibility/viewport-menu-item.mjs.map +2 -2
  288. package/build-module/components/block-visibility/viewport-toolbar.mjs +5 -0
  289. package/build-module/components/block-visibility/viewport-toolbar.mjs.map +2 -2
  290. package/build-module/components/block-visibility/viewport-visibility-info.mjs +5 -1
  291. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  292. package/build-module/components/child-layout-control/index.mjs +0 -6
  293. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  294. package/build-module/components/colors-gradients/control.mjs +5 -5
  295. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  296. package/build-module/components/date-format-picker/index.mjs +0 -1
  297. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  298. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +1 -2
  299. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  300. package/build-module/components/dimensions-tool/scale-tool.mjs +0 -1
  301. package/build-module/components/dimensions-tool/scale-tool.mjs.map +2 -2
  302. package/build-module/components/dimensions-tool/width-height-tool.mjs +2 -4
  303. package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
  304. package/build-module/components/font-appearance-control/index.mjs +6 -15
  305. package/build-module/components/font-appearance-control/index.mjs.map +2 -2
  306. package/build-module/components/font-family/index.mjs +6 -15
  307. package/build-module/components/font-family/index.mjs.map +2 -2
  308. package/build-module/components/font-sizes/font-size-picker.mjs +1 -2
  309. package/build-module/components/font-sizes/font-size-picker.mjs.map +2 -2
  310. package/build-module/components/global-styles/border-panel.mjs +0 -1
  311. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  312. package/build-module/components/global-styles/dimensions-panel.mjs +0 -3
  313. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  314. package/build-module/components/global-styles/state-control-badges.mjs +41 -5
  315. package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
  316. package/build-module/components/global-styles/typography-panel.mjs +4 -11
  317. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  318. package/build-module/components/height-control/index.mjs +0 -2
  319. package/build-module/components/height-control/index.mjs.map +2 -2
  320. package/build-module/components/html-element-control/index.mjs +0 -1
  321. package/build-module/components/html-element-control/index.mjs.map +2 -2
  322. package/build-module/components/image-editor/index.mjs +5 -0
  323. package/build-module/components/image-editor/index.mjs.map +2 -2
  324. package/build-module/components/image-editor/zoom-dropdown.mjs +0 -1
  325. package/build-module/components/image-editor/zoom-dropdown.mjs.map +2 -2
  326. package/build-module/components/image-size-control/index.mjs +3 -7
  327. package/build-module/components/image-size-control/index.mjs.map +2 -2
  328. package/build-module/components/inner-content/index.mjs +82 -0
  329. package/build-module/components/inner-content/index.mjs.map +7 -0
  330. package/build-module/components/inserter/hooks/use-block-types-state.mjs +10 -2
  331. package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
  332. package/build-module/components/inserter/media-tab/hooks.mjs +66 -12
  333. package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
  334. package/build-module/components/inserter/media-tab/media-list.mjs +3 -1
  335. package/build-module/components/inserter/media-tab/media-list.mjs.map +2 -2
  336. package/build-module/components/inserter/media-tab/media-panel.mjs +297 -32
  337. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  338. package/build-module/components/inserter/media-tab/media-preview.mjs +33 -18
  339. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  340. package/build-module/components/inserter/media-tab/media-tab.mjs +27 -7
  341. package/build-module/components/inserter/media-tab/media-tab.mjs.map +2 -2
  342. package/build-module/components/inserter/mobile-tab-navigation.mjs +6 -1
  343. package/build-module/components/inserter/mobile-tab-navigation.mjs.map +2 -2
  344. package/build-module/components/inserter/no-results.mjs +2 -2
  345. package/build-module/components/inserter/no-results.mjs.map +2 -2
  346. package/build-module/components/inserter/preview-panel.mjs +2 -1
  347. package/build-module/components/inserter/preview-panel.mjs.map +2 -2
  348. package/build-module/components/inserter-list-item/index.mjs +8 -2
  349. package/build-module/components/inserter-list-item/index.mjs.map +2 -2
  350. package/build-module/components/keyboard-shortcuts/index.mjs +19 -11
  351. package/build-module/components/keyboard-shortcuts/index.mjs.map +2 -2
  352. package/build-module/components/letter-spacing-control/index.mjs +0 -14
  353. package/build-module/components/letter-spacing-control/index.mjs.map +2 -2
  354. package/build-module/components/line-height-control/index.mjs +6 -12
  355. package/build-module/components/line-height-control/index.mjs.map +2 -2
  356. package/build-module/components/list-view/block-select-button.mjs +90 -84
  357. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  358. package/build-module/components/list-view/block.mjs +61 -21
  359. package/build-module/components/list-view/block.mjs.map +2 -2
  360. package/build-module/components/list-view/expander.mjs +1 -1
  361. package/build-module/components/list-view/expander.mjs.map +2 -2
  362. package/build-module/components/list-view/use-list-view-client-ids.mjs +2 -2
  363. package/build-module/components/list-view/use-list-view-client-ids.mjs.map +2 -2
  364. package/build-module/components/media-placeholder/index.mjs +0 -1
  365. package/build-module/components/media-placeholder/index.mjs.map +2 -2
  366. package/build-module/components/observe-typing/index.mjs +4 -3
  367. package/build-module/components/observe-typing/index.mjs.map +2 -2
  368. package/build-module/components/preset-input-control/custom-value-controls.mjs +1 -3
  369. package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
  370. package/build-module/components/preset-input-control/index.mjs +1 -3
  371. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  372. package/build-module/components/resolution-tool/index.mjs +1 -2
  373. package/build-module/components/resolution-tool/index.mjs.map +2 -2
  374. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs +8 -5
  375. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs.map +2 -2
  376. package/build-module/components/rich-text/event-listeners/delete.mjs +7 -4
  377. package/build-module/components/rich-text/event-listeners/delete.mjs.map +2 -2
  378. package/build-module/components/rich-text/event-listeners/enter.mjs +8 -3
  379. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  380. package/build-module/components/rich-text/event-listeners/input-events.mjs +3 -3
  381. package/build-module/components/rich-text/event-listeners/input-events.mjs.map +2 -2
  382. package/build-module/components/rich-text/event-listeners/input-rules.mjs +8 -5
  383. package/build-module/components/rich-text/event-listeners/input-rules.mjs.map +2 -2
  384. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs +3 -3
  385. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs.map +2 -2
  386. package/build-module/components/rich-text/event-listeners/paste-handler.mjs +8 -2
  387. package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
  388. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs +3 -3
  389. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs.map +2 -2
  390. package/build-module/components/rich-text/event-listeners/shortcuts.mjs +3 -3
  391. package/build-module/components/rich-text/event-listeners/shortcuts.mjs.map +2 -2
  392. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs +3 -3
  393. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs.map +2 -2
  394. package/build-module/components/rich-text/index.mjs +64 -13
  395. package/build-module/components/rich-text/index.mjs.map +2 -2
  396. package/build-module/components/text-alignment-control/index.mjs +0 -1
  397. package/build-module/components/text-alignment-control/index.mjs.map +2 -2
  398. package/build-module/components/text-decoration-control/index.mjs +0 -1
  399. package/build-module/components/text-decoration-control/index.mjs.map +2 -2
  400. package/build-module/components/text-indent-control/index.mjs +0 -8
  401. package/build-module/components/text-indent-control/index.mjs.map +2 -2
  402. package/build-module/components/text-transform-control/index.mjs +0 -1
  403. package/build-module/components/text-transform-control/index.mjs.map +2 -2
  404. package/build-module/components/typewriter/index.mjs +129 -136
  405. package/build-module/components/typewriter/index.mjs.map +2 -2
  406. package/build-module/components/use-block-commands/index.mjs +21 -17
  407. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  408. package/build-module/components/use-block-display-information/index.mjs +10 -8
  409. package/build-module/components/use-block-display-information/index.mjs.map +2 -2
  410. package/build-module/components/use-on-block-drop/index.mjs +4 -7
  411. package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
  412. package/build-module/components/writing-flow/index.mjs +12 -1
  413. package/build-module/components/writing-flow/index.mjs.map +2 -2
  414. package/build-module/components/writing-flow/use-arrow-nav.mjs +19 -6
  415. package/build-module/components/writing-flow/use-arrow-nav.mjs.map +2 -2
  416. package/build-module/components/writing-flow/use-click-selection.mjs +2 -2
  417. package/build-module/components/writing-flow/use-click-selection.mjs.map +2 -2
  418. package/build-module/components/writing-flow/use-clipboard-handler.mjs +5 -2
  419. package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
  420. package/build-module/components/writing-flow/use-drag-selection.mjs +1 -6
  421. package/build-module/components/writing-flow/use-drag-selection.mjs.map +2 -2
  422. package/build-module/components/writing-flow/use-editable-root.mjs +86 -0
  423. package/build-module/components/writing-flow/use-editable-root.mjs.map +7 -0
  424. package/build-module/components/writing-flow/use-home-end.mjs +43 -0
  425. package/build-module/components/writing-flow/use-home-end.mjs.map +7 -0
  426. package/build-module/components/writing-flow/use-input.mjs +15 -5
  427. package/build-module/components/writing-flow/use-input.mjs.map +2 -2
  428. package/build-module/components/writing-flow/use-multi-selection.mjs +2 -2
  429. package/build-module/components/writing-flow/use-multi-selection.mjs.map +2 -2
  430. package/build-module/components/writing-flow/use-select-all.mjs +19 -3
  431. package/build-module/components/writing-flow/use-select-all.mjs.map +2 -2
  432. package/build-module/components/writing-flow/use-selection-observer.mjs +128 -19
  433. package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
  434. package/build-module/components/writing-flow/utils.mjs +35 -1
  435. package/build-module/components/writing-flow/utils.mjs.map +2 -2
  436. package/build-module/components/writing-mode-control/index.mjs +0 -1
  437. package/build-module/components/writing-mode-control/index.mjs.map +2 -2
  438. package/build-module/hooks/background.mjs +3 -2
  439. package/build-module/hooks/background.mjs.map +2 -2
  440. package/build-module/hooks/block-fields/rich-text/index.mjs +2 -6
  441. package/build-module/hooks/block-fields/rich-text/index.mjs.map +2 -2
  442. package/build-module/hooks/elements.mjs +1 -1
  443. package/build-module/hooks/elements.mjs.map +2 -2
  444. package/build-module/hooks/font-size.mjs +1 -2
  445. package/build-module/hooks/font-size.mjs.map +2 -2
  446. package/build-module/hooks/grid-visualizer.mjs +5 -3
  447. package/build-module/hooks/grid-visualizer.mjs.map +2 -2
  448. package/build-module/hooks/layout-child.mjs +22 -12
  449. package/build-module/hooks/layout-child.mjs.map +2 -2
  450. package/build-module/hooks/layout.mjs +32 -16
  451. package/build-module/hooks/layout.mjs.map +2 -2
  452. package/build-module/hooks/position.mjs +38 -18
  453. package/build-module/hooks/position.mjs.map +2 -2
  454. package/build-module/hooks/states.mjs +29 -12
  455. package/build-module/hooks/states.mjs.map +2 -2
  456. package/build-module/hooks/style.mjs +40 -11
  457. package/build-module/hooks/style.mjs.map +2 -2
  458. package/build-module/hooks/text-align.mjs +39 -10
  459. package/build-module/hooks/text-align.mjs.map +2 -2
  460. package/build-module/hooks/typography.mjs +1 -1
  461. package/build-module/hooks/typography.mjs.map +2 -2
  462. package/build-module/layouts/constrained.mjs +35 -27
  463. package/build-module/layouts/constrained.mjs.map +2 -2
  464. package/build-module/layouts/flex.mjs +27 -22
  465. package/build-module/layouts/flex.mjs.map +2 -2
  466. package/build-module/layouts/grid.mjs +52 -11
  467. package/build-module/layouts/grid.mjs.map +2 -2
  468. package/build-module/private-apis.mjs +5 -1
  469. package/build-module/private-apis.mjs.map +2 -2
  470. package/build-module/store/actions.mjs +3 -3
  471. package/build-module/store/actions.mjs.map +2 -2
  472. package/build-module/store/private-keys.mjs +2 -0
  473. package/build-module/store/private-keys.mjs.map +2 -2
  474. package/build-module/store/private-selectors.mjs +84 -6
  475. package/build-module/store/private-selectors.mjs.map +2 -2
  476. package/build-module/store/selectors.mjs +13 -0
  477. package/build-module/store/selectors.mjs.map +2 -2
  478. package/build-module/utils/block-bindings.mjs +28 -0
  479. package/build-module/utils/block-bindings.mjs.map +2 -2
  480. package/build-module/utils/dom.mjs +13 -0
  481. package/build-module/utils/dom.mjs.map +2 -2
  482. package/build-style/content-rtl.css +15 -14
  483. package/build-style/content.css +15 -14
  484. package/build-style/default-editor-styles-rtl.css +1 -1
  485. package/build-style/default-editor-styles.css +1 -1
  486. package/build-style/style-rtl.css +144 -47
  487. package/build-style/style.css +144 -47
  488. package/build-types/components/block-context/index.d.ts +7 -0
  489. package/build-types/components/block-context/index.d.ts.map +1 -1
  490. package/build-types/utils/block-bindings.d.ts +19 -0
  491. package/build-types/utils/block-bindings.d.ts.map +1 -1
  492. package/build-types/utils/dom.d.ts +11 -0
  493. package/build-types/utils/dom.d.ts.map +1 -1
  494. package/build-types/utils/get-px-from-css-unit.d.ts +2 -2
  495. package/build-types/utils/get-px-from-css-unit.d.ts.map +1 -1
  496. package/build-types/utils/pasting.d.ts +1 -1
  497. package/build-types/utils/pasting.d.ts.map +1 -1
  498. package/package.json +46 -44
  499. package/src/autocompleters/block.js +10 -3
  500. package/src/autocompleters/test/block.js +53 -0
  501. package/src/components/background-image-control/index.js +0 -2
  502. package/src/components/block-canvas/index.js +9 -2
  503. package/src/components/block-card/style.scss +1 -1
  504. package/src/components/block-controls/groups.js +2 -0
  505. package/src/components/block-edit/edit.js +13 -31
  506. package/src/components/block-inspector/edit-contents.js +5 -1
  507. package/src/components/block-inspector/index.js +3 -2
  508. package/src/components/block-list/block-invalid-warning.js +8 -19
  509. package/src/components/block-list/block.js +6 -0
  510. package/src/components/block-list/index.js +0 -2
  511. package/src/components/block-list/use-block-props/index.js +2 -0
  512. package/src/components/block-list/use-block-props/use-focus-first-element.js +23 -4
  513. package/src/components/block-list/use-block-props/use-focus-handler.js +34 -9
  514. package/src/components/block-lock/style.scss +1 -1
  515. package/src/components/block-manager/style.scss +1 -1
  516. package/src/components/block-navigation/style.scss +1 -1
  517. package/src/components/block-patterns-list/stories/index.story.jsx +1 -1
  518. package/src/components/block-quick-navigation/style.scss +1 -3
  519. package/src/components/block-styles/style.scss +2 -2
  520. package/src/components/block-styles/use-styles-for-block.js +1 -0
  521. package/src/components/block-title/use-block-display-title.js +7 -2
  522. package/src/components/block-toolbar/block-toolbar-icon.js +11 -16
  523. package/src/components/block-toolbar/index.js +41 -18
  524. package/src/components/block-toolbar/test/block-toolbar-icon.js +32 -9
  525. package/src/components/block-tools/index.js +7 -0
  526. package/src/components/block-types-list/style.scss +0 -1
  527. package/src/components/block-variation-transforms/index.js +0 -1
  528. package/src/components/block-visibility/modal.js +24 -10
  529. package/src/components/block-visibility/style.scss +1 -1
  530. package/src/components/block-visibility/test/use-block-visibility.js +128 -35
  531. package/src/components/block-visibility/test/utils.js +11 -0
  532. package/src/components/block-visibility/use-block-visibility.js +33 -11
  533. package/src/components/block-visibility/utils.js +31 -6
  534. package/src/components/block-visibility/viewport-menu-item.js +10 -1
  535. package/src/components/block-visibility/viewport-toolbar.js +6 -0
  536. package/src/components/block-visibility/viewport-visibility-info.js +5 -1
  537. package/src/components/button-block-appender/content.scss +1 -7
  538. package/src/components/child-layout-control/index.js +0 -6
  539. package/src/components/color-palette/test/__snapshots__/control.js.snap +13 -108
  540. package/src/components/colors-gradients/control.js +4 -4
  541. package/src/components/colors-gradients/style.scss +2 -2
  542. package/src/components/date-format-picker/index.js +0 -1
  543. package/src/components/dimensions-tool/aspect-ratio-tool.js +0 -1
  544. package/src/components/dimensions-tool/scale-tool.js +0 -1
  545. package/src/components/dimensions-tool/width-height-tool.js +0 -2
  546. package/src/components/font-appearance-control/index.js +6 -19
  547. package/src/components/font-family/README.md +0 -9
  548. package/src/components/font-family/index.js +6 -19
  549. package/src/components/font-family/stories/index.story.jsx +1 -2
  550. package/src/components/font-sizes/font-size-picker.js +0 -1
  551. package/src/components/global-styles/border-panel.js +0 -1
  552. package/src/components/global-styles/dimensions-panel.js +0 -3
  553. package/src/components/global-styles/state-control-badges.js +45 -6
  554. package/src/components/global-styles/style.scss +5 -0
  555. package/src/components/global-styles/test/state-control-badges.js +65 -0
  556. package/src/components/global-styles/typography-panel.js +0 -7
  557. package/src/components/height-control/index.js +0 -2
  558. package/src/components/html-element-control/index.js +0 -1
  559. package/src/components/iframe/content.scss +3 -3
  560. package/src/components/image-editor/index.js +22 -0
  561. package/src/components/image-editor/zoom-dropdown.js +0 -1
  562. package/src/components/image-size-control/index.js +0 -4
  563. package/src/components/inner-content/index.js +119 -0
  564. package/src/components/inner-content/test/index.js +81 -0
  565. package/src/components/inserter/hooks/use-block-types-state.js +10 -2
  566. package/src/components/inserter/media-tab/hooks.js +114 -16
  567. package/src/components/inserter/media-tab/media-list.js +2 -0
  568. package/src/components/inserter/media-tab/media-panel.js +354 -19
  569. package/src/components/inserter/media-tab/media-preview.js +34 -17
  570. package/src/components/inserter/media-tab/media-tab.js +20 -2
  571. package/src/components/inserter/media-tab/test/hooks.js +267 -0
  572. package/src/components/inserter/media-tab/test/media-panel.js +127 -0
  573. package/src/components/inserter/mobile-tab-navigation.js +6 -1
  574. package/src/components/inserter/no-results.js +2 -2
  575. package/src/components/inserter/preview-panel.js +1 -0
  576. package/src/components/inserter/style.scss +115 -3
  577. package/src/components/inserter-list-item/index.js +8 -2
  578. package/src/components/inserter-list-item/style.scss +0 -15
  579. package/src/components/keyboard-shortcuts/index.js +28 -11
  580. package/src/components/letter-spacing-control/README.md +0 -8
  581. package/src/components/letter-spacing-control/index.js +5 -23
  582. package/src/components/letter-spacing-control/stories/index.story.jsx +0 -12
  583. package/src/components/line-height-control/README.md +0 -8
  584. package/src/components/line-height-control/index.js +6 -16
  585. package/src/components/line-height-control/stories/index.story.jsx +0 -1
  586. package/src/components/line-height-control/test/index.js +1 -7
  587. package/src/components/link-control/style.scss +2 -2
  588. package/src/components/link-control/test/index.js +6 -6
  589. package/src/components/link-picker/style.scss +1 -2
  590. package/src/components/link-picker/test/index.js +3 -1
  591. package/src/components/list-view/block-select-button.js +5 -1
  592. package/src/components/list-view/block.js +69 -23
  593. package/src/components/list-view/expander.js +5 -1
  594. package/src/components/list-view/style.scss +23 -5
  595. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  596. package/src/components/media-placeholder/index.js +0 -1
  597. package/src/components/multi-selection-inspector/style.scss +1 -1
  598. package/src/components/observe-typing/index.js +9 -4
  599. package/src/components/preset-input-control/custom-value-controls.js +0 -2
  600. package/src/components/preset-input-control/index.js +0 -2
  601. package/src/components/resolution-tool/index.js +0 -1
  602. package/src/components/responsive-block-control/style.scss +1 -1
  603. package/src/components/responsive-block-control/test/index.js +1 -5
  604. package/src/components/rich-text/event-listeners/before-input-rules.js +8 -5
  605. package/src/components/rich-text/event-listeners/delete.js +7 -4
  606. package/src/components/rich-text/event-listeners/enter.js +10 -4
  607. package/src/components/rich-text/event-listeners/input-events.js +4 -3
  608. package/src/components/rich-text/event-listeners/input-rules.js +8 -5
  609. package/src/components/rich-text/event-listeners/insert-replacement-text.js +4 -3
  610. package/src/components/rich-text/event-listeners/paste-handler.js +15 -3
  611. package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +4 -3
  612. package/src/components/rich-text/event-listeners/shortcuts.js +4 -3
  613. package/src/components/rich-text/event-listeners/undo-automatic-change.js +4 -3
  614. package/src/components/rich-text/index.js +94 -25
  615. package/src/components/skip-to-selected-block/style.scss +1 -1
  616. package/src/components/text-alignment-control/index.js +0 -1
  617. package/src/components/text-decoration-control/index.js +0 -1
  618. package/src/components/text-indent-control/index.js +7 -16
  619. package/src/components/text-transform-control/index.js +0 -1
  620. package/src/components/typewriter/index.js +228 -224
  621. package/src/components/use-block-commands/index.js +27 -17
  622. package/src/components/use-block-display-information/index.js +9 -13
  623. package/src/components/use-block-display-information/test/index.js +47 -9
  624. package/src/components/use-on-block-drop/index.js +4 -7
  625. package/src/components/writing-flow/index.js +15 -1
  626. package/src/components/writing-flow/use-arrow-nav.js +39 -12
  627. package/src/components/writing-flow/use-click-selection.js +2 -3
  628. package/src/components/writing-flow/use-clipboard-handler.js +5 -2
  629. package/src/components/writing-flow/use-drag-selection.js +1 -14
  630. package/src/components/writing-flow/use-editable-root.js +182 -0
  631. package/src/components/writing-flow/use-home-end.js +63 -0
  632. package/src/components/writing-flow/use-input.js +25 -8
  633. package/src/components/writing-flow/use-multi-selection.js +2 -3
  634. package/src/components/writing-flow/use-select-all.js +33 -3
  635. package/src/components/writing-flow/use-selection-observer.js +197 -38
  636. package/src/components/writing-flow/utils.js +83 -0
  637. package/src/components/writing-mode-control/index.js +0 -1
  638. package/src/hooks/background.js +7 -9
  639. package/src/hooks/block-fields/link/styles.scss +1 -6
  640. package/src/hooks/block-fields/media/styles.scss +1 -6
  641. package/src/hooks/block-fields/rich-text/index.js +6 -9
  642. package/src/hooks/block-hooks.scss +15 -0
  643. package/src/hooks/elements.js +0 -1
  644. package/src/hooks/font-size.js +0 -1
  645. package/src/hooks/grid-visualizer.js +40 -36
  646. package/src/hooks/layout-child.js +19 -9
  647. package/src/hooks/layout.js +53 -35
  648. package/src/hooks/position.js +44 -23
  649. package/src/hooks/states.js +36 -13
  650. package/src/hooks/style.js +67 -17
  651. package/src/hooks/test/cross-origin-isolation.js +0 -4
  652. package/src/hooks/test/layout.js +75 -1
  653. package/src/hooks/test/style.js +29 -0
  654. package/src/hooks/test/text-align.js +34 -1
  655. package/src/hooks/text-align.js +41 -10
  656. package/src/hooks/typography.js +0 -1
  657. package/src/layouts/constrained.js +56 -29
  658. package/src/layouts/flex.js +5 -4
  659. package/src/layouts/grid.js +59 -9
  660. package/src/layouts/test/constrained.js +91 -0
  661. package/src/layouts/test/grid.js +71 -0
  662. package/src/private-apis.js +4 -0
  663. package/src/store/actions.js +43 -14
  664. package/src/store/private-keys.js +1 -0
  665. package/src/store/private-selectors.js +166 -9
  666. package/src/store/selectors.js +41 -0
  667. package/src/store/test/actions.js +1 -1
  668. package/src/store/test/private-selectors.js +533 -0
  669. package/src/store/test/reducer.js +11 -11
  670. package/src/store/test/selectors.js +133 -0
  671. package/src/style.scss +1 -0
  672. package/src/utils/block-bindings.ts +50 -0
  673. package/src/utils/dom.ts +33 -0
  674. package/src/utils/test/block-bindings.js +181 -0
  675. package/build/components/rich-text/input-event.cjs +0 -50
  676. package/build/components/rich-text/input-event.cjs.map +0 -7
  677. package/build/components/rich-text/shortcut.cjs +0 -51
  678. package/build/components/rich-text/shortcut.cjs.map +0 -7
  679. package/build-module/components/rich-text/input-event.mjs +0 -25
  680. package/build-module/components/rich-text/input-event.mjs.map +0 -7
  681. package/build-module/components/rich-text/shortcut.mjs +0 -26
  682. package/build-module/components/rich-text/shortcut.mjs.map +0 -7
  683. package/src/components/rich-text/input-event.js +0 -31
  684. package/src/components/rich-text/shortcut.js +0 -32
@@ -0,0 +1,267 @@
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( 'omits the default first page from the fetch query', async () => {
82
+ const category = createCategory( 'images', [ { id: 1 } ] );
83
+ renderHook( () =>
84
+ useMediaResults(
85
+ category,
86
+ { per_page: 20, page: 1, search: '' },
87
+ 0
88
+ )
89
+ );
90
+ await waitFor( () =>
91
+ expect( category.fetch ).toHaveBeenCalledWith( {
92
+ per_page: 20,
93
+ search: '',
94
+ } )
95
+ );
96
+ } );
97
+
98
+ it( 'passes `page` to the fetch query when paging past the first page', async () => {
99
+ const category = createCategory( 'images', [ { id: 1 } ] );
100
+ renderHook( () =>
101
+ useMediaResults(
102
+ category,
103
+ { per_page: 20, page: 2, search: '' },
104
+ 0
105
+ )
106
+ );
107
+ await waitFor( () =>
108
+ expect( category.fetch ).toHaveBeenCalledWith( {
109
+ per_page: 20,
110
+ page: 2,
111
+ search: '',
112
+ } )
113
+ );
114
+ } );
115
+
116
+ it( 'leaves paging totals undefined for an array-returning source', async () => {
117
+ const category = createCategory( 'images', [ { id: 1 } ] );
118
+ const { result } = renderHook( () =>
119
+ useMediaResults( category, { search: '' }, 0 )
120
+ );
121
+ await waitFor( () => expect( result.current.isLoading ).toBe( false ) );
122
+ expect( result.current.totalItems ).toBeUndefined();
123
+ expect( result.current.totalPages ).toBeUndefined();
124
+ } );
125
+
126
+ it( 'surfaces paging totals from a source that returns them', async () => {
127
+ const category = {
128
+ name: 'images',
129
+ fetch: jest.fn( async () => ( {
130
+ mediaItems: [ { id: 1 } ],
131
+ totalItems: 42,
132
+ totalPages: 3,
133
+ } ) ),
134
+ };
135
+ const { result } = renderHook( () =>
136
+ useMediaResults( category, { search: '' }, 0 )
137
+ );
138
+ await waitFor( () => expect( result.current.isLoading ).toBe( false ) );
139
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] );
140
+ expect( result.current.totalItems ).toBe( 42 );
141
+ expect( result.current.totalPages ).toBe( 3 );
142
+ } );
143
+
144
+ it( 'clears the previous results when the query changes', async () => {
145
+ const category = createCategory( 'images', [ { id: 1 } ] );
146
+ const { result, rerender } = renderHook(
147
+ ( { query } ) => useMediaResults( category, query, 0 ),
148
+ { initialProps: { query: { search: 'a' } } }
149
+ );
150
+ await waitFor( () =>
151
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] )
152
+ );
153
+
154
+ // Hold the next request open so the intermediate (cleared) state is observable.
155
+ let resolveFetch;
156
+ category.fetch.mockImplementationOnce(
157
+ () =>
158
+ new Promise( ( resolve ) => {
159
+ resolveFetch = resolve;
160
+ } )
161
+ );
162
+ rerender( { query: { search: 'b' } } );
163
+
164
+ // A query change blanks the grid while the new request is in flight.
165
+ await waitFor( () => expect( result.current.mediaList ).toEqual( [] ) );
166
+ await act( async () => {
167
+ resolveFetch( [ { id: 2 } ] );
168
+ } );
169
+ expect( result.current.mediaList ).toEqual( [ { id: 2 } ] );
170
+ } );
171
+
172
+ it( 'keeps the existing results while a refresh (refreshKey bump) refetches', async () => {
173
+ const category = createCategory( 'attached-images', [ { id: 1 } ] );
174
+ const { result, rerender } = renderHook(
175
+ ( { refreshKey } ) =>
176
+ useMediaResults( category, { search: '' }, refreshKey ),
177
+ { initialProps: { refreshKey: 0 } }
178
+ );
179
+ await waitFor( () =>
180
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] )
181
+ );
182
+
183
+ // Hold the refetch open so we can assert the grid is not blanked.
184
+ let resolveFetch;
185
+ category.fetch.mockImplementationOnce(
186
+ () =>
187
+ new Promise( ( resolve ) => {
188
+ resolveFetch = resolve;
189
+ } )
190
+ );
191
+ rerender( { refreshKey: 1 } );
192
+
193
+ // Same query, only `refreshKey` changed: existing items stay put.
194
+ await waitFor( () => expect( result.current.isLoading ).toBe( true ) );
195
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] );
196
+ await act( async () => {
197
+ resolveFetch( [ { id: 2 } ] );
198
+ } );
199
+ expect( result.current.mediaList ).toEqual( [ { id: 2 } ] );
200
+ } );
201
+
202
+ it( 'clears and refetches when the category source changes with the same name and query', async () => {
203
+ const firstCategory = createCategory( 'attached-images', [
204
+ { id: 1 },
205
+ ] );
206
+ const { result, rerender } = renderHook(
207
+ ( { category } ) => useMediaResults( category, { search: '' }, 0 ),
208
+ { initialProps: { category: firstCategory } }
209
+ );
210
+ await waitFor( () =>
211
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] )
212
+ );
213
+
214
+ let resolveFetch;
215
+ const secondCategory = {
216
+ name: 'attached-images',
217
+ fetch: jest.fn(
218
+ () =>
219
+ new Promise( ( resolve ) => {
220
+ resolveFetch = resolve;
221
+ } )
222
+ ),
223
+ };
224
+ rerender( { category: secondCategory } );
225
+
226
+ await waitFor( () =>
227
+ expect( secondCategory.fetch ).toHaveBeenCalledWith( {
228
+ search: '',
229
+ } )
230
+ );
231
+ expect( result.current.mediaList ).toEqual( [] );
232
+ expect( result.current.isLoading ).toBe( true );
233
+
234
+ await act( async () => {
235
+ resolveFetch( [ { id: 2 } ] );
236
+ } );
237
+ expect( result.current.mediaList ).toEqual( [ { id: 2 } ] );
238
+ } );
239
+
240
+ it( 'does not refetch when only the category wrapper changes', async () => {
241
+ const fetch = jest.fn( async () => [ { id: 1 } ] );
242
+ const { result, rerender } = renderHook(
243
+ ( { category } ) => useMediaResults( category, { search: '' }, 0 ),
244
+ {
245
+ initialProps: {
246
+ category: {
247
+ name: 'images',
248
+ fetch,
249
+ },
250
+ },
251
+ }
252
+ );
253
+ await waitFor( () =>
254
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] )
255
+ );
256
+
257
+ rerender( {
258
+ category: {
259
+ name: 'images',
260
+ fetch,
261
+ },
262
+ } );
263
+
264
+ expect( fetch ).toHaveBeenCalledTimes( 1 );
265
+ expect( result.current.mediaList ).toEqual( [ { id: 1 } ] );
266
+ } );
267
+ } );
@@ -0,0 +1,127 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { MediaCategoryPanel } from '../media-panel';
10
+
11
+ // Keep the panel's data + async surface out of the test: return a small,
12
+ // non-empty result set so the grid (and the detach affordance) render.
13
+ jest.mock( '../hooks', () => ( {
14
+ useMediaResults: () => ( {
15
+ mediaList: [
16
+ { id: 1, title: 'Example', url: 'https://example.com/1' },
17
+ ],
18
+ isLoading: false,
19
+ } ),
20
+ useDelayedLoading: () => false,
21
+ } ) );
22
+
23
+ // Replace `MediaList` with a marker that only reports whether it was wired for
24
+ // detach, so the gate can be asserted without the full preview/dropdown tree.
25
+ jest.mock( '../media-list', () => ( {
26
+ __esModule: true,
27
+ default: ( { onDetach } ) => (
28
+ <div
29
+ data-testid="media-list"
30
+ data-has-detach={ String( !! onDetach ) }
31
+ />
32
+ ),
33
+ } ) );
34
+
35
+ // The attach button renders through MediaUpload's render prop behind a
36
+ // capability check; stub both so the real Button (and its label) render.
37
+ jest.mock( '../../../media-upload', () => ( {
38
+ __esModule: true,
39
+ default: ( { render: renderProp } ) => renderProp( { open: () => {} } ),
40
+ } ) );
41
+ jest.mock( '../../../media-upload/check', () => ( {
42
+ __esModule: true,
43
+ default: ( { children } ) => children,
44
+ } ) );
45
+
46
+ const baseCategory = {
47
+ name: 'attached-images',
48
+ labels: { name: 'Attached images', search_items: 'Search attachments' },
49
+ mediaType: 'image',
50
+ fetch: jest.fn(),
51
+ attach: jest.fn(),
52
+ detach: jest.fn(),
53
+ invalidate: jest.fn(),
54
+ };
55
+
56
+ function renderPanel( category ) {
57
+ return render(
58
+ <MediaCategoryPanel
59
+ rootClientId=""
60
+ onInsert={ jest.fn() }
61
+ category={ category }
62
+ />
63
+ );
64
+ }
65
+
66
+ describe( 'MediaCategoryPanel attach/detach gating', () => {
67
+ it( 'exposes attach/detach for the built-in Attachments source', () => {
68
+ renderPanel( baseCategory );
69
+
70
+ expect(
71
+ screen.getByRole( 'button', { name: 'Attach images' } )
72
+ ).toBeInTheDocument();
73
+ expect( screen.getByTestId( 'media-list' ) ).toHaveAttribute(
74
+ 'data-has-detach',
75
+ 'true'
76
+ );
77
+ } );
78
+
79
+ it( 'ignores attach/detach when the source is an external resource', () => {
80
+ // Every category registered by an extender through the public
81
+ // `registerInserterMediaCategory` API is forced to `isExternalResource:
82
+ // true`, so an extender-registered source cannot opt into the workflow
83
+ // even if it sets `attach`/`detach`.
84
+ renderPanel( { ...baseCategory, isExternalResource: true } );
85
+
86
+ expect(
87
+ screen.queryByRole( 'button', { name: 'Attach images' } )
88
+ ).not.toBeInTheDocument();
89
+ expect( screen.getByTestId( 'media-list' ) ).toHaveAttribute(
90
+ 'data-has-detach',
91
+ 'false'
92
+ );
93
+ } );
94
+ } );
95
+
96
+ describe( 'MediaCategoryPanel subscription gating', () => {
97
+ it( 'subscribes a local source to media changes and unsubscribes on unmount', () => {
98
+ const unsubscribe = jest.fn();
99
+ const subscribe = jest.fn( () => unsubscribe );
100
+
101
+ const { unmount } = renderPanel( { ...baseCategory, subscribe } );
102
+
103
+ // The panel hands its own query over, so the source can watch the exact
104
+ // results the grid is showing.
105
+ expect( subscribe ).toHaveBeenCalledTimes( 1 );
106
+ expect( subscribe ).toHaveBeenCalledWith(
107
+ expect.any( Function ),
108
+ expect.objectContaining( { per_page: expect.any( Number ) } )
109
+ );
110
+ expect( unsubscribe ).not.toHaveBeenCalled();
111
+
112
+ unmount();
113
+
114
+ expect( unsubscribe ).toHaveBeenCalledTimes( 1 );
115
+ } );
116
+
117
+ it( 'ignores subscribe when the source is an external resource', () => {
118
+ // `subscribe` is core-only, gated like `attach`/`detach`: an
119
+ // extender-registered source is always external, so it cannot hook into
120
+ // the panel's refresh cycle just by setting the prop.
121
+ const subscribe = jest.fn();
122
+
123
+ renderPanel( { ...baseCategory, subscribe, isExternalResource: true } );
124
+
125
+ expect( subscribe ).not.toHaveBeenCalled();
126
+ } );
127
+ } );
@@ -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.
@@ -163,7 +163,7 @@ $block-inserter-tabs-height: 44px;
163
163
  color: $gray-700;
164
164
  text-transform: uppercase;
165
165
  font-size: 11px;
166
- font-weight: $font-weight-medium;
166
+ font-weight: var(--wpds-typography-font-weight-emphasis);
167
167
  }
168
168
 
169
169
  .block-editor-inserter__panel-dropdown select.components-select-control__input.components-select-control__input.components-select-control__input {
@@ -456,7 +456,7 @@ $block-inserter-tabs-height: 44px;
456
456
  }
457
457
 
458
458
  .components-heading.block-editor-inserter__patterns-category-panel-title {
459
- font-weight: $font-weight-medium;
459
+ font-weight: var(--wpds-typography-font-weight-emphasis);
460
460
  }
461
461
 
462
462
  .block-editor-inserter__patterns-explore-button,
@@ -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,93 @@ $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-footer {
522
+ // Keeps the footer at its natural height rather than collapsing to make
523
+ // room for the scrolling grid above.
524
+ flex-shrink: 0;
525
+ padding-top: $grid-unit-20;
526
+ padding-bottom: $grid-unit-20;
527
+ @include break-medium() {
528
+ // Align with the search field and grid gutters.
529
+ padding-left: $grid-unit-30;
530
+ padding-right: $grid-unit-30;
531
+ }
532
+ }
533
+
534
+ .block-editor-inserter__media-panel-attach {
535
+ // Match the padding (and so the height) of the "Open Media Library"
536
+ // footer button in the adjacent column, so the two line up.
537
+ &.components-button {
538
+ justify-content: center;
539
+ padding: $grid-unit-20;
540
+ }
541
+ }
542
+
543
+ .block-editor-inserter__media-panel-results {
544
+ // Take over the scroll host role the media list had when it was a direct
545
+ // flex child of the panel: grow to fill and constrain height
546
+ // (`min-height: 0` lets the inner list's `overflow-y: auto` engage).
547
+ display: flex;
548
+ flex-direction: column;
549
+ flex-grow: 1;
550
+ min-height: 0;
551
+
552
+ // While an attach/detach refetch is in flight, dim the existing grid (and
553
+ // gently pulse it) rather than clearing it or blocking it with a spinner.
554
+ // Mirrors the DataViews "refreshing" treatment; the delayed `is-loading`
555
+ // class (see `useDelayedLoading`) means quick refetches show nothing.
556
+ &.is-loading .block-editor-inserter__media-list {
557
+ opacity: 0.5;
558
+ pointer-events: none;
559
+
560
+ @media not ( prefers-reduced-motion ) {
561
+ opacity: 1;
562
+ animation: inserter-media-panel-pulse 1s ease-in-out infinite;
563
+ }
564
+ }
565
+ }
566
+
567
+ // When the footer is present it supplies the breathing room beneath the grid,
568
+ // so drop the list's own bottom padding — otherwise scrolling to the end
569
+ // leaves a doubled gap before the footer.
570
+ &.has-footer .block-editor-inserter__media-list {
571
+ padding-bottom: 0;
572
+ }
573
+ }
574
+
575
+ @keyframes inserter-media-panel-pulse {
576
+ 0%,
577
+ 100% {
578
+ opacity: 1;
579
+ }
580
+ 50% {
581
+ opacity: 0.5;
582
+ }
583
+ }
584
+
585
+ .block-editor-inserter__media-panel-detach-modal {
586
+ // Render above the ellipsis dropdown (a `.components-popover`) it opens from,
587
+ // which otherwise stacks over the modal. Matches other dropdown-triggered
588
+ // modals (e.g. block rename).
589
+ z-index: z-index(".block-editor-inserter__media-panel-detach-modal");
590
+
591
+ p {
592
+ margin-top: 0;
593
+ }
594
+ }
595
+
596
+ .block-editor-inserter__media-panel-detach-actions {
597
+ display: flex;
598
+ justify-content: flex-end;
599
+ gap: $grid-unit-10;
600
+ margin-top: $grid-unit-20;
497
601
  }
498
602
 
499
603
  .block-editor-inserter__media-list__list-item {
@@ -513,7 +617,15 @@ $block-inserter-tabs-height: 44px;
513
617
  .block-editor-inserter__media-list__item-preview > * {
514
618
  outline-color: rgba($black, 0.3);
515
619
  }
620
+ }
516
621
 
622
+ // Reveal the per-item options button on hover, and — so keyboard users can
623
+ // reach it — whenever focus is within the item (e.g. its preview is
624
+ // focused). The button is `display: none` by default, which can never
625
+ // receive focus, so without `:focus-within` the detach/report action is
626
+ // unreachable by keyboard.
627
+ &.is-hovered,
628
+ &:focus-within {
517
629
  .block-editor-inserter__media-list__item-preview-options > button {
518
630
  display: block;
519
631
  }
@@ -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 =
@@ -82,21 +82,6 @@
82
82
  pointer-events: none;
83
83
  }
84
84
  }
85
-
86
- &.is-active {
87
- color: $white;
88
- background: $gray-900;
89
-
90
- // Windows High Contrast mode will show this outline, but not the box-shadow.
91
- outline: 2px solid transparent;
92
- outline-offset: -2px;
93
- }
94
- }
95
-
96
- &:not(:disabled) {
97
- &:focus {
98
- box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
99
- }
100
85
  }
101
86
  }
102
87