@wordpress/editor 14.41.1-next.v.202603102151.0 → 14.42.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 (301) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/components/collaborators-overlay/avatar-iframe-styles.cjs +12 -4
  3. package/build/components/collaborators-overlay/avatar-iframe-styles.cjs.map +2 -2
  4. package/build/components/collaborators-overlay/compute-selection.cjs +181 -0
  5. package/build/components/collaborators-overlay/compute-selection.cjs.map +7 -0
  6. package/build/components/collaborators-overlay/cursor-dom-utils.cjs +243 -0
  7. package/build/components/collaborators-overlay/cursor-dom-utils.cjs.map +7 -0
  8. package/build/components/collaborators-overlay/overlay-iframe-styles.cjs +6 -0
  9. package/build/components/collaborators-overlay/overlay-iframe-styles.cjs.map +2 -2
  10. package/build/components/collaborators-overlay/overlay.cjs +61 -37
  11. package/build/components/collaborators-overlay/overlay.cjs.map +2 -2
  12. package/build/components/collaborators-overlay/timing-utils.cjs +46 -0
  13. package/build/components/collaborators-overlay/timing-utils.cjs.map +7 -0
  14. package/build/components/collaborators-overlay/use-block-highlighting.cjs +5 -6
  15. package/build/components/collaborators-overlay/use-block-highlighting.cjs.map +2 -2
  16. package/build/components/collaborators-overlay/use-render-cursors.cjs +50 -140
  17. package/build/components/collaborators-overlay/use-render-cursors.cjs.map +3 -3
  18. package/build/components/collaborators-presence/index.cjs +38 -12
  19. package/build/components/collaborators-presence/index.cjs.map +2 -2
  20. package/build/components/collaborators-presence/list.cjs +27 -24
  21. package/build/components/collaborators-presence/list.cjs.map +2 -2
  22. package/build/components/collaborators-presence/use-collaborator-notifications.cjs +79 -107
  23. package/build/components/collaborators-presence/use-collaborator-notifications.cjs.map +3 -3
  24. package/build/components/editor-interface/index.cjs +9 -6
  25. package/build/components/editor-interface/index.cjs.map +2 -2
  26. package/build/components/inserter-sidebar/index.cjs +2 -1
  27. package/build/components/inserter-sidebar/index.cjs.map +2 -2
  28. package/build/components/page-attributes/parent.cjs +1 -1
  29. package/build/components/page-attributes/parent.cjs.map +2 -2
  30. package/build/components/post-locked-modal/index.cjs +16 -3
  31. package/build/components/post-locked-modal/index.cjs.map +2 -2
  32. package/build/components/post-revisions-preview/block-diff.cjs +39 -11
  33. package/build/components/post-revisions-preview/block-diff.cjs.map +2 -2
  34. package/build/components/post-revisions-preview/diff-markers.cjs +2 -2
  35. package/build/components/post-revisions-preview/diff-markers.cjs.map +2 -2
  36. package/build/components/post-revisions-preview/revisions-canvas.cjs +12 -75
  37. package/build/components/post-revisions-preview/revisions-canvas.cjs.map +3 -3
  38. package/build/components/post-revisions-preview/revisions-slider.cjs +5 -1
  39. package/build/components/post-revisions-preview/revisions-slider.cjs.map +2 -2
  40. package/build/components/post-template/block-theme.cjs +7 -4
  41. package/build/components/post-template/block-theme.cjs.map +2 -2
  42. package/build/components/post-template/hooks.cjs +39 -2
  43. package/build/components/post-template/hooks.cjs.map +2 -2
  44. package/build/components/post-template/panel.cjs +5 -42
  45. package/build/components/post-template/panel.cjs.map +3 -3
  46. package/build/components/preferences-modal/index.cjs +24 -0
  47. package/build/components/preferences-modal/index.cjs.map +2 -2
  48. package/build/components/provider/disable-non-page-content-blocks.cjs +31 -28
  49. package/build/components/provider/disable-non-page-content-blocks.cjs.map +3 -3
  50. package/build/components/provider/index.cjs +17 -5
  51. package/build/components/provider/index.cjs.map +2 -2
  52. package/build/components/provider/use-block-editor-settings.cjs +19 -5
  53. package/build/components/provider/use-block-editor-settings.cjs.map +3 -3
  54. package/build/components/provider/{use-post-content-blocks.cjs → use-post-content-block-types.cjs} +8 -19
  55. package/build/components/provider/use-post-content-block-types.cjs.map +7 -0
  56. package/build/components/provider/use-revision-blocks.cjs +106 -0
  57. package/build/components/provider/use-revision-blocks.cjs.map +7 -0
  58. package/build/components/revision-block-diff/index.cjs +84 -0
  59. package/build/components/revision-block-diff/index.cjs.map +7 -0
  60. package/build/components/sidebar/dataform-post-summary.cjs +36 -6
  61. package/build/components/sidebar/dataform-post-summary.cjs.map +2 -2
  62. package/build/components/sidebar/header.cjs +1 -1
  63. package/build/components/sidebar/header.cjs.map +2 -2
  64. package/build/components/sidebar/index.cjs +5 -1
  65. package/build/components/sidebar/index.cjs.map +3 -3
  66. package/build/components/{sync-connection-modal → sync-connection-error-modal}/index.cjs +90 -78
  67. package/build/components/sync-connection-error-modal/index.cjs.map +7 -0
  68. package/build/components/{sync-connection-modal → sync-connection-error-modal}/use-retry-countdown.cjs +14 -27
  69. package/build/components/sync-connection-error-modal/use-retry-countdown.cjs.map +7 -0
  70. package/build/components/template-content-panel/index.cjs +35 -31
  71. package/build/components/template-content-panel/index.cjs.map +3 -3
  72. package/build/components/visual-editor/index.cjs +2 -2
  73. package/build/components/visual-editor/index.cjs.map +2 -2
  74. package/build/store/actions.cjs +1 -3
  75. package/build/store/actions.cjs.map +2 -2
  76. package/build/store/private-actions.cjs +11 -2
  77. package/build/store/private-actions.cjs.map +2 -2
  78. package/build/store/private-selectors.cjs +52 -13
  79. package/build/store/private-selectors.cjs.map +2 -2
  80. package/build/store/reducer.cjs +12 -0
  81. package/build/store/reducer.cjs.map +2 -2
  82. package/build/utils/media-finalize/index.cjs +43 -0
  83. package/build/utils/media-finalize/index.cjs.map +7 -0
  84. package/build/utils/sync-error-messages.cjs +29 -16
  85. package/build/utils/sync-error-messages.cjs.map +3 -3
  86. package/build-module/components/collaborators-overlay/avatar-iframe-styles.mjs +12 -4
  87. package/build-module/components/collaborators-overlay/avatar-iframe-styles.mjs.map +2 -2
  88. package/build-module/components/collaborators-overlay/compute-selection.mjs +162 -0
  89. package/build-module/components/collaborators-overlay/compute-selection.mjs.map +7 -0
  90. package/build-module/components/collaborators-overlay/cursor-dom-utils.mjs +213 -0
  91. package/build-module/components/collaborators-overlay/cursor-dom-utils.mjs.map +7 -0
  92. package/build-module/components/collaborators-overlay/overlay-iframe-styles.mjs +6 -0
  93. package/build-module/components/collaborators-overlay/overlay-iframe-styles.mjs.map +2 -2
  94. package/build-module/components/collaborators-overlay/overlay.mjs +61 -37
  95. package/build-module/components/collaborators-overlay/overlay.mjs.map +2 -2
  96. package/build-module/components/collaborators-overlay/timing-utils.mjs +21 -0
  97. package/build-module/components/collaborators-overlay/timing-utils.mjs.map +7 -0
  98. package/build-module/components/collaborators-overlay/use-block-highlighting.mjs +5 -6
  99. package/build-module/components/collaborators-overlay/use-block-highlighting.mjs.map +2 -2
  100. package/build-module/components/collaborators-overlay/use-render-cursors.mjs +50 -140
  101. package/build-module/components/collaborators-overlay/use-render-cursors.mjs.map +2 -2
  102. package/build-module/components/collaborators-presence/index.mjs +39 -13
  103. package/build-module/components/collaborators-presence/index.mjs.map +2 -2
  104. package/build-module/components/collaborators-presence/list.mjs +27 -24
  105. package/build-module/components/collaborators-presence/list.mjs.map +2 -2
  106. package/build-module/components/collaborators-presence/use-collaborator-notifications.mjs +80 -108
  107. package/build-module/components/collaborators-presence/use-collaborator-notifications.mjs.map +2 -2
  108. package/build-module/components/editor-interface/index.mjs +10 -7
  109. package/build-module/components/editor-interface/index.mjs.map +2 -2
  110. package/build-module/components/inserter-sidebar/index.mjs +2 -1
  111. package/build-module/components/inserter-sidebar/index.mjs.map +2 -2
  112. package/build-module/components/page-attributes/parent.mjs +1 -1
  113. package/build-module/components/page-attributes/parent.mjs.map +2 -2
  114. package/build-module/components/post-locked-modal/index.mjs +16 -3
  115. package/build-module/components/post-locked-modal/index.mjs.map +2 -2
  116. package/build-module/components/post-revisions-preview/block-diff.mjs +39 -11
  117. package/build-module/components/post-revisions-preview/block-diff.mjs.map +2 -2
  118. package/build-module/components/post-revisions-preview/diff-markers.mjs +2 -2
  119. package/build-module/components/post-revisions-preview/diff-markers.mjs.map +2 -2
  120. package/build-module/components/post-revisions-preview/revisions-canvas.mjs +14 -80
  121. package/build-module/components/post-revisions-preview/revisions-canvas.mjs.map +2 -2
  122. package/build-module/components/post-revisions-preview/revisions-slider.mjs +5 -1
  123. package/build-module/components/post-revisions-preview/revisions-slider.mjs.map +2 -2
  124. package/build-module/components/post-template/block-theme.mjs +7 -4
  125. package/build-module/components/post-template/block-theme.mjs.map +2 -2
  126. package/build-module/components/post-template/hooks.mjs +37 -1
  127. package/build-module/components/post-template/hooks.mjs.map +2 -2
  128. package/build-module/components/post-template/panel.mjs +5 -42
  129. package/build-module/components/post-template/panel.mjs.map +2 -2
  130. package/build-module/components/preferences-modal/index.mjs +24 -0
  131. package/build-module/components/preferences-modal/index.mjs.map +2 -2
  132. package/build-module/components/provider/disable-non-page-content-blocks.mjs +31 -28
  133. package/build-module/components/provider/disable-non-page-content-blocks.mjs.map +2 -2
  134. package/build-module/components/provider/index.mjs +17 -5
  135. package/build-module/components/provider/index.mjs.map +2 -2
  136. package/build-module/components/provider/use-block-editor-settings.mjs +19 -5
  137. package/build-module/components/provider/use-block-editor-settings.mjs.map +2 -2
  138. package/build-module/components/provider/use-post-content-block-types.mjs +23 -0
  139. package/build-module/components/provider/use-post-content-block-types.mjs.map +7 -0
  140. package/build-module/components/provider/use-revision-blocks.mjs +81 -0
  141. package/build-module/components/provider/use-revision-blocks.mjs.map +7 -0
  142. package/build-module/components/revision-block-diff/index.mjs +53 -0
  143. package/build-module/components/revision-block-diff/index.mjs.map +7 -0
  144. package/build-module/components/sidebar/dataform-post-summary.mjs +36 -6
  145. package/build-module/components/sidebar/dataform-post-summary.mjs.map +2 -2
  146. package/build-module/components/sidebar/header.mjs +1 -1
  147. package/build-module/components/sidebar/header.mjs.map +2 -2
  148. package/build-module/components/sidebar/index.mjs +5 -1
  149. package/build-module/components/sidebar/index.mjs.map +2 -2
  150. package/build-module/components/sync-connection-error-modal/index.mjs +177 -0
  151. package/build-module/components/sync-connection-error-modal/index.mjs.map +7 -0
  152. package/build-module/components/sync-connection-error-modal/use-retry-countdown.mjs +36 -0
  153. package/build-module/components/sync-connection-error-modal/use-retry-countdown.mjs.map +7 -0
  154. package/build-module/components/template-content-panel/index.mjs +25 -31
  155. package/build-module/components/template-content-panel/index.mjs.map +2 -2
  156. package/build-module/components/visual-editor/index.mjs +2 -2
  157. package/build-module/components/visual-editor/index.mjs.map +2 -2
  158. package/build-module/store/actions.mjs +1 -3
  159. package/build-module/store/actions.mjs.map +2 -2
  160. package/build-module/store/private-actions.mjs +10 -2
  161. package/build-module/store/private-actions.mjs.map +2 -2
  162. package/build-module/store/private-selectors.mjs +50 -12
  163. package/build-module/store/private-selectors.mjs.map +2 -2
  164. package/build-module/store/reducer.mjs +11 -0
  165. package/build-module/store/reducer.mjs.map +2 -2
  166. package/build-module/utils/media-finalize/index.mjs +12 -0
  167. package/build-module/utils/media-finalize/index.mjs.map +7 -0
  168. package/build-module/utils/sync-error-messages.mjs +24 -16
  169. package/build-module/utils/sync-error-messages.mjs.map +3 -3
  170. package/build-style/style-rtl.css +95 -16
  171. package/build-style/style.css +95 -16
  172. package/build-types/components/collaborators-overlay/avatar-iframe-styles.d.ts +1 -1
  173. package/build-types/components/collaborators-overlay/avatar-iframe-styles.d.ts.map +1 -1
  174. package/build-types/components/collaborators-overlay/compute-selection.d.ts +24 -0
  175. package/build-types/components/collaborators-overlay/compute-selection.d.ts.map +1 -0
  176. package/build-types/components/collaborators-overlay/cursor-dom-utils.d.ts +72 -0
  177. package/build-types/components/collaborators-overlay/cursor-dom-utils.d.ts.map +1 -0
  178. package/build-types/components/collaborators-overlay/overlay-iframe-styles.d.ts +1 -1
  179. package/build-types/components/collaborators-overlay/overlay-iframe-styles.d.ts.map +1 -1
  180. package/build-types/components/collaborators-overlay/overlay.d.ts.map +1 -1
  181. package/build-types/components/collaborators-overlay/timing-utils.d.ts +11 -0
  182. package/build-types/components/collaborators-overlay/timing-utils.d.ts.map +1 -0
  183. package/build-types/components/collaborators-overlay/use-block-highlighting.d.ts.map +1 -1
  184. package/build-types/components/collaborators-overlay/use-render-cursors.d.ts +4 -0
  185. package/build-types/components/collaborators-overlay/use-render-cursors.d.ts.map +1 -1
  186. package/build-types/components/collaborators-presence/index.d.ts.map +1 -1
  187. package/build-types/components/collaborators-presence/list.d.ts +2 -1
  188. package/build-types/components/collaborators-presence/list.d.ts.map +1 -1
  189. package/build-types/components/collaborators-presence/use-collaborator-notifications.d.ts.map +1 -1
  190. package/build-types/components/editor-interface/index.d.ts.map +1 -1
  191. package/build-types/components/inserter-sidebar/index.d.ts.map +1 -1
  192. package/build-types/components/post-locked-modal/index.d.ts +2 -2
  193. package/build-types/components/post-locked-modal/index.d.ts.map +1 -1
  194. package/build-types/components/post-revisions-preview/block-diff.d.ts.map +1 -1
  195. package/build-types/components/post-revisions-preview/revisions-canvas.d.ts +2 -5
  196. package/build-types/components/post-revisions-preview/revisions-canvas.d.ts.map +1 -1
  197. package/build-types/components/post-revisions-preview/revisions-slider.d.ts.map +1 -1
  198. package/build-types/components/post-template/block-theme.d.ts +1 -3
  199. package/build-types/components/post-template/block-theme.d.ts.map +1 -1
  200. package/build-types/components/post-template/hooks.d.ts +1 -0
  201. package/build-types/components/post-template/hooks.d.ts.map +1 -1
  202. package/build-types/components/post-template/panel.d.ts.map +1 -1
  203. package/build-types/components/provider/disable-non-page-content-blocks.d.ts.map +1 -1
  204. package/build-types/components/provider/index.d.ts.map +1 -1
  205. package/build-types/components/provider/use-block-editor-settings.d.ts.map +1 -1
  206. package/build-types/components/provider/use-post-content-block-types.d.ts +9 -0
  207. package/build-types/components/provider/use-post-content-block-types.d.ts.map +1 -0
  208. package/build-types/components/provider/use-revision-blocks.d.ts +10 -0
  209. package/build-types/components/provider/use-revision-blocks.d.ts.map +1 -0
  210. package/build-types/components/revision-block-diff/index.d.ts +6 -0
  211. package/build-types/components/revision-block-diff/index.d.ts.map +1 -0
  212. package/build-types/components/sidebar/dataform-post-summary.d.ts.map +1 -1
  213. package/build-types/components/sidebar/index.d.ts.map +1 -1
  214. package/build-types/components/sync-connection-error-modal/index.d.ts +22 -0
  215. package/build-types/components/sync-connection-error-modal/index.d.ts.map +1 -0
  216. package/build-types/components/sync-connection-error-modal/use-retry-countdown.d.ts +11 -0
  217. package/build-types/components/sync-connection-error-modal/use-retry-countdown.d.ts.map +1 -0
  218. package/build-types/components/template-content-panel/index.d.ts.map +1 -1
  219. package/build-types/store/actions.d.ts.map +1 -1
  220. package/build-types/store/private-actions.d.ts +7 -0
  221. package/build-types/store/private-actions.d.ts.map +1 -1
  222. package/build-types/store/private-selectors.d.ts +7 -0
  223. package/build-types/store/private-selectors.d.ts.map +1 -1
  224. package/build-types/store/reducer.d.ts +14 -3
  225. package/build-types/store/reducer.d.ts.map +1 -1
  226. package/build-types/utils/media-finalize/index.d.ts +2 -0
  227. package/build-types/utils/media-finalize/index.d.ts.map +1 -0
  228. package/build-types/utils/sync-error-messages.d.ts +17 -3
  229. package/build-types/utils/sync-error-messages.d.ts.map +1 -1
  230. package/package.json +44 -44
  231. package/src/components/collaborators-overlay/avatar-iframe-styles.ts +12 -4
  232. package/src/components/collaborators-overlay/compute-selection.ts +307 -0
  233. package/src/components/collaborators-overlay/cursor-dom-utils.ts +382 -0
  234. package/src/components/collaborators-overlay/overlay-iframe-styles.ts +6 -0
  235. package/src/components/collaborators-overlay/overlay.tsx +59 -27
  236. package/src/components/collaborators-overlay/timing-utils.ts +30 -0
  237. package/src/components/collaborators-overlay/use-block-highlighting.ts +11 -10
  238. package/src/components/collaborators-overlay/use-render-cursors.ts +70 -242
  239. package/src/components/collaborators-presence/avatar/styles.scss +20 -4
  240. package/src/components/collaborators-presence/index.tsx +30 -5
  241. package/src/components/collaborators-presence/list.tsx +38 -24
  242. package/src/components/collaborators-presence/test/use-collaborator-notifications.ts +188 -246
  243. package/src/components/collaborators-presence/use-collaborator-notifications.ts +109 -166
  244. package/src/components/document-bar/style.scss +1 -1
  245. package/src/components/editor-interface/index.js +8 -6
  246. package/src/components/inserter-sidebar/index.js +4 -1
  247. package/src/components/page-attributes/parent.js +1 -1
  248. package/src/components/post-locked-modal/index.js +21 -3
  249. package/src/components/post-revisions-preview/block-diff.js +59 -20
  250. package/src/components/post-revisions-preview/diff-markers.js +2 -2
  251. package/src/components/post-revisions-preview/revisions-canvas.js +20 -98
  252. package/src/components/post-revisions-preview/revisions-slider.js +6 -1
  253. package/src/components/post-revisions-preview/test/block-diff.js +69 -31
  254. package/src/components/post-template/block-theme.js +4 -1
  255. package/src/components/post-template/hooks.js +42 -0
  256. package/src/components/post-template/panel.js +5 -59
  257. package/src/components/preferences-modal/index.js +18 -0
  258. package/src/components/provider/disable-non-page-content-blocks.js +42 -40
  259. package/src/components/provider/index.js +20 -2
  260. package/src/components/provider/use-block-editor-settings.js +21 -8
  261. package/src/components/provider/use-post-content-block-types.js +30 -0
  262. package/src/components/provider/use-revision-blocks.js +105 -0
  263. package/src/components/revision-block-diff/index.js +74 -0
  264. package/src/components/revision-block-diff/style.scss +13 -0
  265. package/src/components/sidebar/dataform-post-summary.js +61 -16
  266. package/src/components/sidebar/header.js +1 -1
  267. package/src/components/sidebar/index.js +2 -0
  268. package/src/components/sync-connection-error-modal/index.tsx +265 -0
  269. package/src/components/sync-connection-error-modal/style.scss +14 -0
  270. package/src/components/sync-connection-error-modal/use-retry-countdown.ts +57 -0
  271. package/src/components/template-content-panel/index.js +30 -38
  272. package/src/components/visual-editor/index.js +2 -2
  273. package/src/store/actions.js +1 -4
  274. package/src/store/private-actions.js +21 -2
  275. package/src/store/private-selectors.js +75 -10
  276. package/src/store/reducer.js +19 -0
  277. package/src/style.scss +2 -1
  278. package/src/utils/media-finalize/index.js +11 -0
  279. package/src/utils/media-finalize/test/index.js +34 -0
  280. package/src/utils/sync-error-messages.ts +72 -0
  281. package/src/utils/test/sync-error-messages.js +9 -32
  282. package/build/components/provider/use-post-content-blocks.cjs.map +0 -7
  283. package/build/components/sync-connection-modal/index.cjs.map +0 -7
  284. package/build/components/sync-connection-modal/use-retry-countdown.cjs.map +0 -7
  285. package/build-module/components/provider/use-post-content-blocks.mjs +0 -34
  286. package/build-module/components/provider/use-post-content-blocks.mjs.map +0 -7
  287. package/build-module/components/sync-connection-modal/index.mjs +0 -167
  288. package/build-module/components/sync-connection-modal/index.mjs.map +0 -7
  289. package/build-module/components/sync-connection-modal/use-retry-countdown.mjs +0 -49
  290. package/build-module/components/sync-connection-modal/use-retry-countdown.mjs.map +0 -7
  291. package/build-types/components/provider/use-post-content-blocks.d.ts +0 -2
  292. package/build-types/components/provider/use-post-content-blocks.d.ts.map +0 -1
  293. package/build-types/components/sync-connection-modal/index.d.ts +0 -8
  294. package/build-types/components/sync-connection-modal/index.d.ts.map +0 -1
  295. package/build-types/components/sync-connection-modal/use-retry-countdown.d.ts +0 -9
  296. package/build-types/components/sync-connection-modal/use-retry-countdown.d.ts.map +0 -1
  297. package/src/components/provider/use-post-content-blocks.js +0 -42
  298. package/src/components/sync-connection-modal/index.js +0 -200
  299. package/src/components/sync-connection-modal/style.scss +0 -9
  300. package/src/components/sync-connection-modal/use-retry-countdown.js +0 -70
  301. package/src/utils/sync-error-messages.js +0 -58
