@wordpress/block-library 10.6.1-next.v.202609031004.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/build/audio/edit.cjs +5 -5
  3. package/build/audio/edit.cjs.map +2 -2
  4. package/build/audio/index.cjs +0 -37
  5. package/build/audio/index.cjs.map +3 -3
  6. package/build/button/index.cjs +0 -34
  7. package/build/button/index.cjs.map +3 -3
  8. package/build/code/index.cjs +0 -17
  9. package/build/code/index.cjs.map +3 -3
  10. package/build/cover/index.cjs +0 -38
  11. package/build/cover/index.cjs.map +3 -3
  12. package/build/details/index.cjs +0 -17
  13. package/build/details/index.cjs.map +3 -3
  14. package/build/file/index.cjs +0 -43
  15. package/build/file/index.cjs.map +3 -3
  16. package/build/footnotes/format.cjs +1 -1
  17. package/build/footnotes/format.cjs.map +2 -2
  18. package/build/gallery/dynamic-gallery.cjs +12 -9
  19. package/build/gallery/dynamic-gallery.cjs.map +2 -2
  20. package/build/heading/index.cjs +0 -16
  21. package/build/heading/index.cjs.map +3 -3
  22. package/build/image/image.cjs +1 -2
  23. package/build/image/image.cjs.map +2 -2
  24. package/build/image/index.cjs +0 -81
  25. package/build/image/index.cjs.map +3 -3
  26. package/build/index.cjs +0 -10
  27. package/build/index.cjs.map +2 -2
  28. package/build/list-item/edit.cjs +14 -11
  29. package/build/list-item/edit.cjs.map +2 -2
  30. package/build/list-item/hooks/index.cjs +6 -9
  31. package/build/list-item/hooks/index.cjs.map +2 -2
  32. package/build/list-item/hooks/use-enter.cjs +62 -67
  33. package/build/list-item/hooks/use-enter.cjs.map +3 -3
  34. package/build/list-item/hooks/use-merge.cjs +26 -44
  35. package/build/list-item/hooks/use-merge.cjs.map +3 -3
  36. package/build/list-item/hooks/use-multi-select-tab.cjs +80 -0
  37. package/build/list-item/hooks/use-multi-select-tab.cjs.map +7 -0
  38. package/build/list-item/hooks/use-tab.cjs +65 -0
  39. package/build/list-item/hooks/use-tab.cjs.map +7 -0
  40. package/build/list-item/index.cjs +0 -17
  41. package/build/list-item/index.cjs.map +3 -3
  42. package/build/list-item/utils.cjs +169 -0
  43. package/build/list-item/utils.cjs.map +7 -0
  44. package/build/media-text/index.cjs +0 -50
  45. package/build/media-text/index.cjs.map +3 -3
  46. package/build/media-text/media-container.cjs +16 -11
  47. package/build/media-text/media-container.cjs.map +2 -2
  48. package/build/more/index.cjs +0 -18
  49. package/build/more/index.cjs.map +3 -3
  50. package/build/navigation/constants.cjs +1 -1
  51. package/build/navigation/constants.cjs.map +1 -1
  52. package/build/navigation-link/block.json +1 -1
  53. package/build/navigation-link/deprecated.cjs +69 -0
  54. package/build/navigation-link/deprecated.cjs.map +7 -0
  55. package/build/navigation-link/index.cjs +6 -74
  56. package/build/navigation-link/index.cjs.map +4 -4
  57. package/build/{form-submit-button/init.cjs → navigation-link/variations.cjs} +23 -8
  58. package/build/navigation-link/variations.cjs.map +7 -0
  59. package/build/navigation-submenu/index.cjs +0 -32
  60. package/build/navigation-submenu/index.cjs.map +3 -3
  61. package/build/paragraph/index.cjs +0 -17
  62. package/build/paragraph/index.cjs.map +3 -3
  63. package/build/paragraph/use-enter.cjs +8 -4
  64. package/build/paragraph/use-enter.cjs.map +2 -2
  65. package/build/post-template/edit.cjs +3 -1
  66. package/build/post-template/edit.cjs.map +2 -2
  67. package/build/preformatted/index.cjs +0 -17
  68. package/build/preformatted/index.cjs.map +3 -3
  69. package/build/pullquote/index.cjs +0 -24
  70. package/build/pullquote/index.cjs.map +3 -3
  71. package/build/query/edit/inspector-controls/index.cjs +9 -4
  72. package/build/query/edit/inspector-controls/index.cjs.map +2 -2
  73. package/build/search/index.cjs +0 -31
  74. package/build/search/index.cjs.map +3 -3
  75. package/build/site-tagline/edit.cjs +11 -17
  76. package/build/site-tagline/edit.cjs.map +2 -2
  77. package/build/site-title/edit.cjs +12 -18
  78. package/build/site-title/edit.cjs.map +2 -2
  79. package/build/social-link/index.cjs +0 -31
  80. package/build/social-link/index.cjs.map +3 -3
  81. package/build/verse/index.cjs +0 -17
  82. package/build/verse/index.cjs.map +3 -3
  83. package/build/video/index.cjs +0 -40
  84. package/build/video/index.cjs.map +3 -3
  85. package/build/video/tracks-editor.cjs +2 -3
  86. package/build/video/tracks-editor.cjs.map +3 -3
  87. package/build-module/audio/edit.mjs +5 -5
  88. package/build-module/audio/edit.mjs.map +2 -2
  89. package/build-module/audio/index.mjs +0 -37
  90. package/build-module/audio/index.mjs.map +2 -2
  91. package/build-module/button/index.mjs +0 -34
  92. package/build-module/button/index.mjs.map +2 -2
  93. package/build-module/code/index.mjs +0 -17
  94. package/build-module/code/index.mjs.map +2 -2
  95. package/build-module/cover/index.mjs +0 -38
  96. package/build-module/cover/index.mjs.map +2 -2
  97. package/build-module/details/index.mjs +0 -17
  98. package/build-module/details/index.mjs.map +2 -2
  99. package/build-module/file/index.mjs +1 -44
  100. package/build-module/file/index.mjs.map +2 -2
  101. package/build-module/footnotes/format.mjs +1 -1
  102. package/build-module/footnotes/format.mjs.map +2 -2
  103. package/build-module/gallery/dynamic-gallery.mjs +12 -9
  104. package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
  105. package/build-module/heading/index.mjs +1 -21
  106. package/build-module/heading/index.mjs.map +2 -2
  107. package/build-module/image/image.mjs +1 -2
  108. package/build-module/image/image.mjs.map +2 -2
  109. package/build-module/image/index.mjs +0 -81
  110. package/build-module/image/index.mjs.map +2 -2
  111. package/build-module/index.mjs +0 -10
  112. package/build-module/index.mjs.map +2 -2
  113. package/build-module/list-item/edit.mjs +20 -18
  114. package/build-module/list-item/edit.mjs.map +2 -2
  115. package/build-module/list-item/hooks/index.mjs +8 -10
  116. package/build-module/list-item/hooks/index.mjs.map +2 -2
  117. package/build-module/list-item/hooks/use-enter.mjs +63 -58
  118. package/build-module/list-item/hooks/use-enter.mjs.map +2 -2
  119. package/build-module/list-item/hooks/use-merge.mjs +27 -35
  120. package/build-module/list-item/hooks/use-merge.mjs.map +2 -2
  121. package/build-module/list-item/hooks/use-multi-select-tab.mjs +59 -0
  122. package/build-module/list-item/hooks/use-multi-select-tab.mjs.map +7 -0
  123. package/build-module/list-item/hooks/use-tab.mjs +44 -0
  124. package/build-module/list-item/hooks/use-tab.mjs.map +7 -0
  125. package/build-module/list-item/index.mjs +0 -17
  126. package/build-module/list-item/index.mjs.map +2 -2
  127. package/build-module/list-item/utils.mjs +140 -0
  128. package/build-module/list-item/utils.mjs.map +7 -0
  129. package/build-module/media-text/index.mjs +0 -50
  130. package/build-module/media-text/index.mjs.map +2 -2
  131. package/build-module/media-text/media-container.mjs +17 -12
  132. package/build-module/media-text/media-container.mjs.map +2 -2
  133. package/build-module/more/index.mjs +0 -18
  134. package/build-module/more/index.mjs.map +2 -2
  135. package/build-module/navigation/constants.mjs +1 -1
  136. package/build-module/navigation/constants.mjs.map +1 -1
  137. package/build-module/navigation-link/block.json +1 -1
  138. package/build-module/navigation-link/deprecated.mjs +48 -0
  139. package/build-module/navigation-link/deprecated.mjs.map +7 -0
  140. package/build-module/navigation-link/index.mjs +7 -75
  141. package/build-module/navigation-link/index.mjs.map +3 -3
  142. package/build-module/navigation-link/variations.mjs +22 -0
  143. package/build-module/navigation-link/variations.mjs.map +7 -0
  144. package/build-module/navigation-submenu/index.mjs +1 -33
  145. package/build-module/navigation-submenu/index.mjs.map +2 -2
  146. package/build-module/paragraph/index.mjs +0 -17
  147. package/build-module/paragraph/index.mjs.map +2 -2
  148. package/build-module/paragraph/use-enter.mjs +8 -4
  149. package/build-module/paragraph/use-enter.mjs.map +2 -2
  150. package/build-module/post-template/edit.mjs +3 -1
  151. package/build-module/post-template/edit.mjs.map +2 -2
  152. package/build-module/preformatted/index.mjs +0 -17
  153. package/build-module/preformatted/index.mjs.map +2 -2
  154. package/build-module/pullquote/index.mjs +0 -24
  155. package/build-module/pullquote/index.mjs.map +2 -2
  156. package/build-module/query/edit/inspector-controls/index.mjs +9 -4
  157. package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
  158. package/build-module/search/index.mjs +0 -31
  159. package/build-module/search/index.mjs.map +2 -2
  160. package/build-module/site-tagline/edit.mjs +13 -19
  161. package/build-module/site-tagline/edit.mjs.map +2 -2
  162. package/build-module/site-title/edit.mjs +14 -20
  163. package/build-module/site-title/edit.mjs.map +2 -2
  164. package/build-module/social-link/index.mjs +0 -31
  165. package/build-module/social-link/index.mjs.map +2 -2
  166. package/build-module/verse/index.mjs +0 -17
  167. package/build-module/verse/index.mjs.map +2 -2
  168. package/build-module/video/index.mjs +0 -40
  169. package/build-module/video/index.mjs.map +2 -2
  170. package/build-module/video/tracks-editor.mjs +3 -5
  171. package/build-module/video/tracks-editor.mjs.map +2 -2
  172. package/build-style/editor-rtl.css +8 -51
  173. package/build-style/editor.css +8 -51
  174. package/build-style/navigation/editor-rtl.css +8 -0
  175. package/build-style/navigation/editor.css +8 -0
  176. package/build-style/style-rtl.css +0 -47
  177. package/build-style/style.css +0 -47
  178. package/build-types/navigation-link/deprecated.d.ts +48 -0
  179. package/build-types/navigation-link/deprecated.d.ts.map +1 -0
  180. package/package.json +42 -43
  181. package/src/accordion/index.php +2 -2
  182. package/src/accordion-item/index.php +1 -1
  183. package/src/audio/edit.jsx +6 -7
  184. package/src/audio/index.js +0 -37
  185. package/src/breadcrumbs/index.php +4 -4
  186. package/src/button/index.js +0 -34
  187. package/src/button/test/get-experimental-label.jsdom.test.js +1 -0
  188. package/src/code/index.js +0 -18
  189. package/src/columns/test/transforms.jsdom.test.js +1 -0
  190. package/src/comment-template/index.php +2 -2
  191. package/src/cover/index.js +0 -39
  192. package/src/cover/test/edit.jsdom.test.js +18 -17
  193. package/src/cover/test/transforms.jsdom.test.js +1 -0
  194. package/src/details/index.js +0 -18
  195. package/src/editor.scss +0 -2
  196. package/src/embed/test/index.jsdom.test.js +5 -1
  197. package/src/file/index.js +1 -43
  198. package/src/footnotes/format.jsx +5 -1
  199. package/src/gallery/dynamic-gallery.jsx +5 -2
  200. package/src/gallery/test/edit.jsdom.test.js +4 -0
  201. package/src/gallery/test/transforms.jsdom.test.js +1 -0
  202. package/src/gallery/test/use-get-new-images.jsdom.test.jsx +1 -0
  203. package/src/group/test/placeholder.jsdom.test.jsx +1 -0
  204. package/src/heading/index.js +1 -22
  205. package/src/heading/index.php +1 -1
  206. package/src/home-link/index.php +2 -2
  207. package/src/html/test/index.jsdom.test.js +9 -0
  208. package/src/html/test/utils.jsdom.test.js +1 -0
  209. package/src/image/image.jsx +1 -4
  210. package/src/image/index.js +0 -80
  211. package/src/image/test/transforms.jsdom.test.js +1 -0
  212. package/src/image/test/use-open-image-media-editor-modal.jsdom.test.js +30 -29
  213. package/src/index.jsx +0 -11
  214. package/src/latest-posts/test/deprecated.jsdom.test.js +1 -0
  215. package/src/list/index.php +1 -1
  216. package/src/list-item/edit.jsx +20 -20
  217. package/src/list-item/hooks/index.js +2 -3
  218. package/src/list-item/hooks/use-enter.js +82 -70
  219. package/src/list-item/hooks/use-merge.js +28 -36
  220. package/src/list-item/hooks/use-multi-select-tab.js +83 -0
  221. package/src/list-item/hooks/use-tab.js +62 -0
  222. package/src/list-item/index.js +0 -18
  223. package/src/list-item/utils.js +236 -0
  224. package/src/media-text/index.js +0 -50
  225. package/src/media-text/media-container.jsx +22 -12
  226. package/src/more/index.js +0 -19
  227. package/src/navigation/constants.js +1 -1
  228. package/src/navigation/edit/test/layout-custom-properties.jsdom.test.js +8 -7
  229. package/src/navigation/edit/test/navigation-menu-selector.jsdom.test.jsx +23 -14
  230. package/src/navigation/edit/test/overlay-template-part-selector.jsdom.test.jsx +22 -20
  231. package/src/navigation/edit/test/responsive-wrapper.jsdom.test.jsx +14 -13
  232. package/src/navigation/edit/test/use-create-overlay.jsdom.test.js +19 -24
  233. package/src/navigation/editor.scss +13 -0
  234. package/src/navigation/index.php +14 -14
  235. package/src/navigation/test/menu-items-to-blocks.jsdom.test.js +3 -2
  236. package/src/navigation/test/use-navigation-menu.jsdom.test.js +7 -4
  237. package/src/navigation/test/view.jsdom.test.js +4 -2
  238. package/src/navigation-link/block.json +1 -1
  239. package/src/navigation-link/deprecated.tsx +58 -0
  240. package/src/navigation-link/{index.jsx → index.js} +5 -77
  241. package/src/navigation-link/index.php +5 -5
  242. package/src/navigation-link/shared/test/controls.jsdom.test.jsx +18 -18
  243. package/src/navigation-link/shared/test/use-enable-link-status-validation.jsdom.test.js +8 -6
  244. package/src/navigation-link/shared/test/use-entity-binding.jsdom.test.js +12 -11
  245. package/src/navigation-link/shared/test/use-handle-link-change.jsdom.test.js +23 -20
  246. package/src/navigation-link/shared/test/use-link-preview.jsdom.test.js +17 -14
  247. package/src/navigation-link/test/__snapshots__/hooks.jsdom.test.js.snap +2 -2
  248. package/src/navigation-link/test/hooks.jsdom.test.js +1 -0
  249. package/src/navigation-link/variations.js +19 -0
  250. package/src/navigation-submenu/index.js +1 -33
  251. package/src/page-list/index.php +10 -10
  252. package/src/page-list/test/convert-to-navigation-links.jsdom.test.js +3 -2
  253. package/src/paragraph/index.js +0 -18
  254. package/src/paragraph/use-enter.js +13 -6
  255. package/src/playlist/test/edit-component.jsdom.test.jsx +31 -30
  256. package/src/playlist/test/edit.jsdom.test.js +1 -0
  257. package/src/playlist/test/transforms.jsdom.test.js +1 -0
  258. package/src/playlist-track/test/edit.jsdom.test.jsx +20 -19
  259. package/src/post-author/index.php +3 -3
  260. package/src/post-author-biography/index.php +3 -3
  261. package/src/post-author-name/index.php +3 -3
  262. package/src/post-comments-link/index.php +4 -4
  263. package/src/post-date/test/edit.jsdom.test.js +1 -0
  264. package/src/post-template/edit.jsx +3 -1
  265. package/src/post-time-to-read/index.php +3 -3
  266. package/src/preformatted/index.js +0 -18
  267. package/src/pullquote/index.js +0 -24
  268. package/src/query/edit/inspector-controls/index.jsx +9 -4
  269. package/src/query/index.php +2 -2
  270. package/src/query/test/utils.jsdom.test.js +1 -0
  271. package/src/quote/test/migrate.jsdom.test.js +1 -0
  272. package/src/read-more/index.php +1 -1
  273. package/src/search/index.js +0 -30
  274. package/src/search/index.php +1 -1
  275. package/src/separator/test/edit.jsdom.test.jsx +5 -4
  276. package/src/site-logo/index.php +1 -1
  277. package/src/site-tagline/edit.jsx +18 -27
  278. package/src/site-title/edit.jsx +20 -27
  279. package/src/social-link/index.js +0 -32
  280. package/src/social-link/index.php +0 -1
  281. package/src/style.scss +0 -1
  282. package/src/table-of-contents/index.php +3 -3
  283. package/src/utils/test/style-state.jsdom.test.js +1 -0
  284. package/src/utils/test/waveform-player-dependency.jsdom.test.js +15 -21
  285. package/src/verse/index.js +0 -18
  286. package/src/video/index.js +0 -40
  287. package/src/video/tracks-editor.jsx +4 -5
  288. package/build/form/block.json +0 -65
  289. package/build/form/deprecated.cjs +0 -111
  290. package/build/form/deprecated.cjs.map +0 -7
  291. package/build/form/edit.cjs +0 -180
  292. package/build/form/edit.cjs.map +0 -7
  293. package/build/form/icons.cjs +0 -33
  294. package/build/form/icons.cjs.map +0 -7
  295. package/build/form/index.cjs +0 -118
  296. package/build/form/index.cjs.map +0 -7
  297. package/build/form/init.cjs +0 -28
  298. package/build/form/init.cjs.map +0 -7
  299. package/build/form/save.cjs +0 -40
  300. package/build/form/save.cjs.map +0 -7
  301. package/build/form/utils.cjs +0 -61
  302. package/build/form/utils.cjs.map +0 -7
  303. package/build/form/variations.cjs +0 -152
  304. package/build/form/variations.cjs.map +0 -7
  305. package/build/form/view.cjs +0 -48
  306. package/build/form/view.cjs.map +0 -7
  307. package/build/form-input/block.json +0 -72
  308. package/build/form-input/deprecated.cjs +0 -252
  309. package/build/form-input/deprecated.cjs.map +0 -7
  310. package/build/form-input/edit.cjs +0 -206
  311. package/build/form-input/edit.cjs.map +0 -7
  312. package/build/form-input/icons.cjs +0 -33
  313. package/build/form-input/icons.cjs.map +0 -7
  314. package/build/form-input/index.cjs +0 -63
  315. package/build/form-input/index.cjs.map +0 -7
  316. package/build/form-input/init.cjs +0 -28
  317. package/build/form-input/init.cjs.map +0 -7
  318. package/build/form-input/save.cjs +0 -88
  319. package/build/form-input/save.cjs.map +0 -7
  320. package/build/form-input/variations.cjs +0 -105
  321. package/build/form-input/variations.cjs.map +0 -7
  322. package/build/form-submission-notification/block.json +0 -19
  323. package/build/form-submission-notification/edit.cjs +0 -71
  324. package/build/form-submission-notification/edit.cjs.map +0 -7
  325. package/build/form-submission-notification/index.cjs +0 -73
  326. package/build/form-submission-notification/index.cjs.map +0 -7
  327. package/build/form-submission-notification/init.cjs +0 -28
  328. package/build/form-submission-notification/init.cjs.map +0 -7
  329. package/build/form-submission-notification/save.cjs +0 -54
  330. package/build/form-submission-notification/save.cjs.map +0 -7
  331. package/build/form-submission-notification/variations.cjs +0 -78
  332. package/build/form-submission-notification/variations.cjs.map +0 -7
  333. package/build/form-submit-button/block.json +0 -15
  334. package/build/form-submit-button/edit.cjs +0 -36
  335. package/build/form-submit-button/edit.cjs.map +0 -7
  336. package/build/form-submit-button/index.cjs +0 -75
  337. package/build/form-submit-button/index.cjs.map +0 -7
  338. package/build/form-submit-button/init.cjs.map +0 -7
  339. package/build/form-submit-button/save.cjs +0 -32
  340. package/build/form-submit-button/save.cjs.map +0 -7
  341. package/build/list-item/hooks/use-indent-list-item.cjs +0 -79
  342. package/build/list-item/hooks/use-indent-list-item.cjs.map +0 -7
  343. package/build/list-item/hooks/use-outdent-list-item.cjs +0 -106
  344. package/build/list-item/hooks/use-outdent-list-item.cjs.map +0 -7
  345. package/build/list-item/hooks/use-space.cjs +0 -83
  346. package/build/list-item/hooks/use-space.cjs.map +0 -7
  347. package/build-module/form/block.json +0 -65
  348. package/build-module/form/deprecated.mjs +0 -96
  349. package/build-module/form/deprecated.mjs.map +0 -7
  350. package/build-module/form/edit.mjs +0 -170
  351. package/build-module/form/edit.mjs.map +0 -7
  352. package/build-module/form/icons.mjs +0 -8
  353. package/build-module/form/icons.mjs.map +0 -7
  354. package/build-module/form/index.mjs +0 -83
  355. package/build-module/form/index.mjs.map +0 -7
  356. package/build-module/form/init.mjs +0 -7
  357. package/build-module/form/init.mjs.map +0 -7
  358. package/build-module/form/save.mjs +0 -19
  359. package/build-module/form/save.mjs.map +0 -7
  360. package/build-module/form/utils.mjs +0 -35
  361. package/build-module/form/utils.mjs.map +0 -7
  362. package/build-module/form/variations.mjs +0 -134
  363. package/build-module/form/variations.mjs.map +0 -7
  364. package/build-module/form/view.mjs +0 -46
  365. package/build-module/form/view.mjs.map +0 -7
  366. package/build-module/form-input/block.json +0 -72
  367. package/build-module/form-input/deprecated.mjs +0 -226
  368. package/build-module/form-input/deprecated.mjs.map +0 -7
  369. package/build-module/form-input/edit.mjs +0 -186
  370. package/build-module/form-input/edit.mjs.map +0 -7
  371. package/build-module/form-input/icons.mjs +0 -8
  372. package/build-module/form-input/icons.mjs.map +0 -7
  373. package/build-module/form-input/index.mjs +0 -25
  374. package/build-module/form-input/index.mjs.map +0 -7
  375. package/build-module/form-input/init.mjs +0 -7
  376. package/build-module/form-input/init.mjs.map +0 -7
  377. package/build-module/form-input/save.mjs +0 -62
  378. package/build-module/form-input/save.mjs.map +0 -7
  379. package/build-module/form-input/variations.mjs +0 -84
  380. package/build-module/form-input/variations.mjs.map +0 -7
  381. package/build-module/form-submission-notification/block.json +0 -19
  382. package/build-module/form-submission-notification/edit.mjs +0 -45
  383. package/build-module/form-submission-notification/edit.mjs.map +0 -7
  384. package/build-module/form-submission-notification/index.mjs +0 -35
  385. package/build-module/form-submission-notification/index.mjs.map +0 -7
  386. package/build-module/form-submission-notification/init.mjs +0 -7
  387. package/build-module/form-submission-notification/init.mjs.map +0 -7
  388. package/build-module/form-submission-notification/save.mjs +0 -23
  389. package/build-module/form-submission-notification/save.mjs.map +0 -7
  390. package/build-module/form-submission-notification/variations.mjs +0 -57
  391. package/build-module/form-submission-notification/variations.mjs.map +0 -7
  392. package/build-module/form-submit-button/block.json +0 -15
  393. package/build-module/form-submit-button/edit.mjs +0 -15
  394. package/build-module/form-submit-button/edit.mjs.map +0 -7
  395. package/build-module/form-submit-button/index.mjs +0 -37
  396. package/build-module/form-submit-button/index.mjs.map +0 -7
  397. package/build-module/form-submit-button/init.mjs +0 -7
  398. package/build-module/form-submit-button/init.mjs.map +0 -7
  399. package/build-module/form-submit-button/save.mjs +0 -11
  400. package/build-module/form-submit-button/save.mjs.map +0 -7
  401. package/build-module/list-item/hooks/use-indent-list-item.mjs +0 -58
  402. package/build-module/list-item/hooks/use-indent-list-item.mjs.map +0 -7
  403. package/build-module/list-item/hooks/use-outdent-list-item.mjs +0 -85
  404. package/build-module/list-item/hooks/use-outdent-list-item.mjs.map +0 -7
  405. package/build-module/list-item/hooks/use-space.mjs +0 -52
  406. package/build-module/list-item/hooks/use-space.mjs.map +0 -7
  407. package/build-style/form-input/editor-rtl.css +0 -19
  408. package/build-style/form-input/editor.css +0 -19
  409. package/build-style/form-input/style-rtl.css +0 -46
  410. package/build-style/form-input/style.css +0 -46
  411. package/build-style/form-submission-notification/editor-rtl.css +0 -30
  412. package/build-style/form-submission-notification/editor.css +0 -30
  413. package/build-style/form-submit-button/style-rtl.css +0 -3
  414. package/build-style/form-submit-button/style.css +0 -3
  415. package/src/form/README.md +0 -90
  416. package/src/form/block.json +0 -65
  417. package/src/form/deprecated.jsx +0 -93
  418. package/src/form/edit.jsx +0 -169
  419. package/src/form/icons.jsx +0 -7
  420. package/src/form/index.js +0 -91
  421. package/src/form/index.php +0 -197
  422. package/src/form/init.js +0 -3
  423. package/src/form/save.jsx +0 -15
  424. package/src/form/utils.js +0 -36
  425. package/src/form/variations.js +0 -133
  426. package/src/form/view.js +0 -54
  427. package/src/form-input/README.md +0 -74
  428. package/src/form-input/block.json +0 -72
  429. package/src/form-input/deprecated.jsx +0 -248
  430. package/src/form-input/edit.jsx +0 -187
  431. package/src/form-input/editor.scss +0 -24
  432. package/src/form-input/icons.jsx +0 -7
  433. package/src/form-input/index.js +0 -22
  434. package/src/form-input/index.php +0 -47
  435. package/src/form-input/init.js +0 -3
  436. package/src/form-input/save.jsx +0 -89
  437. package/src/form-input/style.scss +0 -64
  438. package/src/form-input/variations.js +0 -82
  439. package/src/form-submission-notification/README.md +0 -50
  440. package/src/form-submission-notification/block.json +0 -19
  441. package/src/form-submission-notification/edit.jsx +0 -44
  442. package/src/form-submission-notification/editor.scss +0 -45
  443. package/src/form-submission-notification/index.js +0 -33
  444. package/src/form-submission-notification/index.php +0 -48
  445. package/src/form-submission-notification/init.js +0 -3
  446. package/src/form-submission-notification/save.jsx +0 -18
  447. package/src/form-submission-notification/variations.js +0 -56
  448. package/src/form-submit-button/README.md +0 -54
  449. package/src/form-submit-button/block.json +0 -15
  450. package/src/form-submit-button/edit.jsx +0 -12
  451. package/src/form-submit-button/index.js +0 -35
  452. package/src/form-submit-button/init.js +0 -3
  453. package/src/form-submit-button/save.jsx +0 -10
  454. package/src/form-submit-button/style.scss +0 -3
  455. package/src/list-item/hooks/use-indent-list-item.js +0 -73
  456. package/src/list-item/hooks/use-outdent-list-item.js +0 -100
  457. package/src/list-item/hooks/use-space.js +0 -66
