@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
@@ -2,7 +2,7 @@
2
2
  * External dependencies
3
3
  */
4
4
  import classnames from 'classnames';
5
- import { escape } from 'lodash';
5
+ import { escape, unescape } from 'lodash';
6
6
 
7
7
  /**
8
8
  * WordPress dependencies
@@ -43,6 +43,7 @@ import {
43
43
  import { placeCaretAtHorizontalEdge } from '@wordpress/dom';
44
44
  import { link as linkIcon, addSubmenu } from '@wordpress/icons';
45
45
  import { store as coreStore } from '@wordpress/core-data';
46
+ import { decodeEntities } from '@wordpress/html-entities';
46
47
 
47
48
  /**
48
49
  * Internal dependencies
@@ -239,6 +240,15 @@ export const updateNavigationLinkBlockAttributes = (
239
240
  normalizedTitle !== normalizedURL &&
240
241
  originalLabel !== title;
241
242
 
243
+ // Unfortunately this causes the escaping model to be inverted.
244
+ // The escaped content is stored in the block attributes (and ultimately in the database),
245
+ // and then the raw data is "recovered" when outputting into the DOM.
246
+ // It would be preferable to store the **raw** data in the block attributes and escape it in JS.
247
+ // Why? Because there isn't one way to escape data. Depending on the context, you need to do
248
+ // different transforms. It doesn't make sense to me to choose one of them for the purposes of storage.
249
+ // See also:
250
+ // - https://github.com/WordPress/gutenberg/pull/41063
251
+ // - https://github.com/WordPress/gutenberg/pull/18617.
242
252
  const label = escapeTitle
243
253
  ? escape( title )
244
254
  : originalLabel || escape( normalizedURL );
@@ -342,7 +352,35 @@ function navStripHTML( html ) {
342
352
  * Add transforms to Link Control
343
353
  */
344
354
 
