node_modules ignore

This commit is contained in:
2025-05-08 23:43:47 +02:00
parent e19d52f172
commit 4574544c9f
65041 changed files with 10593536 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var styledComponents = require('styled-components');
var constants = require('../../../constants.js');
var createAssetUrl = require('../../../utils/createAssetUrl.js');
require('byte-size');
require('date-fns');
require('qs');
require('../../../utils/urlYupSchema.js');
var AudioPreview = require('../../AssetCard/AudioPreview.js');
var VideoPreview = require('../../AssetCard/VideoPreview.js');
const DocAsset = styledComponents.styled(designSystem.Flex)`
background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);
`;
const VideoPreviewWrapper = styledComponents.styled(designSystem.Box)`
canvas,
video {
max-width: 100%;
height: 124px;
}
`;
const AudioPreviewWrapper = styledComponents.styled(designSystem.Box)`
canvas,
audio {
max-width: 100%;
}
`;
const CarouselAsset = ({ asset })=>{
if (asset.mime?.includes(constants.AssetType.Video)) {
return /*#__PURE__*/ jsxRuntime.jsx(VideoPreviewWrapper, {
height: "100%",
children: /*#__PURE__*/ jsxRuntime.jsx(VideoPreview.VideoPreview, {
url: createAssetUrl.createAssetUrl(asset, true),
mime: asset.mime,
alt: asset.alternativeText || asset.name
})
});
}
if (asset.mime?.includes(constants.AssetType.Audio)) {
return /*#__PURE__*/ jsxRuntime.jsx(AudioPreviewWrapper, {
children: /*#__PURE__*/ jsxRuntime.jsx(AudioPreview.AudioPreview, {
url: createAssetUrl.createAssetUrl(asset, true),
alt: asset.alternativeText || asset.name
})
});
}
if (asset.mime?.includes(constants.AssetType.Image)) {
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
tag: "img",
maxHeight: "100%",
maxWidth: "100%",
src: createAssetUrl.createAssetUrl(asset, true),
alt: asset.alternativeText || asset.name
});
}
return /*#__PURE__*/ jsxRuntime.jsx(DocAsset, {
width: "100%",
height: "100%",
justifyContent: "center",
hasRadius: true,
children: asset.ext?.includes('pdf') ? /*#__PURE__*/ jsxRuntime.jsx(icons.FilePdf, {
"aria-label": asset.alternativeText || asset.name,
width: "24px",
height: "32px"
}) : /*#__PURE__*/ jsxRuntime.jsx(icons.File, {
"aria-label": asset.alternativeText || asset.name,
width: "24px",
height: "32px"
})
});
};
exports.CarouselAsset = CarouselAsset;
//# sourceMappingURL=CarouselAsset.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"CarouselAsset.js","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.tsx"],"sourcesContent":["import { Box, Flex } from '@strapi/design-system';\nimport { File, FilePdf } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../../constants';\nimport { createAssetUrl } from '../../../utils';\nimport { AudioPreview } from '../../AssetCard/AudioPreview';\nimport { VideoPreview } from '../../AssetCard/VideoPreview';\n\nimport type { File as FileAsset } from '../../../../../shared/contracts/files';\n\nconst DocAsset = styled(Flex)`\n background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);\n`;\n\nconst VideoPreviewWrapper = styled(Box)`\n canvas,\n video {\n max-width: 100%;\n height: 124px;\n }\n`;\n\nconst AudioPreviewWrapper = styled(Box)`\n canvas,\n audio {\n max-width: 100%;\n }\n`;\n\nexport const CarouselAsset = ({ asset }: { asset: FileAsset }) => {\n if (asset.mime?.includes(AssetType.Video)) {\n return (\n <VideoPreviewWrapper height=\"100%\">\n <VideoPreview\n url={createAssetUrl(asset, true)!}\n mime={asset.mime}\n alt={asset.alternativeText || asset.name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(AssetType.Audio)) {\n return (\n <AudioPreviewWrapper>\n <AudioPreview\n url={createAssetUrl(asset, true)!}\n alt={asset.alternativeText || asset.name}\n />\n </AudioPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(AssetType.Image)) {\n return (\n <Box\n tag=\"img\"\n maxHeight=\"100%\"\n maxWidth=\"100%\"\n src={createAssetUrl(asset, true)}\n alt={asset.alternativeText || asset.name}\n />\n );\n }\n\n return (\n <DocAsset width=\"100%\" height=\"100%\" justifyContent=\"center\" hasRadius>\n {asset.ext?.includes('pdf') ? (\n <FilePdf aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n ) : (\n <File aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n )}\n </DocAsset>\n );\n};\n"],"names":["DocAsset","styled","Flex","VideoPreviewWrapper","Box","AudioPreviewWrapper","CarouselAsset","asset","mime","includes","AssetType","Video","_jsx","height","VideoPreview","url","createAssetUrl","alt","alternativeText","name","Audio","AudioPreview","Image","tag","maxHeight","maxWidth","src","width","justifyContent","hasRadius","ext","FilePdf","aria-label","File"],"mappings":";;;;;;;;;;;;;;;AAWA,MAAMA,QAAAA,GAAWC,uBAAOC,CAAAA,iBAAAA,CAAK;;AAE7B,CAAC;AAED,MAAMC,mBAAAA,GAAsBF,uBAAOG,CAAAA,gBAAAA,CAAI;;;;;;AAMvC,CAAC;AAED,MAAMC,mBAAAA,GAAsBJ,uBAAOG,CAAAA,gBAAAA,CAAI;;;;;AAKvC,CAAC;AAEYE,MAAAA,aAAAA,GAAgB,CAAC,EAAEC,KAAK,EAAwB,GAAA;AAC3D,IAAA,IAAIA,MAAMC,IAAI,EAAEC,QAASC,CAAAA,mBAAAA,CAAUC,KAAK,CAAG,EAAA;AACzC,QAAA,qBACEC,cAACT,CAAAA,mBAAAA,EAAAA;YAAoBU,MAAO,EAAA,MAAA;AAC1B,YAAA,QAAA,gBAAAD,cAACE,CAAAA,yBAAAA,EAAAA;AACCC,gBAAAA,GAAAA,EAAKC,8BAAeT,KAAO,EAAA,IAAA,CAAA;AAC3BC,gBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAChBS,gBAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAASC,CAAAA,mBAAAA,CAAUU,KAAK,CAAG,EAAA;AACzC,QAAA,qBACER,cAACP,CAAAA,mBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAO,cAACS,CAAAA,yBAAAA,EAAAA;AACCN,gBAAAA,GAAAA,EAAKC,8BAAeT,KAAO,EAAA,IAAA,CAAA;AAC3BU,gBAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAASC,CAAAA,mBAAAA,CAAUY,KAAK,CAAG,EAAA;AACzC,QAAA,qBACEV,cAACR,CAAAA,gBAAAA,EAAAA;YACCmB,GAAI,EAAA,KAAA;YACJC,SAAU,EAAA,MAAA;YACVC,QAAS,EAAA,MAAA;AACTC,YAAAA,GAAAA,EAAKV,8BAAeT,KAAO,EAAA,IAAA,CAAA;AAC3BU,YAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;AAG1C;AAEA,IAAA,qBACEP,cAACZ,CAAAA,QAAAA,EAAAA;QAAS2B,KAAM,EAAA,MAAA;QAAOd,MAAO,EAAA,MAAA;QAAOe,cAAe,EAAA,QAAA;QAASC,SAAS,EAAA,IAAA;AACnEtB,QAAAA,QAAAA,EAAAA,KAAAA,CAAMuB,GAAG,EAAErB,QAAS,CAAA,KAAA,CAAA,iBACnBG,cAACmB,CAAAA,aAAAA,EAAAA;AAAQC,YAAAA,YAAAA,EAAYzB,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY,IAAI;YAAEQ,KAAM,EAAA,MAAA;YAAOd,MAAO,EAAA;2BAE9ED,cAACqB,CAAAA,UAAAA,EAAAA;AAAKD,YAAAA,YAAAA,EAAYzB,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY,IAAI;YAAEQ,KAAM,EAAA,MAAA;YAAOd,MAAO,EAAA;;;AAInF;;;;"}

