@wordpress/block-library 10.5.2-next.v.202608281122.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 (588) hide show
  1. package/CHANGELOG.md +19 -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/comment-template/edit.cjs.map +1 -1
  11. package/build/cover/index.cjs +0 -38
  12. package/build/cover/index.cjs.map +3 -3
  13. package/build/details/index.cjs +0 -17
  14. package/build/details/index.cjs.map +3 -3
  15. package/build/file/index.cjs +0 -43
  16. package/build/file/index.cjs.map +3 -3
  17. package/build/footnotes/format.cjs +1 -1
  18. package/build/footnotes/format.cjs.map +2 -2
  19. package/build/gallery/dynamic-gallery.cjs +22 -12
  20. package/build/gallery/dynamic-gallery.cjs.map +2 -2
  21. package/build/heading/index.cjs +0 -16
  22. package/build/heading/index.cjs.map +3 -3
  23. package/build/image/image.cjs +7 -5
  24. package/build/image/image.cjs.map +2 -2
  25. package/build/image/index.cjs +0 -81
  26. package/build/image/index.cjs.map +3 -3
  27. package/build/image/use-open-image-media-editor-modal.cjs +81 -14
  28. package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
  29. package/build/index.cjs +0 -10
  30. package/build/index.cjs.map +2 -2
  31. package/build/latest-posts/edit.cjs.map +1 -1
  32. package/build/list-item/edit.cjs +14 -11
  33. package/build/list-item/edit.cjs.map +2 -2
  34. package/build/list-item/hooks/index.cjs +6 -9
  35. package/build/list-item/hooks/index.cjs.map +2 -2
  36. package/build/list-item/hooks/use-enter.cjs +62 -67
  37. package/build/list-item/hooks/use-enter.cjs.map +3 -3
  38. package/build/list-item/hooks/use-merge.cjs +26 -44
  39. package/build/list-item/hooks/use-merge.cjs.map +3 -3
  40. package/build/list-item/hooks/use-multi-select-tab.cjs +80 -0
  41. package/build/list-item/hooks/use-multi-select-tab.cjs.map +7 -0
  42. package/build/list-item/hooks/use-tab.cjs +65 -0
  43. package/build/list-item/hooks/use-tab.cjs.map +7 -0
  44. package/build/list-item/index.cjs +0 -17
  45. package/build/list-item/index.cjs.map +3 -3
  46. package/build/list-item/utils.cjs +169 -0
  47. package/build/list-item/utils.cjs.map +7 -0
  48. package/build/math/block.json +3 -0
  49. package/build/media-text/index.cjs +0 -50
  50. package/build/media-text/index.cjs.map +3 -3
  51. package/build/media-text/media-container.cjs +16 -11
  52. package/build/media-text/media-container.cjs.map +2 -2
  53. package/build/more/index.cjs +0 -18
  54. package/build/more/index.cjs.map +3 -3
  55. package/build/navigation/constants.cjs +1 -1
  56. package/build/navigation/constants.cjs.map +1 -1
  57. package/build/navigation-link/block.json +1 -1
  58. package/build/navigation-link/deprecated.cjs +69 -0
  59. package/build/navigation-link/deprecated.cjs.map +7 -0
  60. package/build/navigation-link/index.cjs +6 -74
  61. package/build/navigation-link/index.cjs.map +4 -4
  62. package/build/{form-submit-button/init.cjs → navigation-link/variations.cjs} +23 -8
  63. package/build/navigation-link/variations.cjs.map +7 -0
  64. package/build/navigation-submenu/index.cjs +0 -32
  65. package/build/navigation-submenu/index.cjs.map +3 -3
  66. package/build/paragraph/index.cjs +0 -17
  67. package/build/paragraph/index.cjs.map +3 -3
  68. package/build/paragraph/use-enter.cjs +8 -4
  69. package/build/paragraph/use-enter.cjs.map +2 -2
  70. package/build/post-template/edit.cjs +3 -1
  71. package/build/post-template/edit.cjs.map +2 -2
  72. package/build/preformatted/index.cjs +0 -17
  73. package/build/preformatted/index.cjs.map +3 -3
  74. package/build/pullquote/index.cjs +0 -24
  75. package/build/pullquote/index.cjs.map +3 -3
  76. package/build/query/edit/inspector-controls/enhanced-pagination-control.cjs +13 -5
  77. package/build/query/edit/inspector-controls/enhanced-pagination-control.cjs.map +2 -2
  78. package/build/query/edit/inspector-controls/index.cjs +9 -4
  79. package/build/query/edit/inspector-controls/index.cjs.map +2 -2
  80. package/build/query/edit/query-content.cjs +30 -9
  81. package/build/query/edit/query-content.cjs.map +3 -3
  82. package/build/query/utils.cjs +11 -4
  83. package/build/query/utils.cjs.map +2 -2
  84. package/build/search/edit.cjs +3 -1
  85. package/build/search/edit.cjs.map +2 -2
  86. package/build/search/index.cjs +0 -31
  87. package/build/search/index.cjs.map +3 -3
  88. package/build/site-tagline/edit.cjs +11 -17
  89. package/build/site-tagline/edit.cjs.map +2 -2
  90. package/build/site-title/edit.cjs +12 -18
  91. package/build/site-title/edit.cjs.map +2 -2
  92. package/build/social-link/index.cjs +0 -31
  93. package/build/social-link/index.cjs.map +3 -3
  94. package/build/verse/index.cjs +0 -17
  95. package/build/verse/index.cjs.map +3 -3
  96. package/build/video/index.cjs +0 -40
  97. package/build/video/index.cjs.map +3 -3
  98. package/build/video/tracks-editor.cjs +2 -3
  99. package/build/video/tracks-editor.cjs.map +3 -3
  100. package/build-module/audio/edit.mjs +5 -5
  101. package/build-module/audio/edit.mjs.map +2 -2
  102. package/build-module/audio/index.mjs +0 -37
  103. package/build-module/audio/index.mjs.map +2 -2
  104. package/build-module/button/index.mjs +0 -34
  105. package/build-module/button/index.mjs.map +2 -2
  106. package/build-module/code/index.mjs +0 -17
  107. package/build-module/code/index.mjs.map +2 -2
  108. package/build-module/comment-template/edit.mjs.map +1 -1
  109. package/build-module/cover/index.mjs +0 -38
  110. package/build-module/cover/index.mjs.map +2 -2
  111. package/build-module/details/index.mjs +0 -17
  112. package/build-module/details/index.mjs.map +2 -2
  113. package/build-module/file/index.mjs +1 -44
  114. package/build-module/file/index.mjs.map +2 -2
  115. package/build-module/footnotes/format.mjs +1 -1
  116. package/build-module/footnotes/format.mjs.map +2 -2
  117. package/build-module/gallery/dynamic-gallery.mjs +23 -13
  118. package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
  119. package/build-module/heading/index.mjs +1 -21
  120. package/build-module/heading/index.mjs.map +2 -2
  121. package/build-module/image/image.mjs +7 -5
  122. package/build-module/image/image.mjs.map +2 -2
  123. package/build-module/image/index.mjs +0 -81
  124. package/build-module/image/index.mjs.map +2 -2
  125. package/build-module/image/use-open-image-media-editor-modal.mjs +84 -14
  126. package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
  127. package/build-module/index.mjs +0 -10
  128. package/build-module/index.mjs.map +2 -2
  129. package/build-module/latest-posts/edit.mjs.map +1 -1
  130. package/build-module/list-item/edit.mjs +20 -18
  131. package/build-module/list-item/edit.mjs.map +2 -2
  132. package/build-module/list-item/hooks/index.mjs +8 -10
  133. package/build-module/list-item/hooks/index.mjs.map +2 -2
  134. package/build-module/list-item/hooks/use-enter.mjs +63 -58
  135. package/build-module/list-item/hooks/use-enter.mjs.map +2 -2
  136. package/build-module/list-item/hooks/use-merge.mjs +27 -35
  137. package/build-module/list-item/hooks/use-merge.mjs.map +2 -2
  138. package/build-module/list-item/hooks/use-multi-select-tab.mjs +59 -0
  139. package/build-module/list-item/hooks/use-multi-select-tab.mjs.map +7 -0
  140. package/build-module/list-item/hooks/use-tab.mjs +44 -0
  141. package/build-module/list-item/hooks/use-tab.mjs.map +7 -0
  142. package/build-module/list-item/index.mjs +0 -17
  143. package/build-module/list-item/index.mjs.map +2 -2
  144. package/build-module/list-item/utils.mjs +140 -0
  145. package/build-module/list-item/utils.mjs.map +7 -0
  146. package/build-module/math/block.json +3 -0
  147. package/build-module/media-text/index.mjs +0 -50
  148. package/build-module/media-text/index.mjs.map +2 -2
  149. package/build-module/media-text/media-container.mjs +17 -12
  150. package/build-module/media-text/media-container.mjs.map +2 -2
  151. package/build-module/more/index.mjs +0 -18
  152. package/build-module/more/index.mjs.map +2 -2
  153. package/build-module/navigation/constants.mjs +1 -1
  154. package/build-module/navigation/constants.mjs.map +1 -1
  155. package/build-module/navigation-link/block.json +1 -1
  156. package/build-module/navigation-link/deprecated.mjs +48 -0
  157. package/build-module/navigation-link/deprecated.mjs.map +7 -0
  158. package/build-module/navigation-link/index.mjs +7 -75
  159. package/build-module/navigation-link/index.mjs.map +3 -3
  160. package/build-module/navigation-link/variations.mjs +22 -0
  161. package/build-module/navigation-link/variations.mjs.map +7 -0
  162. package/build-module/navigation-submenu/index.mjs +1 -33
  163. package/build-module/navigation-submenu/index.mjs.map +2 -2
  164. package/build-module/paragraph/index.mjs +0 -17
  165. package/build-module/paragraph/index.mjs.map +2 -2
  166. package/build-module/paragraph/use-enter.mjs +8 -4
  167. package/build-module/paragraph/use-enter.mjs.map +2 -2
  168. package/build-module/post-template/edit.mjs +3 -1
  169. package/build-module/post-template/edit.mjs.map +2 -2
  170. package/build-module/preformatted/index.mjs +0 -17
  171. package/build-module/preformatted/index.mjs.map +2 -2
  172. package/build-module/pullquote/index.mjs +0 -24
  173. package/build-module/pullquote/index.mjs.map +2 -2
  174. package/build-module/query/edit/inspector-controls/enhanced-pagination-control.mjs +14 -6
  175. package/build-module/query/edit/inspector-controls/enhanced-pagination-control.mjs.map +2 -2
  176. package/build-module/query/edit/inspector-controls/index.mjs +9 -4
  177. package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
  178. package/build-module/query/edit/query-content.mjs +32 -11
  179. package/build-module/query/edit/query-content.mjs.map +2 -2
  180. package/build-module/query/utils.mjs +10 -7
  181. package/build-module/query/utils.mjs.map +2 -2
  182. package/build-module/search/edit.mjs +4 -2
  183. package/build-module/search/edit.mjs.map +2 -2
  184. package/build-module/search/index.mjs +0 -31
  185. package/build-module/search/index.mjs.map +2 -2
  186. package/build-module/site-tagline/edit.mjs +13 -19
  187. package/build-module/site-tagline/edit.mjs.map +2 -2
  188. package/build-module/site-title/edit.mjs +14 -20
  189. package/build-module/site-title/edit.mjs.map +2 -2
  190. package/build-module/social-link/index.mjs +0 -31
  191. package/build-module/social-link/index.mjs.map +2 -2
  192. package/build-module/verse/index.mjs +0 -17
  193. package/build-module/verse/index.mjs.map +2 -2
  194. package/build-module/video/index.mjs +0 -40
  195. package/build-module/video/index.mjs.map +2 -2
  196. package/build-module/video/tracks-editor.mjs +3 -5
  197. package/build-module/video/tracks-editor.mjs.map +2 -2
  198. package/build-style/columns/style-rtl.css +1 -1
  199. package/build-style/columns/style.css +1 -1
  200. package/build-style/comment-template/style-rtl.css +0 -1
  201. package/build-style/comment-template/style.css +0 -1
  202. package/build-style/cover/style-rtl.css +1 -2
  203. package/build-style/cover/style.css +1 -2
  204. package/build-style/editor-rtl.css +20 -81
  205. package/build-style/editor.css +20 -81
  206. package/build-style/gallery/style-rtl.css +2 -4
  207. package/build-style/gallery/style.css +2 -4
  208. package/build-style/group/theme-rtl.css +1 -1
  209. package/build-style/group/theme.css +1 -1
  210. package/build-style/heading/style-rtl.css +1 -1
  211. package/build-style/heading/style.css +1 -1
  212. package/build-style/icon/style-rtl.css +3 -0
  213. package/build-style/icon/style.css +3 -0
  214. package/build-style/image/editor-rtl.css +0 -1
  215. package/build-style/image/editor.css +0 -1
  216. package/build-style/list/style-rtl.css +1 -1
  217. package/build-style/list/style.css +1 -1
  218. package/build-style/media-text/style-rtl.css +2 -3
  219. package/build-style/media-text/style.css +2 -3
  220. package/build-style/navigation/editor-rtl.css +8 -0
  221. package/build-style/navigation/editor.css +8 -0
  222. package/build-style/paragraph/style-rtl.css +1 -1
  223. package/build-style/paragraph/style.css +1 -1
  224. package/build-style/playlist/style-rtl.css +1 -2
  225. package/build-style/playlist/style.css +1 -2
  226. package/build-style/playlist-track/style-rtl.css +1 -2
  227. package/build-style/playlist-track/style.css +1 -2
  228. package/build-style/preformatted/style-rtl.css +1 -1
  229. package/build-style/preformatted/style.css +1 -1
  230. package/build-style/query/editor-rtl.css +5 -15
  231. package/build-style/query/editor.css +5 -15
  232. package/build-style/read-more/style-rtl.css +0 -1
  233. package/build-style/read-more/style.css +0 -1
  234. package/build-style/reset-rtl.css +1 -3
  235. package/build-style/reset.css +1 -3
  236. package/build-style/search/style-rtl.css +1 -3
  237. package/build-style/search/style.css +1 -3
  238. package/build-style/site-logo/editor-rtl.css +1 -2
  239. package/build-style/site-logo/editor.css +1 -2
  240. package/build-style/style-rtl.css +18 -77
  241. package/build-style/style.css +18 -77
  242. package/build-style/tab-list/style-rtl.css +1 -3
  243. package/build-style/tab-list/style.css +1 -3
  244. package/build-style/template-part/editor-rtl.css +4 -8
  245. package/build-style/template-part/editor.css +4 -8
  246. package/build-style/template-part/theme-rtl.css +1 -1
  247. package/build-style/template-part/theme.css +1 -1
  248. package/build-style/theme-rtl.css +2 -2
  249. package/build-style/theme.css +2 -2
  250. package/build-style/video/style-rtl.css +1 -2
  251. package/build-style/video/style.css +1 -2
  252. package/build-types/navigation-link/deprecated.d.ts +48 -0
  253. package/build-types/navigation-link/deprecated.d.ts.map +1 -0
  254. package/package.json +43 -43
  255. package/src/accordion/index.php +2 -2
  256. package/src/accordion-item/index.php +1 -1
  257. package/src/audio/edit.jsx +6 -7
  258. package/src/audio/index.js +0 -37
  259. package/src/breadcrumbs/index.php +4 -4
  260. package/src/button/index.js +0 -34
  261. package/src/button/style.scss +16 -15
  262. package/src/button/test/{get-experimental-label.js → get-experimental-label.jsdom.test.js} +1 -0
  263. package/src/button/test/get-updated-link-attributes.js +1 -0
  264. package/src/button/test/utils.js +1 -0
  265. package/src/categories/index.php +4 -0
  266. package/src/code/index.js +0 -18
  267. package/src/code/test/utils.js +1 -0
  268. package/src/columns/style.scss +2 -1
  269. package/src/columns/test/{transforms.js → transforms.jsdom.test.js} +1 -0
  270. package/src/columns/test/utils.js +1 -0
  271. package/src/comment-template/edit.jsx +1 -1
  272. package/src/comment-template/index.php +2 -2
  273. package/src/comment-template/test/index.js +1 -0
  274. package/src/common.scss +51 -50
  275. package/src/cover/README.md +37 -0
  276. package/src/cover/index.js +0 -39
  277. package/src/cover/style.scss +3 -3
  278. package/src/cover/test/{edit.js → edit.jsdom.test.js} +18 -17
  279. package/src/cover/test/{transforms.js → transforms.jsdom.test.js} +1 -0
  280. package/src/details/index.js +0 -18
  281. package/src/editor.scss +0 -2
  282. package/src/embed/editor.scss +1 -0
  283. package/src/embed/test/{index.js → index.jsdom.test.js} +5 -1
  284. package/src/file/index.js +1 -43
  285. package/src/footnotes/format.jsx +5 -1
  286. package/src/gallery/dynamic-gallery.jsx +31 -4
  287. package/src/gallery/test/dynamic-source.js +1 -0
  288. package/src/gallery/test/{edit.js → edit.jsdom.test.js} +4 -0
  289. package/src/gallery/test/responsive-styles.js +1 -0
  290. package/src/gallery/test/shared.js +1 -0
  291. package/src/gallery/test/{transforms.js → transforms.jsdom.test.js} +1 -0
  292. package/src/gallery/test/{use-get-new-images.jsx → use-get-new-images.jsdom.test.jsx} +1 -0
  293. package/src/gallery/test/variations.js +1 -0
  294. package/src/group/test/{placeholder.jsx → placeholder.jsdom.test.jsx} +1 -0
  295. package/src/group/theme.scss +1 -1
  296. package/src/heading/index.js +1 -22
  297. package/src/heading/index.php +1 -1
  298. package/src/heading/style.scss +1 -1
  299. package/src/heading/test/shared.js +1 -0
  300. package/src/home-link/index.php +2 -2
  301. package/src/html/test/{index.js → index.jsdom.test.js} +9 -0
  302. package/src/html/test/{utils.js → utils.jsdom.test.js} +1 -0
  303. package/src/icon/index.php +18 -6
  304. package/src/icon/style.scss +7 -0
  305. package/src/image/image.jsx +18 -11
  306. package/src/image/index.js +0 -80
  307. package/src/image/test/{transforms.js → transforms.jsdom.test.js} +1 -0
  308. package/src/image/test/{use-open-image-media-editor-modal.js → use-open-image-media-editor-modal.jsdom.test.js} +343 -28
  309. package/src/image/use-open-image-media-editor-modal.js +184 -21
  310. package/src/index.jsx +0 -11
  311. package/src/latest-posts/edit.jsx +1 -1
  312. package/src/latest-posts/test/{deprecated.js → deprecated.jsdom.test.js} +1 -0
  313. package/src/list/index.php +1 -1
  314. package/src/list/style.scss +1 -1
  315. package/src/list-item/edit.jsx +20 -20
  316. package/src/list-item/hooks/index.js +2 -3
  317. package/src/list-item/hooks/use-enter.js +82 -70
  318. package/src/list-item/hooks/use-merge.js +28 -36
  319. package/src/list-item/hooks/use-multi-select-tab.js +83 -0
  320. package/src/list-item/hooks/use-tab.js +62 -0
  321. package/src/list-item/index.js +0 -18
  322. package/src/list-item/utils.js +236 -0
  323. package/src/math/README.md +2 -0
  324. package/src/math/block.json +3 -0
  325. package/src/media-text/index.js +0 -50
  326. package/src/media-text/media-container.jsx +22 -12
  327. package/src/media-text/style.scss +2 -1
  328. package/src/media-text/test/image-fill.js +1 -0
  329. package/src/more/index.js +0 -19
  330. package/src/navigation/constants.js +1 -1
  331. package/src/navigation/edit/test/are-blocks-dirty.js +1 -0
  332. package/src/navigation/edit/test/{layout-custom-properties.js → layout-custom-properties.jsdom.test.js} +8 -7
  333. package/src/navigation/edit/test/{navigation-menu-selector.jsx → navigation-menu-selector.jsdom.test.jsx} +23 -14
  334. package/src/navigation/edit/test/{overlay-template-part-selector.jsx → overlay-template-part-selector.jsdom.test.jsx} +22 -20
  335. package/src/navigation/edit/test/{responsive-wrapper.jsx → responsive-wrapper.jsdom.test.jsx} +14 -13
  336. package/src/navigation/edit/test/{use-create-overlay.js → use-create-overlay.jsdom.test.js} +19 -24
  337. package/src/navigation/edit/test/utils.js +1 -0
  338. package/src/navigation/editor.scss +13 -0
  339. package/src/navigation/index.php +14 -14
  340. package/src/navigation/test/{menu-items-to-blocks.js → menu-items-to-blocks.jsdom.test.js} +3 -2
  341. package/src/navigation/test/{use-navigation-menu.js → use-navigation-menu.jsdom.test.js} +7 -4
  342. package/src/navigation/test/{view.js → view.jsdom.test.js} +4 -2
  343. package/src/navigation-link/block.json +1 -1
  344. package/src/navigation-link/deprecated.tsx +58 -0
  345. package/src/navigation-link/{index.jsx → index.js} +5 -77
  346. package/src/navigation-link/index.php +5 -5
  347. package/src/navigation-link/shared/test/{controls.jsx → controls.jsdom.test.jsx} +18 -18
  348. package/src/navigation-link/shared/test/update-attributes.test.js +52 -51
  349. package/src/navigation-link/shared/test/{use-enable-link-status-validation.test.js → use-enable-link-status-validation.jsdom.test.js} +8 -6
  350. package/src/navigation-link/shared/test/{use-entity-binding.js → use-entity-binding.jsdom.test.js} +12 -11
  351. package/src/navigation-link/shared/test/{use-handle-link-change.test.js → use-handle-link-change.jsdom.test.js} +23 -20
  352. package/src/navigation-link/shared/test/{use-link-preview.test.js → use-link-preview.jsdom.test.js} +17 -14
  353. package/src/navigation-link/test/__snapshots__/{hooks.js.snap → hooks.jsdom.test.js.snap} +23 -6
  354. package/src/navigation-link/test/block-labelling.js +1 -0
  355. package/src/navigation-link/test/{hooks.js → hooks.jsdom.test.js} +1 -0
  356. package/src/navigation-link/variations.js +19 -0
  357. package/src/navigation-submenu/index.js +1 -33
  358. package/src/page-list/index.php +10 -10
  359. package/src/page-list/test/{convert-to-navigation-links.js → convert-to-navigation-links.jsdom.test.js} +3 -2
  360. package/src/paragraph/index.js +0 -18
  361. package/src/paragraph/style.scss +1 -1
  362. package/src/paragraph/use-enter.js +13 -6
  363. package/src/pattern/test/index.js +1 -0
  364. package/src/playlist/test/{edit-component.jsx → edit-component.jsdom.test.jsx} +31 -30
  365. package/src/playlist/test/{edit.js → edit.jsdom.test.js} +1 -0
  366. package/src/playlist/test/{transforms.js → transforms.jsdom.test.js} +1 -0
  367. package/src/playlist-track/test/{edit.jsx → edit.jsdom.test.jsx} +20 -19
  368. package/src/post-author/index.php +3 -3
  369. package/src/post-author-biography/index.php +3 -3
  370. package/src/post-author-name/index.php +3 -3
  371. package/src/post-comments-link/index.php +4 -4
  372. package/src/post-date/test/{edit.js → edit.jsdom.test.js} +1 -0
  373. package/src/post-template/edit.jsx +3 -1
  374. package/src/post-time-to-read/index.php +3 -3
  375. package/src/post-title/style.scss +1 -0
  376. package/src/preformatted/index.js +0 -18
  377. package/src/preformatted/style.scss +1 -1
  378. package/src/pullquote/index.js +0 -24
  379. package/src/query/edit/inspector-controls/enhanced-pagination-control.jsx +13 -6
  380. package/src/query/edit/inspector-controls/index.jsx +9 -4
  381. package/src/query/edit/query-content.jsx +31 -8
  382. package/src/query/editor.scss +1 -7
  383. package/src/query/index.php +2 -2
  384. package/src/query/test/{utils.js → utils.jsdom.test.js} +1 -0
  385. package/src/query/utils.js +15 -11
  386. package/src/quote/test/{migrate.js → migrate.jsdom.test.js} +1 -0
  387. package/src/read-more/index.php +1 -1
  388. package/src/search/edit.jsx +12 -2
  389. package/src/search/index.js +0 -30
  390. package/src/search/index.php +1 -1
  391. package/src/separator/test/{edit.jsx → edit.jsdom.test.jsx} +5 -4
  392. package/src/site-logo/index.php +1 -1
  393. package/src/site-tagline/edit.jsx +18 -27
  394. package/src/site-title/edit.jsx +20 -27
  395. package/src/social-link/index.js +0 -32
  396. package/src/social-link/index.php +0 -1
  397. package/src/style.scss +0 -1
  398. package/src/table/editor.scss +1 -0
  399. package/src/table/style.scss +2 -0
  400. package/src/table/test/state.js +1 -0
  401. package/src/table/test/utils.js +1 -0
  402. package/src/table-of-contents/index.php +3 -3
  403. package/src/template-part/theme.scss +1 -1
  404. package/src/utils/test/search-patterns.js +1 -0
  405. package/src/utils/test/{style-state.js → style-state.jsdom.test.js} +1 -0
  406. package/src/utils/test/{waveform-player-dependency.js → waveform-player-dependency.jsdom.test.js} +15 -21
  407. package/src/verse/index.js +0 -18
  408. package/src/verse/style.scss +1 -0
  409. package/src/video/index.js +0 -40
  410. package/src/video/test/variations.js +1 -0
  411. package/src/video/tracks-editor.jsx +4 -5
  412. package/build/form/block.json +0 -65
  413. package/build/form/deprecated.cjs +0 -111
  414. package/build/form/deprecated.cjs.map +0 -7
  415. package/build/form/edit.cjs +0 -180
  416. package/build/form/edit.cjs.map +0 -7
  417. package/build/form/icons.cjs +0 -33
  418. package/build/form/icons.cjs.map +0 -7
  419. package/build/form/index.cjs +0 -118
  420. package/build/form/index.cjs.map +0 -7
  421. package/build/form/init.cjs +0 -28
  422. package/build/form/init.cjs.map +0 -7
  423. package/build/form/save.cjs +0 -40
  424. package/build/form/save.cjs.map +0 -7
  425. package/build/form/utils.cjs +0 -61
  426. package/build/form/utils.cjs.map +0 -7
  427. package/build/form/variations.cjs +0 -152
  428. package/build/form/variations.cjs.map +0 -7
  429. package/build/form/view.cjs +0 -48
  430. package/build/form/view.cjs.map +0 -7
  431. package/build/form-input/block.json +0 -72
  432. package/build/form-input/deprecated.cjs +0 -252
  433. package/build/form-input/deprecated.cjs.map +0 -7
  434. package/build/form-input/edit.cjs +0 -206
  435. package/build/form-input/edit.cjs.map +0 -7
  436. package/build/form-input/icons.cjs +0 -33
  437. package/build/form-input/icons.cjs.map +0 -7
  438. package/build/form-input/index.cjs +0 -63
  439. package/build/form-input/index.cjs.map +0 -7
  440. package/build/form-input/init.cjs +0 -28
  441. package/build/form-input/init.cjs.map +0 -7
  442. package/build/form-input/save.cjs +0 -88
  443. package/build/form-input/save.cjs.map +0 -7
  444. package/build/form-input/variations.cjs +0 -105
  445. package/build/form-input/variations.cjs.map +0 -7
  446. package/build/form-submission-notification/block.json +0 -19
  447. package/build/form-submission-notification/edit.cjs +0 -71
  448. package/build/form-submission-notification/edit.cjs.map +0 -7
  449. package/build/form-submission-notification/index.cjs +0 -73
  450. package/build/form-submission-notification/index.cjs.map +0 -7
  451. package/build/form-submission-notification/init.cjs +0 -28
  452. package/build/form-submission-notification/init.cjs.map +0 -7
  453. package/build/form-submission-notification/save.cjs +0 -54
  454. package/build/form-submission-notification/save.cjs.map +0 -7
  455. package/build/form-submission-notification/variations.cjs +0 -78
  456. package/build/form-submission-notification/variations.cjs.map +0 -7
  457. package/build/form-submit-button/block.json +0 -15
  458. package/build/form-submit-button/edit.cjs +0 -36
  459. package/build/form-submit-button/edit.cjs.map +0 -7
  460. package/build/form-submit-button/index.cjs +0 -75
  461. package/build/form-submit-button/index.cjs.map +0 -7
  462. package/build/form-submit-button/init.cjs.map +0 -7
  463. package/build/form-submit-button/save.cjs +0 -32
  464. package/build/form-submit-button/save.cjs.map +0 -7
  465. package/build/list-item/hooks/use-indent-list-item.cjs +0 -79
  466. package/build/list-item/hooks/use-indent-list-item.cjs.map +0 -7
  467. package/build/list-item/hooks/use-outdent-list-item.cjs +0 -106
  468. package/build/list-item/hooks/use-outdent-list-item.cjs.map +0 -7
  469. package/build/list-item/hooks/use-space.cjs +0 -83
  470. package/build/list-item/hooks/use-space.cjs.map +0 -7
  471. package/build/query/edit/enhanced-pagination-modal.cjs +0 -89
  472. package/build/query/edit/enhanced-pagination-modal.cjs.map +0 -7
  473. package/build-module/form/block.json +0 -65
  474. package/build-module/form/deprecated.mjs +0 -96
  475. package/build-module/form/deprecated.mjs.map +0 -7
  476. package/build-module/form/edit.mjs +0 -170
  477. package/build-module/form/edit.mjs.map +0 -7
  478. package/build-module/form/icons.mjs +0 -8
  479. package/build-module/form/icons.mjs.map +0 -7
  480. package/build-module/form/index.mjs +0 -83
  481. package/build-module/form/index.mjs.map +0 -7
  482. package/build-module/form/init.mjs +0 -7
  483. package/build-module/form/init.mjs.map +0 -7
  484. package/build-module/form/save.mjs +0 -19
  485. package/build-module/form/save.mjs.map +0 -7
  486. package/build-module/form/utils.mjs +0 -35
  487. package/build-module/form/utils.mjs.map +0 -7
  488. package/build-module/form/variations.mjs +0 -134
  489. package/build-module/form/variations.mjs.map +0 -7
  490. package/build-module/form/view.mjs +0 -46
  491. package/build-module/form/view.mjs.map +0 -7
  492. package/build-module/form-input/block.json +0 -72
  493. package/build-module/form-input/deprecated.mjs +0 -226
  494. package/build-module/form-input/deprecated.mjs.map +0 -7
  495. package/build-module/form-input/edit.mjs +0 -186
  496. package/build-module/form-input/edit.mjs.map +0 -7
  497. package/build-module/form-input/icons.mjs +0 -8
  498. package/build-module/form-input/icons.mjs.map +0 -7
  499. package/build-module/form-input/index.mjs +0 -25
  500. package/build-module/form-input/index.mjs.map +0 -7
  501. package/build-module/form-input/init.mjs +0 -7
  502. package/build-module/form-input/init.mjs.map +0 -7
  503. package/build-module/form-input/save.mjs +0 -62
  504. package/build-module/form-input/save.mjs.map +0 -7
  505. package/build-module/form-input/variations.mjs +0 -84
  506. package/build-module/form-input/variations.mjs.map +0 -7
  507. package/build-module/form-submission-notification/block.json +0 -19
  508. package/build-module/form-submission-notification/edit.mjs +0 -45
  509. package/build-module/form-submission-notification/edit.mjs.map +0 -7
  510. package/build-module/form-submission-notification/index.mjs +0 -35
  511. package/build-module/form-submission-notification/index.mjs.map +0 -7
  512. package/build-module/form-submission-notification/init.mjs +0 -7
  513. package/build-module/form-submission-notification/init.mjs.map +0 -7
  514. package/build-module/form-submission-notification/save.mjs +0 -23
  515. package/build-module/form-submission-notification/save.mjs.map +0 -7
  516. package/build-module/form-submission-notification/variations.mjs +0 -57
  517. package/build-module/form-submission-notification/variations.mjs.map +0 -7
  518. package/build-module/form-submit-button/block.json +0 -15
  519. package/build-module/form-submit-button/edit.mjs +0 -15
  520. package/build-module/form-submit-button/edit.mjs.map +0 -7
  521. package/build-module/form-submit-button/index.mjs +0 -37
  522. package/build-module/form-submit-button/index.mjs.map +0 -7
  523. package/build-module/form-submit-button/init.mjs +0 -7
  524. package/build-module/form-submit-button/init.mjs.map +0 -7
  525. package/build-module/form-submit-button/save.mjs +0 -11
  526. package/build-module/form-submit-button/save.mjs.map +0 -7
  527. package/build-module/list-item/hooks/use-indent-list-item.mjs +0 -58
  528. package/build-module/list-item/hooks/use-indent-list-item.mjs.map +0 -7
  529. package/build-module/list-item/hooks/use-outdent-list-item.mjs +0 -85
  530. package/build-module/list-item/hooks/use-outdent-list-item.mjs.map +0 -7
  531. package/build-module/list-item/hooks/use-space.mjs +0 -52
  532. package/build-module/list-item/hooks/use-space.mjs.map +0 -7
  533. package/build-module/query/edit/enhanced-pagination-modal.mjs +0 -72
  534. package/build-module/query/edit/enhanced-pagination-modal.mjs.map +0 -7
  535. package/build-style/form-input/editor-rtl.css +0 -19
  536. package/build-style/form-input/editor.css +0 -19
  537. package/build-style/form-input/style-rtl.css +0 -48
  538. package/build-style/form-input/style.css +0 -48
  539. package/build-style/form-submission-notification/editor-rtl.css +0 -30
  540. package/build-style/form-submission-notification/editor.css +0 -30
  541. package/build-style/form-submit-button/style-rtl.css +0 -3
  542. package/build-style/form-submit-button/style.css +0 -3
  543. package/src/form/README.md +0 -90
  544. package/src/form/block.json +0 -65
  545. package/src/form/deprecated.jsx +0 -93
  546. package/src/form/edit.jsx +0 -169
  547. package/src/form/icons.jsx +0 -7
  548. package/src/form/index.js +0 -91
  549. package/src/form/index.php +0 -197
  550. package/src/form/init.js +0 -3
  551. package/src/form/save.jsx +0 -15
  552. package/src/form/utils.js +0 -36
  553. package/src/form/variations.js +0 -133
  554. package/src/form/view.js +0 -54
  555. package/src/form-input/README.md +0 -74
  556. package/src/form-input/block.json +0 -72
  557. package/src/form-input/deprecated.jsx +0 -248
  558. package/src/form-input/edit.jsx +0 -187
  559. package/src/form-input/editor.scss +0 -24
  560. package/src/form-input/icons.jsx +0 -7
  561. package/src/form-input/index.js +0 -22
  562. package/src/form-input/index.php +0 -47
  563. package/src/form-input/init.js +0 -3
  564. package/src/form-input/save.jsx +0 -89
  565. package/src/form-input/style.scss +0 -64
  566. package/src/form-input/variations.js +0 -82
  567. package/src/form-submission-notification/README.md +0 -50
  568. package/src/form-submission-notification/block.json +0 -19
  569. package/src/form-submission-notification/edit.jsx +0 -44
  570. package/src/form-submission-notification/editor.scss +0 -45
  571. package/src/form-submission-notification/index.js +0 -33
  572. package/src/form-submission-notification/index.php +0 -48
  573. package/src/form-submission-notification/init.js +0 -3
  574. package/src/form-submission-notification/save.jsx +0 -18
  575. package/src/form-submission-notification/variations.js +0 -56
  576. package/src/form-submit-button/README.md +0 -54
  577. package/src/form-submit-button/block.json +0 -15
  578. package/src/form-submit-button/edit.jsx +0 -12
  579. package/src/form-submit-button/index.js +0 -35
  580. package/src/form-submit-button/init.js +0 -3
  581. package/src/form-submit-button/save.jsx +0 -10
  582. package/src/form-submit-button/style.scss +0 -3
  583. package/src/list-item/hooks/use-indent-list-item.js +0 -73
  584. package/src/list-item/hooks/use-outdent-list-item.js +0 -100
  585. package/src/list-item/hooks/use-space.js +0 -66
  586. package/src/query/edit/enhanced-pagination-modal.jsx +0 -77
  587. /package/src/utils/test/{waveform-player.jsx → waveform-player.jsdom.test.jsx} +0 -0
  588. /package/src/utils/test/{waveform-utils.js → waveform-utils.jsdom.test.js} +0 -0
