@wordpress/media-utils 5.34.0 → 5.35.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 (76) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/index.js +2 -0
  3. package/build/components/index.js.map +1 -1
  4. package/build/components/media-upload/index.js +10 -8
  5. package/build/components/media-upload/index.js.map +1 -1
  6. package/build/components/media-upload-modal/index.js +49 -8
  7. package/build/components/media-upload-modal/index.js.map +3 -3
  8. package/build/index.js +2 -0
  9. package/build/index.js.map +1 -1
  10. package/build/lock-unlock.js +3 -1
  11. package/build/lock-unlock.js.map +1 -1
  12. package/build/private-apis.js +3 -1
  13. package/build/private-apis.js.map +1 -1
  14. package/build/utils/flatten-form-data.js +2 -0
  15. package/build/utils/flatten-form-data.js.map +1 -1
  16. package/build/utils/get-mime-types-array.js +2 -0
  17. package/build/utils/get-mime-types-array.js.map +1 -1
  18. package/build/utils/sideload-media.js +3 -1
  19. package/build/utils/sideload-media.js.map +1 -1
  20. package/build/utils/sideload-to-server.js +2 -0
  21. package/build/utils/sideload-to-server.js.map +1 -1
  22. package/build/utils/transform-attachment.js +2 -0
  23. package/build/utils/transform-attachment.js.map +1 -1
  24. package/build/utils/types.js +2 -0
  25. package/build/utils/types.js.map +1 -1
  26. package/build/utils/upload-error.js +4 -2
  27. package/build/utils/upload-error.js.map +1 -1
  28. package/build/utils/upload-media.js +2 -0
  29. package/build/utils/upload-media.js.map +1 -1
  30. package/build/utils/upload-to-server.js +2 -0
  31. package/build/utils/upload-to-server.js.map +1 -1
  32. package/build/utils/validate-file-size.js +2 -0
  33. package/build/utils/validate-file-size.js.map +1 -1
  34. package/build/utils/validate-mime-type-for-user.js +2 -0
  35. package/build/utils/validate-mime-type-for-user.js.map +1 -1
  36. package/build/utils/validate-mime-type.js +2 -0
  37. package/build/utils/validate-mime-type.js.map +1 -1
  38. package/build-module/components/index.js +1 -0
  39. package/build-module/components/index.js.map +1 -1
  40. package/build-module/components/media-upload/index.js +9 -8
  41. package/build-module/components/media-upload/index.js.map +1 -1
  42. package/build-module/components/media-upload-modal/index.js +49 -9
  43. package/build-module/components/media-upload-modal/index.js.map +2 -2
  44. package/build-module/index.js +1 -0
  45. package/build-module/index.js.map +1 -1
  46. package/build-module/lock-unlock.js +2 -1
  47. package/build-module/lock-unlock.js.map +1 -1
  48. package/build-module/private-apis.js +2 -1
  49. package/build-module/private-apis.js.map +1 -1
  50. package/build-module/utils/flatten-form-data.js +1 -0
  51. package/build-module/utils/flatten-form-data.js.map +1 -1
  52. package/build-module/utils/get-mime-types-array.js +1 -0
  53. package/build-module/utils/get-mime-types-array.js.map +1 -1
  54. package/build-module/utils/sideload-media.js +2 -1
  55. package/build-module/utils/sideload-media.js.map +1 -1
  56. package/build-module/utils/sideload-to-server.js +1 -0
  57. package/build-module/utils/sideload-to-server.js.map +1 -1
  58. package/build-module/utils/transform-attachment.js +1 -0
  59. package/build-module/utils/transform-attachment.js.map +1 -1
  60. package/build-module/utils/upload-error.js +3 -2
  61. package/build-module/utils/upload-error.js.map +1 -1
  62. package/build-module/utils/upload-media.js +1 -0
  63. package/build-module/utils/upload-media.js.map +1 -1
  64. package/build-module/utils/upload-to-server.js +1 -0
  65. package/build-module/utils/upload-to-server.js.map +1 -1
  66. package/build-module/utils/validate-file-size.js +1 -0
  67. package/build-module/utils/validate-file-size.js.map +1 -1
  68. package/build-module/utils/validate-mime-type-for-user.js +1 -0
  69. package/build-module/utils/validate-mime-type-for-user.js.map +1 -1
  70. package/build-module/utils/validate-mime-type.js +1 -0
  71. package/build-module/utils/validate-mime-type.js.map +1 -1
  72. package/build-types/components/media-upload-modal/index.d.ts.map +1 -1
  73. package/package.json +12 -11
  74. package/src/components/media-upload-modal/index.tsx +48 -7
  75. package/tsconfig.json +1 -0
  76. package/tsconfig.tsbuildinfo +1 -1
@@ -16,12 +16,14 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/media-utils/src/utils/upload-error.ts
19
21
  var upload_error_exports = {};
20
22
  __export(upload_error_exports, {
21
23
  UploadError: () => UploadError
22
24
  });
23
25
  module.exports = __toCommonJS(upload_error_exports);
