@strapi/upload 5.46.1 → 5.47.1

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 (49) hide show
  1. package/dist/admin/future/components/Drawer.js +7 -1
  2. package/dist/admin/future/components/Drawer.js.map +1 -1
  3. package/dist/admin/future/components/Drawer.mjs +7 -1
  4. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  5. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +275 -147
  6. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  7. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +279 -152
  8. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  9. package/dist/admin/future/services/assets.js +32 -1
  10. package/dist/admin/future/services/assets.js.map +1 -1
  11. package/dist/admin/future/services/assets.mjs +32 -2
  12. package/dist/admin/future/services/assets.mjs.map +1 -1
  13. package/dist/admin/future/services/folders.js +33 -1
  14. package/dist/admin/future/services/folders.js.map +1 -1
  15. package/dist/admin/future/services/folders.mjs +33 -2
  16. package/dist/admin/future/services/folders.mjs.map +1 -1
  17. package/dist/admin/index.js +1 -1
  18. package/dist/admin/index.mjs +1 -1
  19. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +8 -0
  20. package/dist/admin/src/future/services/assets.d.ts +6 -2
  21. package/dist/admin/src/future/services/folders.d.ts +1 -1
  22. package/dist/admin/translations/{dk.json.js → da.json.js} +3 -3
  23. package/dist/admin/translations/{dk.json.js.map → da.json.js.map} +1 -1
  24. package/dist/admin/translations/{dk.json.mjs → da.json.mjs} +3 -3
  25. package/dist/admin/translations/{dk.json.mjs.map → da.json.mjs.map} +1 -1
  26. package/dist/admin/translations/en.json.js +5 -1
  27. package/dist/admin/translations/en.json.js.map +1 -1
  28. package/dist/admin/translations/en.json.mjs +5 -1
  29. package/dist/admin/translations/en.json.mjs.map +1 -1
  30. package/dist/admin/translations/sk.json.js +105 -1
  31. package/dist/admin/translations/sk.json.js.map +1 -1
  32. package/dist/admin/translations/sk.json.mjs +105 -1
  33. package/dist/admin/translations/sk.json.mjs.map +1 -1
  34. package/dist/server/bootstrap.js +0 -3
  35. package/dist/server/bootstrap.js.map +1 -1
  36. package/dist/server/bootstrap.mjs +0 -3
  37. package/dist/server/bootstrap.mjs.map +1 -1
  38. package/dist/server/services/ai-metadata-jobs.js +0 -23
  39. package/dist/server/services/ai-metadata-jobs.js.map +1 -1
  40. package/dist/server/services/ai-metadata-jobs.mjs +0 -23
  41. package/dist/server/services/ai-metadata-jobs.mjs.map +1 -1
  42. package/dist/server/src/bootstrap.d.ts.map +1 -1
  43. package/dist/server/src/index.d.ts +0 -1
  44. package/dist/server/src/index.d.ts.map +1 -1
  45. package/dist/server/src/services/ai-metadata-jobs.d.ts +0 -1
  46. package/dist/server/src/services/ai-metadata-jobs.d.ts.map +1 -1
  47. package/dist/server/src/services/index.d.ts +0 -1
  48. package/dist/server/src/services/index.d.ts.map +1 -1
  49. package/package.json +7 -7
@@ -10,6 +10,7 @@ var styledComponents = require('styled-components');
10
10
  var Drawer = require('../../../../components/Drawer.js');
11
11
  var enums = require('../../../../enums.js');
12
12
  var assets = require('../../../../services/assets.js');
13
+ var folders = require('../../../../services/folders.js');
13
14
  var files = require('../../../../utils/files.js');
14
15
  var getAssetIcon = require('../../../../utils/getAssetIcon.js');
15
16
  var translations = require('../../../../utils/translations.js');
@@ -43,51 +44,49 @@ const URL_PARAM = 'assetId';
43
44
  const detailsId = query?.[URL_PARAM];
44
45
  const assetId = detailsId ? parseInt(detailsId, 10) : null;