@@ -0,0 +1,177 @@
1
+ // packages/editor/src/components/sync-connection-error-modal/index.tsx
2
+ import { useSelect, select } from "@wordpress/data";
3
+ import { useCopyToClipboard } from "@wordpress/compose";
4
+ import { serialize } from "@wordpress/blocks";
5
+ import {
6
+ store as coreDataStore,
7
+ privateApis as coreDataPrivateApis
8
+ } from "@wordpress/core-data";
9
+ import { privateApis, store as blockEditorStore } from "@wordpress/block-editor";
10
+ import {
11
+ Button,
12
+ Modal,
13
+ withFilters,
14
+ __experimentalHStack as HStack,
15
+ __experimentalVStack as VStack
16
+ } from "@wordpress/components";
17
+ import { useState, useEffect } from "@wordpress/element";
18
+ import { __, sprintf, _n } from "@wordpress/i18n";
19
+ import { getSyncErrorMessages } from "../../utils/sync-error-messages.mjs";
20
+ import { store as editorStore } from "../../store/index.mjs";
21
+ import { unlock } from "../../lock-unlock.mjs";
22
+ import { useRetryCountdown } from "./use-retry-countdown.mjs";
23
+ import { jsx, jsxs } from "react/jsx-runtime";
24
+ var { BlockCanvasCover } = unlock(privateApis);
25
+ var { retrySyncConnection } = unlock(coreDataPrivateApis);
26
+ var INITIAL_DISCONNECTED_DEBOUNCE_MS = 5e3;
27
+ var DISCONNECTED_DEBOUNCE_MS = 2e3;
28
+ function DefaultSyncConnectionErrorModal(props) {
29
+ const {
30
+ description,
31
+ manualRetry,
32
+ postType,
33
+ secondsRemainingUntilAutoRetry,
34
+ title
35
+ } = props;
36
+ const copyButtonRef = useCopyToClipboard(() => {
37
+ const blocks = select(blockEditorStore).getBlocks();
38
+ return serialize(blocks);
39
+ });
40
+ let retryCountdownText = "";
41
+ let isRetrying = false;
42
+ if (secondsRemainingUntilAutoRetry && secondsRemainingUntilAutoRetry > 0) {
43
+ retryCountdownText = sprintf(
44
+ /* translators: %d: number of seconds until retry */
45
+ _n(
46
+ "Retrying connection in %d second\u2026",
47
+ "Retrying connection in %d seconds\u2026",
48
+ secondsRemainingUntilAutoRetry
49
+ ),
50
+ secondsRemainingUntilAutoRetry
51
+ );
52
+ } else if (0 === secondsRemainingUntilAutoRetry) {
53
+ isRetrying = true;
54
+ retryCountdownText = __("Retrying\u2026");
55
+ }
56
+ let editPostHref = "edit.php";
57
+ if (postType?.slug) {
58
+ editPostHref = `edit.php?post_type=${postType.slug}`;
59
+ }
60
+ return /* @__PURE__ */ jsx(
61
+ Modal,
62
+ {
63
+ overlayClassName: "editor-sync-connection-error-modal",
64
+ isDismissible: false,
65
+ onRequestClose: () => {
66
+ },
67
+ shouldCloseOnClickOutside: false,
68
+ shouldCloseOnEsc: false,
69
+ size: "medium",
70
+ title,
71
+ children: /* @__PURE__ */ jsxs(VStack, { spacing: 6, children: [
72
+ /* @__PURE__ */ jsx("p", { children: description }),
73
+ retryCountdownText && /* @__PURE__ */ jsx("p", { className: "editor-sync-connection-error-modal__retry-countdown", children: retryCountdownText }),
74
+ /* @__PURE__ */ jsxs(HStack, { justify: "right", children: [
75
+ /* @__PURE__ */ jsx(
76
+ Button,
77
+ {
78
+ __next40pxDefaultSize: true,
79
+ href: editPostHref,
80
+ isDestructive: true,
81
+ variant: "tertiary",
82
+ children: sprintf(
83
+ /* translators: %s: Post type name (e.g., "Posts", "Pages"). */
84
+ __("Back to %s"),
85
+ postType?.labels?.name ?? __("Posts")
86
+ )
87
+ }
88
+ ),
89
+ /* @__PURE__ */ jsx(
90
+ Button,
91
+ {
92
+ __next40pxDefaultSize: true,
93
+ ref: copyButtonRef,
94
+ variant: manualRetry ? "secondary" : "primary",
95
+ children: __("Copy Post Content")
96
+ }
97
+ ),
98
+ manualRetry && /* @__PURE__ */ jsx(
99
+ Button,
100
+ {
101
+ __next40pxDefaultSize: true,
102
+ accessibleWhenDisabled: true,
103
+ "aria-disabled": isRetrying,
104
+ disabled: isRetrying,
105
+ isBusy: isRetrying,
106
+ variant: "primary",
107
+ onClick: manualRetry,
108
+ children: __("Retry")
109
+ }
110
+ )
111
+ ] })
112
+ ] })
113
+ }
114
+ );
115
+ }
116
+ var FilteredSyncConnectionErrorModal = globalThis.IS_GUTENBERG_PLUGIN ? withFilters("editor.SyncConnectionErrorModal")(
117
+ DefaultSyncConnectionErrorModal
118
+ ) : DefaultSyncConnectionErrorModal;
119
+ function SyncConnectionErrorModal() {
120
+ const [hasInitialized, setHasInitialized] = useState(false);
121
+ const [showModal, setShowModal] = useState(false);
122
+ const { connectionStatus, isCollaborationEnabled, postType } = useSelect(
123
+ (selectFn) => {
124
+ const currentPostType = selectFn(editorStore).getCurrentPostType();
125
+ return {
126
+ connectionStatus: selectFn(coreDataStore).getSyncConnectionStatus() || null,
127
+ isCollaborationEnabled: selectFn(
128
+ editorStore
129
+ ).isCollaborationEnabledForCurrentPost(),
130
+ postType: currentPostType ? selectFn(coreDataStore).getPostType(currentPostType) : null
131
+ };
132
+ },
133
+ []
134
+ );
135
+ const { onManualRetry, secondsRemaining } = useRetryCountdown(connectionStatus);
136
+ const isConnected = "connected" === connectionStatus?.status;
137
+ useEffect(() => {
138
+ const timeout = setTimeout(() => {
139
+ setHasInitialized(true);
140
+ }, INITIAL_DISCONNECTED_DEBOUNCE_MS);
141
+ return () => clearTimeout(timeout);
142
+ }, []);
143
+ useEffect(() => {
144
+ if (isConnected) {
145
+ setShowModal(false);
146
+ return;
147
+ }
148
+ const timeout = setTimeout(() => {
149
+ setShowModal(true);
150
+ }, DISCONNECTED_DEBOUNCE_MS);
151
+ return () => clearTimeout(timeout);
152
+ }, [isConnected]);
153
+ if (!isCollaborationEnabled || !hasInitialized || !showModal) {
154
+ return null;
155
+ }
156
+ const error = connectionStatus && "error" in connectionStatus ? connectionStatus?.error : void 0;
157
+ const manualRetry = connectionStatus && "canManuallyRetry" in connectionStatus && connectionStatus.canManuallyRetry ? () => {
158
+ onManualRetry();
159
+ retrySyncConnection();
160
+ } : void 0;
161
+ const messages = getSyncErrorMessages(error);
162
+ return /* @__PURE__ */ jsx(BlockCanvasCover.Fill, { children: /* @__PURE__ */ jsx(
163
+ FilteredSyncConnectionErrorModal,
164
+ {
165
+ description: messages.description,
166
+ error,
167
+ manualRetry,
168
+ postType,
169
+ secondsRemainingUntilAutoRetry: secondsRemaining,
170
+ title: messages.title
171
+ }
172
+ ) });
173
+ }
174
+ export {
175
+ SyncConnectionErrorModal
176
+ };
177
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/sync-connection-error-modal/index.tsx"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect, select } from '@wordpress/data';\nimport { useCopyToClipboard } from '@wordpress/compose';\n// @ts-ignore No exported types.\nimport { serialize } from '@wordpress/blocks';\nimport {\n\tstore as coreDataStore,\n\tprivateApis as coreDataPrivateApis,\n\ttype ConnectionError,\n} from '@wordpress/core-data';\n// @ts-expect-error - No type declarations available for @wordpress/block-editor\n// prettier-ignore\nimport { privateApis, store as blockEditorStore } from '@wordpress/block-editor';\nimport {\n\tButton,\n\tModal,\n\twithFilters,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useState, useEffect } from '@wordpress/element';\nimport { __, sprintf, _n } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { getSyncErrorMessages } from '../../utils/sync-error-messages';\nimport { store as editorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport { useRetryCountdown } from './use-retry-countdown';\n\nconst { BlockCanvasCover } = unlock( privateApis );\nconst { retrySyncConnection } = unlock( coreDataPrivateApis );\n\n// Debounce time for initial disconnected status to allow connection to establish.\nconst INITIAL_DISCONNECTED_DEBOUNCE_MS = 5000;\n\n// Debounce time for showing the disconnect dialog after the intial connection,\n// allowing brief network interruptions to resolve.\nconst DISCONNECTED_DEBOUNCE_MS = 2000;\n\nexport interface SyncConnectionErrorModalProps {\n\tdescription: string; // Modal description.\n\terror?: ConnectionError; // Error object with a `code` property.\n\tmanualRetry?: () => void; // Callback for when the retry button is clicked.\n\tpostType?: { slug?: string; labels?: { name?: string } } | null; // Current post type object.\n\tsecondsRemainingUntilAutoRetry?: number; // Seconds remaining until the next automatic retry attempt, if applicable.\n\ttitle: string; // Modal title.\n}\n\n/**\n * Default sync connection modal component.\n *\n * Can be replaced or wrapped via the `editor.SyncConnectionErrorModal` filter.\n *\n * @param props - SyncConnectionErrorModalProps.\n */\nfunction DefaultSyncConnectionErrorModal(\n\tprops: SyncConnectionErrorModalProps\n) {\n\tconst {\n\t\tdescription,\n\t\tmanualRetry,\n\t\tpostType,\n\t\tsecondsRemainingUntilAutoRetry,\n\t\ttitle,\n\t} = props;\n\tconst copyButtonRef = useCopyToClipboard( () => {\n\t\tconst blocks = select( blockEditorStore ).getBlocks();\n\t\treturn serialize( blocks );\n\t} );\n\n\tlet retryCountdownText: string = '';\n\tlet isRetrying = false;\n\tif (\n\t\tsecondsRemainingUntilAutoRetry &&\n\t\tsecondsRemainingUntilAutoRetry > 0\n\t) {\n\t\tretryCountdownText = sprintf(\n\t\t\t/* translators: %d: number of seconds until retry */\n\t\t\t_n(\n\t\t\t\t'Retrying connection in %d second\\u2026',\n\t\t\t\t'Retrying connection in %d seconds\\u2026',\n\t\t\t\tsecondsRemainingUntilAutoRetry\n\t\t\t),\n\t\t\tsecondsRemainingUntilAutoRetry\n\t\t);\n\t} else if ( 0 === secondsRemainingUntilAutoRetry ) {\n\t\tisRetrying = true;\n\t\tretryCountdownText = __( 'Retrying\\u2026' );\n\t}\n\n\tlet editPostHref = 'edit.php';\n\tif ( postType?.slug ) {\n\t\teditPostHref = `edit.php?post_type=${ postType.slug }`;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\toverlayClassName=\"editor-sync-connection-error-modal\"\n\t\t\tisDismissible={ false }\n\t\t\tonRequestClose={ () => {} }\n\t\t\tshouldCloseOnClickOutside={ false }\n\t\t\tshouldCloseOnEsc={ false }\n\t\t\tsize=\"medium\"\n\t\t\ttitle={ title }\n\t\t>\n\t\t\t<VStack spacing={ 6 }>\n\t\t\t\t<p>{ description }</p>\n\t\t\t\t{ retryCountdownText && (\n\t\t\t\t\t<p className=\"editor-sync-connection-error-modal__retry-countdown\">\n\t\t\t\t\t\t{ retryCountdownText }\n\t\t\t\t\t</p>\n\t\t\t\t) }\n\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\thref={ editPostHref }\n\t\t\t\t\t\tisDestructive\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t/* translators: %s: Post type name (e.g., \"Posts\", \"Pages\"). */\n\t\t\t\t\t\t\t__( 'Back to %s' ),\n\t\t\t\t\t\t\tpostType?.labels?.name ?? __( 'Posts' )\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tref={ copyButtonRef }\n\t\t\t\t\t\tvariant={ manualRetry ? 'secondary' : 'primary' }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Copy Post Content' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t\t{ manualRetry && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\taria-disabled={ isRetrying }\n\t\t\t\t\t\t\tdisabled={ isRetrying }\n\t\t\t\t\t\t\tisBusy={ isRetrying }\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={ manualRetry }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Retry' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t</HStack>\n\t\t\t</VStack>\n\t\t</Modal>\n\t);\n}\n\n/**\n * Filtered version of the sync connection modal, allowing third-party\n * plugins to replace the default modal via:\n *\n * ```js\n * wp.hooks.addFilter(\n * 'editor.SyncConnectionErrorModal',\n * 'my-plugin/custom-sync-connection-error-modal',\n * ( OriginalComponent ) => ( props ) => {\n * // Return a custom component or wrap the original.\n * return <OriginalComponent { ...props } />;\n * }\n * );\n * ```\n */\n// @ts-ignore\nconst FilteredSyncConnectionErrorModal = globalThis.IS_GUTENBERG_PLUGIN\n\t? withFilters( 'editor.SyncConnectionErrorModal' )(\n\t\t\tDefaultSyncConnectionErrorModal\n\t )\n\t: DefaultSyncConnectionErrorModal;\n\n/**\n * Sync connection modal that displays when any entity reports a disconnection.\n * Uses BlockCanvasCover.Fill to render in the block canvas.\n *\n * @return The modal component or null if not disconnected.\n */\nexport function SyncConnectionErrorModal() {\n\tconst [ hasInitialized, setHasInitialized ] = useState( false );\n\tconst [ showModal, setShowModal ] = useState( false );\n\n\tconst { connectionStatus, isCollaborationEnabled, postType } = useSelect(\n\t\t( selectFn ) => {\n\t\t\tconst currentPostType =\n\t\t\t\tselectFn( editorStore ).getCurrentPostType();\n\t\t\treturn {\n\t\t\t\tconnectionStatus:\n\t\t\t\t\tselectFn( coreDataStore ).getSyncConnectionStatus() || null,\n\t\t\t\tisCollaborationEnabled:\n\t\t\t\t\tselectFn(\n\t\t\t\t\t\teditorStore\n\t\t\t\t\t).isCollaborationEnabledForCurrentPost(),\n\t\t\t\tpostType: currentPostType\n\t\t\t\t\t? selectFn( coreDataStore ).getPostType( currentPostType )\n\t\t\t\t\t: null,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst { onManualRetry, secondsRemaining } =\n\t\tuseRetryCountdown( connectionStatus );\n\n\tconst isConnected = 'connected' === connectionStatus?.status;\n\n\t// Set hasInitialized after a debounce to give extra time on initial load.\n\tuseEffect( () => {\n\t\tconst timeout = setTimeout( () => {\n\t\t\tsetHasInitialized( true );\n\t\t}, INITIAL_DISCONNECTED_DEBOUNCE_MS );\n\n\t\treturn () => clearTimeout( timeout );\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tif ( isConnected ) {\n\t\t\tsetShowModal( false );\n\t\t\treturn;\n\t\t}\n\n\t\tconst timeout = setTimeout( () => {\n\t\t\tsetShowModal( true );\n\t\t}, DISCONNECTED_DEBOUNCE_MS );\n\n\t\treturn () => clearTimeout( timeout );\n\t}, [ isConnected ] );\n\n\tif ( ! isCollaborationEnabled || ! hasInitialized || ! showModal ) {\n\t\treturn null;\n\t}\n\n\tconst error =\n\t\tconnectionStatus && 'error' in connectionStatus\n\t\t\t? connectionStatus?.error\n\t\t\t: undefined;\n\tconst manualRetry =\n\t\tconnectionStatus &&\n\t\t'canManuallyRetry' in connectionStatus &&\n\t\tconnectionStatus.canManuallyRetry\n\t\t\t? () => {\n\t\t\t\t\tonManualRetry();\n\t\t\t\t\tretrySyncConnection();\n\t\t\t }\n\t\t\t: undefined;\n\tconst messages = getSyncErrorMessages( error );\n\n\treturn (\n\t\t<BlockCanvasCover.Fill>\n\t\t\t<FilteredSyncConnectionErrorModal\n\t\t\t\tdescription={ messages.description }\n\t\t\t\terror={ error }\n\t\t\t\tmanualRetry={ manualRetry }\n\t\t\t\tpostType={ postType }\n\t\t\t\tsecondsRemainingUntilAutoRetry={ secondsRemaining }\n\t\t\t\ttitle={ messages.title }\n\t\t\t/>\n\t\t</BlockCanvasCover.Fill>\n\t);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,36 @@
1
+ // packages/editor/src/components/sync-connection-error-modal/use-retry-countdown.ts
2
+ import { useState, useEffect } from "@wordpress/element";
3
+ function useRetryCountdown(connectionStatus) {
4
+ const [secondsRemaining, setSecondsRemaining] = useState();
5
+ useEffect(() => {
6
+ if (!connectionStatus) {
7
+ return;
8
+ }
9
+ if ("connected" === connectionStatus.status) {
10
+ setSecondsRemaining(void 0);
11
+ return;
12
+ }
13
+ if ("disconnected" !== connectionStatus.status || !connectionStatus.willAutoRetryInMs) {
14
+ return;
15
+ }
16
+ const { willAutoRetryInMs: retryInMs } = connectionStatus;
17
+ const retryAt = Date.now() + retryInMs;
18
+ setSecondsRemaining(Math.ceil(retryInMs / 1e3));
19
+ const intervalId = setInterval(() => {
20
+ const remaining = Math.ceil((retryAt - Date.now()) / 1e3);
21
+ setSecondsRemaining(Math.max(0, remaining));
22
+ if (remaining <= 0) {
23
+ clearInterval(intervalId);
24
+ }
25
+ }, 1e3);
26
+ return () => clearInterval(intervalId);
27
+ }, [connectionStatus]);
28
+ return {
29
+ onManualRetry: () => setSecondsRemaining(0),
30
+ secondsRemaining
31
+ };
32
+ }
33
+ export {
34
+ useRetryCountdown
35
+ };
36
+ //# sourceMappingURL=use-retry-countdown.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/sync-connection-error-modal/use-retry-countdown.ts"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport type { ConnectionStatus } from '@wordpress/core-data';\nimport { useState, useEffect } from '@wordpress/element';\n\ninterface UseRetryCountdownResult {\n\tonManualRetry: () => void;\n\tsecondsRemaining?: number;\n}\n\nexport function useRetryCountdown(\n\tconnectionStatus?: ConnectionStatus | null\n): UseRetryCountdownResult {\n\tconst [ secondsRemaining, setSecondsRemaining ] = useState< number >();\n\n\tuseEffect( () => {\n\t\tif ( ! connectionStatus ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Only clear countdown when explicitly connected.\n\t\tif ( 'connected' === connectionStatus.status ) {\n\t\t\tsetSecondsRemaining( undefined );\n\t\t\treturn;\n\t\t}\n\n\t\t// For transient states (e.g. 'connecting' during a retry attempt)\n\t\t// or when retryInMs is not yet available, keep the previous\n\t\t// countdown value to avoid a brief flash.\n\t\tif (\n\t\t\t'disconnected' !== connectionStatus.status ||\n\t\t\t! connectionStatus.willAutoRetryInMs\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { willAutoRetryInMs: retryInMs } = connectionStatus;\n\t\tconst retryAt = Date.now() + retryInMs;\n\t\tsetSecondsRemaining( Math.ceil( retryInMs / 1000 ) );\n\n\t\tconst intervalId = setInterval( () => {\n\t\t\tconst remaining = Math.ceil( ( retryAt - Date.now() ) / 1000 );\n\t\t\tsetSecondsRemaining( Math.max( 0, remaining ) );\n\t\t\tif ( remaining <= 0 ) {\n\t\t\t\tclearInterval( intervalId );\n\t\t\t}\n\t\t}, 1000 );\n\n\t\treturn () => clearInterval( intervalId );\n\t}, [ connectionStatus ] );\n\n\treturn {\n\t\tonManualRetry: () => setSecondsRemaining( 0 ),\n\t\tsecondsRemaining,\n\t};\n}\n"],
5
+ "mappings": ";AAIA,SAAS,UAAU,iBAAiB;AAO7B,SAAS,kBACf,kBAC0B;AAC1B,QAAM,CAAE,kBAAkB,mBAAoB,IAAI,SAAmB;AAErE,YAAW,MAAM;AAChB,QAAK,CAAE,kBAAmB;AACzB;AAAA,IACD;AAGA,QAAK,gBAAgB,iBAAiB,QAAS;AAC9C,0BAAqB,MAAU;AAC/B;AAAA,IACD;AAKA,QACC,mBAAmB,iBAAiB,UACpC,CAAE,iBAAiB,mBAClB;AACD;AAAA,IACD;AAEA,UAAM,EAAE,mBAAmB,UAAU,IAAI;AACzC,UAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,wBAAqB,KAAK,KAAM,YAAY,GAAK,CAAE;AAEnD,UAAM,aAAa,YAAa,MAAM;AACrC,YAAM,YAAY,KAAK,MAAQ,UAAU,KAAK,IAAI,KAAM,GAAK;AAC7D,0BAAqB,KAAK,IAAK,GAAG,SAAU,CAAE;AAC9C,UAAK,aAAa,GAAI;AACrB,sBAAe,UAAW;AAAA,MAC3B;AAAA,IACD,GAAG,GAAK;AAER,WAAO,MAAM,cAAe,UAAW;AAAA,EACxC,GAAG,CAAE,gBAAiB,CAAE;AAExB,SAAO;AAAA,IACN,eAAe,MAAM,oBAAqB,CAAE;AAAA,IAC5C;AAAA,EACD;AACD;",
6
+ "names": []
7
+ }
@@ -4,47 +4,26 @@ import { privateApis as blockEditorPrivateApis } from "@wordpress/block-editor";
4
4
  import { PanelBody } from "@wordpress/components";