View File

@@ -0,0 +1,76 @@
import { jsx } from 'react/jsx-runtime';
import { Flex, Box } from '@strapi/design-system';
import { FilePdf, File } from '@strapi/icons';
import { styled } from 'styled-components';
import { AssetType } from '../../../constants.mjs';
import { createAssetUrl } from '../../../utils/createAssetUrl.mjs';
import 'byte-size';
import 'date-fns';
import 'qs';
import '../../../utils/urlYupSchema.mjs';
import { AudioPreview } from '../../AssetCard/AudioPreview.mjs';
import { VideoPreview } from '../../AssetCard/VideoPreview.mjs';
const DocAsset = styled(Flex)`
background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);
`;
const VideoPreviewWrapper = styled(Box)`
canvas,
video {
max-width: 100%;
height: 124px;
}
`;
const AudioPreviewWrapper = styled(Box)`
canvas,
audio {
max-width: 100%;
}
`;
const CarouselAsset = ({ asset })=>{
if (asset.mime?.includes(AssetType.Video)) {
return /*#__PURE__*/ jsx(VideoPreviewWrapper, {
height: "100%",
children: /*#__PURE__*/ jsx(VideoPreview, {
url: createAssetUrl(asset, true),
mime: asset.mime,
alt: asset.alternativeText || asset.name
})
});
}
if (asset.mime?.includes(AssetType.Audio)) {
return /*#__PURE__*/ jsx(AudioPreviewWrapper, {
children: /*#__PURE__*/ jsx(AudioPreview, {
url: createAssetUrl(asset, true),
alt: asset.alternativeText || asset.name
})
});
}
if (asset.mime?.includes(AssetType.Image)) {
return /*#__PURE__*/ jsx(Box, {
tag: "img",
maxHeight: "100%",
maxWidth: "100%",
src: createAssetUrl(asset, true),
alt: asset.alternativeText || asset.name
});
}
return /*#__PURE__*/ jsx(DocAsset, {
width: "100%",
height: "100%",
justifyContent: "center",
hasRadius: true,
children: asset.ext?.includes('pdf') ? /*#__PURE__*/ jsx(FilePdf, {
"aria-label": asset.alternativeText || asset.name,
width: "24px",
height: "32px"
}) : /*#__PURE__*/ jsx(File, {
"aria-label": asset.alternativeText || asset.name,
width: "24px",
height: "32px"
})
});
};
export { CarouselAsset };
//# sourceMappingURL=CarouselAsset.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"CarouselAsset.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.tsx"],"sourcesContent":["import { Box, Flex } from '@strapi/design-system';\nimport { File, FilePdf } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../../constants';\nimport { createAssetUrl } from '../../../utils';\nimport { AudioPreview } from '../../AssetCard/AudioPreview';\nimport { VideoPreview } from '../../AssetCard/VideoPreview';\n\nimport type { File as FileAsset } from '../../../../../shared/contracts/files';\n\nconst DocAsset = styled(Flex)`\n background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);\n`;\n\nconst VideoPreviewWrapper = styled(Box)`\n canvas,\n video {\n max-width: 100%;\n height: 124px;\n }\n`;\n\nconst AudioPreviewWrapper = styled(Box)`\n canvas,\n audio {\n max-width: 100%;\n }\n`;\n\nexport const CarouselAsset = ({ asset }: { asset: FileAsset }) => {\n if (asset.mime?.includes(AssetType.Video)) {\n return (\n <VideoPreviewWrapper height=\"100%\">\n <VideoPreview\n url={createAssetUrl(asset, true)!}\n mime={asset.mime}\n alt={asset.alternativeText || asset.name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(AssetType.Audio)) {\n return (\n <AudioPreviewWrapper>\n <AudioPreview\n url={createAssetUrl(asset, true)!}\n alt={asset.alternativeText || asset.name}\n />\n </AudioPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(AssetType.Image)) {\n return (\n <Box\n tag=\"img\"\n maxHeight=\"100%\"\n maxWidth=\"100%\"\n src={createAssetUrl(asset, true)}\n alt={asset.alternativeText || asset.name}\n />\n );\n }\n\n return (\n <DocAsset width=\"100%\" height=\"100%\" justifyContent=\"center\" hasRadius>\n {asset.ext?.includes('pdf') ? (\n <FilePdf aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n ) : (\n <File aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n )}\n </DocAsset>\n );\n};\n"],"names":["DocAsset","styled","Flex","VideoPreviewWrapper","Box","AudioPreviewWrapper","CarouselAsset","asset","mime","includes","AssetType","Video","_jsx","height","VideoPreview","url","createAssetUrl","alt","alternativeText","name","Audio","AudioPreview","Image","tag","maxHeight","maxWidth","src","width","justifyContent","hasRadius","ext","FilePdf","aria-label","File"],"mappings":";;;;;;;;;;;;;AAWA,MAAMA,QAAAA,GAAWC,MAAOC,CAAAA,IAAAA,CAAK;;AAE7B,CAAC;AAED,MAAMC,mBAAAA,GAAsBF,MAAOG,CAAAA,GAAAA,CAAI;;;;;;AAMvC,CAAC;AAED,MAAMC,mBAAAA,GAAsBJ,MAAOG,CAAAA,GAAAA,CAAI;;;;;AAKvC,CAAC;AAEYE,MAAAA,aAAAA,GAAgB,CAAC,EAAEC,KAAK,EAAwB,GAAA;AAC3D,IAAA,IAAIA,MAAMC,IAAI,EAAEC,QAASC,CAAAA,SAAAA,CAAUC,KAAK,CAAG,EAAA;AACzC,QAAA,qBACEC,GAACT,CAAAA,mBAAAA,EAAAA;YAAoBU,MAAO,EAAA,MAAA;AAC1B,YAAA,QAAA,gBAAAD,GAACE,CAAAA,YAAAA,EAAAA;AACCC,gBAAAA,GAAAA,EAAKC,eAAeT,KAAO,EAAA,IAAA,CAAA;AAC3BC,gBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAChBS,gBAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAASC,CAAAA,SAAAA,CAAUU,KAAK,CAAG,EAAA;AACzC,QAAA,qBACER,GAACP,CAAAA,mBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAO,GAACS,CAAAA,YAAAA,EAAAA;AACCN,gBAAAA,GAAAA,EAAKC,eAAeT,KAAO,EAAA,IAAA,CAAA;AAC3BU,gBAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAASC,CAAAA,SAAAA,CAAUY,KAAK,CAAG,EAAA;AACzC,QAAA,qBACEV,GAACR,CAAAA,GAAAA,EAAAA;YACCmB,GAAI,EAAA,KAAA;YACJC,SAAU,EAAA,MAAA;YACVC,QAAS,EAAA,MAAA;AACTC,YAAAA,GAAAA,EAAKV,eAAeT,KAAO,EAAA,IAAA,CAAA;AAC3BU,YAAAA,GAAAA,EAAKV,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY;;AAG1C;AAEA,IAAA,qBACEP,GAACZ,CAAAA,QAAAA,EAAAA;QAAS2B,KAAM,EAAA,MAAA;QAAOd,MAAO,EAAA,MAAA;QAAOe,cAAe,EAAA,QAAA;QAASC,SAAS,EAAA,IAAA;AACnEtB,QAAAA,QAAAA,EAAAA,KAAAA,CAAMuB,GAAG,EAAErB,QAAS,CAAA,KAAA,CAAA,iBACnBG,GAACmB,CAAAA,OAAAA,EAAAA;AAAQC,YAAAA,YAAAA,EAAYzB,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY,IAAI;YAAEQ,KAAM,EAAA,MAAA;YAAOd,MAAO,EAAA;2BAE9ED,GAACqB,CAAAA,IAAAA,EAAAA;AAAKD,YAAAA,YAAAA,EAAYzB,KAAMW,CAAAA,eAAe,IAAIX,KAAAA,CAAMY,IAAI;YAAEQ,KAAM,EAAA,MAAA;YAAOd,MAAO,EAAA;;;AAInF;;;;"}

