@wordpress/block-editor 16.0.1-next.v.202607070741.0 → 16.1.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 (679) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/README.md +8 -0
  3. package/build/components/alignment-control/ui.cjs +2 -4
  4. package/build/components/alignment-control/ui.cjs.map +2 -2
  5. package/build/components/background-image-control/index.cjs +40 -10
  6. package/build/components/background-image-control/index.cjs.map +2 -2
  7. package/build/components/block-alignment-control/ui.cjs +5 -3
  8. package/build/components/block-alignment-control/ui.cjs.map +2 -2
  9. package/build/components/block-canvas/index.cjs +6 -1
  10. package/build/components/block-canvas/index.cjs.map +2 -2
  11. package/build/components/block-controls/groups.cjs +3 -1
  12. package/build/components/block-controls/groups.cjs.map +2 -2
  13. package/build/components/block-edit/edit.cjs +10 -18
  14. package/build/components/block-edit/edit.cjs.map +2 -2
  15. package/build/components/block-inspector/index.cjs +73 -46
  16. package/build/components/block-inspector/index.cjs.map +2 -2
  17. package/build/components/block-list/block-html.cjs +4 -1
  18. package/build/components/block-list/block-html.cjs.map +2 -2
  19. package/build/components/block-list/block.cjs +9 -3
  20. package/build/components/block-list/block.cjs.map +3 -3
  21. package/build/components/block-list/index.cjs +1 -3
  22. package/build/components/block-list/index.cjs.map +2 -2
  23. package/build/components/block-list/use-block-props/index.cjs +7 -2
  24. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  25. package/build/components/block-list/use-block-props/use-focus-first-element.cjs +9 -4
  26. package/build/components/block-list/use-block-props/use-focus-first-element.cjs.map +2 -2
  27. package/build/components/block-list/use-block-props/use-focus-handler.cjs +11 -4
  28. package/build/components/block-list/use-block-props/use-focus-handler.cjs.map +2 -2
  29. package/build/components/block-list/use-block-props/use-register-block-event-handlers.cjs +48 -0
  30. package/build/components/block-list/use-block-props/use-register-block-event-handlers.cjs.map +7 -0
  31. package/build/components/block-parent-selector/index.cjs +2 -2
  32. package/build/components/block-parent-selector/index.cjs.map +2 -2
  33. package/build/components/block-toolbar/index.cjs +43 -24
  34. package/build/components/block-toolbar/index.cjs.map +2 -2
  35. package/build/components/block-toolbar/switch-section-style.cjs +4 -2
  36. package/build/components/block-toolbar/switch-section-style.cjs.map +3 -3
  37. package/build/components/block-tools/empty-block-inserter.cjs +2 -7
  38. package/build/components/block-tools/empty-block-inserter.cjs.map +2 -2
  39. package/build/components/block-tools/index.cjs +7 -2
  40. package/build/components/block-tools/index.cjs.map +2 -2
  41. package/build/components/block-vertical-alignment-control/ui.cjs +3 -5
  42. package/build/components/block-vertical-alignment-control/ui.cjs.map +2 -2
  43. package/build/components/block-visibility/modal.cjs +20 -6
  44. package/build/components/block-visibility/modal.cjs.map +2 -2
  45. package/build/components/block-visibility/use-block-visibility.cjs +16 -6
  46. package/build/components/block-visibility/use-block-visibility.cjs.map +3 -3
  47. package/build/components/block-visibility/utils.cjs +15 -2
  48. package/build/components/block-visibility/utils.cjs.map +3 -3
  49. package/build/components/block-visibility/viewport-menu-item.cjs +7 -1
  50. package/build/components/block-visibility/viewport-menu-item.cjs.map +2 -2
  51. package/build/components/block-visibility/viewport-toolbar.cjs +5 -0
  52. package/build/components/block-visibility/viewport-toolbar.cjs.map +2 -2
  53. package/build/components/block-visibility/viewport-visibility-info.cjs +5 -1
  54. package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
  55. package/build/components/border-radius-control/utils.cjs +8 -58
  56. package/build/components/border-radius-control/utils.cjs.map +2 -2
  57. package/build/components/child-layout-control/index.cjs +0 -4
  58. package/build/components/child-layout-control/index.cjs.map +2 -2
  59. package/build/components/colors-gradients/control.cjs +5 -3
  60. package/build/components/colors-gradients/control.cjs.map +2 -2
  61. package/build/components/dimension-control/index.cjs +30 -20
  62. package/build/components/dimension-control/index.cjs.map +3 -3
  63. package/build/components/dimensions-tool/aspect-ratio-tool.cjs +9 -2
  64. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +3 -3
  65. package/build/components/editor-styles/index.cjs +9 -1
  66. package/build/components/editor-styles/index.cjs.map +2 -2
  67. package/build/components/global-styles/background-panel.cjs +66 -25
  68. package/build/components/global-styles/background-panel.cjs.map +3 -3
  69. package/build/components/global-styles/border-panel.cjs +153 -55
  70. package/build/components/global-styles/border-panel.cjs.map +3 -3
  71. package/build/components/global-styles/color-gradient-dropdown-item.cjs +46 -14
  72. package/build/components/global-styles/color-gradient-dropdown-item.cjs.map +3 -3
  73. package/build/components/global-styles/color-panel.cjs +63 -17
  74. package/build/components/global-styles/color-panel.cjs.map +2 -2
  75. package/build/components/global-styles/dimensions-panel.cjs +242 -64
  76. package/build/components/global-styles/dimensions-panel.cjs.map +3 -3
  77. package/build/components/global-styles/filters-panel.cjs +59 -20
  78. package/build/components/global-styles/filters-panel.cjs.map +3 -3
  79. package/build/components/global-styles/hooks.cjs +4 -1
  80. package/build/components/global-styles/hooks.cjs.map +2 -2
  81. package/build/components/global-styles/inheritance/index.cjs +142 -0
  82. package/build/components/global-styles/inheritance/index.cjs.map +7 -0
  83. package/build/components/global-styles/inherited-value-context.cjs +173 -0
  84. package/build/components/global-styles/inherited-value-context.cjs.map +7 -0
  85. package/build/components/global-styles/shadow-panel-components.cjs +38 -20
  86. package/build/components/global-styles/shadow-panel-components.cjs.map +2 -2
  87. package/build/components/global-styles/state-control-badges.cjs +39 -3
  88. package/build/components/global-styles/state-control-badges.cjs.map +2 -2
  89. package/build/components/global-styles/state-control.cjs +1 -1
  90. package/build/components/global-styles/state-control.cjs.map +2 -2
  91. package/build/components/global-styles/typography-panel.cjs +271 -79
  92. package/build/components/global-styles/typography-panel.cjs.map +3 -3
  93. package/build/components/image-size-control/index.cjs +2 -4
  94. package/build/components/image-size-control/index.cjs.map +2 -2
  95. package/build/components/inserter/media-tab/hooks.cjs +33 -6
  96. package/build/components/inserter/media-tab/hooks.cjs.map +2 -2
  97. package/build/components/inserter/media-tab/media-panel.cjs +78 -16
  98. package/build/components/inserter/media-tab/media-panel.cjs.map +3 -3
  99. package/build/components/inspector-controls-tabs/styles-tab.cjs +10 -1
  100. package/build/components/inspector-controls-tabs/styles-tab.cjs.map +2 -2
  101. package/build/components/keyboard-shortcuts/index.cjs +19 -11
  102. package/build/components/keyboard-shortcuts/index.cjs.map +2 -2
  103. package/build/components/line-height-control/index.cjs +1 -2
  104. package/build/components/line-height-control/index.cjs.map +2 -2
  105. package/build/components/link-control/index.cjs +3 -1
  106. package/build/components/link-control/index.cjs.map +2 -2
  107. package/build/components/list-view/block.cjs +13 -4
  108. package/build/components/list-view/block.cjs.map +2 -2
  109. package/build/components/media-placeholder/index.cjs +0 -1
  110. package/build/components/media-placeholder/index.cjs.map +2 -2
  111. package/build/components/preset-input-control/index.cjs +2 -1
  112. package/build/components/preset-input-control/index.cjs.map +2 -2
  113. package/build/components/provider/block-refs-provider.cjs +8 -2
  114. package/build/components/provider/block-refs-provider.cjs.map +2 -2
  115. package/build/components/provider/index.cjs +1 -1
  116. package/build/components/provider/index.cjs.map +2 -2
  117. package/build/components/provider/use-block-sync.cjs +18 -6
  118. package/build/components/provider/use-block-sync.cjs.map +2 -2
  119. package/build/components/provider/use-media-upload-settings.cjs +3 -1
  120. package/build/components/provider/use-media-upload-settings.cjs.map +2 -2
  121. package/build/components/rich-text/event-listeners/before-input-rules.cjs +3 -4
  122. package/build/components/rich-text/event-listeners/before-input-rules.cjs.map +3 -3
  123. package/build/components/rich-text/event-listeners/delete.cjs +2 -3
  124. package/build/components/rich-text/event-listeners/delete.cjs.map +3 -3
  125. package/build/components/rich-text/event-listeners/enter.cjs +3 -2
  126. package/build/components/rich-text/event-listeners/enter.cjs.map +3 -3
  127. package/build/components/rich-text/event-listeners/input-events.cjs +3 -3
  128. package/build/components/rich-text/event-listeners/input-events.cjs.map +3 -3
  129. package/build/components/rich-text/event-listeners/input-rules.cjs +3 -4
  130. package/build/components/rich-text/event-listeners/input-rules.cjs.map +3 -3
  131. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs +3 -3
  132. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs.map +3 -3
  133. package/build/components/rich-text/event-listeners/paste-handler.cjs +2 -1
  134. package/build/components/rich-text/event-listeners/paste-handler.cjs.map +3 -3
  135. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs +3 -3
  136. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs.map +3 -3
  137. package/build/components/rich-text/event-listeners/shortcuts.cjs +3 -3
  138. package/build/components/rich-text/event-listeners/shortcuts.cjs.map +3 -3
  139. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs +3 -3
  140. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs.map +3 -3
  141. package/build/components/rich-text/index.cjs +76 -17
  142. package/build/components/rich-text/index.cjs.map +2 -2
  143. package/build/components/spacing-sizes-control/utils.cjs +6 -19
  144. package/build/components/spacing-sizes-control/utils.cjs.map +2 -2
  145. package/build/components/text-indent-control/index.cjs +8 -2
  146. package/build/components/text-indent-control/index.cjs.map +2 -2
  147. package/build/components/typewriter/index.cjs +129 -136
  148. package/build/components/typewriter/index.cjs.map +3 -3
  149. package/build/components/url-input/index.cjs +303 -344
  150. package/build/components/url-input/index.cjs.map +3 -3
  151. package/build/components/use-block-commands/index.cjs +21 -17
  152. package/build/components/use-block-commands/index.cjs.map +2 -2
  153. package/build/components/use-on-block-drop/index.cjs +1 -1
  154. package/build/components/use-on-block-drop/index.cjs.map +2 -2
  155. package/build/components/writing-flow/index.cjs +14 -1
  156. package/build/components/writing-flow/index.cjs.map +3 -3
  157. package/build/components/writing-flow/use-arrow-nav.cjs +42 -6
  158. package/build/components/writing-flow/use-arrow-nav.cjs.map +2 -2
  159. package/build/components/writing-flow/use-click-selection.cjs +29 -3
  160. package/build/components/writing-flow/use-click-selection.cjs.map +2 -2
  161. package/build/components/writing-flow/use-clipboard-handler.cjs +4 -1
  162. package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
  163. package/build/components/writing-flow/use-drag-selection.cjs +3 -8
  164. package/build/components/writing-flow/use-drag-selection.cjs.map +2 -2
  165. package/build/components/writing-flow/use-editable-root-event-handlers.cjs +179 -0
  166. package/build/components/writing-flow/use-editable-root-event-handlers.cjs.map +7 -0
  167. package/build/components/writing-flow/use-editable-root.cjs +75 -0
  168. package/build/components/writing-flow/use-editable-root.cjs.map +7 -0
  169. package/build/components/writing-flow/use-home-end.cjs +64 -0
  170. package/build/components/writing-flow/use-home-end.cjs.map +7 -0
  171. package/build/components/writing-flow/use-input.cjs +15 -5
  172. package/build/components/writing-flow/use-input.cjs.map +2 -2
  173. package/build/components/writing-flow/use-multi-selection.cjs +2 -2
  174. package/build/components/writing-flow/use-multi-selection.cjs.map +2 -2
  175. package/build/components/writing-flow/use-select-all.cjs +14 -2
  176. package/build/components/writing-flow/use-select-all.cjs.map +2 -2
  177. package/build/components/writing-flow/use-selection-observer.cjs +132 -22
  178. package/build/components/writing-flow/use-selection-observer.cjs.map +3 -3
  179. package/build/components/writing-flow/utils.cjs +28 -2
  180. package/build/components/writing-flow/utils.cjs.map +2 -2
  181. package/build/hooks/background.cjs +14 -10
  182. package/build/hooks/background.cjs.map +2 -2
  183. package/build/hooks/block-fields/rich-text/index.cjs +2 -3
  184. package/build/hooks/block-fields/rich-text/index.cjs.map +3 -3
  185. package/build/hooks/block-style-variation.cjs +4 -45
  186. package/build/hooks/block-style-variation.cjs.map +3 -3
  187. package/build/hooks/border.cjs +19 -4
  188. package/build/hooks/border.cjs.map +2 -2
  189. package/build/hooks/custom-css.cjs +6 -2
  190. package/build/hooks/custom-css.cjs.map +2 -2
  191. package/build/hooks/dimensions.cjs +15 -4
  192. package/build/hooks/dimensions.cjs.map +2 -2
  193. package/build/hooks/duotone.cjs +26 -14
  194. package/build/hooks/duotone.cjs.map +3 -3
  195. package/build/hooks/elements.cjs +15 -5
  196. package/build/hooks/elements.cjs.map +2 -2
  197. package/build/hooks/grid-visualizer.cjs +5 -3
  198. package/build/hooks/grid-visualizer.cjs.map +2 -2
  199. package/build/hooks/layout-child.cjs +22 -12
  200. package/build/hooks/layout-child.cjs.map +3 -3
  201. package/build/hooks/layout.cjs +28 -13
  202. package/build/hooks/layout.cjs.map +3 -3
  203. package/build/hooks/line-height.cjs +1 -2
  204. package/build/hooks/line-height.cjs.map +2 -2
  205. package/build/hooks/states.cjs +27 -7
  206. package/build/hooks/states.cjs.map +3 -3
  207. package/build/hooks/style.cjs +31 -9
  208. package/build/hooks/style.cjs.map +3 -3
  209. package/build/hooks/text-align.cjs +36 -6
  210. package/build/hooks/text-align.cjs.map +3 -3
  211. package/build/hooks/typography.cjs +14 -5
  212. package/build/hooks/typography.cjs.map +2 -2
  213. package/build/layouts/constrained.cjs +14 -6
  214. package/build/layouts/constrained.cjs.map +2 -2
  215. package/build/layouts/flex.cjs +27 -19
  216. package/build/layouts/flex.cjs.map +2 -2
  217. package/build/layouts/grid.cjs +0 -2
  218. package/build/layouts/grid.cjs.map +2 -2
  219. package/build/private-apis.cjs +9 -5
  220. package/build/private-apis.cjs.map +3 -3
  221. package/build/store/actions.cjs +11 -6
  222. package/build/store/actions.cjs.map +2 -2
  223. package/build/store/private-selectors.cjs +41 -3
  224. package/build/store/private-selectors.cjs.map +3 -3
  225. package/build/store/reducer.cjs +6 -6
  226. package/build/store/reducer.cjs.map +2 -2
  227. package/build/store/selectors.cjs +23 -0
  228. package/build/store/selectors.cjs.map +2 -2
  229. package/build/utils/block-bindings.cjs +29 -0
  230. package/build/utils/block-bindings.cjs.map +2 -2
  231. package/build/utils/dom.cjs +14 -0
  232. package/build/utils/dom.cjs.map +2 -2
  233. package/build/{components/rich-text/input-event.cjs → utils/native-undo.cjs} +29 -24
  234. package/build/utils/native-undo.cjs.map +7 -0
  235. package/build-module/components/alignment-control/ui.mjs +2 -4
  236. package/build-module/components/alignment-control/ui.mjs.map +2 -2
  237. package/build-module/components/background-image-control/index.mjs +43 -10
  238. package/build-module/components/background-image-control/index.mjs.map +2 -2
  239. package/build-module/components/block-alignment-control/ui.mjs +5 -3
  240. package/build-module/components/block-alignment-control/ui.mjs.map +2 -2
  241. package/build-module/components/block-canvas/index.mjs +7 -2
  242. package/build-module/components/block-canvas/index.mjs.map +2 -2
  243. package/build-module/components/block-controls/groups.mjs +3 -1
  244. package/build-module/components/block-controls/groups.mjs.map +2 -2
  245. package/build-module/components/block-edit/edit.mjs +11 -18
  246. package/build-module/components/block-edit/edit.mjs.map +2 -2
  247. package/build-module/components/block-inspector/index.mjs +74 -46
  248. package/build-module/components/block-inspector/index.mjs.map +2 -2
  249. package/build-module/components/block-list/block-html.mjs +4 -1
  250. package/build-module/components/block-list/block-html.mjs.map +2 -2
  251. package/build-module/components/block-list/block.mjs +9 -3
  252. package/build-module/components/block-list/block.mjs.map +3 -3
  253. package/build-module/components/block-list/index.mjs +1 -3
  254. package/build-module/components/block-list/index.mjs.map +2 -2
  255. package/build-module/components/block-list/use-block-props/index.mjs +7 -2
  256. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  257. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs +9 -4
  258. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs.map +2 -2
  259. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +11 -4
  260. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs.map +2 -2
  261. package/build-module/components/block-list/use-block-props/use-register-block-event-handlers.mjs +28 -0
  262. package/build-module/components/block-list/use-block-props/use-register-block-event-handlers.mjs.map +7 -0
  263. package/build-module/components/block-parent-selector/index.mjs +2 -2
  264. package/build-module/components/block-parent-selector/index.mjs.map +2 -2
  265. package/build-module/components/block-toolbar/index.mjs +43 -24
  266. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  267. package/build-module/components/block-toolbar/switch-section-style.mjs +4 -2
  268. package/build-module/components/block-toolbar/switch-section-style.mjs.map +2 -2
  269. package/build-module/components/block-tools/empty-block-inserter.mjs +2 -7
  270. package/build-module/components/block-tools/empty-block-inserter.mjs.map +2 -2
  271. package/build-module/components/block-tools/index.mjs +7 -2
  272. package/build-module/components/block-tools/index.mjs.map +2 -2
  273. package/build-module/components/block-vertical-alignment-control/ui.mjs +4 -6
  274. package/build-module/components/block-vertical-alignment-control/ui.mjs.map +2 -2
  275. package/build-module/components/block-visibility/modal.mjs +22 -10
  276. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  277. package/build-module/components/block-visibility/use-block-visibility.mjs +17 -7
  278. package/build-module/components/block-visibility/use-block-visibility.mjs.map +2 -2
  279. package/build-module/components/block-visibility/utils.mjs +18 -3
  280. package/build-module/components/block-visibility/utils.mjs.map +2 -2
  281. package/build-module/components/block-visibility/viewport-menu-item.mjs +7 -1
  282. package/build-module/components/block-visibility/viewport-menu-item.mjs.map +2 -2
  283. package/build-module/components/block-visibility/viewport-toolbar.mjs +5 -0
  284. package/build-module/components/block-visibility/viewport-toolbar.mjs.map +2 -2
  285. package/build-module/components/block-visibility/viewport-visibility-info.mjs +5 -1
  286. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  287. package/build-module/components/border-radius-control/utils.mjs +11 -53
  288. package/build-module/components/border-radius-control/utils.mjs.map +2 -2
  289. package/build-module/components/child-layout-control/index.mjs +0 -4
  290. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  291. package/build-module/components/colors-gradients/control.mjs +5 -3
  292. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  293. package/build-module/components/dimension-control/index.mjs +30 -20
  294. package/build-module/components/dimension-control/index.mjs.map +2 -2
  295. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +10 -6
  296. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  297. package/build-module/components/editor-styles/index.mjs +9 -1
  298. package/build-module/components/editor-styles/index.mjs.map +2 -2
  299. package/build-module/components/global-styles/background-panel.mjs +71 -29
  300. package/build-module/components/global-styles/background-panel.mjs.map +2 -2
  301. package/build-module/components/global-styles/border-panel.mjs +157 -56
  302. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  303. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs +51 -15
  304. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs.map +2 -2
  305. package/build-module/components/global-styles/color-panel.mjs +63 -17
  306. package/build-module/components/global-styles/color-panel.mjs.map +2 -2
  307. package/build-module/components/global-styles/dimensions-panel.mjs +248 -66
  308. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  309. package/build-module/components/global-styles/filters-panel.mjs +64 -21
  310. package/build-module/components/global-styles/filters-panel.mjs.map +2 -2
  311. package/build-module/components/global-styles/hooks.mjs +4 -1
  312. package/build-module/components/global-styles/hooks.mjs.map +2 -2
  313. package/build-module/components/global-styles/inheritance/index.mjs +108 -0
  314. package/build-module/components/global-styles/inheritance/index.mjs.map +7 -0
  315. package/build-module/components/global-styles/inherited-value-context.mjs +141 -0
  316. package/build-module/components/global-styles/inherited-value-context.mjs.map +7 -0
  317. package/build-module/components/global-styles/shadow-panel-components.mjs +38 -20
  318. package/build-module/components/global-styles/shadow-panel-components.mjs.map +2 -2
  319. package/build-module/components/global-styles/state-control-badges.mjs +41 -5
  320. package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
  321. package/build-module/components/global-styles/state-control.mjs +1 -1
  322. package/build-module/components/global-styles/state-control.mjs.map +2 -2
  323. package/build-module/components/global-styles/typography-panel.mjs +276 -80
  324. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  325. package/build-module/components/image-size-control/index.mjs +2 -4
  326. package/build-module/components/image-size-control/index.mjs.map +2 -2
  327. package/build-module/components/inserter/media-tab/hooks.mjs +33 -6
  328. package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
  329. package/build-module/components/inserter/media-tab/media-panel.mjs +86 -18
  330. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  331. package/build-module/components/inspector-controls-tabs/styles-tab.mjs +6 -1
  332. package/build-module/components/inspector-controls-tabs/styles-tab.mjs.map +2 -2
  333. package/build-module/components/keyboard-shortcuts/index.mjs +19 -11
  334. package/build-module/components/keyboard-shortcuts/index.mjs.map +2 -2
  335. package/build-module/components/line-height-control/index.mjs +1 -2
  336. package/build-module/components/line-height-control/index.mjs.map +2 -2
  337. package/build-module/components/link-control/index.mjs +4 -2
  338. package/build-module/components/link-control/index.mjs.map +2 -2
  339. package/build-module/components/list-view/block.mjs +13 -4
  340. package/build-module/components/list-view/block.mjs.map +2 -2
  341. package/build-module/components/media-placeholder/index.mjs +0 -1
  342. package/build-module/components/media-placeholder/index.mjs.map +2 -2
  343. package/build-module/components/preset-input-control/index.mjs +2 -1
  344. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  345. package/build-module/components/provider/block-refs-provider.mjs +8 -2
  346. package/build-module/components/provider/block-refs-provider.mjs.map +2 -2
  347. package/build-module/components/provider/index.mjs +1 -1
  348. package/build-module/components/provider/index.mjs.map +2 -2
  349. package/build-module/components/provider/use-block-sync.mjs +18 -6
  350. package/build-module/components/provider/use-block-sync.mjs.map +2 -2
  351. package/build-module/components/provider/use-media-upload-settings.mjs +3 -1
  352. package/build-module/components/provider/use-media-upload-settings.mjs.map +2 -2
  353. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs +8 -5
  354. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs.map +2 -2
  355. package/build-module/components/rich-text/event-listeners/delete.mjs +7 -4
  356. package/build-module/components/rich-text/event-listeners/delete.mjs.map +2 -2
  357. package/build-module/components/rich-text/event-listeners/enter.mjs +8 -3
  358. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  359. package/build-module/components/rich-text/event-listeners/input-events.mjs +3 -3
  360. package/build-module/components/rich-text/event-listeners/input-events.mjs.map +2 -2
  361. package/build-module/components/rich-text/event-listeners/input-rules.mjs +8 -5
  362. package/build-module/components/rich-text/event-listeners/input-rules.mjs.map +2 -2
  363. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs +3 -3
  364. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs.map +2 -2
  365. package/build-module/components/rich-text/event-listeners/paste-handler.mjs +8 -2
  366. package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
  367. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs +3 -3
  368. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs.map +2 -2
  369. package/build-module/components/rich-text/event-listeners/shortcuts.mjs +3 -3
  370. package/build-module/components/rich-text/event-listeners/shortcuts.mjs.map +2 -2
  371. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs +3 -3
  372. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs.map +2 -2
  373. package/build-module/components/rich-text/index.mjs +79 -14
  374. package/build-module/components/rich-text/index.mjs.map +2 -2
  375. package/build-module/components/spacing-sizes-control/utils.mjs +6 -18
  376. package/build-module/components/spacing-sizes-control/utils.mjs.map +2 -2
  377. package/build-module/components/text-indent-control/index.mjs +8 -2
  378. package/build-module/components/text-indent-control/index.mjs.map +2 -2
  379. package/build-module/components/typewriter/index.mjs +129 -136
  380. package/build-module/components/typewriter/index.mjs.map +2 -2
  381. package/build-module/components/url-input/index.mjs +306 -353
  382. package/build-module/components/url-input/index.mjs.map +2 -2
  383. package/build-module/components/use-block-commands/index.mjs +21 -17
  384. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  385. package/build-module/components/use-on-block-drop/index.mjs +2 -2
  386. package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
  387. package/build-module/components/writing-flow/index.mjs +14 -1
  388. package/build-module/components/writing-flow/index.mjs.map +2 -2
  389. package/build-module/components/writing-flow/use-arrow-nav.mjs +43 -7
  390. package/build-module/components/writing-flow/use-arrow-nav.mjs.map +2 -2
  391. package/build-module/components/writing-flow/use-click-selection.mjs +29 -3
  392. package/build-module/components/writing-flow/use-click-selection.mjs.map +2 -2
  393. package/build-module/components/writing-flow/use-clipboard-handler.mjs +5 -2
  394. package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
  395. package/build-module/components/writing-flow/use-drag-selection.mjs +1 -6
  396. package/build-module/components/writing-flow/use-drag-selection.mjs.map +2 -2
  397. package/build-module/components/writing-flow/use-editable-root-event-handlers.mjs +154 -0
  398. package/build-module/components/writing-flow/use-editable-root-event-handlers.mjs.map +7 -0
  399. package/build-module/components/writing-flow/use-editable-root.mjs +54 -0
  400. package/build-module/components/writing-flow/use-editable-root.mjs.map +7 -0
  401. package/build-module/components/writing-flow/use-home-end.mjs +43 -0
  402. package/build-module/components/writing-flow/use-home-end.mjs.map +7 -0
  403. package/build-module/components/writing-flow/use-input.mjs +15 -5
  404. package/build-module/components/writing-flow/use-input.mjs.map +2 -2
  405. package/build-module/components/writing-flow/use-multi-selection.mjs +2 -2
  406. package/build-module/components/writing-flow/use-multi-selection.mjs.map +2 -2
  407. package/build-module/components/writing-flow/use-select-all.mjs +19 -3
  408. package/build-module/components/writing-flow/use-select-all.mjs.map +2 -2
  409. package/build-module/components/writing-flow/use-selection-observer.mjs +134 -21
  410. package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
  411. package/build-module/components/writing-flow/utils.mjs +26 -1
  412. package/build-module/components/writing-flow/utils.mjs.map +2 -2
  413. package/build-module/hooks/background.mjs +14 -10
  414. package/build-module/hooks/background.mjs.map +2 -2
  415. package/build-module/hooks/block-fields/rich-text/index.mjs +2 -6
  416. package/build-module/hooks/block-fields/rich-text/index.mjs.map +2 -2
  417. package/build-module/hooks/block-style-variation.mjs +8 -44
  418. package/build-module/hooks/block-style-variation.mjs.map +2 -2
  419. package/build-module/hooks/border.mjs +19 -4
  420. package/build-module/hooks/border.mjs.map +2 -2
  421. package/build-module/hooks/custom-css.mjs +7 -3
  422. package/build-module/hooks/custom-css.mjs.map +2 -2
  423. package/build-module/hooks/dimensions.mjs +15 -4
  424. package/build-module/hooks/dimensions.mjs.map +2 -2
  425. package/build-module/hooks/duotone.mjs +20 -9
  426. package/build-module/hooks/duotone.mjs.map +2 -2
  427. package/build-module/hooks/elements.mjs +15 -5
  428. package/build-module/hooks/elements.mjs.map +2 -2
  429. package/build-module/hooks/grid-visualizer.mjs +5 -3
  430. package/build-module/hooks/grid-visualizer.mjs.map +2 -2
  431. package/build-module/hooks/layout-child.mjs +22 -12
  432. package/build-module/hooks/layout-child.mjs.map +2 -2
  433. package/build-module/hooks/layout.mjs +28 -13
  434. package/build-module/hooks/layout.mjs.map +2 -2
  435. package/build-module/hooks/line-height.mjs +1 -2
  436. package/build-module/hooks/line-height.mjs.map +2 -2
  437. package/build-module/hooks/states.mjs +27 -7
  438. package/build-module/hooks/states.mjs.map +2 -2
  439. package/build-module/hooks/style.mjs +40 -11
  440. package/build-module/hooks/style.mjs.map +2 -2
  441. package/build-module/hooks/text-align.mjs +39 -10
  442. package/build-module/hooks/text-align.mjs.map +2 -2
  443. package/build-module/hooks/typography.mjs +14 -5
  444. package/build-module/hooks/typography.mjs.map +2 -2
  445. package/build-module/layouts/constrained.mjs +14 -6
  446. package/build-module/layouts/constrained.mjs.map +2 -2
  447. package/build-module/layouts/flex.mjs +27 -19
  448. package/build-module/layouts/flex.mjs.map +2 -2
  449. package/build-module/layouts/grid.mjs +0 -2
  450. package/build-module/layouts/grid.mjs.map +2 -2
  451. package/build-module/private-apis.mjs +7 -3
  452. package/build-module/private-apis.mjs.map +2 -2
  453. package/build-module/store/actions.mjs +12 -7
  454. package/build-module/store/actions.mjs.map +2 -2
  455. package/build-module/store/private-selectors.mjs +42 -3
  456. package/build-module/store/private-selectors.mjs.map +2 -2
  457. package/build-module/store/reducer.mjs +6 -6
  458. package/build-module/store/reducer.mjs.map +2 -2
  459. package/build-module/store/selectors.mjs +23 -0
  460. package/build-module/store/selectors.mjs.map +2 -2
  461. package/build-module/utils/block-bindings.mjs +28 -0
  462. package/build-module/utils/block-bindings.mjs.map +2 -2
  463. package/build-module/utils/dom.mjs +13 -0
  464. package/build-module/utils/dom.mjs.map +2 -2
  465. package/build-module/utils/native-undo.mjs +29 -0
  466. package/build-module/utils/native-undo.mjs.map +7 -0
  467. package/build-style/content-rtl.css +14 -27
  468. package/build-style/content.css +14 -27
  469. package/build-style/default-editor-styles-rtl.css +1 -1
  470. package/build-style/default-editor-styles.css +1 -1
  471. package/build-style/style-rtl.css +191 -61
  472. package/build-style/style.css +191 -61
  473. package/build-types/components/block-context/index.d.ts +7 -0
  474. package/build-types/components/block-context/index.d.ts.map +1 -1
  475. package/build-types/utils/block-bindings.d.ts +19 -0
  476. package/build-types/utils/block-bindings.d.ts.map +1 -1
  477. package/build-types/utils/dom.d.ts +11 -0
  478. package/build-types/utils/dom.d.ts.map +1 -1
  479. package/build-types/utils/get-px-from-css-unit.d.ts +2 -2
  480. package/build-types/utils/get-px-from-css-unit.d.ts.map +1 -1
  481. package/build-types/utils/pasting.d.ts +1 -1
  482. package/build-types/utils/pasting.d.ts.map +1 -1
  483. package/package.json +43 -44
  484. package/src/components/alignment-control/test/__snapshots__/index.js.snap +1 -1
  485. package/src/components/alignment-control/ui.js +2 -4
  486. package/src/components/background-image-control/index.js +74 -37
  487. package/src/components/background-image-control/style.scss +13 -4
  488. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +3 -3
  489. package/src/components/block-alignment-control/test/index.js +1 -1
  490. package/src/components/block-alignment-control/ui.js +4 -2
  491. package/src/components/block-breadcrumb/test/__snapshots__/index.js.snap +1 -1
  492. package/src/components/block-canvas/index.js +9 -2
  493. package/src/components/block-card/style.scss +1 -1
  494. package/src/components/block-compare/test/__snapshots__/block-view.js.snap +1 -1
  495. package/src/components/block-controls/groups.js +2 -0
  496. package/src/components/block-edit/edit.js +13 -31
  497. package/src/components/block-icon/test/__snapshots__/index.js.snap +1 -1
  498. package/src/components/block-inspector/index.js +60 -31
  499. package/src/components/block-list/block-html.js +5 -0
  500. package/src/components/block-list/block.js +6 -0
  501. package/src/components/block-list/content.scss +1 -11
  502. package/src/components/block-list/index.js +0 -2
  503. package/src/components/block-list/use-block-props/index.js +7 -1
  504. package/src/components/block-list/use-block-props/use-focus-first-element.js +23 -4
  505. package/src/components/block-list/use-block-props/use-focus-handler.js +35 -9
  506. package/src/components/block-list/use-block-props/use-register-block-event-handlers.js +45 -0
  507. package/src/components/block-lock/style.scss +1 -1
  508. package/src/components/block-manager/style.scss +1 -1
  509. package/src/components/block-navigation/style.scss +1 -1
  510. package/src/components/block-parent-selector/index.js +5 -2
  511. package/src/components/block-quick-navigation/style.scss +1 -3
  512. package/src/components/block-styles/style.scss +2 -2
  513. package/src/components/block-toolbar/index.js +41 -18
  514. package/src/components/block-toolbar/switch-section-style.js +5 -2
  515. package/src/components/block-tools/empty-block-inserter.js +3 -7
  516. package/src/components/block-tools/index.js +7 -0
  517. package/src/components/block-types-list/style.scss +0 -1
  518. package/src/components/block-vertical-alignment-control/test/__snapshots__/index.js.snap +3 -3
  519. package/src/components/block-vertical-alignment-control/test/index.js +18 -2
  520. package/src/components/block-vertical-alignment-control/ui.js +3 -5
  521. package/src/components/block-visibility/modal.js +24 -10
  522. package/src/components/block-visibility/style.scss +1 -1
  523. package/src/components/block-visibility/test/use-block-visibility.js +128 -35
  524. package/src/components/block-visibility/test/utils.js +11 -0
  525. package/src/components/block-visibility/use-block-visibility.js +33 -11
  526. package/src/components/block-visibility/utils.js +31 -6
  527. package/src/components/block-visibility/viewport-menu-item.js +10 -1
  528. package/src/components/block-visibility/viewport-toolbar.js +6 -0
  529. package/src/components/block-visibility/viewport-visibility-info.js +5 -1
  530. package/src/components/border-radius-control/test/utils.js +0 -41
  531. package/src/components/border-radius-control/utils.js +16 -107
  532. package/src/components/button-block-appender/content.scss +7 -9
  533. package/src/components/child-layout-control/index.js +0 -4
  534. package/src/components/color-palette/test/__snapshots__/control.js.snap +3 -3
  535. package/src/components/colors-gradients/control.js +6 -3
  536. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +1 -1
  537. package/src/components/dimension-control/index.js +13 -1
  538. package/src/components/dimensions-tool/aspect-ratio-tool.js +13 -6
  539. package/src/components/editor-styles/index.js +16 -1
  540. package/src/components/font-family/stories/index.story.jsx +1 -1
  541. package/src/components/global-styles/background-panel.js +107 -34
  542. package/src/components/global-styles/border-panel.js +219 -48
  543. package/src/components/global-styles/color-gradient-dropdown-item.js +93 -28
  544. package/src/components/global-styles/color-panel.js +92 -11
  545. package/src/components/global-styles/dimensions-panel.js +422 -71
  546. package/src/components/global-styles/filters-panel.js +88 -28
  547. package/src/components/global-styles/hooks.js +8 -1
  548. package/src/components/global-styles/inheritance/index.js +204 -0
  549. package/src/components/global-styles/inheritance/style.scss +184 -0
  550. package/src/components/global-styles/inheritance/test/index.js +281 -0
  551. package/src/components/global-styles/inherited-value-context.js +271 -0
  552. package/src/components/global-styles/shadow-panel-components.js +48 -26
  553. package/src/components/global-styles/state-control-badges.js +45 -6
  554. package/src/components/global-styles/state-control.js +2 -2
  555. package/src/components/global-styles/style.scss +5 -0
  556. package/src/components/global-styles/test/background-panel.js +338 -1
  557. package/src/components/global-styles/test/border-panel.js +441 -0
  558. package/src/components/global-styles/test/color-panel.js +182 -2
  559. package/src/components/global-styles/test/dimensions-panel.js +753 -0
  560. package/src/components/global-styles/test/filters-panel.js +194 -0
  561. package/src/components/global-styles/test/inherited-value-context-core.js +98 -0
  562. package/src/components/global-styles/test/inherited-value-context.js +454 -0
  563. package/src/components/global-styles/test/state-control-badges.js +65 -0
  564. package/src/components/global-styles/test/typography-panel-core.js +185 -0
  565. package/src/components/global-styles/test/typography-panel.js +849 -12
  566. package/src/components/global-styles/typography-panel.js +449 -101
  567. package/src/components/image-editor/style.scss +33 -0
  568. package/src/components/image-size-control/index.js +0 -2
  569. package/src/components/inner-blocks/test/__snapshots__/index.js.snap +1 -1
  570. package/src/components/inserter/media-tab/hooks.js +55 -7
  571. package/src/components/inserter/media-tab/media-panel.js +117 -21
  572. package/src/components/inserter/media-tab/test/hooks.js +63 -0
  573. package/src/components/inserter/media-tab/test/media-panel.js +127 -0
  574. package/src/components/inserter/style.scss +19 -16
  575. package/src/components/inserter-list-item/style.scss +0 -15
  576. package/src/components/inspector-controls-tabs/styles-tab.js +5 -1
  577. package/src/components/keyboard-shortcuts/index.js +28 -11
  578. package/src/components/line-height-control/index.js +1 -2
  579. package/src/components/link-control/index.js +7 -2
  580. package/src/components/link-control/style.scss +2 -2
  581. package/src/components/link-control/test/index.js +6 -6
  582. package/src/components/link-picker/style.scss +1 -2
  583. package/src/components/list-view/block.js +13 -4
  584. package/src/components/list-view/style.scss +4 -5
  585. package/src/components/media-placeholder/index.js +0 -1
  586. package/src/components/multi-selection-inspector/style.scss +1 -1
  587. package/src/components/preset-input-control/index.js +4 -1
  588. package/src/components/provider/block-refs-provider.js +12 -2
  589. package/src/components/provider/index.js +2 -2
  590. package/src/components/provider/use-block-sync.js +18 -6
  591. package/src/components/provider/use-media-upload-settings.js +2 -0
  592. package/src/components/responsive-block-control/style.scss +1 -1
  593. package/src/components/rich-text/event-listeners/before-input-rules.js +8 -5
  594. package/src/components/rich-text/event-listeners/delete.js +7 -4
  595. package/src/components/rich-text/event-listeners/enter.js +10 -4
  596. package/src/components/rich-text/event-listeners/input-events.js +4 -3
  597. package/src/components/rich-text/event-listeners/input-rules.js +8 -5
  598. package/src/components/rich-text/event-listeners/insert-replacement-text.js +4 -3
  599. package/src/components/rich-text/event-listeners/paste-handler.js +15 -3
  600. package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +4 -3
  601. package/src/components/rich-text/event-listeners/shortcuts.js +4 -3
  602. package/src/components/rich-text/event-listeners/undo-automatic-change.js +4 -3
  603. package/src/components/rich-text/index.js +116 -26
  604. package/src/components/skip-to-selected-block/style.scss +1 -1
  605. package/src/components/spacing-sizes-control/test/utils.js +16 -5
  606. package/src/components/spacing-sizes-control/utils.js +11 -28
  607. package/src/components/text-indent-control/index.js +8 -0
  608. package/src/components/typewriter/index.js +228 -224
  609. package/src/components/url-input/index.js +363 -431
  610. package/src/components/url-input/test/index.js +592 -0
  611. package/src/components/use-block-commands/index.js +27 -17
  612. package/src/components/use-on-block-drop/index.js +2 -2
  613. package/src/components/warning/test/__snapshots__/index.js.snap +1 -1
  614. package/src/components/writing-flow/index.js +17 -1
  615. package/src/components/writing-flow/use-arrow-nav.js +90 -13
  616. package/src/components/writing-flow/use-click-selection.js +55 -5
  617. package/src/components/writing-flow/use-clipboard-handler.js +5 -2
  618. package/src/components/writing-flow/use-drag-selection.js +1 -14
  619. package/src/components/writing-flow/use-editable-root-event-handlers.js +266 -0
  620. package/src/components/writing-flow/use-editable-root.js +112 -0
  621. package/src/components/writing-flow/use-home-end.js +71 -0
  622. package/src/components/writing-flow/use-input.js +25 -8
  623. package/src/components/writing-flow/use-multi-selection.js +2 -3
  624. package/src/components/writing-flow/use-select-all.js +33 -3
  625. package/src/components/writing-flow/use-selection-observer.js +218 -42
  626. package/src/components/writing-flow/utils.js +62 -0
  627. package/src/hooks/background.js +27 -24
  628. package/src/hooks/block-fields/link/styles.scss +1 -6
  629. package/src/hooks/block-fields/media/styles.scss +1 -6
  630. package/src/hooks/block-fields/rich-text/index.js +6 -9
  631. package/src/hooks/block-fields/rich-text/styles.scss +1 -1
  632. package/src/hooks/block-style-variation.js +8 -74
  633. package/src/hooks/border.js +19 -4
  634. package/src/hooks/custom-css.js +15 -6
  635. package/src/hooks/dimensions.js +17 -4
  636. package/src/hooks/duotone.js +26 -8
  637. package/src/hooks/elements.js +14 -4
  638. package/src/hooks/grid-visualizer.js +40 -36
  639. package/src/hooks/layout-child.js +19 -9
  640. package/src/hooks/layout.js +48 -31
  641. package/src/hooks/line-height.js +0 -1
  642. package/src/hooks/states.js +38 -9
  643. package/src/hooks/style.js +67 -17
  644. package/src/hooks/test/inherited-value-wiring.js +411 -0
  645. package/src/hooks/test/preset-round-trip.js +456 -0
  646. package/src/hooks/test/style.js +29 -0
  647. package/src/hooks/test/text-align.js +34 -1
  648. package/src/hooks/text-align.js +41 -10
  649. package/src/hooks/typography.js +35 -24
  650. package/src/layouts/constrained.js +5 -1
  651. package/src/layouts/flex.js +5 -1
  652. package/src/layouts/grid.js +0 -2
  653. package/src/private-apis.js +11 -2
  654. package/src/store/actions.js +53 -19
  655. package/src/store/private-selectors.js +82 -6
  656. package/src/store/reducer.js +9 -9
  657. package/src/store/selectors.js +56 -8
  658. package/src/store/test/actions.js +1 -1
  659. package/src/store/test/private-selectors.js +271 -1
  660. package/src/style.scss +2 -0
  661. package/src/utils/block-bindings.ts +50 -0
  662. package/src/utils/dom.ts +33 -0
  663. package/src/utils/native-undo.js +56 -0
  664. package/src/utils/test/block-bindings.js +181 -0
  665. package/build/components/duotone/utils.cjs +0 -87
  666. package/build/components/duotone/utils.cjs.map +0 -7
  667. package/build/components/rich-text/input-event.cjs.map +0 -7
  668. package/build/components/rich-text/shortcut.cjs +0 -51
  669. package/build/components/rich-text/shortcut.cjs.map +0 -7
  670. package/build-module/components/duotone/utils.mjs +0 -59
  671. package/build-module/components/duotone/utils.mjs.map +0 -7
  672. package/build-module/components/rich-text/input-event.mjs +0 -25
  673. package/build-module/components/rich-text/input-event.mjs.map +0 -7
  674. package/build-module/components/rich-text/shortcut.mjs +0 -26
  675. package/build-module/components/rich-text/shortcut.mjs.map +0 -7
  676. package/src/components/duotone/utils.js +0 -90
  677. package/src/components/rich-text/input-event.js +0 -31
  678. package/src/components/rich-text/shortcut.js +0 -32
  679. package/src/hooks/test/get-variation-styles-with-ref-values.js +0 -91
