@wordpress/editor 13.32.0 → 13.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +225 -2
  3. package/build/bindings/index.js.map +1 -1
  4. package/build/bindings/pattern-overrides.js.map +1 -1
  5. package/build/bindings/post-meta.js +12 -30
  6. package/build/bindings/post-meta.js.map +1 -1
  7. package/build/components/autocompleters/index.js.map +1 -1
  8. package/build/components/autocompleters/user.js.map +1 -1
  9. package/build/components/autosave-monitor/index.js +10 -0
  10. package/build/components/autosave-monitor/index.js.map +1 -1
  11. package/build/components/block-manager/category.js.map +1 -1
  12. package/build/components/block-manager/checklist.js.map +1 -1
  13. package/build/components/block-manager/index.js.map +1 -1
  14. package/build/components/block-removal-warnings/index.js.map +1 -1
  15. package/build/components/block-settings-menu/plugin-block-settings-menu-item.js.map +1 -1
  16. package/build/components/character-count/index.js.map +1 -1
  17. package/build/components/commands/index.js +19 -0
  18. package/build/components/commands/index.js.map +1 -1
  19. package/build/components/commands/index.native.js.map +1 -1
  20. package/build/components/deprecated.js.map +1 -1
  21. package/build/components/deprecated.native.js.map +1 -1
  22. package/build/components/document-bar/index.js.map +1 -1
  23. package/build/components/document-outline/check.js.map +1 -1
  24. package/build/components/document-outline/index.js.map +1 -1
  25. package/build/components/document-outline/item.js.map +1 -1
  26. package/build/components/document-tools/index.js +1 -1
  27. package/build/components/document-tools/index.js.map +1 -1
  28. package/build/components/editor-canvas/edit-template-blocks-notification.js +13 -2
  29. package/build/components/editor-canvas/edit-template-blocks-notification.js.map +1 -1
  30. package/build/components/editor-canvas/index.js +2 -2
  31. package/build/components/editor-canvas/index.js.map +1 -1
  32. package/build/components/editor-help/add-blocks.native.js.map +1 -1
  33. package/build/components/editor-help/customize-blocks.native.js.map +1 -1
  34. package/build/components/editor-help/help-detail-navigation-screen.native.js.map +1 -1
  35. package/build/components/editor-help/help-get-support-button.native.js.map +1 -1
  36. package/build/components/editor-help/help-section-title.native.js.map +1 -1
  37. package/build/components/editor-help/help-topic-row.native.js.map +1 -1
  38. package/build/components/editor-help/icon-move-blocks.native.js.map +1 -1
  39. package/build/components/editor-help/index.native.js.map +1 -1
  40. package/build/components/editor-help/intro-to-blocks.native.js.map +1 -1
  41. package/build/components/editor-help/move-blocks.native.js.map +1 -1
  42. package/build/components/editor-help/remove-blocks.native.js.map +1 -1
  43. package/build/components/editor-help/view-sections.native.js.map +1 -1
  44. package/build/components/editor-history/redo.js.map +1 -1
  45. package/build/components/editor-history/undo.js.map +1 -1
  46. package/build/components/editor-notices/index.js.map +1 -1
  47. package/build/components/editor-snackbars/index.js.map +1 -1
  48. package/build/components/entities-saved-states/entity-record-item.js.map +1 -1
  49. package/build/components/entities-saved-states/entity-type-list.js.map +1 -1
  50. package/build/components/entities-saved-states/hooks/use-is-dirty.js.map +1 -1
  51. package/build/components/entities-saved-states/index.js.map +1 -1
  52. package/build/components/error-boundary/index.js.map +1 -1
  53. package/build/components/error-boundary/index.native.js.map +1 -1
  54. package/build/components/global-keyboard-shortcuts/index.js +24 -0
  55. package/build/components/global-keyboard-shortcuts/index.js.map +1 -1
  56. package/build/components/global-keyboard-shortcuts/register-shortcuts.js +18 -0
  57. package/build/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
  58. package/build/components/index.js +33 -1
  59. package/build/components/index.js.map +1 -1
  60. package/build/components/index.native.js.map +1 -1
  61. package/build/components/inserter-sidebar/index.js.map +1 -1
  62. package/build/components/keyboard-shortcut-help-modal/config.js +78 -0
  63. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -0
  64. package/build/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +49 -0
  65. package/build/components/keyboard-shortcut-help-modal/dynamic-shortcut.js.map +1 -0
  66. package/build/components/keyboard-shortcut-help-modal/index.js +126 -0
  67. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -0
  68. package/build/components/keyboard-shortcut-help-modal/shortcut.js +55 -0
  69. package/build/components/keyboard-shortcut-help-modal/shortcut.js.map +1 -0
  70. package/build/components/list-view-sidebar/index.js.map +1 -1
  71. package/build/components/list-view-sidebar/list-view-outline.js.map +1 -1
  72. package/build/components/local-autosave-monitor/index.js.map +1 -1
  73. package/build/components/media-categories/index.js.map +1 -1
  74. package/build/components/mode-switcher/index.js.map +1 -1
  75. package/build/components/offline-status/index.native.js.map +1 -1
  76. package/build/components/page-attributes/check.js.map +1 -1
  77. package/build/components/page-attributes/order.js.map +1 -1
  78. package/build/components/page-attributes/panel.js.map +1 -1
  79. package/build/components/page-attributes/parent.js.map +1 -1
  80. package/build/components/pattern-overrides-panel/index.js.map +1 -1
  81. package/build/components/plugin-document-setting-panel/index.js.map +1 -1
  82. package/build/components/plugin-more-menu-item/index.js +78 -0
  83. package/build/components/plugin-more-menu-item/index.js.map +1 -0
  84. package/build/components/plugin-post-publish-panel/index.js.map +1 -1
  85. package/build/components/plugin-post-status-info/index.js +73 -0
  86. package/build/components/plugin-post-status-info/index.js.map +1 -0
  87. package/build/components/plugin-pre-publish-panel/index.js.map +1 -1
  88. package/build/components/plugin-sidebar/index.js +108 -0
  89. package/build/components/plugin-sidebar/index.js.map +1 -0
  90. package/build/components/plugin-sidebar-more-menu-item/index.js +71 -0
  91. package/build/components/plugin-sidebar-more-menu-item/index.js.map +1 -0
  92. package/build/components/post-actions/actions.js +218 -17
  93. package/build/components/post-actions/actions.js.map +1 -1
  94. package/build/components/post-actions/index.js +137 -0
  95. package/build/components/post-actions/index.js.map +1 -0
  96. package/build/components/post-author/check.js.map +1 -1
  97. package/build/components/post-author/combobox.js.map +1 -1
  98. package/build/components/post-author/constants.js.map +1 -1
  99. package/build/components/post-author/hook.js.map +1 -1
  100. package/build/components/post-author/index.js.map +1 -1
  101. package/build/components/post-author/panel.js.map +1 -1
  102. package/build/components/post-author/select.js.map +1 -1
  103. package/build/components/post-card-panel/index.js +40 -6
  104. package/build/components/post-card-panel/index.js.map +1 -1
  105. package/build/components/post-comments/index.js.map +1 -1
  106. package/build/components/post-discussion/panel.js.map +1 -1
  107. package/build/components/post-excerpt/check.js +8 -0
  108. package/build/components/post-excerpt/check.js.map +1 -1
  109. package/build/components/post-excerpt/index.js.map +1 -1
  110. package/build/components/post-excerpt/panel.js.map +1 -1
  111. package/build/components/post-excerpt/plugin.js.map +1 -1
  112. package/build/components/post-featured-image/check.js.map +1 -1
  113. package/build/components/post-featured-image/index.js.map +1 -1
  114. package/build/components/post-featured-image/panel.js.map +1 -1
  115. package/build/components/post-format/check.js.map +1 -1
  116. package/build/components/post-format/index.js.map +1 -1
  117. package/build/components/post-last-revision/check.js.map +1 -1
  118. package/build/components/post-last-revision/index.js.map +1 -1
  119. package/build/components/post-last-revision/panel.js.map +1 -1
  120. package/build/components/post-locked-modal/index.js.map +1 -1
  121. package/build/components/post-panel-row/index.js.map +1 -1
  122. package/build/components/post-pending-status/check.js.map +1 -1
  123. package/build/components/post-pending-status/index.js.map +1 -1
  124. package/build/components/post-pingbacks/index.js.map +1 -1
  125. package/build/components/post-preview-button/index.js.map +1 -1
  126. package/build/components/post-publish-button/index.js +31 -31
  127. package/build/components/post-publish-button/index.js.map +1 -1
  128. package/build/components/post-publish-button/label.js +51 -43
  129. package/build/components/post-publish-button/label.js.map +1 -1
  130. package/build/components/post-publish-panel/index.js.map +1 -1
  131. package/build/components/post-publish-panel/maybe-category-panel.js.map +1 -1
  132. package/build/components/post-publish-panel/maybe-post-format-panel.js.map +1 -1
  133. package/build/components/post-publish-panel/maybe-tags-panel.js.map +1 -1
  134. package/build/components/post-publish-panel/maybe-upload-media.js.map +1 -1
  135. package/build/components/post-publish-panel/postpublish.js.map +1 -1
  136. package/build/components/post-publish-panel/prepublish.js.map +1 -1
  137. package/build/components/post-saved-state/index.js +10 -6
  138. package/build/components/post-saved-state/index.js.map +1 -1
  139. package/build/components/post-schedule/check.js.map +1 -1
  140. package/build/components/post-schedule/index.js.map +1 -1
  141. package/build/components/post-schedule/label.js.map +1 -1
  142. package/build/components/post-schedule/panel.js +8 -0
  143. package/build/components/post-schedule/panel.js.map +1 -1
  144. package/build/components/post-slug/check.js.map +1 -1
  145. package/build/components/post-slug/index.js +43 -68
  146. package/build/components/post-slug/index.js.map +1 -1
  147. package/build/components/post-status/index.js +239 -0
  148. package/build/components/post-status/index.js.map +1 -0
  149. package/build/components/post-sticky/check.js.map +1 -1
  150. package/build/components/post-sticky/index.js.map +1 -1
  151. package/build/components/post-switch-to-draft-button/index.js +6 -1
  152. package/build/components/post-switch-to-draft-button/index.js.map +1 -1
  153. package/build/components/post-sync-status/index.js.map +1 -1
  154. package/build/components/post-taxonomies/check.js.map +1 -1
  155. package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
  156. package/build/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  157. package/build/components/post-taxonomies/index.js.map +1 -1
  158. package/build/components/post-taxonomies/most-used-terms.js.map +1 -1
  159. package/build/components/post-taxonomies/panel.js.map +1 -1
  160. package/build/components/post-template/block-theme.js +6 -2
  161. package/build/components/post-template/block-theme.js.map +1 -1
  162. package/build/components/post-template/classic-theme.js.map +1 -1
  163. package/build/components/post-template/create-new-template-modal.js.map +1 -1
  164. package/build/components/post-template/create-new-template.js.map +1 -1
  165. package/build/components/post-template/hooks.js.map +1 -1
  166. package/build/components/post-template/panel.js.map +1 -1
  167. package/build/components/post-template/reset-default-template.js.map +1 -1
  168. package/build/components/post-template/swap-template-button.js.map +1 -1
  169. package/build/components/post-text-editor/index.js.map +1 -1
  170. package/build/components/post-title/constants.js.map +1 -1
  171. package/build/components/post-title/index.js.map +1 -1
  172. package/build/components/post-title/index.native.js.map +1 -1
  173. package/build/components/post-title/post-title-raw.js.map +1 -1
  174. package/build/components/post-title/use-post-title-focus.js.map +1 -1
  175. package/build/components/post-title/use-post-title.js.map +1 -1
  176. package/build/components/post-trash/check.js +23 -25
  177. package/build/components/post-trash/check.js.map +1 -1
  178. package/build/components/post-trash/index.js +2 -1
  179. package/build/components/post-trash/index.js.map +1 -1
  180. package/build/components/post-type-support-check/index.js.map +1 -1
  181. package/build/components/post-url/check.js.map +1 -1
  182. package/build/components/post-url/index.js +44 -19
  183. package/build/components/post-url/index.js.map +1 -1
  184. package/build/components/post-url/label.js.map +1 -1
  185. package/build/components/post-url/panel.js +14 -7
  186. package/build/components/post-url/panel.js.map +1 -1
  187. package/build/components/post-view-link/index.js.map +1 -1
  188. package/build/components/post-visibility/check.js.map +1 -1
  189. package/build/components/post-visibility/index.js +2 -1
  190. package/build/components/post-visibility/index.js.map +1 -1
  191. package/build/components/post-visibility/label.js.map +1 -1
  192. package/build/components/post-visibility/utils.js.map +1 -1
  193. package/build/components/preferences-modal/enable-panel.js.map +1 -1
  194. package/build/components/preferences-modal/enable-plugin-document-setting-panel.js.map +1 -1
  195. package/build/components/preferences-modal/index.js +19 -17
  196. package/build/components/preferences-modal/index.js.map +1 -1
  197. package/build/components/preview-dropdown/index.js.map +1 -1
  198. package/build/components/provider/disable-non-page-content-blocks.js.map +1 -1
  199. package/build/components/provider/index.js +4 -2
  200. package/build/components/provider/index.js.map +1 -1
  201. package/build/components/provider/index.native.js +6 -1
  202. package/build/components/provider/index.native.js.map +1 -1
  203. package/build/components/provider/navigation-block-editing-mode.js.map +1 -1
  204. package/build/components/provider/use-auto-switch-editor-sidebars.js +52 -0
  205. package/build/components/provider/use-auto-switch-editor-sidebars.js.map +1 -0
  206. package/build/components/provider/use-block-editor-settings.js +64 -43
  207. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  208. package/build/components/provider/use-block-editor-settings.native.js.map +1 -1
  209. package/build/components/provider/use-hide-blocks-from-inserter.js.map +1 -1
  210. package/build/components/provider/with-registry-provider.js +1 -0
  211. package/build/components/provider/with-registry-provider.js.map +1 -1
  212. package/build/components/start-page-options/index.js +139 -0
  213. package/build/components/start-page-options/index.js.map +1 -0
  214. package/build/components/table-of-contents/index.js.map +1 -1
  215. package/build/components/table-of-contents/panel.js.map +1 -1
  216. package/build/components/template-areas/index.js.map +1 -1
  217. package/build/components/template-validation-notice/index.js +23 -29
  218. package/build/components/template-validation-notice/index.js.map +1 -1
  219. package/build/components/theme-support-check/index.js +10 -16
  220. package/build/components/theme-support-check/index.js.map +1 -1
  221. package/build/components/time-to-read/index.js.map +1 -1
  222. package/build/components/unsaved-changes-warning/index.js.map +1 -1
  223. package/build/components/word-count/index.js.map +1 -1
  224. package/build/hooks/custom-sources-backwards-compatibility.js.map +1 -1
  225. package/build/hooks/default-autocompleters.js.map +1 -1
  226. package/build/hooks/index.js.map +1 -1
  227. package/build/hooks/index.native.js.map +1 -1
  228. package/build/hooks/pattern-overrides.js +22 -10
  229. package/build/hooks/pattern-overrides.js.map +1 -1
  230. package/build/hooks/use-select-nearest-editable-block.js.map +1 -1
  231. package/build/index.js.map +1 -1
  232. package/build/index.native.js.map +1 -1
  233. package/build/lock-unlock.js.map +1 -1
  234. package/build/private-apis.js +20 -1
  235. package/build/private-apis.js.map +1 -1
  236. package/build/store/actions.js.map +1 -1
  237. package/build/store/actions.native.js.map +1 -1
  238. package/build/store/constants.js +8 -1
  239. package/build/store/constants.js.map +1 -1
  240. package/build/store/defaults.js.map +1 -1
  241. package/build/store/index.js +1 -1
  242. package/build/store/index.js.map +1 -1
  243. package/build/store/local-autosave.js.map +1 -1
  244. package/build/store/private-actions.js +177 -4
  245. package/build/store/private-actions.js.map +1 -1
  246. package/build/store/private-selectors.js +1 -7
  247. package/build/store/private-selectors.js.map +1 -1
  248. package/build/store/reducer.js.map +1 -1
  249. package/build/store/reducer.native.js.map +1 -1
  250. package/build/store/selectors.js +5 -10
  251. package/build/store/selectors.js.map +1 -1
  252. package/build/store/selectors.native.js.map +1 -1
  253. package/build/store/utils/get-filtered-template-parts.js.map +1 -1
  254. package/build/store/utils/is-template-revertable.js +28 -0
  255. package/build/store/utils/is-template-revertable.js.map +1 -0
  256. package/build/store/utils/notice-builder.js.map +1 -1
  257. package/build/utils/get-template-part-icon.js.map +1 -1
  258. package/build/utils/index.js.map +1 -1
  259. package/build/utils/index.native.js.map +1 -1
  260. package/build/utils/media-upload/index.js.map +1 -1
  261. package/build/utils/media-upload/index.native.js.map +1 -1
  262. package/build/utils/terms.js.map +1 -1
  263. package/build/utils/url.js.map +1 -1
  264. package/build-module/bindings/index.js.map +1 -1
  265. package/build-module/bindings/pattern-overrides.js.map +1 -1
  266. package/build-module/bindings/post-meta.js +14 -31
  267. package/build-module/bindings/post-meta.js.map +1 -1
  268. package/build-module/components/autocompleters/index.js.map +1 -1
  269. package/build-module/components/autocompleters/user.js.map +1 -1
  270. package/build-module/components/autosave-monitor/index.js +10 -0
  271. package/build-module/components/autosave-monitor/index.js.map +1 -1
  272. package/build-module/components/block-manager/category.js.map +1 -1
  273. package/build-module/components/block-manager/checklist.js.map +1 -1
  274. package/build-module/components/block-manager/index.js.map +1 -1
  275. package/build-module/components/block-removal-warnings/index.js.map +1 -1
  276. package/build-module/components/block-settings-menu/plugin-block-settings-menu-item.js.map +1 -1
  277. package/build-module/components/character-count/index.js.map +1 -1
  278. package/build-module/components/commands/index.js +20 -1
  279. package/build-module/components/commands/index.js.map +1 -1
  280. package/build-module/components/commands/index.native.js.map +1 -1
  281. package/build-module/components/deprecated.js.map +1 -1
  282. package/build-module/components/deprecated.native.js.map +1 -1
  283. package/build-module/components/document-bar/index.js.map +1 -1
  284. package/build-module/components/document-outline/check.js.map +1 -1
  285. package/build-module/components/document-outline/index.js.map +1 -1
  286. package/build-module/components/document-outline/item.js.map +1 -1
  287. package/build-module/components/document-tools/index.js +1 -1
  288. package/build-module/components/document-tools/index.js.map +1 -1
  289. package/build-module/components/editor-canvas/edit-template-blocks-notification.js +13 -2
  290. package/build-module/components/editor-canvas/edit-template-blocks-notification.js.map +1 -1
  291. package/build-module/components/editor-canvas/index.js +2 -2
  292. package/build-module/components/editor-canvas/index.js.map +1 -1
  293. package/build-module/components/editor-help/add-blocks.native.js.map +1 -1
  294. package/build-module/components/editor-help/customize-blocks.native.js.map +1 -1
  295. package/build-module/components/editor-help/help-detail-navigation-screen.native.js.map +1 -1
  296. package/build-module/components/editor-help/help-get-support-button.native.js.map +1 -1
  297. package/build-module/components/editor-help/help-section-title.native.js.map +1 -1
  298. package/build-module/components/editor-help/help-topic-row.native.js.map +1 -1
  299. package/build-module/components/editor-help/icon-move-blocks.native.js.map +1 -1
  300. package/build-module/components/editor-help/index.native.js.map +1 -1
  301. package/build-module/components/editor-help/intro-to-blocks.native.js.map +1 -1
  302. package/build-module/components/editor-help/move-blocks.native.js.map +1 -1
  303. package/build-module/components/editor-help/remove-blocks.native.js.map +1 -1
  304. package/build-module/components/editor-help/view-sections.native.js.map +1 -1
  305. package/build-module/components/editor-history/redo.js.map +1 -1
  306. package/build-module/components/editor-history/undo.js.map +1 -1
  307. package/build-module/components/editor-notices/index.js.map +1 -1
  308. package/build-module/components/editor-snackbars/index.js.map +1 -1
  309. package/build-module/components/entities-saved-states/entity-record-item.js.map +1 -1
  310. package/build-module/components/entities-saved-states/entity-type-list.js.map +1 -1
  311. package/build-module/components/entities-saved-states/hooks/use-is-dirty.js.map +1 -1
  312. package/build-module/components/entities-saved-states/index.js.map +1 -1
  313. package/build-module/components/error-boundary/index.js.map +1 -1
  314. package/build-module/components/error-boundary/index.native.js.map +1 -1
  315. package/build-module/components/global-keyboard-shortcuts/index.js +24 -0
  316. package/build-module/components/global-keyboard-shortcuts/index.js.map +1 -1
  317. package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js +18 -0
  318. package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
  319. package/build-module/components/index.js +4 -0
  320. package/build-module/components/index.js.map +1 -1
  321. package/build-module/components/index.native.js.map +1 -1
  322. package/build-module/components/inserter-sidebar/index.js.map +1 -1
  323. package/build-module/components/keyboard-shortcut-help-modal/config.js +71 -0
  324. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -0
  325. package/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +41 -0
  326. package/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js.map +1 -0
  327. package/build-module/components/keyboard-shortcut-help-modal/index.js +118 -0
  328. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -0
  329. package/build-module/components/keyboard-shortcut-help-modal/shortcut.js +48 -0
  330. package/build-module/components/keyboard-shortcut-help-modal/shortcut.js.map +1 -0
  331. package/build-module/components/list-view-sidebar/index.js.map +1 -1
  332. package/build-module/components/list-view-sidebar/list-view-outline.js.map +1 -1
  333. package/build-module/components/local-autosave-monitor/index.js.map +1 -1
  334. package/build-module/components/media-categories/index.js.map +1 -1
  335. package/build-module/components/mode-switcher/index.js.map +1 -1
  336. package/build-module/components/offline-status/index.native.js.map +1 -1
  337. package/build-module/components/page-attributes/check.js.map +1 -1
  338. package/build-module/components/page-attributes/order.js.map +1 -1
  339. package/build-module/components/page-attributes/panel.js.map +1 -1
  340. package/build-module/components/page-attributes/parent.js.map +1 -1
  341. package/build-module/components/pattern-overrides-panel/index.js.map +1 -1
  342. package/build-module/components/plugin-document-setting-panel/index.js.map +1 -1
  343. package/build-module/components/plugin-more-menu-item/index.js +73 -0
  344. package/build-module/components/plugin-more-menu-item/index.js.map +1 -0
  345. package/build-module/components/plugin-post-publish-panel/index.js.map +1 -1
  346. package/build-module/components/plugin-post-status-info/index.js +66 -0
  347. package/build-module/components/plugin-post-status-info/index.js.map +1 -0
  348. package/build-module/components/plugin-pre-publish-panel/index.js.map +1 -1
  349. package/build-module/components/plugin-sidebar/index.js +102 -0
  350. package/build-module/components/plugin-sidebar/index.js.map +1 -0
  351. package/build-module/components/plugin-sidebar-more-menu-item/index.js +65 -0
  352. package/build-module/components/plugin-sidebar-more-menu-item/index.js.map +1 -0
  353. package/build-module/components/post-actions/actions.js +219 -15
  354. package/build-module/components/post-actions/actions.js.map +1 -1
  355. package/build-module/components/post-actions/index.js +130 -0
  356. package/build-module/components/post-actions/index.js.map +1 -0
  357. package/build-module/components/post-author/check.js.map +1 -1
  358. package/build-module/components/post-author/combobox.js.map +1 -1
  359. package/build-module/components/post-author/constants.js.map +1 -1
  360. package/build-module/components/post-author/hook.js.map +1 -1
  361. package/build-module/components/post-author/index.js.map +1 -1
  362. package/build-module/components/post-author/panel.js.map +1 -1
  363. package/build-module/components/post-author/select.js.map +1 -1
  364. package/build-module/components/post-card-panel/index.js +42 -8
  365. package/build-module/components/post-card-panel/index.js.map +1 -1
  366. package/build-module/components/post-comments/index.js.map +1 -1
  367. package/build-module/components/post-discussion/panel.js.map +1 -1
  368. package/build-module/components/post-excerpt/check.js +9 -0
  369. package/build-module/components/post-excerpt/check.js.map +1 -1
  370. package/build-module/components/post-excerpt/index.js.map +1 -1
  371. package/build-module/components/post-excerpt/panel.js.map +1 -1
  372. package/build-module/components/post-excerpt/plugin.js.map +1 -1
  373. package/build-module/components/post-featured-image/check.js.map +1 -1
  374. package/build-module/components/post-featured-image/index.js.map +1 -1
  375. package/build-module/components/post-featured-image/panel.js.map +1 -1
  376. package/build-module/components/post-format/check.js.map +1 -1
  377. package/build-module/components/post-format/index.js.map +1 -1
  378. package/build-module/components/post-last-revision/check.js.map +1 -1
  379. package/build-module/components/post-last-revision/index.js.map +1 -1
  380. package/build-module/components/post-last-revision/panel.js.map +1 -1
  381. package/build-module/components/post-locked-modal/index.js.map +1 -1
  382. package/build-module/components/post-panel-row/index.js.map +1 -1
  383. package/build-module/components/post-pending-status/check.js.map +1 -1
  384. package/build-module/components/post-pending-status/index.js.map +1 -1
  385. package/build-module/components/post-pingbacks/index.js.map +1 -1
  386. package/build-module/components/post-preview-button/index.js.map +1 -1
  387. package/build-module/components/post-publish-button/index.js +31 -31
  388. package/build-module/components/post-publish-button/index.js.map +1 -1
  389. package/build-module/components/post-publish-button/label.js +51 -42
  390. package/build-module/components/post-publish-button/label.js.map +1 -1
  391. package/build-module/components/post-publish-panel/index.js.map +1 -1
  392. package/build-module/components/post-publish-panel/maybe-category-panel.js.map +1 -1
  393. package/build-module/components/post-publish-panel/maybe-post-format-panel.js.map +1 -1
  394. package/build-module/components/post-publish-panel/maybe-tags-panel.js.map +1 -1
  395. package/build-module/components/post-publish-panel/maybe-upload-media.js.map +1 -1
  396. package/build-module/components/post-publish-panel/postpublish.js.map +1 -1
  397. package/build-module/components/post-publish-panel/prepublish.js.map +1 -1
  398. package/build-module/components/post-saved-state/index.js +10 -6
  399. package/build-module/components/post-saved-state/index.js.map +1 -1
  400. package/build-module/components/post-schedule/check.js.map +1 -1
  401. package/build-module/components/post-schedule/index.js.map +1 -1
  402. package/build-module/components/post-schedule/label.js.map +1 -1
  403. package/build-module/components/post-schedule/panel.js +8 -0
  404. package/build-module/components/post-schedule/panel.js.map +1 -1
  405. package/build-module/components/post-slug/check.js.map +1 -1
  406. package/build-module/components/post-slug/index.js +44 -68
  407. package/build-module/components/post-slug/index.js.map +1 -1
  408. package/build-module/components/post-status/index.js +231 -0
  409. package/build-module/components/post-status/index.js.map +1 -0
  410. package/build-module/components/post-sticky/check.js.map +1 -1
  411. package/build-module/components/post-sticky/index.js.map +1 -1
  412. package/build-module/components/post-switch-to-draft-button/index.js +7 -1
  413. package/build-module/components/post-switch-to-draft-button/index.js.map +1 -1
  414. package/build-module/components/post-sync-status/index.js.map +1 -1
  415. package/build-module/components/post-taxonomies/check.js.map +1 -1
  416. package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
  417. package/build-module/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  418. package/build-module/components/post-taxonomies/index.js.map +1 -1
  419. package/build-module/components/post-taxonomies/most-used-terms.js.map +1 -1
  420. package/build-module/components/post-taxonomies/panel.js.map +1 -1
  421. package/build-module/components/post-template/block-theme.js +7 -3
  422. package/build-module/components/post-template/block-theme.js.map +1 -1
  423. package/build-module/components/post-template/classic-theme.js.map +1 -1
  424. package/build-module/components/post-template/create-new-template-modal.js.map +1 -1
  425. package/build-module/components/post-template/create-new-template.js.map +1 -1
  426. package/build-module/components/post-template/hooks.js.map +1 -1
  427. package/build-module/components/post-template/panel.js.map +1 -1
  428. package/build-module/components/post-template/reset-default-template.js.map +1 -1
  429. package/build-module/components/post-template/swap-template-button.js.map +1 -1
  430. package/build-module/components/post-text-editor/index.js.map +1 -1
  431. package/build-module/components/post-title/constants.js.map +1 -1
  432. package/build-module/components/post-title/index.js.map +1 -1
  433. package/build-module/components/post-title/index.native.js.map +1 -1
  434. package/build-module/components/post-title/post-title-raw.js.map +1 -1
  435. package/build-module/components/post-title/use-post-title-focus.js.map +1 -1
  436. package/build-module/components/post-title/use-post-title.js.map +1 -1
  437. package/build-module/components/post-trash/check.js +24 -26
  438. package/build-module/components/post-trash/check.js.map +1 -1
  439. package/build-module/components/post-trash/index.js +2 -1
  440. package/build-module/components/post-trash/index.js.map +1 -1
  441. package/build-module/components/post-type-support-check/index.js.map +1 -1
  442. package/build-module/components/post-url/check.js.map +1 -1
  443. package/build-module/components/post-url/index.js +46 -21
  444. package/build-module/components/post-url/index.js.map +1 -1
  445. package/build-module/components/post-url/label.js.map +1 -1
  446. package/build-module/components/post-url/panel.js +14 -7
  447. package/build-module/components/post-url/panel.js.map +1 -1
  448. package/build-module/components/post-view-link/index.js.map +1 -1
  449. package/build-module/components/post-visibility/check.js.map +1 -1
  450. package/build-module/components/post-visibility/index.js +2 -1
  451. package/build-module/components/post-visibility/index.js.map +1 -1
  452. package/build-module/components/post-visibility/label.js.map +1 -1
  453. package/build-module/components/post-visibility/utils.js.map +1 -1
  454. package/build-module/components/preferences-modal/enable-panel.js.map +1 -1
  455. package/build-module/components/preferences-modal/enable-plugin-document-setting-panel.js.map +1 -1
  456. package/build-module/components/preferences-modal/index.js +19 -17
  457. package/build-module/components/preferences-modal/index.js.map +1 -1
  458. package/build-module/components/preview-dropdown/index.js.map +1 -1
  459. package/build-module/components/provider/disable-non-page-content-blocks.js.map +1 -1
  460. package/build-module/components/provider/index.js +5 -3
  461. package/build-module/components/provider/index.js.map +1 -1
  462. package/build-module/components/provider/index.native.js.map +1 -1
  463. package/build-module/components/provider/navigation-block-editing-mode.js.map +1 -1
  464. package/build-module/components/provider/use-auto-switch-editor-sidebars.js +46 -0
  465. package/build-module/components/provider/use-auto-switch-editor-sidebars.js.map +1 -0
  466. package/build-module/components/provider/use-block-editor-settings.js +66 -45
  467. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  468. package/build-module/components/provider/use-block-editor-settings.native.js.map +1 -1
  469. package/build-module/components/provider/use-hide-blocks-from-inserter.js.map +1 -1
  470. package/build-module/components/provider/with-registry-provider.js +1 -0
  471. package/build-module/components/provider/with-registry-provider.js.map +1 -1
  472. package/build-module/components/start-page-options/index.js +132 -0
  473. package/build-module/components/start-page-options/index.js.map +1 -0
  474. package/build-module/components/table-of-contents/index.js.map +1 -1
  475. package/build-module/components/table-of-contents/panel.js.map +1 -1
  476. package/build-module/components/template-areas/index.js.map +1 -1
  477. package/build-module/components/template-validation-notice/index.js +25 -31
  478. package/build-module/components/template-validation-notice/index.js.map +1 -1
  479. package/build-module/components/theme-support-check/index.js +11 -16
  480. package/build-module/components/theme-support-check/index.js.map +1 -1
  481. package/build-module/components/time-to-read/index.js.map +1 -1
  482. package/build-module/components/unsaved-changes-warning/index.js.map +1 -1
  483. package/build-module/components/word-count/index.js.map +1 -1
  484. package/build-module/hooks/custom-sources-backwards-compatibility.js.map +1 -1
  485. package/build-module/hooks/default-autocompleters.js.map +1 -1
  486. package/build-module/hooks/index.js.map +1 -1
  487. package/build-module/hooks/index.native.js.map +1 -1
  488. package/build-module/hooks/pattern-overrides.js +22 -10
  489. package/build-module/hooks/pattern-overrides.js.map +1 -1
  490. package/build-module/hooks/use-select-nearest-editable-block.js.map +1 -1
  491. package/build-module/index.js.map +1 -1
  492. package/build-module/index.native.js.map +1 -1
  493. package/build-module/lock-unlock.js.map +1 -1
  494. package/build-module/private-apis.js +18 -1
  495. package/build-module/private-apis.js.map +1 -1
  496. package/build-module/store/actions.js.map +1 -1
  497. package/build-module/store/actions.native.js.map +1 -1
  498. package/build-module/store/constants.js +7 -0
  499. package/build-module/store/constants.js.map +1 -1
  500. package/build-module/store/defaults.js.map +1 -1
  501. package/build-module/store/index.js.map +1 -1
  502. package/build-module/store/local-autosave.js.map +1 -1
  503. package/build-module/store/private-actions.js +174 -4
  504. package/build-module/store/private-actions.js.map +1 -1
  505. package/build-module/store/private-selectors.js +1 -6
  506. package/build-module/store/private-selectors.js.map +1 -1
  507. package/build-module/store/reducer.js.map +1 -1
  508. package/build-module/store/reducer.native.js.map +1 -1
  509. package/build-module/store/selectors.js +1 -6
  510. package/build-module/store/selectors.js.map +1 -1
  511. package/build-module/store/selectors.native.js.map +1 -1
  512. package/build-module/store/utils/get-filtered-template-parts.js.map +1 -1
  513. package/build-module/store/utils/is-template-revertable.js +22 -0
  514. package/build-module/store/utils/is-template-revertable.js.map +1 -0
  515. package/build-module/store/utils/notice-builder.js.map +1 -1
  516. package/build-module/utils/get-template-part-icon.js.map +1 -1
  517. package/build-module/utils/index.js.map +1 -1
  518. package/build-module/utils/index.native.js.map +1 -1
  519. package/build-module/utils/media-upload/index.js.map +1 -1
  520. package/build-module/utils/media-upload/index.native.js.map +1 -1
  521. package/build-module/utils/terms.js.map +1 -1
  522. package/build-module/utils/url.js.map +1 -1
  523. package/build-style/style-rtl.css +498 -25
  524. package/build-style/style.css +498 -25
  525. package/package.json +35 -35
  526. package/src/bindings/post-meta.js +11 -27
  527. package/src/components/autosave-monitor/index.js +9 -0
  528. package/src/components/commands/index.js +20 -1
  529. package/src/components/document-tools/index.js +16 -14
  530. package/src/components/editor-canvas/edit-template-blocks-notification.js +16 -2
  531. package/src/components/editor-canvas/index.js +4 -4
  532. package/src/components/error-boundary/style.native.scss +1 -1
  533. package/src/components/global-keyboard-shortcuts/index.js +25 -0
  534. package/src/components/global-keyboard-shortcuts/register-shortcuts.js +20 -0
  535. package/src/components/index.js +4 -0
  536. package/src/components/keyboard-shortcut-help-modal/config.js +53 -0
  537. package/src/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +43 -0
  538. package/src/components/keyboard-shortcut-help-modal/index.js +160 -0
  539. package/src/components/keyboard-shortcut-help-modal/shortcut.js +67 -0
  540. package/src/components/keyboard-shortcut-help-modal/style.scss +61 -0
  541. package/src/components/plugin-more-menu-item/index.js +73 -0
  542. package/src/components/plugin-post-status-info/index.js +63 -0
  543. package/src/components/plugin-sidebar/index.js +98 -0
  544. package/src/components/plugin-sidebar-more-menu-item/index.js +64 -0
  545. package/src/components/post-actions/actions.js +294 -14
  546. package/src/components/post-actions/index.js +156 -0
  547. package/src/components/post-actions/style.scss +3 -0
  548. package/src/components/post-card-panel/index.js +69 -9
  549. package/src/components/post-excerpt/check.js +8 -0
  550. package/src/components/post-publish-button/index.js +23 -36
  551. package/src/components/post-publish-button/label.js +54 -39
  552. package/src/components/post-publish-button/test/index.js +15 -26
  553. package/src/components/post-publish-button/test/label.js +44 -21
  554. package/src/components/post-saved-state/index.js +13 -6
  555. package/src/components/post-saved-state/test/index.js +4 -0
  556. package/src/components/post-schedule/panel.js +22 -0
  557. package/src/components/post-slug/index.js +50 -68
  558. package/src/components/post-slug/test/index.js +29 -6
  559. package/src/components/post-status/index.js +310 -0
  560. package/src/components/post-status/style.scss +75 -0
  561. package/src/components/post-switch-to-draft-button/index.js +5 -0
  562. package/src/components/post-template/block-theme.js +31 -22
  563. package/src/components/post-trash/check.js +19 -19
  564. package/src/components/post-trash/index.js +1 -0
  565. package/src/components/post-url/index.js +131 -101
  566. package/src/components/post-url/panel.js +20 -7
  567. package/src/components/post-url/style.scss +8 -6
  568. package/src/components/post-visibility/index.js +1 -0
  569. package/src/components/preferences-modal/index.js +26 -22
  570. package/src/components/provider/index.js +17 -8
  571. package/src/components/provider/use-auto-switch-editor-sidebars.js +49 -0
  572. package/src/components/provider/use-block-editor-settings.js +59 -33
  573. package/src/components/provider/with-registry-provider.js +1 -0
  574. package/src/components/start-page-options/index.js +135 -0
  575. package/src/components/start-page-options/style.scss +26 -0
  576. package/src/components/template-validation-notice/index.js +48 -50
  577. package/src/components/theme-support-check/index.js +9 -16
  578. package/src/components/theme-support-check/test/index.js +44 -43
  579. package/src/hooks/pattern-overrides.js +25 -14
  580. package/src/private-apis.js +15 -0
  581. package/src/store/constants.js +7 -0
  582. package/src/store/private-actions.js +269 -4
  583. package/src/store/private-selectors.js +1 -6
  584. package/src/store/selectors.js +1 -6
  585. package/src/store/utils/is-template-revertable.js +23 -0
  586. package/src/style.scss +6 -2
  587. package/src/components/post-publish-button/style.scss +0 -8
  588. package/src/components/provider/test/disable-non-page-content-blocks.js +0 -111
  589. package/src/components/template-validation-notice/style.scss +0 -9
