@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
@@ -15,27 +15,24 @@ import {
15
15
  formatIndent
16
16
  } from "@wordpress/icons";
17
17
  import { useMergeRefs } from "@wordpress/compose";
18
- import { useSelect } from "@wordpress/data";
18
+ import { useSelect, useRegistry } from "@wordpress/data";
19
19
  import { displayShortcut } from "@wordpress/keycodes";
20
+ import { useEnter, useTab, useMultiSelectTab, useMerge } from "./hooks/index.mjs";
20
21
  import {
21
- useEnter,
22
- useSpace,
23
- useIndentListItem,
24
- useOutdentListItem,
25
- useMerge
26
- } from "./hooks/index.mjs";
22
+ indentListItems,
23
+ outdentListItems,
24
+ getIndentTarget,
25
+ getOutdentTarget
26
+ } from "./utils.mjs";
27
27
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
28
28
  function IndentUI({ clientId }) {
29
- const indentListItem = useIndentListItem(clientId);
30
- const outdentListItem = useOutdentListItem();
29
+ const registry = useRegistry();
31
30
  const { canIndent, canOutdent } = useSelect(
32
31
  (select) => {
33
- const { getBlockIndex, getBlockRootClientId, getBlockName } = select(blockEditorStore);
32
+ const storeSelect = select(blockEditorStore);
34
33
  return {
35
- canIndent: getBlockIndex(clientId) > 0,
36
- canOutdent: getBlockName(
37
- getBlockRootClientId(getBlockRootClientId(clientId))
38
- ) === "core/list-item"
34
+ canIndent: !!getIndentTarget(storeSelect, clientId),
35
+ canOutdent: !!getOutdentTarget(storeSelect, clientId)
39
36
  };
40
37
  },
41
38
  [clientId]
@@ -49,7 +46,7 @@ function IndentUI({ clientId }) {
49
46
  shortcut: displayShortcut.shift("Tab"),
50
47
  description: __("Outdent list item"),
51
48
  disabled: !canOutdent,
52
- onClick: () => outdentListItem()
49
+ onClick: () => outdentListItems(registry)
53
50
  }
54
51
  ),
55
52
  /* @__PURE__ */ jsx(
@@ -60,7 +57,7 @@ function IndentUI({ clientId }) {
60
57
  shortcut: "Tab",
61
58
  description: __("Indent list item"),
62
59
  disabled: !canIndent,
63
- onClick: () => indentListItem()
60
+ onClick: () => indentListItems(registry, clientId)
64
61
  }
65
62
  )
66
63
  ] });
@@ -78,14 +75,19 @@ function ListItemEdit({
78
75
  __unstableDisableDropZone: true
79
76
  });
80
77
  const useEnterRef = useEnter(clientId);
81
- const useSpaceRef = useSpace(clientId);
78
+ const useTabRef = useTab();
79
+ const useMultiSelectTabRef = useMultiSelectTab(clientId);
82
80
  const onMerge = useMerge(clientId, mergeBlocks);