5
5
  import { __ } from "@wordpress/i18n";
6
6
  import { store as interfaceStore } from "@wordpress/interface";
7
- import { applyFilters } from "@wordpress/hooks";
8
- import { useMemo } from "@wordpress/element";
9
7
  import { unlock } from "../../lock-unlock.mjs";
10
8
  import { TEMPLATE_POST_TYPE } from "../../store/constants.mjs";
11
9
  import { store as editorStore } from "../../store/index.mjs";
10
+ import usePostContentBlockTypes from "../provider/use-post-content-block-types.mjs";
12
11
  import { jsx } from "react/jsx-runtime";
13
12
  var { BlockQuickNavigation } = unlock(blockEditorPrivateApis);
14
- var POST_CONTENT_BLOCK_TYPES = [
15
- "core/post-title",
16
- "core/post-featured-image",
17
- "core/post-content"
18
- ];
19
13
  var TEMPLATE_PART_BLOCK = "core/template-part";
20
- function TemplateContentPanel() {
21
- const postContentBlockTypes = useMemo(
22
- () => applyFilters(
23
- "editor.postContentBlockTypes",
24
- POST_CONTENT_BLOCK_TYPES
25
- ),
26
- []
27
- );
28
- const { clientIds, postType, renderingMode } = useSelect(
14
+ function TemplateContentPanelInner({ postType }) {
15
+ const postContentBlockTypes = usePostContentBlockTypes();
16
+ const clientIds = useSelect(
29
17
  (select) => {
30
- const {
31
- getCurrentPostType,
32
- getPostBlocksByName,
33
- getRenderingMode
34
- } = unlock(select(editorStore));
35
- const _postType = getCurrentPostType();
36
- return {
37
- postType: _postType,
38
- clientIds: getPostBlocksByName(
39
- TEMPLATE_POST_TYPE === _postType ? TEMPLATE_PART_BLOCK : postContentBlockTypes
40
- ),
41
- renderingMode: getRenderingMode()
42
- };
18
+ const { getPostBlocksByName } = unlock(select(editorStore));
19
+ return getPostBlocksByName(
20
+ TEMPLATE_POST_TYPE === postType ? TEMPLATE_PART_BLOCK : postContentBlockTypes
21
+ );
43
22
  },
44
- [postContentBlockTypes]
23
+ [postType, postContentBlockTypes]
45
24
  );
46
25
  const { enableComplementaryArea } = useDispatch(interfaceStore);
47
- if (renderingMode === "post-only" && postType !== TEMPLATE_POST_TYPE || clientIds.length === 0) {
26
+ if (clientIds.length === 0) {
48
27
  return null;
49
28
  }
50
29
  return /* @__PURE__ */ jsx(PanelBody, { title: __("Content"), children: /* @__PURE__ */ jsx(
@@ -57,6 +36,21 @@ function TemplateContentPanel() {
57
36
  }
58
37
  ) });
59
38
  }
39
+ function TemplateContentPanel() {
40
+ const { postType, renderingMode } = useSelect((select) => {
41
+ const { getCurrentPostType, getRenderingMode } = unlock(
42
+ select(editorStore)
43
+ );
44
+ return {
45
+ postType: getCurrentPostType(),
46
+ renderingMode: getRenderingMode()
47
+ };
48
+ }, []);
49
+ if (renderingMode === "post-only" && postType !== TEMPLATE_POST_TYPE) {
50
+ return null;
51
+ }
52
+ return /* @__PURE__ */ jsx(TemplateContentPanelInner, { postType });
53
+ }
60
54
  export {
61
55
  TemplateContentPanel as default
62
56
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/template-content-panel/index.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\nimport { PanelBody } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { applyFilters } from '@wordpress/hooks';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport { TEMPLATE_POST_TYPE } from '../../store/constants';\nimport { store as editorStore } from '../../store';\n\nconst { BlockQuickNavigation } = unlock( blockEditorPrivateApis );\n\nconst POST_CONTENT_BLOCK_TYPES = [\n\t'core/post-title',\n\t'core/post-featured-image',\n\t'core/post-content',\n];\n\nconst TEMPLATE_PART_BLOCK = 'core/template-part';\n\nexport default function TemplateContentPanel() {\n\tconst postContentBlockTypes = useMemo(\n\t\t() =>\n\t\t\tapplyFilters(\n\t\t\t\t'editor.postContentBlockTypes',\n\t\t\t\tPOST_CONTENT_BLOCK_TYPES\n\t\t\t),\n\t\t[]\n\t);\n\n\tconst { clientIds, postType, renderingMode } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetCurrentPostType,\n\t\t\t\tgetPostBlocksByName,\n\t\t\t\tgetRenderingMode,\n\t\t\t} = unlock( select( editorStore ) );\n\t\t\tconst _postType = getCurrentPostType();\n\t\t\treturn {\n\t\t\t\tpostType: _postType,\n\t\t\t\tclientIds: getPostBlocksByName(\n\t\t\t\t\tTEMPLATE_POST_TYPE === _postType\n\t\t\t\t\t\t? TEMPLATE_PART_BLOCK\n\t\t\t\t\t\t: postContentBlockTypes\n\t\t\t\t),\n\t\t\t\trenderingMode: getRenderingMode(),\n\t\t\t};\n\t\t},\n\t\t[ postContentBlockTypes ]\n\t);\n\n\tconst { enableComplementaryArea } = useDispatch( interfaceStore );\n\n\tif (\n\t\t( renderingMode === 'post-only' && postType !== TEMPLATE_POST_TYPE ) ||\n\t\tclientIds.length === 0\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<PanelBody title={ __( 'Content' ) }>\n\t\t\t<BlockQuickNavigation\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\tonSelect={ () => {\n\t\t\t\t\tenableComplementaryArea( 'core', 'edit-post/document' );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</PanelBody>\n\t);\n}\n"],
5
- "mappings": ";AAGA,SAAS,WAAW,mBAAmB;AACvC,SAAS,eAAe,8BAA8B;AACtD,SAAS,iBAAiB;AAC1B,SAAS,UAAU;AACnB,SAAS,SAAS,sBAAsB;AACxC,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AAKxB,SAAS,cAAc;AACvB,SAAS,0BAA0B;AACnC,SAAS,SAAS,mBAAmB;AAsDlC;AApDH,IAAM,EAAE,qBAAqB,IAAI,OAAQ,sBAAuB;AAEhE,IAAM,2BAA2B;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACD;AAEA,IAAM,sBAAsB;AAEb,SAAR,uBAAwC;AAC9C,QAAM,wBAAwB;AAAA,IAC7B,MACC;AAAA,MACC;AAAA,MACA;AAAA,IACD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,QAAM,EAAE,WAAW,UAAU,cAAc,IAAI;AAAA,IAC9C,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,OAAQ,OAAQ,WAAY,CAAE;AAClC,YAAM,YAAY,mBAAmB;AACrC,aAAO;AAAA,QACN,UAAU;AAAA,QACV,WAAW;AAAA,UACV,uBAAuB,YACpB,sBACA;AAAA,QACJ;AAAA,QACA,eAAe,iBAAiB;AAAA,MACjC;AAAA,IACD;AAAA,IACA,CAAE,qBAAsB;AAAA,EACzB;AAEA,QAAM,EAAE,wBAAwB,IAAI,YAAa,cAAe;AAEhE,MACG,kBAAkB,eAAe,aAAa,sBAChD,UAAU,WAAW,GACpB;AACD,WAAO;AAAA,EACR;AAEA,SACC,oBAAC,aAAU,OAAQ,GAAI,SAAU,GAChC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,UAAW,MAAM;AAChB,gCAAyB,QAAQ,oBAAqB;AAAA,MACvD;AAAA;AAAA,EACD,GACD;AAEF;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\nimport { PanelBody } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { store as interfaceStore } from '@wordpress/interface';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport { TEMPLATE_POST_TYPE } from '../../store/constants';\nimport { store as editorStore } from '../../store';\nimport usePostContentBlockTypes from '../provider/use-post-content-block-types';\n\nconst { BlockQuickNavigation } = unlock( blockEditorPrivateApis );\n\nconst TEMPLATE_PART_BLOCK = 'core/template-part';\n\nfunction TemplateContentPanelInner( { postType } ) {\n\tconst postContentBlockTypes = usePostContentBlockTypes();\n\n\tconst clientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getPostBlocksByName } = unlock( select( editorStore ) );\n\t\t\treturn getPostBlocksByName(\n\t\t\t\tTEMPLATE_POST_TYPE === postType\n\t\t\t\t\t? TEMPLATE_PART_BLOCK\n\t\t\t\t\t: postContentBlockTypes\n\t\t\t);\n\t\t},\n\t\t[ postType, postContentBlockTypes ]\n\t);\n\n\tconst { enableComplementaryArea } = useDispatch( interfaceStore );\n\n\tif ( clientIds.length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<PanelBody title={ __( 'Content' ) }>\n\t\t\t<BlockQuickNavigation\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\tonSelect={ () => {\n\t\t\t\t\tenableComplementaryArea( 'core', 'edit-post/document' );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</PanelBody>\n\t);\n}\n\nexport default function TemplateContentPanel() {\n\tconst { postType, renderingMode } = useSelect( ( select ) => {\n\t\tconst { getCurrentPostType, getRenderingMode } = unlock(\n\t\t\tselect( editorStore )\n\t\t);\n\t\treturn {\n\t\t\tpostType: getCurrentPostType(),\n\t\t\trenderingMode: getRenderingMode(),\n\t\t};\n\t}, [] );\n\n\tif ( renderingMode === 'post-only' && postType !== TEMPLATE_POST_TYPE ) {\n\t\treturn null;\n\t}\n\n\treturn <TemplateContentPanelInner postType={ postType } />;\n}\n"],
5
+ "mappings": ";AAGA,SAAS,WAAW,mBAAmB;AACvC,SAAS,eAAe,8BAA8B;AACtD,SAAS,iBAAiB;AAC1B,SAAS,UAAU;AACnB,SAAS,SAAS,sBAAsB;AAKxC,SAAS,cAAc;AACvB,SAAS,0BAA0B;AACnC,SAAS,SAAS,mBAAmB;AACrC,OAAO,8BAA8B;AA6BlC;AA3BH,IAAM,EAAE,qBAAqB,IAAI,OAAQ,sBAAuB;AAEhE,IAAM,sBAAsB;AAE5B,SAAS,0BAA2B,EAAE,SAAS,GAAI;AAClD,QAAM,wBAAwB,yBAAyB;AAEvD,QAAM,YAAY;AAAA,IACjB,CAAE,WAAY;AACb,YAAM,EAAE,oBAAoB,IAAI,OAAQ,OAAQ,WAAY,CAAE;AAC9D,aAAO;AAAA,QACN,uBAAuB,WACpB,sBACA;AAAA,MACJ;AAAA,IACD;AAAA,IACA,CAAE,UAAU,qBAAsB;AAAA,EACnC;AAEA,QAAM,EAAE,wBAAwB,IAAI,YAAa,cAAe;AAEhE,MAAK,UAAU,WAAW,GAAI;AAC7B,WAAO;AAAA,EACR;AAEA,SACC,oBAAC,aAAU,OAAQ,GAAI,SAAU,GAChC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,UAAW,MAAM;AAChB,gCAAyB,QAAQ,oBAAqB;AAAA,MACvD;AAAA;AAAA,EACD,GACD;AAEF;AAEe,SAAR,uBAAwC;AAC9C,QAAM,EAAE,UAAU,cAAc,IAAI,UAAW,CAAE,WAAY;AAC5D,UAAM,EAAE,oBAAoB,iBAAiB,IAAI;AAAA,MAChD,OAAQ,WAAY;AAAA,IACrB;AACA,WAAO;AAAA,MACN,UAAU,mBAAmB;AAAA,MAC7B,eAAe,iBAAiB;AAAA,IACjC;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,MAAK,kBAAkB,eAAe,aAAa,oBAAqB;AACvE,WAAO;AAAA,EACR;AAEA,SAAO,oBAAC,6BAA0B,UAAsB;AACzD;",
6
6
  "names": []
7
7
  }
@@ -31,7 +31,7 @@ import {
31
31
  import { useZoomOutModeExit } from "./use-zoom-out-mode-exit.mjs";
32
32
  import { usePaddingAppender } from "./use-padding-appender.mjs";
33
33
  import { useEditContentOnlySectionExit } from "./use-edit-content-only-section-exit.mjs";
34
- import { SyncConnectionModal } from "../sync-connection-modal/index.mjs";
34
+ import { SyncConnectionErrorModal } from "../sync-connection-error-modal/index.mjs";
35
35
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
36
36
  var {
37
37
  LayoutStyle,
@@ -304,7 +304,7 @@ function VisualEditor({
304
304
  }
305
305
  ),
306
306
  children: [
307
- /* @__PURE__ */ jsx(SyncConnectionModal, {}),
307
+ /* @__PURE__ */ jsx(SyncConnectionErrorModal, {}),
308
308
  /* @__PURE__ */ jsx(ResizableEditor, { enableResizing, height: "100%", children: /* @__PURE__ */ jsxs(
309
309
  BlockCanvas,
310
310
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/visual-editor/index.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tBlockList,\n\tstore as blockEditorStore,\n\t__unstableUseTypewriter as useTypewriter,\n\t__unstableUseTypingObserver as useTypingObserver,\n\tuseSettings,\n\tRecursionProvider,\n\tprivateApis as blockEditorPrivateApis,\n\t__experimentalUseResizeCanvas as useResizeCanvas,\n} from '@wordpress/block-editor';\nimport { useEffect, useRef, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { parse } from '@wordpress/blocks';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useMergeRefs, useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport PostTitle from '../post-title';\nimport { store as editorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport EditTemplateBlocksNotification from './edit-template-blocks-notification';\nimport ResizableEditor from '../resizable-editor';\nimport useSelectNearestEditableBlock from './use-select-nearest-editable-block';\nimport {\n\tNAVIGATION_POST_TYPE,\n\tPATTERN_POST_TYPE,\n\tTEMPLATE_PART_POST_TYPE,\n\tTEMPLATE_POST_TYPE,\n\tDESIGN_POST_TYPES,\n} from '../../store/constants';\nimport { useZoomOutModeExit } from './use-zoom-out-mode-exit';\nimport { usePaddingAppender } from './use-padding-appender';\nimport { useEditContentOnlySectionExit } from './use-edit-content-only-section-exit';\nimport { SyncConnectionModal } from '../sync-connection-modal';\n\nconst {\n\tLayoutStyle,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\tExperimentalBlockCanvas: BlockCanvas,\n\tuseFlashEditableBlocks,\n} = unlock( blockEditorPrivateApis );\n\n/**\n * These post types have a special editor where they don't allow you to fill the title\n * and they don't apply the layout styles.\n */\n\n/**\n * Given an array of nested blocks, find the first Post Content\n * block inside it, recursing through any nesting levels,\n * and return its attributes.\n *\n * @param {Array} blocks A list of blocks.\n *\n * @return {Object | undefined} The Post Content block.\n */\nfunction getPostContentAttributes( blocks ) {\n\tfor ( let i = 0; i < blocks.length; i++ ) {\n\t\tif ( blocks[ i ].name === 'core/post-content' ) {\n\t\t\treturn blocks[ i ].attributes;\n\t\t}\n\t\tif ( blocks[ i ].innerBlocks.length ) {\n\t\t\tconst nestedPostContent = getPostContentAttributes(\n\t\t\t\tblocks[ i ].innerBlocks\n\t\t\t);\n\n\t\t\tif ( nestedPostContent ) {\n\t\t\t\treturn nestedPostContent;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction checkForPostContentAtRootLevel( blocks ) {\n\tfor ( let i = 0; i < blocks.length; i++ ) {\n\t\tif ( blocks[ i ].name === 'core/post-content' ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction VisualEditor( {\n\t// Ideally as we unify post and site editors, we won't need these props.\n\tautoFocus,\n\tdisableIframe = false,\n\tiframeProps,\n\tcontentRef,\n\tclassName,\n} ) {\n\tconst isMobileViewport = useViewportMatch( 'small', '<' );\n\tconst {\n\t\trenderingMode,\n\t\tpostContentAttributes,\n\t\teditedPostTemplate = {},\n\t\twrapperBlockName,\n\t\twrapperUniqueId,\n\t\tdeviceType,\n\t\tisFocusedEntity,\n\t\tisDesignPostType,\n\t\tpostType,\n\t\tisPreview,\n\t\tstyles,\n\t\tcanvasMinHeight,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetCurrentPostId,\n\t\t\tgetCurrentPostType,\n\t\t\tgetCurrentTemplateId,\n\t\t\tgetEditorSettings,\n\t\t\tgetRenderingMode,\n\t\t\tgetDeviceType,\n\t\t\tgetCanvasMinHeight,\n\t\t} = unlock( select( editorStore ) );\n\t\tconst { getPostType, getEditedEntityRecord } = select( coreStore );\n\t\tconst postTypeSlug = getCurrentPostType();\n\t\tconst _renderingMode = getRenderingMode();\n\t\tlet _wrapperBlockName;\n\n\t\tif ( postTypeSlug === PATTERN_POST_TYPE ) {\n\t\t\t_wrapperBlockName = 'core/block';\n\t\t} else if ( _renderingMode === 'post-only' ) {\n\t\t\t_wrapperBlockName = 'core/post-content';\n\t\t}\n\n\t\tconst editorSettings = getEditorSettings();\n\t\tconst supportsTemplateMode = editorSettings.supportsTemplateMode;\n\t\tconst postTypeObject = getPostType( postTypeSlug );\n\t\tconst currentTemplateId = getCurrentTemplateId();\n\t\tconst template = currentTemplateId\n\t\t\t? getEditedEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\tTEMPLATE_POST_TYPE,\n\t\t\t\t\tcurrentTemplateId\n\t\t\t )\n\t\t\t: undefined;\n\n\t\treturn {\n\t\t\trenderingMode: _renderingMode,\n\t\t\tpostContentAttributes: editorSettings.postContentAttributes,\n\t\t\tisDesignPostType: DESIGN_POST_TYPES.includes( postTypeSlug ),\n\t\t\t// Post template fetch returns a 404 on classic themes, which\n\t\t\t// messes with e2e tests, so check it's a block theme first.\n\t\t\teditedPostTemplate:\n\t\t\t\tpostTypeObject?.viewable && supportsTemplateMode\n\t\t\t\t\t? template\n\t\t\t\t\t: undefined,\n\t\t\twrapperBlockName: _wrapperBlockName,\n\t\t\twrapperUniqueId: getCurrentPostId(),\n\t\t\tdeviceType: getDeviceType(),\n\t\t\tisFocusedEntity: !! editorSettings.onNavigateToPreviousEntityRecord,\n\t\t\tpostType: postTypeSlug,\n\t\t\tisPreview: editorSettings.isPreviewMode,\n\t\t\tstyles: editorSettings.styles,\n\t\t\tcanvasMinHeight: getCanvasMinHeight(),\n\t\t};\n\t}, [] );\n\tconst { isCleanNewPost } = useSelect( editorStore );\n\tconst {\n\t\thasRootPaddingAwareAlignments,\n\t\tthemeHasDisabledLayoutStyles,\n\t\tthemeSupportsLayout,\n\t\tisZoomedOut,\n\t} = useSelect( ( select ) => {\n\t\tconst { getSettings, isZoomOut: _isZoomOut } = unlock(\n\t\t\tselect( blockEditorStore )\n\t\t);\n\n\t\tconst _settings = getSettings();\n\t\treturn {\n\t\t\tthemeHasDisabledLayoutStyles: _settings.disableLayoutStyles,\n\t\t\tthemeSupportsLayout: _settings.supportsLayout,\n\t\t\thasRootPaddingAwareAlignments:\n\t\t\t\t_settings.__experimentalFeatures?.useRootPaddingAwareAlignments,\n\t\t\tisZoomedOut: _isZoomOut(),\n\t\t};\n\t}, [] );\n\n\tconst localRef = useRef();\n\tconst deviceStyles = useResizeCanvas( deviceType );\n\tconst [ globalLayoutSettings ] = useSettings( 'layout' );\n\n\t// fallbackLayout is used if there is no Post Content,\n\t// and for Post Title.\n\tconst fallbackLayout = useMemo( () => {\n\t\tif ( renderingMode !== 'post-only' || isDesignPostType ) {\n\t\t\treturn { type: 'default' };\n\t\t}\n\n\t\tif ( themeSupportsLayout ) {\n\t\t\t// We need to ensure support for wide and full alignments,\n\t\t\t// so we add the constrained type.\n\t\t\treturn { ...globalLayoutSettings, type: 'constrained' };\n\t\t}\n\t\t// Set default layout for classic themes so all alignments are supported.\n\t\treturn { type: 'default' };\n\t}, [\n\t\trenderingMode,\n\t\tthemeSupportsLayout,\n\t\tglobalLayoutSettings,\n\t\tisDesignPostType,\n\t] );\n\n\tconst newestPostContentAttributes = useMemo( () => {\n\t\tif (\n\t\t\t! editedPostTemplate?.content &&\n\t\t\t! editedPostTemplate?.blocks &&\n\t\t\tpostContentAttributes\n\t\t) {\n\t\t\treturn postContentAttributes;\n\t\t}\n\t\t// When in template editing mode, we can access the blocks directly.\n\t\tif ( editedPostTemplate?.blocks ) {\n\t\t\treturn getPostContentAttributes( editedPostTemplate?.blocks );\n\t\t}\n\t\t// If there are no blocks, we have to parse the content string.\n\t\t// Best double-check it's a string otherwise the parse function gets unhappy.\n\t\tconst parseableContent =\n\t\t\ttypeof editedPostTemplate?.content === 'string'\n\t\t\t\t? editedPostTemplate?.content\n\t\t\t\t: '';\n\n\t\treturn getPostContentAttributes( parse( parseableContent ) ) || {};\n\t}, [\n\t\teditedPostTemplate?.content,\n\t\teditedPostTemplate?.blocks,\n\t\tpostContentAttributes,\n\t] );\n\n\tconst hasPostContentAtRootLevel = useMemo( () => {\n\t\tif ( ! editedPostTemplate?.content && ! editedPostTemplate?.blocks ) {\n\t\t\treturn false;\n\t\t}\n\t\t// When in template editing mode, we can access the blocks directly.\n\t\tif ( editedPostTemplate?.blocks ) {\n\t\t\treturn checkForPostContentAtRootLevel( editedPostTemplate?.blocks );\n\t\t}\n\t\t// If there are no blocks, we have to parse the content string.\n\t\t// Best double-check it's a string otherwise the parse function gets unhappy.\n\t\tconst parseableContent =\n\t\t\ttypeof editedPostTemplate?.content === 'string'\n\t\t\t\t? editedPostTemplate?.content\n\t\t\t\t: '';\n\n\t\treturn (\n\t\t\tcheckForPostContentAtRootLevel( parse( parseableContent ) ) || false\n\t\t);\n\t}, [ editedPostTemplate?.content, editedPostTemplate?.blocks ] );\n\n\tconst { layout = {}, align = '' } = newestPostContentAttributes || {};\n\n\tconst postContentLayoutClasses = useLayoutClasses(\n\t\tnewestPostContentAttributes,\n\t\t'core/post-content'\n\t);\n\n\tconst blockListLayoutClass = clsx(\n\t\t{\n\t\t\t'is-layout-flow': ! themeSupportsLayout,\n\t\t},\n\t\tthemeSupportsLayout && postContentLayoutClasses,\n\t\talign && `align${ align }`\n\t);\n\n\tconst postContentLayoutStyles = useLayoutStyles(\n\t\tnewestPostContentAttributes,\n\t\t'core/post-content',\n\t\t'.block-editor-block-list__layout.is-root-container'\n\t);\n\n\t// Update type for blocks using legacy layouts.\n\tconst postContentLayout = useMemo( () => {\n\t\treturn layout &&\n\t\t\t( layout?.type === 'constrained' ||\n\t\t\t\tlayout?.inherit ||\n\t\t\t\tlayout?.contentSize ||\n\t\t\t\tlayout?.wideSize )\n\t\t\t? { ...globalLayoutSettings, ...layout, type: 'constrained' }\n\t\t\t: { ...globalLayoutSettings, ...layout, type: 'default' };\n\t}, [\n\t\tlayout?.type,\n\t\tlayout?.inherit,\n\t\tlayout?.contentSize,\n\t\tlayout?.wideSize,\n\t\tglobalLayoutSettings,\n\t] );\n\n\t// If there is a Post Content block we use its layout for the block list;\n\t// if not, this must be a classic theme, in which case we use the fallback layout.\n\tconst blockListLayout = postContentAttributes\n\t\t? postContentLayout\n\t\t: fallbackLayout;\n\n\tconst postEditorLayout =\n\t\tblockListLayout?.type === 'default' && ! hasPostContentAtRootLevel\n\t\t\t? fallbackLayout\n\t\t\t: blockListLayout;\n\tconst observeTypingRef = useTypingObserver();\n\tconst titleRef = useRef();\n\tuseEffect( () => {\n\t\tif ( ! autoFocus || ! isCleanNewPost() ) {\n\t\t\treturn;\n\t\t}\n\t\ttitleRef?.current?.focus();\n\t}, [ autoFocus, isCleanNewPost ] );\n\n\t// Add some styles for alignwide/alignfull Post Content and its children.\n\tconst alignCSS = `.is-root-container.alignwide { max-width: var(--wp--style--global--wide-size); margin-left: auto; margin-right: auto;}\n\t\t.is-root-container.alignwide:where(.is-layout-flow) > :not(.alignleft):not(.alignright) { max-width: var(--wp--style--global--wide-size);}\n\t\t.is-root-container.alignfull { max-width: none; margin-left: auto; margin-right: auto;}\n\t\t.is-root-container.alignfull:where(.is-layout-flow) > :not(.alignleft):not(.alignright) { max-width: none;}`;\n\n\tconst enableResizing =\n\t\t[\n\t\t\tNAVIGATION_POST_TYPE,\n\t\t\tTEMPLATE_PART_POST_TYPE,\n\t\t\tPATTERN_POST_TYPE,\n\t\t].includes( postType ) &&\n\t\t// Disable in previews / view mode.\n\t\t! isPreview &&\n\t\t// Disable resizing in mobile viewport.\n\t\t! isMobileViewport &&\n\t\t// Disable resizing in zoomed-out mode.\n\t\t! isZoomedOut;\n\n\tconst isNavigationPreview = postType === NAVIGATION_POST_TYPE && isPreview;\n\n\t// Calculate the minimum height including scroll offset to fit all notes.\n\tconst calculatedMinHeight = useMemo( () => {\n\t\tif ( ! localRef.current ) {\n\t\t\treturn canvasMinHeight;\n\t\t}\n\n\t\tconst { ownerDocument } = localRef.current;\n\t\tconst scrollTop =\n\t\t\townerDocument.documentElement.scrollTop ||\n\t\t\townerDocument.body.scrollTop;\n\n\t\treturn canvasMinHeight + scrollTop;\n\t}, [ canvasMinHeight ] );\n\n\tconst [ paddingAppenderRef, paddingStyle ] = usePaddingAppender(\n\t\t! isPreview && renderingMode === 'post-only' && ! isDesignPostType\n\t);\n\n\tconst centerContentCSS = `display:flex;align-items:center;justify-content:center;`;\n\n\tconst iframeStyles = useMemo( () => {\n\t\treturn [\n\t\t\t...( styles ?? [] ),\n\t\t\t{\n\t\t\t\t// Ensures margins of children are contained so that the body background paints behind them.\n\t\t\t\t// Otherwise, the background of html (when zoomed out) would show there and appear broken. It's\n\t\t\t\t// important mostly for post-only views yet conceivably an issue in templated views too.\n\t\t\t\tcss: `:where(.block-editor-iframe__body){display:flow-root;${\n\t\t\t\t\tcalculatedMinHeight\n\t\t\t\t\t\t? `min-height:${ calculatedMinHeight }px;`\n\t\t\t\t\t\t: ''\n\t\t\t\t}}.is-root-container{display:flow-root;${\n\t\t\t\t\t// Some themes will have `min-height: 100vh` for the root container,\n\t\t\t\t\t// which isn't a requirement in auto resize mode.\n\t\t\t\t\tenableResizing || isNavigationPreview\n\t\t\t\t\t\t? 'min-height:0!important;'\n\t\t\t\t\t\t: ''\n\t\t\t\t}}\n\t\t\t\t${ paddingStyle ? paddingStyle : '' }\n\t\t\t\t${\n\t\t\t\t\tenableResizing\n\t\t\t\t\t\t? `.block-editor-iframe__html{background:var(--wp-editor-canvas-background);min-height:100vh;${ centerContentCSS }}.block-editor-iframe__body{width:100%;}`\n\t\t\t\t\t\t: ''\n\t\t\t\t}${\n\t\t\t\t\tisNavigationPreview\n\t\t\t\t\t\t? `.block-editor-iframe__body{${ centerContentCSS }padding:var(--wp--style--block-gap,2em);}`\n\t\t\t\t\t\t: ''\n\t\t\t\t}`,\n\t\t\t\t// The CSS for enableResizing centers the body content vertically when resizing is enabled and applies a background\n\t\t\t\t// color to the iframe HTML element to match the background color of the editor canvas.\n\t\t\t\t// The CSS for isNavigationPreview centers the body content vertically and horizontally when the navigation is in preview mode.\n\t\t\t},\n\t\t];\n\t}, [\n\t\tstyles,\n\t\tenableResizing,\n\t\tisNavigationPreview,\n\t\tcalculatedMinHeight,\n\t\tpaddingStyle,\n\t] );\n\n\tconst typewriterRef = useTypewriter();\n\tcontentRef = useMergeRefs( [\n\t\tlocalRef,\n\t\tcontentRef,\n\t\trenderingMode === 'post-only' ? typewriterRef : null,\n\t\tuseFlashEditableBlocks( {\n\t\t\tisEnabled: renderingMode === 'template-locked',\n\t\t} ),\n\t\tuseSelectNearestEditableBlock( {\n\t\t\tisEnabled: renderingMode === 'template-locked',\n\t\t} ),\n\t\tuseZoomOutModeExit(),\n\t\tpaddingAppenderRef,\n\t\tuseEditContentOnlySectionExit(),\n\t] );\n\n\treturn (\n\t\t<div\n\t\t\tclassName={ clsx(\n\t\t\t\t'editor-visual-editor',\n\t\t\t\t// this class is here for backward compatibility reasons.\n\t\t\t\t'edit-post-visual-editor',\n\t\t\t\tclassName,\n\t\t\t\t{\n\t\t\t\t\t'has-padding': isFocusedEntity || enableResizing,\n\t\t\t\t\t'is-resizable': enableResizing,\n\t\t\t\t\t'is-iframed': ! disableIframe,\n\t\t\t\t}\n\t\t\t) }\n\t\t>\n\t\t\t<SyncConnectionModal />\n\t\t\t<ResizableEditor enableResizing={ enableResizing } height=\"100%\">\n\t\t\t\t<BlockCanvas\n\t\t\t\t\tshouldIframe={ ! disableIframe }\n\t\t\t\t\tcontentRef={ contentRef }\n\t\t\t\t\tstyles={ iframeStyles }\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\tiframeProps={ {\n\t\t\t\t\t\t...iframeProps,\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t...iframeProps?.style,\n\t\t\t\t\t\t\t...deviceStyles,\n\t\t\t\t\t\t},\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ themeSupportsLayout &&\n\t\t\t\t\t\t! themeHasDisabledLayoutStyles &&\n\t\t\t\t\t\trenderingMode === 'post-only' &&\n\t\t\t\t\t\t! isDesignPostType && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<LayoutStyle\n\t\t\t\t\t\t\t\t\tselector=\".editor-visual-editor__post-title-wrapper\"\n\t\t\t\t\t\t\t\t\tlayout={ fallbackLayout }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<LayoutStyle\n\t\t\t\t\t\t\t\t\tselector=\".block-editor-block-list__layout.is-root-container\"\n\t\t\t\t\t\t\t\t\tlayout={ postEditorLayout }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ align && <LayoutStyle css={ alignCSS } /> }\n\t\t\t\t\t\t\t\t{ postContentLayoutStyles && (\n\t\t\t\t\t\t\t\t\t<LayoutStyle\n\t\t\t\t\t\t\t\t\t\tlayout={ postContentLayout }\n\t\t\t\t\t\t\t\t\t\tcss={ postContentLayoutStyles }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) }\n\t\t\t\t\t{ renderingMode === 'post-only' && ! isDesignPostType && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t'editor-visual-editor__post-title-wrapper',\n\t\t\t\t\t\t\t\t// The following class is only here for backward compatibility\n\t\t\t\t\t\t\t\t// some themes might be using it to style the post title.\n\t\t\t\t\t\t\t\t'edit-post-visual-editor__post-title-wrapper',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t'has-global-padding':\n\t\t\t\t\t\t\t\t\t\thasRootPaddingAwareAlignments,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tcontentEditable={ false }\n\t\t\t\t\t\t\tref={ observeTypingRef }\n\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\t// This is using inline styles\n\t\t\t\t\t\t\t\t// so it's applied for both iframed and non iframed editors.\n\t\t\t\t\t\t\t\tmarginTop: '4rem',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<PostTitle ref={ titleRef } />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t\t<RecursionProvider\n\t\t\t\t\t\tblockName={ wrapperBlockName }\n\t\t\t\t\t\tuniqueId={ wrapperUniqueId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<BlockList\n\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t'is-' + deviceType.toLowerCase() + '-preview',\n\t\t\t\t\t\t\t\trenderingMode !== 'post-only' ||\n\t\t\t\t\t\t\t\t\tisDesignPostType\n\t\t\t\t\t\t\t\t\t? 'wp-site-blocks'\n\t\t\t\t\t\t\t\t\t: `${ blockListLayoutClass } wp-block-post-content`, // Ensure root level blocks receive default/flow blockGap styling rules.\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t'has-global-padding':\n\t\t\t\t\t\t\t\t\t\trenderingMode === 'post-only' &&\n\t\t\t\t\t\t\t\t\t\t! isDesignPostType &&\n\t\t\t\t\t\t\t\t\t\thasRootPaddingAwareAlignments,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tlayout={ blockListLayout }\n\t\t\t\t\t\t\tdropZoneElement={\n\t\t\t\t\t\t\t\t// When iframed, pass in the html element of the iframe to\n\t\t\t\t\t\t\t\t// ensure the drop zone extends to the edges of the iframe.\n\t\t\t\t\t\t\t\tdisableIframe\n\t\t\t\t\t\t\t\t\t? localRef.current\n\t\t\t\t\t\t\t\t\t: localRef.current?.parentNode\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__unstableDisableDropZone={\n\t\t\t\t\t\t\t\t// In template preview mode, disable drop zones at the root of the template.\n\t\t\t\t\t\t\t\trenderingMode === 'template-locked'\n\t\t\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ renderingMode === 'template-locked' && (\n\t\t\t\t\t\t\t<EditTemplateBlocksNotification\n\t\t\t\t\t\t\t\tcontentRef={ localRef }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</RecursionProvider>\n\t\t\t\t</BlockCanvas>\n\t\t\t</ResizableEditor>\n\t\t</div>\n\t);\n}\n\nexport default VisualEditor;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tBlockList,\n\tstore as blockEditorStore,\n\t__unstableUseTypewriter as useTypewriter,\n\t__unstableUseTypingObserver as useTypingObserver,\n\tuseSettings,\n\tRecursionProvider,\n\tprivateApis as blockEditorPrivateApis,\n\t__experimentalUseResizeCanvas as useResizeCanvas,\n} from '@wordpress/block-editor';\nimport { useEffect, useRef, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { parse } from '@wordpress/blocks';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useMergeRefs, useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport PostTitle from '../post-title';\nimport { store as editorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport EditTemplateBlocksNotification from './edit-template-blocks-notification';\nimport ResizableEditor from '../resizable-editor';\nimport useSelectNearestEditableBlock from './use-select-nearest-editable-block';\nimport {\n\tNAVIGATION_POST_TYPE,\n\tPATTERN_POST_TYPE,\n\tTEMPLATE_PART_POST_TYPE,\n\tTEMPLATE_POST_TYPE,\n\tDESIGN_POST_TYPES,\n} from '../../store/constants';\nimport { useZoomOutModeExit } from './use-zoom-out-mode-exit';\nimport { usePaddingAppender } from './use-padding-appender';\nimport { useEditContentOnlySectionExit } from './use-edit-content-only-section-exit';\nimport { SyncConnectionErrorModal } from '../sync-connection-error-modal';\n\nconst {\n\tLayoutStyle,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\tExperimentalBlockCanvas: BlockCanvas,\n\tuseFlashEditableBlocks,\n} = unlock( blockEditorPrivateApis );\n\n/**\n * These post types have a special editor where they don't allow you to fill the title\n * and they don't apply the layout styles.\n */\n\n/**\n * Given an array of nested blocks, find the first Post Content\n * block inside it, recursing through any nesting levels,\n * and return its attributes.\n *\n * @param {Array} blocks A list of blocks.\n *\n * @return {Object | undefined} The Post Content block.\n */\nfunction getPostContentAttributes( blocks ) {\n\tfor ( let i = 0; i < blocks.length; i++ ) {\n\t\tif ( blocks[ i ].name === 'core/post-content' ) {\n\t\t\treturn blocks[ i ].attributes;\n\t\t}\n\t\tif ( blocks[ i ].innerBlocks.length ) {\n\t\t\tconst nestedPostContent = getPostContentAttributes(\n\t\t\t\tblocks[ i ].innerBlocks\n\t\t\t);\n\n\t\t\tif ( nestedPostContent ) {\n\t\t\t\treturn nestedPostContent;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction checkForPostContentAtRootLevel( blocks ) {\n\tfor ( let i = 0; i < blocks.length; i++ ) {\n\t\tif ( blocks[ i ].name === 'core/post-content' ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction VisualEditor( {\n\t// Ideally as we unify post and site editors, we won't need these props.\n\tautoFocus,\n\tdisableIframe = false,\n\tiframeProps,\n\tcontentRef,\n\tclassName,\n} ) {\n\tconst isMobileViewport = useViewportMatch( 'small', '<' );\n\tconst {\n\t\trenderingMode,\n\t\tpostContentAttributes,\n\t\teditedPostTemplate = {},\n\t\twrapperBlockName,\n\t\twrapperUniqueId,\n\t\tdeviceType,\n\t\tisFocusedEntity,\n\t\tisDesignPostType,\n\t\tpostType,\n\t\tisPreview,\n\t\tstyles,\n\t\tcanvasMinHeight,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetCurrentPostId,\n\t\t\tgetCurrentPostType,\n\t\t\tgetCurrentTemplateId,\n\t\t\tgetEditorSettings,\n\t\t\tgetRenderingMode,\n\t\t\tgetDeviceType,\n\t\t\tgetCanvasMinHeight,\n\t\t} = unlock( select( editorStore ) );\n\t\tconst { getPostType, getEditedEntityRecord } = select( coreStore );\n\t\tconst postTypeSlug = getCurrentPostType();\n\t\tconst _renderingMode = getRenderingMode();\n\t\tlet _wrapperBlockName;\n\n\t\tif ( postTypeSlug === PATTERN_POST_TYPE ) {\n\t\t\t_wrapperBlockName = 'core/block';\n\t\t} else if ( _renderingMode === 'post-only' ) {\n\t\t\t_wrapperBlockName = 'core/post-content';\n\t\t}\n\n\t\tconst editorSettings = getEditorSettings();\n\t\tconst supportsTemplateMode = editorSettings.supportsTemplateMode;\n\t\tconst postTypeObject = getPostType( postTypeSlug );\n\t\tconst currentTemplateId = getCurrentTemplateId();\n\t\tconst template = currentTemplateId\n\t\t\t? getEditedEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\tTEMPLATE_POST_TYPE,\n\t\t\t\t\tcurrentTemplateId\n\t\t\t )\n\t\t\t: undefined;\n\n\t\treturn {\n\t\t\trenderingMode: _renderingMode,\n\t\t\tpostContentAttributes: editorSettings.postContentAttributes,\n\t\t\tisDesignPostType: DESIGN_POST_TYPES.includes( postTypeSlug ),\n\t\t\t// Post template fetch returns a 404 on classic themes, which\n\t\t\t// messes with e2e tests, so check it's a block theme first.\n\t\t\teditedPostTemplate:\n\t\t\t\tpostTypeObject?.viewable && supportsTemplateMode\n\t\t\t\t\t? template\n\t\t\t\t\t: undefined,\n\t\t\twrapperBlockName: _wrapperBlockName,\n\t\t\twrapperUniqueId: getCurrentPostId(),\n\t\t\tdeviceType: getDeviceType(),\n\t\t\tisFocusedEntity: !! editorSettings.onNavigateToPreviousEntityRecord,\n\t\t\tpostType: postTypeSlug,\n\t\t\tisPreview: editorSettings.isPreviewMode,\n\t\t\tstyles: editorSettings.styles,\n\t\t\tcanvasMinHeight: getCanvasMinHeight(),\n\t\t};\n\t}, [] );\n\tconst { isCleanNewPost } = useSelect( editorStore );\n\tconst {\n\t\thasRootPaddingAwareAlignments,\n\t\tthemeHasDisabledLayoutStyles,\n\t\tthemeSupportsLayout,\n\t\tisZoomedOut,\n\t} = useSelect( ( select ) => {\n\t\tconst { getSettings, isZoomOut: _isZoomOut } = unlock(\n\t\t\tselect( blockEditorStore )\n\t\t);\n\n\t\tconst _settings = getSettings();\n\t\treturn {\n\t\t\tthemeHasDisabledLayoutStyles: _settings.disableLayoutStyles,\n\t\t\tthemeSupportsLayout: _settings.supportsLayout,\n\t\t\thasRootPaddingAwareAlignments:\n\t\t\t\t_settings.__experimentalFeatures?.useRootPaddingAwareAlignments,\n\t\t\tisZoomedOut: _isZoomOut(),\n\t\t};\n\t}, [] );\n\n\tconst localRef = useRef();\n\tconst deviceStyles = useResizeCanvas( deviceType );\n\tconst [ globalLayoutSettings ] = useSettings( 'layout' );\n\n\t// fallbackLayout is used if there is no Post Content,\n\t// and for Post Title.\n\tconst fallbackLayout = useMemo( () => {\n\t\tif ( renderingMode !== 'post-only' || isDesignPostType ) {\n\t\t\treturn { type: 'default' };\n\t\t}\n\n\t\tif ( themeSupportsLayout ) {\n\t\t\t// We need to ensure support for wide and full alignments,\n\t\t\t// so we add the constrained type.\n\t\t\treturn { ...globalLayoutSettings, type: 'constrained' };\n\t\t}\n\t\t// Set default layout for classic themes so all alignments are supported.\n\t\treturn { type: 'default' };\n\t}, [\n\t\trenderingMode,\n\t\tthemeSupportsLayout,\n\t\tglobalLayoutSettings,\n\t\tisDesignPostType,\n\t] );\n\n\tconst newestPostContentAttributes = useMemo( () => {\n\t\tif (\n\t\t\t! editedPostTemplate?.content &&\n\t\t\t! editedPostTemplate?.blocks &&\n\t\t\tpostContentAttributes\n\t\t) {\n\t\t\treturn postContentAttributes;\n\t\t}\n\t\t// When in template editing mode, we can access the blocks directly.\n\t\tif ( editedPostTemplate?.blocks ) {\n\t\t\treturn getPostContentAttributes( editedPostTemplate?.blocks );\n\t\t}\n\t\t// If there are no blocks, we have to parse the content string.\n\t\t// Best double-check it's a string otherwise the parse function gets unhappy.\n\t\tconst parseableContent =\n\t\t\ttypeof editedPostTemplate?.content === 'string'\n\t\t\t\t? editedPostTemplate?.content\n\t\t\t\t: '';\n\n\t\treturn getPostContentAttributes( parse( parseableContent ) ) || {};\n\t}, [\n\t\teditedPostTemplate?.content,\n\t\teditedPostTemplate?.blocks,\n\t\tpostContentAttributes,\n\t] );\n\n\tconst hasPostContentAtRootLevel = useMemo( () => {\n\t\tif ( ! editedPostTemplate?.content && ! editedPostTemplate?.blocks ) {\n\t\t\treturn false;\n\t\t}\n\t\t// When in template editing mode, we can access the blocks directly.\n\t\tif ( editedPostTemplate?.blocks ) {\n\t\t\treturn checkForPostContentAtRootLevel( editedPostTemplate?.blocks );\n\t\t}\n\t\t// If there are no blocks, we have to parse the content string.\n\t\t// Best double-check it's a string otherwise the parse function gets unhappy.\n\t\tconst parseableContent =\n\t\t\ttypeof editedPostTemplate?.content === 'string'\n\t\t\t\t? editedPostTemplate?.content\n\t\t\t\t: '';\n\n\t\treturn (\n\t\t\tcheckForPostContentAtRootLevel( parse( parseableContent ) ) || false\n\t\t);\n\t}, [ editedPostTemplate?.content, editedPostTemplate?.blocks ] );\n\n\tconst { layout = {}, align = '' } = newestPostContentAttributes || {};\n\n\tconst postContentLayoutClasses = useLayoutClasses(\n\t\tnewestPostContentAttributes,\n\t\t'core/post-content'\n\t);\n\n\tconst blockListLayoutClass = clsx(\n\t\t{\n\t\t\t'is-layout-flow': ! themeSupportsLayout,\n\t\t},\n\t\tthemeSupportsLayout && postContentLayoutClasses,\n\t\talign && `align${ align }`\n\t);\n\n\tconst postContentLayoutStyles = useLayoutStyles(\n\t\tnewestPostContentAttributes,\n\t\t'core/post-content',\n\t\t'.block-editor-block-list__layout.is-root-container'\n\t);\n\n\t// Update type for blocks using legacy layouts.\n\tconst postContentLayout = useMemo( () => {\n\t\treturn layout &&\n\t\t\t( layout?.type === 'constrained' ||\n\t\t\t\tlayout?.inherit ||\n\t\t\t\tlayout?.contentSize ||\n\t\t\t\tlayout?.wideSize )\n\t\t\t? { ...globalLayoutSettings, ...layout, type: 'constrained' }\n\t\t\t: { ...globalLayoutSettings, ...layout, type: 'default' };\n\t}, [\n\t\tlayout?.type,\n\t\tlayout?.inherit,\n\t\tlayout?.contentSize,\n\t\tlayout?.wideSize,\n\t\tglobalLayoutSettings,\n\t] );\n\n\t// If there is a Post Content block we use its layout for the block list;\n\t// if not, this must be a classic theme, in which case we use the fallback layout.\n\tconst blockListLayout = postContentAttributes\n\t\t? postContentLayout\n\t\t: fallbackLayout;\n\n\tconst postEditorLayout =\n\t\tblockListLayout?.type === 'default' && ! hasPostContentAtRootLevel\n\t\t\t? fallbackLayout\n\t\t\t: blockListLayout;\n\tconst observeTypingRef = useTypingObserver();\n\tconst titleRef = useRef();\n\tuseEffect( () => {\n\t\tif ( ! autoFocus || ! isCleanNewPost() ) {\n\t\t\treturn;\n\t\t}\n\t\ttitleRef?.current?.focus();\n\t}, [ autoFocus, isCleanNewPost ] );\n\n\t// Add some styles for alignwide/alignfull Post Content and its children.\n\tconst alignCSS = `.is-root-container.alignwide { max-width: var(--wp--style--global--wide-size); margin-left: auto; margin-right: auto;}\n\t\t.is-root-container.alignwide:where(.is-layout-flow) > :not(.alignleft):not(.alignright) { max-width: var(--wp--style--global--wide-size);}\n\t\t.is-root-container.alignfull { max-width: none; margin-left: auto; margin-right: auto;}\n\t\t.is-root-container.alignfull:where(.is-layout-flow) > :not(.alignleft):not(.alignright) { max-width: none;}`;\n\n\tconst enableResizing =\n\t\t[\n\t\t\tNAVIGATION_POST_TYPE,\n\t\t\tTEMPLATE_PART_POST_TYPE,\n\t\t\tPATTERN_POST_TYPE,\n\t\t].includes( postType ) &&\n\t\t// Disable in previews / view mode.\n\t\t! isPreview &&\n\t\t// Disable resizing in mobile viewport.\n\t\t! isMobileViewport &&\n\t\t// Disable resizing in zoomed-out mode.\n\t\t! isZoomedOut;\n\n\tconst isNavigationPreview = postType === NAVIGATION_POST_TYPE && isPreview;\n\n\t// Calculate the minimum height including scroll offset to fit all notes.\n\tconst calculatedMinHeight = useMemo( () => {\n\t\tif ( ! localRef.current ) {\n\t\t\treturn canvasMinHeight;\n\t\t}\n\n\t\tconst { ownerDocument } = localRef.current;\n\t\tconst scrollTop =\n\t\t\townerDocument.documentElement.scrollTop ||\n\t\t\townerDocument.body.scrollTop;\n\n\t\treturn canvasMinHeight + scrollTop;\n\t}, [ canvasMinHeight ] );\n\n\tconst [ paddingAppenderRef, paddingStyle ] = usePaddingAppender(\n\t\t! isPreview && renderingMode === 'post-only' && ! isDesignPostType\n\t);\n\n\tconst centerContentCSS = `display:flex;align-items:center;justify-content:center;`;\n\n\tconst iframeStyles = useMemo( () => {\n\t\treturn [\n\t\t\t...( styles ?? [] ),\n\t\t\t{\n\t\t\t\t// Ensures margins of children are contained so that the body background paints behind them.\n\t\t\t\t// Otherwise, the background of html (when zoomed out) would show there and appear broken. It's\n\t\t\t\t// important mostly for post-only views yet conceivably an issue in templated views too.\n\t\t\t\tcss: `:where(.block-editor-iframe__body){display:flow-root;${\n\t\t\t\t\tcalculatedMinHeight\n\t\t\t\t\t\t? `min-height:${ calculatedMinHeight }px;`\n\t\t\t\t\t\t: ''\n\t\t\t\t}}.is-root-container{display:flow-root;${\n\t\t\t\t\t// Some themes will have `min-height: 100vh` for the root container,\n\t\t\t\t\t// which isn't a requirement in auto resize mode.\n\t\t\t\t\tenableResizing || isNavigationPreview\n\t\t\t\t\t\t? 'min-height:0!important;'\n\t\t\t\t\t\t: ''\n\t\t\t\t}}\n\t\t\t\t${ paddingStyle ? paddingStyle : '' }\n\t\t\t\t${\n\t\t\t\t\tenableResizing\n\t\t\t\t\t\t? `.block-editor-iframe__html{background:var(--wp-editor-canvas-background);min-height:100vh;${ centerContentCSS }}.block-editor-iframe__body{width:100%;}`\n\t\t\t\t\t\t: ''\n\t\t\t\t}${\n\t\t\t\t\tisNavigationPreview\n\t\t\t\t\t\t? `.block-editor-iframe__body{${ centerContentCSS }padding:var(--wp--style--block-gap,2em);}`\n\t\t\t\t\t\t: ''\n\t\t\t\t}`,\n\t\t\t\t// The CSS for enableResizing centers the body content vertically when resizing is enabled and applies a background\n\t\t\t\t// color to the iframe HTML element to match the background color of the editor canvas.\n\t\t\t\t// The CSS for isNavigationPreview centers the body content vertically and horizontally when the navigation is in preview mode.\n\t\t\t},\n\t\t];\n\t}, [\n\t\tstyles,\n\t\tenableResizing,\n\t\tisNavigationPreview,\n\t\tcalculatedMinHeight,\n\t\tpaddingStyle,\n\t] );\n\n\tconst typewriterRef = useTypewriter();\n\tcontentRef = useMergeRefs( [\n\t\tlocalRef,\n\t\tcontentRef,\n\t\trenderingMode === 'post-only' ? typewriterRef : null,\n\t\tuseFlashEditableBlocks( {\n\t\t\tisEnabled: renderingMode === 'template-locked',\n\t\t} ),\n\t\tuseSelectNearestEditableBlock( {\n\t\t\tisEnabled: renderingMode === 'template-locked',\n\t\t} ),\n\t\tuseZoomOutModeExit(),\n\t\tpaddingAppenderRef,\n\t\tuseEditContentOnlySectionExit(),\n\t] );\n\n\treturn (\n\t\t<div\n\t\t\tclassName={ clsx(\n\t\t\t\t'editor-visual-editor',\n\t\t\t\t// this class is here for backward compatibility reasons.\n\t\t\t\t'edit-post-visual-editor',\n\t\t\t\tclassName,\n\t\t\t\t{\n\t\t\t\t\t'has-padding': isFocusedEntity || enableResizing,\n\t\t\t\t\t'is-resizable': enableResizing,\n\t\t\t\t\t'is-iframed': ! disableIframe,\n\t\t\t\t}\n\t\t\t) }\n\t\t>\n\t\t\t<SyncConnectionErrorModal />\n\t\t\t<ResizableEditor enableResizing={ enableResizing } height=\"100%\">\n\t\t\t\t<BlockCanvas\n\t\t\t\t\tshouldIframe={ ! disableIframe }\n\t\t\t\t\tcontentRef={ contentRef }\n\t\t\t\t\tstyles={ iframeStyles }\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\tiframeProps={ {\n\t\t\t\t\t\t...iframeProps,\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t...iframeProps?.style,\n\t\t\t\t\t\t\t...deviceStyles,\n\t\t\t\t\t\t},\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ themeSupportsLayout &&\n\t\t\t\t\t\t! themeHasDisabledLayoutStyles &&\n\t\t\t\t\t\trenderingMode === 'post-only' &&\n\t\t\t\t\t\t! isDesignPostType && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<LayoutStyle\n\t\t\t\t\t\t\t\t\tselector=\".editor-visual-editor__post-title-wrapper\"\n\t\t\t\t\t\t\t\t\tlayout={ fallbackLayout }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<LayoutStyle\n\t\t\t\t\t\t\t\t\tselector=\".block-editor-block-list__layout.is-root-container\"\n\t\t\t\t\t\t\t\t\tlayout={ postEditorLayout }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ align && <LayoutStyle css={ alignCSS } /> }\n\t\t\t\t\t\t\t\t{ postContentLayoutStyles && (\n\t\t\t\t\t\t\t\t\t<LayoutStyle\n\t\t\t\t\t\t\t\t\t\tlayout={ postContentLayout }\n\t\t\t\t\t\t\t\t\t\tcss={ postContentLayoutStyles }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) }\n\t\t\t\t\t{ renderingMode === 'post-only' && ! isDesignPostType && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t'editor-visual-editor__post-title-wrapper',\n\t\t\t\t\t\t\t\t// The following class is only here for backward compatibility\n\t\t\t\t\t\t\t\t// some themes might be using it to style the post title.\n\t\t\t\t\t\t\t\t'edit-post-visual-editor__post-title-wrapper',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t'has-global-padding':\n\t\t\t\t\t\t\t\t\t\thasRootPaddingAwareAlignments,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tcontentEditable={ false }\n\t\t\t\t\t\t\tref={ observeTypingRef }\n\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\t// This is using inline styles\n\t\t\t\t\t\t\t\t// so it's applied for both iframed and non iframed editors.\n\t\t\t\t\t\t\t\tmarginTop: '4rem',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<PostTitle ref={ titleRef } />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t\t<RecursionProvider\n\t\t\t\t\t\tblockName={ wrapperBlockName }\n\t\t\t\t\t\tuniqueId={ wrapperUniqueId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<BlockList\n\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t'is-' + deviceType.toLowerCase() + '-preview',\n\t\t\t\t\t\t\t\trenderingMode !== 'post-only' ||\n\t\t\t\t\t\t\t\t\tisDesignPostType\n\t\t\t\t\t\t\t\t\t? 'wp-site-blocks'\n\t\t\t\t\t\t\t\t\t: `${ blockListLayoutClass } wp-block-post-content`, // Ensure root level blocks receive default/flow blockGap styling rules.\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t'has-global-padding':\n\t\t\t\t\t\t\t\t\t\trenderingMode === 'post-only' &&\n\t\t\t\t\t\t\t\t\t\t! isDesignPostType &&\n\t\t\t\t\t\t\t\t\t\thasRootPaddingAwareAlignments,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tlayout={ blockListLayout }\n\t\t\t\t\t\t\tdropZoneElement={\n\t\t\t\t\t\t\t\t// When iframed, pass in the html element of the iframe to\n\t\t\t\t\t\t\t\t// ensure the drop zone extends to the edges of the iframe.\n\t\t\t\t\t\t\t\tdisableIframe\n\t\t\t\t\t\t\t\t\t? localRef.current\n\t\t\t\t\t\t\t\t\t: localRef.current?.parentNode\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__unstableDisableDropZone={\n\t\t\t\t\t\t\t\t// In template preview mode, disable drop zones at the root of the template.\n\t\t\t\t\t\t\t\trenderingMode === 'template-locked'\n\t\t\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ renderingMode === 'template-locked' && (\n\t\t\t\t\t\t\t<EditTemplateBlocksNotification\n\t\t\t\t\t\t\t\tcontentRef={ localRef }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</RecursionProvider>\n\t\t\t\t</BlockCanvas>\n\t\t\t</ResizableEditor>\n\t\t</div>\n\t);\n}\n\nexport default VisualEditor;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -95,9 +95,7 @@ var savePost = (options = {}) => async ({ select, dispatch, registry }) => {
95
95
  return;
96
96
  }
97
97
  const content = select.getEditedPostContent();
98
- if (!options.isAutosave) {
99
- dispatch.editPost({ content }, { undoIgnore: true });
100
- }
98
+ dispatch.editPost({ content }, { undoIgnore: true });
101
99
  const previousRecord = select.getCurrentPost();
102
100
  let edits = {
103
101
  id: previousRecord.id,