@@ -18,6 +18,14 @@ import {
18
18
  __experimentalVStack as VStack,
19
19
  } from '@wordpress/components';
20
20
 
21
+ /**
22
+ * Internal dependencies
23
+ */
24
+ import { TEMPLATE_ORIGINS, TEMPLATE_POST_TYPE } from '../../store/constants';
25
+ import { store as editorStore } from '../../store';
26
+ import { unlock } from '../../lock-unlock';
27
+ import isTemplateRevertable from '../../store/utils/is-template-revertable';
28
+
21
29
  function getItemTitle( item ) {
22
30
  if ( typeof item.title === 'string' ) {
23
31
  return decodeEntities( item.title );
@@ -25,7 +33,7 @@ function getItemTitle( item ) {
25
33
  return decodeEntities( item.title?.rendered || '' );
26
34
  }
27
35
 
28
- export const trashPostAction = {
36
+ const trashPostAction = {
29
37
  id: 'move-to-trash',
30
38
  label: __( 'Move to Trash' ),
31
39
  isPrimary: true,
@@ -145,10 +153,10 @@ export const trashPostAction = {
145
153
  [ ...errorMessages ].join( ',' )
146
154
  );
147
155
  }
148
- createErrorNotice( errorMessage, {
149
- type: 'snackbar',
150
- } );
151
156
  }
157
+ createErrorNotice( errorMessage, {
158
+ type: 'snackbar',
159
+ } );
152
160
  }
153
161
  if ( onActionPerformed ) {
154
162
  onActionPerformed( posts );
@@ -164,7 +172,7 @@ export const trashPostAction = {
164
172
  },
165
173
  };
166
174
 
167
- export function usePermanentlyDeletePostAction() {
175
+ function usePermanentlyDeletePostAction() {
168
176
  const { createSuccessNotice, createErrorNotice } =
169
177
  useDispatch( noticesStore );
170
178
  const { deleteEntityRecord } = useDispatch( coreStore );
@@ -260,10 +268,10 @@ export function usePermanentlyDeletePostAction() {
260
268
  [ ...errorMessages ].join( ',' )
261
269
  );
262
270
  }
263
- createErrorNotice( errorMessage, {
264
- type: 'snackbar',
265
- } );
266
271
  }
272
+ createErrorNotice( errorMessage, {
273
+ type: 'snackbar',
274
+ } );
267
275
  }
