@payloadcms/ui 4.0.0-canary.26 → 4.0.0-canary.28

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 (69) hide show
  1. package/dist/elements/BulkUpload/AddFilesView/index.css +10 -4
  2. package/dist/elements/BulkUpload/AddFilesView/index.d.ts.map +1 -1
  3. package/dist/elements/BulkUpload/AddFilesView/index.js +71 -51
  4. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  5. package/dist/elements/Button/index.d.ts.map +1 -1
  6. package/dist/elements/Button/index.js +2 -0
  7. package/dist/elements/Button/index.js.map +1 -1
  8. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  9. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +10 -3
  10. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  11. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +345 -1
  12. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -1
  13. package/dist/elements/Dropzone/index.css +10 -4
  14. package/dist/elements/FileManager/index.css +0 -30
  15. package/dist/elements/FileManager/index.d.ts.map +1 -1
  16. package/dist/elements/FileManager/index.js +379 -287
  17. package/dist/elements/FileManager/index.js.map +1 -1
  18. package/dist/elements/Upload/UploadFromURLModal/index.d.ts +1 -1
  19. package/dist/elements/Upload/UploadFromURLModal/index.d.ts.map +1 -1
  20. package/dist/elements/Upload/UploadFromURLModal/index.js.map +1 -1
  21. package/dist/elements/Upload/index.css +39 -32
  22. package/dist/elements/Upload/index.d.ts.map +1 -1
  23. package/dist/elements/Upload/index.js +37 -99
  24. package/dist/elements/Upload/index.js.map +1 -1
  25. package/dist/elements/Upload/usePasteFromClipboard.d.ts +14 -0
  26. package/dist/elements/Upload/usePasteFromClipboard.d.ts.map +1 -0
  27. package/dist/elements/Upload/usePasteFromClipboard.js +93 -0
  28. package/dist/elements/Upload/usePasteFromClipboard.js.map +1 -0
  29. package/dist/elements/Upload/useUploadFromUrl.d.ts +20 -0
  30. package/dist/elements/Upload/useUploadFromUrl.d.ts.map +1 -0
  31. package/dist/elements/Upload/useUploadFromUrl.js +201 -0
  32. package/dist/elements/Upload/useUploadFromUrl.js.map +1 -0
  33. package/dist/elements/UploadDropzoneContent/index.css +31 -0
  34. package/dist/elements/UploadDropzoneContent/index.d.ts +17 -0
  35. package/dist/elements/UploadDropzoneContent/index.d.ts.map +1 -0
  36. package/dist/elements/UploadDropzoneContent/index.js +62 -0
  37. package/dist/elements/UploadDropzoneContent/index.js.map +1 -0
  38. package/dist/elements/WhereBuilder/conditionValue.d.ts +32 -0
  39. package/dist/elements/WhereBuilder/conditionValue.d.ts.map +1 -0
  40. package/dist/elements/WhereBuilder/conditionValue.js +32 -0
  41. package/dist/elements/WhereBuilder/conditionValue.js.map +1 -0
  42. package/dist/elements/WhereBuilder/conditionValue.spec.js +65 -0
  43. package/dist/elements/WhereBuilder/conditionValue.spec.js.map +1 -0
  44. package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
  45. package/dist/elements/WhereBuilder/index.js +15 -4
  46. package/dist/elements/WhereBuilder/index.js.map +1 -1
  47. package/dist/fields/Upload/Input.d.ts.map +1 -1
  48. package/dist/fields/Upload/Input.js +26 -0
  49. package/dist/fields/Upload/Input.js.map +1 -1
  50. package/dist/styles.css +1 -1
  51. package/dist/utilities/formatMetadata.d.ts.map +1 -1
  52. package/dist/utilities/formatMetadata.js +0 -5
  53. package/dist/utilities/formatMetadata.js.map +1 -1
  54. package/dist/utilities/getFilesFromClipboard.d.ts +10 -0
  55. package/dist/utilities/getFilesFromClipboard.d.ts.map +1 -0
  56. package/dist/utilities/getFilesFromClipboard.js +49 -0
  57. package/dist/utilities/getFilesFromClipboard.js.map +1 -0
  58. package/dist/utilities/slugify.d.ts.map +1 -1
  59. package/dist/utilities/slugify.js +1 -0
  60. package/dist/utilities/slugify.js.map +1 -1
  61. package/dist/views/Root/getCustomCollectionViewByRoute.d.ts.map +1 -1
  62. package/dist/views/Root/getCustomCollectionViewByRoute.js.map +1 -1
  63. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts.map +1 -1
  64. package/dist/views/Root/getCustomGlobalViewByRoute.js.map +1 -1
  65. package/dist/views/Root/getCustomViewByKey.d.ts.map +1 -1
  66. package/dist/views/Root/getCustomViewByKey.js.map +1 -1
  67. package/dist/views/Version/generateVersionViewMetadata.js.map +1 -1
  68. package/dist/views/Versions/generateVersionsViewMetadata.js.map +1 -1
  69. package/package.json +5 -5