@@ -6,70 +6,75 @@ import {
6
6
  } from "@wordpress/blocks";
7
7
  import { useRefEffect } from "@wordpress/compose";
8
8
  import { privateApis as richTextPrivateApis } from "@wordpress/rich-text";
9
- import { ENTER } from "@wordpress/keycodes";
10
- import { useSelect, useDispatch } from "@wordpress/data";
9
+ import { useRegistry } from "@wordpress/data";
11
10
  import { store as blockEditorStore } from "@wordpress/block-editor";
12
- import useOutdentListItem from "./use-outdent-list-item.mjs";
11
+ import { outdentListItems, getOutdentTarget } from "../utils.mjs";
13
12
  import { unlock } from "../../lock-unlock.mjs";
14
13
  var { subscribeOwnedListener } = unlock(richTextPrivateApis);
15
14
  function useEnter(clientId) {
16
- const { replaceBlocks, selectionChange } = useDispatch(blockEditorStore);
17
- const {
18
- getBlock,
19
- getBlockAttributes,
20
- getBlockRootClientId,
21
- getBlockIndex,
22
- getBlockName
23
- } = useSelect(blockEditorStore);
24
- const outdentListItem = useOutdentListItem();
25
- return useRefEffect((element) => {
26
- function onKeyDown(event) {
27
- if (event.defaultPrevented || event.keyCode !== ENTER) {
28
- return;
29
- }
30
- const { content } = getBlockAttributes(clientId) ?? {};
31
- if (content?.length) {
32
- return;
33
- }
34
- event.preventDefault();
35
- const canOutdent = getBlockName(
36
- getBlockRootClientId(getBlockRootClientId(clientId))
37
- ) === "core/list-item";
38
- if (canOutdent) {
39
- outdentListItem();
40
- return;
41
- }
42
- const topParentListBlock = getBlock(
43
- getBlockRootClientId(clientId)
44
- );
45
- const blockIndex = getBlockIndex(clientId);
46
- const head = cloneBlock({
47
- ...topParentListBlock,
48
- innerBlocks: topParentListBlock.innerBlocks.slice(
49
- 0,
50
- blockIndex
51
- )
52
- });
53
- const middle = createBlock(getDefaultBlockName());
54
- const after = [
55
- ...topParentListBlock.innerBlocks[blockIndex].innerBlocks[0]?.innerBlocks || [],
56
- ...topParentListBlock.innerBlocks.slice(blockIndex + 1)
57
- ];
58
- const tail = after.length ? [
59
- cloneBlock({
15
+ const registry = useRegistry();
16
+ return useRefEffect(
17
+ (element) => {
18
+ function onBeforeInput(event) {
19
+ if (event.defaultPrevented || event.inputType !== "insertParagraph") {
20
+ return;
21
+ }
22
+ const select = registry.select(blockEditorStore);
23
+ const {
24
+ getBlock,
25
+ getBlockAttributes,
26
+ getBlockRootClientId,
27
+ getBlockIndex
28
+ } = select;
29
+ const { replaceBlocks, selectionChange } = registry.dispatch(blockEditorStore);
30
+ const { content } = getBlockAttributes(clientId) ?? {};
31
+ if (content?.length) {
32
+ return;
33
+ }
34
+ event.preventDefault();
35
+ const canOutdent = !!getOutdentTarget(select, clientId);
36
+ if (canOutdent) {
37
+ outdentListItems(registry);
38
+ return;
39
+ }
40
+ const topParentListBlock = getBlock(
41
+ getBlockRootClientId(clientId)
42
+ );
43
+ const blockIndex = getBlockIndex(clientId);
44
+ const head = cloneBlock({
60
45
  ...topParentListBlock,
61
- innerBlocks: after
62
- })
63
- ] : [];
64
- replaceBlocks(
65
- topParentListBlock.clientId,
66
- [head, middle, ...tail],
67
- 1
46
+ innerBlocks: topParentListBlock.innerBlocks.slice(
47
+ 0,
48
+ blockIndex
49
+ )
50
+ });
51
+ const middle = createBlock(getDefaultBlockName());
52
+ const after = [
53
+ ...topParentListBlock.innerBlocks[blockIndex].innerBlocks[0]?.innerBlocks || [],
54
+ ...topParentListBlock.innerBlocks.slice(blockIndex + 1)
55
+ ];
56
+ const tail = after.length ? [
57
+ cloneBlock({
58
+ ...topParentListBlock,
59
+ innerBlocks: after
60
+ })
61
+ ] : [];
62
+ replaceBlocks(
63
+ topParentListBlock.clientId,
64
+ [head, middle, ...tail],
65
+ 1
66
+ );
67
+ selectionChange(middle.clientId);
68
+ }
69
+ return subscribeOwnedListener(
70
+ element,
71
+ "beforeinput",
72
+ onBeforeInput,
73
+ true
68
74
  );
69
- selectionChange(middle.clientId);
70
- }
71
- return subscribeOwnedListener(element, "keydown", onKeyDown, true);
72
- }, []);
75
+ },
76
+ [clientId, registry]
77
+ );
73
78
  }
74
79
  export {
75
80
  useEnter as default
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/list-item/hooks/use-enter.js"],
4
- "sourcesContent": ["import {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tcloneBlock,\n} from '@wordpress/blocks';\nimport { useRefEffect } from '@wordpress/compose';\nimport { privateApis as richTextPrivateApis } from '@wordpress/rich-text';\nimport { ENTER } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport useOutdentListItem from './use-outdent-list-item';\nimport { unlock } from '../../lock-unlock';\n\nconst { subscribeOwnedListener } = unlock( richTextPrivateApis );\n\nexport default function useEnter( clientId ) {\n\tconst { replaceBlocks, selectionChange } = useDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlock,\n\t\tgetBlockAttributes,\n\t\tgetBlockRootClientId,\n\t\tgetBlockIndex,\n\t\tgetBlockName,\n\t} = useSelect( blockEditorStore );\n\tconst outdentListItem = useOutdentListItem();\n\treturn useRefEffect( ( element ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented || event.keyCode !== ENTER ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { content } = getBlockAttributes( clientId ) ?? {};\n\t\t\tif ( content?.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tconst canOutdent =\n\t\t\t\tgetBlockName(\n\t\t\t\t\tgetBlockRootClientId( getBlockRootClientId( clientId ) )\n\t\t\t\t) === 'core/list-item';\n\t\t\tif ( canOutdent ) {\n\t\t\t\toutdentListItem();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Here we are in top level list so we need to split.\n\t\t\tconst topParentListBlock = getBlock(\n\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t);\n\t\t\tconst blockIndex = getBlockIndex( clientId );\n\t\t\tconst head = cloneBlock( {\n\t\t\t\t...topParentListBlock,\n\t\t\t\tinnerBlocks: topParentListBlock.innerBlocks.slice(\n\t\t\t\t\t0,\n\t\t\t\t\tblockIndex\n\t\t\t\t),\n\t\t\t} );\n\t\t\tconst middle = createBlock( getDefaultBlockName() );\n\t\t\t// Last list item might contain a `list` block innerBlock\n\t\t\t// In that case append remaining innerBlocks blocks.\n\t\t\tconst after = [\n\t\t\t\t...( topParentListBlock.innerBlocks[ blockIndex ]\n\t\t\t\t\t.innerBlocks[ 0 ]?.innerBlocks || [] ),\n\t\t\t\t...topParentListBlock.innerBlocks.slice( blockIndex + 1 ),\n\t\t\t];\n\t\t\tconst tail = after.length\n\t\t\t\t? [\n\t\t\t\t\t\tcloneBlock( {\n\t\t\t\t\t\t\t...topParentListBlock,\n\t\t\t\t\t\t\tinnerBlocks: after,\n\t\t\t\t\t\t} ),\n\t\t\t\t ]\n\t\t\t\t: [];\n\t\t\treplaceBlocks(\n\t\t\t\ttopParentListBlock.clientId,\n\t\t\t\t[ head, middle, ...tail ],\n\t\t\t\t1\n\t\t\t);\n\t\t\t// We manually change the selection here because we are replacing\n\t\t\t// a different block than the selected one.\n\t\t\tselectionChange( middle.clientId );\n\t\t}\n\n\t\t// Capture phase so we run before writing-flow's ancestor-bubble\n\t\t// keydown handlers that gate on `event.defaultPrevented`.\n\t\treturn subscribeOwnedListener( element, 'keydown', onKeyDown, true );\n\t}, [] );\n}\n"],
5
- "mappings": ";AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,oBAAoB;AAC7B,SAAS,eAAe,2BAA2B;AACnD,SAAS,aAAa;AACtB,SAAS,WAAW,mBAAmB;AACvC,SAAS,SAAS,wBAAwB;AAC1C,OAAO,wBAAwB;AAC/B,SAAS,cAAc;AAEvB,IAAM,EAAE,uBAAuB,IAAI,OAAQ,mBAAoB;AAEhD,SAAR,SAA2B,UAAW;AAC5C,QAAM,EAAE,eAAe,gBAAgB,IAAI,YAAa,gBAAiB;AACzE,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI,UAAW,gBAAiB;AAChC,QAAM,kBAAkB,mBAAmB;AAC3C,SAAO,aAAc,CAAE,YAAa;AACnC,aAAS,UAAW,OAAQ;AAC3B,UAAK,MAAM,oBAAoB,MAAM,YAAY,OAAQ;AACxD;AAAA,MACD;AACA,YAAM,EAAE,QAAQ,IAAI,mBAAoB,QAAS,KAAK,CAAC;AACvD,UAAK,SAAS,QAAS;AACtB;AAAA,MACD;AACA,YAAM,eAAe;AACrB,YAAM,aACL;AAAA,QACC,qBAAsB,qBAAsB,QAAS,CAAE;AAAA,MACxD,MAAM;AACP,UAAK,YAAa;AACjB,wBAAgB;AAChB;AAAA,MACD;AAEA,YAAM,qBAAqB;AAAA,QAC1B,qBAAsB,QAAS;AAAA,MAChC;AACA,YAAM,aAAa,cAAe,QAAS;AAC3C,YAAM,OAAO,WAAY;AAAA,QACxB,GAAG;AAAA,QACH,aAAa,mBAAmB,YAAY;AAAA,UAC3C;AAAA,UACA;AAAA,QACD;AAAA,MACD,CAAE;AACF,YAAM,SAAS,YAAa,oBAAoB,CAAE;AAGlD,YAAM,QAAQ;AAAA,QACb,GAAK,mBAAmB,YAAa,UAAW,EAC9C,YAAa,CAAE,GAAG,eAAe,CAAC;AAAA,QACpC,GAAG,mBAAmB,YAAY,MAAO,aAAa,CAAE;AAAA,MACzD;AACA,YAAM,OAAO,MAAM,SAChB;AAAA,QACA,WAAY;AAAA,UACX,GAAG;AAAA,UACH,aAAa;AAAA,QACd,CAAE;AAAA,MACF,IACA,CAAC;AACJ;AAAA,QACC,mBAAmB;AAAA,QACnB,CAAE,MAAM,QAAQ,GAAG,IAAK;AAAA,QACxB;AAAA,MACD;AAGA,sBAAiB,OAAO,QAAS;AAAA,IAClC;AAIA,WAAO,uBAAwB,SAAS,WAAW,WAAW,IAAK;AAAA,EACpE,GAAG,CAAC,CAAE;AACP;",
4
+ "sourcesContent": ["import {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tcloneBlock,\n} from '@wordpress/blocks';\nimport { useRefEffect } from '@wordpress/compose';\nimport { privateApis as richTextPrivateApis } from '@wordpress/rich-text';\nimport { useRegistry } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { outdentListItems, getOutdentTarget } from '../utils';\nimport { unlock } from '../../lock-unlock';\n\nconst { subscribeOwnedListener } = unlock( richTextPrivateApis );\n\nexport default function useEnter( clientId ) {\n\tconst registry = useRegistry();\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tfunction onBeforeInput( event ) {\n\t\t\t\tif (\n\t\t\t\t\tevent.defaultPrevented ||\n\t\t\t\t\tevent.inputType !== 'insertParagraph'\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst select = registry.select( blockEditorStore );\n\t\t\t\tconst {\n\t\t\t\t\tgetBlock,\n\t\t\t\t\tgetBlockAttributes,\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetBlockIndex,\n\t\t\t\t} = select;\n\t\t\t\tconst { replaceBlocks, selectionChange } =\n\t\t\t\t\tregistry.dispatch( blockEditorStore );\n\n\t\t\t\tconst { content } = getBlockAttributes( clientId ) ?? {};\n\t\t\t\tif ( content?.length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst canOutdent = !! getOutdentTarget( select, clientId );\n\t\t\t\tif ( canOutdent ) {\n\t\t\t\t\toutdentListItems( registry );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Here we are in top level list so we need to split.\n\t\t\t\tconst topParentListBlock = getBlock(\n\t\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t\t);\n\t\t\t\tconst blockIndex = getBlockIndex( clientId );\n\t\t\t\tconst head = cloneBlock( {\n\t\t\t\t\t...topParentListBlock,\n\t\t\t\t\tinnerBlocks: topParentListBlock.innerBlocks.slice(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tblockIndex\n\t\t\t\t\t),\n\t\t\t\t} );\n\t\t\t\tconst middle = createBlock( getDefaultBlockName() );\n\t\t\t\t// Last list item might contain a `list` block innerBlock\n\t\t\t\t// In that case append remaining innerBlocks blocks.\n\t\t\t\tconst after = [\n\t\t\t\t\t...( topParentListBlock.innerBlocks[ blockIndex ]\n\t\t\t\t\t\t.innerBlocks[ 0 ]?.innerBlocks || [] ),\n\t\t\t\t\t...topParentListBlock.innerBlocks.slice( blockIndex + 1 ),\n\t\t\t\t];\n\t\t\t\tconst tail = after.length\n\t\t\t\t\t? [\n\t\t\t\t\t\t\tcloneBlock( {\n\t\t\t\t\t\t\t\t...topParentListBlock,\n\t\t\t\t\t\t\t\tinnerBlocks: after,\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t ]\n\t\t\t\t\t: [];\n\t\t\t\treplaceBlocks(\n\t\t\t\t\ttopParentListBlock.clientId,\n\t\t\t\t\t[ head, middle, ...tail ],\n\t\t\t\t\t1\n\t\t\t\t);\n\t\t\t\t// We manually change the selection here because we are replacing\n\t\t\t\t// a different block than the selected one.\n\t\t\t\tselectionChange( middle.clientId );\n\t\t\t}\n\n\t\t\t// Enter is handled on beforeinput: moving focus while the\n\t\t\t// keydown is still being handled leaves the iOS keyboard's\n\t\t\t// auto-capitalization stale. Capture phase so we run before\n\t\t\t// writing-flow's ancestor-bubble handler that gates on\n\t\t\t// `event.defaultPrevented`.\n\t\t\treturn subscribeOwnedListener(\n\t\t\t\telement,\n\t\t\t\t'beforeinput',\n\t\t\t\tonBeforeInput,\n\t\t\t\ttrue\n\t\t\t);\n\t\t},\n\t\t[ clientId, registry ]\n\t);\n}\n"],
5
+ "mappings": ";AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,oBAAoB;AAC7B,SAAS,eAAe,2BAA2B;AACnD,SAAS,mBAAmB;AAC5B,SAAS,SAAS,wBAAwB;AAC1C,SAAS,kBAAkB,wBAAwB;AACnD,SAAS,cAAc;AAEvB,IAAM,EAAE,uBAAuB,IAAI,OAAQ,mBAAoB;AAEhD,SAAR,SAA2B,UAAW;AAC5C,QAAM,WAAW,YAAY;AAC7B,SAAO;AAAA,IACN,CAAE,YAAa;AACd,eAAS,cAAe,OAAQ;AAC/B,YACC,MAAM,oBACN,MAAM,cAAc,mBACnB;AACD;AAAA,QACD;AACA,cAAM,SAAS,SAAS,OAAQ,gBAAiB;AACjD,cAAM;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,IAAI;AACJ,cAAM,EAAE,eAAe,gBAAgB,IACtC,SAAS,SAAU,gBAAiB;AAErC,cAAM,EAAE,QAAQ,IAAI,mBAAoB,QAAS,KAAK,CAAC;AACvD,YAAK,SAAS,QAAS;AACtB;AAAA,QACD;AACA,cAAM,eAAe;AACrB,cAAM,aAAa,CAAC,CAAE,iBAAkB,QAAQ,QAAS;AACzD,YAAK,YAAa;AACjB,2BAAkB,QAAS;AAC3B;AAAA,QACD;AAEA,cAAM,qBAAqB;AAAA,UAC1B,qBAAsB,QAAS;AAAA,QAChC;AACA,cAAM,aAAa,cAAe,QAAS;AAC3C,cAAM,OAAO,WAAY;AAAA,UACxB,GAAG;AAAA,UACH,aAAa,mBAAmB,YAAY;AAAA,YAC3C;AAAA,YACA;AAAA,UACD;AAAA,QACD,CAAE;AACF,cAAM,SAAS,YAAa,oBAAoB,CAAE;AAGlD,cAAM,QAAQ;AAAA,UACb,GAAK,mBAAmB,YAAa,UAAW,EAC9C,YAAa,CAAE,GAAG,eAAe,CAAC;AAAA,UACpC,GAAG,mBAAmB,YAAY,MAAO,aAAa,CAAE;AAAA,QACzD;AACA,cAAM,OAAO,MAAM,SAChB;AAAA,UACA,WAAY;AAAA,YACX,GAAG;AAAA,YACH,aAAa;AAAA,UACd,CAAE;AAAA,QACF,IACA,CAAC;AACJ;AAAA,UACC,mBAAmB;AAAA,UACnB,CAAE,MAAM,QAAQ,GAAG,IAAK;AAAA,UACxB;AAAA,QACD;AAGA,wBAAiB,OAAO,QAAS;AAAA,MAClC;AAOA,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,UAAU,QAAS;AAAA,EACtB;AACD;",
6
6
  "names": []
7
7
  }
@@ -1,40 +1,29 @@
1
1
  // packages/block-library/src/list-item/hooks/use-merge.js
2
- import { useRegistry, useDispatch, useSelect } from "@wordpress/data";
2
+ import { useRegistry } from "@wordpress/data";
3
3
  import { store as blockEditorStore } from "@wordpress/block-editor";
4
4
  import { isUnmodifiedBlock, switchToBlockType } from "@wordpress/blocks";
5
- import useOutdentListItem from "./use-outdent-list-item.mjs";
5
+ import { outdentListItems, getOutdentTarget } from "../utils.mjs";
6
6
  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 } = useDispatch(blockEditorStore);
