@wordpress/editor 14.10.0 → 14.11.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 (292) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +2 -2
  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 +120 -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 +272 -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 +6 -6
  20. package/build/components/commands/index.js.map +1 -1
  21. package/build/components/document-bar/index.js +8 -7
  22. package/build/components/document-bar/index.js.map +1 -1
  23. package/build/components/document-tools/index.js +1 -5
  24. package/build/components/document-tools/index.js.map +1 -1
  25. package/build/components/editor-interface/index.js +3 -2
  26. package/build/components/editor-interface/index.js.map +1 -1
  27. package/build/components/entities-saved-states/index.js +1 -1
  28. package/build/components/entities-saved-states/index.js.map +1 -1
  29. package/build/components/global-keyboard-shortcuts/register-shortcuts.js +3 -3
  30. package/build/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
  31. package/build/components/global-styles-provider/index.js +13 -3
  32. package/build/components/global-styles-provider/index.js.map +1 -1
  33. package/build/components/header/index.js +5 -2
  34. package/build/components/header/index.js.map +1 -1
  35. package/build/components/inserter-sidebar/index.js +2 -2
  36. package/build/components/inserter-sidebar/index.js.map +1 -1
  37. package/build/components/page-attributes/parent.js +5 -5
  38. package/build/components/page-attributes/parent.js.map +1 -1
  39. package/build/components/plugin-more-menu-item/index.js +13 -11
  40. package/build/components/plugin-more-menu-item/index.js.map +1 -1
  41. package/build/components/plugin-preview-menu-item/index.js +15 -13
  42. package/build/components/plugin-preview-menu-item/index.js.map +1 -1
  43. package/build/components/plugin-sidebar/index.js +0 -15
  44. package/build/components/plugin-sidebar/index.js.map +1 -1
  45. package/build/components/post-actions/index.js +5 -5
  46. package/build/components/post-actions/index.js.map +1 -1
  47. package/build/components/post-author/panel.js +4 -4
  48. package/build/components/post-author/panel.js.map +1 -1
  49. package/build/components/post-card-panel/index.js +7 -36
  50. package/build/components/post-card-panel/index.js.map +1 -1
  51. package/build/components/post-content-information/index.js +1 -2
  52. package/build/components/post-content-information/index.js.map +1 -1
  53. package/build/components/post-featured-image/index.js +26 -7
  54. package/build/components/post-featured-image/index.js.map +1 -1
  55. package/build/components/post-last-revision/index.js +1 -1
  56. package/build/components/post-last-revision/index.js.map +1 -1
  57. package/build/components/post-schedule/label.js +1 -1
  58. package/build/components/post-schedule/label.js.map +1 -1
  59. package/build/components/post-taxonomies/flat-term-selector.js +9 -1
  60. package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
  61. package/build/components/post-taxonomies/hierarchical-term-selector.js +2 -2
  62. package/build/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  63. package/build/components/post-url/index.js +1 -1
  64. package/build/components/post-url/index.js.map +1 -1
  65. package/build/components/post-url/panel.js +3 -3
  66. package/build/components/post-url/panel.js.map +1 -1
  67. package/build/components/preview-dropdown/index.js +0 -4
  68. package/build/components/preview-dropdown/index.js.map +1 -1
  69. package/build/components/provider/index.js +10 -12
  70. package/build/components/provider/index.js.map +1 -1
  71. package/build/components/provider/use-block-editor-settings.js +1 -1
  72. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  73. package/build/components/sidebar/header.js +2 -1
  74. package/build/components/sidebar/header.js.map +1 -1
  75. package/build/components/sidebar/index.js +3 -3
  76. package/build/components/sidebar/index.js.map +1 -1
  77. package/build/components/time-to-read/index.js +2 -2
  78. package/build/components/time-to-read/index.js.map +1 -1
  79. package/build/components/visual-editor/index.js +25 -27
  80. package/build/components/visual-editor/index.js.map +1 -1
  81. package/build/components/visual-editor/use-zoom-out-mode-exit.js +52 -0
  82. package/build/components/visual-editor/use-zoom-out-mode-exit.js.map +1 -0
  83. package/build/components/zoom-out-toggle/index.js +37 -5
  84. package/build/components/zoom-out-toggle/index.js.map +1 -1
  85. package/build/dataviews/actions/duplicate-template-part.js +2 -2
  86. package/build/dataviews/actions/duplicate-template-part.js.map +1 -1
  87. package/build/store/actions.js +4 -3
  88. package/build/store/actions.js.map +1 -1
  89. package/build/store/private-actions.js +2 -2
  90. package/build/store/private-actions.js.map +1 -1
  91. package/build/store/selectors.js +3 -2
  92. package/build/store/selectors.js.map +1 -1
  93. package/build/utils/pageTypeBadge.js +51 -0
  94. package/build/utils/pageTypeBadge.js.map +1 -0
  95. package/build/utils/terms.js +2 -2
  96. package/build/utils/terms.js.map +1 -1
  97. package/build-module/bindings/post-meta.js +2 -1
  98. package/build-module/bindings/post-meta.js.map +1 -1
  99. package/build-module/components/collab-sidebar/add-comment.js +114 -0
  100. package/build-module/components/collab-sidebar/add-comment.js.map +1 -0
  101. package/build-module/components/collab-sidebar/comment-button-toolbar.js +30 -0
  102. package/build-module/components/collab-sidebar/comment-button-toolbar.js.map +1 -0
  103. package/build-module/components/collab-sidebar/comment-button.js +30 -0
  104. package/build-module/components/collab-sidebar/comment-button.js.map +1 -0
  105. package/build-module/components/collab-sidebar/comments.js +314 -0
  106. package/build-module/components/collab-sidebar/comments.js.map +1 -0
  107. package/build-module/components/collab-sidebar/constants.js +2 -0
  108. package/build-module/components/collab-sidebar/constants.js.map +1 -0
  109. package/build-module/components/collab-sidebar/index.js +264 -0
  110. package/build-module/components/collab-sidebar/index.js.map +1 -0
  111. package/build-module/components/collab-sidebar/utils.js +10 -0
  112. package/build-module/components/collab-sidebar/utils.js.map +1 -0
  113. package/build-module/components/commands/index.js +6 -6
  114. package/build-module/components/commands/index.js.map +1 -1
  115. package/build-module/components/document-bar/index.js +9 -8
  116. package/build-module/components/document-bar/index.js.map +1 -1
  117. package/build-module/components/document-tools/index.js +2 -6
  118. package/build-module/components/document-tools/index.js.map +1 -1
  119. package/build-module/components/editor-interface/index.js +3 -2
  120. package/build-module/components/editor-interface/index.js.map +1 -1
  121. package/build-module/components/entities-saved-states/index.js +1 -1
  122. package/build-module/components/entities-saved-states/index.js.map +1 -1
  123. package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js +3 -3
  124. package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
  125. package/build-module/components/global-styles-provider/index.js +13 -3
  126. package/build-module/components/global-styles-provider/index.js.map +1 -1
  127. package/build-module/components/header/index.js +5 -2
  128. package/build-module/components/header/index.js.map +1 -1
  129. package/build-module/components/inserter-sidebar/index.js +2 -2
  130. package/build-module/components/inserter-sidebar/index.js.map +1 -1
  131. package/build-module/components/page-attributes/parent.js +5 -5
  132. package/build-module/components/page-attributes/parent.js.map +1 -1
  133. package/build-module/components/plugin-more-menu-item/index.js +12 -10
  134. package/build-module/components/plugin-more-menu-item/index.js.map +1 -1
  135. package/build-module/components/plugin-preview-menu-item/index.js +14 -12
  136. package/build-module/components/plugin-preview-menu-item/index.js.map +1 -1
  137. package/build-module/components/plugin-sidebar/index.js +0 -15
  138. package/build-module/components/plugin-sidebar/index.js.map +1 -1
  139. package/build-module/components/post-actions/index.js +5 -5
  140. package/build-module/components/post-actions/index.js.map +1 -1
  141. package/build-module/components/post-author/panel.js +4 -4
  142. package/build-module/components/post-author/panel.js.map +1 -1
  143. package/build-module/components/post-card-panel/index.js +8 -36
  144. package/build-module/components/post-card-panel/index.js.map +1 -1
  145. package/build-module/components/post-content-information/index.js +1 -2
  146. package/build-module/components/post-content-information/index.js.map +1 -1
  147. package/build-module/components/post-featured-image/index.js +26 -7
  148. package/build-module/components/post-featured-image/index.js.map +1 -1
  149. package/build-module/components/post-last-revision/index.js +1 -1
  150. package/build-module/components/post-last-revision/index.js.map +1 -1
  151. package/build-module/components/post-schedule/label.js +1 -1
  152. package/build-module/components/post-schedule/label.js.map +1 -1
  153. package/build-module/components/post-taxonomies/flat-term-selector.js +12 -4
  154. package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
  155. package/build-module/components/post-taxonomies/hierarchical-term-selector.js +2 -2
  156. package/build-module/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  157. package/build-module/components/post-url/index.js +1 -1
  158. package/build-module/components/post-url/index.js.map +1 -1
  159. package/build-module/components/post-url/panel.js +3 -3
  160. package/build-module/components/post-url/panel.js.map +1 -1
  161. package/build-module/components/preview-dropdown/index.js +0 -4
  162. package/build-module/components/preview-dropdown/index.js.map +1 -1
  163. package/build-module/components/provider/index.js +10 -12
  164. package/build-module/components/provider/index.js.map +1 -1
  165. package/build-module/components/provider/use-block-editor-settings.js +1 -1
  166. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  167. package/build-module/components/sidebar/header.js +2 -1
  168. package/build-module/components/sidebar/header.js.map +1 -1
  169. package/build-module/components/sidebar/index.js +4 -4
  170. package/build-module/components/sidebar/index.js.map +1 -1
  171. package/build-module/components/time-to-read/index.js +2 -2
  172. package/build-module/components/time-to-read/index.js.map +1 -1
  173. package/build-module/components/visual-editor/index.js +26 -28
  174. package/build-module/components/visual-editor/index.js.map +1 -1
  175. package/build-module/components/visual-editor/use-zoom-out-mode-exit.js +46 -0
  176. package/build-module/components/visual-editor/use-zoom-out-mode-exit.js.map +1 -0
  177. package/build-module/components/zoom-out-toggle/index.js +37 -5
  178. package/build-module/components/zoom-out-toggle/index.js.map +1 -1
  179. package/build-module/dataviews/actions/duplicate-template-part.js +3 -3
  180. package/build-module/dataviews/actions/duplicate-template-part.js.map +1 -1
  181. package/build-module/store/actions.js +4 -3
  182. package/build-module/store/actions.js.map +1 -1
  183. package/build-module/store/private-actions.js +3 -3
  184. package/build-module/store/private-actions.js.map +1 -1
  185. package/build-module/store/selectors.js +3 -2
  186. package/build-module/store/selectors.js.map +1 -1
  187. package/build-module/utils/pageTypeBadge.js +45 -0
  188. package/build-module/utils/pageTypeBadge.js.map +1 -0
  189. package/build-module/utils/terms.js +2 -2
  190. package/build-module/utils/terms.js.map +1 -1
  191. package/build-style/style-rtl.css +96 -54
  192. package/build-style/style.css +96 -54
  193. package/build-types/bindings/post-meta.d.ts.map +1 -1
  194. package/build-types/components/collab-sidebar/add-comment.d.ts +15 -0
  195. package/build-types/components/collab-sidebar/add-comment.d.ts.map +1 -0
  196. package/build-types/components/collab-sidebar/comment-button-toolbar.d.ts +5 -0
  197. package/build-types/components/collab-sidebar/comment-button-toolbar.d.ts.map +1 -0
  198. package/build-types/components/collab-sidebar/comment-button.d.ts +5 -0
  199. package/build-types/components/collab-sidebar/comment-button.d.ts.map +1 -0
  200. package/build-types/components/collab-sidebar/comments.d.ts +19 -0
  201. package/build-types/components/collab-sidebar/comments.d.ts.map +1 -0
  202. package/build-types/components/collab-sidebar/constants.d.ts +2 -0
  203. package/build-types/components/collab-sidebar/constants.d.ts.map +1 -0
  204. package/build-types/components/collab-sidebar/index.d.ts +5 -0
  205. package/build-types/components/collab-sidebar/index.d.ts.map +1 -0
  206. package/build-types/components/collab-sidebar/utils.d.ts +8 -0
  207. package/build-types/components/collab-sidebar/utils.d.ts.map +1 -0
  208. package/build-types/components/commands/index.d.ts.map +1 -1
  209. package/build-types/components/document-bar/index.d.ts.map +1 -1
  210. package/build-types/components/document-tools/index.d.ts.map +1 -1
  211. package/build-types/components/editor-interface/index.d.ts.map +1 -1
  212. package/build-types/components/global-styles-provider/index.d.ts.map +1 -1
  213. package/build-types/components/header/index.d.ts.map +1 -1
  214. package/build-types/components/inserter-sidebar/index.d.ts.map +1 -1
  215. package/build-types/components/page-attributes/parent.d.ts.map +1 -1
  216. package/build-types/components/plugin-more-menu-item/index.d.ts +62 -2
  217. package/build-types/components/plugin-more-menu-item/index.d.ts.map +1 -1
  218. package/build-types/components/plugin-preview-menu-item/index.d.ts +41 -2
  219. package/build-types/components/plugin-preview-menu-item/index.d.ts.map +1 -1
  220. package/build-types/components/plugin-sidebar/index.d.ts.map +1 -1
  221. package/build-types/components/post-author/panel.d.ts.map +1 -1
  222. package/build-types/components/post-card-panel/index.d.ts.map +1 -1
  223. package/build-types/components/post-taxonomies/flat-term-selector.d.ts.map +1 -1
  224. package/build-types/components/preview-dropdown/index.d.ts.map +1 -1
  225. package/build-types/components/provider/index.d.ts.map +1 -1
  226. package/build-types/components/sidebar/index.d.ts.map +1 -1
  227. package/build-types/components/visual-editor/index.d.ts.map +1 -1
  228. package/build-types/components/visual-editor/use-zoom-out-mode-exit.d.ts +5 -0
  229. package/build-types/components/visual-editor/use-zoom-out-mode-exit.d.ts.map +1 -0
  230. package/build-types/components/zoom-out-toggle/index.d.ts +3 -1
  231. package/build-types/components/zoom-out-toggle/index.d.ts.map +1 -1
  232. package/build-types/store/actions.d.ts.map +1 -1
  233. package/build-types/store/selectors.d.ts.map +1 -1
  234. package/build-types/utils/pageTypeBadge.d.ts +5 -0
  235. package/build-types/utils/pageTypeBadge.d.ts.map +1 -0
  236. package/build-types/utils/terms.d.ts.map +1 -1
  237. package/package.json +38 -37
  238. package/src/bindings/post-meta.js +1 -0
  239. package/src/components/collab-sidebar/add-comment.js +124 -0
  240. package/src/components/collab-sidebar/comment-button-toolbar.js +29 -0
  241. package/src/components/collab-sidebar/comment-button.js +31 -0
  242. package/src/components/collab-sidebar/comments.js +404 -0
  243. package/src/components/collab-sidebar/constants.js +1 -0
  244. package/src/components/collab-sidebar/index.js +307 -0
  245. package/src/components/collab-sidebar/style.scss +111 -0
  246. package/src/components/collab-sidebar/utils.js +9 -0
  247. package/src/components/commands/index.js +9 -7
  248. package/src/components/document-bar/index.js +15 -7
  249. package/src/components/document-bar/style.scss +0 -4
  250. package/src/components/document-tools/index.js +1 -7
  251. package/src/components/editor-interface/index.js +4 -3
  252. package/src/components/entities-saved-states/index.js +2 -2
  253. package/src/components/global-keyboard-shortcuts/register-shortcuts.js +3 -3
  254. package/src/components/global-styles-provider/index.js +20 -6
  255. package/src/components/header/index.js +3 -1
  256. package/src/components/inserter-sidebar/index.js +3 -6
  257. package/src/components/page-attributes/parent.js +6 -4
  258. package/src/components/plugin-more-menu-item/index.js +12 -11
  259. package/src/components/plugin-preview-menu-item/index.js +14 -13
  260. package/src/components/plugin-sidebar/index.js +0 -13
  261. package/src/components/post-actions/index.js +8 -11
  262. package/src/components/post-author/panel.js +4 -2
  263. package/src/components/post-card-panel/index.js +9 -43
  264. package/src/components/post-card-panel/style.scss +1 -9
  265. package/src/components/post-content-information/index.js +1 -1
  266. package/src/components/post-featured-image/index.js +31 -16
  267. package/src/components/post-featured-image/style.scss +5 -2
  268. package/src/components/post-last-revision/index.js +1 -1
  269. package/src/components/post-schedule/label.js +1 -1
  270. package/src/components/post-sticky/test/index.js +6 -6
  271. package/src/components/post-taxonomies/flat-term-selector.js +15 -4
  272. package/src/components/post-taxonomies/hierarchical-term-selector.js +2 -2
  273. package/src/components/post-url/index.js +1 -1
  274. package/src/components/post-url/panel.js +4 -2
  275. package/src/components/preview-dropdown/index.js +0 -2
  276. package/src/components/provider/index.js +31 -24
  277. package/src/components/provider/use-block-editor-settings.js +1 -1
  278. package/src/components/sidebar/header.js +3 -2
  279. package/src/components/sidebar/index.js +5 -3
  280. package/src/components/time-to-read/index.js +3 -3
  281. package/src/components/visual-editor/index.js +32 -41
  282. package/src/components/visual-editor/use-zoom-out-mode-exit.js +49 -0
  283. package/src/components/zoom-out-toggle/index.js +39 -5
  284. package/src/dataviews/actions/duplicate-template-part.tsx +3 -3
  285. package/src/store/actions.js +5 -3
  286. package/src/store/private-actions.js +3 -3
  287. package/src/store/selectors.js +3 -2
  288. package/src/style.scss +1 -0
  289. package/src/utils/pageTypeBadge.js +41 -0
  290. package/src/utils/terms.js +4 -2
  291. package/src/utils/test/terms.js +3 -3
  292. package/tsconfig.tsbuildinfo +1 -1