45
46
  const hasValidId = assetId !== null && !Number.isNaN(assetId);
46
- const [isClosing, setIsClosing] = React__namespace.useState(false);
47
+ // Closing is driven by removing the URL param (a navigation), so navigation
48
+ // guards like <Blocker> can intercept it. `isMounted` keeps the drawer in the
49
+ // tree through the slide-out: it stays true once opened and only flips false
50
+ // when the close animation actually ends (see onCloseAnimationEnd), so the
51
+ // close duration lives entirely in CSS — no JS timer.
52
+ const [isMounted, setIsMounted] = React__namespace.useState(hasValidId);
47
53
  const displayAssetId = React__namespace.useRef(null);
48
- const isVisible = hasValidId && !isClosing;
49
54
  React__namespace.useEffect(()=>{
50
55
  if (hasValidId) {
51
56
  displayAssetId.current = assetId;
57
+ setIsMounted(true);
52
58
  }
53
59
  }, [
54
60
  hasValidId,
55
61
  assetId
56
62
  ]);
63
+ const onCloseAnimationEnd = React__namespace.useCallback((event)=>{
64
+ // Ignore animations bubbling up from descendants, and the slide-in.
65
+ if (event.target === event.currentTarget && !hasValidId) {
66
+ setIsMounted(false);
67
+ }
68
+ }, [
69
+ hasValidId
70
+ ]);
57
71
  const openDetails = React__namespace.useCallback((id)=>{
58
- setIsClosing(false);
59
72
  setQuery({
60
73
  [URL_PARAM]: String(id)
61
- });
74
+ }, 'push', true);
62
75
  }, [
63
76
  setQuery
64
77
  ]);
65
78
  const closeDetails = React__namespace.useCallback(()=>{
66
- if (!hasValidId) return;
67
- setIsClosing(true);
68
- }, [
69
- hasValidId
70
- ]);
71
- React__namespace.useEffect(()=>{
72
- if (!isClosing) return;
73
- const timer = window.setTimeout(()=>{
74
- setQuery({
75
- [URL_PARAM]: undefined
76
- }, 'remove');
77
- setIsClosing(false);
78
- displayAssetId.current = null;
79
- }, Drawer.DRAWER_CLOSE_ANIMATION_MS);
80
- return ()=>window.clearTimeout(timer);
79
+ setQuery({
80
+ [URL_PARAM]: undefined
81
+ }, 'remove', true);
81
82
  }, [
82
- isClosing,
83
83
  setQuery
84
84
  ]);
85
- const shouldRenderDrawer = hasValidId || isClosing;
86
- const drawerAssetId = isClosing ? displayAssetId.current ?? assetId : assetId;
87
85
  return {
88
- assetId: drawerAssetId,
89
- isVisible,
90
- shouldRenderDrawer,
86
+ assetId: hasValidId ? assetId : displayAssetId.current,
87
+ isVisible: hasValidId,
88
+ shouldRenderDrawer: isMounted,
89
+ onCloseAnimationEnd,
91
90
  openDetails,
92
91
  closeDetails
93
92
  };
@@ -125,7 +124,18 @@ const DetailItem = ({ label, value })=>/*#__PURE__*/ jsxRuntime.jsxs(DetailItemC
125
124
  fill: ${({ theme })=>theme.colors.warning500};
126
125
  }
