@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,8 +2,16 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import { PanelBody, PanelRow } from '@wordpress/components';
6
- import { useDispatch, useSelect } from '@wordpress/data';
5
+ import {
6
+ Dropdown,
7
+ Button,
8
+ __experimentalVStack as VStack,
9
+ __experimentalText as Text,
10
+ } from '@wordpress/components';
11
+ import { useSelect } from '@wordpress/data';
12
+ import { useState, useMemo } from '@wordpress/element';
13
+ import { __experimentalInspectorPopoverHeader as InspectorPopoverHeader } from '@wordpress/block-editor';
14
+ import { store as coreStore } from '@wordpress/core-data';
7
15
 
8
16
  /**
9
17
  * Internal dependencies
@@ -12,20 +20,95 @@ import { store as editorStore } from '../../store';
12
20
  import PostTypeSupportCheck from '../post-type-support-check';
13
21
  import PostComments from '../post-comments';
14
22
  import PostPingbacks from '../post-pingbacks';
23
+ import PostPanelRow from '../post-panel-row';
15
24
 
16
25
  const PANEL_NAME = 'discussion-panel';
17
26
 
18
- function PostDiscussionPanel() {
19
- const { isEnabled, isOpened } = useSelect( ( select ) => {
20
- const { isEditorPanelEnabled, isEditorPanelOpened } =
21
- select( editorStore );
27
+ function ModalContents( { onClose } ) {
28
+ return (
29
+ <div className="editor-post-discussion">
30
+ <InspectorPopoverHeader
31
+ title={ __( 'Discussion' ) }
32
+ onClose={ onClose }
33
+ />
34
+ <VStack spacing={ 4 }>
35
+ <PostTypeSupportCheck supportKeys="comments">
36
+ <PostComments />
37
+ </PostTypeSupportCheck>
38
+ <PostTypeSupportCheck supportKeys="trackbacks">
39
+ <PostPingbacks />
40
+ </PostTypeSupportCheck>
41
+ </VStack>
42
+ </div>
43
+ );
44
+ }
45
+
46
+ function PostDiscussionToggle( { isOpen, onClick } ) {
47
+ const {
48
+ commentStatus,
49
+ pingStatus,
50
+ commentsSupported,
51
+ trackbacksSupported,
52
+ } = useSelect( ( select ) => {
53
+ const { getEditedPostAttribute } = select( editorStore );
54
+ const { getPostType } = select( coreStore );
55
+ const postType = getPostType( getEditedPostAttribute( 'type' ) );
56
+ return {
57
+ commentStatus: getEditedPostAttribute( 'comment_status' ) ?? 'open',
58
+ pingStatus: getEditedPostAttribute( 'ping_status' ) ?? 'open',
59
+ commentsSupported: !! postType.supports.comments,
60
+ trackbacksSupported: !! postType.supports.trackbacks,
61
+ };
62
+ }, [] );
63
+ let label;
64
+ if ( commentStatus === 'open' ) {
65
+ if ( pingStatus === 'open' ) {
66
+ label = __( 'Open' );
67
+ } else {
68
+ label = trackbacksSupported ? __( 'Comments only' ) : __( 'Open' );
69
+ }
70
+ } else if ( pingStatus === 'open' ) {
71
+ label = commentsSupported ? __( 'Pings only' ) : __( 'Pings enabled' );
72
+ } else {
73
+ label = __( 'Closed' );
74
+ }
75
+ return (
76
+ <Button
77
+ size="compact"
78
+ className="editor-post-discussion__panel-toggle"
79
+ variant="tertiary"
80
+ aria-label={ __( 'Change discussion options' ) }
81
+ aria-expanded={ isOpen }
82
+ onClick={ onClick }
83
+ >
84
+ <Text>{ label }</Text>
85
+ </Button>
86
+ );
87
+ }
88
+
89
+ export default function PostDiscussionPanel() {
90
+ const { isEnabled } = useSelect( ( select ) => {
91
+ const { isEditorPanelEnabled } = select( editorStore );
22
92
  return {
23
93
  isEnabled: isEditorPanelEnabled( PANEL_NAME ),
24
- isOpened: isEditorPanelOpened( PANEL_NAME ),
25
94
  };
26
95
  }, [] );
27
96
 
28
- const { toggleEditorPanelOpened } = useDispatch( editorStore );
97
+ // Use internal state instead of a ref to make sure that the component
98
+ // re-renders when the popover's anchor updates.
99
+ const [ popoverAnchor, setPopoverAnchor ] = useState( null );
100
+ // Memoize popoverProps to avoid returning a new object every time.
101
+ const popoverProps = useMemo(
102
+ () => ( {
103
+ // Anchor the popover to the middle of the entire row so that it doesn't
104
+ // move around when the label changes.
105
+ anchor: popoverAnchor,
106
+ placement: 'left-start',
107
+ offset: 36,
108
+ shift: true,
109
+ } ),
110
+ [ popoverAnchor ]
111
+ );
29
112
 
30
113
  if ( ! isEnabled ) {
31
114
  return null;
@@ -33,25 +116,23 @@ function PostDiscussionPanel() {
33
116
 
34
117
  return (
35
118
  <PostTypeSupportCheck supportKeys={ [ 'comments', 'trackbacks' ] }>
36
- <PanelBody
37
- title={ __( 'Discussion' ) }
38
- opened={ isOpened }
39
- onToggle={ () => toggleEditorPanelOpened( PANEL_NAME ) }
40
- >
41
- <PostTypeSupportCheck supportKeys="comments">
42
- <PanelRow>
43
- <PostComments />
44
- </PanelRow>
45
- </PostTypeSupportCheck>
46
-
47
- <PostTypeSupportCheck supportKeys="trackbacks">
48
- <PanelRow>
49
- <PostPingbacks />
50
- </PanelRow>
51
- </PostTypeSupportCheck>
52
- </PanelBody>
119
+ <PostPanelRow label={ __( 'Discussion' ) } ref={ setPopoverAnchor }>
120
+ <Dropdown
121
+ popoverProps={ popoverProps }
122
+ className="editor-post-discussion__panel-dropdown"
123
+ contentClassName="editor-post-discussion__panel-dialog"
124
+ focusOnMount
125
+ renderToggle={ ( { isOpen, onToggle } ) => (
126
+ <PostDiscussionToggle
127
+ isOpen={ isOpen }
128
+ onClick={ onToggle }
129
+ />
130
+ ) }
131
+ renderContent={ ( { onClose } ) => (
132
+ <ModalContents onClose={ onClose } />
133
+ ) }
134
+ />
135
+ </PostPanelRow>
53
136
  </PostTypeSupportCheck>
54
137
  );
55
138
  }
56
-
57
- export default PostDiscussionPanel;
@@ -0,0 +1,26 @@
1
+ .editor-post-discussion__panel-dialog .editor-post-discussion {
2
+ // sidebar width - popover padding - form margin
3
+ min-width: $sidebar-width - $grid-unit-20 - $grid-unit-20;
4
+ margin: $grid-unit-10;
5
+
6
+ .components-radio-control__option {
7
+ align-items: flex-start;
8
+ }
9
+
10
+ .components-radio-control__label .components-text {
11
+ display: block;
12
+ margin-top: $grid-unit-05;
13
+ }
14
+ }
15
+ .editor-post-discussion__panel-toggle {
16
+ &.components-button {
17
+ height: auto;
18
+ }
19
+ .components-text {
20
+ color: inherit;
21
+ }
22
+ }
23
+
24
+ .editor-post-discussion__panel-dialog .components-popover__content {
25
+ min-width: 320px;
26
+ }
@@ -1,13 +1,7 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { useSelect } from '@wordpress/data';
5
-
6
1
  /**
7
2
  * Internal dependencies
8
3
  */
