@wordpress/editor 13.33.0 → 13.35.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 (494) hide show
  1. package/CHANGELOG.md +12 -4
  2. package/README.md +132 -20
  3. package/build/bindings/pattern-overrides.js +70 -1
  4. package/build/bindings/pattern-overrides.js.map +1 -1
  5. package/build/components/autosave-monitor/index.js +15 -12
  6. package/build/components/autosave-monitor/index.js.map +1 -1
  7. package/build/components/block-settings-menu/content-only-settings-menu.js +126 -0
  8. package/build/components/block-settings-menu/content-only-settings-menu.js.map +1 -0
  9. package/build/components/block-settings-menu/content-only-settings-menu.native.js +11 -0
  10. package/build/components/block-settings-menu/content-only-settings-menu.native.js.map +1 -0
  11. package/build/components/character-count/index.js +5 -0
  12. package/build/components/character-count/index.js.map +1 -1
  13. package/build/components/collapsible-block-toolbar/index.js +73 -0
  14. package/build/components/collapsible-block-toolbar/index.js.map +1 -0
  15. package/build/components/document-bar/index.js +2 -2
  16. package/build/components/document-bar/index.js.map +1 -1
  17. package/build/components/document-outline/check.js +8 -0
  18. package/build/components/document-outline/check.js.map +1 -1
  19. package/build/components/document-outline/index.js +11 -0
  20. package/build/components/document-outline/index.js.map +1 -1
  21. package/build/components/document-outline/item.js +2 -2
  22. package/build/components/document-outline/item.js.map +1 -1
  23. package/build/components/document-tools/index.js +15 -25
  24. package/build/components/document-tools/index.js.map +1 -1
  25. package/build/components/editor-canvas/edit-template-blocks-notification.js +1 -1
  26. package/build/components/editor-canvas/edit-template-blocks-notification.js.map +1 -1
  27. package/build/components/editor-canvas/index.js +19 -8
  28. package/build/components/editor-canvas/index.js.map +1 -1
  29. package/build/components/editor-history/redo.js +11 -0
  30. package/build/components/editor-history/redo.js.map +1 -1
  31. package/build/components/editor-history/undo.js +11 -0
  32. package/build/components/editor-history/undo.js.map +1 -1
  33. package/build/components/editor-snackbars/index.js +6 -0
  34. package/build/components/editor-snackbars/index.js.map +1 -1
  35. package/build/components/global-keyboard-shortcuts/index.js +7 -0
  36. package/build/components/global-keyboard-shortcuts/index.js.map +1 -1
  37. package/build/components/global-keyboard-shortcuts/register-shortcuts.js +35 -1
  38. package/build/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
  39. package/build/components/global-styles-provider/index.js +130 -0
  40. package/build/components/global-styles-provider/index.js.map +1 -0
  41. package/build/components/header/index.js +147 -0
  42. package/build/components/header/index.js.map +1 -0
  43. package/build/components/inserter-sidebar/index.js +56 -34
  44. package/build/components/inserter-sidebar/index.js.map +1 -1
  45. package/build/components/keyboard-shortcut-help-modal/config.js +4 -0
  46. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  47. package/build/components/keyboard-shortcut-help-modal/index.js +2 -2
  48. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  49. package/build/components/list-view-sidebar/index.js +1 -1
  50. package/build/components/list-view-sidebar/index.js.map +1 -1
  51. package/build/components/more-menu/copy-content-menu-item.js +59 -0
  52. package/build/components/more-menu/copy-content-menu-item.js.map +1 -0
  53. package/build/components/more-menu/index.js +119 -0
  54. package/build/components/more-menu/index.js.map +1 -0
  55. package/build/components/more-menu/tools-more-menu-group.js +23 -0
  56. package/build/components/more-menu/tools-more-menu-group.js.map +1 -0
  57. package/build/components/more-menu/view-more-menu-group.js +24 -0
  58. package/build/components/more-menu/view-more-menu-group.js.map +1 -0
  59. package/build/components/page-attributes/check.js +8 -0
  60. package/build/components/page-attributes/check.js.map +1 -1
  61. package/build/components/page-attributes/order.js +7 -0
  62. package/build/components/page-attributes/order.js.map +1 -1
  63. package/build/components/page-attributes/panel.js +14 -8
  64. package/build/components/page-attributes/panel.js.map +1 -1
  65. package/build/components/page-attributes/parent.js +7 -0
  66. package/build/components/page-attributes/parent.js.map +1 -1
  67. package/build/components/plugin-post-publish-panel/index.js +1 -1
  68. package/build/components/plugin-post-publish-panel/index.js.map +1 -1
  69. package/build/components/plugin-pre-publish-panel/index.js +1 -1
  70. package/build/components/plugin-pre-publish-panel/index.js.map +1 -1
  71. package/build/components/plugin-sidebar/index.js +1 -1
  72. package/build/components/plugin-sidebar/index.js.map +1 -1
  73. package/build/components/post-actions/actions.js +219 -66
  74. package/build/components/post-actions/actions.js.map +1 -1
  75. package/build/components/post-actions/index.js +32 -16
  76. package/build/components/post-actions/index.js.map +1 -1
  77. package/build/components/post-author/check.js +9 -0
  78. package/build/components/post-author/check.js.map +1 -1
  79. package/build/components/post-author/index.js +6 -0
  80. package/build/components/post-author/index.js.map +1 -1
  81. package/build/components/post-author/panel.js +5 -0
  82. package/build/components/post-author/panel.js.map +1 -1
  83. package/build/components/post-card-panel/index.js +7 -66
  84. package/build/components/post-card-panel/index.js.map +1 -1
  85. package/build/components/post-comments/index.js +28 -8
  86. package/build/components/post-comments/index.js.map +1 -1
  87. package/build/components/post-content-information/index.js +72 -0
  88. package/build/components/post-content-information/index.js.map +1 -0
  89. package/build/components/post-discussion/panel.js +104 -20
  90. package/build/components/post-discussion/panel.js.map +1 -1
  91. package/build/components/post-excerpt/check.js +0 -19
  92. package/build/components/post-excerpt/check.js.map +1 -1
  93. package/build/components/post-excerpt/index.js +52 -12
  94. package/build/components/post-excerpt/index.js.map +1 -1
  95. package/build/components/post-excerpt/panel.js +118 -7
  96. package/build/components/post-excerpt/panel.js.map +1 -1
  97. package/build/components/post-excerpt/plugin.js +2 -2
  98. package/build/components/post-excerpt/plugin.js.map +1 -1
  99. package/build/components/post-featured-image/index.js +1 -1
  100. package/build/components/post-featured-image/index.js.map +1 -1
  101. package/build/components/post-format/panel.js +27 -0
  102. package/build/components/post-format/panel.js.map +1 -0
  103. package/build/components/post-last-edited-panel/index.js +33 -0
  104. package/build/components/post-last-edited-panel/index.js.map +1 -0
  105. package/build/components/post-panel-row/index.js +2 -2
  106. package/build/components/post-panel-row/index.js.map +1 -1
  107. package/build/components/post-panel-section/index.js +28 -0
  108. package/build/components/post-panel-section/index.js.map +1 -0
  109. package/build/components/post-pingbacks/index.js +5 -2
  110. package/build/components/post-pingbacks/index.js.map +1 -1
  111. package/build/components/post-publish-button/post-publish-button-or-toggle.js +100 -0
  112. package/build/components/post-publish-button/post-publish-button-or-toggle.js.map +1 -0
  113. package/build/components/post-saved-state/index.js +2 -2
  114. package/build/components/post-saved-state/index.js.map +1 -1
  115. package/build/components/post-schedule/panel.js +1 -1
  116. package/build/components/post-schedule/panel.js.map +1 -1
  117. package/build/components/post-slug/panel.js +27 -0
  118. package/build/components/post-slug/panel.js.map +1 -0
  119. package/build/components/post-status/index.js +13 -13
  120. package/build/components/post-status/index.js.map +1 -1
  121. package/build/components/post-sticky/panel.js +21 -0
  122. package/build/components/post-sticky/panel.js.map +1 -0
  123. package/build/components/post-template/block-theme.js +2 -2
  124. package/build/components/post-template/block-theme.js.map +1 -1
  125. package/build/components/post-template/classic-theme.js +0 -1
  126. package/build/components/post-template/classic-theme.js.map +1 -1
  127. package/build/components/post-template/swap-template-button.js +2 -5
  128. package/build/components/post-template/swap-template-button.js.map +1 -1
  129. package/build/components/post-title/index.js +2 -2
  130. package/build/components/post-title/index.js.map +1 -1
  131. package/build/components/post-title/post-title-raw.js +2 -2
  132. package/build/components/post-title/post-title-raw.js.map +1 -1
  133. package/build/components/post-transform-panel/hooks.js +90 -0
  134. package/build/components/post-transform-panel/hooks.js.map +1 -0
  135. package/build/components/post-transform-panel/index.js +101 -0
  136. package/build/components/post-transform-panel/index.js.map +1 -0
  137. package/build/components/post-trash/panel.js +18 -0
  138. package/build/components/post-trash/panel.js.map +1 -0
  139. package/build/components/post-type-support-check/index.js +1 -1
  140. package/build/components/post-type-support-check/index.js.map +1 -1
  141. package/build/components/post-url/index.js +2 -1
  142. package/build/components/post-url/index.js.map +1 -1
  143. package/build/components/post-url/panel.js +1 -1
  144. package/build/components/post-url/panel.js.map +1 -1
  145. package/build/components/preferences-modal/enable-publish-sidebar.js +34 -0
  146. package/build/components/preferences-modal/enable-publish-sidebar.js.map +1 -0
  147. package/build/components/preferences-modal/index.js +11 -5
  148. package/build/components/preferences-modal/index.js.map +1 -1
  149. package/build/components/preview-dropdown/index.js +3 -1
  150. package/build/components/preview-dropdown/index.js.map +1 -1
  151. package/build/components/provider/disable-non-page-content-blocks.js +23 -16
  152. package/build/components/provider/disable-non-page-content-blocks.js.map +1 -1
  153. package/build/components/provider/index.js +3 -1
  154. package/build/components/provider/index.js.map +1 -1
  155. package/build/components/provider/use-block-editor-settings.js +21 -3
  156. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  157. package/build/components/save-publish-panels/index.js +89 -0
  158. package/build/components/save-publish-panels/index.js.map +1 -0
  159. package/build/components/sidebar/constants.js +11 -0
  160. package/build/components/sidebar/constants.js.map +1 -0
  161. package/build/components/sidebar/header.js +53 -0
  162. package/build/components/sidebar/header.js.map +1 -0
  163. package/build/components/sidebar/index.js +157 -0
  164. package/build/components/sidebar/index.js.map +1 -0
  165. package/build/components/sidebar/post-summary.js +84 -0
  166. package/build/components/sidebar/post-summary.js.map +1 -0
  167. package/build/components/start-page-options/index.js +10 -8
  168. package/build/components/start-page-options/index.js.map +1 -1
  169. package/build/components/start-template-options/index.js +192 -0
  170. package/build/components/start-template-options/index.js.map +1 -0
  171. package/build/components/template-content-panel/index.js +38 -0
  172. package/build/components/template-content-panel/index.js.map +1 -0
  173. package/build/hooks/pattern-overrides.js +10 -5
  174. package/build/hooks/pattern-overrides.js.map +1 -1
  175. package/build/private-apis.js +19 -8
  176. package/build/private-apis.js.map +1 -1
  177. package/build/private-apis.native.js +72 -0
  178. package/build/private-apis.native.js.map +1 -0
  179. package/build/store/private-selectors.js +6 -1
  180. package/build/store/private-selectors.js.map +1 -1
  181. package/build/store/reducer.js +15 -0
  182. package/build/store/reducer.js.map +1 -1
  183. package/build/store/selectors.js +3 -1
  184. package/build/store/selectors.js.map +1 -1
  185. package/build-module/bindings/pattern-overrides.js +69 -1
  186. package/build-module/bindings/pattern-overrides.js.map +1 -1
  187. package/build-module/components/autosave-monitor/index.js +15 -13
  188. package/build-module/components/autosave-monitor/index.js.map +1 -1
  189. package/build-module/components/block-settings-menu/content-only-settings-menu.js +119 -0
  190. package/build-module/components/block-settings-menu/content-only-settings-menu.js.map +1 -0
  191. package/build-module/components/block-settings-menu/content-only-settings-menu.native.js +5 -0
  192. package/build-module/components/block-settings-menu/content-only-settings-menu.native.js.map +1 -0
  193. package/build-module/components/character-count/index.js +6 -0
  194. package/build-module/components/character-count/index.js.map +1 -1
  195. package/build-module/components/collapsible-block-toolbar/index.js +65 -0
  196. package/build-module/components/collapsible-block-toolbar/index.js.map +1 -0
  197. package/build-module/components/document-bar/index.js +2 -2
  198. package/build-module/components/document-bar/index.js.map +1 -1
  199. package/build-module/components/document-outline/check.js +9 -0
  200. package/build-module/components/document-outline/check.js.map +1 -1
  201. package/build-module/components/document-outline/index.js +11 -0
  202. package/build-module/components/document-outline/index.js.map +1 -1
  203. package/build-module/components/document-outline/item.js +2 -2
  204. package/build-module/components/document-outline/item.js.map +1 -1
  205. package/build-module/components/document-tools/index.js +17 -27
  206. package/build-module/components/document-tools/index.js.map +1 -1
  207. package/build-module/components/editor-canvas/edit-template-blocks-notification.js +1 -1
  208. package/build-module/components/editor-canvas/edit-template-blocks-notification.js.map +1 -1
  209. package/build-module/components/editor-canvas/index.js +19 -8
  210. package/build-module/components/editor-canvas/index.js.map +1 -1
  211. package/build-module/components/editor-history/redo.js +11 -0
  212. package/build-module/components/editor-history/redo.js.map +1 -1
  213. package/build-module/components/editor-history/undo.js +11 -0
  214. package/build-module/components/editor-history/undo.js.map +1 -1
  215. package/build-module/components/editor-snackbars/index.js +6 -0
  216. package/build-module/components/editor-snackbars/index.js.map +1 -1
  217. package/build-module/components/global-keyboard-shortcuts/index.js +8 -0
  218. package/build-module/components/global-keyboard-shortcuts/index.js.map +1 -1
  219. package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js +36 -1
  220. package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
  221. package/build-module/components/global-styles-provider/index.js +120 -0
  222. package/build-module/components/global-styles-provider/index.js.map +1 -0
  223. package/build-module/components/header/index.js +139 -0
  224. package/build-module/components/header/index.js.map +1 -0
  225. package/build-module/components/inserter-sidebar/index.js +59 -37
  226. package/build-module/components/inserter-sidebar/index.js.map +1 -1
  227. package/build-module/components/keyboard-shortcut-help-modal/config.js +4 -0
  228. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  229. package/build-module/components/keyboard-shortcut-help-modal/index.js +2 -2
  230. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  231. package/build-module/components/list-view-sidebar/index.js +1 -1
  232. package/build-module/components/list-view-sidebar/index.js.map +1 -1
  233. package/build-module/components/more-menu/copy-content-menu-item.js +52 -0
  234. package/build-module/components/more-menu/copy-content-menu-item.js.map +1 -0
  235. package/build-module/components/more-menu/index.js +111 -0
  236. package/build-module/components/more-menu/index.js.map +1 -0
  237. package/build-module/components/more-menu/tools-more-menu-group.js +16 -0
  238. package/build-module/components/more-menu/tools-more-menu-group.js.map +1 -0
  239. package/build-module/components/more-menu/view-more-menu-group.js +17 -0
  240. package/build-module/components/more-menu/view-more-menu-group.js.map +1 -0
  241. package/build-module/components/page-attributes/check.js +9 -0
  242. package/build-module/components/page-attributes/check.js.map +1 -1
  243. package/build-module/components/page-attributes/order.js +7 -0
  244. package/build-module/components/page-attributes/order.js.map +1 -1
  245. package/build-module/components/page-attributes/panel.js +13 -6
  246. package/build-module/components/page-attributes/panel.js.map +1 -1
  247. package/build-module/components/page-attributes/parent.js +7 -0
  248. package/build-module/components/page-attributes/parent.js.map +1 -1
  249. package/build-module/components/plugin-post-publish-panel/index.js +1 -1
  250. package/build-module/components/plugin-post-publish-panel/index.js.map +1 -1
  251. package/build-module/components/plugin-pre-publish-panel/index.js +1 -1
  252. package/build-module/components/plugin-pre-publish-panel/index.js.map +1 -1
  253. package/build-module/components/plugin-sidebar/index.js +1 -1
  254. package/build-module/components/plugin-sidebar/index.js.map +1 -1
  255. package/build-module/components/post-actions/actions.js +223 -70
  256. package/build-module/components/post-actions/actions.js.map +1 -1
  257. package/build-module/components/post-actions/index.js +33 -17
  258. package/build-module/components/post-actions/index.js.map +1 -1
  259. package/build-module/components/post-author/check.js +10 -0
  260. package/build-module/components/post-author/check.js.map +1 -1
  261. package/build-module/components/post-author/index.js +6 -0
  262. package/build-module/components/post-author/index.js.map +1 -1
  263. package/build-module/components/post-author/panel.js +6 -0
  264. package/build-module/components/post-author/panel.js.map +1 -1
  265. package/build-module/components/post-card-panel/index.js +9 -67
  266. package/build-module/components/post-card-panel/index.js.map +1 -1
  267. package/build-module/components/post-comments/index.js +30 -10
  268. package/build-module/components/post-comments/index.js.map +1 -1
  269. package/build-module/components/post-content-information/index.js +66 -0
  270. package/build-module/components/post-content-information/index.js.map +1 -0
  271. package/build-module/components/post-discussion/panel.js +105 -21
  272. package/build-module/components/post-discussion/panel.js.map +1 -1
  273. package/build-module/components/post-excerpt/check.js +0 -19
  274. package/build-module/components/post-excerpt/check.js.map +1 -1
  275. package/build-module/components/post-excerpt/index.js +52 -11
  276. package/build-module/components/post-excerpt/index.js.map +1 -1
  277. package/build-module/components/post-excerpt/panel.js +118 -8
  278. package/build-module/components/post-excerpt/panel.js.map +1 -1
  279. package/build-module/components/post-excerpt/plugin.js +2 -2
  280. package/build-module/components/post-excerpt/plugin.js.map +1 -1
  281. package/build-module/components/post-featured-image/index.js +1 -1
  282. package/build-module/components/post-featured-image/index.js.map +1 -1
  283. package/build-module/components/post-format/panel.js +18 -0
  284. package/build-module/components/post-format/panel.js.map +1 -0
  285. package/build-module/components/post-last-edited-panel/index.js +26 -0
  286. package/build-module/components/post-last-edited-panel/index.js.map +1 -0
  287. package/build-module/components/post-panel-row/index.js +2 -2
  288. package/build-module/components/post-panel-row/index.js.map +1 -1
  289. package/build-module/components/post-panel-section/index.js +20 -0
  290. package/build-module/components/post-panel-section/index.js.map +1 -0
  291. package/build-module/components/post-pingbacks/index.js +6 -3
  292. package/build-module/components/post-pingbacks/index.js.map +1 -1
  293. package/build-module/components/post-publish-button/post-publish-button-or-toggle.js +91 -0
  294. package/build-module/components/post-publish-button/post-publish-button-or-toggle.js.map +1 -0
  295. package/build-module/components/post-saved-state/index.js +2 -2
  296. package/build-module/components/post-saved-state/index.js.map +1 -1
  297. package/build-module/components/post-schedule/panel.js +1 -1
  298. package/build-module/components/post-schedule/panel.js.map +1 -1
  299. package/build-module/components/post-slug/panel.js +18 -0
  300. package/build-module/components/post-slug/panel.js.map +1 -0
  301. package/build-module/components/post-status/index.js +13 -13
  302. package/build-module/components/post-status/index.js.map +1 -1
  303. package/build-module/components/post-sticky/panel.js +12 -0
  304. package/build-module/components/post-sticky/panel.js.map +1 -0
  305. package/build-module/components/post-template/block-theme.js +2 -2
  306. package/build-module/components/post-template/block-theme.js.map +1 -1
  307. package/build-module/components/post-template/classic-theme.js +0 -1
  308. package/build-module/components/post-template/classic-theme.js.map +1 -1
  309. package/build-module/components/post-template/swap-template-button.js +3 -6
  310. package/build-module/components/post-template/swap-template-button.js.map +1 -1
  311. package/build-module/components/post-title/index.js +2 -2
  312. package/build-module/components/post-title/index.js.map +1 -1
  313. package/build-module/components/post-title/post-title-raw.js +2 -2
  314. package/build-module/components/post-title/post-title-raw.js.map +1 -1
  315. package/build-module/components/post-transform-panel/hooks.js +83 -0
  316. package/build-module/components/post-transform-panel/hooks.js.map +1 -0
  317. package/build-module/components/post-transform-panel/index.js +94 -0
  318. package/build-module/components/post-transform-panel/index.js.map +1 -0
  319. package/build-module/components/post-trash/panel.js +10 -0
  320. package/build-module/components/post-trash/panel.js.map +1 -0
  321. package/build-module/components/post-type-support-check/index.js +1 -1
  322. package/build-module/components/post-type-support-check/index.js.map +1 -1
  323. package/build-module/components/post-url/index.js +2 -1
  324. package/build-module/components/post-url/index.js.map +1 -1
  325. package/build-module/components/post-url/panel.js +1 -1
  326. package/build-module/components/post-url/panel.js.map +1 -1
  327. package/build-module/components/preferences-modal/enable-publish-sidebar.js +27 -0
  328. package/build-module/components/preferences-modal/enable-publish-sidebar.js.map +1 -0
  329. package/build-module/components/preferences-modal/index.js +11 -5
  330. package/build-module/components/preferences-modal/index.js.map +1 -1
  331. package/build-module/components/preview-dropdown/index.js +3 -1
  332. package/build-module/components/preview-dropdown/index.js.map +1 -1
  333. package/build-module/components/provider/disable-non-page-content-blocks.js +24 -17
  334. package/build-module/components/provider/disable-non-page-content-blocks.js.map +1 -1
  335. package/build-module/components/provider/index.js +3 -1
  336. package/build-module/components/provider/index.js.map +1 -1
  337. package/build-module/components/provider/use-block-editor-settings.js +21 -3
  338. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  339. package/build-module/components/save-publish-panels/index.js +80 -0
  340. package/build-module/components/save-publish-panels/index.js.map +1 -0
  341. package/build-module/components/sidebar/constants.js +5 -0
  342. package/build-module/components/sidebar/constants.js.map +1 -0
  343. package/build-module/components/sidebar/header.js +46 -0
  344. package/build-module/components/sidebar/header.js.map +1 -0
  345. package/build-module/components/sidebar/index.js +149 -0
  346. package/build-module/components/sidebar/index.js.map +1 -0
  347. package/build-module/components/sidebar/post-summary.js +77 -0
  348. package/build-module/components/sidebar/post-summary.js.map +1 -0
  349. package/build-module/components/start-page-options/index.js +10 -8
  350. package/build-module/components/start-page-options/index.js.map +1 -1
  351. package/build-module/components/start-template-options/index.js +185 -0
  352. package/build-module/components/start-template-options/index.js.map +1 -0
  353. package/build-module/components/template-content-panel/index.js +31 -0
  354. package/build-module/components/template-content-panel/index.js.map +1 -0
  355. package/build-module/hooks/pattern-overrides.js +10 -5
  356. package/build-module/hooks/pattern-overrides.js.map +1 -1
  357. package/build-module/private-apis.js +19 -8
  358. package/build-module/private-apis.js.map +1 -1
  359. package/build-module/private-apis.native.js +62 -0
  360. package/build-module/private-apis.native.js.map +1 -0
  361. package/build-module/store/private-selectors.js +3 -0
  362. package/build-module/store/private-selectors.js.map +1 -1
  363. package/build-module/store/reducer.js +14 -0
  364. package/build-module/store/reducer.js.map +1 -1
  365. package/build-module/store/selectors.js +3 -1
  366. package/build-module/store/selectors.js.map +1 -1
  367. package/build-style/style-rtl.css +535 -48
  368. package/build-style/style.css +535 -48
  369. package/package.json +38 -36
  370. package/src/bindings/pattern-overrides.js +83 -1
  371. package/src/components/autocompleters/style.scss +1 -2
  372. package/src/components/autosave-monitor/index.js +15 -12
  373. package/src/components/block-settings-menu/content-only-settings-menu.js +175 -0
  374. package/src/components/block-settings-menu/content-only-settings-menu.native.js +4 -0
  375. package/src/components/block-settings-menu/style.scss +4 -0
  376. package/src/components/character-count/index.js +5 -0
  377. package/src/components/collapsible-block-toolbar/index.js +77 -0
  378. package/src/components/collapsible-block-toolbar/style.scss +80 -0
  379. package/src/components/document-bar/index.js +2 -2
  380. package/src/components/document-outline/check.js +8 -0
  381. package/src/components/document-outline/index.js +10 -0
  382. package/src/components/document-outline/item.js +2 -2
  383. package/src/components/document-tools/index.js +19 -26
  384. package/src/components/editor-canvas/edit-template-blocks-notification.js +1 -1
  385. package/src/components/editor-canvas/index.js +18 -6
  386. package/src/components/editor-history/redo.js +10 -0
  387. package/src/components/editor-history/undo.js +10 -0
  388. package/src/components/editor-snackbars/index.js +5 -0
  389. package/src/components/entities-saved-states/style.scss +7 -0
  390. package/src/components/global-keyboard-shortcuts/index.js +7 -0
  391. package/src/components/global-keyboard-shortcuts/register-shortcuts.js +42 -1
  392. package/src/components/global-styles-provider/index.js +162 -0
  393. package/src/components/header/index.js +154 -0
  394. package/src/components/header/style.scss +231 -0
  395. package/src/components/inserter-sidebar/index.js +52 -32
  396. package/src/components/inserter-sidebar/style.scss +10 -3
  397. package/src/components/keyboard-shortcut-help-modal/config.js +10 -1
  398. package/src/components/keyboard-shortcut-help-modal/index.js +2 -2
  399. package/src/components/list-view-sidebar/index.js +1 -1
  400. package/src/components/list-view-sidebar/style.scss +3 -2
  401. package/src/components/more-menu/copy-content-menu-item.js +51 -0
  402. package/src/components/more-menu/index.js +158 -0
  403. package/src/components/more-menu/tools-more-menu-group.js +11 -0
  404. package/src/components/more-menu/view-more-menu-group.js +13 -0
  405. package/src/components/page-attributes/check.js +8 -0
  406. package/src/components/page-attributes/order.js +6 -0
  407. package/src/components/page-attributes/panel.js +21 -17
  408. package/src/components/page-attributes/parent.js +6 -0
  409. package/src/components/page-attributes/test/order.js +5 -1
  410. package/src/components/plugin-post-publish-panel/index.js +1 -1
  411. package/src/components/plugin-pre-publish-panel/index.js +1 -1
  412. package/src/components/plugin-sidebar/index.js +1 -1
  413. package/src/components/post-actions/actions.js +373 -152
  414. package/src/components/post-actions/index.js +34 -33
  415. package/src/components/post-author/check.js +9 -0
  416. package/src/components/post-author/index.js +5 -0
  417. package/src/components/post-author/panel.js +5 -0
  418. package/src/components/post-card-panel/index.js +40 -141
  419. package/src/components/post-card-panel/style.scss +2 -6
  420. package/src/components/post-comments/index.js +47 -9
  421. package/src/components/post-content-information/index.js +83 -0
  422. package/src/components/post-content-information/style.scss +6 -0
  423. package/src/components/post-discussion/panel.js +108 -27
  424. package/src/components/post-discussion/style.scss +26 -0
  425. package/src/components/post-excerpt/check.js +0 -18
  426. package/src/components/post-excerpt/index.js +66 -15
  427. package/src/components/post-excerpt/panel.js +196 -19
  428. package/src/components/post-excerpt/plugin.js +2 -2
  429. package/src/components/post-excerpt/style.scss +24 -0
  430. package/src/components/post-featured-image/index.js +1 -1
  431. package/src/components/post-featured-image/style.scss +2 -8
  432. package/src/components/post-format/panel.js +22 -0
  433. package/src/components/post-format/style.scss +6 -0
  434. package/src/components/post-last-edited-panel/index.js +35 -0
  435. package/src/components/post-last-edited-panel/style.scss +6 -0
  436. package/src/components/post-last-revision/test/check.js +5 -1
  437. package/src/components/post-panel-row/index.js +2 -2
  438. package/src/components/post-panel-row/style.scss +3 -3
  439. package/src/components/post-panel-section/index.js +19 -0
  440. package/src/components/post-panel-section/style.scss +3 -0
  441. package/src/components/post-pingbacks/index.js +11 -2
  442. package/src/components/post-publish-button/post-publish-button-or-toggle.js +102 -0
  443. package/src/components/post-publish-button/test/post-publish-button-or-toggle.js +63 -0
  444. package/src/components/post-publish-panel/style.scss +48 -0
  445. package/src/components/post-publish-panel/test/__snapshots__/index.js.snap +225 -75
  446. package/src/components/post-saved-state/index.js +2 -2
  447. package/src/components/post-schedule/panel.js +1 -1
  448. package/src/components/post-schedule/style.scss +2 -4
  449. package/src/components/post-slug/panel.js +22 -0
  450. package/src/components/post-slug/style.scss +5 -0
  451. package/src/components/post-slug/test/index.js +5 -1
  452. package/src/components/post-status/index.js +88 -80
  453. package/src/components/post-status/style.scss +0 -1
  454. package/src/components/post-sticky/panel.js +18 -0
  455. package/src/components/post-template/block-theme.js +2 -2
  456. package/src/components/post-template/classic-theme.js +0 -1
  457. package/src/components/post-template/swap-template-button.js +3 -6
  458. package/src/components/post-text-editor/style.scss +1 -1
  459. package/src/components/post-title/index.js +2 -2
  460. package/src/components/post-title/post-title-raw.js +2 -2
  461. package/src/components/post-title/style.scss +1 -1
  462. package/src/components/post-transform-panel/hooks.js +114 -0
  463. package/src/components/post-transform-panel/index.js +99 -0
  464. package/src/components/post-trash/panel.js +13 -0
  465. package/src/components/post-type-support-check/index.js +1 -1
  466. package/src/components/post-type-support-check/test/index.js +2 -2
  467. package/src/components/post-url/index.js +1 -0
  468. package/src/components/post-url/panel.js +1 -1
  469. package/src/components/preferences-modal/enable-publish-sidebar.js +28 -0
  470. package/src/components/preferences-modal/index.js +17 -3
  471. package/src/components/preview-dropdown/index.js +3 -1
  472. package/src/components/provider/disable-non-page-content-blocks.js +23 -21
  473. package/src/components/provider/index.js +4 -0
  474. package/src/components/provider/use-block-editor-settings.js +19 -4
  475. package/src/components/save-publish-panels/index.js +96 -0
  476. package/src/components/save-publish-panels/style.scss +36 -0
  477. package/src/components/sidebar/constants.js +4 -0
  478. package/src/components/sidebar/header.js +49 -0
  479. package/src/components/sidebar/index.js +200 -0
  480. package/src/components/sidebar/post-summary.js +104 -0
  481. package/src/components/sidebar/style.scss +18 -0
  482. package/src/components/start-page-options/index.js +12 -5
  483. package/src/components/start-template-options/index.js +219 -0
  484. package/src/components/start-template-options/style.scss +55 -0
  485. package/src/components/template-areas/style.scss +0 -1
  486. package/src/components/template-content-panel/index.js +36 -0
  487. package/src/hooks/pattern-overrides.js +12 -6
  488. package/src/private-apis.js +22 -8
  489. package/src/private-apis.native.js +61 -0
  490. package/src/store/private-selectors.js +3 -0
  491. package/src/store/reducer.js +12 -0
  492. package/src/store/selectors.js +3 -1
  493. package/src/style.scss +11 -0
  494. package/src/components/post-slug/test/check.js +0 -17