345
- function LinkControlTransforms( { block, transforms, replace } ) {
355
+ function LinkControlTransforms( { clientId, replace } ) {
356
+ const { getBlock, blockTransforms } = useSelect(
357
+ ( select ) => {
358
+ const {
359
+ getBlock: _getBlock,
360
+ getBlockRootClientId,
361
+ getBlockTransformItems,
362
+ } = select( blockEditorStore );
363
+
364
+ return {
365
+ getBlock: _getBlock,
366
+ blockTransforms: getBlockTransformItems(
367
+ _getBlock( clientId ),
368
+ getBlockRootClientId( clientId )
369
+ ),
370
+ };
371
+ },
372
+ [ clientId ]
373
+ );
374
+
375
+ const featuredBlocks = [
376
+ 'core/site-logo',
377
+ 'core/social-links',
378
+ 'core/search',
379
+ ];
380
+ const transforms = blockTransforms.filter( ( item ) => {
381
+ return featuredBlocks.includes( item.name );
382
+ } );
383
+
346
384
  if ( ! transforms?.length ) {
347
385
  return null;
348
386
  }
@@ -359,8 +397,11 @@ function LinkControlTransforms( { block, transforms, replace } ) {
359
397
  key={ `transform-${ index }` }
360
398
  onClick={ () =>
361
399
  replace(
362
- block.clientId,
363
- switchToBlockType( block, item.name )
400
+ clientId,
401
+ switchToBlockType(
402
+ getBlock( clientId ),
403
+ item.name
404
+ )
364
405
  )
365
406
  }
366
407
  className="link-control-transform__item"
@@ -421,30 +462,20 @@ export default function NavigationLinkEdit( {
421
462
  isAtMaxNesting,
422
463
  isTopLevelLink,
423
464
  isParentOfSelectedBlock,
424
- hasDescendants,
465
+ hasChildren,
425
466
  userCanCreatePages,
426
467
  userCanCreatePosts,
427
- thisBlock,
428
- blockTransforms,
429
468
  } = useSelect(
430
469
  ( select ) => {
431
470
  const {
432
- getBlock,
433
471
  getBlocks,
472
+ getBlockCount,
434
473
  getBlockName,
435
474
  getBlockRootClientId,
436
- getClientIdsOfDescendants,
437
475
  hasSelectedInnerBlock,
438
- getSelectedBlockClientId,
439
476
  getBlockParentsByBlockName,
440
- getBlockTransformItems,
441
477
  } = select( blockEditorStore );
442
478
 
443
- const selectedBlockId = getSelectedBlockClientId();
444
-
445
- const descendants = getClientIdsOfDescendants( [ clientId ] )
446
- .length;
447
-
448
479
  return {
449
480
  innerBlocks: getBlocks( clientId ),
450
481
  isAtMaxNesting:
@@ -459,14 +490,7 @@ export default function NavigationLinkEdit( {
459
490
  clientId,
460
491
  true
461
492
  ),
462
- isImmediateParentOfSelectedBlock: hasSelectedInnerBlock(
463
- clientId,
464
- false
465
- ),
466
- hasDescendants: !! descendants,
467
- selectedBlockHasDescendants: !! getClientIdsOfDescendants( [
468
- selectedBlockId,
469
- ] )?.length,
493
+ hasChildren: !! getBlockCount( clientId ),
470
494
  userCanCreatePages: select( coreStore ).canUser(
471
495
  'create',
472
496
  'pages'
@@ -475,11 +499,6 @@ export default function NavigationLinkEdit( {
475
499
  'create',
476
500
  'posts'
477
501
  ),
478
- thisBlock: getBlock( clientId ),
479
- blockTransforms: getBlockTransformItems(
480
- [ getBlock( clientId ) ],
481
- getBlockRootClientId( clientId )
482
- ),
483
502
  };
484
503
  },
485
504
  [ clientId ]
@@ -506,15 +525,6 @@ export default function NavigationLinkEdit( {
506
525
  replaceBlock( clientId, newSubmenu );
507
526
  }
508
527
 
509
- const featuredBlocks = [
510
- 'core/site-logo',
511
- 'core/social-links',
512
- 'core/search',
513
- ];
514
- const featuredTransforms = blockTransforms.filter( ( item ) => {
515
- return featuredBlocks.includes( item.name );
516
- } );
517
-
518
528
  useEffect( () => {
519
529
  // Show the LinkControl on mount if the URL is empty
520
530
  // ( When adding a new menu item)
@@ -524,7 +534,7 @@ export default function NavigationLinkEdit( {
524
534
  setIsLinkOpen( true );
525
535
  }
526
536
  // If block has inner blocks, transform to Submenu.
527
- if ( hasDescendants ) {
537
+ if ( hasChildren ) {
528
538
  transformToSubmenu();
529
539
  }
530
540
  }, [] );
@@ -606,7 +616,17 @@ export default function NavigationLinkEdit( {
606
616
  return {
607
617
  id: page.id,
608
618
  type: postType,
609
- title: page.title.rendered,
619
+ // Make `title` property consistent with that in `fetchLinkSuggestions` where the `rendered` title (containing HTML entities)
620
+ // is also being decoded. By being consistent in both locations we avoid having to branch in the rendering output code.
621
+ // Ideally in the future we will update both APIs to utilise the "raw" form of the title which is better suited to edit contexts.
622
+ // e.g.
623
+ // - title.raw = "Yes & No"
624
+ // - title.rendered = "Yes & No"
625
+ // - decodeEntities( title.rendered ) = "Yes & No"
626
+ // See:
627
+ // - https://github.com/WordPress/gutenberg/pull/41063
628
+ // - https://github.com/WordPress/gutenberg/blob/a1e1fdc0e6278457e9f4fc0b31ac6d2095f5450b/packages/core-data/src/fetch/__experimental-fetch-link-suggestions.js#L212-L218
629
+ title: decodeEntities( page.title.rendered ),
610
630
  url: page.link,
611
631
  kind: 'post-type',
612
632
  };
@@ -634,7 +654,7 @@ export default function NavigationLinkEdit( {
634
654
  'is-editing': isSelected || isParentOfSelectedBlock,
635
655
  'is-dragging-within': isDraggingWithin,
636
656
  'has-link': !! url,
637
- 'has-child': hasDescendants,
657
+ 'has-child': hasChildren,
638
658
  'has-text-color': !! textColor || !! customTextColor,
639
659
  [ getColorClassName( 'color', textColor ) ]: !! textColor,
640
660
  'has-background': !! backgroundColor || customBackgroundColor,
@@ -795,10 +815,20 @@ export default function NavigationLinkEdit( {
795
815
  text={ tooltipText }
796
816
  >
797
817
  <>
798
- <span>
818
+ <span
819
+ aria-label={ __(
820
+ 'Navigation link text'
821
+ ) }
822
+ >
799
823
  {
800
- /* Trim to avoid trailing white space when the placeholder text is not present */
801
- `${ label } ${ placeholderText }`.trim()
824
+ // Some attributes are stored in an escaped form. It's a legacy issue.
825
+ // Ideally they would be stored in a raw, unescaped form.
826
+ // Unescape is used here to "recover" the escaped characters
827
+ // so they display without encoding.
828
+ // See `updateNavigationLinkBlockAttributes` for more details.
829
+ `${ unescape(
830
+ label
831
+ ) } ${ placeholderText }`.trim()
802
832
  }
803
833
  </span>
804
834
  <span className="wp-block-navigation-link__missing_text-tooltip">
@@ -860,10 +890,7 @@ export default function NavigationLinkEdit( {
860
890
  ! url
861
891
  ? () => (
862
892
  <LinkControlTransforms
863
- block={ thisBlock }
864
- transforms={
865
- featuredTransforms
866
- }
893
+ clientId={ clientId }
867
894
  replace={ replaceBlock }
868
895
  />
869
896
  )
@@ -5,7 +5,7 @@ import { __ } from '@wordpress/i18n';
5
5
  import {
6
6
  category as categoryIcon,
7
7
  page as pageIcon,
8
- postTitle as postIcon,
8
+ postContent as postIcon,
9
9
  tag as tagIcon,
10
10
  } from '@wordpress/icons';
11
11
 
@@ -4,7 +4,7 @@
4
4
  import {
5
5
  category,
6
6
  page,
7
- postTitle,
7
+ postContent,
8
8
  tag,
9
9
  customPostType,
10
10
  } from '@wordpress/icons';
@@ -17,7 +17,7 @@ import fallbackVariations from './fallback-variations';
17
17
  function getIcon( variationName ) {
18
18
  switch ( variationName ) {
19
19
  case 'post':
20
- return postTitle;
20
+ return postContent;
21
21
  case 'page':
22
22
  return page;
23
23
  case 'tag':
@@ -23,10 +23,10 @@ Object {
23
23
  "description": "A link to a post.",
24
24
  "icon": <SVG
25
25
  viewBox="0 0 24 24"
26
- xmlns="http://www.w3.org/2000/svg"
26
+ xmlns="https://www.w3.org/2000/svg"
27
27
  >
28
28
  <Path
29
- d="M4 14.5h16V16H4zM4 18.5h9V20H4zM4 4h3c2 0 3 .86 3 2.583 0 .891-.253 1.554-.76 1.988-.505.435-1.24.652-2.204.652H5.542V12H4V4zm2.855 4c.53 0 .924-.114 1.18-.343.266-.228.398-.579.398-1.051 0-.473-.132-.82-.397-1.04-.265-.229-.67-.343-1.217-.343H5.542V8h1.313z"
29
+ d="M4 20h16v-1.5H4V20zm0-4.8h16v-1.5H4v1.5zm0-6.4v1.5h16V8.8H4zM16 4H4v1.5h12V4z"
30
30
  />
31
31
  </SVG>,
32
32
  "isActive": [Function],
@@ -120,10 +120,10 @@ Object {
120
120
  "description": "A link to a post.",
121
121
  "icon": <SVG
122
122
  viewBox="0 0 24 24"
123
- xmlns="http://www.w3.org/2000/svg"
123
+ xmlns="https://www.w3.org/2000/svg"
124
124
  >
125
125
  <Path
126
- d="M4 14.5h16V16H4zM4 18.5h9V20H4zM4 4h3c2 0 3 .86 3 2.583 0 .891-.253 1.554-.76 1.988-.505.435-1.24.652-2.204.652H5.542V12H4V4zm2.855 4c.53 0 .924-.114 1.18-.343.266-.228.398-.579.398-1.051 0-.473-.132-.82-.397-1.04-.265-.229-.67-.343-1.217-.343H5.542V8h1.313z"
126
+ d="M4 20h16v-1.5H4V20zm0-4.8h16v-1.5H4v1.5zm0-6.4v1.5h16V8.8H4zM16 4H4v1.5h12V4z"
127
127
  />
128
128
  </SVG>,
129
129
  "isActive": [Function],
@@ -372,26 +372,6 @@ describe( 'edit', () => {
372
372
  url: 'https://wordpress.org',
373
373
  } );
374
374
  } );
375
- // https://github.com/WordPress/gutenberg/pull/18617
376
- it( 'label is javascript escaped', () => {
377
- const setAttributes = jest.fn();
378
- const linkSuggestion = {
379
- opensInNewTab: false,
380
- title: '<Navigation />',
381
- type: 'URL',
382
- url: 'https://wordpress.local?p=1',
383
- };
384
- updateNavigationLinkBlockAttributes(
385
- linkSuggestion,
386
- setAttributes
387
- );
388
- expect( setAttributes ).toHaveBeenCalledWith( {
389
- opensInNewTab: false,
390
- label: '&lt;Navigation /&gt;',
391
- kind: 'custom',
392
- url: 'https://wordpress.local?p=1',
393
- } );
394
- } );
395
375
  // https://github.com/WordPress/gutenberg/pull/19679
396
376
  it( 'url when escaped is still an actual link', () => {
397
377
  const setAttributes = jest.fn();
@@ -309,37 +309,33 @@ export default function NavigationSubmenuEdit( {
309
309
  isTopLevelItem,
310
310
  isParentOfSelectedBlock,
311
311
  isImmediateParentOfSelectedBlock,
312
- hasDescendants,
313
- selectedBlockHasDescendants,
312
+ hasChildren,
313
+ selectedBlockHasChildren,
314
314
  userCanCreatePages,
315
315
  userCanCreatePosts,
316
316
  onlyDescendantIsEmptyLink,
317
317
  } = useSelect(
318
318
  ( select ) => {
319
319
  const {
320
- getClientIdsOfDescendants,
321
320
  hasSelectedInnerBlock,
322
321
  getSelectedBlockClientId,
323
322
  getBlockParentsByBlockName,
324
323
  getBlock,
324
+ getBlockCount,
325
+ getBlockOrder,
325
326
  } = select( blockEditorStore );
326
327
 
327
328
  let _onlyDescendantIsEmptyLink;
328
329
 
329
330
  const selectedBlockId = getSelectedBlockClientId();
330
331
 
331
- const descendants = getClientIdsOfDescendants( [ clientId ] )
332
- .length;
333
-
334
- const selectedBlockDescendants = getClientIdsOfDescendants( [
335
- selectedBlockId,
336
- ] );
332
+ const selectedBlockChildren = getBlockOrder( selectedBlockId );
337
333
 
338
334
  // Check for a single descendant in the submenu. If that block
339
335
  // is a link block in a "placeholder" state with no label then
340
336
  // we can consider as an "empty" link.
341
- if ( selectedBlockDescendants?.length === 1 ) {
342
- const singleBlock = getBlock( selectedBlockDescendants[ 0 ] );
337
+ if ( selectedBlockChildren?.length === 1 ) {
338
+ const singleBlock = getBlock( selectedBlockChildren[ 0 ] );
343
339
 
344
340
  _onlyDescendantIsEmptyLink =
345
341
  singleBlock?.name === 'core/navigation-link' &&
@@ -360,8 +356,8 @@ export default function NavigationSubmenuEdit( {
360
356
  clientId,
361
357
  false
362
358
  ),
363
- hasDescendants: !! descendants,
364
- selectedBlockHasDescendants: !! selectedBlockDescendants?.length,
359
+ hasChildren: !! getBlockCount( clientId ),
360
+ selectedBlockHasChildren: !! selectedBlockChildren?.length,
365
361
  userCanCreatePages: select( coreStore ).canUser(
366
362
  'create',
367
363
  'pages'
@@ -481,7 +477,7 @@ export default function NavigationSubmenuEdit( {
481
477
  'is-editing': isSelected || isParentOfSelectedBlock,
482
478
  'is-dragging-within': isDraggingWithin,
483
479
  'has-link': !! url,
484
- 'has-child': hasDescendants,
480
+ 'has-child': hasChildren,
485
481
  'has-text-color': !! textColor || !! customTextColor,
486
482
  [ getColorClassName( 'color', textColor ) ]: !! textColor,
487
483
  'has-background': !! backgroundColor || customBackgroundColor,
@@ -538,9 +534,9 @@ export default function NavigationSubmenuEdit( {
538
534
  renderAppender:
539
535
  isSelected ||
540
536
  ( isImmediateParentOfSelectedBlock &&
541
- ! selectedBlockHasDescendants ) ||
537
+ ! selectedBlockHasChildren ) ||
542
538
  // Show the appender while dragging to allow inserting element between item and the appender.
543
- hasDescendants
539
+ hasChildren
544
540
  ? InnerBlocks.ButtonBlockAppender
545
541
  : false,
546
542
  }
@@ -554,7 +550,7 @@ export default function NavigationSubmenuEdit( {
554
550
  }
555
551
 
556
552
  const canConvertToLink =
557
- ! selectedBlockHasDescendants || onlyDescendantIsEmptyLink;
553
+ ! selectedBlockHasChildren || onlyDescendantIsEmptyLink;
558
554
 
559
555
  return (
560
556
  <Fragment>
@@ -4,7 +4,7 @@
4
4
  import { Button, Modal } from '@wordpress/components';
5
5
  import { __ } from '@wordpress/i18n';
6
6
  import { useDispatch } from '@wordpress/data';
7
- import { __experimentalUseEntityRecords as useEntityRecords } from '@wordpress/core-data';
7
+ import { useEntityRecords } from '@wordpress/core-data';
8
8
  import { createBlock as create } from '@wordpress/blocks';
9
9
  import { store as blockEditorStore } from '@wordpress/block-editor';
10
10
 
@@ -16,10 +16,7 @@ import { ToolbarButton, Spinner, Notice } from '@wordpress/components';
16
16
  import { __ } from '@wordpress/i18n';
17
17
  import { useMemo, useState, memo } from '@wordpress/element';
18
18
  import { useSelect } from '@wordpress/data';
19
- import {
20
- store as coreStore,
21
- __experimentalUseEntityRecords as useEntityRecords,
22
- } from '@wordpress/core-data';
19
+ import { store as coreStore, useEntityRecords } from '@wordpress/core-data';
23
20
 
24
21
  /**
25
22
  * Internal dependencies
@@ -23,6 +23,11 @@ import {
23
23
  import { createBlock } from '@wordpress/blocks';
24
24
  import { formatLtr } from '@wordpress/icons';
25
25
 
26
+ /**
27
+ * Internal dependencies
28
+ */
29
+ import { useOnEnter } from './use-enter';
30
+
26
31
  const name = 'core/paragraph';
27
32
 
28
33
  function ParagraphRTLControl( { direction, setDirection } ) {
@@ -57,6 +62,7 @@ function ParagraphBlock( {
57
62
  const { align, content, direction, dropCap, placeholder } = attributes;
58
63
  const isDropCapFeatureEnabled = useSetting( 'typography.dropCap' );
59
64
  const blockProps = useBlockProps( {
65
+ ref: useOnEnter( { clientId, content } ),
60
66
  className: classnames( {
61
67
  'has-drop-cap': dropCap,
62
68
  [ `has-text-align-${ align }` ]: align,
@@ -0,0 +1,103 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useRef } from '@wordpress/element';
5
+ import { useRefEffect } from '@wordpress/compose';
6
+ import { ENTER } from '@wordpress/keycodes';
7
+ import { useSelect, useDispatch, useRegistry } from '@wordpress/data';
8
+ import { store as blockEditorStore } from '@wordpress/block-editor';
9
+ import { hasBlockSupport, createBlock } from '@wordpress/blocks';
10
+
11
+ export function useOnEnter( props ) {
12
+ const { batch } = useRegistry();
13
+ const {
14
+ moveBlocksToPosition,
15
+ replaceInnerBlocks,
16
+ duplicateBlocks,
17
+ insertBlock,
18
+ } = useDispatch( blockEditorStore );
19
+ const {
20
+ getBlockRootClientId,
21
+ getBlockIndex,
22
+ getBlockOrder,
23
+ getBlockName,
24
+ getBlock,
25
+ getNextBlockClientId,
26
+ } = useSelect( blockEditorStore );
27
+ const propsRef = useRef( props );
28
+ propsRef.current = props;
29
+ return useRefEffect( ( element ) => {
30
+ function onKeyDown( event ) {
31
+ if ( event.defaultPrevented ) {
32
+ return;
33
+ }
34
+
35
+ if ( event.keyCode !== ENTER ) {
36
+ return;
37
+ }
38
+
39
+ const { content, clientId } = propsRef.current;
40
+
41
+ // The paragraph should be empty.
42
+ if ( content.length ) {
43
+ return;
44
+ }
45
+
46
+ const wrapperClientId = getBlockRootClientId( clientId );
47
+
48
+ if (
49
+ ! hasBlockSupport(
50
+ getBlockName( wrapperClientId ),
51
+ '__experimentalOnEnter',
52
+ false
53
+ )
54
+ ) {
55
+ return;
56
+ }
57
+
58
+ const order = getBlockOrder( wrapperClientId );
59
+
60
+ event.preventDefault();
61
+
62
+ const position = order.indexOf( clientId );
63
+
64
+ // If it is the last block, exit.
65
+ if ( position === order.length - 1 ) {
66
+ moveBlocksToPosition(
67
+ [ clientId ],
68
+ wrapperClientId,
69
+ getBlockRootClientId( wrapperClientId ),
70
+ getBlockIndex( wrapperClientId ) + 1
71
+ );
72
+ return;
73
+ }
74
+
75
+ // If it is in the middle, split the block in two.
76
+ const wrapperBlock = getBlock( wrapperClientId );
77
+ batch( () => {
78
+ duplicateBlocks( [ wrapperClientId ] );
79
+ const blockIndex = getBlockIndex( wrapperClientId );
80
+
81
+ replaceInnerBlocks(
82
+ wrapperClientId,
83
+ wrapperBlock.innerBlocks.slice( 0, position )
84
+ );
85
+ replaceInnerBlocks(
86
+ getNextBlockClientId( wrapperClientId ),
87
+ wrapperBlock.innerBlocks.slice( position + 1 )
88
+ );
89
+ insertBlock(
90
+ createBlock( 'core/paragraph' ),
91
+ blockIndex + 1,
92
+ getBlockRootClientId( wrapperClientId ),
93
+ true
94
+ );
95
+ } );
96
+ }
97
+
98
+ element.addEventListener( 'keydown', onKeyDown );
99
+ return () => {
100
+ element.removeEventListener( 'keydown', onKeyDown );
101
+ };
102
+ }, [] );
103
+ }
@@ -70,28 +70,30 @@ function PostAuthorEdit( {
70
70
  <>
71
71
  <InspectorControls>
72
72
  <PanelBody title={ __( 'Settings' ) }>
73
- { ! isDescendentOfQueryLoop && !! authors?.length && (
74
- <SelectControl
75
- label={ __( 'Author' ) }
76
- value={ authorId }
77
- options={ authors.map( ( { id, name } ) => {
78
- return {
79
- value: id,
80
- label: name,
81
- };
82
- } ) }
83
- onChange={ ( nextAuthorId ) => {
84
- editEntityRecord(
85
- 'postType',
86
- postType,
87
- postId,
88
- {
89
- author: nextAuthorId,
90
- }
91
- );
92
- } }
93
- />
94
- ) }
73
+ { !! postId &&
74
+ ! isDescendentOfQueryLoop &&
75
+ !! authors?.length && (
76
+ <SelectControl
77
+ label={ __( 'Author' ) }
78
+ value={ authorId }
79
+ options={ authors.map( ( { id, name } ) => {
80
+ return {
81
+ value: id,
82
+ label: name,
83
+ };
84
+ } ) }
85
+ onChange={ ( nextAuthorId ) => {
86
+ editEntityRecord(
87
+ 'postType',
88
+ postType,
89
+ postId,
90
+ {
91
+ author: nextAuthorId,
92
+ }
93
+ );
94
+ } }
95
+ />
96
+ ) }
95
97
  <ToggleControl
96
98
  label={ __( 'Show avatar' ) }
97
99
  checked={ showAvatar }
@@ -15,10 +15,11 @@
15
15
  */
16
16
  function render_block_core_post_author( $attributes, $content, $block ) {
17
17
  if ( ! isset( $block->context['postId'] ) ) {
18
- return '';
18
+ $author_id = get_query_var( 'author' );
19
+ } else {
20
+ $author_id = get_post_field( 'post_author', $block->context['postId'] );
19
21
  }
20
22
 
21
- $author_id = get_post_field( 'post_author', $block->context['postId'] );
22
23
  if ( empty( $author_id ) ) {
23
24
  return '';
24
25
  }
@@ -39,7 +40,7 @@ function render_block_core_post_author( $attributes, $content, $block ) {
39
40
  return sprintf( '<div %1$s>', $wrapper_attributes ) .
40
41
  ( ! empty( $attributes['showAvatar'] ) ? '<div class="wp-block-post-author__avatar">' . $avatar . '</div>' : '' ) .
41
42
  '<div class="wp-block-post-author__content">' .
42
- ( ! empty( $byline ) ? '<p class="wp-block-post-author__byline">' . esc_html( $byline ) . '</p>' : '' ) .
43
+ ( ! empty( $byline ) ? '<p class="wp-block-post-author__byline">' . wp_kses_post( $byline ) . '</p>' : '' ) .
43
44
  '<p class="wp-block-post-author__name">' . get_the_author_meta( 'display_name', $author_id ) . '</p>' .
44
45
  ( ! empty( $attributes['showBio'] ) ? '<p class="wp-block-post-author__bio">' . get_the_author_meta( 'user_description', $author_id ) . '</p>' : '' ) .
45
46
  '</div>' .
@@ -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/post-author-name",
5
6
  "title": "Post Author Name",
6
7
  "category": "theme",
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import metadata from './block.json';
5
5
  import edit from './edit';
6
+ import transforms from './transforms';
6
7
 
7
8
  /**
8
9
  * WordPress dependencies
@@ -14,5 +15,6 @@ export { metadata, name };
14
15
 
15
16
  export const settings = {
16
17
  icon,
18
+ transforms,
17
19
  edit,
18
20
  };
@@ -32,7 +32,7 @@ function render_block_core_post_author_name( $attributes, $content, $block ) {
32
32
 
33
33
  $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $align_class_name ) );
34
34
 
35
- return sprintf( '<div %1$s>', $wrapper_attributes ) . $author_name . '</div>';
35
+ return sprintf( '<div %1$s>%2$s</div>', $wrapper_attributes, $author_name );
36
36
  }
37
37
 
38
38
  /**