@wordpress/editor 14.10.0 → 14.12.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 (366) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +2 -10
  3. package/build/bindings/post-meta.js +2 -1
  4. package/build/bindings/post-meta.js.map +1 -1
  5. package/build/components/collab-sidebar/add-comment.js +119 -0
  6. package/build/components/collab-sidebar/add-comment.js.map +1 -0
  7. package/build/components/collab-sidebar/comment-button-toolbar.js +37 -0
  8. package/build/components/collab-sidebar/comment-button-toolbar.js.map +1 -0
  9. package/build/components/collab-sidebar/comment-button.js +37 -0
  10. package/build/components/collab-sidebar/comment-button.js.map +1 -0
  11. package/build/components/collab-sidebar/comments.js +321 -0
  12. package/build/components/collab-sidebar/comments.js.map +1 -0
  13. package/build/components/collab-sidebar/constants.js +8 -0
  14. package/build/components/collab-sidebar/constants.js.map +1 -0
  15. package/build/components/collab-sidebar/index.js +274 -0
  16. package/build/components/collab-sidebar/index.js.map +1 -0
  17. package/build/components/collab-sidebar/utils.js +16 -0
  18. package/build/components/collab-sidebar/utils.js.map +1 -0
  19. package/build/components/commands/index.js +148 -40
  20. package/build/components/commands/index.js.map +1 -1
  21. package/build/components/create-template-part-modal/index.js +1 -0
  22. package/build/components/create-template-part-modal/index.js.map +1 -1
  23. package/build/components/document-bar/index.js +17 -10
  24. package/build/components/document-bar/index.js.map +1 -1
  25. package/build/components/document-tools/index.js +7 -7
  26. package/build/components/document-tools/index.js.map +1 -1
  27. package/build/components/editor-interface/index.js +4 -4
  28. package/build/components/editor-interface/index.js.map +1 -1
  29. package/build/components/entities-saved-states/index.js +1 -1
  30. package/build/components/entities-saved-states/index.js.map +1 -1
  31. package/build/components/global-keyboard-shortcuts/register-shortcuts.js +3 -3
  32. package/build/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
  33. package/build/components/global-styles-provider/index.js +25 -3
  34. package/build/components/global-styles-provider/index.js.map +1 -1
  35. package/build/components/header/index.js +12 -11
  36. package/build/components/header/index.js.map +1 -1
  37. package/build/components/inserter-sidebar/index.js +2 -2
  38. package/build/components/inserter-sidebar/index.js.map +1 -1
  39. package/build/components/more-menu/index.js +9 -7
  40. package/build/components/more-menu/index.js.map +1 -1
  41. package/build/components/page-attributes/parent.js +5 -5
  42. package/build/components/page-attributes/parent.js.map +1 -1
  43. package/build/components/plugin-more-menu-item/index.js +13 -11
  44. package/build/components/plugin-more-menu-item/index.js.map +1 -1
  45. package/build/components/plugin-preview-menu-item/index.js +15 -13
  46. package/build/components/plugin-preview-menu-item/index.js.map +1 -1
  47. package/build/components/plugin-sidebar/index.js +0 -15
  48. package/build/components/plugin-sidebar/index.js.map +1 -1
  49. package/build/components/post-actions/index.js +5 -5
  50. package/build/components/post-actions/index.js.map +1 -1
  51. package/build/components/post-author/panel.js +4 -4
  52. package/build/components/post-author/panel.js.map +1 -1
  53. package/build/components/post-card-panel/index.js +7 -36
  54. package/build/components/post-card-panel/index.js.map +1 -1
  55. package/build/components/post-content-information/index.js +1 -2
  56. package/build/components/post-content-information/index.js.map +1 -1
  57. package/build/components/post-featured-image/index.js +26 -7
  58. package/build/components/post-featured-image/index.js.map +1 -1
  59. package/build/components/post-last-revision/index.js +1 -1
  60. package/build/components/post-last-revision/index.js.map +1 -1
  61. package/build/components/post-schedule/label.js +1 -1
  62. package/build/components/post-schedule/label.js.map +1 -1
  63. package/build/components/post-taxonomies/flat-term-selector.js +11 -1
  64. package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
  65. package/build/components/post-taxonomies/hierarchical-term-selector.js +2 -2
  66. package/build/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  67. package/build/components/post-template/swap-template-button.js +0 -3
  68. package/build/components/post-template/swap-template-button.js.map +1 -1
  69. package/build/components/post-transform-panel/index.js +0 -3
  70. package/build/components/post-transform-panel/index.js.map +1 -1
  71. package/build/components/post-url/index.js +1 -1
  72. package/build/components/post-url/index.js.map +1 -1
  73. package/build/components/post-url/panel.js +3 -3
  74. package/build/components/post-url/panel.js.map +1 -1
  75. package/build/components/preferences-modal/index.js +26 -22
  76. package/build/components/preferences-modal/index.js.map +1 -1
  77. package/build/components/preview-dropdown/index.js +23 -8
  78. package/build/components/preview-dropdown/index.js.map +1 -1
  79. package/build/components/provider/index.js +10 -12
  80. package/build/components/provider/index.js.map +1 -1
  81. package/build/components/provider/use-block-editor-settings.js +11 -10
  82. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  83. package/build/components/sidebar/header.js +2 -1
  84. package/build/components/sidebar/header.js.map +1 -1
  85. package/build/components/sidebar/index.js +3 -3
  86. package/build/components/sidebar/index.js.map +1 -1
  87. package/build/components/sidebar/post-summary.js +2 -2
  88. package/build/components/sidebar/post-summary.js.map +1 -1
  89. package/build/components/start-page-options/index.js +0 -3
  90. package/build/components/start-page-options/index.js.map +1 -1
  91. package/build/components/start-template-options/index.js +0 -3
  92. package/build/components/start-template-options/index.js.map +1 -1
  93. package/build/components/time-to-read/index.js +2 -2
  94. package/build/components/time-to-read/index.js.map +1 -1
  95. package/build/components/visual-editor/index.js +30 -29
  96. package/build/components/visual-editor/index.js.map +1 -1
  97. package/build/components/visual-editor/use-zoom-out-mode-exit.js +52 -0
  98. package/build/components/visual-editor/use-zoom-out-mode-exit.js.map +1 -0
  99. package/build/components/zoom-out-toggle/index.js +37 -5
  100. package/build/components/zoom-out-toggle/index.js.map +1 -1
  101. package/build/dataviews/actions/duplicate-template-part.js +2 -2
  102. package/build/dataviews/actions/duplicate-template-part.js.map +1 -1
  103. package/build/store/actions.js +68 -18
  104. package/build/store/actions.js.map +1 -1
  105. package/build/store/constants.js +0 -2
  106. package/build/store/constants.js.map +1 -1
  107. package/build/store/index.js +0 -4
  108. package/build/store/index.js.map +1 -1
  109. package/build/store/private-actions.js +2 -2
  110. package/build/store/private-actions.js.map +1 -1
  111. package/build/store/selectors.js +5 -4
  112. package/build/store/selectors.js.map +1 -1
  113. package/build/utils/pageTypeBadge.js +51 -0
  114. package/build/utils/pageTypeBadge.js.map +1 -0
  115. package/build/utils/terms.js +2 -2
  116. package/build/utils/terms.js.map +1 -1
  117. package/build-module/bindings/post-meta.js +2 -1
  118. package/build-module/bindings/post-meta.js.map +1 -1
  119. package/build-module/components/collab-sidebar/add-comment.js +113 -0
  120. package/build-module/components/collab-sidebar/add-comment.js.map +1 -0
  121. package/build-module/components/collab-sidebar/comment-button-toolbar.js +30 -0
  122. package/build-module/components/collab-sidebar/comment-button-toolbar.js.map +1 -0
  123. package/build-module/components/collab-sidebar/comment-button.js +30 -0
  124. package/build-module/components/collab-sidebar/comment-button.js.map +1 -0
  125. package/build-module/components/collab-sidebar/comments.js +314 -0
  126. package/build-module/components/collab-sidebar/comments.js.map +1 -0
  127. package/build-module/components/collab-sidebar/constants.js +2 -0
  128. package/build-module/components/collab-sidebar/constants.js.map +1 -0
  129. package/build-module/components/collab-sidebar/index.js +266 -0
  130. package/build-module/components/collab-sidebar/index.js.map +1 -0
  131. package/build-module/components/collab-sidebar/utils.js +10 -0
  132. package/build-module/components/collab-sidebar/utils.js.map +1 -0
  133. package/build-module/components/commands/index.js +151 -44
  134. package/build-module/components/commands/index.js.map +1 -1
  135. package/build-module/components/create-template-part-modal/index.js +1 -0
  136. package/build-module/components/create-template-part-modal/index.js.map +1 -1
  137. package/build-module/components/document-bar/index.js +19 -12
  138. package/build-module/components/document-bar/index.js.map +1 -1
  139. package/build-module/components/document-tools/index.js +8 -8
  140. package/build-module/components/document-tools/index.js.map +1 -1
  141. package/build-module/components/editor-interface/index.js +4 -4
  142. package/build-module/components/editor-interface/index.js.map +1 -1
  143. package/build-module/components/entities-saved-states/index.js +1 -1
  144. package/build-module/components/entities-saved-states/index.js.map +1 -1
  145. package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js +3 -3
  146. package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
  147. package/build-module/components/global-styles-provider/index.js +25 -3
  148. package/build-module/components/global-styles-provider/index.js.map +1 -1
  149. package/build-module/components/header/index.js +12 -11
  150. package/build-module/components/header/index.js.map +1 -1
  151. package/build-module/components/inserter-sidebar/index.js +2 -2
  152. package/build-module/components/inserter-sidebar/index.js.map +1 -1
  153. package/build-module/components/more-menu/index.js +9 -7
  154. package/build-module/components/more-menu/index.js.map +1 -1
  155. package/build-module/components/page-attributes/parent.js +5 -5
  156. package/build-module/components/page-attributes/parent.js.map +1 -1
  157. package/build-module/components/plugin-more-menu-item/index.js +12 -10
  158. package/build-module/components/plugin-more-menu-item/index.js.map +1 -1
  159. package/build-module/components/plugin-preview-menu-item/index.js +14 -12
  160. package/build-module/components/plugin-preview-menu-item/index.js.map +1 -1
  161. package/build-module/components/plugin-sidebar/index.js +0 -15
  162. package/build-module/components/plugin-sidebar/index.js.map +1 -1
  163. package/build-module/components/post-actions/index.js +5 -5
  164. package/build-module/components/post-actions/index.js.map +1 -1
  165. package/build-module/components/post-author/panel.js +4 -4
  166. package/build-module/components/post-author/panel.js.map +1 -1
  167. package/build-module/components/post-card-panel/index.js +8 -36
  168. package/build-module/components/post-card-panel/index.js.map +1 -1
  169. package/build-module/components/post-content-information/index.js +1 -2
  170. package/build-module/components/post-content-information/index.js.map +1 -1
  171. package/build-module/components/post-featured-image/index.js +26 -7
  172. package/build-module/components/post-featured-image/index.js.map +1 -1
  173. package/build-module/components/post-last-revision/index.js +1 -1
  174. package/build-module/components/post-last-revision/index.js.map +1 -1
  175. package/build-module/components/post-schedule/label.js +1 -1
  176. package/build-module/components/post-schedule/label.js.map +1 -1
  177. package/build-module/components/post-taxonomies/flat-term-selector.js +14 -4
  178. package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
  179. package/build-module/components/post-taxonomies/hierarchical-term-selector.js +2 -2
  180. package/build-module/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  181. package/build-module/components/post-template/swap-template-button.js +0 -3
  182. package/build-module/components/post-template/swap-template-button.js.map +1 -1
  183. package/build-module/components/post-transform-panel/index.js +0 -3
  184. package/build-module/components/post-transform-panel/index.js.map +1 -1
  185. package/build-module/components/post-url/index.js +1 -1
  186. package/build-module/components/post-url/index.js.map +1 -1
  187. package/build-module/components/post-url/panel.js +3 -3
  188. package/build-module/components/post-url/panel.js.map +1 -1
  189. package/build-module/components/preferences-modal/index.js +26 -22
  190. package/build-module/components/preferences-modal/index.js.map +1 -1
  191. package/build-module/components/preview-dropdown/index.js +24 -9
  192. package/build-module/components/preview-dropdown/index.js.map +1 -1
  193. package/build-module/components/provider/index.js +10 -12
  194. package/build-module/components/provider/index.js.map +1 -1
  195. package/build-module/components/provider/use-block-editor-settings.js +12 -11
  196. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  197. package/build-module/components/sidebar/header.js +2 -1
  198. package/build-module/components/sidebar/header.js.map +1 -1
  199. package/build-module/components/sidebar/index.js +4 -4
  200. package/build-module/components/sidebar/index.js.map +1 -1
  201. package/build-module/components/sidebar/post-summary.js +2 -2
  202. package/build-module/components/sidebar/post-summary.js.map +1 -1
  203. package/build-module/components/start-page-options/index.js +0 -3
  204. package/build-module/components/start-page-options/index.js.map +1 -1
  205. package/build-module/components/start-template-options/index.js +0 -3
  206. package/build-module/components/start-template-options/index.js.map +1 -1
  207. package/build-module/components/time-to-read/index.js +2 -2
  208. package/build-module/components/time-to-read/index.js.map +1 -1
  209. package/build-module/components/visual-editor/index.js +31 -30
  210. package/build-module/components/visual-editor/index.js.map +1 -1
  211. package/build-module/components/visual-editor/use-zoom-out-mode-exit.js +46 -0
  212. package/build-module/components/visual-editor/use-zoom-out-mode-exit.js.map +1 -0
  213. package/build-module/components/zoom-out-toggle/index.js +37 -5
  214. package/build-module/components/zoom-out-toggle/index.js.map +1 -1
  215. package/build-module/dataviews/actions/duplicate-template-part.js +3 -3
  216. package/build-module/dataviews/actions/duplicate-template-part.js.map +1 -1
  217. package/build-module/store/actions.js +64 -16
  218. package/build-module/store/actions.js.map +1 -1
  219. package/build-module/store/constants.js +0 -2
  220. package/build-module/store/constants.js.map +1 -1
  221. package/build-module/store/index.js +0 -4
  222. package/build-module/store/index.js.map +1 -1
  223. package/build-module/store/private-actions.js +3 -3
  224. package/build-module/store/private-actions.js.map +1 -1
  225. package/build-module/store/selectors.js +5 -4
  226. package/build-module/store/selectors.js.map +1 -1
  227. package/build-module/utils/pageTypeBadge.js +45 -0
  228. package/build-module/utils/pageTypeBadge.js.map +1 -0
  229. package/build-module/utils/terms.js +2 -2
  230. package/build-module/utils/terms.js.map +1 -1
  231. package/build-style/style-rtl.css +118 -60
  232. package/build-style/style.css +118 -60
  233. package/build-types/bindings/post-meta.d.ts.map +1 -1
  234. package/build-types/components/collab-sidebar/add-comment.d.ts +15 -0
  235. package/build-types/components/collab-sidebar/add-comment.d.ts.map +1 -0
  236. package/build-types/components/collab-sidebar/comment-button-toolbar.d.ts +5 -0
  237. package/build-types/components/collab-sidebar/comment-button-toolbar.d.ts.map +1 -0
  238. package/build-types/components/collab-sidebar/comment-button.d.ts +5 -0
  239. package/build-types/components/collab-sidebar/comment-button.d.ts.map +1 -0
  240. package/build-types/components/collab-sidebar/comments.d.ts +19 -0
  241. package/build-types/components/collab-sidebar/comments.d.ts.map +1 -0
  242. package/build-types/components/collab-sidebar/constants.d.ts +2 -0
  243. package/build-types/components/collab-sidebar/constants.d.ts.map +1 -0
  244. package/build-types/components/collab-sidebar/index.d.ts +5 -0
  245. package/build-types/components/collab-sidebar/index.d.ts.map +1 -0
  246. package/build-types/components/collab-sidebar/utils.d.ts +8 -0
  247. package/build-types/components/collab-sidebar/utils.d.ts.map +1 -0
  248. package/build-types/components/commands/index.d.ts.map +1 -1
  249. package/build-types/components/create-template-part-modal/index.d.ts.map +1 -1
  250. package/build-types/components/document-bar/index.d.ts.map +1 -1
  251. package/build-types/components/document-tools/index.d.ts.map +1 -1
  252. package/build-types/components/global-styles-provider/index.d.ts.map +1 -1
  253. package/build-types/components/header/index.d.ts +1 -2
  254. package/build-types/components/header/index.d.ts.map +1 -1
  255. package/build-types/components/inserter-sidebar/index.d.ts.map +1 -1
  256. package/build-types/components/more-menu/index.d.ts.map +1 -1
  257. package/build-types/components/page-attributes/parent.d.ts.map +1 -1
  258. package/build-types/components/plugin-more-menu-item/index.d.ts +62 -2
  259. package/build-types/components/plugin-more-menu-item/index.d.ts.map +1 -1
  260. package/build-types/components/plugin-preview-menu-item/index.d.ts +41 -2
  261. package/build-types/components/plugin-preview-menu-item/index.d.ts.map +1 -1
  262. package/build-types/components/plugin-sidebar/index.d.ts.map +1 -1
  263. package/build-types/components/post-author/panel.d.ts.map +1 -1
  264. package/build-types/components/post-card-panel/index.d.ts.map +1 -1
  265. package/build-types/components/post-taxonomies/flat-term-selector.d.ts.map +1 -1
  266. package/build-types/components/post-template/hooks.d.ts +2 -2
  267. package/build-types/components/post-template/swap-template-button.d.ts.map +1 -1
  268. package/build-types/components/post-transform-panel/index.d.ts.map +1 -1
  269. package/build-types/components/preferences-modal/index.d.ts.map +1 -1
  270. package/build-types/components/preview-dropdown/index.d.ts.map +1 -1
  271. package/build-types/components/provider/index.d.ts.map +1 -1
  272. package/build-types/components/provider/use-block-editor-settings.d.ts.map +1 -1
  273. package/build-types/components/sidebar/index.d.ts.map +1 -1
  274. package/build-types/components/start-page-options/index.d.ts.map +1 -1
  275. package/build-types/components/start-template-options/index.d.ts.map +1 -1
  276. package/build-types/components/visual-editor/index.d.ts.map +1 -1
  277. package/build-types/components/visual-editor/use-zoom-out-mode-exit.d.ts +5 -0
  278. package/build-types/components/visual-editor/use-zoom-out-mode-exit.d.ts.map +1 -0
  279. package/build-types/components/zoom-out-toggle/index.d.ts +3 -1
  280. package/build-types/components/zoom-out-toggle/index.d.ts.map +1 -1
  281. package/build-types/dataviews/store/reducer.d.ts +5 -2
  282. package/build-types/dataviews/store/reducer.d.ts.map +1 -1
  283. package/build-types/lock-unlock.d.ts +2 -2
  284. package/build-types/store/actions.d.ts +9 -1
  285. package/build-types/store/actions.d.ts.map +1 -1
  286. package/build-types/store/constants.d.ts +0 -2
  287. package/build-types/store/constants.d.ts.map +1 -1
  288. package/build-types/store/index.d.ts +9 -11
  289. package/build-types/store/index.d.ts.map +1 -1
  290. package/build-types/store/reducer.d.ts +24 -4
  291. package/build-types/store/reducer.d.ts.map +1 -1
  292. package/build-types/store/selectors.d.ts +3 -3
  293. package/build-types/store/selectors.d.ts.map +1 -1
  294. package/build-types/utils/pageTypeBadge.d.ts +5 -0
  295. package/build-types/utils/pageTypeBadge.d.ts.map +1 -0
  296. package/build-types/utils/terms.d.ts.map +1 -1
  297. package/package.json +39 -37
  298. package/src/bindings/post-meta.js +1 -0
  299. package/src/components/collab-sidebar/add-comment.js +121 -0
  300. package/src/components/collab-sidebar/comment-button-toolbar.js +29 -0
  301. package/src/components/collab-sidebar/comment-button.js +31 -0
  302. package/src/components/collab-sidebar/comments.js +404 -0
  303. package/src/components/collab-sidebar/constants.js +1 -0
  304. package/src/components/collab-sidebar/index.js +298 -0
  305. package/src/components/collab-sidebar/style.scss +111 -0
  306. package/src/components/collab-sidebar/utils.js +9 -0
  307. package/src/components/commands/index.js +390 -268
  308. package/src/components/create-template-part-modal/index.js +1 -0
  309. package/src/components/document-bar/index.js +25 -8
  310. package/src/components/document-bar/style.scss +13 -4
  311. package/src/components/document-tools/index.js +8 -8
  312. package/src/components/editor-interface/index.js +4 -4
  313. package/src/components/entities-saved-states/index.js +2 -2
  314. package/src/components/global-keyboard-shortcuts/register-shortcuts.js +3 -3
  315. package/src/components/global-styles-provider/index.js +32 -6
  316. package/src/components/header/index.js +20 -10
  317. package/src/components/inserter-sidebar/index.js +3 -6
  318. package/src/components/more-menu/index.js +12 -7
  319. package/src/components/page-attributes/parent.js +6 -4
  320. package/src/components/plugin-more-menu-item/index.js +12 -11
  321. package/src/components/plugin-post-publish-panel/test/__snapshots__/index.js.snap +1 -1
  322. package/src/components/plugin-preview-menu-item/index.js +14 -13
  323. package/src/components/plugin-sidebar/index.js +0 -13
  324. package/src/components/post-actions/index.js +8 -11
  325. package/src/components/post-author/panel.js +4 -2
  326. package/src/components/post-card-panel/index.js +9 -43
  327. package/src/components/post-card-panel/style.scss +1 -9
  328. package/src/components/post-content-information/index.js +1 -1
  329. package/src/components/post-featured-image/index.js +31 -16
  330. package/src/components/post-featured-image/style.scss +5 -2
  331. package/src/components/post-last-revision/index.js +1 -1
  332. package/src/components/post-schedule/label.js +1 -1
  333. package/src/components/post-sticky/test/index.js +6 -6
  334. package/src/components/post-taxonomies/flat-term-selector.js +15 -4
  335. package/src/components/post-taxonomies/hierarchical-term-selector.js +2 -2
  336. package/src/components/post-template/swap-template-button.js +0 -3
  337. package/src/components/post-transform-panel/index.js +0 -3
  338. package/src/components/post-url/index.js +1 -1
  339. package/src/components/post-url/panel.js +4 -2
  340. package/src/components/preferences-modal/index.js +26 -19
  341. package/src/components/preferences-modal/test/index.js +1 -1
  342. package/src/components/preview-dropdown/index.js +45 -18
  343. package/src/components/provider/index.js +31 -24
  344. package/src/components/provider/use-block-editor-settings.js +11 -10
  345. package/src/components/sidebar/header.js +3 -2
  346. package/src/components/sidebar/index.js +5 -3
  347. package/src/components/sidebar/post-summary.js +1 -1
  348. package/src/components/sidebar/style.scss +1 -3
  349. package/src/components/start-page-options/index.js +0 -3
  350. package/src/components/start-template-options/index.js +0 -3
  351. package/src/components/time-to-read/index.js +3 -3
  352. package/src/components/visual-editor/index.js +39 -42
  353. package/src/components/visual-editor/style.scss +11 -0
  354. package/src/components/visual-editor/use-zoom-out-mode-exit.js +49 -0
  355. package/src/components/zoom-out-toggle/index.js +39 -5
  356. package/src/dataviews/actions/duplicate-template-part.tsx +3 -3
  357. package/src/store/actions.js +113 -34
  358. package/src/store/constants.ts +0 -2
  359. package/src/store/index.js +0 -4
  360. package/src/store/private-actions.js +3 -3
  361. package/src/store/selectors.js +5 -4
  362. package/src/style.scss +1 -0
  363. package/src/utils/pageTypeBadge.js +41 -0
  364. package/src/utils/terms.js +4 -2
  365. package/src/utils/test/terms.js +3 -3
  366. package/tsconfig.tsbuildinfo +1 -1
