@strapi/upload 5.35.0 → 5.36.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/admin/future/App.js +8 -20
  2. package/dist/admin/future/App.js.map +1 -1
  3. package/dist/admin/future/App.mjs +8 -20
  4. package/dist/admin/future/App.mjs.map +1 -1
  5. package/dist/admin/future/components/UploadProgressDialog.js +494 -0
  6. package/dist/admin/future/components/UploadProgressDialog.js.map +1 -0
  7. package/dist/admin/future/components/UploadProgressDialog.mjs +473 -0
  8. package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -0
  9. package/dist/admin/future/enums.js +12 -0
  10. package/dist/admin/future/enums.js.map +1 -0
  11. package/dist/admin/future/enums.mjs +10 -0
  12. package/dist/admin/future/enums.mjs.map +1 -0
  13. package/dist/admin/future/pages/Assets/AssetsPage.js +311 -0
  14. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -0
  15. package/dist/admin/future/pages/Assets/AssetsPage.mjs +290 -0
  16. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -0
  17. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +164 -0
  18. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -0
  19. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +162 -0
  20. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -0
  21. package/dist/admin/future/pages/Assets/components/AssetsTable.js +198 -0
  22. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -0
  23. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +196 -0
  24. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -0
  25. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js +127 -0
  26. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js.map +1 -0
  27. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.mjs +105 -0
  28. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.mjs.map +1 -0
  29. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js +107 -0
  30. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -0
  31. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +104 -0
  32. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -0
  33. package/dist/admin/future/pages/Assets/constants.js +54 -0
  34. package/dist/admin/future/pages/Assets/constants.js.map +1 -0
  35. package/dist/admin/future/pages/Assets/constants.mjs +50 -0
  36. package/dist/admin/future/pages/Assets/constants.mjs.map +1 -0
  37. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +77 -0
  38. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -0
  39. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +74 -0
  40. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -0
  41. package/dist/admin/future/services/api.js +419 -9
  42. package/dist/admin/future/services/api.js.map +1 -1
  43. package/dist/admin/future/services/api.mjs +417 -9
  44. package/dist/admin/future/services/api.mjs.map +1 -1
  45. package/dist/admin/future/services/assets.js +37 -0
  46. package/dist/admin/future/services/assets.js.map +1 -0
  47. package/dist/admin/future/services/assets.mjs +35 -0
  48. package/dist/admin/future/services/assets.mjs.map +1 -0
  49. package/dist/admin/future/store/hooks.js +10 -0
  50. package/dist/admin/future/store/hooks.js.map +1 -0
  51. package/dist/admin/future/store/hooks.mjs +7 -0
  52. package/dist/admin/future/store/hooks.mjs.map +1 -0
  53. package/dist/admin/future/store/uploadProgress.js +156 -0
  54. package/dist/admin/future/store/uploadProgress.js.map +1 -0
  55. package/dist/admin/future/store/uploadProgress.mjs +143 -0
  56. package/dist/admin/future/store/uploadProgress.mjs.map +1 -0
  57. package/dist/admin/future/utils/files.js +23 -0
  58. package/dist/admin/future/utils/files.js.map +1 -0
  59. package/dist/admin/future/utils/files.mjs +19 -0
  60. package/dist/admin/future/utils/files.mjs.map +1 -0
  61. package/dist/admin/future/utils/getAssetIcon.js +28 -0
  62. package/dist/admin/future/utils/getAssetIcon.js.map +1 -0
  63. package/dist/admin/future/utils/getAssetIcon.mjs +26 -0
  64. package/dist/admin/future/utils/getAssetIcon.mjs.map +1 -0
  65. package/dist/admin/index.js +11 -0
  66. package/dist/admin/index.js.map +1 -1
  67. package/dist/admin/index.mjs +11 -0
  68. package/dist/admin/index.mjs.map +1 -1
  69. package/dist/admin/package.json.js +11 -9
  70. package/dist/admin/package.json.js.map +1 -1
  71. package/dist/admin/package.json.mjs +11 -9
  72. package/dist/admin/package.json.mjs.map +1 -1
  73. package/dist/admin/src/future/components/UploadProgressDialog.d.ts +1 -0
  74. package/dist/admin/src/future/enums.d.ts +6 -0
  75. package/dist/admin/src/future/pages/Assets/AssetsPage.d.ts +1 -0
  76. package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +6 -0
  77. package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +6 -0
  78. package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZone.d.ts +9 -0
  79. package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZoneContext.d.ts +11 -0
  80. package/dist/admin/src/future/pages/Assets/constants.d.ts +17 -0
  81. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +17 -0
  82. package/dist/admin/src/future/services/api.d.ts +21 -3
  83. package/dist/admin/src/future/services/assets.d.ts +13 -0
  84. package/dist/admin/src/future/store/hooks.d.ts +6 -0
  85. package/dist/admin/src/future/store/uploadProgress.d.ts +46 -0
  86. package/dist/admin/src/future/utils/files.d.ts +3 -0
  87. package/dist/admin/src/future/utils/getAssetIcon.d.ts +12 -0
  88. package/dist/admin/translations/en.json.js +25 -0
  89. package/dist/admin/translations/en.json.js.map +1 -1
  90. package/dist/admin/translations/en.json.mjs +25 -0
  91. package/dist/admin/translations/en.json.mjs.map +1 -1
  92. package/dist/server/controllers/admin-upload.js +151 -2
  93. package/dist/server/controllers/admin-upload.js.map +1 -1
  94. package/dist/server/controllers/admin-upload.mjs +151 -2
  95. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  96. package/dist/server/controllers/content-api.js +8 -2
  97. package/dist/server/controllers/content-api.js.map +1 -1
  98. package/dist/server/controllers/content-api.mjs +9 -3
  99. package/dist/server/controllers/content-api.mjs.map +1 -1
  100. package/dist/server/routes/admin.js +10 -0
  101. package/dist/server/routes/admin.js.map +1 -1
  102. package/dist/server/routes/admin.mjs +10 -0
  103. package/dist/server/routes/admin.mjs.map +1 -1
  104. package/dist/server/src/controllers/admin-upload.d.ts +12 -0
  105. package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
  106. package/dist/server/src/controllers/content-api.d.ts.map +1 -1
  107. package/dist/server/src/controllers/index.d.ts +1 -0
  108. package/dist/server/src/controllers/index.d.ts.map +1 -1
  109. package/dist/server/src/index.d.ts +1 -0
  110. package/dist/server/src/index.d.ts.map +1 -1
  111. package/dist/server/src/routes/admin.d.ts.map +1 -1
  112. package/dist/server/src/utils/mime-validation.d.ts +5 -0
  113. package/dist/server/src/utils/mime-validation.d.ts.map +1 -1
  114. package/dist/server/utils/mime-validation.js +7 -4
  115. package/dist/server/utils/mime-validation.js.map +1 -1
  116. package/dist/server/utils/mime-validation.mjs +7 -4
  117. package/dist/server/utils/mime-validation.mjs.map +1 -1
  118. package/dist/shared/contracts/files.d.ts +52 -0
  119. package/dist/shared/contracts/files.d.ts.map +1 -0
  120. package/package.json +11 -9
  121. package/dist/admin/future/pages/AIGenerationPage.js +0 -24
  122. package/dist/admin/future/pages/AIGenerationPage.js.map +0 -1
  123. package/dist/admin/future/pages/AIGenerationPage.mjs +0 -22
  124. package/dist/admin/future/pages/AIGenerationPage.mjs.map +0 -1
  125. package/dist/admin/future/pages/MediaLibraryPage.js +0 -119
  126. package/dist/admin/future/pages/MediaLibraryPage.js.map +0 -1
  127. package/dist/admin/future/pages/MediaLibraryPage.mjs +0 -98
  128. package/dist/admin/future/pages/MediaLibraryPage.mjs.map +0 -1
  129. package/dist/admin/src/future/pages/AIGenerationPage.d.ts +0 -1
  130. package/dist/admin/src/future/pages/MediaLibraryPage.d.ts +0 -1
