@payloadcms/ui 3.0.0-beta.90 → 3.0.0-beta.91

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 (64) hide show
  1. package/dist/elements/AddNewRelation/index.d.ts.map +1 -1
  2. package/dist/elements/AddNewRelation/index.js +1 -1
  3. package/dist/elements/AddNewRelation/index.js.map +1 -1
  4. package/dist/elements/AddNewRelation/index.scss +14 -4
  5. package/dist/elements/AppHeader/index.js +41 -80
  6. package/dist/elements/AppHeader/index.js.map +1 -1
  7. package/dist/elements/Autosave/index.js +148 -231
  8. package/dist/elements/Autosave/index.js.map +1 -1
  9. package/dist/elements/Button/index.js +86 -218
  10. package/dist/elements/Button/index.js.map +1 -1
  11. package/dist/elements/Collapsible/index.js +44 -62
  12. package/dist/elements/Collapsible/index.js.map +1 -1
  13. package/dist/elements/Collapsible/index.scss +15 -28
  14. package/dist/elements/CopyToClipboard/index.js +20 -54
  15. package/dist/elements/CopyToClipboard/index.js.map +1 -1
  16. package/dist/elements/Dropzone/index.js +59 -119
  17. package/dist/elements/Dropzone/index.js.map +1 -1
  18. package/dist/elements/EditMany/index.js +124 -230
  19. package/dist/elements/EditMany/index.js.map +1 -1
  20. package/dist/elements/EditUpload/index.js +133 -206
  21. package/dist/elements/EditUpload/index.js.map +1 -1
  22. package/dist/elements/ListControls/index.js +82 -188
  23. package/dist/elements/ListControls/index.js.map +1 -1
  24. package/dist/elements/Nav/context.js +47 -83
  25. package/dist/elements/Nav/context.js.map +1 -1
  26. package/dist/elements/SaveButton/index.js +30 -81
  27. package/dist/elements/SaveButton/index.js.map +1 -1
  28. package/dist/elements/SaveDraftButton/index.js +54 -116
  29. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  30. package/dist/elements/SearchFilter/index.js +21 -77
  31. package/dist/elements/SearchFilter/index.js.map +1 -1
  32. package/dist/elements/Upload/index.js +130 -280
  33. package/dist/elements/Upload/index.js.map +1 -1
  34. package/dist/exports/client/{CodeEditor-C4FLUUO7.js → CodeEditor-MTP455NO.js} +2 -2
  35. package/dist/exports/client/chunk-NJHSEGFB.js +14 -0
  36. package/dist/exports/client/{chunk-UGBVRIVY.js.map → chunk-NJHSEGFB.js.map} +2 -2
  37. package/dist/exports/client/index.d.ts +1 -1
  38. package/dist/exports/client/index.d.ts.map +1 -1
  39. package/dist/exports/client/index.js +19 -19
  40. package/dist/exports/client/index.js.map +3 -3
  41. package/dist/fields/Relationship/index.js +318 -504
  42. package/dist/fields/Relationship/index.js.map +1 -1
  43. package/dist/fields/Upload/HasMany/index.d.ts.map +1 -1
  44. package/dist/fields/Upload/HasMany/index.js +192 -422
  45. package/dist/fields/Upload/HasMany/index.js.map +1 -1
  46. package/dist/fields/Upload/HasMany/index.scss +19 -1
  47. package/dist/forms/Submit/index.js +12 -28
  48. package/dist/forms/Submit/index.js.map +1 -1
  49. package/dist/hooks/useDelay.js +15 -48
  50. package/dist/hooks/useDelay.js.map +1 -1
  51. package/dist/hooks/useDelayedRender.js +32 -71
  52. package/dist/hooks/useDelayedRender.js.map +1 -1
  53. package/dist/hooks/useIntersect.js +14 -20
  54. package/dist/hooks/useIntersect.js.map +1 -1
  55. package/dist/providers/Preferences/index.js +1 -3
  56. package/dist/providers/Preferences/index.js.map +1 -1
  57. package/dist/providers/Selection/index.js +102 -190
  58. package/dist/providers/Selection/index.js.map +1 -1
  59. package/dist/scss/app.scss +6 -6
  60. package/dist/scss/type.scss +4 -4
  61. package/dist/styles.css +1 -1
  62. package/package.json +8 -8
  63. package/dist/exports/client/chunk-UGBVRIVY.js +0 -14
  64. /package/dist/exports/client/{CodeEditor-C4FLUUO7.js.map → CodeEditor-MTP455NO.js.map} +0 -0
@@ -90,7 +90,6 @@ export const UploadActions = t0 => {
90
90
  return t1;
91
91
  };
