@wordpress/block-library 7.4.0 → 7.7.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 (798) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +3 -2
  3. package/babel-plugin.js +154 -0
  4. package/build/audio/edit.js +4 -16
  5. package/build/audio/edit.js.map +1 -1
  6. package/build/block/edit.js +10 -9
  7. package/build/block/edit.js.map +1 -1
  8. package/build/button/deprecated.js +175 -35
  9. package/build/button/deprecated.js.map +1 -1
  10. package/build/button/edit.js +1 -1
  11. package/build/button/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/button/save.js +1 -1
  17. package/build/button/save.js.map +1 -1
  18. package/build/categories/edit.js +1 -1
  19. package/build/categories/edit.js.map +1 -1
  20. package/build/categories/index.js +1 -1
  21. package/build/columns/index.js +3 -1
  22. package/build/columns/index.js.map +1 -1
  23. package/build/comment-author-avatar/index.js +1 -0
  24. package/build/comment-author-avatar/index.js.map +1 -1
  25. package/build/comment-template/edit.js +1 -3
  26. package/build/comment-template/edit.js.map +1 -1
  27. package/build/{comments-query-loop → comments}/edit/comments-inspector-controls.js +0 -0
  28. package/{build-module/comments-query-loop → build/comments}/edit/comments-inspector-controls.js.map +1 -1
  29. package/build/{comments-query-loop → comments}/edit.js +3 -3
  30. package/build/comments/edit.js.map +1 -0
  31. package/build/{comments-query-loop → comments}/index.js +1 -1
  32. package/build/comments/index.js.map +1 -0
  33. package/build/{comments-query-loop → comments}/save.js +2 -2
  34. package/build/comments/save.js.map +1 -0
  35. package/build/comments-title/deprecated.js +110 -0
  36. package/build/comments-title/deprecated.js.map +1 -0
  37. package/build/comments-title/edit.js +35 -35
  38. package/build/comments-title/edit.js.map +1 -1
  39. package/build/comments-title/index.js +5 -8
  40. package/build/comments-title/index.js.map +1 -1
  41. package/build/cover/controls.native.js +2 -3
  42. package/build/cover/controls.native.js.map +1 -1
  43. package/build/cover/deprecated.js +212 -207
  44. package/build/cover/deprecated.js.map +1 -1
  45. package/build/cover/edit/block-controls.js +115 -0
  46. package/build/cover/edit/block-controls.js.map +1 -0
  47. package/build/cover/edit/cover-placeholder.js +49 -0
  48. package/build/cover/edit/cover-placeholder.js.map +1 -0
  49. package/build/cover/edit/index.js +343 -0
  50. package/build/cover/edit/index.js.map +1 -0
  51. package/build/cover/edit/inspector-controls.js +224 -0
  52. package/build/cover/edit/inspector-controls.js.map +1 -0
  53. package/build/cover/edit/resizable-cover.js +67 -0
  54. package/build/cover/edit/resizable-cover.js.map +1 -0
  55. package/build/cover/edit/use-cover-is-dark.js +81 -0
  56. package/build/cover/edit/use-cover-is-dark.js.map +1 -0
  57. package/build/cover/edit.native.js +36 -16
  58. package/build/cover/edit.native.js.map +1 -1
  59. package/build/cover/focal-point-settings-button.native.js.map +1 -1
  60. package/build/cover/save.js +18 -5
  61. package/build/cover/save.js.map +1 -1
  62. package/build/cover/shared.js +15 -9
  63. package/build/cover/shared.js.map +1 -1
  64. package/build/cover/transforms.js +77 -6
  65. package/build/cover/transforms.js.map +1 -1
  66. package/build/cover/use-cover-is-dark.native.js +60 -0
  67. package/build/cover/use-cover-is-dark.native.js.map +1 -0
  68. package/build/embed/embed-preview.js +1 -1
  69. package/build/embed/embed-preview.js.map +1 -1
  70. package/build/file/edit.js +1 -1
  71. package/build/file/edit.js.map +1 -1
  72. package/build/file/edit.native.js +0 -1
  73. package/build/file/edit.native.js.map +1 -1
  74. package/build/file/save.js +9 -1
  75. package/build/file/save.js.map +1 -1
  76. package/build/gallery/edit.js +2 -1
  77. package/build/gallery/edit.js.map +1 -1
  78. package/build/gallery/gallery.js +1 -1
  79. package/build/gallery/gallery.js.map +1 -1
  80. package/build/gallery/gap-styles.js +14 -4
  81. package/build/gallery/gap-styles.js.map +1 -1
  82. package/build/gallery/index.js +1 -1
  83. package/build/gallery/shared.js +2 -2
  84. package/build/gallery/shared.js.map +1 -1
  85. package/build/gallery/use-get-media.js +2 -1
  86. package/build/gallery/use-get-media.js.map +1 -1
  87. package/build/gallery/use-short-code-transform.js +19 -18
  88. package/build/gallery/use-short-code-transform.js.map +1 -1
  89. package/build/gallery/v1/gallery.js +1 -1
  90. package/build/gallery/v1/gallery.js.map +1 -1
  91. package/build/group/index.js +1 -0
  92. package/build/group/index.js.map +1 -1
  93. package/build/heading/edit.js +6 -2
  94. package/build/heading/edit.js.map +1 -1
  95. package/build/heading/index.js +1 -0
  96. package/build/heading/index.js.map +1 -1
  97. package/build/heading/transforms.js +9 -4
  98. package/build/heading/transforms.js.map +1 -1
  99. package/build/image/edit.js +5 -56
  100. package/build/image/edit.js.map +1 -1
  101. package/build/image/edit.native.js +56 -4
  102. package/build/image/edit.native.js.map +1 -1
  103. package/build/image/image.js +4 -14
  104. package/build/image/image.js.map +1 -1
  105. package/build/index.js +48 -14
  106. package/build/index.js.map +1 -1
  107. package/build/is-block-metadata-experimental.js +18 -0
  108. package/build/is-block-metadata-experimental.js.map +1 -0
  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 +44 -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/media-text/edit.native.js +2 -1
  140. package/build/media-text/edit.native.js.map +1 -1
  141. package/build/media-text/media-container.native.js +2 -4
  142. package/build/media-text/media-container.native.js.map +1 -1
  143. package/build/media-text/transforms.js +137 -8
  144. package/build/media-text/transforms.js.map +1 -1
  145. package/build/navigation/edit/index.js +91 -109
  146. package/build/navigation/edit/index.js.map +1 -1
  147. package/build/navigation/edit/inner-blocks.js +6 -12
  148. package/build/navigation/edit/inner-blocks.js.map +1 -1
  149. package/build/navigation/index.js +0 -1
  150. package/build/navigation/index.js.map +1 -1
  151. package/build/navigation/use-navigation-entities.js +3 -3
  152. package/build/navigation/use-navigation-entities.js.map +1 -1
  153. package/build/navigation/view-modal.js +25 -0
  154. package/build/navigation/view-modal.js.map +1 -1
  155. package/build/navigation-link/edit.js +60 -35
  156. package/build/navigation-link/edit.js.map +1 -1
  157. package/build/navigation-link/fallback-variations.js +1 -1
  158. package/build/navigation-link/fallback-variations.js.map +1 -1
  159. package/build/navigation-link/hooks.js +1 -1
  160. package/build/navigation-link/hooks.js.map +1 -1
  161. package/build/navigation-submenu/edit.js +14 -14
  162. package/build/navigation-submenu/edit.js.map +1 -1
  163. package/build/page-list/convert-to-links-modal.js +1 -1
  164. package/build/page-list/convert-to-links-modal.js.map +1 -1
  165. package/build/page-list/edit.js +1 -1
  166. package/build/page-list/edit.js.map +1 -1
  167. package/build/paragraph/edit.js +10 -0
  168. package/build/paragraph/edit.js.map +1 -1
  169. package/build/paragraph/use-enter.js +94 -0
  170. package/build/paragraph/use-enter.js.map +1 -0
  171. package/build/post-author/edit.js +1 -1
  172. package/build/post-author/edit.js.map +1 -1
  173. package/build/post-author-name/index.js +4 -0
  174. package/build/post-author-name/index.js.map +1 -1
  175. package/build/post-author-name/transforms.js +41 -0
  176. package/build/post-author-name/transforms.js.map +1 -0
  177. package/build/post-comment/index.js +2 -1
  178. package/build/post-comment/index.js.map +1 -1
  179. package/build/post-comments/edit.js +138 -35
  180. package/build/post-comments/edit.js.map +1 -1
  181. package/build/post-comments/index.js +3 -2
  182. package/build/post-comments/index.js.map +1 -1
  183. package/build/post-comments-count/index.js +1 -0
  184. package/build/post-comments-count/index.js.map +1 -1
  185. package/build/post-comments-form/edit.js +38 -4
  186. package/build/post-comments-form/edit.js.map +1 -1
  187. package/build/post-comments-form/form.js +58 -0
  188. package/build/post-comments-form/form.js.map +1 -0
  189. package/build/post-comments-form/index.js +1 -0
  190. package/build/post-comments-form/index.js.map +1 -1
  191. package/build/post-comments-link/index.js +1 -0
  192. package/build/post-comments-link/index.js.map +1 -1
  193. package/build/post-content/edit.js +1 -1
  194. package/build/post-content/edit.js.map +1 -1
  195. package/build/post-date/edit.js +13 -7
  196. package/build/post-date/edit.js.map +1 -1
  197. package/build/post-excerpt/edit.js +1 -1
  198. package/build/post-excerpt/edit.js.map +1 -1
  199. package/build/post-featured-image/edit.js +1 -1
  200. package/build/post-featured-image/edit.js.map +1 -1
  201. package/build/post-template/edit.js +7 -2
  202. package/build/post-template/edit.js.map +1 -1
  203. package/build/post-terms/edit.js +35 -4
  204. package/build/post-terms/edit.js.map +1 -1
  205. package/build/post-terms/hooks.js +33 -0
  206. package/build/post-terms/hooks.js.map +1 -0
  207. package/build/post-terms/index.js +20 -5
  208. package/build/post-terms/index.js.map +1 -1
  209. package/build/post-title/index.js +1 -1
  210. package/build/post-title/index.js.map +1 -1
  211. package/build/pullquote/edit.js +1 -1
  212. package/build/pullquote/edit.js.map +1 -1
  213. package/build/pullquote/edit.native.js +1 -1
  214. package/build/pullquote/edit.native.js.map +1 -1
  215. package/build/query/edit/inspector-controls/index.js +26 -17
  216. package/build/query/edit/inspector-controls/index.js.map +1 -1
  217. package/build/query/edit/inspector-controls/parent-control.js +148 -0
  218. package/build/query/edit/inspector-controls/parent-control.js.map +1 -0
  219. package/build/query/edit/inspector-controls/sticky-control.js +41 -0
  220. package/build/query/edit/inspector-controls/sticky-control.js.map +1 -0
  221. package/build/query/index.js +2 -1
  222. package/build/query/index.js.map +1 -1
  223. package/build/query/utils.js +28 -2
  224. package/build/query/utils.js.map +1 -1
  225. package/build/query-no-results/edit.js +1 -1
  226. package/build/query-no-results/edit.js.map +1 -1
  227. package/build/query-title/index.js +1 -1
  228. package/build/query-title/index.js.map +1 -1
  229. package/build/query-title/variations.js +1 -1
  230. package/build/query-title/variations.js.map +1 -1
  231. package/build/quote/edit.js +3 -2
  232. package/build/quote/edit.js.map +1 -1
  233. package/build/quote/index.js +1 -0
  234. package/build/quote/index.js.map +1 -1
  235. package/build/quote/v2/edit.js +1 -1
  236. package/build/quote/v2/edit.js.map +1 -1
  237. package/build/search/edit.js +2 -1
  238. package/build/search/edit.js.map +1 -1
  239. package/build/search/index.js +4 -0
  240. package/build/search/index.js.map +1 -1
  241. package/build/separator/index.js +3 -0
  242. package/build/separator/index.js.map +1 -1
  243. package/build/shortcode/edit.native.js +16 -13
  244. package/build/shortcode/edit.native.js.map +1 -1
  245. package/build/site-logo/edit.js +1 -1
  246. package/build/site-logo/edit.js.map +1 -1
  247. package/build/social-links/edit.js +2 -2
  248. package/build/social-links/edit.js.map +1 -1
  249. package/build/table/edit.js +15 -2
  250. package/build/table/edit.js.map +1 -1
  251. package/build/table-of-contents/edit.js +145 -65
  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/template-part/edit/index.js +7 -3
  262. package/build/template-part/edit/index.js.map +1 -1
  263. package/build/template-part/edit/inner-blocks.js +3 -8
  264. package/build/template-part/edit/inner-blocks.js.map +1 -1
  265. package/build/video/edit.js +4 -8
  266. package/build/video/edit.js.map +1 -1
  267. package/build-module/audio/edit.js +5 -17
  268. package/build-module/audio/edit.js.map +1 -1
  269. package/build-module/block/edit.js +11 -10
  270. package/build-module/block/edit.js.map +1 -1
  271. package/build-module/button/deprecated.js +175 -35
  272. package/build-module/button/deprecated.js.map +1 -1
  273. package/build-module/button/edit.js +2 -2
  274. package/build-module/button/edit.js.map +1 -1
  275. package/build-module/button/edit.native.js +7 -3
  276. package/build-module/button/edit.native.js.map +1 -1
  277. package/build-module/button/index.js +1 -0
  278. package/build-module/button/index.js.map +1 -1
  279. package/build-module/button/save.js +2 -2
  280. package/build-module/button/save.js.map +1 -1
  281. package/build-module/categories/edit.js +1 -1
  282. package/build-module/categories/edit.js.map +1 -1
  283. package/build-module/categories/index.js +1 -1
  284. package/build-module/columns/index.js +3 -1
  285. package/build-module/columns/index.js.map +1 -1
  286. package/build-module/comment-author-avatar/index.js +1 -0
  287. package/build-module/comment-author-avatar/index.js.map +1 -1
  288. package/build-module/comment-template/edit.js +1 -3
  289. package/build-module/comment-template/edit.js.map +1 -1
  290. package/build-module/{comments-query-loop → comments}/edit/comments-inspector-controls.js +0 -0
  291. package/build-module/comments/edit/comments-inspector-controls.js.map +1 -0
  292. package/build-module/{comments-query-loop → comments}/edit.js +2 -2
  293. package/build-module/comments/edit.js.map +1 -0
  294. package/build-module/{comments-query-loop → comments}/index.js +1 -1
  295. package/build-module/comments/index.js.map +1 -0
  296. package/build-module/{comments-query-loop → comments}/save.js +1 -1
  297. package/build-module/comments/save.js.map +1 -0
  298. package/build-module/comments-title/deprecated.js +102 -0
  299. package/build-module/comments-title/deprecated.js.map +1 -0
  300. package/build-module/comments-title/edit.js +38 -38
  301. package/build-module/comments-title/edit.js.map +1 -1
  302. package/build-module/comments-title/index.js +4 -8
  303. package/build-module/comments-title/index.js.map +1 -1
  304. package/build-module/cover/controls.native.js +2 -3
  305. package/build-module/cover/controls.native.js.map +1 -1
  306. package/build-module/cover/deprecated.js +206 -198
  307. package/build-module/cover/deprecated.js.map +1 -1
  308. package/build-module/cover/edit/block-controls.js +104 -0
  309. package/build-module/cover/edit/block-controls.js.map +1 -0
  310. package/build-module/cover/edit/cover-placeholder.js +38 -0
  311. package/build-module/cover/edit/cover-placeholder.js.map +1 -0
  312. package/build-module/cover/edit/index.js +317 -0
  313. package/build-module/cover/edit/index.js.map +1 -0
  314. package/build-module/cover/edit/inspector-controls.js +215 -0
  315. package/build-module/cover/edit/inspector-controls.js.map +1 -0
  316. package/build-module/cover/edit/resizable-cover.js +55 -0
  317. package/build-module/cover/edit/resizable-cover.js.map +1 -0
  318. package/build-module/cover/edit/use-cover-is-dark.js +70 -0
  319. package/build-module/cover/edit/use-cover-is-dark.js.map +1 -0
  320. package/build-module/cover/edit.native.js +35 -17
  321. package/build-module/cover/edit.native.js.map +1 -1
  322. package/build-module/cover/focal-point-settings-button.native.js.map +1 -1
  323. package/build-module/cover/save.js +19 -6
  324. package/build-module/cover/save.js.map +1 -1
  325. package/build-module/cover/shared.js +11 -5
  326. package/build-module/cover/shared.js.map +1 -1
  327. package/build-module/cover/transforms.js +74 -6
  328. package/build-module/cover/transforms.js.map +1 -1
  329. package/build-module/cover/use-cover-is-dark.native.js +51 -0
  330. package/build-module/cover/use-cover-is-dark.native.js.map +1 -0
  331. package/build-module/embed/embed-preview.js +2 -2
  332. package/build-module/embed/embed-preview.js.map +1 -1
  333. package/build-module/file/edit.js +2 -2
  334. package/build-module/file/edit.js.map +1 -1
  335. package/build-module/file/edit.native.js +0 -1
  336. package/build-module/file/edit.native.js.map +1 -1
  337. package/build-module/file/save.js +7 -2
  338. package/build-module/file/save.js.map +1 -1
  339. package/build-module/gallery/edit.js +2 -1
  340. package/build-module/gallery/edit.js.map +1 -1
  341. package/build-module/gallery/gallery.js +2 -2
  342. package/build-module/gallery/gallery.js.map +1 -1
  343. package/build-module/gallery/gap-styles.js +14 -4
  344. package/build-module/gallery/gap-styles.js.map +1 -1
  345. package/build-module/gallery/index.js +1 -1
  346. package/build-module/gallery/shared.js +2 -2
  347. package/build-module/gallery/shared.js.map +1 -1
  348. package/build-module/gallery/use-get-media.js +2 -1
  349. package/build-module/gallery/use-get-media.js.map +1 -1
  350. package/build-module/gallery/use-short-code-transform.js +19 -18
  351. package/build-module/gallery/use-short-code-transform.js.map +1 -1
  352. package/build-module/gallery/v1/gallery.js +2 -2
  353. package/build-module/gallery/v1/gallery.js.map +1 -1
  354. package/build-module/group/index.js +1 -0
  355. package/build-module/group/index.js.map +1 -1
  356. package/build-module/heading/edit.js +6 -2
  357. package/build-module/heading/edit.js.map +1 -1
  358. package/build-module/heading/index.js +1 -0
  359. package/build-module/heading/index.js.map +1 -1
  360. package/build-module/heading/transforms.js +9 -4
  361. package/build-module/heading/transforms.js.map +1 -1
  362. package/build-module/image/edit.js +4 -52
  363. package/build-module/image/edit.js.map +1 -1
  364. package/build-module/image/edit.native.js +57 -6
  365. package/build-module/image/edit.native.js.map +1 -1
  366. package/build-module/image/image.js +6 -16
  367. package/build-module/image/image.js.map +1 -1
  368. package/build-module/index.js +43 -12
  369. package/build-module/index.js.map +1 -1
  370. package/build-module/is-block-metadata-experimental.js +16 -0
  371. package/build-module/is-block-metadata-experimental.js.map +1 -0
  372. package/build-module/latest-posts/edit.js +29 -5
  373. package/build-module/latest-posts/edit.js.map +1 -1
  374. package/build-module/latest-posts/edit.native.js +51 -2
  375. package/build-module/latest-posts/edit.native.js.map +1 -1
  376. package/build-module/list/transforms.js +6 -0
  377. package/build-module/list/transforms.js.map +1 -1
  378. package/build-module/list/v2/edit.js +2 -1
  379. package/build-module/list/v2/edit.js.map +1 -1
  380. package/build-module/list/v2/migrate.js +1 -3
  381. package/build-module/list/v2/migrate.js.map +1 -1
  382. package/build-module/list/v2/transforms.js +46 -9
  383. package/build-module/list/v2/transforms.js.map +1 -1
  384. package/build-module/list-item/edit.js +8 -9
  385. package/build-module/list-item/edit.js.map +1 -1
  386. package/build-module/list-item/hooks/index.js +3 -0
  387. package/build-module/list-item/hooks/index.js.map +1 -1
  388. package/build-module/list-item/hooks/use-backspace.js +44 -0
  389. package/build-module/list-item/hooks/use-backspace.js.map +1 -0
  390. package/build-module/list-item/hooks/use-enter.js +6 -9
  391. package/build-module/list-item/hooks/use-enter.js.map +1 -1
  392. package/build-module/list-item/hooks/use-indent-list-item.js +33 -38
  393. package/build-module/list-item/hooks/use-indent-list-item.js.map +1 -1
  394. package/build-module/list-item/hooks/use-space.js +40 -0
  395. package/build-module/list-item/hooks/use-space.js.map +1 -0
  396. package/build-module/list-item/hooks/use-split.js +33 -0
  397. package/build-module/list-item/hooks/use-split.js.map +1 -0
  398. package/build-module/list-item/index.js +1 -0
  399. package/build-module/list-item/index.js.map +1 -1
  400. package/build-module/list-item/utils.js +1 -1
  401. package/build-module/list-item/utils.js.map +1 -1
  402. package/build-module/media-text/edit.native.js +2 -1
  403. package/build-module/media-text/edit.native.js.map +1 -1
  404. package/build-module/media-text/media-container.native.js +2 -4
  405. package/build-module/media-text/media-container.native.js.map +1 -1
  406. package/build-module/media-text/transforms.js +137 -8
  407. package/build-module/media-text/transforms.js.map +1 -1
  408. package/build-module/navigation/edit/index.js +93 -110
  409. package/build-module/navigation/edit/index.js.map +1 -1
  410. package/build-module/navigation/edit/inner-blocks.js +7 -13
  411. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  412. package/build-module/navigation/index.js +0 -1
  413. package/build-module/navigation/index.js.map +1 -1
  414. package/build-module/navigation/use-navigation-entities.js +1 -1
  415. package/build-module/navigation/use-navigation-entities.js.map +1 -1
  416. package/build-module/navigation/view-modal.js +24 -0
  417. package/build-module/navigation/view-modal.js.map +1 -1
  418. package/build-module/navigation-link/edit.js +60 -36
  419. package/build-module/navigation-link/edit.js.map +1 -1
  420. package/build-module/navigation-link/fallback-variations.js +1 -1
  421. package/build-module/navigation-link/fallback-variations.js.map +1 -1
  422. package/build-module/navigation-link/hooks.js +2 -2
  423. package/build-module/navigation-link/hooks.js.map +1 -1
  424. package/build-module/navigation-submenu/edit.js +14 -14
  425. package/build-module/navigation-submenu/edit.js.map +1 -1
  426. package/build-module/page-list/convert-to-links-modal.js +1 -1
  427. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  428. package/build-module/page-list/edit.js +1 -1
  429. package/build-module/page-list/edit.js.map +1 -1
  430. package/build-module/paragraph/edit.js +9 -0
  431. package/build-module/paragraph/edit.js.map +1 -1
  432. package/build-module/paragraph/use-enter.js +81 -0
  433. package/build-module/paragraph/use-enter.js.map +1 -0
  434. package/build-module/post-author/edit.js +1 -1
  435. package/build-module/post-author/edit.js.map +1 -1
  436. package/build-module/post-author-name/index.js +3 -0
  437. package/build-module/post-author-name/index.js.map +1 -1
  438. package/build-module/post-author-name/transforms.js +32 -0
  439. package/build-module/post-author-name/transforms.js.map +1 -0
  440. package/build-module/post-comment/index.js +2 -1
  441. package/build-module/post-comment/index.js.map +1 -1
  442. package/build-module/post-comments/edit.js +139 -37
  443. package/build-module/post-comments/edit.js.map +1 -1
  444. package/build-module/post-comments/index.js +3 -2
  445. package/build-module/post-comments/index.js.map +1 -1
  446. package/build-module/post-comments-count/index.js +1 -0
  447. package/build-module/post-comments-count/index.js.map +1 -1
  448. package/build-module/post-comments-form/edit.js +38 -6
  449. package/build-module/post-comments-form/edit.js.map +1 -1
  450. package/build-module/post-comments-form/form.js +45 -0
  451. package/build-module/post-comments-form/form.js.map +1 -0
  452. package/build-module/post-comments-form/index.js +1 -0
  453. package/build-module/post-comments-form/index.js.map +1 -1
  454. package/build-module/post-comments-link/index.js +1 -0
  455. package/build-module/post-comments-link/index.js.map +1 -1
  456. package/build-module/post-content/edit.js +1 -1
  457. package/build-module/post-content/edit.js.map +1 -1
  458. package/build-module/post-date/edit.js +15 -9
  459. package/build-module/post-date/edit.js.map +1 -1
  460. package/build-module/post-excerpt/edit.js +1 -1
  461. package/build-module/post-excerpt/edit.js.map +1 -1
  462. package/build-module/post-featured-image/edit.js +1 -1
  463. package/build-module/post-featured-image/edit.js.map +1 -1
  464. package/build-module/post-template/edit.js +7 -2
  465. package/build-module/post-template/edit.js.map +1 -1
  466. package/build-module/post-terms/edit.js +35 -6
  467. package/build-module/post-terms/edit.js.map +1 -1
  468. package/build-module/post-terms/hooks.js +25 -0
  469. package/build-module/post-terms/hooks.js.map +1 -0
  470. package/build-module/post-terms/index.js +18 -8
  471. package/build-module/post-terms/index.js.map +1 -1
  472. package/build-module/post-title/index.js +1 -1
  473. package/build-module/post-title/index.js.map +1 -1
  474. package/build-module/pullquote/edit.js +2 -2
  475. package/build-module/pullquote/edit.js.map +1 -1
  476. package/build-module/pullquote/edit.native.js +2 -2
  477. package/build-module/pullquote/edit.native.js.map +1 -1
  478. package/build-module/query/edit/inspector-controls/index.js +24 -17
  479. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  480. package/build-module/query/edit/inspector-controls/parent-control.js +135 -0
  481. package/build-module/query/edit/inspector-controls/parent-control.js.map +1 -0
  482. package/build-module/query/edit/inspector-controls/sticky-control.js +31 -0
  483. package/build-module/query/edit/inspector-controls/sticky-control.js.map +1 -0
  484. package/build-module/query/index.js +2 -1
  485. package/build-module/query/index.js.map +1 -1
  486. package/build-module/query/utils.js +21 -0
  487. package/build-module/query/utils.js.map +1 -1
  488. package/build-module/query-no-results/edit.js +1 -1
  489. package/build-module/query-no-results/edit.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 +1 -0
  497. package/build-module/quote/index.js.map +1 -1
  498. package/build-module/quote/v2/edit.js +2 -2
  499. package/build-module/quote/v2/edit.js.map +1 -1
  500. package/build-module/search/edit.js +3 -2
  501. package/build-module/search/edit.js.map +1 -1
  502. package/build-module/search/index.js +4 -0
  503. package/build-module/search/index.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/shortcode/edit.native.js +17 -13
  507. package/build-module/shortcode/edit.native.js.map +1 -1
  508. package/build-module/site-logo/edit.js +1 -1
  509. package/build-module/site-logo/edit.js.map +1 -1
  510. package/build-module/social-links/edit.js +2 -2
  511. package/build-module/social-links/edit.js.map +1 -1
  512. package/build-module/table/edit.js +17 -4
  513. package/build-module/table/edit.js.map +1 -1
  514. package/build-module/table-of-contents/edit.js +144 -68
  515. package/build-module/table-of-contents/edit.js.map +1 -1
  516. package/build-module/table-of-contents/index.js +12 -3
  517. package/build-module/table-of-contents/index.js.map +1 -1
  518. package/build-module/table-of-contents/list.js +18 -10
  519. package/build-module/table-of-contents/list.js.map +1 -1
  520. package/build-module/table-of-contents/save.js +28 -0
  521. package/build-module/table-of-contents/save.js.map +1 -0
  522. package/build-module/table-of-contents/utils.js +11 -73
  523. package/build-module/table-of-contents/utils.js.map +1 -1
  524. package/build-module/template-part/edit/index.js +8 -4
  525. package/build-module/template-part/edit/index.js.map +1 -1
  526. package/build-module/template-part/edit/inner-blocks.js +4 -9
  527. package/build-module/template-part/edit/inner-blocks.js.map +1 -1
  528. package/build-module/video/edit.js +5 -9
  529. package/build-module/video/edit.js.map +1 -1
  530. package/build-style/comment-content/style-rtl.css +81 -0
  531. package/build-style/comment-content/style.css +81 -0
  532. package/build-style/{comments-query-loop → comments}/editor-rtl.css +0 -0
  533. package/build-style/{comments-query-loop → comments}/editor.css +0 -0
  534. package/build-style/cover/style-rtl.css +32 -27
  535. package/build-style/cover/style.css +32 -27
  536. package/build-style/editor-rtl.css +16 -10
  537. package/build-style/editor.css +16 -10
  538. package/build-style/image/editor-rtl.css +1 -1
  539. package/build-style/image/editor.css +1 -1
  540. package/build-style/latest-posts/style-rtl.css +2 -0
  541. package/build-style/latest-posts/style.css +4 -0
  542. package/build-style/navigation/style-rtl.css +3 -0
  543. package/build-style/navigation/style.css +3 -0
  544. package/build-style/post-comments/editor-rtl.css +79 -0
  545. package/build-style/post-comments/editor.css +79 -0
  546. package/build-style/post-comments/style-rtl.css +27 -3
  547. package/build-style/post-comments/style.css +27 -3
  548. package/build-style/post-comments-form/editor-rtl.css +79 -0
  549. package/build-style/post-comments-form/editor.css +79 -0
  550. package/build-style/post-comments-form/style-rtl.css +1 -3
  551. package/build-style/post-comments-form/style.css +1 -3
  552. package/build-style/separator/editor-rtl.css +1 -0
  553. package/build-style/separator/editor.css +1 -0
  554. package/build-style/site-logo/style-rtl.css +4 -0
  555. package/build-style/site-logo/style.css +4 -0
  556. package/build-style/style-rtl.css +69 -33
  557. package/build-style/style.css +71 -33
  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/audio/edit.js +6 -9
  566. package/src/avatar/block.json +0 -1
  567. package/src/avatar/index.php +2 -2
  568. package/src/block/edit.js +39 -42
  569. package/src/block/test/edit.native.js +1 -1
  570. package/src/button/block.json +1 -0
  571. package/src/button/deprecated.js +145 -0
  572. package/src/button/edit.js +3 -1
  573. package/src/button/edit.native.js +6 -3
  574. package/src/button/save.js +3 -1
  575. package/src/buttons/test/__snapshots__/edit.native.js.snap +1 -1
  576. package/src/buttons/test/edit.native.js +1 -1
  577. package/src/categories/block.json +1 -1
  578. package/src/categories/edit.js +1 -1
  579. package/src/columns/block.json +3 -1
  580. package/src/comment-author-avatar/block.json +1 -0
  581. package/src/comment-author-name/index.php +7 -5
  582. package/src/comment-content/index.php +25 -3
  583. package/src/comment-content/style.scss +5 -0
  584. package/src/comment-edit-link/index.php +1 -4
  585. package/src/comment-reply-link/index.php +1 -4
  586. package/src/comment-template/edit.js +1 -5
  587. package/src/comment-template/index.php +4 -0
  588. package/src/{comments-query-loop → comments}/block.json +1 -1
  589. package/src/{comments-query-loop → comments}/edit/comments-inspector-controls.js +0 -0
  590. package/src/{comments-query-loop → comments}/edit.js +2 -1
  591. package/src/{comments-query-loop → comments}/editor.scss +0 -0
  592. package/src/{comments-query-loop → comments}/index.js +0 -0
  593. package/src/{comments-query-loop → comments}/save.js +1 -3
  594. package/src/comments-pagination/index.php +4 -0
  595. package/src/comments-title/block.json +0 -6
  596. package/src/comments-title/deprecated.js +34 -0
  597. package/src/comments-title/edit.js +44 -84
  598. package/src/comments-title/index.js +3 -1
  599. package/src/comments-title/index.php +51 -22
  600. package/src/cover/controls.native.js +1 -2
  601. package/src/cover/deprecated.js +230 -183
  602. package/src/cover/edit/block-controls.js +119 -0
  603. package/src/cover/edit/cover-placeholder.js +39 -0
  604. package/src/cover/edit/index.js +393 -0
  605. package/src/cover/edit/inspector-controls.js +286 -0
  606. package/src/cover/edit/resizable-cover.js +55 -0
  607. package/src/cover/edit/use-cover-is-dark.js +71 -0
  608. package/src/cover/edit.native.js +40 -14
  609. package/src/cover/editor.scss +1 -1
  610. package/src/cover/focal-point-settings-button.native.js +1 -1
  611. package/src/cover/index.php +20 -37
  612. package/src/cover/save.js +26 -13
  613. package/src/cover/shared.js +5 -3
  614. package/src/cover/style.native.scss +4 -0
  615. package/src/cover/style.scss +27 -26
  616. package/src/cover/test/__snapshots__/edit.native.js.snap +6 -6
  617. package/src/cover/test/block-controls.js +62 -0
  618. package/src/cover/test/transforms.js +301 -0
  619. package/src/cover/transforms.js +112 -7
  620. package/src/cover/use-cover-is-dark.native.js +51 -0
  621. package/src/editor.scss +3 -1
  622. package/src/embed/embed-preview.js +4 -2
  623. package/src/file/edit.js +5 -1
  624. package/src/file/edit.native.js +0 -1
  625. package/src/file/save.js +14 -2
  626. package/src/gallery/block.json +1 -1
  627. package/src/gallery/edit.js +2 -1
  628. package/src/gallery/gallery.js +2 -2
  629. package/src/gallery/gap-styles.js +21 -6
  630. package/src/gallery/index.php +23 -12
  631. package/src/gallery/shared.js +3 -2
  632. package/src/gallery/use-get-media.js +2 -1
  633. package/src/gallery/use-short-code-transform.js +19 -16
  634. package/src/gallery/v1/gallery.js +2 -2
  635. package/src/group/block.json +1 -0
  636. package/src/heading/block.json +1 -0
  637. package/src/heading/edit.js +5 -2
  638. package/src/heading/transforms.js +4 -3
  639. package/src/image/edit.js +0 -44
  640. package/src/image/edit.native.js +65 -4
  641. package/src/image/editor.scss +1 -1
  642. package/src/image/image.js +10 -13
  643. package/src/image/styles.native.scss +11 -0
  644. package/src/image/test/edit.native.js +7 -7
  645. package/src/index.js +53 -33
  646. package/src/is-block-metadata-experimental.js +19 -0
  647. package/src/latest-posts/edit.js +27 -2
  648. package/src/latest-posts/edit.native.js +56 -1
  649. package/src/latest-posts/index.php +12 -6
  650. package/src/latest-posts/style.scss +4 -0
  651. package/src/list/transforms.js +7 -0
  652. package/src/list/v2/edit.js +1 -0
  653. package/src/list/v2/migrate.js +1 -1
  654. package/src/list/v2/transforms.js +35 -0
  655. package/src/list-item/block.json +2 -1
  656. package/src/list-item/edit.js +17 -10
  657. package/src/list-item/hooks/index.js +3 -0
  658. package/src/list-item/hooks/use-backspace.js +52 -0
  659. package/src/list-item/hooks/use-enter.js +9 -16
  660. package/src/list-item/hooks/use-indent-list-item.js +50 -63
  661. package/src/list-item/hooks/use-space.js +48 -0
  662. package/src/list-item/hooks/use-split.js +33 -0
  663. package/src/list-item/utils.js +1 -1
  664. package/src/media-text/edit.native.js +3 -1
  665. package/src/media-text/media-container.native.js +2 -4
  666. package/src/media-text/transforms.js +154 -0
  667. package/src/navigation/block.json +0 -1
  668. package/src/navigation/edit/index.js +181 -205
  669. package/src/navigation/edit/inner-blocks.js +6 -15
  670. package/src/navigation/index.php +40 -0
  671. package/src/navigation/style.scss +3 -0
  672. package/src/navigation/use-navigation-entities.js +1 -1
  673. package/src/navigation/view-modal.js +32 -0
  674. package/src/navigation-link/edit.js +75 -48
  675. package/src/navigation-link/fallback-variations.js +1 -1
  676. package/src/navigation-link/hooks.js +2 -2
  677. package/src/navigation-link/test/__snapshots__/hooks.js.snap +4 -4
  678. package/src/navigation-link/test/edit.js +0 -20
  679. package/src/navigation-submenu/edit.js +13 -17
  680. package/src/page-list/convert-to-links-modal.js +1 -1
  681. package/src/page-list/edit.js +1 -4
  682. package/src/paragraph/edit.js +6 -0
  683. package/src/paragraph/use-enter.js +103 -0
  684. package/src/post-author/edit.js +24 -22
  685. package/src/post-author/index.php +4 -3
  686. package/src/post-author-name/block.json +1 -0
  687. package/src/post-author-name/index.js +2 -0
  688. package/src/post-author-name/index.php +1 -1
  689. package/src/post-author-name/transforms.js +25 -0
  690. package/src/post-comment/block.json +2 -1
  691. package/src/post-comments/block.json +3 -2
  692. package/src/post-comments/edit.js +206 -44
  693. package/src/post-comments/editor.scss +3 -0
  694. package/src/post-comments/index.php +3 -1
  695. package/src/post-comments/style.scss +30 -5
  696. package/src/post-comments-count/block.json +1 -0
  697. package/src/post-comments-form/block.json +1 -0
  698. package/src/post-comments-form/edit.js +52 -23
  699. package/src/post-comments-form/editor.scss +3 -0
  700. package/src/post-comments-form/form.js +50 -0
  701. package/src/post-comments-form/index.php +10 -3
  702. package/src/post-comments-form/style.scss +1 -4
  703. package/src/post-comments-link/block.json +1 -0
  704. package/src/post-content/edit.js +15 -1
  705. package/src/post-date/edit.js +4 -3
  706. package/src/post-excerpt/edit.js +14 -1
  707. package/src/post-featured-image/edit.js +1 -1
  708. package/src/post-template/edit.js +5 -0
  709. package/src/post-template/index.php +30 -0
  710. package/src/post-terms/block.json +8 -0
  711. package/src/post-terms/edit.js +47 -1
  712. package/src/post-terms/hooks.js +27 -0
  713. package/src/post-terms/index.js +14 -7
  714. package/src/post-terms/index.php +50 -2
  715. package/src/post-title/index.js +1 -1
  716. package/src/pullquote/edit.js +2 -2
  717. package/src/pullquote/edit.native.js +2 -2
  718. package/src/query/block.json +2 -1
  719. package/src/query/edit/inspector-controls/index.js +25 -11
  720. package/src/query/edit/inspector-controls/parent-control.js +133 -0
  721. package/src/query/edit/inspector-controls/sticky-control.js +25 -0
  722. package/src/query/utils.js +22 -0
  723. package/src/query-no-results/edit.js +1 -1
  724. package/src/query-pagination/index.php +0 -1
  725. package/src/query-title/index.js +1 -1
  726. package/src/query-title/variations.js +2 -2
  727. package/src/quote/block.json +1 -0
  728. package/src/quote/edit.js +5 -2
  729. package/src/quote/v2/edit.js +4 -2
  730. package/src/search/block.json +4 -0
  731. package/src/search/edit.js +4 -1
  732. package/src/search/index.php +29 -16
  733. package/src/separator/block.json +3 -0
  734. package/src/separator/editor.scss +1 -0
  735. package/src/shortcode/edit.native.js +29 -15
  736. package/src/shortcode/style.native.scss +11 -4
  737. package/src/shortcode/test/__snapshots__/edit.native.js.snap +9 -0
  738. package/src/shortcode/test/edit.native.js +58 -40
  739. package/src/site-logo/edit.js +1 -1
  740. package/src/site-logo/style.scss +6 -0
  741. package/src/social-links/edit.js +11 -10
  742. package/src/table/edit.js +19 -4
  743. package/src/table-of-contents/block.json +9 -2
  744. package/src/table-of-contents/edit.js +170 -77
  745. package/src/table-of-contents/index.js +2 -0
  746. package/src/table-of-contents/list.tsx +46 -0
  747. package/src/table-of-contents/save.js +25 -0
  748. package/src/table-of-contents/utils.ts +71 -0
  749. package/src/tag-cloud/block.json +1 -1
  750. package/src/template-part/edit/index.js +25 -15
  751. package/src/template-part/edit/inner-blocks.js +2 -10
  752. package/src/video/edit.js +7 -6
  753. package/src/video/editor.scss +3 -6
  754. package/test/babel-plugin.js +67 -0
  755. package/tsconfig.json +11 -0
  756. package/tsconfig.tsbuildinfo +1 -0
  757. package/build/comments-query-loop/edit/comments-inspector-controls.js.map +0 -1
  758. package/build/comments-query-loop/edit.js.map +0 -1
  759. package/build/comments-query-loop/index.js.map +0 -1
  760. package/build/comments-query-loop/save.js.map +0 -1
  761. package/build/cover/edit.js +0 -665
  762. package/build/cover/edit.js.map +0 -1
  763. package/build/navigation-area/edit.js +0 -110
  764. package/build/navigation-area/edit.js.map +0 -1
  765. package/build/navigation-area/index.js +0 -62
  766. package/build/navigation-area/index.js.map +0 -1
  767. package/build/navigation-area/inner-blocks.js +0 -34
  768. package/build/navigation-area/inner-blocks.js.map +0 -1
  769. package/build/navigation-area/save.js +0 -18
  770. package/build/navigation-area/save.js.map +0 -1
  771. package/build/post-terms/variations.js +0 -37
  772. package/build/post-terms/variations.js.map +0 -1
  773. package/build-module/comments-query-loop/edit.js.map +0 -1
  774. package/build-module/comments-query-loop/index.js.map +0 -1
  775. package/build-module/comments-query-loop/save.js.map +0 -1
  776. package/build-module/cover/edit.js +0 -642
  777. package/build-module/cover/edit.js.map +0 -1
  778. package/build-module/navigation-area/edit.js +0 -94
  779. package/build-module/navigation-area/edit.js.map +0 -1
  780. package/build-module/navigation-area/index.js +0 -48
  781. package/build-module/navigation-area/index.js.map +0 -1
  782. package/build-module/navigation-area/inner-blocks.js +0 -26
  783. package/build-module/navigation-area/inner-blocks.js.map +0 -1
  784. package/build-module/navigation-area/save.js +0 -10
  785. package/build-module/navigation-area/save.js.map +0 -1
  786. package/build-module/post-terms/variations.js +0 -27
  787. package/build-module/post-terms/variations.js.map +0 -1
  788. package/src/cover/edit.js +0 -822
  789. package/src/navigation-area/block.json +0 -23
  790. package/src/navigation-area/edit.js +0 -111
  791. package/src/navigation-area/index.js +0 -26
  792. package/src/navigation-area/index.php +0 -22
  793. package/src/navigation-area/inner-blocks.js +0 -24
  794. package/src/navigation-area/save.js +0 -8
  795. package/src/post-terms/variations.js +0 -28
  796. package/src/table-of-contents/index.php +0 -346
  797. package/src/table-of-contents/list.js +0 -28
  798. package/src/table-of-contents/utils.js +0 -126
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "$schema": "https://schemas.wp.org/trunk/block.json",
3
3
  "apiVersion": 2,