@@ -0,0 +1,156 @@
1
+ 'use strict';
2
+
3
+ var toolkit = require('@reduxjs/toolkit');
4
+
5
+ const initialState = {
6
+ isVisible: false,
7
+ isMinimized: false,
8
+ progress: 0,
9
+ totalFiles: 0,
10
+ files: [],
11
+ errors: [],
12
+ uploadId: 0
13
+ };
14
+ const computeProgress = (files)=>{
15
+ if (files.length === 0) return 0;
16
+ const totalSize = files.reduce((sum, f)=>sum + f.size, 0);
17
+ if (totalSize === 0) {
18
+ // Fallback to count-based if sizes are unknown
19
+ const completed = files.filter((f)=>f.status === 'complete' || f.status === 'error' || f.status === 'cancelled').length;
20
+ return Math.round(completed / files.length * 100);
21
+ }
22
+ const completedSize = files.filter((f)=>f.status === 'complete' || f.status === 'error' || f.status === 'cancelled').reduce((sum, f)=>sum + f.size, 0);
23
+ return Math.round(completedSize / totalSize * 100);
24
+ };
25
+ const uploadProgressSlice = toolkit.createSlice({
26
+ name: 'uploadProgress',
27
+ initialState,
28
+ reducers: {
29
+ openUploadProgress (state, action) {
30
+ state.isVisible = true;
31
+ state.isMinimized = false;
32
+ state.progress = 0;
33
+ state.totalFiles = action.payload.totalFiles;
34
+ state.files = action.payload.fileNames.map((name, index)=>({
35
+ name,
36
+ index,
37
+ status: 'pending',
38
+ size: action.payload.fileSizes[index] || 0
39
+ }));
40
+ state.errors = [];
41
+ state.uploadId += 1;
42
+ },
43
+ setFileUploading (state, action) {
44
+ const { index } = action.payload;
45
+ if (state.files[index]) {
46
+ state.files[index].status = 'uploading';
47
+ }
48
+ },
49
+ setFileComplete (state, action) {
50
+ const { index, file } = action.payload;
51
+ if (state.files[index]) {
52
+ state.files[index].status = 'complete';
53
+ state.files[index].file = file;
54
+ }
55
+ state.progress = computeProgress(state.files);
56
+ },
57
+ setFileError (state, action) {
58
+ const { index, name, message } = action.payload;
59
+ if (state.files[index]) {
60
+ state.files[index].status = 'error';
61
+ state.files[index].error = message;
62
+ }
63
+ state.errors = [
64
+ ...state.errors,
65
+ {
66
+ name,
67
+ message
68
+ }
69
+ ];
70
+ state.progress = computeProgress(state.files);
71
+ },
72
+ updateProgress (state, action) {
73
+ state.progress = action.payload;
74
+ },
75
+ addUploadErrors (state, action) {
76
+ state.errors = [
77
+ ...state.errors,
78
+ ...action.payload
79
+ ];
80
+ },
81
+ closeUploadProgress (state) {
82
+ state.isVisible = false;
83
+ state.isMinimized = false;
84
+ state.progress = 0;
85
+ state.totalFiles = 0;
86
+ state.files = [];
87
+ state.errors = [];
88
+ },
89
+ toggleMinimize (state) {
90
+ state.isMinimized = !state.isMinimized;
91
+ },
92
+ cancelUpload (state) {
93
+ // Mark all pending and uploading files as cancelled
94
+ state.files = state.files.map((file)=>{
95
+ if (file.status === 'pending' || file.status === 'uploading') {
96
+ return {
97
+ ...file,
98
+ status: 'cancelled'
99
+ };
100
+ }
101
+ return file;
102
+ });
103
+ state.progress = computeProgress(state.files);
104
+ },
105
+ setUploadFailed (state, action) {
106
+ // Mark all pending and uploading files as errored when a catastrophic failure occurs
107
+ state.files = state.files.map((file)=>{
108
+ if (file.status === 'pending' || file.status === 'uploading') {
109
+ return {
110
+ ...file,
111
+ status: 'error',
112
+ error: action.payload.message
113
+ };
114
+ }
115
+ return file;
116
+ });
117
+ state.progress = 100;
118
+ state.errors = [
119
+ ...state.errors,
120
+ {
121
+ name: 'Upload Error',
122
+ message: action.payload.message
123
+ }
124
+ ];
125
+ },
126
+ retryCancelledFiles (state) {
127
+ // Reset all cancelled files back to pending for retry
128
+ state.files = state.files.map((file)=>{
129
+ if (file.status === 'cancelled') {
130
+ return {
131
+ ...file,
132
+ status: 'pending'
133
+ };
134
+ }
135
+ return file;
136
+ });
137
+ state.progress = computeProgress(state.files);
138
+ }
139
+ }
140
+ });
141
+ const { openUploadProgress, setFileUploading, setFileComplete, setFileError, updateProgress, addUploadErrors, closeUploadProgress, toggleMinimize, cancelUpload, setUploadFailed, retryCancelledFiles } = uploadProgressSlice.actions;
142
+ const uploadProgressReducer = uploadProgressSlice.reducer;
143
+
144
+ exports.addUploadErrors = addUploadErrors;
145
+ exports.cancelUpload = cancelUpload;
146
+ exports.closeUploadProgress = closeUploadProgress;
147
+ exports.openUploadProgress = openUploadProgress;
148
+ exports.retryCancelledFiles = retryCancelledFiles;
149
+ exports.setFileComplete = setFileComplete;
150
+ exports.setFileError = setFileError;
151
+ exports.setFileUploading = setFileUploading;
152
+ exports.setUploadFailed = setUploadFailed;
153
+ exports.toggleMinimize = toggleMinimize;
154
+ exports.updateProgress = updateProgress;
155
+ exports.uploadProgressReducer = uploadProgressReducer;
156
+ //# sourceMappingURL=uploadProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploadProgress.js","sources":["../../../../admin/src/future/store/uploadProgress.ts"],"sourcesContent":["import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nexport interface FileUploadError {\n name: string;\n message: string;\n}\n\nexport type FileProgressStatus = 'pending' | 'uploading' | 'complete' | 'error' | 'cancelled';\n\nexport interface FileProgress {\n name: string;\n index: number;\n status: FileProgressStatus;\n size: number;\n file?: File;\n error?: string;\n}\n\nexport interface UploadProgressState {\n isVisible: boolean;\n isMinimized: boolean;\n progress: number;\n totalFiles: number;\n files: FileProgress[];\n errors: FileUploadError[];\n uploadId: number;\n}\n\nexport interface RootState {\n uploadProgress: UploadProgressState;\n}\n\nconst initialState: UploadProgressState = {\n isVisible: false,\n isMinimized: false,\n progress: 0,\n totalFiles: 0,\n files: [],\n errors: [],\n uploadId: 0,\n};\n\nconst computeProgress = (files: FileProgress[]): number => {\n if (files.length === 0) return 0;\n const totalSize = files.reduce((sum, f) => sum + f.size, 0);\n if (totalSize === 0) {\n // Fallback to count-based if sizes are unknown\n const completed = files.filter(\n (f) => f.status === 'complete' || f.status === 'error' || f.status === 'cancelled'\n ).length;\n return Math.round((completed / files.length) * 100);\n }\n const completedSize = files\n .filter((f) => f.status === 'complete' || f.status === 'error' || f.status === 'cancelled')\n .reduce((sum, f) => sum + f.size, 0);\n return Math.round((completedSize / totalSize) * 100);\n};\n\nconst uploadProgressSlice = createSlice({\n name: 'uploadProgress',\n initialState,\n reducers: {\n openUploadProgress(\n state,\n action: PayloadAction<{ totalFiles: number; fileNames: string[]; fileSizes: number[] }>\n ) {\n state.isVisible = true;\n state.isMinimized = false;\n state.progress = 0;\n state.totalFiles = action.payload.totalFiles;\n state.files = action.payload.fileNames.map((name, index) => ({\n name,\n index,\n status: 'pending' as FileProgressStatus,\n size: action.payload.fileSizes[index] || 0,\n }));\n state.errors = [];\n state.uploadId += 1;\n },\n setFileUploading(\n state,\n action: PayloadAction<{ name: string; index: number; total: number; size: number }>\n ) {\n const { index } = action.payload;\n if (state.files[index]) {\n state.files[index].status = 'uploading';\n }\n },\n setFileComplete(state, action: PayloadAction<{ index: number; file: File }>) {\n const { index, file } = action.payload;\n if (state.files[index]) {\n state.files[index].status = 'complete';\n state.files[index].file = file;\n }\n state.progress = computeProgress(state.files);\n },\n setFileError(state, action: PayloadAction<{ index: number; name: string; message: string }>) {\n const { index, name, message } = action.payload;\n if (state.files[index]) {\n state.files[index].status = 'error';\n state.files[index].error = message;\n }\n state.errors = [...state.errors, { name, message }];\n state.progress = computeProgress(state.files);\n },\n updateProgress(state, action: PayloadAction<number>) {\n state.progress = action.payload;\n },\n addUploadErrors(state, action: PayloadAction<FileUploadError[]>) {\n state.errors = [...state.errors, ...action.payload];\n },\n closeUploadProgress(state) {\n state.isVisible = false;\n state.isMinimized = false;\n state.progress = 0;\n state.totalFiles = 0;\n state.files = [];\n state.errors = [];\n },\n toggleMinimize(state) {\n state.isMinimized = !state.isMinimized;\n },\n cancelUpload(state) {\n // Mark all pending and uploading files as cancelled\n state.files = state.files.map((file) => {\n if (file.status === 'pending' || file.status === 'uploading') {\n return { ...file, status: 'cancelled' as FileProgressStatus };\n }\n return file;\n });\n state.progress = computeProgress(state.files);\n },\n setUploadFailed(state, action: PayloadAction<{ message: string }>) {\n // Mark all pending and uploading files as errored when a catastrophic failure occurs\n state.files = state.files.map((file) => {\n if (file.status === 'pending' || file.status === 'uploading') {\n return {\n ...file,\n status: 'error' as FileProgressStatus,\n error: action.payload.message,\n };\n }\n return file;\n });\n state.progress = 100;\n state.errors = [...state.errors, { name: 'Upload Error', message: action.payload.message }];\n },\n retryCancelledFiles(state) {\n // Reset all cancelled files back to pending for retry\n state.files = state.files.map((file) => {\n if (file.status === 'cancelled') {\n return {\n ...file,\n status: 'pending' as FileProgressStatus,\n };\n }\n return file;\n });\n state.progress = computeProgress(state.files);\n },\n },\n});\n\nexport const {\n openUploadProgress,\n setFileUploading,\n setFileComplete,\n setFileError,\n updateProgress,\n addUploadErrors,\n closeUploadProgress,\n toggleMinimize,\n cancelUpload,\n setUploadFailed,\n retryCancelledFiles,\n} = uploadProgressSlice.actions;\n\nexport const uploadProgressReducer = uploadProgressSlice.reducer;\n"],"names":["initialState","isVisible","isMinimized","progress","totalFiles","files","errors","uploadId","computeProgress","length","totalSize","reduce","sum","f","size","completed","filter","status","Math","round","completedSize","uploadProgressSlice","createSlice","name","reducers","openUploadProgress","state","action","payload","fileNames","map","index","fileSizes","setFileUploading","setFileComplete","file","setFileError","message","error","updateProgress","addUploadErrors","closeUploadProgress","toggleMinimize","cancelUpload","setUploadFailed","retryCancelledFiles","actions","uploadProgressReducer","reducer"],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ import { createSlice } from '@reduxjs/toolkit';
2
+
3
+ const initialState = {
4
+ isVisible: false,
5
+ isMinimized: false,
6
+ progress: 0,
7
+ totalFiles: 0,
8
+ files: [],
9
+ errors: [],
10
+ uploadId: 0
11
+ };
12
+ const computeProgress = (files)=>{
13
+ if (files.length === 0) return 0;
14
+ const totalSize = files.reduce((sum, f)=>sum + f.size, 0);
15
+ if (totalSize === 0) {
16
+ // Fallback to count-based if sizes are unknown
17
+ const completed = files.filter((f)=>f.status === 'complete' || f.status === 'error' || f.status === 'cancelled').length;
18
+ return Math.round(completed / files.length * 100);
19
+ }
20
+ const completedSize = files.filter((f)=>f.status === 'complete' || f.status === 'error' || f.status === 'cancelled').reduce((sum, f)=>sum + f.size, 0);
21
+ return Math.round(completedSize / totalSize * 100);
22
+ };
23
+ const uploadProgressSlice = createSlice({
24
+ name: 'uploadProgress',
25
+ initialState,
26
+ reducers: {
27
+ openUploadProgress (state, action) {
28
+ state.isVisible = true;
29
+ state.isMinimized = false;
30
+ state.progress = 0;
31
+ state.totalFiles = action.payload.totalFiles;
32
+ state.files = action.payload.fileNames.map((name, index)=>({
33
+ name,
34
+ index,
35
+ status: 'pending',
36
+ size: action.payload.fileSizes[index] || 0
37
+ }));
38
+ state.errors = [];
39
+ state.uploadId += 1;
40
+ },
41
+ setFileUploading (state, action) {
42
+ const { index } = action.payload;
43
+ if (state.files[index]) {
44
+ state.files[index].status = 'uploading';
45
+ }
46
+ },
47
+ setFileComplete (state, action) {
48
+ const { index, file } = action.payload;
49
+ if (state.files[index]) {
50
+ state.files[index].status = 'complete';
51
+ state.files[index].file = file;
52
+ }
53
+ state.progress = computeProgress(state.files);
54
+ },
55
+ setFileError (state, action) {
56
+ const { index, name, message } = action.payload;
57
+ if (state.files[index]) {
58
+ state.files[index].status = 'error';
59
+ state.files[index].error = message;
60
+ }
61
+ state.errors = [
62
+ ...state.errors,
63
+ {
64
+ name,
65
+ message
66
+ }
67
+ ];
68
+ state.progress = computeProgress(state.files);
69
+ },
70
+ updateProgress (state, action) {
71
+ state.progress = action.payload;
72
+ },
73
+ addUploadErrors (state, action) {
74
+ state.errors = [
75
+ ...state.errors,
76
+ ...action.payload
77
+ ];
78
+ },
79
+ closeUploadProgress (state) {
80
+ state.isVisible = false;
81
+ state.isMinimized = false;
82
+ state.progress = 0;
83
+ state.totalFiles = 0;
84
+ state.files = [];
85
+ state.errors = [];
86
+ },
87
+ toggleMinimize (state) {
88
+ state.isMinimized = !state.isMinimized;
89
+ },
90
+ cancelUpload (state) {
91
+ // Mark all pending and uploading files as cancelled
92
+ state.files = state.files.map((file)=>{
93
+ if (file.status === 'pending' || file.status === 'uploading') {
94
+ return {
95
+ ...file,
96
+ status: 'cancelled'
97
+ };
98
+ }
99
+ return file;
100
+ });
101
+ state.progress = computeProgress(state.files);
102
+ },
103
+ setUploadFailed (state, action) {
104
+ // Mark all pending and uploading files as errored when a catastrophic failure occurs
105
+ state.files = state.files.map((file)=>{
106
+ if (file.status === 'pending' || file.status === 'uploading') {
107
+ return {
108
+ ...file,
109
+ status: 'error',
110
+ error: action.payload.message
111
+ };
112
+ }
113
+ return file;
114
+ });
115
+ state.progress = 100;
116
+ state.errors = [
117
+ ...state.errors,
118
+ {
119
+ name: 'Upload Error',
120
+ message: action.payload.message
121
+ }
122
+ ];
123
+ },
124
+ retryCancelledFiles (state) {
125
+ // Reset all cancelled files back to pending for retry
126
+ state.files = state.files.map((file)=>{
127
+ if (file.status === 'cancelled') {
128
+ return {
129
+ ...file,
130
+ status: 'pending'
131
+ };
132
+ }
133
+ return file;
134
+ });
135
+ state.progress = computeProgress(state.files);
136
+ }
137
+ }
138
+ });
139
+ const { openUploadProgress, setFileUploading, setFileComplete, setFileError, updateProgress, addUploadErrors, closeUploadProgress, toggleMinimize, cancelUpload, setUploadFailed, retryCancelledFiles } = uploadProgressSlice.actions;
140
+ const uploadProgressReducer = uploadProgressSlice.reducer;
141
+
142
+ export { addUploadErrors, cancelUpload, closeUploadProgress, openUploadProgress, retryCancelledFiles, setFileComplete, setFileError, setFileUploading, setUploadFailed, toggleMinimize, updateProgress, uploadProgressReducer };
143
+ //# sourceMappingURL=uploadProgress.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploadProgress.mjs","sources":["../../../../admin/src/future/store/uploadProgress.ts"],"sourcesContent":["import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nexport interface FileUploadError {\n name: string;\n message: string;\n}\n\nexport type FileProgressStatus = 'pending' | 'uploading' | 'complete' | 'error' | 'cancelled';\n\nexport interface FileProgress {\n name: string;\n index: number;\n status: FileProgressStatus;\n size: number;\n file?: File;\n error?: string;\n}\n\nexport interface UploadProgressState {\n isVisible: boolean;\n isMinimized: boolean;\n progress: number;\n totalFiles: number;\n files: FileProgress[];\n errors: FileUploadError[];\n uploadId: number;\n}\n\nexport interface RootState {\n uploadProgress: UploadProgressState;\n}\n\nconst initialState: UploadProgressState = {\n isVisible: false,\n isMinimized: false,\n progress: 0,\n totalFiles: 0,\n files: [],\n errors: [],\n uploadId: 0,\n};\n\nconst computeProgress = (files: FileProgress[]): number => {\n if (files.length === 0) return 0;\n const totalSize = files.reduce((sum, f) => sum + f.size, 0);\n if (totalSize === 0) {\n // Fallback to count-based if sizes are unknown\n const completed = files.filter(\n (f) => f.status === 'complete' || f.status === 'error' || f.status === 'cancelled'\n ).length;\n return Math.round((completed / files.length) * 100);\n }\n const completedSize = files\n .filter((f) => f.status === 'complete' || f.status === 'error' || f.status === 'cancelled')\n .reduce((sum, f) => sum + f.size, 0);\n return Math.round((completedSize / totalSize) * 100);\n};\n\nconst uploadProgressSlice = createSlice({\n name: 'uploadProgress',\n initialState,\n reducers: {\n openUploadProgress(\n state,\n action: PayloadAction<{ totalFiles: number; fileNames: string[]; fileSizes: number[] }>\n ) {\n state.isVisible = true;\n state.isMinimized = false;\n state.progress = 0;\n state.totalFiles = action.payload.totalFiles;\n state.files = action.payload.fileNames.map((name, index) => ({\n name,\n index,\n status: 'pending' as FileProgressStatus,\n size: action.payload.fileSizes[index] || 0,\n }));\n state.errors = [];\n state.uploadId += 1;\n },\n setFileUploading(\n state,\n action: PayloadAction<{ name: string; index: number; total: number; size: number }>\n ) {\n const { index } = action.payload;\n if (state.files[index]) {\n state.files[index].status = 'uploading';\n }\n },\n setFileComplete(state, action: PayloadAction<{ index: number; file: File }>) {\n const { index, file } = action.payload;\n if (state.files[index]) {\n state.files[index].status = 'complete';\n state.files[index].file = file;\n }\n state.progress = computeProgress(state.files);\n },\n setFileError(state, action: PayloadAction<{ index: number; name: string; message: string }>) {\n const { index, name, message } = action.payload;\n if (state.files[index]) {\n state.files[index].status = 'error';\n state.files[index].error = message;\n }\n state.errors = [...state.errors, { name, message }];\n state.progress = computeProgress(state.files);\n },\n updateProgress(state, action: PayloadAction<number>) {\n state.progress = action.payload;\n },\n addUploadErrors(state, action: PayloadAction<FileUploadError[]>) {\n state.errors = [...state.errors, ...action.payload];\n },\n closeUploadProgress(state) {\n state.isVisible = false;\n state.isMinimized = false;\n state.progress = 0;\n state.totalFiles = 0;\n state.files = [];\n state.errors = [];\n },\n toggleMinimize(state) {\n state.isMinimized = !state.isMinimized;\n },\n cancelUpload(state) {\n // Mark all pending and uploading files as cancelled\n state.files = state.files.map((file) => {\n if (file.status === 'pending' || file.status === 'uploading') {\n return { ...file, status: 'cancelled' as FileProgressStatus };\n }\n return file;\n });\n state.progress = computeProgress(state.files);\n },\n setUploadFailed(state, action: PayloadAction<{ message: string }>) {\n // Mark all pending and uploading files as errored when a catastrophic failure occurs\n state.files = state.files.map((file) => {\n if (file.status === 'pending' || file.status === 'uploading') {\n return {\n ...file,\n status: 'error' as FileProgressStatus,\n error: action.payload.message,\n };\n }\n return file;\n });\n state.progress = 100;\n state.errors = [...state.errors, { name: 'Upload Error', message: action.payload.message }];\n },\n retryCancelledFiles(state) {\n // Reset all cancelled files back to pending for retry\n state.files = state.files.map((file) => {\n if (file.status === 'cancelled') {\n return {\n ...file,\n status: 'pending' as FileProgressStatus,\n };\n }\n return file;\n });\n state.progress = computeProgress(state.files);\n },\n },\n});\n\nexport const {\n openUploadProgress,\n setFileUploading,\n setFileComplete,\n setFileError,\n updateProgress,\n addUploadErrors,\n closeUploadProgress,\n toggleMinimize,\n cancelUpload,\n setUploadFailed,\n retryCancelledFiles,\n} = uploadProgressSlice.actions;\n\nexport const uploadProgressReducer = uploadProgressSlice.reducer;\n"],"names":["initialState","isVisible","isMinimized","progress","totalFiles","files","errors","uploadId","computeProgress","length","totalSize","reduce","sum","f","size","completed","filter","status","Math","round","completedSize","uploadProgressSlice","createSlice","name","reducers","openUploadProgress","state","action","payload","fileNames","map","index","fileSizes","setFileUploading","setFileComplete","file","setFileError","message","error","updateProgress","addUploadErrors","closeUploadProgress","toggleMinimize","cancelUpload","setUploadFailed","retryCancelledFiles","actions","uploadProgressReducer","reducer"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var byteSize = require('byte-size');
4
+
5
+ function formatBytes(receivedBytes, decimals = 0) {
6
+ const realBytes = typeof receivedBytes === 'string' ? Number(receivedBytes) : receivedBytes;
7
+ const { value, unit } = byteSize(realBytes * 1000, {
8
+ precision: decimals
9
+ });
10
+ if (!unit) {
11
+ return '0B';
12
+ }
13
+ return `${value}${unit.toUpperCase()}`;
14
+ }
15
+ const getFileExtension = (ext)=>ext && ext[0] === '.' ? ext.substring(1) : ext;
16
+ const prefixFileUrlWithBackendUrl = (fileURL)=>{
17
+ return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;
18
+ };
19
+
20
+ exports.formatBytes = formatBytes;
21
+ exports.getFileExtension = getFileExtension;
22
+ exports.prefixFileUrlWithBackendUrl = prefixFileUrlWithBackendUrl;
23
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sources":["../../../../admin/src/future/utils/files.ts"],"sourcesContent":["import byteSize from 'byte-size';\n\nexport function formatBytes(receivedBytes: number | string, decimals = 0) {\n const realBytes = typeof receivedBytes === 'string' ? Number(receivedBytes) : receivedBytes;\n const { value, unit } = byteSize(realBytes * 1000, { precision: decimals });\n\n if (!unit) {\n return '0B';\n }\n\n return `${value}${unit.toUpperCase()}`;\n}\n\nexport const getFileExtension = (ext?: string | null) =>\n ext && ext[0] === '.' ? ext.substring(1) : ext;\n\nexport const prefixFileUrlWithBackendUrl = (fileURL?: string) => {\n return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;\n};\n"],"names":["formatBytes","receivedBytes","decimals","realBytes","Number","value","unit","byteSize","precision","toUpperCase","getFileExtension","ext","substring","prefixFileUrlWithBackendUrl","fileURL","startsWith","window","strapi","backendURL"],"mappings":";;;;AAEO,SAASA,WAAAA,CAAYC,aAA8B,EAAEC,WAAW,CAAC,EAAA;AACtE,IAAA,MAAMC,SAAY,GAAA,OAAOF,aAAkB,KAAA,QAAA,GAAWG,OAAOH,aAAiBA,CAAAA,GAAAA,aAAAA;IAC9E,MAAM,EAAEI,KAAK,EAAEC,IAAI,EAAE,GAAGC,QAAAA,CAASJ,YAAY,IAAM,EAAA;QAAEK,SAAWN,EAAAA;AAAS,KAAA,CAAA;AAEzE,IAAA,IAAI,CAACI,IAAM,EAAA;QACT,OAAO,IAAA;AACT;AAEA,IAAA,OAAO,CAAGD,EAAAA,KAAAA,CAAAA,EAAQC,IAAKG,CAAAA,WAAW,EAAI,CAAA,CAAA;AACxC;AAEaC,MAAAA,gBAAAA,GAAmB,CAACC,GAAAA,GAC/BA,OAAOA,GAAG,CAAC,CAAE,CAAA,KAAK,GAAMA,GAAAA,GAAAA,CAAIC,SAAS,CAAC,KAAKD;AAEtC,MAAME,8BAA8B,CAACC,OAAAA,GAAAA;AAC1C,IAAA,OAAO,CAAC,CAACA,OAAWA,IAAAA,OAAAA,CAAQC,UAAU,CAAC,GAAA,CAAA,GAAO,CAAGC,EAAAA,MAAAA,CAAOC,MAAM,CAACC,UAAU,CAAA,EAAGJ,SAAS,GAAGA,OAAAA;AAC1F;;;;;;"}
@@ -0,0 +1,19 @@
1
+ import byteSize from 'byte-size';
2
+
3
+ function formatBytes(receivedBytes, decimals = 0) {
4
+ const realBytes = typeof receivedBytes === 'string' ? Number(receivedBytes) : receivedBytes;
5
+ const { value, unit } = byteSize(realBytes * 1000, {
6
+ precision: decimals
7
+ });
8
+ if (!unit) {
9
+ return '0B';
10
+ }
11
+ return `${value}${unit.toUpperCase()}`;
12
+ }
13
+ const getFileExtension = (ext)=>ext && ext[0] === '.' ? ext.substring(1) : ext;
14
+ const prefixFileUrlWithBackendUrl = (fileURL)=>{
15
+ return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;
16
+ };
17
+
18
+ export { formatBytes, getFileExtension, prefixFileUrlWithBackendUrl };
19
+ //# sourceMappingURL=files.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.mjs","sources":["../../../../admin/src/future/utils/files.ts"],"sourcesContent":["import byteSize from 'byte-size';\n\nexport function formatBytes(receivedBytes: number | string, decimals = 0) {\n const realBytes = typeof receivedBytes === 'string' ? Number(receivedBytes) : receivedBytes;\n const { value, unit } = byteSize(realBytes * 1000, { precision: decimals });\n\n if (!unit) {\n return '0B';\n }\n\n return `${value}${unit.toUpperCase()}`;\n}\n\nexport const getFileExtension = (ext?: string | null) =>\n ext && ext[0] === '.' ? ext.substring(1) : ext;\n\nexport const prefixFileUrlWithBackendUrl = (fileURL?: string) => {\n return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;\n};\n"],"names":["formatBytes","receivedBytes","decimals","realBytes","Number","value","unit","byteSize","precision","toUpperCase","getFileExtension","ext","substring","prefixFileUrlWithBackendUrl","fileURL","startsWith","window","strapi","backendURL"],"mappings":";;AAEO,SAASA,WAAAA,CAAYC,aAA8B,EAAEC,WAAW,CAAC,EAAA;AACtE,IAAA,MAAMC,SAAY,GAAA,OAAOF,aAAkB,KAAA,QAAA,GAAWG,OAAOH,aAAiBA,CAAAA,GAAAA,aAAAA;IAC9E,MAAM,EAAEI,KAAK,EAAEC,IAAI,EAAE,GAAGC,QAAAA,CAASJ,YAAY,IAAM,EAAA;QAAEK,SAAWN,EAAAA;AAAS,KAAA,CAAA;AAEzE,IAAA,IAAI,CAACI,IAAM,EAAA;QACT,OAAO,IAAA;AACT;AAEA,IAAA,OAAO,CAAGD,EAAAA,KAAAA,CAAAA,EAAQC,IAAKG,CAAAA,WAAW,EAAI,CAAA,CAAA;AACxC;AAEaC,MAAAA,gBAAAA,GAAmB,CAACC,GAAAA,GAC/BA,OAAOA,GAAG,CAAC,CAAE,CAAA,KAAK,GAAMA,GAAAA,GAAAA,CAAIC,SAAS,CAAC,KAAKD;AAEtC,MAAME,8BAA8B,CAACC,OAAAA,GAAAA;AAC1C,IAAA,OAAO,CAAC,CAACA,OAAWA,IAAAA,OAAAA,CAAQC,UAAU,CAAC,GAAA,CAAA,GAAO,CAAGC,EAAAA,MAAAA,CAAOC,MAAM,CAACC,UAAU,CAAA,EAAGJ,SAAS,GAAGA,OAAAA;AAC1F;;;;"}
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ var icons = require('@strapi/icons');
4
+ var enums = require('../enums.js');
5
+ var files = require('./files.js');
6
+
7
+ const DOC_ICON_MAP = {
8
+ pdf: icons.FilePdf,
9
+ csv: icons.FileCsv,
10
+ xls: icons.FileXls,
11
+ zip: icons.FileZip
12
+ };
13
+ const getAssetIcon = (mime, ext)=>{
14
+ const fileExtension = files.getFileExtension(ext);
15
+ if (mime?.includes(enums.AssetType.Image)) {
16
+ return icons.Images;
17
+ }
18
+ if (mime?.includes(enums.AssetType.Video)) {
19
+ return icons.Monitor;
20
+ }
21
+ if (mime?.includes(enums.AssetType.Audio)) {
22
+ return icons.VolumeUp;
23
+ }
24
+ return fileExtension ? DOC_ICON_MAP[fileExtension] || icons.File : icons.File;
25
+ };
26
+
27
+ exports.getAssetIcon = getAssetIcon;
28
+ //# sourceMappingURL=getAssetIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAssetIcon.js","sources":["../../../../admin/src/future/utils/getAssetIcon.ts"],"sourcesContent":["import { SVGProps } from 'react';\n\nimport {\n File as FileIcon,\n FileCsv,\n FilePdf,\n FileXls,\n FileZip,\n Monitor,\n VolumeUp,\n Images,\n} from '@strapi/icons';\nimport { DefaultTheme } from 'styled-components';\n\nimport { AssetType } from '../enums';\n\nimport { getFileExtension } from './files';\n\n// NOTE: IconProps interface is not exported from our design library package, so we need to redefine it here\ninterface IconProps extends Omit<SVGProps<SVGSVGElement>, 'fill' | 'stroke'> {\n /**\n * @default \"currentColor\"\n */\n fill?: keyof DefaultTheme['colors'] | string;\n stroke?: keyof DefaultTheme['colors'] | string;\n}\n\ntype IconComponent = React.FC<IconProps>;\n\nconst DOC_ICON_MAP: Record<string, IconComponent> = {\n pdf: FilePdf,\n csv: FileCsv,\n xls: FileXls,\n zip: FileZip,\n};\n\nexport const getAssetIcon = (mime: string | undefined, ext: string | undefined): IconComponent => {\n const fileExtension = getFileExtension(ext);\n\n if (mime?.includes(AssetType.Image)) {\n return Images;\n }\n\n if (mime?.includes(AssetType.Video)) {\n return Monitor;\n }\n\n if (mime?.includes(AssetType.Audio)) {\n return VolumeUp;\n }\n\n return fileExtension ? DOC_ICON_MAP[fileExtension] || FileIcon : FileIcon;\n};\n"],"names":["DOC_ICON_MAP","pdf","FilePdf","csv","FileCsv","xls","FileXls","zip","FileZip","getAssetIcon","mime","ext","fileExtension","getFileExtension","includes","AssetType","Image","Images","Video","Monitor","Audio","VolumeUp","FileIcon"],"mappings":";;;;;;AA6BA,MAAMA,YAA8C,GAAA;IAClDC,GAAKC,EAAAA,aAAAA;IACLC,GAAKC,EAAAA,aAAAA;IACLC,GAAKC,EAAAA,aAAAA;IACLC,GAAKC,EAAAA;AACP,CAAA;AAEO,MAAMC,YAAe,GAAA,CAACC,IAA0BC,EAAAA,GAAAA,GAAAA;AACrD,IAAA,MAAMC,gBAAgBC,sBAAiBF,CAAAA,GAAAA,CAAAA;AAEvC,IAAA,IAAID,IAAMI,EAAAA,QAAAA,CAASC,eAAUC,CAAAA,KAAK,CAAG,EAAA;QACnC,OAAOC,YAAAA;AACT;AAEA,IAAA,IAAIP,IAAMI,EAAAA,QAAAA,CAASC,eAAUG,CAAAA,KAAK,CAAG,EAAA;QACnC,OAAOC,aAAAA;AACT;AAEA,IAAA,IAAIT,IAAMI,EAAAA,QAAAA,CAASC,eAAUK,CAAAA,KAAK,CAAG,EAAA;QACnC,OAAOC,cAAAA;AACT;AAEA,IAAA,OAAOT,aAAgBZ,GAAAA,YAAY,CAACY,aAAAA,CAAc,IAAIU,UAAWA,GAAAA,UAAAA;AACnE;;;;"}
@@ -0,0 +1,26 @@
1
+ import { Images, Monitor, VolumeUp, File, FilePdf, FileCsv, FileXls, FileZip } from '@strapi/icons';
2
+ import { AssetType } from '../enums.mjs';
3
+ import { getFileExtension } from './files.mjs';
4
+
5
+ const DOC_ICON_MAP = {
6
+ pdf: FilePdf,
7
+ csv: FileCsv,
8
+ xls: FileXls,
9
+ zip: FileZip
10
+ };
11
+ const getAssetIcon = (mime, ext)=>{
12
+ const fileExtension = getFileExtension(ext);
13
+ if (mime?.includes(AssetType.Image)) {
14
+ return Images;
15
+ }
16
+ if (mime?.includes(AssetType.Video)) {
17
+ return Monitor;
18
+ }
19
+ if (mime?.includes(AssetType.Audio)) {
20
+ return VolumeUp;
21
+ }
22
+ return fileExtension ? DOC_ICON_MAP[fileExtension] || File : File;
23
+ };
24
+
25
+ export { getAssetIcon };
26
+ //# sourceMappingURL=getAssetIcon.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAssetIcon.mjs","sources":["../../../../admin/src/future/utils/getAssetIcon.ts"],"sourcesContent":["import { SVGProps } from 'react';\n\nimport {\n File as FileIcon,\n FileCsv,\n FilePdf,\n FileXls,\n FileZip,\n Monitor,\n VolumeUp,\n Images,\n} from '@strapi/icons';\nimport { DefaultTheme } from 'styled-components';\n\nimport { AssetType } from '../enums';\n\nimport { getFileExtension } from './files';\n\n// NOTE: IconProps interface is not exported from our design library package, so we need to redefine it here\ninterface IconProps extends Omit<SVGProps<SVGSVGElement>, 'fill' | 'stroke'> {\n /**\n * @default \"currentColor\"\n */\n fill?: keyof DefaultTheme['colors'] | string;\n stroke?: keyof DefaultTheme['colors'] | string;\n}\n\ntype IconComponent = React.FC<IconProps>;\n\nconst DOC_ICON_MAP: Record<string, IconComponent> = {\n pdf: FilePdf,\n csv: FileCsv,\n xls: FileXls,\n zip: FileZip,\n};\n\nexport const getAssetIcon = (mime: string | undefined, ext: string | undefined): IconComponent => {\n const fileExtension = getFileExtension(ext);\n\n if (mime?.includes(AssetType.Image)) {\n return Images;\n }\n\n if (mime?.includes(AssetType.Video)) {\n return Monitor;\n }\n\n if (mime?.includes(AssetType.Audio)) {\n return VolumeUp;\n }\n\n return fileExtension ? DOC_ICON_MAP[fileExtension] || FileIcon : FileIcon;\n};\n"],"names":["DOC_ICON_MAP","pdf","FilePdf","csv","FileCsv","xls","FileXls","zip","FileZip","getAssetIcon","mime","ext","fileExtension","getFileExtension","includes","AssetType","Image","Images","Video","Monitor","Audio","VolumeUp","FileIcon"],"mappings":";;;;AA6BA,MAAMA,YAA8C,GAAA;IAClDC,GAAKC,EAAAA,OAAAA;IACLC,GAAKC,EAAAA,OAAAA;IACLC,GAAKC,EAAAA,OAAAA;IACLC,GAAKC,EAAAA;AACP,CAAA;AAEO,MAAMC,YAAe,GAAA,CAACC,IAA0BC,EAAAA,GAAAA,GAAAA;AACrD,IAAA,MAAMC,gBAAgBC,gBAAiBF,CAAAA,GAAAA,CAAAA;AAEvC,IAAA,IAAID,IAAMI,EAAAA,QAAAA,CAASC,SAAUC,CAAAA,KAAK,CAAG,EAAA;QACnC,OAAOC,MAAAA;AACT;AAEA,IAAA,IAAIP,IAAMI,EAAAA,QAAAA,CAASC,SAAUG,CAAAA,KAAK,CAAG,EAAA;QACnC,OAAOC,OAAAA;AACT;AAEA,IAAA,IAAIT,IAAMI,EAAAA,QAAAA,CAASC,SAAUK,CAAAA,KAAK,CAAG,EAAA;QACnC,OAAOC,QAAAA;AACT;AAEA,IAAA,OAAOT,aAAgBZ,GAAAA,YAAY,CAACY,aAAAA,CAAc,IAAIU,IAAWA,GAAAA,IAAAA;AACnE;;;;"}
@@ -5,6 +5,8 @@ var _package = require('./package.json.js');
5
5
  var MediaLibraryDialog = require('./components/MediaLibraryDialog/MediaLibraryDialog.js');
