@wordpress/editor 14.49.1 → 14.51.1-next.v.202607070741.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 (262) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/build/components/collab-sidebar/format.cjs +83 -0
  3. package/build/components/collab-sidebar/format.cjs.map +7 -0
  4. package/build/components/collab-sidebar/hooks.cjs +117 -16
  5. package/build/components/collab-sidebar/hooks.cjs.map +2 -2
  6. package/build/components/collab-sidebar/index.cjs +18 -2
  7. package/build/components/collab-sidebar/index.cjs.map +2 -2
  8. package/build/components/collab-sidebar/note-highlight-styles.cjs +67 -0
  9. package/build/components/collab-sidebar/note-highlight-styles.cjs.map +7 -0
  10. package/build/components/collab-sidebar/utils.cjs +139 -0
  11. package/build/components/collab-sidebar/utils.cjs.map +2 -2
  12. package/build/components/collaborators-presence/use-collaborator-notifications.cjs +55 -30
  13. package/build/components/collaborators-presence/use-collaborator-notifications.cjs.map +2 -2
  14. package/build/components/commands/index.cjs +99 -3
  15. package/build/components/commands/index.cjs.map +2 -2
  16. package/build/components/document-bar/index.cjs +28 -34
  17. package/build/components/document-bar/index.cjs.map +2 -2
  18. package/build/components/entities-saved-states/index.cjs +1 -4
  19. package/build/components/entities-saved-states/index.cjs.map +2 -2
  20. package/build/components/header/index.cjs +1 -8
  21. package/build/components/header/index.cjs.map +2 -2
  22. package/build/components/media-categories/index.cjs +92 -6
  23. package/build/components/media-categories/index.cjs.map +2 -2
  24. package/build/components/page-attributes/parent.cjs +0 -1
  25. package/build/components/page-attributes/parent.cjs.map +2 -2
  26. package/build/components/post-author/combobox.cjs +0 -1
  27. package/build/components/post-author/combobox.cjs.map +2 -2
  28. package/build/components/post-author/select.cjs +0 -1
  29. package/build/components/post-author/select.cjs.map +2 -2
  30. package/build/components/post-preview-button/index.cjs +29 -2
  31. package/build/components/post-preview-button/index.cjs.map +2 -2
  32. package/build/components/post-publish-panel/maybe-upload-media.cjs +15 -26
  33. package/build/components/post-publish-panel/maybe-upload-media.cjs.map +3 -3
  34. package/build/components/post-revisions-preview/revisions-slider.cjs +3 -1
  35. package/build/components/post-revisions-preview/revisions-slider.cjs.map +2 -2
  36. package/build/components/post-taxonomies/flat-term-selector.cjs +0 -1
  37. package/build/components/post-taxonomies/flat-term-selector.cjs.map +2 -2
  38. package/build/components/post-taxonomies/hierarchical-term-selector.cjs +0 -2
  39. package/build/components/post-taxonomies/hierarchical-term-selector.cjs.map +2 -2
  40. package/build/components/post-template/classic-theme.cjs +0 -1
  41. package/build/components/post-template/classic-theme.cjs.map +2 -2
  42. package/build/components/preferences-modal/index.cjs +54 -28
  43. package/build/components/preferences-modal/index.cjs.map +2 -2
  44. package/build/components/preview-dropdown/index.cjs +38 -9
  45. package/build/components/preview-dropdown/index.cjs.map +3 -3
  46. package/build/components/provider/use-block-editor-settings.cjs +23 -9
  47. package/build/components/provider/use-block-editor-settings.cjs.map +3 -3
  48. package/build/components/resizable-editor/index.cjs +54 -9
  49. package/build/components/resizable-editor/index.cjs.map +3 -3
  50. package/build/components/sidebar/dataform-post-summary.cjs +5 -1
  51. package/build/components/sidebar/dataform-post-summary.cjs.map +3 -3
  52. package/build/components/sidebar/index.cjs +29 -38
  53. package/build/components/sidebar/index.cjs.map +3 -3
  54. package/build/components/sidebar/post-summary.cjs +0 -13
  55. package/build/components/sidebar/post-summary.cjs.map +3 -3
  56. package/build/components/visual-editor/index.cjs +15 -11
  57. package/build/components/visual-editor/index.cjs.map +3 -3
  58. package/build/dataviews/store/private-actions.cjs +24 -19
  59. package/build/dataviews/store/private-actions.cjs.map +2 -2
  60. package/build/store/actions.cjs +5 -3
  61. package/build/store/actions.cjs.map +2 -2
  62. package/build/store/constants.cjs +26 -0
  63. package/build/store/constants.cjs.map +2 -2
  64. package/build/store/private-actions.cjs +25 -18
  65. package/build/store/private-actions.cjs.map +3 -3
  66. package/build/store/private-selectors.cjs +5 -0
  67. package/build/store/private-selectors.cjs.map +2 -2
  68. package/build/store/reducer.cjs +6 -6
  69. package/build/store/reducer.cjs.map +2 -2
  70. package/build/store/selectors.cjs +3 -1
  71. package/build/store/selectors.cjs.map +2 -2
  72. package/build/utils/device-type.cjs +52 -0
  73. package/build/utils/device-type.cjs.map +7 -0
  74. package/build/utils/media-sideload-from-url/index.cjs +63 -0
  75. package/build/utils/media-sideload-from-url/index.cjs.map +7 -0
  76. package/build-module/components/collab-sidebar/format.mjs +57 -0
  77. package/build-module/components/collab-sidebar/format.mjs.map +7 -0
  78. package/build-module/components/collab-sidebar/hooks.mjs +121 -16
  79. package/build-module/components/collab-sidebar/hooks.mjs.map +2 -2
  80. package/build-module/components/collab-sidebar/index.mjs +21 -5
  81. package/build-module/components/collab-sidebar/index.mjs.map +2 -2
  82. package/build-module/components/collab-sidebar/note-highlight-styles.mjs +41 -0
  83. package/build-module/components/collab-sidebar/note-highlight-styles.mjs.map +7 -0
  84. package/build-module/components/collab-sidebar/utils.mjs +133 -0
  85. package/build-module/components/collab-sidebar/utils.mjs.map +2 -2
  86. package/build-module/components/collaborators-presence/use-collaborator-notifications.mjs +55 -30
  87. package/build-module/components/collaborators-presence/use-collaborator-notifications.mjs.map +2 -2
  88. package/build-module/components/commands/index.mjs +99 -3
  89. package/build-module/components/commands/index.mjs.map +2 -2
  90. package/build-module/components/document-bar/index.mjs +28 -34
  91. package/build-module/components/document-bar/index.mjs.map +2 -2
  92. package/build-module/components/entities-saved-states/index.mjs +1 -4
  93. package/build-module/components/entities-saved-states/index.mjs.map +2 -2
  94. package/build-module/components/header/index.mjs +1 -13
  95. package/build-module/components/header/index.mjs.map +2 -2
  96. package/build-module/components/media-categories/index.mjs +93 -7
  97. package/build-module/components/media-categories/index.mjs.map +2 -2
  98. package/build-module/components/page-attributes/parent.mjs +0 -1
  99. package/build-module/components/page-attributes/parent.mjs.map +2 -2
  100. package/build-module/components/post-author/combobox.mjs +0 -1
  101. package/build-module/components/post-author/combobox.mjs.map +2 -2
  102. package/build-module/components/post-author/select.mjs +0 -1
  103. package/build-module/components/post-author/select.mjs.map +2 -2
  104. package/build-module/components/post-preview-button/index.mjs +29 -2
  105. package/build-module/components/post-preview-button/index.mjs.map +2 -2
  106. package/build-module/components/post-publish-panel/maybe-upload-media.mjs +19 -27
  107. package/build-module/components/post-publish-panel/maybe-upload-media.mjs.map +2 -2
  108. package/build-module/components/post-revisions-preview/revisions-slider.mjs +3 -1
  109. package/build-module/components/post-revisions-preview/revisions-slider.mjs.map +2 -2
  110. package/build-module/components/post-taxonomies/flat-term-selector.mjs +0 -1
  111. package/build-module/components/post-taxonomies/flat-term-selector.mjs.map +2 -2
  112. package/build-module/components/post-taxonomies/hierarchical-term-selector.mjs +0 -2
  113. package/build-module/components/post-taxonomies/hierarchical-term-selector.mjs.map +2 -2
  114. package/build-module/components/post-template/classic-theme.mjs +0 -1
  115. package/build-module/components/post-template/classic-theme.mjs.map +2 -2
  116. package/build-module/components/preferences-modal/index.mjs +54 -28
  117. package/build-module/components/preferences-modal/index.mjs.map +2 -2
  118. package/build-module/components/preview-dropdown/index.mjs +38 -9
  119. package/build-module/components/preview-dropdown/index.mjs.map +2 -2
  120. package/build-module/components/provider/use-block-editor-settings.mjs +23 -9
  121. package/build-module/components/provider/use-block-editor-settings.mjs.map +2 -2
  122. package/build-module/components/resizable-editor/index.mjs +55 -10
  123. package/build-module/components/resizable-editor/index.mjs.map +2 -2
  124. package/build-module/components/sidebar/dataform-post-summary.mjs +6 -2
  125. package/build-module/components/sidebar/dataform-post-summary.mjs.map +2 -2
  126. package/build-module/components/sidebar/index.mjs +29 -42
  127. package/build-module/components/sidebar/index.mjs.map +2 -2
  128. package/build-module/components/sidebar/post-summary.mjs +0 -13
  129. package/build-module/components/sidebar/post-summary.mjs.map +2 -2
  130. package/build-module/components/visual-editor/index.mjs +16 -13
  131. package/build-module/components/visual-editor/index.mjs.map +2 -2
  132. package/build-module/dataviews/store/private-actions.mjs +26 -19
  133. package/build-module/dataviews/store/private-actions.mjs.map +2 -2
  134. package/build-module/store/actions.mjs +5 -3
  135. package/build-module/store/actions.mjs.map +2 -2
  136. package/build-module/store/constants.mjs +25 -0
  137. package/build-module/store/constants.mjs.map +2 -2
  138. package/build-module/store/private-actions.mjs +27 -17
  139. package/build-module/store/private-actions.mjs.map +2 -2
  140. package/build-module/store/private-selectors.mjs +4 -0
  141. package/build-module/store/private-selectors.mjs.map +2 -2
  142. package/build-module/store/reducer.mjs +5 -5
  143. package/build-module/store/reducer.mjs.map +2 -2
  144. package/build-module/store/selectors.mjs +3 -1
  145. package/build-module/store/selectors.mjs.map +2 -2
  146. package/build-module/utils/device-type.mjs +25 -0
  147. package/build-module/utils/device-type.mjs.map +7 -0
  148. package/build-module/utils/media-sideload-from-url/index.mjs +32 -0
  149. package/build-module/utils/media-sideload-from-url/index.mjs.map +7 -0
  150. package/build-style/style-rtl.css +84 -39
  151. package/build-style/style.css +84 -39
  152. package/build-types/components/collab-sidebar/format.d.ts +17 -0
  153. package/build-types/components/collab-sidebar/format.d.ts.map +1 -0
  154. package/build-types/components/collab-sidebar/hooks.d.ts.map +1 -1
  155. package/build-types/components/collab-sidebar/index.d.ts.map +1 -1
  156. package/build-types/components/collab-sidebar/note-highlight-styles.d.ts +31 -0
  157. package/build-types/components/collab-sidebar/note-highlight-styles.d.ts.map +1 -0
  158. package/build-types/components/collab-sidebar/utils.d.ts +82 -2
  159. package/build-types/components/collab-sidebar/utils.d.ts.map +1 -1
  160. package/build-types/components/collaborators-presence/use-collaborator-notifications.d.ts.map +1 -1
  161. package/build-types/components/commands/index.d.ts.map +1 -1
  162. package/build-types/components/document-bar/index.d.ts.map +1 -1
  163. package/build-types/components/entities-saved-states/index.d.ts.map +1 -1
  164. package/build-types/components/header/index.d.ts.map +1 -1
  165. package/build-types/components/media-categories/index.d.ts +12 -3
  166. package/build-types/components/media-categories/index.d.ts.map +1 -1
  167. package/build-types/components/page-attributes/parent.d.ts.map +1 -1
  168. package/build-types/components/post-author/combobox.d.ts.map +1 -1
  169. package/build-types/components/post-author/select.d.ts.map +1 -1
  170. package/build-types/components/post-preview-button/index.d.ts.map +1 -1
  171. package/build-types/components/post-publish-panel/maybe-upload-media.d.ts.map +1 -1
  172. package/build-types/components/post-revisions-preview/revisions-slider.d.ts.map +1 -1
  173. package/build-types/components/post-taxonomies/flat-term-selector.d.ts.map +1 -1
  174. package/build-types/components/post-taxonomies/hierarchical-term-selector.d.ts.map +1 -1
  175. package/build-types/components/post-template/classic-theme.d.ts.map +1 -1
  176. package/build-types/components/preview-dropdown/index.d.ts.map +1 -1
  177. package/build-types/components/provider/use-block-editor-settings.d.ts.map +1 -1
  178. package/build-types/components/resizable-editor/index.d.ts.map +1 -1
  179. package/build-types/components/sidebar/dataform-post-summary.d.ts.map +1 -1
  180. package/build-types/components/sidebar/index.d.ts.map +1 -1
  181. package/build-types/components/sidebar/post-summary.d.ts.map +1 -1
  182. package/build-types/components/visual-editor/index.d.ts.map +1 -1
  183. package/build-types/dataviews/store/private-actions.d.ts.map +1 -1
  184. package/build-types/store/actions.d.ts.map +1 -1
  185. package/build-types/store/constants.d.ts +6 -0
  186. package/build-types/store/constants.d.ts.map +1 -1
  187. package/build-types/store/index.d.ts +2 -2
  188. package/build-types/store/private-actions.d.ts +9 -15
  189. package/build-types/store/private-actions.d.ts.map +1 -1
  190. package/build-types/store/private-selectors.d.ts +7 -0
  191. package/build-types/store/private-selectors.d.ts.map +1 -1
  192. package/build-types/store/reducer.d.ts +6 -7
  193. package/build-types/store/reducer.d.ts.map +1 -1
  194. package/build-types/store/selectors.d.ts +1 -1
  195. package/build-types/store/selectors.d.ts.map +1 -1
  196. package/build-types/utils/device-type.d.ts +23 -0
  197. package/build-types/utils/device-type.d.ts.map +1 -0
  198. package/build-types/utils/get-template-part-icon.d.ts.map +1 -1
  199. package/build-types/utils/media-sideload-from-url/index.d.ts +18 -0
  200. package/build-types/utils/media-sideload-from-url/index.d.ts.map +1 -0
  201. package/package.json +48 -46
  202. package/src/components/collab-sidebar/format.js +72 -0
  203. package/src/components/collab-sidebar/hooks.js +203 -22
  204. package/src/components/collab-sidebar/index.js +19 -5
  205. package/src/components/collab-sidebar/note-highlight-styles.js +83 -0
  206. package/src/components/collab-sidebar/style.scss +9 -0
  207. package/src/components/collab-sidebar/test/note-highlight-styles.js +106 -0
  208. package/src/components/collab-sidebar/test/utils.js +471 -0
  209. package/src/components/collab-sidebar/utils.js +225 -2
  210. package/src/components/collaborators-presence/test/use-collaborator-notifications.ts +265 -262
  211. package/src/components/collaborators-presence/use-collaborator-notifications.ts +70 -34
  212. package/src/components/commands/index.js +142 -0
  213. package/src/components/document-bar/index.js +0 -9
  214. package/src/components/document-bar/style.scss +0 -17
  215. package/src/components/entities-saved-states/index.js +1 -5
  216. package/src/components/header/index.js +1 -15
  217. package/src/components/header/style.scss +7 -3
  218. package/src/components/media-categories/index.js +160 -6
  219. package/src/components/media-categories/test/index.js +202 -0
  220. package/src/components/page-attributes/parent.js +0 -1
  221. package/src/components/post-author/combobox.js +0 -1
  222. package/src/components/post-author/select.js +0 -1
  223. package/src/components/post-preview-button/index.js +68 -2
  224. package/src/components/post-publish-panel/maybe-upload-media.js +25 -30
  225. package/src/components/post-publish-panel/style.scss +1 -1
  226. package/src/components/post-publish-panel/test/__snapshots__/index.js.snap +11 -127
  227. package/src/components/post-revisions-preview/revisions-slider.js +4 -1
  228. package/src/components/post-revisions-preview/test/block-diff.js +2 -2
  229. package/src/components/post-taxonomies/flat-term-selector.js +0 -1
  230. package/src/components/post-taxonomies/hierarchical-term-selector.js +0 -2
  231. package/src/components/post-template/classic-theme.js +0 -1
  232. package/src/components/preferences-modal/index.js +40 -22
  233. package/src/components/preferences-modal/test/index.js +83 -0
  234. package/src/components/preview-dropdown/index.js +42 -3
  235. package/src/components/provider/use-block-editor-settings.js +42 -7
  236. package/src/components/resizable-editor/index.js +71 -9
  237. package/src/components/resizable-editor/style.scss +7 -0
  238. package/src/components/sidebar/dataform-post-summary.js +13 -1
  239. package/src/components/sidebar/index.js +32 -47
  240. package/src/components/sidebar/post-summary.js +0 -17
  241. package/src/components/styles-canvas/style.scss +1 -2
  242. package/src/components/visual-editor/index.js +19 -15
  243. package/src/components/visual-editor/style.scss +11 -4
  244. package/src/dataviews/store/private-actions.ts +30 -26
  245. package/src/store/actions.js +6 -3
  246. package/src/store/constants.ts +45 -0
  247. package/src/store/private-actions.js +38 -28
  248. package/src/store/private-selectors.js +10 -0
  249. package/src/store/reducer.js +7 -9
  250. package/src/store/selectors.js +3 -1
  251. package/src/store/test/actions.js +31 -22
  252. package/src/utils/device-type.js +46 -0
  253. package/src/utils/media-sideload-from-url/index.js +54 -0
  254. package/src/utils/media-sideload-from-url/test/index.js +162 -0
  255. package/build/components/post-publish-panel/media-util.cjs +0 -72
  256. package/build/components/post-publish-panel/media-util.cjs.map +0 -7
  257. package/build-module/components/post-publish-panel/media-util.mjs +0 -46
  258. package/build-module/components/post-publish-panel/media-util.mjs.map +0 -7
  259. package/build-types/components/post-publish-panel/media-util.d.ts +0 -20
  260. package/build-types/components/post-publish-panel/media-util.d.ts.map +0 -1
  261. package/src/components/post-publish-panel/media-util.js +0 -87
  262. package/src/components/post-publish-panel/test/media-util.js +0 -118