4
+ "__experimental": true,
4
5
  "name": "core/table-of-contents",
5
6
  "title": "Table of Contents",
6
7
  "category": "layout",
@@ -8,13 +9,19 @@
8
9
  "keywords": [ "document outline", "summary" ],
9
10
  "textdomain": "default",
10
11
  "attributes": {
12
+ "headings": {
13
+ "type": "array",
14
+ "items": {
15
+ "type": "object"
16
+ }
17
+ },
11
18
  "onlyIncludeCurrentPage": {
12
19
  "type": "boolean",
13
20
  "default": false
14
21
  }
15
22
  },
16
- "usesContext": [ "postId" ],
17
23
  "supports": {
18
24
  "html": false
19
- }
25
+ },
26
+ "example": {}
20
27
  }
@@ -13,7 +13,7 @@ import {
13
13
  store as blockEditorStore,
14
14
  useBlockProps,
15
15
  } from '@wordpress/block-editor';
16
- import { createBlock, store as blocksStore } from '@wordpress/blocks';
16
+ import { createBlock } from '@wordpress/blocks';
17
17
  import {
18
18
  PanelBody,
19
19
  Placeholder,
@@ -21,123 +21,215 @@ 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( [] );
60
+ const canInsertList = useSelect(
61
+ ( select ) => {
62
+ const { getBlockRootClientId, canInsertBlockType } = select(
63
+ blockEditorStore
64
+ );
65
+ const rootClientId = getBlockRootClientId( clientId );
57
66
 
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
- } ),
68
- []
67
+ return canInsertBlockType( 'core/list', rootClientId );
68
+ },
69
+ [ clientId ]
69
70
  );
