@wordpress/block-library 7.3.10 → 7.6.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 (752) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +3 -2
  3. package/babel-plugin.js +154 -0
  4. package/build/archives/edit.js +1 -1
  5. package/build/archives/edit.js.map +1 -1
  6. package/build/audio/edit.js +5 -17
  7. package/build/audio/edit.js.map +1 -1
  8. package/build/audio/edit.native.js +1 -1
  9. package/build/audio/edit.native.js.map +1 -1
  10. package/build/block/edit.js +10 -9
  11. package/build/block/edit.js.map +1 -1
  12. package/build/button/edit.native.js +7 -3
  13. package/build/button/edit.native.js.map +1 -1
  14. package/build/button/index.js +1 -0
  15. package/build/button/index.js.map +1 -1
  16. package/build/categories/edit.js +9 -4
  17. package/build/categories/edit.js.map +1 -1
  18. package/build/categories/index.js +5 -1
  19. package/build/categories/index.js.map +1 -1
  20. package/build/column/index.js +10 -0
  21. package/build/column/index.js.map +1 -1
  22. package/build/comment-author-avatar/index.js +1 -0
  23. package/build/comment-author-avatar/index.js.map +1 -1
  24. package/build/comment-template/edit.js +1 -3
  25. package/build/comment-template/edit.js.map +1 -1
  26. package/build/{comments-query-loop → comments}/edit/comments-inspector-controls.js +0 -0
  27. package/{build-module/comments-query-loop → build/comments}/edit/comments-inspector-controls.js.map +1 -1
  28. package/build/{comments-query-loop → comments}/edit.js +2 -2
  29. package/build/comments/edit.js.map +1 -0
  30. package/build/{comments-query-loop → comments}/index.js +1 -1
  31. package/build/comments/index.js.map +1 -0
  32. package/build/{comments-query-loop → comments}/save.js +2 -2
  33. package/build/comments/save.js.map +1 -0
  34. package/build/comments-title/index.js +1 -1
  35. package/build/comments-title/index.js.map +1 -1
  36. package/build/cover/controls.native.js +2 -3
  37. package/build/cover/controls.native.js.map +1 -1
  38. package/build/cover/edit/block-controls.js +115 -0
  39. package/build/cover/edit/block-controls.js.map +1 -0
  40. package/build/cover/edit/cover-placeholder.js +49 -0
  41. package/build/cover/edit/cover-placeholder.js.map +1 -0
  42. package/build/cover/edit/index.js +333 -0
  43. package/build/cover/edit/index.js.map +1 -0
  44. package/build/cover/edit/inspector-controls.js +224 -0
  45. package/build/cover/edit/inspector-controls.js.map +1 -0
  46. package/build/cover/edit/resizable-cover.js +67 -0
  47. package/build/cover/edit/resizable-cover.js.map +1 -0
  48. package/build/cover/edit/use-cover-is-dark.js +81 -0
  49. package/build/cover/edit/use-cover-is-dark.js.map +1 -0
  50. package/build/cover/edit.native.js +36 -16
  51. package/build/cover/edit.native.js.map +1 -1
  52. package/build/cover/focal-point-settings-button.native.js.map +1 -1
  53. package/build/cover/shared.js +9 -0
  54. package/build/cover/shared.js.map +1 -1
  55. package/build/cover/transforms.js +77 -6
  56. package/build/cover/transforms.js.map +1 -1
  57. package/build/cover/use-cover-is-dark.native.js +60 -0
  58. package/build/cover/use-cover-is-dark.native.js.map +1 -0
  59. package/build/embed/edit.js +12 -18
  60. package/build/embed/edit.js.map +1 -1
  61. package/build/embed/edit.native.js +1 -7
  62. package/build/embed/edit.native.js.map +1 -1
  63. package/build/embed/embed-preview.js +1 -1
  64. package/build/embed/embed-preview.js.map +1 -1
  65. package/build/embed/util.js +29 -4
  66. package/build/embed/util.js.map +1 -1
  67. package/build/file/edit.native.js +0 -1
  68. package/build/file/edit.native.js.map +1 -1
  69. package/build/file/inspector.js +2 -4
  70. package/build/file/inspector.js.map +1 -1
  71. package/build/gallery/edit.js +3 -2
  72. package/build/gallery/edit.js.map +1 -1
  73. package/build/gallery/gallery.js +1 -1
  74. package/build/gallery/gallery.js.map +1 -1
  75. package/build/gallery/shared.js +2 -2
  76. package/build/gallery/shared.js.map +1 -1
  77. package/build/gallery/use-get-media.js +2 -1
  78. package/build/gallery/use-get-media.js.map +1 -1
  79. package/build/gallery/use-short-code-transform.js +19 -18
  80. package/build/gallery/use-short-code-transform.js.map +1 -1
  81. package/build/gallery/v1/edit.js +1 -1
  82. package/build/gallery/v1/edit.js.map +1 -1
  83. package/build/gallery/v1/gallery.js +1 -1
  84. package/build/gallery/v1/gallery.js.map +1 -1
  85. package/build/group/index.js +1 -0
  86. package/build/group/index.js.map +1 -1
  87. package/build/heading/edit.js +6 -2
  88. package/build/heading/edit.js.map +1 -1
  89. package/build/heading/index.js +1 -0
  90. package/build/heading/index.js.map +1 -1
  91. package/build/heading/transforms.js +9 -4
  92. package/build/heading/transforms.js.map +1 -1
  93. package/build/html/edit.js +2 -2
  94. package/build/html/edit.js.map +1 -1
  95. package/build/image/edit.js +9 -8
  96. package/build/image/edit.js.map +1 -1
  97. package/build/image/edit.native.js +1 -2
  98. package/build/image/edit.native.js.map +1 -1
  99. package/build/image/image.js +2 -2
  100. package/build/image/image.js.map +1 -1
  101. package/build/index.js +48 -12
  102. package/build/index.js.map +1 -1
  103. package/build/index.native.js +14 -3
  104. package/build/index.native.js.map +1 -1
  105. package/build/is-block-metadata-experimental.js +18 -0
  106. package/build/is-block-metadata-experimental.js.map +1 -0
  107. package/build/latest-comments/edit.js +1 -1
  108. package/build/latest-comments/edit.js.map +1 -1
  109. package/build/latest-posts/edit.js +30 -4
  110. package/build/latest-posts/edit.js.map +1 -1
  111. package/build/latest-posts/edit.native.js +49 -0
  112. package/build/latest-posts/edit.native.js.map +1 -1
  113. package/build/list/transforms.js +6 -0
  114. package/build/list/transforms.js.map +1 -1
  115. package/build/list/v2/edit.js +2 -1
  116. package/build/list/v2/edit.js.map +1 -1
  117. package/build/list/v2/migrate.js +1 -0
  118. package/build/list/v2/migrate.js.map +1 -1
  119. package/build/list/v2/transforms.js +46 -9
  120. package/build/list/v2/transforms.js.map +1 -1
  121. package/build/list-item/edit.js +7 -9
  122. package/build/list-item/edit.js.map +1 -1
  123. package/build/list-item/hooks/index.js +24 -0
  124. package/build/list-item/hooks/index.js.map +1 -1
  125. package/build/list-item/hooks/use-backspace.js +59 -0
  126. package/build/list-item/hooks/use-backspace.js.map +1 -0
  127. package/build/list-item/hooks/use-enter.js +6 -9
  128. package/build/list-item/hooks/use-enter.js.map +1 -1
  129. package/build/list-item/hooks/use-indent-list-item.js +33 -39
  130. package/build/list-item/hooks/use-indent-list-item.js.map +1 -1
  131. package/build/list-item/hooks/use-space.js +54 -0
  132. package/build/list-item/hooks/use-space.js.map +1 -0
  133. package/build/list-item/hooks/use-split.js +30 -0
  134. package/build/list-item/hooks/use-split.js.map +1 -0
  135. package/build/list-item/index.js +1 -0
  136. package/build/list-item/index.js.map +1 -1
  137. package/build/list-item/utils.js +1 -1
  138. package/build/list-item/utils.js.map +1 -1
  139. package/build/loginout/edit.js +1 -1
  140. package/build/loginout/edit.js.map +1 -1
  141. package/build/media-text/edit.js +1 -2
  142. package/build/media-text/edit.js.map +1 -1
  143. package/build/media-text/edit.native.js +3 -2
  144. package/build/media-text/edit.native.js.map +1 -1
  145. package/build/media-text/media-container.native.js +2 -4
  146. package/build/media-text/media-container.native.js.map +1 -1
  147. package/build/media-text/transforms.js +137 -8
  148. package/build/media-text/transforms.js.map +1 -1
  149. package/build/navigation/edit/index.js +86 -81
  150. package/build/navigation/edit/index.js.map +1 -1
  151. package/build/navigation/edit/inner-blocks.js +1 -5
  152. package/build/navigation/edit/inner-blocks.js.map +1 -1
  153. package/build/navigation/edit/unsaved-inner-blocks.js +5 -4
  154. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  155. package/build/navigation/index.js +1 -1
  156. package/build/navigation/use-navigation-entities.js +3 -3
  157. package/build/navigation/use-navigation-entities.js.map +1 -1
  158. package/build/navigation/view-modal.js +62 -0
  159. package/build/navigation/view-modal.js.map +1 -0
  160. package/build/navigation/view.js +1 -34
  161. package/build/navigation/view.js.map +1 -1
  162. package/build/navigation-link/edit.js +1 -1
  163. package/build/navigation-link/edit.js.map +1 -1
  164. package/build/navigation-link/fallback-variations.js +1 -1
  165. package/build/navigation-link/fallback-variations.js.map +1 -1
  166. package/build/navigation-link/hooks.js +1 -1
  167. package/build/navigation-link/hooks.js.map +1 -1
  168. package/build/page-list/convert-to-links-modal.js +1 -1
  169. package/build/page-list/convert-to-links-modal.js.map +1 -1
  170. package/build/page-list/edit.js +1 -1
  171. package/build/page-list/edit.js.map +1 -1
  172. package/build/paragraph/edit.js +10 -0
  173. package/build/paragraph/edit.js.map +1 -1
  174. package/build/paragraph/edit.native.js +6 -2
  175. package/build/paragraph/edit.native.js.map +1 -1
  176. package/build/paragraph/use-enter.js +94 -0
  177. package/build/paragraph/use-enter.js.map +1 -0
  178. package/build/post-author/edit.js +2 -2
  179. package/build/post-author/edit.js.map +1 -1
  180. package/build/post-author-name/index.js +1 -0
  181. package/build/post-author-name/index.js.map +1 -1
  182. package/build/post-comment/index.js +2 -1
  183. package/build/post-comment/index.js.map +1 -1
  184. package/build/post-comments/edit.js +14 -35
  185. package/build/post-comments/edit.js.map +1 -1
  186. package/build/post-comments/index.js +1 -1
  187. package/build/post-comments-count/index.js +1 -0
  188. package/build/post-comments-count/index.js.map +1 -1
  189. package/build/post-comments-form/edit.js +37 -24
  190. package/build/post-comments-form/edit.js.map +1 -1
  191. package/build/post-comments-form/form.js +48 -0
  192. package/build/post-comments-form/form.js.map +1 -0
  193. package/build/post-comments-link/index.js +1 -0
  194. package/build/post-comments-link/index.js.map +1 -1
  195. package/build/post-excerpt/edit.js +1 -1
  196. package/build/post-excerpt/edit.js.map +1 -1
  197. package/build/post-featured-image/edit.js +1 -1
  198. package/build/post-featured-image/edit.js.map +1 -1
  199. package/build/post-template/edit.js +7 -2
  200. package/build/post-template/edit.js.map +1 -1
  201. package/build/post-terms/edit.js +35 -4
  202. package/build/post-terms/edit.js.map +1 -1
  203. package/build/post-terms/hooks.js +33 -0
  204. package/build/post-terms/hooks.js.map +1 -0
  205. package/build/post-terms/index.js +20 -5
  206. package/build/post-terms/index.js.map +1 -1
  207. package/build/post-title/index.js +1 -1
  208. package/build/post-title/index.js.map +1 -1
  209. package/build/pullquote/edit.js +1 -1
  210. package/build/pullquote/edit.js.map +1 -1
  211. package/build/pullquote/edit.native.js +1 -1
  212. package/build/pullquote/edit.native.js.map +1 -1
  213. package/build/query/edit/inspector-controls/index.js +26 -17
  214. package/build/query/edit/inspector-controls/index.js.map +1 -1
  215. package/build/query/edit/inspector-controls/parent-control.js +148 -0
  216. package/build/query/edit/inspector-controls/parent-control.js.map +1 -0
  217. package/build/query/edit/inspector-controls/sticky-control.js +41 -0
  218. package/build/query/edit/inspector-controls/sticky-control.js.map +1 -0
  219. package/build/query/index.js +2 -1
  220. package/build/query/index.js.map +1 -1
  221. package/build/query/utils.js +28 -2
  222. package/build/query/utils.js.map +1 -1
  223. package/build/query-title/index.js +1 -1
  224. package/build/query-title/index.js.map +1 -1
  225. package/build/query-title/variations.js +1 -1
  226. package/build/query-title/variations.js.map +1 -1
  227. package/build/quote/edit.js +3 -2
  228. package/build/quote/edit.js.map +1 -1
  229. package/build/quote/index.js +7 -0
  230. package/build/quote/index.js.map +1 -1
  231. package/build/quote/v2/edit.js +12 -4
  232. package/build/quote/v2/edit.js.map +1 -1
  233. package/build/rss/edit.js +1 -1
  234. package/build/rss/edit.js.map +1 -1
  235. package/build/search/edit.js +12 -9
  236. package/build/search/edit.js.map +1 -1
  237. package/build/separator/index.js +3 -0
  238. package/build/separator/index.js.map +1 -1
  239. package/build/site-logo/edit.js +1 -1
  240. package/build/site-logo/edit.js.map +1 -1
  241. package/build/spacer/constants.js +9 -0
  242. package/build/spacer/constants.js.map +1 -0
  243. package/build/spacer/controls.js +3 -3
  244. package/build/spacer/controls.js.map +1 -1
  245. package/build/spacer/controls.native.js +2 -2
  246. package/build/spacer/controls.native.js.map +1 -1
  247. package/build/spacer/edit.js +5 -6
  248. package/build/spacer/edit.js.map +1 -1
  249. package/build/table/edit.js +23 -4
  250. package/build/table/edit.js.map +1 -1
  251. package/build/table-of-contents/edit.js +138 -66
  252. package/build/table-of-contents/edit.js.map +1 -1
  253. package/build/table-of-contents/index.js +13 -3
  254. package/build/table-of-contents/index.js.map +1 -1
  255. package/build/table-of-contents/list.js +16 -9
  256. package/build/table-of-contents/list.js.map +1 -1
  257. package/build/table-of-contents/save.js +40 -0
  258. package/build/table-of-contents/save.js.map +1 -0
  259. package/build/table-of-contents/utils.js +11 -77
  260. package/build/table-of-contents/utils.js.map +1 -1
  261. package/build/tag-cloud/edit.js +1 -1
  262. package/build/tag-cloud/edit.js.map +1 -1
  263. package/build/template-part/edit/index.js +7 -3
  264. package/build/template-part/edit/index.js.map +1 -1
  265. package/build/template-part/edit/inner-blocks.js +3 -8
  266. package/build/template-part/edit/inner-blocks.js.map +1 -1
  267. package/build/video/edit.js +5 -9
  268. package/build/video/edit.js.map +1 -1
  269. package/build/video/edit.native.js +1 -1
  270. package/build/video/edit.native.js.map +1 -1
  271. package/build-module/archives/edit.js +1 -1
  272. package/build-module/archives/edit.js.map +1 -1
  273. package/build-module/audio/edit.js +6 -18
  274. package/build-module/audio/edit.js.map +1 -1
  275. package/build-module/audio/edit.native.js +1 -1
  276. package/build-module/audio/edit.native.js.map +1 -1
  277. package/build-module/block/edit.js +11 -10
  278. package/build-module/block/edit.js.map +1 -1
  279. package/build-module/button/edit.native.js +7 -3
  280. package/build-module/button/edit.native.js.map +1 -1
  281. package/build-module/button/index.js +1 -0
  282. package/build-module/button/index.js.map +1 -1
  283. package/build-module/categories/edit.js +9 -4
  284. package/build-module/categories/edit.js.map +1 -1
  285. package/build-module/categories/index.js +5 -1
  286. package/build-module/categories/index.js.map +1 -1
  287. package/build-module/column/index.js +10 -0
  288. package/build-module/column/index.js.map +1 -1
  289. package/build-module/comment-author-avatar/index.js +1 -0
  290. package/build-module/comment-author-avatar/index.js.map +1 -1
  291. package/build-module/comment-template/edit.js +1 -3
  292. package/build-module/comment-template/edit.js.map +1 -1
  293. package/build-module/{comments-query-loop → comments}/edit/comments-inspector-controls.js +0 -0
  294. package/build-module/comments/edit/comments-inspector-controls.js.map +1 -0
  295. package/build-module/{comments-query-loop → comments}/edit.js +1 -1
  296. package/build-module/comments/edit.js.map +1 -0
  297. package/build-module/{comments-query-loop → comments}/index.js +1 -1
  298. package/build-module/comments/index.js.map +1 -0
  299. package/build-module/{comments-query-loop → comments}/save.js +1 -1
  300. package/build-module/comments/save.js.map +1 -0
  301. package/build-module/comments-title/index.js +1 -1
  302. package/build-module/comments-title/index.js.map +1 -1
  303. package/build-module/cover/controls.native.js +2 -3
  304. package/build-module/cover/controls.native.js.map +1 -1
  305. package/build-module/cover/edit/block-controls.js +104 -0
  306. package/build-module/cover/edit/block-controls.js.map +1 -0
  307. package/build-module/cover/edit/cover-placeholder.js +38 -0
  308. package/build-module/cover/edit/cover-placeholder.js.map +1 -0
  309. package/build-module/cover/edit/index.js +307 -0
  310. package/build-module/cover/edit/index.js.map +1 -0
  311. package/build-module/cover/edit/inspector-controls.js +215 -0
  312. package/build-module/cover/edit/inspector-controls.js.map +1 -0
  313. package/build-module/cover/edit/resizable-cover.js +55 -0
  314. package/build-module/cover/edit/resizable-cover.js.map +1 -0
  315. package/build-module/cover/edit/use-cover-is-dark.js +70 -0
  316. package/build-module/cover/edit/use-cover-is-dark.js.map +1 -0
  317. package/build-module/cover/edit.native.js +35 -17
  318. package/build-module/cover/edit.native.js.map +1 -1
  319. package/build-module/cover/focal-point-settings-button.native.js.map +1 -1
  320. package/build-module/cover/shared.js +7 -0
  321. package/build-module/cover/shared.js.map +1 -1
  322. package/build-module/cover/transforms.js +74 -6
  323. package/build-module/cover/transforms.js.map +1 -1
  324. package/build-module/cover/use-cover-is-dark.native.js +51 -0
  325. package/build-module/cover/use-cover-is-dark.native.js.map +1 -0
  326. package/build-module/embed/edit.js +13 -19
  327. package/build-module/embed/edit.js.map +1 -1
  328. package/build-module/embed/edit.native.js +2 -8
  329. package/build-module/embed/edit.native.js.map +1 -1
  330. package/build-module/embed/embed-preview.js +2 -2
  331. package/build-module/embed/embed-preview.js.map +1 -1
  332. package/build-module/embed/util.js +25 -3
  333. package/build-module/embed/util.js.map +1 -1
  334. package/build-module/file/edit.native.js +0 -1
  335. package/build-module/file/edit.native.js.map +1 -1
  336. package/build-module/file/inspector.js +2 -4
  337. package/build-module/file/inspector.js.map +1 -1
  338. package/build-module/gallery/edit.js +3 -2
  339. package/build-module/gallery/edit.js.map +1 -1
  340. package/build-module/gallery/gallery.js +2 -2
  341. package/build-module/gallery/gallery.js.map +1 -1
  342. package/build-module/gallery/shared.js +2 -2
  343. package/build-module/gallery/shared.js.map +1 -1
  344. package/build-module/gallery/use-get-media.js +2 -1
  345. package/build-module/gallery/use-get-media.js.map +1 -1
  346. package/build-module/gallery/use-short-code-transform.js +19 -18
  347. package/build-module/gallery/use-short-code-transform.js.map +1 -1
  348. package/build-module/gallery/v1/edit.js +1 -1
  349. package/build-module/gallery/v1/edit.js.map +1 -1
  350. package/build-module/gallery/v1/gallery.js +2 -2
  351. package/build-module/gallery/v1/gallery.js.map +1 -1
  352. package/build-module/group/index.js +1 -0
  353. package/build-module/group/index.js.map +1 -1
  354. package/build-module/heading/edit.js +6 -2
  355. package/build-module/heading/edit.js.map +1 -1
  356. package/build-module/heading/index.js +1 -0
  357. package/build-module/heading/index.js.map +1 -1
  358. package/build-module/heading/transforms.js +9 -4
  359. package/build-module/heading/transforms.js.map +1 -1
  360. package/build-module/html/edit.js +2 -2
  361. package/build-module/html/edit.js.map +1 -1
  362. package/build-module/image/edit.js +10 -9
  363. package/build-module/image/edit.js.map +1 -1
  364. package/build-module/image/edit.native.js +1 -2
  365. package/build-module/image/edit.native.js.map +1 -1
  366. package/build-module/image/image.js +3 -3
  367. package/build-module/image/image.js.map +1 -1
  368. package/build-module/index.js +43 -11
  369. package/build-module/index.js.map +1 -1
  370. package/build-module/index.native.js +14 -3
  371. package/build-module/index.native.js.map +1 -1
  372. package/build-module/is-block-metadata-experimental.js +16 -0
  373. package/build-module/is-block-metadata-experimental.js.map +1 -0
  374. package/build-module/latest-comments/edit.js +1 -1
  375. package/build-module/latest-comments/edit.js.map +1 -1
  376. package/build-module/latest-posts/edit.js +29 -5
  377. package/build-module/latest-posts/edit.js.map +1 -1
  378. package/build-module/latest-posts/edit.native.js +51 -2
  379. package/build-module/latest-posts/edit.native.js.map +1 -1
  380. package/build-module/list/transforms.js +6 -0
  381. package/build-module/list/transforms.js.map +1 -1
  382. package/build-module/list/v2/edit.js +2 -1
  383. package/build-module/list/v2/edit.js.map +1 -1
  384. package/build-module/list/v2/migrate.js +1 -3
  385. package/build-module/list/v2/migrate.js.map +1 -1
  386. package/build-module/list/v2/transforms.js +46 -9
  387. package/build-module/list/v2/transforms.js.map +1 -1
  388. package/build-module/list-item/edit.js +8 -9
  389. package/build-module/list-item/edit.js.map +1 -1
  390. package/build-module/list-item/hooks/index.js +3 -0
  391. package/build-module/list-item/hooks/index.js.map +1 -1
  392. package/build-module/list-item/hooks/use-backspace.js +44 -0
  393. package/build-module/list-item/hooks/use-backspace.js.map +1 -0
  394. package/build-module/list-item/hooks/use-enter.js +6 -9
  395. package/build-module/list-item/hooks/use-enter.js.map +1 -1
  396. package/build-module/list-item/hooks/use-indent-list-item.js +33 -38
  397. package/build-module/list-item/hooks/use-indent-list-item.js.map +1 -1
  398. package/build-module/list-item/hooks/use-space.js +40 -0
  399. package/build-module/list-item/hooks/use-space.js.map +1 -0
  400. package/build-module/list-item/hooks/use-split.js +19 -0
  401. package/build-module/list-item/hooks/use-split.js.map +1 -0
  402. package/build-module/list-item/index.js +1 -0
  403. package/build-module/list-item/index.js.map +1 -1
  404. package/build-module/list-item/utils.js +1 -1
  405. package/build-module/list-item/utils.js.map +1 -1
  406. package/build-module/loginout/edit.js +1 -1
  407. package/build-module/loginout/edit.js.map +1 -1
  408. package/build-module/media-text/edit.js +1 -2
  409. package/build-module/media-text/edit.js.map +1 -1
  410. package/build-module/media-text/edit.native.js +3 -2
  411. package/build-module/media-text/edit.native.js.map +1 -1
  412. package/build-module/media-text/media-container.native.js +2 -4
  413. package/build-module/media-text/media-container.native.js.map +1 -1
  414. package/build-module/media-text/transforms.js +137 -8
  415. package/build-module/media-text/transforms.js.map +1 -1
  416. package/build-module/navigation/edit/index.js +87 -82
  417. package/build-module/navigation/edit/index.js.map +1 -1
  418. package/build-module/navigation/edit/inner-blocks.js +2 -6
  419. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  420. package/build-module/navigation/edit/unsaved-inner-blocks.js +5 -4
  421. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  422. package/build-module/navigation/index.js +1 -1
  423. package/build-module/navigation/use-navigation-entities.js +1 -1
  424. package/build-module/navigation/use-navigation-entities.js.map +1 -1
  425. package/build-module/navigation/view-modal.js +56 -0
  426. package/build-module/navigation/view-modal.js.map +1 -0
  427. package/build-module/navigation/view.js +1 -30
  428. package/build-module/navigation/view.js.map +1 -1
  429. package/build-module/navigation-link/edit.js +1 -1
  430. package/build-module/navigation-link/edit.js.map +1 -1
  431. package/build-module/navigation-link/fallback-variations.js +1 -1
  432. package/build-module/navigation-link/fallback-variations.js.map +1 -1
  433. package/build-module/navigation-link/hooks.js +2 -2
  434. package/build-module/navigation-link/hooks.js.map +1 -1
  435. package/build-module/page-list/convert-to-links-modal.js +1 -1
  436. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  437. package/build-module/page-list/edit.js +1 -1
  438. package/build-module/page-list/edit.js.map +1 -1
  439. package/build-module/paragraph/edit.js +9 -0
  440. package/build-module/paragraph/edit.js.map +1 -1
  441. package/build-module/paragraph/edit.native.js +6 -2
  442. package/build-module/paragraph/edit.native.js.map +1 -1
  443. package/build-module/paragraph/use-enter.js +81 -0
  444. package/build-module/paragraph/use-enter.js.map +1 -0
  445. package/build-module/post-author/edit.js +2 -2
  446. package/build-module/post-author/edit.js.map +1 -1
  447. package/build-module/post-author-name/index.js +1 -0
  448. package/build-module/post-author-name/index.js.map +1 -1
  449. package/build-module/post-comment/index.js +2 -1
  450. package/build-module/post-comment/index.js.map +1 -1
  451. package/build-module/post-comments/edit.js +13 -35
  452. package/build-module/post-comments/edit.js.map +1 -1
  453. package/build-module/post-comments/index.js +1 -1
  454. package/build-module/post-comments-count/index.js +1 -0
  455. package/build-module/post-comments-count/index.js.map +1 -1
  456. package/build-module/post-comments-form/edit.js +38 -26
  457. package/build-module/post-comments-form/edit.js.map +1 -1
  458. package/build-module/post-comments-form/form.js +39 -0
  459. package/build-module/post-comments-form/form.js.map +1 -0
  460. package/build-module/post-comments-link/index.js +1 -0
  461. package/build-module/post-comments-link/index.js.map +1 -1
  462. package/build-module/post-excerpt/edit.js +1 -1
  463. package/build-module/post-excerpt/edit.js.map +1 -1
  464. package/build-module/post-featured-image/edit.js +1 -1
  465. package/build-module/post-featured-image/edit.js.map +1 -1
  466. package/build-module/post-template/edit.js +7 -2
  467. package/build-module/post-template/edit.js.map +1 -1
  468. package/build-module/post-terms/edit.js +35 -6
  469. package/build-module/post-terms/edit.js.map +1 -1
  470. package/build-module/post-terms/hooks.js +25 -0
  471. package/build-module/post-terms/hooks.js.map +1 -0
  472. package/build-module/post-terms/index.js +18 -8
  473. package/build-module/post-terms/index.js.map +1 -1
  474. package/build-module/post-title/index.js +1 -1
  475. package/build-module/post-title/index.js.map +1 -1
  476. package/build-module/pullquote/edit.js +2 -2
  477. package/build-module/pullquote/edit.js.map +1 -1
  478. package/build-module/pullquote/edit.native.js +2 -2
  479. package/build-module/pullquote/edit.native.js.map +1 -1
  480. package/build-module/query/edit/inspector-controls/index.js +24 -17
  481. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  482. package/build-module/query/edit/inspector-controls/parent-control.js +135 -0
  483. package/build-module/query/edit/inspector-controls/parent-control.js.map +1 -0
  484. package/build-module/query/edit/inspector-controls/sticky-control.js +31 -0
  485. package/build-module/query/edit/inspector-controls/sticky-control.js.map +1 -0
  486. package/build-module/query/index.js +2 -1
  487. package/build-module/query/index.js.map +1 -1
  488. package/build-module/query/utils.js +21 -0
  489. package/build-module/query/utils.js.map +1 -1
  490. package/build-module/query-title/index.js +1 -1
  491. package/build-module/query-title/index.js.map +1 -1
  492. package/build-module/query-title/variations.js +2 -2
  493. package/build-module/query-title/variations.js.map +1 -1
  494. package/build-module/quote/edit.js +4 -3
  495. package/build-module/quote/edit.js.map +1 -1
  496. package/build-module/quote/index.js +2 -1
  497. package/build-module/quote/index.js.map +1 -1
  498. package/build-module/quote/v2/edit.js +12 -5
  499. package/build-module/quote/v2/edit.js.map +1 -1
  500. package/build-module/rss/edit.js +1 -1
  501. package/build-module/rss/edit.js.map +1 -1
  502. package/build-module/search/edit.js +12 -9
  503. package/build-module/search/edit.js.map +1 -1
  504. package/build-module/separator/index.js +3 -0
  505. package/build-module/separator/index.js.map +1 -1
  506. package/build-module/site-logo/edit.js +1 -1
  507. package/build-module/site-logo/edit.js.map +1 -1
  508. package/build-module/spacer/constants.js +2 -0
  509. package/build-module/spacer/constants.js.map +1 -0
  510. package/build-module/spacer/controls.js +2 -2
  511. package/build-module/spacer/controls.js.map +1 -1
  512. package/build-module/spacer/controls.native.js +1 -1
  513. package/build-module/spacer/controls.native.js.map +1 -1
  514. package/build-module/spacer/edit.js +1 -1
  515. package/build-module/spacer/edit.js.map +1 -1
  516. package/build-module/table/edit.js +26 -7
  517. package/build-module/table/edit.js.map +1 -1
  518. package/build-module/table-of-contents/edit.js +136 -68
  519. package/build-module/table-of-contents/edit.js.map +1 -1
  520. package/build-module/table-of-contents/index.js +12 -3
  521. package/build-module/table-of-contents/index.js.map +1 -1
  522. package/build-module/table-of-contents/list.js +18 -10
  523. package/build-module/table-of-contents/list.js.map +1 -1
  524. package/build-module/table-of-contents/save.js +28 -0
  525. package/build-module/table-of-contents/save.js.map +1 -0
  526. package/build-module/table-of-contents/utils.js +11 -73
  527. package/build-module/table-of-contents/utils.js.map +1 -1
  528. package/build-module/tag-cloud/edit.js +1 -1
  529. package/build-module/tag-cloud/edit.js.map +1 -1
  530. package/build-module/template-part/edit/index.js +8 -4
  531. package/build-module/template-part/edit/index.js.map +1 -1
  532. package/build-module/template-part/edit/inner-blocks.js +4 -9
  533. package/build-module/template-part/edit/inner-blocks.js.map +1 -1
  534. package/build-module/video/edit.js +6 -10
  535. package/build-module/video/edit.js.map +1 -1
  536. package/build-module/video/edit.native.js +1 -1
  537. package/build-module/video/edit.native.js.map +1 -1
  538. package/build-style/{comments-query-loop → comments}/editor-rtl.css +0 -0
  539. package/build-style/{comments-query-loop → comments}/editor.css +0 -0
  540. package/build-style/common-rtl.css +32 -0
  541. package/build-style/common.css +32 -0
  542. package/build-style/cover/style-rtl.css +0 -4
  543. package/build-style/cover/style.css +0 -4
  544. package/build-style/editor-rtl.css +16 -10
  545. package/build-style/editor.css +16 -10
  546. package/build-style/image/editor-rtl.css +1 -1
  547. package/build-style/image/editor.css +1 -1
  548. package/build-style/navigation/style-rtl.css +3 -0
  549. package/build-style/navigation/style.css +3 -0
  550. package/build-style/separator/editor-rtl.css +1 -0
  551. package/build-style/separator/editor.css +1 -0
  552. package/build-style/style-rtl.css +73 -4
  553. package/build-style/style.css +73 -4
  554. package/build-style/table/editor-rtl.css +8 -0
  555. package/build-style/table/editor.css +8 -0
  556. package/build-style/table/style-rtl.css +38 -0
  557. package/build-style/table/style.css +38 -0
  558. package/build-style/video/editor-rtl.css +2 -5
  559. package/build-style/video/editor.css +2 -5
  560. package/build-types/table-of-contents/list.d.ts +12 -0
  561. package/build-types/table-of-contents/list.d.ts.map +1 -0
  562. package/build-types/table-of-contents/utils.d.ts +24 -0
  563. package/build-types/table-of-contents/utils.d.ts.map +1 -0
  564. package/package.json +30 -29
  565. package/src/archives/edit.js +1 -1
  566. package/src/audio/edit.js +7 -10
  567. package/src/audio/edit.native.js +1 -1
  568. package/src/avatar/block.json +0 -1
  569. package/src/avatar/index.php +2 -2
  570. package/src/block/edit.js +39 -42
  571. package/src/block/test/edit.native.js +1 -1
  572. package/src/button/block.json +1 -0
  573. package/src/button/edit.native.js +6 -3
  574. package/src/categories/block.json +5 -1
  575. package/src/categories/edit.js +9 -3
  576. package/src/categories/index.php +1 -0
  577. package/src/column/block.json +10 -0
  578. package/src/comment-author-avatar/block.json +1 -0
  579. package/src/comment-template/edit.js +1 -5
  580. package/src/{comments-query-loop → comments}/block.json +1 -1
  581. package/src/{comments-query-loop → comments}/edit/comments-inspector-controls.js +0 -0
  582. package/src/{comments-query-loop → comments}/edit.js +1 -1
  583. package/src/{comments-query-loop → comments}/editor.scss +0 -0
  584. package/src/{comments-query-loop → comments}/index.js +0 -0
  585. package/src/{comments-query-loop → comments}/save.js +1 -3
  586. package/src/comments-title/index.js +1 -1
  587. package/src/common.scss +24 -1
  588. package/src/cover/controls.native.js +1 -2
  589. package/src/cover/edit/block-controls.js +119 -0
  590. package/src/cover/edit/cover-placeholder.js +39 -0
  591. package/src/cover/edit/index.js +381 -0
  592. package/src/cover/edit/inspector-controls.js +286 -0
  593. package/src/cover/edit/resizable-cover.js +55 -0
  594. package/src/cover/edit/use-cover-is-dark.js +71 -0
  595. package/src/cover/edit.native.js +40 -14
  596. package/src/cover/editor.scss +1 -1
  597. package/src/cover/focal-point-settings-button.native.js +1 -1
  598. package/src/cover/shared.js +4 -0
  599. package/src/cover/style.native.scss +4 -0
  600. package/src/cover/style.scss +0 -4
  601. package/src/cover/test/__snapshots__/edit.native.js.snap +6 -6
  602. package/src/cover/test/block-controls.js +62 -0
  603. package/src/cover/test/transforms.js +301 -0
  604. package/src/cover/transforms.js +112 -7
  605. package/src/cover/use-cover-is-dark.native.js +51 -0
  606. package/src/editor.scss +1 -1
  607. package/src/embed/edit.js +19 -24
  608. package/src/embed/edit.native.js +9 -14
  609. package/src/embed/embed-preview.js +4 -2
  610. package/src/embed/util.js +34 -2
  611. package/src/file/edit.native.js +0 -1
  612. package/src/file/inspector.js +1 -3
  613. package/src/gallery/edit.js +3 -2
  614. package/src/gallery/gallery.js +2 -2
  615. package/src/gallery/shared.js +3 -2
  616. package/src/gallery/use-get-media.js +2 -1
  617. package/src/gallery/use-short-code-transform.js +19 -16
  618. package/src/gallery/v1/edit.js +1 -1
  619. package/src/gallery/v1/gallery.js +2 -2
  620. package/src/group/block.json +1 -0
  621. package/src/heading/block.json +1 -0
  622. package/src/heading/edit.js +5 -2
  623. package/src/heading/transforms.js +4 -3
  624. package/src/html/edit.js +2 -2
  625. package/src/image/edit.js +11 -5
  626. package/src/image/edit.native.js +1 -2
  627. package/src/image/editor.scss +1 -1
  628. package/src/image/image.js +9 -3
  629. package/src/image/test/edit.native.js +7 -7
  630. package/src/index.js +52 -30
  631. package/src/index.native.js +12 -2
  632. package/src/is-block-metadata-experimental.js +19 -0
  633. package/src/latest-comments/edit.js +1 -1
  634. package/src/latest-posts/edit.js +27 -2
  635. package/src/latest-posts/edit.native.js +56 -1
  636. package/src/list/transforms.js +7 -0
  637. package/src/list/v2/edit.js +1 -0
  638. package/src/list/v2/migrate.js +1 -1
  639. package/src/list/v2/transforms.js +35 -0
  640. package/src/list-item/block.json +2 -1
  641. package/src/list-item/edit.js +17 -10
  642. package/src/list-item/hooks/index.js +3 -0
  643. package/src/list-item/hooks/use-backspace.js +52 -0
  644. package/src/list-item/hooks/use-enter.js +9 -16
  645. package/src/list-item/hooks/use-indent-list-item.js +50 -63
  646. package/src/list-item/hooks/use-space.js +48 -0
  647. package/src/list-item/hooks/use-split.js +24 -0
  648. package/src/list-item/utils.js +1 -1
  649. package/src/loginout/edit.js +1 -1
  650. package/src/media-text/edit.js +1 -2
  651. package/src/media-text/edit.native.js +4 -2
  652. package/src/media-text/media-container.native.js +2 -4
  653. package/src/media-text/transforms.js +154 -0
  654. package/src/navigation/block.json +1 -1
  655. package/src/navigation/edit/index.js +175 -169
  656. package/src/navigation/edit/inner-blocks.js +1 -8
  657. package/src/navigation/edit/unsaved-inner-blocks.js +5 -4
  658. package/src/navigation/index.php +5 -0
  659. package/src/navigation/style.scss +3 -0
  660. package/src/navigation/use-navigation-entities.js +1 -1
  661. package/src/navigation/view-modal.js +68 -0
  662. package/src/navigation/view.js +0 -35
  663. package/src/navigation-link/edit.js +1 -1
  664. package/src/navigation-link/fallback-variations.js +1 -1
  665. package/src/navigation-link/hooks.js +2 -2
  666. package/src/navigation-link/test/__snapshots__/hooks.js.snap +4 -4
  667. package/src/page-list/convert-to-links-modal.js +1 -1
  668. package/src/page-list/edit.js +1 -4
  669. package/src/paragraph/edit.js +6 -0
  670. package/src/paragraph/edit.native.js +13 -1
  671. package/src/paragraph/use-enter.js +103 -0
  672. package/src/post-author/edit.js +25 -23
  673. package/src/post-author-name/block.json +1 -0
  674. package/src/post-comment/block.json +2 -1
  675. package/src/post-comments/block.json +1 -1
  676. package/src/post-comments/edit.js +13 -43
  677. package/src/post-comments/index.php +2 -0
  678. package/src/post-comments-count/block.json +1 -0
  679. package/src/post-comments-form/edit.js +50 -58
  680. package/src/post-comments-form/form.js +40 -0
  681. package/src/post-comments-link/block.json +1 -0
  682. package/src/post-excerpt/edit.js +1 -1
  683. package/src/post-featured-image/edit.js +1 -1
  684. package/src/post-template/edit.js +5 -0
  685. package/src/post-terms/block.json +8 -0
  686. package/src/post-terms/edit.js +47 -1
  687. package/src/post-terms/hooks.js +27 -0
  688. package/src/post-terms/index.js +14 -7
  689. package/src/post-terms/index.php +50 -2
  690. package/src/post-title/index.js +1 -1
  691. package/src/pullquote/edit.js +2 -2
  692. package/src/pullquote/edit.native.js +2 -2
  693. package/src/query/block.json +2 -1
  694. package/src/query/edit/inspector-controls/index.js +25 -11
  695. package/src/query/edit/inspector-controls/parent-control.js +133 -0
  696. package/src/query/edit/inspector-controls/sticky-control.js +25 -0
  697. package/src/query/utils.js +22 -0
  698. package/src/query-title/index.js +1 -1
  699. package/src/query-title/variations.js +2 -2
  700. package/src/quote/block.json +1 -0
  701. package/src/quote/edit.js +5 -2
  702. package/src/quote/index.js +1 -1
  703. package/src/quote/v2/edit.js +7 -2
  704. package/src/rss/edit.js +1 -1
  705. package/src/search/edit.js +14 -7
  706. package/src/search/index.php +85 -34
  707. package/src/separator/block.json +3 -0
  708. package/src/separator/editor.scss +1 -0
  709. package/src/site-logo/edit.js +1 -1
  710. package/src/spacer/constants.js +1 -0
  711. package/src/spacer/controls.js +2 -2
  712. package/src/spacer/controls.native.js +1 -1
  713. package/src/spacer/edit.js +1 -2
  714. package/src/table/edit.js +30 -6
  715. package/src/table/editor.scss +13 -0
  716. package/src/table/style.scss +52 -0
  717. package/src/table-of-contents/block.json +9 -2
  718. package/src/table-of-contents/edit.js +155 -75
  719. package/src/table-of-contents/index.js +2 -0
  720. package/src/table-of-contents/list.tsx +46 -0
  721. package/src/table-of-contents/save.js +25 -0
  722. package/src/table-of-contents/utils.ts +71 -0
  723. package/src/tag-cloud/block.json +1 -1
  724. package/src/tag-cloud/edit.js +1 -1
  725. package/src/template-part/edit/index.js +25 -15
  726. package/src/template-part/edit/inner-blocks.js +2 -10
  727. package/src/video/edit.js +8 -7
  728. package/src/video/edit.native.js +1 -1
  729. package/src/video/editor.scss +3 -6
  730. package/test/babel-plugin.js +67 -0
  731. package/tsconfig.json +11 -0
  732. package/tsconfig.tsbuildinfo +1 -0
  733. package/build/comments-query-loop/edit/comments-inspector-controls.js.map +0 -1
  734. package/build/comments-query-loop/edit.js.map +0 -1
  735. package/build/comments-query-loop/index.js.map +0 -1
  736. package/build/comments-query-loop/save.js.map +0 -1
  737. package/build/cover/edit.js +0 -668
  738. package/build/cover/edit.js.map +0 -1
  739. package/build/post-terms/variations.js +0 -37
  740. package/build/post-terms/variations.js.map +0 -1
  741. package/build-module/comments-query-loop/edit.js.map +0 -1
  742. package/build-module/comments-query-loop/index.js.map +0 -1
  743. package/build-module/comments-query-loop/save.js.map +0 -1
  744. package/build-module/cover/edit.js +0 -645
  745. package/build-module/cover/edit.js.map +0 -1
  746. package/build-module/post-terms/variations.js +0 -27
  747. package/build-module/post-terms/variations.js.map +0 -1
  748. package/src/cover/edit.js +0 -827
  749. package/src/post-terms/variations.js +0 -28
  750. package/src/table-of-contents/index.php +0 -346
  751. package/src/table-of-contents/list.js +0 -28
  752. package/src/table-of-contents/utils.js +0 -126
