@strapi/upload 5.26.0 → 5.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/dist/admin/ai/components/AIAssetCard.js +589 -0
  2. package/dist/admin/ai/components/AIAssetCard.js.map +1 -0
  3. package/dist/admin/ai/components/AIAssetCard.mjs +567 -0
  4. package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -0
  5. package/dist/admin/ai/components/AIUploadModal.js +363 -0
  6. package/dist/admin/ai/components/AIUploadModal.js.map +1 -0
  7. package/dist/admin/ai/components/AIUploadModal.mjs +341 -0
  8. package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -0
  9. package/dist/admin/components/AssetDialog/AssetDialog.js +1 -1
  10. package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -1
  11. package/dist/admin/components/AssetDialog/AssetDialog.mjs +1 -1
  12. package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -1
  13. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +3 -3
  14. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -1
  15. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +4 -4
  16. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -1
  17. package/dist/admin/components/EditAssetDialog/EditAssetContent.js +5 -5
  18. package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
  19. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +5 -5
  20. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
  21. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js +2 -1
  22. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +1 -1
  23. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs +2 -1
  24. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs.map +1 -1
  25. package/dist/admin/components/SelectTree/utils/flattenTree.js +11 -6
  26. package/dist/admin/components/SelectTree/utils/flattenTree.js.map +1 -1
  27. package/dist/admin/components/SelectTree/utils/flattenTree.mjs +11 -6
  28. package/dist/admin/components/SelectTree/utils/flattenTree.mjs.map +1 -1
  29. package/dist/admin/hooks/useAiAvailability.js +22 -0
  30. package/dist/admin/hooks/useAiAvailability.js.map +1 -0
  31. package/dist/admin/hooks/useAiAvailability.mjs +20 -0
  32. package/dist/admin/hooks/useAiAvailability.mjs.map +1 -0
  33. package/dist/admin/hooks/useBulkEdit.js +66 -0
  34. package/dist/admin/hooks/useBulkEdit.js.map +1 -0
  35. package/dist/admin/hooks/useBulkEdit.mjs +64 -0
  36. package/dist/admin/hooks/useBulkEdit.mjs.map +1 -0
  37. package/dist/admin/hooks/useSettings.js +22 -0
  38. package/dist/admin/hooks/useSettings.js.map +1 -0
  39. package/dist/admin/hooks/useSettings.mjs +20 -0
  40. package/dist/admin/hooks/useSettings.mjs.map +1 -0
  41. package/dist/admin/hooks/useUpload.js +25 -14
  42. package/dist/admin/hooks/useUpload.js.map +1 -1
  43. package/dist/admin/hooks/useUpload.mjs +25 -14
  44. package/dist/admin/hooks/useUpload.mjs.map +1 -1
  45. package/dist/admin/package.json.js +5 -5
  46. package/dist/admin/package.json.mjs +5 -5
  47. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +0 -1
  48. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
  49. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +0 -1
  50. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
  51. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +19 -5
  52. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -1
  53. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +19 -5
  54. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -1
  55. package/dist/admin/pages/SettingsPage/SettingsPage.js +222 -144
  56. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  57. package/dist/admin/pages/SettingsPage/SettingsPage.mjs +225 -147
  58. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  59. package/dist/admin/pages/SettingsPage/reducer.js +9 -10
  60. package/dist/admin/pages/SettingsPage/reducer.js.map +1 -1
  61. package/dist/admin/pages/SettingsPage/reducer.mjs +9 -10
  62. package/dist/admin/pages/SettingsPage/reducer.mjs.map +1 -1
  63. package/dist/admin/src/ai/components/AIAssetCard.d.ts +13 -0
  64. package/dist/admin/src/ai/components/AIUploadModal.d.ts +55 -0
  65. package/dist/admin/src/components/EditAssetDialog/EditAssetContent.d.ts +3 -1
  66. package/dist/admin/src/components/SelectTree/utils/flattenTree.d.ts +3 -1
  67. package/dist/admin/src/hooks/useAiAvailability.d.ts +4 -0
  68. package/dist/admin/src/hooks/useBulkEdit.d.ts +91 -0
  69. package/dist/admin/src/hooks/useSettings.d.ts +7 -0
  70. package/dist/admin/src/hooks/useUpload.d.ts +1 -1
  71. package/dist/admin/src/pages/SettingsPage/reducer.d.ts +3 -12
  72. package/dist/admin/translations/en.json.js +7 -1
  73. package/dist/admin/translations/en.json.js.map +1 -1
  74. package/dist/admin/translations/en.json.mjs +7 -1
  75. package/dist/admin/translations/en.json.mjs.map +1 -1
  76. package/dist/admin/utils/getFolderParents.js +2 -1
  77. package/dist/admin/utils/getFolderParents.js.map +1 -1
  78. package/dist/admin/utils/getFolderParents.mjs +2 -1
  79. package/dist/admin/utils/getFolderParents.mjs.map +1 -1
  80. package/dist/server/bootstrap.js +2 -1
  81. package/dist/server/bootstrap.js.map +1 -1
  82. package/dist/server/bootstrap.mjs +2 -1
  83. package/dist/server/bootstrap.mjs.map +1 -1
  84. package/dist/server/controllers/admin-upload.js +57 -2
  85. package/dist/server/controllers/admin-upload.js.map +1 -1
  86. package/dist/server/controllers/admin-upload.mjs +59 -4
  87. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  88. package/dist/server/controllers/content-api.js +3 -1
  89. package/dist/server/controllers/content-api.js.map +1 -1
  90. package/dist/server/controllers/content-api.mjs +3 -1
  91. package/dist/server/controllers/content-api.mjs.map +1 -1
  92. package/dist/server/controllers/validation/admin/settings.js +2 -1
  93. package/dist/server/controllers/validation/admin/settings.js.map +1 -1
  94. package/dist/server/controllers/validation/admin/settings.mjs +2 -1
  95. package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
  96. package/dist/server/controllers/validation/admin/upload.js +8 -0
  97. package/dist/server/controllers/validation/admin/upload.js.map +1 -1
  98. package/dist/server/controllers/validation/admin/upload.mjs +8 -1
  99. package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
  100. package/dist/server/routes/admin.js +18 -0
  101. package/dist/server/routes/admin.js.map +1 -1
  102. package/dist/server/routes/admin.mjs +18 -0
  103. package/dist/server/routes/admin.mjs.map +1 -1
  104. package/dist/server/services/ai-metadata.js +97 -0
  105. package/dist/server/services/ai-metadata.js.map +1 -0
  106. package/dist/server/services/ai-metadata.mjs +95 -0
  107. package/dist/server/services/ai-metadata.mjs.map +1 -0
  108. package/dist/server/services/index.js +3 -1
  109. package/dist/server/services/index.js.map +1 -1
  110. package/dist/server/services/index.mjs +3 -1
  111. package/dist/server/services/index.mjs.map +1 -1
  112. package/dist/server/services/upload.js.map +1 -1
  113. package/dist/server/services/upload.mjs.map +1 -1
  114. package/dist/server/services/weekly-metrics.js +5 -1
  115. package/dist/server/services/weekly-metrics.js.map +1 -1
  116. package/dist/server/services/weekly-metrics.mjs +5 -1
  117. package/dist/server/services/weekly-metrics.mjs.map +1 -1
  118. package/dist/server/src/bootstrap.d.ts.map +1 -1
  119. package/dist/server/src/controllers/admin-upload.d.ts +1 -0
  120. package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
  121. package/dist/server/src/controllers/index.d.ts +1 -0
  122. package/dist/server/src/controllers/index.d.ts.map +1 -1
  123. package/dist/server/src/controllers/validation/admin/settings.d.ts +3 -0
  124. package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
  125. package/dist/server/src/controllers/validation/admin/upload.d.ts +42 -0
  126. package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
  127. package/dist/server/src/index.d.ts +14 -1
  128. package/dist/server/src/index.d.ts.map +1 -1
  129. package/dist/server/src/routes/admin.d.ts.map +1 -1
  130. package/dist/server/src/services/ai-metadata.d.ts +13 -0
  131. package/dist/server/src/services/ai-metadata.d.ts.map +1 -0
  132. package/dist/server/src/services/index.d.ts +13 -1
  133. package/dist/server/src/services/index.d.ts.map +1 -1
  134. package/dist/server/src/services/upload.d.ts +2 -1
  135. package/dist/server/src/services/upload.d.ts.map +1 -1
  136. package/dist/server/src/services/weekly-metrics.d.ts +1 -0
  137. package/dist/server/src/services/weekly-metrics.d.ts.map +1 -1
  138. package/dist/server/src/types.d.ts +1 -0
  139. package/dist/server/src/types.d.ts.map +1 -1
  140. package/dist/server/src/utils/index.d.ts +2 -0
  141. package/dist/server/src/utils/index.d.ts.map +1 -1
  142. package/dist/server/utils/index.js.map +1 -1
  143. package/dist/server/utils/index.mjs.map +1 -1
  144. package/dist/shared/contracts/files.d.ts +22 -0
  145. package/dist/shared/contracts/settings.d.ts +2 -0
  146. package/package.json +5 -5