92
92
  export const Upload = props => {
93
- const $ = _c(52);
94
93
  const {
95
94
  collectionSlug,
96
95
  customActions,
@@ -111,316 +110,139 @@ export const Upload = props => {
111
110
  updateUploadEdits,
112
111
  uploadEdits
113
112
  } = useUploadEdits();
114
- let t0;
115
- if ($[0] !== initialState) {
116
- t0 = initialState || {};
117
- $[0] = initialState;
118
- $[1] = t0;
119
- } else {
120
- t0 = $[1];
121
- }
122
- let t1;
123
- if ($[2] !== t0) {
124
- t1 = reduceFieldsToValues(t0, true);
125
- $[2] = t0;
126
- $[3] = t1;
127
- } else {
128
- t1 = $[3];
129
- }
130
- const [doc, setDoc] = useState(t1);
113
+ const [doc, setDoc] = useState(reduceFieldsToValues(initialState || {}, true));
131
114
  const {
132
115
  docPermissions
133
116
  } = useDocumentInfo();
134
- let t2;
135
- if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
136
- t2 = {
137
- path: "file",
138
- validate
139
- };
140
- $[4] = t2;
141
- } else {
142
- t2 = $[4];
143
- }
144
117
  const {
145
118
  errorMessage,
146
119
  setValue,
147
120
  showError,
148
121
  value
149
- } = useField(t2);
122
+ } = useField({
123
+ path: 'file',
124
+ validate
125
+ });
150
126
  const [showUrlInput, setShowUrlInput] = useState(false);
151
- const [fileUrl, setFileUrl] = useState("");
127
+ const [fileUrl, setFileUrl] = useState('');
152
128
  const cursorPositionRef = useRef(null);
153
129
  const urlInputRef = useRef(null);
154
- let t3;
155
- if ($[5] !== setValue || $[6] !== onChange) {
156
- t3 = newFile => {
157
- if (newFile instanceof File) {
158
- setFileSrc(URL.createObjectURL(newFile));
159
- }
160
- setValue(newFile);
161
- setShowUrlInput(false);
162
- if (typeof onChange === "function") {
163
- onChange(newFile);
164
- }
165
- };
166
- $[5] = setValue;
167
- $[6] = onChange;
168
- $[7] = t3;
169
- } else {
170
- t3 = $[7];
171
- }
172
- const handleFileChange = t3;
130
+ const handleFileChange = useCallback(newFile => {
131
+ if (newFile instanceof File) {
132
+ setFileSrc(URL.createObjectURL(newFile));
133
+ }
134
+ setValue(newFile);
135
+ setShowUrlInput(false);
136
+ if (typeof onChange === 'function') {
137
+ onChange(newFile);
138
+ }
139
+ }, [onChange, setValue]);
173
140
  const handleFileNameChange = e => {
174
141
  const updatedFileName = e.target.value;
175
142
  const cursorPosition = e.target.selectionStart;
176
143
  cursorPositionRef.current = cursorPosition;
177
144
  if (value) {
178
145
  const fileValue = value;
146
+ // Creating a new File object with updated properties
179
147
  const newFile_0 = new File([fileValue], updatedFileName, {
180
148
  type: fileValue.type
181
149
  });
182
150
  handleFileChange(newFile_0);
183
151
  }
184
152
  };