70
71
 
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
- }
72
+ const {
73
+ __unstableMarkNextChangeAsNotPersistent,
74
+ replaceBlocks,
75
+ } = useDispatch( blockEditorStore );
78
76
 
77
+ /**
78
+ * The latest heading data, or null if the new data deeply equals the saved
79
+ * headings attribute.
80
+ *
81
+ * Since useSelect forces a re-render when its return value is shallowly
82
+ * inequal to its prior call, we would be re-rendering this block every time
83
+ * the stores change, even if the latest headings were deeply equal to the
84
+ * ones saved in the block attributes.
85
+ *
86
+ * By returning null when they're equal, we reduce that to 2 renders: one
87
+ * when there are new latest headings (and so it returns them), and one when
88
+ * they haven't changed (so it returns null). As long as the latest heading
89
+ * data remains the same, further calls of the useSelect callback will
90
+ * continue to return null, thus preventing any forced re-renders.
91
+ */
92
+ const latestHeadings = useSelect(
93
+ ( select ) => {
79
94
  const {
80
95
  getBlockAttributes,
81
- getBlockIndex,
82
96
  getBlockName,
83
- getBlockOrder,
97
+ getClientIdsWithDescendants,
98
+ __experimentalGetGlobalBlocksByName: getGlobalBlocksByName,
84
99
  } = select( blockEditorStore );
85
100
 
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 ] );
101
+ // FIXME: @wordpress/block-library should not depend on @wordpress/editor.
102
+ // Blocks can be loaded into a *non-post* block editor, so to avoid
103
+ // declaring @wordpress/editor as a dependency, we must access its
104
+ // store by string. When the store is not available, editorSelectors
105
+ // will be null, and the block's saved markup will lack permalinks.
106
+ // eslint-disable-next-line @wordpress/data-no-store-string-literals
107
+ const editorSelectors = select( 'core/editor' );
108
+
109
+ const pageBreakClientIds = getGlobalBlocksByName( 'core/nextpage' );
110
+
111
+ const isPaginated = pageBreakClientIds.length !== 0;
112
+
113
+ // Get the client ids of all blocks in the editor.
114
+ const allBlockClientIds = getClientIdsWithDescendants();
115
+
116
+ // 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.
117
+ let tocPage = 1;
118
+
119
+ if ( isPaginated && onlyIncludeCurrentPage ) {
120
+ // We can't use getBlockIndex because it only returns the index
121
+ // relative to sibling blocks.
122
+ const tocIndex = allBlockClientIds.indexOf( clientId );
123
+
124
+ for ( const [
125
+ blockIndex,
126
+ blockClientId,
127
+ ] of allBlockClientIds.entries() ) {
128
+ // If we've reached blocks after the Table of Contents, we've
129
+ // finished calculating which page the block is on.
130
+ if ( blockIndex >= tocIndex ) {
131
+ break;
132
+ }
133
+ if ( getBlockName( blockClientId ) === 'core/nextpage' ) {
134
+ tocPage++;
135
+ }
136
+ }
137
+ }
138
+
139
+ const _latestHeadings = [];
140
+
141
+ /** The page (of a paginated post) a heading will be part of. */
142
+ let headingPage = 1;
143
+
144
+ /**
145
+ * A permalink to the current post. If the core/editor store is
146
+ * unavailable, this variable will be null.
147
+ */
148
+ const permalink = editorSelectors?.getPermalink() ?? null;
149
+
150
+ let headingPageLink = null;
151
+
152
+ // If the core/editor store is available, we can add permalinks to the
153
+ // generated table of contents.
154
+ if ( typeof permalink === 'string' ) {
155
+ headingPageLink = isPaginated
156
+ ? addQueryArgs( permalink, { page: headingPage } )
157
+ : permalink;
158
+ }
159
+
160
+ for ( const blockClientId of allBlockClientIds ) {
161
+ const blockName = getBlockName( blockClientId );
100
162
  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;
163
+ headingPage++;
164
+
165
+ // If we're only including headings from the current page (of
166
+ // a paginated post), then exit the loop if we've reached the
167
+ // pages after the one with the Table of Contents block.
168
+ if ( onlyIncludeCurrentPage && headingPage > tocPage ) {
169
+ break;
170
+ }
171
+
172
+ if ( typeof permalink === 'string' ) {
173
+ headingPageLink = addQueryArgs(
174
+ removeQueryArgs( permalink, [ 'page' ] ),
175
+ { page: headingPage }
176
+ );
177
+ }
178
+ }
179
+ // If we're including all headings or we've reached headings on
180
+ // the same page as the Table of Contents block, add them to the
181
+ // list.
182
+ else if (
183
+ ! onlyIncludeCurrentPage ||
184
+ headingPage === tocPage
185
+ ) {
186
+ if ( blockName === 'core/heading' ) {
187
+ const headingAttributes = getBlockAttributes(
188
+ blockClientId
189
+ );
190
+
191
+ const canBeLinked =
192
+ typeof headingPageLink === 'string' &&
193
+ typeof headingAttributes.anchor === 'string' &&
194
+ headingAttributes.anchor !== '';
195
+
196
+ _latestHeadings.push( {
197
+ // Convert line breaks to spaces, and get rid of HTML tags in the headings.
198
+ content: stripHTML(
199
+ headingAttributes.content.replace(
200
+ /(<br *\/?>)+/g,
201
+ ' '
202
+ )
203
+ ),
204
+ level: headingAttributes.level,
205
+ link: canBeLinked
206
+ ? `${ headingPageLink }#${ headingAttributes.anchor }`
207
+ : null,
208
+ } );
110
209
  }
111
210
  }
