@wordpress/editor 14.6.0 → 14.7.1-next.5368f64a9.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 (354) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +41 -0
  3. package/build/bindings/post-meta.js +11 -8
  4. package/build/bindings/post-meta.js.map +1 -1
  5. package/build/components/block-manager/index.js +4 -1
  6. package/build/components/block-manager/index.js.map +1 -1
  7. package/build/components/block-settings-menu/content-only-settings-menu.js +5 -8
  8. package/build/components/block-settings-menu/content-only-settings-menu.js.map +1 -1
  9. package/build/components/document-bar/index.js +4 -4
  10. package/build/components/document-bar/index.js.map +1 -1
  11. package/build/components/editor/index.js +2 -2
  12. package/build/components/editor/index.js.map +1 -1
  13. package/build/components/editor-history/redo.js +4 -1
  14. package/build/components/editor-history/redo.js.map +1 -1
  15. package/build/components/editor-history/undo.js +4 -1
  16. package/build/components/editor-history/undo.js.map +1 -1
  17. package/build/components/editor-interface/index.js +2 -3
  18. package/build/components/editor-interface/index.js.map +1 -1
  19. package/build/components/error-boundary/index.js +4 -1
  20. package/build/components/error-boundary/index.js.map +1 -1
  21. package/build/components/global-styles-provider/index.js +3 -4
  22. package/build/components/global-styles-provider/index.js.map +1 -1
  23. package/build/components/header/index.js +4 -4
  24. package/build/components/header/index.js.map +1 -1
  25. package/build/components/index.js +8 -0
  26. package/build/components/index.js.map +1 -1
  27. package/build/components/inserter-sidebar/index.js +5 -10
  28. package/build/components/inserter-sidebar/index.js.map +1 -1
  29. package/build/components/local-autosave-monitor/index.js +5 -5
  30. package/build/components/local-autosave-monitor/index.js.map +1 -1
  31. package/build/components/page-attributes/parent.js +4 -1
  32. package/build/components/page-attributes/parent.js.map +1 -1
  33. package/build/components/plugin-preview-menu-item/index.js +57 -0
  34. package/build/components/plugin-preview-menu-item/index.js.map +1 -0
  35. package/build/components/post-actions/index.js +5 -8
  36. package/build/components/post-actions/index.js.map +1 -1
  37. package/build/components/post-excerpt/panel.js +4 -1
  38. package/build/components/post-excerpt/panel.js.map +1 -1
  39. package/build/components/post-featured-image/index.js +12 -3
  40. package/build/components/post-featured-image/index.js.map +1 -1
  41. package/build/components/post-format/index.js +4 -1
  42. package/build/components/post-format/index.js.map +1 -1
  43. package/build/components/post-last-revision/index.js +4 -1
  44. package/build/components/post-last-revision/index.js.map +1 -1
  45. package/build/components/post-locked-modal/index.js +12 -3
  46. package/build/components/post-locked-modal/index.js.map +1 -1
  47. package/build/components/post-publish-panel/index.js +4 -1
  48. package/build/components/post-publish-panel/index.js.map +1 -1
  49. package/build/components/post-publish-panel/maybe-post-format-panel.js +4 -1
  50. package/build/components/post-publish-panel/maybe-post-format-panel.js.map +1 -1
  51. package/build/components/post-publish-panel/maybe-upload-media.js +158 -33
  52. package/build/components/post-publish-panel/maybe-upload-media.js.map +1 -1
  53. package/build/components/post-publish-panel/media-util.js +79 -0
  54. package/build/components/post-publish-panel/media-util.js.map +1 -0
  55. package/build/components/post-status/index.js +4 -2
  56. package/build/components/post-status/index.js.map +1 -1
  57. package/build/components/post-taxonomies/hierarchical-term-selector.js +4 -1
  58. package/build/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  59. package/build/components/post-taxonomies/most-used-terms.js +4 -1
  60. package/build/components/post-taxonomies/most-used-terms.js.map +1 -1
  61. package/build/components/post-template/block-theme.js +13 -4
  62. package/build/components/post-template/block-theme.js.map +1 -1
  63. package/build/components/post-template/classic-theme.js +4 -1
  64. package/build/components/post-template/classic-theme.js.map +1 -1
  65. package/build/components/post-title/index.js +32 -46
  66. package/build/components/post-title/index.js.map +1 -1
  67. package/build/components/post-trash/check.js +2 -1
  68. package/build/components/post-trash/check.js.map +1 -1
  69. package/build/components/post-trash/index.js +22 -8
  70. package/build/components/post-trash/index.js.map +1 -1
  71. package/build/components/post-url/index.js +4 -1
  72. package/build/components/post-url/index.js.map +1 -1
  73. package/build/components/preferences-modal/index.js +28 -1
  74. package/build/components/preferences-modal/index.js.map +1 -1
  75. package/build/components/preview-dropdown/index.js +26 -14
  76. package/build/components/preview-dropdown/index.js.map +1 -1
  77. package/build/components/provider/index.js +34 -8
  78. package/build/components/provider/index.js.map +1 -1
  79. package/build/components/provider/use-block-editor-settings.js +14 -10
  80. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  81. package/build/components/save-publish-panels/index.js +8 -2
  82. package/build/components/save-publish-panels/index.js.map +1 -1
  83. package/build/components/sidebar/post-summary.js +3 -0
  84. package/build/components/sidebar/post-summary.js.map +1 -1
  85. package/build/components/start-page-options/index.js +16 -19
  86. package/build/components/start-page-options/index.js.map +1 -1
  87. package/build/components/start-template-options/index.js +1 -0
  88. package/build/components/start-template-options/index.js.map +1 -1
  89. package/build/components/table-of-contents/index.js +1 -0
  90. package/build/components/table-of-contents/index.js.map +1 -1
  91. package/build/components/text-editor/index.js +1 -0
  92. package/build/components/text-editor/index.js.map +1 -1
  93. package/build/components/visual-editor/edit-template-blocks-notification.js +1 -1
  94. package/build/components/visual-editor/edit-template-blocks-notification.js.map +1 -1
  95. package/build/components/visual-editor/index.js +1 -6
  96. package/build/components/visual-editor/index.js.map +1 -1
  97. package/build/dataviews/actions/export-pattern.js +2 -0
  98. package/build/dataviews/actions/export-pattern.js.map +1 -1
  99. package/build/dataviews/actions/permanently-delete-post.js +2 -0
  100. package/build/dataviews/actions/permanently-delete-post.js.map +1 -1
  101. package/build/dataviews/actions/reset-post.js +2 -0
  102. package/build/dataviews/actions/reset-post.js.map +1 -1
  103. package/build/dataviews/actions/trash-post.js +2 -0
  104. package/build/dataviews/actions/trash-post.js.map +1 -1
  105. package/build/dataviews/actions/view-post.js +1 -1
  106. package/build/dataviews/actions/view-post.js.map +1 -1
  107. package/build/private-apis.js +0 -2
  108. package/build/private-apis.js.map +1 -1
  109. package/build/store/private-actions.js +1 -1
  110. package/build/store/private-actions.js.map +1 -1
  111. package/build/store/selectors.js +7 -3
  112. package/build/store/selectors.js.map +1 -1
  113. package/build-module/bindings/post-meta.js +11 -8
  114. package/build-module/bindings/post-meta.js.map +1 -1
  115. package/build-module/components/block-manager/index.js +4 -1
  116. package/build-module/components/block-manager/index.js.map +1 -1
  117. package/build-module/components/block-settings-menu/content-only-settings-menu.js +6 -9
  118. package/build-module/components/block-settings-menu/content-only-settings-menu.js.map +1 -1
  119. package/build-module/components/document-bar/index.js +4 -4
  120. package/build-module/components/document-bar/index.js.map +1 -1
  121. package/build-module/components/editor/index.js +2 -2
  122. package/build-module/components/editor/index.js.map +1 -1
  123. package/build-module/components/editor-history/redo.js +4 -1
  124. package/build-module/components/editor-history/redo.js.map +1 -1
  125. package/build-module/components/editor-history/undo.js +4 -1
  126. package/build-module/components/editor-history/undo.js.map +1 -1
  127. package/build-module/components/editor-interface/index.js +2 -3
  128. package/build-module/components/editor-interface/index.js.map +1 -1
  129. package/build-module/components/error-boundary/index.js +4 -1
  130. package/build-module/components/error-boundary/index.js.map +1 -1
  131. package/build-module/components/global-styles-provider/index.js +3 -4
  132. package/build-module/components/global-styles-provider/index.js.map +1 -1
  133. package/build-module/components/header/index.js +4 -4
  134. package/build-module/components/header/index.js.map +1 -1
  135. package/build-module/components/index.js +1 -0
  136. package/build-module/components/index.js.map +1 -1
  137. package/build-module/components/inserter-sidebar/index.js +5 -10
  138. package/build-module/components/inserter-sidebar/index.js.map +1 -1
  139. package/build-module/components/local-autosave-monitor/index.js +5 -5
  140. package/build-module/components/local-autosave-monitor/index.js.map +1 -1
  141. package/build-module/components/page-attributes/parent.js +4 -1
  142. package/build-module/components/page-attributes/parent.js.map +1 -1
  143. package/build-module/components/plugin-preview-menu-item/index.js +52 -0
  144. package/build-module/components/plugin-preview-menu-item/index.js.map +1 -0
  145. package/build-module/components/post-actions/index.js +5 -8
  146. package/build-module/components/post-actions/index.js.map +1 -1
  147. package/build-module/components/post-excerpt/panel.js +4 -1
  148. package/build-module/components/post-excerpt/panel.js.map +1 -1
  149. package/build-module/components/post-featured-image/index.js +12 -3
  150. package/build-module/components/post-featured-image/index.js.map +1 -1
  151. package/build-module/components/post-format/index.js +4 -1
  152. package/build-module/components/post-format/index.js.map +1 -1
  153. package/build-module/components/post-last-revision/index.js +4 -1
  154. package/build-module/components/post-last-revision/index.js.map +1 -1
  155. package/build-module/components/post-locked-modal/index.js +12 -3
  156. package/build-module/components/post-locked-modal/index.js.map +1 -1
  157. package/build-module/components/post-publish-panel/index.js +4 -1
  158. package/build-module/components/post-publish-panel/index.js.map +1 -1
  159. package/build-module/components/post-publish-panel/maybe-post-format-panel.js +4 -1
  160. package/build-module/components/post-publish-panel/maybe-post-format-panel.js.map +1 -1
  161. package/build-module/components/post-publish-panel/maybe-upload-media.js +157 -32
  162. package/build-module/components/post-publish-panel/maybe-upload-media.js.map +1 -1
  163. package/build-module/components/post-publish-panel/media-util.js +72 -0
  164. package/build-module/components/post-publish-panel/media-util.js.map +1 -0
  165. package/build-module/components/post-status/index.js +4 -2
  166. package/build-module/components/post-status/index.js.map +1 -1
  167. package/build-module/components/post-taxonomies/hierarchical-term-selector.js +4 -1
  168. package/build-module/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  169. package/build-module/components/post-taxonomies/most-used-terms.js +4 -1
  170. package/build-module/components/post-taxonomies/most-used-terms.js.map +1 -1
  171. package/build-module/components/post-template/block-theme.js +13 -4
  172. package/build-module/components/post-template/block-theme.js.map +1 -1
  173. package/build-module/components/post-template/classic-theme.js +4 -1
  174. package/build-module/components/post-template/classic-theme.js.map +1 -1
  175. package/build-module/components/post-title/index.js +33 -47
  176. package/build-module/components/post-title/index.js.map +1 -1
  177. package/build-module/components/post-trash/check.js +2 -1
  178. package/build-module/components/post-trash/check.js.map +1 -1
  179. package/build-module/components/post-trash/index.js +23 -11
  180. package/build-module/components/post-trash/index.js.map +1 -1
  181. package/build-module/components/post-url/index.js +4 -1
  182. package/build-module/components/post-url/index.js.map +1 -1
  183. package/build-module/components/preferences-modal/index.js +28 -1
  184. package/build-module/components/preferences-modal/index.js.map +1 -1
  185. package/build-module/components/preview-dropdown/index.js +26 -14
  186. package/build-module/components/preview-dropdown/index.js.map +1 -1
  187. package/build-module/components/provider/index.js +35 -9
  188. package/build-module/components/provider/index.js.map +1 -1
  189. package/build-module/components/provider/use-block-editor-settings.js +15 -11
  190. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  191. package/build-module/components/save-publish-panels/index.js +8 -2
  192. package/build-module/components/save-publish-panels/index.js.map +1 -1
  193. package/build-module/components/sidebar/post-summary.js +3 -0
  194. package/build-module/components/sidebar/post-summary.js.map +1 -1
  195. package/build-module/components/start-page-options/index.js +17 -21
  196. package/build-module/components/start-page-options/index.js.map +1 -1
  197. package/build-module/components/start-template-options/index.js +1 -0
  198. package/build-module/components/start-template-options/index.js.map +1 -1
  199. package/build-module/components/table-of-contents/index.js +1 -0
  200. package/build-module/components/table-of-contents/index.js.map +1 -1
  201. package/build-module/components/text-editor/index.js +1 -0
  202. package/build-module/components/text-editor/index.js.map +1 -1
  203. package/build-module/components/visual-editor/edit-template-blocks-notification.js +1 -1
  204. package/build-module/components/visual-editor/edit-template-blocks-notification.js.map +1 -1
  205. package/build-module/components/visual-editor/index.js +1 -6
  206. package/build-module/components/visual-editor/index.js.map +1 -1
  207. package/build-module/dataviews/actions/export-pattern.js +2 -0
  208. package/build-module/dataviews/actions/export-pattern.js.map +1 -1
  209. package/build-module/dataviews/actions/permanently-delete-post.js +3 -0
  210. package/build-module/dataviews/actions/permanently-delete-post.js.map +1 -1
  211. package/build-module/dataviews/actions/reset-post.js +2 -0
  212. package/build-module/dataviews/actions/reset-post.js.map +1 -1
  213. package/build-module/dataviews/actions/trash-post.js +2 -0
  214. package/build-module/dataviews/actions/trash-post.js.map +1 -1
  215. package/build-module/dataviews/actions/view-post.js +2 -2
  216. package/build-module/dataviews/actions/view-post.js.map +1 -1
  217. package/build-module/private-apis.js +0 -2
  218. package/build-module/private-apis.js.map +1 -1
  219. package/build-module/store/private-actions.js +1 -1
  220. package/build-module/store/private-actions.js.map +1 -1
  221. package/build-module/store/selectors.js +6 -2
  222. package/build-module/store/selectors.js.map +1 -1
  223. package/build-style/style-rtl.css +13 -8
  224. package/build-style/style.css +13 -8
  225. package/build-types/bindings/post-meta.d.ts +0 -3
  226. package/build-types/bindings/post-meta.d.ts.map +1 -1
  227. package/build-types/components/block-settings-menu/content-only-settings-menu.d.ts.map +1 -1
  228. package/build-types/components/editor-history/redo.d.ts.map +1 -1
  229. package/build-types/components/editor-history/undo.d.ts.map +1 -1
  230. package/build-types/components/editor-interface/index.d.ts.map +1 -1
  231. package/build-types/components/error-boundary/index.d.ts.map +1 -1
  232. package/build-types/components/global-styles-provider/index.d.ts.map +1 -1
  233. package/build-types/components/header/back-button.d.ts.map +1 -1
  234. package/build-types/components/index.d.ts +1 -0
  235. package/build-types/components/index.d.ts.map +1 -1
  236. package/build-types/components/inserter-sidebar/index.d.ts.map +1 -1
  237. package/build-types/components/more-menu/tools-more-menu-group.d.ts.map +1 -1
  238. package/build-types/components/more-menu/view-more-menu-group.d.ts.map +1 -1
  239. package/build-types/components/page-attributes/parent.d.ts.map +1 -1
  240. package/build-types/components/plugin-document-setting-panel/index.d.ts.map +1 -1
  241. package/build-types/components/plugin-post-publish-panel/index.d.ts.map +1 -1
  242. package/build-types/components/plugin-post-status-info/index.d.ts.map +1 -1
  243. package/build-types/components/plugin-pre-publish-panel/index.d.ts.map +1 -1
  244. package/build-types/components/plugin-preview-menu-item/index.d.ts +3 -0
  245. package/build-types/components/plugin-preview-menu-item/index.d.ts.map +1 -0
  246. package/build-types/components/post-actions/index.d.ts.map +1 -1
  247. package/build-types/components/post-excerpt/plugin.d.ts.map +1 -1
  248. package/build-types/components/post-format/index.d.ts.map +1 -1
  249. package/build-types/components/post-last-revision/index.d.ts.map +1 -1
  250. package/build-types/components/post-locked-modal/index.d.ts.map +1 -1
  251. package/build-types/components/post-publish-panel/index.d.ts.map +1 -1
  252. package/build-types/components/post-publish-panel/maybe-post-format-panel.d.ts.map +1 -1
  253. package/build-types/components/post-publish-panel/maybe-upload-media.d.ts +1 -1
  254. package/build-types/components/post-publish-panel/maybe-upload-media.d.ts.map +1 -1
  255. package/build-types/components/post-publish-panel/media-util.d.ts +20 -0
  256. package/build-types/components/post-publish-panel/media-util.d.ts.map +1 -0
  257. package/build-types/components/post-status/index.d.ts.map +1 -1
  258. package/build-types/components/post-taxonomies/hierarchical-term-selector.d.ts.map +1 -1
  259. package/build-types/components/post-taxonomies/most-used-terms.d.ts.map +1 -1
  260. package/build-types/components/post-template/block-theme.d.ts.map +1 -1
  261. package/build-types/components/post-template/classic-theme.d.ts.map +1 -1
  262. package/build-types/components/post-trash/check.d.ts.map +1 -1
  263. package/build-types/components/post-trash/index.d.ts +4 -1
  264. package/build-types/components/post-trash/index.d.ts.map +1 -1
  265. package/build-types/components/post-url/index.d.ts.map +1 -1
  266. package/build-types/components/preferences-modal/enable-plugin-document-setting-panel.d.ts.map +1 -1
  267. package/build-types/components/preferences-modal/index.d.ts.map +1 -1
  268. package/build-types/components/preview-dropdown/index.d.ts.map +1 -1
  269. package/build-types/components/provider/index.d.ts.map +1 -1
  270. package/build-types/components/provider/use-block-editor-settings.d.ts.map +1 -1
  271. package/build-types/components/save-publish-panels/index.d.ts.map +1 -1
  272. package/build-types/components/sidebar/post-summary.d.ts.map +1 -1
  273. package/build-types/components/start-page-options/index.d.ts +1 -0
  274. package/build-types/components/start-page-options/index.d.ts.map +1 -1
  275. package/build-types/components/start-template-options/index.d.ts.map +1 -1
  276. package/build-types/components/text-editor/index.d.ts.map +1 -1
  277. package/build-types/components/visual-editor/edit-template-blocks-notification.d.ts.map +1 -1
  278. package/build-types/components/visual-editor/index.d.ts.map +1 -1
  279. package/build-types/dataviews/actions/export-pattern.d.ts.map +1 -1
  280. package/build-types/dataviews/actions/permanently-delete-post.d.ts.map +1 -1
  281. package/build-types/dataviews/actions/reset-post.d.ts.map +1 -1
  282. package/build-types/dataviews/actions/trash-post.d.ts.map +1 -1
  283. package/build-types/private-apis.d.ts.map +1 -1
  284. package/build-types/store/private-actions.d.ts.map +1 -1
  285. package/build-types/store/selectors.d.ts +8 -8
  286. package/build-types/store/selectors.d.ts.map +1 -1
  287. package/package.json +36 -36
  288. package/src/bindings/post-meta.js +12 -6
  289. package/src/components/block-manager/index.js +2 -0
  290. package/src/components/block-settings-menu/content-only-settings-menu.js +5 -9
  291. package/src/components/create-template-part-modal/style.scss +1 -1
  292. package/src/components/document-bar/index.js +4 -4
  293. package/src/components/document-outline/style.scss +1 -1
  294. package/src/components/editor/index.js +1 -1
  295. package/src/components/editor-history/redo.js +2 -0
  296. package/src/components/editor-history/undo.js +2 -0
  297. package/src/components/editor-interface/index.js +2 -4
  298. package/src/components/error-boundary/index.js +6 -1
  299. package/src/components/global-styles-provider/index.js +11 -7
  300. package/src/components/header/index.js +3 -3
  301. package/src/components/header/style.scss +6 -3
  302. package/src/components/index.js +1 -0
  303. package/src/components/inserter-sidebar/index.js +6 -8
  304. package/src/components/local-autosave-monitor/index.js +6 -6
  305. package/src/components/page-attributes/parent.js +5 -4
  306. package/src/components/plugin-preview-menu-item/index.js +52 -0
  307. package/src/components/post-actions/index.js +8 -14
  308. package/src/components/post-card-panel/style.scss +1 -1
  309. package/src/components/post-excerpt/panel.js +2 -0
  310. package/src/components/post-featured-image/index.js +6 -0
  311. package/src/components/post-featured-image/style.scss +1 -2
  312. package/src/components/post-format/index.js +2 -0
  313. package/src/components/post-last-revision/index.js +2 -0
  314. package/src/components/post-locked-modal/index.js +14 -2
  315. package/src/components/post-locked-modal/style.scss +1 -1
  316. package/src/components/post-publish-panel/index.js +2 -0
  317. package/src/components/post-publish-panel/maybe-post-format-panel.js +2 -0
  318. package/src/components/post-publish-panel/maybe-upload-media.js +145 -36
  319. package/src/components/post-publish-panel/media-util.js +87 -0
  320. package/src/components/post-publish-panel/style.scss +3 -1
  321. package/src/components/post-publish-panel/test/media-util.js +118 -0
  322. package/src/components/post-status/index.js +3 -2
  323. package/src/components/post-taxonomies/hierarchical-term-selector.js +2 -0
  324. package/src/components/post-taxonomies/most-used-terms.js +2 -0
  325. package/src/components/post-template/block-theme.js +15 -9
  326. package/src/components/post-template/classic-theme.js +2 -0
  327. package/src/components/post-title/index.js +30 -41
  328. package/src/components/post-trash/check.js +5 -2
  329. package/src/components/post-trash/index.js +23 -12
  330. package/src/components/post-url/index.js +2 -0
  331. package/src/components/preferences-modal/index.js +227 -172
  332. package/src/components/preview-dropdown/index.js +28 -20
  333. package/src/components/provider/index.js +42 -10
  334. package/src/components/provider/use-block-editor-settings.js +16 -11
  335. package/src/components/resizable-editor/style.scss +2 -2
  336. package/src/components/save-publish-panels/index.js +4 -0
  337. package/src/components/sidebar/post-summary.js +4 -0
  338. package/src/components/start-page-options/index.js +28 -26
  339. package/src/components/start-template-options/index.js +5 -1
  340. package/src/components/table-of-contents/index.js +1 -0
  341. package/src/components/text-editor/index.js +1 -0
  342. package/src/components/text-editor/style.scss +1 -1
  343. package/src/components/visual-editor/edit-template-blocks-notification.js +4 -1
  344. package/src/components/visual-editor/index.js +2 -9
  345. package/src/dataviews/actions/export-pattern.tsx +2 -0
  346. package/src/dataviews/actions/permanently-delete-post.tsx +2 -0
  347. package/src/dataviews/actions/reset-post.tsx +2 -0
  348. package/src/dataviews/actions/trash-post.tsx +2 -0
  349. package/src/dataviews/actions/view-post.tsx +2 -2
  350. package/src/private-apis.js +0 -2
  351. package/src/store/private-actions.js +3 -1
  352. package/src/store/selectors.js +9 -3
  353. package/tsconfig.json +1 -0
  354. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["Button","PanelBody","useDispatch","useSelect","__","sprintf","store","coreStore","POST_FORMATS","editorStore","jsx","_jsx","jsxs","_jsxs","getSuggestion","supportedFormats","suggestedPostFormat","formats","filter","format","includes","id","find","PostFormatSuggestion","suggestionText","onUpdatePostFormat","variant","onClick","children","PostFormatPanel","currentPostFormat","suggestion","select","_select$getThemeSuppo","getEditedPostAttribute","getSuggestedPostFormat","getThemeSupports","editPost","panelBodyTitle","className","initialOpen","title","caption"],"sources":["@wordpress/editor/src/components/post-publish-panel/maybe-post-format-panel.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Button, PanelBody } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { POST_FORMATS } from '../post-format';\nimport { store as editorStore } from '../../store';\n\nconst getSuggestion = ( supportedFormats, suggestedPostFormat ) => {\n\tconst formats = POST_FORMATS.filter( ( format ) =>\n\t\tsupportedFormats?.includes( format.id )\n\t);\n\treturn formats.find( ( format ) => format.id === suggestedPostFormat );\n};\n\nconst PostFormatSuggestion = ( {\n\tsuggestedPostFormat,\n\tsuggestionText,\n\tonUpdatePostFormat,\n} ) => (\n\t<Button\n\t\tvariant=\"link\"\n\t\tonClick={ () => onUpdatePostFormat( suggestedPostFormat ) }\n\t>\n\t\t{ suggestionText }\n\t</Button>\n);\n\nexport default function PostFormatPanel() {\n\tconst { currentPostFormat, suggestion } = useSelect( ( select ) => {\n\t\tconst { getEditedPostAttribute, getSuggestedPostFormat } =\n\t\t\tselect( editorStore );\n\t\tconst supportedFormats =\n\t\t\tselect( coreStore ).getThemeSupports().formats ?? [];\n\t\treturn {\n\t\t\tcurrentPostFormat: getEditedPostAttribute( 'format' ),\n\t\t\tsuggestion: getSuggestion(\n\t\t\t\tsupportedFormats,\n\t\t\t\tgetSuggestedPostFormat()\n\t\t\t),\n\t\t};\n\t}, [] );\n\n\tconst { editPost } = useDispatch( editorStore );\n\n\tconst onUpdatePostFormat = ( format ) => editPost( { format } );\n\n\tconst panelBodyTitle = [\n\t\t__( 'Suggestion:' ),\n\t\t<span className=\"editor-post-publish-panel__link\" key=\"label\">\n\t\t\t{ __( 'Use a post format' ) }\n\t\t</span>,\n\t];\n\n\tif ( ! suggestion || suggestion.id === currentPostFormat ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<PanelBody initialOpen={ false } title={ panelBodyTitle }>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'Your theme uses post formats to highlight different kinds of content, like images or videos. Apply a post format to see this special styling.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<PostFormatSuggestion\n\t\t\t\t\tonUpdatePostFormat={ onUpdatePostFormat }\n\t\t\t\t\tsuggestedPostFormat={ suggestion.id }\n\t\t\t\t\tsuggestionText={ sprintf(\n\t\t\t\t\t\t/* translators: %s: post format */\n\t\t\t\t\t\t__( 'Apply the \"%1$s\" format.' ),\n\t\t\t\t\t\tsuggestion.caption\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t</p>\n\t\t</PanelBody>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,MAAM,EAAEC,SAAS,QAAQ,uBAAuB;AACzD,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AAC7C,SAASC,KAAK,IAAIC,SAAS,QAAQ,sBAAsB;;AAEzD;AACA;AACA;AACA,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASF,KAAK,IAAIG,WAAW,QAAQ,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAEnD,MAAMC,aAAa,GAAGA,CAAEC,gBAAgB,EAAEC,mBAAmB,KAAM;EAClE,MAAMC,OAAO,GAAGT,YAAY,CAACU,MAAM,CAAIC,MAAM,IAC5CJ,gBAAgB,EAAEK,QAAQ,CAAED,MAAM,CAACE,EAAG,CACvC,CAAC;EACD,OAAOJ,OAAO,CAACK,IAAI,CAAIH,MAAM,IAAMA,MAAM,CAACE,EAAE,KAAKL,mBAAoB,CAAC;AACvE,CAAC;AAED,MAAMO,oBAAoB,GAAGA,CAAE;EAC9BP,mBAAmB;EACnBQ,cAAc;EACdC;AACD,CAAC,kBACAd,IAAA,CAACX,MAAM;EACN0B,OAAO,EAAC,MAAM;EACdC,OAAO,EAAGA,CAAA,KAAMF,kBAAkB,CAAET,mBAAoB,CAAG;EAAAY,QAAA,EAEzDJ;AAAc,CACT,CACR;AAED,eAAe,SAASK,eAAeA,CAAA,EAAG;EACzC,MAAM;IAAEC,iBAAiB;IAAEC;EAAW,CAAC,GAAG5B,SAAS,CAAI6B,MAAM,IAAM;IAAA,IAAAC,qBAAA;IAClE,MAAM;MAAEC,sBAAsB;MAAEC;IAAuB,CAAC,GACvDH,MAAM,CAAEvB,WAAY,CAAC;IACtB,MAAMM,gBAAgB,IAAAkB,qBAAA,GACrBD,MAAM,CAAEzB,SAAU,CAAC,CAAC6B,gBAAgB,CAAC,CAAC,CAACnB,OAAO,cAAAgB,qBAAA,cAAAA,qBAAA,GAAI,EAAE;IACrD,OAAO;MACNH,iBAAiB,EAAEI,sBAAsB,CAAE,QAAS,CAAC;MACrDH,UAAU,EAAEjB,aAAa,CACxBC,gBAAgB,EAChBoB,sBAAsB,CAAC,CACxB;IACD,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EAEP,MAAM;IAAEE;EAAS,CAAC,GAAGnC,WAAW,CAAEO,WAAY,CAAC;EAE/C,MAAMgB,kBAAkB,GAAKN,MAAM,IAAMkB,QAAQ,CAAE;IAAElB;EAAO,CAAE,CAAC;EAE/D,MAAMmB,cAAc,GAAG,CACtBlC,EAAE,CAAE,aAAc,CAAC,eACnBO,IAAA;IAAM4B,SAAS,EAAC,iCAAiC;IAAAX,QAAA,EAC9CxB,EAAE,CAAE,mBAAoB;EAAC,GAD0B,OAEhD,CAAC,CACP;EAED,IAAK,CAAE2B,UAAU,IAAIA,UAAU,CAACV,EAAE,KAAKS,iBAAiB,EAAG;IAC1D,OAAO,IAAI;EACZ;EAEA,oBACCjB,KAAA,CAACZ,SAAS;IAACuC,WAAW,EAAG,KAAO;IAACC,KAAK,EAAGH,cAAgB;IAAAV,QAAA,gBACxDjB,IAAA;MAAAiB,QAAA,EACGxB,EAAE,CACH,+IACD;IAAC,CACC,CAAC,eACJO,IAAA;MAAAiB,QAAA,eACCjB,IAAA,CAACY,oBAAoB;QACpBE,kBAAkB,EAAGA,kBAAoB;QACzCT,mBAAmB,EAAGe,UAAU,CAACV,EAAI;QACrCG,cAAc,EAAGnB,OAAO,EACvB;QACAD,EAAE,CAAE,0BAA2B,CAAC,EAChC2B,UAAU,CAACW,OACZ;MAAG,CACH;IAAC,CACA,CAAC;EAAA,CACM,CAAC;AAEd","ignoreList":[]}