@@ -21,121 +21,200 @@ import {
21
21
  ToolbarButton,
22
22
  ToolbarGroup,
23
23
  } from '@wordpress/components';
24
+ import { useDisabled } from '@wordpress/compose';
24
25
  import { useDispatch, useSelect } from '@wordpress/data';
25
- import { renderToString, useEffect, useState } from '@wordpress/element';
26
+ import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
27
+ import { renderToString, useEffect } from '@wordpress/element';
26
28
  import { __ } from '@wordpress/i18n';
29
+ import { addQueryArgs, removeQueryArgs } from '@wordpress/url';
27
30
 
28
31
  /**
29
32
  * Internal dependencies
30
33
  */
34
+ import icon from './icon';
31
35
  import TableOfContentsList from './list';
32
- import { getHeadingsFromContent, linearToNestedHeadingList } from './utils';
36
+ import { linearToNestedHeadingList } from './utils';
37
+
38
+ /** @typedef {import('./utils').HeadingData} HeadingData */
33
39
 
34
40
  /**
35
41
  * Table of Contents block edit component.
36
42
  *
37
43
  * @param {Object} props The props.
38
44
  * @param {Object} props.attributes The block attributes.
39
- * @param {boolean} props.attributes.onlyIncludeCurrentPage
40
- * Whether to only include headings from the current page (if the post is
41
- * paginated).
45
+ * @param {HeadingData[]} props.attributes.headings A list of data for each heading in the post.
46
+ * @param {boolean} props.attributes.onlyIncludeCurrentPage Whether to only include headings from the current page (if the post is paginated).
42
47
  * @param {string} props.clientId
43
48
  * @param {(attributes: Object) => void} props.setAttributes
44
49
  *
45
50
  * @return {WPComponent} The component.
46
51
  */