18
- const outdentListItem = useOutdentListItem();
19
- function getTrailingId(id) {
20
- const order = getBlockOrder(id);
21
- if (!order.length) {
22
- return id;
23
- }
24
- return getTrailingId(order[order.length - 1]);
25
- }
26
- function getParentListItemId(id) {
27
- const listId = getBlockRootClientId(id);
28
- const parentListItemId = getBlockRootClientId(listId);
29
- if (!parentListItemId) {
30
- return;
31
- }
32
- if (getBlockName(parentListItemId) !== "core/list-item") {
33
- return;
34
- }
35
- return parentListItemId;
36
- }
37
8
  return (forward) => {
9
+ const select = registry.select(blockEditorStore);
10
+ const {
11
+ getPreviousBlockClientId,
12
+ getNextBlockClientId,
13
+ getBlockOrder,
14
+ getBlockIndex,
15
+ getBlockRootClientId,
16
+ getBlockName,
17
+ getBlock
18
+ } = select;
19
+ const { mergeBlocks, moveBlocksToPosition, removeBlock, insertBlocks } = registry.dispatch(blockEditorStore);
20
+ function getTrailingId(id) {
21
+ const order = getBlockOrder(id);
22
+ if (!order.length) {
23
+ return id;
24
+ }
25
+ return getTrailingId(order[order.length - 1]);
26
+ }
38
27
  function mergeWithNested(clientIdA, clientIdB) {
39
28
  registry.batch(() => {
40
29
  const [nestedListClientId] = getBlockOrder(clientIdB);
@@ -45,7 +34,7 @@ function useMerge(clientId, onMerge) {
45
34
  clientIdB,
46
35
  clientIdA
47
36
  );
48
- } else if (getParentListItemId(clientIdB) === clientIdA) {
37
+ } else if (getOutdentTarget(select, clientIdB) === clientIdA) {
49
38
  moveBlocksToPosition(
50
39
  getBlockOrder(nestedListClientId),
51
40
  nestedListClientId,
@@ -75,7 +64,7 @@ function useMerge(clientId, onMerge) {
75
64
  nextBlockClientId = getBlockOrder(innerListId)[0];
76
65
  } else {
77
66
  while (!(nextBlockClientId = getNextBlockClientId(listItemId))) {
78
- const parentLi = getParentListItemId(listItemId);
67
+ const parentLi = getOutdentTarget(select, listItemId);
79
68
  if (!parentLi) {
80
69
  break;
81
70
  }
@@ -124,7 +113,7 @@ function useMerge(clientId, onMerge) {
124
113
  mergeWithNested(trailingId, clientId);
125
114
  return;
126
115
  }
127
- const parentListItemId = getParentListItemId(clientId);
116
+ const parentListItemId = getOutdentTarget(select, clientId);
128
117
  if (parentListItemId) {
129
118
  mergeWithNested(parentListItemId, clientId);
130
119
  return;
@@ -132,7 +121,10 @@ function useMerge(clientId, onMerge) {
132
121
  const blockOrder = getBlockOrder(clientId);
133
122
  if (isUnmodifiedBlock(getBlock(clientId), "content") && blockOrder.length > 0) {
134
123
  registry.batch(() => {
135
- outdentListItem(getBlockOrder(blockOrder[0]));
124
+ outdentListItems(
125
+ registry,
126
+ getBlockOrder(blockOrder[0])
127
+ );
136
128
  removeBlock(clientId, true);
137
129
  });
138
130
  } else {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/list-item/hooks/use-merge.js"],
4
- "sourcesContent": ["import { useRegistry, useDispatch, useSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { isUnmodifiedBlock, switchToBlockType } from '@wordpress/blocks';\nimport useOutdentListItem from './use-outdent-list-item';\n\nexport default function useMerge( clientId, onMerge ) {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetPreviousBlockClientId,\n\t\tgetNextBlockClientId,\n\t\tgetBlockOrder,\n\t\tgetBlockIndex,\n\t\tgetBlockRootClientId,\n\t\tgetBlockName,\n\t\tgetBlock,\n\t} = useSelect( blockEditorStore );\n\tconst { mergeBlocks, moveBlocksToPosition, removeBlock, insertBlocks } =\n\t\tuseDispatch( blockEditorStore );\n\tconst outdentListItem = useOutdentListItem();\n\n\tfunction getTrailingId( id ) {\n\t\tconst order = getBlockOrder( id );\n\n\t\tif ( ! order.length ) {\n\t\t\treturn id;\n\t\t}\n\n\t\treturn getTrailingId( order[ order.length - 1 ] );\n\t}\n\n\tfunction getParentListItemId( id ) {\n\t\tconst listId = getBlockRootClientId( id );\n\t\tconst parentListItemId = getBlockRootClientId( listId );\n\t\tif ( ! parentListItemId ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( getBlockName( parentListItemId ) !== 'core/list-item' ) {\n\t\t\treturn;\n\t\t}\n\t\treturn parentListItemId;\n\t}\n\n\treturn ( forward ) => {\n\t\tfunction mergeWithNested( clientIdA, clientIdB ) {\n\t\t\tregistry.batch( () => {\n\t\t\t\t// When merging a sub list item with a higher next list item, we\n\t\t\t\t// also need to move any nested list items. Check if there's a\n\t\t\t\t// listed list, and append its nested list items to the current\n\t\t\t\t// list.\n\t\t\t\tconst [ nestedListClientId ] = getBlockOrder( clientIdB );\n\t\t\t\tif ( nestedListClientId ) {\n\t\t\t\t\t// If we are merging with the previous list item, and the\n\t\t\t\t\t// previous list item does not have nested list, move the\n\t\t\t\t\t// nested list to the previous list item.\n\t\t\t\t\tif (\n\t\t\t\t\t\tgetPreviousBlockClientId( clientIdB ) === clientIdA &&\n\t\t\t\t\t\t! getBlockOrder( clientIdA ).length\n\t\t\t\t\t) {\n\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t[ nestedListClientId ],\n\t\t\t\t\t\t\tclientIdB,\n\t\t\t\t\t\t\tclientIdA\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tgetParentListItemId( clientIdB ) === clientIdA\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Merging into the parent item's own line: the\n\t\t\t\t\t\t// children take the item's place in its list, one\n\t\t\t\t\t\t// level up, since their line moved there.\n\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\tgetBlockOrder( nestedListClientId ),\n\t\t\t\t\t\t\tnestedListClientId,\n\t\t\t\t\t\t\tgetBlockRootClientId( clientIdB ),\n\t\t\t\t\t\t\tgetBlockIndex( clientIdB ) + 1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\tgetBlockOrder( nestedListClientId ),\n\t\t\t\t\t\t\tnestedListClientId,\n\t\t\t\t\t\t\tgetBlockRootClientId( clientIdA )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst listId = getBlockRootClientId( clientIdB );\n\t\t\t\tmergeBlocks( clientIdA, clientIdB );\n\t\t\t\t// Merging the last item of a nested list into its parent\n\t\t\t\t// line leaves the list block empty.\n\t\t\t\tif ( ! getBlockOrder( listId ).length ) {\n\t\t\t\t\tremoveBlock( listId, false );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tif ( forward ) {\n\t\t\t// Start by diving into the nested list (if any); otherwise walk up\n\t\t\t// parent list items for a next sibling. `listItemId` ends on the\n\t\t\t// topmost list item if none is found.\n\t\t\tconst innerListId = getBlockOrder( clientId )[ 0 ];\n\t\t\tlet nextBlockClientId;\n\t\t\tlet listItemId = clientId;\n\t\t\tif ( innerListId ) {\n\t\t\t\tnextBlockClientId = getBlockOrder( innerListId )[ 0 ];\n\t\t\t} else {\n\t\t\t\twhile (\n\t\t\t\t\t! ( nextBlockClientId = getNextBlockClientId( listItemId ) )\n\t\t\t\t) {\n\t\t\t\t\tconst parentLi = getParentListItemId( listItemId );\n\t\t\t\t\tif ( ! parentLi ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tlistItemId = parentLi;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\tconst outerListId = getBlockRootClientId( listItemId );\n\t\t\t\tconst followingBlockId = getNextBlockClientId( outerListId );\n\n\t\t\t\tif ( followingBlockId ) {\n\t\t\t\t\tif ( getBlockName( followingBlockId ) === 'core/list' ) {\n\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\tgetBlockOrder( followingBlockId ),\n\t\t\t\t\t\t\t\tfollowingBlockId,\n\t\t\t\t\t\t\t\touterListId\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tremoveBlock( followingBlockId, false );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst transformed = switchToBlockType(\n\t\t\t\t\t\t\tgetBlock( followingBlockId ),\n\t\t\t\t\t\t\t'core/list'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst newInnerBlocks = transformed?.[ 0 ]?.innerBlocks;\n\t\t\t\t\t\tif ( newInnerBlocks?.length ) {\n\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\tinsertBlocks(\n\t\t\t\t\t\t\t\t\tnewInnerBlocks,\n\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\touterListId,\n\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( followingBlockId, false );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmergeWithNested( clientId, nextBlockClientId );\n\t\t\t}\n\t\t} else {\n\t\t\t// Merge into the previous line: the trailing item of the\n\t\t\t// previous sibling, or the parent item's own line for a first\n\t\t\t// child.\n\t\t\tconst previousBlockClientId = getPreviousBlockClientId( clientId );\n\t\t\tif ( previousBlockClientId ) {\n\t\t\t\tconst trailingId = getTrailingId( previousBlockClientId );\n\t\t\t\tmergeWithNested( trailingId, clientId );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst parentListItemId = getParentListItemId( clientId );\n\t\t\tif ( parentListItemId ) {\n\t\t\t\tmergeWithNested( parentListItemId, clientId );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst blockOrder = getBlockOrder( clientId );\n\t\t\tif (\n\t\t\t\tisUnmodifiedBlock( getBlock( clientId ), 'content' ) &&\n\t\t\t\tblockOrder.length > 0\n\t\t\t) {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\toutdentListItem( getBlockOrder( blockOrder[ 0 ] ) );\n\t\t\t\t\tremoveBlock( clientId, true );\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tonMerge( forward );\n\t\t\t}\n\t\t}\n\t};\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useRegistry } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { isUnmodifiedBlock, switchToBlockType } from '@wordpress/blocks';\nimport { outdentListItems, getOutdentTarget } from '../utils';\n\nexport default function useMerge( clientId, onMerge ) {\n\tconst registry = useRegistry();\n\n\treturn ( forward ) => {\n\t\tconst select = registry.select( blockEditorStore );\n\t\tconst {\n\t\t\tgetPreviousBlockClientId,\n\t\t\tgetNextBlockClientId,\n\t\t\tgetBlockOrder,\n\t\t\tgetBlockIndex,\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockName,\n\t\t\tgetBlock,\n\t\t} = select;\n\t\tconst { mergeBlocks, moveBlocksToPosition, removeBlock, insertBlocks } =\n\t\t\tregistry.dispatch( blockEditorStore );\n\n\t\tfunction getTrailingId( id ) {\n\t\t\tconst order = getBlockOrder( id );\n\n\t\t\tif ( ! order.length ) {\n\t\t\t\treturn id;\n\t\t\t}\n\n\t\t\treturn getTrailingId( order[ order.length - 1 ] );\n\t\t}\n\n\t\tfunction mergeWithNested( clientIdA, clientIdB ) {\n\t\t\tregistry.batch( () => {\n\t\t\t\t// When merging a sub list item with a higher next list item, we\n\t\t\t\t// also need to move any nested list items. Check if there's a\n\t\t\t\t// listed list, and append its nested list items to the current\n\t\t\t\t// list.\n\t\t\t\tconst [ nestedListClientId ] = getBlockOrder( clientIdB );\n\t\t\t\tif ( nestedListClientId ) {\n\t\t\t\t\t// If we are merging with the previous list item, and the\n\t\t\t\t\t// previous list item does not have nested list, move the\n\t\t\t\t\t// nested list to the previous list item.\n\t\t\t\t\tif (\n\t\t\t\t\t\tgetPreviousBlockClientId( clientIdB ) === clientIdA &&\n\t\t\t\t\t\t! getBlockOrder( clientIdA ).length\n\t\t\t\t\t) {\n\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t[ nestedListClientId ],\n\t\t\t\t\t\t\tclientIdB,\n\t\t\t\t\t\t\tclientIdA\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tgetOutdentTarget( select, clientIdB ) === clientIdA\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Merging into the parent item's own line: the\n\t\t\t\t\t\t// children take the item's place in its list, one\n\t\t\t\t\t\t// level up, since their line moved there.\n\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\tgetBlockOrder( nestedListClientId ),\n\t\t\t\t\t\t\tnestedListClientId,\n\t\t\t\t\t\t\tgetBlockRootClientId( clientIdB ),\n\t\t\t\t\t\t\tgetBlockIndex( clientIdB ) + 1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\tgetBlockOrder( nestedListClientId ),\n\t\t\t\t\t\t\tnestedListClientId,\n\t\t\t\t\t\t\tgetBlockRootClientId( clientIdA )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst listId = getBlockRootClientId( clientIdB );\n\t\t\t\tmergeBlocks( clientIdA, clientIdB );\n\t\t\t\t// Merging the last item of a nested list into its parent\n\t\t\t\t// line leaves the list block empty.\n\t\t\t\tif ( ! getBlockOrder( listId ).length ) {\n\t\t\t\t\tremoveBlock( listId, false );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tif ( forward ) {\n\t\t\t// Start by diving into the nested list (if any); otherwise walk up\n\t\t\t// parent list items for a next sibling. `listItemId` ends on the\n\t\t\t// topmost list item if none is found.\n\t\t\tconst innerListId = getBlockOrder( clientId )[ 0 ];\n\t\t\tlet nextBlockClientId;\n\t\t\tlet listItemId = clientId;\n\t\t\tif ( innerListId ) {\n\t\t\t\tnextBlockClientId = getBlockOrder( innerListId )[ 0 ];\n\t\t\t} else {\n\t\t\t\twhile (\n\t\t\t\t\t! ( nextBlockClientId = getNextBlockClientId( listItemId ) )\n\t\t\t\t) {\n\t\t\t\t\tconst parentLi = getOutdentTarget( select, listItemId );\n\t\t\t\t\tif ( ! parentLi ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tlistItemId = parentLi;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\tconst outerListId = getBlockRootClientId( listItemId );\n\t\t\t\tconst followingBlockId = getNextBlockClientId( outerListId );\n\n\t\t\t\tif ( followingBlockId ) {\n\t\t\t\t\tif ( getBlockName( followingBlockId ) === 'core/list' ) {\n\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\tgetBlockOrder( followingBlockId ),\n\t\t\t\t\t\t\t\tfollowingBlockId,\n\t\t\t\t\t\t\t\touterListId\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tremoveBlock( followingBlockId, false );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst transformed = switchToBlockType(\n\t\t\t\t\t\t\tgetBlock( followingBlockId ),\n\t\t\t\t\t\t\t'core/list'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst newInnerBlocks = transformed?.[ 0 ]?.innerBlocks;\n\t\t\t\t\t\tif ( newInnerBlocks?.length ) {\n\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\tinsertBlocks(\n\t\t\t\t\t\t\t\t\tnewInnerBlocks,\n\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\touterListId,\n\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( followingBlockId, false );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmergeWithNested( clientId, nextBlockClientId );\n\t\t\t}\n\t\t} else {\n\t\t\t// Merge into the previous line: the trailing item of the\n\t\t\t// previous sibling, or the parent item's own line for a first\n\t\t\t// child.\n\t\t\tconst previousBlockClientId = getPreviousBlockClientId( clientId );\n\t\t\tif ( previousBlockClientId ) {\n\t\t\t\tconst trailingId = getTrailingId( previousBlockClientId );\n\t\t\t\tmergeWithNested( trailingId, clientId );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst parentListItemId = getOutdentTarget( select, clientId );\n\t\t\tif ( parentListItemId ) {\n\t\t\t\tmergeWithNested( parentListItemId, clientId );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst blockOrder = getBlockOrder( clientId );\n\t\t\tif (\n\t\t\t\tisUnmodifiedBlock( getBlock( clientId ), 'content' ) &&\n\t\t\t\tblockOrder.length > 0\n\t\t\t) {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\toutdentListItems(\n\t\t\t\t\t\tregistry,\n\t\t\t\t\t\tgetBlockOrder( blockOrder[ 0 ] )\n\t\t\t\t\t);\n\t\t\t\t\tremoveBlock( clientId, true );\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tonMerge( forward );\n\t\t\t}\n\t\t}\n\t};\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,59 @@
1
+ // packages/block-library/src/list-item/hooks/use-multi-select-tab.js
2
+ import { useRefEffect } from "@wordpress/compose";
3
+ import { TAB } from "@wordpress/keycodes";
4
+ import { store as blockEditorStore } from "@wordpress/block-editor";
5
+ import { useSelect, useRegistry } from "@wordpress/data";
6
+ import { indentListItems, outdentListItems } from "../utils.mjs";
7
+ function useMultiSelectTab(clientId) {
8
+ const registry = useRegistry();
9
+ const isActive = useSelect(
10
+ (select) => {
11
+ const {
12
+ hasMultiSelection,
13
+ getMultiSelectedBlockClientIds,
14
+ getBlockName
15
+ } = select(blockEditorStore);
16
+ if (!hasMultiSelection()) {
17
+ return false;
18
+ }
19
+ const clientIds = getMultiSelectedBlockClientIds();
20
+ return clientIds[0] === clientId && clientIds.every(
21
+ (id) => getBlockName(id) === "core/list-item"
22
+ );
23
+ },
24
+ [clientId]
25
+ );
26
+ return useRefEffect(
27
+ (element) => {
28
+ if (!isActive) {
29
+ return;
30
+ }
31
+ function onKeyDown(event) {
32
+ const { keyCode, shiftKey, altKey, metaKey, ctrlKey } = event;
33
+ if (keyCode !== TAB || event.defaultPrevented || altKey || metaKey || ctrlKey) {
34
+ return;
35
+ }
36
+ if (!event.target.contains(element)) {
37
+ return;
38
+ }
39
+ if (shiftKey) {
40
+ if (outdentListItems(registry)) {
41
+ event.preventDefault();
42
+ }
43
+ } else if (indentListItems(registry)) {
44
+ event.preventDefault();
45
+ }
46
+ }
47
+ const { ownerDocument } = element;
48
+ ownerDocument.addEventListener("keydown", onKeyDown, true);
49
+ return () => {
50
+ ownerDocument.removeEventListener("keydown", onKeyDown, true);
51
+ };
52
+ },
53
+ [isActive, registry]
54
+ );
55
+ }
56
+ export {
57
+ useMultiSelectTab as default
58
+ };
59
+ //# sourceMappingURL=use-multi-select-tab.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/list-item/hooks/use-multi-select-tab.js"],
4
+ "sourcesContent": ["import { useRefEffect } from '@wordpress/compose';\nimport { TAB } from '@wordpress/keycodes';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useSelect, useRegistry } from '@wordpress/data';\nimport { indentListItems, outdentListItems } from '../utils';\n\nexport default function useMultiSelectTab( clientId ) {\n\tconst registry = useRegistry();\n\t// Only the first item of an all-list-item multi selection attaches the\n\t// listener, so there is a single handler regardless of how many list items\n\t// are rendered, and only while such a selection exists.\n\tconst isActive = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\thasMultiSelection,\n\t\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\t\tgetBlockName,\n\t\t\t} = select( blockEditorStore );\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst clientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn (\n\t\t\t\tclientIds[ 0 ] === clientId &&\n\t\t\t\tclientIds.every(\n\t\t\t\t\t( id ) => getBlockName( id ) === 'core/list-item'\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tif ( ! isActive ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\tconst { keyCode, shiftKey, altKey, metaKey, ctrlKey } = event;\n\n\t\t\t\tif (\n\t\t\t\t\tkeyCode !== TAB ||\n\t\t\t\t\tevent.defaultPrevented ||\n\t\t\t\t\taltKey ||\n\t\t\t\t\tmetaKey ||\n\t\t\t\t\tctrlKey\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// The listener is on the document, so it also sees a Tab from\n\t\t\t\t// other editor UI while the multi selection lingers (moving\n\t\t\t\t// focus does not clear it). A multi selection keeps focus on the\n\t\t\t\t// canvas host that wraps the blocks, so only act when the key\n\t\t\t\t// comes from an ancestor of them, not from a toolbar or panel.\n\t\t\t\tif ( ! event.target.contains( element ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( shiftKey ) {\n\t\t\t\t\tif ( outdentListItems( registry ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t} else if ( indentListItems( registry ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// During a multi selection focus sits on the writing flow\n\t\t\t// container, not inside any item, so an element listener never sees\n\t\t\t// the key. Listen on the document. Capture phase so we run before\n\t\t\t// writing-flow's keydown handlers, which gate on\n\t\t\t// `event.defaultPrevented`.\n\t\t\tconst { ownerDocument } = element;\n\t\t\townerDocument.addEventListener( 'keydown', onKeyDown, true );\n\t\t\treturn () => {\n\t\t\t\townerDocument.removeEventListener( 'keydown', onKeyDown, true );\n\t\t\t};\n\t\t},\n\t\t[ isActive, registry ]\n\t);\n}\n"],
5
+ "mappings": ";AAAA,SAAS,oBAAoB;AAC7B,SAAS,WAAW;AACpB,SAAS,SAAS,wBAAwB;AAC1C,SAAS,WAAW,mBAAmB;AACvC,SAAS,iBAAiB,wBAAwB;AAEnC,SAAR,kBAAoC,UAAW;AACrD,QAAM,WAAW,YAAY;AAI7B,QAAM,WAAW;AAAA,IAChB,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,OAAQ,gBAAiB;AAC7B,UAAK,CAAE,kBAAkB,GAAI;AAC5B,eAAO;AAAA,MACR;AACA,YAAM,YAAY,+BAA+B;AACjD,aACC,UAAW,CAAE,MAAM,YACnB,UAAU;AAAA,QACT,CAAE,OAAQ,aAAc,EAAG,MAAM;AAAA,MAClC;AAAA,IAEF;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,SAAO;AAAA,IACN,CAAE,YAAa;AACd,UAAK,CAAE,UAAW;AACjB;AAAA,MACD;AAEA,eAAS,UAAW,OAAQ;AAC3B,cAAM,EAAE,SAAS,UAAU,QAAQ,SAAS,QAAQ,IAAI;AAExD,YACC,YAAY,OACZ,MAAM,oBACN,UACA,WACA,SACC;AACD;AAAA,QACD;AAOA,YAAK,CAAE,MAAM,OAAO,SAAU,OAAQ,GAAI;AACzC;AAAA,QACD;AAEA,YAAK,UAAW;AACf,cAAK,iBAAkB,QAAS,GAAI;AACnC,kBAAM,eAAe;AAAA,UACtB;AAAA,QACD,WAAY,gBAAiB,QAAS,GAAI;AACzC,gBAAM,eAAe;AAAA,QACtB;AAAA,MACD;AAOA,YAAM,EAAE,cAAc,IAAI;AAC1B,oBAAc,iBAAkB,WAAW,WAAW,IAAK;AAC3D,aAAO,MAAM;AACZ,sBAAc,oBAAqB,WAAW,WAAW,IAAK;AAAA,MAC/D;AAAA,IACD;AAAA,IACA,CAAE,UAAU,QAAS;AAAA,EACtB;AACD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,44 @@
1
+ // packages/block-library/src/list-item/hooks/use-tab.js
2
+ import { useRefEffect } from "@wordpress/compose";
3
+ import { privateApis as richTextPrivateApis } from "@wordpress/rich-text";
4
+ import { SPACE, TAB } from "@wordpress/keycodes";
5
+ import { store as blockEditorStore } from "@wordpress/block-editor";
6
+ import { useRegistry } from "@wordpress/data";
7
+ import { isEntirelySelected } from "@wordpress/dom";
8
+ import { indentListItems, outdentListItems } from "../utils.mjs";
9
+ import { unlock } from "../../lock-unlock.mjs";
10
+ var { subscribeOwnedListener } = unlock(richTextPrivateApis);
11
+ function useTab() {
12
+ const registry = useRegistry();
13
+ return useRefEffect(
14
+ (element) => {
15
+ function onKeyDown(event) {
16
+ const { keyCode, shiftKey, altKey, metaKey, ctrlKey } = event;
17
+ if (event.defaultPrevented || keyCode !== SPACE && keyCode !== TAB || // Shift selects outdent; other modifiers pass through.
18
+ altKey || metaKey || ctrlKey) {
19
+ return;
20
+ }
21
+ const { getSelectionStart, getSelectionEnd } = registry.select(blockEditorStore);
22
+ const isAtStart = getSelectionStart().offset === 0 && getSelectionEnd().offset === 0;
23
+ if (!isAtStart && !(keyCode === TAB && isEntirelySelected(element))) {
24
+ return;
25
+ }
26
+ const move = shiftKey ? outdentListItems : indentListItems;
27
+ if (move(registry)) {
28
+ event.preventDefault();
29
+ }
30
+ }
31
+ return subscribeOwnedListener(
32
+ element,
33
+ "keydown",
34
+ onKeyDown,
35
+ true
36
+ );
37
+ },
38
+ [registry]
39
+ );
40
+ }
41
+ export {
42
+ useTab as default
43
+ };
44
+ //# sourceMappingURL=use-tab.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/list-item/hooks/use-tab.js"],
4
+ "sourcesContent": ["import { useRefEffect } from '@wordpress/compose';\nimport { privateApis as richTextPrivateApis } from '@wordpress/rich-text';\nimport { SPACE, TAB } from '@wordpress/keycodes';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useRegistry } from '@wordpress/data';\nimport { isEntirelySelected } from '@wordpress/dom';\nimport { indentListItems, outdentListItems } from '../utils';\nimport { unlock } from '../../lock-unlock';\n\nconst { subscribeOwnedListener } = unlock( richTextPrivateApis );\n\nexport default function useTab() {\n\tconst registry = useRegistry();\n\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\tconst { keyCode, shiftKey, altKey, metaKey, ctrlKey } = event;\n\n\t\t\t\tif (\n\t\t\t\t\tevent.defaultPrevented ||\n\t\t\t\t\t( keyCode !== SPACE && keyCode !== TAB ) ||\n\t\t\t\t\t// Shift selects outdent; other modifiers pass through.\n\t\t\t\t\taltKey ||\n\t\t\t\t\tmetaKey ||\n\t\t\t\t\tctrlKey\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { getSelectionStart, getSelectionEnd } =\n\t\t\t\t\tregistry.select( blockEditorStore );\n\t\t\t\tconst isAtStart =\n\t\t\t\t\tgetSelectionStart().offset === 0 &&\n\t\t\t\t\tgetSelectionEnd().offset === 0;\n\n\t\t\t\t// Both keys act at the start of an item; Tab also acts on a\n\t\t\t\t// full selection.\n\t\t\t\tif (\n\t\t\t\t\t! isAtStart &&\n\t\t\t\t\t! ( keyCode === TAB && isEntirelySelected( element ) )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst move = shiftKey ? outdentListItems : indentListItems;\n\t\t\t\tif ( move( registry ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Capture phase so we run before writing-flow's ancestor-bubble\n\t\t\t// keydown handlers that gate on `event.defaultPrevented`.\n\t\t\treturn subscribeOwnedListener(\n\t\t\t\telement,\n\t\t\t\t'keydown',\n\t\t\t\tonKeyDown,\n\t\t\t\ttrue\n\t\t\t);\n\t\t},\n\t\t[ registry ]\n\t);\n}\n"],
5
+ "mappings": ";AAAA,SAAS,oBAAoB;AAC7B,SAAS,eAAe,2BAA2B;AACnD,SAAS,OAAO,WAAW;AAC3B,SAAS,SAAS,wBAAwB;AAC1C,SAAS,mBAAmB;AAC5B,SAAS,0BAA0B;AACnC,SAAS,iBAAiB,wBAAwB;AAClD,SAAS,cAAc;AAEvB,IAAM,EAAE,uBAAuB,IAAI,OAAQ,mBAAoB;AAEhD,SAAR,SAA0B;AAChC,QAAM,WAAW,YAAY;AAE7B,SAAO;AAAA,IACN,CAAE,YAAa;AACd,eAAS,UAAW,OAAQ;AAC3B,cAAM,EAAE,SAAS,UAAU,QAAQ,SAAS,QAAQ,IAAI;AAExD,YACC,MAAM,oBACJ,YAAY,SAAS,YAAY;AAAA,QAEnC,UACA,WACA,SACC;AACD;AAAA,QACD;AAEA,cAAM,EAAE,mBAAmB,gBAAgB,IAC1C,SAAS,OAAQ,gBAAiB;AACnC,cAAM,YACL,kBAAkB,EAAE,WAAW,KAC/B,gBAAgB,EAAE,WAAW;AAI9B,YACC,CAAE,aACF,EAAI,YAAY,OAAO,mBAAoB,OAAQ,IAClD;AACD;AAAA,QACD;AACA,cAAM,OAAO,WAAW,mBAAmB;AAC3C,YAAK,KAAM,QAAS,GAAI;AACvB,gBAAM,eAAe;AAAA,QACtB;AAAA,MACD;AAIA,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AACD;",
6
+ "names": []
7
+ }
@@ -1,15 +1,12 @@
1
1
  // packages/block-library/src/list-item/index.js
2
- import { __ } from "@wordpress/i18n";
3
2
  import { listItem as icon } from "@wordpress/icons";
4
3
  import { privateApis } from "@wordpress/block-editor";
5
- import { privateApis as blocksPrivateApis } from "@wordpress/blocks";
6
4
  import initBlock from "../utils/init-block.mjs";
7
5
  import metadata from "./block.json";
8
6
  import edit from "./edit.mjs";
9
7
  import save from "./save.mjs";
10
8
  import transforms from "./transforms.mjs";
11
9
  import { unlock } from "../lock-unlock.mjs";
12
- var { fieldsKey, formKey } = unlock(blocksPrivateApis);
13
10
  var { name } = metadata;
14
11
  var settings = {
15
12
  icon,
@@ -35,20 +32,6 @@ var settings = {
35
32
  }
36
33
  }
37
34
  };
38
- if (window.__experimentalContentOnlyInspectorFields) {
39
- settings[fieldsKey] = [
40
- {
41
- id: "content",
42
- label: __("Content"),
43
- type: "text",
44
- Edit: "rich-text"
45
- // TODO: replace with custom component
46
- }
47
- ];
48
- settings[formKey] = {
49
- fields: ["content"]
50
- };
51
- }
52
35
  var init = () => initBlock({ name, metadata, settings });
53
36
  export {
54
37
  init,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/list-item/index.js"],
4
- "sourcesContent": ["import { __ } from '@wordpress/i18n';\nimport { listItem as icon } from '@wordpress/icons';\nimport { privateApis } from '@wordpress/block-editor';\nimport { privateApis as blocksPrivateApis } from '@wordpress/blocks';\nimport initBlock from '../utils/init-block';\nimport metadata from './block.json';\nimport edit from './edit';\nimport save from './save';\nimport transforms from './transforms';\nimport { unlock } from '../lock-unlock';\n\nconst { fieldsKey, formKey } = unlock( blocksPrivateApis );\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\tedit,\n\tsave,\n\tmerge( attributes, attributesToMerge ) {\n\t\treturn {\n\t\t\t...attributes,\n\t\t\tcontent: attributes.content + attributesToMerge.content,\n\t\t};\n\t},\n\ttransforms,\n\t[ unlock( privateApis ).requiresWrapperOnCopy ]: true,\n\t__experimentalLabel( attributes, { context } ) {\n\t\tconst { content } = attributes;\n\n\t\tconst customName = attributes?.metadata?.name;\n\t\tconst hasContent = content?.trim().length > 0;\n\n\t\t// In the list view, use the block's content as the label.\n\t\t// If the content is empty, fall back to the default label.\n\t\tif ( context === 'list-view' && ( customName || hasContent ) ) {\n\t\t\treturn customName || content;\n\t\t}\n\n\t\tif ( context === 'breadcrumb' && customName ) {\n\t\t\treturn customName;\n\t\t}\n\t},\n};\n\nif ( window.__experimentalContentOnlyInspectorFields ) {\n\tsettings[ fieldsKey ] = [\n\t\t{\n\t\t\tid: 'content',\n\t\t\tlabel: __( 'Content' ),\n\t\t\ttype: 'text',\n\t\t\tEdit: 'rich-text', // TODO: replace with custom component\n\t\t},\n\t];\n\tsettings[ formKey ] = {\n\t\tfields: [ 'content' ],\n\t};\n}\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],
5
- "mappings": ";AAAA,SAAS,UAAU;AACnB,SAAS,YAAY,YAAY;AACjC,SAAS,mBAAmB;AAC5B,SAAS,eAAe,yBAAyB;AACjD,OAAO,eAAe;AACtB,OAAO,cAAc;AACrB,OAAO,UAAU;AACjB,OAAO,UAAU;AACjB,OAAO,gBAAgB;AACvB,SAAS,cAAc;AAEvB,IAAM,EAAE,WAAW,QAAQ,IAAI,OAAQ,iBAAkB;AAEzD,IAAM,EAAE,KAAK,IAAI;AAIV,IAAM,WAAW;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAO,YAAY,mBAAoB;AACtC,WAAO;AAAA,MACN,GAAG;AAAA,MACH,SAAS,WAAW,UAAU,kBAAkB;AAAA,IACjD;AAAA,EACD;AAAA,EACA;AAAA,EACA,CAAE,OAAQ,WAAY,EAAE,qBAAsB,GAAG;AAAA,EACjD,oBAAqB,YAAY,EAAE,QAAQ,GAAI;AAC9C,UAAM,EAAE,QAAQ,IAAI;AAEpB,UAAM,aAAa,YAAY,UAAU;AACzC,UAAM,aAAa,SAAS,KAAK,EAAE,SAAS;AAI5C,QAAK,YAAY,gBAAiB,cAAc,aAAe;AAC9D,aAAO,cAAc;AAAA,IACtB;AAEA,QAAK,YAAY,gBAAgB,YAAa;AAC7C,aAAO;AAAA,IACR;AAAA,EACD;AACD;AAEA,IAAK,OAAO,0CAA2C;AACtD,WAAU,SAAU,IAAI;AAAA,IACvB;AAAA,MACC,IAAI;AAAA,MACJ,OAAO,GAAI,SAAU;AAAA,MACrB,MAAM;AAAA,MACN,MAAM;AAAA;AAAA,IACP;AAAA,EACD;AACA,WAAU,OAAQ,IAAI;AAAA,IACrB,QAAQ,CAAE,SAAU;AAAA,EACrB;AACD;AAEO,IAAM,OAAO,MAAM,UAAW,EAAE,MAAM,UAAU,SAAS,CAAE;",
4
+ "sourcesContent": ["import { listItem as icon } from '@wordpress/icons';\nimport { privateApis } from '@wordpress/block-editor';\nimport initBlock from '../utils/init-block';\nimport metadata from './block.json';\nimport edit from './edit';\nimport save from './save';\nimport transforms from './transforms';\nimport { unlock } from '../lock-unlock';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\tedit,\n\tsave,\n\tmerge( attributes, attributesToMerge ) {\n\t\treturn {\n\t\t\t...attributes,\n\t\t\tcontent: attributes.content + attributesToMerge.content,\n\t\t};\n\t},\n\ttransforms,\n\t[ unlock( privateApis ).requiresWrapperOnCopy ]: true,\n\t__experimentalLabel( attributes, { context } ) {\n\t\tconst { content } = attributes;\n\n\t\tconst customName = attributes?.metadata?.name;\n\t\tconst hasContent = content?.trim().length > 0;\n\n\t\t// In the list view, use the block's content as the label.\n\t\t// If the content is empty, fall back to the default label.\n\t\tif ( context === 'list-view' && ( customName || hasContent ) ) {\n\t\t\treturn customName || content;\n\t\t}\n\n\t\tif ( context === 'breadcrumb' && customName ) {\n\t\t\treturn customName;\n\t\t}\n\t},\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],
5
+ "mappings": ";AAAA,SAAS,YAAY,YAAY;AACjC,SAAS,mBAAmB;AAC5B,OAAO,eAAe;AACtB,OAAO,cAAc;AACrB,OAAO,UAAU;AACjB,OAAO,UAAU;AACjB,OAAO,gBAAgB;AACvB,SAAS,cAAc;AAEvB,IAAM,EAAE,KAAK,IAAI;AAIV,IAAM,WAAW;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAO,YAAY,mBAAoB;AACtC,WAAO;AAAA,MACN,GAAG;AAAA,MACH,SAAS,WAAW,UAAU,kBAAkB;AAAA,IACjD;AAAA,EACD;AAAA,EACA;AAAA,EACA,CAAE,OAAQ,WAAY,EAAE,qBAAsB,GAAG;AAAA,EACjD,oBAAqB,YAAY,EAAE,QAAQ,GAAI;AAC9C,UAAM,EAAE,QAAQ,IAAI;AAEpB,UAAM,aAAa,YAAY,UAAU;AACzC,UAAM,aAAa,SAAS,KAAK,EAAE,SAAS;AAI5C,QAAK,YAAY,gBAAiB,cAAc,aAAe;AAC9D,aAAO,cAAc;AAAA,IACtB;AAEA,QAAK,YAAY,gBAAgB,YAAa;AAC7C,aAAO;AAAA,IACR;AAAA,EACD;AACD;AAEO,IAAM,OAAO,MAAM,UAAW,EAAE,MAAM,UAAU,SAAS,CAAE;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,140 @@
1
+ // packages/block-library/src/list-item/utils.js
2
+ import { store as blockEditorStore } from "@wordpress/block-editor";
3
+ import { cloneBlock } from "@wordpress/blocks";
4
+ function getIndentTarget(select, clientId) {
5
+ return select.getPreviousBlockClientId(clientId);
6
+ }
7
+ function getOutdentTarget(select, clientId) {
8
+ const listId = select.getBlockRootClientId(clientId);
9
+ const parentListItemId = select.getBlockRootClientId(listId);
10
+ if (!parentListItemId || select.getBlockName(parentListItemId) !== "core/list-item") {
11
+ return void 0;
12
+ }
13
+ return parentListItemId;
14
+ }
15
+ function moveBlocksToNestedList(registry, clientIds, sourceListId, listItemId) {
16
+ const { getBlockOrder, getBlock } = registry.select(blockEditorStore);
17
+ const { moveBlocksToPosition, removeBlocks, insertBlock } = registry.dispatch(blockEditorStore);
18
+ const nestedLists = getBlockOrder(listItemId);
19
+ const nestedListId = nestedLists[nestedLists.length - 1];
20
+ if (nestedListId) {
21
+ moveBlocksToPosition(clientIds, sourceListId, nestedListId);
22
+ return;
23
+ }
24
+ const nestedList = cloneBlock(
25
+ getBlock(sourceListId),
26
+ {},
27
+ clientIds.map((id) => getBlock(id))
28
+ );
29
+ registry.batch(() => {
30
+ removeBlocks(clientIds, false);
31
+ insertBlock(nestedList, 0, listItemId, false);
32
+ });
33
+ }
34
+ function indentListItems(registry, clientId) {
35
+ const select = registry.select(blockEditorStore);
36
+ const {
37
+ getBlockRootClientId,
38
+ getSelectedBlockClientIds,
39
+ getSelectionStart,
40
+ getSelectionEnd,
41
+ hasMultiSelection,
42
+ getMultiSelectedBlockClientIds
43
+ } = select;
44
+ const { selectionChange, multiSelect } = registry.dispatch(blockEditorStore);
45
+ const _hasMultiSelection = hasMultiSelection();
46
+ const clientIds = _hasMultiSelection ? getMultiSelectedBlockClientIds() : getSelectedBlockClientIds();
47
+ if (clientId === void 0) {
48
+ clientId = clientIds[0];
49
+ }
50
+ const previousSiblingId = getIndentTarget(select, clientId);
51
+ if (!previousSiblingId) {
52
+ return false;
53
+ }
54
+ const rootClientId = getBlockRootClientId(clientId);
55
+ const selectionStart = getSelectionStart();
56
+ const selectionEnd = getSelectionEnd();
57
+ registry.batch(() => {
58
+ moveBlocksToNestedList(
59
+ registry,
60
+ clientIds,
61
+ rootClientId,
62
+ previousSiblingId
63
+ );
64
+ if (!_hasMultiSelection) {
65
+ selectionChange(
66
+ clientIds[0],
67
+ selectionEnd.attributeKey,
68
+ selectionEnd.clientId === selectionStart.clientId ? selectionStart.offset : selectionEnd.offset,
69
+ selectionEnd.offset
70
+ );
71
+ } else {
72
+ multiSelect(clientIds[0], clientIds[clientIds.length - 1]);
73
+ }
74
+ });
75
+ return true;
76
+ }
77
+ function outdentListItems(registry, clientIds) {
78
+ const select = registry.select(blockEditorStore);
79
+ const {
80
+ getBlockRootClientId,
81
+ getBlockName,
82
+ getBlockOrder,
83
+ getBlockIndex,
84
+ getSelectedBlockClientIds
85
+ } = select;
86
+ const { moveBlocksToPosition, removeBlock, multiSelect } = registry.dispatch(blockEditorStore);
87
+ if (clientIds === void 0) {
88
+ clientIds = getSelectedBlockClientIds();
89
+ }
90
+ if (!Array.isArray(clientIds)) {
91
+ clientIds = [clientIds];
92
+ }
93
+ if (!clientIds.length) {
94
+ return false;
95
+ }
96
+ const firstClientId = clientIds[0];
97
+ if (getBlockName(firstClientId) !== "core/list-item") {
98
+ return false;
99
+ }
100
+ const parentListItemId = getOutdentTarget(select, firstClientId);
101
+ if (!parentListItemId) {
102
+ return false;
103
+ }
104
+ const parentListId = getBlockRootClientId(firstClientId);
105
+ const lastClientId = clientIds[clientIds.length - 1];
106
+ const order = getBlockOrder(parentListId);
107
+ const followingListItems = order.slice(getBlockIndex(lastClientId) + 1);
108
+ registry.batch(() => {
109
+ if (followingListItems.length) {
110
+ moveBlocksToNestedList(
111
+ registry,
112
+ followingListItems,
113
+ parentListId,
114
+ firstClientId
115
+ );
116
+ }
117
+ moveBlocksToPosition(
118
+ clientIds,
119
+ parentListId,
120
+ getBlockRootClientId(parentListItemId),
121
+ getBlockIndex(parentListItemId) + 1
122
+ );
123
+ if (!getBlockOrder(parentListId).length) {
124
+ const shouldSelectParent = false;
125
+ removeBlock(parentListId, shouldSelectParent);
126
+ }
127
+ if (clientIds.length > 1) {
128
+ multiSelect(firstClientId, lastClientId);
129
+ }
130
+ });
131
+ return true;
132
+ }
133
+ export {
134
+ getIndentTarget,
135
+ getOutdentTarget,
136
+ indentListItems,
137
+ moveBlocksToNestedList,
138
+ outdentListItems
139
+ };
140
+ //# sourceMappingURL=utils.mjs.map