1
+ {"version":3,"names":["Button","PanelBody","useDispatch","useSelect","__","sprintf","store","coreStore","POST_FORMATS","editorStore","jsx","_jsx","jsxs","_jsxs","getSuggestion","supportedFormats","suggestedPostFormat","formats","filter","format","includes","id","find","PostFormatSuggestion","suggestionText","onUpdatePostFormat","__next40pxDefaultSize","variant","onClick","children","PostFormatPanel","currentPostFormat","suggestion","select","_select$getThemeSuppo","getEditedPostAttribute","getSuggestedPostFormat","getThemeSupports","editPost","panelBodyTitle","className","initialOpen","title","caption"],"sources":["@wordpress/editor/src/components/post-publish-panel/maybe-post-format-panel.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Button, PanelBody } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { POST_FORMATS } from '../post-format';\nimport { store as editorStore } from '../../store';\n\nconst getSuggestion = ( supportedFormats, suggestedPostFormat ) => {\n\tconst formats = POST_FORMATS.filter( ( format ) =>\n\t\tsupportedFormats?.includes( format.id )\n\t);\n\treturn formats.find( ( format ) => format.id === suggestedPostFormat );\n};\n\nconst PostFormatSuggestion = ( {\n\tsuggestedPostFormat,\n\tsuggestionText,\n\tonUpdatePostFormat,\n} ) => (\n\t<Button\n\t\t// TODO: Switch to `true` (40px size) if possible\n\t\t__next40pxDefaultSize={ false }\n\t\tvariant=\"link\"\n\t\tonClick={ () => onUpdatePostFormat( suggestedPostFormat ) }\n\t>\n\t\t{ suggestionText }\n\t</Button>\n);\n\nexport default function PostFormatPanel() {\n\tconst { currentPostFormat, suggestion } = useSelect( ( select ) => {\n\t\tconst { getEditedPostAttribute, getSuggestedPostFormat } =\n\t\t\tselect( editorStore );\n\t\tconst supportedFormats =\n\t\t\tselect( coreStore ).getThemeSupports().formats ?? [];\n\t\treturn {\n\t\t\tcurrentPostFormat: getEditedPostAttribute( 'format' ),\n\t\t\tsuggestion: getSuggestion(\n\t\t\t\tsupportedFormats,\n\t\t\t\tgetSuggestedPostFormat()\n\t\t\t),\n\t\t};\n\t}, [] );\n\n\tconst { editPost } = useDispatch( editorStore );\n\n\tconst onUpdatePostFormat = ( format ) => editPost( { format } );\n\n\tconst panelBodyTitle = [\n\t\t__( 'Suggestion:' ),\n\t\t<span className=\"editor-post-publish-panel__link\" key=\"label\">\n\t\t\t{ __( 'Use a post format' ) }\n\t\t</span>,\n\t];\n\n\tif ( ! suggestion || suggestion.id === currentPostFormat ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<PanelBody initialOpen={ false } title={ panelBodyTitle }>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'Your theme uses post formats to highlight different kinds of content, like images or videos. Apply a post format to see this special styling.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<PostFormatSuggestion\n\t\t\t\t\tonUpdatePostFormat={ onUpdatePostFormat }\n\t\t\t\t\tsuggestedPostFormat={ suggestion.id }\n\t\t\t\t\tsuggestionText={ sprintf(\n\t\t\t\t\t\t/* translators: %s: post format */\n\t\t\t\t\t\t__( 'Apply the \"%1$s\" format.' ),\n\t\t\t\t\t\tsuggestion.caption\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t</p>\n\t\t</PanelBody>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -11,7 +11,7 @@ import { isBlobURL } from '@wordpress/blob';
11
11
  /**
12
12
  * Internal dependencies
13
13
  */
14
- import { store as editorStore } from '../../store';
14
+ import { fetchMedia } from './media-util';
15
15
  import { jsx as _jsx } from "react/jsx-runtime";
16
16
  import { jsxs as _jsxs } from "react/jsx-runtime";
17
17
  function flattenBlocks(blocks) {
@@ -22,7 +22,70 @@ function flattenBlocks(blocks) {
22
22
  });
23
23
  return result;
24
24
  }
25
- function Image(block) {
25
+
26
+ /**
27
+ * Determine whether a block has external media.
28
+ *
29
+ * Different blocks use different attribute names (and potentially
30
+ * different logic as well) in determining whether the media is
31
+ * present, and whether it's external.
32
+ *
33
+ * @param {{name: string, attributes: Object}} block The block.
34
+ * @return {boolean?} Whether the block has external media
35
+ */
36
+ function hasExternalMedia(block) {
37
+ if (block.name === 'core/image' || block.name === 'core/cover') {
38
+ return block.attributes.url && !block.attributes.id;
39
+ }
40
+ if (block.name === 'core/media-text') {
41
+ return block.attributes.mediaUrl && !block.attributes.mediaId;
42
+ }
43
+ return undefined;
44
+ }
45
+
46
+ /**
47
+ * Retrieve media info from a block.
48
+ *
49
+ * Different blocks use different attribute names, so we need this
50
+ * function to normalize things into a consistent naming scheme.
51
+ *
52
+ * @param {{name: string, attributes: Object}} block The block.
53
+ * @return {{url: ?string, alt: ?string, id: ?number}} The media info for the block.
54
+ */
55
+ function getMediaInfo(block) {
56
+ if (block.name === 'core/image' || block.name === 'core/cover') {
57
+ const {
58
+ url,
59
+ alt,
60
+ id
61
+ } = block.attributes;
62
+ return {
63
+ url,
64
+ alt,
65
+ id
66
+ };
67
+ }
68
+ if (block.name === 'core/media-text') {
69
+ const {
70
+ mediaUrl: url,
71
+ mediaAlt: alt,
72
+ mediaId: id
73
+ } = block.attributes;
74
+ return {
75
+ url,
76
+ alt,
77
+ id
78
+ };
79
+ }
80
+ return {};
81
+ }
82
+
83
+ // Image component to represent a single image in the upload dialog.
84
+ function Image({
85
+ clientId,
86
+ alt,
87
+ url
88
+ }) {
26
89
  const {
27
90
  selectBlock
28
91
  } = useDispatch(blockEditorStore);
@@ -31,16 +94,16 @@ function Image(block) {
31
94
  role: "button",
32
95
  "aria-label": __('Select image block.'),
33
96
  onClick: () => {
34
- selectBlock(block.clientId);
97
+ selectBlock(clientId);
35
98
  },
36
99
  onKeyDown: event => {
37
100
  if (event.key === 'Enter' || event.key === ' ') {
38
- selectBlock(block.clientId);
101
+ selectBlock(clientId);
39
102
  event.preventDefault();
40
103
  }
41
104
  },
42
- alt: block.attributes.alt,
43
- src: block.attributes.url,
105
+ alt: alt,
106
+ src: url,
44
107
  animate: {
45
108
  opacity: 1
46
109
  },
@@ -58,48 +121,98 @@ function Image(block) {
58
121
  whileHover: {
59
122
  scale: 1.08
60
123
  }
61
- }, block.clientId);
124
+ }, clientId);
62
125
  }