47
52
  export default function TableOfContentsEdit( {
48
- attributes: { onlyIncludeCurrentPage },
53
+ attributes: { headings = [], onlyIncludeCurrentPage },
49
54
  clientId,
50
55
  setAttributes,
51
56
  } ) {
52
57
  const blockProps = useBlockProps();
58
+ const disabledRef = useDisabled();
53
59
 
54
- // Local state; not saved to block attributes. The saved block is dynamic and uses PHP to generate its content.
55
- const [ headings, setHeadings ] = useState( [] );
56
- const [ headingTree, setHeadingTree ] = useState( [] );
57
-
58
- const { listBlockExists, postContent } = useSelect(
59
- ( select ) => ( {
60
- listBlockExists: !! select( blocksStore ).getBlockType(
61
- 'core/list'
62
- ),
63
- // FIXME: @wordpress/block-library should not depend on @wordpress/editor.
64
- // Blocks can be loaded into a *non-post* block editor.
65
- // eslint-disable-next-line @wordpress/data-no-store-string-literals
66
- postContent: select( 'core/editor' ).getEditedPostContent(),
67
- } ),
60
+ const listBlockExists = useSelect(
61
+ ( select ) => !! select( blocksStore ).getBlockType( 'core/list' ),
68
62
  []
69
63
  );
70
64
 
71
- // The page this block would be part of on the front-end. For performance
72
- // reasons, this is only calculated when onlyIncludeCurrentPage is true.
73
- const pageIndex = useSelect(
74
- ( select ) => {
75
- if ( ! onlyIncludeCurrentPage ) {
76
- return null;
77
- }
65
+ const {
66
+ __unstableMarkNextChangeAsNotPersistent,
67
+ replaceBlocks,
68
+ } = useDispatch( blockEditorStore );
78
69
 
70
+ /**
71
+ * The latest heading data, or null if the new data deeply equals the saved
72
+ * headings attribute.
73
+ *
74
+ * Since useSelect forces a re-render when its return value is shallowly
75
+ * inequal to its prior call, we would be re-rendering this block every time
76
+ * the stores change, even if the latest headings were deeply equal to the
77
+ * ones saved in the block attributes.
78
+ *
79
+ * By returning null when they're equal, we reduce that to 2 renders: one
80
+ * when there are new latest headings (and so it returns them), and one when
81
+ * they haven't changed (so it returns null). As long as the latest heading
82
+ * data remains the same, further calls of the useSelect callback will
83
+ * continue to return null, thus preventing any forced re-renders.
84
+ */
85
+ const latestHeadings = useSelect(
86
+ ( select ) => {
79
87
  const {
80
88
  getBlockAttributes,
81
- getBlockIndex,
82
89
  getBlockName,
83
- getBlockOrder,
90
+ getClientIdsWithDescendants,
91
+ __experimentalGetGlobalBlocksByName: getGlobalBlocksByName,
84
92
  } = select( blockEditorStore );
85
93
 
86
- const blockIndex = getBlockIndex( clientId );
87
- const blockOrder = getBlockOrder();
88
-
89
- // Calculate which page the block will appear in on the front-end by
90
- // counting how many <!--nextpage--> tags precede it.
91
- // Unfortunately, this implementation only accounts for Page Break and
92
- // Classic blocks, so if there are any <!--nextpage--> tags in any
93
- // other block, they won't be counted. This will result in the table
94
- // of contents showing headings from the wrong page if
95
- // onlyIncludeCurrentPage === true. Thankfully, this issue only
96
- // affects the editor implementation.
97
- let page = 1;
98
- for ( let i = 0; i < blockIndex; i++ ) {
99
- const blockName = getBlockName( blockOrder[ i ] );
94
+ // FIXME: @wordpress/block-library should not depend on @wordpress/editor.
95
+ // Blocks can be loaded into a *non-post* block editor, so to avoid
96
+ // declaring @wordpress/editor as a dependency, we must access its
97
+ // store by string. When the store is not available, editorSelectors
98
+ // will be null, and the block's saved markup will lack permalinks.
99
+ // eslint-disable-next-line @wordpress/data-no-store-string-literals
100
+ const editorSelectors = select( 'core/editor' );
101
+
102
+ const pageBreakClientIds = getGlobalBlocksByName( 'core/nextpage' );
103
+
104
+ const isPaginated = pageBreakClientIds.length !== 0;
105
+
106
+ // Get the client ids of all blocks in the editor.
107
+ const allBlockClientIds = getClientIdsWithDescendants();
108
+
109
+ // If onlyIncludeCurrentPage is true, calculate the page (of a paginated post) this block is part of, so we know which headings to include; otherwise, skip the calculation.
110
+ let tocPage = 1;
111
+
112
+ if ( isPaginated && onlyIncludeCurrentPage ) {
113
+ // We can't use getBlockIndex because it only returns the index
114
+ // relative to sibling blocks.
115
+ const tocIndex = allBlockClientIds.indexOf( clientId );
116
+
117
+ for ( const [
118
+ blockIndex,
119
+ blockClientId,
120
+ ] of allBlockClientIds.entries() ) {
121
+ // If we've reached blocks after the Table of Contents, we've
122
+ // finished calculating which page the block is on.
123
+ if ( blockIndex >= tocIndex ) {
124
+ break;
125
+ }
126
+ if ( getBlockName( blockClientId ) === 'core/nextpage' ) {
127
+ tocPage++;
128
+ }
129
+ }
130
+ }
131
+
132
+ const _latestHeadings = [];
133
+
134
+ /** The page (of a paginated post) a heading will be part of. */
135
+ let headingPage = 1;
136
+
137
+ /**
138
+ * A permalink to the current post. If the core/editor store is
139
+ * unavailable, this variable will be null.
140
+ */
141
+ const permalink = editorSelectors?.getPermalink() ?? null;
142
+
143
+ let headingPageLink = null;
144
+
145
+ // If the core/editor store is available, we can add permalinks to the
146
+ // generated table of contents.
147
+ if ( typeof permalink === 'string' ) {
148
+ headingPageLink = isPaginated
149
+ ? addQueryArgs( permalink, { page: headingPage } )
150
+ : permalink;
151
+ }
152
+
153
+ for ( const blockClientId of allBlockClientIds ) {
154
+ const blockName = getBlockName( blockClientId );
100
155
  if ( blockName === 'core/nextpage' ) {
101
- page++;
102
- } else if ( blockName === 'core/freeform' ) {
103
- // Count the page breaks inside the Classic block.
104
- const pageBreaks = getBlockAttributes(
105
- blockOrder[ i ]
106
- ).content?.match( /<!--nextpage-->/g );
107
-
108
- if ( pageBreaks !== null && pageBreaks !== undefined ) {
109
- page += pageBreaks.length;
156
+ headingPage++;
157
+
158
+ // If we're only including headings from the current page (of
159
+ // a paginated post), then exit the loop if we've reached the
160
+ // pages after the one with the Table of Contents block.
161
+ if ( onlyIncludeCurrentPage && headingPage > tocPage ) {
162
+ break;
163
+ }
164
+
165
+ if ( typeof permalink === 'string' ) {
166
+ headingPageLink = addQueryArgs(
167
+ removeQueryArgs( permalink, [ 'page' ] ),
168
+ { page: headingPage }
169
+ );
170
+ }
171
+ }
172
+ // If we're including all headings or we've reached headings on
173
+ // the same page as the Table of Contents block, add them to the
174
+ // list.
175
+ else if (
176
+ ! onlyIncludeCurrentPage ||
177
+ headingPage === tocPage
178
+ ) {
179
+ if ( blockName === 'core/heading' ) {
180
+ const headingAttributes = getBlockAttributes(
181
+ blockClientId
182
+ );
183
+
184
+ const canBeLinked =
185
+ typeof headingPageLink === 'string' &&
186
+ typeof headingAttributes.anchor === 'string' &&
187
+ headingAttributes.anchor !== '';
188
+
189
+ _latestHeadings.push( {
190
+ content: stripHTML( headingAttributes.content ),
191
+ level: headingAttributes.level,
192
+ link: canBeLinked
193
+ ? `${ headingPageLink }#${ headingAttributes.anchor }`
194
+ : null,
195
+ } );
110
196
  }
111
197
  }
112
198
  }
113
199
 
114
- return page;
200
+ if ( isEqual( headings, _latestHeadings ) ) {
201
+ return null;
202
+ }
203
+ return _latestHeadings;
115
204
  },
116
- [ clientId, onlyIncludeCurrentPage ]
205
+ [ clientId, onlyIncludeCurrentPage, headings ]
117
206
  );
118
207
 
119
208
  useEffect( () => {
120
- let latestHeadings;
121
-
122
- if ( onlyIncludeCurrentPage ) {
123
- const pagesOfContent = postContent.split( '<!--nextpage-->' );
124
-
125
- latestHeadings = getHeadingsFromContent(
126
- pagesOfContent[ pageIndex - 1 ]
127
- );
128
- } else {
129
- latestHeadings = getHeadingsFromContent( postContent );
130
- }
131
-
132
- if ( ! isEqual( headings, latestHeadings ) ) {
133
- setHeadings( latestHeadings );
134
- setHeadingTree( linearToNestedHeadingList( latestHeadings ) );
209
+ if ( latestHeadings !== null ) {
210
+ // This is required to keep undo working and not create 2 undo steps
211
+ // for each heading change.
212
+ __unstableMarkNextChangeAsNotPersistent();
213
+ setAttributes( { headings: latestHeadings } );
135
214
  }
136
- }, [ pageIndex, postContent, onlyIncludeCurrentPage ] );
215
+ }, [ latestHeadings ] );
137
216
 
138
- const { replaceBlocks } = useDispatch( blockEditorStore );
217
+ const headingTree = linearToNestedHeadingList( headings );
139
218
 
140
219
  const toolbarControls = listBlockExists && (
141
220
  <BlockControls>
@@ -145,6 +224,7 @@ export default function TableOfContentsEdit( {
145
224
  replaceBlocks(
146
225
  clientId,
147
226
  createBlock( 'core/list', {
227
+ ordered: true,
148
228
  values: renderToString(
149
229
  <TableOfContentsList
150
230
  nestedHeadingList={ headingTree }
@@ -162,7 +242,7 @@ export default function TableOfContentsEdit( {
162
242
 
163
243
  const inspectorControls = (
164
244
  <InspectorControls>
165
- <PanelBody title={ __( 'Table of Contents settings' ) }>
245
+ <PanelBody title={ __( 'Settings' ) }>
166
246
  <ToggleControl
167
247
  label={ __( 'Only include current page' ) }
168
248
  checked={ onlyIncludeCurrentPage }
@@ -191,7 +271,7 @@ export default function TableOfContentsEdit( {
191
271
  <>
192
272
  <div { ...blockProps }>
193
273
  <Placeholder
194
- icon={ <BlockIcon icon="list-view" /> }
274
+ icon={ <BlockIcon icon={ icon } /> }
195
275
  label="Table of Contents"
196
276
  instructions={ __(
197
277
  'Start adding Heading blocks to create a table of contents. Headings with HTML anchors will be linked here.'
@@ -206,9 +286,9 @@ export default function TableOfContentsEdit( {
206
286
  return (
207
287
  <>
208
288
  <nav { ...blockProps }>
209
- <ul>
289
+ <ol ref={ disabledRef }>
210
290
  <TableOfContentsList nestedHeadingList={ headingTree } />
211
- </ul>
291
+ </ol>
212
292
  </nav>
213
293
  { toolbarControls }
214
294
  { inspectorControls }
@@ -4,6 +4,7 @@
4
4
  import metadata from './block.json';
5
5
  import edit from './edit';
6
6
  import icon from './icon';
7
+ import save from './save';
7
8
 
8
9
  const { name } = metadata;
9
10
 
@@ -12,4 +13,5 @@ export { metadata, name };
12
13
  export const settings = {
13
14
  icon,
14
15
  edit,
16
+ save,
15
17
  };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import type { WPElement } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import type { NestedHeadingData } from './utils';
10
+
11
+ const ENTRY_CLASS_NAME = 'wp-block-table-of-contents__entry';
12
+
13
+ export default function TableOfContentsList( {
14
+ nestedHeadingList,
15
+ }: {
16
+ nestedHeadingList: NestedHeadingData[];
17
+ } ): WPElement {
18
+ return (
19
+ <>
20
+ { nestedHeadingList.map( ( node, index ) => {
21
+ const { content, link } = node.heading;
22
+
23
+ const entry = link ? (
24
+ <a className={ ENTRY_CLASS_NAME } href={ link }>
25
+ { content }
26
+ </a>
27
+ ) : (
28
+ <span className={ ENTRY_CLASS_NAME }>{ content }</span>
29
+ );
30
+
31
+ return (
32
+ <li key={ index }>
33
+ { entry }
34
+ { node.children ? (
35
+ <ol>
36
+ <TableOfContentsList
37
+ nestedHeadingList={ node.children }
38
+ />
39
+ </ol>
40
+ ) : null }
41
+ </li>
42
+ );
43
+ } ) }
44
+ </>
45
+ );
46
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useBlockProps } from '@wordpress/block-editor';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import TableOfContentsList from './list';
10
+ import { linearToNestedHeadingList } from './utils';
11
+
12
+ export default function save( { attributes: { headings = [] } } ) {
13
+ if ( headings.length === 0 ) {
14
+ return null;
15
+ }
16
+ return (
17
+ <nav { ...useBlockProps.save() }>
18
+ <ol>
19
+ <TableOfContentsList
20
+ nestedHeadingList={ linearToNestedHeadingList( headings ) }
21
+ />
22
+ </ol>
23
+ </nav>
24
+ );
25
+ }
@@ -0,0 +1,71 @@
1
+ export interface HeadingData {
2
+ /** The plain text content of the heading. */
3
+ content: string;
4
+ /** The heading level. */
5
+ level: number;
6
+ /** Link to the heading. */
7
+ link: string;
8
+ }
9
+
10
+ export interface NestedHeadingData {
11
+ /** The heading content, level, and link. */
12
+ heading: HeadingData;
13
+ /** The sub-headings of this heading, if any. */
14
+ children: NestedHeadingData[] | null;
15
+ }
16
+
17
+ /**
18
+ * Takes a flat list of heading parameters and nests them based on each header's
19
+ * immediate parent's level.
20
+ *
21
+ * @param headingList The flat list of headings to nest.
22
+ *
23
+ * @return The nested list of headings.
24
+ */
25
+ export function linearToNestedHeadingList(
26
+ headingList: HeadingData[]
27
+ ): NestedHeadingData[] {
28
+ const nestedHeadingList: NestedHeadingData[] = [];
29
+
30
+ headingList.forEach( ( heading, key ) => {
31
+ if ( heading.content === '' ) {
32
+ return;
33
+ }
34
+
35
+ // Make sure we are only working with the same level as the first iteration in our set.
36
+ if ( heading.level === headingList[ 0 ].level ) {
37
+ // Check that the next iteration will return a value.
38
+ // If it does and the next level is greater than the current level,
39
+ // the next iteration becomes a child of the current iteration.
40
+ if ( headingList[ key + 1 ]?.level > heading.level ) {
41
+ // We must calculate the last index before the next iteration that
42
+ // has the same level (siblings). We then use this index to slice
43
+ // the array for use in recursion. This prevents duplicate nodes.
44
+ let endOfSlice = headingList.length;
45
+ for ( let i = key + 1; i < headingList.length; i++ ) {
46
+ if ( headingList[ i ].level === heading.level ) {
47
+ endOfSlice = i;
48
+ break;
49
+ }
50
+ }
51
+
52
+ // We found a child node: Push a new node onto the return array
53
+ // with children.
54
+ nestedHeadingList.push( {
55
+ heading,
56
+ children: linearToNestedHeadingList(
57
+ headingList.slice( key + 1, endOfSlice )
58
+ ),
59
+ } );
60
+ } else {
61
+ // No child node: Push a new node onto the return array.
62
+ nestedHeadingList.push( {
63
+ heading,
64
+ children: null,
65
+ } );
66
+ }
67
+ }
68
+ } );
69
+
70
+ return nestedHeadingList;
71
+ }
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "smallestFontSize": {
25
25
  "type": "string",
26
- "default": "8pt"
26
+ "default": "8pt"
27
27
  },
28
28
  "largestFontSize": {
29
29
  "type": "string",
@@ -110,7 +110,7 @@ function TagCloudEdit( { attributes, setAttributes, taxonomies } ) {
110
110
 
111
111
  const inspectorControls = (
112
112
  <InspectorControls>
113
- <PanelBody title={ __( 'Tag Cloud settings' ) }>
113
+ <PanelBody title={ __( 'Settings' ) }>
114
114
  <SelectControl
115
115
  label={ __( 'Taxonomy' ) }
116
116
  options={ getTaxonomyOptions() }
@@ -13,6 +13,7 @@ import {
13
13
  __experimentalUseNoRecursiveRenders as useNoRecursiveRenders,
14
14
  Warning,
15
15
  store as blockEditorStore,
16
+ __experimentalUseBlockOverlayActive as useBlockOverlayActive,
16
17
  } from '@wordpress/block-editor';
17
18
  import {
18
19
  ToolbarGroup,
@@ -95,7 +96,15 @@ export default function TemplatePartEdit( {
95
96
  const blockPatterns = useAlternativeBlockPatterns( area, clientId );
96
97
  const hasReplacements = !! templateParts.length || !! blockPatterns.length;
97
98
  const areaObject = useTemplatePartArea( area );
98
- const blockProps = useBlockProps();
99
+ const hasBlockOverlay = useBlockOverlayActive( clientId );
100
+ const blockProps = useBlockProps(
101
+ {
102
+ className: hasBlockOverlay
103
+ ? 'block-editor-block-content-overlay'
104
+ : undefined,
105
+ },
106
+ { __unstableIsDisabled: hasBlockOverlay }
107
+ );
99
108
  const isPlaceholder = ! slug;
100
109
  const isEntityAvailable = ! isPlaceholder && ! isMissing && isResolved;
101
110
  const TagName = tagName || areaObject.tagName;
@@ -153,22 +162,23 @@ export default function TemplatePartEdit( {
153
162
  />
154
163
  </TagName>
155
164
  ) }
156
- { isEntityAvailable && hasReplacements && (
157
- <BlockControls>
158
- <ToolbarGroup className="wp-block-template-part__block-control-group">
159
- <ToolbarButton
160
- onClick={ () =>
161
- setIsTemplatePartSelectionOpen( true )
162
- }
163
- >
164
- { __( 'Replace' ) }
165
- </ToolbarButton>
166
- </ToolbarGroup>
167
- </BlockControls>
168
- ) }
165
+ { isEntityAvailable &&
166
+ hasReplacements &&
167
+ ( area === 'header' || area === 'footer' ) && (
168
+ <BlockControls>
169
+ <ToolbarGroup className="wp-block-template-part__block-control-group">
170
+ <ToolbarButton
171
+ onClick={ () =>
172
+ setIsTemplatePartSelectionOpen( true )
173
+ }
174
+ >
175
+ { __( 'Replace' ) }
176
+ </ToolbarButton>
177
+ </ToolbarGroup>
178
+ </BlockControls>
179
+ ) }
169
180
  { isEntityAvailable && (
170
181
  <TemplatePartInnerBlocks
171
- clientId={ clientId }
172
182
  tagName={ TagName }
173
183
  blockProps={ blockProps }
174
184
  postId={ templatePartId }
@@ -5,7 +5,6 @@ import { useEntityBlockEditor } from '@wordpress/core-data';
5
5
  import {
6
6
  InnerBlocks,
7
7
  useInnerBlocksProps,
8
- __experimentalBlockContentOverlay as BlockContentOverlay,
9
8
  useSetting,
10
9
  store as blockEditorStore,
11
10
  } from '@wordpress/block-editor';
@@ -15,9 +14,8 @@ export default function TemplatePartInnerBlocks( {
15
14
  postId: id,
16
15
  hasInnerBlocks,
17
16
  layout,
18
- tagName,
17
+ tagName: TagName,
19
18
  blockProps,
20
- clientId,
21
19
  } ) {
22
20
  const themeSupportsLayout = useSelect( ( select ) => {
23
21
  const { getSettings } = select( blockEditorStore );
@@ -42,11 +40,5 @@ export default function TemplatePartInnerBlocks( {
42
40
  __experimentalLayout: themeSupportsLayout ? usedLayout : undefined,
43
41
  } );
44
42
 
45
- return (
46
- <BlockContentOverlay
47
- clientId={ clientId }
48
- tagName={ tagName }
49
- wrapperProps={ innerBlocksProps }
50
- />
51
- );
43
+ return <TagName { ...innerBlocksProps } />;
52
44
  }
package/src/video/edit.js CHANGED
@@ -32,7 +32,7 @@ import { __, sprintf } from '@wordpress/i18n';
32
32
  import { useInstanceId } from '@wordpress/compose';
33
33
  import { useSelect } from '@wordpress/data';
34
34
  import { video as icon } from '@wordpress/icons';
35
- import { createBlock } from '@wordpress/blocks';
35
+ import { createBlock, getDefaultBlockName } from '@wordpress/blocks';
36
36
 
37
37
  /**
38
38
  * Internal dependencies
@@ -61,7 +61,8 @@ function VideoEdit( {
61
61
  const { id, caption, controls, poster, src, tracks } = attributes;
62
62
  const isTemporaryVideo = ! id && isBlobURL( src );
63
63
  const mediaUpload = useSelect(
64
- ( select ) => select( blockEditorStore ).getSettings().mediaUpload
64
+ ( select ) => select( blockEditorStore ).getSettings().mediaUpload,
65
+ []
65
66
  );
66
67
 
67
68
  useEffect( () => {
@@ -70,9 +71,7 @@ function VideoEdit( {
70
71
  if ( file ) {
71
72
  mediaUpload( {
72
73
  filesList: [ file ],
73
- onFileChange: ( [ { url } ] ) => {
74
- setAttributes( { src: url } );
75
- },
74
+ onFileChange: ( [ media ] ) => onSelectVideo( media ),
76
75
  onError: ( message ) => {
77
76
  noticeOperations.createErrorNotice( message );
78
77
  },
@@ -191,7 +190,7 @@ function VideoEdit( {
191
190
  />
192
191
  </BlockControls>
193
192
  <InspectorControls>
194
- <PanelBody title={ __( 'Video settings' ) }>
193
+ <PanelBody title={ __( 'Settings' ) }>
195
194
  <VideoCommonSettings
196
195
  setAttributes={ setAttributes }
197
196
  attributes={ attributes }
@@ -275,7 +274,9 @@ function VideoEdit( {
275
274
  }
276
275
  inlineToolbar
277
276
  __unstableOnSplitAtEnd={ () =>
278
- insertBlocksAfter( createBlock( 'core/paragraph' ) )
277
+ insertBlocksAfter(
278
+ createBlock( getDefaultBlockName() )
279
+ )
279
280
  }
280
281
  />
281
282
  ) }
@@ -248,7 +248,7 @@ class VideoEdit extends Component {
248
248
  ) }
249
249
  { isSelected && (
250
250
  <InspectorControls>
251
- <PanelBody title={ __( 'Video settings' ) }>
251
+ <PanelBody title={ __( 'Settings' ) }>
252
252
  <VideoCommonSettings
253
253
  setAttributes={ setAttributes }
254
254
  attributes={ attributes }
@@ -33,10 +33,6 @@
33
33
  z-index: z-index("{core/video track editor popover}");
34
34
  }
35
35
 
36
- .block-library-video-tracks-editor > .components-popover__content {
37
- width: 360px;
38
- }
39
-
40
36
  .block-library-video-tracks-editor__track-list-track {
41
37
  display: flex;
42
38
  place-content: space-between;
@@ -75,9 +71,11 @@
75
71
  display: block;
76
72
  }
77
73
 
78
- .block-library-video-tracks-editor > .components-popover__content > div {
74
+ .block-library-video-tracks-editor > .components-popover__content {
75
+ width: 360px;
79
76
  padding: 0;
80
77
  }
78
+
81
79
  .block-library-video-tracks-editor__track-list,
82
80
  .block-library-video-tracks-editor__add-tracks-container {
83
81
  .components-menu-group__label {
@@ -85,7 +83,6 @@
85
83
  }
86
84
  }
87
85
 
88
-
89
86
  .block-library-video-tracks-editor__single-track-editor,
90
87
  .block-library-video-tracks-editor__track-list,
91
88
  .block-library-video-tracks-editor__add-tracks-container {