@wordpress/editor 13.11.0 → 13.12.1

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 (416) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/autosave-monitor/index.js +1 -2
  3. package/build/components/autosave-monitor/index.js.map +1 -1
  4. package/build/components/deprecated.js +7 -9
  5. package/build/components/deprecated.js.map +1 -1
  6. package/build/components/document-outline/check.js +4 -5
  7. package/build/components/document-outline/check.js.map +1 -1
  8. package/build/components/document-outline/index.js +12 -16
  9. package/build/components/document-outline/index.js.map +1 -1
  10. package/build/components/document-outline/item.js +22 -25
  11. package/build/components/document-outline/item.js.map +1 -1
  12. package/build/components/editor-help/help-detail-navigation-screen.native.js +6 -9
  13. package/build/components/editor-help/help-detail-navigation-screen.native.js.map +1 -1
  14. package/build/components/editor-help/help-get-support-button.native.js +4 -5
  15. package/build/components/editor-help/help-get-support-button.native.js.map +1 -1
  16. package/build/components/editor-help/help-section-title.native.js +3 -4
  17. package/build/components/editor-help/help-section-title.native.js.map +1 -1
  18. package/build/components/editor-help/help-topic-row.native.js +6 -7
  19. package/build/components/editor-help/help-topic-row.native.js.map +1 -1
  20. package/build/components/editor-help/index.native.js +20 -27
  21. package/build/components/editor-help/index.native.js.map +1 -1
  22. package/build/components/editor-help/view-sections.native.js +16 -20
  23. package/build/components/editor-help/view-sections.native.js.map +1 -1
  24. package/build/components/editor-history/redo.js +2 -6
  25. package/build/components/editor-history/redo.js.map +1 -1
  26. package/build/components/editor-history/undo.js +2 -6
  27. package/build/components/editor-history/undo.js.map +1 -1
  28. package/build/components/editor-notices/index.js +12 -19
  29. package/build/components/editor-notices/index.js.map +1 -1
  30. package/build/components/editor-snackbars/index.js +3 -6
  31. package/build/components/editor-snackbars/index.js.map +1 -1
  32. package/build/components/entities-saved-states/entity-record-item.js +7 -10
  33. package/build/components/entities-saved-states/entity-record-item.js.map +1 -1
  34. package/build/components/entities-saved-states/entity-type-list.js +6 -7
  35. package/build/components/entities-saved-states/entity-type-list.js.map +1 -1
  36. package/build/components/entities-saved-states/hooks/use-is-dirty.js +86 -0
  37. package/build/components/entities-saved-states/hooks/use-is-dirty.js.map +1 -0
  38. package/build/components/entities-saved-states/index.js +43 -116
  39. package/build/components/entities-saved-states/index.js.map +1 -1
  40. package/build/components/error-boundary/index.js +4 -5
  41. package/build/components/error-boundary/index.js.map +1 -1
  42. package/build/components/global-keyboard-shortcuts/save-shortcut.js +3 -4
  43. package/build/components/global-keyboard-shortcuts/save-shortcut.js.map +1 -1
  44. package/build/components/index.js +18 -0
  45. package/build/components/index.js.map +1 -1
  46. package/build/components/media-categories/index.js +25 -42
  47. package/build/components/media-categories/index.js.map +1 -1
  48. package/build/components/page-attributes/check.js +4 -7
  49. package/build/components/page-attributes/check.js.map +1 -1
  50. package/build/components/page-attributes/order.js +7 -9
  51. package/build/components/page-attributes/order.js.map +1 -1
  52. package/build/components/page-attributes/parent.js +5 -12
  53. package/build/components/page-attributes/parent.js.map +1 -1
  54. package/build/components/post-author/check.js +6 -7
  55. package/build/components/post-author/check.js.map +1 -1
  56. package/build/components/post-author/combobox.js +3 -6
  57. package/build/components/post-author/combobox.js.map +1 -1
  58. package/build/components/post-author/index.js +1 -1
  59. package/build/components/post-author/index.js.map +1 -1
  60. package/build/components/post-comments/index.js +4 -6
  61. package/build/components/post-comments/index.js.map +1 -1
  62. package/build/components/post-excerpt/check.js +2 -4
  63. package/build/components/post-excerpt/check.js.map +1 -1
  64. package/build/components/post-excerpt/index.js +4 -5
  65. package/build/components/post-excerpt/index.js.map +1 -1
  66. package/build/components/post-featured-image/check.js +2 -4
  67. package/build/components/post-featured-image/check.js.map +1 -1
  68. package/build/components/post-featured-image/index.js +56 -69
  69. package/build/components/post-featured-image/index.js.map +1 -1
  70. package/build/components/post-format/check.js +6 -9
  71. package/build/components/post-format/check.js.map +1 -1
  72. package/build/components/post-format/index.js +1 -1
  73. package/build/components/post-format/index.js.map +1 -1
  74. package/build/components/post-last-revision/check.js +5 -7
  75. package/build/components/post-last-revision/check.js.map +1 -1
  76. package/build/components/post-last-revision/index.js +4 -5
  77. package/build/components/post-last-revision/index.js.map +1 -1
  78. package/build/components/post-locked-modal/index.js +1 -1
  79. package/build/components/post-locked-modal/index.js.map +1 -1
  80. package/build/components/post-pending-status/check.js +7 -9
  81. package/build/components/post-pending-status/check.js.map +1 -1
  82. package/build/components/post-pending-status/index.js +4 -6
  83. package/build/components/post-pending-status/index.js.map +1 -1
  84. package/build/components/post-pingbacks/index.js +4 -6
  85. package/build/components/post-pingbacks/index.js.map +1 -1
  86. package/build/components/post-preview-button/index.js +8 -12
  87. package/build/components/post-preview-button/index.js.map +1 -1
  88. package/build/components/post-publish-button/index.js +10 -19
  89. package/build/components/post-publish-button/index.js.map +1 -1
  90. package/build/components/post-publish-button/label.js +14 -17
  91. package/build/components/post-publish-button/label.js.map +1 -1
  92. package/build/components/post-publish-panel/index.js +10 -12
  93. package/build/components/post-publish-panel/index.js.map +1 -1
  94. package/build/components/post-publish-panel/maybe-category-panel.js +2 -4
  95. package/build/components/post-publish-panel/maybe-category-panel.js.map +1 -1
  96. package/build/components/post-publish-panel/maybe-post-format-panel.js +9 -12
  97. package/build/components/post-publish-panel/maybe-post-format-panel.js.map +1 -1
  98. package/build/components/post-publish-panel/maybe-tags-panel.js +4 -7
  99. package/build/components/post-publish-panel/maybe-tags-panel.js.map +1 -1
  100. package/build/components/post-publish-panel/maybe-upload-media.js +150 -0
  101. package/build/components/post-publish-panel/maybe-upload-media.js.map +1 -0
  102. package/build/components/post-publish-panel/postpublish.js +8 -11
  103. package/build/components/post-publish-panel/postpublish.js.map +1 -1
  104. package/build/components/post-publish-panel/prepublish.js +8 -7
  105. package/build/components/post-publish-panel/prepublish.js.map +1 -1
  106. package/build/components/post-saved-state/index.js +13 -8
  107. package/build/components/post-saved-state/index.js.map +1 -1
  108. package/build/components/post-schedule/check.js +6 -8
  109. package/build/components/post-schedule/check.js.map +1 -1
  110. package/build/components/post-schedule/index.js +8 -12
  111. package/build/components/post-schedule/index.js.map +1 -1
  112. package/build/components/post-schedule/label.js +7 -10
  113. package/build/components/post-schedule/label.js.map +1 -1
  114. package/build/components/post-slug/check.js +3 -4
  115. package/build/components/post-slug/check.js.map +1 -1
  116. package/build/components/post-slug/index.js +5 -6
  117. package/build/components/post-slug/index.js.map +1 -1
  118. package/build/components/post-sticky/check.js +7 -9
  119. package/build/components/post-sticky/check.js.map +1 -1
  120. package/build/components/post-sticky/index.js +4 -5
  121. package/build/components/post-sticky/index.js.map +1 -1
  122. package/build/components/post-switch-to-draft-button/index.js +6 -7
  123. package/build/components/post-switch-to-draft-button/index.js.map +1 -1
  124. package/build/components/post-sync-status/index.js +67 -0
  125. package/build/components/post-sync-status/index.js.map +1 -0
  126. package/build/components/post-taxonomies/check.js +6 -7
  127. package/build/components/post-taxonomies/check.js.map +1 -1
  128. package/build/components/post-taxonomies/flat-term-selector.js +36 -46
  129. package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
  130. package/build/components/post-taxonomies/hierarchical-term-selector.js +13 -14
  131. package/build/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  132. package/build/components/post-taxonomies/index.js +6 -11
  133. package/build/components/post-taxonomies/index.js.map +1 -1
  134. package/build/components/post-taxonomies/most-used-terms.js +5 -6
  135. package/build/components/post-taxonomies/most-used-terms.js.map +1 -1
  136. package/build/components/post-template/index.js +6 -9
  137. package/build/components/post-template/index.js.map +1 -1
  138. package/build/components/post-title/index.js +8 -5
  139. package/build/components/post-title/index.js.map +1 -1
  140. package/build/components/post-title/index.native.js +8 -11
  141. package/build/components/post-title/index.native.js.map +1 -1
  142. package/build/components/post-trash/check.js +7 -9
  143. package/build/components/post-trash/check.js.map +1 -1
  144. package/build/components/post-type-support-check/index.js +5 -6
  145. package/build/components/post-type-support-check/index.js.map +1 -1
  146. package/build/components/post-url/check.js +4 -5
  147. package/build/components/post-url/check.js.map +1 -1
  148. package/build/components/post-url/index.js +8 -9
  149. package/build/components/post-url/index.js.map +1 -1
  150. package/build/components/post-visibility/check.js +6 -7
  151. package/build/components/post-visibility/check.js.map +1 -1
  152. package/build/components/post-visibility/index.js +14 -19
  153. package/build/components/post-visibility/index.js.map +1 -1
  154. package/build/components/post-visibility/label.js +1 -3
  155. package/build/components/post-visibility/label.js.map +1 -1
  156. package/build/components/provider/index.js +12 -15
  157. package/build/components/provider/index.js.map +1 -1
  158. package/build/components/provider/index.native.js +19 -30
  159. package/build/components/provider/index.native.js.map +1 -1
  160. package/build/components/provider/use-block-editor-settings.js +5 -9
  161. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  162. package/build/components/provider/use-block-editor-settings.native.js +1 -3
  163. package/build/components/provider/use-block-editor-settings.native.js.map +1 -1
  164. package/build/components/provider/with-registry-provider.js +4 -2
  165. package/build/components/provider/with-registry-provider.js.map +1 -1
  166. package/build/components/table-of-contents/index.js +26 -35
  167. package/build/components/table-of-contents/index.js.map +1 -1
  168. package/build/components/table-of-contents/panel.js +4 -5
  169. package/build/components/table-of-contents/panel.js.map +1 -1
  170. package/build/components/template-validation-notice/index.js +4 -6
  171. package/build/components/template-validation-notice/index.js.map +1 -1
  172. package/build/components/theme-support-check/index.js +7 -8
  173. package/build/components/theme-support-check/index.js.map +1 -1
  174. package/build/hooks/custom-sources-backwards-compatibility.js +20 -42
  175. package/build/hooks/custom-sources-backwards-compatibility.js.map +1 -1
  176. package/build/hooks/default-autocompleters.js +1 -2
  177. package/build/hooks/default-autocompleters.js.map +1 -1
  178. package/build/{lockUnlock.js → lock-unlock.js} +1 -1
  179. package/build/lock-unlock.js.map +1 -0
  180. package/build/private-apis.js +5 -2
  181. package/build/private-apis.js.map +1 -1
  182. package/build/store/actions.js +147 -179
  183. package/build/store/actions.js.map +1 -1
  184. package/build/store/actions.native.js +1 -2
  185. package/build/store/actions.native.js.map +1 -1
  186. package/build/store/reducer.js +14 -44
  187. package/build/store/reducer.js.map +1 -1
  188. package/build/store/reducer.native.js +3 -12
  189. package/build/store/reducer.native.js.map +1 -1
  190. package/build/store/selectors.js +23 -54
  191. package/build/store/selectors.js.map +1 -1
  192. package/build/store/utils/notice-builder.js +3 -3
  193. package/build/store/utils/notice-builder.js.map +1 -1
  194. package/build/utils/media-upload/index.js +11 -15
  195. package/build/utils/media-upload/index.js.map +1 -1
  196. package/build/utils/terms.js +3 -6
  197. package/build/utils/terms.js.map +1 -1
  198. package/build-module/components/autosave-monitor/index.js +1 -2
  199. package/build-module/components/autosave-monitor/index.js.map +1 -1
  200. package/build-module/components/deprecated.js +7 -8
  201. package/build-module/components/deprecated.js.map +1 -1
  202. package/build-module/components/document-outline/check.js +4 -5
  203. package/build-module/components/document-outline/check.js.map +1 -1
  204. package/build-module/components/document-outline/index.js +12 -16
  205. package/build-module/components/document-outline/index.js.map +1 -1
  206. package/build-module/components/document-outline/item.js +22 -25
  207. package/build-module/components/document-outline/item.js.map +1 -1
  208. package/build-module/components/editor-help/help-detail-navigation-screen.native.js +6 -8
  209. package/build-module/components/editor-help/help-detail-navigation-screen.native.js.map +1 -1
  210. package/build-module/components/editor-help/help-get-support-button.native.js +4 -5
  211. package/build-module/components/editor-help/help-get-support-button.native.js.map +1 -1
  212. package/build-module/components/editor-help/help-section-title.native.js +3 -4
  213. package/build-module/components/editor-help/help-section-title.native.js.map +1 -1
  214. package/build-module/components/editor-help/help-topic-row.native.js +6 -7
  215. package/build-module/components/editor-help/help-topic-row.native.js.map +1 -1
  216. package/build-module/components/editor-help/index.native.js +20 -25
  217. package/build-module/components/editor-help/index.native.js.map +1 -1
  218. package/build-module/components/editor-help/view-sections.native.js +16 -20
  219. package/build-module/components/editor-help/view-sections.native.js.map +1 -1
  220. package/build-module/components/editor-history/redo.js +2 -3
  221. package/build-module/components/editor-history/redo.js.map +1 -1
  222. package/build-module/components/editor-history/undo.js +2 -3
  223. package/build-module/components/editor-history/undo.js.map +1 -1
  224. package/build-module/components/editor-notices/index.js +12 -19
  225. package/build-module/components/editor-notices/index.js.map +1 -1
  226. package/build-module/components/editor-snackbars/index.js +3 -6
  227. package/build-module/components/editor-snackbars/index.js.map +1 -1
  228. package/build-module/components/entities-saved-states/entity-record-item.js +7 -10
  229. package/build-module/components/entities-saved-states/entity-record-item.js.map +1 -1
  230. package/build-module/components/entities-saved-states/entity-type-list.js +6 -7
  231. package/build-module/components/entities-saved-states/entity-type-list.js.map +1 -1
  232. package/build-module/components/entities-saved-states/hooks/use-is-dirty.js +72 -0
  233. package/build-module/components/entities-saved-states/hooks/use-is-dirty.js.map +1 -0
  234. package/build-module/components/entities-saved-states/index.js +44 -118
  235. package/build-module/components/entities-saved-states/index.js.map +1 -1
  236. package/build-module/components/error-boundary/index.js +4 -5
  237. package/build-module/components/error-boundary/index.js.map +1 -1
  238. package/build-module/components/global-keyboard-shortcuts/save-shortcut.js +3 -4
  239. package/build-module/components/global-keyboard-shortcuts/save-shortcut.js.map +1 -1
  240. package/build-module/components/index.js +2 -0
  241. package/build-module/components/index.js.map +1 -1
  242. package/build-module/components/media-categories/index.js +25 -42
  243. package/build-module/components/media-categories/index.js.map +1 -1
  244. package/build-module/components/page-attributes/check.js +4 -7
  245. package/build-module/components/page-attributes/check.js.map +1 -1
  246. package/build-module/components/page-attributes/order.js +7 -9
  247. package/build-module/components/page-attributes/order.js.map +1 -1
  248. package/build-module/components/page-attributes/parent.js +5 -12
  249. package/build-module/components/page-attributes/parent.js.map +1 -1
  250. package/build-module/components/post-author/check.js +6 -7
  251. package/build-module/components/post-author/check.js.map +1 -1
  252. package/build-module/components/post-author/combobox.js +3 -6
  253. package/build-module/components/post-author/combobox.js.map +1 -1
  254. package/build-module/components/post-author/index.js +1 -1
  255. package/build-module/components/post-author/index.js.map +1 -1
  256. package/build-module/components/post-comments/index.js +4 -6
  257. package/build-module/components/post-comments/index.js.map +1 -1
  258. package/build-module/components/post-excerpt/check.js +2 -3
  259. package/build-module/components/post-excerpt/check.js.map +1 -1
  260. package/build-module/components/post-excerpt/index.js +4 -5
  261. package/build-module/components/post-excerpt/index.js.map +1 -1
  262. package/build-module/components/post-featured-image/check.js +2 -3
  263. package/build-module/components/post-featured-image/check.js.map +1 -1
  264. package/build-module/components/post-featured-image/index.js +56 -69
  265. package/build-module/components/post-featured-image/index.js.map +1 -1
  266. package/build-module/components/post-format/check.js +6 -8
  267. package/build-module/components/post-format/check.js.map +1 -1
  268. package/build-module/components/post-format/index.js +1 -1
  269. package/build-module/components/post-format/index.js.map +1 -1
  270. package/build-module/components/post-last-revision/check.js +5 -7
  271. package/build-module/components/post-last-revision/check.js.map +1 -1
  272. package/build-module/components/post-last-revision/index.js +4 -5
  273. package/build-module/components/post-last-revision/index.js.map +1 -1
  274. package/build-module/components/post-locked-modal/index.js +1 -1
  275. package/build-module/components/post-locked-modal/index.js.map +1 -1
  276. package/build-module/components/post-pending-status/check.js +7 -9
  277. package/build-module/components/post-pending-status/check.js.map +1 -1
  278. package/build-module/components/post-pending-status/index.js +4 -6
  279. package/build-module/components/post-pending-status/index.js.map +1 -1
  280. package/build-module/components/post-pingbacks/index.js +4 -6
  281. package/build-module/components/post-pingbacks/index.js.map +1 -1
  282. package/build-module/components/post-preview-button/index.js +8 -12
  283. package/build-module/components/post-preview-button/index.js.map +1 -1
  284. package/build-module/components/post-publish-button/index.js +10 -18
  285. package/build-module/components/post-publish-button/index.js.map +1 -1
  286. package/build-module/components/post-publish-button/label.js +14 -17
  287. package/build-module/components/post-publish-button/label.js.map +1 -1
  288. package/build-module/components/post-publish-panel/index.js +10 -11
  289. package/build-module/components/post-publish-panel/index.js.map +1 -1
  290. package/build-module/components/post-publish-panel/maybe-category-panel.js +2 -4
  291. package/build-module/components/post-publish-panel/maybe-category-panel.js.map +1 -1
  292. package/build-module/components/post-publish-panel/maybe-post-format-panel.js +9 -12
  293. package/build-module/components/post-publish-panel/maybe-post-format-panel.js.map +1 -1
  294. package/build-module/components/post-publish-panel/maybe-tags-panel.js +4 -7
  295. package/build-module/components/post-publish-panel/maybe-tags-panel.js.map +1 -1
  296. package/build-module/components/post-publish-panel/maybe-upload-media.js +138 -0
  297. package/build-module/components/post-publish-panel/maybe-upload-media.js.map +1 -0
  298. package/build-module/components/post-publish-panel/postpublish.js +8 -11
  299. package/build-module/components/post-publish-panel/postpublish.js.map +1 -1
  300. package/build-module/components/post-publish-panel/prepublish.js +7 -7
  301. package/build-module/components/post-publish-panel/prepublish.js.map +1 -1
  302. package/build-module/components/post-saved-state/index.js +13 -8
  303. package/build-module/components/post-saved-state/index.js.map +1 -1
  304. package/build-module/components/post-schedule/check.js +6 -8
  305. package/build-module/components/post-schedule/check.js.map +1 -1
  306. package/build-module/components/post-schedule/index.js +8 -12
  307. package/build-module/components/post-schedule/index.js.map +1 -1
  308. package/build-module/components/post-schedule/label.js +7 -10
  309. package/build-module/components/post-schedule/label.js.map +1 -1
  310. package/build-module/components/post-slug/check.js +3 -4
  311. package/build-module/components/post-slug/check.js.map +1 -1
  312. package/build-module/components/post-slug/index.js +5 -6
  313. package/build-module/components/post-slug/index.js.map +1 -1
  314. package/build-module/components/post-sticky/check.js +7 -9
  315. package/build-module/components/post-sticky/check.js.map +1 -1
  316. package/build-module/components/post-sticky/index.js +4 -5
  317. package/build-module/components/post-sticky/index.js.map +1 -1
  318. package/build-module/components/post-switch-to-draft-button/index.js +6 -7
  319. package/build-module/components/post-switch-to-draft-button/index.js.map +1 -1
  320. package/build-module/components/post-sync-status/index.js +56 -0
  321. package/build-module/components/post-sync-status/index.js.map +1 -0
  322. package/build-module/components/post-taxonomies/check.js +6 -7
  323. package/build-module/components/post-taxonomies/check.js.map +1 -1
  324. package/build-module/components/post-taxonomies/flat-term-selector.js +36 -44
  325. package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
  326. package/build-module/components/post-taxonomies/hierarchical-term-selector.js +13 -14
  327. package/build-module/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  328. package/build-module/components/post-taxonomies/index.js +6 -11
  329. package/build-module/components/post-taxonomies/index.js.map +1 -1
  330. package/build-module/components/post-taxonomies/most-used-terms.js +5 -6
  331. package/build-module/components/post-taxonomies/most-used-terms.js.map +1 -1
  332. package/build-module/components/post-template/index.js +6 -9
  333. package/build-module/components/post-template/index.js.map +1 -1
  334. package/build-module/components/post-title/index.js +8 -5
  335. package/build-module/components/post-title/index.js.map +1 -1
  336. package/build-module/components/post-title/index.native.js +8 -11
  337. package/build-module/components/post-title/index.native.js.map +1 -1
  338. package/build-module/components/post-trash/check.js +7 -9
  339. package/build-module/components/post-trash/check.js.map +1 -1
  340. package/build-module/components/post-type-support-check/index.js +5 -6
  341. package/build-module/components/post-type-support-check/index.js.map +1 -1
  342. package/build-module/components/post-url/check.js +4 -5
  343. package/build-module/components/post-url/check.js.map +1 -1
  344. package/build-module/components/post-url/index.js +8 -9
  345. package/build-module/components/post-url/index.js.map +1 -1
  346. package/build-module/components/post-visibility/check.js +6 -7
  347. package/build-module/components/post-visibility/check.js.map +1 -1
  348. package/build-module/components/post-visibility/index.js +14 -16
  349. package/build-module/components/post-visibility/index.js.map +1 -1
  350. package/build-module/components/post-visibility/label.js +1 -3
  351. package/build-module/components/post-visibility/label.js.map +1 -1
  352. package/build-module/components/provider/index.js +12 -14
  353. package/build-module/components/provider/index.js.map +1 -1
  354. package/build-module/components/provider/index.native.js +19 -29
  355. package/build-module/components/provider/index.native.js.map +1 -1
  356. package/build-module/components/provider/use-block-editor-settings.js +5 -9
  357. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  358. package/build-module/components/provider/use-block-editor-settings.native.js +1 -3
  359. package/build-module/components/provider/use-block-editor-settings.native.js.map +1 -1
  360. package/build-module/components/provider/with-registry-provider.js +4 -2
  361. package/build-module/components/provider/with-registry-provider.js.map +1 -1
  362. package/build-module/components/table-of-contents/index.js +26 -34
  363. package/build-module/components/table-of-contents/index.js.map +1 -1
  364. package/build-module/components/table-of-contents/panel.js +4 -5
  365. package/build-module/components/table-of-contents/panel.js.map +1 -1
  366. package/build-module/components/template-validation-notice/index.js +4 -6
  367. package/build-module/components/template-validation-notice/index.js.map +1 -1
  368. package/build-module/components/theme-support-check/index.js +7 -8
  369. package/build-module/components/theme-support-check/index.js.map +1 -1
  370. package/build-module/hooks/custom-sources-backwards-compatibility.js +20 -39
  371. package/build-module/hooks/custom-sources-backwards-compatibility.js.map +1 -1
  372. package/build-module/hooks/default-autocompleters.js +1 -2
  373. package/build-module/hooks/default-autocompleters.js.map +1 -1
  374. package/build-module/{lockUnlock.js → lock-unlock.js} +1 -1
  375. package/build-module/lock-unlock.js.map +1 -0
  376. package/build-module/private-apis.js +4 -2
  377. package/build-module/private-apis.js.map +1 -1
  378. package/build-module/store/actions.js +147 -179
  379. package/build-module/store/actions.js.map +1 -1
  380. package/build-module/store/actions.native.js +1 -2
  381. package/build-module/store/actions.native.js.map +1 -1
  382. package/build-module/store/reducer.js +14 -44
  383. package/build-module/store/reducer.js.map +1 -1
  384. package/build-module/store/reducer.native.js +3 -12
  385. package/build-module/store/reducer.native.js.map +1 -1
  386. package/build-module/store/selectors.js +21 -54
  387. package/build-module/store/selectors.js.map +1 -1
  388. package/build-module/store/utils/notice-builder.js +3 -3
  389. package/build-module/store/utils/notice-builder.js.map +1 -1
  390. package/build-module/utils/media-upload/index.js +11 -15
  391. package/build-module/utils/media-upload/index.js.map +1 -1
  392. package/build-module/utils/terms.js +3 -6
  393. package/build-module/utils/terms.js.map +1 -1
  394. package/build-style/style-rtl.css +15 -1
  395. package/build-style/style.css +15 -1
  396. package/package.json +30 -31
  397. package/src/components/editor-help/test/index.native.js +3 -2
  398. package/src/components/entities-saved-states/hooks/use-is-dirty.js +87 -0
  399. package/src/components/entities-saved-states/index.js +25 -106
  400. package/src/components/entities-saved-states/test/use-is-dirty.js +94 -0
  401. package/src/components/index.js +2 -0
  402. package/src/components/post-publish-panel/maybe-upload-media.js +167 -0
  403. package/src/components/post-publish-panel/prepublish.js +2 -0
  404. package/src/components/post-publish-panel/style.scss +1 -1
  405. package/src/components/post-saved-state/index.js +6 -0
  406. package/src/components/post-sync-status/index.js +55 -0
  407. package/src/components/post-sync-status/style.scss +16 -0
  408. package/src/components/post-taxonomies/flat-term-selector.js +20 -30
  409. package/src/components/post-title/index.js +4 -1
  410. package/src/components/provider/index.js +1 -1
  411. package/src/components/provider/index.native.js +2 -9
  412. package/src/private-apis.js +3 -1
  413. package/src/style.scss +1 -0
  414. package/build/lockUnlock.js.map +0 -1
  415. package/build-module/lockUnlock.js.map +0 -1
  416. /package/src/{lockUnlock.js → lock-unlock.js} +0 -0