63
- export default function PostFormatPanel() {
126
+ export default function MaybeUploadMediaPanel() {
64
127
  const [isUploading, setIsUploading] = useState(false);
128
+ const [isAnimating, setIsAnimating] = useState(false);
129
+ const [hadUploadError, setHadUploadError] = useState(false);
65
130
  const {
66
131
  editorBlocks,
67
132
  mediaUpload
68
133
  } = useSelect(select => ({
69
- editorBlocks: select(editorStore).getEditorBlocks(),
134
+ editorBlocks: select(blockEditorStore).getBlocks(),
70
135
  mediaUpload: select(blockEditorStore).getSettings().mediaUpload
71
136
  }), []);
72
- const externalImages = flattenBlocks(editorBlocks).filter(block => block.name === 'core/image' && block.attributes.url && !block.attributes.id);
137
+
138
+ // Get a list of blocks with external media.
139
+ const blocksWithExternalMedia = flattenBlocks(editorBlocks).filter(block => hasExternalMedia(block));
73
140
  const {
74
141
  updateBlockAttributes
75
142
  } = useDispatch(blockEditorStore);
76
- if (!mediaUpload || !externalImages.length) {
143
+ if (!mediaUpload || !blocksWithExternalMedia.length) {
77
144
  return null;
78
145
  }
79
146
  const panelBodyTitle = [__('Suggestion:'), /*#__PURE__*/_jsx("span", {
80
147
  className: "editor-post-publish-panel__link",
81
148
  children: __('External media')
82
149
  }, "label")];
150
+
151
+ /**
152
+ * Update an individual block to point to newly-added library media.
153
+ *
154
+ * Different blocks use different attribute names, so we need this
155
+ * function to ensure we modify the correct attributes for each type.
156
+ *
157
+ * @param {{name: string, attributes: Object}} block The block.
158
+ * @param {{id: number, url: string}} media Media library file info.
159
+ */
160
+ function updateBlockWithUploadedMedia(block, media) {
161
+ if (block.name === 'core/image' || block.name === 'core/cover') {
162
+ updateBlockAttributes(block.clientId, {
163
+ id: media.id,
164
+ url: media.url
165
+ });
166
+ }
167
+ if (block.name === 'core/media-text') {
168
+ updateBlockAttributes(block.clientId, {
169
+ mediaId: media.id,
170
+ mediaUrl: media.url
171
+ });
172
+ }
173
+ }
174
+
175
+ // Handle fetching and uploading all external media in the post.
83
176
  function uploadImages() {
84
177
  setIsUploading(true);
85
- Promise.all(externalImages.map(image => window.fetch(image.attributes.url.includes('?') ? image.attributes.url : image.attributes.url + '?').then(response => response.blob()).then(blob => new Promise((resolve, reject) => {
86
- mediaUpload({
87
- filesList: [blob],
88
- onFileChange: ([media]) => {
89
- if (isBlobURL(media.url)) {
90
- return;
178
+ setHadUploadError(false);
179
+
180
+ // Multiple blocks can be using the same URL, so we
181
+ // should ensure we only fetch and upload each of them once.
182
+ const mediaUrls = new Set(blocksWithExternalMedia.map(block => {
183
+ const {
184
+ url
185
+ } = getMediaInfo(block);
186
+ return url;
187
+ }));
188
+
189
+ // Create an upload promise for each URL, that we can wait for in all
190
+ // blocks that make use of that media.
191
+ const uploadPromises = Object.fromEntries(Object.entries(fetchMedia([...mediaUrls])).map(([url, filePromise]) => {
192
+ const uploadPromise = filePromise.then(blob => new Promise((resolve, reject) => {
193
+ mediaUpload({
194
+ filesList: [blob],
195
+ onFileChange: ([media]) => {
196
+ if (isBlobURL(media.url)) {
197
+ return;
198
+ }
199
+ resolve(media);
200
+ },
201
+ onError() {
202
+ reject();
91
203
  }
92
- updateBlockAttributes(image.clientId, {
93
- id: media.id,
94
- url: media.url
95
- });
96
- resolve();
97
- },
98
- onError() {
99
- reject();
100
- }
101
- });
102
- })))).finally(() => {
204
+ });
205
+ }));
206
+ return [url, uploadPromise];
207
+ }));
208
+
209
+ // Wait for all blocks to be updated with library media.
210
+ Promise.allSettled(blocksWithExternalMedia.map(block => {
211
+ const {
212
+ url
213
+ } = getMediaInfo(block);
214
+ return uploadPromises[url].then(media => updateBlockWithUploadedMedia(block, media)).then(() => setIsAnimating(true)).catch(() => setHadUploadError(true));
215
+ })).finally(() => {
103
216
  setIsUploading(false);
104
217
  });
105
218
  }
@@ -115,16 +228,28 @@ export default function PostFormatPanel() {
115
228
  gap: '8px'
116
229
  },
117
230
  children: [/*#__PURE__*/_jsx(AnimatePresence, {
118
- children: externalImages.map(image => {
231
+ onExitComplete: () => setIsAnimating(false),
232
+ children: blocksWithExternalMedia.map(block => {
233
+ const {
234
+ url,
235
+ alt
236
+ } = getMediaInfo(block);
119
237
  return /*#__PURE__*/_jsx(Image, {
120
- ...image
121
- }, image.clientId);
238
+ clientId: block.clientId,
239
+ url: url,
240
+ alt: alt
241
+ }, block.clientId);
122
242
  })
123
- }), isUploading ? /*#__PURE__*/_jsx(Spinner, {}) : /*#__PURE__*/_jsx(Button, {
243
+ }), isUploading || isAnimating ? /*#__PURE__*/_jsx(Spinner, {}) : /*#__PURE__*/_jsx(Button
244
+ // TODO: Switch to `true` (40px size) if possible
245
+ , {
246
+ __next40pxDefaultSize: false,
124
247
  variant: "primary",
125
248
  onClick: uploadImages,
126
249
  children: __('Upload')
127
250
  })]
251
+ }), hadUploadError && /*#__PURE__*/_jsx("p", {
252
+ children: __('Upload failed, try again.')
128
253
  })]
129
254
  });
130
255
  }