83
81
  return /* @__PURE__ */ jsxs(Fragment, { children: [
84
82
  /* @__PURE__ */ jsxs("li", { ...innerBlocksProps, children: [
85
83
  /* @__PURE__ */ jsx(
86
84
  RichText,
87
85
  {
88
- ref: useMergeRefs([useEnterRef, useSpaceRef]),
86
+ ref: useMergeRefs([
87
+ useEnterRef,
88
+ useTabRef,
89
+ useMultiSelectTabRef
90
+ ]),
89
91
  identifier: "content",
90
92
  tagName: "div",
91
93
  onChange: (nextContent) => setAttributes({ content: nextContent }),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/list-item/edit.jsx"],
4
- "sourcesContent": ["import {\n\tRichText,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tBlockControls,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { isRTL, __ } from '@wordpress/i18n';\nimport { ToolbarButton } from '@wordpress/components';\nimport {\n\tformatOutdent,\n\tformatOutdentRTL,\n\tformatIndentRTL,\n\tformatIndent,\n} from '@wordpress/icons';\nimport { useMergeRefs } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { displayShortcut } from '@wordpress/keycodes';\nimport {\n\tuseEnter,\n\tuseSpace,\n\tuseIndentListItem,\n\tuseOutdentListItem,\n\tuseMerge,\n} from './hooks';\n\nexport function IndentUI( { clientId } ) {\n\tconst indentListItem = useIndentListItem( clientId );\n\tconst outdentListItem = useOutdentListItem();\n\tconst { canIndent, canOutdent } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockIndex, getBlockRootClientId, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tcanIndent: getBlockIndex( clientId ) > 0,\n\t\t\t\tcanOutdent:\n\t\t\t\t\tgetBlockName(\n\t\t\t\t\t\tgetBlockRootClientId( getBlockRootClientId( clientId ) )\n\t\t\t\t\t) === 'core/list-item',\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<ToolbarButton\n\t\t\t\ticon={ isRTL() ? formatOutdentRTL : formatOutdent }\n\t\t\t\ttitle={ __( 'Outdent' ) }\n\t\t\t\tshortcut={ displayShortcut.shift( 'Tab' ) }\n\t\t\t\tdescription={ __( 'Outdent list item' ) }\n\t\t\t\tdisabled={ ! canOutdent }\n\t\t\t\tonClick={ () => outdentListItem() }\n\t\t\t/>\n\t\t\t<ToolbarButton\n\t\t\t\ticon={ isRTL() ? formatIndentRTL : formatIndent }\n\t\t\t\ttitle={ __( 'Indent' ) }\n\t\t\t\tshortcut=\"Tab\"\n\t\t\t\tdescription={ __( 'Indent list item' ) }\n\t\t\t\tdisabled={ ! canIndent }\n\t\t\t\tonClick={ () => indentListItem() }\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nexport default function ListItemEdit( {\n\tattributes,\n\tsetAttributes,\n\tclientId,\n\tmergeBlocks,\n} ) {\n\tconst { placeholder, content } = attributes;\n\tconst blockProps = useBlockProps();\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\trenderAppender: false,\n\t\t__unstableDisableDropZone: true,\n\t} );\n\tconst useEnterRef = useEnter( clientId );\n\tconst useSpaceRef = useSpace( clientId );\n\tconst onMerge = useMerge( clientId, mergeBlocks );\n\treturn (\n\t\t<>\n\t\t\t<li { ...innerBlocksProps }>\n\t\t\t\t<RichText\n\t\t\t\t\tref={ useMergeRefs( [ useEnterRef, useSpaceRef ] ) }\n\t\t\t\t\tidentifier=\"content\"\n\t\t\t\t\ttagName=\"div\"\n\t\t\t\t\tonChange={ ( nextContent ) =>\n\t\t\t\t\t\tsetAttributes( { content: nextContent } )\n\t\t\t\t\t}\n\t\t\t\t\tvalue={ content }\n\t\t\t\t\taria-label={ __( 'List text' ) }\n\t\t\t\t\tplaceholder={ placeholder || __( 'List' ) }\n\t\t\t\t\tonMerge={ onMerge }\n\t\t\t\t/>\n\t\t\t\t{ innerBlocksProps.children }\n\t\t\t</li>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<IndentUI clientId={ clientId } />\n\t\t\t</BlockControls>\n\t\t</>\n\t);\n}\n"],
5
- "mappings": ";AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,OAAO,UAAU;AAC1B,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,oBAAoB;AAC7B,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAChC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAqBL,mBACC,KADD;AAnBK,SAAS,SAAU,EAAE,SAAS,GAAI;AACxC,QAAM,iBAAiB,kBAAmB,QAAS;AACnD,QAAM,kBAAkB,mBAAmB;AAC3C,QAAM,EAAE,WAAW,WAAW,IAAI;AAAA,IACjC,CAAE,WAAY;AACb,YAAM,EAAE,eAAe,sBAAsB,aAAa,IACzD,OAAQ,gBAAiB;AAC1B,aAAO;AAAA,QACN,WAAW,cAAe,QAAS,IAAI;AAAA,QACvC,YACC;AAAA,UACC,qBAAsB,qBAAsB,QAAS,CAAE;AAAA,QACxD,MAAM;AAAA,MACR;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,SACC,iCACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,MAAO,MAAM,IAAI,mBAAmB;AAAA,QACpC,OAAQ,GAAI,SAAU;AAAA,QACtB,UAAW,gBAAgB,MAAO,KAAM;AAAA,QACxC,aAAc,GAAI,mBAAoB;AAAA,QACtC,UAAW,CAAE;AAAA,QACb,SAAU,MAAM,gBAAgB;AAAA;AAAA,IACjC;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACA,MAAO,MAAM,IAAI,kBAAkB;AAAA,QACnC,OAAQ,GAAI,QAAS;AAAA,QACrB,UAAS;AAAA,QACT,aAAc,GAAI,kBAAmB;AAAA,QACrC,UAAW,CAAE;AAAA,QACb,SAAU,MAAM,eAAe;AAAA;AAAA,IAChC;AAAA,KACD;AAEF;AAEe,SAAR,aAA+B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,EAAE,aAAa,QAAQ,IAAI;AACjC,QAAM,aAAa,cAAc;AACjC,QAAM,mBAAmB,oBAAqB,YAAY;AAAA,IACzD,gBAAgB;AAAA,IAChB,2BAA2B;AAAA,EAC5B,CAAE;AACF,QAAM,cAAc,SAAU,QAAS;AACvC,QAAM,cAAc,SAAU,QAAS;AACvC,QAAM,UAAU,SAAU,UAAU,WAAY;AAChD,SACC,iCACC;AAAA,yBAAC,QAAK,GAAG,kBACR;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,KAAM,aAAc,CAAE,aAAa,WAAY,CAAE;AAAA,UACjD,YAAW;AAAA,UACX,SAAQ;AAAA,UACR,UAAW,CAAE,gBACZ,cAAe,EAAE,SAAS,YAAY,CAAE;AAAA,UAEzC,OAAQ;AAAA,UACR,cAAa,GAAI,WAAY;AAAA,UAC7B,aAAc,eAAe,GAAI,MAAO;AAAA,UACxC;AAAA;AAAA,MACD;AAAA,MACE,iBAAiB;AAAA,OACpB;AAAA,IACA,oBAAC,iBAAc,OAAM,SACpB,8BAAC,YAAS,UAAsB,GACjC;AAAA,KACD;AAEF;",
4
+ "sourcesContent": ["import {\n\tRichText,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tBlockControls,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { isRTL, __ } from '@wordpress/i18n';\nimport { ToolbarButton } from '@wordpress/components';\nimport {\n\tformatOutdent,\n\tformatOutdentRTL,\n\tformatIndentRTL,\n\tformatIndent,\n} from '@wordpress/icons';\nimport { useMergeRefs } from '@wordpress/compose';\nimport { useSelect, useRegistry } from '@wordpress/data';\nimport { displayShortcut } from '@wordpress/keycodes';\nimport { useEnter, useTab, useMultiSelectTab, useMerge } from './hooks';\nimport {\n\tindentListItems,\n\toutdentListItems,\n\tgetIndentTarget,\n\tgetOutdentTarget,\n} from './utils';\n\nexport function IndentUI( { clientId } ) {\n\tconst registry = useRegistry();\n\tconst { canIndent, canOutdent } = useSelect(\n\t\t( select ) => {\n\t\t\tconst storeSelect = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tcanIndent: !! getIndentTarget( storeSelect, clientId ),\n\t\t\t\tcanOutdent: !! getOutdentTarget( storeSelect, clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<ToolbarButton\n\t\t\t\ticon={ isRTL() ? formatOutdentRTL : formatOutdent }\n\t\t\t\ttitle={ __( 'Outdent' ) }\n\t\t\t\tshortcut={ displayShortcut.shift( 'Tab' ) }\n\t\t\t\tdescription={ __( 'Outdent list item' ) }\n\t\t\t\tdisabled={ ! canOutdent }\n\t\t\t\tonClick={ () => outdentListItems( registry ) }\n\t\t\t/>\n\t\t\t<ToolbarButton\n\t\t\t\ticon={ isRTL() ? formatIndentRTL : formatIndent }\n\t\t\t\ttitle={ __( 'Indent' ) }\n\t\t\t\tshortcut=\"Tab\"\n\t\t\t\tdescription={ __( 'Indent list item' ) }\n\t\t\t\tdisabled={ ! canIndent }\n\t\t\t\tonClick={ () => indentListItems( registry, clientId ) }\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nexport default function ListItemEdit( {\n\tattributes,\n\tsetAttributes,\n\tclientId,\n\tmergeBlocks,\n} ) {\n\tconst { placeholder, content } = attributes;\n\tconst blockProps = useBlockProps();\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\trenderAppender: false,\n\t\t__unstableDisableDropZone: true,\n\t} );\n\tconst useEnterRef = useEnter( clientId );\n\tconst useTabRef = useTab();\n\tconst useMultiSelectTabRef = useMultiSelectTab( clientId );\n\tconst onMerge = useMerge( clientId, mergeBlocks );\n\treturn (\n\t\t<>\n\t\t\t<li { ...innerBlocksProps }>\n\t\t\t\t<RichText\n\t\t\t\t\tref={ useMergeRefs( [\n\t\t\t\t\t\tuseEnterRef,\n\t\t\t\t\t\tuseTabRef,\n\t\t\t\t\t\tuseMultiSelectTabRef,\n\t\t\t\t\t] ) }\n\t\t\t\t\tidentifier=\"content\"\n\t\t\t\t\ttagName=\"div\"\n\t\t\t\t\tonChange={ ( nextContent ) =>\n\t\t\t\t\t\tsetAttributes( { content: nextContent } )\n\t\t\t\t\t}\n\t\t\t\t\tvalue={ content }\n\t\t\t\t\taria-label={ __( 'List text' ) }\n\t\t\t\t\tplaceholder={ placeholder || __( 'List' ) }\n\t\t\t\t\tonMerge={ onMerge }\n\t\t\t\t/>\n\t\t\t\t{ innerBlocksProps.children }\n\t\t\t</li>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<IndentUI clientId={ clientId } />\n\t\t\t</BlockControls>\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": ";AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,OAAO,UAAU;AAC1B,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,oBAAoB;AAC7B,SAAS,WAAW,mBAAmB;AACvC,SAAS,uBAAuB;AAChC,SAAS,UAAU,QAAQ,mBAAmB,gBAAgB;AAC9D;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAgBL,mBACC,KADD;AAdK,SAAS,SAAU,EAAE,SAAS,GAAI;AACxC,QAAM,WAAW,YAAY;AAC7B,QAAM,EAAE,WAAW,WAAW,IAAI;AAAA,IACjC,CAAE,WAAY;AACb,YAAM,cAAc,OAAQ,gBAAiB;AAC7C,aAAO;AAAA,QACN,WAAW,CAAC,CAAE,gBAAiB,aAAa,QAAS;AAAA,QACrD,YAAY,CAAC,CAAE,iBAAkB,aAAa,QAAS;AAAA,MACxD;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,SACC,iCACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,MAAO,MAAM,IAAI,mBAAmB;AAAA,QACpC,OAAQ,GAAI,SAAU;AAAA,QACtB,UAAW,gBAAgB,MAAO,KAAM;AAAA,QACxC,aAAc,GAAI,mBAAoB;AAAA,QACtC,UAAW,CAAE;AAAA,QACb,SAAU,MAAM,iBAAkB,QAAS;AAAA;AAAA,IAC5C;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACA,MAAO,MAAM,IAAI,kBAAkB;AAAA,QACnC,OAAQ,GAAI,QAAS;AAAA,QACrB,UAAS;AAAA,QACT,aAAc,GAAI,kBAAmB;AAAA,QACrC,UAAW,CAAE;AAAA,QACb,SAAU,MAAM,gBAAiB,UAAU,QAAS;AAAA;AAAA,IACrD;AAAA,KACD;AAEF;AAEe,SAAR,aAA+B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,EAAE,aAAa,QAAQ,IAAI;AACjC,QAAM,aAAa,cAAc;AACjC,QAAM,mBAAmB,oBAAqB,YAAY;AAAA,IACzD,gBAAgB;AAAA,IAChB,2BAA2B;AAAA,EAC5B,CAAE;AACF,QAAM,cAAc,SAAU,QAAS;AACvC,QAAM,YAAY,OAAO;AACzB,QAAM,uBAAuB,kBAAmB,QAAS;AACzD,QAAM,UAAU,SAAU,UAAU,WAAY;AAChD,SACC,iCACC;AAAA,yBAAC,QAAK,GAAG,kBACR;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,KAAM,aAAc;AAAA,YACnB;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAE;AAAA,UACF,YAAW;AAAA,UACX,SAAQ;AAAA,UACR,UAAW,CAAE,gBACZ,cAAe,EAAE,SAAS,YAAY,CAAE;AAAA,UAEzC,OAAQ;AAAA,UACR,cAAa,GAAI,WAAY;AAAA,UAC7B,aAAc,eAAe,GAAI,MAAO;AAAA,UACxC;AAAA;AAAA,MACD;AAAA,MACE,iBAAiB;AAAA,OACpB;AAAA,IACA,oBAAC,iBAAc,OAAM,SACpB,8BAAC,YAAS,UAAsB,GACjC;AAAA,KACD;AAEF;",
6
6
  "names": []
7
7
  }
@@ -1,14 +1,12 @@
1
1
  // packages/block-library/src/list-item/hooks/index.js
2
- import { default as default2 } from "./use-outdent-list-item.mjs";
3
- import { default as default3 } from "./use-indent-list-item.mjs";
4
- import { default as default4 } from "./use-enter.mjs";
5
- import { default as default5 } from "./use-space.mjs";
6
- import { default as default6 } from "./use-merge.mjs";
2
+ import { default as default2 } from "./use-enter.mjs";
3
+ import { default as default3 } from "./use-tab.mjs";
4
+ import { default as default4 } from "./use-multi-select-tab.mjs";
5
+ import { default as default5 } from "./use-merge.mjs";
7
6
  export {
8
- default4 as useEnter,
9
- default3 as useIndentListItem,
10
- default6 as useMerge,
11
- default2 as useOutdentListItem,
12
- default5 as useSpace
7
+ default2 as useEnter,
8
+ default5 as useMerge,
9
+ default4 as useMultiSelectTab,
10
+ default3 as useTab
13
11
  };
14
12
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/list-item/hooks/index.js"],
4
- "sourcesContent": ["export { default as useOutdentListItem } from './use-outdent-list-item';\nexport { default as useIndentListItem } from './use-indent-list-item';\nexport { default as useEnter } from './use-enter';\nexport { default as useSpace } from './use-space';\nexport { default as useMerge } from './use-merge';\n"],
5
- "mappings": ";AAAA,SAAoB,WAAXA,gBAAqC;AAC9C,SAAoB,WAAXA,gBAAoC;AAC7C,SAAoB,WAAXA,gBAA2B;AACpC,SAAoB,WAAXA,gBAA2B;AACpC,SAAoB,WAAXA,gBAA2B;",
4
+ "sourcesContent": ["export { default as useEnter } from './use-enter';\nexport { default as useTab } from './use-tab';\nexport { default as useMultiSelectTab } from './use-multi-select-tab';\nexport { default as useMerge } from './use-merge';\n"],
5
+ "mappings": ";AAAA,SAAoB,WAAXA,gBAA2B;AACpC,SAAoB,WAAXA,gBAAyB;AAClC,SAAoB,WAAXA,gBAAoC;AAC7C,SAAoB,WAAXA,gBAA2B;",
6
6
  "names": ["default"]
7
7
  }
@@ -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
+ }