6
6
  var MediaLibraryInput = require('./components/MediaLibraryInput/MediaLibraryInput.js');
7
7
  var constants = require('./constants.js');
8
+ var UploadProgressDialog = require('./future/components/UploadProgressDialog.js');
9
+ var uploadProgress = require('./future/store/uploadProgress.js');
8
10
  var pluginId = require('./pluginId.js');
9
11
  require('byte-size');
10
12
  require('date-fns');
@@ -65,6 +67,15 @@ const admin = {
65
67
  position: 4
66
68
  });
67
69
  if (window.strapi.future.isEnabled('unstableMediaLibrary')) {
70
+ app.addReducers({
71
+ uploadProgress: uploadProgress.uploadProgressReducer
72
+ });
73
+ app.addComponents([
74
+ {
75
+ name: 'future-global::upload-progress',
76
+ Component: UploadProgressDialog.UploadProgressDialog
77
+ }
78
+ ]);
68
79
  app.addMenuLink({
69
80
  to: `plugins/unstable-${pluginId.pluginId}`,
70
81
  icon: icons.WarningCircle,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../admin/src/index.ts"],"sourcesContent":["import { Images, WarningCircle } from '@strapi/icons';\n\nimport pluginPkg from '../../package.json';\n\nimport { MediaLibraryDialog } from './components/MediaLibraryDialog/MediaLibraryDialog';\nimport { MediaLibraryInput } from './components/MediaLibraryInput/MediaLibraryInput';\nimport { PERMISSIONS } from './constants';\nimport { pluginId } from './pluginId';\nimport { getTrad, prefixPluginTranslations } from './utils';\n\nimport type { MediaLibraryDialogProps } from './components/MediaLibraryDialog/MediaLibraryDialog';\nimport type { MediaLibraryInputProps } from './components/MediaLibraryInput/MediaLibraryInput';\nimport type { StrapiApp } from '@strapi/admin/strapi-admin';\nimport type { Plugin } from '@strapi/types';\n\nconst name = pluginPkg.strapi.name;\n\nconst admin: Plugin.Config.AdminInput = {\n register(app: StrapiApp) {\n app.addMenuLink({\n to: `plugins/${pluginId}`,\n icon: Images,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Media Library',\n },\n permissions: PERMISSIONS.main,\n Component: () => {\n return import('./pages/App/App').then((mod) => ({ default: mod.Upload }));\n },\n position: 4,\n });\n\n if (window.strapi.future.isEnabled('unstableMediaLibrary')) {\n app.addMenuLink({\n to: `plugins/unstable-${pluginId}`,\n icon: WarningCircle,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Media Library',\n },\n permissions: PERMISSIONS.main,\n Component: () => {\n return import('./future/App').then((mod) => ({\n default: mod.UnstableMediaLibrary,\n }));\n },\n position: 5,\n });\n }\n\n app.addSettingsLink('global', {\n id: 'media-library-settings',\n to: 'media-library',\n intlLabel: {\n id: getTrad('plugin.name'),\n defaultMessage: 'Media Library',\n },\n async Component() {\n const { ProtectedSettingsPage } = await import('./pages/SettingsPage/SettingsPage');\n return { default: ProtectedSettingsPage };\n },\n permissions: PERMISSIONS.settings,\n });\n\n app.addFields({\n type: 'media',\n Component: MediaLibraryInput as React.FC<Partial<MediaLibraryInputProps>>,\n });\n app.addComponents([\n {\n name: 'media-library',\n Component: MediaLibraryDialog as React.FC<Partial<MediaLibraryDialogProps>>,\n },\n ]);\n\n app.registerPlugin({\n id: pluginId,\n name,\n });\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["name","pluginPkg","strapi","admin","register","app","addMenuLink","to","pluginId","icon","Images","intlLabel","id","defaultMessage","permissions","PERMISSIONS","main","Component","then","mod","default","Upload","position","window","future","isEnabled","WarningCircle","UnstableMediaLibrary","addSettingsLink","getTrad","ProtectedSettingsPage","settings","addFields","type","MediaLibraryInput","addComponents","MediaLibraryDialog","registerPlugin","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../admin/src/index.ts"],"sourcesContent":["import { Images, WarningCircle } from '@strapi/icons';\n\nimport pluginPkg from '../../package.json';\n\nimport { MediaLibraryDialog } from './components/MediaLibraryDialog/MediaLibraryDialog';\nimport { MediaLibraryInput } from './components/MediaLibraryInput/MediaLibraryInput';\nimport { PERMISSIONS } from './constants';\nimport { UploadProgressDialog } from './future/components/UploadProgressDialog';\nimport { uploadProgressReducer } from './future/store/uploadProgress';\nimport { pluginId } from './pluginId';\nimport { getTrad, prefixPluginTranslations } from './utils';\n\nimport type { MediaLibraryDialogProps } from './components/MediaLibraryDialog/MediaLibraryDialog';\nimport type { MediaLibraryInputProps } from './components/MediaLibraryInput/MediaLibraryInput';\nimport type { StrapiApp } from '@strapi/admin/strapi-admin';\nimport type { Plugin } from '@strapi/types';\n\nconst name = pluginPkg.strapi.name;\n\nconst admin: Plugin.Config.AdminInput = {\n register(app: StrapiApp) {\n app.addMenuLink({\n to: `plugins/${pluginId}`,\n icon: Images,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Media Library',\n },\n permissions: PERMISSIONS.main,\n Component: () => {\n return import('./pages/App/App').then((mod) => ({ default: mod.Upload }));\n },\n position: 4,\n });\n\n if (window.strapi.future.isEnabled('unstableMediaLibrary')) {\n app.addReducers({ uploadProgress: uploadProgressReducer });\n\n app.addComponents([\n {\n name: 'future-global::upload-progress',\n Component: UploadProgressDialog,\n },\n ]);\n\n app.addMenuLink({\n to: `plugins/unstable-${pluginId}`,\n icon: WarningCircle,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Media Library',\n },\n permissions: PERMISSIONS.main,\n Component: () => {\n return import('./future/App').then((mod) => ({\n default: mod.UnstableMediaLibrary,\n }));\n },\n position: 5,\n });\n }\n\n app.addSettingsLink('global', {\n id: 'media-library-settings',\n to: 'media-library',\n intlLabel: {\n id: getTrad('plugin.name'),\n defaultMessage: 'Media Library',\n },\n async Component() {\n const { ProtectedSettingsPage } = await import('./pages/SettingsPage/SettingsPage');\n return { default: ProtectedSettingsPage };\n },\n permissions: PERMISSIONS.settings,\n });\n\n app.addFields({\n type: 'media',\n Component: MediaLibraryInput as React.FC<Partial<MediaLibraryInputProps>>,\n });\n app.addComponents([\n {\n name: 'media-library',\n Component: MediaLibraryDialog as React.FC<Partial<MediaLibraryDialogProps>>,\n },\n ]);\n\n app.registerPlugin({\n id: pluginId,\n name,\n });\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["name","pluginPkg","strapi","admin","register","app","addMenuLink","to","pluginId","icon","Images","intlLabel","id","defaultMessage","permissions","PERMISSIONS","main","Component","then","mod","default","Upload","position","window","future","isEnabled","addReducers","uploadProgress","uploadProgressReducer","addComponents","UploadProgressDialog","WarningCircle","UnstableMediaLibrary","addSettingsLink","getTrad","ProtectedSettingsPage","settings","addFields","type","MediaLibraryInput","MediaLibraryDialog","registerPlugin","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,MAAMA,IAAOC,GAAAA,gBAAAA,CAAUC,MAAM,CAACF,IAAI;AAElC,MAAMG,KAAkC,GAAA;AACtCC,IAAAA,QAAAA,CAAAA,CAASC,GAAc,EAAA;AACrBA,QAAAA,GAAAA,CAAIC,WAAW,CAAC;YACdC,EAAI,EAAA,CAAC,QAAQ,EAAEC,iBAAU,CAAA,CAAA;YACzBC,IAAMC,EAAAA,YAAAA;YACNC,SAAW,EAAA;gBACTC,EAAI,EAAA,CAAA,EAAGJ,iBAAS,CAAA,YAAY,CAAC;gBAC7BK,cAAgB,EAAA;AAClB,aAAA;AACAC,YAAAA,WAAAA,EAAaC,sBAAYC,IAAI;YAC7BC,SAAW,EAAA,IAAA;AACT,gBAAA,OAAO,oDAAO,oBAAA,KAAA,CAAmBC,IAAI,CAAC,CAACC,OAAS;AAAEC,wBAAAA,OAAAA,EAASD,IAAIE;qBAAO,CAAA,CAAA;AACxE,aAAA;YACAC,QAAU,EAAA;AACZ,SAAA,CAAA;AAEA,QAAA,IAAIC,OAAOrB,MAAM,CAACsB,MAAM,CAACC,SAAS,CAAC,sBAAyB,CAAA,EAAA;AAC1DpB,YAAAA,GAAAA,CAAIqB,WAAW,CAAC;gBAAEC,cAAgBC,EAAAA;AAAsB,aAAA,CAAA;AAExDvB,YAAAA,GAAAA,CAAIwB,aAAa,CAAC;AAChB,gBAAA;oBACE7B,IAAM,EAAA,gCAAA;oBACNiB,SAAWa,EAAAA;AACb;AACD,aAAA,CAAA;AAEDzB,YAAAA,GAAAA,CAAIC,WAAW,CAAC;gBACdC,EAAI,EAAA,CAAC,iBAAiB,EAAEC,iBAAU,CAAA,CAAA;gBAClCC,IAAMsB,EAAAA,mBAAAA;gBACNpB,SAAW,EAAA;oBACTC,EAAI,EAAA,CAAA,EAAGJ,iBAAS,CAAA,YAAY,CAAC;oBAC7BK,cAAgB,EAAA;AAClB,iBAAA;AACAC,gBAAAA,WAAAA,EAAaC,sBAAYC,IAAI;gBAC7BC,SAAW,EAAA,IAAA;AACT,oBAAA,OAAO,oDAAO,iBAAA,KAAA,CAAgBC,IAAI,CAAC,CAACC,OAAS;AAC3CC,4BAAAA,OAAAA,EAASD,IAAIa;yBACf,CAAA,CAAA;AACF,iBAAA;gBACAV,QAAU,EAAA;AACZ,aAAA,CAAA;AACF;QAEAjB,GAAI4B,CAAAA,eAAe,CAAC,QAAU,EAAA;YAC5BrB,EAAI,EAAA,wBAAA;YACJL,EAAI,EAAA,eAAA;YACJI,SAAW,EAAA;AACTC,gBAAAA,EAAAA,EAAIsB,eAAQ,CAAA,aAAA,CAAA;gBACZrB,cAAgB,EAAA;AAClB,aAAA;YACA,MAAMI,SAAAA,CAAAA,GAAAA;AACJ,gBAAA,MAAM,EAAEkB,qBAAqB,EAAE,GAAG,MAAM,oDAAO,sCAAA,KAAA;gBAC/C,OAAO;oBAAEf,OAASe,EAAAA;AAAsB,iBAAA;AAC1C,aAAA;AACArB,YAAAA,WAAAA,EAAaC,sBAAYqB;AAC3B,SAAA,CAAA;AAEA/B,QAAAA,GAAAA,CAAIgC,SAAS,CAAC;YACZC,IAAM,EAAA,OAAA;YACNrB,SAAWsB,EAAAA;AACb,SAAA,CAAA;AACAlC,QAAAA,GAAAA,CAAIwB,aAAa,CAAC;AAChB,YAAA;gBACE7B,IAAM,EAAA,eAAA;gBACNiB,SAAWuB,EAAAA;AACb;AACD,SAAA,CAAA;AAEDnC,QAAAA,GAAAA,CAAIoC,cAAc,CAAC;YACjB7B,EAAIJ,EAAAA,iBAAAA;AACJR,YAAAA;AACF,SAAA,CAAA;AACF,KAAA;IACA,MAAM0C,aAAAA,CAAAA,CAAc,EAAEC,OAAO,EAAyB,EAAA;QACpD,MAAMC,aAAAA,GAAgB,MAAMC,OAAQC,CAAAA,GAAG,CACrCH,OAAQI,CAAAA,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACX,YAAA,OAAO,iCAAM,CAAC,CAAC,eAAe,EAAEA,MAAO,CAAA,KAAK,CAAC,CAAA,CAC1C9B,IAAI,CAAC,CAAC,EAAEE,OAAAA,EAAS6B,IAAI,EAAE,GAAA;gBACtB,OAAO;AACLA,oBAAAA,IAAAA,EAAMC,kDAAyBD,IAAMzC,EAAAA,iBAAAA,CAAAA;AACrCwC,oBAAAA;AACF,iBAAA;AACF,aAAA,CAAA,CACCG,KAAK,CAAC,IAAA;gBACL,OAAO;AACLF,oBAAAA,IAAAA,EAAM,EAAC;AACPD,oBAAAA;AACF,iBAAA;AACF,aAAA,CAAA;AACJ,SAAA,CAAA,CAAA;QAGF,OAAOH,OAAAA,CAAQO,OAAO,CAACR,aAAAA,CAAAA;AACzB;AACF;;;;"}
@@ -3,6 +3,8 @@ import pluginPkg from './package.json.mjs';
3
3
  import { MediaLibraryDialog } from './components/MediaLibraryDialog/MediaLibraryDialog.mjs';
4
4
  import { MediaLibraryInput } from './components/MediaLibraryInput/MediaLibraryInput.mjs';
5
5
  import { PERMISSIONS } from './constants.mjs';
6
+ import { UploadProgressDialog } from './future/components/UploadProgressDialog.mjs';
7
+ import { uploadProgressReducer } from './future/store/uploadProgress.mjs';
6
8
  import { pluginId } from './pluginId.mjs';
7
9
  import 'byte-size';
8
10
  import 'date-fns';
@@ -61,6 +63,15 @@ const admin = {
61
63
  position: 4
62
64
  });
63
65
  if (window.strapi.future.isEnabled('unstableMediaLibrary')) {
66
+ app.addReducers({
67
+ uploadProgress: uploadProgressReducer
68
+ });
69
+ app.addComponents([
70
+ {
71
+ name: 'future-global::upload-progress',
72
+ Component: UploadProgressDialog
73
+ }
74
+ ]);
64
75
  app.addMenuLink({
65
76
  to: `plugins/unstable-${pluginId}`,
66
77
  icon: WarningCircle,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../admin/src/index.ts"],"sourcesContent":["import { Images, WarningCircle } from '@strapi/icons';\n\nimport pluginPkg from '../../package.json';\n\nimport { MediaLibraryDialog } from './components/MediaLibraryDialog/MediaLibraryDialog';\nimport { MediaLibraryInput } from './components/MediaLibraryInput/MediaLibraryInput';\nimport { PERMISSIONS } from './constants';\nimport { pluginId } from './pluginId';\nimport { getTrad, prefixPluginTranslations } from './utils';\n\nimport type { MediaLibraryDialogProps } from './components/MediaLibraryDialog/MediaLibraryDialog';\nimport type { MediaLibraryInputProps } from './components/MediaLibraryInput/MediaLibraryInput';\nimport type { StrapiApp } from '@strapi/admin/strapi-admin';\nimport type { Plugin } from '@strapi/types';\n\nconst name = pluginPkg.strapi.name;\n\nconst admin: Plugin.Config.AdminInput = {\n register(app: StrapiApp) {\n app.addMenuLink({\n to: `plugins/${pluginId}`,\n icon: Images,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Media Library',\n },\n permissions: PERMISSIONS.main,\n Component: () => {\n return import('./pages/App/App').then((mod) => ({ default: mod.Upload }));\n },\n position: 4,\n });\n\n if (window.strapi.future.isEnabled('unstableMediaLibrary')) {\n app.addMenuLink({\n to: `plugins/unstable-${pluginId}`,\n icon: WarningCircle,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Media Library',\n },\n permissions: PERMISSIONS.main,\n Component: () => {\n return import('./future/App').then((mod) => ({\n default: mod.UnstableMediaLibrary,\n }));\n },\n position: 5,\n });\n }\n\n app.addSettingsLink('global', {\n id: 'media-library-settings',\n to: 'media-library',\n intlLabel: {\n id: getTrad('plugin.name'),\n defaultMessage: 'Media Library',\n },\n async Component() {\n const { ProtectedSettingsPage } = await import('./pages/SettingsPage/SettingsPage');\n return { default: ProtectedSettingsPage };\n },\n permissions: PERMISSIONS.settings,\n });\n\n app.addFields({\n type: 'media',\n Component: MediaLibraryInput as React.FC<Partial<MediaLibraryInputProps>>,\n });\n app.addComponents([\n {\n name: 'media-library',\n Component: MediaLibraryDialog as React.FC<Partial<MediaLibraryDialogProps>>,\n },\n ]);\n\n app.registerPlugin({\n id: pluginId,\n name,\n });\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["name","pluginPkg","strapi","admin","register","app","addMenuLink","to","pluginId","icon","Images","intlLabel","id","defaultMessage","permissions","PERMISSIONS","main","Component","then","mod","default","Upload","position","window","future","isEnabled","WarningCircle","UnstableMediaLibrary","addSettingsLink","getTrad","ProtectedSettingsPage","settings","addFields","type","MediaLibraryInput","addComponents","MediaLibraryDialog","registerPlugin","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../admin/src/index.ts"],"sourcesContent":["import { Images, WarningCircle } from '@strapi/icons';\n\nimport pluginPkg from '../../package.json';\n\nimport { MediaLibraryDialog } from './components/MediaLibraryDialog/MediaLibraryDialog';\nimport { MediaLibraryInput } from './components/MediaLibraryInput/MediaLibraryInput';\nimport { PERMISSIONS } from './constants';\nimport { UploadProgressDialog } from './future/components/UploadProgressDialog';\nimport { uploadProgressReducer } from './future/store/uploadProgress';\nimport { pluginId } from './pluginId';\nimport { getTrad, prefixPluginTranslations } from './utils';\n\nimport type { MediaLibraryDialogProps } from './components/MediaLibraryDialog/MediaLibraryDialog';\nimport type { MediaLibraryInputProps } from './components/MediaLibraryInput/MediaLibraryInput';\nimport type { StrapiApp } from '@strapi/admin/strapi-admin';\nimport type { Plugin } from '@strapi/types';\n\nconst name = pluginPkg.strapi.name;\n\nconst admin: Plugin.Config.AdminInput = {\n register(app: StrapiApp) {\n app.addMenuLink({\n to: `plugins/${pluginId}`,\n icon: Images,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Media Library',\n },\n permissions: PERMISSIONS.main,\n Component: () => {\n return import('./pages/App/App').then((mod) => ({ default: mod.Upload }));\n },\n position: 4,\n });\n\n if (window.strapi.future.isEnabled('unstableMediaLibrary')) {\n app.addReducers({ uploadProgress: uploadProgressReducer });\n\n app.addComponents([\n {\n name: 'future-global::upload-progress',\n Component: UploadProgressDialog,\n },\n ]);\n\n app.addMenuLink({\n to: `plugins/unstable-${pluginId}`,\n icon: WarningCircle,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Media Library',\n },\n permissions: PERMISSIONS.main,\n Component: () => {\n return import('./future/App').then((mod) => ({\n default: mod.UnstableMediaLibrary,\n }));\n },\n position: 5,\n });\n }\n\n app.addSettingsLink('global', {\n id: 'media-library-settings',\n to: 'media-library',\n intlLabel: {\n id: getTrad('plugin.name'),\n defaultMessage: 'Media Library',\n },\n async Component() {\n const { ProtectedSettingsPage } = await import('./pages/SettingsPage/SettingsPage');\n return { default: ProtectedSettingsPage };\n },\n permissions: PERMISSIONS.settings,\n });\n\n app.addFields({\n type: 'media',\n Component: MediaLibraryInput as React.FC<Partial<MediaLibraryInputProps>>,\n });\n app.addComponents([\n {\n name: 'media-library',\n Component: MediaLibraryDialog as React.FC<Partial<MediaLibraryDialogProps>>,\n },\n ]);\n\n app.registerPlugin({\n id: pluginId,\n name,\n });\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["name","pluginPkg","strapi","admin","register","app","addMenuLink","to","pluginId","icon","Images","intlLabel","id","defaultMessage","permissions","PERMISSIONS","main","Component","then","mod","default","Upload","position","window","future","isEnabled","addReducers","uploadProgress","uploadProgressReducer","addComponents","UploadProgressDialog","WarningCircle","UnstableMediaLibrary","addSettingsLink","getTrad","ProtectedSettingsPage","settings","addFields","type","MediaLibraryInput","MediaLibraryDialog","registerPlugin","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}