@wordpress/block-editor 17.0.2-next.v.202608281122.0 → 17.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 (382) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/build/components/background-image-control/index.cjs +18 -1
  3. package/build/components/background-image-control/index.cjs.map +2 -2
  4. package/build/components/block-allowed-blocks/modal.cjs +2 -1
  5. package/build/components/block-allowed-blocks/modal.cjs.map +3 -3
  6. package/build/components/block-edit/edit.cjs.map +1 -1
  7. package/build/components/block-inspector/index.cjs +3 -12
  8. package/build/components/block-inspector/index.cjs.map +2 -2
  9. package/build/components/block-list/use-block-props/use-is-hovered.cjs +17 -4
  10. package/build/components/block-list/use-block-props/use-is-hovered.cjs.map +2 -2
  11. package/build/components/block-preview/index.cjs +1 -2
  12. package/build/components/block-preview/index.cjs.map +2 -2
  13. package/build/components/block-switcher/index.cjs +2 -1
  14. package/build/components/block-switcher/index.cjs.map +3 -3
  15. package/build/components/block-toolbar/pattern-overrides-dropdown.cjs +2 -1
  16. package/build/components/block-toolbar/pattern-overrides-dropdown.cjs.map +3 -3
  17. package/build/components/global-styles/border-panel.cjs +19 -42
  18. package/build/components/global-styles/border-panel.cjs.map +2 -2
  19. package/build/components/global-styles/image-settings-panel.cjs.map +1 -1
  20. package/build/components/iframe/index.cjs.map +1 -1
  21. package/build/components/inserter/hooks/use-patterns-paging.cjs.map +1 -1
  22. package/build/components/inserter-draggable-blocks/index.cjs.map +1 -1
  23. package/build/components/inspector-controls-tabs/content-tab.cjs +2 -3
  24. package/build/components/inspector-controls-tabs/content-tab.cjs.map +2 -2
  25. package/build/components/inspector-controls-tabs/styles-tab.cjs +1 -3
  26. package/build/components/inspector-controls-tabs/styles-tab.cjs.map +2 -2
  27. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.cjs +1 -2
  28. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.cjs.map +2 -2
  29. package/build/components/inspector-popover-header/index.cjs +5 -4
  30. package/build/components/inspector-popover-header/index.cjs.map +3 -3
  31. package/build/components/link-control/index.cjs.map +2 -2
  32. package/build/components/link-control/search-input.cjs.map +1 -1
  33. package/build/components/list-view/block-select-button.cjs +9 -1
  34. package/build/components/list-view/block-select-button.cjs.map +2 -2
  35. package/build/components/list-view/block.cjs +2 -1
  36. package/build/components/list-view/block.cjs.map +2 -2
  37. package/build/components/list-view/use-list-view-drop-zone.cjs.map +1 -1
  38. package/build/components/media-replace-flow/index.cjs +4 -1
  39. package/build/components/media-replace-flow/index.cjs.map +2 -2
  40. package/build/components/navigable-toolbar/index.cjs +3 -0
  41. package/build/components/navigable-toolbar/index.cjs.map +2 -2
  42. package/build/components/rich-text/event-listeners/enter.cjs +23 -11
  43. package/build/components/rich-text/event-listeners/enter.cjs.map +2 -2
  44. package/build/components/rich-text/event-listeners/index.cjs +0 -2
  45. package/build/components/rich-text/event-listeners/index.cjs.map +3 -3
  46. package/build/components/rich-text/event-listeners/input-rules.cjs +4 -2
  47. package/build/components/rich-text/event-listeners/input-rules.cjs.map +2 -2
  48. package/build/components/use-block-drop-zone/index.cjs.map +1 -1
  49. package/build/components/writing-flow/index.cjs +5 -0
  50. package/build/components/writing-flow/index.cjs.map +3 -3
  51. package/build/components/writing-flow/use-arrow-nav.cjs.map +1 -1
  52. package/build/components/writing-flow/use-input.cjs +12 -2
  53. package/build/components/writing-flow/use-input.cjs.map +2 -2
  54. package/build/components/writing-flow/use-tab-nav.cjs +84 -41
  55. package/build/components/writing-flow/use-tab-nav.cjs.map +3 -3
  56. package/build/components/{rich-text/event-listeners/undo-automatic-change.cjs → writing-flow/use-undo-automatic-change.cjs} +18 -15
  57. package/build/components/writing-flow/use-undo-automatic-change.cjs.map +7 -0
  58. package/build/hooks/border.cjs +2 -46
  59. package/build/hooks/border.cjs.map +2 -2
  60. package/build/hooks/generate-fields-from-attributes.cjs.map +1 -1
  61. package/build/hooks/index.cjs +0 -2
  62. package/build/hooks/index.cjs.map +3 -3
  63. package/build/hooks/style.cjs +2 -2
  64. package/build/hooks/style.cjs.map +2 -2
  65. package/build/layouts/flex.cjs +3 -0
  66. package/build/layouts/flex.cjs.map +2 -2
  67. package/build/store/actions.cjs +12 -9
  68. package/build/store/actions.cjs.map +3 -3
  69. package/build-module/components/background-image-control/index.mjs +18 -1
  70. package/build-module/components/background-image-control/index.mjs.map +2 -2
  71. package/build-module/components/block-allowed-blocks/modal.mjs +2 -2
  72. package/build-module/components/block-allowed-blocks/modal.mjs.map +2 -2
  73. package/build-module/components/block-edit/edit.mjs.map +1 -1
  74. package/build-module/components/block-inspector/index.mjs +3 -12
  75. package/build-module/components/block-inspector/index.mjs.map +2 -2
  76. package/build-module/components/block-list/use-block-props/use-is-hovered.mjs +17 -4
  77. package/build-module/components/block-list/use-block-props/use-is-hovered.mjs.map +2 -2
  78. package/build-module/components/block-preview/index.mjs +1 -2
  79. package/build-module/components/block-preview/index.mjs.map +2 -2
  80. package/build-module/components/block-switcher/index.mjs +2 -2
  81. package/build-module/components/block-switcher/index.mjs.map +2 -2
  82. package/build-module/components/block-toolbar/pattern-overrides-dropdown.mjs +3 -6
  83. package/build-module/components/block-toolbar/pattern-overrides-dropdown.mjs.map +2 -2
  84. package/build-module/components/global-styles/border-panel.mjs +19 -42
  85. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  86. package/build-module/components/global-styles/image-settings-panel.mjs.map +1 -1
  87. package/build-module/components/iframe/index.mjs.map +1 -1
  88. package/build-module/components/inserter/hooks/use-patterns-paging.mjs.map +1 -1
  89. package/build-module/components/inserter-draggable-blocks/index.mjs.map +1 -1
  90. package/build-module/components/inspector-controls-tabs/content-tab.mjs +3 -4
  91. package/build-module/components/inspector-controls-tabs/content-tab.mjs.map +2 -2
  92. package/build-module/components/inspector-controls-tabs/styles-tab.mjs +1 -3
  93. package/build-module/components/inspector-controls-tabs/styles-tab.mjs.map +2 -2
  94. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.mjs +1 -2
  95. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.mjs.map +2 -2
  96. package/build-module/components/inspector-popover-header/index.mjs +6 -7
  97. package/build-module/components/inspector-popover-header/index.mjs.map +2 -2
  98. package/build-module/components/link-control/index.mjs.map +2 -2
  99. package/build-module/components/link-control/search-input.mjs.map +1 -1
  100. package/build-module/components/list-view/block-select-button.mjs +9 -1
  101. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  102. package/build-module/components/list-view/block.mjs +2 -1
  103. package/build-module/components/list-view/block.mjs.map +2 -2
  104. package/build-module/components/list-view/use-list-view-drop-zone.mjs.map +1 -1
  105. package/build-module/components/media-replace-flow/index.mjs +4 -1
  106. package/build-module/components/media-replace-flow/index.mjs.map +2 -2
  107. package/build-module/components/navigable-toolbar/index.mjs +3 -0
  108. package/build-module/components/navigable-toolbar/index.mjs.map +2 -2
  109. package/build-module/components/rich-text/event-listeners/enter.mjs +23 -11
  110. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  111. package/build-module/components/rich-text/event-listeners/index.mjs +0 -2
  112. package/build-module/components/rich-text/event-listeners/index.mjs.map +2 -2
  113. package/build-module/components/rich-text/event-listeners/input-rules.mjs +4 -2
  114. package/build-module/components/rich-text/event-listeners/input-rules.mjs.map +2 -2
  115. package/build-module/components/use-block-drop-zone/index.mjs.map +1 -1
  116. package/build-module/components/writing-flow/index.mjs +5 -0
  117. package/build-module/components/writing-flow/index.mjs.map +2 -2
  118. package/build-module/components/writing-flow/use-arrow-nav.mjs.map +1 -1
  119. package/build-module/components/writing-flow/use-input.mjs +12 -2
  120. package/build-module/components/writing-flow/use-input.mjs.map +2 -2
  121. package/build-module/components/writing-flow/use-tab-nav.mjs +86 -43
  122. package/build-module/components/writing-flow/use-tab-nav.mjs.map +3 -3
  123. package/build-module/components/writing-flow/use-undo-automatic-change.mjs +36 -0
  124. package/build-module/components/writing-flow/use-undo-automatic-change.mjs.map +7 -0
  125. package/build-module/hooks/border.mjs +1 -45
  126. package/build-module/hooks/border.mjs.map +2 -2
  127. package/build-module/hooks/generate-fields-from-attributes.mjs.map +1 -1
  128. package/build-module/hooks/index.mjs +0 -2
  129. package/build-module/hooks/index.mjs.map +2 -2
  130. package/build-module/hooks/style.mjs +3 -2
  131. package/build-module/hooks/style.mjs.map +2 -2
  132. package/build-module/layouts/flex.mjs +3 -0
  133. package/build-module/layouts/flex.mjs.map +2 -2
  134. package/build-module/store/actions.mjs +12 -9
  135. package/build-module/store/actions.mjs.map +2 -2
  136. package/build-style/content-rtl.css +9 -20
  137. package/build-style/content.css +9 -20
  138. package/build-style/style-rtl.css +100 -221
  139. package/build-style/style.css +100 -221
  140. package/package.json +42 -41
  141. package/src/autocompleters/test/block.js +1 -0
  142. package/src/components/alignment-control/test/__snapshots__/{index.jsx.snap → index.jsdom.test.jsx.snap} +34 -16
  143. package/src/components/alignment-control/test/{index.jsx → index.jsdom.test.jsx} +2 -1
  144. package/src/components/background-image-control/index.jsx +32 -1
  145. package/src/components/background-image-control/style.scss +5 -3
  146. package/src/components/background-image-control/test/{index.js → index.jsdom.test.js} +1 -0
  147. package/src/components/block-alignment-control/test/__snapshots__/{index.jsx.snap → index.jsdom.test.jsx.snap} +68 -13
  148. package/src/components/block-alignment-control/test/{index.jsx → index.jsdom.test.jsx} +2 -1
  149. package/src/components/block-allowed-blocks/modal.jsx +3 -3
  150. package/src/components/block-bindings/test/{use-block-bindings-utils.js → use-block-bindings-utils.jsdom.test.js} +2 -1
  151. package/src/components/block-breadcrumb/test/__snapshots__/{index.jsx.snap → index.jsdom.test.jsx.snap} +2 -2
  152. package/src/components/block-breadcrumb/test/{index.jsx → index.jsdom.test.jsx} +1 -0
  153. package/src/components/block-compare/test/__snapshots__/{block-view.jsx.snap → block-view.jsdom.test.jsx.snap} +2 -2
  154. package/src/components/block-compare/test/{block-view.jsx → block-view.jsdom.test.jsx} +1 -0
  155. package/src/components/block-controls/test/{index.jsx → index.jsdom.test.jsx} +1 -0
  156. package/src/components/block-edit/edit.jsx +1 -1
  157. package/src/components/block-edit/test/{edit.jsx → edit.jsdom.test.jsx} +1 -0
  158. package/src/components/block-icon/content.scss +0 -6
  159. package/src/components/block-icon/style.scss +0 -6
  160. package/src/components/block-icon/test/__snapshots__/{index.jsx.snap → index.jsdom.test.jsx.snap} +6 -2
  161. package/src/components/block-inspector/index.jsx +3 -11
  162. package/src/components/block-list/content.scss +4 -1
  163. package/src/components/block-list/use-block-props/use-is-hovered.js +24 -5
  164. package/src/components/block-manager/style.scss +2 -0
  165. package/src/components/block-mover/test/mover-description.js +1 -0
  166. package/src/components/block-preview/index.jsx +1 -2
  167. package/src/components/block-preview/test/{index.jsx → index.jsdom.test.jsx} +10 -6
  168. package/src/components/block-selection-clearer/test/{index.jsx → index.jsdom.test.jsx} +24 -19
  169. package/src/components/block-settings-menu/test/{block-mode-toggle.jsx → block-mode-toggle.jsdom.test.jsx} +5 -1
  170. package/src/components/block-styles/test/utils.js +1 -0
  171. package/src/components/block-switcher/index.jsx +3 -3
  172. package/src/components/block-switcher/test/{index.jsx → index.jsdom.test.jsx} +8 -4
  173. package/src/components/block-switcher/test/use-transformed.patterns.js +1 -0
  174. package/src/components/block-switcher/test/utils.js +1 -0
  175. package/src/components/block-title/test/{index.jsx → index.jsdom.test.jsx} +7 -3
  176. package/src/components/block-toolbar/pattern-overrides-dropdown.jsx +3 -6
  177. package/src/components/block-toolbar/style.scss +1 -1
  178. package/src/components/block-toolbar/test/{block-toolbar-icon.jsx → block-toolbar-icon.jsdom.test.jsx} +25 -21
  179. package/src/components/block-variation-picker/content.scss +5 -3
  180. package/src/components/block-vertical-alignment-control/test/__snapshots__/{index.jsx.snap → index.jsdom.test.jsx.snap} +55 -11
  181. package/src/components/block-vertical-alignment-control/test/{index.jsx → index.jsdom.test.jsx} +2 -1
  182. package/src/components/block-visibility/test/{use-block-visibility.js → use-block-visibility.jsdom.test.js} +6 -5
  183. package/src/components/block-visibility/test/utils.js +2 -1
  184. package/src/components/border-radius-control/test/{index.jsx → index.jsdom.test.jsx} +8 -1
  185. package/src/components/border-radius-control/test/utils.js +1 -0
  186. package/src/components/button-block-appender/content.scss +1 -1
  187. package/src/components/child-layout-control/test/{index.jsx → index.jsdom.test.jsx} +18 -15
  188. package/src/components/color-palette/test/{control.jsx → control.jsdom.test.jsx} +15 -4
  189. package/src/components/colors/test/utils.js +1 -0
  190. package/src/components/colors/test/{with-colors.jsx → with-colors.jsdom.test.jsx} +4 -3
  191. package/src/components/colors-gradients/test/{control.jsx → control.jsdom.test.jsx} +8 -3
  192. package/src/components/contrast-checker/test/{index.jsx → index.jsdom.test.jsx} +2 -1
  193. package/src/components/default-block-appender/test/__snapshots__/{index.jsx.snap → index.jsdom.test.jsx.snap} +4 -4
  194. package/src/components/default-block-appender/test/{index.jsx → index.jsdom.test.jsx} +8 -7
  195. package/src/components/dimensions-tool/test/{index.jsx → index.jsdom.test.jsx} +27 -22
  196. package/src/components/dimensions-tool/test/utils.js +1 -0
  197. package/src/components/duotone-control/test/{index.jsx → index.jsdom.test.jsx} +6 -3
  198. package/src/components/font-sizes/test/fluid-utils.js +1 -0
  199. package/src/components/font-sizes/test/utils.js +1 -0
  200. package/src/components/global-styles/border-panel.jsx +17 -40
  201. package/src/components/global-styles/image-settings-panel.jsx +1 -1
  202. package/src/components/global-styles/inheritance/test/{index.jsx → index.jsdom.test.jsx} +5 -2
  203. package/src/components/global-styles/test/{background-panel.jsx → background-panel.jsdom.test.jsx} +10 -5
  204. package/src/components/global-styles/test/{border-panel.jsx → border-panel.jsdom.test.jsx} +113 -13
  205. package/src/components/global-styles/test/{color-panel.jsx → color-panel.jsdom.test.jsx} +5 -0
  206. package/src/components/global-styles/test/{dimensions-panel.jsx → dimensions-panel.jsdom.test.jsx} +14 -14
  207. package/src/components/global-styles/test/{filters-panel.jsx → filters-panel.jsdom.test.jsx} +7 -4
  208. package/src/components/global-styles/test/{inherited-value-context-core.js → inherited-value-context-core.jsdom.test.js} +10 -9
  209. package/src/components/global-styles/test/{inherited-value-context.jsx → inherited-value-context.jsdom.test.jsx} +18 -17
  210. package/src/components/global-styles/test/{state-control-badges.jsx → state-control-badges.jsdom.test.jsx} +3 -2
  211. package/src/components/global-styles/test/{typography-panel-core.jsx → typography-panel-core.jsdom.test.jsx} +5 -2
  212. package/src/components/global-styles/test/{typography-panel.jsx → typography-panel.jsdom.test.jsx} +17 -12
  213. package/src/components/global-styles/test/typography-utils.js +1 -0
  214. package/src/components/global-styles/test/utils.js +1 -0
  215. package/src/components/grid/style.scss +0 -10
  216. package/src/components/iframe/index.jsx +3 -3
  217. package/src/components/image-editor/test/index.js +1 -0
  218. package/src/components/image-size-control/test/{index.jsx → index.jsdom.test.jsx} +8 -3
  219. package/src/components/inner-blocks/test/__snapshots__/index.jsdom.test.jsx.snap +15 -0
  220. package/src/components/inner-blocks/test/{index.jsx → index.jsdom.test.jsx} +2 -0
  221. package/src/components/inner-content/test/{index.jsx → index.jsdom.test.jsx} +1 -0
  222. package/src/components/inserter/hooks/use-patterns-paging.js +1 -1
  223. package/src/components/inserter/media-tab/test/{hooks.js → hooks.jsdom.test.js} +12 -11
  224. package/src/components/inserter/media-tab/test/{media-panel.jsx → media-panel.jsdom.test.jsx} +15 -12
  225. package/src/components/inserter/style.scss +2 -2
  226. package/src/components/inserter/test/get-appender-label.js +12 -11
  227. package/src/components/inserter/test/search-items.js +1 -0
  228. package/src/components/inserter-draggable-blocks/index.jsx +1 -1
  229. package/src/components/inserter-list-item/style.scss +1 -0
  230. package/src/components/inspector-controls-tabs/content-tab.jsx +7 -14
  231. package/src/components/inspector-controls-tabs/styles-tab.jsx +1 -4
  232. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +1 -8
  233. package/src/components/inspector-popover-header/index.jsx +6 -7
  234. package/src/components/line-height-control/test/{index.jsx → index.jsdom.test.jsx} +3 -0
  235. package/src/components/link-control/index.jsx +3 -0
  236. package/src/components/link-control/search-input.jsx +1 -1
  237. package/src/components/link-control/style.scss +1 -1
  238. package/src/components/link-control/test/{index.jsx → index.jsdom.test.jsx} +52 -42
  239. package/src/components/link-control/test/is-url-like.js +1 -0
  240. package/src/components/link-control/test/{url-normalization.test.jsx → url-normalization.jsdom.test.jsx} +21 -20
  241. package/src/components/link-picker/test/{index.jsx → index.jsdom.test.jsx} +31 -30
  242. package/src/components/list-view/block-select-button.jsx +6 -1
  243. package/src/components/list-view/block.jsx +6 -4
  244. package/src/components/list-view/style.scss +55 -35
  245. package/src/components/list-view/test/use-list-view-drop-zone.js +1 -0
  246. package/src/components/list-view/test/utils.js +1 -0
  247. package/src/components/list-view/use-list-view-drop-zone.js +1 -1
  248. package/src/components/media-placeholder/test/get-computed-accept-attribute.js +1 -0
  249. package/src/components/media-placeholder/test/{index.jsx → index.jsdom.test.jsx} +8 -2
  250. package/src/components/media-replace-flow/index.jsx +6 -1
  251. package/src/components/media-replace-flow/test/{index.jsx → index.jsdom.test.jsx} +3 -0
  252. package/src/components/navigable-toolbar/index.jsx +4 -0
  253. package/src/components/navigable-toolbar/test/index.browser.test.js +50 -0
  254. package/src/components/panel-color-settings/test/{index.jsx → index.jsdom.test.jsx} +3 -0
  255. package/src/components/preset-input-control/test/{index.jsx → index.jsdom.test.jsx} +8 -2
  256. package/src/components/preset-input-control/test/utils.js +1 -0
  257. package/src/components/provider/test/{experimental-provider.jsx → experimental-provider.jsdom.test.jsx} +3 -2
  258. package/src/components/provider/test/{use-block-sync.jsx → use-block-sync.jsdom.test.jsx} +45 -44
  259. package/src/components/recursion-provider/test/{index.jsx → index.jsdom.test.jsx} +1 -0
  260. package/src/components/responsive-block-control/style.scss +1 -0
  261. package/src/components/responsive-block-control/test/{index.jsx → index.jsdom.test.jsx} +6 -3
  262. package/src/components/rich-text/event-listeners/enter.js +29 -14
  263. package/src/components/rich-text/event-listeners/index.js +0 -2
  264. package/src/components/rich-text/event-listeners/input-rules.js +7 -2
  265. package/src/components/spacing-sizes-control/test/{index.jsx → index.jsdom.test.jsx} +23 -20
  266. package/src/components/spacing-sizes-control/test/utils.js +1 -0
  267. package/src/components/url-input/test/{button.jsx → button.jsdom.test.jsx} +4 -1
  268. package/src/components/url-input/test/fixtures/validated-input-control-deprecation.js +2 -0
  269. package/src/components/url-input/test/{index.jsx → index.jsdom.test.jsx} +23 -13
  270. package/src/components/use-block-display-information/test/{index.jsx → index.jsdom.test.jsx} +14 -10
  271. package/src/components/use-block-drop-zone/index.js +2 -2
  272. package/src/components/use-block-drop-zone/test/index.js +1 -0
  273. package/src/components/use-on-block-drop/test/index.js +28 -31
  274. package/src/components/warning/test/__snapshots__/{index.jsx.snap → index.jsdom.test.jsx.snap} +2 -2
  275. package/src/components/warning/test/{index.jsx → index.jsdom.test.jsx} +1 -0
  276. package/src/components/writing-flow/index.jsx +5 -0
  277. package/src/components/writing-flow/style.scss +48 -0
  278. package/src/components/writing-flow/test/{index.js → index.jsdom.test.js} +1 -0
  279. package/src/components/writing-flow/use-arrow-nav.js +2 -2
  280. package/src/components/writing-flow/use-input.js +29 -2
  281. package/src/components/writing-flow/use-tab-nav.jsx +155 -70
  282. package/src/components/writing-flow/use-undo-automatic-change.js +40 -0
  283. package/src/elements/test/{index.js → index.jsdom.test.js} +1 -0
  284. package/src/hooks/border.jsx +0 -53
  285. package/src/hooks/generate-fields-from-attributes.js +1 -1
  286. package/src/hooks/index.js +0 -2
  287. package/src/hooks/style.jsx +3 -2
  288. package/src/hooks/test/{align.jsx → align.jsdom.test.jsx} +1 -0
  289. package/src/hooks/test/allowed-blocks.js +1 -0
  290. package/src/hooks/test/{anchor.js → anchor.jsdom.test.js} +1 -0
  291. package/src/hooks/test/{auto-inspector-controls.js → auto-inspector-controls.jsdom.test.js} +1 -0
  292. package/src/hooks/test/{background.jsx → background.jsdom.test.jsx} +5 -2
  293. package/src/hooks/test/{block-style-state.js → block-style-state.jsdom.test.js} +4 -3
  294. package/src/hooks/test/{cross-origin-isolation.js → cross-origin-isolation.jsdom.test.js} +18 -25
  295. package/src/hooks/test/{custom-class-name.jsx → custom-class-name.jsdom.test.jsx} +1 -0
  296. package/src/hooks/test/{dimensions.js → dimensions.jsdom.test.js} +1 -0
  297. package/src/hooks/test/{duotone.js → duotone.jsdom.test.js} +1 -0
  298. package/src/hooks/test/{font-size.js → font-size.jsdom.test.js} +1 -0
  299. package/src/hooks/test/gap.js +1 -0
  300. package/src/hooks/test/generate-fields-from-attributes.js +1 -0
  301. package/src/hooks/test/generated-class-name.js +1 -0
  302. package/src/hooks/test/{inherited-value-wiring.jsx → inherited-value-wiring.jsdom.test.jsx} +49 -51
  303. package/src/hooks/test/{layout-child.js → layout-child.jsdom.test.js} +1 -0
  304. package/src/hooks/test/{layout.js → layout.jsdom.test.js} +1 -0
  305. package/src/hooks/test/metadata.js +1 -0
  306. package/src/hooks/test/preset-round-trip.js +2 -0
  307. package/src/hooks/test/settings.jsx +1 -0
  308. package/src/hooks/test/state-utils.js +1 -0
  309. package/src/hooks/test/{style.jsx → style.jsdom.test.jsx} +1 -0
  310. package/src/hooks/test/{text-align.jsx → text-align.jsdom.test.jsx} +1 -0
  311. package/src/hooks/test/{use-typography-props.js → use-typography-props.jsdom.test.js} +1 -0
  312. package/src/hooks/test/{utils.js → utils.jsdom.test.js} +1 -0
  313. package/src/layouts/flex.jsx +7 -0
  314. package/src/layouts/test/{constrained.jsx → constrained.jsdom.test.jsx} +6 -3
  315. package/src/layouts/test/{flex.jsx → flex.jsdom.test.jsx} +52 -2
  316. package/src/layouts/test/{flow.js → flow.jsdom.test.js} +1 -0
  317. package/src/layouts/test/{grid.jsx → grid.jsdom.test.jsx} +5 -2
  318. package/src/layouts/test/utils.js +1 -0
  319. package/src/store/actions.js +14 -12
  320. package/src/store/test/{actions.js → actions.jsdom.test.js} +50 -49
  321. package/src/store/test/array.js +1 -0
  322. package/src/store/test/get-block-settings.js +1 -0
  323. package/src/store/test/performance.js +2 -1
  324. package/src/store/test/private-actions.js +1 -0
  325. package/src/store/test/private-selectors.js +13 -3
  326. package/src/store/test/reducer.js +37 -8
  327. package/src/store/test/{registry-selectors.js → registry-selectors.jsdom.test.js} +9 -0
  328. package/src/store/test/{selectors.jsx → selectors.jsdom.test.jsx} +13 -3
  329. package/src/style.scss +1 -1
  330. package/src/utils/test/block-bindings.js +1 -0
  331. package/src/utils/test/color-values.js +1 -0
  332. package/src/utils/test/{dom.jsx → dom.jsdom.test.jsx} +38 -43
  333. package/src/utils/test/format-font-style.js +1 -0
  334. package/src/utils/test/format-font-weight.js +1 -0
  335. package/src/utils/test/get-font-styles-and-weights.js +1 -0
  336. package/src/utils/test/math.js +1 -0
  337. package/src/utils/test/object.js +1 -0
  338. package/src/utils/test/pasting.js +1 -0
  339. package/src/utils/test/selection.js +1 -0
  340. package/src/utils/test/sorting.js +1 -0
  341. package/src/utils/test/transform-styles.js +2 -1
  342. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs.map +0 -7
  343. package/build/hooks/block-fields/fields-dropdown-menu.cjs +0 -67
  344. package/build/hooks/block-fields/fields-dropdown-menu.cjs.map +0 -7
  345. package/build/hooks/block-fields/index.cjs +0 -238
  346. package/build/hooks/block-fields/index.cjs.map +0 -7
  347. package/build/hooks/block-fields/link/index.cjs +0 -174
  348. package/build/hooks/block-fields/link/index.cjs.map +0 -7
  349. package/build/hooks/block-fields/media/index.cjs +0 -262
  350. package/build/hooks/block-fields/media/index.cjs.map +0 -7
  351. package/build/hooks/block-fields/rich-text/index.cjs +0 -146
  352. package/build/hooks/block-fields/rich-text/index.cjs.map +0 -7
  353. package/build/hooks/block-fields/use-inspector-popover-placement.cjs +0 -41
  354. package/build/hooks/block-fields/use-inspector-popover-placement.cjs.map +0 -7
  355. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs +0 -33
  356. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs.map +0 -7
  357. package/build-module/hooks/block-fields/fields-dropdown-menu.mjs +0 -46
  358. package/build-module/hooks/block-fields/fields-dropdown-menu.mjs.map +0 -7
  359. package/build-module/hooks/block-fields/index.mjs +0 -210
  360. package/build-module/hooks/block-fields/index.mjs.map +0 -7
  361. package/build-module/hooks/block-fields/link/index.mjs +0 -141
  362. package/build-module/hooks/block-fields/link/index.mjs.map +0 -7
  363. package/build-module/hooks/block-fields/media/index.mjs +0 -241
  364. package/build-module/hooks/block-fields/media/index.mjs.map +0 -7
  365. package/build-module/hooks/block-fields/rich-text/index.mjs +0 -115
  366. package/build-module/hooks/block-fields/rich-text/index.mjs.map +0 -7
  367. package/build-module/hooks/block-fields/use-inspector-popover-placement.mjs +0 -16
  368. package/build-module/hooks/block-fields/use-inspector-popover-placement.mjs.map +0 -7
  369. package/src/components/color-palette/test/__snapshots__/control.jsx.snap +0 -143
  370. package/src/components/inner-blocks/test/__snapshots__/index.jsx.snap +0 -15
  371. package/src/components/rich-text/event-listeners/undo-automatic-change.js +0 -39
  372. package/src/hooks/block-fields/fields-dropdown-menu.jsx +0 -47
  373. package/src/hooks/block-fields/index.jsx +0 -302
  374. package/src/hooks/block-fields/link/index.jsx +0 -155
  375. package/src/hooks/block-fields/link/styles.scss +0 -18
  376. package/src/hooks/block-fields/media/index.jsx +0 -269
  377. package/src/hooks/block-fields/media/styles.scss +0 -77
  378. package/src/hooks/block-fields/rich-text/index.jsx +0 -123
  379. package/src/hooks/block-fields/rich-text/styles.scss +0 -24
  380. package/src/hooks/block-fields/styles.scss +0 -33
  381. package/src/hooks/block-fields/use-inspector-popover-placement.js +0 -16
  382. /package/src/components/block-icon/test/{index.jsx → index.jsdom.test.jsx} +0 -0