@@ -3,12 +3,14 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var strapiAdmin = require('@strapi/admin/strapi-admin');
6
+ var ee = require('@strapi/admin/strapi-admin/ee');
6
7
  var designSystem = require('@strapi/design-system');
7
8
  var icons = require('@strapi/icons');
8
9
  var isEqual = require('lodash/isEqual');
9
10
  var reactIntl = require('react-intl');
10
11
  var reactQuery = require('react-query');
11
12
  var constants = require('../../constants.js');
13
+ var useSettings = require('../../hooks/useSettings.js');
12
14
  require('byte-size');
13
15
  require('date-fns');
14
16
  var getTrad = require('../../utils/getTrad.js');
@@ -40,18 +42,10 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
40
42
  const SettingsPage = ()=>{
41
43
  const { formatMessage } = reactIntl.useIntl();
42
44
  const { toggleNotification } = strapiAdmin.useNotification();
43
- const { get, put } = strapiAdmin.useFetchClient();
45
+ const { put } = strapiAdmin.useFetchClient();
44
46
  const [{ initialData, modifiedData }, dispatch] = React__namespace.useReducer(reducer.reducer, reducer.initialState, init.init);
45
- const { data, isLoading, refetch } = reactQuery.useQuery({
46
- queryKey: [
47
- 'upload',
48
- 'settings'
49
- ],
50
- async queryFn () {
51
- const { data: { data } } = await get('/upload/settings');
52
- return data;
53
- }
54
- });
47
+ const { data, isLoading, refetch } = useSettings.useSettings();
48
+ const isAIAvailable = ee.useAIAvailability();
55
49
  React__namespace.useEffect(()=>{
56
50
  if (data) {
57
51
  dispatch({
@@ -103,7 +97,7 @@ const SettingsPage = ()=>{
103
97
  /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Title, {
104
98
  children: formatMessage({
105
99
  id: getTrad.getTrad('page.title'),
106
- defaultMessage: 'Settings - Media Libray'
100
+ defaultMessage: 'Settings - Media Library'
107
101
  })
108
102
  }),
109
103
  /*#__PURE__*/ jsxRuntime.jsxs("form", {
@@ -132,161 +126,245 @@ const SettingsPage = ()=>{
132
126
  }),
133
127
  /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Content, {
134
128
  children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Root, {
135
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
129
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
136
130
  direction: "column",
137
131
  alignItems: "stretch",
138
- gap: 12,
139
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
140
- background: "neutral0",
141
- padding: 6,
142
- shadow: "filterShadow",
143
- hasRadius: true,
144
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
145
- direction: "column",
146
- alignItems: "stretch",
147
- gap: 4,
148
- children: [
149
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
150
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
151
- variant: "delta",
152
- tag: "h2",
153
- children: formatMessage({
154
- id: getTrad.getTrad('settings.blockTitle'),
155
- defaultMessage: 'Asset management'
156
- })
157
- })
158
- }),
159
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Root, {
132
+ gap: 4,
133
+ children: [
134
+ isAIAvailable && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
135
+ background: "neutral0",
136
+ padding: 6,
137
+ shadow: "filterShadow",
138
+ hasRadius: true,
139
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
140
+ direction: "column",
141
+ alignItems: "stretch",
142
+ gap: 1,
143
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Root, {
160
144
  gap: 6,
161
145
  children: [
162
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
163
- col: 6,
146
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Item, {
147
+ col: 8,
164
148
  s: 12,
165
149
  direction: "column",
166
150
  alignItems: "stretch",
167
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
168
- hint: formatMessage({
169
- id: getTrad.getTrad('settings.form.responsiveDimensions.description'),
170
- defaultMessage: 'Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.'
151
+ children: [
152
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
153
+ gap: 2,
154
+ children: [
155
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
156
+ color: "alternative700",
157
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.Sparkle, {})
158
+ }),
159
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
160
+ variant: "delta",
161
+ tag: "h2",
162
+ children: formatMessage({
163
+ id: getTrad.getTrad('settings.form.aiMetadata.label'),
164
+ defaultMessage: 'Generate AI captions and alt texts automatically on upload!'
165
+ })
166
+ })
167
+ ]
171
168
  }),
172
- name: "responsiveDimensions",
173
- children: [
174
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
169
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
170
+ paddingTop: 1,
171
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
172
+ variant: "pi",
173
+ textColor: "neutral600",
175
174
  children: formatMessage({
176
- id: getTrad.getTrad('settings.form.responsiveDimensions.label'),
177
- defaultMessage: 'Responsive friendly upload'
175
+ id: getTrad.getTrad('settings.form.aiMetadata.description'),
176
+ defaultMessage: 'Enable this feature to save time, optimize your SEO and increase accessibility by letting our AI generate captions and alternative texts for you.'
178
177
  })
179
- }),
180
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Toggle, {
181
- checked: modifiedData?.responsiveDimensions,
182
- offLabel: formatMessage({
183
- id: 'app.components.ToggleCheckbox.off-label',
184
- defaultMessage: 'Off'
185
- }),
186
- onLabel: formatMessage({
187
- id: 'app.components.ToggleCheckbox.on-label',
188
- defaultMessage: 'On'
189
- }),
190
- onChange: (e)=>{
191
- handleChange({
192
- target: {
193
- name: 'responsiveDimensions',
194
- value: e.target.checked
195
- }
196
- });
197
- }
198
- }),
199
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
200
- ]
201
- })
178
+ })
179
+ })
180
+ ]
202
181
  }),