@@ -1 +1 @@
1
- {"version":3,"names":["PanelBody","Button","Spinner","__unstableMotion","motion","__unstableAnimatePresence","AnimatePresence","useSelect","useDispatch","__","store","blockEditorStore","useState","isBlobURL","editorStore","jsx","_jsx","jsxs","_jsxs","flattenBlocks","blocks","result","forEach","block","push","innerBlocks","Image","selectBlock","img","tabIndex","role","onClick","clientId","onKeyDown","event","key","preventDefault","alt","attributes","src","url","animate","opacity","exit","scale","style","width","height","objectFit","borderRadius","cursor","whileHover","PostFormatPanel","isUploading","setIsUploading","editorBlocks","mediaUpload","select","getEditorBlocks","getSettings","externalImages","filter","name","id","updateBlockAttributes","length","panelBodyTitle","className","children","uploadImages","Promise","all","map","image","window","fetch","includes","then","response","blob","resolve","reject","filesList","onFileChange","media","onError","finally","initialOpen","title","display","flexWrap","gap","variant"],"sources":["@wordpress/editor/src/components/post-publish-panel/maybe-upload-media.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tPanelBody,\n\tButton,\n\tSpinner,\n\t__unstableMotion as motion,\n\t__unstableAnimatePresence as AnimatePresence,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useState } from '@wordpress/element';\nimport { isBlobURL } from '@wordpress/blob';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\n\nfunction flattenBlocks( blocks ) {\n\tconst result = [];\n\n\tblocks.forEach( ( block ) => {\n\t\tresult.push( block );\n\t\tresult.push( ...flattenBlocks( block.innerBlocks ) );\n\t} );\n\n\treturn result;\n}\n\nfunction Image( block ) {\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\treturn (\n\t\t<motion.img\n\t\t\ttabIndex={ 0 }\n\t\t\trole=\"button\"\n\t\t\taria-label={ __( 'Select image block.' ) }\n\t\t\tonClick={ () => {\n\t\t\t\tselectBlock( block.clientId );\n\t\t\t} }\n\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\t\t\tselectBlock( block.clientId );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} }\n\t\t\tkey={ block.clientId }\n\t\t\talt={ block.attributes.alt }\n\t\t\tsrc={ block.attributes.url }\n\t\t\tanimate={ { opacity: 1 } }\n\t\t\texit={ { opacity: 0, scale: 0 } }\n\t\t\tstyle={ {\n\t\t\t\twidth: '36px',\n\t\t\t\theight: '36px',\n\t\t\t\tobjectFit: 'cover',\n\t\t\t\tborderRadius: '2px',\n\t\t\t\tcursor: 'pointer',\n\t\t\t} }\n\t\t\twhileHover={ { scale: 1.08 } }\n\t\t/>\n\t);\n}\n\nexport default function PostFormatPanel() {\n\tconst [ isUploading, setIsUploading ] = useState( false );\n\tconst { editorBlocks, mediaUpload } = useSelect(\n\t\t( select ) => ( {\n\t\t\teditorBlocks: select( editorStore ).getEditorBlocks(),\n\t\t\tmediaUpload: select( blockEditorStore ).getSettings().mediaUpload,\n\t\t} ),\n\t\t[]\n\t);\n\tconst externalImages = flattenBlocks( editorBlocks ).filter(\n\t\t( block ) =>\n\t\t\tblock.name === 'core/image' &&\n\t\t\tblock.attributes.url &&\n\t\t\t! block.attributes.id\n\t);\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\n\tif ( ! mediaUpload || ! externalImages.length ) {\n\t\treturn null;\n\t}\n\n\tconst panelBodyTitle = [\n\t\t__( 'Suggestion:' ),\n\t\t<span className=\"editor-post-publish-panel__link\" key=\"label\">\n\t\t\t{ __( 'External media' ) }\n\t\t</span>,\n\t];\n\n\tfunction uploadImages() {\n\t\tsetIsUploading( true );\n\t\tPromise.all(\n\t\t\texternalImages.map( ( image ) =>\n\t\t\t\twindow\n\t\t\t\t\t.fetch(\n\t\t\t\t\t\timage.attributes.url.includes( '?' )\n\t\t\t\t\t\t\t? image.attributes.url\n\t\t\t\t\t\t\t: image.attributes.url + '?'\n\t\t\t\t\t)\n\t\t\t\t\t.then( ( response ) => response.blob() )\n\t\t\t\t\t.then(\n\t\t\t\t\t\t( blob ) =>\n\t\t\t\t\t\t\tnew Promise( ( resolve, reject ) => {\n\t\t\t\t\t\t\t\tmediaUpload( {\n\t\t\t\t\t\t\t\t\tfilesList: [ blob ],\n\t\t\t\t\t\t\t\t\tonFileChange: ( [ media ] ) => {\n\t\t\t\t\t\t\t\t\t\tif ( isBlobURL( media.url ) ) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tupdateBlockAttributes( image.clientId, {\n\t\t\t\t\t\t\t\t\t\t\tid: media.id,\n\t\t\t\t\t\t\t\t\t\t\turl: media.url,\n\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonError() {\n\t\t\t\t\t\t\t\t\t\treject();\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)\n\t\t\t)\n\t\t).finally( () => {\n\t\t\tsetIsUploading( false );\n\t\t} );\n\t}\n\n\treturn (\n\t\t<PanelBody initialOpen title={ panelBodyTitle }>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'Upload external images to the Media Library. Images from different domains may load slowly, display incorrectly, or be removed unexpectedly.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<div\n\t\t\t\tstyle={ {\n\t\t\t\t\tdisplay: 'inline-flex',\n\t\t\t\t\tflexWrap: 'wrap',\n\t\t\t\t\tgap: '8px',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{ externalImages.map( ( image ) => {\n\t\t\t\t\t\treturn <Image key={ image.clientId } { ...image } />;\n\t\t\t\t\t} ) }\n\t\t\t\t</AnimatePresence>\n\t\t\t\t{ isUploading ? (\n\t\t\t\t\t<Spinner />\n\t\t\t\t) : (\n\t\t\t\t\t<Button variant=\"primary\" onClick={ uploadImages }>\n\t\t\t\t\t\t{ __( 'Upload' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</PanelBody>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["PanelBody","Button","Spinner","__unstableMotion","motion","__unstableAnimatePresence","AnimatePresence","useSelect","useDispatch","__","store","blockEditorStore","useState","isBlobURL","fetchMedia","jsx","_jsx","jsxs","_jsxs","flattenBlocks","blocks","result","forEach","block","push","innerBlocks","hasExternalMedia","name","attributes","url","id","mediaUrl","mediaId","undefined","getMediaInfo","alt","mediaAlt","Image","clientId","selectBlock","img","tabIndex","role","onClick","onKeyDown","event","key","preventDefault","src","animate","opacity","exit","scale","style","width","height","objectFit","borderRadius","cursor","whileHover","MaybeUploadMediaPanel","isUploading","setIsUploading","isAnimating","setIsAnimating","hadUploadError","setHadUploadError","editorBlocks","mediaUpload","select","getBlocks","getSettings","blocksWithExternalMedia","filter","updateBlockAttributes","length","panelBodyTitle","className","children","updateBlockWithUploadedMedia","media","uploadImages","mediaUrls","Set","map","uploadPromises","Object","fromEntries","entries","filePromise","uploadPromise","then","blob","Promise","resolve","reject","filesList","onFileChange","onError","allSettled","catch","finally","initialOpen","title","display","flexWrap","gap","onExitComplete","__next40pxDefaultSize","variant"],"sources":["@wordpress/editor/src/components/post-publish-panel/maybe-upload-media.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tPanelBody,\n\tButton,\n\tSpinner,\n\t__unstableMotion as motion,\n\t__unstableAnimatePresence as AnimatePresence,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useState } from '@wordpress/element';\nimport { isBlobURL } from '@wordpress/blob';\n\n/**\n * Internal dependencies\n */\nimport { fetchMedia } from './media-util';\n\nfunction flattenBlocks( blocks ) {\n\tconst result = [];\n\n\tblocks.forEach( ( block ) => {\n\t\tresult.push( block );\n\t\tresult.push( ...flattenBlocks( block.innerBlocks ) );\n\t} );\n\n\treturn result;\n}\n\n/**\n * Determine whether a block has external media.\n *\n * Different blocks use different attribute names (and potentially\n * different logic as well) in determining whether the media is\n * present, and whether it's external.\n *\n * @param {{name: string, attributes: Object}} block The block.\n * @return {boolean?} Whether the block has external media\n */\nfunction hasExternalMedia( block ) {\n\tif ( block.name === 'core/image' || block.name === 'core/cover' ) {\n\t\treturn block.attributes.url && ! block.attributes.id;\n\t}\n\n\tif ( block.name === 'core/media-text' ) {\n\t\treturn block.attributes.mediaUrl && ! block.attributes.mediaId;\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Retrieve media info from a block.\n *\n * Different blocks use different attribute names, so we need this\n * function to normalize things into a consistent naming scheme.\n *\n * @param {{name: string, attributes: Object}} block The block.\n * @return {{url: ?string, alt: ?string, id: ?number}} The media info for the block.\n */\nfunction getMediaInfo( block ) {\n\tif ( block.name === 'core/image' || block.name === 'core/cover' ) {\n\t\tconst { url, alt, id } = block.attributes;\n\t\treturn { url, alt, id };\n\t}\n\n\tif ( block.name === 'core/media-text' ) {\n\t\tconst { mediaUrl: url, mediaAlt: alt, mediaId: id } = block.attributes;\n\t\treturn { url, alt, id };\n\t}\n\n\treturn {};\n}\n\n// Image component to represent a single image in the upload dialog.\nfunction Image( { clientId, alt, url } ) {\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\treturn (\n\t\t<motion.img\n\t\t\ttabIndex={ 0 }\n\t\t\trole=\"button\"\n\t\t\taria-label={ __( 'Select image block.' ) }\n\t\t\tonClick={ () => {\n\t\t\t\tselectBlock( clientId );\n\t\t\t} }\n\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\t\t\tselectBlock( clientId );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} }\n\t\t\tkey={ clientId }\n\t\t\talt={ alt }\n\t\t\tsrc={ url }\n\t\t\tanimate={ { opacity: 1 } }\n\t\t\texit={ { opacity: 0, scale: 0 } }\n\t\t\tstyle={ {\n\t\t\t\twidth: '36px',\n\t\t\t\theight: '36px',\n\t\t\t\tobjectFit: 'cover',\n\t\t\t\tborderRadius: '2px',\n\t\t\t\tcursor: 'pointer',\n\t\t\t} }\n\t\t\twhileHover={ { scale: 1.08 } }\n\t\t/>\n\t);\n}\n\nexport default function MaybeUploadMediaPanel() {\n\tconst [ isUploading, setIsUploading ] = useState( false );\n\tconst [ isAnimating, setIsAnimating ] = useState( false );\n\tconst [ hadUploadError, setHadUploadError ] = useState( false );\n\tconst { editorBlocks, mediaUpload } = useSelect(\n\t\t( select ) => ( {\n\t\t\teditorBlocks: select( blockEditorStore ).getBlocks(),\n\t\t\tmediaUpload: select( blockEditorStore ).getSettings().mediaUpload,\n\t\t} ),\n\t\t[]\n\t);\n\n\t// Get a list of blocks with external media.\n\tconst blocksWithExternalMedia = flattenBlocks( editorBlocks ).filter(\n\t\t( block ) => hasExternalMedia( block )\n\t);\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\n\tif ( ! mediaUpload || ! blocksWithExternalMedia.length ) {\n\t\treturn null;\n\t}\n\n\tconst panelBodyTitle = [\n\t\t__( 'Suggestion:' ),\n\t\t<span className=\"editor-post-publish-panel__link\" key=\"label\">\n\t\t\t{ __( 'External media' ) }\n\t\t</span>,\n\t];\n\n\t/**\n\t * Update an individual block to point to newly-added library media.\n\t *\n\t * Different blocks use different attribute names, so we need this\n\t * function to ensure we modify the correct attributes for each type.\n\t *\n\t * @param {{name: string, attributes: Object}} block The block.\n\t * @param {{id: number, url: string}} media Media library file info.\n\t */\n\tfunction updateBlockWithUploadedMedia( block, media ) {\n\t\tif ( block.name === 'core/image' || block.name === 'core/cover' ) {\n\t\t\tupdateBlockAttributes( block.clientId, {\n\t\t\t\tid: media.id,\n\t\t\t\turl: media.url,\n\t\t\t} );\n\t\t}\n\n\t\tif ( block.name === 'core/media-text' ) {\n\t\t\tupdateBlockAttributes( block.clientId, {\n\t\t\t\tmediaId: media.id,\n\t\t\t\tmediaUrl: media.url,\n\t\t\t} );\n\t\t}\n\t}\n\n\t// Handle fetching and uploading all external media in the post.\n\tfunction uploadImages() {\n\t\tsetIsUploading( true );\n\t\tsetHadUploadError( false );\n\n\t\t// Multiple blocks can be using the same URL, so we\n\t\t// should ensure we only fetch and upload each of them once.\n\t\tconst mediaUrls = new Set(\n\t\t\tblocksWithExternalMedia.map( ( block ) => {\n\t\t\t\tconst { url } = getMediaInfo( block );\n\t\t\t\treturn url;\n\t\t\t} )\n\t\t);\n\n\t\t// Create an upload promise for each URL, that we can wait for in all\n\t\t// blocks that make use of that media.\n\t\tconst uploadPromises = Object.fromEntries(\n\t\t\tObject.entries( fetchMedia( [ ...mediaUrls ] ) ).map(\n\t\t\t\t( [ url, filePromise ] ) => {\n\t\t\t\t\tconst uploadPromise = filePromise.then(\n\t\t\t\t\t\t( blob ) =>\n\t\t\t\t\t\t\tnew Promise( ( resolve, reject ) => {\n\t\t\t\t\t\t\t\tmediaUpload( {\n\t\t\t\t\t\t\t\t\tfilesList: [ blob ],\n\t\t\t\t\t\t\t\t\tonFileChange: ( [ media ] ) => {\n\t\t\t\t\t\t\t\t\t\tif ( isBlobURL( media.url ) ) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tresolve( media );\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonError() {\n\t\t\t\t\t\t\t\t\t\treject();\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);\n\n\t\t\t\t\treturn [ url, uploadPromise ];\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\n\t\t// Wait for all blocks to be updated with library media.\n\t\tPromise.allSettled(\n\t\t\tblocksWithExternalMedia.map( ( block ) => {\n\t\t\t\tconst { url } = getMediaInfo( block );\n\n\t\t\t\treturn uploadPromises[ url ]\n\t\t\t\t\t.then( ( media ) =>\n\t\t\t\t\t\tupdateBlockWithUploadedMedia( block, media )\n\t\t\t\t\t)\n\t\t\t\t\t.then( () => setIsAnimating( true ) )\n\t\t\t\t\t.catch( () => setHadUploadError( true ) );\n\t\t\t} )\n\t\t).finally( () => {\n\t\t\tsetIsUploading( false );\n\t\t} );\n\t}\n\n\treturn (\n\t\t<PanelBody initialOpen title={ panelBodyTitle }>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'Upload external images to the Media Library. Images from different domains may load slowly, display incorrectly, or be removed unexpectedly.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<div\n\t\t\t\tstyle={ {\n\t\t\t\t\tdisplay: 'inline-flex',\n\t\t\t\t\tflexWrap: 'wrap',\n\t\t\t\t\tgap: '8px',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<AnimatePresence\n\t\t\t\t\tonExitComplete={ () => setIsAnimating( false ) }\n\t\t\t\t>\n\t\t\t\t\t{ blocksWithExternalMedia.map( ( block ) => {\n\t\t\t\t\t\tconst { url, alt } = getMediaInfo( block );\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tkey={ block.clientId }\n\t\t\t\t\t\t\t\tclientId={ block.clientId }\n\t\t\t\t\t\t\t\turl={ url }\n\t\t\t\t\t\t\t\talt={ alt }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</AnimatePresence>\n\t\t\t\t{ isUploading || isAnimating ? (\n\t\t\t\t\t<Spinner />\n\t\t\t\t) : (\n\t\t\t\t\t<Button\n\t\t\t\t\t\t// TODO: Switch to `true` (40px size) if possible\n\t\t\t\t\t\t__next40pxDefaultSize={ false }\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\tonClick={ uploadImages }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Upload' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t\t{ hadUploadError && <p>{ __( 'Upload failed, try again.' ) }</p> }\n\t\t</PanelBody>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { v4 as uuid } from 'uuid';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { getFilename } from '@wordpress/url';
10
+
11
+ /**
12
+ * Generate a list of unique basenames given a list of URLs.
13
+ *
14
+ * We want all basenames to be unique, since sometimes the extension
15
+ * doesn't reflect the mime type, and may end up getting changed by
16
+ * the server, on upload.
17
+ *
18
+ * @param {string[]} urls The list of URLs
19
+ * @return {Record< string, string >} A URL => basename record.
20
+ */
21
+ export function generateUniqueBasenames(urls) {
22
+ const basenames = new Set();
23
+ return Object.fromEntries(urls.map(url => {
24
+ // We prefer to match the remote filename, if possible.
25
+ const filename = getFilename(url);
26
+ let basename = '';
27
+ if (filename) {
28
+ const parts = filename.split('.');
29
+ if (parts.length > 1) {
30
+ // Assume the last part is the extension.
31
+ parts.pop();
32
+ }
33
+ basename = parts.join('.');
34
+ }
35
+ if (!basename) {
36
+ // It looks like we don't have a basename, so let's use a UUID.
37
+ basename = uuid();
38
+ }
39
+ if (basenames.has(basename)) {
40
+ // Append a UUID to deduplicate the basename.
41
+ // The server will try to deduplicate on its own if we don't do this,
42
+ // but it may run into a race condition
43
+ // (see https://github.com/WordPress/gutenberg/issues/64899).
44
+ // Deduplicating the filenames before uploading is safer.
45
+ basename = `${basename}-${uuid()}`;
46
+ }
47
+ basenames.add(basename);
48
+ return [url, basename];
49
+ }));
50
+ }
51
+
52
+ /**
53
+ * Fetch a list of URLs, turning those into promises for files with
54
+ * unique filenames.
55
+ *
56
+ * @param {string[]} urls The list of URLs
57
+ * @return {Record< string, Promise< File > >} A URL => File promise record.
58
+ */
59
+ export function fetchMedia(urls) {
60
+ return Object.fromEntries(Object.entries(generateUniqueBasenames(urls)).map(([url, basename]) => {
61
+ const filePromise = window.fetch(url.includes('?') ? url : url + '?').then(response => response.blob()).then(blob => {
62
+ // The server will reject the upload if it doesn't have an extension,
63
+ // even though it'll rewrite the file name to match the mime type.
64
+ // Here we provide it with a safe extension to get it past that check.
65
+ return new File([blob], `${basename}.png`, {
66
+ type: blob.type
67
+ });
68
+ });
69
+ return [url, filePromise];
70
+ }));
71
+ }
72
+ //# sourceMappingURL=media-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["v4","uuid","getFilename","generateUniqueBasenames","urls","basenames","Set","Object","fromEntries","map","url","filename","basename","parts","split","length","pop","join","has","add","fetchMedia","entries","filePromise","window","fetch","includes","then","response","blob","File","type"],"sources":["@wordpress/editor/src/components/post-publish-panel/media-util.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { v4 as uuid } from 'uuid';\n\n/**\n * WordPress dependencies\n */\nimport { getFilename } from '@wordpress/url';\n\n/**\n * Generate a list of unique basenames given a list of URLs.\n *\n * We want all basenames to be unique, since sometimes the extension\n * doesn't reflect the mime type, and may end up getting changed by\n * the server, on upload.\n *\n * @param {string[]} urls The list of URLs\n * @return {Record< string, string >} A URL => basename record.\n */\nexport function generateUniqueBasenames( urls ) {\n\tconst basenames = new Set();\n\n\treturn Object.fromEntries(\n\t\turls.map( ( url ) => {\n\t\t\t// We prefer to match the remote filename, if possible.\n\t\t\tconst filename = getFilename( url );\n\t\t\tlet basename = '';\n\n\t\t\tif ( filename ) {\n\t\t\t\tconst parts = filename.split( '.' );\n\t\t\t\tif ( parts.length > 1 ) {\n\t\t\t\t\t// Assume the last part is the extension.\n\t\t\t\t\tparts.pop();\n\t\t\t\t}\n\t\t\t\tbasename = parts.join( '.' );\n\t\t\t}\n\n\t\t\tif ( ! basename ) {\n\t\t\t\t// It looks like we don't have a basename, so let's use a UUID.\n\t\t\t\tbasename = uuid();\n\t\t\t}\n\n\t\t\tif ( basenames.has( basename ) ) {\n\t\t\t\t// Append a UUID to deduplicate the basename.\n\t\t\t\t// The server will try to deduplicate on its own if we don't do this,\n\t\t\t\t// but it may run into a race condition\n\t\t\t\t// (see https://github.com/WordPress/gutenberg/issues/64899).\n\t\t\t\t// Deduplicating the filenames before uploading is safer.\n\t\t\t\tbasename = `${ basename }-${ uuid() }`;\n\t\t\t}\n\n\t\t\tbasenames.add( basename );\n\n\t\t\treturn [ url, basename ];\n\t\t} )\n\t);\n}\n\n/**\n * Fetch a list of URLs, turning those into promises for files with\n * unique filenames.\n *\n * @param {string[]} urls The list of URLs\n * @return {Record< string, Promise< File > >} A URL => File promise record.\n */\nexport function fetchMedia( urls ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( generateUniqueBasenames( urls ) ).map(\n\t\t\t( [ url, basename ] ) => {\n\t\t\t\tconst filePromise = window\n\t\t\t\t\t.fetch( url.includes( '?' ) ? url : url + '?' )\n\t\t\t\t\t.then( ( response ) => response.blob() )\n\t\t\t\t\t.then( ( blob ) => {\n\t\t\t\t\t\t// The server will reject the upload if it doesn't have an extension,\n\t\t\t\t\t\t// even though it'll rewrite the file name to match the mime type.\n\t\t\t\t\t\t// Here we provide it with a safe extension to get it past that check.\n\t\t\t\t\t\treturn new File( [ blob ], `${ basename }.png`, {\n\t\t\t\t\t\t\ttype: blob.type,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\n\t\t\t\treturn [ url, filePromise ];\n\t\t\t}\n\t\t)\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAE,IAAIC,IAAI,QAAQ,MAAM;;AAEjC;AACA;AACA;AACA,SAASC,WAAW,QAAQ,gBAAgB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CAAEC,IAAI,EAAG;EAC/C,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAC,CAAC;EAE3B,OAAOC,MAAM,CAACC,WAAW,CACxBJ,IAAI,CAACK,GAAG,CAAIC,GAAG,IAAM;IACpB;IACA,MAAMC,QAAQ,GAAGT,WAAW,CAAEQ,GAAI,CAAC;IACnC,IAAIE,QAAQ,GAAG,EAAE;IAEjB,IAAKD,QAAQ,EAAG;MACf,MAAME,KAAK,GAAGF,QAAQ,CAACG,KAAK,CAAE,GAAI,CAAC;MACnC,IAAKD,KAAK,CAACE,MAAM,GAAG,CAAC,EAAG;QACvB;QACAF,KAAK,CAACG,GAAG,CAAC,CAAC;MACZ;MACAJ,QAAQ,GAAGC,KAAK,CAACI,IAAI,CAAE,GAAI,CAAC;IAC7B;IAEA,IAAK,CAAEL,QAAQ,EAAG;MACjB;MACAA,QAAQ,GAAGX,IAAI,CAAC,CAAC;IAClB;IAEA,IAAKI,SAAS,CAACa,GAAG,CAAEN,QAAS,CAAC,EAAG;MAChC;MACA;MACA;MACA;MACA;MACAA,QAAQ,GAAI,GAAGA,QAAU,IAAIX,IAAI,CAAC,CAAG,EAAC;IACvC;IAEAI,SAAS,CAACc,GAAG,CAAEP,QAAS,CAAC;IAEzB,OAAO,CAAEF,GAAG,EAAEE,QAAQ,CAAE;EACzB,CAAE,CACH,CAAC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASQ,UAAUA,CAAEhB,IAAI,EAAG;EAClC,OAAOG,MAAM,CAACC,WAAW,CACxBD,MAAM,CAACc,OAAO,CAAElB,uBAAuB,CAAEC,IAAK,CAAE,CAAC,CAACK,GAAG,CACpD,CAAE,CAAEC,GAAG,EAAEE,QAAQ,CAAE,KAAM;IACxB,MAAMU,WAAW,GAAGC,MAAM,CACxBC,KAAK,CAAEd,GAAG,CAACe,QAAQ,CAAE,GAAI,CAAC,GAAGf,GAAG,GAAGA,GAAG,GAAG,GAAI,CAAC,CAC9CgB,IAAI,CAAIC,QAAQ,IAAMA,QAAQ,CAACC,IAAI,CAAC,CAAE,CAAC,CACvCF,IAAI,CAAIE,IAAI,IAAM;MAClB;MACA;MACA;MACA,OAAO,IAAIC,IAAI,CAAE,CAAED,IAAI,CAAE,EAAG,GAAGhB,QAAU,MAAK,EAAE;QAC/CkB,IAAI,EAAEF,IAAI,CAACE;MACZ,CAAE,CAAC;IACJ,CAAE,CAAC;IAEJ,OAAO,CAAEpB,GAAG,EAAEY,WAAW,CAAE;EAC5B,CACD,CACD,CAAC;AACF","ignoreList":[]}
@@ -157,7 +157,8 @@ export default function PostStatus() {
157
157
  popoverProps: popoverProps,
158
158
  focusOnMount: true,
159
159
  renderToggle: ({
160
- onToggle
160
+ onToggle,
161
+ isOpen
161
162
  }) => /*#__PURE__*/_jsx(Button, {
162
163
  variant: "tertiary",
163
164
  size: "compact",
@@ -165,7 +166,8 @@ export default function PostStatus() {
165
166
  icon: postStatusesInfo[status]?.icon,
166
167
  "aria-label": sprintf(
167
168
  // translators: %s: Current post status.
168
- __('Change post status: %s'), postStatusesInfo[status]?.label),
169
+ __('Change status: %s'), postStatusesInfo[status]?.label),
170
+ "aria-expanded": isOpen,
169
171
  children: postStatusesInfo[status]?.label
170
172
  }),
171
173
  renderContent: ({
@@ -1 +1 @@
1
- {"version":3,"names":["Button","CheckboxControl","Dropdown","__experimentalVStack","VStack","TextControl","RadioControl","__","sprintf","useDispatch","useSelect","useState","useMemo","store","coreStore","__experimentalInspectorPopoverHeader","InspectorPopoverHeader","useInstanceId","drafts","published","scheduled","pending","notAllowed","TEMPLATE_POST_TYPE","TEMPLATE_PART_POST_TYPE","PATTERN_POST_TYPE","NAVIGATION_POST_TYPE","PostPanelRow","PostSticky","PrivatePostSchedule","editorStore","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","postStatusesInfo","label","icon","draft","private","future","publish","STATUS_OPTIONS","value","description","DESIGN_POST_TYPES","PostStatus","status","date","password","postId","postType","canEdit","select","_getCurrentPost$_link","getEditedPostAttribute","getCurrentPostId","getCurrentPostType","getCurrentPost","_links","showPassword","setShowPassword","passwordInputId","editEntityRecord","popoverAnchor","setPopoverAnchor","popoverProps","anchor","headerTitle","placement","offset","shift","includes","updatePost","newStatus","newPassword","newDate","handleTogglePassword","handleStatus","Date","ref","children","className","contentClassName","focusOnMount","renderToggle","onToggle","variant","size","onClick","renderContent","onClose","title","spacing","hideLabelFromVision","options","onChange","selected","showPopoverHeaderActions","isCompact","as","__nextHasNoMarginBottom","help","checked","placeholder","type","id","__next40pxDefaultSize","maxLength"],"sources":["@wordpress/editor/src/components/post-status/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tCheckboxControl,\n\tDropdown,\n\t__experimentalVStack as VStack,\n\tTextControl,\n\tRadioControl,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useState, useMemo } from '@wordpress/element';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { __experimentalInspectorPopoverHeader as InspectorPopoverHeader } from '@wordpress/block-editor';\nimport { useInstanceId } from '@wordpress/compose';\nimport {\n\tdrafts,\n\tpublished,\n\tscheduled,\n\tpending,\n\tnotAllowed,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport {\n\tTEMPLATE_POST_TYPE,\n\tTEMPLATE_PART_POST_TYPE,\n\tPATTERN_POST_TYPE,\n\tNAVIGATION_POST_TYPE,\n} from '../../store/constants';\nimport PostPanelRow from '../post-panel-row';\nimport PostSticky from '../post-sticky';\nimport { PrivatePostSchedule } from '../post-schedule';\nimport { store as editorStore } from '../../store';\n\nconst postStatusesInfo = {\n\t'auto-draft': { label: __( 'Draft' ), icon: drafts },\n\tdraft: { label: __( 'Draft' ), icon: drafts },\n\tpending: { label: __( 'Pending' ), icon: pending },\n\tprivate: { label: __( 'Private' ), icon: notAllowed },\n\tfuture: { label: __( 'Scheduled' ), icon: scheduled },\n\tpublish: { label: __( 'Published' ), icon: published },\n};\n\nexport const STATUS_OPTIONS = [\n\t{\n\t\tlabel: __( 'Draft' ),\n\t\tvalue: 'draft',\n\t\tdescription: __( 'Not ready to publish.' ),\n\t},\n\t{\n\t\tlabel: __( 'Pending' ),\n\t\tvalue: 'pending',\n\t\tdescription: __( 'Waiting for review before publishing.' ),\n\t},\n\t{\n\t\tlabel: __( 'Private' ),\n\t\tvalue: 'private',\n\t\tdescription: __( 'Only visible to site admins and editors.' ),\n\t},\n\t{\n\t\tlabel: __( 'Scheduled' ),\n\t\tvalue: 'future',\n\t\tdescription: __( 'Publish automatically on a chosen date.' ),\n\t},\n\t{\n\t\tlabel: __( 'Published' ),\n\t\tvalue: 'publish',\n\t\tdescription: __( 'Visible to everyone.' ),\n\t},\n];\n\nconst DESIGN_POST_TYPES = [\n\tTEMPLATE_POST_TYPE,\n\tTEMPLATE_PART_POST_TYPE,\n\tPATTERN_POST_TYPE,\n\tNAVIGATION_POST_TYPE,\n];\n\nexport default function PostStatus() {\n\tconst { status, date, password, postId, postType, canEdit } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetCurrentPostType,\n\t\t\t\tgetCurrentPost,\n\t\t\t} = select( editorStore );\n\t\t\treturn {\n\t\t\t\tstatus: getEditedPostAttribute( 'status' ),\n\t\t\t\tdate: getEditedPostAttribute( 'date' ),\n\t\t\t\tpassword: getEditedPostAttribute( 'password' ),\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostType: getCurrentPostType(),\n\t\t\t\tcanEdit:\n\t\t\t\t\tgetCurrentPost()._links?.[ 'wp:action-publish' ] ?? false,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\tconst [ showPassword, setShowPassword ] = useState( !! password );\n\tconst passwordInputId = useInstanceId(\n\t\tPostStatus,\n\t\t'editor-change-status__password-input'\n\t);\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\t// Memoize popoverProps to avoid returning a new object every time.\n\tconst popoverProps = useMemo(\n\t\t() => ( {\n\t\t\t// Anchor the popover to the middle of the entire row so that it doesn't\n\t\t\t// move around when the label changes.\n\t\t\tanchor: popoverAnchor,\n\t\t\t'aria-label': __( 'Status & visibility' ),\n\t\t\theaderTitle: __( 'Status & visibility' ),\n\t\t\tplacement: 'left-start',\n\t\t\toffset: 36,\n\t\t\tshift: true,\n\t\t} ),\n\t\t[ popoverAnchor ]\n\t);\n\n\tif ( DESIGN_POST_TYPES.includes( postType ) ) {\n\t\treturn null;\n\t}\n\n\tconst updatePost = ( {\n\t\tstatus: newStatus = status,\n\t\tpassword: newPassword = password,\n\t\tdate: newDate = date,\n\t} ) => {\n\t\teditEntityRecord( 'postType', postType, postId, {\n\t\t\tstatus: newStatus,\n\t\t\tdate: newDate,\n\t\t\tpassword: newPassword,\n\t\t} );\n\t};\n\n\tconst handleTogglePassword = ( value ) => {\n\t\tsetShowPassword( value );\n\t\tif ( ! value ) {\n\t\t\tupdatePost( { password: '' } );\n\t\t}\n\t};\n\n\tconst handleStatus = ( value ) => {\n\t\tlet newDate = date;\n\t\tlet newPassword = password;\n\t\tif ( status === 'future' && new Date( date ) > new Date() ) {\n\t\t\tnewDate = null;\n\t\t}\n\t\tif ( value === 'private' && password ) {\n\t\t\tnewPassword = '';\n\t\t}\n\t\tupdatePost( {\n\t\t\tstatus: value,\n\t\t\tdate: newDate,\n\t\t\tpassword: newPassword,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<PostPanelRow label={ __( 'Status' ) } ref={ setPopoverAnchor }>\n\t\t\t{ canEdit ? (\n\t\t\t\t<Dropdown\n\t\t\t\t\tclassName=\"editor-post-status\"\n\t\t\t\t\tcontentClassName=\"editor-change-status__content\"\n\t\t\t\t\tpopoverProps={ popoverProps }\n\t\t\t\t\tfocusOnMount\n\t\t\t\t\trenderToggle={ ( { onToggle } ) => (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t\t\tonClick={ onToggle }\n\t\t\t\t\t\t\ticon={ postStatusesInfo[ status ]?.icon }\n\t\t\t\t\t\t\taria-label={ sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: Current post status.\n\t\t\t\t\t\t\t\t__( 'Change post status: %s' ),\n\t\t\t\t\t\t\t\tpostStatusesInfo[ status ]?.label\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ postStatusesInfo[ status ]?.label }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t\trenderContent={ ( { onClose } ) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<InspectorPopoverHeader\n\t\t\t\t\t\t\t\ttitle={ __( 'Status & visibility' ) }\n\t\t\t\t\t\t\t\tonClose={ onClose }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<form>\n\t\t\t\t\t\t\t\t<VStack spacing={ 4 }>\n\t\t\t\t\t\t\t\t\t<RadioControl\n\t\t\t\t\t\t\t\t\t\tclassName=\"editor-change-status__options\"\n\t\t\t\t\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Status' ) }\n\t\t\t\t\t\t\t\t\t\toptions={ STATUS_OPTIONS }\n\t\t\t\t\t\t\t\t\t\tonChange={ handleStatus }\n\t\t\t\t\t\t\t\t\t\tselected={\n\t\t\t\t\t\t\t\t\t\t\tstatus === 'auto-draft'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'draft'\n\t\t\t\t\t\t\t\t\t\t\t\t: status\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{ status === 'future' && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"editor-change-status__publish-date-wrapper\">\n\t\t\t\t\t\t\t\t\t\t\t<PrivatePostSchedule\n\t\t\t\t\t\t\t\t\t\t\t\tshowPopoverHeaderActions={\n\t\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tisCompact\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ status !== 'private' && (\n\t\t\t\t\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\t\t\t\t\tas=\"fieldset\"\n\t\t\t\t\t\t\t\t\t\t\tspacing={ 4 }\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"editor-change-status__password-fieldset\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'Password protected'\n\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'Only visible to those who know the password'\n\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\tchecked={ showPassword }\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleTogglePassword\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t{ showPassword && (\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"editor-change-status__password-input\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Password'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdatePost( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpassword: value,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={ password }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Use a secure password'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={ passwordInputId }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxLength={ 255 }\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t<PostSticky />\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"editor-post-status is-read-only\">\n\t\t\t\t\t{ postStatusesInfo[ status ]?.label }\n\t\t\t\t</div>\n\t\t\t) }\n\t\t</PostPanelRow>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Button","CheckboxControl","Dropdown","__experimentalVStack","VStack","TextControl","RadioControl","__","sprintf","useDispatch","useSelect","useState","useMemo","store","coreStore","__experimentalInspectorPopoverHeader","InspectorPopoverHeader","useInstanceId","drafts","published","scheduled","pending","notAllowed","TEMPLATE_POST_TYPE","TEMPLATE_PART_POST_TYPE","PATTERN_POST_TYPE","NAVIGATION_POST_TYPE","PostPanelRow","PostSticky","PrivatePostSchedule","editorStore","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","postStatusesInfo","label","icon","draft","private","future","publish","STATUS_OPTIONS","value","description","DESIGN_POST_TYPES","PostStatus","status","date","password","postId","postType","canEdit","select","_getCurrentPost$_link","getEditedPostAttribute","getCurrentPostId","getCurrentPostType","getCurrentPost","_links","showPassword","setShowPassword","passwordInputId","editEntityRecord","popoverAnchor","setPopoverAnchor","popoverProps","anchor","headerTitle","placement","offset","shift","includes","updatePost","newStatus","newPassword","newDate","handleTogglePassword","handleStatus","Date","ref","children","className","contentClassName","focusOnMount","renderToggle","onToggle","isOpen","variant","size","onClick","renderContent","onClose","title","spacing","hideLabelFromVision","options","onChange","selected","showPopoverHeaderActions","isCompact","as","__nextHasNoMarginBottom","help","checked","placeholder","type","id","__next40pxDefaultSize","maxLength"],"sources":["@wordpress/editor/src/components/post-status/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tCheckboxControl,\n\tDropdown,\n\t__experimentalVStack as VStack,\n\tTextControl,\n\tRadioControl,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useState, useMemo } from '@wordpress/element';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { __experimentalInspectorPopoverHeader as InspectorPopoverHeader } from '@wordpress/block-editor';\nimport { useInstanceId } from '@wordpress/compose';\nimport {\n\tdrafts,\n\tpublished,\n\tscheduled,\n\tpending,\n\tnotAllowed,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport {\n\tTEMPLATE_POST_TYPE,\n\tTEMPLATE_PART_POST_TYPE,\n\tPATTERN_POST_TYPE,\n\tNAVIGATION_POST_TYPE,\n} from '../../store/constants';\nimport PostPanelRow from '../post-panel-row';\nimport PostSticky from '../post-sticky';\nimport { PrivatePostSchedule } from '../post-schedule';\nimport { store as editorStore } from '../../store';\n\nconst postStatusesInfo = {\n\t'auto-draft': { label: __( 'Draft' ), icon: drafts },\n\tdraft: { label: __( 'Draft' ), icon: drafts },\n\tpending: { label: __( 'Pending' ), icon: pending },\n\tprivate: { label: __( 'Private' ), icon: notAllowed },\n\tfuture: { label: __( 'Scheduled' ), icon: scheduled },\n\tpublish: { label: __( 'Published' ), icon: published },\n};\n\nexport const STATUS_OPTIONS = [\n\t{\n\t\tlabel: __( 'Draft' ),\n\t\tvalue: 'draft',\n\t\tdescription: __( 'Not ready to publish.' ),\n\t},\n\t{\n\t\tlabel: __( 'Pending' ),\n\t\tvalue: 'pending',\n\t\tdescription: __( 'Waiting for review before publishing.' ),\n\t},\n\t{\n\t\tlabel: __( 'Private' ),\n\t\tvalue: 'private',\n\t\tdescription: __( 'Only visible to site admins and editors.' ),\n\t},\n\t{\n\t\tlabel: __( 'Scheduled' ),\n\t\tvalue: 'future',\n\t\tdescription: __( 'Publish automatically on a chosen date.' ),\n\t},\n\t{\n\t\tlabel: __( 'Published' ),\n\t\tvalue: 'publish',\n\t\tdescription: __( 'Visible to everyone.' ),\n\t},\n];\n\nconst DESIGN_POST_TYPES = [\n\tTEMPLATE_POST_TYPE,\n\tTEMPLATE_PART_POST_TYPE,\n\tPATTERN_POST_TYPE,\n\tNAVIGATION_POST_TYPE,\n];\n\nexport default function PostStatus() {\n\tconst { status, date, password, postId, postType, canEdit } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetCurrentPostType,\n\t\t\t\tgetCurrentPost,\n\t\t\t} = select( editorStore );\n\t\t\treturn {\n\t\t\t\tstatus: getEditedPostAttribute( 'status' ),\n\t\t\t\tdate: getEditedPostAttribute( 'date' ),\n\t\t\t\tpassword: getEditedPostAttribute( 'password' ),\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostType: getCurrentPostType(),\n\t\t\t\tcanEdit:\n\t\t\t\t\tgetCurrentPost()._links?.[ 'wp:action-publish' ] ?? false,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\tconst [ showPassword, setShowPassword ] = useState( !! password );\n\tconst passwordInputId = useInstanceId(\n\t\tPostStatus,\n\t\t'editor-change-status__password-input'\n\t);\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\t// Memoize popoverProps to avoid returning a new object every time.\n\tconst popoverProps = useMemo(\n\t\t() => ( {\n\t\t\t// Anchor the popover to the middle of the entire row so that it doesn't\n\t\t\t// move around when the label changes.\n\t\t\tanchor: popoverAnchor,\n\t\t\t'aria-label': __( 'Status & visibility' ),\n\t\t\theaderTitle: __( 'Status & visibility' ),\n\t\t\tplacement: 'left-start',\n\t\t\toffset: 36,\n\t\t\tshift: true,\n\t\t} ),\n\t\t[ popoverAnchor ]\n\t);\n\n\tif ( DESIGN_POST_TYPES.includes( postType ) ) {\n\t\treturn null;\n\t}\n\n\tconst updatePost = ( {\n\t\tstatus: newStatus = status,\n\t\tpassword: newPassword = password,\n\t\tdate: newDate = date,\n\t} ) => {\n\t\teditEntityRecord( 'postType', postType, postId, {\n\t\t\tstatus: newStatus,\n\t\t\tdate: newDate,\n\t\t\tpassword: newPassword,\n\t\t} );\n\t};\n\n\tconst handleTogglePassword = ( value ) => {\n\t\tsetShowPassword( value );\n\t\tif ( ! value ) {\n\t\t\tupdatePost( { password: '' } );\n\t\t}\n\t};\n\n\tconst handleStatus = ( value ) => {\n\t\tlet newDate = date;\n\t\tlet newPassword = password;\n\t\tif ( status === 'future' && new Date( date ) > new Date() ) {\n\t\t\tnewDate = null;\n\t\t}\n\t\tif ( value === 'private' && password ) {\n\t\t\tnewPassword = '';\n\t\t}\n\t\tupdatePost( {\n\t\t\tstatus: value,\n\t\t\tdate: newDate,\n\t\t\tpassword: newPassword,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<PostPanelRow label={ __( 'Status' ) } ref={ setPopoverAnchor }>\n\t\t\t{ canEdit ? (\n\t\t\t\t<Dropdown\n\t\t\t\t\tclassName=\"editor-post-status\"\n\t\t\t\t\tcontentClassName=\"editor-change-status__content\"\n\t\t\t\t\tpopoverProps={ popoverProps }\n\t\t\t\t\tfocusOnMount\n\t\t\t\t\trenderToggle={ ( { onToggle, isOpen } ) => (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t\t\tonClick={ onToggle }\n\t\t\t\t\t\t\ticon={ postStatusesInfo[ status ]?.icon }\n\t\t\t\t\t\t\taria-label={ sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: Current post status.\n\t\t\t\t\t\t\t\t__( 'Change status: %s' ),\n\t\t\t\t\t\t\t\tpostStatusesInfo[ status ]?.label\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ postStatusesInfo[ status ]?.label }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t\trenderContent={ ( { onClose } ) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<InspectorPopoverHeader\n\t\t\t\t\t\t\t\ttitle={ __( 'Status & visibility' ) }\n\t\t\t\t\t\t\t\tonClose={ onClose }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<form>\n\t\t\t\t\t\t\t\t<VStack spacing={ 4 }>\n\t\t\t\t\t\t\t\t\t<RadioControl\n\t\t\t\t\t\t\t\t\t\tclassName=\"editor-change-status__options\"\n\t\t\t\t\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Status' ) }\n\t\t\t\t\t\t\t\t\t\toptions={ STATUS_OPTIONS }\n\t\t\t\t\t\t\t\t\t\tonChange={ handleStatus }\n\t\t\t\t\t\t\t\t\t\tselected={\n\t\t\t\t\t\t\t\t\t\t\tstatus === 'auto-draft'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'draft'\n\t\t\t\t\t\t\t\t\t\t\t\t: status\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{ status === 'future' && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"editor-change-status__publish-date-wrapper\">\n\t\t\t\t\t\t\t\t\t\t\t<PrivatePostSchedule\n\t\t\t\t\t\t\t\t\t\t\t\tshowPopoverHeaderActions={\n\t\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tisCompact\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ status !== 'private' && (\n\t\t\t\t\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\t\t\t\t\tas=\"fieldset\"\n\t\t\t\t\t\t\t\t\t\t\tspacing={ 4 }\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"editor-change-status__password-fieldset\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'Password protected'\n\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'Only visible to those who know the password'\n\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\tchecked={ showPassword }\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleTogglePassword\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t{ showPassword && (\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"editor-change-status__password-input\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Password'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdatePost( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpassword: value,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={ password }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Use a secure password'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={ passwordInputId }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxLength={ 255 }\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t<PostSticky />\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"editor-post-status is-read-only\">\n\t\t\t\t\t{ postStatusesInfo[ status ]?.label }\n\t\t\t\t</div>\n\t\t\t) }\n\t\t</PostPanelRow>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -341,7 +341,10 @@ export function HierarchicalTermSelector({
341
341
  "aria-label": groupLabel,
342
342
  children: renderTerms('' !== filterValue ? filteredTermsTree : availableTermsTree)
343
343
  }), !loading && hasCreateAction && /*#__PURE__*/_jsx(FlexItem, {
344
- children: /*#__PURE__*/_jsx(Button, {
344
+ children: /*#__PURE__*/_jsx(Button
345
+ // TODO: Switch to `true` (40px size) if possible
346
+ , {
347
+ __next40pxDefaultSize: false,
345
348
  onClick: onToggleForm,
346
349
  className: "editor-post-taxonomies__hierarchical-terms-add",
347
350
  "aria-expanded": showForm,