@@ -41,10 +41,10 @@ export default ( props ) => ( element ) => {
41
41
  } else if ( onSplitAtEnd && start === end && end === text.length ) {
42
42
  event.preventDefault();
43
43
  onSplitAtEnd();
44
- } else if ( onReplace && onSplit ) {
45
- event.__deprecatedOnSplit = true;
46
44
  } else if (
47
45
  ! supportsSplitting &&
46
+ // The deprecated onSplit is flagged on the beforeinput event.
47
+ ! ( onReplace && onSplit ) &&
48
48
  ! disableLineBreaks &&
49
49
  ! event.defaultPrevented
50
50
  ) {
@@ -70,8 +70,22 @@ export default ( props ) => ( element ) => {
70
70
  }
71
71
  }
72
72
 
73
- function onDefaultKeyDown( event ) {
74
- if ( event.defaultPrevented ) {
73
+ function onBeforeInput( event ) {
74
+ if ( event.inputType !== 'insertParagraph' ) {
75
+ return;
76
+ }
77
+ const { onReplace, onSplit } = props.current;
78
+ if ( onReplace && onSplit ) {
79
+ event.__deprecatedOnSplit = true;
80
+ }
81
+ }
82
+
83
+ function onDefaultBeforeInput( event ) {
84
+ if (
85
+ event.defaultPrevented ||
86
+ ( event.inputType !== 'insertParagraph' &&
87
+ event.inputType !== 'insertLineBreak' )
88
+ ) {
75
89
  return;
76
90
  }
77
91
 
@@ -82,12 +96,6 @@ export default ( props ) => ( element ) => {
82
96
  return;
83
97
  }
84
98
 
85
- if ( event.keyCode !== ENTER ) {
86
- return;
87
- }
88
-
89
- // On ENTER, we ALWAYS want to prevent the default browser behaviour
90
- // at this last interception point.
91
99
  event.preventDefault();
92
100
  }
93
101
 
@@ -95,10 +103,10 @@ export default ( props ) => ( element ) => {
95
103
 
96
104
  // Attach the listener to the window so parent elements have the chance to
97
105
  // prevent the default behavior.
98
- const unsubscribeDefaultKeyDown = subscribeDelegatedListener(
106
+ const unsubscribeDefaultBeforeInput = subscribeDelegatedListener(
99
107
  defaultView,
100
- 'keydown',
101
- onDefaultKeyDown
108
+ 'beforeinput',
109
+ onDefaultBeforeInput
102
110
  );
103
111
  // Capture phase so this runs before ancestor (writing flow) bubble
104
112
  // handlers, matching the timing of the previous raw element listener.
@@ -108,8 +116,15 @@ export default ( props ) => ( element ) => {
108
116
  onKeyDown,
109
117
  true
110
118
  );
119
+ const unsubscribeBeforeInput = subscribeOwnedListener(
120
+ element,
121
+ 'beforeinput',
122
+ onBeforeInput,
123
+ true
124
+ );
111
125
  return () => {
112
- unsubscribeDefaultKeyDown();
126
+ unsubscribeDefaultBeforeInput();
113
127
  unsubscribeKeyDown();
128
+ unsubscribeBeforeInput();
114
129
  };
115
130
  };
@@ -6,7 +6,6 @@ import insertReplacementText from './insert-replacement-text';
6
6
  import removeBrowserShortcuts from './remove-browser-shortcuts';
7
7
  import shortcuts from './shortcuts';
8
8
  import inputEvents from './input-events';
9
- import undoAutomaticChange from './undo-automatic-change';
10
9
  import pasteHandler from './paste-handler';
11
10
  import _delete from './delete';
12
11
  import enter from './enter';
@@ -19,7 +18,6 @@ const allEventListeners = [
19
18
  removeBrowserShortcuts,
20
19
  shortcuts,
21
20
  inputEvents,
22
- undoAutomaticChange,
23
21
  pasteHandler,
24
22
  _delete,
25
23
  enter,
@@ -84,8 +84,13 @@ export default ( props ) => ( element ) => {
84
84
  } );
85
85
  const block = transformation.transform( content );
86
86
 
87
- selectionChange( ...findSelection( [ block ] ) );
88
- onReplace( [ block ] );
87
+ // Batch so the undo history records the pre-transform selection,
88
+ // instead of the selection change here overwriting it first.
89
+ registry.batch( () => {
90
+ selectionChange( ...findSelection( [ block ] ) );
91
+ onReplace( [ block ] );
92
+ } );
93
+
89
94
  registry.dispatch( blockEditorStore ).__unstableMarkAutomaticChange();
90
95
 
91
96
  return true;
@@ -19,18 +19,29 @@
19
19
  * The tests ensure that when the SpacingSizesControl is refactored to use
20
20
  * PresetInputControl, the existing user experience and behavior is preserved.
21
21
  */
22
+
23
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
22
24
  import { render, screen, fireEvent, waitFor } from '@testing-library/react';
23
25
  import userEvent from '@testing-library/user-event';
24
26
  import { useSelect } from '@wordpress/data';
25
27
  import SpacingSizesControl from '../index';
28
+ import useSpacingSizes from '../hooks/use-spacing-sizes';
29
+
30
+ globalThis.wpVitest.mockMatchMedia();
31
+
32
+ globalThis.wpVitest.mockVisibleElements();
33
+ globalThis.wpVitest.mockScrollIntoView();
26
34
 
27
35
  // Mock useSelect
28
- jest.mock( '@wordpress/data/src/components/use-select', () => jest.fn() );
36
+ vi.mock( import( '@wordpress/data' ), async ( importOriginal ) => ( {
37
+ ...( await importOriginal() ),
38
+ useSelect: vi.fn(),
39
+ } ) );
29
40
 
30
41
  // Mock useSpacingSizes hook
31
- jest.mock( '../hooks/use-spacing-sizes', () => ( {
42
+ vi.mock( import( '../hooks/use-spacing-sizes' ), () => ( {
32
43
  __esModule: true,
33
- default: jest.fn( () => [
44
+ default: vi.fn( () => [
34
45
  { name: 'None', slug: '0', size: 0 },
35
46
  { name: 'Small', slug: '20', size: '0.5rem' },
36
47
  { name: 'Medium', slug: '40', size: '1rem' },
@@ -40,8 +51,8 @@ jest.mock( '../hooks/use-spacing-sizes', () => ( {
40
51
  } ) );
41
52
 
42
53
  // Mock useSettings hook
43
- jest.mock( '../../use-settings', () => ( {
44
- useSettings: jest.fn( ( ...keys ) => {
54
+ vi.mock( import( '../../use-settings' ), () => ( {
55
+ useSettings: vi.fn( ( ...keys ) => {
45
56
  const defaults = {
46
57
  'spacing.units': [ 'px', 'em', 'rem' ],
47
58
  'spacing.spacingSizes.custom': [],
@@ -54,7 +65,7 @@ jest.mock( '../../use-settings', () => ( {
54
65
  } ) );
55
66
 
56
67
  describe( 'SpacingSizesControl', () => {
57
- const mockOnChange = jest.fn();
68
+ const mockOnChange = vi.fn();
58
69
  const defaultProps = {
59
70
  label: 'Padding',
60
71
  onChange: mockOnChange,
@@ -721,15 +732,11 @@ describe( 'SpacingSizesControl', () => {
721
732
 
722
733
  // Mock the large preset set
723
734
  beforeEach( () => {
724
- jest.requireMock(
725
- '../hooks/use-spacing-sizes'
726
- ).default.mockReturnValue( largeSpacingSizes );
735
+ useSpacingSizes.mockReturnValue( largeSpacingSizes );
727
736
  } );
728
737
 
729
738
  afterEach( () => {
730
- jest.requireMock(
731
- '../hooks/use-spacing-sizes'
732
- ).default.mockReturnValue( [
739
+ useSpacingSizes.mockReturnValue( [
733
740
  { name: 'None', slug: '0', size: 0 },
734
741
  { name: 'Small', slug: '20', size: '0.5rem' },
735
742
  { name: 'Medium', slug: '40', size: '1rem' },
@@ -891,8 +898,8 @@ describe( 'SpacingSizesControl', () => {
891
898
  } );
892
899
 
893
900
  it( 'calls onMouseOver and onMouseOut callbacks', async () => {
894
- const mockOnMouseOver = jest.fn();
895
- const mockOnMouseOut = jest.fn();
901
+ const mockOnMouseOver = vi.fn();
902
+ const mockOnMouseOut = vi.fn();
896
903
  const user = userEvent.setup();
897
904
 
898
905
  render(
@@ -955,9 +962,7 @@ describe( 'SpacingSizesControl', () => {
955
962
  { name: 'Huge', slug: '100', size: '5rem' },
956
963
  ];
957
964
 
958
- jest.requireMock(
959
- '../hooks/use-spacing-sizes'
960
- ).default.mockReturnValueOnce( customSpacingSizes );
965
+ useSpacingSizes.mockReturnValueOnce( customSpacingSizes );
961
966
 
962
967
  render(
963
968
  <SpacingSizesControl { ...defaultProps } values={ undefined } />
@@ -973,9 +978,7 @@ describe( 'SpacingSizesControl', () => {
973
978
  { name: 'Theme Large', slug: 'theme-lg', size: '2.25rem' },
974
979
  ];
975
980
 
976
- jest.requireMock(
977
- '../hooks/use-spacing-sizes'
978
- ).default.mockReturnValueOnce( themeSpacingSizes );
981
+ useSpacingSizes.mockReturnValueOnce( themeSpacingSizes );
979
982
 
980
983
  render(
981
984
  <SpacingSizesControl
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it } from 'vitest';
1
2
  import {
2
3
  ALL_SIDES,
3
4
  getCustomValueFromPreset,
@@ -1,8 +1,11 @@
1
+ import { describe, expect, it, vi } from 'vitest';
1
2
  import { render, screen } from '@testing-library/react';
2
3
  import userEvent from '@testing-library/user-event';
3
4
  import { useState } from '@wordpress/element';
4
5
  import URLInputButton from '../button';
5
6
 
7
+ globalThis.wpVitest.mockMatchMedia();
8
+
6
9
  describe( 'URLInputButton', () => {
7
10
  it( 'should render a `Insert link` button and not be pressed when `url` is not provided', () => {
8
11
  render( <URLInputButton /> );
@@ -67,7 +70,7 @@ describe( 'URLInputButton', () => {
67
70
 
68
71
  it( 'should call `onChange` function once per each value change', async () => {
69
72
  const user = userEvent.setup();
70
- const onChangeMock = jest.fn();
73
+ const onChangeMock = vi.fn();
71
74
 
72
75
  render( <URLInputButton onChange={ onChangeMock } /> );
73
76
 
@@ -1,3 +1,5 @@
1
+ import { expect } from 'vitest';
2
+
1
3
  /**
2
4
  * Temporary test helper while `URLInput` still unlocks the deprecated private
3
5
  * `ValidatedInputControl` from `@wordpress/components`.
@@ -1,4 +1,11 @@
1
- import { fireEvent, render, screen, waitFor } from '@testing-library/react';
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import {
3
+ act,
4
+ fireEvent,
5
+ render,
6
+ screen,
7
+ waitFor,
8
+ } from '@testing-library/react';
2
9
  import userEvent from '@testing-library/user-event';
3
10
  import { speak } from '@wordpress/a11y';
4
11
  import { useState } from '@wordpress/element';
@@ -8,7 +15,10 @@ import URLInput from '../';
8
15
  import { store as blockEditorStore } from '../../../store';
9
16
  import { expectValidatedInputControlDeprecationIfCalled } from './fixtures/validated-input-control-deprecation';
10
17
 
11
- jest.mock( '@wordpress/a11y', () => ( { speak: jest.fn() } ) );
18
+ globalThis.wpVitest.mockScrollIntoView();
19
+ globalThis.wpVitest.mockMatchMedia();
20
+
21
+ vi.mock( import( '@wordpress/a11y' ), () => ( { speak: vi.fn() } ) );
12
22
 
13
23
  const SUGGESTIONS = [
14
24
  {
@@ -37,8 +47,8 @@ const KEY_EVENTS = {
37
47
  * Waits long enough for the suggestions request debounce to elapse, so that
38
48
  * assertions about a request _not_ being made are meaningful.
39
49
  */
40
- function flushDebounce() {
41
- return new Promise( ( resolve ) => setTimeout( resolve, 250 ) );
50
+ async function flushDebounce() {
51
+ await act( () => new Promise( ( resolve ) => setTimeout( resolve, 250 ) ) );
42
52
  }
43
53
 
44
54
  /**
@@ -68,16 +78,16 @@ describe( 'URLInput', () => {
68
78
  let fetchLinkSuggestions;
69
79
 
70
80
  beforeEach( () => {
71
- fetchLinkSuggestions = jest.fn().mockResolvedValue( SUGGESTIONS );
81
+ fetchLinkSuggestions = vi.fn().mockResolvedValue( SUGGESTIONS );
72
82
  } );
73
83
 
74
84
  afterEach( () => {
75
- jest.clearAllMocks();
85
+ vi.clearAllMocks();
76
86
  } );
77
87
 
78
88
  function renderURLInput( props = {} ) {
79
89
  const user = userEvent.setup();
80
- const onChange = jest.fn();
90
+ const onChange = vi.fn();
81
91
 
82
92
  render(
83
93
  <ControlledURLInput
@@ -471,7 +481,7 @@ describe( 'URLInput', () => {
471
481
  } );
472
482
 
473
483
  it( 'should select and submit the active suggestion when pressing Enter', async () => {
474
- const onSubmit = jest.fn();
484
+ const onSubmit = vi.fn();
475
485
  const { input, onChange } = await renderWithSuggestions( {
476
486
  onSubmit,
477
487
  } );
@@ -491,7 +501,7 @@ describe( 'URLInput', () => {
491
501
  } );
492
502
 
493
503
  it( 'should submit without a suggestion when pressing Enter with no active suggestion', async () => {
494
- const onSubmit = jest.fn();
504
+ const onSubmit = vi.fn();
495
505
  const { input } = await renderWithSuggestions( { onSubmit } );
496
506
 
497
507
  fireEvent.keyDown( input, KEY_EVENTS.enter );
@@ -500,8 +510,8 @@ describe( 'URLInput', () => {
500
510
  } );
501
511
 
502
512
  it( 'should submit without a suggestion when pressing Enter and there are no suggestions', async () => {
503
- const onSubmit = jest.fn();
504
- const onKeyDown = jest.fn();
513
+ const onSubmit = vi.fn();
514
+ const onKeyDown = vi.fn();
505
515
  const { input } = renderURLInput( {
506
516
  value: 'hello',
507
517
  disableSuggestions: true,
@@ -587,7 +597,7 @@ describe( 'URLInput', () => {
587
597
 
588
598
  describe( 'custom rendering', () => {
589
599
  it( 'should render the control via `__experimentalRenderControl`', () => {
590
- const renderControl = jest
600
+ const renderControl = vi
591
601
  .fn()
592
602
  .mockReturnValue( <div>Custom control</div> );
593
603
 
@@ -608,7 +618,7 @@ describe( 'URLInput', () => {
608
618
  } );
609
619
 
610
620
  it( 'should render suggestions via `__experimentalRenderSuggestions`', async () => {
611
- const renderSuggestions = jest.fn( ( { suggestions } ) => (
621
+ const renderSuggestions = vi.fn( ( { suggestions } ) => (
612
622
  <ul>
613
623
  { suggestions.map( ( suggestion ) => (
614
624
  <li key={ suggestion.id }>{ suggestion.title }</li>
@@ -1,14 +1,18 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
1
2
  import { render } from '@testing-library/react';
2
3
  import { useSelect } from '@wordpress/data';
3
4
  import { useEffect } from '@wordpress/element';
4
5
  import { symbol } from '@wordpress/icons';
5
6
  import useBlockDisplayInformation from '../';
6
7
 
7
- jest.mock( '@wordpress/data/src/components/use-select', () => jest.fn() );
8
- jest.mock( '../../../lock-unlock', () => ( {
8
+ vi.mock( import( '@wordpress/data' ), async ( importOriginal ) => ( {
9
+ ...( await importOriginal() ),
10
+ useSelect: vi.fn(),
11
+ } ) );
12
+ vi.mock( import( '../../../lock-unlock' ), () => ( {
9
13
  unlock: ( value ) => ( {
10
- registerPrivateActions: jest.fn(),
11
- registerPrivateSelectors: jest.fn(),
14
+ registerPrivateActions: vi.fn(),
15
+ registerPrivateSelectors: vi.fn(),
12
16
  ...value,
13
17
  } ),
14
18
  } ) );
@@ -64,12 +68,12 @@ function setupUseSelect( {
64
68
 
65
69
  describe( 'useBlockDisplayInformation', () => {
66
70
  beforeEach( () => {
67
- jest.clearAllMocks();
71
+ vi.clearAllMocks();
68
72
  } );
69
73
 
70
74
  it( 'displays pattern information for a pattern section that is not being edited', () => {
71
75
  setupUseSelect();
72
- const onChange = jest.fn();
76
+ const onChange = vi.fn();
73
77
 
74
78
  render( <TestComponent onChange={ onChange } /> );
75
79
 
@@ -85,7 +89,7 @@ describe( 'useBlockDisplayInformation', () => {
85
89
 
86
90
  it( 'displays block information for a pattern section that is being edited', () => {
87
91
  setupUseSelect( { isSectionBlock: false } );
88
- const onChange = jest.fn();
92
+ const onChange = vi.fn();
89
93
 
90
94
  render( <TestComponent onChange={ onChange } /> );
91
95
 
@@ -109,7 +113,7 @@ describe( 'useBlockDisplayInformation', () => {
109
113
  },
110
114
  isSectionBlock: false,
111
115
  } );
112
- const onChange = jest.fn();
116
+ const onChange = vi.fn();
113
117
 
114
118
  render( <TestComponent onChange={ onChange } /> );
115
119
 
@@ -127,7 +131,7 @@ describe( 'useBlockDisplayInformation', () => {
127
131
  setupUseSelect( {
128
132
  isSectionBlock: false,
129
133
  } );
130
- const onChange = jest.fn();
134
+ const onChange = vi.fn();
131
135
 
132
136
  render( <TestComponent onChange={ onChange } /> );
133
137
 
@@ -152,7 +156,7 @@ describe( 'useBlockDisplayInformation', () => {
152
156
  description: 'A template part.',
153
157
  },
154
158
  } );
155
- const onChange = jest.fn();
159
+ const onChange = vi.fn();
156
160
 
157
161
  render( <TestComponent onChange={ onChange } /> );
158
162
 
@@ -151,7 +151,7 @@ export function getDropTargetPosition(
151
151
  rect,
152
152
  allowedEdges
153
153
  );
154
- // If the the point is close to a side, prioritize that side.
154
+ // If the point is close to a side, prioritize that side.
155
155
  const [ sideDistance, sideEdge ] = getDistanceToNearestEdge(
156
156
  position,
157
157
  rect,
@@ -572,7 +572,7 @@ export default function useBlockDropZone( {
572
572
  onDrop: onBlockDrop,
573
573
  onDragOver( event ) {
574
574
  // `currentTarget` is only available while the event is being
575
- // handled, so get it now and pass it to the thottled function.
575
+ // handled, so get it now and pass it to the throttled function.
576
576
  // https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget
577
577
  throttled( event, event.currentTarget.ownerDocument );
578
578
  },
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it } from 'vitest';
1
2
  import { getDropTargetPosition } from '..';
2
3
 
3
4
  const elementData = [
@@ -1,15 +1,14 @@
1
+ import { describe, expect, it, vi } from 'vitest';
1
2
  import { findTransform, pasteHandler } from '@wordpress/blocks';
2
3
  import { parseDropEvent, onFilesDrop, onHTMLDrop, onBlockDrop } from '..';
3
4
 
4
5
  const noop = () => {};
5
6
 
6
- jest.mock( '@wordpress/blocks/src/api/factory', () => ( {
7
- findTransform: jest.fn(),
8
- getBlockTransforms: jest.fn(),
9
- } ) );
10
-
11
- jest.mock( '@wordpress/blocks/src/api/raw-handling', () => ( {
12
- pasteHandler: jest.fn(),
7
+ vi.mock( import( '@wordpress/blocks' ), async ( importOriginal ) => ( {
8
+ ...( await importOriginal() ),
9
+ findTransform: vi.fn(),
10
+ getBlockTransforms: vi.fn(),
11
+ pasteHandler: vi.fn(),
13
12
  } ) );
14
13
 
15
14
  describe( 'parseDropEvent', () => {
@@ -92,7 +91,7 @@ describe( 'onBlockDrop', () => {
92
91
  const targetBlockIndex = 0;
93
92
  const getBlockIndex = noop;
94
93
  const getClientIdsOfDescendants = noop;
95
- const moveBlocks = jest.fn();
94
+ const moveBlocks = vi.fn();
96
95
 
97
96
  const event = {
98
97
  dataTransfer: {
@@ -120,9 +119,9 @@ describe( 'onBlockDrop', () => {
120
119
  const targetRootClientId = '1';
121
120
  const targetBlockIndex = 0;
122
121
  // Target and source block index is the same.
123
- const getBlockIndex = jest.fn( () => targetBlockIndex );
122
+ const getBlockIndex = vi.fn( () => targetBlockIndex );
124
123
  const getClientIdsOfDescendants = noop;
125
- const moveBlocks = jest.fn();
124
+ const moveBlocks = vi.fn();
126
125
 
127
126
  const event = {
128
127
  dataTransfer: {
@@ -152,9 +151,9 @@ describe( 'onBlockDrop', () => {
152
151
  it( 'does nothing if the block is dropped as a child of itself', () => {
153
152
  const targetRootClientId = '1';
154
153
  const targetBlockIndex = 0;
155
- const getBlockIndex = jest.fn( () => 6 );
154
+ const getBlockIndex = vi.fn( () => 6 );
156
155
  const getClientIdsOfDescendants = noop;
157
- const moveBlocks = jest.fn();
156
+ const moveBlocks = vi.fn();
158
157
 
159
158
  const event = {
160
159
  dataTransfer: {
@@ -184,12 +183,10 @@ describe( 'onBlockDrop', () => {
184
183
  it( 'does nothing if the block is dropped as a descendant of itself', () => {
185
184
  const targetRootClientId = '1';
186
185
  const targetBlockIndex = 0;
187
- const getBlockIndex = jest.fn( () => 1 );
186
+ const getBlockIndex = vi.fn( () => 1 );
188
187
  // Dragged block is being dropped as a descendant of itself.
189
- const getClientIdsOfDescendants = jest.fn( () => [
190
- targetRootClientId,
191
- ] );
192
- const moveBlocks = jest.fn();
188
+ const getClientIdsOfDescendants = vi.fn( () => [ targetRootClientId ] );
189
+ const moveBlocks = vi.fn();
193
190
 
194
191
  const event = {
195
192
  dataTransfer: {
@@ -220,9 +217,9 @@ describe( 'onBlockDrop', () => {
220
217
  const sourceRootClientId = '0';
221
218
  const targetRootClientId = '1';
222
219
  const targetBlockIndex = 0;
223
- const getBlockIndex = jest.fn( () => 1 );
220
+ const getBlockIndex = vi.fn( () => 1 );
224
221
  const getClientIdsOfDescendants = () => [];
225
- const moveBlocks = jest.fn();
222
+ const moveBlocks = vi.fn();
226
223
 
227
224
  const event = {
228
225
  dataTransfer: {
@@ -257,10 +254,10 @@ describe( 'onBlockDrop', () => {
257
254
  const sourceRootClientId = '0';
258
255
  const targetRootClientId = sourceRootClientId;
259
256
  const targetBlockIndex = 5;
260
- const getBlockIndex = jest.fn( () => 1 );
257
+ const getBlockIndex = vi.fn( () => 1 );
261
258
  // Dragged block is being dropped as a descendant of itself.
262
259
  const getClientIdsOfDescendants = () => [];
263
- const moveBlocks = jest.fn();
260
+ const moveBlocks = vi.fn();
264
261
 
265
262
  const event = {
266
263
  dataTransfer: {
@@ -296,11 +293,11 @@ describe( 'onBlockDrop', () => {
296
293
 
297
294
  describe( 'onFilesDrop', () => {
298
295
  it( 'does nothing if hasUploadPermissions is false', () => {
299
- const updateBlockAttributes = jest.fn();
296
+ const updateBlockAttributes = vi.fn();
300
297
  const canInsertBlockType = noop;
301
- const insertOrReplaceBlocks = jest.fn();
298
+ const insertOrReplaceBlocks = vi.fn();
302
299
  const targetRootClientId = '1';
303
- const getSettings = jest.fn( () => ( {} ) );
300
+ const getSettings = vi.fn( () => ( {} ) );
304
301
 
305
302
  const onFileDropHandler = onFilesDrop(
306
303
  targetRootClientId,
@@ -320,10 +317,10 @@ describe( 'onFilesDrop', () => {
320
317
  // to have no return value.
321
318
  findTransform.mockImplementation( noop );
322
319
  const updateBlockAttributes = noop;
323
- const insertOrReplaceBlocks = jest.fn();
320
+ const insertOrReplaceBlocks = vi.fn();
324
321
  const canInsertBlockType = noop;
325
322
  const targetRootClientId = '1';
326
- const getSettings = jest.fn( () => ( {
323
+ const getSettings = vi.fn( () => ( {
327
324
  mediaUpload: true,
328
325
  } ) );
329
326
 
@@ -345,13 +342,13 @@ describe( 'onFilesDrop', () => {
345
342
  // of the transform isn't important just that there is a callable 'transform'
346
343
  // function that returns a value.
347
344
  const blocks = 'blocks';
348
- const transformation = { transform: jest.fn( () => blocks ) };
345
+ const transformation = { transform: vi.fn( () => blocks ) };
349
346
  findTransform.mockImplementation( () => transformation );
350
347
  const updateBlockAttributes = noop;
351
348
  const canInsertBlockType = noop;
352
- const insertOrReplaceBlocks = jest.fn();
349
+ const insertOrReplaceBlocks = vi.fn();
353
350
  const targetRootClientId = '1';
354
- const getSettings = jest.fn( () => ( {
351
+ const getSettings = vi.fn( () => ( {
355
352
  mediaUpload: true,
356
353
  } ) );
357
354
 
@@ -377,7 +374,7 @@ describe( 'onFilesDrop', () => {
377
374
  describe( 'onHTMLDrop', () => {
378
375
  it( 'does nothing if the HTML cannot be converted into blocks', () => {
379
376
  pasteHandler.mockImplementation( () => [] );
380
- const insertOrReplaceBlocks = jest.fn();
377
+ const insertOrReplaceBlocks = vi.fn();
381
378
 
382
379
  const eventHandler = onHTMLDrop( insertOrReplaceBlocks );
383
380
  eventHandler();
@@ -388,7 +385,7 @@ describe( 'onHTMLDrop', () => {
388
385
  it( 'inserts blocks if the HTML can be converted into blocks', () => {
389
386
  const blocks = [ 'blocks' ];
390
387
  pasteHandler.mockImplementation( () => blocks );
391
- const insertOrReplaceBlocks = jest.fn();
388
+ const insertOrReplaceBlocks = vi.fn();
392
389
 
393
390
  const eventHandler = onHTMLDrop( insertOrReplaceBlocks );
394
391
  eventHandler();
@@ -1,6 +1,6 @@
1
- // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
- exports[`Warning should match snapshot 1`] = `
3
+ exports[`Warning > should match snapshot 1`] = `
4
4
  <div>
5
5
  <div
6
6
  style="display: contents; all: initial;"
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it } from 'vitest';
1
2
  import { render, screen } from '@testing-library/react';
2
3
  import userEvent from '@testing-library/user-event';
3
4
  import Warning from '../index';
@@ -7,6 +7,7 @@ import useEditableRoot from './use-editable-root';
7
7
  import useHomeEnd from './use-home-end';
8
8
  import useMultiSelection from './use-multi-selection';
9
9
  import useTabNav from './use-tab-nav';
10
+ import useUndoAutomaticChange from './use-undo-automatic-change';
10
11
  import useArrowNav from './use-arrow-nav';
11
12
  import { usePreviewModeNav } from './use-preview-mode-nav';
12
13
  import useSelectAll from './use-select-all';
@@ -28,6 +29,10 @@ export function useWritingFlow() {
28
29
  return [
29
30
  before,
30
31
  useMergeRefs( [
32
+ // Same-node listeners run in registration order, and the undo of
33
+ // an automatic change must claim Escape before the tab-nav
34
+ // listeners step out of the canvas.
35
+ useUndoAutomaticChange(),
31
36
  ref,
32
37
  useEditableRootEventHandlers(),
33
38
  useClipboardHandler(),