@@ -18,7 +18,7 @@ import { store as coreStore } from '@wordpress/core-data';
18
18
  import { unlock } from '../../lock-unlock';
19
19
  import { usePostActions } from './actions';
20
20
 
21
- const { DropdownMenuV2, kebabCase } = unlock( componentsPrivateApis );
21
+ const { Menu, kebabCase } = unlock( componentsPrivateApis );
22
22
 
23
23
  export default function PostActions( { postType, postId, onActionPerformed } ) {
24
24
  const [ isActionsMenuOpen, setIsActionsMenuOpen ] = useState( false );
@@ -54,7 +54,7 @@ export default function PostActions( { postType, postId, onActionPerformed } ) {
54
54
  }, [ allActions, itemWithPermissions ] );
55
55
 
56
56
  return (
57
- <DropdownMenuV2
57
+ <Menu
58
58
  open={ isActionsMenuOpen }
59
59
  trigger={
60
60
  <Button
@@ -79,7 +79,7 @@ export default function PostActions( { postType, postId, onActionPerformed } ) {
79
79
  setIsActionsMenuOpen( false );
80
80
  } }
81
81
  />
82
- </DropdownMenuV2>
82
+ </Menu>
83
83
  );
84
84
  }
85
85
 
@@ -93,12 +93,9 @@ function DropdownMenuItemTrigger( { action, onClick, items } ) {
93
93
  const label =
94
94
  typeof action.label === 'string' ? action.label : action.label( items );
95
95
  return (
96
- <DropdownMenuV2.Item
97
- onClick={ onClick }
98
- hideOnClick={ ! action.RenderModal }
99
- >
100
- <DropdownMenuV2.ItemLabel>{ label }</DropdownMenuV2.ItemLabel>
101
- </DropdownMenuV2.Item>
96
+ <Menu.Item onClick={ onClick } hideOnClick={ ! action.RenderModal }>
97
+ <Menu.ItemLabel>{ label }</Menu.ItemLabel>
98
+ </Menu.Item>
102
99
  );
103
100
  }