24
- class UploadError extends Error {
26
+ var UploadError = class extends Error {
25
27
  code;
26
28
  file;
27
29
  constructor({ code, message, file, cause }) {
@@ -30,7 +32,7 @@ class UploadError extends Error {
30
32
  this.code = code;
31
33
  this.file = file;
32
34
  }
33
- }
35
+ };
34
36
  // Annotate the CommonJS export names for ESM import in node:
35
37
  0 && (module.exports = {
36
38
  UploadError
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/upload-error.ts"],
4
4
  "sourcesContent": ["interface UploadErrorArgs {\n\tcode: string;\n\tmessage: string;\n\tfile: File;\n\tcause?: Error;\n}\n\n/**\n * MediaError class.\n *\n * Small wrapper around the `Error` class\n * to hold an error code and a reference to a file object.\n */\nexport class UploadError extends Error {\n\tcode: string;\n\tfile: File;\n\n\tconstructor( { code, message, file, cause }: UploadErrorArgs ) {\n\t\tsuper( message, { cause } );\n\n\t\tObject.setPrototypeOf( this, new.target.prototype );\n\n\t\tthis.code = code;\n\t\tthis.file = file;\n\t}\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaO,MAAM,oBAAoB,MAAM;AAAA,EACtC;AAAA,EACA;AAAA,EAEA,YAAa,EAAE,MAAM,SAAS,MAAM,MAAM,GAAqB;AAC9D,UAAO,SAAS,EAAE,MAAM,CAAE;AAE1B,WAAO,eAAgB,MAAM,WAAW,SAAU;AAElD,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACb;AACD;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaO,IAAM,cAAN,cAA0B,MAAM;AAAA,EACtC;AAAA,EACA;AAAA,EAEA,YAAa,EAAE,MAAM,SAAS,MAAM,MAAM,GAAqB;AAC9D,UAAO,SAAS,EAAE,MAAM,CAAE;AAE1B,WAAO,eAAgB,MAAM,WAAW,SAAU;AAElD,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACb;AACD;",
6
6
  "names": []
7
7
  }
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/media-utils/src/utils/upload-media.ts
19
21
  var upload_media_exports = {};
20
22
  __export(upload_media_exports, {
21
23
  uploadMedia: () => uploadMedia
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/upload-media.ts"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { createBlobURL, revokeBlobURL } from '@wordpress/blob';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tAdditionalData,\n\tAttachment,\n\tOnChangeHandler,\n\tOnErrorHandler,\n} from './types';\nimport { uploadToServer } from './upload-to-server';\nimport { validateMimeType } from './validate-mime-type';\nimport { validateMimeTypeForUser } from './validate-mime-type-for-user';\nimport { validateFileSize } from './validate-file-size';\nimport { UploadError } from './upload-error';\n\ndeclare global {\n\tinterface Window {\n\t\t__experimentalMediaProcessing?: boolean;\n\t}\n}\n\ninterface UploadMediaArgs {\n\t// Additional data to include in the request.\n\tadditionalData?: AdditionalData;\n\t// Array with the types of media that can be uploaded, if unset all types are allowed.\n\tallowedTypes?: string[];\n\t// List of files.\n\tfilesList: File[];\n\t// Maximum upload size in bytes allowed for the site.\n\tmaxUploadFileSize?: number;\n\t// Function called when an error happens.\n\tonError?: OnErrorHandler;\n\t// Function called each time a file or a temporary representation of the file is available.\n\tonFileChange?: OnChangeHandler;\n\t// List of allowed mime types and file extensions.\n\twpAllowedMimeTypes?: Record< string, string > | null;\n\t// Abort signal.\n\tsignal?: AbortSignal;\n\t// Whether to allow multiple files to be uploaded.\n\tmultiple?: boolean;\n}\n\n/**\n * Upload a media file when the file upload button is activated\n * or when adding a file to the editor via drag & drop.\n *\n * @param $0 Parameters object passed to the function.\n * @param $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.\n * @param $0.additionalData Additional data to include in the request.\n * @param $0.filesList List of files.\n * @param $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.\n * @param $0.onError Function called when an error happens.\n * @param $0.onFileChange Function called each time a file or a temporary representation of the file is available.\n * @param $0.wpAllowedMimeTypes List of allowed mime types and file extensions.\n * @param $0.signal Abort signal.\n * @param $0.multiple Whether to allow multiple files to be uploaded.\n */\nexport function uploadMedia( {\n\twpAllowedMimeTypes,\n\tallowedTypes,\n\tadditionalData = {},\n\tfilesList,\n\tmaxUploadFileSize,\n\tonError,\n\tonFileChange,\n\tsignal,\n\tmultiple = true,\n}: UploadMediaArgs ) {\n\tif ( ! multiple && filesList.length > 1 ) {\n\t\tonError?.( new Error( __( 'Only one file can be used here.' ) ) );\n\t\treturn;\n\t}\n\n\tconst validFiles = [];\n\n\tconst filesSet: Array< Partial< Attachment > | null > = [];\n\tconst setAndUpdateFiles = ( index: number, value: Attachment | null ) => {\n\t\t// For client-side media processing, this is handled by the upload-media package.\n\t\tif ( ! window.__experimentalMediaProcessing ) {\n\t\t\tif ( filesSet[ index ]?.url ) {\n\t\t\t\trevokeBlobURL( filesSet[ index ].url );\n\t\t\t}\n\t\t}\n\t\tfilesSet[ index ] = value;\n\t\tonFileChange?.(\n\t\t\tfilesSet.filter( ( attachment ) => attachment !== null )\n\t\t);\n\t};\n\n\tfor ( const mediaFile of filesList ) {\n\t\t// Verify if user is allowed to upload this mime type.\n\t\t// Defer to the server when type not detected.\n\t\ttry {\n\t\t\tvalidateMimeTypeForUser( mediaFile, wpAllowedMimeTypes );\n\t\t} catch ( error: unknown ) {\n\t\t\tonError?.( error as Error );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check if the caller (e.g. a block) supports this mime type.\n\t\t// Defer to the server when type not detected.\n\t\ttry {\n\t\t\tvalidateMimeType( mediaFile, allowedTypes );\n\t\t} catch ( error: unknown ) {\n\t\t\tonError?.( error as Error );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Verify if file is greater than the maximum file upload size allowed for the site.\n\t\ttry {\n\t\t\tvalidateFileSize( mediaFile, maxUploadFileSize );\n\t\t} catch ( error: unknown ) {\n\t\t\tonError?.( error as Error );\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidFiles.push( mediaFile );\n\n\t\t// For client-side media processing, this is handled by the upload-media package.\n\t\tif ( ! window.__experimentalMediaProcessing ) {\n\t\t\t// Set temporary URL to create placeholder media file, this is replaced\n\t\t\t// with final file from media gallery when upload is `done` below.\n\t\t\tfilesSet.push( { url: createBlobURL( mediaFile ) } );\n\t\t\tonFileChange?.( filesSet as Array< Partial< Attachment > > );\n\t\t}\n\t}\n\n\tvalidFiles.map( async ( file, index ) => {\n\t\ttry {\n\t\t\tconst attachment = await uploadToServer(\n\t\t\t\tfile,\n\t\t\t\tadditionalData,\n\t\t\t\tsignal\n\t\t\t);\n\t\t\tsetAndUpdateFiles( index, attachment );\n\t\t} catch ( error ) {\n\t\t\t// Reset to empty on failure.\n\t\t\tsetAndUpdateFiles( index, null );\n\n\t\t\t// @wordpress/api-fetch throws any response that isn't in the 200 range as-is.\n\t\t\tlet message: string;\n\t\t\tif (\n\t\t\t\ttypeof error === 'object' &&\n\t\t\t\terror !== null &&\n\t\t\t\t'message' in error\n\t\t\t) {\n\t\t\t\tmessage =\n\t\t\t\t\ttypeof error.message === 'string'\n\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t: String( error.message );\n\t\t\t} else {\n\t\t\t\tmessage = sprintf(\n\t\t\t\t\t// translators: %s: file name\n\t\t\t\t\t__( 'Error while uploading file %s to the media library.' ),\n\t\t\t\t\tfile.name\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tonError?.(\n\t\t\t\tnew UploadError( {\n\t\t\t\t\tcode: 'GENERAL',\n\t\t\t\t\tmessage,\n\t\t\t\t\tfile,\n\t\t\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\t} );\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA4B;AAC5B,kBAA6C;AAW7C,8BAA+B;AAC/B,gCAAiC;AACjC,yCAAwC;AACxC,gCAAiC;AACjC,0BAA4B;AA4CrB,SAAS,YAAa;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,iBAAiB,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACZ,GAAqB;AACpB,MAAK,CAAE,YAAY,UAAU,SAAS,GAAI;AACzC,cAAW,IAAI,UAAO,gBAAI,iCAAkC,CAAE,CAAE;AAChE;AAAA,EACD;AAEA,QAAM,aAAa,CAAC;AAEpB,QAAM,WAAkD,CAAC;AACzD,QAAM,oBAAoB,CAAE,OAAe,UAA8B;AAExE,QAAK,CAAE,OAAO,+BAAgC;AAC7C,UAAK,SAAU,KAAM,GAAG,KAAM;AAC7B,uCAAe,SAAU,KAAM,EAAE,GAAI;AAAA,MACtC;AAAA,IACD;AACA,aAAU,KAAM,IAAI;AACpB;AAAA,MACC,SAAS,OAAQ,CAAE,eAAgB,eAAe,IAAK;AAAA,IACxD;AAAA,EACD;AAEA,aAAY,aAAa,WAAY;AAGpC,QAAI;AACH,sEAAyB,WAAW,kBAAmB;AAAA,IACxD,SAAU,OAAiB;AAC1B,gBAAW,KAAe;AAC1B;AAAA,IACD;AAIA,QAAI;AACH,sDAAkB,WAAW,YAAa;AAAA,IAC3C,SAAU,OAAiB;AAC1B,gBAAW,KAAe;AAC1B;AAAA,IACD;AAGA,QAAI;AACH,sDAAkB,WAAW,iBAAkB;AAAA,IAChD,SAAU,OAAiB;AAC1B,gBAAW,KAAe;AAC1B;AAAA,IACD;AAEA,eAAW,KAAM,SAAU;AAG3B,QAAK,CAAE,OAAO,+BAAgC;AAG7C,eAAS,KAAM,EAAE,SAAK,2BAAe,SAAU,EAAE,CAAE;AACnD,qBAAgB,QAA2C;AAAA,IAC5D;AAAA,EACD;AAEA,aAAW,IAAK,OAAQ,MAAM,UAAW;AACxC,QAAI;AACH,YAAM,aAAa,UAAM;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACA,wBAAmB,OAAO,UAAW;AAAA,IACtC,SAAU,OAAQ;AAEjB,wBAAmB,OAAO,IAAK;AAG/B,UAAI;AACJ,UACC,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,OACZ;AACD,kBACC,OAAO,MAAM,YAAY,WACtB,MAAM,UACN,OAAQ,MAAM,OAAQ;AAAA,MAC3B,OAAO;AACN,sBAAU;AAAA;AAAA,cAET,gBAAI,qDAAsD;AAAA,UAC1D,KAAK;AAAA,QACN;AAAA,MACD;AAEA;AAAA,QACC,IAAI,gCAAa;AAAA,UAChB,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,OAAO,iBAAiB,QAAQ,QAAQ;AAAA,QACzC,CAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD,CAAE;AACH;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA4B;AAC5B,kBAA6C;AAW7C,8BAA+B;AAC/B,gCAAiC;AACjC,yCAAwC;AACxC,gCAAiC;AACjC,0BAA4B;AA4CrB,SAAS,YAAa;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,iBAAiB,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACZ,GAAqB;AACpB,MAAK,CAAE,YAAY,UAAU,SAAS,GAAI;AACzC,cAAW,IAAI,UAAO,gBAAI,iCAAkC,CAAE,CAAE;AAChE;AAAA,EACD;AAEA,QAAM,aAAa,CAAC;AAEpB,QAAM,WAAkD,CAAC;AACzD,QAAM,oBAAoB,CAAE,OAAe,UAA8B;AAExE,QAAK,CAAE,OAAO,+BAAgC;AAC7C,UAAK,SAAU,KAAM,GAAG,KAAM;AAC7B,uCAAe,SAAU,KAAM,EAAE,GAAI;AAAA,MACtC;AAAA,IACD;AACA,aAAU,KAAM,IAAI;AACpB;AAAA,MACC,SAAS,OAAQ,CAAE,eAAgB,eAAe,IAAK;AAAA,IACxD;AAAA,EACD;AAEA,aAAY,aAAa,WAAY;AAGpC,QAAI;AACH,sEAAyB,WAAW,kBAAmB;AAAA,IACxD,SAAU,OAAiB;AAC1B,gBAAW,KAAe;AAC1B;AAAA,IACD;AAIA,QAAI;AACH,sDAAkB,WAAW,YAAa;AAAA,IAC3C,SAAU,OAAiB;AAC1B,gBAAW,KAAe;AAC1B;AAAA,IACD;AAGA,QAAI;AACH,sDAAkB,WAAW,iBAAkB;AAAA,IAChD,SAAU,OAAiB;AAC1B,gBAAW,KAAe;AAC1B;AAAA,IACD;AAEA,eAAW,KAAM,SAAU;AAG3B,QAAK,CAAE,OAAO,+BAAgC;AAG7C,eAAS,KAAM,EAAE,SAAK,2BAAe,SAAU,EAAE,CAAE;AACnD,qBAAgB,QAA2C;AAAA,IAC5D;AAAA,EACD;AAEA,aAAW,IAAK,OAAQ,MAAM,UAAW;AACxC,QAAI;AACH,YAAM,aAAa,UAAM;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACA,wBAAmB,OAAO,UAAW;AAAA,IACtC,SAAU,OAAQ;AAEjB,wBAAmB,OAAO,IAAK;AAG/B,UAAI;AACJ,UACC,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,OACZ;AACD,kBACC,OAAO,MAAM,YAAY,WACtB,MAAM,UACN,OAAQ,MAAM,OAAQ;AAAA,MAC3B,OAAO;AACN,sBAAU;AAAA;AAAA,cAET,gBAAI,qDAAsD;AAAA,UAC1D,KAAK;AAAA,QACN;AAAA,MACD;AAEA;AAAA,QACC,IAAI,gCAAa;AAAA,UAChB,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,OAAO,iBAAiB,QAAQ,QAAQ;AAAA,QACzC,CAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD,CAAE;AACH;",
6
6
  "names": []
7
7
  }
@@ -26,6 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // packages/media-utils/src/utils/upload-to-server.ts
29
31
  var upload_to_server_exports = {};
30
32
  __export(upload_to_server_exports, {
31
33
  uploadToServer: () => uploadToServer
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/upload-to-server.ts"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { flattenFormData } from './flatten-form-data';\nimport { transformAttachment } from './transform-attachment';\nimport type { CreateRestAttachment, RestAttachment } from './types';\n\nexport async function uploadToServer(\n\tfile: File,\n\tadditionalData: CreateRestAttachment = {},\n\tsignal?: AbortSignal\n) {\n\t// Create upload payload.\n\tconst data = new FormData();\n\tdata.append( 'file', file, file.name || file.type.replace( '/', '.' ) );\n\tfor ( const [ key, value ] of Object.entries( additionalData ) ) {\n\t\tflattenFormData(\n\t\t\tdata,\n\t\t\tkey,\n\t\t\tvalue as string | Record< string, string > | undefined\n\t\t);\n\t}\n\n\treturn transformAttachment(\n\t\tawait apiFetch< RestAttachment >( {\n\t\t\t// This allows the video block to directly get a video's poster image.\n\t\t\tpath: '/wp/v2/media?_embed=wp:featuredmedia',\n\t\t\tbody: data,\n\t\t\tmethod: 'POST',\n\t\t\tsignal,\n\t\t} )\n\t);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAqB;AAKrB,+BAAgC;AAChC,kCAAoC;AAGpC,eAAsB,eACrB,MACA,iBAAuC,CAAC,GACxC,QACC;AAED,QAAM,OAAO,IAAI,SAAS;AAC1B,OAAK,OAAQ,QAAQ,MAAM,KAAK,QAAQ,KAAK,KAAK,QAAS,KAAK,GAAI,CAAE;AACtE,aAAY,CAAE,KAAK,KAAM,KAAK,OAAO,QAAS,cAAe,GAAI;AAChE;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,aAAO;AAAA,IACN,UAAM,iBAAAA,SAA4B;AAAA;AAAA,MAEjC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR;AAAA,IACD,CAAE;AAAA,EACH;AACD;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAqB;AAKrB,+BAAgC;AAChC,kCAAoC;AAGpC,eAAsB,eACrB,MACA,iBAAuC,CAAC,GACxC,QACC;AAED,QAAM,OAAO,IAAI,SAAS;AAC1B,OAAK,OAAQ,QAAQ,MAAM,KAAK,QAAQ,KAAK,KAAK,QAAS,KAAK,GAAI,CAAE;AACtE,aAAY,CAAE,KAAK,KAAM,KAAK,OAAO,QAAS,cAAe,GAAI;AAChE;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,aAAO;AAAA,IACN,UAAM,iBAAAA,SAA4B;AAAA;AAAA,MAEjC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR;AAAA,IACD,CAAE;AAAA,EACH;AACD;",
6
6
  "names": ["apiFetch"]
7
7
  }
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/media-utils/src/utils/validate-file-size.ts
19
21
  var validate_file_size_exports = {};
20
22
  __export(validate_file_size_exports, {
21
23
  validateFileSize: () => validateFileSize
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/validate-file-size.ts"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { UploadError } from './upload-error';\n\n/**\n * Verifies whether the file is within the file upload size limits for the site.\n *\n * @param file File object.\n * @param maxUploadFileSize Maximum upload size in bytes allowed for the site.\n */\nexport function validateFileSize( file: File, maxUploadFileSize?: number ) {\n\t// Don't allow empty files to be uploaded.\n\tif ( file.size <= 0 ) {\n\t\tthrow new UploadError( {\n\t\t\tcode: 'EMPTY_FILE',\n\t\t\tmessage: sprintf(\n\t\t\t\t// translators: %s: file name.\n\t\t\t\t__( '%s: This file is empty.' ),\n\t\t\t\tfile.name\n\t\t\t),\n\t\t\tfile,\n\t\t} );\n\t}\n\n\tif ( maxUploadFileSize && file.size > maxUploadFileSize ) {\n\t\tthrow new UploadError( {\n\t\t\tcode: 'SIZE_ABOVE_LIMIT',\n\t\t\tmessage: sprintf(\n\t\t\t\t// translators: %s: file name.\n\t\t\t\t__(\n\t\t\t\t\t'%s: This file exceeds the maximum upload size for this site.'\n\t\t\t\t),\n\t\t\t\tfile.name\n\t\t\t),\n\t\t\tfile,\n\t\t} );\n\t}\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA4B;AAK5B,0BAA4B;AAQrB,SAAS,iBAAkB,MAAY,mBAA6B;AAE1E,MAAK,KAAK,QAAQ,GAAI;AACrB,UAAM,IAAI,gCAAa;AAAA,MACtB,MAAM;AAAA,MACN,aAAS;AAAA;AAAA,YAER,gBAAI,yBAA0B;AAAA,QAC9B,KAAK;AAAA,MACN;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AAEA,MAAK,qBAAqB,KAAK,OAAO,mBAAoB;AACzD,UAAM,IAAI,gCAAa;AAAA,MACtB,MAAM;AAAA,MACN,aAAS;AAAA;AAAA,YAER;AAAA,UACC;AAAA,QACD;AAAA,QACA,KAAK;AAAA,MACN;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AACD;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA4B;AAK5B,0BAA4B;AAQrB,SAAS,iBAAkB,MAAY,mBAA6B;AAE1E,MAAK,KAAK,QAAQ,GAAI;AACrB,UAAM,IAAI,gCAAa;AAAA,MACtB,MAAM;AAAA,MACN,aAAS;AAAA;AAAA,YAER,gBAAI,yBAA0B;AAAA,QAC9B,KAAK;AAAA,MACN;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AAEA,MAAK,qBAAqB,KAAK,OAAO,mBAAoB;AACzD,UAAM,IAAI,gCAAa;AAAA,MACtB,MAAM;AAAA,MACN,aAAS;AAAA;AAAA,YAER;AAAA,UACC;AAAA,QACD;AAAA,QACA,KAAK;AAAA,MACN;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AACD;",
6
6
  "names": []
7
7
  }
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/media-utils/src/utils/validate-mime-type-for-user.ts
19
21
  var validate_mime_type_for_user_exports = {};
20
22
  __export(validate_mime_type_for_user_exports, {
21
23
  validateMimeTypeForUser: () => validateMimeTypeForUser
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/validate-mime-type-for-user.ts"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { UploadError } from './upload-error';\nimport { getMimeTypesArray } from './get-mime-types-array';\n\n/**\n * Verifies if the user is allowed to upload this mime type.\n *\n * @param file File object.\n * @param wpAllowedMimeTypes List of allowed mime types and file extensions.\n */\nexport function validateMimeTypeForUser(\n\tfile: File,\n\twpAllowedMimeTypes?: Record< string, string > | null\n) {\n\t// Allowed types for the current WP_User.\n\tconst allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );\n\n\tif ( ! allowedMimeTypesForUser ) {\n\t\treturn;\n\t}\n\n\tconst isAllowedMimeTypeForUser = allowedMimeTypesForUser.includes(\n\t\tfile.type\n\t);\n\n\tif ( file.type && ! isAllowedMimeTypeForUser ) {\n\t\tthrow new UploadError( {\n\t\t\tcode: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',\n\t\t\tmessage: sprintf(\n\t\t\t\t// translators: %s: file name.\n\t\t\t\t__(\n\t\t\t\t\t'%s: Sorry, you are not allowed to upload this file type.'\n\t\t\t\t),\n\t\t\t\tfile.name\n\t\t\t),\n\t\t\tfile,\n\t\t} );\n\t}\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA4B;AAK5B,0BAA4B;AAC5B,kCAAkC;AAQ3B,SAAS,wBACf,MACA,oBACC;AAED,QAAM,8BAA0B,+CAAmB,kBAAmB;AAEtE,MAAK,CAAE,yBAA0B;AAChC;AAAA,EACD;AAEA,QAAM,2BAA2B,wBAAwB;AAAA,IACxD,KAAK;AAAA,EACN;AAEA,MAAK,KAAK,QAAQ,CAAE,0BAA2B;AAC9C,UAAM,IAAI,gCAAa;AAAA,MACtB,MAAM;AAAA,MACN,aAAS;AAAA;AAAA,YAER;AAAA,UACC;AAAA,QACD;AAAA,QACA,KAAK;AAAA,MACN;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AACD;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA4B;AAK5B,0BAA4B;AAC5B,kCAAkC;AAQ3B,SAAS,wBACf,MACA,oBACC;AAED,QAAM,8BAA0B,+CAAmB,kBAAmB;AAEtE,MAAK,CAAE,yBAA0B;AAChC;AAAA,EACD;AAEA,QAAM,2BAA2B,wBAAwB;AAAA,IACxD,KAAK;AAAA,EACN;AAEA,MAAK,KAAK,QAAQ,CAAE,0BAA2B;AAC9C,UAAM,IAAI,gCAAa;AAAA,MACtB,MAAM;AAAA,MACN,aAAS;AAAA;AAAA,YAER;AAAA,UACC;AAAA,QACD;AAAA,QACA,KAAK;AAAA,MACN;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AACD;",
6
6
  "names": []
7
7
  }
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/media-utils/src/utils/validate-mime-type.ts
19
21
  var validate_mime_type_exports = {};
20
22
  __export(validate_mime_type_exports, {
21
23
  validateMimeType: () => validateMimeType
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/validate-mime-type.ts"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { UploadError } from './upload-error';\n\n/**\n * Verifies if the caller (e.g. a block) supports this mime type.\n *\n * @param file File object.\n * @param allowedTypes List of allowed mime types.\n */\nexport function validateMimeType( file: File, allowedTypes?: string[] ) {\n\tif ( ! allowedTypes ) {\n\t\treturn;\n\t}\n\n\t// Allowed type specified by consumer.\n\tconst isAllowedType = allowedTypes.some( ( allowedType ) => {\n\t\t// If a complete mimetype is specified verify if it matches exactly the mime type of the file.\n\t\tif ( allowedType.includes( '/' ) ) {\n\t\t\treturn allowedType === file.type;\n\t\t}\n\t\t// Otherwise a general mime type is used, and we should verify if the file mimetype starts with it.\n\t\treturn file.type.startsWith( `${ allowedType }/` );\n\t} );\n\n\tif ( file.type && ! isAllowedType ) {\n\t\tthrow new UploadError( {\n\t\t\tcode: 'MIME_TYPE_NOT_SUPPORTED',\n\t\t\tmessage: sprintf(\n\t\t\t\t// translators: %s: file name.\n\t\t\t\t__( '%s: Sorry, this file type is not supported here.' ),\n\t\t\t\tfile.name\n\t\t\t),\n\t\t\tfile,\n\t\t} );\n\t}\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA4B;AAK5B,0BAA4B;AAQrB,SAAS,iBAAkB,MAAY,cAA0B;AACvE,MAAK,CAAE,cAAe;AACrB;AAAA,EACD;AAGA,QAAM,gBAAgB,aAAa,KAAM,CAAE,gBAAiB;AAE3D,QAAK,YAAY,SAAU,GAAI,GAAI;AAClC,aAAO,gBAAgB,KAAK;AAAA,IAC7B;AAEA,WAAO,KAAK,KAAK,WAAY,GAAI,WAAY,GAAI;AAAA,EAClD,CAAE;AAEF,MAAK,KAAK,QAAQ,CAAE,eAAgB;AACnC,UAAM,IAAI,gCAAa;AAAA,MACtB,MAAM;AAAA,MACN,aAAS;AAAA;AAAA,YAER,gBAAI,kDAAmD;AAAA,QACvD,KAAK;AAAA,MACN;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AACD;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA4B;AAK5B,0BAA4B;AAQrB,SAAS,iBAAkB,MAAY,cAA0B;AACvE,MAAK,CAAE,cAAe;AACrB;AAAA,EACD;AAGA,QAAM,gBAAgB,aAAa,KAAM,CAAE,gBAAiB;AAE3D,QAAK,YAAY,SAAU,GAAI,GAAI;AAClC,aAAO,gBAAgB,KAAK;AAAA,IAC7B;AAEA,WAAO,KAAK,KAAK,WAAY,GAAI,WAAY,GAAI;AAAA,EAClD,CAAE;AAEF,MAAK,KAAK,QAAQ,CAAE,eAAgB;AACnC,UAAM,IAAI,gCAAa;AAAA,MACtB,MAAM;AAAA,MACN,aAAS;AAAA;AAAA,YAER,gBAAI,kDAAmD;AAAA,QACvD,KAAK;AAAA,MACN;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AACD;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ // packages/media-utils/src/components/index.js
1
2
  import { default as default2 } from "./media-upload";
2
3
  export {
3
4
  default2 as MediaUpload
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/index.js"],
4
4
  "sourcesContent": ["export { default as MediaUpload } from './media-upload';\n"],
5
- "mappings": "AAAA,SAAoB,WAAXA,gBAA8B;",
5
+ "mappings": ";AAAA,SAAoB,WAAXA,gBAA8B;",
6
6
  "names": ["default"]
7
7
  }
@@ -1,7 +1,8 @@
1
+ // packages/media-utils/src/components/media-upload/index.js
1
2
  import { Component } from "@wordpress/element";
2
3
  import { __ } from "@wordpress/i18n";
3
- const DEFAULT_EMPTY_GALLERY = [];
4
- const getFeaturedImageMediaFrame = () => {
4
+ var DEFAULT_EMPTY_GALLERY = [];
5
+ var getFeaturedImageMediaFrame = () => {
5
6
  const { wp } = window;
6
7
  return wp.media.view.MediaFrame.Select.extend({
7
8
  /**
@@ -51,7 +52,7 @@ const getFeaturedImageMediaFrame = () => {
51
52
  }
52
53
  });
53
54
  };
54
- const getSingleMediaFrame = () => {
55
+ var getSingleMediaFrame = () => {
55
56
  const { wp } = window;
56
57
  return wp.media.view.MediaFrame.Select.extend({
57
58
  /**
@@ -79,7 +80,7 @@ const getSingleMediaFrame = () => {
79
80
  }
80
81
  });
81
82
  };
82
- const getGalleryDetailsMediaFrame = () => {
83
+ var getGalleryDetailsMediaFrame = () => {
83
84
  const { wp } = window;
84
85
  return wp.media.view.MediaFrame.Post.extend({
85
86
  /**
@@ -167,7 +168,7 @@ const getGalleryDetailsMediaFrame = () => {
167
168
  }
168
169
  });
169
170
  };
170
- const slimImageObject = (img) => {
171
+ var slimImageObject = (img) => {
171
172
  const attrSet = [
172
173
  "sizes",
173
174
  "mime",
@@ -186,7 +187,7 @@ const slimImageObject = (img) => {
186
187
  return result;
187
188
  }, {});
188
189
  };
189
- const getAttachmentsCollection = (ids) => {
190
+ var getAttachmentsCollection = (ids) => {
190
191
  const { wp } = window;
191
192
  return wp.media.query({
192
193
  order: "ASC",
@@ -197,7 +198,7 @@ const getAttachmentsCollection = (ids) => {
197
198
  type: "image"
198
199
  });
199
200
  };
200
- class MediaUpload extends Component {
201
+ var MediaUpload = class extends Component {
201
202
  constructor() {
202
203
  super(...arguments);
203
204
  this.openModal = this.openModal.bind(this);
@@ -408,7 +409,7 @@ class MediaUpload extends Component {
408
409
  render() {
409
410
  return this.props.render({ open: this.openModal });
410
411
  }
411
- }
412
+ };
412
413
  var media_upload_default = MediaUpload;
413
414
  export {
414
415
  media_upload_default as default
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/media-upload/index.js"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nconst DEFAULT_EMPTY_GALLERY = [];\n\n/**\n * Prepares the Featured Image toolbars and frames.\n *\n * @return {window.wp.media.view.MediaFrame.Select} The default media workflow.\n */\nconst getFeaturedImageMediaFrame = () => {\n\tconst { wp } = window;\n\n\treturn wp.media.view.MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Enables the Set Featured Image Button.\n\t\t *\n\t\t * @param {Object} toolbar toolbar for featured image state\n\t\t * @return {void}\n\t\t */\n\t\tfeaturedImageToolbar( toolbar ) {\n\t\t\tthis.createSelectToolbar( toolbar, {\n\t\t\t\ttext: wp.media.view.l10n.setFeaturedImage,\n\t\t\t\tstate: this.options.state,\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'featured-image' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on(\n\t\t\t\t'toolbar:create:featured-image',\n\t\t\t\tthis.featuredImageToolbar,\n\t\t\t\tthis\n\t\t\t);\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.FeaturedImage(),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n/**\n * Prepares the default frame for selecting a single media item.\n *\n * @return {window.wp.media.view.MediaFrame.Select} The default media workflow.\n */\nconst getSingleMediaFrame = () => {\n\tconst { wp } = window;\n\n\t// Extend the default Select frame, and use the same `createStates` method as in core,\n\t// but with the addition of `filterable: 'uploaded'` to the Library state, so that\n\t// the user can filter the media library by uploaded media.\n\treturn wp.media.view.MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Create the default states on the frame.\n\t\t */\n\t\tcreateStates() {\n\t\t\tconst options = this.options;\n\n\t\t\tif ( this.options.states ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Add the default states.\n\t\t\tthis.states.add( [\n\t\t\t\t// Main states.\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tlibrary: wp.media.query( options.library ),\n\t\t\t\t\tmultiple: options.multiple,\n\t\t\t\t\ttitle: options.title,\n\t\t\t\t\tpriority: 20,\n\t\t\t\t\tfilterable: 'uploaded', // Allow filtering by uploaded images.\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: options.editImage,\n\t\t\t\t} ),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n/**\n * Prepares the Gallery toolbars and frames.\n *\n * @return {window.wp.media.view.MediaFrame.Post} The default media workflow.\n */\nconst getGalleryDetailsMediaFrame = () => {\n\tconst { wp } = window;\n\t/**\n\t * Custom gallery details frame.\n\t *\n\t * @see https://github.com/xwp/wp-core-media-widgets/blob/905edbccfc2a623b73a93dac803c5335519d7837/wp-admin/js/widgets/media-gallery-widget.js\n\t * @class GalleryDetailsMediaFrame\n\t * @class\n\t */\n\treturn wp.media.view.MediaFrame.Post.extend( {\n\t\t/**\n\t\t * Set up gallery toolbar.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tgalleryToolbar() {\n\t\t\tconst editing = this.state().get( 'editing' );\n\t\t\tthis.toolbar.set(\n\t\t\t\tnew wp.media.view.Toolbar( {\n\t\t\t\t\tcontroller: this,\n\t\t\t\t\titems: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tstyle: 'primary',\n\t\t\t\t\t\t\ttext: editing\n\t\t\t\t\t\t\t\t? wp.media.view.l10n.updateGallery\n\t\t\t\t\t\t\t\t: wp.media.view.l10n.insertGallery,\n\t\t\t\t\t\t\tpriority: 80,\n\t\t\t\t\t\t\trequires: { library: true },\n\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @fires wp.media.controller.State#update\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tclick() {\n\t\t\t\t\t\t\t\tconst controller = this.controller,\n\t\t\t\t\t\t\t\t\tstate = controller.state();\n\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\tstate.trigger(\n\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\tstate.get( 'library' )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Restore and reset the default state.\n\t\t\t\t\t\t\t\tcontroller.setState( controller.options.state );\n\t\t\t\t\t\t\t\tcontroller.reset();\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} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'gallery' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on( 'toolbar:create:main-gallery', this.galleryToolbar, this );\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tid: 'gallery',\n\t\t\t\t\ttitle: wp.media.view.l10n.createGalleryTitle,\n\t\t\t\t\tpriority: 40,\n\t\t\t\t\ttoolbar: 'main-gallery',\n\t\t\t\t\tfilterable: 'uploaded',\n\t\t\t\t\tmultiple: 'add',\n\t\t\t\t\teditable: false,\n\n\t\t\t\t\tlibrary: wp.media.query( {\n\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t...this.options.library,\n\t\t\t\t\t} ),\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryEdit( {\n\t\t\t\t\tlibrary: this.options.selection,\n\t\t\t\t\tediting: this.options.editing,\n\t\t\t\t\tmenu: 'gallery',\n\t\t\t\t\tdisplaySettings: false,\n\t\t\t\t\tmultiple: true,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryAdd(),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n// The media library image object contains numerous attributes\n// we only need this set to display the image in the library.\nconst slimImageObject = ( img ) => {\n\tconst attrSet = [\n\t\t'sizes',\n\t\t'mime',\n\t\t'type',\n\t\t'subtype',\n\t\t'id',\n\t\t'url',\n\t\t'alt',\n\t\t'link',\n\t\t'caption',\n\t];\n\treturn attrSet.reduce( ( result, key ) => {\n\t\tif ( img?.hasOwnProperty( key ) ) {\n\t\t\tresult[ key ] = img[ key ];\n\t\t}\n\t\treturn result;\n\t}, {} );\n};\n\nconst getAttachmentsCollection = ( ids ) => {\n\tconst { wp } = window;\n\n\treturn wp.media.query( {\n\t\torder: 'ASC',\n\t\torderby: 'post__in',\n\t\tpost__in: ids,\n\t\tposts_per_page: -1,\n\t\tquery: true,\n\t\ttype: 'image',\n\t} );\n};\n\nclass MediaUpload extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\t\tthis.openModal = this.openModal.bind( this );\n\t\tthis.onOpen = this.onOpen.bind( this );\n\t\tthis.onSelect = this.onSelect.bind( this );\n\t\tthis.onUpdate = this.onUpdate.bind( this );\n\t\tthis.onClose = this.onClose.bind( this );\n\t}\n\n\tinitializeListeners() {\n\t\t// When an image is selected in the media frame...\n\t\tthis.frame.on( 'select', this.onSelect );\n\t\tthis.frame.on( 'update', this.onUpdate );\n\t\tthis.frame.on( 'open', this.onOpen );\n\t\tthis.frame.on( 'close', this.onClose );\n\t}\n\n\t/**\n\t * Sets the Gallery frame and initializes listeners.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetGalleryFrame() {\n\t\tconst {\n\t\t\taddToGallery = false,\n\t\t\tallowedTypes,\n\t\t\tmultiple = false,\n\t\t\tvalue = DEFAULT_EMPTY_GALLERY,\n\t\t} = this.props;\n\n\t\t// If the value did not changed there is no need to rebuild the frame,\n\t\t// we can continue to use the existing one.\n\t\tif ( value === this.lastGalleryValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { wp } = window;\n\n\t\tthis.lastGalleryValue = value;\n\n\t\t// If a frame already existed remove it.\n\t\tif ( this.frame ) {\n\t\t\tthis.frame.remove();\n\t\t}\n\t\tlet currentState;\n\t\tif ( addToGallery ) {\n\t\t\tcurrentState = 'gallery-library';\n\t\t} else {\n\t\t\tcurrentState = value && value.length ? 'gallery-edit' : 'gallery';\n\t\t}\n\t\tif ( ! this.GalleryDetailsMediaFrame ) {\n\t\t\tthis.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();\n\t\t}\n\t\tconst attachments = getAttachmentsCollection( value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t\tmultiple,\n\t\t} );\n\t\tthis.frame = new this.GalleryDetailsMediaFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tstate: currentState,\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\tediting: !! value?.length,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t\tthis.initializeListeners();\n\t}\n\n\t/**\n\t * Initializes the Media Library requirements for the featured image flow.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetFeatureImageFrame() {\n\t\tconst { wp } = window;\n\t\tconst { value: featuredImageId, multiple, allowedTypes } = this.props;\n\t\tconst featuredImageFrame = getFeaturedImageMediaFrame();\n\t\tconst attachments = getAttachmentsCollection( featuredImageId );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t} );\n\t\tthis.frame = new featuredImageFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tstate: 'featured-image',\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\tediting: featuredImageId,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t\t// In order to select the current featured image when opening\n\t\t// the media library we have to set the appropriate settings.\n\t\t// Currently they are set in php for the post editor, but\n\t\t// not for site editor.\n\t\twp.media.view.settings.post = {\n\t\t\t...wp.media.view.settings.post,\n\t\t\tfeaturedImageId: featuredImageId || -1,\n\t\t};\n\t}\n\n\t/**\n\t * Initializes the Media Library requirements for the single image flow.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetSingleMediaFrame() {\n\t\tconst { wp } = window;\n\t\tconst {\n\t\t\tallowedTypes,\n\t\t\tmultiple = false,\n\t\t\ttitle = __( 'Select or Upload Media' ),\n\t\t\tvalue,\n\t\t} = this.props;\n\n\t\tconst frameConfig = {\n\t\t\ttitle,\n\t\t\tmultiple,\n\t\t};\n\t\tif ( !! allowedTypes ) {\n\t\t\tframeConfig.library = { type: allowedTypes };\n\t\t}\n\n\t\t// If a frame already exists, remove it.\n\t\tif ( this.frame ) {\n\t\t\tthis.frame.remove();\n\t\t}\n\n\t\tconst singleImageFrame = getSingleMediaFrame();\n\t\tconst attachments = getAttachmentsCollection( value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t} );\n\t\tthis.frame = new singleImageFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\t...frameConfig,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.frame?.remove();\n\t}\n\n\tonUpdate( selections ) {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\tconst state = this.frame.state();\n\t\tconst selectedImages = selections || state.get( 'selection' );\n\n\t\tif ( ! selectedImages || ! selectedImages.models.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( multiple ) {\n\t\t\tonSelect(\n\t\t\t\tselectedImages.models.map( ( model ) =>\n\t\t\t\t\tslimImageObject( model.toJSON() )\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tonSelect( slimImageObject( selectedImages.models[ 0 ].toJSON() ) );\n\t\t}\n\t}\n\n\tonSelect() {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\t// Get media attachment details from the frame state.\n\t\tconst attachment = this.frame.state().get( 'selection' ).toJSON();\n\t\tonSelect( multiple ? attachment : attachment[ 0 ] );\n\t}\n\n\tonOpen() {\n\t\tconst { wp } = window;\n\t\tconst { value } = this.props;\n\t\tthis.updateCollection();\n\n\t\t//Handle active tab in media model on model open.\n\t\tif ( this.props.mode ) {\n\t\t\tthis.frame.content.mode( this.props.mode );\n\t\t}\n\n\t\t// Handle both this.props.value being either (number[]) multiple ids\n\t\t// (for galleries) or a (number) singular id (e.g. image block).\n\t\tconst hasMedia = Array.isArray( value ) ? !! value?.length : !! value;\n\n\t\tif ( ! hasMedia ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isGallery = this.props.gallery;\n\t\tconst selection = this.frame.state().get( 'selection' );\n\t\tconst valueArray = Array.isArray( value ) ? value : [ value ];\n\n\t\tif ( ! isGallery ) {\n\t\t\tvalueArray.forEach( ( id ) => {\n\t\t\t\tselection.add( wp.media.attachment( id ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Load the images so they are available in the media modal.\n\t\tconst attachments = getAttachmentsCollection( valueArray );\n\n\t\t// Once attachments are loaded, set the current selection.\n\t\tattachments.more().done( function () {\n\t\t\tif ( isGallery && attachments?.models?.length ) {\n\t\t\t\tselection.add( attachments.models );\n\t\t\t}\n\t\t} );\n\t}\n\n\tonClose() {\n\t\tconst { onClose } = this.props;\n\n\t\tif ( onClose ) {\n\t\t\tonClose();\n\t\t}\n\n\t\tthis.frame.detach();\n\t}\n\n\tupdateCollection() {\n\t\tconst frameContent = this.frame.content.get();\n\t\tif ( frameContent && frameContent.collection ) {\n\t\t\tconst collection = frameContent.collection;\n\n\t\t\t// Clean all attachments we have in memory.\n\t\t\tcollection\n\t\t\t\t.toArray()\n\t\t\t\t.forEach( ( model ) => model.trigger( 'destroy', model ) );\n\n\t\t\t// Reset has more flag, if library had small amount of items all items may have been loaded before.\n\t\t\tcollection.mirroring._hasMore = true;\n\n\t\t\t// Request items.\n\t\t\tcollection.more();\n\t\t}\n\t}\n\n\topenModal() {\n\t\tconst {\n\t\t\tgallery = false,\n\t\t\tunstableFeaturedImageFlow = false,\n\t\t\tmodalClass,\n\t\t} = this.props;\n\n\t\tif ( gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t} else {\n\t\t\tthis.buildAndSetSingleMediaFrame();\n\t\t}\n\n\t\tif ( modalClass ) {\n\t\t\tthis.frame.$el.addClass( modalClass );\n\t\t}\n\n\t\tif ( unstableFeaturedImageFlow ) {\n\t\t\tthis.buildAndSetFeatureImageFrame();\n\t\t}\n\t\tthis.initializeListeners();\n\t\tthis.frame.open();\n\t}\n\n\trender() {\n\t\treturn this.props.render( { open: this.openModal } );\n\t}\n}\n\nexport default MediaUpload;\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
1
+ // packages/media-utils/src/components/media-upload-modal/index.tsx
2
2
  import { useState, useCallback, useMemo } from "@wordpress/element";
3
3
  import { __ } from "@wordpress/i18n";
4
4
  import {
@@ -6,13 +6,16 @@ import {
6
6
  store as coreStore
7
7
  } from "@wordpress/core-data";
8
8
  import { resolveSelect } from "@wordpress/data";
9
- import { Modal, DropZone } from "@wordpress/components";
9
+ import { Modal, DropZone, FormFileUpload, Button } from "@wordpress/components";
10
+ import { upload as uploadIcon } from "@wordpress/icons";
10
11
  import { DataViewsPicker } from "@wordpress/dataviews";
11
12
  import { transformAttachment } from "../../utils/transform-attachment";
12
13
  import { uploadMedia } from "../../utils/upload-media";
13
14
  import { unlock } from "../../lock-unlock";
14
- const { useEntityRecordsWithPermissions } = unlock(coreDataPrivateApis);
15
- const LAYOUT_PICKER_GRID = "pickerGrid";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ var { useEntityRecordsWithPermissions } = unlock(coreDataPrivateApis);
17
+ var LAYOUT_PICKER_GRID = "pickerGrid";
18
+ var LAYOUT_PICKER_TABLE = "pickerTable";
16
19
  function MediaUploadModal({
17
20
  allowedTypes = ["image"],
18
21
  multiple = false,
@@ -61,7 +64,7 @@ function MediaUploadModal({
61
64
  }
62
65
  });
63
66
  if (!filters.media_type) {
64
- filters.media_type = allowedTypes.includes("*") ? void 0 : allowedTypes[0];
67
+ filters.media_type = allowedTypes.includes("*") ? void 0 : allowedTypes;
65
68
  }
66
69
  return {
67
70
  per_page: view.perPage || 20,
@@ -150,6 +153,20 @@ function MediaUploadModal({
150
153
  const handleModalClose = useCallback(() => {
151
154
  onClose?.();
152
155
  }, [onClose]);
156
+ const handleUpload = onUpload || uploadMedia;
157
+ const handleFileSelect = useCallback(
158
+ (event) => {
159
+ const files = event.target.files;
160
+ if (files && files.length > 0) {
161
+ const filesArray = Array.from(files);
162
+ handleUpload({
163
+ allowedTypes,
164
+ filesList: filesArray
165
+ });
166
+ }
167
+ },
168
+ [allowedTypes, handleUpload]
169
+ );
153
170
  const paginationInfo = useMemo(
154
171
  () => ({
155
172
  totalItems,
@@ -159,14 +176,20 @@ function MediaUploadModal({
159
176
  );
160
177
  const defaultLayouts = useMemo(
161
178
  () => ({
162
- [LAYOUT_PICKER_GRID]: {}
179
+ [LAYOUT_PICKER_GRID]: {},
180
+ [LAYOUT_PICKER_TABLE]: {}
163
181
  }),
164
182
  []
165
183
  );
184
+ const acceptTypes = useMemo(() => {
185
+ if (allowedTypes.includes("*")) {
186
+ return void 0;
187
+ }
188
+ return allowedTypes.join(",");
189
+ }, [allowedTypes]);
166
190
  if (!isOpen) {
167
191
  return null;
168
192
  }
169
- const handleUpload = onUpload || uploadMedia;
170
193
  return /* @__PURE__ */ jsxs(
171
194
  Modal,
172
195
  {
@@ -175,6 +198,24 @@ function MediaUploadModal({
175
198
  isDismissible,
176
199
  className: modalClass,
177
200
  size: "fill",
201
+ headerActions: /* @__PURE__ */ jsx(
202
+ FormFileUpload,
203
+ {
204
+ accept: acceptTypes,
205
+ multiple: true,
206
+ onChange: handleFileSelect,
207
+ __next40pxDefaultSize: true,
208
+ render: ({ openFileDialog }) => /* @__PURE__ */ jsx(
209
+ Button,
210
+ {
211
+ onClick: openFileDialog,
212
+ icon: uploadIcon,
213
+ __next40pxDefaultSize: true,
214
+ children: __("Upload media")
215
+ }
216
+ )
217
+ }
218
+ ),
178
219
  children: [
179
220
  /* @__PURE__ */ jsx(
180
221
  DropZone,
@@ -193,8 +234,7 @@ function MediaUploadModal({
193
234
  if (filteredFiles.length > 0) {
194
235
  handleUpload({
195
236
  allowedTypes,
196
- filesList: filteredFiles,
197
- multiple
237
+ filesList: filteredFiles
198
238
  });
199
239
  }
200
240
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/media-upload-modal/index.tsx"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useState, useCallback, useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tprivateApis as coreDataPrivateApis,\n\tstore as coreStore,\n} from '@wordpress/core-data';\nimport { resolveSelect } from '@wordpress/data';\nimport { Modal, DropZone } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { DataViewsPicker } from '@wordpress/dataviews';\nimport type { View, Field, ActionButton } from '@wordpress/dataviews';\nimport type { Attachment, RestAttachment } from '../../utils/types';\nimport { transformAttachment } from '../../utils/transform-attachment';\nimport { uploadMedia } from '../../utils/upload-media';\nimport { unlock } from '../../lock-unlock';\n\nconst { useEntityRecordsWithPermissions } = unlock( coreDataPrivateApis );\n\n// Layout constant - matching the picker grid layout type\nconst LAYOUT_PICKER_GRID = 'pickerGrid';\n\ninterface MediaUploadModalProps {\n\t/**\n\t * Array of allowed media types.\n\t * @default ['image']\n\t */\n\tallowedTypes?: string[];\n\n\t/**\n\t * Whether multiple files can be selected.\n\t * @default false\n\t */\n\tmultiple?: boolean;\n\n\t/**\n\t * The currently selected media item(s).\n\t * Can be a single ID number or array of IDs for multiple selection.\n\t */\n\tvalue?: number | number[];\n\n\t/**\n\t * Function called when media is selected.\n\t * Receives single attachment object or array of attachments.\n\t */\n\tonSelect: ( media: Attachment | Attachment[] ) => void;\n\n\t/**\n\t * Function called when the modal is closed without selection.\n\t */\n\tonClose?: () => void;\n\n\t/**\n\t * Function to handle media uploads.\n\t * If not provided, drag and drop will be disabled.\n\t */\n\tonUpload?: ( args: {\n\t\tallowedTypes?: string[];\n\t\tfilesList: File[];\n\t\tonFileChange?: ( attachments: Partial< Attachment >[] ) => void;\n\t\tonError?: ( error: Error ) => void;\n\t\tmultiple?: boolean;\n\t} ) => void;\n\n\t/**\n\t * Title for the modal.\n\t * @default 'Select Media'\n\t */\n\ttitle?: string;\n\n\t/**\n\t * Whether the modal is open.\n\t */\n\tisOpen: boolean;\n\n\t/**\n\t * Whether the modal can be closed by clicking outside or pressing escape.\n\t * @default true\n\t */\n\tisDismissible?: boolean;\n\n\t/**\n\t * Additional CSS class for the modal.\n\t */\n\tmodalClass?: string;\n\n\t/**\n\t * Whether to show a search input.\n\t * @default true\n\t */\n\tsearch?: boolean;\n\n\t/**\n\t * Label for the search input.\n\t */\n\tsearchLabel?: string;\n}\n\n/**\n * MediaUploadModal component that uses Modal and DataViewsPicker for media selection.\n *\n * This is a modern functional component alternative to the legacy MediaUpload class component.\n * It provides a cleaner API and better integration with the WordPress block editor.\n *\n * @param props Component props\n * @param props.allowedTypes Array of allowed media types\n * @param props.multiple Whether multiple files can be selected\n * @param props.value Currently selected media item(s)\n * @param props.onSelect Function called when media is selected\n * @param props.onClose Function called when modal is closed\n * @param props.onUpload Function to handle media uploads\n * @param props.title Title for the modal\n * @param props.isOpen Whether the modal is open\n * @param props.isDismissible Whether modal can be dismissed\n * @param props.modalClass Additional CSS class for modal\n * @param props.search Whether to show search input\n * @param props.searchLabel Label for search input\n * @return JSX element or null\n */\nexport function MediaUploadModal( {\n\tallowedTypes = [ 'image' ],\n\tmultiple = false,\n\tvalue,\n\tonSelect,\n\tonClose,\n\tonUpload,\n\ttitle = __( 'Select Media' ),\n\tisOpen,\n\tisDismissible = true,\n\tmodalClass,\n\tsearch = true,\n\tsearchLabel = __( 'Search media' ),\n}: MediaUploadModalProps ) {\n\tconst [ selection, setSelection ] = useState< string[] >( () => {\n\t\tif ( ! value ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn Array.isArray( value )\n\t\t\t? value.map( String )\n\t\t\t: [ String( value ) ];\n\t} );\n\n\t// DataViews configuration - allow view updates\n\tconst [ view, setView ] = useState< View >( () => ( {\n\t\ttype: LAYOUT_PICKER_GRID,\n\t\tfields: [],\n\t\ttitleField: 'title',\n\t\tmediaField: 'url',\n\t\tsearch: '',\n\t\tpage: 1,\n\t\tperPage: 20,\n\t\tfilters: [],\n\t} ) );\n\n\t// Build query args based on view properties, similar to PostList\n\tconst queryArgs = useMemo( () => {\n\t\tconst filters: Record< string, any > = {};\n\n\t\tview.filters?.forEach( ( filter ) => {\n\t\t\t// Handle media type filters\n\t\t\tif ( filter.field === 'media_type' ) {\n\t\t\t\tfilters.media_type = filter.value;\n\t\t\t}\n\t\t\t// Handle author filters\n\t\t\tif ( filter.field === 'author' ) {\n\t\t\t\tfilters.author = filter.value;\n\t\t\t}\n\t\t\t// Handle date filters\n\t\t\tif ( filter.field === 'date' ) {\n\t\t\t\tfilters.after = filter.value?.after;\n\t\t\t\tfilters.before = filter.value?.before;\n\t\t\t}\n\t\t\t// Handle mime type filters\n\t\t\tif ( filter.field === 'mime_type' ) {\n\t\t\t\tfilters.mime_type = filter.value;\n\t\t\t}\n\t\t} );\n\n\t\t// Base media type on allowedTypes if no filter is set\n\t\tif ( ! filters.media_type ) {\n\t\t\tfilters.media_type = allowedTypes.includes( '*' )\n\t\t\t\t? undefined\n\t\t\t\t: allowedTypes[ 0 ];\n\t\t}\n\n\t\treturn {\n\t\t\tper_page: view.perPage || 20,\n\t\t\tpage: view.page || 1,\n\t\t\tstatus: 'inherit',\n\t\t\torder: view.sort?.direction,\n\t\t\torderby: view.sort?.field,\n\t\t\tsearch: view.search,\n\t\t\t...filters,\n\t\t};\n\t}, [ view, allowedTypes ] );\n\n\t// Fetch all media attachments using WordPress core data with permissions\n\tconst {\n\t\trecords: mediaRecords,\n\t\tisResolving: isLoading,\n\t\ttotalItems,\n\t\ttotalPages,\n\t} = useEntityRecordsWithPermissions( 'postType', 'attachment', queryArgs );\n\n\tconst fields: Field< RestAttachment >[] = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tid: 'url',\n\t\t\t\ttype: 'media' as const,\n\t\t\t\tlabel: __( 'Media' ),\n\t\t\t\trender: ( { item }: { item: RestAttachment } ) => (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={ item.source_url }\n\t\t\t\t\t\talt={ item.alt_text }\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\tobjectFit: 'cover',\n\t\t\t\t\t\t\tborderRadius: '4px',\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{\n\t\t\t\tid: 'title',\n\t\t\t\ttype: 'text' as const,\n\t\t\t\tlabel: __( 'Title' ),\n\t\t\t\tgetValue: ( { item }: { item: RestAttachment } ) => {\n\t\t\t\t\tconst titleValue = item.title.raw || item.title.rendered;\n\t\t\t\t\treturn titleValue || __( '(no title)' );\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'alt',\n\t\t\t\ttype: 'text' as const,\n\t\t\t\tlabel: __( 'Alt text' ),\n\t\t\t\tgetValue: ( { item }: { item: RestAttachment } ) =>\n\t\t\t\t\titem.alt_text,\n\t\t\t},\n\t\t],\n\t\t[]\n\t);\n\n\tconst actions: ActionButton< RestAttachment >[] = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tid: 'select',\n\t\t\t\tlabel: multiple ? __( 'Select' ) : __( 'Select' ),\n\t\t\t\tisPrimary: true,\n\t\t\t\tsupportsBulk: multiple,\n\t\t\t\tasync callback() {\n\t\t\t\t\tif ( selection.length === 0 ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst selectedPostsQuery = {\n\t\t\t\t\t\tinclude: selection,\n\t\t\t\t\t\tper_page: -1,\n\t\t\t\t\t};\n\n\t\t\t\t\tconst selectedPosts = await resolveSelect(\n\t\t\t\t\t\tcoreStore\n\t\t\t\t\t).getEntityRecords(\n\t\t\t\t\t\t'postType',\n\t\t\t\t\t\t'attachment',\n\t\t\t\t\t\tselectedPostsQuery\n\t\t\t\t\t);\n\n\t\t\t\t\t// Transform the selected posts to the expected Attachment format\n\t\t\t\t\tconst transformedPosts =\n\t\t\t\t\t\tselectedPosts?.map( transformAttachment );\n\n\t\t\t\t\tconst selectedItems = multiple\n\t\t\t\t\t\t? transformedPosts\n\t\t\t\t\t\t: transformedPosts?.[ 0 ];\n\n\t\t\t\t\tonSelect( selectedItems );\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\t[ multiple, onSelect, selection ]\n\t);\n\n\tconst handleModalClose = useCallback( () => {\n\t\tonClose?.();\n\t}, [ onClose ] );\n\n\tconst paginationInfo = useMemo(\n\t\t() => ( {\n\t\t\ttotalItems,\n\t\t\ttotalPages,\n\t\t} ),\n\t\t[ totalItems, totalPages ]\n\t);\n\n\tconst defaultLayouts = useMemo(\n\t\t() => ( {\n\t\t\t[ LAYOUT_PICKER_GRID ]: {},\n\t\t} ),\n\t\t[]\n\t);\n\n\tif ( ! isOpen ) {\n\t\treturn null;\n\t}\n\n\t// Use onUpload if provided, otherwise fall back to uploadMedia\n\tconst handleUpload = onUpload || uploadMedia;\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ title }\n\t\t\tonRequestClose={ handleModalClose }\n\t\t\tisDismissible={ isDismissible }\n\t\t\tclassName={ modalClass }\n\t\t\tsize=\"fill\"\n\t\t>\n\t\t\t<DropZone\n\t\t\t\tonFilesDrop={ ( files ) => {\n\t\t\t\t\tlet filteredFiles = files;\n\t\t\t\t\t// Filter files by allowed types if specified\n\t\t\t\t\tif ( allowedTypes && ! allowedTypes.includes( '*' ) ) {\n\t\t\t\t\t\tfilteredFiles = files.filter( ( file ) =>\n\t\t\t\t\t\t\tallowedTypes.some( ( allowedType ) => {\n\t\t\t\t\t\t\t\t// Check if the file type matches the allowed MIME type\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tfile.type === allowedType ||\n\t\t\t\t\t\t\t\t\tfile.type.startsWith(\n\t\t\t\t\t\t\t\t\t\tallowedType.replace( '*', '' )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif ( filteredFiles.length > 0 ) {\n\t\t\t\t\t\thandleUpload( {\n\t\t\t\t\t\t\tallowedTypes,\n\t\t\t\t\t\t\tfilesList: filteredFiles,\n\t\t\t\t\t\t\tmultiple,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tlabel={ __( 'Drop files to upload' ) }\n\t\t\t/>\n\t\t\t<DataViewsPicker\n\t\t\t\tdata={ mediaRecords || [] }\n\t\t\t\tfields={ fields }\n\t\t\t\tview={ view }\n\t\t\t\tonChangeView={ setView }\n\t\t\t\tactions={ actions }\n\t\t\t\tselection={ selection }\n\t\t\t\tonChangeSelection={ setSelection }\n\t\t\t\tisLoading={ isLoading }\n\t\t\t\tpaginationInfo={ paginationInfo }\n\t\t\t\tdefaultLayouts={ defaultLayouts }\n\t\t\t\tgetItemId={ ( item: RestAttachment ) => String( item.id ) }\n\t\t\t\tsearch={ search }\n\t\t\t\tsearchLabel={ searchLabel }\n\t\t\t\titemListLabel={ __( 'Media items' ) }\n\t\t\t/>\n\t\t</Modal>\n\t);\n}\n\nexport default MediaUploadModal;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useState, useCallback, useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tprivateApis as coreDataPrivateApis,\n\tstore as coreStore,\n} from '@wordpress/core-data';\nimport { resolveSelect } from '@wordpress/data';\nimport { Modal, DropZone, FormFileUpload, Button } from '@wordpress/components';\nimport { upload as uploadIcon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { DataViewsPicker } from '@wordpress/dataviews';\nimport type { View, Field, ActionButton } from '@wordpress/dataviews';\nimport type { Attachment, RestAttachment } from '../../utils/types';\nimport { transformAttachment } from '../../utils/transform-attachment';\nimport { uploadMedia } from '../../utils/upload-media';\nimport { unlock } from '../../lock-unlock';\n\nconst { useEntityRecordsWithPermissions } = unlock( coreDataPrivateApis );\n\n// Layout constants - matching the picker layout types\nconst LAYOUT_PICKER_GRID = 'pickerGrid';\nconst LAYOUT_PICKER_TABLE = 'pickerTable';\n\ninterface MediaUploadModalProps {\n\t/**\n\t * Array of allowed media types.\n\t * @default ['image']\n\t */\n\tallowedTypes?: string[];\n\n\t/**\n\t * Whether multiple files can be selected.\n\t * @default false\n\t */\n\tmultiple?: boolean;\n\n\t/**\n\t * The currently selected media item(s).\n\t * Can be a single ID number or array of IDs for multiple selection.\n\t */\n\tvalue?: number | number[];\n\n\t/**\n\t * Function called when media is selected.\n\t * Receives single attachment object or array of attachments.\n\t */\n\tonSelect: ( media: Attachment | Attachment[] ) => void;\n\n\t/**\n\t * Function called when the modal is closed without selection.\n\t */\n\tonClose?: () => void;\n\n\t/**\n\t * Function to handle media uploads.\n\t * If not provided, drag and drop will be disabled.\n\t */\n\tonUpload?: ( args: {\n\t\tallowedTypes?: string[];\n\t\tfilesList: File[];\n\t\tonFileChange?: ( attachments: Partial< Attachment >[] ) => void;\n\t\tonError?: ( error: Error ) => void;\n\t\tmultiple?: boolean;\n\t} ) => void;\n\n\t/**\n\t * Title for the modal.\n\t * @default 'Select Media'\n\t */\n\ttitle?: string;\n\n\t/**\n\t * Whether the modal is open.\n\t */\n\tisOpen: boolean;\n\n\t/**\n\t * Whether the modal can be closed by clicking outside or pressing escape.\n\t * @default true\n\t */\n\tisDismissible?: boolean;\n\n\t/**\n\t * Additional CSS class for the modal.\n\t */\n\tmodalClass?: string;\n\n\t/**\n\t * Whether to show a search input.\n\t * @default true\n\t */\n\tsearch?: boolean;\n\n\t/**\n\t * Label for the search input.\n\t */\n\tsearchLabel?: string;\n}\n\n/**\n * MediaUploadModal component that uses Modal and DataViewsPicker for media selection.\n *\n * This is a modern functional component alternative to the legacy MediaUpload class component.\n * It provides a cleaner API and better integration with the WordPress block editor.\n *\n * @param props Component props\n * @param props.allowedTypes Array of allowed media types\n * @param props.multiple Whether multiple files can be selected\n * @param props.value Currently selected media item(s)\n * @param props.onSelect Function called when media is selected\n * @param props.onClose Function called when modal is closed\n * @param props.onUpload Function to handle media uploads\n * @param props.title Title for the modal\n * @param props.isOpen Whether the modal is open\n * @param props.isDismissible Whether modal can be dismissed\n * @param props.modalClass Additional CSS class for modal\n * @param props.search Whether to show search input\n * @param props.searchLabel Label for search input\n * @return JSX element or null\n */\nexport function MediaUploadModal( {\n\tallowedTypes = [ 'image' ],\n\tmultiple = false,\n\tvalue,\n\tonSelect,\n\tonClose,\n\tonUpload,\n\ttitle = __( 'Select Media' ),\n\tisOpen,\n\tisDismissible = true,\n\tmodalClass,\n\tsearch = true,\n\tsearchLabel = __( 'Search media' ),\n}: MediaUploadModalProps ) {\n\tconst [ selection, setSelection ] = useState< string[] >( () => {\n\t\tif ( ! value ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn Array.isArray( value )\n\t\t\t? value.map( String )\n\t\t\t: [ String( value ) ];\n\t} );\n\n\t// DataViews configuration - allow view updates\n\tconst [ view, setView ] = useState< View >( () => ( {\n\t\ttype: LAYOUT_PICKER_GRID,\n\t\tfields: [],\n\t\ttitleField: 'title',\n\t\tmediaField: 'url',\n\t\tsearch: '',\n\t\tpage: 1,\n\t\tperPage: 20,\n\t\tfilters: [],\n\t} ) );\n\n\t// Build query args based on view properties, similar to PostList\n\tconst queryArgs = useMemo( () => {\n\t\tconst filters: Record< string, any > = {};\n\n\t\tview.filters?.forEach( ( filter ) => {\n\t\t\t// Handle media type filters\n\t\t\tif ( filter.field === 'media_type' ) {\n\t\t\t\tfilters.media_type = filter.value;\n\t\t\t}\n\t\t\t// Handle author filters\n\t\t\tif ( filter.field === 'author' ) {\n\t\t\t\tfilters.author = filter.value;\n\t\t\t}\n\t\t\t// Handle date filters\n\t\t\tif ( filter.field === 'date' ) {\n\t\t\t\tfilters.after = filter.value?.after;\n\t\t\t\tfilters.before = filter.value?.before;\n\t\t\t}\n\t\t\t// Handle mime type filters\n\t\t\tif ( filter.field === 'mime_type' ) {\n\t\t\t\tfilters.mime_type = filter.value;\n\t\t\t}\n\t\t} );\n\n\t\t// Base media type on allowedTypes if no filter is set\n\t\tif ( ! filters.media_type ) {\n\t\t\tfilters.media_type = allowedTypes.includes( '*' )\n\t\t\t\t? undefined\n\t\t\t\t: allowedTypes;\n\t\t}\n\n\t\treturn {\n\t\t\tper_page: view.perPage || 20,\n\t\t\tpage: view.page || 1,\n\t\t\tstatus: 'inherit',\n\t\t\torder: view.sort?.direction,\n\t\t\torderby: view.sort?.field,\n\t\t\tsearch: view.search,\n\t\t\t...filters,\n\t\t};\n\t}, [ view, allowedTypes ] );\n\n\t// Fetch all media attachments using WordPress core data with permissions\n\tconst {\n\t\trecords: mediaRecords,\n\t\tisResolving: isLoading,\n\t\ttotalItems,\n\t\ttotalPages,\n\t} = useEntityRecordsWithPermissions( 'postType', 'attachment', queryArgs );\n\n\tconst fields: Field< RestAttachment >[] = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tid: 'url',\n\t\t\t\ttype: 'media' as const,\n\t\t\t\tlabel: __( 'Media' ),\n\t\t\t\trender: ( { item }: { item: RestAttachment } ) => (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={ item.source_url }\n\t\t\t\t\t\talt={ item.alt_text }\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\tobjectFit: 'cover',\n\t\t\t\t\t\t\tborderRadius: '4px',\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{\n\t\t\t\tid: 'title',\n\t\t\t\ttype: 'text' as const,\n\t\t\t\tlabel: __( 'Title' ),\n\t\t\t\tgetValue: ( { item }: { item: RestAttachment } ) => {\n\t\t\t\t\tconst titleValue = item.title.raw || item.title.rendered;\n\t\t\t\t\treturn titleValue || __( '(no title)' );\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'alt',\n\t\t\t\ttype: 'text' as const,\n\t\t\t\tlabel: __( 'Alt text' ),\n\t\t\t\tgetValue: ( { item }: { item: RestAttachment } ) =>\n\t\t\t\t\titem.alt_text,\n\t\t\t},\n\t\t],\n\t\t[]\n\t);\n\n\tconst actions: ActionButton< RestAttachment >[] = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tid: 'select',\n\t\t\t\tlabel: multiple ? __( 'Select' ) : __( 'Select' ),\n\t\t\t\tisPrimary: true,\n\t\t\t\tsupportsBulk: multiple,\n\t\t\t\tasync callback() {\n\t\t\t\t\tif ( selection.length === 0 ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst selectedPostsQuery = {\n\t\t\t\t\t\tinclude: selection,\n\t\t\t\t\t\tper_page: -1,\n\t\t\t\t\t};\n\n\t\t\t\t\tconst selectedPosts = await resolveSelect(\n\t\t\t\t\t\tcoreStore\n\t\t\t\t\t).getEntityRecords(\n\t\t\t\t\t\t'postType',\n\t\t\t\t\t\t'attachment',\n\t\t\t\t\t\tselectedPostsQuery\n\t\t\t\t\t);\n\n\t\t\t\t\t// Transform the selected posts to the expected Attachment format\n\t\t\t\t\tconst transformedPosts =\n\t\t\t\t\t\tselectedPosts?.map( transformAttachment );\n\n\t\t\t\t\tconst selectedItems = multiple\n\t\t\t\t\t\t? transformedPosts\n\t\t\t\t\t\t: transformedPosts?.[ 0 ];\n\n\t\t\t\t\tonSelect( selectedItems );\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\t[ multiple, onSelect, selection ]\n\t);\n\n\tconst handleModalClose = useCallback( () => {\n\t\tonClose?.();\n\t}, [ onClose ] );\n\n\t// Use onUpload if provided, otherwise fall back to uploadMedia\n\tconst handleUpload = onUpload || uploadMedia;\n\n\tconst handleFileSelect = useCallback(\n\t\t( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\t\tconst files = event.target.files;\n\t\t\tif ( files && files.length > 0 ) {\n\t\t\t\tconst filesArray = Array.from( files );\n\t\t\t\thandleUpload( {\n\t\t\t\t\tallowedTypes,\n\t\t\t\t\tfilesList: filesArray,\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[ allowedTypes, handleUpload ]\n\t);\n\n\tconst paginationInfo = useMemo(\n\t\t() => ( {\n\t\t\ttotalItems,\n\t\t\ttotalPages,\n\t\t} ),\n\t\t[ totalItems, totalPages ]\n\t);\n\n\tconst defaultLayouts = useMemo(\n\t\t() => ( {\n\t\t\t[ LAYOUT_PICKER_GRID ]: {},\n\t\t\t[ LAYOUT_PICKER_TABLE ]: {},\n\t\t} ),\n\t\t[]\n\t);\n\n\t// Build accept attribute from allowedTypes\n\tconst acceptTypes = useMemo( () => {\n\t\tif ( allowedTypes.includes( '*' ) ) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn allowedTypes.join( ',' );\n\t}, [ allowedTypes ] );\n\n\tif ( ! isOpen ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ title }\n\t\t\tonRequestClose={ handleModalClose }\n\t\t\tisDismissible={ isDismissible }\n\t\t\tclassName={ modalClass }\n\t\t\tsize=\"fill\"\n\t\t\theaderActions={\n\t\t\t\t<FormFileUpload\n\t\t\t\t\taccept={ acceptTypes }\n\t\t\t\t\tmultiple\n\t\t\t\t\tonChange={ handleFileSelect }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\trender={ ( { openFileDialog } ) => (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tonClick={ openFileDialog }\n\t\t\t\t\t\t\ticon={ uploadIcon }\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Upload media' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<DropZone\n\t\t\t\tonFilesDrop={ ( files ) => {\n\t\t\t\t\tlet filteredFiles = files;\n\t\t\t\t\t// Filter files by allowed types if specified\n\t\t\t\t\tif ( allowedTypes && ! allowedTypes.includes( '*' ) ) {\n\t\t\t\t\t\tfilteredFiles = files.filter( ( file ) =>\n\t\t\t\t\t\t\tallowedTypes.some( ( allowedType ) => {\n\t\t\t\t\t\t\t\t// Check if the file type matches the allowed MIME type\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tfile.type === allowedType ||\n\t\t\t\t\t\t\t\t\tfile.type.startsWith(\n\t\t\t\t\t\t\t\t\t\tallowedType.replace( '*', '' )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif ( filteredFiles.length > 0 ) {\n\t\t\t\t\t\thandleUpload( {\n\t\t\t\t\t\t\tallowedTypes,\n\t\t\t\t\t\t\tfilesList: filteredFiles,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tlabel={ __( 'Drop files to upload' ) }\n\t\t\t/>\n\t\t\t<DataViewsPicker\n\t\t\t\tdata={ mediaRecords || [] }\n\t\t\t\tfields={ fields }\n\t\t\t\tview={ view }\n\t\t\t\tonChangeView={ setView }\n\t\t\t\tactions={ actions }\n\t\t\t\tselection={ selection }\n\t\t\t\tonChangeSelection={ setSelection }\n\t\t\t\tisLoading={ isLoading }\n\t\t\t\tpaginationInfo={ paginationInfo }\n\t\t\t\tdefaultLayouts={ defaultLayouts }\n\t\t\t\tgetItemId={ ( item: RestAttachment ) => String( item.id ) }\n\t\t\t\tsearch={ search }\n\t\t\t\tsearchLabel={ searchLabel }\n\t\t\t\titemListLabel={ __( 'Media items' ) }\n\t\t\t/>\n\t\t</Modal>\n\t);\n}\n\nexport default MediaUploadModal;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ // packages/media-utils/src/index.ts
1
2
  export * from "./components";
2
3
  import { uploadMedia } from "./utils/upload-media";
3
4
  import { transformAttachment } from "./utils/transform-attachment";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
4
  "sourcesContent": ["export * from './components';\n\nexport { uploadMedia } from './utils/upload-media';\nexport { transformAttachment } from './utils/transform-attachment';\nexport { validateFileSize } from './utils/validate-file-size';\nexport { validateMimeType } from './utils/validate-mime-type';\nexport { validateMimeTypeForUser } from './utils/validate-mime-type-for-user';\n\nexport type { Attachment, RestAttachment } from './utils/types';\n\nexport { privateApis } from './private-apis';\n"],
5
- "mappings": "AAAA,cAAc;AAEd,SAAS,mBAAmB;AAC5B,SAAS,2BAA2B;AACpC,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,+BAA+B;AAIxC,SAAS,mBAAmB;",
5
+ "mappings": ";AAAA,cAAc;AAEd,SAAS,mBAAmB;AAC5B,SAAS,2BAA2B;AACpC,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,+BAA+B;AAIxC,SAAS,mBAAmB;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
+ // packages/media-utils/src/lock-unlock.ts
1
2
  import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from "@wordpress/private-apis";
2
- const { lock, unlock } = __dangerousOptInToUnstableAPIsOnlyForCoreModules(
3
+ var { lock, unlock } = __dangerousOptInToUnstableAPIsOnlyForCoreModules(
3
4
  "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
4
5
  "@wordpress/media-utils"
5
6
  );
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/lock-unlock.ts"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.',\n\t\t'@wordpress/media-utils'\n\t);\n"],
5
- "mappings": "AAGA,SAAS,wDAAwD;AAE1D,MAAM,EAAE,MAAM,OAAO,IAC3B;AAAA,EACC;AAAA,EACA;AACD;",
5
+ "mappings": ";AAGA,SAAS,wDAAwD;AAE1D,IAAM,EAAE,MAAM,OAAO,IAC3B;AAAA,EACC;AAAA,EACA;AACD;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,8 @@
1
+ // packages/media-utils/src/private-apis.ts
1
2
  import { sideloadMedia } from "./utils/sideload-media";
2
3
  import { MediaUploadModal } from "./components/media-upload-modal";
3
4
  import { lock } from "./lock-unlock";
4
- const privateApis = {};
5
+ var privateApis = {};
5
6
  lock(privateApis, {
6
7
  sideloadMedia,
7
8
  MediaUploadModal
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/private-apis.ts"],
4
4
  "sourcesContent": ["/**\n * Internal dependencies\n */\nimport { sideloadMedia } from './utils/sideload-media';\nimport { MediaUploadModal } from './components/media-upload-modal';\nimport { lock } from './lock-unlock';\n\n/**\n * Private @wordpress/media-utils APIs.\n */\nexport const privateApis = {};\n\nlock( privateApis, {\n\tsideloadMedia,\n\tMediaUploadModal,\n} );\n"],
5
- "mappings": "AAGA,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AACjC,SAAS,YAAY;AAKd,MAAM,cAAc,CAAC;AAE5B,KAAM,aAAa;AAAA,EAClB;AAAA,EACA;AACD,CAAE;",
5
+ "mappings": ";AAGA,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AACjC,SAAS,YAAY;AAKd,IAAM,cAAc,CAAC;AAE5B,KAAM,aAAa;AAAA,EAClB;AAAA,EACA;AACD,CAAE;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ // packages/media-utils/src/utils/flatten-form-data.ts
1
2
  function isPlainObject(data) {
2
3
  return data !== null && typeof data === "object" && Object.getPrototypeOf(data) === Object.prototype;
3
4
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/flatten-form-data.ts"],
4
4
  "sourcesContent": ["/**\n * Determines whether the passed argument appears to be a plain object.\n *\n * @param data The object to inspect.\n */\nfunction isPlainObject( data: unknown ): data is Record< string, unknown > {\n\treturn (\n\t\tdata !== null &&\n\t\ttypeof data === 'object' &&\n\t\tObject.getPrototypeOf( data ) === Object.prototype\n\t);\n}\n\n/**\n * Recursively flatten data passed to form data, to allow using multi-level objects.\n *\n * @param {FormData} formData Form data object.\n * @param {string} key Key to amend to form data object\n * @param {string|Object} data Data to be amended to form data.\n */\nexport function flattenFormData(\n\tformData: FormData,\n\tkey: string,\n\tdata: string | undefined | Record< string, string >\n) {\n\tif ( isPlainObject( data ) ) {\n\t\tfor ( const [ name, value ] of Object.entries( data ) ) {\n\t\t\tflattenFormData( formData, `${ key }[${ name }]`, value );\n\t\t}\n\t} else if ( data !== undefined ) {\n\t\tformData.append( key, String( data ) );\n\t}\n}\n"],
5
- "mappings": "AAKA,SAAS,cAAe,MAAmD;AAC1E,SACC,SAAS,QACT,OAAO,SAAS,YAChB,OAAO,eAAgB,IAAK,MAAM,OAAO;AAE3C;AASO,SAAS,gBACf,UACA,KACA,MACC;AACD,MAAK,cAAe,IAAK,GAAI;AAC5B,eAAY,CAAE,MAAM,KAAM,KAAK,OAAO,QAAS,IAAK,GAAI;AACvD,sBAAiB,UAAU,GAAI,GAAI,IAAK,IAAK,KAAK,KAAM;AAAA,IACzD;AAAA,EACD,WAAY,SAAS,QAAY;AAChC,aAAS,OAAQ,KAAK,OAAQ,IAAK,CAAE;AAAA,EACtC;AACD;",
5
+ "mappings": ";AAKA,SAAS,cAAe,MAAmD;AAC1E,SACC,SAAS,QACT,OAAO,SAAS,YAChB,OAAO,eAAgB,IAAK,MAAM,OAAO;AAE3C;AASO,SAAS,gBACf,UACA,KACA,MACC;AACD,MAAK,cAAe,IAAK,GAAI;AAC5B,eAAY,CAAE,MAAM,KAAM,KAAK,OAAO,QAAS,IAAK,GAAI;AACvD,sBAAiB,UAAU,GAAI,GAAI,IAAK,IAAK,KAAK,KAAM;AAAA,IACzD;AAAA,EACD,WAAY,SAAS,QAAY;AAChC,aAAS,OAAQ,KAAK,OAAQ,IAAK,CAAE;AAAA,EACtC;AACD;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ // packages/media-utils/src/utils/get-mime-types-array.ts
1
2
  function getMimeTypesArray(wpMimeTypesObject) {
2
3
  if (!wpMimeTypesObject) {
3
4
  return null;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/get-mime-types-array.ts"],
4
4
  "sourcesContent": ["/**\n * Browsers may use unexpected mime types, and they differ from browser to browser.\n * This function computes a flexible array of mime types from the mime type structured provided by the server.\n * Converts { jpg|jpeg|jpe: \"image/jpeg\" } into [ \"image/jpeg\", \"image/jpg\", \"image/jpeg\", \"image/jpe\" ]\n *\n * @param {?Object} wpMimeTypesObject Mime type object received from the server.\n * Extensions are keys separated by '|' and values are mime types associated with an extension.\n *\n * @return An array of mime types or null\n */\nexport function getMimeTypesArray(\n\twpMimeTypesObject?: Record< string, string > | null\n) {\n\tif ( ! wpMimeTypesObject ) {\n\t\treturn null;\n\t}\n\treturn Object.entries( wpMimeTypesObject ).flatMap(\n\t\t( [ extensionsString, mime ] ) => {\n\t\t\tconst [ type ] = mime.split( '/' );\n\t\t\tconst extensions = extensionsString.split( '|' );\n\t\t\treturn [\n\t\t\t\tmime,\n\t\t\t\t...extensions.map(\n\t\t\t\t\t( extension ) => `${ type }/${ extension }`\n\t\t\t\t),\n\t\t\t];\n\t\t}\n\t);\n}\n"],
5
- "mappings": "AAUO,SAAS,kBACf,mBACC;AACD,MAAK,CAAE,mBAAoB;AAC1B,WAAO;AAAA,EACR;AACA,SAAO,OAAO,QAAS,iBAAkB,EAAE;AAAA,IAC1C,CAAE,CAAE,kBAAkB,IAAK,MAAO;AACjC,YAAM,CAAE,IAAK,IAAI,KAAK,MAAO,GAAI;AACjC,YAAM,aAAa,iBAAiB,MAAO,GAAI;AAC/C,aAAO;AAAA,QACN;AAAA,QACA,GAAG,WAAW;AAAA,UACb,CAAE,cAAe,GAAI,IAAK,IAAK,SAAU;AAAA,QAC1C;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;",
5
+ "mappings": ";AAUO,SAAS,kBACf,mBACC;AACD,MAAK,CAAE,mBAAoB;AAC1B,WAAO;AAAA,EACR;AACA,SAAO,OAAO,QAAS,iBAAkB,EAAE;AAAA,IAC1C,CAAE,CAAE,kBAAkB,IAAK,MAAO;AACjC,YAAM,CAAE,IAAK,IAAI,KAAK,MAAO,GAAI;AACjC,YAAM,aAAa,iBAAiB,MAAO,GAAI;AAC/C,aAAO;AAAA,QACN;AAAA,QACA,GAAG,WAAW;AAAA,UACb,CAAE,cAAe,GAAI,IAAK,IAAK,SAAU;AAAA,QAC1C;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;",
6
6
  "names": []
7
7
  }