@@ -16,7 +16,7 @@ import {
16
16
  privateApis as blockEditorPrivateApis,
17
17
  __experimentalUseResizeCanvas as useResizeCanvas,
18
18
  } from '@wordpress/block-editor';
19
- import { useEffect, useRef, useMemo } from '@wordpress/element';
19
+ import { useEffect, useRef, useMemo, useState } from '@wordpress/element';
20
20
  import { useSelect } from '@wordpress/data';
21
21
  import { parse } from '@wordpress/blocks';
22
22
  import { store as coreStore } from '@wordpress/core-data';
@@ -41,6 +41,7 @@ import {
41
41
  TEMPLATE_PART_POST_TYPE,
42
42
  TEMPLATE_POST_TYPE,
43
43
  } from '../../store/constants';
44
+ import { useZoomOutModeExit } from './use-zoom-out-mode-exit';
44
45
 
45
46
  const {
46
47
  LayoutStyle,
@@ -48,7 +49,6 @@ const {
48
49
  useLayoutStyles,
49
50
  ExperimentalBlockCanvas: BlockCanvas,
50
51
  useFlashEditableBlocks,
51
- useZoomOutModeExit,
52
52
  } = unlock( blockEditorPrivateApis );
53
53
 
54
54
  /**
@@ -106,9 +106,11 @@ function VisualEditor( {
106
106
  contentRef,
107
107
  className,
108
108
  } ) {
109
- const [ resizeObserver, sizes ] = useResizeObserver();
109
+ const [ contentHeight, setContentHeight ] = useState( '' );
110
+ const effectContentHeight = useResizeObserver( ( [ entry ] ) => {
111
+ setContentHeight( entry.borderBoxSize[ 0 ].blockSize );
112
+ } );
110
113
  const isMobileViewport = useViewportMatch( 'small', '<' );
111
- const isTabletViewport = useViewportMatch( 'medium', '<' );
112
114
  const {
113
115
  renderingMode,
114
116
  postContentAttributes,
@@ -167,7 +169,7 @@ function VisualEditor( {
167
169
  deviceType: getDeviceType(),
168
170
  isFocusedEntity: !! editorSettings.onNavigateToPreviousEntityRecord,
169
171
  postType: postTypeSlug,
170
- isPreview: editorSettings.__unstableIsPreviewMode,
172
+ isPreview: editorSettings.isPreviewMode,
171
173
  };
172
174
  }, [] );
173
175
  const { isCleanNewPost } = useSelect( editorStore );
@@ -324,29 +326,6 @@ function VisualEditor( {
324
326
  .is-root-container.alignfull { max-width: none; margin-left: auto; margin-right: auto;}
325
327
  .is-root-container.alignfull:where(.is-layout-flow) > :not(.alignleft):not(.alignright) { max-width: none;}`;
326
328
 
327
- const localRef = useRef();
328
- const typewriterRef = useTypewriter();
329
- contentRef = useMergeRefs( [
330
- localRef,
331
- contentRef,
332
- renderingMode === 'post-only' ? typewriterRef : null,
333
- useFlashEditableBlocks( {
334
- isEnabled: renderingMode === 'template-locked',
335
- } ),
336
- useSelectNearestEditableBlock( {
337
- isEnabled: renderingMode === 'template-locked',
338
- } ),
339
- useZoomOutModeExit(),
340
- ] );
341
-
342
- const zoomOutProps =
343
- isZoomedOut && ! isTabletViewport
344
- ? {
345
- scale: 'default',
346
- frameSize: '40px',
347
- }
348
- : {};
349
-
350
329
  const forceFullHeight = postType === NAVIGATION_POST_TYPE;
351
330
  const enableResizing =
352
331
  [
@@ -360,14 +339,15 @@ function VisualEditor( {
360
339
  ! isMobileViewport &&
361
340
  // Dsiable resizing in zoomed-out mode.
362
341
  ! isZoomedOut;
363
- const shouldIframe =
364
- ! disableIframe || [ 'Tablet', 'Mobile' ].includes( deviceType );
365
342
 
366
343
  const iframeStyles = useMemo( () => {
367
344
  return [
368
345
  ...( styles ?? [] ),
369
346
  {
370
- css: `.is-root-container{display:flow-root;${
347
+ // Ensures margins of children are contained so that the body background paints behind them.
348
+ // Otherwise, the background of html (when zoomed out) would show there and appear broken. It’s
349
+ // important mostly for post-only views yet conceivably an issue in templated views too.
350
+ css: `:where(.block-editor-iframe__body){display:flow-root;}.is-root-container{display:flow-root;${
371
351
  // Some themes will have `min-height: 100vh` for the root container,
372
352
  // which isn't a requirement in auto resize mode.
373
353
  enableResizing ? 'min-height:0!important;' : ''
@@ -376,6 +356,24 @@ function VisualEditor( {
376
356
  ];
377
357
  }, [ styles, enableResizing ] );
378
358
 
359
+ const localRef = useRef();
360
+ const typewriterRef = useTypewriter();
361
+ contentRef = useMergeRefs( [
362
+ localRef,
363
+ contentRef,
364
+ renderingMode === 'post-only' ? typewriterRef : null,
365
+ useFlashEditableBlocks( {
366
+ isEnabled: renderingMode === 'template-locked',
367
+ } ),
368
+ useSelectNearestEditableBlock( {
369
+ isEnabled: renderingMode === 'template-locked',
370
+ } ),
371
+ useZoomOutModeExit(),
372
+ // Avoid resize listeners when not needed, these will trigger
373
+ // unnecessary re-renders when animating the iframe width.
374
+ enableResizing ? effectContentHeight : null,
375
+ ] );
376
+
379
377
  return (
380
378
  <div
381
379
  className={ clsx(
@@ -386,24 +384,23 @@ function VisualEditor( {
386
384
  {
387
385
  'has-padding': isFocusedEntity || enableResizing,
388
386
  'is-resizable': enableResizing,
389
- 'is-iframed': shouldIframe,
387
+ 'is-iframed': ! disableIframe,
390
388
  }
391
389
  ) }
392
390
  >
393
391
  <ResizableEditor
394
392
  enableResizing={ enableResizing }
395
393
  height={
396
- sizes.height && ! forceFullHeight ? sizes.height : '100%'
394
+ contentHeight && ! forceFullHeight ? contentHeight : '100%'
397
395
  }
398
396
  >
399
397
  <BlockCanvas
400
- shouldIframe={ shouldIframe }
398
+ shouldIframe={ ! disableIframe }
401
399
  contentRef={ contentRef }
402
400
  styles={ iframeStyles }
403
401
  height="100%"
404
402
  iframeProps={ {
405
403
  ...iframeProps,
406
- ...zoomOutProps,
407
404
  style: {
408
405
  ...iframeProps?.style,
409
406
  ...deviceStyles,
@@ -488,12 +485,6 @@ function VisualEditor( {
488
485
  />
489
486
  ) }
490
487
  </RecursionProvider>
491
- {
492
- // Avoid resize listeners when not needed,
493
- // these will trigger unnecessary re-renders
494
- // when animating the iframe width.
495
- enableResizing && resizeObserver
496
- }
497
488
  </BlockCanvas>
498
489
  </ResizableEditor>
499
490
  </div>
@@ -0,0 +1,49 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect, useDispatch } from '@wordpress/data';
5
+ import { useRefEffect } from '@wordpress/compose';
6
+ import { store as blockEditorStore } from '@wordpress/block-editor';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import { unlock } from '../../lock-unlock';
12
+
13
+ /**
14
+ * Allows Zoom Out mode to be exited by double clicking in the selected block.
15
+ */
16
+ export function useZoomOutModeExit() {
17
+ const { getSettings, isZoomOut } = unlock( useSelect( blockEditorStore ) );
18
+ const { resetZoomLevel } = unlock( useDispatch( blockEditorStore ) );
19
+
20
+ return useRefEffect(
21
+ ( node ) => {
22
+ function onDoubleClick( event ) {
23
+ if ( ! isZoomOut() ) {
24
+ return;
25
+ }
26
+
27
+ if ( ! event.defaultPrevented ) {
28
+ event.preventDefault();
29
+
30
+ const { __experimentalSetIsInserterOpened } = getSettings();
31
+
32
+ if (
33
+ typeof __experimentalSetIsInserterOpened === 'function'
34
+ ) {
35
+ __experimentalSetIsInserterOpened( false );
36
+ }
37
+ resetZoomLevel();
38
+ }
39
+ }
40
+
41
+ node.addEventListener( 'dblclick', onDoubleClick );
42
+
43
+ return () => {
44
+ node.removeEventListener( 'dblclick', onDoubleClick );
45
+ };
46
+ },
47
+ [ getSettings, isZoomOut, resetZoomLevel ]
48
+ );
49
+ }
@@ -3,18 +3,23 @@
3
3
  */
4
4
  import { Button } from '@wordpress/components';
5
5
  import { __ } from '@wordpress/i18n';
6
-
6
+ import { useEffect } from '@wordpress/element';
7
7
  import { useDispatch, useSelect } from '@wordpress/data';
8
8
  import { store as blockEditorStore } from '@wordpress/block-editor';
9
9
  import { square as zoomOutIcon } from '@wordpress/icons';
10
10
  import { store as preferencesStore } from '@wordpress/preferences';
11
+ import {
12
+ useShortcut,
13
+ store as keyboardShortcutsStore,
14
+ } from '@wordpress/keyboard-shortcuts';
15
+ import { isAppleOS } from '@wordpress/keycodes';
11
16
 
12
17
  /**
13
18
  * Internal dependencies
14
19
  */
15
20
  import { unlock } from '../../lock-unlock';
16
21
 
17
- const ZoomOutToggle = () => {
22
+ const ZoomOutToggle = ( { disabled } ) => {
18
23
  const { isZoomOut, showIconLabels } = useSelect( ( select ) => ( {
19
24
  isZoomOut: unlock( select( blockEditorStore ) ).isZoomOut(),
20
25
  showIconLabels: select( preferencesStore ).get(
@@ -23,21 +28,50 @@ const ZoomOutToggle = () => {
23
28
  ),
24
29
  } ) );
25
30
 
26
- const { resetZoomLevel, setZoomLevel, __unstableSetEditorMode } = unlock(
31
+ const { resetZoomLevel, setZoomLevel } = unlock(
27
32
  useDispatch( blockEditorStore )
28
33
  );
34
+ const { registerShortcut, unregisterShortcut } = useDispatch(
35
+ keyboardShortcutsStore
36
+ );
37
+
38
+ useEffect( () => {
39
+ registerShortcut( {
40
+ name: 'core/editor/zoom',
41
+ category: 'global',
42
+ description: __( 'Enter or exit zoom out.' ),
43
+ keyCombination: {
44
+ // `primaryShift+0` (`ctrl+shift+0`) is the shortcut for switching
45
+ // to input mode in Windows, so apply a different key combination.
46
+ modifier: isAppleOS() ? 'primaryShift' : 'secondary',
47
+ character: '0',
48
+ },
49
+ } );
50
+ return () => {
51
+ unregisterShortcut( 'core/editor/zoom' );
52
+ };
53
+ }, [ registerShortcut, unregisterShortcut ] );
54
+
55
+ useShortcut( 'core/editor/zoom', () => {
56
+ if ( isZoomOut ) {
57
+ resetZoomLevel();
58
+ } else {
59
+ setZoomLevel( 'auto-scaled' );
60
+ }
61
+ } );
29
62
 
30
63
  const handleZoomOut = () => {
31
64
  if ( isZoomOut ) {
32
65
  resetZoomLevel();
33
66
  } else {
34
- setZoomLevel( 50 );
67
+ setZoomLevel( 'auto-scaled' );
35
68
  }
36
- __unstableSetEditorMode( isZoomOut ? 'edit' : 'zoom-out' );
37
69
  };
38
70
 
39
71
  return (
40
72
  <Button
73
+ accessibleWhenDisabled
74
+ disabled={ disabled }
41
75
  onClick={ handleZoomOut }
42
76
  icon={ zoomOutIcon }
43
77
  label={ __( 'Zoom Out' ) }
@@ -2,7 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useDispatch } from '@wordpress/data';
5
- import { __, sprintf, _x } from '@wordpress/i18n';
5
+ import { _x, sprintf } from '@wordpress/i18n';
6
6
  import { store as noticesStore } from '@wordpress/notices';
7
7
  import { useMemo } from '@wordpress/element';
8
8
  // @ts-ignore
@@ -42,7 +42,7 @@ const duplicateTemplatePart: Action< TemplatePart > = {
42
42
  createSuccessNotice(
43
43
  sprintf(
44
44
  // translators: %s: The new template part's title e.g. 'Call to action (copy)'.
45
- __( '"%s" duplicated.' ),
45
+ _x( '"%s" duplicated.', 'template part' ),
46
46
  getItemTitle( item )
47
47
  ),
48
48
  { type: 'snackbar', id: 'edit-site-patterns-success' }
@@ -55,7 +55,7 @@ const duplicateTemplatePart: Action< TemplatePart > = {
55
55
  defaultArea={ item.area }
56
56
  defaultTitle={ sprintf(
57
57
  /* translators: %s: Existing template part title */
58
- __( '%s (Copy)' ),
58
+ _x( '%s (Copy)', 'template part' ),
59
59
  getItemTitle( item )
60
60
  ) }
61
61
  onCreate={ onTemplatePartSuccess }
@@ -841,8 +841,8 @@ export const toggleDistractionFree =
841
841
  .dispatch( noticesStore )
842
842
  .createInfoNotice(
843
843
  isDistractionFree
844
- ? __( 'Distraction free off.' )
845
- : __( 'Distraction free on.' ),
844
+ ? __( 'Distraction free mode deactivated.' )
845
+ : __( 'Distraction free mode activated.' ),
846
846
  {
847
847
  id: 'core/editor/distraction-free-mode/notice',
848
848
  type: 'snackbar',
@@ -883,9 +883,11 @@ export const switchEditorMode =
883
883
  ( { dispatch, registry } ) => {
884
884
  registry.dispatch( preferencesStore ).set( 'core', 'editorMode', mode );
885
885
 
886
- // Unselect blocks when we switch to a non visual mode.
887
886
  if ( mode !== 'visual' ) {
887
+ // Unselect blocks when we switch to a non visual mode.
888
888
  registry.dispatch( blockEditorStore ).clearSelectedBlock();
889
+ // Exit zoom out state when switching to a non visual mode.
890
+ unlock( registry.dispatch( blockEditorStore ) ).resetZoomLevel();
889
891
  }
890
892
 
891
893
  if ( mode === 'visual' ) {
@@ -2,7 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { store as coreStore } from '@wordpress/core-data';
5
- import { __, sprintf } from '@wordpress/i18n';
5
+ import { __, _x, sprintf } from '@wordpress/i18n';
6
6
  import { store as noticesStore } from '@wordpress/notices';
7
7
  import { store as blockEditorStore } from '@wordpress/block-editor';
8
8
  import { store as preferencesStore } from '@wordpress/preferences';
@@ -410,8 +410,8 @@ export const removeTemplates =
410
410
  decodeEntities( title )
411
411
  )
412
412
  : sprintf(
413
- /* translators: The template/part's name. */
414
- __( '"%s" deleted.' ),
413
+ /* translators: %s: The template/part's name. */
414
+ _x( '"%s" deleted.', 'template part' ),
415
415
  decodeEntities( title )
416
416
  );
417
417
  } else {
@@ -28,6 +28,7 @@ import {
28
28
  } from './constants';
29
29
  import { getPostRawValue } from './reducer';
30
30
  import { getTemplatePartIcon } from '../utils/get-template-part-icon';
31
+ import { unlock } from '../lock-unlock';
31
32
 
32
33
  /**
33
34
  * Shared reference to an empty object for cases where it is important to avoid
@@ -1299,8 +1300,8 @@ export function getRenderingMode( state ) {
1299
1300
  */
1300
1301
  export const getDeviceType = createRegistrySelector(
1301
1302
  ( select ) => ( state ) => {
1302
- const editorMode = select( blockEditorStore ).__unstableGetEditorMode();
1303
- if ( editorMode === 'zoom-out' ) {
1303
+ const isZoomOut = unlock( select( blockEditorStore ) ).isZoomOut();
1304
+ if ( isZoomOut ) {
1304
1305
  return 'Desktop';
1305
1306
  }
1306
1307
  return state.deviceType;
package/src/style.scss CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  @import "./components/autocompleters/style.scss";
4
4
  @import "./components/block-manager/style.scss";
5
+ @import "./components/collab-sidebar/style.scss";
5
6
  @import "./components/collapsible-block-toolbar/style.scss";
6
7
  @import "./components/create-template-part-modal/style.scss";
7
8
  @import "./components/block-settings-menu/style.scss";
@@ -0,0 +1,41 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { useSelect } from '@wordpress/data';
6
+ import { store as coreStore } from '@wordpress/core-data';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import { store as editorStore } from '../store';
12
+
13
+ /**
14
+ * Custom hook to get the page type badge for the current post on edit site view.
15
+ */
16
+ export default function usePageTypeBadge() {
17
+ const { isFrontPage, isPostsPage } = useSelect( ( select ) => {
18
+ const { getCurrentPostId } = select( editorStore );
19
+ const { canUser, getEditedEntityRecord } = select( coreStore );
20
+ const postId = getCurrentPostId();
21
+ const siteSettings = canUser( 'read', {
22
+ kind: 'root',
23
+ name: 'site',
24
+ } )
25
+ ? getEditedEntityRecord( 'root', 'site' )
26
+ : undefined;
27
+
28
+ return {
29
+ isFrontPage: siteSettings?.page_on_front === postId,
30
+ isPostsPage: siteSettings?.page_for_posts === postId,
31
+ };
32
+ } );
33
+
34
+ if ( isFrontPage ) {
35
+ return __( 'Homepage' );
36
+ } else if ( isPostsPage ) {
37
+ return __( 'Posts Page' );
38
+ }
39
+
40
+ return false;
41
+ }
@@ -14,14 +14,16 @@ export function buildTermsTree( flatTerms ) {
14
14
  const flatTermsWithParentAndChildren = flatTerms.map( ( term ) => {
15
15
  return {
16
16
  children: [],
17
- parent: null,
17
+ parent: undefined,
18
18
  ...term,
19
19
  };
20
20
  } );
21
21
 
22
22
  // All terms should have a `parent` because we're about to index them by it.
23
23
  if (
24
- flatTermsWithParentAndChildren.some( ( { parent } ) => parent === null )
24
+ flatTermsWithParentAndChildren.some(
25
+ ( { parent } ) => parent === undefined
26
+ )
25
27
  ) {
26
28
  return flatTermsWithParentAndChildren;
27
29
  }
@@ -4,14 +4,14 @@
4
4
  import { buildTermsTree } from '../terms';
5
5
 
6
6
  describe( 'buildTermsTree()', () => {
7
- it( 'Should return same array as input with null parent and empty children added if parent is never specified.', () => {
7
+ it( 'Should return same array as input with undefined parent and empty children added if parent is never specified.', () => {
8
8
  const input = Object.freeze( [
9
9
  { id: 2232, dummy: true },
10
10
  { id: 2245, dummy: true },
11
11
  ] );
12
12
  const output = Object.freeze( [
13
- { id: 2232, parent: null, children: [], dummy: true },
14
- { id: 2245, parent: null, children: [], dummy: true },
13
+ { id: 2232, parent: undefined, children: [], dummy: true },
14
+ { id: 2245, parent: undefined, children: [], dummy: true },
15
15
  ] );
16
16
  const termsTreem = buildTermsTree( input );
17
17
  expect( termsTreem ).toEqual( output );