View File

@@ -0,0 +1,52 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var reactIntl = require('react-intl');
var prefixFileUrlWithBackendUrl = require('../../../utils/prefixFileUrlWithBackendUrl.js');
require('byte-size');
require('date-fns');
var getTrad = require('../../../utils/getTrad.js');
require('qs');
require('../../../constants.js');
require('../../../utils/urlYupSchema.js');
var CopyLinkButton = require('../../CopyLinkButton/CopyLinkButton.js');
const CarouselAssetActions = ({ asset, onDeleteAsset, onAddAsset, onEditAsset })=>{
const { formatMessage } = reactIntl.useIntl();
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.CarouselActions, {
children: [
onAddAsset && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
label: formatMessage({
id: getTrad.getTrad('control-card.add'),
defaultMessage: 'Add'
}),
onClick: ()=>onAddAsset(asset),
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {})
}),
/*#__PURE__*/ jsxRuntime.jsx(CopyLinkButton.CopyLinkButton, {
url: prefixFileUrlWithBackendUrl.prefixFileUrlWithBackendUrl(asset.url)
}),
onDeleteAsset && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
label: formatMessage({
id: 'global.delete',
defaultMessage: 'Delete'
}),
onClick: ()=>onDeleteAsset(asset),
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Trash, {})
}),
onEditAsset && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
label: formatMessage({
id: getTrad.getTrad('control-card.edit'),
defaultMessage: 'edit'
}),
onClick: onEditAsset,
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {})
})
]
});
};
exports.CarouselAssetActions = CarouselAssetActions;
//# sourceMappingURL=CarouselAssetActions.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"CarouselAssetActions.js","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAssetActions.tsx"],"sourcesContent":["import { CarouselActions, IconButton } from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, prefixFileUrlWithBackendUrl } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\n\nimport type { File } from '../../../../../shared/contracts/files';\n\ninterface CarouselAssetActionsProps {\n asset: File;\n onDeleteAsset?: (asset: File) => void;\n onAddAsset?: (asset: File) => void;\n onEditAsset?: () => void;\n}\n\nexport const CarouselAssetActions = ({\n asset,\n onDeleteAsset,\n onAddAsset,\n onEditAsset,\n}: CarouselAssetActionsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <CarouselActions>\n {onAddAsset && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.add'),\n defaultMessage: 'Add',\n })}\n onClick={() => onAddAsset(asset)}\n >\n <Plus />\n </IconButton>\n )}\n\n <CopyLinkButton url={prefixFileUrlWithBackendUrl(asset.url)!} />\n\n {onDeleteAsset && (\n <IconButton\n label={formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n onClick={() => onDeleteAsset(asset)}\n >\n <Trash />\n </IconButton>\n )}\n\n {onEditAsset && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.edit'),\n defaultMessage: 'edit',\n })}\n onClick={onEditAsset}\n >\n <Pencil />\n </IconButton>\n )}\n </CarouselActions>\n );\n};\n"],"names":["CarouselAssetActions","asset","onDeleteAsset","onAddAsset","onEditAsset","formatMessage","useIntl","_jsxs","CarouselActions","_jsx","IconButton","label","id","getTrad","defaultMessage","onClick","Plus","CopyLinkButton","url","prefixFileUrlWithBackendUrl","Trash","Pencil"],"mappings":";;;;;;;;;;;;;;;AAgBO,MAAMA,oBAAuB,GAAA,CAAC,EACnCC,KAAK,EACLC,aAAa,EACbC,UAAU,EACVC,WAAW,EACe,GAAA;IAC1B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACEC,eAACC,CAAAA,4BAAAA,EAAAA;;AACEL,YAAAA,UAAAA,kBACCM,cAACC,CAAAA,uBAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAON,aAAc,CAAA;AACnBO,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,kBAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAC,gBAAAA,OAAAA,EAAS,IAAMZ,UAAWF,CAAAA,KAAAA,CAAAA;AAE1B,gBAAA,QAAA,gBAAAQ,cAACO,CAAAA,UAAAA,EAAAA,EAAAA;;0BAILP,cAACQ,CAAAA,6BAAAA,EAAAA;gBAAeC,GAAKC,EAAAA,uDAAAA,CAA4BlB,MAAMiB,GAAG;;AAEzDhB,YAAAA,aAAAA,kBACCO,cAACC,CAAAA,uBAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAON,aAAc,CAAA;oBACnBO,EAAI,EAAA,eAAA;oBACJE,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAC,gBAAAA,OAAAA,EAAS,IAAMb,aAAcD,CAAAA,KAAAA,CAAAA;AAE7B,gBAAA,QAAA,gBAAAQ,cAACW,CAAAA,WAAAA,EAAAA,EAAAA;;AAIJhB,YAAAA,WAAAA,kBACCK,cAACC,CAAAA,uBAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAON,aAAc,CAAA;AACnBO,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,mBAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA,CAAA;gBACAC,OAASX,EAAAA,WAAAA;AAET,gBAAA,QAAA,gBAAAK,cAACY,CAAAA,YAAAA,EAAAA,EAAAA;;;;AAKX;;;;"}