104
101
 
@@ -145,7 +142,7 @@ function ActionWithModal( { action, item, ActionTrigger, onClose } ) {
145
142
  // With an added onClose prop.
146
143
  function ActionsDropdownMenuGroup( { actions, item, onClose } ) {
147
144
  return (
148
- <DropdownMenuV2.Group>
145
+ <Menu.Group>
149
146
  { actions.map( ( action ) => {
150
147
  if ( action.RenderModal ) {
151
148
  return (
@@ -167,6 +164,6 @@ function ActionsDropdownMenuGroup( { actions, item, onClose } ) {
167
164
  />
168
165
  );
169
166
  } ) }
170
- </DropdownMenuV2.Group>
167
+ </Menu.Group>
171
168
  );
172
169
  }
@@ -25,8 +25,10 @@ function PostAuthorToggle( { isOpen, onClick } ) {
25
25
  className="editor-post-author__panel-toggle"
26
26
  variant="tertiary"
27
27
  aria-expanded={ isOpen }
28
- // translators: %s: Current post link.
29
- aria-label={ sprintf( __( 'Change author: %s' ), authorName ) }
28
+ aria-label={
29
+ // translators: %s: Author name.
30
+ sprintf( __( 'Change author: %s' ), authorName )
31
+ }
30
32
  onClick={ onClick }
31
33
  >
32
34
  { authorName }
@@ -1,7 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
@@ -22,27 +18,20 @@ import { store as editorStore } from '../../store';
22
18
  import {
23
19
  TEMPLATE_POST_TYPE,
24
20
  TEMPLATE_PART_POST_TYPE,
25
- PATTERN_POST_TYPE,
26
- GLOBAL_POST_TYPES,
27
21
  } from '../../store/constants';
28
22
  import { unlock } from '../../lock-unlock';
29
23
  import PostActions from '../post-actions';
24
+ import usePageTypeBadge from '../../utils/pageTypeBadge';
30
25
 
31
26
  export default function PostCardPanel( {
32
27
  postType,
33
28
  postId,
34
29
  onActionPerformed,
35
30
  } ) {
36
- const { isFrontPage, isPostsPage, title, icon, isSync } = useSelect(
31
+ const { title, icon } = useSelect(
37
32
  ( select ) => {
38
33
  const { __experimentalGetTemplateInfo } = select( editorStore );
39
- const { canUser, getEditedEntityRecord } = select( coreStore );
40
- const siteSettings = canUser( 'read', {
41
- kind: 'root',
42
- name: 'site',
43
- } )
44
- ? getEditedEntityRecord( 'root', 'site' )
45
- : undefined;
34
+ const { getEditedEntityRecord } = select( coreStore );
46
35
  const _record = getEditedEntityRecord(
47
36
  'postType',
48
37
  postType,
@@ -52,31 +41,18 @@ export default function PostCardPanel( {
52
41
  [ TEMPLATE_POST_TYPE, TEMPLATE_PART_POST_TYPE ].includes(
53
42
  postType
54
43
  ) && __experimentalGetTemplateInfo( _record );
55
- let _isSync = false;
56
- if ( GLOBAL_POST_TYPES.includes( postType ) ) {
57
- if ( PATTERN_POST_TYPE === postType ) {
58
- // When the post is first created, the top level wp_pattern_sync_status is not set so get meta value instead.
59
- const currentSyncStatus =
60
- _record?.meta?.wp_pattern_sync_status === 'unsynced'
61
- ? 'unsynced'
62
- : _record?.wp_pattern_sync_status;
63
- _isSync = currentSyncStatus !== 'unsynced';
64
- } else {
65
- _isSync = true;
66
- }
67
- }
68
44
  return {
69
45
  title: _templateInfo?.title || _record?.title,
70
46
  icon: unlock( select( editorStore ) ).getPostIcon( postType, {
71
47
  area: _record?.area,
72
48
  } ),
73
- isSync: _isSync,
74
- isFrontPage: siteSettings?.page_on_front === postId,
75
- isPostsPage: siteSettings?.page_for_posts === postId,
76
49
  };
77
50
  },
78
51
  [ postId, postType ]
79
52
  );
53
+
54
+ const pageTypeBadge = usePageTypeBadge();
55
+
80
56
  return (
81
57
  <div className="editor-post-card-panel">
82
58
  <HStack
@@ -84,12 +60,7 @@ export default function PostCardPanel( {
84
60
  className="editor-post-card-panel__header"
85
61
  align="flex-start"
86
62
  >
87
- <Icon
88
- className={ clsx( 'editor-post-card-panel__icon', {
89
- 'is-sync': isSync,
90
- } ) }
91
- icon={ icon }
92
- />
63
+ <Icon className="editor-post-card-panel__icon" icon={ icon } />
93
64
  <Text
94
65
  numberOfLines={ 2 }
95
66
  truncate
@@ -99,14 +70,9 @@ export default function PostCardPanel( {
99
70
  lineHeight="20px"
100
71
  >
101
72
  { title ? decodeEntities( title ) : __( 'No title' ) }
102
- { isFrontPage && (
103
- <span className="editor-post-card-panel__title-badge">
104
- { __( 'Homepage' ) }
105
- </span>
106
- ) }
107
- { isPostsPage && (
73
+ { pageTypeBadge && (
108
74
  <span className="editor-post-card-panel__title-badge">
109
- { __( 'Posts Page' ) }
75
+ { pageTypeBadge }
110
76
  </span>
111
77
  ) }
112
78
  </Text>
@@ -34,17 +34,9 @@
34
34
  }
35
35
  }
36
36
 
37
- .editor-post-card-panel__icon.is-sync {
38
- fill: var(--wp-block-synced-color);
39
-
40
- & + .editor-post-card-panel__title {
41
- color: var(--wp-block-synced-color);
42
- }
43
- }
44
-
45
37
  .editor-post-card-panel__title-badge {
46
38
  background: $gray-100;
47
- color: $gray-700;
39
+ color: $gray-800;
48
40
  padding: 0 $grid-unit-05;
49
41
  border-radius: $radius-small;
50
42
  font-size: 12px;
@@ -70,7 +70,7 @@ export default function PostContentInformation() {
70
70
  readingTime <= 1
71
71
  ? __( '1 minute' )
72
72
  : sprintf(
73
- // translators: %s: the number of minutes to read the post.
73
+ /* translators: %s: the number of minutes to read the post. */
74
74
  _n( '%s minute', '%s minutes', readingTime ),
75
75
  readingTime.toLocaleString()
76
76
  );
@@ -121,6 +121,35 @@ function PostFeaturedImage( {
121
121
  } );
122
122
  }
123
123
 
124
+ /**
125
+ * Generates the featured image alt text for this editing context.
126
+ *
127
+ * @param {Object} imageMedia The image media object.
128
+ * @param {string} imageMedia.alt_text The alternative text of the image.
129
+ * @param {Object} imageMedia.media_details The media details of the image.
130
+ * @param {Object} imageMedia.media_details.sizes The sizes of the image.
131
+ * @param {Object} imageMedia.media_details.sizes.full The full size details of the image.
132
+ * @param {string} imageMedia.media_details.sizes.full.file The file name of the full size image.
133
+ * @param {string} imageMedia.slug The slug of the image.
134
+ * @return {string} The featured image alt text.
135
+ */
136
+ function getImageDescription( imageMedia ) {
137
+ if ( imageMedia.alt_text ) {
138
+ return sprintf(
139
+ // Translators: %s: The selected image alt text.
140
+ __( 'Current image: %s' ),
141
+ imageMedia.alt_text
142
+ );
143
+ }
144
+ return sprintf(
145
+ // Translators: %s: The selected image filename.
146
+ __(
147
+ 'The current image has no alternative text. The file name is: %s'
148
+ ),
149
+ imageMedia.media_details.sizes?.full?.file || imageMedia.slug
150
+ );
151
+ }
152
+
124
153
  return (
125
154
  <PostFeaturedImageCheck>
126
155
  { noticeUI }
@@ -130,21 +159,7 @@ function PostFeaturedImage( {
130
159
  id={ `editor-post-featured-image-${ featuredImageId }-describedby` }
131
160
  className="hidden"
132
161
  >
133
- { media.alt_text &&
134
- sprintf(
135
- // Translators: %s: The selected image alt text.
136
- __( 'Current image: %s' ),
137
- media.alt_text
138
- ) }
139
- { ! media.alt_text &&
140
- sprintf(
141
- // Translators: %s: The selected image filename.
142
- __(
143
- 'The current image has no alternative text. The file name is: %s'
144
- ),
145
- media.media_details.sizes?.full?.file ||
146
- media.slug
147
- ) }
162
+ { getImageDescription( media ) }
148
163
  </div>
149
164
  ) }
150
165
  <MediaUploadCheck fallback={ instructions }>
@@ -188,7 +203,7 @@ function PostFeaturedImage( {
188
203
  <img
189
204
  className="editor-post-featured-image__preview-image"
190
205
  src={ mediaSourceUrl }
191
- alt=""
206
+ alt={ getImageDescription( media ) }
192
207
  />
193
208
  ) }
194
209
  { isLoading && <Spinner /> }
@@ -41,8 +41,6 @@
41
41
  .editor-post-featured-image__preview {
42
42
  width: 100%;
43
43
  padding: 0;
44
- transition: all 0.1s ease-out;
45
- @include reduce-motion("transition");
46
44
  box-shadow: 0 0 0 0 var(--wp-admin-theme-color);
47
45
  overflow: hidden; // Ensure the focus style properly encapsulates the image.
48
46
  outline-offset: -#{$border-width};
@@ -66,6 +64,11 @@
66
64
 
67
65
  .editor-post-featured-image__toggle {
68
66
  box-shadow: inset 0 0 0 $border-width $gray-400;
67
+
68
+ &:focus:not(:disabled) {
69
+ // Allow smooth transition between focused and unfocused box-shadow states.
70
+ box-shadow: 0 0 0 currentColor inset, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
71
+ }
69
72
  }
70
73
 
71
74
  .editor-post-featured-image__actions {
@@ -44,7 +44,7 @@ function PostLastRevision() {
44
44
  icon={ backup }
45
45
  iconPosition="right"
46
46
  text={ sprintf(
47
- /* translators: %s: number of revisions */
47
+ /* translators: %s: number of revisions. */
48
48
  __( 'Revisions (%s)' ),
49
49
  revisionsCount
50
50
  ) }
@@ -48,7 +48,7 @@ export function getFullPostScheduleLabel( dateAttribute ) {
48
48
 
49
49
  const timezoneAbbreviation = getTimezoneAbbreviation();
50
50
  const formattedDate = dateI18n(
51
- // translators: If using a space between 'g:i' and 'a', use a non-breaking space.
51
+ // translators: Use a non-breaking space between 'g:i' and 'a' if appropriate.
52
52
  _x( 'F j, Y g:i\xa0a', 'post schedule full date format' ),
53
53
  date
54
54
  );
@@ -35,23 +35,23 @@ function setupUseSelectMock( { hasStickyAction, postType } ) {
35
35
  describe( 'PostSticky', () => {
36
36
  it( 'should not render anything if the post type is not "post"', () => {
37
37
  setupUseSelectMock( { hasStickyAction: true, postType: 'page' } );
38
- render( <PostStickyCheck>Can Toggle Sticky</PostStickyCheck> );
38
+ render( <PostStickyCheck>Can Show Sticky</PostStickyCheck> );
39
39
  expect(
40
- screen.queryByText( 'Can Toggle Sticky' )
40
+ screen.queryByText( 'Can Show Sticky' )
41
41
  ).not.toBeInTheDocument();
42
42
  } );
43
43
 
44
44
  it( "should not render anything if post doesn't support stickying", () => {
45
45
  setupUseSelectMock( { hasStickyAction: false, postType: 'post' } );
46
- render( <PostStickyCheck>Can Toggle Sticky</PostStickyCheck> );
46
+ render( <PostStickyCheck>Can Show Sticky</PostStickyCheck> );
47
47
  expect(
48
- screen.queryByText( 'Can Toggle Sticky' )
48
+ screen.queryByText( 'Can Show Sticky' )
49
49
  ).not.toBeInTheDocument();
50
50
  } );
51
51
 
52
52
  it( 'should render if the post supports stickying', () => {
53
53
  setupUseSelectMock( { hasStickyAction: true, postType: 'post' } );
54
- render( <PostStickyCheck>Can Toggle Sticky</PostStickyCheck> );
55
- expect( screen.getByText( 'Can Toggle Sticky' ) ).toBeVisible();
54
+ render( <PostStickyCheck>Can Show Sticky</PostStickyCheck> );
55
+ expect( screen.getByText( 'Can Show Sticky' ) ).toBeVisible();
56
56
  } );
57
57
  } );
@@ -2,8 +2,12 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __, _x, sprintf } from '@wordpress/i18n';
5
- import { useEffect, useMemo, useState } from '@wordpress/element';
6
- import { FormTokenField, withFilters } from '@wordpress/components';
5
+ import { Fragment, useEffect, useMemo, useState } from '@wordpress/element';
6
+ import {
7
+ FormTokenField,
8
+ withFilters,
9
+ __experimentalVStack as VStack,
10
+ } from '@wordpress/components';
7
11
  import { useSelect, useDispatch } from '@wordpress/data';
8
12
  import deprecated from '@wordpress/deprecated';
9
13
  import { store as coreStore } from '@wordpress/core-data';
@@ -53,6 +57,13 @@ const termNamesToIds = ( names, terms ) => {
53
57
  .filter( ( id ) => id !== undefined );
54
58
  };
55
59
 
60
+ const Wrapper = ( { children, __nextHasNoMarginBottom } ) =>
61
+ __nextHasNoMarginBottom ? (
62
+ <VStack spacing={ 4 }>{ children }</VStack>
63
+ ) : (
64
+ <Fragment>{ children }</Fragment>
65
+ );
66
+
56
67
  /**
57
68
  * Renders a flat term selector component.
58
69
  *
@@ -289,7 +300,7 @@ export function FlatTermSelector( { slug, __nextHasNoMarginBottom } ) {
289
300
  );
290
301
 
291
302
  return (
292
- <>
303
+ <Wrapper __nextHasNoMarginBottom={ __nextHasNoMarginBottom }>
293
304
  <FormTokenField
294
305
  __next40pxDefaultSize
295
306
  value={ values }
@@ -306,7 +317,7 @@ export function FlatTermSelector( { slug, __nextHasNoMarginBottom } ) {
306
317
  __nextHasNoMarginBottom={ __nextHasNoMarginBottom }
307
318
  />
308
319
  <MostUsedTerms taxonomy={ taxonomy } onSelect={ appendTerm } />
309
- </>
320
+ </Wrapper>
310
321
  );
311
322
  }
312
323
 
@@ -310,7 +310,7 @@ export function HierarchicalTermSelector( { slug } ) {
310
310
  const defaultName =
311
311
  slug === 'category' ? __( 'Category' ) : __( 'Term' );
312
312
  const termAddedMessage = sprintf(
313
- /* translators: %s: taxonomy name */
313
+ /* translators: %s: term name. */
314
314
  _x( '%s added', 'term' ),
315
315
  taxonomy?.labels?.singular_name ?? defaultName
316
316
  );
@@ -341,7 +341,7 @@ export function HierarchicalTermSelector( { slug } ) {
341
341
 
342
342
  const resultCount = getResultCount( newFilteredTermsTree );
343
343
  const resultsFoundMessage = sprintf(
344
- /* translators: %d: number of results */
344
+ /* translators: %d: number of results. */
345
345
  _n( '%d result found.', '%d results found.', resultCount ),
346
346
  resultCount
347
347
  );
@@ -9,7 +9,6 @@ import { __ } from '@wordpress/i18n';
9
9
  import { useDispatch } from '@wordpress/data';
10
10
  import { store as coreStore } from '@wordpress/core-data';
11
11
  import { parse } from '@wordpress/blocks';
12
- import { useAsyncList } from '@wordpress/compose';
13
12
 
14
13
  /**
15
14
  * Internal dependencies
@@ -71,12 +70,10 @@ function TemplatesList( { postType, onSelect } ) {
71
70
  } ) ),
72
71
  [ availableTemplates ]
73
72
  );
74
- const shownTemplates = useAsyncList( templatesAsPatterns );
75
73
  return (
76
74
  <BlockPatternsList
77
75
  label={ __( 'Templates' ) }
78
76
  blockPatterns={ templatesAsPatterns }
79
- shownPatterns={ shownTemplates }
80
77
  onClickPattern={ onSelect }
81
78
  />
82
79
  );
@@ -5,7 +5,6 @@ import { useSelect, useDispatch } from '@wordpress/data';
5
5
  import { store as coreStore } from '@wordpress/core-data';
6
6
  import { PanelBody } from '@wordpress/components';
7
7
  import { __ } from '@wordpress/i18n';
8
- import { useAsyncList } from '@wordpress/compose';
9
8
  import { __experimentalBlockPatternsList as BlockPatternsList } from '@wordpress/block-editor';
10
9
  import { serialize } from '@wordpress/blocks';
11
10
 
@@ -20,7 +19,6 @@ import {
20
19
  } from '../../store/constants';
21
20
 
22
21
  function TemplatesList( { availableTemplates, onSelect } ) {
23
- const shownTemplates = useAsyncList( availableTemplates );
24
22
  if ( ! availableTemplates || availableTemplates?.length === 0 ) {
25
23
  return null;
26
24
  }
@@ -29,7 +27,6 @@ function TemplatesList( { availableTemplates, onSelect } ) {
29
27
  <BlockPatternsList
30
28
  label={ __( 'Templates' ) }
31
29
  blockPatterns={ availableTemplates }
32
- shownPatterns={ shownTemplates }
33
30
  onClickPattern={ onSelect }
34
31
  showTitlesAsTooltip
35
32
  />
@@ -76,7 +76,7 @@ export default function PostURL( { onClose } ) {
76
76
  } );
77
77
  } );
78
78
  const postUrlSlugDescriptionId =
79
- 'editor-post-url__slug-descriotion-' + useInstanceId( PostURL );
79
+ 'editor-post-url__slug-description-' + useInstanceId( PostURL );
80
80
 
81
81
  return (
82
82
  <div className="editor-post-url">
@@ -93,8 +93,10 @@ function PostURLToggle( { isOpen, onClick } ) {
93
93
  className="editor-post-url__panel-toggle"
94
94
  variant="tertiary"
95
95
  aria-expanded={ isOpen }
96
- // translators: %s: Current post link.
97
- aria-label={ sprintf( __( 'Change link: %s' ), decodedSlug ) }
96
+ aria-label={
97
+ // translators: %s: Current post link.
98
+ sprintf( __( 'Change link: %s' ), decodedSlug )
99
+ }
98
100
  onClick={ onClick }
99
101
  >
100
102
  <>{ decodedSlug }</>
@@ -36,25 +36,40 @@ const {
36
36
  } = unlock( preferencesPrivateApis );
37
37
 
38
38
  export default function EditorPreferencesModal( { extraSections = {} } ) {
39
+ const isActive = useSelect( ( select ) => {
40
+ return select( interfaceStore ).isModalActive( 'editor/preferences' );
41
+ }, [] );
42
+ const { closeModal } = useDispatch( interfaceStore );
43
+
44
+ if ( ! isActive ) {
45
+ return null;
46
+ }
47
+
48
+ // Please wrap all contents inside PreferencesModalContents to prevent all
49
+ // hooks from executing when the modal is not open.
50
+ return (
51
+ <PreferencesModal closeModal={ closeModal }>
52
+ <PreferencesModalContents extraSections={ extraSections } />
53
+ </PreferencesModal>
54
+ );
55
+ }
56
+
57
+ function PreferencesModalContents( { extraSections = {} } ) {
39
58
  const isLargeViewport = useViewportMatch( 'medium' );
40
- const { isActive, showBlockBreadcrumbsOption } = useSelect(
59
+ const showBlockBreadcrumbsOption = useSelect(
41
60
  ( select ) => {
42
61
  const { getEditorSettings } = select( editorStore );
43
62
  const { get } = select( preferencesStore );
44
- const { isModalActive } = select( interfaceStore );
45
63
  const isRichEditingEnabled = getEditorSettings().richEditingEnabled;
46
64
  const isDistractionFreeEnabled = get( 'core', 'distractionFree' );
47
- return {
48
- showBlockBreadcrumbsOption:
49
- ! isDistractionFreeEnabled &&
50
- isLargeViewport &&
51
- isRichEditingEnabled,
52
- isActive: isModalActive( 'editor/preferences' ),
53
- };
65
+ return (
66
+ ! isDistractionFreeEnabled &&
67
+ isLargeViewport &&
68
+ isRichEditingEnabled
69
+ );
54
70
  },
55
71
  [ isLargeViewport ]
56
72
  );
57
- const { closeModal } = useDispatch( interfaceStore );
58
73
  const { setIsListViewOpened, setIsInserterOpened } =
59
74
  useDispatch( editorStore );
60
75
  const { set: setPreference } = useDispatch( preferencesStore );
@@ -330,13 +345,5 @@ export default function EditorPreferencesModal( { extraSections = {} } ) {
330
345
  ]
331
346
  );
332
347
 
333
- if ( ! isActive ) {
334
- return null;
335
- }
336
-
337
- return (
338
- <PreferencesModal closeModal={ closeModal }>
339
- <PreferencesModalTabs sections={ sections } />
340
- </PreferencesModal>
341
- );
348
+ return <PreferencesModalTabs sections={ sections } />;
342
349
  }
@@ -19,7 +19,7 @@ jest.mock( '@wordpress/compose/src/hooks/use-viewport-match', () => jest.fn() );
19
19
 
20
20
  describe( 'EditPostPreferencesModal', () => {
21
21
  it( 'should not render when the modal is not active', () => {
22
- useSelect.mockImplementation( () => [ false, false, false ] );
22
+ useSelect.mockImplementation( () => false );
23
23
  render( <EditPostPreferencesModal /> );
24
24
  expect(
25
25
  screen.queryByRole( 'dialog', { name: 'Preferences' } )
@@ -16,7 +16,7 @@ import {
16
16
  Icon,
17
17
  } from '@wordpress/components';
18
18
  import { __ } from '@wordpress/i18n';
19
- import { desktop, mobile, tablet, external } from '@wordpress/icons';
19
+ import { desktop, mobile, tablet, external, check } from '@wordpress/icons';
20
20
  import { useSelect, useDispatch } from '@wordpress/data';
21
21
  import { store as coreStore } from '@wordpress/core-data';
22
22
  import { store as preferencesStore } from '@wordpress/preferences';
@@ -31,27 +31,36 @@ import PostPreviewButton from '../post-preview-button';
31
31
  import { unlock } from '../../lock-unlock';
32
32
 
33
33
  export default function PreviewDropdown( { forceIsAutosaveable, disabled } ) {
34
- const { deviceType, homeUrl, isTemplate, isViewable, showIconLabels } =
35
- useSelect( ( select ) => {
36
- const { getDeviceType, getCurrentPostType } = select( editorStore );
37
- const { getEntityRecord, getPostType } = select( coreStore );
38
- const { get } = select( preferencesStore );
39
- const _currentPostType = getCurrentPostType();
40
- return {
41
- deviceType: getDeviceType(),
42
- homeUrl: getEntityRecord( 'root', '__unstableBase' )?.home,
43
- isTemplate: _currentPostType === 'wp_template',
44
- isViewable: getPostType( _currentPostType )?.viewable ?? false,
45
- showIconLabels: get( 'core', 'showIconLabels' ),
46
- };
47
- }, [] );
48
- const { setDeviceType } = useDispatch( editorStore );
49
- const { __unstableSetEditorMode } = useDispatch( blockEditorStore );
34
+ const {
35
+ deviceType,
36
+ homeUrl,
37
+ isTemplate,
38
+ isViewable,
39
+ showIconLabels,
40
+ isTemplateHidden,
41
+ templateId,
42
+ } = useSelect( ( select ) => {
43
+ const { getDeviceType, getCurrentPostType, getCurrentTemplateId } =
44
+ select( editorStore );
45
+ const { getRenderingMode } = unlock( select( editorStore ) );
46
+ const { getEntityRecord, getPostType } = select( coreStore );
47
+ const { get } = select( preferencesStore );
48
+ const _currentPostType = getCurrentPostType();
49
+ return {
50
+ deviceType: getDeviceType(),
51
+ homeUrl: getEntityRecord( 'root', '__unstableBase' )?.home,
52
+ isTemplate: _currentPostType === 'wp_template',
53
+ isViewable: getPostType( _currentPostType )?.viewable ?? false,
54
+ showIconLabels: get( 'core', 'showIconLabels' ),
55
+ isTemplateHidden: getRenderingMode() === 'post-only',
56
+ templateId: getCurrentTemplateId(),
57
+ };
58
+ }, [] );
59
+ const { setDeviceType, setRenderingMode } = useDispatch( editorStore );
50
60
  const { resetZoomLevel } = unlock( useDispatch( blockEditorStore ) );
51
61
 
52
62
  const handleDevicePreviewChange = ( newDeviceType ) => {
53
63
  setDeviceType( newDeviceType );
54
- __unstableSetEditorMode( 'edit' );
55
64
  resetZoomLevel();
56
65
  };
57
66
 
@@ -144,6 +153,24 @@ export default function PreviewDropdown( { forceIsAutosaveable, disabled } ) {
144
153
  </MenuItem>
145
154
  </MenuGroup>
146
155
  ) }
156
+ { ! isTemplate && !! templateId && (
157
+ <MenuGroup>
158
+ <MenuItem
159
+ icon={ ! isTemplateHidden ? check : undefined }
160
+ isSelected={ ! isTemplateHidden }
161
+ role="menuitemcheckbox"
162
+ onClick={ () => {
163
+ setRenderingMode(
164
+ isTemplateHidden
165
+ ? 'template-locked'
166
+ : 'post-only'
167
+ );
168
+ } }
169
+ >
170
+ { __( 'Show template' ) }
171
+ </MenuItem>
172
+ </MenuGroup>
173
+ ) }
147
174
  { isViewable && (
148
175
  <MenuGroup>
149
176
  <PostPreviewButton