@@ -1,15 +1,11 @@
1
1
  import { __ } from '@wordpress/i18n';
2
2
  import { image as icon } from '@wordpress/icons';
3
- import { privateApis as blocksPrivateApis } from '@wordpress/blocks';
4
3
  import initBlock from '../utils/init-block';
5
4
  import deprecated from './deprecated';
6
5
  import edit from './edit';
7
6
  import metadata from './block.json';
8
7
  import save from './save';
9
8
  import transforms from './transforms';
10
- import { unlock } from '../lock-unlock';
11
-
12
- const { fieldsKey, formKey } = unlock( blocksPrivateApis );
13
9
 
14
10
  const { name } = metadata;
15
11
 
@@ -62,80 +58,4 @@ export const settings = {
62
58
  deprecated,
63
59
  };
64
60
 
65
- if ( window.__experimentalContentOnlyInspectorFields ) {
66
- settings[ fieldsKey ] = [
67
- {
68
- id: 'image',
69
- label: __( 'Image' ),
70
- type: 'media',
71
- Edit: {
72
- control: 'media', // TODO: replace with custom component
73
- allowedTypes: [ 'image' ],
74
- multiple: false,
75
- },
76
- getValue: ( { item } ) => ( {
77
- id: item.id,
78
- url: item.url,
79
- alt: item.alt,
80
- caption: item.caption,
81
- } ),
82
- setValue: ( { value } ) => ( {
83
- id: value.id,
84
- url: value.url,
85
- alt: value.alt,
86
- caption: value.caption,
87
- } ),
88
- },
89
- {
90
- id: 'link',
91
- label: __( 'Link' ),
92
- type: 'url',
93
- Edit: 'link', // TODO: replace with custom component
94
- getValue: ( { item } ) => ( {
95
- url: item.href,
96
- rel: item.rel,
97
- linkTarget: item.linkTarget,
98
- } ),
99
- setValue: ( { value } ) => ( {
100
- href: value.url,
101
- rel: value.rel,
102
- linkTarget: value.linkTarget,
103
- } ),
104
- isVisible: ( item ) => ! item.isDecorative,
105
- },
106
- {
107
- id: 'caption',
108
- label: __( 'Caption' ),
109
- type: 'text',
110
- Edit: 'rich-text', // TODO: replace with custom component
111
- isVisible: ( item ) => ! item.isDecorative,
112
- },
113
- {
114
- id: 'alt',
115
- label: __( 'Alt text' ),
116
- type: 'text',
117
- isVisible: ( item ) => ! item.isDecorative,
118
- },
119
- {
120
- id: 'isDecorative',
121
- label: __( 'Mark as decorative' ),
122
- type: 'boolean',
123
- setValue: ( { value } ) => ( {
124
- isDecorative: value || undefined,
125
- ...( value && {
126
- alt: '',
127
- caption: undefined,
128
- href: undefined,
129
- linkDestination: undefined,
130
- linkTarget: undefined,
131
- rel: undefined,
132
- } ),
133
- } ),
134
- },
135
- ];
136
- settings[ formKey ] = {
137
- fields: [ 'image', 'link', 'caption', 'alt', 'isDecorative' ],
138
- };
139
- }
140
-
141
61
  export const init = () => initBlock( { name, metadata, settings } );
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from 'vitest';
1
2
  import { stripFirstImage } from '../transforms';