@@ -1,72 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // packages/editor/src/components/post-publish-panel/media-util.js
21
- var media_util_exports = {};
22
- __export(media_util_exports, {
23
- fetchMedia: () => fetchMedia,
24
- generateUniqueBasenames: () => generateUniqueBasenames
25
- });
26
- module.exports = __toCommonJS(media_util_exports);
27
- var import_uuid = require("uuid");
28
- var import_url = require("@wordpress/url");
29
- function generateUniqueBasenames(urls) {
30
- const basenames = /* @__PURE__ */ new Set();
31
- return Object.fromEntries(
32
- urls.map((url) => {
33
- const filename = (0, import_url.getFilename)(url);
34
- let basename = "";
35
- if (filename) {
36
- const parts = filename.split(".");
37
- if (parts.length > 1) {
38
- parts.pop();
39
- }
40
- basename = parts.join(".");
41
- }
42
- if (!basename) {
43
- basename = (0, import_uuid.v4)();
44
- }
45
- if (basenames.has(basename)) {
46
- basename = `${basename}-${(0, import_uuid.v4)()}`;
47
- }
48
- basenames.add(basename);
49
- return [url, basename];
50
- })
51
- );
52
- }
53
- function fetchMedia(urls) {
54
- return Object.fromEntries(
55
- Object.entries(generateUniqueBasenames(urls)).map(
56
- ([url, basename]) => {
57
- const filePromise = window.fetch(url.includes("?") ? url : url + "?").then((response) => response.blob()).then((blob) => {
58
- return new File([blob], `${basename}.png`, {
59
- type: blob.type
60
- });
61
- });
62
- return [url, filePromise];
63
- }
64
- )
65
- );
66
- }
67
- // Annotate the CommonJS export names for ESM import in node:
68
- 0 && (module.exports = {
69
- fetchMedia,
70
- generateUniqueBasenames
71
- });
72
- //# sourceMappingURL=media-util.cjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/post-publish-panel/media-util.js"],
4
- "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"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA2B;AAK3B,iBAA4B;AAYrB,SAAS,wBAAyB,MAAO;AAC/C,QAAM,YAAY,oBAAI,IAAI;AAE1B,SAAO,OAAO;AAAA,IACb,KAAK,IAAK,CAAE,QAAS;AAEpB,YAAM,eAAW,wBAAa,GAAI;AAClC,UAAI,WAAW;AAEf,UAAK,UAAW;AACf,cAAM,QAAQ,SAAS,MAAO,GAAI;AAClC,YAAK,MAAM,SAAS,GAAI;AAEvB,gBAAM,IAAI;AAAA,QACX;AACA,mBAAW,MAAM,KAAM,GAAI;AAAA,MAC5B;AAEA,UAAK,CAAE,UAAW;AAEjB,uBAAW,YAAAA,IAAK;AAAA,MACjB;AAEA,UAAK,UAAU,IAAK,QAAS,GAAI;AAMhC,mBAAW,GAAI,QAAS,QAAK,YAAAA,IAAK,CAAE;AAAA,MACrC;AAEA,gBAAU,IAAK,QAAS;AAExB,aAAO,CAAE,KAAK,QAAS;AAAA,IACxB,CAAE;AAAA,EACH;AACD;AASO,SAAS,WAAY,MAAO;AAClC,SAAO,OAAO;AAAA,IACb,OAAO,QAAS,wBAAyB,IAAK,CAAE,EAAE;AAAA,MACjD,CAAE,CAAE,KAAK,QAAS,MAAO;AACxB,cAAM,cAAc,OAClB,MAAO,IAAI,SAAU,GAAI,IAAI,MAAM,MAAM,GAAI,EAC7C,KAAM,CAAE,aAAc,SAAS,KAAK,CAAE,EACtC,KAAM,CAAE,SAAU;AAIlB,iBAAO,IAAI,KAAM,CAAE,IAAK,GAAG,GAAI,QAAS,QAAQ;AAAA,YAC/C,MAAM,KAAK;AAAA,UACZ,CAAE;AAAA,QACH,CAAE;AAEH,eAAO,CAAE,KAAK,WAAY;AAAA,MAC3B;AAAA,IACD;AAAA,EACD;AACD;",
6
- "names": ["uuid"]
7
- }
@@ -1,46 +0,0 @@
1
- // packages/editor/src/components/post-publish-panel/media-util.js
2
- import { v4 as uuid } from "uuid";
3
- import { getFilename } from "@wordpress/url";
4
- function generateUniqueBasenames(urls) {
5
- const basenames = /* @__PURE__ */ new Set();
6
- return Object.fromEntries(
7
- urls.map((url) => {
8
- const filename = getFilename(url);
9
- let basename = "";
10
- if (filename) {
11
- const parts = filename.split(".");
12
- if (parts.length > 1) {
13
- parts.pop();
14
- }
15
- basename = parts.join(".");
16
- }
17
- if (!basename) {
18
- basename = uuid();
19
- }
20
- if (basenames.has(basename)) {
21
- basename = `${basename}-${uuid()}`;
22
- }
23
- basenames.add(basename);
24
- return [url, basename];
25
- })
26
- );
27
- }
28
- function fetchMedia(urls) {
29
- return Object.fromEntries(
30
- Object.entries(generateUniqueBasenames(urls)).map(
31
- ([url, basename]) => {
32
- const filePromise = window.fetch(url.includes("?") ? url : url + "?").then((response) => response.blob()).then((blob) => {
33
- return new File([blob], `${basename}.png`, {
34
- type: blob.type
35
- });
36
- });
37
- return [url, filePromise];
38
- }
39
- )
40
- );
41
- }
42
- export {
43
- fetchMedia,
44
- generateUniqueBasenames
45
- };
46
- //# sourceMappingURL=media-util.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/post-publish-panel/media-util.js"],
4
- "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"],
5
- "mappings": ";AAGA,SAAS,MAAM,YAAY;AAK3B,SAAS,mBAAmB;AAYrB,SAAS,wBAAyB,MAAO;AAC/C,QAAM,YAAY,oBAAI,IAAI;AAE1B,SAAO,OAAO;AAAA,IACb,KAAK,IAAK,CAAE,QAAS;AAEpB,YAAM,WAAW,YAAa,GAAI;AAClC,UAAI,WAAW;AAEf,UAAK,UAAW;AACf,cAAM,QAAQ,SAAS,MAAO,GAAI;AAClC,YAAK,MAAM,SAAS,GAAI;AAEvB,gBAAM,IAAI;AAAA,QACX;AACA,mBAAW,MAAM,KAAM,GAAI;AAAA,MAC5B;AAEA,UAAK,CAAE,UAAW;AAEjB,mBAAW,KAAK;AAAA,MACjB;AAEA,UAAK,UAAU,IAAK,QAAS,GAAI;AAMhC,mBAAW,GAAI,QAAS,IAAK,KAAK,CAAE;AAAA,MACrC;AAEA,gBAAU,IAAK,QAAS;AAExB,aAAO,CAAE,KAAK,QAAS;AAAA,IACxB,CAAE;AAAA,EACH;AACD;AASO,SAAS,WAAY,MAAO;AAClC,SAAO,OAAO;AAAA,IACb,OAAO,QAAS,wBAAyB,IAAK,CAAE,EAAE;AAAA,MACjD,CAAE,CAAE,KAAK,QAAS,MAAO;AACxB,cAAM,cAAc,OAClB,MAAO,IAAI,SAAU,GAAI,IAAI,MAAM,MAAM,GAAI,EAC7C,KAAM,CAAE,aAAc,SAAS,KAAK,CAAE,EACtC,KAAM,CAAE,SAAU;AAIlB,iBAAO,IAAI,KAAM,CAAE,IAAK,GAAG,GAAI,QAAS,QAAQ;AAAA,YAC/C,MAAM,KAAK;AAAA,UACZ,CAAE;AAAA,QACH,CAAE;AAEH,eAAO,CAAE,KAAK,WAAY;AAAA,MAC3B;AAAA,IACD;AAAA,EACD;AACD;",
6
- "names": []
7
- }
@@ -1,20 +0,0 @@
1
- /**
2
- * Generate a list of unique basenames given a list of URLs.
3
- *
4
- * We want all basenames to be unique, since sometimes the extension
5
- * doesn't reflect the mime type, and may end up getting changed by
6
- * the server, on upload.
7
- *
8
- * @param {string[]} urls The list of URLs
9
- * @return {Record< string, string >} A URL => basename record.
10
- */
11
- export declare function generateUniqueBasenames(urls: string[]): Record<string, string>;
12
- /**
13
- * Fetch a list of URLs, turning those into promises for files with
14
- * unique filenames.
15
- *
16
- * @param {string[]} urls The list of URLs
17
- * @return {Record< string, Promise< File > >} A URL => File promise record.
18
- */
19
- export declare function fetchMedia(urls: string[]): Record<string, Promise<File>>;
20
- //# sourceMappingURL=media-util.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"media-util.d.ts","sourceRoot":"","sources":["../../../src/components/post-publish-panel/media-util.js"],"names":[],"mappings":"AAUA;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAE,IAAI,EAHlC,MAAM,EAG4B,0BAqC5C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAE,IAAI,EAHrB,MAAM,EAGe,iCAoB/B"}
@@ -1,87 +0,0 @@
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
-
24
- return Object.fromEntries(
25
- urls.map( ( url ) => {
26
- // We prefer to match the remote filename, if possible.
27
- const filename = getFilename( url );
28
- let basename = '';
29
-
30
- if ( filename ) {
31
- const parts = filename.split( '.' );
32
- if ( parts.length > 1 ) {
33
- // Assume the last part is the extension.
34
- parts.pop();
35
- }
36
- basename = parts.join( '.' );
37
- }
38
-
39
- if ( ! basename ) {
40
- // It looks like we don't have a basename, so let's use a UUID.
41
- basename = uuid();
42
- }
43
-
44
- if ( basenames.has( basename ) ) {
45
- // Append a UUID to deduplicate the basename.
46
- // The server will try to deduplicate on its own if we don't do this,
47
- // but it may run into a race condition
48
- // (see https://github.com/WordPress/gutenberg/issues/64899).
49
- // Deduplicating the filenames before uploading is safer.
50
- basename = `${ basename }-${ uuid() }`;
51
- }
52
-
53
- basenames.add( basename );
54
-
55
- return [ url, basename ];
56
- } )
57
- );
58
- }
59
-
60
- /**
61
- * Fetch a list of URLs, turning those into promises for files with
62
- * unique filenames.
63
- *
64
- * @param {string[]} urls The list of URLs
65
- * @return {Record< string, Promise< File > >} A URL => File promise record.
66
- */
67
- export function fetchMedia( urls ) {
68
- return Object.fromEntries(
69
- Object.entries( generateUniqueBasenames( urls ) ).map(
70
- ( [ url, basename ] ) => {
71
- const filePromise = window
72
- .fetch( url.includes( '?' ) ? url : url + '?' )
73
- .then( ( response ) => response.blob() )
74
- .then( ( blob ) => {
75
- // The server will reject the upload if it doesn't have an extension,
76
- // even though it'll rewrite the file name to match the mime type.
77
- // Here we provide it with a safe extension to get it past that check.
78
- return new File( [ blob ], `${ basename }.png`, {
79
- type: blob.type,
80
- } );
81
- } );
82
-
83
- return [ url, filePromise ];
84
- }
85
- )
86
- );
87
- }
@@ -1,118 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import { generateUniqueBasenames } from '../media-util';
5
-
6
- describe( 'generateUniqueBasenames', () => {
7
- it( 'should prefer the original basenames', () => {
8
- const urls = [
9
- 'https://example.com/images/image1.jpg',
10
- 'https://example.com/images/image2.jpg',
11
- 'https://example.com/images/image3.jpg',
12
- 'https://example.com/images/image4.jpg',
13
- ];
14
-
15
- expect( generateUniqueBasenames( urls ) ).toEqual( {
16
- 'https://example.com/images/image1.jpg': 'image1',
17
- 'https://example.com/images/image2.jpg': 'image2',
18
- 'https://example.com/images/image3.jpg': 'image3',
19
- 'https://example.com/images/image4.jpg': 'image4',
20
- } );
21
- } );
22
-
23
- it( 'should handle filenames with no extensions', () => {
24
- const urls = [
25
- 'https://example.com/images/image1',
26
- 'https://example.com/images/image2',
27
- 'https://example.com/images/image3',
28
- 'https://example.com/images/image4',
29
- ];
30
-
31
- expect( generateUniqueBasenames( urls ) ).toEqual( {
32
- 'https://example.com/images/image1': 'image1',
33
- 'https://example.com/images/image2': 'image2',
34
- 'https://example.com/images/image3': 'image3',
35
- 'https://example.com/images/image4': 'image4',
36
- } );
37
- } );
38
-
39
- it( 'should handle query parameters correctly', () => {
40
- const urls = [
41
- 'https://example.com/images/image1.jpg?a=notafile.npg',
42
- 'https://example.com/images/image2.jpg?a=notafile.npg',
43
- 'https://example.com/images/image3.jpg?a=notafile.npg',
44
- 'https://example.com/images/image4.jpg?a=notafile.npg',
45
- ];
46
-
47
- expect( generateUniqueBasenames( urls ) ).toEqual( {
48
- 'https://example.com/images/image1.jpg?a=notafile.npg': 'image1',
49
- 'https://example.com/images/image2.jpg?a=notafile.npg': 'image2',
50
- 'https://example.com/images/image3.jpg?a=notafile.npg': 'image3',
51
- 'https://example.com/images/image4.jpg?a=notafile.npg': 'image4',
52
- } );
53
- } );
54
-
55
- it( 'should deduplicate identical filenames', () => {
56
- const urls = [
57
- 'https://example.com/image1/image.jpg',
58
- 'https://example.com/image2/image.jpg',
59
- 'https://example.com/image3/image.jpg',
60
- 'https://example.com/image4/image.jpg',
61
- ];
62
-
63
- const results = generateUniqueBasenames( urls );
64
- const resultLength = Object.entries( results ).length;
65
- expect( resultLength ).toBe( urls.length );
66
-
67
- const basenames = new Set( Object.values( results ) );
68
- expect( basenames.size ).toBe( resultLength );
69
- } );
70
-
71
- it( 'should deduplicate identical basenames', () => {
72
- const urls = [
73
- 'https://example.com/images/image.jpg',
74
- 'https://example.com/images/image.png',
75
- 'https://example.com/images/image.webp',
76
- 'https://example.com/images/image.avif',
77
- ];
78
-
79
- const results = generateUniqueBasenames( urls );
80
- const resultLength = Object.entries( results ).length;
81
- expect( resultLength ).toBe( urls.length );
82
-
83
- const basenames = new Set( Object.values( results ) );
84
- expect( basenames.size ).toBe( resultLength );
85
- } );
86
-
87
- it( 'should deduplicate filenames without extensions', () => {
88
- const urls = [
89
- 'https://example.com/image1/image',
90
- 'https://example.com/image2/image',
91
- 'https://example.com/image3/image',
92
- 'https://example.com/image4/image',
93
- ];
94
-
95
- const results = generateUniqueBasenames( urls );
96
- const resultLength = Object.entries( results ).length;
97
- expect( resultLength ).toBe( urls.length );
98
-
99
- const basenames = new Set( Object.values( results ) );
100
- expect( basenames.size ).toBe( resultLength );
101
- } );
102
-
103
- it( 'should deduplicate paths with no filename', () => {
104
- const urls = [
105
- 'https://example.com/image1/dir/',
106
- 'https://example.com/image2/dir/',
107
- 'https://example.com/image3/dir/',
108
- 'https://example.com/image4/dir/',
109
- ];
110
-
111
- const results = generateUniqueBasenames( urls );
112
- const resultLength = Object.entries( results ).length;
113
- expect( resultLength ).toBe( urls.length );
114
-
115
- const basenames = new Set( Object.values( results ) );
116
- expect( basenames.size ).toBe( resultLength );
117
- } );
118
- } );