203
182
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
204
- col: 6,
183
+ col: 4,
205
184
  s: 12,
206
185
  direction: "column",
207
- alignItems: "stretch",
208
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
209
- hint: formatMessage({
210
- id: getTrad.getTrad('settings.form.sizeOptimization.description'),
211
- defaultMessage: 'Enabling this option will reduce the image size and slightly reduce its quality.'
212
- }),
213
- name: "sizeOptimization",
214
- children: [
215
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
216
- children: formatMessage({
217
- id: getTrad.getTrad('settings.form.sizeOptimization.label'),
218
- defaultMessage: 'Size optimization'
219
- })
186
+ alignItems: "end",
187
+ justifyContent: 'center',
188
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Root, {
189
+ name: "aiMetadata",
190
+ width: '158px',
191
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Toggle, {
192
+ checked: modifiedData?.aiMetadata,
193
+ offLabel: formatMessage({
194
+ id: 'app.components.ToggleCheckbox.off-label',
195
+ defaultMessage: 'Disabled'
220
196
  }),
221
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Toggle, {
222
- checked: modifiedData?.sizeOptimization,
223
- offLabel: formatMessage({
224
- id: 'app.components.ToggleCheckbox.off-label',
225
- defaultMessage: 'Off'
226
- }),
227
- onLabel: formatMessage({
228
- id: 'app.components.ToggleCheckbox.on-label',
229
- defaultMessage: 'On'
230
- }),
231
- onChange: (e)=>{
232
- handleChange({
233
- target: {
234
- name: 'sizeOptimization',
235
- value: e.target.checked
236
- }
237
- });
238
- }
197
+ onLabel: formatMessage({
198
+ id: 'app.components.ToggleCheckbox.on-label',
199
+ defaultMessage: 'Enabled'
239
200
  }),
240
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
241
- ]
201
+ onChange: (e)=>{
202
+ handleChange({
203
+ target: {
204
+ name: 'aiMetadata',
205
+ value: e.target.checked
206
+ }
207
+ });
208
+ }
209
+ })
242
210
  })