268
276
  },
269
277
  } ),
@@ -271,7 +279,7 @@ export function usePermanentlyDeletePostAction() {
271
279
  );
272
280
  }
273
281
 
274
- export function useRestorePostAction() {
282
+ function useRestorePostAction() {
275
283
  const { createSuccessNotice, createErrorNotice } =
276
284
  useDispatch( noticesStore );
277
285
  const { editEntityRecord, saveEditedEntityRecord } =
@@ -357,7 +365,7 @@ export function useRestorePostAction() {
357
365
  );
358
366
  }
359
367
 
360
- export const viewPostAction = {
368
+ const viewPostAction = {
361
369
  id: 'view-post',
362
370
  label: __( 'View' ),
363
371
  isPrimary: true,
@@ -374,7 +382,7 @@ export const viewPostAction = {
374
382
  },
375
383
  };
376
384
 
377
- export const editPostAction = {
385
+ const editPostAction = {
378
386
  id: 'edit-post',
379
387
  label: __( 'Edit' ),
380
388
  isPrimary: true,
@@ -388,7 +396,7 @@ export const editPostAction = {
388
396
  }
389
397
  },
390
398
  };
391
- export const postRevisionsAction = {
399
+ const postRevisionsAction = {
392
400
  id: 'view-post-revisions',
393
401
  label: __( 'View revisions' ),
394
402
  isPrimary: false,
@@ -414,13 +422,13 @@ export const postRevisionsAction = {
414
422
  },
415
423
  };
416
424
 
417
- export const renamePostAction = {
425
+ const renamePostAction = {
418
426
  id: 'rename-post',
419
427
  label: __( 'Rename' ),
420
428
  isEligible( post ) {
421
429
  return post.status !== 'trash';
422
430
  },
423
- RenderModal: ( { items, closeModal } ) => {
431
+ RenderModal: ( { items, closeModal, onActionPerformed } ) => {
424
432
  const [ item ] = items;
425
433
  const originalTitle = decodeEntities(
426
434
  typeof item.title === 'string' ? item.title : item.title.rendered
@@ -447,6 +455,7 @@ export const renamePostAction = {
447
455
  createSuccessNotice( __( 'Name updated' ), {
448
456
  type: 'snackbar',
449
457
  } );
458
+ onActionPerformed?.( items );
450
459
  } catch ( error ) {
451
460
  const errorMessage =
452
461
  error.message && error.code !== 'unknown_error'
@@ -491,6 +500,274 @@ export const renamePostAction = {
491
500
  },
492
501
  };
493
502
 
503
+ const resetTemplateAction = {
504
+ id: 'reset-template',
505
+ label: __( 'Reset' ),
506
+ isEligible: isTemplateRevertable,
507
+ supportsBulk: true,
508
+ hideModalHeader: true,
509
+ RenderModal: ( { items, closeModal, onActionPerformed } ) => {
510
+ const { revertTemplate } = unlock( useDispatch( editorStore ) );
511
+ const { saveEditedEntityRecord } = useDispatch( coreStore );
512
+ const { createSuccessNotice, createErrorNotice } =
513
+ useDispatch( noticesStore );
514
+ const onConfirm = async () => {
515
+ try {
516
+ for ( const template of items ) {
517
+ await revertTemplate( template, {
518
+ allowUndo: false,
519
+ } );
520
+ await saveEditedEntityRecord(
521
+ 'postType',
522
+ template.type,
523
+ template.id
524
+ );
525
+ }
526
+
527
+ createSuccessNotice(
528
+ items.length > 1
529
+ ? sprintf(
530
+ /* translators: The number of items. */
531
+ __( '%s items reset.' ),
532
+ items.length
533
+ )
534
+ : sprintf(
535
+ /* translators: The template/part's name. */
536
+ __( '"%s" reset.' ),
537
+ decodeEntities( items[ 0 ].title.rendered )
538
+ ),
539
+ {
540
+ type: 'snackbar',
541
+ id: 'edit-site-template-reverted',
542
+ }
543
+ );
544
+ } catch ( error ) {
545
+ let fallbackErrorMessage;
546
+ if ( items[ 0 ].type === TEMPLATE_POST_TYPE ) {
547
+ fallbackErrorMessage =
548
+ items.length === 1
549
+ ? __(
550
+ 'An error occurred while reverting the template.'
551
+ )
552
+ : __(
553
+ 'An error occurred while reverting the templates.'
554
+ );
555
+ } else {
556
+ fallbackErrorMessage =
557
+ items.length === 1
558
+ ? __(
559
+ 'An error occurred while reverting the template part.'
560
+ )
561
+ : __(
562
+ 'An error occurred while reverting the template parts.'
563
+ );
564
+ }
565
+ const errorMessage =
566
+ error.message && error.code !== 'unknown_error'
567
+ ? error.message
568
+ : fallbackErrorMessage;
569
+
570
+ createErrorNotice( errorMessage, { type: 'snackbar' } );
571
+ }
572
+ };
573
+ return (
574
+ <VStack spacing="5">
575
+ <Text>
576
+ { __( 'Reset to default and clear all customizations?' ) }
577
+ </Text>
578
+ <HStack justify="right">
579
+ <Button variant="tertiary" onClick={ closeModal }>
580
+ { __( 'Cancel' ) }
581
+ </Button>
582
+ <Button
583
+ variant="primary"
584
+ onClick={ async () => {
585
+ await onConfirm( items );
586
+ onActionPerformed?.( items );
587
+ closeModal();
588
+ } }
589
+ >
590
+ { __( 'Reset' ) }
591
+ </Button>
592
+ </HStack>
593
+ </VStack>
594
+ );
595
+ },
596
+ };
597
+
598
+ /**
599
+ * Check if a template is removable.
600
+ * Copy from packages/edit-site/src/utils/is-template-removable.js.
601
+ *
602
+ * @param {Object} template The template entity to check.
603
+ * @return {boolean} Whether the template is revertable.
604
+ */
605
+ function isTemplateRemovable( template ) {
606
+ if ( ! template ) {
607
+ return false;
608
+ }
609
+
610
+ return (
611
+ template.source === TEMPLATE_ORIGINS.custom && ! template.has_theme_file
612
+ );
613
+ }
614
+
615
+ const deleteTemplateAction = {
616
+ id: 'delete-template',
617
+ label: __( 'Delete' ),
618
+ isEligible: isTemplateRemovable,
619
+ supportsBulk: true,
620
+ hideModalHeader: true,
621
+ RenderModal: ( { items: templates, closeModal, onActionPerformed } ) => {
622
+ const { removeTemplates } = unlock( useDispatch( editorStore ) );
623
+ return (
624
+ <VStack spacing="5">
625
+ <Text>
626
+ { templates.length > 1
627
+ ? sprintf(
628
+ // translators: %d: number of items to delete.
629
+ _n(
630
+ 'Delete %d item?',
631
+ 'Delete %d items?',
632
+ templates.length
633
+ ),
634
+ templates.length
635
+ )
636
+ : sprintf(
637
+ // translators: %s: The template or template part's titles
638
+ __( 'Delete "%s"?' ),
639
+ decodeEntities(
640
+ templates?.[ 0 ]?.title?.rendered
641
+ )
642
+ ) }
643
+ </Text>
644
+ <HStack justify="right">
645
+ <Button variant="tertiary" onClick={ closeModal }>
646
+ { __( 'Cancel' ) }
647
+ </Button>
648
+ <Button
649
+ variant="primary"
650
+ onClick={ async () => {
651
+ await removeTemplates( templates, {
652
+ allowUndo: false,
653
+ } );
654
+ onActionPerformed?.( templates );
655
+ closeModal();
656
+ } }
657
+ >
658
+ { __( 'Delete' ) }
659
+ </Button>
660
+ </HStack>
661
+ </VStack>
662
+ );
663
+ },
664
+ };
665
+
666
+ const renameTemplateAction = {
667
+ id: 'rename-template',
668
+ label: __( 'Rename' ),
669
+ isEligible: ( template ) => {
670
+ // We can only remove templates or template parts that can be removed.
671
+ // Additionally in the case of templates, we can only remove custom templates.
672
+ if (
673
+ ! isTemplateRemovable( template ) ||
674
+ ( template.type === TEMPLATE_POST_TYPE && ! template.is_custom )
675
+ ) {
676
+ return false;
677
+ }
678
+ return true;
679
+ },
680
+ RenderModal: ( { items: templates, closeModal, onActionPerformed } ) => {
681
+ const template = templates[ 0 ];
682
+ const title = decodeEntities( template.title.rendered );
683
+ const [ editedTitle, setEditedTitle ] = useState( title );
684
+ const {
685
+ editEntityRecord,
686
+ __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits,
687
+ } = useDispatch( coreStore );
688
+ const { createSuccessNotice, createErrorNotice } =
689
+ useDispatch( noticesStore );
690
+ async function onTemplateRename( event ) {
691
+ event.preventDefault();
692
+ try {
693
+ await editEntityRecord(
694
+ 'postType',
695
+ template.type,
696
+ template.id,
697
+ {
698
+ title: editedTitle,
699
+ }
700
+ );
701
+ // Update state before saving rerenders the list.
702
+ setEditedTitle( '' );
703
+ closeModal();
704
+ // Persist edited entity.
705
+ await saveSpecifiedEntityEdits(
706
+ 'postType',
707
+ template.type,
708
+ template.id,
709
+ [ 'title' ], // Only save title to avoid persisting other edits.
710
+ {
711
+ throwOnError: true,
712
+ }
713
+ );
714
+ createSuccessNotice(
715
+ template.type === TEMPLATE_POST_TYPE
716
+ ? __( 'Template renamed.' )
717
+ : __( 'Template part renamed.' ),
718
+ {
719
+ type: 'snackbar',
720
+ }
721
+ );
722
+ onActionPerformed?.( templates );
723
+ } catch ( error ) {
724
+ const fallbackErrorMessage =
725
+ template.type === TEMPLATE_POST_TYPE
726
+ ? __( 'An error occurred while renaming the template.' )
727
+ : __(
728
+ 'An error occurred while renaming the template part.'
729
+ );
730
+ const errorMessage =
731
+ error.message && error.code !== 'unknown_error'
732
+ ? error.message
733
+ : fallbackErrorMessage;
734
+
735
+ createErrorNotice( errorMessage, { type: 'snackbar' } );
736
+ }
737
+ }
738
+ return (
739
+ <form onSubmit={ onTemplateRename }>
740
+ <VStack spacing="5">
741
+ <TextControl
742
+ __nextHasNoMarginBottom
743
+ __next40pxDefaultSize
744
+ label={ __( 'Name' ) }
745
+ value={ editedTitle }
746
+ onChange={ setEditedTitle }
747
+ required
748
+ />
749
+ <HStack justify="right">
750
+ <Button
751
+ variant="tertiary"
752
+ onClick={ closeModal }
753
+ __next40pxDefaultSize
754
+ >
755
+ { __( 'Cancel' ) }
756
+ </Button>
757
+ <Button
758
+ variant="primary"
759
+ type="submit"
760
+ __next40pxDefaultSize
761
+ >
762
+ { __( 'Save' ) }
763
+ </Button>
764
+ </HStack>
765
+ </VStack>
766
+ </form>
767
+ );
768
+ },
769
+ };
770
+
494
771
  export function usePostActions( onActionPerformed, actionIds = null ) {
495
772
  const permanentlyDeletePostAction = usePermanentlyDeletePostAction();
496
773
  const restorePostAction = useRestorePostAction();
@@ -499,11 +776,14 @@ export function usePostActions( onActionPerformed, actionIds = null ) {
499
776
  // By default, return all actions...
500
777
  const defaultActions = [
501
778
  editPostAction,
779
+ resetTemplateAction,
502
780
  viewPostAction,
503
781
  restorePostAction,
782
+ deleteTemplateAction,
504
783
  permanentlyDeletePostAction,
505
784
  postRevisionsAction,
506
785
  renamePostAction,
786
+ renameTemplateAction,
507
787
  trashPostAction,
508
788
  ];
509
789
 
@@ -0,0 +1,156 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+ import { useState } from '@wordpress/element';
6
+ import { __ } from '@wordpress/i18n';
7
+ import {
8
+ privateApis as componentsPrivateApis,
9
+ Button,
10
+ Modal,
11
+ } from '@wordpress/components';
12
+ import { moreVertical } from '@wordpress/icons';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import { unlock } from '../../lock-unlock';
18
+ import { usePostActions } from './actions';
19
+ import { store as editorStore } from '../../store';
20
+ import {
21
+ TEMPLATE_POST_TYPE,
22
+ TEMPLATE_PART_POST_TYPE,
23
+ PATTERN_POST_TYPE,
24
+ } from '../../store/constants';
25
+
26
+ const {
27
+ DropdownMenuV2: DropdownMenu,
28
+ DropdownMenuGroupV2: DropdownMenuGroup,
29
+ DropdownMenuItemV2: DropdownMenuItem,
30
+ DropdownMenuItemLabelV2: DropdownMenuItemLabel,
31
+ kebabCase,
32
+ } = unlock( componentsPrivateApis );
33
+
34
+ const POST_ACTIONS_WHILE_EDITING = [
35
+ 'view-post',
36
+ 'view-post-revisions',
37
+ 'rename-post',
38
+ 'move-to-trash',
39
+ ];
40
+
41
+ export default function PostActions( { onActionPerformed, buttonProps } ) {
42
+ const { postType, item } = useSelect( ( select ) => {
43
+ const { getCurrentPostType, getCurrentPost } = select( editorStore );
44
+ return {
45
+ postType: getCurrentPostType(),
46
+ item: getCurrentPost(),
47
+ };
48
+ } );
49
+ const actions = usePostActions(
50
+ onActionPerformed,
51
+ POST_ACTIONS_WHILE_EDITING
52
+ );
53
+
54
+ if (
55
+ [
56
+ TEMPLATE_POST_TYPE,
57
+ TEMPLATE_PART_POST_TYPE,
58
+ PATTERN_POST_TYPE,
59
+ ].includes( postType )
60
+ ) {
61
+ return null;
62
+ }
63
+ return (
64
+ <DropdownMenu
65
+ trigger={
66
+ <Button
67
+ size="small"
68
+ icon={ moreVertical }
69
+ label={ __( 'Actions' ) }
70
+ disabled={ ! actions.length }
71
+ className="editor-all-actions-button"
72
+ { ...buttonProps }
73
+ />
74
+ }
75
+ placement="bottom-end"
76
+ >
77
+ <ActionsDropdownMenuGroup actions={ actions } item={ item } />
78
+ </DropdownMenu>
79
+ );
80
+ }
81
+
82
+ // From now on all the functions on this file are copied as from the dataviews packages,
83
+ // The editor packages should not be using the dataviews packages directly,
84
+ // and the dataviews package should not be using the editor packages directly,
85
+ // so duplicating the code here seems like the least bad option.
86
+
87
+ // Copied as is from packages/dataviews/src/item-actions.js
88
+ function DropdownMenuItemTrigger( { action, onClick } ) {
89
+ return (
90
+ <DropdownMenuItem
91
+ onClick={ onClick }
92
+ hideOnClick={ ! action.RenderModal }
93
+ >
94
+ <DropdownMenuItemLabel>{ action.label }</DropdownMenuItemLabel>
95
+ </DropdownMenuItem>
96
+ );
97
+ }
98
+
99
+ // Copied as is from packages/dataviews/src/item-actions.js
100
+ function ActionWithModal( { action, item, ActionTrigger } ) {
101
+ const [ isModalOpen, setIsModalOpen ] = useState( false );
102
+ const actionTriggerProps = {
103
+ action,
104
+ onClick: () => setIsModalOpen( true ),
105
+ };
106
+ const { RenderModal, hideModalHeader } = action;
107
+ return (
108
+ <>
109
+ <ActionTrigger { ...actionTriggerProps } />
110
+ { isModalOpen && (
111
+ <Modal
112
+ title={ action.modalHeader || action.label }
113
+ __experimentalHideHeader={ !! hideModalHeader }
114
+ onRequestClose={ () => {
115
+ setIsModalOpen( false );
116
+ } }
117
+ overlayClassName={ `editor-action-modal editor-action-modal__${ kebabCase(
118
+ action.id
119
+ ) }` }
120
+ >
121
+ <RenderModal
122
+ items={ [ item ] }
123
+ closeModal={ () => setIsModalOpen( false ) }
124
+ />
125
+ </Modal>
126
+ ) }
127
+ </>
128
+ );
129
+ }
130
+
131
+ // Copied as is from packages/dataviews/src/item-actions.js
132
+ function ActionsDropdownMenuGroup( { actions, item } ) {
133
+ return (
134
+ <DropdownMenuGroup>
135
+ { actions.map( ( action ) => {
136
+ if ( action.RenderModal ) {
137
+ return (
138
+ <ActionWithModal
139
+ key={ action.id }
140
+ action={ action }
141
+ item={ item }
142
+ ActionTrigger={ DropdownMenuItemTrigger }
143
+ />
144
+ );
145
+ }
146
+ return (
147
+ <DropdownMenuItemTrigger
148
+ key={ action.id }
149
+ action={ action }
150
+ onClick={ () => action.callback( [ item ] ) }
151
+ />
152
+ );
153
+ } ) }
154
+ </DropdownMenuGroup>
155
+ );
156
+ }
@@ -0,0 +1,3 @@
1
+ .editor-action-modal {
2
+ z-index: z-index(".editor-action-modal");
3
+ }
@@ -15,28 +15,35 @@ import {
15
15
  } from '@wordpress/components';
16
16
  import { store as coreStore } from '@wordpress/core-data';
17
17
  import { useSelect } from '@wordpress/data';
18
- import { __, sprintf } from '@wordpress/i18n';
18
+ import { __, _x, _n, sprintf } from '@wordpress/i18n';
19
19
  import { humanTimeDiff } from '@wordpress/date';
20
20
  import { decodeEntities } from '@wordpress/html-entities';
21
+ import { count as wordCount } from '@wordpress/wordcount';
22
+ import { useMemo } from '@wordpress/element';
21
23
 
22
24
  /**
23
25
  * Internal dependencies
24
26
  */
25
27
  import { store as editorStore } from '../../store';
26
- import { TEMPLATE_POST_TYPE } from '../../store/constants';
28
+ import {
29
+ TEMPLATE_POST_TYPE,
30
+ TEMPLATE_PART_POST_TYPE,
31
+ } from '../../store/constants';
27
32
  import { unlock } from '../../lock-unlock';
28
33
  import TemplateAreas from '../template-areas';
29
34
 
30
35
  export default function PostCardPanel( { className, actions } ) {
31
- const { modified, title, templateInfo, icon, postType } = useSelect(
32
- ( select ) => {
36
+ const { modified, title, templateInfo, icon, postType, isPostsPage } =
37
+ useSelect( ( select ) => {
33
38
  const {
34
39
  getEditedPostAttribute,
35
40
  getCurrentPostType,
36
41
  getCurrentPostId,
37
42
  __experimentalGetTemplateInfo,
38
43
  } = select( editorStore );
39
- const { getEditedEntityRecord } = select( coreStore );
44
+ const { getEditedEntityRecord, getEntityRecord } =
45
+ select( coreStore );
46
+ const siteSettings = getEntityRecord( 'root', 'site' );
40
47
  const _type = getCurrentPostType();
41
48
  const _id = getCurrentPostId();
42
49
  const _record = getEditedEntityRecord( 'postType', _type, _id );
@@ -51,9 +58,9 @@ export default function PostCardPanel( { className, actions } ) {
51
58
  icon: unlock( select( editorStore ) ).getPostIcon( _type, {
52
59
  area: _record?.area,
53
60
  } ),
61
+ isPostsPage: +_id === siteSettings?.page_for_posts,
54
62
  };
55
- }
56
- );
63
+ }, [] );
57
64
  const description = templateInfo?.description;
58
65
  const lastEditedText =
59
66
  modified &&
@@ -62,7 +69,9 @@ export default function PostCardPanel( { className, actions } ) {
62
69
  __( 'Last edited %s.' ),
63
70
  humanTimeDiff( modified )
64
71
  );
65
-
72
+ const showPostContentInfo =
73
+ ! isPostsPage &&
74
+ ! [ TEMPLATE_POST_TYPE, TEMPLATE_PART_POST_TYPE ].includes( postType );
66
75
  return (
67
76
  <PanelBody>
68
77
  <div
@@ -89,12 +98,15 @@ export default function PostCardPanel( { className, actions } ) {
89
98
  { actions }
90
99
  </HStack>
91
100
  <VStack className="editor-post-card-panel__content">
92
- { ( description || lastEditedText ) && (
101
+ { ( description ||
102
+ lastEditedText ||
103
+ showPostContentInfo ) && (
93
104
  <VStack
94
105
  className="editor-post-card-panel__description"
95
106
  spacing={ 2 }
96
107
  >
97
108
  { description && <Text>{ description }</Text> }
109
+ { showPostContentInfo && <PostContentInfo /> }
98
110
  { lastEditedText && (
99
111
  <Text>{ lastEditedText }</Text>
100
112
  ) }
@@ -106,3 +118,51 @@ export default function PostCardPanel( { className, actions } ) {
106
118
  </PanelBody>
107
119
  );
108
120
  }
121
+
122
+ // Taken from packages/editor/src/components/time-to-read/index.js.
123
+ const AVERAGE_READING_RATE = 189;
124
+
125
+ // This component renders the wordcount and reading time for the post.
126
+ function PostContentInfo() {
127
+ const postContent = useSelect(
128
+ ( select ) => select( editorStore ).getEditedPostAttribute( 'content' ),
129
+ []
130
+ );
131
+ /*
132
+ * translators: If your word count is based on single characters (e.g. East Asian characters),
133
+ * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
134
+ * Do not translate into your own language.
135
+ */
136
+ const wordCountType = _x( 'words', 'Word count type. Do not translate!' );
137
+ const wordsCounted = useMemo(
138
+ () => ( postContent ? wordCount( postContent, wordCountType ) : 0 ),
139
+ [ postContent, wordCountType ]
140
+ );
141
+ if ( ! wordsCounted ) {
142
+ return null;
143
+ }
144
+ const readingTime = Math.round( wordsCounted / AVERAGE_READING_RATE );
145
+ const wordsCountText = sprintf(
146
+ // translators: %s: the number of words in the post.
147
+ _n( '%s word', '%s words', wordsCounted ),
148
+ wordsCounted.toLocaleString()
149
+ );
150
+ const minutesText =
151
+ readingTime <= 1
152
+ ? __( '1 minute' )
153
+ : sprintf(
154
+ // translators: %s: the number of minutes to read the post.
155
+ _n( '%s minute', '%s minutes', readingTime ),
156
+ readingTime.toLocaleString()
157
+ );
158
+ return (
159
+ <Text>
160
+ { sprintf(
161
+ /* translators: 1: How many words a post has. 2: the number of minutes to read the post (e.g. 130 words, 2 minutes read time.) */
162
+ __( '%1$s, %2$s read time.' ),
163
+ wordsCountText,
164
+ minutesText
165
+ ) }
166
+ </Text>
167
+ );
168
+ }
@@ -9,6 +9,14 @@ import { useSelect } from '@wordpress/data';
9
9
  import PostTypeSupportCheck from '../post-type-support-check';
10
10
  import { store as editorStore } from '../../store';
11
11
 
12
+ /**
13
+ * Component for checking if the post type supports the excerpt field.
14
+ *
15
+ * @param {Object} props Props.
16
+ * @param {Element} props.children Children to be rendered.
17
+ *
18
+ * @return {Component} The component to be rendered.
19
+ */
12
20
  function PostExcerptCheck( { children } ) {
13
21
  const postType = useSelect( ( select ) => {
14
22
  const { getEditedPostAttribute } = select( editorStore );