View File

@@ -0,0 +1,50 @@
import { jsxs, jsx } from 'react/jsx-runtime';
import { CarouselActions, IconButton } from '@strapi/design-system';
import { Plus, Trash, Pencil } from '@strapi/icons';
import { useIntl } from 'react-intl';
import { prefixFileUrlWithBackendUrl } from '../../../utils/prefixFileUrlWithBackendUrl.mjs';
import 'byte-size';
import 'date-fns';
import { getTrad } from '../../../utils/getTrad.mjs';
import 'qs';
import '../../../constants.mjs';
import '../../../utils/urlYupSchema.mjs';
import { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton.mjs';
const CarouselAssetActions = ({ asset, onDeleteAsset, onAddAsset, onEditAsset })=>{
const { formatMessage } = useIntl();
return /*#__PURE__*/ jsxs(CarouselActions, {
children: [
onAddAsset && /*#__PURE__*/ jsx(IconButton, {
label: formatMessage({
id: getTrad('control-card.add'),
defaultMessage: 'Add'
}),
onClick: ()=>onAddAsset(asset),
children: /*#__PURE__*/ jsx(Plus, {})
}),
/*#__PURE__*/ jsx(CopyLinkButton, {
url: prefixFileUrlWithBackendUrl(asset.url)
}),
onDeleteAsset && /*#__PURE__*/ jsx(IconButton, {
label: formatMessage({
id: 'global.delete',
defaultMessage: 'Delete'
}),
onClick: ()=>onDeleteAsset(asset),
children: /*#__PURE__*/ jsx(Trash, {})
}),
onEditAsset && /*#__PURE__*/ jsx(IconButton, {
label: formatMessage({
id: getTrad('control-card.edit'),
defaultMessage: 'edit'
}),
onClick: onEditAsset,
children: /*#__PURE__*/ jsx(Pencil, {})
})
]
});
};
export { CarouselAssetActions };
//# sourceMappingURL=CarouselAssetActions.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"CarouselAssetActions.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAssetActions.tsx"],"sourcesContent":["import { CarouselActions, IconButton } from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, prefixFileUrlWithBackendUrl } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\n\nimport type { File } from '../../../../../shared/contracts/files';\n\ninterface CarouselAssetActionsProps {\n asset: File;\n onDeleteAsset?: (asset: File) => void;\n onAddAsset?: (asset: File) => void;\n onEditAsset?: () => void;\n}\n\nexport const CarouselAssetActions = ({\n asset,\n onDeleteAsset,\n onAddAsset,\n onEditAsset,\n}: CarouselAssetActionsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <CarouselActions>\n {onAddAsset && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.add'),\n defaultMessage: 'Add',\n })}\n onClick={() => onAddAsset(asset)}\n >\n <Plus />\n </IconButton>\n )}\n\n <CopyLinkButton url={prefixFileUrlWithBackendUrl(asset.url)!} />\n\n {onDeleteAsset && (\n <IconButton\n label={formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n onClick={() => onDeleteAsset(asset)}\n >\n <Trash />\n </IconButton>\n )}\n\n {onEditAsset && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.edit'),\n defaultMessage: 'edit',\n })}\n onClick={onEditAsset}\n >\n <Pencil />\n </IconButton>\n )}\n </CarouselActions>\n );\n};\n"],"names":["CarouselAssetActions","asset","onDeleteAsset","onAddAsset","onEditAsset","formatMessage","useIntl","_jsxs","CarouselActions","_jsx","IconButton","label","id","getTrad","defaultMessage","onClick","Plus","CopyLinkButton","url","prefixFileUrlWithBackendUrl","Trash","Pencil"],"mappings":";;;;;;;;;;;;;AAgBO,MAAMA,oBAAuB,GAAA,CAAC,EACnCC,KAAK,EACLC,aAAa,EACbC,UAAU,EACVC,WAAW,EACe,GAAA;IAC1B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,qBACEC,IAACC,CAAAA,eAAAA,EAAAA;;AACEL,YAAAA,UAAAA,kBACCM,GAACC,CAAAA,UAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAON,aAAc,CAAA;AACnBO,oBAAAA,EAAAA,EAAIC,OAAQ,CAAA,kBAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAC,gBAAAA,OAAAA,EAAS,IAAMZ,UAAWF,CAAAA,KAAAA,CAAAA;AAE1B,gBAAA,QAAA,gBAAAQ,GAACO,CAAAA,IAAAA,EAAAA,EAAAA;;0BAILP,GAACQ,CAAAA,cAAAA,EAAAA;gBAAeC,GAAKC,EAAAA,2BAAAA,CAA4BlB,MAAMiB,GAAG;;AAEzDhB,YAAAA,aAAAA,kBACCO,GAACC,CAAAA,UAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAON,aAAc,CAAA;oBACnBO,EAAI,EAAA,eAAA;oBACJE,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAC,gBAAAA,OAAAA,EAAS,IAAMb,aAAcD,CAAAA,KAAAA,CAAAA;AAE7B,gBAAA,QAAA,gBAAAQ,GAACW,CAAAA,KAAAA,EAAAA,EAAAA;;AAIJhB,YAAAA,WAAAA,kBACCK,GAACC,CAAAA,UAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAON,aAAc,CAAA;AACnBO,oBAAAA,EAAAA,EAAIC,OAAQ,CAAA,mBAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA,CAAA;gBACAC,OAASX,EAAAA,WAAAA;AAET,gBAAA,QAAA,gBAAAK,GAACY,CAAAA,MAAAA,EAAAA,EAAAA;;;;AAKX;;;;"}

View File

@@ -0,0 +1,112 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var designSystem = require('@strapi/design-system');
var reactIntl = require('react-intl');
var getTrad = require('../../../utils/getTrad.js');
var EditAssetContent = require('../../EditAssetDialog/EditAssetContent.js');
var CarouselAsset = require('./CarouselAsset.js');
var CarouselAssetActions = require('./CarouselAssetActions.js');
var EmptyStateAsset = require('./EmptyStateAsset.js');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
const CarouselAssets = /*#__PURE__*/ React__namespace.forwardRef(({ assets, disabled = false, error, hint, label, labelAction, onAddAsset, onDeleteAsset, onDeleteAssetFromMediaLibrary, onDropAsset, onEditAsset, onNext, onPrevious, required = false, selectedAssetIndex, trackedLocation }, forwardedRef)=>{
const { formatMessage } = reactIntl.useIntl();
const [isEditingAsset, setIsEditingAsset] = React__namespace.useState(false);
const currentAsset = assets[selectedAssetIndex];
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.CarouselInput, {
ref: forwardedRef,
label: label,
labelAction: labelAction,
secondaryLabel: currentAsset?.name,
selectedSlide: selectedAssetIndex,
previousLabel: formatMessage({
id: getTrad.getTrad('mediaLibraryInput.actions.previousSlide'),
defaultMessage: 'Previous slide'
}),
nextLabel: formatMessage({
id: getTrad.getTrad('mediaLibraryInput.actions.nextSlide'),
defaultMessage: 'Next slide'
}),
onNext: onNext,
onPrevious: onPrevious,
hint: hint,
error: error,
required: required,
actions: currentAsset ? /*#__PURE__*/ jsxRuntime.jsx(CarouselAssetActions.CarouselAssetActions, {
asset: currentAsset,
onDeleteAsset: disabled ? undefined : onDeleteAsset,
onAddAsset: disabled ? undefined : onAddAsset,
onEditAsset: onEditAsset ? ()=>setIsEditingAsset(true) : undefined
}) : undefined,
children: assets.length === 0 ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.CarouselSlide, {
label: formatMessage({
id: getTrad.getTrad('mediaLibraryInput.slideCount'),
defaultMessage: '{n} of {m} slides'
}, {
n: 1,
m: 1
}),
children: /*#__PURE__*/ jsxRuntime.jsx(EmptyStateAsset.EmptyStateAsset, {
disabled: disabled,
onClick: onAddAsset,
onDropAsset: onDropAsset
})
}) : assets.map((asset, index)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.CarouselSlide, {
label: formatMessage({
id: getTrad.getTrad('mediaLibraryInput.slideCount'),
defaultMessage: '{n} of {m} slides'
}, {
n: index + 1,
m: assets.length
}),
children: /*#__PURE__*/ jsxRuntime.jsx(CarouselAsset.CarouselAsset, {
asset: asset
})
}, asset.id))
}),
/*#__PURE__*/ jsxRuntime.jsx(EditAssetContent.EditAssetDialog, {
open: isEditingAsset,
onClose: (editedAsset)=>{
setIsEditingAsset(false);
// The asset has been deleted
if (editedAsset === null) {
onDeleteAssetFromMediaLibrary();
}
if (editedAsset && typeof editedAsset !== 'boolean') {
onEditAsset?.(editedAsset);
}
},
asset: currentAsset,
canUpdate: true,
canCopyLink: true,
canDownload: true,
trackedLocation: trackedLocation
})
]
});
});
exports.CarouselAssets = CarouselAssets;
//# sourceMappingURL=CarouselAssets.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,91 @@
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
import * as React from 'react';
import { CarouselInput, CarouselSlide } from '@strapi/design-system';
import { useIntl } from 'react-intl';
import { getTrad } from '../../../utils/getTrad.mjs';
import { EditAssetDialog } from '../../EditAssetDialog/EditAssetContent.mjs';
import { CarouselAsset } from './CarouselAsset.mjs';
import { CarouselAssetActions } from './CarouselAssetActions.mjs';
import { EmptyStateAsset } from './EmptyStateAsset.mjs';
const CarouselAssets = /*#__PURE__*/ React.forwardRef(({ assets, disabled = false, error, hint, label, labelAction, onAddAsset, onDeleteAsset, onDeleteAssetFromMediaLibrary, onDropAsset, onEditAsset, onNext, onPrevious, required = false, selectedAssetIndex, trackedLocation }, forwardedRef)=>{
const { formatMessage } = useIntl();
const [isEditingAsset, setIsEditingAsset] = React.useState(false);
const currentAsset = assets[selectedAssetIndex];
return /*#__PURE__*/ jsxs(Fragment, {
children: [
/*#__PURE__*/ jsx(CarouselInput, {
ref: forwardedRef,
label: label,
labelAction: labelAction,
secondaryLabel: currentAsset?.name,
selectedSlide: selectedAssetIndex,
previousLabel: formatMessage({
id: getTrad('mediaLibraryInput.actions.previousSlide'),
defaultMessage: 'Previous slide'
}),
nextLabel: formatMessage({
id: getTrad('mediaLibraryInput.actions.nextSlide'),
defaultMessage: 'Next slide'
}),
onNext: onNext,
onPrevious: onPrevious,
hint: hint,
error: error,
required: required,
actions: currentAsset ? /*#__PURE__*/ jsx(CarouselAssetActions, {
asset: currentAsset,
onDeleteAsset: disabled ? undefined : onDeleteAsset,
onAddAsset: disabled ? undefined : onAddAsset,
onEditAsset: onEditAsset ? ()=>setIsEditingAsset(true) : undefined
}) : undefined,
children: assets.length === 0 ? /*#__PURE__*/ jsx(CarouselSlide, {
label: formatMessage({
id: getTrad('mediaLibraryInput.slideCount'),
defaultMessage: '{n} of {m} slides'
}, {
n: 1,
m: 1
}),
children: /*#__PURE__*/ jsx(EmptyStateAsset, {
disabled: disabled,
onClick: onAddAsset,
onDropAsset: onDropAsset
})
}) : assets.map((asset, index)=>/*#__PURE__*/ jsx(CarouselSlide, {
label: formatMessage({
id: getTrad('mediaLibraryInput.slideCount'),
defaultMessage: '{n} of {m} slides'
}, {
n: index + 1,
m: assets.length
}),
children: /*#__PURE__*/ jsx(CarouselAsset, {
asset: asset
})
}, asset.id))
}),
/*#__PURE__*/ jsx(EditAssetDialog, {
open: isEditingAsset,
onClose: (editedAsset)=>{
setIsEditingAsset(false);
// The asset has been deleted
if (editedAsset === null) {
onDeleteAssetFromMediaLibrary();
}
if (editedAsset && typeof editedAsset !== 'boolean') {
onEditAsset?.(editedAsset);
}
},
asset: currentAsset,
canUpdate: true,
canCopyLink: true,
canDownload: true,
trackedLocation: trackedLocation
})
]
});
});
export { CarouselAssets };
//# sourceMappingURL=CarouselAssets.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,116 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var reactIntl = require('react-intl');
var styledComponents = require('styled-components');
var constants = require('../../../constants.js');
require('byte-size');
require('date-fns');
var getTrad = require('../../../utils/getTrad.js');
require('qs');
var rawFileToAsset = require('../../../utils/rawFileToAsset.js');
require('../../../utils/urlYupSchema.js');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
const TextAlignTypography = styledComponents.styled(designSystem.Typography)`
align-items: center;
`;
const EmptyStateAsset = ({ disabled = false, onClick, onDropAsset })=>{
const { formatMessage } = reactIntl.useIntl();
const [dragOver, setDragOver] = React__namespace.useState(false);
const handleDragEnter = (e)=>{
e.preventDefault();
setDragOver(true);
};
const handleDragLeave = (e)=>{
if (!e.currentTarget.contains(e.relatedTarget)) {
setDragOver(false);
}
};
const handleDragOver = (e)=>{
e.preventDefault();
};
const handleDrop = (e)=>{
e.preventDefault();
if (e?.dataTransfer?.files) {
const files = e.dataTransfer.files;
const assets = [];
for(let i = 0; i < files.length; i++){
const file = files.item(i);
if (file) {
const asset = rawFileToAsset.rawFileToAsset(file, constants.AssetSource.Computer);
assets.push(asset);
}
}
onDropAsset(assets);
}
setDragOver(false);
};
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
borderStyle: dragOver ? 'dashed' : undefined,
borderWidth: dragOver ? '1px' : undefined,
borderColor: dragOver ? 'primary600' : undefined,
direction: "column",
justifyContent: "center",
alignItems: "center",
height: "100%",
width: "100%",
tag: "button",
type: "button",
disabled: disabled,
onClick: onClick,
onDragEnter: handleDragEnter,
onDragLeave: handleDragLeave,
onDragOver: handleDragOver,
onDrop: handleDrop,
gap: 3,
style: {
cursor: disabled ? 'not-allowed' : 'pointer'
},
children: [
/*#__PURE__*/ jsxRuntime.jsx(icons.PlusCircle, {
"aria-hidden": true,
width: "3.2rem",
height: "3.2rem",
fill: disabled ? 'neutral400' : 'primary600'
}),
/*#__PURE__*/ jsxRuntime.jsx(TextAlignTypography, {
variant: "pi",
fontWeight: "bold",
textColor: "neutral600",
style: {
textAlign: 'center'
},
tag: "span",
children: formatMessage({
id: getTrad.getTrad('mediaLibraryInput.placeholder'),
defaultMessage: 'Click to add an asset or drag and drop one in this area'
})
})
]
});
};
exports.EmptyStateAsset = EmptyStateAsset;
//# sourceMappingURL=EmptyStateAsset.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,95 @@
import { jsxs, jsx } from 'react/jsx-runtime';
import * as React from 'react';
import { Typography, Flex } from '@strapi/design-system';
import { PlusCircle } from '@strapi/icons';
import { useIntl } from 'react-intl';
import { styled } from 'styled-components';
import { AssetSource } from '../../../constants.mjs';
import 'byte-size';
import 'date-fns';
import { getTrad } from '../../../utils/getTrad.mjs';
import 'qs';
import { rawFileToAsset } from '../../../utils/rawFileToAsset.mjs';
import '../../../utils/urlYupSchema.mjs';
const TextAlignTypography = styled(Typography)`
align-items: center;
`;
const EmptyStateAsset = ({ disabled = false, onClick, onDropAsset })=>{
const { formatMessage } = useIntl();
const [dragOver, setDragOver] = React.useState(false);
const handleDragEnter = (e)=>{
e.preventDefault();
setDragOver(true);
};
const handleDragLeave = (e)=>{
if (!e.currentTarget.contains(e.relatedTarget)) {
setDragOver(false);
}
};
const handleDragOver = (e)=>{
e.preventDefault();
};
const handleDrop = (e)=>{
e.preventDefault();
if (e?.dataTransfer?.files) {
const files = e.dataTransfer.files;
const assets = [];
for(let i = 0; i < files.length; i++){
const file = files.item(i);
if (file) {
const asset = rawFileToAsset(file, AssetSource.Computer);
assets.push(asset);
}
}
onDropAsset(assets);
}
setDragOver(false);
};
return /*#__PURE__*/ jsxs(Flex, {
borderStyle: dragOver ? 'dashed' : undefined,
borderWidth: dragOver ? '1px' : undefined,
borderColor: dragOver ? 'primary600' : undefined,
direction: "column",
justifyContent: "center",
alignItems: "center",
height: "100%",
width: "100%",
tag: "button",
type: "button",
disabled: disabled,
onClick: onClick,
onDragEnter: handleDragEnter,
onDragLeave: handleDragLeave,
onDragOver: handleDragOver,
onDrop: handleDrop,
gap: 3,
style: {
cursor: disabled ? 'not-allowed' : 'pointer'
},
children: [
/*#__PURE__*/ jsx(PlusCircle, {
"aria-hidden": true,
width: "3.2rem",
height: "3.2rem",
fill: disabled ? 'neutral400' : 'primary600'
}),
/*#__PURE__*/ jsx(TextAlignTypography, {
variant: "pi",
fontWeight: "bold",
textColor: "neutral600",
style: {
textAlign: 'center'
},
tag: "span",
children: formatMessage({
id: getTrad('mediaLibraryInput.placeholder'),
defaultMessage: 'Click to add an asset or drag and drop one in this area'
})
})
]
});
};
export { EmptyStateAsset };
//# sourceMappingURL=EmptyStateAsset.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,216 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var strapiAdmin = require('@strapi/admin/strapi-admin');
var reactIntl = require('react-intl');
require('byte-size');
require('date-fns');
var getAllowedFiles = require('../../utils/getAllowedFiles.js');
var getTrad = require('../../utils/getTrad.js');
require('qs');
require('../../constants.js');
require('../../utils/urlYupSchema.js');
var AssetDialog = require('../AssetDialog/AssetDialog.js');
var EditFolderDialog = require('../EditFolderDialog/EditFolderDialog.js');
var UploadAssetDialog = require('../UploadAssetDialog/UploadAssetDialog.js');
var CarouselAssets = require('./Carousel/CarouselAssets.js');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
// TODO: find a better naming convention for the file that was an index file before
const STEPS = {
AssetSelect: 'SelectAsset',
AssetUpload: 'UploadAsset',
FolderCreate: 'FolderCreate'
};
const MediaLibraryInput = /*#__PURE__*/ React__namespace.forwardRef(({ attribute: { allowedTypes = [
'videos',
'files',
'images',
'audios'
], multiple = false } = {}, label, hint, disabled = false, labelAction = undefined, name, required = false }, forwardedRef)=>{
const { formatMessage } = reactIntl.useIntl();
const { onChange, value, error } = strapiAdmin.useField(name);
const fieldAllowedTypes = allowedTypes || [
'files',
'images',
'videos',
'audios'
];
const [uploadedFiles, setUploadedFiles] = React__namespace.useState([]);
const [step, setStep] = React__namespace.useState(undefined);
const [selectedIndex, setSelectedIndex] = React__namespace.useState(0);
const [droppedAssets, setDroppedAssets] = React__namespace.useState();
const [folderId, setFolderId] = React__namespace.useState(null);
const { toggleNotification } = strapiAdmin.useNotification();
React__namespace.useEffect(()=>{
// Clear the uploaded files on close
if (step === undefined) {
setUploadedFiles([]);
}
}, [
step
]);
let selectedAssets = [];
if (Array.isArray(value)) {
selectedAssets = value;
} else if (value) {
selectedAssets = [
value
];
}
const handleValidation = (nextSelectedAssets)=>{
const value = multiple ? nextSelectedAssets : nextSelectedAssets[0];
onChange(name, value);
setStep(undefined);
};
const handleDeleteAssetFromMediaLibrary = ()=>{
let nextValue;
if (multiple) {
const nextSelectedAssets = selectedAssets.filter((_, assetIndex)=>assetIndex !== selectedIndex);
nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;
} else {
nextValue = null;
}
const value = nextValue;
onChange(name, value);
setSelectedIndex(0);
};
const handleDeleteAsset = (asset)=>{
let nextValue;
if (multiple) {
const nextSelectedAssets = selectedAssets.filter((prevAsset)=>prevAsset.id !== asset.id);
nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;
} else {
nextValue = null;
}
onChange(name, nextValue);
setSelectedIndex(0);
};
const handleAssetEdit = (asset)=>{
const nextSelectedAssets = selectedAssets.map((prevAsset)=>prevAsset.id === asset.id ? asset : prevAsset);
onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);
};
const validateAssetsTypes = (assets, callback)=>{
const allowedAssets = getAllowedFiles.getAllowedFiles(fieldAllowedTypes, assets);
if (allowedAssets.length > 0) {
callback(allowedAssets);
} else {
toggleNotification({
type: 'danger',
timeout: 4000,
message: formatMessage({
id: getTrad.getTrad('input.notification.not-supported'),
defaultMessage: `You can't upload this type of file.`
}, {
fileTypes: fieldAllowedTypes.join(',')
})
});
}
};
const handleAssetDrop = (assets)=>{
validateAssetsTypes(assets, (allowedAssets)=>{
setDroppedAssets(allowedAssets);
setStep(STEPS.AssetUpload);
});
};
if (multiple && selectedAssets.length > 0) {
label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;
}
const handleNext = ()=>{
setSelectedIndex((current)=>current < selectedAssets.length - 1 ? current + 1 : 0);
};
const handlePrevious = ()=>{
setSelectedIndex((current)=>current > 0 ? current - 1 : selectedAssets.length - 1);
};
const handleFilesUploadSucceeded = (uploadedFiles)=>{
setUploadedFiles((prev)=>[
...prev,
...uploadedFiles
]);
};
let initiallySelectedAssets = selectedAssets;
if (uploadedFiles.length > 0) {
const allowedUploadedFiles = getAllowedFiles.getAllowedFiles(fieldAllowedTypes, uploadedFiles);
initiallySelectedAssets = multiple ? [
...allowedUploadedFiles,
...selectedAssets
] : [
allowedUploadedFiles[0]
];
}
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(CarouselAssets.CarouselAssets, {
ref: forwardedRef,
assets: selectedAssets,
disabled: disabled,
label: label,
labelAction: labelAction,
onDeleteAsset: handleDeleteAsset,
onDeleteAssetFromMediaLibrary: handleDeleteAssetFromMediaLibrary,
onAddAsset: ()=>setStep(STEPS.AssetSelect),
onDropAsset: handleAssetDrop,
onEditAsset: handleAssetEdit,
onNext: handleNext,
onPrevious: handlePrevious,
error: error,
hint: hint,
required: required,
selectedAssetIndex: selectedIndex,
trackedLocation: "content-manager"
}),
step === STEPS.AssetSelect && /*#__PURE__*/ jsxRuntime.jsx(AssetDialog.AssetDialog, {
allowedTypes: fieldAllowedTypes,
initiallySelectedAssets: initiallySelectedAssets,
folderId: folderId,
onClose: ()=>{
setStep(undefined);
setFolderId(null);
},
open: step === STEPS.AssetSelect,
onValidate: handleValidation,
multiple: multiple,
onAddAsset: ()=>setStep(STEPS.AssetUpload),
onAddFolder: ()=>setStep(STEPS.FolderCreate),
onChangeFolder: (folder)=>setFolderId(folder),
trackedLocation: "content-manager"
}),
step === STEPS.AssetUpload && /*#__PURE__*/ jsxRuntime.jsx(UploadAssetDialog.UploadAssetDialog, {
open: step === STEPS.AssetUpload,
onClose: ()=>setStep(STEPS.AssetSelect),
initialAssetsToAdd: droppedAssets,
addUploadedFiles: handleFilesUploadSucceeded,
trackedLocation: "content-manager",
folderId: folderId,
validateAssetsTypes: validateAssetsTypes
}),
step === STEPS.FolderCreate && /*#__PURE__*/ jsxRuntime.jsx(EditFolderDialog.EditFolderDialog, {
open: step === STEPS.FolderCreate,
onClose: ()=>setStep(STEPS.AssetSelect),
parentFolderId: folderId
})
]
});
});
exports.MediaLibraryInput = MediaLibraryInput;
//# sourceMappingURL=MediaLibraryInput.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,195 @@
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
import * as React from 'react';
import { useField, useNotification } from '@strapi/admin/strapi-admin';
import { useIntl } from 'react-intl';
import 'byte-size';
import 'date-fns';
import { getAllowedFiles } from '../../utils/getAllowedFiles.mjs';
import { getTrad } from '../../utils/getTrad.mjs';
import 'qs';
import '../../constants.mjs';
import '../../utils/urlYupSchema.mjs';
import { AssetDialog } from '../AssetDialog/AssetDialog.mjs';
import { EditFolderDialog } from '../EditFolderDialog/EditFolderDialog.mjs';
import { UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog.mjs';
import { CarouselAssets } from './Carousel/CarouselAssets.mjs';
// TODO: find a better naming convention for the file that was an index file before
const STEPS = {
AssetSelect: 'SelectAsset',
AssetUpload: 'UploadAsset',
FolderCreate: 'FolderCreate'
};
const MediaLibraryInput = /*#__PURE__*/ React.forwardRef(({ attribute: { allowedTypes = [
'videos',
'files',
'images',
'audios'
], multiple = false } = {}, label, hint, disabled = false, labelAction = undefined, name, required = false }, forwardedRef)=>{
const { formatMessage } = useIntl();
const { onChange, value, error } = useField(name);
const fieldAllowedTypes = allowedTypes || [
'files',
'images',
'videos',
'audios'
];
const [uploadedFiles, setUploadedFiles] = React.useState([]);
const [step, setStep] = React.useState(undefined);
const [selectedIndex, setSelectedIndex] = React.useState(0);
const [droppedAssets, setDroppedAssets] = React.useState();
const [folderId, setFolderId] = React.useState(null);
const { toggleNotification } = useNotification();
React.useEffect(()=>{
// Clear the uploaded files on close
if (step === undefined) {
setUploadedFiles([]);
}
}, [
step
]);
let selectedAssets = [];
if (Array.isArray(value)) {
selectedAssets = value;
} else if (value) {
selectedAssets = [
value
];
}
const handleValidation = (nextSelectedAssets)=>{
const value = multiple ? nextSelectedAssets : nextSelectedAssets[0];
onChange(name, value);
setStep(undefined);
};
const handleDeleteAssetFromMediaLibrary = ()=>{
let nextValue;
if (multiple) {
const nextSelectedAssets = selectedAssets.filter((_, assetIndex)=>assetIndex !== selectedIndex);
nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;
} else {
nextValue = null;
}
const value = nextValue;
onChange(name, value);
setSelectedIndex(0);
};
const handleDeleteAsset = (asset)=>{
let nextValue;
if (multiple) {
const nextSelectedAssets = selectedAssets.filter((prevAsset)=>prevAsset.id !== asset.id);
nextValue = nextSelectedAssets.length > 0 ? nextSelectedAssets : null;
} else {
nextValue = null;
}
onChange(name, nextValue);
setSelectedIndex(0);
};
const handleAssetEdit = (asset)=>{
const nextSelectedAssets = selectedAssets.map((prevAsset)=>prevAsset.id === asset.id ? asset : prevAsset);
onChange(name, multiple ? nextSelectedAssets : nextSelectedAssets[0]);
};
const validateAssetsTypes = (assets, callback)=>{
const allowedAssets = getAllowedFiles(fieldAllowedTypes, assets);
if (allowedAssets.length > 0) {
callback(allowedAssets);
} else {
toggleNotification({
type: 'danger',
timeout: 4000,
message: formatMessage({
id: getTrad('input.notification.not-supported'),
defaultMessage: `You can't upload this type of file.`
}, {
fileTypes: fieldAllowedTypes.join(',')
})
});
}
};
const handleAssetDrop = (assets)=>{
validateAssetsTypes(assets, (allowedAssets)=>{
setDroppedAssets(allowedAssets);
setStep(STEPS.AssetUpload);
});
};
if (multiple && selectedAssets.length > 0) {
label = `${label} (${selectedIndex + 1} / ${selectedAssets.length})`;
}
const handleNext = ()=>{
setSelectedIndex((current)=>current < selectedAssets.length - 1 ? current + 1 : 0);
};
const handlePrevious = ()=>{
setSelectedIndex((current)=>current > 0 ? current - 1 : selectedAssets.length - 1);
};
const handleFilesUploadSucceeded = (uploadedFiles)=>{
setUploadedFiles((prev)=>[
...prev,
...uploadedFiles
]);
};
let initiallySelectedAssets = selectedAssets;
if (uploadedFiles.length > 0) {
const allowedUploadedFiles = getAllowedFiles(fieldAllowedTypes, uploadedFiles);
initiallySelectedAssets = multiple ? [
...allowedUploadedFiles,
...selectedAssets
] : [
allowedUploadedFiles[0]
];
}
return /*#__PURE__*/ jsxs(Fragment, {
children: [
/*#__PURE__*/ jsx(CarouselAssets, {
ref: forwardedRef,
assets: selectedAssets,
disabled: disabled,
label: label,
labelAction: labelAction,
onDeleteAsset: handleDeleteAsset,
onDeleteAssetFromMediaLibrary: handleDeleteAssetFromMediaLibrary,
onAddAsset: ()=>setStep(STEPS.AssetSelect),
onDropAsset: handleAssetDrop,
onEditAsset: handleAssetEdit,
onNext: handleNext,
onPrevious: handlePrevious,
error: error,
hint: hint,
required: required,
selectedAssetIndex: selectedIndex,
trackedLocation: "content-manager"
}),
step === STEPS.AssetSelect && /*#__PURE__*/ jsx(AssetDialog, {
allowedTypes: fieldAllowedTypes,
initiallySelectedAssets: initiallySelectedAssets,
folderId: folderId,
onClose: ()=>{
setStep(undefined);
setFolderId(null);
},
open: step === STEPS.AssetSelect,
onValidate: handleValidation,
multiple: multiple,
onAddAsset: ()=>setStep(STEPS.AssetUpload),
onAddFolder: ()=>setStep(STEPS.FolderCreate),
onChangeFolder: (folder)=>setFolderId(folder),
trackedLocation: "content-manager"
}),
step === STEPS.AssetUpload && /*#__PURE__*/ jsx(UploadAssetDialog, {
open: step === STEPS.AssetUpload,
onClose: ()=>setStep(STEPS.AssetSelect),
initialAssetsToAdd: droppedAssets,
addUploadedFiles: handleFilesUploadSucceeded,
trackedLocation: "content-manager",
folderId: folderId,
validateAssetsTypes: validateAssetsTypes
}),
step === STEPS.FolderCreate && /*#__PURE__*/ jsx(EditFolderDialog, {
open: step === STEPS.FolderCreate,
onClose: ()=>setStep(STEPS.AssetSelect),
parentFolderId: folderId
})
]
});
});
export { MediaLibraryInput };
//# sourceMappingURL=MediaLibraryInput.mjs.map

File diff suppressed because one or more lines are too long