@strapi/upload 5.26.0 → 5.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/ai/components/AIAssetCard.js +589 -0
- package/dist/admin/ai/components/AIAssetCard.js.map +1 -0
- package/dist/admin/ai/components/AIAssetCard.mjs +567 -0
- package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -0
- package/dist/admin/ai/components/AIUploadModal.js +363 -0
- package/dist/admin/ai/components/AIUploadModal.js.map +1 -0
- package/dist/admin/ai/components/AIUploadModal.mjs +341 -0
- package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/AssetDialog.js +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +3 -3
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +4 -4
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +5 -5
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +5 -5
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js +2 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs +2 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs.map +1 -1
- package/dist/admin/components/SelectTree/utils/flattenTree.js +11 -6
- package/dist/admin/components/SelectTree/utils/flattenTree.js.map +1 -1
- package/dist/admin/components/SelectTree/utils/flattenTree.mjs +11 -6
- package/dist/admin/components/SelectTree/utils/flattenTree.mjs.map +1 -1
- package/dist/admin/hooks/useAiAvailability.js +22 -0
- package/dist/admin/hooks/useAiAvailability.js.map +1 -0
- package/dist/admin/hooks/useAiAvailability.mjs +20 -0
- package/dist/admin/hooks/useAiAvailability.mjs.map +1 -0
- package/dist/admin/hooks/useBulkEdit.js +66 -0
- package/dist/admin/hooks/useBulkEdit.js.map +1 -0
- package/dist/admin/hooks/useBulkEdit.mjs +64 -0
- package/dist/admin/hooks/useBulkEdit.mjs.map +1 -0
- package/dist/admin/hooks/useSettings.js +22 -0
- package/dist/admin/hooks/useSettings.js.map +1 -0
- package/dist/admin/hooks/useSettings.mjs +20 -0
- package/dist/admin/hooks/useSettings.mjs.map +1 -0
- package/dist/admin/hooks/useUpload.js +25 -14
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/hooks/useUpload.mjs +25 -14
- package/dist/admin/hooks/useUpload.mjs.map +1 -1
- package/dist/admin/package.json.js +5 -5
- package/dist/admin/package.json.mjs +5 -5
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +0 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +0 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +19 -5
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +19 -5
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.js +222 -144
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs +225 -147
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/reducer.js +9 -10
- package/dist/admin/pages/SettingsPage/reducer.js.map +1 -1
- package/dist/admin/pages/SettingsPage/reducer.mjs +9 -10
- package/dist/admin/pages/SettingsPage/reducer.mjs.map +1 -1
- package/dist/admin/src/ai/components/AIAssetCard.d.ts +13 -0
- package/dist/admin/src/ai/components/AIUploadModal.d.ts +55 -0
- package/dist/admin/src/components/EditAssetDialog/EditAssetContent.d.ts +3 -1
- package/dist/admin/src/components/SelectTree/utils/flattenTree.d.ts +3 -1
- package/dist/admin/src/hooks/useAiAvailability.d.ts +4 -0
- package/dist/admin/src/hooks/useBulkEdit.d.ts +91 -0
- package/dist/admin/src/hooks/useSettings.d.ts +7 -0
- package/dist/admin/src/hooks/useUpload.d.ts +1 -1
- package/dist/admin/src/pages/SettingsPage/reducer.d.ts +3 -12
- package/dist/admin/translations/en.json.js +7 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +7 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/getFolderParents.js +2 -1
- package/dist/admin/utils/getFolderParents.js.map +1 -1
- package/dist/admin/utils/getFolderParents.mjs +2 -1
- package/dist/admin/utils/getFolderParents.mjs.map +1 -1
- package/dist/server/bootstrap.js +2 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +2 -1
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/admin-upload.js +57 -2
- package/dist/server/controllers/admin-upload.js.map +1 -1
- package/dist/server/controllers/admin-upload.mjs +59 -4
- package/dist/server/controllers/admin-upload.mjs.map +1 -1
- package/dist/server/controllers/content-api.js +3 -1
- package/dist/server/controllers/content-api.js.map +1 -1
- package/dist/server/controllers/content-api.mjs +3 -1
- package/dist/server/controllers/content-api.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/settings.js +2 -1
- package/dist/server/controllers/validation/admin/settings.js.map +1 -1
- package/dist/server/controllers/validation/admin/settings.mjs +2 -1
- package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/upload.js +8 -0
- package/dist/server/controllers/validation/admin/upload.js.map +1 -1
- package/dist/server/controllers/validation/admin/upload.mjs +8 -1
- package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
- package/dist/server/routes/admin.js +18 -0
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs +18 -0
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/services/ai-metadata.js +97 -0
- package/dist/server/services/ai-metadata.js.map +1 -0
- package/dist/server/services/ai-metadata.mjs +95 -0
- package/dist/server/services/ai-metadata.mjs.map +1 -0
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/services/weekly-metrics.js +5 -1
- package/dist/server/services/weekly-metrics.js.map +1 -1
- package/dist/server/services/weekly-metrics.mjs +5 -1
- package/dist/server/services/weekly-metrics.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-upload.d.ts +1 -0
- package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/settings.d.ts +3 -0
- package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/upload.d.ts +42 -0
- package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +14 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/services/ai-metadata.d.ts +13 -0
- package/dist/server/src/services/ai-metadata.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +13 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/upload.d.ts +2 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/services/weekly-metrics.d.ts +1 -0
- package/dist/server/src/services/weekly-metrics.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +1 -0
- package/dist/server/src/types.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/files.d.ts +22 -0
- package/dist/shared/contracts/settings.d.ts +2 -0
- package/package.json +5 -5
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
|
+
var designSystem = require('@strapi/design-system');
|
|
7
|
+
var icons = require('@strapi/icons');
|
|
8
|
+
var reactIntl = require('react-intl');
|
|
9
|
+
var styledComponents = require('styled-components');
|
|
10
|
+
var AudioPreview = require('../../components/AssetCard/AudioPreview.js');
|
|
11
|
+
var VideoPreview = require('../../components/AssetCard/VideoPreview.js');
|
|
12
|
+
var EditAssetContent = require('../../components/EditAssetDialog/EditAssetContent.js');
|
|
13
|
+
var constants = require('../../constants.js');
|
|
14
|
+
var useMediaLibraryPermissions = require('../../hooks/useMediaLibraryPermissions.js');
|
|
15
|
+
var useRemoveAsset = require('../../hooks/useRemoveAsset.js');
|
|
16
|
+
var prefixFileUrlWithBackendUrl = require('../../utils/prefixFileUrlWithBackendUrl.js');
|
|
17
|
+
var formatBytes = require('../../utils/formatBytes.js');
|
|
18
|
+
var formatDuration = require('../../utils/formatDuration.js');
|
|
19
|
+
var getTrad = require('../../utils/getTrad.js');
|
|
20
|
+
require('qs');
|
|
21
|
+
var getFileExtension = require('../../utils/getFileExtension.js');
|
|
22
|
+
var typeFromMime = require('../../utils/typeFromMime.js');
|
|
23
|
+
require('../../utils/urlYupSchema.js');
|
|
24
|
+
var AIUploadModal = require('./AIUploadModal.js');
|
|
25
|
+
|
|
26
|
+
function _interopNamespaceDefault(e) {
|
|
27
|
+
var n = Object.create(null);
|
|
28
|
+
if (e) {
|
|
29
|
+
Object.keys(e).forEach(function (k) {
|
|
30
|
+
if (k !== 'default') {
|
|
31
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
32
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () { return e[k]; }
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
n.default = e;
|
|
40
|
+
return Object.freeze(n);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
44
|
+
|
|
45
|
+
const CardActionsContainer = styledComponents.styled(designSystem.CardAction)`
|
|
46
|
+
opacity: 0;
|
|
47
|
+
z-index: 1;
|
|
48
|
+
|
|
49
|
+
&:focus-within {
|
|
50
|
+
opacity: 1;
|
|
51
|
+
}
|
|
52
|
+
`;
|
|
53
|
+
const CardContainer = styledComponents.styled(designSystem.Box)`
|
|
54
|
+
background: ${({ theme })=>theme.colors.neutral0};
|
|
55
|
+
border: 1px solid ${({ theme })=>theme.colors.neutral150};
|
|
56
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
57
|
+
|
|
58
|
+
&:hover {
|
|
59
|
+
${CardActionsContainer} {
|
|
60
|
+
opacity: 1;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
`;
|
|
64
|
+
/* -------------------------------------------------------------------------------------------------
|
|
65
|
+
* AssetCardActions
|
|
66
|
+
* -----------------------------------------------------------------------------------------------*/ const AssetCardActions = ({ asset })=>{
|
|
67
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
68
|
+
const dispatch = AIUploadModal.useAIUploadModalContext('AssetCardActions', (s)=>s.dispatch);
|
|
69
|
+
const state = AIUploadModal.useAIUploadModalContext('AssetCardActions', (s)=>s.state);
|
|
70
|
+
const onClose = AIUploadModal.useAIUploadModalContext('AssetCardActions', (s)=>s.onClose);
|
|
71
|
+
const { canUpdate, canCopyLink, canDownload } = useMediaLibraryPermissions.useMediaLibraryPermissions();
|
|
72
|
+
const [isEditModalOpen, setIsEditModalOpen] = React__namespace.useState(false);
|
|
73
|
+
const { removeAsset } = useRemoveAsset.useRemoveAsset(()=>{});
|
|
74
|
+
const handleConfirmRemove = async (event)=>{
|
|
75
|
+
event?.preventDefault();
|
|
76
|
+
await removeAsset(asset.id);
|
|
77
|
+
dispatch({
|
|
78
|
+
type: 'remove_uploaded_asset',
|
|
79
|
+
payload: {
|
|
80
|
+
id: asset.id
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
// Close modal if this was the last asset
|
|
84
|
+
if (state.uploadedAssets.length === 1) {
|
|
85
|
+
onClose();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const handlePropagationClick = (event)=>{
|
|
89
|
+
event.stopPropagation();
|
|
90
|
+
};
|
|
91
|
+
const handleEditAsset = (editedAsset)=>{
|
|
92
|
+
if (editedAsset) {
|
|
93
|
+
dispatch({
|
|
94
|
+
type: 'edit_uploaded_asset',
|
|
95
|
+
payload: {
|
|
96
|
+
editedAsset
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
setIsEditModalOpen(false);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(CardActionsContainer, {
|
|
103
|
+
onClick: handlePropagationClick,
|
|
104
|
+
position: "end",
|
|
105
|
+
children: [
|
|
106
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Dialog.Root, {
|
|
107
|
+
children: [
|
|
108
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Trigger, {
|
|
109
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
110
|
+
label: formatMessage({
|
|
111
|
+
id: getTrad.getTrad('control-card.remove-selection'),
|
|
112
|
+
defaultMessage: 'Remove from selection'
|
|
113
|
+
}),
|
|
114
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Trash, {})
|
|
115
|
+
})
|
|
116
|
+
}),
|
|
117
|
+
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
|
|
118
|
+
onConfirm: handleConfirmRemove
|
|
119
|
+
})
|
|
120
|
+
]
|
|
121
|
+
}),
|
|
122
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Root, {
|
|
123
|
+
open: isEditModalOpen,
|
|
124
|
+
onOpenChange: setIsEditModalOpen,
|
|
125
|
+
children: [
|
|
126
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Trigger, {
|
|
127
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
128
|
+
label: formatMessage({
|
|
129
|
+
id: getTrad.getTrad('control-card.edit'),
|
|
130
|
+
defaultMessage: 'Edit'
|
|
131
|
+
}),
|
|
132
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {})
|
|
133
|
+
})
|
|
134
|
+
}),
|
|
135
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Content, {
|
|
136
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(EditAssetContent.EditAssetContent, {
|
|
137
|
+
// Is Local must be set to false to trigger the correct branch of logic in the EditAssetContent on submit
|
|
138
|
+
asset: {
|
|
139
|
+
...asset,
|
|
140
|
+
isLocal: false,
|
|
141
|
+
folder: typeof asset.folder === 'number' ? {
|
|
142
|
+
id: asset.folder
|
|
143
|
+
} : asset.folder
|
|
144
|
+
},
|
|
145
|
+
onClose: (arg)=>handleEditAsset(arg),
|
|
146
|
+
canUpdate: canUpdate,
|
|
147
|
+
canCopyLink: canCopyLink,
|
|
148
|
+
canDownload: canDownload,
|
|
149
|
+
omitFields: [
|
|
150
|
+
'caption',
|
|
151
|
+
'alternativeText'
|
|
152
|
+
],
|
|
153
|
+
omitActions: [
|
|
154
|
+
'replace'
|
|
155
|
+
]
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
]
|
|
159
|
+
})
|
|
160
|
+
]
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
const Extension = styledComponents.styled.span`
|
|
164
|
+
text-transform: uppercase;
|
|
165
|
+
`;
|
|
166
|
+
const VideoPreviewWrapper = styledComponents.styled(designSystem.Box)`
|
|
167
|
+
position: relative;
|
|
168
|
+
height: 100%;
|
|
169
|
+
overflow: hidden;
|
|
170
|
+
|
|
171
|
+
canvas,
|
|
172
|
+
video {
|
|
173
|
+
display: block;
|
|
174
|
+
pointer-events: none;
|
|
175
|
+
width: 100%;
|
|
176
|
+
height: 100%;
|
|
177
|
+
object-fit: cover;
|
|
178
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
179
|
+
}
|
|
180
|
+
`;
|
|
181
|
+
const VideoTimerOverlay = styledComponents.styled(designSystem.CardTimer)`
|
|
182
|
+
position: absolute;
|
|
183
|
+
bottom: 0.5rem;
|
|
184
|
+
right: 0.5rem;
|
|
185
|
+
`;
|
|
186
|
+
const AudioPreviewWrapper = styledComponents.styled(designSystem.Box)`
|
|
187
|
+
height: 100%;
|
|
188
|
+
overflow: hidden;
|
|
189
|
+
display: flex;
|
|
190
|
+
align-items: center;
|
|
191
|
+
justify-content: center;
|
|
192
|
+
|
|
193
|
+
canvas,
|
|
194
|
+
audio {
|
|
195
|
+
display: block;
|
|
196
|
+
max-width: 100%;
|
|
197
|
+
max-height: 100%;
|
|
198
|
+
}
|
|
199
|
+
`;
|
|
200
|
+
const Asset = ({ assetType, thumbnailUrl, assetUrl, asset })=>{
|
|
201
|
+
const [duration, setDuration] = React__namespace.useState();
|
|
202
|
+
const formattedDuration = duration ? formatDuration.formatDuration(duration) : undefined;
|
|
203
|
+
switch(assetType){
|
|
204
|
+
case constants.AssetType.Image:
|
|
205
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.CardAsset, {
|
|
206
|
+
src: thumbnailUrl,
|
|
207
|
+
size: "S",
|
|
208
|
+
alt: asset.alternativeText || asset.name
|
|
209
|
+
});
|
|
210
|
+
case constants.AssetType.Video:
|
|
211
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.CardAsset, {
|
|
212
|
+
size: "S",
|
|
213
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(VideoPreviewWrapper, {
|
|
214
|
+
children: [
|
|
215
|
+
/*#__PURE__*/ jsxRuntime.jsx(VideoPreview.VideoPreview, {
|
|
216
|
+
url: assetUrl,
|
|
217
|
+
mime: asset.mime || 'video/mp4',
|
|
218
|
+
onLoadDuration: setDuration,
|
|
219
|
+
alt: asset.alternativeText || asset.name
|
|
220
|
+
}),
|
|
221
|
+
formattedDuration && /*#__PURE__*/ jsxRuntime.jsx(VideoTimerOverlay, {
|
|
222
|
+
children: formattedDuration
|
|
223
|
+
})
|
|
224
|
+
]
|
|
225
|
+
})
|
|
226
|
+
});
|
|
227
|
+
case constants.AssetType.Audio:
|
|
228
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.CardAsset, {
|
|
229
|
+
size: "S",
|
|
230
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(AudioPreviewWrapper, {
|
|
231
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(AudioPreview.AudioPreview, {
|
|
232
|
+
url: assetUrl,
|
|
233
|
+
alt: asset.alternativeText || asset.name
|
|
234
|
+
})
|
|
235
|
+
})
|
|
236
|
+
});
|
|
237
|
+
default:
|
|
238
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.CardAsset, {
|
|
239
|
+
src: thumbnailUrl,
|
|
240
|
+
size: "S",
|
|
241
|
+
alt: asset.alternativeText || asset.name
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
/* -------------------------------------------------------------------------------------------------
|
|
246
|
+
* AssetCard
|
|
247
|
+
* -----------------------------------------------------------------------------------------------*/ const StyledCardBody = styledComponents.styled(designSystem.CardBody)`
|
|
248
|
+
display: flex;
|
|
249
|
+
padding: ${({ theme })=>theme.spaces[2]} ${({ theme })=>theme.spaces[1]};
|
|
250
|
+
`;
|
|
251
|
+
const StyledCard = styledComponents.styled(designSystem.Card)`
|
|
252
|
+
width: 100%;
|
|
253
|
+
height: 100%;
|
|
254
|
+
border: none;
|
|
255
|
+
box-shadow: none;
|
|
256
|
+
border-radius: 0;
|
|
257
|
+
padding: 0;
|
|
258
|
+
`;
|
|
259
|
+
const getAssetBadgeLabel = (assetType)=>{
|
|
260
|
+
switch(assetType){
|
|
261
|
+
case constants.AssetType.Image:
|
|
262
|
+
return {
|
|
263
|
+
id: getTrad.getTrad('settings.section.image.label'),
|
|
264
|
+
defaultMessage: 'IMAGE'
|
|
265
|
+
};
|
|
266
|
+
case constants.AssetType.Video:
|
|
267
|
+
return {
|
|
268
|
+
id: getTrad.getTrad('settings.section.video.label'),
|
|
269
|
+
defaultMessage: 'VIDEO'
|
|
270
|
+
};
|
|
271
|
+
case constants.AssetType.Audio:
|
|
272
|
+
return {
|
|
273
|
+
id: getTrad.getTrad('settings.section.audio.label'),
|
|
274
|
+
defaultMessage: 'AUDIO'
|
|
275
|
+
};
|
|
276
|
+
default:
|
|
277
|
+
return {
|
|
278
|
+
id: getTrad.getTrad('settings.section.doc.label'),
|
|
279
|
+
defaultMessage: 'DOC'
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
const AIAssetCard = ({ asset, onCaptionChange, onAltTextChange, wasAltTextChanged, wasCaptionChanged })=>{
|
|
284
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
285
|
+
const assetType = typeFromMime.typeFromMime(asset.mime || '');
|
|
286
|
+
const thumbnailUrl = prefixFileUrlWithBackendUrl.prefixFileUrlWithBackendUrl(asset?.formats?.thumbnail?.url || asset.url) || '';
|
|
287
|
+
const assetUrl = prefixFileUrlWithBackendUrl.prefixFileUrlWithBackendUrl(asset.url) || '';
|
|
288
|
+
const subtitle = asset.height && asset.width ? ` - ${asset.width}x${asset.height}` : '';
|
|
289
|
+
const formattedSize = asset.size ? formatBytes.formatBytes(asset.size) : '';
|
|
290
|
+
const fullSubtitle = `${subtitle}${subtitle && formattedSize ? ' - ' : ''}${formattedSize}`;
|
|
291
|
+
const [caption, setCaption] = React__namespace.useState(asset.caption || '');
|
|
292
|
+
React__namespace.useEffect(()=>{
|
|
293
|
+
onCaptionChange(caption);
|
|
294
|
+
}, [
|
|
295
|
+
caption,
|
|
296
|
+
onCaptionChange
|
|
297
|
+
]);
|
|
298
|
+
const [altText, setAltText] = React__namespace.useState(asset.alternativeText || '');
|
|
299
|
+
React__namespace.useEffect(()=>{
|
|
300
|
+
onAltTextChange(altText);
|
|
301
|
+
}, [
|
|
302
|
+
altText,
|
|
303
|
+
onAltTextChange
|
|
304
|
+
]);
|
|
305
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CardContainer, {
|
|
306
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Root, {
|
|
307
|
+
children: [
|
|
308
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
|
|
309
|
+
col: 5,
|
|
310
|
+
alignItems: "stretch",
|
|
311
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(StyledCard, {
|
|
312
|
+
width: "100%",
|
|
313
|
+
height: "100%",
|
|
314
|
+
shadow: "none",
|
|
315
|
+
borderRadius: 0,
|
|
316
|
+
padding: 0,
|
|
317
|
+
children: [
|
|
318
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.CardHeader, {
|
|
319
|
+
style: {
|
|
320
|
+
borderStyle: 'none'
|
|
321
|
+
},
|
|
322
|
+
children: [
|
|
323
|
+
/*#__PURE__*/ jsxRuntime.jsx(AssetCardActions, {
|
|
324
|
+
asset: asset
|
|
325
|
+
}),
|
|
326
|
+
/*#__PURE__*/ jsxRuntime.jsx(Asset, {
|
|
327
|
+
assetType: assetType,
|
|
328
|
+
thumbnailUrl: thumbnailUrl,
|
|
329
|
+
assetUrl: assetUrl,
|
|
330
|
+
asset: asset
|
|
331
|
+
})
|
|
332
|
+
]
|
|
333
|
+
}),
|
|
334
|
+
/*#__PURE__*/ jsxRuntime.jsx(StyledCardBody, {
|
|
335
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.CardContent, {
|
|
336
|
+
width: "100%",
|
|
337
|
+
children: [
|
|
338
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
339
|
+
justifyContent: "space-between",
|
|
340
|
+
alignItems: "start",
|
|
341
|
+
children: [
|
|
342
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
343
|
+
tag: "h2",
|
|
344
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.CardTitle, {
|
|
345
|
+
tag: "span",
|
|
346
|
+
children: asset.name
|
|
347
|
+
})
|
|
348
|
+
}),
|
|
349
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.CardBadge, {
|
|
350
|
+
children: formatMessage(getAssetBadgeLabel(assetType))
|
|
351
|
+
})
|
|
352
|
+
]
|
|
353
|
+
}),
|
|
354
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
355
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.CardSubtitle, {
|
|
356
|
+
children: [
|
|
357
|
+
/*#__PURE__*/ jsxRuntime.jsx(Extension, {
|
|
358
|
+
children: getFileExtension.getFileExtension(asset.ext)
|
|
359
|
+
}),
|
|
360
|
+
fullSubtitle
|
|
361
|
+
]
|
|
362
|
+
})
|
|
363
|
+
})
|
|
364
|
+
]
|
|
365
|
+
})
|
|
366
|
+
})
|
|
367
|
+
]
|
|
368
|
+
})
|
|
369
|
+
}),
|
|
370
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
|
|
371
|
+
col: 7,
|
|
372
|
+
flex: 1,
|
|
373
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
374
|
+
direction: "column",
|
|
375
|
+
height: "100%",
|
|
376
|
+
alignItems: "stretch",
|
|
377
|
+
flex: 1,
|
|
378
|
+
padding: 4,
|
|
379
|
+
gap: 2,
|
|
380
|
+
children: [
|
|
381
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
|
|
382
|
+
name: "caption",
|
|
383
|
+
children: [
|
|
384
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
385
|
+
alignItems: "center",
|
|
386
|
+
gap: 2,
|
|
387
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
|
|
388
|
+
children: formatMessage({
|
|
389
|
+
id: getTrad.getTrad('form.input.label.file-caption'),
|
|
390
|
+
defaultMessage: 'Caption'
|
|
391
|
+
})
|
|
392
|
+
})
|
|
393
|
+
}),
|
|
394
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
|
|
395
|
+
value: caption,
|
|
396
|
+
onChange: (e)=>setCaption(e.target.value),
|
|
397
|
+
placeholder: formatMessage({
|
|
398
|
+
id: getTrad.getTrad('form.input.placeholder.file-caption'),
|
|
399
|
+
defaultMessage: 'Enter caption'
|
|
400
|
+
}),
|
|
401
|
+
endAction: !wasCaptionChanged && asset.caption && /*#__PURE__*/ jsxRuntime.jsx(icons.Sparkle, {
|
|
402
|
+
width: "16px",
|
|
403
|
+
height: "16px",
|
|
404
|
+
fill: "#AC73E6"
|
|
405
|
+
})
|
|
406
|
+
})
|
|
407
|
+
]
|
|
408
|
+
}),
|
|
409
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
|
|
410
|
+
name: "alternativeText",
|
|
411
|
+
hint: formatMessage({
|
|
412
|
+
id: getTrad.getTrad('form.input.description.file-alt'),
|
|
413
|
+
defaultMessage: "This text will be displayed if the asset can't be shown."
|
|
414
|
+
}),
|
|
415
|
+
children: [
|
|
416
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
417
|
+
alignItems: "center",
|
|
418
|
+
gap: 2,
|
|
419
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
|
|
420
|
+
children: formatMessage({
|
|
421
|
+
id: getTrad.getTrad('form.input.label.file-alt'),
|
|
422
|
+
defaultMessage: 'Alternative text'
|
|
423
|
+
})
|
|
424
|
+
})
|
|
425
|
+
}),
|
|
426
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
|
|
427
|
+
value: altText,
|
|
428
|
+
onChange: (e)=>setAltText(e.target.value),
|
|
429
|
+
placeholder: formatMessage({
|
|
430
|
+
id: getTrad.getTrad('form.input.placeholder.file-alt'),
|
|
431
|
+
defaultMessage: 'Enter alternative text'
|
|
432
|
+
}),
|
|
433
|
+
endAction: !wasAltTextChanged && asset.alternativeText && /*#__PURE__*/ jsxRuntime.jsx(icons.Sparkle, {
|
|
434
|
+
width: "16px",
|
|
435
|
+
height: "16px",
|
|
436
|
+
fill: "#AC73E6"
|
|
437
|
+
})
|
|
438
|
+
}),
|
|
439
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
|
|
440
|
+
]
|
|
441
|
+
})
|
|
442
|
+
]
|
|
443
|
+
})
|
|
444
|
+
})
|
|
445
|
+
]
|
|
446
|
+
})
|
|
447
|
+
});
|
|
448
|
+
};
|
|
449
|
+
/* -------------------------------------------------------------------------------------------------
|
|
450
|
+
* AssetCardSkeletons
|
|
451
|
+
* -----------------------------------------------------------------------------------------------*/ const SkeletonBox = styledComponents.styled(designSystem.Box)`
|
|
452
|
+
background: linear-gradient(
|
|
453
|
+
90deg,
|
|
454
|
+
${({ theme })=>theme.colors.neutral100} 25%,
|
|
455
|
+
${({ theme })=>theme.colors.neutral150} 50%,
|
|
456
|
+
${({ theme })=>theme.colors.neutral100} 75%
|
|
457
|
+
);
|
|
458
|
+
background-size: 200% 100%;
|
|
459
|
+
animation: loading 1.5s infinite;
|
|
460
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
461
|
+
width: ${({ width })=>width || '100%'};
|
|
462
|
+
height: ${({ height })=>height || '1rem'};
|
|
463
|
+
|
|
464
|
+
@keyframes loading {
|
|
465
|
+
0% {
|
|
466
|
+
background-position: 200% 0;
|
|
467
|
+
}
|
|
468
|
+
100% {
|
|
469
|
+
background-position: -200% 0;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
`;
|
|
473
|
+
const AIAssetCardSkeletons = ({ count = 1 })=>{
|
|
474
|
+
const skeletons = Array.from({
|
|
475
|
+
length: count
|
|
476
|
+
}, (_, i)=>i);
|
|
477
|
+
return skeletons.map((index)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
478
|
+
background: "neutral0",
|
|
479
|
+
borderColor: "neutral150",
|
|
480
|
+
borderStyle: "solid",
|
|
481
|
+
borderWidth: "1px",
|
|
482
|
+
borderRadius: "4px",
|
|
483
|
+
marginBottom: 4,
|
|
484
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Root, {
|
|
485
|
+
children: [
|
|
486
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
|
|
487
|
+
col: 5,
|
|
488
|
+
alignItems: "stretch",
|
|
489
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Card, {
|
|
490
|
+
height: "100%",
|
|
491
|
+
width: "100%",
|
|
492
|
+
borderStyle: "none",
|
|
493
|
+
shadow: "none",
|
|
494
|
+
borderRadius: 0,
|
|
495
|
+
padding: 2,
|
|
496
|
+
children: [
|
|
497
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
498
|
+
height: "150px",
|
|
499
|
+
padding: 2,
|
|
500
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(SkeletonBox, {
|
|
501
|
+
height: "100%"
|
|
502
|
+
})
|
|
503
|
+
}),
|
|
504
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.CardBody, {
|
|
505
|
+
style: {
|
|
506
|
+
display: 'flex',
|
|
507
|
+
padding: '8px 4px'
|
|
508
|
+
},
|
|
509
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.CardContent, {
|
|
510
|
+
width: "100%",
|
|
511
|
+
children: [
|
|
512
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
513
|
+
justifyContent: "space-between",
|
|
514
|
+
alignItems: "start",
|
|
515
|
+
marginBottom: 1,
|
|
516
|
+
children: [
|
|
517
|
+
/*#__PURE__*/ jsxRuntime.jsx(SkeletonBox, {
|
|
518
|
+
width: "60%",
|
|
519
|
+
height: "18px"
|
|
520
|
+
}),
|
|
521
|
+
/*#__PURE__*/ jsxRuntime.jsx(SkeletonBox, {
|
|
522
|
+
width: "40px",
|
|
523
|
+
height: "16px"
|
|
524
|
+
})
|
|
525
|
+
]
|
|
526
|
+
}),
|
|
527
|
+
/*#__PURE__*/ jsxRuntime.jsx(SkeletonBox, {
|
|
528
|
+
width: "80%",
|
|
529
|
+
height: "14px"
|
|
530
|
+
})
|
|
531
|
+
]
|
|
532
|
+
})
|
|
533
|
+
})
|
|
534
|
+
]
|
|
535
|
+
})
|
|
536
|
+
}),
|
|
537
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
|
|
538
|
+
col: 7,
|
|
539
|
+
flex: 1,
|
|
540
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
541
|
+
direction: "column",
|
|
542
|
+
height: "100%",
|
|
543
|
+
alignItems: "stretch",
|
|
544
|
+
flex: 1,
|
|
545
|
+
padding: 4,
|
|
546
|
+
gap: 2,
|
|
547
|
+
children: [
|
|
548
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
|
|
549
|
+
children: [
|
|
550
|
+
/*#__PURE__*/ jsxRuntime.jsx(SkeletonBox, {
|
|
551
|
+
width: "60px",
|
|
552
|
+
height: "16px",
|
|
553
|
+
marginBottom: 1
|
|
554
|
+
}),
|
|
555
|
+
/*#__PURE__*/ jsxRuntime.jsx(SkeletonBox, {
|
|
556
|
+
height: "32px"
|
|
557
|
+
})
|
|
558
|
+
]
|
|
559
|
+
}),
|
|
560
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
|
|
561
|
+
children: [
|
|
562
|
+
/*#__PURE__*/ jsxRuntime.jsx(SkeletonBox, {
|
|
563
|
+
width: "100px",
|
|
564
|
+
height: "16px",
|
|
565
|
+
marginBottom: 1
|
|
566
|
+
}),
|
|
567
|
+
/*#__PURE__*/ jsxRuntime.jsx(SkeletonBox, {
|
|
568
|
+
height: "32px"
|
|
569
|
+
}),
|
|
570
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
571
|
+
marginTop: 1,
|
|
572
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(SkeletonBox, {
|
|
573
|
+
width: "70%",
|
|
574
|
+
height: "12px"
|
|
575
|
+
})
|
|
576
|
+
})
|
|
577
|
+
]
|
|
578
|
+
})
|
|
579
|
+
]
|
|
580
|
+
})
|
|
581
|
+
})
|
|
582
|
+
]
|
|
583
|
+
})
|
|
584
|
+
}, index));
|
|
585
|
+
};
|
|
586
|
+
|
|
587
|
+
exports.AIAssetCard = AIAssetCard;
|
|
588
|
+
exports.AIAssetCardSkeletons = AIAssetCardSkeletons;
|
|
589
|
+
//# sourceMappingURL=AIAssetCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIAssetCard.js","sources":["../../../../admin/src/ai/components/AIAssetCard.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { ConfirmDialog } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Card,\n CardAction,\n CardAsset,\n CardBadge,\n CardBody,\n CardContent,\n CardHeader,\n CardSubtitle,\n CardTitle,\n CardTimer,\n Field,\n Flex,\n Grid,\n TextInput,\n Typography,\n IconButton,\n Dialog,\n Modal,\n} from '@strapi/design-system';\nimport { Pencil, Sparkle, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AudioPreview } from '../../components/AssetCard/AudioPreview';\nimport { VideoPreview } from '../../components/AssetCard/VideoPreview';\nimport { type Asset, EditAssetContent } from '../../components/EditAssetDialog/EditAssetContent';\nimport { AssetType } from '../../constants';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { useRemoveAsset } from '../../hooks/useRemoveAsset';\nimport {\n formatBytes,\n formatDuration,\n getFileExtension,\n getTrad,\n prefixFileUrlWithBackendUrl,\n} from '../../utils';\nimport { typeFromMime } from '../../utils/typeFromMime';\n\nimport { useAIUploadModalContext } from './AIUploadModal';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst CardActionsContainer = styled(CardAction)`\n opacity: 0;\n z-index: 1;\n\n &:focus-within {\n opacity: 1;\n }\n`;\n\nconst CardContainer = styled(Box)`\n background: ${({ theme }) => theme.colors.neutral0};\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: ${({ theme }) => theme.borderRadius};\n\n &:hover {\n ${CardActionsContainer} {\n opacity: 1;\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AssetCardActions\n * -----------------------------------------------------------------------------------------------*/\n\nconst AssetCardActions = ({ asset }: { asset: File }) => {\n const { formatMessage } = useIntl();\n const dispatch = useAIUploadModalContext('AssetCardActions', (s) => s.dispatch);\n const state = useAIUploadModalContext('AssetCardActions', (s) => s.state);\n const onClose = useAIUploadModalContext('AssetCardActions', (s) => s.onClose);\n const { canUpdate, canCopyLink, canDownload } = useMediaLibraryPermissions();\n\n const [isEditModalOpen, setIsEditModalOpen] = React.useState(false);\n\n const { removeAsset } = useRemoveAsset(() => {});\n\n const handleConfirmRemove = async (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n event?.preventDefault();\n await removeAsset(asset.id);\n dispatch({\n type: 'remove_uploaded_asset',\n payload: { id: asset.id },\n });\n\n // Close modal if this was the last asset\n if (state.uploadedAssets.length === 1) {\n onClose();\n }\n };\n\n const handlePropagationClick = (event: React.MouseEvent) => {\n event.stopPropagation();\n };\n\n const handleEditAsset = (editedAsset?: File | null) => {\n if (editedAsset) {\n dispatch({\n type: 'edit_uploaded_asset',\n payload: { editedAsset },\n });\n\n setIsEditModalOpen(false);\n }\n };\n\n return (\n <CardActionsContainer onClick={handlePropagationClick} position=\"end\">\n <Dialog.Root>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.remove-selection'),\n defaultMessage: 'Remove from selection',\n })}\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleConfirmRemove} />\n </Dialog.Root>\n\n <Modal.Root open={isEditModalOpen} onOpenChange={setIsEditModalOpen}>\n <Modal.Trigger>\n <IconButton\n label={formatMessage({ id: getTrad('control-card.edit'), defaultMessage: 'Edit' })}\n >\n <Pencil />\n </IconButton>\n </Modal.Trigger>\n <Modal.Content>\n <EditAssetContent\n // Is Local must be set to false to trigger the correct branch of logic in the EditAssetContent on submit\n asset={\n {\n ...asset,\n isLocal: false,\n folder: typeof asset.folder === 'number' ? { id: asset.folder } : asset.folder,\n } as Asset\n }\n onClose={(arg) => handleEditAsset(arg as File)}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n omitFields={['caption', 'alternativeText']}\n omitActions={['replace']}\n />\n </Modal.Content>\n </Modal.Root>\n </CardActionsContainer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Asset\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetProps {\n assetType: AssetType;\n thumbnailUrl: string;\n assetUrl: string;\n asset: File;\n}\n\ninterface AssetCardProps {\n asset: File;\n onCaptionChange: (caption: string) => void;\n onAltTextChange: (altText: string) => void;\n wasCaptionChanged: boolean;\n wasAltTextChanged: boolean;\n}\n\nconst Extension = styled.span`\n text-transform: uppercase;\n`;\n\nconst VideoPreviewWrapper = styled(Box)`\n position: relative;\n height: 100%;\n overflow: hidden;\n\n canvas,\n video {\n display: block;\n pointer-events: none;\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: ${({ theme }) => theme.borderRadius};\n }\n`;\n\nconst VideoTimerOverlay = styled(CardTimer)`\n position: absolute;\n bottom: 0.5rem;\n right: 0.5rem;\n`;\n\nconst AudioPreviewWrapper = styled(Box)`\n height: 100%;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n\n canvas,\n audio {\n display: block;\n max-width: 100%;\n max-height: 100%;\n }\n`;\n\nconst Asset = ({ assetType, thumbnailUrl, assetUrl, asset }: AssetProps) => {\n const [duration, setDuration] = React.useState<number>();\n const formattedDuration = duration ? formatDuration(duration) : undefined;\n\n switch (assetType) {\n case AssetType.Image:\n return <CardAsset src={thumbnailUrl} size=\"S\" alt={asset.alternativeText || asset.name} />;\n case AssetType.Video:\n return (\n <CardAsset size=\"S\">\n <VideoPreviewWrapper>\n <VideoPreview\n url={assetUrl}\n mime={asset.mime || 'video/mp4'}\n onLoadDuration={setDuration}\n alt={asset.alternativeText || asset.name}\n />\n {formattedDuration && <VideoTimerOverlay>{formattedDuration}</VideoTimerOverlay>}\n </VideoPreviewWrapper>\n </CardAsset>\n );\n case AssetType.Audio:\n return (\n <CardAsset size=\"S\">\n <AudioPreviewWrapper>\n <AudioPreview url={assetUrl} alt={asset.alternativeText || asset.name} />\n </AudioPreviewWrapper>\n </CardAsset>\n );\n default:\n return <CardAsset src={thumbnailUrl} size=\"S\" alt={asset.alternativeText || asset.name} />;\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetCard\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledCardBody = styled(CardBody)`\n display: flex;\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst StyledCard = styled(Card)`\n width: 100%;\n height: 100%;\n border: none;\n box-shadow: none;\n border-radius: 0;\n padding: 0;\n`;\n\nconst getAssetBadgeLabel = (assetType: AssetType) => {\n switch (assetType) {\n case AssetType.Image:\n return { id: getTrad('settings.section.image.label'), defaultMessage: 'IMAGE' };\n case AssetType.Video:\n return { id: getTrad('settings.section.video.label'), defaultMessage: 'VIDEO' };\n case AssetType.Audio:\n return { id: getTrad('settings.section.audio.label'), defaultMessage: 'AUDIO' };\n default:\n return { id: getTrad('settings.section.doc.label'), defaultMessage: 'DOC' };\n }\n};\n\nexport const AIAssetCard = ({\n asset,\n onCaptionChange,\n onAltTextChange,\n wasAltTextChanged,\n wasCaptionChanged,\n}: AssetCardProps) => {\n const { formatMessage } = useIntl();\n\n const assetType = typeFromMime(asset.mime || '');\n const thumbnailUrl =\n prefixFileUrlWithBackendUrl(asset?.formats?.thumbnail?.url || asset.url) || '';\n const assetUrl = prefixFileUrlWithBackendUrl(asset.url) || '';\n const subtitle = asset.height && asset.width ? ` - ${asset.width}x${asset.height}` : '';\n const formattedSize = asset.size ? formatBytes(asset.size) : '';\n const fullSubtitle = `${subtitle}${subtitle && formattedSize ? ' - ' : ''}${formattedSize}`;\n\n const [caption, setCaption] = React.useState(asset.caption || '');\n React.useEffect(() => {\n onCaptionChange(caption);\n }, [caption, onCaptionChange]);\n\n const [altText, setAltText] = React.useState(asset.alternativeText || '');\n React.useEffect(() => {\n onAltTextChange(altText);\n }, [altText, onAltTextChange]);\n\n return (\n <CardContainer>\n <Grid.Root>\n <Grid.Item col={5} alignItems=\"stretch\">\n <StyledCard width=\"100%\" height=\"100%\" shadow=\"none\" borderRadius={0} padding={0}>\n <CardHeader style={{ borderStyle: 'none' }}>\n <AssetCardActions asset={asset} />\n <Asset\n assetType={assetType}\n thumbnailUrl={thumbnailUrl}\n assetUrl={assetUrl}\n asset={asset}\n />\n </CardHeader>\n <StyledCardBody>\n <CardContent width=\"100%\">\n <Flex justifyContent=\"space-between\" alignItems=\"start\">\n <Typography tag=\"h2\">\n <CardTitle tag=\"span\">{asset.name}</CardTitle>\n </Typography>\n <CardBadge>{formatMessage(getAssetBadgeLabel(assetType))}</CardBadge>\n </Flex>\n <Flex>\n <CardSubtitle>\n <Extension>{getFileExtension(asset.ext)}</Extension>\n {fullSubtitle}\n </CardSubtitle>\n </Flex>\n </CardContent>\n </StyledCardBody>\n </StyledCard>\n </Grid.Item>\n\n <Grid.Item col={7} flex={1}>\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\" flex={1} padding={4} gap={2}>\n <Field.Root name=\"caption\">\n <Flex alignItems=\"center\" gap={2}>\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-caption'),\n defaultMessage: 'Caption',\n })}\n </Field.Label>\n </Flex>\n <TextInput\n value={caption}\n onChange={(e) => setCaption(e.target.value)}\n placeholder={formatMessage({\n id: getTrad('form.input.placeholder.file-caption'),\n defaultMessage: 'Enter caption',\n })}\n endAction={\n !wasCaptionChanged &&\n asset.caption && <Sparkle width=\"16px\" height=\"16px\" fill=\"#AC73E6\" />\n }\n />\n </Field.Root>\n\n <Field.Root\n name=\"alternativeText\"\n hint={formatMessage({\n id: getTrad('form.input.description.file-alt'),\n defaultMessage: \"This text will be displayed if the asset can't be shown.\",\n })}\n >\n <Flex alignItems=\"center\" gap={2}>\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-alt'),\n defaultMessage: 'Alternative text',\n })}\n </Field.Label>\n </Flex>\n\n <TextInput\n value={altText}\n onChange={(e) => setAltText(e.target.value)}\n placeholder={formatMessage({\n id: getTrad('form.input.placeholder.file-alt'),\n defaultMessage: 'Enter alternative text',\n })}\n endAction={\n !wasAltTextChanged &&\n asset.alternativeText && <Sparkle width=\"16px\" height=\"16px\" fill=\"#AC73E6\" />\n }\n />\n <Field.Hint />\n </Field.Root>\n </Flex>\n </Grid.Item>\n </Grid.Root>\n </CardContainer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetCardSkeletons\n * -----------------------------------------------------------------------------------------------*/\n\nconst SkeletonBox = styled(Box)<{ width?: string; height?: string }>`\n background: linear-gradient(\n 90deg,\n ${({ theme }) => theme.colors.neutral100} 25%,\n ${({ theme }) => theme.colors.neutral150} 50%,\n ${({ theme }) => theme.colors.neutral100} 75%\n );\n background-size: 200% 100%;\n animation: loading 1.5s infinite;\n border-radius: ${({ theme }) => theme.borderRadius};\n width: ${({ width }) => width || '100%'};\n height: ${({ height }) => height || '1rem'};\n\n @keyframes loading {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n }\n`;\n\nexport const AIAssetCardSkeletons = ({ count = 1 }: { count?: number }) => {\n const skeletons = Array.from({ length: count }, (_, i) => i);\n\n return skeletons.map((index) => (\n <Box\n key={index}\n background=\"neutral0\"\n borderColor=\"neutral150\"\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n borderRadius=\"4px\"\n marginBottom={4}\n >\n <Grid.Root>\n <Grid.Item col={5} alignItems=\"stretch\">\n <Card\n height=\"100%\"\n width=\"100%\"\n borderStyle=\"none\"\n shadow=\"none\"\n borderRadius={0}\n padding={2}\n >\n <Box height=\"150px\" padding={2}>\n <SkeletonBox height=\"100%\" />\n </Box>\n <CardBody style={{ display: 'flex', padding: '8px 4px' }}>\n <CardContent width=\"100%\">\n <Flex justifyContent=\"space-between\" alignItems=\"start\" marginBottom={1}>\n <SkeletonBox width=\"60%\" height=\"18px\" />\n <SkeletonBox width=\"40px\" height=\"16px\" />\n </Flex>\n <SkeletonBox width=\"80%\" height=\"14px\" />\n </CardContent>\n </CardBody>\n </Card>\n </Grid.Item>\n\n <Grid.Item col={7} flex={1}>\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\" flex={1} padding={4} gap={2}>\n <Box>\n <SkeletonBox width=\"60px\" height=\"16px\" marginBottom={1} />\n <SkeletonBox height=\"32px\" />\n </Box>\n\n <Box>\n <SkeletonBox width=\"100px\" height=\"16px\" marginBottom={1} />\n <SkeletonBox height=\"32px\" />\n <Box marginTop={1}>\n <SkeletonBox width=\"70%\" height=\"12px\" />\n </Box>\n </Box>\n </Flex>\n </Grid.Item>\n </Grid.Root>\n </Box>\n ));\n};\n"],"names":["CardActionsContainer","styled","CardAction","CardContainer","Box","theme","colors","neutral0","neutral150","borderRadius","AssetCardActions","asset","formatMessage","useIntl","dispatch","useAIUploadModalContext","s","state","onClose","canUpdate","canCopyLink","canDownload","useMediaLibraryPermissions","isEditModalOpen","setIsEditModalOpen","React","useState","removeAsset","useRemoveAsset","handleConfirmRemove","event","preventDefault","id","type","payload","uploadedAssets","length","handlePropagationClick","stopPropagation","handleEditAsset","editedAsset","_jsxs","onClick","position","Dialog","Root","_jsx","Trigger","IconButton","label","getTrad","defaultMessage","Trash","ConfirmDialog","onConfirm","Modal","open","onOpenChange","Pencil","Content","EditAssetContent","isLocal","folder","arg","omitFields","omitActions","Extension","span","VideoPreviewWrapper","VideoTimerOverlay","CardTimer","AudioPreviewWrapper","Asset","assetType","thumbnailUrl","assetUrl","duration","setDuration","formattedDuration","formatDuration","undefined","AssetType","Image","CardAsset","src","size","alt","alternativeText","name","Video","VideoPreview","url","mime","onLoadDuration","Audio","AudioPreview","StyledCardBody","CardBody","spaces","StyledCard","Card","getAssetBadgeLabel","AIAssetCard","onCaptionChange","onAltTextChange","wasAltTextChanged","wasCaptionChanged","typeFromMime","prefixFileUrlWithBackendUrl","formats","thumbnail","subtitle","height","width","formattedSize","formatBytes","fullSubtitle","caption","setCaption","useEffect","altText","setAltText","Grid","Item","col","alignItems","shadow","padding","CardHeader","style","borderStyle","CardContent","Flex","justifyContent","Typography","tag","CardTitle","CardBadge","CardSubtitle","getFileExtension","ext","flex","direction","gap","Field","Label","TextInput","value","onChange","e","target","placeholder","endAction","Sparkle","fill","hint","Hint","SkeletonBox","neutral100","AIAssetCardSkeletons","count","skeletons","Array","from","_","i","map","index","background","borderColor","borderWidth","marginBottom","display","marginTop"],"mappings":"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"}
|