2
3
 
3
4
  describe( 'stripFirstImage', () => {
@@ -1,3 +1,4 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
1
2
  import { act, renderHook } from '@testing-library/react';
2
3
  import { useRegistry, useSelect } from '@wordpress/data';
3
4
  import {
@@ -9,22 +10,22 @@ import {
9
10
 
10
11
  const mockOpenMediaEditorModalKey = 'openMediaEditorModal';
11
12
 
12
- jest.mock( '@wordpress/core-data', () => ( {
13
+ vi.mock( import( '@wordpress/core-data' ), () => ( {
13
14
  store: {},
14
15
  } ) );
15
16
 
16
- jest.mock( '@wordpress/data', () => ( {
17
- useRegistry: jest.fn(),
18
- useSelect: jest.fn(),
17
+ vi.mock( import( '@wordpress/data' ), () => ( {
18
+ useRegistry: vi.fn(),
19
+ useSelect: vi.fn(),
19
20
  } ) );
20
21
 
21
- jest.mock( '@wordpress/block-editor', () => ( {
22
+ vi.mock( import( '@wordpress/block-editor' ), () => ( {
22
23
  privateApis: {},
23
24
  store: {},
24
25
  } ) );
25
26
 
26
- jest.mock( '../../lock-unlock', () => ( {
27
- unlock: jest.fn( () => ( {
27
+ vi.mock( import( '../../lock-unlock' ), () => ( {
28
+ unlock: vi.fn( () => ( {
28
29
  openMediaEditorModalKey: 'openMediaEditorModal',
29
30
  } ) ),
30
31
  } ) );
@@ -34,14 +35,14 @@ function createRegistry( {
34
35
  resolveGetEntityRecord = () => undefined,
35
36
  } = {} ) {
36
37
  const actions = {
37
- invalidateResolution: jest.fn(),
38
+ invalidateResolution: vi.fn(),
38
39
  };
39
40
  return {
40
- select: jest.fn( () => ( {
41
+ select: vi.fn( () => ( {
41
42
  getEditedEntityRecord,
42
43
  } ) ),
43
- dispatch: jest.fn( () => actions ),
44
- resolveSelect: jest.fn( () => ( {
44
+ dispatch: vi.fn( () => actions ),
45
+ resolveSelect: vi.fn( () => ( {
45
46
  getEntityRecord: resolveGetEntityRecord,
46
47
  } ) ),
47
48
  actions,
@@ -74,8 +75,8 @@ async function runModalUpdate( {
74
75
  } ) {
75
76
  const registry = createRegistry( registryOptions );
76
77
  useRegistry.mockReturnValue( registry );
77
- const setAttributes = jest.fn();
78
- const openMediaEditorModal = jest.fn();
78
+ const setAttributes = vi.fn();
79
+ const openMediaEditorModal = vi.fn();
79
80
  mockMediaEditorModalSetting( openMediaEditorModal );
80
81
  const { result } = renderHook( () =>
81
82
  useOpenImageMediaEditorModal( {
@@ -151,11 +152,11 @@ function croppedAttachmentRecords( { hasOriginal = true } = {} ) {
151
152
 
152
153
  describe( 'useOpenImageMediaEditorModal', () => {
153
154
  beforeEach( () => {
154
- jest.clearAllMocks();
155
+ vi.clearAllMocks();
155
156
  } );
156
157
 
157
158
  it( 'notifies onUrlChange when the update switches to a new attachment URL', async () => {
158
- const onUrlChange = jest.fn();
159
+ const onUrlChange = vi.fn();
159
160
  await runModalUpdate( {
160
161
  attributes: { id: 1, url: 'original.jpg', alt: '', caption: '' },
161
162
  updatePayload: { id: 2, url: 'updated.jpg' },
@@ -166,7 +167,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
166
167
  } );
167
168
 
168
169
  it( 'does not notify onUrlChange for a same-attachment update', async () => {
169
- const onUrlChange = jest.fn();
170
+ const onUrlChange = vi.fn();
170
171
  await runModalUpdate( {
171
172
  attributes: { id: 1, url: 'original.jpg', alt: '', caption: '' },
172
173
  updatePayload: { id: 1, url: 'original.jpg' },
@@ -176,7 +177,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
176
177
  } );
177
178
 
178
179
  it( 'does not notify onUrlChange when the update carries no URL', async () => {
179
- const onUrlChange = jest.fn();
180
+ const onUrlChange = vi.fn();
180
181
  await runModalUpdate( {
181
182
  attributes: { id: 1, url: 'original.jpg', alt: '', caption: '' },
182
183
  updatePayload: { id: 2 },
@@ -197,7 +198,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
197
198
  alt: '',
198
199
  caption: '',
199
200
  },
200
- setAttributes: jest.fn(),
201
+ setAttributes: vi.fn(),
201
202
  } )
202
203
  );
203
204
 
@@ -210,8 +211,8 @@ describe( 'useOpenImageMediaEditorModal', () => {
210
211
  document.body.append( cropButton, otherButton );
211
212
  const registry = createRegistry();
212
213
  useRegistry.mockReturnValue( registry );
213
- const setAttributes = jest.fn();
214
- const openMediaEditorModal = jest.fn();
214
+ const setAttributes = vi.fn();
215
+ const openMediaEditorModal = vi.fn();
215
216
  mockMediaEditorModalSetting( openMediaEditorModal );
216
217
  const onClose = () => cropButton.focus();
217
218
  const { result } = renderHook( () =>
@@ -294,7 +295,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
294
295
  alt_text: 'Updated alt',
295
296
  caption: { raw: 'Updated caption' },
296
297
  };
297
- const resolveGetEntityRecord = jest
298
+ const resolveGetEntityRecord = vi
298
299
  .fn()
299
300
  .mockResolvedValueOnce( originalAttachment )
300
301
  .mockResolvedValueOnce( updatedAttachment );
@@ -336,7 +337,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
336
337
  alt_text: '',
337
338
  caption: { raw: 'Updated attachment caption' },
338
339
  };
339
- const resolveGetEntityRecord = jest
340
+ const resolveGetEntityRecord = vi
340
341
  .fn()
341
342
  .mockResolvedValueOnce( originalAttachment )
342
343
  .mockResolvedValueOnce( updatedAttachment );
@@ -377,7 +378,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
377
378
  alt_text: '',
378
379
  caption: { raw: 'Updated attachment caption' },
379
380
  };
380
- const resolveGetEntityRecord = jest
381
+ const resolveGetEntityRecord = vi
381
382
  .fn()
382
383
  .mockResolvedValueOnce( originalAttachment )
383
384
  .mockResolvedValueOnce( updatedAttachment );
@@ -448,7 +449,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
448
449
  } );
449
450
 
450
451
  it( 'keeps the selected image size when the edit created a new attachment', async () => {
451
- const onUrlChange = jest.fn();
452
+ const onUrlChange = vi.fn();
452
453
  const { setAttributes } = await runModalUpdate( {
453
454
  attributes: {
454
455
  id: 1,
@@ -581,8 +582,8 @@ describe( 'useOpenImageMediaEditorModal', () => {
581
582
  attachmentId === 2 ? deferredAttachment.promise : undefined,
582
583
  } );
583
584
  useRegistry.mockReturnValue( registry );
584
- const setAttributes = jest.fn();
585
- const openMediaEditorModal = jest.fn();
585
+ const setAttributes = vi.fn();
586
+ const openMediaEditorModal = vi.fn();
586
587
  mockMediaEditorModalSetting( openMediaEditorModal );
587
588
  const { result } = renderHook(
588
589
  ( { attributes } ) =>
@@ -693,7 +694,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
693
694
  } );
694
695
 
695
696
  it( 'syncs metadata from an empty block when the original attachment is not cached', async () => {
696
- const resolveGetEntityRecord = jest
697
+ const resolveGetEntityRecord = vi
697
698
  .fn()
698
699
  .mockResolvedValueOnce( {
699
700
  id: 1,
@@ -815,8 +816,8 @@ describe( 'useOpenImageMediaEditorModal', () => {
815
816
  resolveGetEntityRecord: () => deferredAttachment.promise,
816
817
  } );
817
818
  useRegistry.mockReturnValue( registry );
818
- const setAttributes = jest.fn();
819
- const openMediaEditorModal = jest.fn();
819
+ const setAttributes = vi.fn();
820
+ const openMediaEditorModal = vi.fn();
820
821
  mockMediaEditorModalSetting( openMediaEditorModal );
821
822
  const { result, rerender } = renderHook(
822
823
  ( { attributes } ) =>
package/src/index.jsx CHANGED
@@ -49,10 +49,6 @@ import * as cover from './cover';
49
49
  import * as details from './details';
50
50
  import * as embed from './embed';
51
51
  import * as file from './file';
52
- import * as form from './form';
53
- import * as formInput from './form-input';
54
- import * as formSubmitButton from './form-submit-button';
55
- import * as formSubmissionNotification from './form-submission-notification';
56
52
  import * as gallery from './gallery';
57
53
  import * as group from './group';
58
54
  import * as heading from './heading';
@@ -267,13 +263,6 @@ const getAllBlocks = () => {
267
263
  breadcrumbs,
268
264
  ];
269
265
 
270
- if ( window?.__experimentalEnableFormBlocks ) {
271
- blocks.push( form );
272
- blocks.push( formInput );
273
- blocks.push( formSubmitButton );
274
- blocks.push( formSubmissionNotification );
275
- }
276
-
277
266
  if ( window?.__experimentalEnableBlockExperiments ) {
278
267
  // Blocks added here are only registered when the "Block experiments"
279
268
  // option is enabled in the Gutenberg > Experiments settings page.
@@ -1,3 +1,4 @@
1
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
1
2
  // Load block support registration filters.
2
3
  import '@wordpress/block-editor';
3
4
  import {
@@ -15,7 +15,7 @@
15
15
  * @see https://github.com/WordPress/gutenberg/issues/12420
16
16
  *
17
17
  * @param array $attributes Attributes of the block being rendered.
18
- * @param string $content Content of the block being rendered.
18
+ * @param string $content Content of the block being rendered.
19
19
  *
20
20
  * @return string The content of the block being rendered.
21
21
  */
@@ -14,29 +14,24 @@ import {
14
14
  formatIndent,
15
15
  } from '@wordpress/icons';
16
16
  import { useMergeRefs } from '@wordpress/compose';
17
- import { useSelect } from '@wordpress/data';
17
+ import { useSelect, useRegistry } from '@wordpress/data';
18
18
  import { displayShortcut } from '@wordpress/keycodes';
19
+ import { useEnter, useTab, useMultiSelectTab, useMerge } from './hooks';
19
20
  import {
20
- useEnter,
21
- useSpace,
22
- useIndentListItem,
23
- useOutdentListItem,
24
- useMerge,
25
- } from './hooks';
21
+ indentListItems,
22
+ outdentListItems,
23
+ getIndentTarget,
24
+ getOutdentTarget,
25
+ } from './utils';
26
26
 
27
27
  export function IndentUI( { clientId } ) {
28
- const indentListItem = useIndentListItem( clientId );
29
- const outdentListItem = useOutdentListItem();
28
+ const registry = useRegistry();
30
29
  const { canIndent, canOutdent } = useSelect(
31
30
  ( select ) => {
32
- const { getBlockIndex, getBlockRootClientId, getBlockName } =
33
- select( blockEditorStore );
31
+ const storeSelect = select( blockEditorStore );
34
32
  return {
35
- canIndent: getBlockIndex( clientId ) > 0,
36
- canOutdent:
37
- getBlockName(
38
- getBlockRootClientId( getBlockRootClientId( clientId ) )
39
- ) === 'core/list-item',
33
+ canIndent: !! getIndentTarget( storeSelect, clientId ),
34
+ canOutdent: !! getOutdentTarget( storeSelect, clientId ),
40
35
  };
41
36
  },
42
37
  [ clientId ]
@@ -50,7 +45,7 @@ export function IndentUI( { clientId } ) {
50
45
  shortcut={ displayShortcut.shift( 'Tab' ) }
51
46
  description={ __( 'Outdent list item' ) }
52
47
  disabled={ ! canOutdent }
53
- onClick={ () => outdentListItem() }
48
+ onClick={ () => outdentListItems( registry ) }
54
49
  />
55
50
  <ToolbarButton
56
51
  icon={ isRTL() ? formatIndentRTL : formatIndent }
@@ -58,7 +53,7 @@ export function IndentUI( { clientId } ) {
58
53
  shortcut="Tab"
59
54
  description={ __( 'Indent list item' ) }
60
55
  disabled={ ! canIndent }
61
- onClick={ () => indentListItem() }
56
+ onClick={ () => indentListItems( registry, clientId ) }
62
57
  />
63
58
  </>
64
59
  );
@@ -77,13 +72,18 @@ export default function ListItemEdit( {
77
72
  __unstableDisableDropZone: true,
78
73
  } );
79
74
  const useEnterRef = useEnter( clientId );
80
- const useSpaceRef = useSpace( clientId );
75
+ const useTabRef = useTab();
76
+ const useMultiSelectTabRef = useMultiSelectTab( clientId );
81
77
  const onMerge = useMerge( clientId, mergeBlocks );
82
78
  return (
83
79
  <>
84
80
  <li { ...innerBlocksProps }>
85
81
  <RichText
86
- ref={ useMergeRefs( [ useEnterRef, useSpaceRef ] ) }
82
+ ref={ useMergeRefs( [
83
+ useEnterRef,
84
+ useTabRef,
85
+ useMultiSelectTabRef,
86
+ ] ) }
87
87
  identifier="content"
88
88
  tagName="div"
89
89
  onChange={ ( nextContent ) =>
@@ -1,5 +1,4 @@
1
- export { default as useOutdentListItem } from './use-outdent-list-item';
2
- export { default as useIndentListItem } from './use-indent-list-item';
3
1
  export { default as useEnter } from './use-enter';
4
- export { default as useSpace } from './use-space';
2
+ export { default as useTab } from './use-tab';
3
+ export { default as useMultiSelectTab } from './use-multi-select-tab';
5
4
  export { default as useMerge } from './use-merge';
@@ -5,82 +5,94 @@ import {
5
5
  } from '@wordpress/blocks';
6
6
  import { useRefEffect } from '@wordpress/compose';
7
7
  import { privateApis as richTextPrivateApis } from '@wordpress/rich-text';
8
- import { ENTER } from '@wordpress/keycodes';
9
- import { useSelect, useDispatch } from '@wordpress/data';
8
+ import { useRegistry } from '@wordpress/data';
10
9
  import { store as blockEditorStore } from '@wordpress/block-editor';
11
- import useOutdentListItem from './use-outdent-list-item';
10
+ import { outdentListItems, getOutdentTarget } from '../utils';
12
11
  import { unlock } from '../../lock-unlock';
13
12
 
14
13
  const { subscribeOwnedListener } = unlock( richTextPrivateApis );
15
14
 
16
15
  export default function useEnter( clientId ) {
17
- const { replaceBlocks, selectionChange } = useDispatch( blockEditorStore );
18
- const {
19
- getBlock,
20
- getBlockAttributes,
21
- getBlockRootClientId,
22
- getBlockIndex,
23
- getBlockName,
24
- } = useSelect( blockEditorStore );
25
- const outdentListItem = useOutdentListItem();
26
- return useRefEffect( ( element ) => {
27
- function onKeyDown( event ) {
28
- if ( event.defaultPrevented || event.keyCode !== ENTER ) {
29
- return;
30
- }
31
- const { content } = getBlockAttributes( clientId ) ?? {};
32
- if ( content?.length ) {
33
- return;
34
- }
35
- event.preventDefault();
36
- const canOutdent =
37
- getBlockName(
38
- getBlockRootClientId( getBlockRootClientId( clientId ) )
39
- ) === 'core/list-item';
40
- if ( canOutdent ) {
41
- outdentListItem();
42
- return;
16
+ const registry = useRegistry();
17
+ return useRefEffect(
18
+ ( element ) => {
19
+ function onBeforeInput( event ) {
20
+ if (
21
+ event.defaultPrevented ||
22
+ event.inputType !== 'insertParagraph'
23
+ ) {
24
+ return;
25
+ }
26
+ const select = registry.select( blockEditorStore );
27
+ const {
28
+ getBlock,
29
+ getBlockAttributes,
30
+ getBlockRootClientId,
31
+ getBlockIndex,
32
+ } = select;
33
+ const { replaceBlocks, selectionChange } =
34
+ registry.dispatch( blockEditorStore );
35
+
36
+ const { content } = getBlockAttributes( clientId ) ?? {};
37
+ if ( content?.length ) {
38
+ return;
39
+ }
40
+ event.preventDefault();
41
+ const canOutdent = !! getOutdentTarget( select, clientId );
42
+ if ( canOutdent ) {
43
+ outdentListItems( registry );
44
+ return;
45
+ }
46
+ // Here we are in top level list so we need to split.
47
+ const topParentListBlock = getBlock(
48
+ getBlockRootClientId( clientId )
49
+ );
50
+ const blockIndex = getBlockIndex( clientId );
51
+ const head = cloneBlock( {
52
+ ...topParentListBlock,
53
+ innerBlocks: topParentListBlock.innerBlocks.slice(
54
+ 0,
55
+ blockIndex
56
+ ),
57
+ } );
58
+ const middle = createBlock( getDefaultBlockName() );
59
+ // Last list item might contain a `list` block innerBlock
60
+ // In that case append remaining innerBlocks blocks.
61
+ const after = [
62
+ ...( topParentListBlock.innerBlocks[ blockIndex ]
63
+ .innerBlocks[ 0 ]?.innerBlocks || [] ),
64
+ ...topParentListBlock.innerBlocks.slice( blockIndex + 1 ),
65
+ ];
66
+ const tail = after.length
67
+ ? [
68
+ cloneBlock( {
69
+ ...topParentListBlock,
70
+ innerBlocks: after,
71
+ } ),
72
+ ]
73
+ : [];
74
+ replaceBlocks(
75
+ topParentListBlock.clientId,
76
+ [ head, middle, ...tail ],
77
+ 1
78
+ );
79
+ // We manually change the selection here because we are replacing
80
+ // a different block than the selected one.
81
+ selectionChange( middle.clientId );
43
82
  }
44
- // Here we are in top level list so we need to split.
45
- const topParentListBlock = getBlock(
46
- getBlockRootClientId( clientId )
47
- );
48
- const blockIndex = getBlockIndex( clientId );
49
- const head = cloneBlock( {
50
- ...topParentListBlock,
51
- innerBlocks: topParentListBlock.innerBlocks.slice(
52
- 0,
53
- blockIndex
54
- ),
55
- } );
56
- const middle = createBlock( getDefaultBlockName() );
57
- // Last list item might contain a `list` block innerBlock
58
- // In that case append remaining innerBlocks blocks.
59
- const after = [
60
- ...( topParentListBlock.innerBlocks[ blockIndex ]
61
- .innerBlocks[ 0 ]?.innerBlocks || [] ),
62
- ...topParentListBlock.innerBlocks.slice( blockIndex + 1 ),
63
- ];
64
- const tail = after.length
65
- ? [
66
- cloneBlock( {
67
- ...topParentListBlock,
68
- innerBlocks: after,
69
- } ),
70
- ]
71
- : [];
72
- replaceBlocks(
73
- topParentListBlock.clientId,
74
- [ head, middle, ...tail ],
75
- 1
76
- );
77
- // We manually change the selection here because we are replacing
78
- // a different block than the selected one.
79
- selectionChange( middle.clientId );
80
- }
81
83
 
82
- // Capture phase so we run before writing-flow's ancestor-bubble
83
- // keydown handlers that gate on `event.defaultPrevented`.
84
- return subscribeOwnedListener( element, 'keydown', onKeyDown, true );
85
- }, [] );
84
+ // Enter is handled on beforeinput: moving focus while the
85
+ // keydown is still being handled leaves the iOS keyboard's
86
+ // auto-capitalization stale. Capture phase so we run before
87
+ // writing-flow's ancestor-bubble handler that gates on
88
+ // `event.defaultPrevented`.
89
+ return subscribeOwnedListener(
90
+ element,
91
+ 'beforeinput',
92
+ onBeforeInput,
93
+ true
94
+ );
95
+ },
96
+ [ clientId, registry ]
97
+ );
86
98
  }
@@ -1,46 +1,35 @@
1
- import { useRegistry, useDispatch, useSelect } from '@wordpress/data';
1
+ import { useRegistry } from '@wordpress/data';
2
2
  import { store as blockEditorStore } from '@wordpress/block-editor';
3
3
  import { isUnmodifiedBlock, switchToBlockType } from '@wordpress/blocks';
4
- import useOutdentListItem from './use-outdent-list-item';
4
+ import { outdentListItems, getOutdentTarget } from '../utils';
5
5
 
6
6
  export default function useMerge( clientId, onMerge ) {
7
7
  const registry = useRegistry();
8
- const {
9
- getPreviousBlockClientId,
10
- getNextBlockClientId,
11
- getBlockOrder,
12
- getBlockIndex,
13
- getBlockRootClientId,
14
- getBlockName,
15
- getBlock,
16
- } = useSelect( blockEditorStore );
17
- const { mergeBlocks, moveBlocksToPosition, removeBlock, insertBlocks } =
18
- useDispatch( blockEditorStore );
19
- const outdentListItem = useOutdentListItem();
20
8
 
21
- function getTrailingId( id ) {
22
- const order = getBlockOrder( id );
9
+ return ( forward ) => {
10
+ const select = registry.select( blockEditorStore );
11
+ const {
12
+ getPreviousBlockClientId,
13
+ getNextBlockClientId,
14
+ getBlockOrder,
15
+ getBlockIndex,
16
+ getBlockRootClientId,
17
+ getBlockName,
18
+ getBlock,
19
+ } = select;
20
+ const { mergeBlocks, moveBlocksToPosition, removeBlock, insertBlocks } =
21
+ registry.dispatch( blockEditorStore );
23
22
 
24
- if ( ! order.length ) {
25
- return id;
26
- }
23
+ function getTrailingId( id ) {
24
+ const order = getBlockOrder( id );
27
25
 
28
- return getTrailingId( order[ order.length - 1 ] );
29
- }
26
+ if ( ! order.length ) {
27
+ return id;
28
+ }
30
29
 
31
- function getParentListItemId( id ) {
32
- const listId = getBlockRootClientId( id );
33
- const parentListItemId = getBlockRootClientId( listId );
34
- if ( ! parentListItemId ) {
35
- return;
30
+ return getTrailingId( order[ order.length - 1 ] );
36
31
  }
37
- if ( getBlockName( parentListItemId ) !== 'core/list-item' ) {
38
- return;
39
- }
40
- return parentListItemId;
41
- }
42
32
 
43
- return ( forward ) => {
44
33
  function mergeWithNested( clientIdA, clientIdB ) {
45
34
  registry.batch( () => {
46
35
  // When merging a sub list item with a higher next list item, we
@@ -62,7 +51,7 @@ export default function useMerge( clientId, onMerge ) {
62
51
  clientIdA
63
52
  );
64
53
  } else if (
65
- getParentListItemId( clientIdB ) === clientIdA
54
+ getOutdentTarget( select, clientIdB ) === clientIdA
66
55
  ) {
67
56
  // Merging into the parent item's own line: the
68
57
  // children take the item's place in its list, one
@@ -104,7 +93,7 @@ export default function useMerge( clientId, onMerge ) {
104
93
  while (
105
94
  ! ( nextBlockClientId = getNextBlockClientId( listItemId ) )
106
95
  ) {
107
- const parentLi = getParentListItemId( listItemId );
96
+ const parentLi = getOutdentTarget( select, listItemId );
108
97
  if ( ! parentLi ) {
109
98
  break;
110
99
  }
@@ -158,7 +147,7 @@ export default function useMerge( clientId, onMerge ) {
158
147
  mergeWithNested( trailingId, clientId );
159
148
  return;
160
149
  }
161
- const parentListItemId = getParentListItemId( clientId );
150
+ const parentListItemId = getOutdentTarget( select, clientId );
162
151
  if ( parentListItemId ) {
163
152
  mergeWithNested( parentListItemId, clientId );
164
153
  return;
@@ -170,7 +159,10 @@ export default function useMerge( clientId, onMerge ) {
170
159
  blockOrder.length > 0
171
160
  ) {
172
161
  registry.batch( () => {
173
- outdentListItem( getBlockOrder( blockOrder[ 0 ] ) );
162
+ outdentListItems(
163
+ registry,
164
+ getBlockOrder( blockOrder[ 0 ] )
165
+ );
174
166
  removeBlock( clientId, true );
175
167
  } );
176
168
  } else {