@@ -294,9 +294,9 @@ function getCurrentPostId(state) {
294
294
 
295
295
 
296
296
  function getCurrentPostRevisionsCount(state) {
297
- var _getCurrentPost$_link, _getCurrentPost$_link2, _getCurrentPost$_link3, _getCurrentPost$_link4;
297
+ var _getCurrentPost$_link;
298
298
 
299
- return (_getCurrentPost$_link = (_getCurrentPost$_link2 = getCurrentPost(state)._links) === null || _getCurrentPost$_link2 === void 0 ? void 0 : (_getCurrentPost$_link3 = _getCurrentPost$_link2['version-history']) === null || _getCurrentPost$_link3 === void 0 ? void 0 : (_getCurrentPost$_link4 = _getCurrentPost$_link3[0]) === null || _getCurrentPost$_link4 === void 0 ? void 0 : _getCurrentPost$_link4.count) !== null && _getCurrentPost$_link !== void 0 ? _getCurrentPost$_link : 0;
299
+ return (_getCurrentPost$_link = getCurrentPost(state)._links?.['version-history']?.[0]?.count) !== null && _getCurrentPost$_link !== void 0 ? _getCurrentPost$_link : 0;
300
300
  }
301
301
  /**
302
302
  * Returns the last revision ID of the post currently being edited,
@@ -309,9 +309,9 @@ function getCurrentPostRevisionsCount(state) {
309
309
 
310
310
 
311
311
  function getCurrentPostLastRevisionId(state) {
312
- var _getCurrentPost$_link5, _getCurrentPost$_link6, _getCurrentPost$_link7, _getCurrentPost$_link8;
312
+ var _getCurrentPost$_link2;
313
313
 
314
- return (_getCurrentPost$_link5 = (_getCurrentPost$_link6 = getCurrentPost(state)._links) === null || _getCurrentPost$_link6 === void 0 ? void 0 : (_getCurrentPost$_link7 = _getCurrentPost$_link6['predecessor-version']) === null || _getCurrentPost$_link7 === void 0 ? void 0 : (_getCurrentPost$_link8 = _getCurrentPost$_link7[0]) === null || _getCurrentPost$_link8 === void 0 ? void 0 : _getCurrentPost$_link8.id) !== null && _getCurrentPost$_link5 !== void 0 ? _getCurrentPost$_link5 : null;
314
+ return (_getCurrentPost$_link2 = getCurrentPost(state)._links?.['predecessor-version']?.[0]?.id) !== null && _getCurrentPost$_link2 !== void 0 ? _getCurrentPost$_link2 : null;
315
315
  }
316
316
  /**
317
317
  * Returns any post values which have been changed in the editor but not yet
@@ -430,15 +430,13 @@ function getEditedPostAttribute(state, attributeName) {
430
430
 
431
431
 
432
432
  const getAutosaveAttribute = (0, _data.createRegistrySelector)(select => (state, attributeName) => {
433
- var _select$getCurrentUse;
434
-
435
433
  if (!_constants.AUTOSAVE_PROPERTIES.includes(attributeName) && attributeName !== 'preview_link') {
436
434
  return;
437
435
  }
438
436
 
439
437
  const postType = getCurrentPostType(state);
440
438
  const postId = getCurrentPostId(state);
441
- const currentUserId = (_select$getCurrentUse = select(_coreData.store).getCurrentUser()) === null || _select$getCurrentUse === void 0 ? void 0 : _select$getCurrentUse.id;
439
+ const currentUserId = select(_coreData.store).getCurrentUser()?.id;
442
440
  const autosave = select(_coreData.store).getAutosave(postType, postId, currentUserId);
443
441
 
444
442
  if (autosave) {
@@ -612,8 +610,6 @@ function isEditedPostEmpty(state) {
612
610
 
613
611
 
614
612
  const isEditedPostAutosaveable = (0, _data.createRegistrySelector)(select => state => {
615
- var _select$getCurrentUse2;
616
-
617
613
  // A post must contain a title, an excerpt, or non-empty content to be valid for autosaving.
618
614
  if (!isEditedPostSaveable(state)) {
619
615
  return false;
@@ -627,7 +623,7 @@ const isEditedPostAutosaveable = (0, _data.createRegistrySelector)(select => sta
627
623
  const postType = getCurrentPostType(state);
628
624
  const postId = getCurrentPostId(state);
629
625
  const hasFetchedAutosave = select(_coreData.store).hasFetchedAutosaves(postType, postId);
630
- const currentUserId = (_select$getCurrentUse2 = select(_coreData.store).getCurrentUser()) === null || _select$getCurrentUse2 === void 0 ? void 0 : _select$getCurrentUse2.id; // Disable reason - this line causes the side-effect of fetching the autosave
626
+ const currentUserId = select(_coreData.store).getCurrentUser()?.id; // Disable reason - this line causes the side-effect of fetching the autosave
631
627
  // via a resolver, moving below the return would result in the autosave never
632
628
  // being fetched.
633
629
  // eslint-disable-next-line @wordpress/no-unused-vars-before-return
@@ -787,13 +783,11 @@ const didPostSaveRequestFail = (0, _data.createRegistrySelector)(select => state
787
783
  exports.didPostSaveRequestFail = didPostSaveRequestFail;
788
784
 
789
785
  function isAutosavingPost(state) {
790
- var _state$saving$options;
791
-
792
786
  if (!isSavingPost(state)) {
793
787
  return false;
794
788
  }
795
789
 
796
- return Boolean((_state$saving$options = state.saving.options) === null || _state$saving$options === void 0 ? void 0 : _state$saving$options.isAutosave);
790
+ return Boolean(state.saving.options?.isAutosave);
797
791
  }
798
792
  /**
799
793
  * Returns true if the post is being previewed, or false otherwise.
@@ -805,13 +799,11 @@ function isAutosavingPost(state) {
805
799
 
806
800
 
807
801
  function isPreviewingPost(state) {
808
- var _state$saving$options2;
809
-
810
802
  if (!isSavingPost(state)) {
811
803
  return false;
812
804
  }
813
805
 
814
- return Boolean((_state$saving$options2 = state.saving.options) === null || _state$saving$options2 === void 0 ? void 0 : _state$saving$options2.isPreview);
806
+ return Boolean(state.saving.options?.isPreview);
815
807
  }
816
808
  /**
817
809
  * Returns the post preview link
@@ -874,9 +866,7 @@ function getSuggestedPostFormat(state) {
874
866
  name = blocks[0].name; // Check for core/embed `video` and `audio` eligible suggestions.
875
867
 
876
868
  if (name === 'core/embed') {
877
- var _blocks$0$attributes;
878
-
879
- const provider = (_blocks$0$attributes = blocks[0].attributes) === null || _blocks$0$attributes === void 0 ? void 0 : _blocks$0$attributes.providerNameSlug;
869
+ const provider = blocks[0].attributes?.providerNameSlug;
880
870
 
881
871
  if (['youtube', 'vimeo'].includes(provider)) {
882
872
  name = 'core/video';
@@ -1116,9 +1106,7 @@ function getActivePostLock(state) {
1116
1106
 
1117
1107
 
1118
1108
  function canUserUseUnfilteredHTML(state) {
1119
- var _getCurrentPost$_link9;
1120
-
1121
- return Boolean((_getCurrentPost$_link9 = getCurrentPost(state)._links) === null || _getCurrentPost$_link9 === void 0 ? void 0 : _getCurrentPost$_link9.hasOwnProperty('wp:action-unfiltered-html'));
1109
+ return Boolean(getCurrentPost(state)._links?.hasOwnProperty('wp:action-unfiltered-html'));
1122
1110
  }
1123
1111
  /**
1124
1112
  * Returns whether the pre-publish panel should be shown
@@ -1163,13 +1151,11 @@ function getEditorBlocks(state) {
1163
1151
 
1164
1152
 
1165
1153
  function getEditorSelectionStart(state) {
1166
- var _getEditedPostAttribu;
1167
-
1168
1154
  (0, _deprecated.default)("select('core/editor').getEditorSelectionStart", {
1169
1155
  since: '5.8',
1170
1156
  alternative: "select('core/editor').getEditorSelection"
1171
1157
  });
1172
- return (_getEditedPostAttribu = getEditedPostAttribute(state, 'selection')) === null || _getEditedPostAttribu === void 0 ? void 0 : _getEditedPostAttribu.selectionStart;
1158
+ return getEditedPostAttribute(state, 'selection')?.selectionStart;
1173
1159
  }
1174
1160
  /**
1175
1161
  * Returns the current selection end.
@@ -1182,13 +1168,11 @@ function getEditorSelectionStart(state) {
1182
1168
 
1183
1169
 
1184
1170
  function getEditorSelectionEnd(state) {
1185
- var _getEditedPostAttribu2;
1186
-
1187
1171
  (0, _deprecated.default)("select('core/editor').getEditorSelectionStart", {
1188
1172
  since: '5.8',
1189
1173
  alternative: "select('core/editor').getEditorSelection"
1190
1174
  });
1191
- return (_getEditedPostAttribu2 = getEditedPostAttribute(state, 'selection')) === null || _getEditedPostAttribu2 === void 0 ? void 0 : _getEditedPostAttribu2.selectionEnd;
1175
+ return getEditedPostAttribute(state, 'selection')?.selectionEnd;
1192
1176
  }
1193
1177
  /**
1194
1178
  * Returns the current selection.
@@ -1260,17 +1244,12 @@ function inSomeHistory() {
1260
1244
  }
1261
1245
 
1262
1246
  function getBlockEditorSelector(name) {
1263
- return (0, _data.createRegistrySelector)(select => function (state) {
1247
+ return (0, _data.createRegistrySelector)(select => (state, ...args) => {
1264
1248
  (0, _deprecated.default)("`wp.data.select( 'core/editor' )." + name + '`', {
1265
1249
  since: '5.3',
1266
1250
  alternative: "`wp.data.select( 'core/block-editor' )." + name + '`',
1267
1251
  version: '6.2'
1268
1252
  });
1269
-
1270
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1271
- args[_key - 1] = arguments[_key];
1272
- }
1273
-
1274
1253
  return select(_blockEditor.store)[name](...args);
1275
1254
  });
1276
1255
  }
@@ -1591,9 +1570,7 @@ const getBlockListSettings = getBlockEditorSelector('getBlockListSettings');
1591
1570
  exports.getBlockListSettings = getBlockListSettings;
1592
1571
 
1593
1572
  function __experimentalGetDefaultTemplateTypes(state) {
1594
- var _getEditorSettings;
1595
-
1596
- return (_getEditorSettings = getEditorSettings(state)) === null || _getEditorSettings === void 0 ? void 0 : _getEditorSettings.defaultTemplateTypes;
1573
+ return getEditorSettings(state)?.defaultTemplateTypes;
1597
1574
  }
1598
1575
  /**
1599
1576
  * Returns the default template part areas.
@@ -1605,19 +1582,13 @@ function __experimentalGetDefaultTemplateTypes(state) {
1605
1582
 
1606
1583
 
1607
1584
  const __experimentalGetDefaultTemplatePartAreas = (0, _rememo.default)(state => {
1608
- var _getEditorSettings2;
1609
-
1610
- const areas = ((_getEditorSettings2 = getEditorSettings(state)) === null || _getEditorSettings2 === void 0 ? void 0 : _getEditorSettings2.defaultTemplatePartAreas) || [];
1611
- return areas === null || areas === void 0 ? void 0 : areas.map(item => {
1585
+ const areas = getEditorSettings(state)?.defaultTemplatePartAreas || [];
1586
+ return areas?.map(item => {
1612
1587
  return { ...item,
1613
1588
  icon: (0, _getTemplatePartIcon.getTemplatePartIcon)(item.icon)
1614
1589
  };
1615
1590
  });
1616
- }, state => {
1617
- var _getEditorSettings3;
1618
-
1619
- return [(_getEditorSettings3 = getEditorSettings(state)) === null || _getEditorSettings3 === void 0 ? void 0 : _getEditorSettings3.defaultTemplatePartAreas];
1620
- });
1591
+ }, state => [getEditorSettings(state)?.defaultTemplatePartAreas]);
1621
1592
  /**
1622
1593
  * Returns a default template type searched by slug.
1623
1594
  *
@@ -1654,8 +1625,6 @@ const __experimentalGetDefaultTemplateType = (0, _rememo.default)((state, slug)
1654
1625
  exports.__experimentalGetDefaultTemplateType = __experimentalGetDefaultTemplateType;
1655
1626
 
1656
1627
  function __experimentalGetTemplateInfo(state, template) {
1657
- var _experimentalGetDefa;
1658
-
1659
1628
  if (!template) {
1660
1629
  return EMPTY_OBJECT;
1661
1630
  }
@@ -1672,9 +1641,11 @@ function __experimentalGetTemplateInfo(state, template) {
1672
1641
  description: defaultDescription
1673
1642
  } = __experimentalGetDefaultTemplateType(state, slug);
1674
1643
 
1675
- const templateTitle = typeof title === 'string' ? title : title === null || title === void 0 ? void 0 : title.rendered;
1676
- const templateDescription = typeof description === 'string' ? description : description === null || description === void 0 ? void 0 : description.raw;
1677
- const templateIcon = ((_experimentalGetDefa = __experimentalGetDefaultTemplatePartAreas(state).find(item => area === item.area)) === null || _experimentalGetDefa === void 0 ? void 0 : _experimentalGetDefa.icon) || _icons.layout;
1644
+ const templateTitle = typeof title === 'string' ? title : title?.rendered;
1645
+ const templateDescription = typeof description === 'string' ? description : description?.raw;
1646
+
1647
+ const templateIcon = __experimentalGetDefaultTemplatePartAreas(state).find(item => area === item.area)?.icon || _icons.layout;
1648
+
1678
1649
  return {
1679
1650
  title: templateTitle && templateTitle !== slug ? templateTitle : defaultTitle || slug,
1680
1651
  description: templateDescription || defaultDescription,
@@ -1691,13 +1662,11 @@ function __experimentalGetTemplateInfo(state, template) {
1691
1662
 
1692
1663
 
1693
1664
  const getPostTypeLabel = (0, _data.createRegistrySelector)(select => state => {
1694
- var _postType$labels;
1695
-
1696
1665
  const currentPostType = getCurrentPostType(state);
1697
1666
  const postType = select(_coreData.store).getPostType(currentPostType); // Disable reason: Post type labels object is shaped like this.
1698
1667
  // eslint-disable-next-line camelcase
1699
1668
 
1700
- return postType === null || postType === void 0 ? void 0 : (_postType$labels = postType.labels) === null || _postType$labels === void 0 ? void 0 : _postType$labels.singular_name;
1669
+ return postType?.labels?.singular_name;
1701
1670
  });
1702
1671
  exports.getPostTypeLabel = getPostTypeLabel;
1703
1672
  //# sourceMappingURL=selectors.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/editor/src/store/selectors.js"],"names":["EMPTY_OBJECT","EMPTY_ARRAY","hasEditorUndo","select","coreStore","hasUndo","hasEditorRedo","hasRedo","isEditedPostNew","state","getCurrentPost","status","hasChangedContent","edits","getPostEdits","isEditedPostDirty","postType","getCurrentPostType","postId","getCurrentPostId","hasEditsForEntityRecord","hasNonPostEntityChanges","dirtyEntityRecords","__experimentalGetDirtyEntityRecords","type","id","some","entityRecord","kind","name","key","isCleanNewPost","post","getRawEntityRecord","getCurrentPostRevisionsCount","_links","count","getCurrentPostLastRevisionId","getEntityRecordEdits","getCurrentPostAttribute","attributeName","hasOwnProperty","getNestedEditedPostProperty","getEditedPostAttribute","getEditedPostContent","EDIT_MERGE_PROPERTIES","has","getAutosaveAttribute","AUTOSAVE_PROPERTIES","includes","currentUserId","getCurrentUser","autosave","getAutosave","getEditedPostVisibility","password","isCurrentPostPending","isCurrentPostPublished","currentPost","indexOf","Date","Number","date","ONE_MINUTE_IN_MS","isCurrentPostScheduled","isEditedPostPublishable","isEditedPostSaveable","isSavingPost","isEditedPostEmpty","Platform","OS","blocks","getEditorBlocks","length","blockName","isEditedPostAutosaveable","isPostAutosavingLocked","hasFetchedAutosave","hasFetchedAutosaves","field","isEditedPostBeingScheduled","checkedDate","isEditedPostDateFloating","modified","isDeletingPost","deleting","pending","isSavingEntityRecord","isSavingNonPostEntityChanges","entitiesBeingSaved","__experimentalGetEntitiesBeingSaved","didPostSaveRequestSucceed","getLastEntitySaveError","didPostSaveRequestFail","isAutosavingPost","Boolean","saving","options","isAutosave","isPreviewingPost","isPreview","getEditedPostPreviewLink","previewLink","preview","featuredImageId","_thumbnail_id","getSuggestedPostFormat","provider","attributes","providerNameSlug","record","getEditedEntityRecord","content","isPublishingPost","isPermalinkEditable","permalinkTemplate","PERMALINK_POSTNAME_REGEX","test","getPermalink","permalinkParts","getPermalinkParts","prefix","postName","suffix","getEditedPostSlug","split","isPostLocked","postLock","isLocked","isPostSavingLocked","Object","keys","postSavingLock","postAutosavingLock","isPostLockTakeover","isTakeover","getPostLockUser","user","getActivePostLock","activePostLock","canUserUseUnfilteredHTML","isPublishSidebarEnabled","preferencesStore","get","getEditorSelectionStart","since","alternative","selectionStart","getEditorSelectionEnd","selectionEnd","getEditorSelection","__unstableIsEditorReady","isReady","getEditorSettings","editorSettings","getStateBeforeOptimisticTransaction","hint","inSomeHistory","getBlockEditorSelector","version","args","blockEditorStore","getBlockName","isBlockValid","getBlockAttributes","getBlock","getBlocks","getClientIdsOfDescendants","getClientIdsWithDescendants","getGlobalBlockCount","getBlocksByClientId","getBlockCount","getBlockSelectionStart","getBlockSelectionEnd","getSelectedBlockCount","hasSelectedBlock","getSelectedBlockClientId","getSelectedBlock","getBlockRootClientId","getBlockHierarchyRootClientId","getAdjacentBlockClientId","getPreviousBlockClientId","getNextBlockClientId","getSelectedBlocksInitialCaretPosition","getMultiSelectedBlockClientIds","getMultiSelectedBlocks","getFirstMultiSelectedBlockClientId","getLastMultiSelectedBlockClientId","isFirstMultiSelectedBlock","isBlockMultiSelected","isAncestorMultiSelected","getMultiSelectedBlocksStartClientId","getMultiSelectedBlocksEndClientId","getBlockOrder","getBlockIndex","isBlockSelected","hasSelectedInnerBlock","isBlockWithinSelection","hasMultiSelection","isMultiSelecting","isSelectionEnabled","getBlockMode","isTyping","isCaretWithinFormattedText","getBlockInsertionPoint","isBlockInsertionPointVisible","isValidTemplate","getTemplate","getTemplateLock","canInsertBlockType","getInserterItems","hasInserterItems","getBlockListSettings","__experimentalGetDefaultTemplateTypes","defaultTemplateTypes","__experimentalGetDefaultTemplatePartAreas","areas","defaultTemplatePartAreas","map","item","icon","__experimentalGetDefaultTemplateType","slug","templateTypes","values","find","__experimentalGetTemplateInfo","template","description","title","area","defaultTitle","defaultDescription","templateTitle","rendered","templateDescription","raw","templateIcon","layout","getPostTypeLabel","currentPostType","getPostType","labels","singular_name"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetFreeformContentHandlerName,\n\tgetDefaultBlockName,\n\t__unstableSerializeAndClean,\n} from '@wordpress/blocks';\nimport { isInTheFuture, getDate } from '@wordpress/date';\nimport { addQueryArgs, cleanForSlug } from '@wordpress/url';\nimport { createRegistrySelector } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport { Platform } from '@wordpress/element';\nimport { layout } from '@wordpress/icons';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as preferencesStore } from '@wordpress/preferences';\n\n/**\n * Internal dependencies\n */\nimport {\n\tEDIT_MERGE_PROPERTIES,\n\tPERMALINK_POSTNAME_REGEX,\n\tONE_MINUTE_IN_MS,\n\tAUTOSAVE_PROPERTIES,\n} from './constants';\nimport { getPostRawValue } from './reducer';\nimport { getTemplatePartIcon } from '../utils/get-template-part-icon';\n\n/**\n * Shared reference to an empty object for cases where it is important to avoid\n * returning a new object reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n */\nconst EMPTY_OBJECT = {};\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Returns true if any past editor history snapshots exist, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether undo history exists.\n */\nexport const hasEditorUndo = createRegistrySelector( ( select ) => () => {\n\treturn select( coreStore ).hasUndo();\n} );\n\n/**\n * Returns true if any future editor history snapshots exist, or false\n * otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether redo history exists.\n */\nexport const hasEditorRedo = createRegistrySelector( ( select ) => () => {\n\treturn select( coreStore ).hasRedo();\n} );\n\n/**\n * Returns true if the currently edited post is yet to be saved, or false if\n * the post has been saved.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post is new.\n */\nexport function isEditedPostNew( state ) {\n\treturn getCurrentPost( state ).status === 'auto-draft';\n}\n\n/**\n * Returns true if content includes unsaved changes, or false otherwise.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether content includes unsaved changes.\n */\nexport function hasChangedContent( state ) {\n\tconst edits = getPostEdits( state );\n\treturn 'content' in edits;\n}\n\n/**\n * Returns true if there are unsaved values for the current edit session, or\n * false if the editing state matches the saved or new post.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether unsaved values exist.\n */\nexport const isEditedPostDirty = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\t// Edits should contain only fields which differ from the saved post (reset\n\t\t// at initial load and save complete). Thus, a non-empty edits state can be\n\t\t// inferred to contain unsaved values.\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst postId = getCurrentPostId( state );\n\t\tif (\n\t\t\tselect( coreStore ).hasEditsForEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\tpostId\n\t\t\t)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n);\n\n/**\n * Returns true if there are unsaved edits for entities other than\n * the editor's post, and false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether there are edits or not.\n */\nexport const hasNonPostEntityChanges = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst dirtyEntityRecords =\n\t\t\tselect( coreStore ).__experimentalGetDirtyEntityRecords();\n\t\tconst { type, id } = getCurrentPost( state );\n\t\treturn dirtyEntityRecords.some(\n\t\t\t( entityRecord ) =>\n\t\t\t\tentityRecord.kind !== 'postType' ||\n\t\t\t\tentityRecord.name !== type ||\n\t\t\t\tentityRecord.key !== id\n\t\t);\n\t}\n);\n\n/**\n * Returns true if there are no unsaved values for the current edit session and\n * if the currently edited post is new (has never been saved before).\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether new post and unsaved values exist.\n */\nexport function isCleanNewPost( state ) {\n\treturn ! isEditedPostDirty( state ) && isEditedPostNew( state );\n}\n\n/**\n * Returns the post currently being edited in its last known saved state, not\n * including unsaved edits. Returns an object containing relevant default post\n * values if the post has not yet been saved.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} Post object.\n */\nexport const getCurrentPost = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst postId = getCurrentPostId( state );\n\t\tconst postType = getCurrentPostType( state );\n\n\t\tconst post = select( coreStore ).getRawEntityRecord(\n\t\t\t'postType',\n\t\t\tpostType,\n\t\t\tpostId\n\t\t);\n\t\tif ( post ) {\n\t\t\treturn post;\n\t\t}\n\n\t\t// This exists for compatibility with the previous selector behavior\n\t\t// which would guarantee an object return based on the editor reducer's\n\t\t// default empty object state.\n\t\treturn EMPTY_OBJECT;\n\t}\n);\n\n/**\n * Returns the post type of the post currently being edited.\n *\n * @param {Object} state Global application state.\n *\n * @return {string} Post type.\n */\nexport function getCurrentPostType( state ) {\n\treturn state.postType;\n}\n\n/**\n * Returns the ID of the post currently being edited, or null if the post has\n * not yet been saved.\n *\n * @param {Object} state Global application state.\n *\n * @return {?number} ID of current post.\n */\nexport function getCurrentPostId( state ) {\n\treturn state.postId;\n}\n\n/**\n * Returns the number of revisions of the post currently being edited.\n *\n * @param {Object} state Global application state.\n *\n * @return {number} Number of revisions.\n */\nexport function getCurrentPostRevisionsCount( state ) {\n\treturn (\n\t\tgetCurrentPost( state )._links?.[ 'version-history' ]?.[ 0 ]?.count ?? 0\n\t);\n}\n\n/**\n * Returns the last revision ID of the post currently being edited,\n * or null if the post has no revisions.\n *\n * @param {Object} state Global application state.\n *\n * @return {?number} ID of the last revision.\n */\nexport function getCurrentPostLastRevisionId( state ) {\n\treturn (\n\t\tgetCurrentPost( state )._links?.[ 'predecessor-version' ]?.[ 0 ]?.id ??\n\t\tnull\n\t);\n}\n\n/**\n * Returns any post values which have been changed in the editor but not yet\n * been saved.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} Object of key value pairs comprising unsaved edits.\n */\nexport const getPostEdits = createRegistrySelector( ( select ) => ( state ) => {\n\tconst postType = getCurrentPostType( state );\n\tconst postId = getCurrentPostId( state );\n\treturn (\n\t\tselect( coreStore ).getEntityRecordEdits(\n\t\t\t'postType',\n\t\t\tpostType,\n\t\t\tpostId\n\t\t) || EMPTY_OBJECT\n\t);\n} );\n\n/**\n * Returns an attribute value of the saved post.\n *\n * @param {Object} state Global application state.\n * @param {string} attributeName Post attribute name.\n *\n * @return {*} Post attribute value.\n */\nexport function getCurrentPostAttribute( state, attributeName ) {\n\tswitch ( attributeName ) {\n\t\tcase 'type':\n\t\t\treturn getCurrentPostType( state );\n\n\t\tcase 'id':\n\t\t\treturn getCurrentPostId( state );\n\n\t\tdefault:\n\t\t\tconst post = getCurrentPost( state );\n\t\t\tif ( ! post.hasOwnProperty( attributeName ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn getPostRawValue( post[ attributeName ] );\n\t}\n}\n\n/**\n * Returns a single attribute of the post being edited, preferring the unsaved\n * edit if one exists, but merging with the attribute value for the last known\n * saved state of the post (this is needed for some nested attributes like meta).\n *\n * @param {Object} state Global application state.\n * @param {string} attributeName Post attribute name.\n *\n * @return {*} Post attribute value.\n */\nconst getNestedEditedPostProperty = ( state, attributeName ) => {\n\tconst edits = getPostEdits( state );\n\tif ( ! edits.hasOwnProperty( attributeName ) ) {\n\t\treturn getCurrentPostAttribute( state, attributeName );\n\t}\n\n\treturn {\n\t\t...getCurrentPostAttribute( state, attributeName ),\n\t\t...edits[ attributeName ],\n\t};\n};\n\n/**\n * Returns a single attribute of the post being edited, preferring the unsaved\n * edit if one exists, but falling back to the attribute for the last known\n * saved state of the post.\n *\n * @param {Object} state Global application state.\n * @param {string} attributeName Post attribute name.\n *\n * @return {*} Post attribute value.\n */\nexport function getEditedPostAttribute( state, attributeName ) {\n\t// Special cases.\n\tswitch ( attributeName ) {\n\t\tcase 'content':\n\t\t\treturn getEditedPostContent( state );\n\t}\n\n\t// Fall back to saved post value if not edited.\n\tconst edits = getPostEdits( state );\n\tif ( ! edits.hasOwnProperty( attributeName ) ) {\n\t\treturn getCurrentPostAttribute( state, attributeName );\n\t}\n\n\t// Merge properties are objects which contain only the patch edit in state,\n\t// and thus must be merged with the current post attribute.\n\tif ( EDIT_MERGE_PROPERTIES.has( attributeName ) ) {\n\t\treturn getNestedEditedPostProperty( state, attributeName );\n\t}\n\n\treturn edits[ attributeName ];\n}\n\n/**\n * Returns an attribute value of the current autosave revision for a post, or\n * null if there is no autosave for the post.\n *\n * @deprecated since 5.6. Callers should use the `getAutosave( postType, postId, userId )` selector\n * \t\t\t from the '@wordpress/core-data' package and access properties on the returned\n * \t\t\t autosave object using getPostRawValue.\n *\n * @param {Object} state Global application state.\n * @param {string} attributeName Autosave attribute name.\n *\n * @return {*} Autosave attribute value.\n */\nexport const getAutosaveAttribute = createRegistrySelector(\n\t( select ) => ( state, attributeName ) => {\n\t\tif (\n\t\t\t! AUTOSAVE_PROPERTIES.includes( attributeName ) &&\n\t\t\tattributeName !== 'preview_link'\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst postId = getCurrentPostId( state );\n\t\tconst currentUserId = select( coreStore ).getCurrentUser()?.id;\n\t\tconst autosave = select( coreStore ).getAutosave(\n\t\t\tpostType,\n\t\t\tpostId,\n\t\t\tcurrentUserId\n\t\t);\n\n\t\tif ( autosave ) {\n\t\t\treturn getPostRawValue( autosave[ attributeName ] );\n\t\t}\n\t}\n);\n\n/**\n * Returns the current visibility of the post being edited, preferring the\n * unsaved value if different than the saved post. The return value is one of\n * \"private\", \"password\", or \"public\".\n *\n * @param {Object} state Global application state.\n *\n * @return {string} Post visibility.\n */\nexport function getEditedPostVisibility( state ) {\n\tconst status = getEditedPostAttribute( state, 'status' );\n\tif ( status === 'private' ) {\n\t\treturn 'private';\n\t}\n\n\tconst password = getEditedPostAttribute( state, 'password' );\n\tif ( password ) {\n\t\treturn 'password';\n\t}\n\n\treturn 'public';\n}\n\n/**\n * Returns true if post is pending review.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether current post is pending review.\n */\nexport function isCurrentPostPending( state ) {\n\treturn getCurrentPost( state ).status === 'pending';\n}\n\n/**\n * Return true if the current post has already been published.\n *\n * @param {Object} state Global application state.\n * @param {Object?} currentPost Explicit current post for bypassing registry selector.\n *\n * @return {boolean} Whether the post has been published.\n */\nexport function isCurrentPostPublished( state, currentPost ) {\n\tconst post = currentPost || getCurrentPost( state );\n\n\treturn (\n\t\t[ 'publish', 'private' ].indexOf( post.status ) !== -1 ||\n\t\t( post.status === 'future' &&\n\t\t\t! isInTheFuture(\n\t\t\t\tnew Date( Number( getDate( post.date ) ) - ONE_MINUTE_IN_MS )\n\t\t\t) )\n\t);\n}\n\n/**\n * Returns true if post is already scheduled.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether current post is scheduled to be posted.\n */\nexport function isCurrentPostScheduled( state ) {\n\treturn (\n\t\tgetCurrentPost( state ).status === 'future' &&\n\t\t! isCurrentPostPublished( state )\n\t);\n}\n\n/**\n * Return true if the post being edited can be published.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post can been published.\n */\nexport function isEditedPostPublishable( state ) {\n\tconst post = getCurrentPost( state );\n\n\t// TODO: Post being publishable should be superset of condition of post\n\t// being saveable. Currently this restriction is imposed at UI.\n\t//\n\t// See: <PostPublishButton /> (`isButtonEnabled` assigned by `isSaveable`).\n\n\treturn (\n\t\tisEditedPostDirty( state ) ||\n\t\t[ 'publish', 'private', 'future' ].indexOf( post.status ) === -1\n\t);\n}\n\n/**\n * Returns true if the post can be saved, or false otherwise. A post must\n * contain a title, an excerpt, or non-empty content to be valid for save.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post can be saved.\n */\nexport function isEditedPostSaveable( state ) {\n\tif ( isSavingPost( state ) ) {\n\t\treturn false;\n\t}\n\n\t// TODO: Post should not be saveable if not dirty. Cannot be added here at\n\t// this time since posts where meta boxes are present can be saved even if\n\t// the post is not dirty. Currently this restriction is imposed at UI, but\n\t// should be moved here.\n\t//\n\t// See: `isEditedPostPublishable` (includes `isEditedPostDirty` condition)\n\t// See: <PostSavedState /> (`forceIsDirty` prop)\n\t// See: <PostPublishButton /> (`forceIsDirty` prop)\n\t// See: https://github.com/WordPress/gutenberg/pull/4184.\n\n\treturn (\n\t\t!! getEditedPostAttribute( state, 'title' ) ||\n\t\t!! getEditedPostAttribute( state, 'excerpt' ) ||\n\t\t! isEditedPostEmpty( state ) ||\n\t\tPlatform.OS === 'native'\n\t);\n}\n\n/**\n * Returns true if the edited post has content. A post has content if it has at\n * least one saveable block or otherwise has a non-empty content property\n * assigned.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether post has content.\n */\nexport function isEditedPostEmpty( state ) {\n\t// While the condition of truthy content string is sufficient to determine\n\t// emptiness, testing saveable blocks length is a trivial operation. Since\n\t// this function can be called frequently, optimize for the fast case as a\n\t// condition of the mere existence of blocks. Note that the value of edited\n\t// content takes precedent over block content, and must fall through to the\n\t// default logic.\n\tconst blocks = getEditorBlocks( state );\n\n\tif ( blocks.length ) {\n\t\t// Pierce the abstraction of the serializer in knowing that blocks are\n\t\t// joined with newlines such that even if every individual block\n\t\t// produces an empty save result, the serialized content is non-empty.\n\t\tif ( blocks.length > 1 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// There are two conditions under which the optimization cannot be\n\t\t// assumed, and a fallthrough to getEditedPostContent must occur:\n\t\t//\n\t\t// 1. getBlocksForSerialization has special treatment in omitting a\n\t\t// single unmodified default block.\n\t\t// 2. Comment delimiters are omitted for a freeform or unregistered\n\t\t// block in its serialization. The freeform block specifically may\n\t\t// produce an empty string in its saved output.\n\t\t//\n\t\t// For all other content, the single block is assumed to make a post\n\t\t// non-empty, if only by virtue of its own comment delimiters.\n\t\tconst blockName = blocks[ 0 ].name;\n\t\tif (\n\t\t\tblockName !== getDefaultBlockName() &&\n\t\t\tblockName !== getFreeformContentHandlerName()\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn ! getEditedPostContent( state );\n}\n\n/**\n * Returns true if the post can be autosaved, or false otherwise.\n *\n * @param {Object} state Global application state.\n * @param {Object} autosave A raw autosave object from the REST API.\n *\n * @return {boolean} Whether the post can be autosaved.\n */\nexport const isEditedPostAutosaveable = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\t// A post must contain a title, an excerpt, or non-empty content to be valid for autosaving.\n\t\tif ( ! isEditedPostSaveable( state ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// A post is not autosavable when there is a post autosave lock.\n\t\tif ( isPostAutosavingLocked( state ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst postId = getCurrentPostId( state );\n\t\tconst hasFetchedAutosave = select( coreStore ).hasFetchedAutosaves(\n\t\t\tpostType,\n\t\t\tpostId\n\t\t);\n\t\tconst currentUserId = select( coreStore ).getCurrentUser()?.id;\n\n\t\t// Disable reason - this line causes the side-effect of fetching the autosave\n\t\t// via a resolver, moving below the return would result in the autosave never\n\t\t// being fetched.\n\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\tconst autosave = select( coreStore ).getAutosave(\n\t\t\tpostType,\n\t\t\tpostId,\n\t\t\tcurrentUserId\n\t\t);\n\n\t\t// If any existing autosaves have not yet been fetched, this function is\n\t\t// unable to determine if the post is autosaveable, so return false.\n\t\tif ( ! hasFetchedAutosave ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If we don't already have an autosave, the post is autosaveable.\n\t\tif ( ! autosave ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// To avoid an expensive content serialization, use the content dirtiness\n\t\t// flag in place of content field comparison against the known autosave.\n\t\t// This is not strictly accurate, and relies on a tolerance toward autosave\n\t\t// request failures for unnecessary saves.\n\t\tif ( hasChangedContent( state ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If the title or excerpt has changed, the post is autosaveable.\n\t\treturn [ 'title', 'excerpt' ].some(\n\t\t\t( field ) =>\n\t\t\t\tgetPostRawValue( autosave[ field ] ) !==\n\t\t\t\tgetEditedPostAttribute( state, field )\n\t\t);\n\t}\n);\n\n/**\n * Return true if the post being edited is being scheduled. Preferring the\n * unsaved status values.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post has been published.\n */\nexport function isEditedPostBeingScheduled( state ) {\n\tconst date = getEditedPostAttribute( state, 'date' );\n\t// Offset the date by one minute (network latency).\n\tconst checkedDate = new Date(\n\t\tNumber( getDate( date ) ) - ONE_MINUTE_IN_MS\n\t);\n\n\treturn isInTheFuture( checkedDate );\n}\n\n/**\n * Returns whether the current post should be considered to have a \"floating\"\n * date (i.e. that it would publish \"Immediately\" rather than at a set time).\n *\n * Unlike in the PHP backend, the REST API returns a full date string for posts\n * where the 0000-00-00T00:00:00 placeholder is present in the database. To\n * infer that a post is set to publish \"Immediately\" we check whether the date\n * and modified date are the same.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether the edited post has a floating date value.\n */\nexport function isEditedPostDateFloating( state ) {\n\tconst date = getEditedPostAttribute( state, 'date' );\n\tconst modified = getEditedPostAttribute( state, 'modified' );\n\n\t// This should be the status of the persisted post\n\t// It shouldn't use the \"edited\" status otherwise it breaks the\n\t// inferred post data floating status\n\t// See https://github.com/WordPress/gutenberg/issues/28083.\n\tconst status = getCurrentPost( state ).status;\n\tif (\n\t\tstatus === 'draft' ||\n\t\tstatus === 'auto-draft' ||\n\t\tstatus === 'pending'\n\t) {\n\t\treturn date === modified || date === null;\n\t}\n\treturn false;\n}\n\n/**\n * Returns true if the post is currently being deleted, or false otherwise.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether post is being deleted.\n */\nexport function isDeletingPost( state ) {\n\treturn !! state.deleting.pending;\n}\n\n/**\n * Returns true if the post is currently being saved, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether post is being saved.\n */\nexport const isSavingPost = createRegistrySelector( ( select ) => ( state ) => {\n\tconst postType = getCurrentPostType( state );\n\tconst postId = getCurrentPostId( state );\n\treturn select( coreStore ).isSavingEntityRecord(\n\t\t'postType',\n\t\tpostType,\n\t\tpostId\n\t);\n} );\n\n/**\n * Returns true if non-post entities are currently being saved, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether non-post entities are being saved.\n */\nexport const isSavingNonPostEntityChanges = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst entitiesBeingSaved =\n\t\t\tselect( coreStore ).__experimentalGetEntitiesBeingSaved();\n\t\tconst { type, id } = getCurrentPost( state );\n\t\treturn entitiesBeingSaved.some(\n\t\t\t( entityRecord ) =>\n\t\t\t\tentityRecord.kind !== 'postType' ||\n\t\t\t\tentityRecord.name !== type ||\n\t\t\t\tentityRecord.key !== id\n\t\t);\n\t}\n);\n\n/**\n * Returns true if a previous post save was attempted successfully, or false\n * otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post was saved successfully.\n */\nexport const didPostSaveRequestSucceed = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst postId = getCurrentPostId( state );\n\t\treturn ! select( coreStore ).getLastEntitySaveError(\n\t\t\t'postType',\n\t\t\tpostType,\n\t\t\tpostId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if a previous post save was attempted but failed, or false\n * otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post save failed.\n */\nexport const didPostSaveRequestFail = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst postId = getCurrentPostId( state );\n\t\treturn !! select( coreStore ).getLastEntitySaveError(\n\t\t\t'postType',\n\t\t\tpostType,\n\t\t\tpostId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if the post is autosaving, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post is autosaving.\n */\nexport function isAutosavingPost( state ) {\n\tif ( ! isSavingPost( state ) ) {\n\t\treturn false;\n\t}\n\treturn Boolean( state.saving.options?.isAutosave );\n}\n\n/**\n * Returns true if the post is being previewed, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post is being previewed.\n */\nexport function isPreviewingPost( state ) {\n\tif ( ! isSavingPost( state ) ) {\n\t\treturn false;\n\t}\n\treturn Boolean( state.saving.options?.isPreview );\n}\n\n/**\n * Returns the post preview link\n *\n * @param {Object} state Global application state.\n *\n * @return {string | undefined} Preview Link.\n */\nexport function getEditedPostPreviewLink( state ) {\n\tif ( state.saving.pending || isSavingPost( state ) ) {\n\t\treturn;\n\t}\n\n\tlet previewLink = getAutosaveAttribute( state, 'preview_link' );\n\t// Fix for issue: https://github.com/WordPress/gutenberg/issues/33616\n\t// If the post is draft, ignore the preview link from the autosave record,\n\t// because the preview could be a stale autosave if the post was switched from\n\t// published to draft.\n\t// See: https://github.com/WordPress/gutenberg/pull/37952.\n\tif ( ! previewLink || 'draft' === getCurrentPost( state ).status ) {\n\t\tpreviewLink = getEditedPostAttribute( state, 'link' );\n\t\tif ( previewLink ) {\n\t\t\tpreviewLink = addQueryArgs( previewLink, { preview: true } );\n\t\t}\n\t}\n\tconst featuredImageId = getEditedPostAttribute( state, 'featured_media' );\n\n\tif ( previewLink && featuredImageId ) {\n\t\treturn addQueryArgs( previewLink, { _thumbnail_id: featuredImageId } );\n\t}\n\n\treturn previewLink;\n}\n\n/**\n * Returns a suggested post format for the current post, inferred only if there\n * is a single block within the post and it is of a type known to match a\n * default post format. Returns null if the format cannot be determined.\n *\n * @param {Object} state Global application state.\n *\n * @return {?string} Suggested post format.\n */\nexport function getSuggestedPostFormat( state ) {\n\tconst blocks = getEditorBlocks( state );\n\n\tif ( blocks.length > 2 ) return null;\n\n\tlet name;\n\t// If there is only one block in the content of the post grab its name\n\t// so we can derive a suitable post format from it.\n\tif ( blocks.length === 1 ) {\n\t\tname = blocks[ 0 ].name;\n\t\t// Check for core/embed `video` and `audio` eligible suggestions.\n\t\tif ( name === 'core/embed' ) {\n\t\t\tconst provider = blocks[ 0 ].attributes?.providerNameSlug;\n\t\t\tif ( [ 'youtube', 'vimeo' ].includes( provider ) ) {\n\t\t\t\tname = 'core/video';\n\t\t\t} else if ( [ 'spotify', 'soundcloud' ].includes( provider ) ) {\n\t\t\t\tname = 'core/audio';\n\t\t\t}\n\t\t}\n\t}\n\n\t// If there are two blocks in the content and the last one is a text blocks\n\t// grab the name of the first one to also suggest a post format from it.\n\tif ( blocks.length === 2 && blocks[ 1 ].name === 'core/paragraph' ) {\n\t\tname = blocks[ 0 ].name;\n\t}\n\n\t// We only convert to default post formats in core.\n\tswitch ( name ) {\n\t\tcase 'core/image':\n\t\t\treturn 'image';\n\t\tcase 'core/quote':\n\t\tcase 'core/pullquote':\n\t\t\treturn 'quote';\n\t\tcase 'core/gallery':\n\t\t\treturn 'gallery';\n\t\tcase 'core/video':\n\t\t\treturn 'video';\n\t\tcase 'core/audio':\n\t\t\treturn 'audio';\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\n/**\n * Returns the content of the post being edited.\n *\n * @param {Object} state Global application state.\n *\n * @return {string} Post content.\n */\nexport const getEditedPostContent = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst postId = getCurrentPostId( state );\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst record = select( coreStore ).getEditedEntityRecord(\n\t\t\t'postType',\n\t\t\tpostType,\n\t\t\tpostId\n\t\t);\n\t\tif ( record ) {\n\t\t\tif ( typeof record.content === 'function' ) {\n\t\t\t\treturn record.content( record );\n\t\t\t} else if ( record.blocks ) {\n\t\t\t\treturn __unstableSerializeAndClean( record.blocks );\n\t\t\t} else if ( record.content ) {\n\t\t\t\treturn record.content;\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t}\n);\n\n/**\n * Returns true if the post is being published, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether post is being published.\n */\nexport function isPublishingPost( state ) {\n\treturn (\n\t\tisSavingPost( state ) &&\n\t\t! isCurrentPostPublished( state ) &&\n\t\tgetEditedPostAttribute( state, 'status' ) === 'publish'\n\t);\n}\n\n/**\n * Returns whether the permalink is editable or not.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether or not the permalink is editable.\n */\nexport function isPermalinkEditable( state ) {\n\tconst permalinkTemplate = getEditedPostAttribute(\n\t\tstate,\n\t\t'permalink_template'\n\t);\n\n\treturn PERMALINK_POSTNAME_REGEX.test( permalinkTemplate );\n}\n\n/**\n * Returns the permalink for the post.\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} The permalink, or null if the post is not viewable.\n */\nexport function getPermalink( state ) {\n\tconst permalinkParts = getPermalinkParts( state );\n\tif ( ! permalinkParts ) {\n\t\treturn null;\n\t}\n\n\tconst { prefix, postName, suffix } = permalinkParts;\n\n\tif ( isPermalinkEditable( state ) ) {\n\t\treturn prefix + postName + suffix;\n\t}\n\n\treturn prefix;\n}\n\n/**\n * Returns the slug for the post being edited, preferring a manually edited\n * value if one exists, then a sanitized version of the current post title, and\n * finally the post ID.\n *\n * @param {Object} state Editor state.\n *\n * @return {string} The current slug to be displayed in the editor\n */\nexport function getEditedPostSlug( state ) {\n\treturn (\n\t\tgetEditedPostAttribute( state, 'slug' ) ||\n\t\tcleanForSlug( getEditedPostAttribute( state, 'title' ) ) ||\n\t\tgetCurrentPostId( state )\n\t);\n}\n\n/**\n * Returns the permalink for a post, split into it's three parts: the prefix,\n * the postName, and the suffix.\n *\n * @param {Object} state Editor state.\n *\n * @return {Object} An object containing the prefix, postName, and suffix for\n * the permalink, or null if the post is not viewable.\n */\nexport function getPermalinkParts( state ) {\n\tconst permalinkTemplate = getEditedPostAttribute(\n\t\tstate,\n\t\t'permalink_template'\n\t);\n\tif ( ! permalinkTemplate ) {\n\t\treturn null;\n\t}\n\n\tconst postName =\n\t\tgetEditedPostAttribute( state, 'slug' ) ||\n\t\tgetEditedPostAttribute( state, 'generated_slug' );\n\n\tconst [ prefix, suffix ] = permalinkTemplate.split(\n\t\tPERMALINK_POSTNAME_REGEX\n\t);\n\n\treturn {\n\t\tprefix,\n\t\tpostName,\n\t\tsuffix,\n\t};\n}\n\n/**\n * Returns whether the post is locked.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Is locked.\n */\nexport function isPostLocked( state ) {\n\treturn state.postLock.isLocked;\n}\n\n/**\n * Returns whether post saving is locked.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Is locked.\n */\nexport function isPostSavingLocked( state ) {\n\treturn Object.keys( state.postSavingLock ).length > 0;\n}\n\n/**\n * Returns whether post autosaving is locked.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Is locked.\n */\nexport function isPostAutosavingLocked( state ) {\n\treturn Object.keys( state.postAutosavingLock ).length > 0;\n}\n\n/**\n * Returns whether the edition of the post has been taken over.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Is post lock takeover.\n */\nexport function isPostLockTakeover( state ) {\n\treturn state.postLock.isTakeover;\n}\n\n/**\n * Returns details about the post lock user.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} A user object.\n */\nexport function getPostLockUser( state ) {\n\treturn state.postLock.user;\n}\n\n/**\n * Returns the active post lock.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The lock object.\n */\nexport function getActivePostLock( state ) {\n\treturn state.postLock.activePostLock;\n}\n\n/**\n * Returns whether or not the user has the unfiltered_html capability.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether the user can or can't post unfiltered HTML.\n */\nexport function canUserUseUnfilteredHTML( state ) {\n\treturn Boolean(\n\t\tgetCurrentPost( state )._links?.hasOwnProperty(\n\t\t\t'wp:action-unfiltered-html'\n\t\t)\n\t);\n}\n\n/**\n * Returns whether the pre-publish panel should be shown\n * or skipped when the user clicks the \"publish\" button.\n *\n * @return {boolean} Whether the pre-publish panel should be shown or not.\n */\nexport const isPublishSidebarEnabled = createRegistrySelector(\n\t( select ) => () =>\n\t\t!! select( preferencesStore ).get(\n\t\t\t'core/edit-post',\n\t\t\t'isPublishSidebarEnabled'\n\t\t)\n);\n\n/**\n * Return the current block list.\n *\n * @param {Object} state\n * @return {Array} Block list.\n */\nexport function getEditorBlocks( state ) {\n\treturn getEditedPostAttribute( state, 'blocks' ) || EMPTY_ARRAY;\n}\n\n/**\n * A block selection object.\n *\n * @typedef {Object} WPBlockSelection\n *\n * @property {string} clientId A block client ID.\n * @property {string} attributeKey A block attribute key.\n * @property {number} offset An attribute value offset, based on the rich\n * text value. See `wp.richText.create`.\n */\n\n/**\n * Returns the current selection start.\n *\n * @param {Object} state\n * @return {WPBlockSelection} The selection start.\n *\n * @deprecated since Gutenberg 10.0.0.\n */\nexport function getEditorSelectionStart( state ) {\n\tdeprecated( \"select('core/editor').getEditorSelectionStart\", {\n\t\tsince: '5.8',\n\t\talternative: \"select('core/editor').getEditorSelection\",\n\t} );\n\treturn getEditedPostAttribute( state, 'selection' )?.selectionStart;\n}\n\n/**\n * Returns the current selection end.\n *\n * @param {Object} state\n * @return {WPBlockSelection} The selection end.\n *\n * @deprecated since Gutenberg 10.0.0.\n */\nexport function getEditorSelectionEnd( state ) {\n\tdeprecated( \"select('core/editor').getEditorSelectionStart\", {\n\t\tsince: '5.8',\n\t\talternative: \"select('core/editor').getEditorSelection\",\n\t} );\n\treturn getEditedPostAttribute( state, 'selection' )?.selectionEnd;\n}\n\n/**\n * Returns the current selection.\n *\n * @param {Object} state\n * @return {WPBlockSelection} The selection end.\n */\nexport function getEditorSelection( state ) {\n\treturn getEditedPostAttribute( state, 'selection' );\n}\n\n/**\n * Is the editor ready\n *\n * @param {Object} state\n * @return {boolean} is Ready.\n */\nexport function __unstableIsEditorReady( state ) {\n\treturn state.isReady;\n}\n\n/**\n * Returns the post editor settings.\n *\n * @param {Object} state Editor state.\n *\n * @return {Object} The editor settings object.\n */\nexport function getEditorSettings( state ) {\n\treturn state.editorSettings;\n}\n\n/*\n * Backward compatibility\n */\n\n/**\n * Returns state object prior to a specified optimist transaction ID, or `null`\n * if the transaction corresponding to the given ID cannot be found.\n *\n * @deprecated since Gutenberg 9.7.0.\n */\nexport function getStateBeforeOptimisticTransaction() {\n\tdeprecated( \"select('core/editor').getStateBeforeOptimisticTransaction\", {\n\t\tsince: '5.7',\n\t\thint: 'No state history is kept on this store anymore',\n\t} );\n\n\treturn null;\n}\n/**\n * Returns true if an optimistic transaction is pending commit, for which the\n * before state satisfies the given predicate function.\n *\n * @deprecated since Gutenberg 9.7.0.\n */\nexport function inSomeHistory() {\n\tdeprecated( \"select('core/editor').inSomeHistory\", {\n\t\tsince: '5.7',\n\t\thint: 'No state history is kept on this store anymore',\n\t} );\n\treturn false;\n}\n\nfunction getBlockEditorSelector( name ) {\n\treturn createRegistrySelector( ( select ) => ( state, ...args ) => {\n\t\tdeprecated( \"`wp.data.select( 'core/editor' ).\" + name + '`', {\n\t\t\tsince: '5.3',\n\t\t\talternative: \"`wp.data.select( 'core/block-editor' ).\" + name + '`',\n\t\t\tversion: '6.2',\n\t\t} );\n\n\t\treturn select( blockEditorStore )[ name ]( ...args );\n\t} );\n}\n\n/**\n * @see getBlockName in core/block-editor store.\n */\nexport const getBlockName = getBlockEditorSelector( 'getBlockName' );\n\n/**\n * @see isBlockValid in core/block-editor store.\n */\nexport const isBlockValid = getBlockEditorSelector( 'isBlockValid' );\n\n/**\n * @see getBlockAttributes in core/block-editor store.\n */\nexport const getBlockAttributes =\n\tgetBlockEditorSelector( 'getBlockAttributes' );\n\n/**\n * @see getBlock in core/block-editor store.\n */\nexport const getBlock = getBlockEditorSelector( 'getBlock' );\n\n/**\n * @see getBlocks in core/block-editor store.\n */\nexport const getBlocks = getBlockEditorSelector( 'getBlocks' );\n\n/**\n * @see getClientIdsOfDescendants in core/block-editor store.\n */\nexport const getClientIdsOfDescendants = getBlockEditorSelector(\n\t'getClientIdsOfDescendants'\n);\n\n/**\n * @see getClientIdsWithDescendants in core/block-editor store.\n */\nexport const getClientIdsWithDescendants = getBlockEditorSelector(\n\t'getClientIdsWithDescendants'\n);\n\n/**\n * @see getGlobalBlockCount in core/block-editor store.\n */\nexport const getGlobalBlockCount = getBlockEditorSelector(\n\t'getGlobalBlockCount'\n);\n\n/**\n * @see getBlocksByClientId in core/block-editor store.\n */\nexport const getBlocksByClientId = getBlockEditorSelector(\n\t'getBlocksByClientId'\n);\n\n/**\n * @see getBlockCount in core/block-editor store.\n */\nexport const getBlockCount = getBlockEditorSelector( 'getBlockCount' );\n\n/**\n * @see getBlockSelectionStart in core/block-editor store.\n */\nexport const getBlockSelectionStart = getBlockEditorSelector(\n\t'getBlockSelectionStart'\n);\n\n/**\n * @see getBlockSelectionEnd in core/block-editor store.\n */\nexport const getBlockSelectionEnd = getBlockEditorSelector(\n\t'getBlockSelectionEnd'\n);\n\n/**\n * @see getSelectedBlockCount in core/block-editor store.\n */\nexport const getSelectedBlockCount = getBlockEditorSelector(\n\t'getSelectedBlockCount'\n);\n\n/**\n * @see hasSelectedBlock in core/block-editor store.\n */\nexport const hasSelectedBlock = getBlockEditorSelector( 'hasSelectedBlock' );\n\n/**\n * @see getSelectedBlockClientId in core/block-editor store.\n */\nexport const getSelectedBlockClientId = getBlockEditorSelector(\n\t'getSelectedBlockClientId'\n);\n\n/**\n * @see getSelectedBlock in core/block-editor store.\n */\nexport const getSelectedBlock = getBlockEditorSelector( 'getSelectedBlock' );\n\n/**\n * @see getBlockRootClientId in core/block-editor store.\n */\nexport const getBlockRootClientId = getBlockEditorSelector(\n\t'getBlockRootClientId'\n);\n\n/**\n * @see getBlockHierarchyRootClientId in core/block-editor store.\n */\nexport const getBlockHierarchyRootClientId = getBlockEditorSelector(\n\t'getBlockHierarchyRootClientId'\n);\n\n/**\n * @see getAdjacentBlockClientId in core/block-editor store.\n */\nexport const getAdjacentBlockClientId = getBlockEditorSelector(\n\t'getAdjacentBlockClientId'\n);\n\n/**\n * @see getPreviousBlockClientId in core/block-editor store.\n */\nexport const getPreviousBlockClientId = getBlockEditorSelector(\n\t'getPreviousBlockClientId'\n);\n\n/**\n * @see getNextBlockClientId in core/block-editor store.\n */\nexport const getNextBlockClientId = getBlockEditorSelector(\n\t'getNextBlockClientId'\n);\n\n/**\n * @see getSelectedBlocksInitialCaretPosition in core/block-editor store.\n */\nexport const getSelectedBlocksInitialCaretPosition = getBlockEditorSelector(\n\t'getSelectedBlocksInitialCaretPosition'\n);\n\n/**\n * @see getMultiSelectedBlockClientIds in core/block-editor store.\n */\nexport const getMultiSelectedBlockClientIds = getBlockEditorSelector(\n\t'getMultiSelectedBlockClientIds'\n);\n\n/**\n * @see getMultiSelectedBlocks in core/block-editor store.\n */\nexport const getMultiSelectedBlocks = getBlockEditorSelector(\n\t'getMultiSelectedBlocks'\n);\n\n/**\n * @see getFirstMultiSelectedBlockClientId in core/block-editor store.\n */\nexport const getFirstMultiSelectedBlockClientId = getBlockEditorSelector(\n\t'getFirstMultiSelectedBlockClientId'\n);\n\n/**\n * @see getLastMultiSelectedBlockClientId in core/block-editor store.\n */\nexport const getLastMultiSelectedBlockClientId = getBlockEditorSelector(\n\t'getLastMultiSelectedBlockClientId'\n);\n\n/**\n * @see isFirstMultiSelectedBlock in core/block-editor store.\n */\nexport const isFirstMultiSelectedBlock = getBlockEditorSelector(\n\t'isFirstMultiSelectedBlock'\n);\n\n/**\n * @see isBlockMultiSelected in core/block-editor store.\n */\nexport const isBlockMultiSelected = getBlockEditorSelector(\n\t'isBlockMultiSelected'\n);\n\n/**\n * @see isAncestorMultiSelected in core/block-editor store.\n */\nexport const isAncestorMultiSelected = getBlockEditorSelector(\n\t'isAncestorMultiSelected'\n);\n\n/**\n * @see getMultiSelectedBlocksStartClientId in core/block-editor store.\n */\nexport const getMultiSelectedBlocksStartClientId = getBlockEditorSelector(\n\t'getMultiSelectedBlocksStartClientId'\n);\n\n/**\n * @see getMultiSelectedBlocksEndClientId in core/block-editor store.\n */\nexport const getMultiSelectedBlocksEndClientId = getBlockEditorSelector(\n\t'getMultiSelectedBlocksEndClientId'\n);\n\n/**\n * @see getBlockOrder in core/block-editor store.\n */\nexport const getBlockOrder = getBlockEditorSelector( 'getBlockOrder' );\n\n/**\n * @see getBlockIndex in core/block-editor store.\n */\nexport const getBlockIndex = getBlockEditorSelector( 'getBlockIndex' );\n\n/**\n * @see isBlockSelected in core/block-editor store.\n */\nexport const isBlockSelected = getBlockEditorSelector( 'isBlockSelected' );\n\n/**\n * @see hasSelectedInnerBlock in core/block-editor store.\n */\nexport const hasSelectedInnerBlock = getBlockEditorSelector(\n\t'hasSelectedInnerBlock'\n);\n\n/**\n * @see isBlockWithinSelection in core/block-editor store.\n */\nexport const isBlockWithinSelection = getBlockEditorSelector(\n\t'isBlockWithinSelection'\n);\n\n/**\n * @see hasMultiSelection in core/block-editor store.\n */\nexport const hasMultiSelection = getBlockEditorSelector( 'hasMultiSelection' );\n\n/**\n * @see isMultiSelecting in core/block-editor store.\n */\nexport const isMultiSelecting = getBlockEditorSelector( 'isMultiSelecting' );\n\n/**\n * @see isSelectionEnabled in core/block-editor store.\n */\nexport const isSelectionEnabled =\n\tgetBlockEditorSelector( 'isSelectionEnabled' );\n\n/**\n * @see getBlockMode in core/block-editor store.\n */\nexport const getBlockMode = getBlockEditorSelector( 'getBlockMode' );\n\n/**\n * @see isTyping in core/block-editor store.\n */\nexport const isTyping = getBlockEditorSelector( 'isTyping' );\n\n/**\n * @see isCaretWithinFormattedText in core/block-editor store.\n */\nexport const isCaretWithinFormattedText = getBlockEditorSelector(\n\t'isCaretWithinFormattedText'\n);\n\n/**\n * @see getBlockInsertionPoint in core/block-editor store.\n */\nexport const getBlockInsertionPoint = getBlockEditorSelector(\n\t'getBlockInsertionPoint'\n);\n\n/**\n * @see isBlockInsertionPointVisible in core/block-editor store.\n */\nexport const isBlockInsertionPointVisible = getBlockEditorSelector(\n\t'isBlockInsertionPointVisible'\n);\n\n/**\n * @see isValidTemplate in core/block-editor store.\n */\nexport const isValidTemplate = getBlockEditorSelector( 'isValidTemplate' );\n\n/**\n * @see getTemplate in core/block-editor store.\n */\nexport const getTemplate = getBlockEditorSelector( 'getTemplate' );\n\n/**\n * @see getTemplateLock in core/block-editor store.\n */\nexport const getTemplateLock = getBlockEditorSelector( 'getTemplateLock' );\n\n/**\n * @see canInsertBlockType in core/block-editor store.\n */\nexport const canInsertBlockType =\n\tgetBlockEditorSelector( 'canInsertBlockType' );\n\n/**\n * @see getInserterItems in core/block-editor store.\n */\nexport const getInserterItems = getBlockEditorSelector( 'getInserterItems' );\n\n/**\n * @see hasInserterItems in core/block-editor store.\n */\nexport const hasInserterItems = getBlockEditorSelector( 'hasInserterItems' );\n\n/**\n * @see getBlockListSettings in core/block-editor store.\n */\nexport const getBlockListSettings = getBlockEditorSelector(\n\t'getBlockListSettings'\n);\n\n/**\n * Returns the default template types.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The template types.\n */\nexport function __experimentalGetDefaultTemplateTypes( state ) {\n\treturn getEditorSettings( state )?.defaultTemplateTypes;\n}\n\n/**\n * Returns the default template part areas.\n *\n * @param {Object} state Global application state.\n *\n * @return {Array} The template part areas.\n */\nexport const __experimentalGetDefaultTemplatePartAreas = createSelector(\n\t( state ) => {\n\t\tconst areas =\n\t\t\tgetEditorSettings( state )?.defaultTemplatePartAreas || [];\n\t\treturn areas?.map( ( item ) => {\n\t\t\treturn { ...item, icon: getTemplatePartIcon( item.icon ) };\n\t\t} );\n\t},\n\t( state ) => [ getEditorSettings( state )?.defaultTemplatePartAreas ]\n);\n\n/**\n * Returns a default template type searched by slug.\n *\n * @param {Object} state Global application state.\n * @param {string} slug The template type slug.\n *\n * @return {Object} The template type.\n */\nexport const __experimentalGetDefaultTemplateType = createSelector(\n\t( state, slug ) => {\n\t\tconst templateTypes = __experimentalGetDefaultTemplateTypes( state );\n\t\tif ( ! templateTypes ) {\n\t\t\treturn EMPTY_OBJECT;\n\t\t}\n\n\t\treturn (\n\t\t\tObject.values( templateTypes ).find(\n\t\t\t\t( type ) => type.slug === slug\n\t\t\t) ?? EMPTY_OBJECT\n\t\t);\n\t},\n\t( state, slug ) => [ __experimentalGetDefaultTemplateTypes( state ), slug ]\n);\n\n/**\n * Given a template entity, return information about it which is ready to be\n * rendered, such as the title, description, and icon.\n *\n * @param {Object} state Global application state.\n * @param {Object} template The template for which we need information.\n * @return {Object} Information about the template, including title, description, and icon.\n */\nexport function __experimentalGetTemplateInfo( state, template ) {\n\tif ( ! template ) {\n\t\treturn EMPTY_OBJECT;\n\t}\n\n\tconst { description, slug, title, area } = template;\n\tconst { title: defaultTitle, description: defaultDescription } =\n\t\t__experimentalGetDefaultTemplateType( state, slug );\n\n\tconst templateTitle = typeof title === 'string' ? title : title?.rendered;\n\tconst templateDescription =\n\t\ttypeof description === 'string' ? description : description?.raw;\n\tconst templateIcon =\n\t\t__experimentalGetDefaultTemplatePartAreas( state ).find(\n\t\t\t( item ) => area === item.area\n\t\t)?.icon || layout;\n\n\treturn {\n\t\ttitle:\n\t\t\ttemplateTitle && templateTitle !== slug\n\t\t\t\t? templateTitle\n\t\t\t\t: defaultTitle || slug,\n\t\tdescription: templateDescription || defaultDescription,\n\t\ticon: templateIcon,\n\t};\n}\n\n/**\n * Returns a post type label depending on the current post.\n *\n * @param {Object} state Global application state.\n *\n * @return {string|undefined} The post type label if available, otherwise undefined.\n */\nexport const getPostTypeLabel = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst currentPostType = getCurrentPostType( state );\n\t\tconst postType = select( coreStore ).getPostType( currentPostType );\n\t\t// Disable reason: Post type labels object is shaped like this.\n\t\t// eslint-disable-next-line camelcase\n\t\treturn postType?.labels?.singular_name;\n\t}\n);\n"]}
1
+ {"version":3,"sources":["@wordpress/editor/src/store/selectors.js"],"names":["EMPTY_OBJECT","EMPTY_ARRAY","hasEditorUndo","select","coreStore","hasUndo","hasEditorRedo","hasRedo","isEditedPostNew","state","getCurrentPost","status","hasChangedContent","edits","getPostEdits","isEditedPostDirty","postType","getCurrentPostType","postId","getCurrentPostId","hasEditsForEntityRecord","hasNonPostEntityChanges","dirtyEntityRecords","__experimentalGetDirtyEntityRecords","type","id","some","entityRecord","kind","name","key","isCleanNewPost","post","getRawEntityRecord","getCurrentPostRevisionsCount","_links","count","getCurrentPostLastRevisionId","getEntityRecordEdits","getCurrentPostAttribute","attributeName","hasOwnProperty","getNestedEditedPostProperty","getEditedPostAttribute","getEditedPostContent","EDIT_MERGE_PROPERTIES","has","getAutosaveAttribute","AUTOSAVE_PROPERTIES","includes","currentUserId","getCurrentUser","autosave","getAutosave","getEditedPostVisibility","password","isCurrentPostPending","isCurrentPostPublished","currentPost","indexOf","Date","Number","date","ONE_MINUTE_IN_MS","isCurrentPostScheduled","isEditedPostPublishable","isEditedPostSaveable","isSavingPost","isEditedPostEmpty","Platform","OS","blocks","getEditorBlocks","length","blockName","isEditedPostAutosaveable","isPostAutosavingLocked","hasFetchedAutosave","hasFetchedAutosaves","field","isEditedPostBeingScheduled","checkedDate","isEditedPostDateFloating","modified","isDeletingPost","deleting","pending","isSavingEntityRecord","isSavingNonPostEntityChanges","entitiesBeingSaved","__experimentalGetEntitiesBeingSaved","didPostSaveRequestSucceed","getLastEntitySaveError","didPostSaveRequestFail","isAutosavingPost","Boolean","saving","options","isAutosave","isPreviewingPost","isPreview","getEditedPostPreviewLink","previewLink","preview","featuredImageId","_thumbnail_id","getSuggestedPostFormat","provider","attributes","providerNameSlug","record","getEditedEntityRecord","content","isPublishingPost","isPermalinkEditable","permalinkTemplate","PERMALINK_POSTNAME_REGEX","test","getPermalink","permalinkParts","getPermalinkParts","prefix","postName","suffix","getEditedPostSlug","split","isPostLocked","postLock","isLocked","isPostSavingLocked","Object","keys","postSavingLock","postAutosavingLock","isPostLockTakeover","isTakeover","getPostLockUser","user","getActivePostLock","activePostLock","canUserUseUnfilteredHTML","isPublishSidebarEnabled","preferencesStore","get","getEditorSelectionStart","since","alternative","selectionStart","getEditorSelectionEnd","selectionEnd","getEditorSelection","__unstableIsEditorReady","isReady","getEditorSettings","editorSettings","getStateBeforeOptimisticTransaction","hint","inSomeHistory","getBlockEditorSelector","args","version","blockEditorStore","getBlockName","isBlockValid","getBlockAttributes","getBlock","getBlocks","getClientIdsOfDescendants","getClientIdsWithDescendants","getGlobalBlockCount","getBlocksByClientId","getBlockCount","getBlockSelectionStart","getBlockSelectionEnd","getSelectedBlockCount","hasSelectedBlock","getSelectedBlockClientId","getSelectedBlock","getBlockRootClientId","getBlockHierarchyRootClientId","getAdjacentBlockClientId","getPreviousBlockClientId","getNextBlockClientId","getSelectedBlocksInitialCaretPosition","getMultiSelectedBlockClientIds","getMultiSelectedBlocks","getFirstMultiSelectedBlockClientId","getLastMultiSelectedBlockClientId","isFirstMultiSelectedBlock","isBlockMultiSelected","isAncestorMultiSelected","getMultiSelectedBlocksStartClientId","getMultiSelectedBlocksEndClientId","getBlockOrder","getBlockIndex","isBlockSelected","hasSelectedInnerBlock","isBlockWithinSelection","hasMultiSelection","isMultiSelecting","isSelectionEnabled","getBlockMode","isTyping","isCaretWithinFormattedText","getBlockInsertionPoint","isBlockInsertionPointVisible","isValidTemplate","getTemplate","getTemplateLock","canInsertBlockType","getInserterItems","hasInserterItems","getBlockListSettings","__experimentalGetDefaultTemplateTypes","defaultTemplateTypes","__experimentalGetDefaultTemplatePartAreas","areas","defaultTemplatePartAreas","map","item","icon","__experimentalGetDefaultTemplateType","slug","templateTypes","values","find","__experimentalGetTemplateInfo","template","description","title","area","defaultTitle","defaultDescription","templateTitle","rendered","templateDescription","raw","templateIcon","layout","getPostTypeLabel","currentPostType","getPostType","labels","singular_name"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetFreeformContentHandlerName,\n\tgetDefaultBlockName,\n\t__unstableSerializeAndClean,\n} from '@wordpress/blocks';\nimport { isInTheFuture, getDate } from '@wordpress/date';\nimport { addQueryArgs, cleanForSlug } from '@wordpress/url';\nimport { createRegistrySelector } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport { Platform } from '@wordpress/element';\nimport { layout } from '@wordpress/icons';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as preferencesStore } from '@wordpress/preferences';\n\n/**\n * Internal dependencies\n */\nimport {\n\tEDIT_MERGE_PROPERTIES,\n\tPERMALINK_POSTNAME_REGEX,\n\tONE_MINUTE_IN_MS,\n\tAUTOSAVE_PROPERTIES,\n} from './constants';\nimport { getPostRawValue } from './reducer';\nimport { getTemplatePartIcon } from '../utils/get-template-part-icon';\n\n/**\n * Shared reference to an empty object for cases where it is important to avoid\n * returning a new object reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n */\nconst EMPTY_OBJECT = {};\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Returns true if any past editor history snapshots exist, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether undo history exists.\n */\nexport const hasEditorUndo = createRegistrySelector( ( select ) => () => {\n\treturn select( coreStore ).hasUndo();\n} );\n\n/**\n * Returns true if any future editor history snapshots exist, or false\n * otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether redo history exists.\n */\nexport const hasEditorRedo = createRegistrySelector( ( select ) => () => {\n\treturn select( coreStore ).hasRedo();\n} );\n\n/**\n * Returns true if the currently edited post is yet to be saved, or false if\n * the post has been saved.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post is new.\n */\nexport function isEditedPostNew( state ) {\n\treturn getCurrentPost( state ).status === 'auto-draft';\n}\n\n/**\n * Returns true if content includes unsaved changes, or false otherwise.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether content includes unsaved changes.\n */\nexport function hasChangedContent( state ) {\n\tconst edits = getPostEdits( state );\n\treturn 'content' in edits;\n}\n\n/**\n * Returns true if there are unsaved values for the current edit session, or\n * false if the editing state matches the saved or new post.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether unsaved values exist.\n */\nexport const isEditedPostDirty = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\t// Edits should contain only fields which differ from the saved post (reset\n\t\t// at initial load and save complete). Thus, a non-empty edits state can be\n\t\t// inferred to contain unsaved values.\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst postId = getCurrentPostId( state );\n\t\tif (\n\t\t\tselect( coreStore ).hasEditsForEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\tpostId\n\t\t\t)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n);\n\n/**\n * Returns true if there are unsaved edits for entities other than\n * the editor's post, and false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether there are edits or not.\n */\nexport const hasNonPostEntityChanges = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst dirtyEntityRecords =\n\t\t\tselect( coreStore ).__experimentalGetDirtyEntityRecords();\n\t\tconst { type, id } = getCurrentPost( state );\n\t\treturn dirtyEntityRecords.some(\n\t\t\t( entityRecord ) =>\n\t\t\t\tentityRecord.kind !== 'postType' ||\n\t\t\t\tentityRecord.name !== type ||\n\t\t\t\tentityRecord.key !== id\n\t\t);\n\t}\n);\n\n/**\n * Returns true if there are no unsaved values for the current edit session and\n * if the currently edited post is new (has never been saved before).\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether new post and unsaved values exist.\n */\nexport function isCleanNewPost( state ) {\n\treturn ! isEditedPostDirty( state ) && isEditedPostNew( state );\n}\n\n/**\n * Returns the post currently being edited in its last known saved state, not\n * including unsaved edits. Returns an object containing relevant default post\n * values if the post has not yet been saved.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} Post object.\n */\nexport const getCurrentPost = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst postId = getCurrentPostId( state );\n\t\tconst postType = getCurrentPostType( state );\n\n\t\tconst post = select( coreStore ).getRawEntityRecord(\n\t\t\t'postType',\n\t\t\tpostType,\n\t\t\tpostId\n\t\t);\n\t\tif ( post ) {\n\t\t\treturn post;\n\t\t}\n\n\t\t// This exists for compatibility with the previous selector behavior\n\t\t// which would guarantee an object return based on the editor reducer's\n\t\t// default empty object state.\n\t\treturn EMPTY_OBJECT;\n\t}\n);\n\n/**\n * Returns the post type of the post currently being edited.\n *\n * @param {Object} state Global application state.\n *\n * @return {string} Post type.\n */\nexport function getCurrentPostType( state ) {\n\treturn state.postType;\n}\n\n/**\n * Returns the ID of the post currently being edited, or null if the post has\n * not yet been saved.\n *\n * @param {Object} state Global application state.\n *\n * @return {?number} ID of current post.\n */\nexport function getCurrentPostId( state ) {\n\treturn state.postId;\n}\n\n/**\n * Returns the number of revisions of the post currently being edited.\n *\n * @param {Object} state Global application state.\n *\n * @return {number} Number of revisions.\n */\nexport function getCurrentPostRevisionsCount( state ) {\n\treturn (\n\t\tgetCurrentPost( state )._links?.[ 'version-history' ]?.[ 0 ]?.count ?? 0\n\t);\n}\n\n/**\n * Returns the last revision ID of the post currently being edited,\n * or null if the post has no revisions.\n *\n * @param {Object} state Global application state.\n *\n * @return {?number} ID of the last revision.\n */\nexport function getCurrentPostLastRevisionId( state ) {\n\treturn (\n\t\tgetCurrentPost( state )._links?.[ 'predecessor-version' ]?.[ 0 ]?.id ??\n\t\tnull\n\t);\n}\n\n/**\n * Returns any post values which have been changed in the editor but not yet\n * been saved.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} Object of key value pairs comprising unsaved edits.\n */\nexport const getPostEdits = createRegistrySelector( ( select ) => ( state ) => {\n\tconst postType = getCurrentPostType( state );\n\tconst postId = getCurrentPostId( state );\n\treturn (\n\t\tselect( coreStore ).getEntityRecordEdits(\n\t\t\t'postType',\n\t\t\tpostType,\n\t\t\tpostId\n\t\t) || EMPTY_OBJECT\n\t);\n} );\n\n/**\n * Returns an attribute value of the saved post.\n *\n * @param {Object} state Global application state.\n * @param {string} attributeName Post attribute name.\n *\n * @return {*} Post attribute value.\n */\nexport function getCurrentPostAttribute( state, attributeName ) {\n\tswitch ( attributeName ) {\n\t\tcase 'type':\n\t\t\treturn getCurrentPostType( state );\n\n\t\tcase 'id':\n\t\t\treturn getCurrentPostId( state );\n\n\t\tdefault:\n\t\t\tconst post = getCurrentPost( state );\n\t\t\tif ( ! post.hasOwnProperty( attributeName ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn getPostRawValue( post[ attributeName ] );\n\t}\n}\n\n/**\n * Returns a single attribute of the post being edited, preferring the unsaved\n * edit if one exists, but merging with the attribute value for the last known\n * saved state of the post (this is needed for some nested attributes like meta).\n *\n * @param {Object} state Global application state.\n * @param {string} attributeName Post attribute name.\n *\n * @return {*} Post attribute value.\n */\nconst getNestedEditedPostProperty = ( state, attributeName ) => {\n\tconst edits = getPostEdits( state );\n\tif ( ! edits.hasOwnProperty( attributeName ) ) {\n\t\treturn getCurrentPostAttribute( state, attributeName );\n\t}\n\n\treturn {\n\t\t...getCurrentPostAttribute( state, attributeName ),\n\t\t...edits[ attributeName ],\n\t};\n};\n\n/**\n * Returns a single attribute of the post being edited, preferring the unsaved\n * edit if one exists, but falling back to the attribute for the last known\n * saved state of the post.\n *\n * @param {Object} state Global application state.\n * @param {string} attributeName Post attribute name.\n *\n * @return {*} Post attribute value.\n */\nexport function getEditedPostAttribute( state, attributeName ) {\n\t// Special cases.\n\tswitch ( attributeName ) {\n\t\tcase 'content':\n\t\t\treturn getEditedPostContent( state );\n\t}\n\n\t// Fall back to saved post value if not edited.\n\tconst edits = getPostEdits( state );\n\tif ( ! edits.hasOwnProperty( attributeName ) ) {\n\t\treturn getCurrentPostAttribute( state, attributeName );\n\t}\n\n\t// Merge properties are objects which contain only the patch edit in state,\n\t// and thus must be merged with the current post attribute.\n\tif ( EDIT_MERGE_PROPERTIES.has( attributeName ) ) {\n\t\treturn getNestedEditedPostProperty( state, attributeName );\n\t}\n\n\treturn edits[ attributeName ];\n}\n\n/**\n * Returns an attribute value of the current autosave revision for a post, or\n * null if there is no autosave for the post.\n *\n * @deprecated since 5.6. Callers should use the `getAutosave( postType, postId, userId )` selector\n * \t\t\t from the '@wordpress/core-data' package and access properties on the returned\n * \t\t\t autosave object using getPostRawValue.\n *\n * @param {Object} state Global application state.\n * @param {string} attributeName Autosave attribute name.\n *\n * @return {*} Autosave attribute value.\n */\nexport const getAutosaveAttribute = createRegistrySelector(\n\t( select ) => ( state, attributeName ) => {\n\t\tif (\n\t\t\t! AUTOSAVE_PROPERTIES.includes( attributeName ) &&\n\t\t\tattributeName !== 'preview_link'\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst postId = getCurrentPostId( state );\n\t\tconst currentUserId = select( coreStore ).getCurrentUser()?.id;\n\t\tconst autosave = select( coreStore ).getAutosave(\n\t\t\tpostType,\n\t\t\tpostId,\n\t\t\tcurrentUserId\n\t\t);\n\n\t\tif ( autosave ) {\n\t\t\treturn getPostRawValue( autosave[ attributeName ] );\n\t\t}\n\t}\n);\n\n/**\n * Returns the current visibility of the post being edited, preferring the\n * unsaved value if different than the saved post. The return value is one of\n * \"private\", \"password\", or \"public\".\n *\n * @param {Object} state Global application state.\n *\n * @return {string} Post visibility.\n */\nexport function getEditedPostVisibility( state ) {\n\tconst status = getEditedPostAttribute( state, 'status' );\n\tif ( status === 'private' ) {\n\t\treturn 'private';\n\t}\n\n\tconst password = getEditedPostAttribute( state, 'password' );\n\tif ( password ) {\n\t\treturn 'password';\n\t}\n\n\treturn 'public';\n}\n\n/**\n * Returns true if post is pending review.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether current post is pending review.\n */\nexport function isCurrentPostPending( state ) {\n\treturn getCurrentPost( state ).status === 'pending';\n}\n\n/**\n * Return true if the current post has already been published.\n *\n * @param {Object} state Global application state.\n * @param {Object?} currentPost Explicit current post for bypassing registry selector.\n *\n * @return {boolean} Whether the post has been published.\n */\nexport function isCurrentPostPublished( state, currentPost ) {\n\tconst post = currentPost || getCurrentPost( state );\n\n\treturn (\n\t\t[ 'publish', 'private' ].indexOf( post.status ) !== -1 ||\n\t\t( post.status === 'future' &&\n\t\t\t! isInTheFuture(\n\t\t\t\tnew Date( Number( getDate( post.date ) ) - ONE_MINUTE_IN_MS )\n\t\t\t) )\n\t);\n}\n\n/**\n * Returns true if post is already scheduled.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether current post is scheduled to be posted.\n */\nexport function isCurrentPostScheduled( state ) {\n\treturn (\n\t\tgetCurrentPost( state ).status === 'future' &&\n\t\t! isCurrentPostPublished( state )\n\t);\n}\n\n/**\n * Return true if the post being edited can be published.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post can been published.\n */\nexport function isEditedPostPublishable( state ) {\n\tconst post = getCurrentPost( state );\n\n\t// TODO: Post being publishable should be superset of condition of post\n\t// being saveable. Currently this restriction is imposed at UI.\n\t//\n\t// See: <PostPublishButton /> (`isButtonEnabled` assigned by `isSaveable`).\n\n\treturn (\n\t\tisEditedPostDirty( state ) ||\n\t\t[ 'publish', 'private', 'future' ].indexOf( post.status ) === -1\n\t);\n}\n\n/**\n * Returns true if the post can be saved, or false otherwise. A post must\n * contain a title, an excerpt, or non-empty content to be valid for save.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post can be saved.\n */\nexport function isEditedPostSaveable( state ) {\n\tif ( isSavingPost( state ) ) {\n\t\treturn false;\n\t}\n\n\t// TODO: Post should not be saveable if not dirty. Cannot be added here at\n\t// this time since posts where meta boxes are present can be saved even if\n\t// the post is not dirty. Currently this restriction is imposed at UI, but\n\t// should be moved here.\n\t//\n\t// See: `isEditedPostPublishable` (includes `isEditedPostDirty` condition)\n\t// See: <PostSavedState /> (`forceIsDirty` prop)\n\t// See: <PostPublishButton /> (`forceIsDirty` prop)\n\t// See: https://github.com/WordPress/gutenberg/pull/4184.\n\n\treturn (\n\t\t!! getEditedPostAttribute( state, 'title' ) ||\n\t\t!! getEditedPostAttribute( state, 'excerpt' ) ||\n\t\t! isEditedPostEmpty( state ) ||\n\t\tPlatform.OS === 'native'\n\t);\n}\n\n/**\n * Returns true if the edited post has content. A post has content if it has at\n * least one saveable block or otherwise has a non-empty content property\n * assigned.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether post has content.\n */\nexport function isEditedPostEmpty( state ) {\n\t// While the condition of truthy content string is sufficient to determine\n\t// emptiness, testing saveable blocks length is a trivial operation. Since\n\t// this function can be called frequently, optimize for the fast case as a\n\t// condition of the mere existence of blocks. Note that the value of edited\n\t// content takes precedent over block content, and must fall through to the\n\t// default logic.\n\tconst blocks = getEditorBlocks( state );\n\n\tif ( blocks.length ) {\n\t\t// Pierce the abstraction of the serializer in knowing that blocks are\n\t\t// joined with newlines such that even if every individual block\n\t\t// produces an empty save result, the serialized content is non-empty.\n\t\tif ( blocks.length > 1 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// There are two conditions under which the optimization cannot be\n\t\t// assumed, and a fallthrough to getEditedPostContent must occur:\n\t\t//\n\t\t// 1. getBlocksForSerialization has special treatment in omitting a\n\t\t// single unmodified default block.\n\t\t// 2. Comment delimiters are omitted for a freeform or unregistered\n\t\t// block in its serialization. The freeform block specifically may\n\t\t// produce an empty string in its saved output.\n\t\t//\n\t\t// For all other content, the single block is assumed to make a post\n\t\t// non-empty, if only by virtue of its own comment delimiters.\n\t\tconst blockName = blocks[ 0 ].name;\n\t\tif (\n\t\t\tblockName !== getDefaultBlockName() &&\n\t\t\tblockName !== getFreeformContentHandlerName()\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn ! getEditedPostContent( state );\n}\n\n/**\n * Returns true if the post can be autosaved, or false otherwise.\n *\n * @param {Object} state Global application state.\n * @param {Object} autosave A raw autosave object from the REST API.\n *\n * @return {boolean} Whether the post can be autosaved.\n */\nexport const isEditedPostAutosaveable = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\t// A post must contain a title, an excerpt, or non-empty content to be valid for autosaving.\n\t\tif ( ! isEditedPostSaveable( state ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// A post is not autosavable when there is a post autosave lock.\n\t\tif ( isPostAutosavingLocked( state ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst postId = getCurrentPostId( state );\n\t\tconst hasFetchedAutosave = select( coreStore ).hasFetchedAutosaves(\n\t\t\tpostType,\n\t\t\tpostId\n\t\t);\n\t\tconst currentUserId = select( coreStore ).getCurrentUser()?.id;\n\n\t\t// Disable reason - this line causes the side-effect of fetching the autosave\n\t\t// via a resolver, moving below the return would result in the autosave never\n\t\t// being fetched.\n\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\tconst autosave = select( coreStore ).getAutosave(\n\t\t\tpostType,\n\t\t\tpostId,\n\t\t\tcurrentUserId\n\t\t);\n\n\t\t// If any existing autosaves have not yet been fetched, this function is\n\t\t// unable to determine if the post is autosaveable, so return false.\n\t\tif ( ! hasFetchedAutosave ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If we don't already have an autosave, the post is autosaveable.\n\t\tif ( ! autosave ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// To avoid an expensive content serialization, use the content dirtiness\n\t\t// flag in place of content field comparison against the known autosave.\n\t\t// This is not strictly accurate, and relies on a tolerance toward autosave\n\t\t// request failures for unnecessary saves.\n\t\tif ( hasChangedContent( state ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If the title or excerpt has changed, the post is autosaveable.\n\t\treturn [ 'title', 'excerpt' ].some(\n\t\t\t( field ) =>\n\t\t\t\tgetPostRawValue( autosave[ field ] ) !==\n\t\t\t\tgetEditedPostAttribute( state, field )\n\t\t);\n\t}\n);\n\n/**\n * Return true if the post being edited is being scheduled. Preferring the\n * unsaved status values.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post has been published.\n */\nexport function isEditedPostBeingScheduled( state ) {\n\tconst date = getEditedPostAttribute( state, 'date' );\n\t// Offset the date by one minute (network latency).\n\tconst checkedDate = new Date(\n\t\tNumber( getDate( date ) ) - ONE_MINUTE_IN_MS\n\t);\n\n\treturn isInTheFuture( checkedDate );\n}\n\n/**\n * Returns whether the current post should be considered to have a \"floating\"\n * date (i.e. that it would publish \"Immediately\" rather than at a set time).\n *\n * Unlike in the PHP backend, the REST API returns a full date string for posts\n * where the 0000-00-00T00:00:00 placeholder is present in the database. To\n * infer that a post is set to publish \"Immediately\" we check whether the date\n * and modified date are the same.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether the edited post has a floating date value.\n */\nexport function isEditedPostDateFloating( state ) {\n\tconst date = getEditedPostAttribute( state, 'date' );\n\tconst modified = getEditedPostAttribute( state, 'modified' );\n\n\t// This should be the status of the persisted post\n\t// It shouldn't use the \"edited\" status otherwise it breaks the\n\t// inferred post data floating status\n\t// See https://github.com/WordPress/gutenberg/issues/28083.\n\tconst status = getCurrentPost( state ).status;\n\tif (\n\t\tstatus === 'draft' ||\n\t\tstatus === 'auto-draft' ||\n\t\tstatus === 'pending'\n\t) {\n\t\treturn date === modified || date === null;\n\t}\n\treturn false;\n}\n\n/**\n * Returns true if the post is currently being deleted, or false otherwise.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether post is being deleted.\n */\nexport function isDeletingPost( state ) {\n\treturn !! state.deleting.pending;\n}\n\n/**\n * Returns true if the post is currently being saved, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether post is being saved.\n */\nexport const isSavingPost = createRegistrySelector( ( select ) => ( state ) => {\n\tconst postType = getCurrentPostType( state );\n\tconst postId = getCurrentPostId( state );\n\treturn select( coreStore ).isSavingEntityRecord(\n\t\t'postType',\n\t\tpostType,\n\t\tpostId\n\t);\n} );\n\n/**\n * Returns true if non-post entities are currently being saved, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether non-post entities are being saved.\n */\nexport const isSavingNonPostEntityChanges = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst entitiesBeingSaved =\n\t\t\tselect( coreStore ).__experimentalGetEntitiesBeingSaved();\n\t\tconst { type, id } = getCurrentPost( state );\n\t\treturn entitiesBeingSaved.some(\n\t\t\t( entityRecord ) =>\n\t\t\t\tentityRecord.kind !== 'postType' ||\n\t\t\t\tentityRecord.name !== type ||\n\t\t\t\tentityRecord.key !== id\n\t\t);\n\t}\n);\n\n/**\n * Returns true if a previous post save was attempted successfully, or false\n * otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post was saved successfully.\n */\nexport const didPostSaveRequestSucceed = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst postId = getCurrentPostId( state );\n\t\treturn ! select( coreStore ).getLastEntitySaveError(\n\t\t\t'postType',\n\t\t\tpostType,\n\t\t\tpostId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if a previous post save was attempted but failed, or false\n * otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post save failed.\n */\nexport const didPostSaveRequestFail = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst postId = getCurrentPostId( state );\n\t\treturn !! select( coreStore ).getLastEntitySaveError(\n\t\t\t'postType',\n\t\t\tpostType,\n\t\t\tpostId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if the post is autosaving, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post is autosaving.\n */\nexport function isAutosavingPost( state ) {\n\tif ( ! isSavingPost( state ) ) {\n\t\treturn false;\n\t}\n\treturn Boolean( state.saving.options?.isAutosave );\n}\n\n/**\n * Returns true if the post is being previewed, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the post is being previewed.\n */\nexport function isPreviewingPost( state ) {\n\tif ( ! isSavingPost( state ) ) {\n\t\treturn false;\n\t}\n\treturn Boolean( state.saving.options?.isPreview );\n}\n\n/**\n * Returns the post preview link\n *\n * @param {Object} state Global application state.\n *\n * @return {string | undefined} Preview Link.\n */\nexport function getEditedPostPreviewLink( state ) {\n\tif ( state.saving.pending || isSavingPost( state ) ) {\n\t\treturn;\n\t}\n\n\tlet previewLink = getAutosaveAttribute( state, 'preview_link' );\n\t// Fix for issue: https://github.com/WordPress/gutenberg/issues/33616\n\t// If the post is draft, ignore the preview link from the autosave record,\n\t// because the preview could be a stale autosave if the post was switched from\n\t// published to draft.\n\t// See: https://github.com/WordPress/gutenberg/pull/37952.\n\tif ( ! previewLink || 'draft' === getCurrentPost( state ).status ) {\n\t\tpreviewLink = getEditedPostAttribute( state, 'link' );\n\t\tif ( previewLink ) {\n\t\t\tpreviewLink = addQueryArgs( previewLink, { preview: true } );\n\t\t}\n\t}\n\tconst featuredImageId = getEditedPostAttribute( state, 'featured_media' );\n\n\tif ( previewLink && featuredImageId ) {\n\t\treturn addQueryArgs( previewLink, { _thumbnail_id: featuredImageId } );\n\t}\n\n\treturn previewLink;\n}\n\n/**\n * Returns a suggested post format for the current post, inferred only if there\n * is a single block within the post and it is of a type known to match a\n * default post format. Returns null if the format cannot be determined.\n *\n * @param {Object} state Global application state.\n *\n * @return {?string} Suggested post format.\n */\nexport function getSuggestedPostFormat( state ) {\n\tconst blocks = getEditorBlocks( state );\n\n\tif ( blocks.length > 2 ) return null;\n\n\tlet name;\n\t// If there is only one block in the content of the post grab its name\n\t// so we can derive a suitable post format from it.\n\tif ( blocks.length === 1 ) {\n\t\tname = blocks[ 0 ].name;\n\t\t// Check for core/embed `video` and `audio` eligible suggestions.\n\t\tif ( name === 'core/embed' ) {\n\t\t\tconst provider = blocks[ 0 ].attributes?.providerNameSlug;\n\t\t\tif ( [ 'youtube', 'vimeo' ].includes( provider ) ) {\n\t\t\t\tname = 'core/video';\n\t\t\t} else if ( [ 'spotify', 'soundcloud' ].includes( provider ) ) {\n\t\t\t\tname = 'core/audio';\n\t\t\t}\n\t\t}\n\t}\n\n\t// If there are two blocks in the content and the last one is a text blocks\n\t// grab the name of the first one to also suggest a post format from it.\n\tif ( blocks.length === 2 && blocks[ 1 ].name === 'core/paragraph' ) {\n\t\tname = blocks[ 0 ].name;\n\t}\n\n\t// We only convert to default post formats in core.\n\tswitch ( name ) {\n\t\tcase 'core/image':\n\t\t\treturn 'image';\n\t\tcase 'core/quote':\n\t\tcase 'core/pullquote':\n\t\t\treturn 'quote';\n\t\tcase 'core/gallery':\n\t\t\treturn 'gallery';\n\t\tcase 'core/video':\n\t\t\treturn 'video';\n\t\tcase 'core/audio':\n\t\t\treturn 'audio';\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\n/**\n * Returns the content of the post being edited.\n *\n * @param {Object} state Global application state.\n *\n * @return {string} Post content.\n */\nexport const getEditedPostContent = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst postId = getCurrentPostId( state );\n\t\tconst postType = getCurrentPostType( state );\n\t\tconst record = select( coreStore ).getEditedEntityRecord(\n\t\t\t'postType',\n\t\t\tpostType,\n\t\t\tpostId\n\t\t);\n\t\tif ( record ) {\n\t\t\tif ( typeof record.content === 'function' ) {\n\t\t\t\treturn record.content( record );\n\t\t\t} else if ( record.blocks ) {\n\t\t\t\treturn __unstableSerializeAndClean( record.blocks );\n\t\t\t} else if ( record.content ) {\n\t\t\t\treturn record.content;\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t}\n);\n\n/**\n * Returns true if the post is being published, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether post is being published.\n */\nexport function isPublishingPost( state ) {\n\treturn (\n\t\tisSavingPost( state ) &&\n\t\t! isCurrentPostPublished( state ) &&\n\t\tgetEditedPostAttribute( state, 'status' ) === 'publish'\n\t);\n}\n\n/**\n * Returns whether the permalink is editable or not.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether or not the permalink is editable.\n */\nexport function isPermalinkEditable( state ) {\n\tconst permalinkTemplate = getEditedPostAttribute(\n\t\tstate,\n\t\t'permalink_template'\n\t);\n\n\treturn PERMALINK_POSTNAME_REGEX.test( permalinkTemplate );\n}\n\n/**\n * Returns the permalink for the post.\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} The permalink, or null if the post is not viewable.\n */\nexport function getPermalink( state ) {\n\tconst permalinkParts = getPermalinkParts( state );\n\tif ( ! permalinkParts ) {\n\t\treturn null;\n\t}\n\n\tconst { prefix, postName, suffix } = permalinkParts;\n\n\tif ( isPermalinkEditable( state ) ) {\n\t\treturn prefix + postName + suffix;\n\t}\n\n\treturn prefix;\n}\n\n/**\n * Returns the slug for the post being edited, preferring a manually edited\n * value if one exists, then a sanitized version of the current post title, and\n * finally the post ID.\n *\n * @param {Object} state Editor state.\n *\n * @return {string} The current slug to be displayed in the editor\n */\nexport function getEditedPostSlug( state ) {\n\treturn (\n\t\tgetEditedPostAttribute( state, 'slug' ) ||\n\t\tcleanForSlug( getEditedPostAttribute( state, 'title' ) ) ||\n\t\tgetCurrentPostId( state )\n\t);\n}\n\n/**\n * Returns the permalink for a post, split into it's three parts: the prefix,\n * the postName, and the suffix.\n *\n * @param {Object} state Editor state.\n *\n * @return {Object} An object containing the prefix, postName, and suffix for\n * the permalink, or null if the post is not viewable.\n */\nexport function getPermalinkParts( state ) {\n\tconst permalinkTemplate = getEditedPostAttribute(\n\t\tstate,\n\t\t'permalink_template'\n\t);\n\tif ( ! permalinkTemplate ) {\n\t\treturn null;\n\t}\n\n\tconst postName =\n\t\tgetEditedPostAttribute( state, 'slug' ) ||\n\t\tgetEditedPostAttribute( state, 'generated_slug' );\n\n\tconst [ prefix, suffix ] = permalinkTemplate.split(\n\t\tPERMALINK_POSTNAME_REGEX\n\t);\n\n\treturn {\n\t\tprefix,\n\t\tpostName,\n\t\tsuffix,\n\t};\n}\n\n/**\n * Returns whether the post is locked.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Is locked.\n */\nexport function isPostLocked( state ) {\n\treturn state.postLock.isLocked;\n}\n\n/**\n * Returns whether post saving is locked.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Is locked.\n */\nexport function isPostSavingLocked( state ) {\n\treturn Object.keys( state.postSavingLock ).length > 0;\n}\n\n/**\n * Returns whether post autosaving is locked.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Is locked.\n */\nexport function isPostAutosavingLocked( state ) {\n\treturn Object.keys( state.postAutosavingLock ).length > 0;\n}\n\n/**\n * Returns whether the edition of the post has been taken over.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Is post lock takeover.\n */\nexport function isPostLockTakeover( state ) {\n\treturn state.postLock.isTakeover;\n}\n\n/**\n * Returns details about the post lock user.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} A user object.\n */\nexport function getPostLockUser( state ) {\n\treturn state.postLock.user;\n}\n\n/**\n * Returns the active post lock.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The lock object.\n */\nexport function getActivePostLock( state ) {\n\treturn state.postLock.activePostLock;\n}\n\n/**\n * Returns whether or not the user has the unfiltered_html capability.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether the user can or can't post unfiltered HTML.\n */\nexport function canUserUseUnfilteredHTML( state ) {\n\treturn Boolean(\n\t\tgetCurrentPost( state )._links?.hasOwnProperty(\n\t\t\t'wp:action-unfiltered-html'\n\t\t)\n\t);\n}\n\n/**\n * Returns whether the pre-publish panel should be shown\n * or skipped when the user clicks the \"publish\" button.\n *\n * @return {boolean} Whether the pre-publish panel should be shown or not.\n */\nexport const isPublishSidebarEnabled = createRegistrySelector(\n\t( select ) => () =>\n\t\t!! select( preferencesStore ).get(\n\t\t\t'core/edit-post',\n\t\t\t'isPublishSidebarEnabled'\n\t\t)\n);\n\n/**\n * Return the current block list.\n *\n * @param {Object} state\n * @return {Array} Block list.\n */\nexport function getEditorBlocks( state ) {\n\treturn getEditedPostAttribute( state, 'blocks' ) || EMPTY_ARRAY;\n}\n\n/**\n * A block selection object.\n *\n * @typedef {Object} WPBlockSelection\n *\n * @property {string} clientId A block client ID.\n * @property {string} attributeKey A block attribute key.\n * @property {number} offset An attribute value offset, based on the rich\n * text value. See `wp.richText.create`.\n */\n\n/**\n * Returns the current selection start.\n *\n * @param {Object} state\n * @return {WPBlockSelection} The selection start.\n *\n * @deprecated since Gutenberg 10.0.0.\n */\nexport function getEditorSelectionStart( state ) {\n\tdeprecated( \"select('core/editor').getEditorSelectionStart\", {\n\t\tsince: '5.8',\n\t\talternative: \"select('core/editor').getEditorSelection\",\n\t} );\n\treturn getEditedPostAttribute( state, 'selection' )?.selectionStart;\n}\n\n/**\n * Returns the current selection end.\n *\n * @param {Object} state\n * @return {WPBlockSelection} The selection end.\n *\n * @deprecated since Gutenberg 10.0.0.\n */\nexport function getEditorSelectionEnd( state ) {\n\tdeprecated( \"select('core/editor').getEditorSelectionStart\", {\n\t\tsince: '5.8',\n\t\talternative: \"select('core/editor').getEditorSelection\",\n\t} );\n\treturn getEditedPostAttribute( state, 'selection' )?.selectionEnd;\n}\n\n/**\n * Returns the current selection.\n *\n * @param {Object} state\n * @return {WPBlockSelection} The selection end.\n */\nexport function getEditorSelection( state ) {\n\treturn getEditedPostAttribute( state, 'selection' );\n}\n\n/**\n * Is the editor ready\n *\n * @param {Object} state\n * @return {boolean} is Ready.\n */\nexport function __unstableIsEditorReady( state ) {\n\treturn state.isReady;\n}\n\n/**\n * Returns the post editor settings.\n *\n * @param {Object} state Editor state.\n *\n * @return {Object} The editor settings object.\n */\nexport function getEditorSettings( state ) {\n\treturn state.editorSettings;\n}\n\n/*\n * Backward compatibility\n */\n\n/**\n * Returns state object prior to a specified optimist transaction ID, or `null`\n * if the transaction corresponding to the given ID cannot be found.\n *\n * @deprecated since Gutenberg 9.7.0.\n */\nexport function getStateBeforeOptimisticTransaction() {\n\tdeprecated( \"select('core/editor').getStateBeforeOptimisticTransaction\", {\n\t\tsince: '5.7',\n\t\thint: 'No state history is kept on this store anymore',\n\t} );\n\n\treturn null;\n}\n/**\n * Returns true if an optimistic transaction is pending commit, for which the\n * before state satisfies the given predicate function.\n *\n * @deprecated since Gutenberg 9.7.0.\n */\nexport function inSomeHistory() {\n\tdeprecated( \"select('core/editor').inSomeHistory\", {\n\t\tsince: '5.7',\n\t\thint: 'No state history is kept on this store anymore',\n\t} );\n\treturn false;\n}\n\nfunction getBlockEditorSelector( name ) {\n\treturn createRegistrySelector( ( select ) => ( state, ...args ) => {\n\t\tdeprecated( \"`wp.data.select( 'core/editor' ).\" + name + '`', {\n\t\t\tsince: '5.3',\n\t\t\talternative: \"`wp.data.select( 'core/block-editor' ).\" + name + '`',\n\t\t\tversion: '6.2',\n\t\t} );\n\n\t\treturn select( blockEditorStore )[ name ]( ...args );\n\t} );\n}\n\n/**\n * @see getBlockName in core/block-editor store.\n */\nexport const getBlockName = getBlockEditorSelector( 'getBlockName' );\n\n/**\n * @see isBlockValid in core/block-editor store.\n */\nexport const isBlockValid = getBlockEditorSelector( 'isBlockValid' );\n\n/**\n * @see getBlockAttributes in core/block-editor store.\n */\nexport const getBlockAttributes =\n\tgetBlockEditorSelector( 'getBlockAttributes' );\n\n/**\n * @see getBlock in core/block-editor store.\n */\nexport const getBlock = getBlockEditorSelector( 'getBlock' );\n\n/**\n * @see getBlocks in core/block-editor store.\n */\nexport const getBlocks = getBlockEditorSelector( 'getBlocks' );\n\n/**\n * @see getClientIdsOfDescendants in core/block-editor store.\n */\nexport const getClientIdsOfDescendants = getBlockEditorSelector(\n\t'getClientIdsOfDescendants'\n);\n\n/**\n * @see getClientIdsWithDescendants in core/block-editor store.\n */\nexport const getClientIdsWithDescendants = getBlockEditorSelector(\n\t'getClientIdsWithDescendants'\n);\n\n/**\n * @see getGlobalBlockCount in core/block-editor store.\n */\nexport const getGlobalBlockCount = getBlockEditorSelector(\n\t'getGlobalBlockCount'\n);\n\n/**\n * @see getBlocksByClientId in core/block-editor store.\n */\nexport const getBlocksByClientId = getBlockEditorSelector(\n\t'getBlocksByClientId'\n);\n\n/**\n * @see getBlockCount in core/block-editor store.\n */\nexport const getBlockCount = getBlockEditorSelector( 'getBlockCount' );\n\n/**\n * @see getBlockSelectionStart in core/block-editor store.\n */\nexport const getBlockSelectionStart = getBlockEditorSelector(\n\t'getBlockSelectionStart'\n);\n\n/**\n * @see getBlockSelectionEnd in core/block-editor store.\n */\nexport const getBlockSelectionEnd = getBlockEditorSelector(\n\t'getBlockSelectionEnd'\n);\n\n/**\n * @see getSelectedBlockCount in core/block-editor store.\n */\nexport const getSelectedBlockCount = getBlockEditorSelector(\n\t'getSelectedBlockCount'\n);\n\n/**\n * @see hasSelectedBlock in core/block-editor store.\n */\nexport const hasSelectedBlock = getBlockEditorSelector( 'hasSelectedBlock' );\n\n/**\n * @see getSelectedBlockClientId in core/block-editor store.\n */\nexport const getSelectedBlockClientId = getBlockEditorSelector(\n\t'getSelectedBlockClientId'\n);\n\n/**\n * @see getSelectedBlock in core/block-editor store.\n */\nexport const getSelectedBlock = getBlockEditorSelector( 'getSelectedBlock' );\n\n/**\n * @see getBlockRootClientId in core/block-editor store.\n */\nexport const getBlockRootClientId = getBlockEditorSelector(\n\t'getBlockRootClientId'\n);\n\n/**\n * @see getBlockHierarchyRootClientId in core/block-editor store.\n */\nexport const getBlockHierarchyRootClientId = getBlockEditorSelector(\n\t'getBlockHierarchyRootClientId'\n);\n\n/**\n * @see getAdjacentBlockClientId in core/block-editor store.\n */\nexport const getAdjacentBlockClientId = getBlockEditorSelector(\n\t'getAdjacentBlockClientId'\n);\n\n/**\n * @see getPreviousBlockClientId in core/block-editor store.\n */\nexport const getPreviousBlockClientId = getBlockEditorSelector(\n\t'getPreviousBlockClientId'\n);\n\n/**\n * @see getNextBlockClientId in core/block-editor store.\n */\nexport const getNextBlockClientId = getBlockEditorSelector(\n\t'getNextBlockClientId'\n);\n\n/**\n * @see getSelectedBlocksInitialCaretPosition in core/block-editor store.\n */\nexport const getSelectedBlocksInitialCaretPosition = getBlockEditorSelector(\n\t'getSelectedBlocksInitialCaretPosition'\n);\n\n/**\n * @see getMultiSelectedBlockClientIds in core/block-editor store.\n */\nexport const getMultiSelectedBlockClientIds = getBlockEditorSelector(\n\t'getMultiSelectedBlockClientIds'\n);\n\n/**\n * @see getMultiSelectedBlocks in core/block-editor store.\n */\nexport const getMultiSelectedBlocks = getBlockEditorSelector(\n\t'getMultiSelectedBlocks'\n);\n\n/**\n * @see getFirstMultiSelectedBlockClientId in core/block-editor store.\n */\nexport const getFirstMultiSelectedBlockClientId = getBlockEditorSelector(\n\t'getFirstMultiSelectedBlockClientId'\n);\n\n/**\n * @see getLastMultiSelectedBlockClientId in core/block-editor store.\n */\nexport const getLastMultiSelectedBlockClientId = getBlockEditorSelector(\n\t'getLastMultiSelectedBlockClientId'\n);\n\n/**\n * @see isFirstMultiSelectedBlock in core/block-editor store.\n */\nexport const isFirstMultiSelectedBlock = getBlockEditorSelector(\n\t'isFirstMultiSelectedBlock'\n);\n\n/**\n * @see isBlockMultiSelected in core/block-editor store.\n */\nexport const isBlockMultiSelected = getBlockEditorSelector(\n\t'isBlockMultiSelected'\n);\n\n/**\n * @see isAncestorMultiSelected in core/block-editor store.\n */\nexport const isAncestorMultiSelected = getBlockEditorSelector(\n\t'isAncestorMultiSelected'\n);\n\n/**\n * @see getMultiSelectedBlocksStartClientId in core/block-editor store.\n */\nexport const getMultiSelectedBlocksStartClientId = getBlockEditorSelector(\n\t'getMultiSelectedBlocksStartClientId'\n);\n\n/**\n * @see getMultiSelectedBlocksEndClientId in core/block-editor store.\n */\nexport const getMultiSelectedBlocksEndClientId = getBlockEditorSelector(\n\t'getMultiSelectedBlocksEndClientId'\n);\n\n/**\n * @see getBlockOrder in core/block-editor store.\n */\nexport const getBlockOrder = getBlockEditorSelector( 'getBlockOrder' );\n\n/**\n * @see getBlockIndex in core/block-editor store.\n */\nexport const getBlockIndex = getBlockEditorSelector( 'getBlockIndex' );\n\n/**\n * @see isBlockSelected in core/block-editor store.\n */\nexport const isBlockSelected = getBlockEditorSelector( 'isBlockSelected' );\n\n/**\n * @see hasSelectedInnerBlock in core/block-editor store.\n */\nexport const hasSelectedInnerBlock = getBlockEditorSelector(\n\t'hasSelectedInnerBlock'\n);\n\n/**\n * @see isBlockWithinSelection in core/block-editor store.\n */\nexport const isBlockWithinSelection = getBlockEditorSelector(\n\t'isBlockWithinSelection'\n);\n\n/**\n * @see hasMultiSelection in core/block-editor store.\n */\nexport const hasMultiSelection = getBlockEditorSelector( 'hasMultiSelection' );\n\n/**\n * @see isMultiSelecting in core/block-editor store.\n */\nexport const isMultiSelecting = getBlockEditorSelector( 'isMultiSelecting' );\n\n/**\n * @see isSelectionEnabled in core/block-editor store.\n */\nexport const isSelectionEnabled =\n\tgetBlockEditorSelector( 'isSelectionEnabled' );\n\n/**\n * @see getBlockMode in core/block-editor store.\n */\nexport const getBlockMode = getBlockEditorSelector( 'getBlockMode' );\n\n/**\n * @see isTyping in core/block-editor store.\n */\nexport const isTyping = getBlockEditorSelector( 'isTyping' );\n\n/**\n * @see isCaretWithinFormattedText in core/block-editor store.\n */\nexport const isCaretWithinFormattedText = getBlockEditorSelector(\n\t'isCaretWithinFormattedText'\n);\n\n/**\n * @see getBlockInsertionPoint in core/block-editor store.\n */\nexport const getBlockInsertionPoint = getBlockEditorSelector(\n\t'getBlockInsertionPoint'\n);\n\n/**\n * @see isBlockInsertionPointVisible in core/block-editor store.\n */\nexport const isBlockInsertionPointVisible = getBlockEditorSelector(\n\t'isBlockInsertionPointVisible'\n);\n\n/**\n * @see isValidTemplate in core/block-editor store.\n */\nexport const isValidTemplate = getBlockEditorSelector( 'isValidTemplate' );\n\n/**\n * @see getTemplate in core/block-editor store.\n */\nexport const getTemplate = getBlockEditorSelector( 'getTemplate' );\n\n/**\n * @see getTemplateLock in core/block-editor store.\n */\nexport const getTemplateLock = getBlockEditorSelector( 'getTemplateLock' );\n\n/**\n * @see canInsertBlockType in core/block-editor store.\n */\nexport const canInsertBlockType =\n\tgetBlockEditorSelector( 'canInsertBlockType' );\n\n/**\n * @see getInserterItems in core/block-editor store.\n */\nexport const getInserterItems = getBlockEditorSelector( 'getInserterItems' );\n\n/**\n * @see hasInserterItems in core/block-editor store.\n */\nexport const hasInserterItems = getBlockEditorSelector( 'hasInserterItems' );\n\n/**\n * @see getBlockListSettings in core/block-editor store.\n */\nexport const getBlockListSettings = getBlockEditorSelector(\n\t'getBlockListSettings'\n);\n\n/**\n * Returns the default template types.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The template types.\n */\nexport function __experimentalGetDefaultTemplateTypes( state ) {\n\treturn getEditorSettings( state )?.defaultTemplateTypes;\n}\n\n/**\n * Returns the default template part areas.\n *\n * @param {Object} state Global application state.\n *\n * @return {Array} The template part areas.\n */\nexport const __experimentalGetDefaultTemplatePartAreas = createSelector(\n\t( state ) => {\n\t\tconst areas =\n\t\t\tgetEditorSettings( state )?.defaultTemplatePartAreas || [];\n\t\treturn areas?.map( ( item ) => {\n\t\t\treturn { ...item, icon: getTemplatePartIcon( item.icon ) };\n\t\t} );\n\t},\n\t( state ) => [ getEditorSettings( state )?.defaultTemplatePartAreas ]\n);\n\n/**\n * Returns a default template type searched by slug.\n *\n * @param {Object} state Global application state.\n * @param {string} slug The template type slug.\n *\n * @return {Object} The template type.\n */\nexport const __experimentalGetDefaultTemplateType = createSelector(\n\t( state, slug ) => {\n\t\tconst templateTypes = __experimentalGetDefaultTemplateTypes( state );\n\t\tif ( ! templateTypes ) {\n\t\t\treturn EMPTY_OBJECT;\n\t\t}\n\n\t\treturn (\n\t\t\tObject.values( templateTypes ).find(\n\t\t\t\t( type ) => type.slug === slug\n\t\t\t) ?? EMPTY_OBJECT\n\t\t);\n\t},\n\t( state, slug ) => [ __experimentalGetDefaultTemplateTypes( state ), slug ]\n);\n\n/**\n * Given a template entity, return information about it which is ready to be\n * rendered, such as the title, description, and icon.\n *\n * @param {Object} state Global application state.\n * @param {Object} template The template for which we need information.\n * @return {Object} Information about the template, including title, description, and icon.\n */\nexport function __experimentalGetTemplateInfo( state, template ) {\n\tif ( ! template ) {\n\t\treturn EMPTY_OBJECT;\n\t}\n\n\tconst { description, slug, title, area } = template;\n\tconst { title: defaultTitle, description: defaultDescription } =\n\t\t__experimentalGetDefaultTemplateType( state, slug );\n\n\tconst templateTitle = typeof title === 'string' ? title : title?.rendered;\n\tconst templateDescription =\n\t\ttypeof description === 'string' ? description : description?.raw;\n\tconst templateIcon =\n\t\t__experimentalGetDefaultTemplatePartAreas( state ).find(\n\t\t\t( item ) => area === item.area\n\t\t)?.icon || layout;\n\n\treturn {\n\t\ttitle:\n\t\t\ttemplateTitle && templateTitle !== slug\n\t\t\t\t? templateTitle\n\t\t\t\t: defaultTitle || slug,\n\t\tdescription: templateDescription || defaultDescription,\n\t\ticon: templateIcon,\n\t};\n}\n\n/**\n * Returns a post type label depending on the current post.\n *\n * @param {Object} state Global application state.\n *\n * @return {string|undefined} The post type label if available, otherwise undefined.\n */\nexport const getPostTypeLabel = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst currentPostType = getCurrentPostType( state );\n\t\tconst postType = select( coreStore ).getPostType( currentPostType );\n\t\t// Disable reason: Post type labels object is shaped like this.\n\t\t// eslint-disable-next-line camelcase\n\t\treturn postType?.labels?.singular_name;\n\t}\n);\n"]}