@@ -1,16 +1,15 @@
1
1
  'use client';
2
2
 
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
5
  import { useModal } from '@faceless-ui/modal';
5
- import { formatAdminURL, formatFilesize, isImage } from 'payload/shared';
6
- import React, { Fragment, useCallback, useEffect, useRef, useState } from 'react';
7
- import { toast } from 'sonner';
6
+ import { formatFilesize, isImage } from 'payload/shared';
7
+ import React, { Fragment, useCallback, useEffect, useState } from 'react';
8
8
  import { FieldError } from '../../fields/FieldError/index.js';
9
9
  import { fieldBaseClass } from '../../fields/shared/index.js';
10
10
  import { TextInput } from '../../fields/Text/Input.js';
11
11
  import { useForm } from '../../forms/Form/index.js';
12
12
  import { useField } from '../../forms/useField/index.js';
13
- import { useConfig } from '../../providers/Config/index.js';
14
13
  import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
15
14
  import { EditDepthProvider } from '../../providers/EditDepth/index.js';
16
15
  import { useTranslation } from '../../providers/Translation/index.js';
@@ -23,7 +22,10 @@ import { EditUpload } from '../EditUpload/index.js';
23
22
  import { PreviewSizes } from '../PreviewSizes/index.js';
24
23
  import { Thumbnail } from '../Thumbnail/index.js';
25
24
  import { editDrawerSlug, sizePreviewSlug } from '../Upload/index.js';
26
- import { pasteURLDrawerSlug, UploadFromURLModal } from '../Upload/UploadFromURLModal/index.js';
25
+ import { UploadFromURLModal } from '../Upload/UploadFromURLModal/index.js';
26
+ import { usePasteFromClipboard } from '../Upload/usePasteFromClipboard.js';
27
+ import { useUploadFromUrl } from '../Upload/useUploadFromUrl.js';
28
+ import { UploadDropzoneContent } from '../UploadDropzoneContent/index.js';
27
29
  import { AudioPreview } from './FilePreview/AudioPreview/index.js';
28
30
  import { FilePreview } from './FilePreview/index.js';
29
31
  import { PdfPreview } from './FilePreview/PdfPreview/index.js';
@@ -40,18 +42,19 @@ const validate = value => {
40
42
  }
41
43
  return true;
42
44
  };