243
- }),
244
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
245
- col: 6,
246
- s: 12,
247
- direction: "column",
248
- alignItems: "stretch",
249
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
250
- hint: formatMessage({
251
- id: getTrad.getTrad('settings.form.autoOrientation.description'),
252
- defaultMessage: 'Enabling this option will automatically rotate the image according to EXIF orientation tag.'
253
- }),
254
- name: "autoOrientation",
255
- children: [
256
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
257
- children: formatMessage({
258
- id: getTrad.getTrad('settings.form.autoOrientation.label'),
259
- defaultMessage: 'Auto orientation'
260
- })
211
+ })
212
+ ]
213
+ })
214
+ })
215
+ }),
216
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
217
+ background: "neutral0",
218
+ padding: 6,
219
+ shadow: "filterShadow",
220
+ hasRadius: true,
221
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
222
+ direction: "column",
223
+ alignItems: "stretch",
224
+ gap: 4,
225
+ children: [
226
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
227
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
228
+ variant: "delta",
229
+ tag: "h2",
230
+ children: formatMessage({
231
+ id: getTrad.getTrad('settings.blockTitle'),
232
+ defaultMessage: 'Asset management'
233
+ })
234
+ })
235
+ }),
236
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Root, {
237
+ gap: 6,
238
+ children: [
239
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
240
+ col: 6,
241
+ s: 12,
242
+ direction: "column",
243
+ alignItems: "stretch",
244
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
245
+ hint: formatMessage({
246
+ id: getTrad.getTrad('settings.form.responsiveDimensions.description'),
247
+ defaultMessage: 'Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.'
261
248
  }),
262
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Toggle, {
263
- checked: modifiedData?.autoOrientation,
264
- offLabel: formatMessage({
265
- id: 'app.components.ToggleCheckbox.off-label',
266
- defaultMessage: 'Off'
249
+ name: "responsiveDimensions",
250
+ children: [
251
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
252
+ children: formatMessage({
253
+ id: getTrad.getTrad('settings.form.responsiveDimensions.label'),
254
+ defaultMessage: 'Responsive friendly upload'
255
+ })
267
256
  }),
268
- onLabel: formatMessage({
269
- id: 'app.components.ToggleCheckbox.on-label',
270
- defaultMessage: 'On'
257
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Toggle, {
258
+ checked: modifiedData?.responsiveDimensions,
259
+ offLabel: formatMessage({
260
+ id: 'app.components.ToggleCheckbox.off-label',
261
+ defaultMessage: 'Off'
262
+ }),
263
+ onLabel: formatMessage({
264
+ id: 'app.components.ToggleCheckbox.on-label',
265
+ defaultMessage: 'On'
266
+ }),
267
+ onChange: (e)=>{
268
+ handleChange({
269
+ target: {
270
+ name: 'responsiveDimensions',
271
+ value: e.target.checked
272
+ }
273
+ });
274
+ }
271
275
  }),
272
- onChange: (e)=>{
273
- handleChange({
274
- target: {
275
- name: 'autoOrientation',
276
- value: e.target.checked
277
- }
278
- });
279
- }
276
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
277
+ ]
278
+ })
279
+ }),
280
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
281
+ col: 6,
282
+ s: 12,
283
+ direction: "column",
284
+ alignItems: "stretch",
285
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
286
+ hint: formatMessage({
287
+ id: getTrad.getTrad('settings.form.sizeOptimization.description'),
288
+ defaultMessage: 'Enabling this option will reduce the image size and slightly reduce its quality.'
280
289
  }),