112
211
  }
113
212
 
114
- return page;
213
+ if ( isEqual( headings, _latestHeadings ) ) {
214
+ return null;
215
+ }
216
+ return _latestHeadings;
115
217
  },
116
- [ clientId, onlyIncludeCurrentPage ]
218
+ [ clientId, onlyIncludeCurrentPage, headings ]
117
219
  );
118
220
 
119
221
  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 ) );
222
+ if ( latestHeadings !== null ) {
223
+ // This is required to keep undo working and not create 2 undo steps
224
+ // for each heading change.
225
+ __unstableMarkNextChangeAsNotPersistent();
226
+ setAttributes( { headings: latestHeadings } );
135
227
  }
136
- }, [ pageIndex, postContent, onlyIncludeCurrentPage ] );
228
+ }, [ latestHeadings ] );
137
229
 
138
- const { replaceBlocks } = useDispatch( blockEditorStore );
230
+ const headingTree = linearToNestedHeadingList( headings );
139
231
 
140
- const toolbarControls = listBlockExists && (
232
+ const toolbarControls = canInsertList && (
141
233
  <BlockControls>
142
234
  <ToolbarGroup>
143
235
  <ToolbarButton
@@ -145,6 +237,7 @@ export default function TableOfContentsEdit( {
145
237
  replaceBlocks(
146
238
  clientId,
147
239
  createBlock( 'core/list', {
240
+ ordered: true,
148
241
  values: renderToString(
149
242
  <TableOfContentsList
150
243
  nestedHeadingList={ headingTree }
@@ -162,7 +255,7 @@ export default function TableOfContentsEdit( {
162
255
 
163
256
  const inspectorControls = (
164
257
  <InspectorControls>
165
- <PanelBody title={ __( 'Table of Contents settings' ) }>
258
+ <PanelBody title={ __( 'Settings' ) }>
166
259
  <ToggleControl
167
260
  label={ __( 'Only include current page' ) }
168
261
  checked={ onlyIncludeCurrentPage }
@@ -191,7 +284,7 @@ export default function TableOfContentsEdit( {
191
284
  <>
192
285
  <div { ...blockProps }>
193
286
  <Placeholder
194
- icon={ <BlockIcon icon="list-view" /> }
287
+ icon={ <BlockIcon icon={ icon } /> }
195
288
  label="Table of Contents"
196
289
  instructions={ __(
197
290
  'Start adding Heading blocks to create a table of contents. Headings with HTML anchors will be linked here.'
@@ -206,9 +299,9 @@ export default function TableOfContentsEdit( {
206
299
  return (
207
300
  <>
208
301
  <nav { ...blockProps }>
209
- <ul>
302
+ <ol ref={ disabledRef }>
210
303
  <TableOfContentsList nestedHeadingList={ headingTree } />
211
- </ul>
304
+ </ol>
212
305
  </nav>
213
306
  { toolbarControls }
214
307
  { 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",
@@ -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
  },
@@ -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
  ) }