43
- export const FileManager = ({
44
- collectionSlug,
45
- initialState,
46
- resetUploadEdits: resetUploadEditsFromProps,
47
- updateUploadEdits: updateUploadEditsFromProps,
48
- uploadConfig,
49
- UploadControls,
50
- uploadEdits: uploadEditsFromProps,
51
- UploadFilePreview
52
- }) => {
45
+ export const FileManager = t0 => {
46
+ const $ = _c(56);
47
+ const {
48
+ collectionSlug,
49
+ initialState,
50
+ resetUploadEdits: resetUploadEditsFromProps,
51
+ updateUploadEdits: updateUploadEditsFromProps,
52
+ uploadConfig,
53
+ UploadControls,
54
+ uploadEdits: uploadEditsFromProps,
55
+ UploadFilePreview
56
+ } = t0;
53
57
  const {
54
- closeModal,
55
58
  openModal
56
59
  } = useModal();
57
60
  const {
@@ -61,32 +64,29 @@ export const FileManager = ({
61
64
  setModified
62
65
  } = useForm();
63
66
  const {
64
- id,
65
- data,
66
- setUploadStatus
67
+ data
67
68
  } = useDocumentInfo();
69
+ let t1;
70
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
71
+ t1 = {
72
+ path: "file",
73
+ validate
74
+ };
75
+ $[0] = t1;
76
+ } else {
77
+ t1 = $[0];
78
+ }
68
79
  const {
69
80
  errorMessage,
70
81
  setValue,
71
82
  showError,
72
83
  value
73
- } = useField({
74
- path: 'file',
75
- validate
76
- });
77
- const {
78
- config: {
79
- routes: {
80
- api
81
- }
82
- }
83
- } = useConfig();
84
+ } = useField(t1);
84
85
  const {
85
86
  setUploadControlFile,
86
87
  setUploadControlFileName,
87
88
  setUploadControlFileUrl,
88
89
  uploadControlFile,
89
- uploadControlFileName,
90
90
  uploadControlFileUrl
91
91
  } = useUploadControls();
92
92
  const uploadEditsContext = useUploadEdits();
@@ -95,245 +95,365 @@ export const FileManager = ({
95
95
  const uploadEdits = uploadEditsFromProps ?? uploadEditsContext.uploadEdits;
96
96
  const [fileSrc, setFileSrc] = useState(null);
97
97
  const [removedFile, setRemovedFile] = useState(false);
98
- const [filename, setFilename] = useState(value?.name || '');
99
- const [fileUrl, setFileUrl] = useState('');
98
+ const [filename, setFilename] = useState(value?.name || "");
100
99
  const [selectedSize, setSelectedSize] = useState(null);
101
- const inputRef = useRef(null);
102
- const useServerSideFetch = typeof uploadConfig?.pasteURL === 'object' && uploadConfig.pasteURL.allowList?.length > 0;
103
- const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ');
100
+ const acceptMimeTypes = uploadConfig.mimeTypes?.join(", ");
104
101
  const imageCacheTag = uploadConfig?.cacheTags && data?.updatedAt;
105
102
  const hasImageSizes = uploadConfig?.imageSizes?.length > 0;
106
103
  const hasResizeOptions = Boolean(uploadConfig?.resizeOptions);
107
104
  const focalPointEnabled = uploadConfig?.focalPoint === true;
108
105
  const {
109
- crop: showCrop = true,
110
- focalPoint = true
106
+ crop: t2,
107
+ focalPoint: t3
111
108
  } = uploadConfig;
109
+ const showCrop = t2 === undefined ? true : t2;
110
+ const focalPoint = t3 === undefined ? true : t3;
112
111
  const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled);
113
112
  const selectedSizeData = selectedSize ? data?.sizes?.[selectedSize] : null;
114
113
  const sidePanelFileSrc = selectedSizeData?.url ?? data?.thumbnailURL ?? data?.url ?? null;
115
114
  const sidePanelMimeType = data?.mimeType;
116
- const fileTypeIsAdjustable = !!sidePanelMimeType && isImage(sidePanelMimeType) && sidePanelMimeType !== 'image/svg+xml' && sidePanelMimeType !== 'image/jxl';
117
- const renameFile = (fileToChange, newName) => new File([fileToChange], newName, {
118
- type: fileToChange.type,
119
- lastModified: fileToChange.lastModified
120
- });
121
- const handleFileChange = useCallback(({
122
- file,
123
- isNewFile = true
124
- }) => {
125
- if (isNewFile && file instanceof File) {
126
- setFileSrc(URL.createObjectURL(file));
127
- }
128
- setValue(file);
129
- setUploadControlFileUrl('');
130
- setUploadControlFileName(null);
131
- setUploadControlFile(null);
132
- }, [setValue, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl]);
133
- const handleFileNameChange = useCallback(e => {
134
- const updatedFileName = e.target.value;
135
- if (value) {
136
- handleFileChange({
137
- file: renameFile(value, updatedFileName),
138
- isNewFile: false
139
- });
140
- setFilename(updatedFileName);
141
- }
142
- }, [handleFileChange, value]);
143
- const handleFileRemoval = useCallback(() => {
144
- setRemovedFile(true);
145
- handleFileChange({
146
- file: null
147
- });
148
- setFileSrc('');
149
- setFileUrl('');
150
- setSelectedSize(null);
151
- resetUploadEdits();
152
- setUploadControlFileUrl('');
153
- setUploadControlFileName(null);
154
- setUploadControlFile(null);
155
- }, [handleFileChange, resetUploadEdits, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl]);
156
- const handleFileSelection = useCallback(files => handleFileChange({
157
- file: files?.[0]
158
- }), [handleFileChange]);
159
- const isValidUrl = Boolean(fileUrl && URL.canParse(fileUrl));
160
- const handleUrlSubmit = useCallback(async () => {
161
- if (!fileUrl || !URL.canParse(fileUrl) || uploadConfig?.pasteURL === false) {
162
- return;
163
- }
164
- setUploadStatus('uploading');
165
- try {
166
- const clientResponse = await fetch(fileUrl);
167
- if (!clientResponse.ok) {
168
- throw new Error(`Fetch failed: ${clientResponse.status}`);
169
- }
170
- const blob = await clientResponse.blob();
171
- const rawSegment = fileUrl.split('/').pop() || '';
172
- const fileName = uploadControlFileName || decodeURIComponent(rawSegment.split('?')[0]);
173
- handleFileChange({
174
- file: new File([blob], fileName, {
175
- type: blob.type
176
- })
177
- });
178
- setUploadStatus('idle');
179
- closeModal(pasteURLDrawerSlug);
180
- setFileUrl('');
181
- return;
182
- } catch (_clientError) {
183
- if (!useServerSideFetch) {
184
- toast.error('Failed to fetch the file.');
185
- setUploadStatus('failed');
186
- return;
115
+ const fileTypeIsAdjustable = !!sidePanelMimeType && isImage(sidePanelMimeType) && sidePanelMimeType !== "image/svg+xml" && sidePanelMimeType !== "image/jxl";
116
+ const renameFile = _temp;
117
+ let t4;
118
+ if ($[1] !== setUploadControlFile || $[2] !== setUploadControlFileName || $[3] !== setUploadControlFileUrl || $[4] !== setValue) {
119
+ t4 = t5 => {
120
+ const {
121
+ file,
122
+ isNewFile: t6
123
+ } = t5;
124
+ const isNewFile = t6 === undefined ? true : t6;
125
+ if (isNewFile && file instanceof File) {
126
+ setFileSrc(URL.createObjectURL(file));
187
127
  }
188
- }
189
- try {
190
- const pasteURL = `/${collectionSlug}/paste-url${id ? `/${id}?` : '?'}src=${encodeURIComponent(fileUrl)}`;
191
- const serverResponse = await fetch(formatAdminURL({
192
- apiRoute: api,
193
- path: pasteURL
194
- }));
195
- if (!serverResponse.ok) {
196
- throw new Error(`Fetch failed: ${serverResponse.status}`);
128
+ setValue(file);
129
+ setUploadControlFileUrl("");
130
+ setUploadControlFileName(null);
131
+ setUploadControlFile(null);
132
+ };
133
+ $[1] = setUploadControlFile;
134
+ $[2] = setUploadControlFileName;
135
+ $[3] = setUploadControlFileUrl;
136
+ $[4] = setValue;
137
+ $[5] = t4;
138
+ } else {
139
+ t4 = $[5];
140
+ }
141
+ const handleFileChange = t4;
142
+ let t5;
143
+ if ($[6] !== handleFileChange || $[7] !== value) {
144
+ t5 = e => {
145
+ const updatedFileName = e.target.value;
146
+ if (value) {
147
+ handleFileChange({
148
+ file: renameFile(value, updatedFileName),
149
+ isNewFile: false
150
+ });
151
+ setFilename(updatedFileName);
197
152
  }
198
- const blob_0 = await serverResponse.blob();
199
- const rawSegment_0 = fileUrl.split('/').pop() || '';
200
- const fileName_0 = decodeURIComponent(rawSegment_0.split('?')[0]);
153
+ };
154
+ $[6] = handleFileChange;
155
+ $[7] = value;
156
+ $[8] = t5;
157
+ } else {
158
+ t5 = $[8];
159
+ }
160
+ const handleFileNameChange = t5;
161
+ let t6;
162
+ if ($[9] !== handleFileChange) {
163
+ t6 = files => handleFileChange({
164
+ file: files?.[0]
165
+ });
166
+ $[9] = handleFileChange;
167
+ $[10] = t6;
168
+ } else {
169
+ t6 = $[10];
170
+ }
171
+ const handleFileSelection = t6;
172
+ let t7;
173
+ if ($[11] !== handleFileChange) {
174
+ t7 = file_0 => handleFileChange({
175
+ file: file_0
176
+ });
177
+ $[11] = handleFileChange;
178
+ $[12] = t7;
179
+ } else {
180
+ t7 = $[12];
181
+ }
182
+ const handleFileFetchedFromUrl = t7;
183
+ let t8;
184
+ if ($[13] !== collectionSlug || $[14] !== handleFileFetchedFromUrl || $[15] !== uploadConfig) {
185
+ t8 = {
186
+ collectionSlug,
187
+ onFileFetched: handleFileFetchedFromUrl,
188
+ uploadConfig
189
+ };
190
+ $[13] = collectionSlug;
191
+ $[14] = handleFileFetchedFromUrl;
192
+ $[15] = uploadConfig;
193
+ $[16] = t8;
194
+ } else {
195
+ t8 = $[16];
196
+ }
197
+ const {
198
+ fileUrl,
199
+ handleUrlSubmit,
200
+ isValidUrl,
201
+ setFileUrl
202
+ } = useUploadFromUrl(t8);
203
+ let t9;
204
+ if ($[17] !== handleFileSelection || $[18] !== handleUrlSubmit || $[19] !== setFileUrl || $[20] !== uploadConfig) {
205
+ t9 = {
206
+ handleFileSelection,
207
+ handleUrlSubmit,
208
+ setFileUrl,
209
+ uploadConfig
210
+ };
211
+ $[17] = handleFileSelection;
212
+ $[18] = handleUrlSubmit;
213
+ $[19] = setFileUrl;
214
+ $[20] = uploadConfig;
215
+ $[21] = t9;
216
+ } else {
217
+ t9 = $[21];
218
+ }
219
+ const handlePasteFromClipboard = usePasteFromClipboard(t9);
220
+ let t10;
221
+ if ($[22] !== handleFileChange || $[23] !== resetUploadEdits || $[24] !== setFileUrl || $[25] !== setUploadControlFile || $[26] !== setUploadControlFileName || $[27] !== setUploadControlFileUrl) {
222
+ t10 = () => {
223
+ setRemovedFile(true);
201
224
  handleFileChange({
202
- file: new File([blob_0], fileName_0, {
203
- type: blob_0.type
204
- })
225
+ file: null
205
226
  });
206
- setUploadStatus('idle');
207
- closeModal(pasteURLDrawerSlug);
208
- setFileUrl('');
209
- } catch (_serverError) {
210
- toast.error('The provided URL is not allowed.');
211
- setUploadStatus('failed');
212
- }
213
- }, [api, closeModal, collectionSlug, fileUrl, handleFileChange, id, setUploadStatus, uploadConfig, uploadControlFileName, useServerSideFetch]);
214
- const onEditsSave = useCallback(args => {
215
- setModified(true);
216
- updateUploadEdits(args);
217
- }, [setModified, updateUploadEdits]);
218
- // Reset states for when replacing the file with a new upload
219
- useEffect(() => {
220
- setSelectedSize(null);
221
- setRemovedFile(false);
222
- setFileSrc('');
223
- }, [data?.url, data?.filename]);
224
- useEffect(() => {
225
- if (initialState?.file?.value instanceof File) {
226
- setFileSrc(URL.createObjectURL(initialState.file.value));
227
+ setFileSrc("");
228
+ setFileUrl("");
229
+ setSelectedSize(null);
230
+ resetUploadEdits();
231
+ setUploadControlFileUrl("");
232
+ setUploadControlFileName(null);
233
+ setUploadControlFile(null);
234
+ };
235
+ $[22] = handleFileChange;
236
+ $[23] = resetUploadEdits;
237
+ $[24] = setFileUrl;
238
+ $[25] = setUploadControlFile;
239
+ $[26] = setUploadControlFileName;
240
+ $[27] = setUploadControlFileUrl;
241
+ $[28] = t10;
242
+ } else {
243
+ t10 = $[28];
244
+ }
245
+ const handleFileRemoval = t10;
246
+ let t11;
247
+ if ($[29] !== setModified || $[30] !== updateUploadEdits) {
248
+ t11 = args => {
249
+ setModified(true);
250
+ updateUploadEdits(args);
251
+ };
252
+ $[29] = setModified;
253
+ $[30] = updateUploadEdits;
254
+ $[31] = t11;
255
+ } else {
256
+ t11 = $[31];
257
+ }
258
+ const onEditsSave = t11;
259
+ let t12;
260
+ if ($[32] === Symbol.for("react.memo_cache_sentinel")) {
261
+ t12 = () => {
262
+ setSelectedSize(null);
227
263
  setRemovedFile(false);
228
- }
229
- }, [initialState]);
230
- useEffect(() => {
231
- return () => {
232
- if (fileSrc?.startsWith('blob:')) {
264
+ setFileSrc("");
265
+ };
266
+ $[32] = t12;
267
+ } else {
268
+ t12 = $[32];
269
+ }
270
+ const t13 = data?.url;
271
+ const t14 = data?.filename;
272
+ let t15;
273
+ if ($[33] !== t13 || $[34] !== t14) {
274
+ t15 = [t13, t14];
275
+ $[33] = t13;
276
+ $[34] = t14;
277
+ $[35] = t15;
278
+ } else {
279
+ t15 = $[35];
280
+ }
281
+ useEffect(t12, t15);
282
+ let t16;
283
+ let t17;
284
+ if ($[36] !== initialState) {
285
+ t16 = () => {
286
+ if (initialState?.file?.value instanceof File) {
287
+ setFileSrc(URL.createObjectURL(initialState.file.value));
288
+ setRemovedFile(false);
289
+ }
290
+ };
291
+ t17 = [initialState];
292
+ $[36] = initialState;
293
+ $[37] = t16;
294
+ $[38] = t17;
295
+ } else {
296
+ t16 = $[37];
297
+ t17 = $[38];
298
+ }
299
+ useEffect(t16, t17);
300
+ let t18;
301
+ let t19;
302
+ if ($[39] !== fileSrc) {
303
+ t18 = () => () => {
304
+ if (fileSrc?.startsWith("blob:")) {
233
305
  URL.revokeObjectURL(fileSrc);
234
306
  }
235
307
  };
236
- }, [fileSrc]);
237
- useEffect(() => {
238
- const handleControlFileUrl = async () => {
239
- if (uploadControlFileUrl) {
240
- setFileUrl(uploadControlFileUrl);
241
- await handleUrlSubmit();
308
+ t19 = [fileSrc];
309
+ $[39] = fileSrc;
310
+ $[40] = t18;
311
+ $[41] = t19;
312
+ } else {
313
+ t18 = $[40];
314
+ t19 = $[41];
315
+ }
316
+ useEffect(t18, t19);
317
+ let t20;
318
+ let t21;
319
+ if ($[42] !== handleUrlSubmit || $[43] !== setFileUrl || $[44] !== uploadControlFileUrl) {
320
+ t20 = () => {
321
+ const handleControlFileUrl = async () => {
322
+ if (uploadControlFileUrl) {
323
+ setFileUrl(uploadControlFileUrl);
324
+ await handleUrlSubmit();
325
+ }
326
+ };
327
+ handleControlFileUrl();
328
+ };
329
+ t21 = [uploadControlFileUrl, handleUrlSubmit, setFileUrl];
330
+ $[42] = handleUrlSubmit;
331
+ $[43] = setFileUrl;
332
+ $[44] = uploadControlFileUrl;
333
+ $[45] = t20;
334
+ $[46] = t21;
335
+ } else {
336
+ t20 = $[45];
337
+ t21 = $[46];
338
+ }
339
+ useEffect(t20, t21);
340
+ let t22;
341
+ let t23;
342
+ if ($[47] !== handleFileChange || $[48] !== uploadControlFile) {
343
+ t22 = () => {
344
+ if (uploadControlFile) {
345
+ handleFileChange({
346
+ file: uploadControlFile
347
+ });
242
348
  }
243
349
  };
244
- void handleControlFileUrl();
245
- }, [uploadControlFileUrl, handleUrlSubmit]);
246
- useEffect(() => {
247
- if (uploadControlFile) {
248
- handleFileChange({
249
- file: uploadControlFile
250
- });
251
- }
252
- }, [uploadControlFile, handleFileChange]);
253
- // Preview a freshly-selected (not-yet-saved) file from its local object URL, so video/audio/PDF
254
- // are playable/viewable just like images. Sizing is capped in CSS so large files stay contained.
255
- const renderSelectedFilePreview = src => {
256
- const fileType = value?.type ?? '';
257
- if (fileType.startsWith('video/')) {
258
- return /*#__PURE__*/_jsx("div", {
259
- className: `${baseClass}__selected-preview`,
260
- children: /*#__PURE__*/_jsx(VideoPreview, {
261
- fileSrc: src
262
- })
263
- });
264
- }
265
- if (fileType.startsWith('audio/')) {
266
- return /*#__PURE__*/_jsx("div", {
267
- className: `${baseClass}__selected-preview ${baseClass}__selected-preview--audio`,
268
- children: /*#__PURE__*/_jsx(AudioPreview, {
269
- fileSrc: src
270
- })
271
- });
272
- }
273
- if (fileType === 'application/pdf') {
274
- return /*#__PURE__*/_jsx("div", {
350
+ t23 = [uploadControlFile, handleFileChange];
351
+ $[47] = handleFileChange;
352
+ $[48] = uploadControlFile;
353
+ $[49] = t22;
354
+ $[50] = t23;
355
+ } else {
356
+ t22 = $[49];
357
+ t23 = $[50];
358
+ }
359
+ useEffect(t22, t23);
360
+ let t24;
361
+ if ($[51] !== collectionSlug || $[52] !== value?.name || $[53] !== value?.type) {
362
+ t24 = src => {
363
+ const fileType = value?.type ?? "";
364
+ if (fileType.startsWith("video/")) {
365
+ return _jsx("div", {
366
+ className: `${baseClass}__selected-preview`,
367
+ children: _jsx(VideoPreview, {
368
+ fileSrc: src
369
+ })
370
+ });
371
+ }
372
+ if (fileType.startsWith("audio/")) {
373
+ return _jsx("div", {
374
+ className: `${baseClass}__selected-preview ${baseClass}__selected-preview--audio`,
375
+ children: _jsx(AudioPreview, {
376
+ fileSrc: src
377
+ })
378
+ });
379
+ }
380
+ if (fileType === "application/pdf") {
381
+ return _jsx("div", {
382
+ className: `${baseClass}__selected-preview`,
383
+ children: _jsx(PdfPreview, {
384
+ fileSrc: src,
385
+ title: value?.name
386
+ })
387
+ });
388
+ }
389
+ return _jsx("div", {
275
390
  className: `${baseClass}__selected-preview`,
276
- children: /*#__PURE__*/_jsx(PdfPreview, {
277
- fileSrc: src,
278
- title: value?.name
391
+ children: _jsx(Thumbnail, {
392
+ collectionSlug,
393
+ fileSrc: isImage(fileType) ? src : null,
394
+ size: "expand"
279
395
  })
280
396
  });
281
- }
282
- return /*#__PURE__*/_jsx("div", {
283
- className: `${baseClass}__selected-preview`,
284
- children: /*#__PURE__*/_jsx(Thumbnail, {
285
- collectionSlug: collectionSlug,
286
- fileSrc: isImage(fileType) ? src : null,
287
- size: "expand"
288
- })
289
- });
290
- };
291
- const drawers = /*#__PURE__*/_jsxs(Fragment, {
292
- children: [(value || data?.filename) && /*#__PURE__*/_jsx(EditDepthProvider, {
293
- children: /*#__PURE__*/_jsx(EditUpload, {
397
+ };
398
+ $[51] = collectionSlug;
399
+ $[52] = value?.name;
400
+ $[53] = value?.type;
401
+ $[54] = t24;
402
+ } else {
403
+ t24 = $[54];
404
+ }
405
+ const renderSelectedFilePreview = t24;
406
+ const drawers = _jsxs(Fragment, {
407
+ children: [(value || data?.filename) && _jsx(EditDepthProvider, {
408
+ children: _jsx(EditUpload, {
294
409
  fileName: value?.name || data?.filename,
295
410
  fileSrc: data?.url || fileSrc,
296
- imageCacheTag: imageCacheTag,
411
+ imageCacheTag,
297
412
  initialCrop: uploadEdits?.crop ?? undefined,
298
413
  initialFocalPoint: {
299
414
  x: uploadEdits?.focalPoint?.x || data?.focalX || 50,
300
415
  y: uploadEdits?.focalPoint?.y || data?.focalY || 50
301
416
  },
302
417
  onSave: onEditsSave,
303
- showCrop: showCrop,
304
- showFocalPoint: showFocalPoint
418
+ showCrop,
419
+ showFocalPoint
305
420
  })
306
- }), data && hasImageSizes && /*#__PURE__*/_jsx(Drawer, {
421
+ }), data && hasImageSizes && _jsx(Drawer, {
307
422
  className: `${baseClass}__preview-drawer`,
308
423
  hoverTitle: true,
309
424
  slug: sizePreviewSlug,
310
- title: t('upload:sizesFor', {
425
+ title: t("upload:sizesFor", {
311
426
  label: data.filename
312
427
  }),
313
- children: /*#__PURE__*/_jsx(PreviewSizes, {
428
+ children: _jsx(PreviewSizes, {
314
429
  doc: data,
315
- imageCacheTag: imageCacheTag,
316
- uploadConfig: uploadConfig
430
+ imageCacheTag,
431
+ uploadConfig
317
432
  })
318
- }), uploadConfig?.pasteURL !== false && /*#__PURE__*/_jsx(UploadFromURLModal, {
319
- fileUrl: fileUrl,
320
- handleUrlSubmit: handleUrlSubmit,
321
- isValidUrl: isValidUrl,
322
- setFileUrl: setFileUrl
433
+ }), uploadConfig?.pasteURL !== false && _jsx(UploadFromURLModal, {
434
+ fileUrl,
435
+ handleUrlSubmit,
436
+ isValidUrl,
437
+ setFileUrl
323
438
  })]
324
439
  });
325
- // Hide the create file input when the collection opts out of it (unless the user has explicitly
326
- // removed an existing file or already selected a new one).
327
440
  const showUploadInput = Boolean(value) || removedFile || !uploadConfig?.hideFileInputOnCreate;
328
- return /*#__PURE__*/_jsxs("div", {
329
- className: [fieldBaseClass, baseClass].filter(Boolean).join(' '),
330
- children: [/*#__PURE__*/_jsx(FieldError, {
441
+ let t25;
442
+ if ($[55] === Symbol.for("react.memo_cache_sentinel")) {
443
+ t25 = [fieldBaseClass, baseClass].filter(Boolean);
444
+ $[55] = t25;
445
+ } else {
446
+ t25 = $[55];
447
+ }
448
+ return _jsxs("div", {
449
+ className: t25.join(" "),
450
+ children: [_jsx(FieldError, {
331
451
  message: errorMessage,
332
452
  path: "filename",
333
- showError: showError
334
- }), /*#__PURE__*/_jsxs("div", {
453
+ showError
454
+ }), _jsxs("div", {
335
455
  className: `${baseClass}__panel`,
336
- children: [data?.filename && !removedFile && /*#__PURE__*/_jsx(FileToolbar, {
456
+ children: [data?.filename && !removedFile && _jsx(FileToolbar, {
337
457
  filename: data.filename,
338
458
  fileSrc: sidePanelFileSrc,
339
459
  fileUrl: data?.url,
@@ -341,89 +461,55 @@ export const FileManager = ({
341
461
  isAdjustable: fileTypeIsAdjustable,
342
462
  onEditImage: () => openModal(editDrawerSlug),
343
463
  onReplace: handleFileRemoval
344
- }), /*#__PURE__*/_jsx("div", {
464
+ }), _jsx("div", {
345
465
  className: `${baseClass}__content`,
346
- children: data?.filename && !removedFile ? /*#__PURE__*/_jsx(FilePreview, {
347
- collectionSlug: collectionSlug,
348
- data: data,
349
- imageCacheTag: imageCacheTag,
350
- selectedSize: selectedSize,
351
- selectedSizeData: selectedSizeData,
352
- setSelectedSize: setSelectedSize,
353
- uploadConfig: uploadConfig,
354
- UploadFilePreview: UploadFilePreview
355
- }) : showUploadInput ? /*#__PURE__*/_jsxs("div", {
466
+ children: data?.filename && !removedFile ? _jsx(FilePreview, {
467
+ collectionSlug,
468
+ data,
469
+ imageCacheTag,
470
+ selectedSize,
471
+ selectedSizeData,
472
+ setSelectedSize,
473
+ uploadConfig,
474
+ UploadFilePreview
475
+ }) : showUploadInput ? _jsxs("div", {
356
476
  className: `${baseClass}__upload`,
357
- children: [!value && removedFile && data?.filename && /*#__PURE__*/_jsx(Button, {
477
+ children: [!value && removedFile && data?.filename && _jsx(Button, {
358
478
  buttonStyle: "secondary",
359
479
  className: `${baseClass}__remove`,
360
480
  icon: "x",
361
481
  onClick: () => setRemovedFile(false),
362
482
  round: true,
363
- tooltip: t('general:cancel')
364
- }), !value && /*#__PURE__*/_jsx(Dropzone, {
483
+ tooltip: t("general:cancel")
484
+ }), !value && _jsx(Dropzone, {
365
485
  onChange: handleFileSelection,
366
- children: /*#__PURE__*/_jsxs("div", {
367
- className: `${baseClass}__dropzone-content`,
368
- children: [/*#__PURE__*/_jsxs("div", {
369
- className: `${baseClass}__dropzone-buttons`,
370
- children: [/*#__PURE__*/_jsx(Button, {
371
- buttonStyle: "secondary",
372
- onClick: () => inputRef.current?.click(),
373
- size: "medium",
374
- children: t('upload:selectFile')
375
- }), /*#__PURE__*/_jsx("input", {
376
- accept: acceptMimeTypes,
377
- "aria-hidden": "true",
378
- className: `${baseClass}__hidden-input`,
379
- hidden: true,
380
- onChange: e_0 => {
381
- if (e_0.target.files && e_0.target.files.length > 0) {
382
- handleFileSelection(e_0.target.files);
383
- }
384
- },
385
- ref: inputRef,
386
- type: "file"
387
- }), uploadConfig?.pasteURL !== false && /*#__PURE__*/_jsxs(Fragment, {
388
- children: [/*#__PURE__*/_jsx("span", {
389
- className: `${baseClass}__or-text`,
390
- children: t('general:or')
391
- }), /*#__PURE__*/_jsx(Button, {
392
- buttonStyle: "secondary",
393
- onClick: () => {
394
- openModal(pasteURLDrawerSlug);
395
- setUploadControlFileUrl('');
396
- setUploadControlFile(null);
397
- setUploadControlFileName(null);
398
- },
399
- size: "medium",
400
- children: t('upload:pasteURL')
401
- })]
402
- }), UploadControls ?? null]
403
- }), /*#__PURE__*/_jsxs("p", {
404
- className: `${baseClass}__drag-text`,
405
- children: [t('general:or'), " ", t('upload:dragAndDrop')]
406
- })]
486
+ children: _jsx(UploadDropzoneContent, {
487
+ acceptMimeTypes,
488
+ extraControls: UploadControls,
489
+ onFilesSelected: handleFileSelection,
490
+ onPasteFromClipboard: handlePasteFromClipboard,
491
+ pasteButtonClassName: `${baseClass}__pasteFromClipboard`,
492
+ pasteTooltip: t("upload:pasteURL")
407
493
  })
408
- }), value && fileSrc && /*#__PURE__*/_jsxs(Fragment, {
409
- children: [/*#__PURE__*/_jsx(Button, {
494
+ }), value && fileSrc && _jsxs(Fragment, {
495
+ children: [_jsx(Button, {
410
496
  buttonStyle: "secondary",
411
497
  className: `${baseClass}__remove`,
412
498
  icon: "x",
413
499
  onClick: handleFileRemoval,
414
500
  round: true,
415
- tooltip: t('general:cancel')
416
- }), renderSelectedFilePreview(fileSrc), /*#__PURE__*/_jsxs("div", {
501
+ tooltip: t("general:cancel")
502
+ }), renderSelectedFilePreview(fileSrc), _jsxs("div", {
417
503
  className: `${baseClass}__file-adjustments`,
418
- children: [/*#__PURE__*/_jsx(TextInput, {
504
+ children: [_jsx(TextInput, {
419
505
  id: "field-filemanager-filename",
420
- label: t('upload:fileName'),
506
+ label: t("upload:fileName"),
421
507
  onChange: handleFileNameChange,
422
508
  path: "filename",
423
509
  value: filename || value.name
424
- }), (value.size || value.type) && /*#__PURE__*/_jsx("span", {
510
+ }), (value.size || value.type) && _jsx("span", {
425
511
  className: `${baseClass}__selected-meta`,
426
- children: [value.size ? formatFilesize(value.size) : null, value.type].filter(Boolean).join(' ')
512
+ children: [value.size ? formatFilesize(value.size) : null, value.type].filter(Boolean).join(" \u2013 ")
427
513
  })]
428
514
  })]
429
515
  })]
@@ -432,4 +518,10 @@ export const FileManager = ({
432
518
  }), drawers]
433
519
  });
434
520
  };
521
+ function _temp(fileToChange, newName) {
522
+ return new File([fileToChange], newName, {
523
+ type: fileToChange.type,
524
+ lastModified: fileToChange.lastModified
525
+ });
526
+ }
435
527
  //# sourceMappingURL=index.js.map