@wordpress/media-utils 5.37.0 → 5.37.1-next.ba3aee3a2.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 (91) hide show
  1. package/CHANGELOG.md +0 -2
  2. package/LICENSE.md +1 -1
  3. package/build/components/{index.js → index.cjs} +3 -3
  4. package/build/components/{index.js.map → index.cjs.map} +1 -1
  5. package/build/components/media-upload/{index.js → index.cjs} +1 -1
  6. package/build/components/media-upload-modal/{index.js → index.cjs} +25 -13
  7. package/build/components/media-upload-modal/index.cjs.map +7 -0
  8. package/build/{index.js → index.cjs} +9 -9
  9. package/build/{index.js.map → index.cjs.map} +1 -1
  10. package/build/{lock-unlock.js → lock-unlock.cjs} +1 -1
  11. package/build/{private-apis.js → private-apis.cjs} +4 -4
  12. package/build/utils/{flatten-form-data.js → flatten-form-data.cjs} +1 -1
  13. package/build/utils/{get-mime-types-array.js → get-mime-types-array.cjs} +1 -1
  14. package/build/utils/{sideload-media.js → sideload-media.cjs} +3 -3
  15. package/build/utils/{sideload-to-server.js → sideload-to-server.cjs} +3 -3
  16. package/build/utils/{transform-attachment.js → transform-attachment.cjs} +1 -1
  17. package/build/utils/{types.js → types.cjs} +1 -1
  18. package/build/utils/{upload-error.js → upload-error.cjs} +1 -1
  19. package/build/utils/{upload-media.js → upload-media.cjs} +6 -6
  20. package/build/utils/{upload-to-server.js → upload-to-server.cjs} +3 -3
  21. package/build/utils/{validate-file-size.js → validate-file-size.cjs} +2 -2
  22. package/build/utils/{validate-mime-type-for-user.js → validate-mime-type-for-user.cjs} +3 -3
  23. package/build/utils/{validate-mime-type.js → validate-mime-type.cjs} +2 -2
  24. package/build-module/components/index.mjs +6 -0
  25. package/build-module/components/{index.js.map → index.mjs.map} +1 -1
  26. package/build-module/components/media-upload/{index.js → index.mjs} +1 -1
  27. package/build-module/components/media-upload-modal/{index.js → index.mjs} +28 -13
  28. package/build-module/components/media-upload-modal/index.mjs.map +7 -0
  29. package/build-module/index.mjs +17 -0
  30. package/build-module/{lock-unlock.js → lock-unlock.mjs} +1 -1
  31. package/build-module/{private-apis.js → private-apis.mjs} +4 -4
  32. package/build-module/utils/{flatten-form-data.js → flatten-form-data.mjs} +1 -1
  33. package/build-module/utils/{get-mime-types-array.js → get-mime-types-array.mjs} +1 -1
  34. package/build-module/utils/{sideload-media.js → sideload-media.mjs} +3 -3
  35. package/build-module/utils/{sideload-to-server.js → sideload-to-server.mjs} +3 -3
  36. package/build-module/utils/{transform-attachment.js → transform-attachment.mjs} +1 -1
  37. package/build-module/utils/types.mjs +1 -0
  38. package/build-module/utils/{upload-error.js → upload-error.mjs} +1 -1
  39. package/build-module/utils/{upload-media.js → upload-media.mjs} +6 -6
  40. package/build-module/utils/{upload-to-server.js → upload-to-server.mjs} +3 -3
  41. package/build-module/utils/{validate-file-size.js → validate-file-size.mjs} +2 -2
  42. package/build-module/utils/{validate-mime-type-for-user.js → validate-mime-type-for-user.mjs} +3 -3
  43. package/build-module/utils/{validate-mime-type.js → validate-mime-type.mjs} +2 -2
  44. package/build-style/style-rtl.css +64 -0
  45. package/build-style/style.css +64 -0
  46. package/build-types/components/index.d.ts +1 -1
  47. package/build-types/components/index.d.ts.map +1 -1
  48. package/build-types/components/media-upload-modal/index.d.ts.map +1 -1
  49. package/package.json +26 -17
  50. package/src/components/media-upload-modal/index.tsx +25 -10
  51. package/src/components/media-upload-modal/style.scss +23 -0
  52. package/src/style.scss +1 -0
  53. package/build/components/media-upload-modal/index.js.map +0 -7
  54. package/build-module/components/index.js +0 -6
  55. package/build-module/components/media-upload-modal/index.js.map +0 -7
  56. package/build-module/index.js +0 -17
  57. package/build-module/utils/types.js +0 -1
  58. package/tsconfig.json +0 -21
  59. package/tsconfig.tsbuildinfo +0 -1
  60. /package/build/components/media-upload/{index.js.map → index.cjs.map} +0 -0
  61. /package/build/{lock-unlock.js.map → lock-unlock.cjs.map} +0 -0
  62. /package/build/{private-apis.js.map → private-apis.cjs.map} +0 -0
  63. /package/build/utils/{flatten-form-data.js.map → flatten-form-data.cjs.map} +0 -0
  64. /package/build/utils/{get-mime-types-array.js.map → get-mime-types-array.cjs.map} +0 -0
  65. /package/build/utils/{sideload-media.js.map → sideload-media.cjs.map} +0 -0
  66. /package/build/utils/{sideload-to-server.js.map → sideload-to-server.cjs.map} +0 -0
  67. /package/build/utils/{transform-attachment.js.map → transform-attachment.cjs.map} +0 -0
  68. /package/build/utils/{types.js.map → types.cjs.map} +0 -0
  69. /package/build/utils/{upload-error.js.map → upload-error.cjs.map} +0 -0
  70. /package/build/utils/{upload-media.js.map → upload-media.cjs.map} +0 -0
  71. /package/build/utils/{upload-to-server.js.map → upload-to-server.cjs.map} +0 -0
  72. /package/build/utils/{validate-file-size.js.map → validate-file-size.cjs.map} +0 -0
  73. /package/build/utils/{validate-mime-type-for-user.js.map → validate-mime-type-for-user.cjs.map} +0 -0
  74. /package/build/utils/{validate-mime-type.js.map → validate-mime-type.cjs.map} +0 -0
  75. /package/build-module/components/media-upload/{index.js.map → index.mjs.map} +0 -0
  76. /package/build-module/{index.js.map → index.mjs.map} +0 -0
  77. /package/build-module/{lock-unlock.js.map → lock-unlock.mjs.map} +0 -0
  78. /package/build-module/{private-apis.js.map → private-apis.mjs.map} +0 -0
  79. /package/build-module/utils/{flatten-form-data.js.map → flatten-form-data.mjs.map} +0 -0
  80. /package/build-module/utils/{get-mime-types-array.js.map → get-mime-types-array.mjs.map} +0 -0
  81. /package/build-module/utils/{sideload-media.js.map → sideload-media.mjs.map} +0 -0
  82. /package/build-module/utils/{sideload-to-server.js.map → sideload-to-server.mjs.map} +0 -0
  83. /package/build-module/utils/{transform-attachment.js.map → transform-attachment.mjs.map} +0 -0
  84. /package/build-module/utils/{types.js.map → types.mjs.map} +0 -0
  85. /package/build-module/utils/{upload-error.js.map → upload-error.mjs.map} +0 -0
  86. /package/build-module/utils/{upload-media.js.map → upload-media.mjs.map} +0 -0
  87. /package/build-module/utils/{upload-to-server.js.map → upload-to-server.mjs.map} +0 -0
  88. /package/build-module/utils/{validate-file-size.js.map → validate-file-size.mjs.map} +0 -0
  89. /package/build-module/utils/{validate-mime-type-for-user.js.map → validate-mime-type-for-user.mjs.map} +0 -0
  90. /package/build-module/utils/{validate-mime-type.js.map → validate-mime-type.mjs.map} +0 -0
  91. /package/src/components/{index.js → index.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
- ## 5.37.0 (2025-12-23)
6
-
7
5
  ## 5.36.0 (2025-11-26)
8
6
 
9
7
  ## 5.35.0 (2025-11-12)
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ## Gutenberg
2
2
 
3
- Copyright 2016-2025 by the contributors
3
+ Copyright 2016-2026 by the contributors
4
4
 
5
5
  **License for Contributions (on and after April 15, 2021)**
6
6
 
@@ -27,15 +27,15 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
 
30
- // packages/media-utils/src/components/index.js
30
+ // packages/media-utils/src/components/index.ts
31
31
  var components_exports = {};
32
32
  __export(components_exports, {
33
33
  MediaUpload: () => import_media_upload.default
34
34
  });
35
35
  module.exports = __toCommonJS(components_exports);
36
- var import_media_upload = __toESM(require("./media-upload"));
36
+ var import_media_upload = __toESM(require("./media-upload/index.cjs"));
37
37
  // Annotate the CommonJS export names for ESM import in node:
38
38
  0 && (module.exports = {
39
39
  MediaUpload
40
40
  });
41
- //# sourceMappingURL=index.js.map
41
+ //# sourceMappingURL=index.cjs.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/components/index.js"],
3
+ "sources": ["../../src/components/index.ts"],
4
4
  "sourcesContent": ["export { default as MediaUpload } from './media-upload';\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAuC;",
6
6
  "names": []
@@ -435,4 +435,4 @@ var MediaUpload = class extends import_element.Component {
435
435
  }
436
436
  };
437
437
  var media_upload_default = MediaUpload;
438
- //# sourceMappingURL=index.js.map
438
+ //# sourceMappingURL=index.cjs.map
@@ -32,9 +32,9 @@ var import_components = require("@wordpress/components");
32
32
  var import_icons = require("@wordpress/icons");
33
33
  var import_dataviews = require("@wordpress/dataviews");
34
34
  var import_media_fields = require("@wordpress/media-fields");
35
- var import_transform_attachment = require("../../utils/transform-attachment");
36
- var import_upload_media = require("../../utils/upload-media");
37
- var import_lock_unlock = require("../../lock-unlock");
35
+ var import_transform_attachment = require("../../utils/transform-attachment.cjs");
36
+ var import_upload_media = require("../../utils/upload-media.cjs");
37
+ var import_lock_unlock = require("../../lock-unlock.cjs");
38
38
  var import_jsx_runtime = require("react/jsx-runtime");
39
39
  var { useEntityRecordsWithPermissions } = (0, import_lock_unlock.unlock)(import_core_data.privateApis);
40
40
  var LAYOUT_PICKER_GRID = "pickerGrid";
@@ -79,9 +79,12 @@ function MediaUploadModal({
79
79
  if (filter.field === "author") {
80
80
  filters.author = filter.value;
81
81
  }
82
- if (filter.field === "date") {
83
- filters.after = filter.value?.after;
84
- filters.before = filter.value?.before;
82
+ if (filter.field === "date" || filter.field === "modified") {
83
+ if (filter.operator === "before") {
84
+ filters.before = filter.value;
85
+ } else if (filter.operator === "after") {
86
+ filters.after = filter.value;
87
+ }
85
88
  }
86
89
  if (filter.field === "mime_type") {
87
90
  filters.mime_type = filter.value;
@@ -97,6 +100,7 @@ function MediaUploadModal({
97
100
  order: view.sort?.direction,
98
101
  orderby: view.sort?.field,
99
102
  search: view.search,
103
+ _embed: "wp:attached-to",
100
104
  ...filters
101
105
  };
102
106
  }, [view, allowedTypes]);
@@ -108,6 +112,13 @@ function MediaUploadModal({
108
112
  } = useEntityRecordsWithPermissions("postType", "attachment", queryArgs);
109
113
  const fields = (0, import_element.useMemo)(
110
114
  () => [
115
+ // Media field definitions from @wordpress/media-fields
116
+ // Cast is safe because RestAttachment has the same properties as Attachment
117
+ {
118
+ ...import_media_fields.mediaThumbnailField,
119
+ enableHiding: false
120
+ // Within the modal, the thumbnail should always be shown.
121
+ },
111
122
  {
112
123
  id: "title",
113
124
  type: "text",
@@ -117,16 +128,16 @@ function MediaUploadModal({
117
128
  return titleValue || (0, import_i18n.__)("(no title)");
118
129
  }
119
130
  },
120
- // Media field definitions from @wordpress/media-fields
121
- // Cast is safe because RestAttachment has the same properties as Attachment
122
- import_media_fields.mediaThumbnailField,
123
131
  import_media_fields.altTextField,
124
132
  import_media_fields.captionField,
125
133
  import_media_fields.descriptionField,
134
+ import_media_fields.dateAddedField,
135
+ import_media_fields.dateModifiedField,
126
136
  import_media_fields.filenameField,
127
137
  import_media_fields.filesizeField,
128
138
  import_media_fields.mediaDimensionsField,
129
- import_media_fields.mimeTypeField
139
+ import_media_fields.mimeTypeField,
140
+ import_media_fields.attachedToField
130
141
  ],
131
142
  []
132
143
  );
@@ -152,7 +163,7 @@ function MediaUploadModal({
152
163
  "attachment",
153
164
  selectedPostsQuery
154
165
  );
155
- const transformedPosts = selectedPosts?.map(import_transform_attachment.transformAttachment);
166
+ const transformedPosts = (selectedPosts ?? []).map(import_transform_attachment.transformAttachment).filter(Boolean);
156
167
  const selectedItems = multiple ? transformedPosts : transformedPosts?.[0];
157
168
  onSelect(selectedItems);
158
169
  }
@@ -191,7 +202,7 @@ function MediaUploadModal({
191
202
  showTitle: false
192
203
  },
193
204
  [LAYOUT_PICKER_TABLE]: {
194
- fields: ["filename", "filesize", "media_dimensions"],
205
+ fields: ["filename", "filesize", "media_dimensions", "date"],
195
206
  showTitle: true
196
207
  }
197
208
  }),
@@ -213,6 +224,7 @@ function MediaUploadModal({
213
224
  onRequestClose: handleModalClose,
214
225
  isDismissible,
215
226
  className: modalClass,
227
+ overlayClassName: "media-upload-modal",
216
228
  size: "fill",
217
229
  headerActions: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
218
230
  import_components.FormFileUpload,
@@ -285,4 +297,4 @@ var media_upload_modal_default = MediaUploadModal;
285
297
  0 && (module.exports = {
286
298
  MediaUploadModal
287
299
  });
288
- //# sourceMappingURL=index.js.map
300
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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, FormFileUpload, Button } from '@wordpress/components';\nimport { upload as uploadIcon } from '@wordpress/icons';\nimport { DataViewsPicker } from '@wordpress/dataviews';\nimport type { View, Field, ActionButton } from '@wordpress/dataviews';\nimport {\n\taltTextField,\n\tattachedToField,\n\tcaptionField,\n\tdateAddedField,\n\tdateModifiedField,\n\tdescriptionField,\n\tfilenameField,\n\tfilesizeField,\n\tmediaDimensionsField,\n\tmediaThumbnailField,\n\tmimeTypeField,\n} from '@wordpress/media-fields';\n\n/**\n * Internal dependencies\n */\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\tshowTitle: false,\n\t\ttitleField: 'title',\n\t\tmediaField: 'media_thumbnail',\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' || filter.field === 'modified' ) {\n\t\t\t\tif ( filter.operator === 'before' ) {\n\t\t\t\t\tfilters.before = filter.value;\n\t\t\t\t} else if ( filter.operator === 'after' ) {\n\t\t\t\t\tfilters.after = filter.value;\n\t\t\t\t}\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_embed: 'wp:attached-to',\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// Media field definitions from @wordpress/media-fields\n\t\t\t// Cast is safe because RestAttachment has the same properties as Attachment\n\t\t\t{\n\t\t\t\t...( mediaThumbnailField as Field< RestAttachment > ),\n\t\t\t\tenableHiding: false, // Within the modal, the thumbnail should always be shown.\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\taltTextField as Field< RestAttachment >,\n\t\t\tcaptionField as Field< RestAttachment >,\n\t\t\tdescriptionField as Field< RestAttachment >,\n\t\t\tdateAddedField as Field< RestAttachment >,\n\t\t\tdateModifiedField as Field< RestAttachment >,\n\t\t\tfilenameField as Field< RestAttachment >,\n\t\t\tfilesizeField as Field< RestAttachment >,\n\t\t\tmediaDimensionsField as Field< RestAttachment >,\n\t\t\tmimeTypeField as Field< RestAttachment >,\n\t\t\tattachedToField as Field< RestAttachment >,\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< RestAttachment >(\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 = ( selectedPosts ?? [] )\n\t\t\t\t\t\t.map( transformAttachment )\n\t\t\t\t\t\t.filter( Boolean );\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\tfields: [],\n\t\t\t\tshowTitle: false,\n\t\t\t},\n\t\t\t[ LAYOUT_PICKER_TABLE ]: {\n\t\t\t\tfields: [ 'filename', 'filesize', 'media_dimensions', 'date' ],\n\t\t\t\tshowTitle: true,\n\t\t\t},\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\toverlayClassName=\"media-upload-modal\"\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
+ "names": ["coreDataPrivateApis", "coreStore", "uploadIcon"]
7
+ }
@@ -29,13 +29,13 @@ __export(index_exports, {
29
29
  validateMimeTypeForUser: () => import_validate_mime_type_for_user.validateMimeTypeForUser
30
30
  });
31
31
  module.exports = __toCommonJS(index_exports);
32
- __reExport(index_exports, require("./components"), module.exports);
33
- var import_upload_media = require("./utils/upload-media");
34
- var import_transform_attachment = require("./utils/transform-attachment");
35
- var import_validate_file_size = require("./utils/validate-file-size");
36
- var import_validate_mime_type = require("./utils/validate-mime-type");
37
- var import_validate_mime_type_for_user = require("./utils/validate-mime-type-for-user");
38
- var import_private_apis = require("./private-apis");
32
+ __reExport(index_exports, require("./components/index.cjs"), module.exports);
33
+ var import_upload_media = require("./utils/upload-media.cjs");
34
+ var import_transform_attachment = require("./utils/transform-attachment.cjs");
35
+ var import_validate_file_size = require("./utils/validate-file-size.cjs");
36
+ var import_validate_mime_type = require("./utils/validate-mime-type.cjs");
37
+ var import_validate_mime_type_for_user = require("./utils/validate-mime-type-for-user.cjs");
38
+ var import_private_apis = require("./private-apis.cjs");
39
39
  // Annotate the CommonJS export names for ESM import in node:
40
40
  0 && (module.exports = {
41
41
  privateApis,
@@ -44,6 +44,6 @@ var import_private_apis = require("./private-apis");
44
44
  validateFileSize,
45
45
  validateMimeType,
46
46
  validateMimeTypeForUser,
47
- ...require("./components")
47
+ ...require("./components/index.cjs")
48
48
  });
49
- //# sourceMappingURL=index.js.map
49
+ //# sourceMappingURL=index.cjs.map
@@ -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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAc,yBAAd;AAEA,0BAA4B;AAC5B,kCAAoC;AACpC,gCAAiC;AACjC,gCAAiC;AACjC,yCAAwC;AAIxC,0BAA4B;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAc,mCAAd;AAEA,0BAA4B;AAC5B,kCAAoC;AACpC,gCAAiC;AACjC,gCAAiC;AACjC,yCAAwC;AAIxC,0BAA4B;",
6
6
  "names": []
7
7
  }
@@ -34,4 +34,4 @@ var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnl
34
34
  lock,
35
35
  unlock
36
36
  });
37
- //# sourceMappingURL=lock-unlock.js.map
37
+ //# sourceMappingURL=lock-unlock.cjs.map
@@ -23,9 +23,9 @@ __export(private_apis_exports, {
23
23
  privateApis: () => privateApis
24
24
  });
25
25
  module.exports = __toCommonJS(private_apis_exports);
26
- var import_sideload_media = require("./utils/sideload-media");
27
- var import_media_upload_modal = require("./components/media-upload-modal");
28
- var import_lock_unlock = require("./lock-unlock");
26
+ var import_sideload_media = require("./utils/sideload-media.cjs");
27
+ var import_media_upload_modal = require("./components/media-upload-modal/index.cjs");
28
+ var import_lock_unlock = require("./lock-unlock.cjs");
29
29
  var privateApis = {};
30
30
  (0, import_lock_unlock.lock)(privateApis, {
31
31
  sideloadMedia: import_sideload_media.sideloadMedia,
@@ -35,4 +35,4 @@ var privateApis = {};
35
35
  0 && (module.exports = {
36
36
  privateApis
37
37
  });
38
- //# sourceMappingURL=private-apis.js.map
38
+ //# sourceMappingURL=private-apis.cjs.map
@@ -39,4 +39,4 @@ function flattenFormData(formData, key, data) {
39
39
  0 && (module.exports = {
40
40
  flattenFormData
41
41
  });
42
- //# sourceMappingURL=flatten-form-data.js.map
42
+ //# sourceMappingURL=flatten-form-data.cjs.map
@@ -44,4 +44,4 @@ function getMimeTypesArray(wpMimeTypesObject) {
44
44
  0 && (module.exports = {
45
45
  getMimeTypesArray
46
46
  });
47
- //# sourceMappingURL=get-mime-types-array.js.map
47
+ //# sourceMappingURL=get-mime-types-array.cjs.map
@@ -24,8 +24,8 @@ __export(sideload_media_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(sideload_media_exports);
26
26
  var import_i18n = require("@wordpress/i18n");
27
- var import_sideload_to_server = require("./sideload-to-server");
28
- var import_upload_error = require("./upload-error");
27
+ var import_sideload_to_server = require("./sideload-to-server.cjs");
28
+ var import_upload_error = require("./upload-error.cjs");
29
29
  var noop = () => {
30
30
  };
31
31
  async function sideloadMedia({
@@ -69,4 +69,4 @@ async function sideloadMedia({
69
69
  0 && (module.exports = {
70
70
  sideloadMedia
71
71
  });
72
- //# sourceMappingURL=sideload-media.js.map
72
+ //# sourceMappingURL=sideload-media.cjs.map
@@ -34,8 +34,8 @@ __export(sideload_to_server_exports, {
34
34
  });
35
35
  module.exports = __toCommonJS(sideload_to_server_exports);
36
36
  var import_api_fetch = __toESM(require("@wordpress/api-fetch"));
37
- var import_flatten_form_data = require("./flatten-form-data");
38
- var import_transform_attachment = require("./transform-attachment");
37
+ var import_flatten_form_data = require("./flatten-form-data.cjs");
38
+ var import_transform_attachment = require("./transform-attachment.cjs");
39
39
  async function sideloadToServer(file, attachmentId, additionalData = {}, signal) {
40
40
  const data = new FormData();
41
41
  data.append("file", file, file.name || file.type.replace("/", "."));
@@ -59,4 +59,4 @@ async function sideloadToServer(file, attachmentId, additionalData = {}, signal)
59
59
  0 && (module.exports = {
60
60
  sideloadToServer
61
61
  });
62
- //# sourceMappingURL=sideload-to-server.js.map
62
+ //# sourceMappingURL=sideload-to-server.cjs.map
@@ -38,4 +38,4 @@ function transformAttachment(attachment) {
38
38
  0 && (module.exports = {
39
39
  transformAttachment
40
40
  });
41
- //# sourceMappingURL=transform-attachment.js.map
41
+ //# sourceMappingURL=transform-attachment.cjs.map
@@ -16,4 +16,4 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
16
16
  // packages/media-utils/src/utils/types.ts
17
17
  var types_exports = {};
18
18
  module.exports = __toCommonJS(types_exports);
19
- //# sourceMappingURL=types.js.map
19
+ //# sourceMappingURL=types.cjs.map
@@ -37,4 +37,4 @@ var UploadError = class extends Error {
37
37
  0 && (module.exports = {
38
38
  UploadError
39
39
  });
40
- //# sourceMappingURL=upload-error.js.map
40
+ //# sourceMappingURL=upload-error.cjs.map
@@ -25,11 +25,11 @@ __export(upload_media_exports, {
25
25
  module.exports = __toCommonJS(upload_media_exports);
26
26
  var import_i18n = require("@wordpress/i18n");
27
27
  var import_blob = require("@wordpress/blob");
28
- var import_upload_to_server = require("./upload-to-server");
29
- var import_validate_mime_type = require("./validate-mime-type");
30
- var import_validate_mime_type_for_user = require("./validate-mime-type-for-user");
31
- var import_validate_file_size = require("./validate-file-size");
32
- var import_upload_error = require("./upload-error");
28
+ var import_upload_to_server = require("./upload-to-server.cjs");
29
+ var import_validate_mime_type = require("./validate-mime-type.cjs");
30
+ var import_validate_mime_type_for_user = require("./validate-mime-type-for-user.cjs");
31
+ var import_validate_file_size = require("./validate-file-size.cjs");
32
+ var import_upload_error = require("./upload-error.cjs");
33
33
  function uploadMedia({
34
34
  wpAllowedMimeTypes,
35
35
  allowedTypes,
@@ -118,4 +118,4 @@ function uploadMedia({
118
118
  0 && (module.exports = {
119
119
  uploadMedia
120
120
  });
121
- //# sourceMappingURL=upload-media.js.map
121
+ //# sourceMappingURL=upload-media.cjs.map
@@ -34,8 +34,8 @@ __export(upload_to_server_exports, {
34
34
  });
35
35
  module.exports = __toCommonJS(upload_to_server_exports);
36
36
  var import_api_fetch = __toESM(require("@wordpress/api-fetch"));
37
- var import_flatten_form_data = require("./flatten-form-data");
38
- var import_transform_attachment = require("./transform-attachment");
37
+ var import_flatten_form_data = require("./flatten-form-data.cjs");
38
+ var import_transform_attachment = require("./transform-attachment.cjs");
39
39
  async function uploadToServer(file, additionalData = {}, signal) {
40
40
  const data = new FormData();
41
41
  data.append("file", file, file.name || file.type.replace("/", "."));
@@ -60,4 +60,4 @@ async function uploadToServer(file, additionalData = {}, signal) {
60
60
  0 && (module.exports = {
61
61
  uploadToServer
62
62
  });
63
- //# sourceMappingURL=upload-to-server.js.map
63
+ //# sourceMappingURL=upload-to-server.cjs.map
@@ -24,7 +24,7 @@ __export(validate_file_size_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(validate_file_size_exports);
26
26
  var import_i18n = require("@wordpress/i18n");
27
- var import_upload_error = require("./upload-error");
27
+ var import_upload_error = require("./upload-error.cjs");
28
28
  function validateFileSize(file, maxUploadFileSize) {
29
29
  if (file.size <= 0) {
30
30
  throw new import_upload_error.UploadError({
@@ -55,4 +55,4 @@ function validateFileSize(file, maxUploadFileSize) {
55
55
  0 && (module.exports = {
56
56
  validateFileSize
57
57
  });
58
- //# sourceMappingURL=validate-file-size.js.map
58
+ //# sourceMappingURL=validate-file-size.cjs.map
@@ -24,8 +24,8 @@ __export(validate_mime_type_for_user_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(validate_mime_type_for_user_exports);
26
26
  var import_i18n = require("@wordpress/i18n");
27
- var import_upload_error = require("./upload-error");
28
- var import_get_mime_types_array = require("./get-mime-types-array");
27
+ var import_upload_error = require("./upload-error.cjs");
28
+ var import_get_mime_types_array = require("./get-mime-types-array.cjs");
29
29
  function validateMimeTypeForUser(file, wpAllowedMimeTypes) {
30
30
  const allowedMimeTypesForUser = (0, import_get_mime_types_array.getMimeTypesArray)(wpAllowedMimeTypes);
31
31
  if (!allowedMimeTypesForUser) {
@@ -52,4 +52,4 @@ function validateMimeTypeForUser(file, wpAllowedMimeTypes) {
52
52
  0 && (module.exports = {
53
53
  validateMimeTypeForUser
54
54
  });
55
- //# sourceMappingURL=validate-mime-type-for-user.js.map
55
+ //# sourceMappingURL=validate-mime-type-for-user.cjs.map
@@ -24,7 +24,7 @@ __export(validate_mime_type_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(validate_mime_type_exports);
26
26
  var import_i18n = require("@wordpress/i18n");
27
- var import_upload_error = require("./upload-error");
27
+ var import_upload_error = require("./upload-error.cjs");
28
28
  function validateMimeType(file, allowedTypes) {
29
29
  if (!allowedTypes) {
30
30
  return;
@@ -51,4 +51,4 @@ function validateMimeType(file, allowedTypes) {
51
51
  0 && (module.exports = {
52
52
  validateMimeType
53
53
  });
54
- //# sourceMappingURL=validate-mime-type.js.map
54
+ //# sourceMappingURL=validate-mime-type.cjs.map
@@ -0,0 +1,6 @@
1
+ // packages/media-utils/src/components/index.ts
2
+ import { default as default2 } from "./media-upload/index.mjs";
3
+ export {
4
+ default2 as MediaUpload
5
+ };
6
+ //# sourceMappingURL=index.mjs.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/components/index.js"],
3
+ "sources": ["../../src/components/index.ts"],
4
4
  "sourcesContent": ["export { default as MediaUpload } from './media-upload';\n"],
5
5
  "mappings": ";AAAA,SAAoB,WAAXA,gBAA8B;",
6
6
  "names": ["default"]
@@ -414,4 +414,4 @@ var media_upload_default = MediaUpload;
414
414
  export {
415
415
  media_upload_default as default
416
416
  };
417
- //# sourceMappingURL=index.js.map
417
+ //# sourceMappingURL=index.mjs.map
@@ -11,7 +11,10 @@ import { upload as uploadIcon } from "@wordpress/icons";
11
11
  import { DataViewsPicker } from "@wordpress/dataviews";
12
12
  import {
13
13
  altTextField,
14
+ attachedToField,
14
15
  captionField,
16
+ dateAddedField,
17
+ dateModifiedField,
15
18
  descriptionField,
16
19
  filenameField,
17
20
  filesizeField,
@@ -19,9 +22,9 @@ import {
19
22
  mediaThumbnailField,
20
23
  mimeTypeField
21
24
  } from "@wordpress/media-fields";
22
- import { transformAttachment } from "../../utils/transform-attachment";
23
- import { uploadMedia } from "../../utils/upload-media";
24
- import { unlock } from "../../lock-unlock";
25
+ import { transformAttachment } from "../../utils/transform-attachment.mjs";
26
+ import { uploadMedia } from "../../utils/upload-media.mjs";
27
+ import { unlock } from "../../lock-unlock.mjs";
25
28
  import { jsx, jsxs } from "react/jsx-runtime";
26
29
  var { useEntityRecordsWithPermissions } = unlock(coreDataPrivateApis);
27
30
  var LAYOUT_PICKER_GRID = "pickerGrid";
@@ -66,9 +69,12 @@ function MediaUploadModal({
66
69
  if (filter.field === "author") {
67
70
  filters.author = filter.value;
68
71
  }
69
- if (filter.field === "date") {
70
- filters.after = filter.value?.after;
71
- filters.before = filter.value?.before;
72
+ if (filter.field === "date" || filter.field === "modified") {
73
+ if (filter.operator === "before") {
74
+ filters.before = filter.value;
75
+ } else if (filter.operator === "after") {
76
+ filters.after = filter.value;
77
+ }
72
78
  }
73
79
  if (filter.field === "mime_type") {
74
80
  filters.mime_type = filter.value;
@@ -84,6 +90,7 @@ function MediaUploadModal({
84
90
  order: view.sort?.direction,
85
91
  orderby: view.sort?.field,
86
92
  search: view.search,
93
+ _embed: "wp:attached-to",
87
94
  ...filters
88
95
  };
89
96
  }, [view, allowedTypes]);
@@ -95,6 +102,13 @@ function MediaUploadModal({
95
102
  } = useEntityRecordsWithPermissions("postType", "attachment", queryArgs);
96
103
  const fields = useMemo(
97
104
  () => [
105
+ // Media field definitions from @wordpress/media-fields
106
+ // Cast is safe because RestAttachment has the same properties as Attachment
107
+ {
108
+ ...mediaThumbnailField,
109
+ enableHiding: false
110
+ // Within the modal, the thumbnail should always be shown.
111
+ },
98
112
  {
99
113
  id: "title",
100
114
  type: "text",
@@ -104,16 +118,16 @@ function MediaUploadModal({
104
118
  return titleValue || __("(no title)");
105
119
  }
106
120
  },
107
- // Media field definitions from @wordpress/media-fields
108
- // Cast is safe because RestAttachment has the same properties as Attachment
109
- mediaThumbnailField,
110
121
  altTextField,
111
122
  captionField,
112
123
  descriptionField,
124
+ dateAddedField,
125
+ dateModifiedField,
113
126
  filenameField,
114
127
  filesizeField,
115
128
  mediaDimensionsField,
116
- mimeTypeField
129
+ mimeTypeField,
130
+ attachedToField
117
131
  ],
118
132
  []
119
133
  );
@@ -139,7 +153,7 @@ function MediaUploadModal({
139
153
  "attachment",
140
154
  selectedPostsQuery
141
155
  );
142
- const transformedPosts = selectedPosts?.map(transformAttachment);
156
+ const transformedPosts = (selectedPosts ?? []).map(transformAttachment).filter(Boolean);
143
157
  const selectedItems = multiple ? transformedPosts : transformedPosts?.[0];
144
158
  onSelect(selectedItems);
145
159
  }
@@ -178,7 +192,7 @@ function MediaUploadModal({
178
192
  showTitle: false
179
193
  },
180
194
  [LAYOUT_PICKER_TABLE]: {
181
- fields: ["filename", "filesize", "media_dimensions"],
195
+ fields: ["filename", "filesize", "media_dimensions", "date"],
182
196
  showTitle: true
183
197
  }
184
198
  }),
@@ -200,6 +214,7 @@ function MediaUploadModal({
200
214
  onRequestClose: handleModalClose,
201
215
  isDismissible,
202
216
  className: modalClass,
217
+ overlayClassName: "media-upload-modal",
203
218
  size: "fill",
204
219
  headerActions: /* @__PURE__ */ jsx(
205
220
  FormFileUpload,
@@ -272,4 +287,4 @@ export {
272
287
  MediaUploadModal,
273
288
  media_upload_modal_default as default
274
289
  };
275
- //# sourceMappingURL=index.js.map
290
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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, FormFileUpload, Button } from '@wordpress/components';\nimport { upload as uploadIcon } from '@wordpress/icons';\nimport { DataViewsPicker } from '@wordpress/dataviews';\nimport type { View, Field, ActionButton } from '@wordpress/dataviews';\nimport {\n\taltTextField,\n\tattachedToField,\n\tcaptionField,\n\tdateAddedField,\n\tdateModifiedField,\n\tdescriptionField,\n\tfilenameField,\n\tfilesizeField,\n\tmediaDimensionsField,\n\tmediaThumbnailField,\n\tmimeTypeField,\n} from '@wordpress/media-fields';\n\n/**\n * Internal dependencies\n */\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\tshowTitle: false,\n\t\ttitleField: 'title',\n\t\tmediaField: 'media_thumbnail',\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' || filter.field === 'modified' ) {\n\t\t\t\tif ( filter.operator === 'before' ) {\n\t\t\t\t\tfilters.before = filter.value;\n\t\t\t\t} else if ( filter.operator === 'after' ) {\n\t\t\t\t\tfilters.after = filter.value;\n\t\t\t\t}\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_embed: 'wp:attached-to',\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// Media field definitions from @wordpress/media-fields\n\t\t\t// Cast is safe because RestAttachment has the same properties as Attachment\n\t\t\t{\n\t\t\t\t...( mediaThumbnailField as Field< RestAttachment > ),\n\t\t\t\tenableHiding: false, // Within the modal, the thumbnail should always be shown.\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\taltTextField as Field< RestAttachment >,\n\t\t\tcaptionField as Field< RestAttachment >,\n\t\t\tdescriptionField as Field< RestAttachment >,\n\t\t\tdateAddedField as Field< RestAttachment >,\n\t\t\tdateModifiedField as Field< RestAttachment >,\n\t\t\tfilenameField as Field< RestAttachment >,\n\t\t\tfilesizeField as Field< RestAttachment >,\n\t\t\tmediaDimensionsField as Field< RestAttachment >,\n\t\t\tmimeTypeField as Field< RestAttachment >,\n\t\t\tattachedToField as Field< RestAttachment >,\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< RestAttachment >(\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 = ( selectedPosts ?? [] )\n\t\t\t\t\t\t.map( transformAttachment )\n\t\t\t\t\t\t.filter( Boolean );\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\tfields: [],\n\t\t\t\tshowTitle: false,\n\t\t\t},\n\t\t\t[ LAYOUT_PICKER_TABLE ]: {\n\t\t\t\tfields: [ 'filename', 'filesize', 'media_dimensions', 'date' ],\n\t\t\t\tshowTitle: true,\n\t\t\t},\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\toverlayClassName=\"media-upload-modal\"\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
+ "names": []
7
+ }