9
4
  import PostTypeSupportCheck from '../post-type-support-check';
10
- import { store as editorStore } from '../../store';
11
5
 
12
6
  /**
13
7
  * Component for checking if the post type supports the excerpt field.
@@ -18,18 +12,6 @@ import { store as editorStore } from '../../store';
18
12
  * @return {Component} The component to be rendered.
19
13
  */
20
14
  function PostExcerptCheck( { children } ) {
21
- const postType = useSelect( ( select ) => {
22
- const { getEditedPostAttribute } = select( editorStore );
23
- return getEditedPostAttribute( 'type' );
24
- }, [] );
25
-
26
- // This special case is unfortunate, but the REST API of wp_template and wp_template_part
27
- // support the excerpt field throught the "description" field rather than "excerpt" which means
28
- // the default ExcerptPanel won't work for these.
29
- if ( [ 'wp_template', 'wp_template_part' ].includes( postType ) ) {
30
- return null;
31
- }
32
-
33
15
  return (
34
16
  <PostTypeSupportCheck supportKeys="excerpt">
35
17
  { children }
@@ -4,37 +4,88 @@
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import { ExternalLink, TextareaControl } from '@wordpress/components';
6
6
  import { useDispatch, useSelect } from '@wordpress/data';
7
+ import { useState } from '@wordpress/element';
7
8
 
8
9
  /**
9
10
  * Internal dependencies
10
11
  */
11
12
  import { store as editorStore } from '../../store';
12
13
 
13
- function PostExcerpt() {
14
- const excerpt = useSelect(
15
- ( select ) => select( editorStore ).getEditedPostAttribute( 'excerpt' ),
14
+ /**
15
+ * Renders an editable textarea for the post excerpt.
16
+ * Templates, template parts and patterns use the `excerpt` field as a description semantically.
17
+ * Additionally templates and template parts override the `excerpt` field as `description` in
18
+ * REST API. So this component handles proper labeling and updating the edited entity.
19
+ *
20
+ * @param {Object} props - Component props.
21
+ * @param {boolean} [props.hideLabelFromVision=false] - Whether to visually hide the textarea's label.
22
+ * @param {boolean} [props.updateOnBlur=false] - Whether to update the post on change or use local state and update on blur.
23
+ */
24
+ export default function PostExcerpt( {
25
+ hideLabelFromVision = false,
26
+ updateOnBlur = false,
27
+ } ) {
28
+ const { excerpt, shouldUseDescriptionLabel, usedAttribute } = useSelect(
29
+ ( select ) => {
30
+ const { getCurrentPostType, getEditedPostAttribute } =
31
+ select( editorStore );
32
+ const postType = getCurrentPostType();
33
+ // This special case is unfortunate, but the REST API of wp_template and wp_template_part
34
+ // support the excerpt field throught the "description" field rather than "excerpt".
35
+ const _usedAttribute = [
36
+ 'wp_template',
37
+ 'wp_template_part',
38
+ ].includes( postType )
39
+ ? 'description'
40
+ : 'excerpt';
41
+ return {
42
+ excerpt: getEditedPostAttribute( _usedAttribute ),
43
+ // There are special cases where we want to label the excerpt as a description.
44
+ shouldUseDescriptionLabel: [
45
+ 'wp_template',
46
+ 'wp_template_part',
47
+ 'wp_block',
48
+ ].includes( postType ),
49
+ usedAttribute: _usedAttribute,
50
+ };
51
+ },
16
52
  []
17
53
  );
18
54
  const { editPost } = useDispatch( editorStore );
55
+ const [ localExcerpt, setLocalExcerpt ] = useState( excerpt );
56
+ const updatePost = ( value ) => {
57
+ editPost( { [ usedAttribute ]: value } );
58
+ };
59
+ const label = shouldUseDescriptionLabel
60
+ ? __( 'Write a description (optional)' )
61
+ : __( 'Write an excerpt (optional)' );
19
62
 
20
63
  return (
21
64
  <div className="editor-post-excerpt">
22
65
  <TextareaControl
23
66
  __nextHasNoMarginBottom
24
- label={ __( 'Write an excerpt (optional)' ) }
67
+ label={ label }
68
+ hideLabelFromVision={ hideLabelFromVision }
25
69
  className="editor-post-excerpt__textarea"
26
- onChange={ ( value ) => editPost( { excerpt: value } ) }
27
- value={ excerpt }
70
+ onChange={ updateOnBlur ? setLocalExcerpt : updatePost }
71
+ onBlur={
72
+ updateOnBlur ? () => updatePost( localExcerpt ) : undefined
73
+ }
74
+ value={ updateOnBlur ? localExcerpt : excerpt }
75
+ help={
76
+ ! shouldUseDescriptionLabel ? (
77
+ <ExternalLink
78
+ href={ __(
79
+ 'https://wordpress.org/documentation/article/page-post-settings-sidebar/#excerpt'
80
+ ) }
81
+ >
82
+ { __( 'Learn more about manual excerpts' ) }
83
+ </ExternalLink>
84
+ ) : (
85
+ __( 'Write a description' )
86
+ )
87
+ }
28
88
  />
29
- <ExternalLink
30
- href={ __(
31
- 'https://wordpress.org/documentation/article/page-post-settings-sidebar/#excerpt'
32
- ) }
33
- >
34
- { __( 'Learn more about manual excerpts' ) }
35
- </ExternalLink>
36
89
  </div>
37
90
  );
38
91
  }
39
-
40
- export default PostExcerpt;
@@ -1,9 +1,23 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
1
6
  /**
2
7
  * WordPress dependencies
3
8
  */
4
9
  import { __ } from '@wordpress/i18n';
5
- import { PanelBody } from '@wordpress/components';
10
+ import {
11
+ PanelBody,
12
+ __experimentalText as Text,
13
+ Dropdown,
14
+ Button,
15
+ __experimentalVStack as VStack,
16
+ } from '@wordpress/components';
6
17
  import { useDispatch, useSelect } from '@wordpress/data';
18
+ import { useMemo, useState } from '@wordpress/element';
19
+ import { __experimentalInspectorPopoverHeader as InspectorPopoverHeader } from '@wordpress/block-editor';
20
+ import { store as coreStore } from '@wordpress/core-data';
7
21
 
8
22
  /**
9
23
  * Internal dependencies
@@ -11,6 +25,7 @@ import { useDispatch, useSelect } from '@wordpress/data';
11
25
  import PostExcerptForm from './index';
12
26
  import PostExcerptCheck from './check';
13
27
  import PluginPostExcerpt from './plugin';
28
+ import { TEMPLATE_ORIGINS } from '../../store/constants';
14
29
  import { store as editorStore } from '../../store';
15
30
 
16
31
  /**
@@ -18,14 +33,18 @@ import { store as editorStore } from '../../store';
18
33
  */
19
34
  const PANEL_NAME = 'post-excerpt';
20
35
 
21
- export default function PostExcerptPanel() {
22
- const { isOpened, isEnabled } = useSelect( ( select ) => {
23
- const { isEditorPanelOpened, isEditorPanelEnabled } =
24
- select( editorStore );
36
+ function ExcerptPanel() {
37
+ const { isOpened, isEnabled, postType } = useSelect( ( select ) => {
38
+ const {
39
+ isEditorPanelOpened,
40
+ isEditorPanelEnabled,
41
+ getCurrentPostType,
42
+ } = select( editorStore );
25
43
 
26
44
  return {
27
45
  isOpened: isEditorPanelOpened( PANEL_NAME ),
28
46
  isEnabled: isEditorPanelEnabled( PANEL_NAME ),
47
+ postType: getCurrentPostType(),
29
48
  };
30
49
  }, [] );
31
50
 
@@ -36,22 +55,180 @@ export default function PostExcerptPanel() {
36
55
  return null;
37
56
  }
38
57
 
58
+ // There are special cases where we want to label the excerpt as a description.
59
+ const shouldUseDescriptionLabel = [
60
+ 'wp_template',
61
+ 'wp_template_part',
62
+ 'wp_block',
63
+ ].includes( postType );
64
+
65
+ return (
66
+ <PanelBody
67
+ title={
68
+ shouldUseDescriptionLabel
69
+ ? __( 'Description' )
70
+ : __( 'Excerpt' )
71
+ }
72
+ opened={ isOpened }
73
+ onToggle={ toggleExcerptPanel }
74
+ >
75
+ <PluginPostExcerpt.Slot>
76
+ { ( fills ) => (
77
+ <>
78
+ <PostExcerptForm />
79
+ { fills }
80
+ </>
81
+ ) }
82
+ </PluginPostExcerpt.Slot>
83
+ </PanelBody>
84
+ );
85
+ }
86
+
87
+ export default function PostExcerptPanel() {
39
88
  return (
40
89
  <PostExcerptCheck>
41
- <PanelBody
42
- title={ __( 'Excerpt' ) }
43
- opened={ isOpened }
44
- onToggle={ toggleExcerptPanel }
45
- >
46
- <PluginPostExcerpt.Slot>
47
- { ( fills ) => (
48
- <>
49
- <PostExcerptForm />
50
- { fills }
51
- </>
52
- ) }
53
- </PluginPostExcerpt.Slot>
54
- </PanelBody>
90
+ <ExcerptPanel />
55
91
  </PostExcerptCheck>
56
92
  );
57
93
  }
94
+
95
+ export function PrivatePostExcerptPanel() {
96
+ return (
97
+ <PostExcerptCheck>
98
+ <PrivateExcerpt />
99
+ </PostExcerptCheck>
100
+ );
101
+ }
102
+
103
+ function PrivateExcerpt() {
104
+ const { shouldRender, excerpt, shouldBeUsedAsDescription, allowEditing } =
105
+ useSelect( ( select ) => {
106
+ const {
107
+ getCurrentPostType,
108
+ getCurrentPostId,
109
+ getEditedPostAttribute,
110
+ isEditorPanelEnabled,
111
+ } = select( editorStore );
112
+ const postType = getCurrentPostType();
113
+ const isTemplateOrTemplatePart = [
114
+ 'wp_template',
115
+ 'wp_template_part',
116
+ ].includes( postType );
117
+ const isPattern = postType === 'wp_block';
118
+ // These post types use the `excerpt` field as a description semantically, so we need to
119
+ // handle proper labeling and some flows where we should always render them as text.
120
+ const _shouldBeUsedAsDescription =
121
+ isTemplateOrTemplatePart || isPattern;
122
+ const _usedAttribute = isTemplateOrTemplatePart
123
+ ? 'description'
124
+ : 'excerpt';
125
+ // We need to fetch the entity in this case to check if we'll allow editing.
126
+ const template =
127
+ isTemplateOrTemplatePart &&
128
+ select( coreStore ).getEntityRecord(
129
+ 'postType',
130
+ postType,
131
+ getCurrentPostId()
132
+ );
133
+ // For post types that use excerpt as description, we do not abide
134
+ // by the `isEnabled` panel flag in order to render them as text.
135
+ const _shouldRender =
136
+ isEditorPanelEnabled( PANEL_NAME ) ||
137
+ _shouldBeUsedAsDescription;
138
+ return {
139
+ excerpt: getEditedPostAttribute( _usedAttribute ),
140
+ shouldRender: _shouldRender,
141
+ shouldBeUsedAsDescription: _shouldBeUsedAsDescription,
142
+ // If we should render, allow editing for all post types that are not used as description.
143
+ // For the rest allow editing only for user generated entities.
144
+ allowEditing:
145
+ _shouldRender &&
146
+ ( ! _shouldBeUsedAsDescription ||
147
+ isPattern ||
148
+ ( template &&
149
+ template.source === TEMPLATE_ORIGINS.custom &&
150
+ ! template.has_theme_file ) ),
151
+ };
152
+ }, [] );
153
+ const [ popoverAnchor, setPopoverAnchor ] = useState( null );
154
+ const label = shouldBeUsedAsDescription
155
+ ? __( 'Description' )
156
+ : __( 'Excerpt' );
157
+ // Memoize popoverProps to avoid returning a new object every time.
158
+ const popoverProps = useMemo(
159
+ () => ( {
160
+ // Anchor the popover to the middle of the entire row so that it doesn't
161
+ // move around when the label changes.
162
+ anchor: popoverAnchor,
163
+ 'aria-label': label,
164
+ headerTitle: label,
165
+ placement: 'left-start',
166
+ offset: 36,
167
+ shift: true,
168
+ } ),
169
+ [ popoverAnchor, label ]
170
+ );
171
+ if ( ! shouldRender ) {
172
+ return false;
173
+ }
174
+ const excerptText = !! excerpt && (
175
+ <Text align="left" numberOfLines={ 4 } truncate>
176
+ { excerpt }
177
+ </Text>
178
+ );
179
+ if ( ! allowEditing ) {
180
+ return excerptText;
181
+ }
182
+ const excerptPlaceholder = shouldBeUsedAsDescription
183
+ ? __( 'Add a description…' )
184
+ : __( 'Add an excerpt…' );
185
+ const triggerEditLabel = shouldBeUsedAsDescription
186
+ ? __( 'Edit description' )
187
+ : __( 'Edit excerpt' );
188
+ return (
189
+ <Dropdown
190
+ className="editor-post-excerpt__dropdown"
191
+ contentClassName="editor-post-excerpt__dropdown__content"
192
+ popoverProps={ popoverProps }
193
+ focusOnMount
194
+ ref={ setPopoverAnchor }
195
+ renderToggle={ ( { onToggle } ) => (
196
+ <Button
197
+ className={ clsx(
198
+ 'editor-post-excerpt__dropdown__trigger',
199
+ { 'has-excerpt': !! excerpt }
200
+ ) }
201
+ onClick={ onToggle }
202
+ label={
203
+ !! excerptText ? triggerEditLabel : excerptPlaceholder
204
+ }
205
+ showTooltip={ !! excerptText }
206
+ >
207
+ { excerptText || excerptPlaceholder }
208
+ </Button>
209
+ ) }
210
+ renderContent={ ( { onClose } ) => (
211
+ <>
212
+ <InspectorPopoverHeader
213
+ title={ label }
214
+ onClose={ onClose }
215
+ />
216
+
217
+ <VStack spacing={ 4 }>
218
+ <PluginPostExcerpt.Slot>
219
+ { ( fills ) => (
220
+ <>
221
+ <PostExcerptForm
222
+ hideLabelFromVision
223
+ updateOnBlur
224
+ />
225
+ { fills }
226
+ </>
227
+ ) }
228
+ </PluginPostExcerpt.Slot>
229
+ </VStack>
230
+ </>
231
+ ) }
232
+ />
233
+ );
234
+ }
@@ -20,7 +20,7 @@ const { Fill, Slot } = createSlotFill( 'PluginPostExcerpt' );
20
20
  * ```js
21
21
  * // Using ES5 syntax
22
22
  * var __ = wp.i18n.__;
23
- * var PluginPostExcerpt = wp.editPost.PluginPostExcerpt;
23
+ * var PluginPostExcerpt = wp.editPost.__experimentalPluginPostExcerpt;
24
24
  *
25
25
  * function MyPluginPostExcerpt() {
26
26
  * return React.createElement(
@@ -37,7 +37,7 @@ const { Fill, Slot } = createSlotFill( 'PluginPostExcerpt' );
37
37
  * ```jsx
38
38
  * // Using ESNext syntax
39
39
  * import { __ } from '@wordpress/i18n';
40
- * import { PluginPostExcerpt } from '@wordpress/edit-post';
40
+ * import { __experimentalPluginPostExcerpt as PluginPostExcerpt } from '@wordpress/edit-post';
41
41
  *
42
42
  * const MyPluginPostExcerpt = () => (
43
43
  * <PluginPostExcerpt className="my-plugin-post-excerpt">
@@ -2,3 +2,27 @@
2
2
  width: 100%;
3
3
  margin-bottom: 10px;
4
4
  }
5
+
6
+ .editor-post-excerpt__dropdown__trigger {
7
+ height: auto;
8
+ padding: 0;
9
+
10
+ &:not(.has-excerpt) {
11
+ color: $gray-700;
12
+ }
13
+
14
+ &:hover {
15
+ color: $gray-900;
16
+ }
17
+ }
18
+
19
+ .editor-post-excerpt__dropdown {
20
+ display: block;
21
+ }
22
+
23
+ .editor-post-excerpt__dropdown__content {
24
+ .components-popover__content {
25
+ min-width: 320px;
26
+ padding: $grid-unit-20;
27
+ }
28
+ }
@@ -32,7 +32,7 @@ const ALLOWED_MEDIA_TYPES = [ 'image' ];
32
32
 
33
33
  // Used when labels from post type were not yet loaded or when they are not present.
34
34
  const DEFAULT_FEATURE_IMAGE_LABEL = __( 'Featured image' );
35
- const DEFAULT_SET_FEATURE_IMAGE_LABEL = __( 'Set featured image' );
35
+ const DEFAULT_SET_FEATURE_IMAGE_LABEL = __( 'Add a featured image' );
36
36
 
37
37
  const instructions = (
38
38
  <p>
@@ -31,8 +31,7 @@
31
31
  box-shadow: 0 0 0 0 var(--wp-admin-theme-color);
32
32
  overflow: hidden; // Ensure the focus style properly encapsulates the image.
33
33
  outline-offset: -#{$border-width};
34
- min-height: $grid-unit-50 * 2;
35
- margin-bottom: $grid-unit-20;
34
+ min-height: $grid-unit-50;
36
35
 
37
36
  display: flex;
38
37
  justify-content: center;
@@ -52,16 +51,11 @@
52
51
 
53
52
  .editor-post-featured-image__toggle {
54
53
  border-radius: $radius-block-ui;
55
- background-color: $gray-100;
56
54
  height: 100%;
57
55
  line-height: 20px;
58
56
  padding: $grid-unit-10 0;
59
57
  text-align: center;
60
-
61
- &:hover {
62
- background: $gray-300;
63
- color: $gray-900;
64
- }
58
+ box-shadow: inset 0 0 0 $border-width $gray-400;
65
59
  }
66
60
 
67
61
  .editor-post-featured-image__actions {
@@ -0,0 +1,22 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { PanelRow } from '@wordpress/components';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import PostFormatForm from './';
10
+ import PostFormatCheck from './check';
11
+
12
+ export function PostFormat() {
13
+ return (
14
+ <PostFormatCheck>
15
+ <PanelRow className="editor-post-format__panel">
16
+ <PostFormatForm />
17
+ </PanelRow>
18
+ </PostFormatCheck>
19
+ );
20
+ }
21
+
22
+ export default PostFormat;
@@ -1,3 +1,9 @@
1
1
  [class].editor-post-format__suggestion {
2
2
  margin: $grid-unit-05 0 0 0;
3
3
  }
4
+
5
+ .editor-post-format__panel {
6
+ display: flex;
7
+ flex-direction: column;
8
+ align-items: stretch;
9
+ }