185
- let t4;
186
- if ($[8] !== value) {
187
- t4 = [value];
188
- $[8] = value;
189
- $[9] = t4;
190
- } else {
191
- t4 = $[9];
192
- }
193
153
  useEffect(() => {
154
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
194
155
  const inputElement = document.querySelector(`.${baseClass}__filename`);
195
156
  if (inputElement && cursorPositionRef.current !== null) {
196
157
  inputElement.setSelectionRange(cursorPositionRef.current, cursorPositionRef.current);
197
158
  }
198
- }, t4);
199
- let t5;
200
- if ($[10] !== handleFileChange) {
201
- t5 = files => {
202
- const fileToUpload = files?.[0];
203
- handleFileChange(fileToUpload);
204
- };
205
- $[10] = handleFileChange;
206
- $[11] = t5;
207
- } else {
208
- t5 = $[11];
209
- }
210
- const handleFileSelection = t5;
211
- let t6;
212
- if ($[12] !== handleFileChange || $[13] !== resetUploadEdits) {
213
- t6 = () => {
214
- setReplacingFile(true);
215
- handleFileChange(null);
216
- setFileSrc("");
217
- setFileUrl("");
218
- setDoc({});
219
- resetUploadEdits();
220
- setShowUrlInput(false);
221
- };
222
- $[12] = handleFileChange;
223
- $[13] = resetUploadEdits;
224
- $[14] = t6;
225
- } else {
226
- t6 = $[14];
227
- }
228
- const handleFileRemoval = t6;
229
- let t7;
230
- if ($[15] !== setModified || $[16] !== updateUploadEdits) {
231
- t7 = args => {
232
- setModified(true);
233
- updateUploadEdits(args);
234
- };
235
- $[15] = setModified;
236
- $[16] = updateUploadEdits;
237
- $[17] = t7;
238
- } else {
239
- t7 = $[17];
240
- }
241
- const onEditsSave = t7;
242
- let t8;
243
- if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
244
- t8 = () => {
245
- setShowUrlInput(prev => !prev);
246
- };
247
- $[18] = t8;
248
- } else {
249
- t8 = $[18];
250
- }
251
- const handlePasteUrlClick = t8;
252
- let t9;
253
- if ($[19] !== fileUrl || $[20] !== handleFileChange) {
254
- t9 = async () => {
255
- if (fileUrl) {
256
- ;
257
- try {
258
- const response = await fetch(fileUrl);
259
- const data = await response.blob();
260
- const fileName = fileUrl.split("/").pop();
261
- const file = new File([data], fileName, {
262
- type: data.type
263
- });
264
- handleFileChange(file);
265
- } catch (t10) {
266
- const e_0 = t10;
267
- toast.error(e_0.message);
268
- }
269
- }
270
- };
271
- $[19] = fileUrl;
272
- $[20] = handleFileChange;
273
- $[21] = t9;
274
- } else {
275
- t9 = $[21];
276
- }
277
- const handleUrlSubmit = t9;
278
- let t10;
279
- let t11;
280
- if ($[22] !== initialState) {
281
- t10 = () => {
282
- setDoc(reduceFieldsToValues(initialState || {}, true));
283
- if (initialState?.file?.value instanceof File) {
284
- setFileSrc(URL.createObjectURL(initialState.file.value));
159
+ }, [value]);
160
+ const handleFileSelection = useCallback(files => {
161
+ const fileToUpload = files?.[0];
162
+ handleFileChange(fileToUpload);
163
+ }, [handleFileChange]);
164
+ const handleFileRemoval = useCallback(() => {
165
+ setReplacingFile(true);
166
+ handleFileChange(null);
167
+ setFileSrc('');
168
+ setFileUrl('');
169
+ setDoc({});
170
+ resetUploadEdits();
171
+ setShowUrlInput(false);
172
+ }, [handleFileChange, resetUploadEdits]);
173
+ const onEditsSave = useCallback(args => {
174
+ setModified(true);
175
+ updateUploadEdits(args);
176
+ }, [setModified, updateUploadEdits]);
177
+ const handlePasteUrlClick = () => {
178
+ setShowUrlInput(prev => !prev);
179
+ };
180
+ const handleUrlSubmit = async () => {
181
+ if (fileUrl) {
182
+ try {
183
+ const response = await fetch(fileUrl);
184
+ const data = await response.blob();
185
+ // Extract the file name from the URL
186
+ const fileName = fileUrl.split('/').pop();
187
+ // Create a new File object from the Blob data
188
+ const file = new File([data], fileName, {
189
+ type: data.type
190
+ });
191
+ handleFileChange(file);
192
+ } catch (e_0) {
193
+ toast.error(e_0.message);
285
194
  }
286
- setReplacingFile(false);
287
- };
288
- t11 = [initialState];
289
- $[22] = initialState;
290
- $[23] = t10;
291
- $[24] = t11;
292
- } else {
293
- t10 = $[23];
294
- t11 = $[24];
295
- }
296
- useEffect(t10, t11);
297
- let t12;
298
- if ($[25] !== showUrlInput) {
299
- t12 = [showUrlInput];
300
- $[25] = showUrlInput;
301
- $[26] = t12;
302
- } else {
303
- t12 = $[26];
304
- }
195
+ }
196
+ };
197
+ useEffect(() => {
198
+ setDoc(reduceFieldsToValues(initialState || {}, true));
199
+ if (initialState?.file?.value instanceof File) {
200
+ setFileSrc(URL.createObjectURL(initialState.file.value));
201
+ }
202
+ setReplacingFile(false);
203
+ }, [initialState]);
305
204
  useEffect(() => {
306
205
  if (showUrlInput && urlInputRef.current) {
307
- urlInputRef.current.focus();
206
+ urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true
207
+ ;
308
208
  }
309
- }, t12);
310
- const canRemoveUpload = docPermissions?.update?.permission && "delete" in docPermissions && docPermissions?.delete?.permission;
209
+ }, [showUrlInput]);
210
+ const canRemoveUpload = docPermissions?.update?.permission && 'delete' in docPermissions && docPermissions?.delete?.permission;
311
211
  const hasImageSizes = uploadConfig?.imageSizes?.length > 0;
312
212
  const hasResizeOptions = Boolean(uploadConfig?.resizeOptions);
213
+ // Explicity check if set to true, default is undefined
313
214
  const focalPointEnabled = uploadConfig?.focalPoint === true;
314
215
  const {
315
- crop: t13,
316
- focalPoint: t14
216
+ crop: showCrop = true,
217
+ focalPoint = true
317
218
  } = uploadConfig;