281
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
282
- ]
290
+ name: "sizeOptimization",
291
+ children: [
292
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
293
+ children: formatMessage({
294
+ id: getTrad.getTrad('settings.form.sizeOptimization.label'),
295
+ defaultMessage: 'Size optimization'
296
+ })
297
+ }),
298
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Toggle, {
299
+ checked: modifiedData?.sizeOptimization,
300
+ offLabel: formatMessage({
301
+ id: 'app.components.ToggleCheckbox.off-label',
302
+ defaultMessage: 'Off'
303
+ }),
304
+ onLabel: formatMessage({
305
+ id: 'app.components.ToggleCheckbox.on-label',
306
+ defaultMessage: 'On'
307
+ }),
308
+ onChange: (e)=>{
309
+ handleChange({
310
+ target: {
311
+ name: 'sizeOptimization',
312
+ value: e.target.checked
313
+ }
314
+ });
315
+ }
316
+ }),
317
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
318
+ ]
319
+ })
320
+ }),
321
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
322
+ col: 6,
323
+ s: 12,
324
+ direction: "column",
325
+ alignItems: "stretch",
326
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
327
+ hint: formatMessage({
328
+ id: getTrad.getTrad('settings.form.autoOrientation.description'),
329
+ defaultMessage: 'Enabling this option will automatically rotate the image according to EXIF orientation tag.'
330
+ }),
331
+ name: "autoOrientation",
332
+ children: [
333
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
334
+ children: formatMessage({
335
+ id: getTrad.getTrad('settings.form.autoOrientation.label'),
336
+ defaultMessage: 'Auto orientation'
337
+ })
338
+ }),
339
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Toggle, {
340
+ checked: modifiedData?.autoOrientation,
341
+ offLabel: formatMessage({
342
+ id: 'app.components.ToggleCheckbox.off-label',
343
+ defaultMessage: 'Off'
344
+ }),
345
+ onLabel: formatMessage({
346
+ id: 'app.components.ToggleCheckbox.on-label',
347
+ defaultMessage: 'On'
348
+ }),
349
+ onChange: (e)=>{
350
+ handleChange({
351
+ target: {
352
+ name: 'autoOrientation',
353
+ value: e.target.checked
354
+ }
355
+ });
356
+ }
357
+ }),
358
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
359
+ ]
360
+ })
283
361
  })