@@ -2,7 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useSelect } from '@wordpress/data';
5
- import { useState } from '@wordpress/element';
5
+ import { useState, useMemo } from '@wordpress/element';
6
6
  import { __ } from '@wordpress/i18n';
7
7
  import {
8
8
  privateApis as componentsPrivateApis,
@@ -17,11 +17,6 @@ import { moreVertical } from '@wordpress/icons';
17
17
  import { unlock } from '../../lock-unlock';
18
18
  import { usePostActions } from './actions';
19
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
20
 
26
21
  const {
27
22
  DropdownMenuV2: DropdownMenu,
@@ -31,50 +26,50 @@ const {
31
26
  kebabCase,
32
27
  } = unlock( componentsPrivateApis );
33
28
 
34
- const POST_ACTIONS_WHILE_EDITING = [
35
- 'view-post',
36
- 'view-post-revisions',
37
- 'rename-post',
38
- 'move-to-trash',
39
- ];
40
-
41
29
  export default function PostActions( { onActionPerformed, buttonProps } ) {
42
- const { postType, item } = useSelect( ( select ) => {
30
+ const [ isActionsMenuOpen, setIsActionsMenuOpen ] = useState( false );
31
+ const { item, postType } = useSelect( ( select ) => {
43
32
  const { getCurrentPostType, getCurrentPost } = select( editorStore );
44
33
  return {
45
- postType: getCurrentPostType(),
46
34
  item: getCurrentPost(),
35
+ postType: getCurrentPostType(),
47
36
  };
48
- } );
49
- const actions = usePostActions(
50
- onActionPerformed,
51
- POST_ACTIONS_WHILE_EDITING
52
- );
37
+ }, [] );
38
+ const allActions = usePostActions( postType, onActionPerformed );
39
+
40
+ const actions = useMemo( () => {
41
+ return allActions.filter( ( action ) => {
42
+ return ! action.isEligible || action.isEligible( item );
43
+ } );
44
+ }, [ allActions, item ] );
53
45
 
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
46
  return (
64
47
  <DropdownMenu
48
+ open={ isActionsMenuOpen }
65
49
  trigger={
66
50
  <Button
67
51
  size="small"
68
52
  icon={ moreVertical }
69
53
  label={ __( 'Actions' ) }
70
54
  disabled={ ! actions.length }
55
+ __experimentalIsFocusable
71
56
  className="editor-all-actions-button"
57
+ onClick={ () =>
58
+ setIsActionsMenuOpen( ! isActionsMenuOpen )
59
+ }
72
60
  { ...buttonProps }
73
61
  />
74
62
  }
63
+ onOpenChange={ setIsActionsMenuOpen }
75
64
  placement="bottom-end"
76
65
  >
77
- <ActionsDropdownMenuGroup actions={ actions } item={ item } />
66
+ <ActionsDropdownMenuGroup
67
+ actions={ actions }
68
+ item={ item }
69
+ onClose={ () => {
70
+ setIsActionsMenuOpen( false );
71
+ } }
72
+ />
78
73
  </DropdownMenu>
79
74
  );
80
75
  }
@@ -97,7 +92,8 @@ function DropdownMenuItemTrigger( { action, onClick } ) {
97
92
  }
98
93
 
99
94
  // Copied as is from packages/dataviews/src/item-actions.js
100
- function ActionWithModal( { action, item, ActionTrigger } ) {
95
+ // With an added onClose prop.
96
+ function ActionWithModal( { action, item, ActionTrigger, onClose } ) {
101
97
  const [ isModalOpen, setIsModalOpen ] = useState( false );
102
98
  const actionTriggerProps = {
103
99
  action,
@@ -120,7 +116,10 @@ function ActionWithModal( { action, item, ActionTrigger } ) {
120
116
  >
121
117
  <RenderModal
122
118
  items={ [ item ] }
123
- closeModal={ () => setIsModalOpen( false ) }
119
+ closeModal={ () => {
120
+ setIsModalOpen( false );
121
+ onClose();
122
+ } }
124
123
  />
125
124
  </Modal>
126
125
  ) }
@@ -129,7 +128,8 @@ function ActionWithModal( { action, item, ActionTrigger } ) {
129
128
  }
130
129
 
131
130
  // Copied as is from packages/dataviews/src/item-actions.js
132
- function ActionsDropdownMenuGroup( { actions, item } ) {
131
+ // With an added onClose prop.
132
+ function ActionsDropdownMenuGroup( { actions, item, onClose } ) {
133
133
  return (
134
134
  <DropdownMenuGroup>
135
135
  { actions.map( ( action ) => {
@@ -140,6 +140,7 @@ function ActionsDropdownMenuGroup( { actions, item } ) {
140
140
  action={ action }
141
141
  item={ item }
142
142
  ActionTrigger={ DropdownMenuItemTrigger }
143
+ onClose={ onClose }
143
144
  />
144
145
  );
145
146
  }
@@ -11,6 +11,15 @@ import PostTypeSupportCheck from '../post-type-support-check';
11
11
  import { store as editorStore } from '../../store';
12
12
  import { AUTHORS_QUERY } from './constants';
13
13
 
14
+ /**
15
+ * Wrapper component that renders its children only if the post type supports the author.
16
+ *
17
+ * @param {Object} props The component props.
18
+ * @param {Element} props.children Children to be rendered.
19
+ *
20
+ * @return {Component|null} The component to be rendered. Return `null` if the post type doesn't
21
+ * supports the author or if there are no authors available.
22
+ */
14
23
  export default function PostAuthorCheck( { children } ) {
15
24
  const { hasAssignAuthorAction, hasAuthors } = useSelect( ( select ) => {
16
25
  const post = select( editorStore ).getCurrentPost();
@@ -13,6 +13,11 @@ import { AUTHORS_QUERY } from './constants';
13
13
 
14
14
  const minimumUsersForCombobox = 25;
15
15
 
16
+ /**
17
+ * Renders the component for selecting the post author.
18
+ *
19
+ * @return {Component} The component to be rendered.
20
+ */
16
21
  function PostAuthor() {
17
22
  const showCombobox = useSelect( ( select ) => {
18
23
  const authors = select( coreStore ).getUsers( AUTHORS_QUERY );
@@ -5,6 +5,11 @@ import PostAuthorCheck from './check';
5
5
  import PostAuthorForm from './index';
6
6
  import PostPanelRow from '../post-panel-row';
7
7
 
8
+ /**
9
+ * Renders the Post Author Panel component.
10
+ *
11
+ * @return {Component} The component to be rendered.
12
+ */
8
13
  export function PostAuthor() {
9
14
  return (
10
15
  <PostAuthorCheck>
@@ -1,25 +1,15 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
9
4
  import {
10
5
  Icon,
11
6
  __experimentalHStack as HStack,
12
- __experimentalVStack as VStack,
13
7
  __experimentalText as Text,
14
- PanelBody,
15
8
  } from '@wordpress/components';
16
9
  import { store as coreStore } from '@wordpress/core-data';
17
10
  import { useSelect } from '@wordpress/data';
18
- import { __, _x, _n, sprintf } from '@wordpress/i18n';
19
- import { humanTimeDiff } from '@wordpress/date';
11
+ import { __ } from '@wordpress/i18n';
20
12
  import { decodeEntities } from '@wordpress/html-entities';
21
- import { count as wordCount } from '@wordpress/wordcount';
22
- import { useMemo } from '@wordpress/element';
23
13
 
24
14
  /**
25
15
  * Internal dependencies
@@ -30,139 +20,48 @@ import {
30
20
  TEMPLATE_PART_POST_TYPE,
31
21
  } from '../../store/constants';
32
22
  import { unlock } from '../../lock-unlock';
33
- import TemplateAreas from '../template-areas';
34
23
 
35
- export default function PostCardPanel( { className, actions } ) {
36
- const { modified, title, templateInfo, icon, postType, isPostsPage } =
37
- useSelect( ( select ) => {
38
- const {
39
- getEditedPostAttribute,
40
- getCurrentPostType,
41
- getCurrentPostId,
42
- __experimentalGetTemplateInfo,
43
- } = select( editorStore );
44
- const { getEditedEntityRecord, getEntityRecord } =
45
- select( coreStore );
46
- const siteSettings = getEntityRecord( 'root', 'site' );
47
- const _type = getCurrentPostType();
48
- const _id = getCurrentPostId();
49
- const _record = getEditedEntityRecord( 'postType', _type, _id );
50
- const _templateInfo = __experimentalGetTemplateInfo( _record );
51
- return {
52
- title:
53
- _templateInfo?.title || getEditedPostAttribute( 'title' ),
54
- modified: getEditedPostAttribute( 'modified' ),
55
- id: _id,
56
- postType: _type,
57
- templateInfo: _templateInfo,
58
- icon: unlock( select( editorStore ) ).getPostIcon( _type, {
59
- area: _record?.area,
60
- } ),
61
- isPostsPage: +_id === siteSettings?.page_for_posts,
62
- };
63
- }, [] );
64
- const description = templateInfo?.description;
65
- const lastEditedText =
66
- modified &&
67
- sprintf(
68
- // translators: %s: Human-readable time difference, e.g. "2 days ago".
69
- __( 'Last edited %s.' ),
70
- humanTimeDiff( modified )
71
- );
72
- const showPostContentInfo =
73
- ! isPostsPage &&
74
- ! [ TEMPLATE_POST_TYPE, TEMPLATE_PART_POST_TYPE ].includes( postType );
24
+ export default function PostCardPanel( { actions } ) {
25
+ const { title, icon } = useSelect( ( select ) => {
26
+ const {
27
+ getEditedPostAttribute,
28
+ getCurrentPostType,
29
+ getCurrentPostId,
30
+ __experimentalGetTemplateInfo,
31
+ } = select( editorStore );
32
+ const { getEditedEntityRecord } = select( coreStore );
33
+ const _type = getCurrentPostType();
34
+ const _id = getCurrentPostId();
35
+ const _record = getEditedEntityRecord( 'postType', _type, _id );
36
+ const _templateInfo =
37
+ [ TEMPLATE_POST_TYPE, TEMPLATE_PART_POST_TYPE ].includes( _type ) &&
38
+ __experimentalGetTemplateInfo( _record );
39
+ return {
40
+ title: _templateInfo?.title || getEditedPostAttribute( 'title' ),
41
+ icon: unlock( select( editorStore ) ).getPostIcon( _type, {
42
+ area: _record?.area,
43
+ } ),
44
+ };
45
+ }, [] );
75
46
  return (
76
- <PanelBody>
77
- <div
78
- className={ classnames( 'editor-post-card-panel', className ) }
47
+ <div className="editor-post-card-panel">
48
+ <HStack
49
+ spacing={ 2 }
50
+ className="editor-post-card-panel__header"
51
+ align="flex-start"
79
52
  >
80
- <HStack
81
- spacing={ 2 }
82
- className="editor-post-card-panel__header"
83
- align="flex-start"
53
+ <Icon className="editor-post-card-panel__icon" icon={ icon } />
54
+ <Text
55
+ numberOfLines={ 2 }
56
+ truncate
57
+ className="editor-post-card-panel__title"
58
+ weight={ 500 }
59
+ as="h2"
84
60
  >
85
- <Icon
86
- className="editor-post-card-panel__icon"
87
- icon={ icon }
88
- />
89
- <Text
90
- numberOfLines={ 2 }
91
- truncate
92
- className="editor-post-card-panel__title"
93
- weight={ 500 }
94
- as="h2"
95
- >
96
- { title ? decodeEntities( title ) : __( 'No Title' ) }
97
- </Text>
98
- { actions }
99
- </HStack>
100
- <VStack className="editor-post-card-panel__content">
101
- { ( description ||
102
- lastEditedText ||
103
- showPostContentInfo ) && (
104
- <VStack
105
- className="editor-post-card-panel__description"
106
- spacing={ 2 }
107
- >
108
- { description && <Text>{ description }</Text> }
109
- { showPostContentInfo && <PostContentInfo /> }
110
- { lastEditedText && (
111
- <Text>{ lastEditedText }</Text>
112
- ) }
113
- </VStack>
114
- ) }
115
- { postType === TEMPLATE_POST_TYPE && <TemplateAreas /> }
116
- </VStack>
117
- </div>
118
- </PanelBody>
119
- );
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>
61
+ { title ? decodeEntities( title ) : __( 'No Title' ) }
62
+ </Text>
63
+ { actions }
64
+ </HStack>
65
+ </div>
167
66
  );
168
67
  }
@@ -20,13 +20,9 @@
20
20
  &__header {
21
21
  display: flex;
22
22
  justify-content: space-between;
23
- margin: 0 0 $grid-unit-10;
24
23
  }
25
24
 
26
- &__description {
27
- color: $gray-700;
28
- & .components-text {
29
- color: inherit;
30
- }
25
+ &.has-description &__header {
26
+ margin-bottom: $grid-unit-10;
31
27
  }
32
28
  }
@@ -2,7 +2,11 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import { CheckboxControl } from '@wordpress/components';
5
+ import {
6
+ RadioControl,
7
+ __experimentalText as Text,
8
+ __experimentalVStack as VStack,
9
+ } from '@wordpress/components';
6
10
  import { useDispatch, useSelect } from '@wordpress/data';
7
11
 
8
12
  /**
@@ -10,6 +14,34 @@ import { useDispatch, useSelect } from '@wordpress/data';
10
14
  */
11
15
  import { store as editorStore } from '../../store';
12
16
 
17
+ const COMMENT_OPTIONS = [
18
+ {
19
+ label: (
20
+ <>
21
+ { __( 'Open' ) }
22
+ <Text variant="muted" size={ 12 }>
23
+ { __( 'Visitors can add new comments and replies.' ) }
24
+ </Text>
25
+ </>
26
+ ),
27
+ value: 'open',
28
+ },
29
+ {
30
+ label: (
31
+ <>
32
+ { __( 'Closed' ) }
33
+ <Text variant="muted" size={ 12 }>
34
+ { __( 'Visitors cannot add new comments or replies.' ) }
35
+ </Text>
36
+ <Text variant="muted" size={ 12 }>
37
+ { __( 'Existing comments remain visible.' ) }
38
+ </Text>
39
+ </>
40
+ ),
41
+ value: 'closed',
42
+ },
43
+ ];
44
+
13
45
  function PostComments() {
14
46
  const commentStatus = useSelect(
15
47
  ( select ) =>
@@ -18,18 +50,24 @@ function PostComments() {
18
50
  []
19
51
  );
20
52
  const { editPost } = useDispatch( editorStore );
21
- const onToggleComments = () =>
53
+ const handleStatus = ( newCommentStatus ) =>
22
54
  editPost( {
23
- comment_status: commentStatus === 'open' ? 'closed' : 'open',
55
+ comment_status: newCommentStatus,
24
56
  } );
25
57
 
26
58
  return (
27
- <CheckboxControl
28
- __nextHasNoMarginBottom
29
- label={ __( 'Allow comments' ) }
30
- checked={ commentStatus === 'open' }
31
- onChange={ onToggleComments }
32
- />
59
+ <form>
60
+ <VStack spacing={ 4 }>
61
+ <RadioControl
62
+ className="editor-change-status__options"
63
+ hideLabelFromVision
64
+ label={ __( 'Comment status' ) }
65
+ options={ COMMENT_OPTIONS }
66
+ onChange={ handleStatus }
67
+ selected={ commentStatus }
68
+ />
69
+ </VStack>
70
+ </form>
33
71
  );
34
72
  }
35
73
 
@@ -0,0 +1,83 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __experimentalText as Text } from '@wordpress/components';
5
+ import { useSelect } from '@wordpress/data';
6
+ import { __, _x, _n, sprintf } from '@wordpress/i18n';
7
+ import { count as wordCount } from '@wordpress/wordcount';
8
+ import { useMemo } from '@wordpress/element';
9
+ import { store as coreStore } from '@wordpress/core-data';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import { store as editorStore } from '../../store';
15
+ import {
16
+ TEMPLATE_POST_TYPE,
17
+ TEMPLATE_PART_POST_TYPE,
18
+ } from '../../store/constants';
19
+
20
+ // Taken from packages/editor/src/components/time-to-read/index.js.
21
+ const AVERAGE_READING_RATE = 189;
22
+
23
+ // This component renders the wordcount and reading time for the post.
24
+ export default function PostContentInformation() {
25
+ const { postContent } = useSelect( ( select ) => {
26
+ const { getEditedPostAttribute, getCurrentPostType, getCurrentPostId } =
27
+ select( editorStore );
28
+ const { getEntityRecord } = select( coreStore );
29
+ const siteSettings = getEntityRecord( 'root', 'site' );
30
+ const postType = getCurrentPostType();
31
+ const _id = getCurrentPostId();
32
+ const isPostsPage = +_id === siteSettings?.page_for_posts;
33
+ const showPostContentInfo =
34
+ ! isPostsPage &&
35
+ ! [ TEMPLATE_POST_TYPE, TEMPLATE_PART_POST_TYPE ].includes(
36
+ postType
37
+ );
38
+ return {
39
+ postContent:
40
+ showPostContentInfo && getEditedPostAttribute( 'content' ),
41
+ };
42
+ }, [] );
43
+
44
+ /*
45
+ * translators: If your word count is based on single characters (e.g. East Asian characters),
46
+ * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
47
+ * Do not translate into your own language.
48
+ */
49
+ const wordCountType = _x( 'words', 'Word count type. Do not translate!' );
50
+ const wordsCounted = useMemo(
51
+ () => ( postContent ? wordCount( postContent, wordCountType ) : 0 ),
52
+ [ postContent, wordCountType ]
53
+ );
54
+ if ( ! wordsCounted ) {
55
+ return null;
56
+ }
57
+ const readingTime = Math.round( wordsCounted / AVERAGE_READING_RATE );
58
+ const wordsCountText = sprintf(
59
+ // translators: %s: the number of words in the post.
60
+ _n( '%s word', '%s words', wordsCounted ),
61
+ wordsCounted.toLocaleString()
62
+ );
63
+ const minutesText =
64
+ readingTime <= 1
65
+ ? __( '1 minute' )
66
+ : sprintf(
67
+ // translators: %s: the number of minutes to read the post.
68
+ _n( '%s minute', '%s minutes', readingTime ),
69
+ readingTime.toLocaleString()
70
+ );
71
+ return (
72
+ <div className="editor-post-content-information">
73
+ <Text>
74
+ { sprintf(
75
+ /* 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.) */
76
+ __( '%1$s, %2$s read time.' ),
77
+ wordsCountText,
78
+ minutesText
79
+ ) }
80
+ </Text>
81
+ </div>
82
+ );
83
+ }
@@ -0,0 +1,6 @@
1
+ .editor-post-content-information {
2
+ color: $gray-700;
3
+ & .components-text {
4
+ color: inherit;
5
+ }
6
+ }