318
- const showCrop = t13 === undefined ? true : t13;
319
- const focalPoint = t14 === undefined ? true : t14;
320
219
  const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled);
321
- let t15;
322
- if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
323
- t15 = [fieldBaseClass, baseClass].filter(Boolean);
324
- $[27] = t15;
325
- } else {
326
- t15 = $[27];
327
- }
328
- let t16;
329
- if ($[28] !== doc || $[29] !== replacingFile || $[30] !== showCrop || $[31] !== showFocalPoint || $[32] !== canRemoveUpload || $[33] !== handleFileRemoval || $[34] !== collectionSlug || $[35] !== customActions || $[36] !== hasImageSizes || $[37] !== uploadConfig) {
330
- t16 = doc.filename && !replacingFile && _jsx(FileDetails, {
331
- collectionSlug,
220
+ return /*#__PURE__*/_jsxs("div", {
221
+ className: [fieldBaseClass, baseClass].filter(Boolean).join(' '),
222
+ children: [/*#__PURE__*/_jsx(FieldError, {
223
+ field: null,
224
+ message: errorMessage,
225
+ showError: showError
226
+ }), doc.filename && !replacingFile && /*#__PURE__*/_jsx(FileDetails, {
227
+ collectionSlug: collectionSlug,
332
228
  customUploadActions: customActions,
333
- doc,
229
+ doc: doc,
334
230
  enableAdjustments: showCrop || showFocalPoint,
335
231
  handleRemove: canRemoveUpload ? handleFileRemoval : undefined,
336
- hasImageSizes,
232
+ hasImageSizes: hasImageSizes,
337
233
  imageCacheTag: doc.updatedAt,
338
- uploadConfig
339
- });
340
- $[28] = doc;
341
- $[29] = replacingFile;
342
- $[30] = showCrop;
343
- $[31] = showFocalPoint;
344
- $[32] = canRemoveUpload;
345
- $[33] = handleFileRemoval;
346
- $[34] = collectionSlug;
347
- $[35] = customActions;
348
- $[36] = hasImageSizes;
349
- $[37] = uploadConfig;
350
- $[38] = t16;
351
- } else {
352
- t16 = $[38];
353
- }
354
- let t17;
355
- if ($[39] !== value || $[40] !== doc || $[41] !== fileSrc || $[42] !== uploadEdits || $[43] !== onEditsSave || $[44] !== showCrop || $[45] !== showFocalPoint) {
356
- t17 = (value || doc.filename) && _jsx(Drawer, {
357
- Header: null,
358
- slug: editDrawerSlug,
359
- children: _jsx(EditUpload, {
360
- fileName: value?.name || doc?.filename,
361
- fileSrc: doc?.url || fileSrc,
362
- imageCacheTag: doc.updatedAt,
363
- initialCrop: uploadEdits?.crop ?? undefined,
364
- initialFocalPoint: {
365
- x: uploadEdits?.focalPoint?.x || doc.focalX || 50,
366
- y: uploadEdits?.focalPoint?.y || doc.focalY || 50
367
- },
368
- onSave: onEditsSave,
369
- showCrop,
370
- showFocalPoint
371
- })
372
- });
373
- $[39] = value;
374
- $[40] = doc;
375
- $[41] = fileSrc;
376
- $[42] = uploadEdits;
377
- $[43] = onEditsSave;
378
- $[44] = showCrop;
379
- $[45] = showFocalPoint;
380
- $[46] = t17;
381
- } else {
382
- t17 = $[46];
383
- }
384
- let t18;
385
- if ($[47] !== doc || $[48] !== hasImageSizes || $[49] !== t || $[50] !== uploadConfig) {
386
- t18 = doc && hasImageSizes && _jsx(Drawer, {
387
- className: `${baseClass}__previewDrawer`,
388
- hoverTitle: true,
389
- slug: sizePreviewSlug,
390
- title: t("upload:sizesFor", {
391
- label: doc?.filename
392
- }),
393
- children: _jsx(PreviewSizes, {
394
- doc,
395
- imageCacheTag: doc.updatedAt,
396
- uploadConfig
397
- })
398
- });
399
- $[47] = doc;
400
- $[48] = hasImageSizes;
401
- $[49] = t;
402
- $[50] = uploadConfig;
403
- $[51] = t18;
404
- } else {
405
- t18 = $[51];
406
- }
407
- return _jsxs("div", {
408
- className: t15.join(" "),
409
- children: [_jsx(FieldError, {
410
- field: null,
411
- message: errorMessage,
412
- showError
413
- }), t16, (!doc.filename || replacingFile) && _jsxs("div", {
234
+ uploadConfig: uploadConfig
235
+ }), (!doc.filename || replacingFile) && /*#__PURE__*/_jsxs("div", {
414
236
  className: `${baseClass}__upload`,
415
- children: [!value && !showUrlInput && _jsx(Dropzone, {
237
+ children: [!value && !showUrlInput && /*#__PURE__*/_jsx(Dropzone, {
416
238
  className: `${baseClass}__dropzone`,
417
239
  mimeTypes: uploadConfig?.mimeTypes,
418
240
  onChange: handleFileSelection,
419
241
  onPasteUrlClick: handlePasteUrlClick
420
- }), showUrlInput && _jsxs(React.Fragment, {
421
- children: [_jsxs("div", {
242
+ }), showUrlInput && /*#__PURE__*/_jsxs(React.Fragment, {
243
+ children: [/*#__PURE__*/_jsxs("div", {
422
244
  className: `${baseClass}__remote-file-wrap`,
423
- children: [_jsx("input", {
245
+ children: [/*#__PURE__*/_jsx("input", {
424
246
  className: `${baseClass}__remote-file`,
425
247
  onChange: e_1 => {
426
248
  setFileUrl(e_1.target.value);
@@ -428,57 +250,85 @@ export const Upload = props => {
428
250
  ref: urlInputRef,
429
251
  type: "text",
430
252
  value: fileUrl
431
- }), _jsx("div", {
253
+ }), /*#__PURE__*/_jsx("div", {
432
254
  className: `${baseClass}__add-file-wrap`,
433
- children: _jsx("button", {
255
+ children: /*#__PURE__*/_jsx("button", {
434
256
  className: `${baseClass}__add-file`,
435
257
  onClick: () => {
436
- handleUrlSubmit();
258
+ void handleUrlSubmit();
437
259
  },
438
260
  type: "button",
439
- children: t("upload:addFile")
261
+ children: t('upload:addFile')
440
262
  })
441
263
  })]
442
- }), _jsx(Button, {
264
+ }), /*#__PURE__*/_jsx(Button, {
443
265
  buttonStyle: "icon-label",
444
266
  className: `${baseClass}__remove`,
445
267
  icon: "x",
446
268
  iconStyle: "with-border",
447
269
  onClick: handleFileRemoval,
448
270
  round: true,
449
- tooltip: t("general:cancel")
271
+ tooltip: t('general:cancel')
450
272
  })]
451
- }), value && fileSrc && _jsxs(React.Fragment, {
452
- children: [_jsx("div", {
273
+ }), value && fileSrc && /*#__PURE__*/_jsxs(React.Fragment, {
274
+ children: [/*#__PURE__*/_jsx("div", {
453
275
  className: `${baseClass}__thumbnail-wrap`,
454
- children: _jsx(Thumbnail, {
455
- collectionSlug,
276
+ children: /*#__PURE__*/_jsx(Thumbnail, {
277
+ collectionSlug: collectionSlug,
456
278
  fileSrc: isImage(value.type) ? fileSrc : null
457
279
  })
458
- }), _jsxs("div", {
280
+ }), /*#__PURE__*/_jsxs("div", {
459
281
  className: `${baseClass}__file-adjustments`,
460
- children: [_jsx("input", {
282
+ children: [/*#__PURE__*/_jsx("input", {
461
283
  className: `${baseClass}__filename`,
462
284
  onChange: handleFileNameChange,
463
285
  type: "text",
464
286
  value: value.name
465
- }), _jsx(UploadActions, {
466
- customActions,
287
+ }), /*#__PURE__*/_jsx(UploadActions, {
288
+ customActions: customActions,
467
289
  enableAdjustments: showCrop || showFocalPoint,
468
290
  enablePreviewSizes: hasImageSizes && doc.filename && !replacingFile,
469
291
  mimeType: value.type
470
292
  })]
471
- }), _jsx(Button, {
293
+ }), /*#__PURE__*/_jsx(Button, {
472
294
  buttonStyle: "icon-label",
473
295
  className: `${baseClass}__remove`,
474
296
  icon: "x",
475
297
  iconStyle: "with-border",
476
298
  onClick: handleFileRemoval,
477
299
  round: true,
478
- tooltip: t("general:cancel")
300
+ tooltip: t('general:cancel')
479
301
  })]
480
302
  })]
481
- }), t17, t18]
303
+ }), (value || doc.filename) && /*#__PURE__*/_jsx(Drawer, {
304
+ Header: null,
305
+ slug: editDrawerSlug,
306
+ children: /*#__PURE__*/_jsx(EditUpload, {
307
+ fileName: value?.name || doc?.filename,
308
+ fileSrc: doc?.url || fileSrc,
309
+ imageCacheTag: doc.updatedAt,
310
+ initialCrop: uploadEdits?.crop ?? undefined,
311
+ initialFocalPoint: {
312
+ x: uploadEdits?.focalPoint?.x || doc.focalX || 50,
313
+ y: uploadEdits?.focalPoint?.y || doc.focalY || 50
314
+ },
315
+ onSave: onEditsSave,
316
+ showCrop: showCrop,
317
+ showFocalPoint: showFocalPoint
318
+ })
319
+ }), doc && hasImageSizes && /*#__PURE__*/_jsx(Drawer, {
320
+ className: `${baseClass}__previewDrawer`,
321
+ hoverTitle: true,
322
+ slug: sizePreviewSlug,
323
+ title: t('upload:sizesFor', {
324
+ label: doc?.filename
325
+ }),
326
+ children: /*#__PURE__*/_jsx(PreviewSizes, {
327
+ doc: doc,
328
+ imageCacheTag: doc.updatedAt,
329
+ uploadConfig: uploadConfig
330
+ })
331
+ })]
482
332
  });
483
333
  };
484
334
  function _temp(CustomAction, i) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","isImage","reduceFieldsToValues","React","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","useForm","useField","useDocumentInfo","useTranslation","useUploadEdits","Button","Drawer","DrawerToggler","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","UploadActions","t0","$","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","t1","t2","Symbol","for","bb0","fileTypeIsAdjustable","length","t3","map","_temp","_jsxs","className","children","Fragment","_jsx","slug","Upload","props","collectionSlug","initialState","onChange","uploadConfig","replacingFile","setReplacingFile","fileSrc","setFileSrc","setModified","resetUploadEdits","updateUploadEdits","uploadEdits","doc","setDoc","docPermissions","path","errorMessage","setValue","showError","showUrlInput","setShowUrlInput","fileUrl","setFileUrl","cursorPositionRef","urlInputRef","newFile","File","URL","createObjectURL","handleFileChange","handleFileNameChange","e","updatedFileName","target","cursorPosition","selectionStart","current","fileValue","newFile_0","type","t4","inputElement","document","querySelector","setSelectionRange","t5","files","fileToUpload","handleFileSelection","t6","handleFileRemoval","t7","args","onEditsSave","t8","prev","handlePasteUrlClick","t9","response","fetch","data","blob","fileName","split","pop","file","t10","error","message","handleUrlSubmit","t11","t12","focus","canRemoveUpload","update","permission","delete","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","t13","t14","showCrop","showFocalPoint","t15","filter","t16","filename","customUploadActions","handleRemove","imageCacheTag","updatedAt","t17","Header","name","url","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","t18","hoverTitle","title","label","join","field","mimeTypes","onPasteUrlClick","e_1","ref","onClick","buttonStyle","icon","iconStyle","round","tooltip","CustomAction","i"],"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { isImage, reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer, DrawerToggler } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\nimport './index.scss'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n readonly customActions?: React.ReactNode[]\n readonly enableAdjustments: boolean\n readonly enablePreviewSizes: boolean\n readonly mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n\n const fileTypeIsAdjustable = isImage(mimeType) && mimeType !== 'image/svg+xml'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) return null\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <DrawerToggler className={`${baseClass}__previewSizes`} slug={sizePreviewSlug}>\n {t('upload:previewSizes')}\n </DrawerToggler>\n )}\n {enableAdjustments && (\n <DrawerToggler className={`${baseClass}__edit`} slug={editDrawerSlug}>\n {t('upload:editImage')}\n </DrawerToggler>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n readonly collectionSlug: string\n readonly customActions?: React.ReactNode[]\n readonly initialState?: FormState\n readonly onChange?: (file?: File) => void\n readonly uploadConfig: SanitizedCollectionConfig['upload']\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { collectionSlug, customActions, initialState, onChange, uploadConfig } = props\n\n const [replacingFile, setReplacingFile] = useState(false)\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { resetUploadEdits, updateUploadEdits, uploadEdits } = useUploadEdits()\n const [doc, setDoc] = useState(reduceFieldsToValues(initialState || {}, true))\n const { docPermissions } = useDocumentInfo()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n\n const [showUrlInput, setShowUrlInput] = useState(false)\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const cursorPositionRef = useRef(null)\n const urlInputRef = useRef<HTMLInputElement>(null)\n\n const handleFileChange = useCallback(\n (newFile: File) => {\n if (newFile instanceof File) {\n setFileSrc(URL.createObjectURL(newFile))\n }\n\n setValue(newFile)\n setShowUrlInput(false)\n\n if (typeof onChange === 'function') {\n onChange(newFile)\n }\n },\n [onChange, setValue],\n )\n\n const handleFileNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n const cursorPosition = e.target.selectionStart\n\n cursorPositionRef.current = cursorPosition\n\n if (value) {\n const fileValue = value\n // Creating a new File object with updated properties\n const newFile = new File([fileValue], updatedFileName, { type: fileValue.type })\n handleFileChange(newFile)\n }\n }\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const inputElement = document.querySelector(`.${baseClass}__filename`) as HTMLInputElement\n if (inputElement && cursorPositionRef.current !== null) {\n inputElement.setSelectionRange(cursorPositionRef.current, cursorPositionRef.current)\n }\n }, [value])\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange(fileToUpload)\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setReplacingFile(true)\n handleFileChange(null)\n setFileSrc('')\n setFileUrl('')\n setDoc({})\n resetUploadEdits()\n setShowUrlInput(false)\n }, [handleFileChange, resetUploadEdits])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n const handlePasteUrlClick = () => {\n setShowUrlInput((prev) => !prev)\n }\n\n const handleUrlSubmit = async () => {\n if (fileUrl) {\n try {\n const response = await fetch(fileUrl)\n const data = await response.blob()\n\n // Extract the file name from the URL\n const fileName = fileUrl.split('/').pop()\n\n // Create a new File object from the Blob data\n const file = new File([data], fileName, { type: data.type })\n handleFileChange(file)\n } catch (e) {\n toast.error(e.message)\n }\n }\n }\n\n useEffect(() => {\n setDoc(reduceFieldsToValues(initialState || {}, true))\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n }\n setReplacingFile(false)\n }, [initialState])\n\n useEffect(() => {\n if (showUrlInput && urlInputRef.current) {\n urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true\n }\n }, [showUrlInput])\n\n const canRemoveUpload =\n docPermissions?.update?.permission &&\n 'delete' in docPermissions &&\n docPermissions?.delete?.permission\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError field={null} message={errorMessage} showError={showError} />\n {doc.filename && !replacingFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={doc}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n imageCacheTag={doc.updatedAt}\n uploadConfig={uploadConfig}\n />\n )}\n {(!doc.filename || replacingFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && !showUrlInput && (\n <Dropzone\n className={`${baseClass}__dropzone`}\n mimeTypes={uploadConfig?.mimeTypes}\n onChange={handleFileSelection}\n onPasteUrlClick={handlePasteUrlClick}\n />\n )}\n {showUrlInput && (\n <React.Fragment>\n <div className={`${baseClass}__remote-file-wrap`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__remote-file`}\n onChange={(e) => {\n setFileUrl(e.target.value)\n }}\n ref={urlInputRef}\n type=\"text\"\n value={fileUrl}\n />\n <div className={`${baseClass}__add-file-wrap`}>\n <button\n className={`${baseClass}__add-file`}\n onClick={() => {\n void handleUrlSubmit()\n }}\n type=\"button\"\n >\n {t('upload:addFile')}\n </button>\n </div>\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n type=\"text\"\n value={value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && doc.filename && !replacingFile}\n mimeType={value.type}\n />\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || doc.filename) && (\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || doc?.filename}\n fileSrc={doc?.url || fileSrc}\n imageCacheTag={doc.updatedAt}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || doc.focalX || 50,\n y: uploadEdits?.focalPoint?.y || doc.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n )}\n {doc && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: doc?.filename })}\n >\n <PreviewSizes doc={doc} imageCacheTag={doc.updatedAt} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","isImage","reduceFieldsToValues","React","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","useForm","useField","useDocumentInfo","useTranslation","useUploadEdits","Button","Drawer","DrawerToggler","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","UploadActions","t0","$","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","t1","t2","Symbol","for","bb0","fileTypeIsAdjustable","length","t3","map","_temp","_jsxs","className","children","Fragment","_jsx","slug","Upload","props","collectionSlug","initialState","onChange","uploadConfig","replacingFile","setReplacingFile","fileSrc","setFileSrc","setModified","resetUploadEdits","updateUploadEdits","uploadEdits","doc","setDoc","docPermissions","errorMessage","setValue","showError","path","showUrlInput","setShowUrlInput","fileUrl","setFileUrl","cursorPositionRef","urlInputRef","handleFileChange","newFile","File","URL","createObjectURL","handleFileNameChange","e","updatedFileName","target","cursorPosition","selectionStart","current","fileValue","type","inputElement","document","querySelector","setSelectionRange","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","args","handlePasteUrlClick","prev","handleUrlSubmit","response","fetch","data","blob","fileName","split","pop","file","error","message","focus","canRemoveUpload","update","permission","delete","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","showCrop","showFocalPoint","filter","join","field","filename","customUploadActions","handleRemove","imageCacheTag","updatedAt","mimeTypes","onPasteUrlClick","ref","onClick","buttonStyle","icon","iconStyle","round","tooltip","name","Header","url","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","title","label","CustomAction","i"],"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { isImage, reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer, DrawerToggler } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\nimport './index.scss'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n readonly customActions?: React.ReactNode[]\n readonly enableAdjustments: boolean\n readonly enablePreviewSizes: boolean\n readonly mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n\n const fileTypeIsAdjustable = isImage(mimeType) && mimeType !== 'image/svg+xml'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) return null\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <DrawerToggler className={`${baseClass}__previewSizes`} slug={sizePreviewSlug}>\n {t('upload:previewSizes')}\n </DrawerToggler>\n )}\n {enableAdjustments && (\n <DrawerToggler className={`${baseClass}__edit`} slug={editDrawerSlug}>\n {t('upload:editImage')}\n </DrawerToggler>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n readonly collectionSlug: string\n readonly customActions?: React.ReactNode[]\n readonly initialState?: FormState\n readonly onChange?: (file?: File) => void\n readonly uploadConfig: SanitizedCollectionConfig['upload']\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { collectionSlug, customActions, initialState, onChange, uploadConfig } = props\n\n const [replacingFile, setReplacingFile] = useState(false)\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { resetUploadEdits, updateUploadEdits, uploadEdits } = useUploadEdits()\n const [doc, setDoc] = useState(reduceFieldsToValues(initialState || {}, true))\n const { docPermissions } = useDocumentInfo()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n\n const [showUrlInput, setShowUrlInput] = useState(false)\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const cursorPositionRef = useRef(null)\n const urlInputRef = useRef<HTMLInputElement>(null)\n\n const handleFileChange = useCallback(\n (newFile: File) => {\n if (newFile instanceof File) {\n setFileSrc(URL.createObjectURL(newFile))\n }\n\n setValue(newFile)\n setShowUrlInput(false)\n\n if (typeof onChange === 'function') {\n onChange(newFile)\n }\n },\n [onChange, setValue],\n )\n\n const handleFileNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n const cursorPosition = e.target.selectionStart\n\n cursorPositionRef.current = cursorPosition\n\n if (value) {\n const fileValue = value\n // Creating a new File object with updated properties\n const newFile = new File([fileValue], updatedFileName, { type: fileValue.type })\n handleFileChange(newFile)\n }\n }\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const inputElement = document.querySelector(`.${baseClass}__filename`) as HTMLInputElement\n if (inputElement && cursorPositionRef.current !== null) {\n inputElement.setSelectionRange(cursorPositionRef.current, cursorPositionRef.current)\n }\n }, [value])\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange(fileToUpload)\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setReplacingFile(true)\n handleFileChange(null)\n setFileSrc('')\n setFileUrl('')\n setDoc({})\n resetUploadEdits()\n setShowUrlInput(false)\n }, [handleFileChange, resetUploadEdits])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n const handlePasteUrlClick = () => {\n setShowUrlInput((prev) => !prev)\n }\n\n const handleUrlSubmit = async () => {\n if (fileUrl) {\n try {\n const response = await fetch(fileUrl)\n const data = await response.blob()\n\n // Extract the file name from the URL\n const fileName = fileUrl.split('/').pop()\n\n // Create a new File object from the Blob data\n const file = new File([data], fileName, { type: data.type })\n handleFileChange(file)\n } catch (e) {\n toast.error(e.message)\n }\n }\n }\n\n useEffect(() => {\n setDoc(reduceFieldsToValues(initialState || {}, true))\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n }\n setReplacingFile(false)\n }, [initialState])\n\n useEffect(() => {\n if (showUrlInput && urlInputRef.current) {\n urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true\n }\n }, [showUrlInput])\n\n const canRemoveUpload =\n docPermissions?.update?.permission &&\n 'delete' in docPermissions &&\n docPermissions?.delete?.permission\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError field={null} message={errorMessage} showError={showError} />\n {doc.filename && !replacingFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={doc}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n imageCacheTag={doc.updatedAt}\n uploadConfig={uploadConfig}\n />\n )}\n {(!doc.filename || replacingFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && !showUrlInput && (\n <Dropzone\n className={`${baseClass}__dropzone`}\n mimeTypes={uploadConfig?.mimeTypes}\n onChange={handleFileSelection}\n onPasteUrlClick={handlePasteUrlClick}\n />\n )}\n {showUrlInput && (\n <React.Fragment>\n <div className={`${baseClass}__remote-file-wrap`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__remote-file`}\n onChange={(e) => {\n setFileUrl(e.target.value)\n }}\n ref={urlInputRef}\n type=\"text\"\n value={fileUrl}\n />\n <div className={`${baseClass}__add-file-wrap`}>\n <button\n className={`${baseClass}__add-file`}\n onClick={() => {\n void handleUrlSubmit()\n }}\n type=\"button\"\n >\n {t('upload:addFile')}\n </button>\n </div>\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n type=\"text\"\n value={value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && doc.filename && !replacingFile}\n mimeType={value.type}\n />\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || doc.filename) && (\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || doc?.filename}\n fileSrc={doc?.url || fileSrc}\n imageCacheTag={doc.updatedAt}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || doc.focalX || 50,\n y: uploadEdits?.focalPoint?.y || doc.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n )}\n {doc && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: doc?.filename })}\n >\n <PreviewSizes doc={doc} imageCacheTag={doc.updatedAt} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}