284
- })
285
- ]
286
- })
287
- ]
362
+ ]
363
+ })
364
+ ]
365
+ })
288
366
  })
289
- })
367
+ ]
290
368
  })
291
369
  })
292
370
  })
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsPage.js","sources":["../../../../admin/src/pages/SettingsPage/SettingsPage.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Page, useNotification, useFetchClient, Layouts } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex, Grid, Toggle, Typography, Field } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\n\nimport { UpdateSettings } from '../../../../shared/contracts/settings';\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport { init } from './init';\nimport { initialState, reducer } from './reducer';\n\nimport type { InitialState } from './reducer';\n\nexport const SettingsPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { get, put } = useFetchClient();\n\n const [{ initialData, modifiedData }, dispatch] = React.useReducer(reducer, initialState, init);\n\n const { data, isLoading, refetch } = useQuery({\n queryKey: ['upload', 'settings'],\n async queryFn() {\n const {\n data: { data },\n } = await get('/upload/settings');\n\n return data;\n },\n });\n\n React.useEffect(() => {\n if (data) {\n dispatch({\n type: 'GET_DATA_SUCCEEDED',\n data,\n });\n }\n }, [data]);\n\n const isSaveButtonDisabled = isEqual(initialData, modifiedData);\n\n const { mutateAsync, isLoading: isSubmitting } = useMutation<\n UpdateSettings.Response['data'],\n UpdateSettings.Response['error'],\n UpdateSettings.Request['body']\n >(\n async (body) => {\n const { data } = await put('/upload/settings', body);\n\n return data;\n },\n {\n onSuccess() {\n refetch();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.form.success.fields' }),\n });\n },\n onError(err) {\n console.error(err);\n },\n }\n );\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (isSaveButtonDisabled) {\n return;\n }\n\n await mutateAsync(modifiedData!);\n };\n\n const handleChange = ({\n target: { name, value },\n }: {\n target: { name: keyof NonNullable<InitialState['initialData']>; value: boolean };\n }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value,\n });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main tabIndex={-1}>\n <Page.Title>\n {formatMessage({\n id: getTrad('page.title'),\n defaultMessage: 'Settings - Media Libray',\n })}\n </Page.Title>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('settings.header.label'),\n defaultMessage: 'Media Library',\n })}\n primaryAction={\n <Button\n disabled={isSaveButtonDisabled}\n loading={isSubmitting}\n type=\"submit\"\n startIcon={<Check />}\n size=\"S\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('settings.sub-header.label'),\n defaultMessage: 'Configure the settings for the Media Library',\n })}\n />\n <Layouts.Content>\n <Layouts.Root>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={12}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTrad('settings.blockTitle'),\n defaultMessage: 'Asset management',\n })}\n </Typography>\n </Flex>\n <Grid.Root gap={6}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.responsiveDimensions.description'),\n defaultMessage:\n 'Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.',\n })}\n name=\"responsiveDimensions\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.responsiveDimensions.label'),\n defaultMessage: 'Responsive friendly upload',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData?.responsiveDimensions}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'responsiveDimensions', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.sizeOptimization.description'),\n defaultMessage:\n 'Enabling this option will reduce the image size and slightly reduce its quality.',\n })}\n name=\"sizeOptimization\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.sizeOptimization.label'),\n defaultMessage: 'Size optimization',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData?.sizeOptimization}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'sizeOptimization', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.autoOrientation.description'),\n defaultMessage:\n 'Enabling this option will automatically rotate the image according to EXIF orientation tag.',\n })}\n name=\"autoOrientation\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.autoOrientation.label'),\n defaultMessage: 'Auto orientation',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData?.autoOrientation}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'autoOrientation', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n </Flex>\n </Layouts.Root>\n </Layouts.Content>\n </form>\n </Page.Main>\n );\n};\n\nexport const ProtectedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.settings}>\n <SettingsPage />\n </Page.Protect>\n);\n"],"names":["SettingsPage","formatMessage","useIntl","toggleNotification","useNotification","get","put","useFetchClient","initialData","modifiedData","dispatch","React","useReducer","reducer","initialState","init","data","isLoading","refetch","useQuery","queryKey","queryFn","useEffect","type","isSaveButtonDisabled","isEqual","mutateAsync","isSubmitting","useMutation","body","onSuccess","message","id","onError","err","console","error","handleSubmit","e","preventDefault","handleChange","target","name","value","keys","_jsx","Page","Loading","_jsxs","Main","tabIndex","Title","getTrad","defaultMessage","form","onSubmit","Layouts","Header","title","primaryAction","Button","disabled","loading","startIcon","Check","size","subtitle","Content","Root","Flex","direction","alignItems","gap","Box","background","padding","shadow","hasRadius","Typography","variant","tag","Grid","Item","col","s","Field","hint","Label","Toggle","checked","responsiveDimensions","offLabel","onLabel","onChange","Hint","sizeOptimization","autoOrientation","ProtectedSettingsPage","Protect","permissions","PERMISSIONS","settings"],"mappings":"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"}
1
+ {"version":3,"file":"SettingsPage.js","sources":["../../../../admin/src/pages/SettingsPage/SettingsPage.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Page, useNotification, useFetchClient, Layouts } from '@strapi/admin/strapi-admin';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport { Box, Button, Flex, Grid, Toggle, Typography, Field } from '@strapi/design-system';\nimport { Check, Sparkle } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\n\nimport { UpdateSettings } from '../../../../shared/contracts/settings';\nimport { PERMISSIONS } from '../../constants';\nimport { useSettings } from '../../hooks/useSettings';\nimport { getTrad } from '../../utils';\n\nimport { init } from './init';\nimport { initialState, reducer } from './reducer';\n\nimport type { InitialState } from './reducer';\n\nexport const SettingsPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { put } = useFetchClient();\n\n const [{ initialData, modifiedData }, dispatch] = React.useReducer(reducer, initialState, init);\n\n const { data, isLoading, refetch } = useSettings();\n const isAIAvailable = useAIAvailability();\n\n React.useEffect(() => {\n if (data) {\n dispatch({\n type: 'GET_DATA_SUCCEEDED',\n data,\n });\n }\n }, [data]);\n\n const isSaveButtonDisabled = isEqual(initialData, modifiedData);\n\n const { mutateAsync, isLoading: isSubmitting } = useMutation<\n UpdateSettings.Response['data'],\n UpdateSettings.Response['error'],\n UpdateSettings.Request['body']\n >(\n async (body) => {\n const { data } = await put('/upload/settings', body);\n\n return data;\n },\n {\n onSuccess() {\n refetch();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.form.success.fields' }),\n });\n },\n onError(err) {\n console.error(err);\n },\n }\n );\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (isSaveButtonDisabled) {\n return;\n }\n\n await mutateAsync(modifiedData!);\n };\n\n const handleChange = ({\n target: { name, value },\n }: {\n target: { name: keyof NonNullable<InitialState['initialData']>; value: boolean };\n }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value,\n });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main tabIndex={-1}>\n <Page.Title>\n {formatMessage({\n id: getTrad('page.title'),\n defaultMessage: 'Settings - Media Library',\n })}\n </Page.Title>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('settings.header.label'),\n defaultMessage: 'Media Library',\n })}\n primaryAction={\n <Button\n disabled={isSaveButtonDisabled}\n loading={isSubmitting}\n type=\"submit\"\n startIcon={<Check />}\n size=\"S\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('settings.sub-header.label'),\n defaultMessage: 'Configure the settings for the Media Library',\n })}\n />\n <Layouts.Content>\n <Layouts.Root>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n {isAIAvailable && (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Grid.Root gap={6}>\n <Grid.Item col={8} s={12} direction=\"column\" alignItems=\"stretch\">\n <Flex gap={2}>\n <Box color=\"alternative700\">\n <Sparkle />\n </Box>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTrad('settings.form.aiMetadata.label'),\n defaultMessage:\n 'Generate AI captions and alt texts automatically on upload!',\n })}\n </Typography>\n </Flex>\n <Flex paddingTop={1}>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('settings.form.aiMetadata.description'),\n defaultMessage:\n 'Enable this feature to save time, optimize your SEO and increase accessibility by letting our AI generate captions and alternative texts for you.',\n })}\n </Typography>\n </Flex>\n </Grid.Item>\n <Grid.Item\n col={4}\n s={12}\n direction=\"column\"\n alignItems=\"end\"\n justifyContent={'center'}\n >\n <Field.Root name=\"aiMetadata\" width={'158px'}>\n <Toggle\n checked={modifiedData?.aiMetadata}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Disabled',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'Enabled',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'aiMetadata', value: e.target.checked },\n });\n }}\n />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n )}\n\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTrad('settings.blockTitle'),\n defaultMessage: 'Asset management',\n })}\n </Typography>\n </Flex>\n <Grid.Root gap={6}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.responsiveDimensions.description'),\n defaultMessage:\n 'Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.',\n })}\n name=\"responsiveDimensions\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.responsiveDimensions.label'),\n defaultMessage: 'Responsive friendly upload',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData?.responsiveDimensions}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'responsiveDimensions', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.sizeOptimization.description'),\n defaultMessage:\n 'Enabling this option will reduce the image size and slightly reduce its quality.',\n })}\n name=\"sizeOptimization\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.sizeOptimization.label'),\n defaultMessage: 'Size optimization',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData?.sizeOptimization}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'sizeOptimization', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.autoOrientation.description'),\n defaultMessage:\n 'Enabling this option will automatically rotate the image according to EXIF orientation tag.',\n })}\n name=\"autoOrientation\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.autoOrientation.label'),\n defaultMessage: 'Auto orientation',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData?.autoOrientation}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'autoOrientation', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n </Flex>\n </Layouts.Root>\n </Layouts.Content>\n </form>\n </Page.Main>\n );\n};\n\nexport const ProtectedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.settings}>\n <SettingsPage />\n </Page.Protect>\n);\n"],"names":["SettingsPage","formatMessage","useIntl","toggleNotification","useNotification","put","useFetchClient","initialData","modifiedData","dispatch","React","useReducer","reducer","initialState","init","data","isLoading","refetch","useSettings","isAIAvailable","useAIAvailability","useEffect","type","isSaveButtonDisabled","isEqual","mutateAsync","isSubmitting","useMutation","body","onSuccess","message","id","onError","err","console","error","handleSubmit","e","preventDefault","handleChange","target","name","value","keys","_jsx","Page","Loading","_jsxs","Main","tabIndex","Title","getTrad","defaultMessage","form","onSubmit","Layouts","Header","title","primaryAction","Button","disabled","loading","startIcon","Check","size","subtitle","Content","Root","Flex","direction","alignItems","gap","Box","background","padding","shadow","hasRadius","Grid","Item","col","s","color","Sparkle","Typography","variant","tag","paddingTop","textColor","justifyContent","Field","width","Toggle","checked","aiMetadata","offLabel","onLabel","onChange","hint","Label","responsiveDimensions","Hint","sizeOptimization","autoOrientation","ProtectedSettingsPage","Protect","permissions","PERMISSIONS","settings"],"mappings":"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"}