127
126
  `;
128
- const DetailField = ({ name, label, value, required })=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
127
+ const DetailField = ({ name, label, required })=>{
128
+ const { formatMessage } = reactIntl.useIntl();
129
+ const field = strapiAdmin.useField(name);
130
+ const isSubmitting = strapiAdmin.useForm('DetailField', (state)=>state.isSubmitting);
131
+ const value = field.value ?? '';
132
+ const emptyTooltipLabel = formatMessage({
133
+ id: translations.getTranslationKey('asset-details.field.empty'),
134
+ defaultMessage: '{label} is currently empty.'
135
+ }, {
136
+ label
137
+ });
138
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
129
139
  name: name,
130
140
  required: required,
131
141
  children: [
@@ -133,138 +143,254 @@ const DetailField = ({ name, label, value, required })=>/*#__PURE__*/ jsxRuntime
133
143
  children: label
134
144
  }),
135
145
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
136
- value: value ?? '',
137
- // TODO: handle onChange
138
- onChange: ()=>{},
139
- endAction: !value ? /*#__PURE__*/ jsxRuntime.jsx(StyledWarning, {}) : undefined,
140
- type: "text"
146
+ value: value,
147
+ onChange: (event)=>field.onChange(name, event.target.value),
148
+ endAction: !value ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
149
+ label: emptyTooltipLabel,
150
+ children: /*#__PURE__*/ jsxRuntime.jsx(StyledWarning, {
151
+ "aria-label": emptyTooltipLabel,
152
+ role: "img"
153
+ })
154
+ }) : undefined,
155
+ type: "text",
156
+ disabled: isSubmitting
141
157
  })
142
158
  ]
143
159
  });
144
- const AssetDetails = ({ asset })=>{
145
- const { formatMessage, formatDate } = reactIntl.useIntl();
146
- const isImage = asset.mime?.includes(enums.AssetType.Image);
147
- return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
148
- direction: "column",
149
- alignItems: "stretch",
150
- gap: 4,
151
- paddingTop: 4,
152
- paddingBottom: 4,
153
- paddingLeft: 5,
154
- paddingRight: 5,
160
+ };
161
+ const LocationField = ({ label, rootLabel, folders })=>{
162
+ const field = strapiAdmin.useField('folder');
163
+ const isSubmitting = strapiAdmin.useForm('LocationField', (state)=>state.isSubmitting);
164
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
165
+ name: "folder",
166
+ required: true,
155
167
  children: [
156
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
157
- variant: "beta",
158
- fontWeight: "semiBold",
159
- tag: "h3",
160
- children: formatMessage({
161
- id: translations.getTranslationKey('asset-details.fileInfo'),
162
- defaultMessage: 'File info'
163
- })
168
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
169
+ children: label
164
170
  }),
165
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
166
- wrap: "wrap",
167
- gap: 4,
168
- background: "neutral100",
169
- paddingTop: 4,
170
- paddingBottom: 4,
171
- paddingLeft: 6,
172
- paddingRight: 6,
173
- alignItems: "flex-start",
171
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.SingleSelect, {
172
+ value: field.value == null ? '' : String(field.value),
173
+ onChange: (value)=>{
174
+ const next = value === '' ? null : Number(value);
175
+ field.onChange('folder', next);
176
+ },
177
+ disabled: isSubmitting,
174
178
  children: [
175
- /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
176
- label: formatMessage({
177
- id: translations.getTranslationKey('asset-details.creationDate'),
178
- defaultMessage: 'Creation date'
179
- }),
180
- value: asset.createdAt ? formatDate(new Date(asset.createdAt), {
181
- dateStyle: 'long',
182
- timeStyle: 'short'
183
- }) : null
184
- }),
185
- /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
186
- label: formatMessage({
187
- id: translations.getTranslationKey('asset-details.lastUpdated'),
188
- defaultMessage: 'Last updated'
189
- }),
190
- value: asset.updatedAt ? formatDate(new Date(asset.updatedAt), {
191
- dateStyle: 'long',
192
- timeStyle: 'short'
193
- }) : null
194
- }),
195
- /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
196
- label: formatMessage({
197
- id: translations.getTranslationKey('asset-details.createdBy'),
198
- defaultMessage: 'Created by'
199
- }),
200
- value: asset.createdBy ? strapiAdmin.getDisplayName({
201
- firstname: asset.createdBy.firstname ?? undefined,
202
- lastname: asset.createdBy.lastname ?? undefined,
203
- username: asset.createdBy.username ?? undefined,
204
- email: asset.createdBy.email ?? undefined
205
- }) ?? '-' : null
179
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
180
+ value: "",
181
+ children: rootLabel
206
182
  }),
207
- /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
208
- label: formatMessage({
209
- id: translations.getTranslationKey('asset-details.size'),
210
- defaultMessage: 'Size'
211
- }),
212
- value: asset.size ? files.formatBytes(asset.size, 1) : null
213
- }),
214
- isImage && (asset.width != null || asset.height != null) && /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
215
- label: formatMessage({
216
- id: translations.getTranslationKey('asset-details.dimensions'),
217
- defaultMessage: 'Dimensions'
218
- }),
219
- value: asset.width != null && asset.height != null ? `${asset.width} × ${asset.height}` : null
220
- }),
221
- /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
222
- label: formatMessage({
223
- id: translations.getTranslationKey('asset-details.extension'),
224
- defaultMessage: 'Extension'
225
- }),
226
- value: files.getFileExtension(asset.ext)
227
- }),
228
- /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
229
- label: formatMessage({
230
- id: translations.getTranslationKey('asset-details.assetId'),
231
- defaultMessage: 'Asset ID'
232
- }),
233
- value: String(asset.id)
234
- })
183
+ folders.map((folder)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
184
+ value: String(folder.id),
185
+ children: folder.name
186
+ }, folder.id))
235
187
  ]
236
- }),
237
- /*#__PURE__*/ jsxRuntime.jsx(DetailField, {
238
- name: "fileName",
239
- label: formatMessage({
240
- id: translations.getTranslationKey('asset-details.fileName'),
241
- defaultMessage: 'File name'
242
- }),
243
- value: asset.name,
244
- required: true
245
- }),
246
- isImage && /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
188
+ })
189
+ ]
190
+ });
191
+ };
192
+ const AssetDetails = ({ asset })=>{
193
+ const { formatMessage, formatDate } = reactIntl.useIntl();
194
+ const { toggleNotification } = strapiAdmin.useNotification();
195
+ const { data: folders$1 = [] } = folders.useGetAllFoldersQuery();
196
+ const [updateAsset] = assets.useUpdateAssetMutation();
197
+ const isImage = asset.mime?.includes(enums.AssetType.Image);
198
+ const initialValues = {
199
+ name: asset.name ?? '',
200
+ caption: asset.caption ?? '',
201
+ alternativeText: asset.alternativeText ?? '',
202
+ folder: typeof asset.folder === 'object' && asset.folder !== null ? asset.folder.id ?? null : asset.folder ?? null
203
+ };
204
+ const handleSubmit = async (values)=>{
205
+ const res = await updateAsset({
206
+ id: asset.id,
207
+ fileInfo: {
208
+ name: values.name,
209
+ caption: values.caption,
210
+ alternativeText: values.alternativeText,
211
+ folder: values.folder
212
+ }
213
+ });
214
+ if ('error' in res) {
215
+ toggleNotification({
216
+ type: 'danger',
217
+ message: formatMessage({
218
+ id: translations.getTranslationKey('asset-details.update.error'),
219
+ defaultMessage: 'Failed to update the file.'
220
+ })
221
+ });
222
+ return;
223
+ }
224
+ toggleNotification({
225
+ type: 'success',
226
+ message: formatMessage({
227
+ id: translations.getTranslationKey('asset-details.update.success'),
228
+ defaultMessage: 'File updated'
229
+ })
230
+ });
231
+ };
232
+ return(// `key={asset.id}` resets the form when the drawer switches to a different
233
+ // asset so cached values from the previous asset don't bleed in.
234
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
235
+ method: "POST",
236
+ initialValues: initialValues,
237
+ onSubmit: handleSubmit,
238
+ children: ({ modified, isSubmitting, values, resetForm })=>{
239
+ const nameIsEmpty = (values.name ?? '').trim() === '';
240
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
247
241
  children: [
248
- /*#__PURE__*/ jsxRuntime.jsx(DetailField, {
249
- name: "caption",
250
- label: formatMessage({
251
- id: translations.getTranslationKey('asset-details.caption'),
252
- defaultMessage: 'Caption'
253
- }),
254
- value: asset.caption
242
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Blocker, {
243
+ onProceed: resetForm
255
244
  }),
256
- /*#__PURE__*/ jsxRuntime.jsx(DetailField, {
257
- name: "alternativeText",
258
- label: formatMessage({
259
- id: translations.getTranslationKey('asset-details.alternativeText'),
260
- defaultMessage: 'Alternative text'
261
- }),
262
- value: asset.alternativeText
245
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
246
+ direction: "column",
247
+ alignItems: "stretch",
248
+ gap: 4,
249
+ paddingTop: 4,
250
+ paddingBottom: 4,
251
+ paddingLeft: 5,
252
+ paddingRight: 5,
253
+ children: [
254
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
255
+ variant: "beta",
256
+ fontWeight: "semiBold",
257
+ tag: "h3",
258
+ children: formatMessage({
259
+ id: translations.getTranslationKey('asset-details.fileInfo'),
260
+ defaultMessage: 'File info'
261
+ })
262
+ }),
263
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
264
+ wrap: "wrap",
265
+ gap: 4,
266
+ background: "neutral100",
267
+ paddingTop: 4,
268
+ paddingBottom: 4,
269
+ paddingLeft: 6,
270
+ paddingRight: 6,
271
+ alignItems: "flex-start",
272
+ children: [
273
+ /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
274
+ label: formatMessage({
275
+ id: translations.getTranslationKey('asset-details.creationDate'),
276
+ defaultMessage: 'Creation date'
277
+ }),
278
+ value: asset.createdAt ? formatDate(new Date(asset.createdAt), {
279
+ dateStyle: 'long',
280
+ timeStyle: 'short'
281
+ }) : null
282
+ }),
283
+ /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
284
+ label: formatMessage({
285
+ id: translations.getTranslationKey('asset-details.lastUpdated'),
286
+ defaultMessage: 'Last updated'
287
+ }),
288
+ value: asset.updatedAt ? formatDate(new Date(asset.updatedAt), {
289
+ dateStyle: 'long',
290
+ timeStyle: 'short'
291
+ }) : null
292
+ }),
293
+ /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
294
+ label: formatMessage({
295
+ id: translations.getTranslationKey('asset-details.createdBy'),
296
+ defaultMessage: 'Created by'
297
+ }),
298
+ value: asset.createdBy ? strapiAdmin.getDisplayName({
299
+ firstname: asset.createdBy.firstname ?? undefined,
300
+ lastname: asset.createdBy.lastname ?? undefined,
301
+ username: asset.createdBy.username ?? undefined,
302
+ email: asset.createdBy.email ?? undefined
303
+ }) ?? '-' : null
304
+ }),
305
+ /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
306
+ label: formatMessage({
307
+ id: translations.getTranslationKey('asset-details.size'),
308
+ defaultMessage: 'Size'
309
+ }),
310
+ value: asset.size ? files.formatBytes(asset.size, 1) : null
311
+ }),
312
+ isImage && (asset.width != null || asset.height != null) && /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
313
+ label: formatMessage({
314
+ id: translations.getTranslationKey('asset-details.dimensions'),
315
+ defaultMessage: 'Dimensions'
316
+ }),
317
+ value: asset.width != null && asset.height != null ? `${asset.width} × ${asset.height}` : null
318
+ }),
319
+ /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
320
+ label: formatMessage({
321
+ id: translations.getTranslationKey('asset-details.extension'),
322
+ defaultMessage: 'Extension'
323
+ }),
324
+ value: files.getFileExtension(asset.ext)
325
+ }),
326
+ /*#__PURE__*/ jsxRuntime.jsx(DetailItem, {
327
+ label: formatMessage({
328
+ id: translations.getTranslationKey('asset-details.assetId'),
329
+ defaultMessage: 'Asset ID'
330
+ }),
331
+ value: String(asset.id)
332
+ })
333
+ ]
334
+ }),
335
+ /*#__PURE__*/ jsxRuntime.jsx(DetailField, {
336
+ name: "name",
337
+ label: formatMessage({
338
+ id: translations.getTranslationKey('asset-details.fileName'),
339
+ defaultMessage: 'File name'
340
+ }),
341
+ required: true
342
+ }),
343
+ /*#__PURE__*/ jsxRuntime.jsx(LocationField, {
344
+ label: formatMessage({
345
+ id: translations.getTranslationKey('asset-details.location'),
346
+ defaultMessage: 'Location'
347
+ }),
348
+ rootLabel: formatMessage({
349
+ id: translations.getTranslationKey('plugin.home'),
350
+ defaultMessage: 'Home'
351
+ }),
352
+ folders: folders$1
353
+ }),
354
+ isImage && /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
355
+ children: [
356
+ /*#__PURE__*/ jsxRuntime.jsx(DetailField, {
357
+ name: "caption",
358
+ label: formatMessage({
359
+ id: translations.getTranslationKey('asset-details.caption'),
360
+ defaultMessage: 'Caption'
361
+ })
362
+ }),
363
+ /*#__PURE__*/ jsxRuntime.jsx(DetailField, {
364
+ name: "alternativeText",
365
+ label: formatMessage({
366
+ id: translations.getTranslationKey('asset-details.alternativeText'),
367
+ defaultMessage: 'Alternative text'
368
+ })
369
+ })
370
+ ]
371
+ }),
372
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
373
+ justifyContent: "flex-end",
374
+ gap: 2,
375
+ paddingTop: 2,
376
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
377
+ type: "submit",
378
+ variant: "default",
379
+ loading: isSubmitting,
380
+ // File name is required; block submit when it's empty or whitespace so the API can't 400 on a blank value.
381
+ disabled: !modified || isSubmitting || nameIsEmpty,
382
+ children: formatMessage({
383
+ id: translations.getTranslationKey('asset-details.save'),
384
+ defaultMessage: 'Save changes'
385
+ })
386
+ })
387
+ })
388
+ ]
263
389
  })
264
390
  ]
265
- })
266
- ]
267
- });
391
+ });
392
+ }
393
+ }, asset.id));
268
394
  };
269
395
  const DrawerHeader = ({ asset, closeDetails })=>{
270
396
  const DocIcon = asset ? getAssetIcon.getAssetIcon(asset.mime, asset.ext) : icons.FileError;
@@ -362,7 +488,7 @@ const DrawerContent = ({ assetId, closeDetails })=>{
362
488
  * AssetDetailsDrawer
363
489
  * -----------------------------------------------------------------------------------------------*/ const AssetDetailsDrawer = ()=>{
364
490
  const { formatMessage } = reactIntl.useIntl();
365
- const { assetId, isVisible, shouldRenderDrawer, closeDetails } = useAssetDetailsParam();
491
+ const { assetId, isVisible, shouldRenderDrawer, onCloseAnimationEnd, closeDetails } = useAssetDetailsParam();
366
492
  if (!shouldRenderDrawer || assetId === null) {
367
493
  return null;
368
494
  }
@@ -392,6 +518,7 @@ const DrawerContent = ({ assetId, closeDetails })=>{
392
518
  animationDirection: "left",
393
519
  width: "41.6rem",
394
520
  height: "100vh",
521
+ onAnimationEnd: onCloseAnimationEnd,
395
522
  children: /*#__PURE__*/ jsxRuntime.jsx(DrawerContent, {
396
523
  assetId: assetId,
397
524
  closeDetails: closeDetails
@@ -401,6 +528,7 @@ const DrawerContent = ({ assetId, closeDetails })=>{
401
528
  });
402
529
  };
403
530
 
531
+ exports.AssetDetails = AssetDetails;
404
532
  exports.AssetDetailsDrawer = AssetDetailsDrawer;
405
533
  exports.useAssetDetailsParam = useAssetDetailsParam;
406
534
  //# sourceMappingURL=AssetDetailsDrawer.js.map