@@ -0,0 +1,33 @@
1
+ // `wp-block-image` class prefixes are used for back compat.
2
+ // This component was previously in the block library package.
3
+ .wp-block-image__crop-area {
4
+ position: relative;
5
+ max-width: 100%;
6
+ width: 100%;
7
+ overflow: hidden;
8
+
9
+ // stylelint-disable selector-class-pattern -- react-easy-crop library class names.
10
+ .reactEasyCrop_Container {
11
+ // The linked Image block has `pointer-events: none` applied. Override it
12
+ // here to enable the crop action.
13
+ pointer-events: auto;
14
+
15
+ // This removes the border from the img within the image cropper so it
16
+ // can be applied to the cropper itself. This then allows the image to be
17
+ // cropped within the visual border providing more accurate editing and
18
+ // smoother UX.
19
+ .reactEasyCrop_Image {
20
+ border: none;
21
+ border-radius: 0; // Prevent's theme.json radius bleeding into cropper.
22
+ }
23
+ }
24
+
25
+ // stylelint-enable selector-class-pattern
26
+ }
27
+
28
+ .wp-block-image__zoom {
29
+ .components-popover__content {
30
+ min-width: 260px;
31
+ overflow: visible !important;
32
+ }
33
+ }
@@ -108,7 +108,6 @@ export default function ImageSizeControl( {
108
108
  onChange={ ( value ) =>
109
109
  updateDimension( 'width', value )
110
110
  }
111
- size="__unstable-large"
112
111
  />
113
112
  <NumberControl
114
113
  label={ __( 'Height' ) }
@@ -117,7 +116,6 @@ export default function ImageSizeControl( {
117
116
  onChange={ ( value ) =>
118
117
  updateDimension( 'height', value )
119
118
  }
120
- size="__unstable-large"
121
119
  />
122
120
  </HStack>
123
121
  <ToggleGroupControl
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`InnerBlocks should force serialize for invalid block with inner blocks 1`] = `
4
4
  "<!-- wp:test-block -->
@@ -12,6 +12,27 @@ import { unlock } from '../../../lock-unlock';
12
12
 
13
13
  /** @typedef {import('../../../store/actions').InserterMediaRequest} InserterMediaRequest */
14
14
  /** @typedef {import('../../../store/actions').InserterMediaItem} InserterMediaItem */
15
+ /** @typedef {import('../../../store/actions').InserterMediaResponse} InserterMediaResponse */
16
+
17
+ /**
18
+ * Normalizes the result of a media category's `fetch`, which may be either a
19
+ * plain array of media items or an `InserterMediaResponse` carrying pagination
20
+ * totals. Sources that don't report totals leave them `undefined`, which is how
21
+ * the panel knows to hide the pager.
22
+ *
23
+ * @param {InserterMediaItem[]|InserterMediaResponse|undefined} result The raw `fetch` result.
24
+ * @return {{ mediaItems: InserterMediaItem[], totalItems: number|undefined, totalPages: number|undefined }} The normalized result.
25
+ */
26
+ function normalizeFetchResult( result ) {
27
+ if ( Array.isArray( result ) ) {
28
+ return { mediaItems: result };
29
+ }
30
+ return {
31
+ mediaItems: result?.mediaItems ?? [],
32
+ totalItems: result?.totalItems,
33
+ totalPages: result?.totalPages,
34
+ };
35
+ }
15
36
 
16
37
  /**
17
38
  * Fetches media items based on the provided category.
@@ -21,10 +42,11 @@ import { unlock } from '../../../lock-unlock';
21
42
  * @param {InserterMediaRequest} query The query args to use for the request.
22
43
  * @param {any} refreshKey Optional value that, when changed, forces
23
44
  * a refetch (e.g. after attaching/detaching).
24
- * @return {InserterMediaItem[]} The media results.
45
+ * @return {{ mediaList: InserterMediaItem[], isLoading: boolean, totalItems: number|undefined, totalPages: number|undefined }} The media results and paging totals.
25
46
  */
26
47
  export function useMediaResults( category, query = {}, refreshKey ) {
27
48
  const [ mediaList, setMediaList ] = useState();
49
+ const [ totals, setTotals ] = useState( {} );
28
50
  const [ isLoading, setIsLoading ] = useState( false );
29
51
  // We need to keep track of the last request made because
30
52
  // multiple request can be fired without knowing the order
@@ -36,6 +58,7 @@ export function useMediaResults( category, query = {}, refreshKey ) {
36
58
  const lastRequestRef = useRef();
37
59
  const lastQueryKeyRef = useRef();
38
60
  const lastFetchRef = useRef();
61
+ const lastSourceRef = useRef();
39
62
  useEffect( () => {
40
63
  ( async () => {
41
64
  const key = JSON.stringify( {
@@ -56,11 +79,30 @@ export function useMediaResults( category, query = {}, refreshKey ) {
56
79
  ) {
57
80
  setMediaList( [] );
58
81
  }
82
+ // Reset paging totals only when the source (category or its `fetch`)
83
+ // changes, so switching to an array-returning source doesn't leave a
84
+ // stale pager showing. A mere page change keeps the previous totals,
85
+ // which is what holds the footer mounted while the next page loads.
86
+ if (
87
+ lastSourceRef.current !== category.name ||
88
+ lastFetchRef.current !== category.fetch
89
+ ) {
90
+ setTotals( {} );
91
+ }
59
92
  lastQueryKeyRef.current = key;
60
93
  lastFetchRef.current = category.fetch;
61
- const _media = await category.fetch?.( query );
94
+ lastSourceRef.current = category.name;
95
+ // Omit the default first page so sources that forward the query to a
96
+ // strict external API don't receive an unexpected `page` arg.
97
+ const { page, ...queryWithoutPage } = query;
98
+ const fetchQuery = page > 1 ? query : queryWithoutPage;
99
+ const { mediaItems, totalItems, totalPages } = normalizeFetchResult(
100
+ await category.fetch?.( fetchQuery )
101
+ );
62
102
  if ( request === lastRequestRef.current ) {
63
- setMediaList( _media );
103
+ // Set together so the grid and the pager never disagree.
104
+ setMediaList( mediaItems );
105
+ setTotals( { totalItems, totalPages } );
64
106
  setIsLoading( false );
65
107
  }
66
108
  } )();
@@ -70,7 +112,12 @@ export function useMediaResults( category, query = {}, refreshKey ) {
70
112
  ...Object.values( query ),
71
113
  refreshKey,
72
114
  ] );
73
- return { mediaList, isLoading };
115
+ return {
116
+ mediaList,
117
+ isLoading,
118
+ totalItems: totals.totalItems,
119
+ totalPages: totals.totalPages,
120
+ };
74
121
  }
75
122
 
76
123
  /**
@@ -144,9 +191,10 @@ export function useMediaCategories( rootClientId ) {
144
191
  }
145
192
  let results = [];
146
193
  try {
147
- results = await category.fetch( {
148
- per_page: 1,
149
- } );
194
+ const { mediaItems } = normalizeFetchResult(
195
+ await category.fetch( { per_page: 1 } )
196
+ );
197
+ results = mediaItems;
150
198
  } catch {
151
199
  // If the request fails, we shallow the error and just don't show
152
200
  // the category, in order to not break the media tab.
@@ -8,10 +8,18 @@ import clsx from 'clsx';
8
8
  */
9
9
  import { Button, Modal, Spinner, SearchControl } from '@wordpress/components';
10
10
  import { __, _n, sprintf } from '@wordpress/i18n';
11
- import { useCallback, useMemo, useState } from '@wordpress/element';
12
- import { useDebouncedInput } from '@wordpress/compose';
11
+ import {
12
+ useCallback,
13
+ useEffect,
14
+ useMemo,
15
+ useRef,
16
+ useState,
17
+ } from '@wordpress/element';
18
+ import { useDebouncedInput, usePrevious } from '@wordpress/compose';
13
19
  import { useDispatch } from '@wordpress/data';
20
+ import { getScrollContainer } from '@wordpress/dom';
14
21
  import { store as noticesStore } from '@wordpress/notices';
22
+ import { Stack } from '@wordpress/ui';
15
23
 
16
24
  /**
17
25
  * Internal dependencies
@@ -21,8 +29,9 @@ import MediaUpload from '../../media-upload';
21
29
  import MediaUploadCheck from '../../media-upload/check';
22
30
  import { useMediaResults, useDelayedLoading } from './hooks';
23
31
  import InserterNoResults from '../no-results';
32
+ import BlockPatternsPaging from '../../block-patterns-paging';
24
33
 
25
- const INITIAL_MEDIA_ITEMS_PER_PAGE = 10;
34
+ const MEDIA_ITEMS_PER_PAGE = 20;
26
35
 
27
36
  // The attach flow is image-only, so the picker is constrained to images.
28
37
  const ATTACH_ALLOWED_TYPES = [ 'image' ];
@@ -68,21 +77,74 @@ function AttachImagesButton( { onSelect } ) {
68
77
 
69
78
  export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
70
79
  const [ search, setSearch, debouncedSearch ] = useDebouncedInput();
80
+ const [ page, setPage ] = useState( 1 );
81
+ // The desktop panel persists across category switches (it's driven by the
82
+ // selected category, not remounted), so reset paging whenever the source
83
+ // category or the search term changes. Adjusting state during render (rather
84
+ // than in an effect) keeps the query on page 1 for the very next fetch,
85
+ // avoiding a wasted request for the previous page. Mirrors `usePatternsPaging`.
86
+ const previousCategory = usePrevious( category.name );
87
+ const previousSearch = usePrevious( debouncedSearch );
88
+ if (
89
+ ( previousCategory !== category.name ||
90
+ previousSearch !== debouncedSearch ) &&
91
+ page !== 1
92
+ ) {
93
+ setPage( 1 );
94
+ }
71
95
  const query = useMemo(
72
96
  () => ( {
73
- per_page: !! debouncedSearch ? 20 : INITIAL_MEDIA_ITEMS_PER_PAGE,
97
+ per_page: MEDIA_ITEMS_PER_PAGE,
98
+ page,
74
99
  search: debouncedSearch,
75
100
  } ),
76
- [ debouncedSearch ]
101
+ [ page, debouncedSearch ]
77
102
  );
78
103
  const [ refreshKey, setRefreshKey ] = useState( 0 );
79
- const { mediaList, isLoading } = useMediaResults(
104
+ const { mediaList, isLoading, totalItems, totalPages } = useMediaResults(
80
105
  category,
81
106
  query,
82
107
  refreshKey
83
108
  );
109
+ const numPages = totalPages || 1;
110
+ // If the current set shrinks below the active page (e.g. detaching images
111
+ // empties the last page), clamp back into range so the grid isn't left blank
112
+ // on a page that no longer exists.
113
+ if ( typeof totalPages === 'number' && page > numPages ) {
114
+ setPage( numPages );
115
+ }
116
+ // Private to core's media categories, these capabilities act on WordPress
117
+ // attachments:
118
+ // - `attach`/`detach`/`invalidate` manage the images attached to this post.
119
+ // - `subscribe` watches the attachment cache backing them.
120
+ // An external resource can never own a post's attachments, and every category
121
+ // registered by an extender through the public `registerInserterMediaCategory`
122
+ // API is flagged as one — so this guard stops such a category from opting into
123
+ // the workflow just by setting these props.
124
+ const supportsAttachments = ! category.isExternalResource;
125
+ const attach = supportsAttachments ? category.attach : undefined;
126
+ const detach = supportsAttachments ? category.detach : undefined;
127
+ const subscribe = supportsAttachments ? category.subscribe : undefined;
128
+
129
+ // Only show the pager for multi-page sources. Gating on the page count (not
130
+ // `mediaList.length`) keeps the footer mounted while paging, since the count
131
+ // persists across the fetch. It also skips the shared component's stray
132
+ // single-page item count, which reads oddly here.
133
+ const showPagination = numPages > 1;
134
+ // The footer holds the pager and/or the attach button; it exists when either
135
+ // is present so it can own their shared top/horizontal breathing room.
136
+ const hasFooter = showPagination || !! attach;
137
+ const scrollContainerRef = useRef();
138
+ const changePage = useCallback( ( nextPage ) => {
139
+ const scrollContainer = getScrollContainer(
140
+ scrollContainerRef.current
141
+ );
142
+ scrollContainer?.scrollTo( 0, 0 );
143
+ setPage( nextPage );
144
+ }, [] );
84
145
  const { createErrorNotice, createSuccessNotice, createWarningNotice } =
85
146
  useDispatch( noticesStore );
147
+
86
148
  // Dim (rather than blank) the populated grid while a refetch is in flight,
87
149
  // but only once it has run long enough to be worth signalling — quick
88
150
  // attach/detach refetches resolve before this and show nothing.
@@ -91,14 +153,27 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
91
153
  // Invalidate the cached results and force `useMediaResults` to refetch so
92
154
  // the grid reflects images that were just attached or detached.
93
155
  const refresh = useCallback( () => {
94
- category.invalidate?.( query );
156
+ if ( supportsAttachments ) {
157
+ category.invalidate?.( query );
158
+ }
95
159
  setRefreshKey( ( key ) => key + 1 );
96
- }, [ category, query ] );
160
+ }, [ category, query, supportsAttachments ] );
161
+
162
+ // A media modal opened anywhere in the editor (a canvas block, the featured
163
+ // image panel, the "Attach images" button) attaches its uploads to the current
164
+ // post, and invalidates the cached attachment queries when it closes. Refetch
165
+ // so the grid reflects the newly attached images.
166
+ useEffect( () => {
167
+ if ( ! subscribe ) {
168
+ return;
169
+ }
170
+ return subscribe( () => setRefreshKey( ( key ) => key + 1 ), query );
171
+ }, [ subscribe, query ] );
97
172
 
98
173
  const handleAttach = useCallback(
99
174
  async ( selectedMedia ) => {
100
175
  try {
101
- const attachedCount = await category.attach( selectedMedia );
176
+ const attachedCount = await attach( selectedMedia );
102
177
 
103
178
  if ( ! attachedCount ) {
104
179
  // This source only attaches images (the picker's "Upload
@@ -143,6 +218,7 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
143
218
  }
144
219
  },
145
220
  [
221
+ attach,
146
222
  category,
147
223
  refresh,
148
224
  createErrorNotice,
@@ -154,7 +230,7 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
154
230
  const handleDetach = useCallback(
155
231
  async ( media ) => {
156
232
  try {
157
- await category.detach( media );
233
+ await detach( media );
158
234
  refresh();
159
235
  createSuccessNotice(
160
236
  category.postTypeLabel
@@ -173,7 +249,7 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
173
249
  } );
174
250
  }
175
251
  },
176
- [ category, refresh, createErrorNotice, createSuccessNotice ]
252
+ [ detach, category, refresh, createErrorNotice, createSuccessNotice ]
177
253
  );
178
254
 
179
255
  // Detaching is confirmed first: the dropdown sets the pending item, which
@@ -189,10 +265,11 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
189
265
  const searchLabel = category.labels.search_items || __( 'Search' );
190
266
  return (
191
267
  <div
268
+ ref={ scrollContainerRef }
192
269
  className={ clsx( baseCssClass, {
193
- // The attach footer supplies the breathing room beneath the
194
- // grid, so the list drops its own bottom padding (see styles).
195
- 'has-attach-footer': !! category.attach,
270
+ // The footer supplies the breathing room beneath the grid, so the
271
+ // list drops its own bottom padding (see styles).
272
+ 'has-footer': hasFooter,
196
273
  } ) }
197
274
  >
198
275
  <SearchControl
@@ -231,18 +308,37 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
231
308
  <MediaList
232
309
  rootClientId={ rootClientId }
233
310
  onClick={ onInsert }
234
- onDetach={
235
- category.detach ? setMediaPendingDetach : undefined
236
- }
311
+ onDetach={ detach ? setMediaPendingDetach : undefined }
237
312
  mediaList={ mediaList }
238
313
  category={ category }
239
314
  />
240
315
  </div>
241
316
  ) }
242
- { category.attach && (
243
- // Pinned to the bottom of the panel as a fixed footer so it lines
244
- // up with the "Open Media Library" button in the adjacent column.
245
- <AttachImagesButton onSelect={ handleAttach } />
317
+ { hasFooter && (
318
+ // A single footer wrapper owns the top and horizontal breathing
319
+ // room, so the pager and attach button don't span the full width
320
+ // and sit clear of the grid above (see styles).
321
+ <Stack
322
+ direction="column"
323
+ gap="sm"
324
+ className={ `${ baseCssClass }-footer` }
325
+ >
326
+ { showPagination && (
327
+ // Reuse the Patterns tab pager (presentational only); only
328
+ // rendered for multi-page sources (see `showPagination`).
329
+ <BlockPatternsPaging
330
+ currentPage={ page }
331
+ numPages={ numPages }
332
+ changePage={ changePage }
333
+ totalItems={ totalItems }
334
+ />
335
+ ) }
336
+ { attach && (
337
+ // Lines up with the "Open Media Library" button in the
338
+ // adjacent column.
339
+ <AttachImagesButton onSelect={ handleAttach } />
340
+ ) }
341
+ </Stack>
246
342
  ) }
247
343
  { mediaPendingDetach && (
248
344
  // A plain `Modal` (not `ConfirmDialog`) so we can pass
@@ -78,6 +78,69 @@ describe( 'useMediaResults', () => {
78
78
  expect( result.current.mediaList ).toEqual( [ { id: 1 } ] );
79
79
  } );
80
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
+
81
144
  it( 'clears the previous results when the query changes', async () => {
82
145
  const category = createCategory( 'images', [ { id: 1 } ] );
83
146
  const { result, rerender } = renderHook(
@@ -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
+ } );
@@ -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,
@@ -518,6 +518,19 @@ $block-inserter-tabs-height: 44px;
518
518
  flex-grow: 1;
519
519
  }
520
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
+
521
534
  .block-editor-inserter__media-panel-attach {
522
535
  // Match the padding (and so the height) of the "Open Media Library"
523
536
  // footer button in the adjacent column, so the two line up.
@@ -525,16 +538,6 @@ $block-inserter-tabs-height: 44px;
525
538
  justify-content: center;
526
539
  padding: $grid-unit-20;
527
540
  }
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
541
  }
539
542
 
540
543
  .block-editor-inserter__media-panel-results {
@@ -561,10 +564,10 @@ $block-inserter-tabs-height: 44px;
561
564
  }
562
565
  }
563
566
 
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 {
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 {
568
571
  padding-bottom: 0;
569
572
  }
570
573
  }
@@ -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