@strapi/i18n 5.29.0 → 5.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/CMHeaderActions.js +85 -11
 - package/dist/admin/components/CMHeaderActions.js.map +1 -1
 - package/dist/admin/components/CMHeaderActions.mjs +88 -14
 - package/dist/admin/components/CMHeaderActions.mjs.map +1 -1
 - package/dist/admin/hooks/useAILocalizationJobsPolling.js +110 -0
 - package/dist/admin/hooks/useAILocalizationJobsPolling.js.map +1 -0
 - package/dist/admin/hooks/useAILocalizationJobsPolling.mjs +89 -0
 - package/dist/admin/hooks/useAILocalizationJobsPolling.mjs.map +1 -0
 - package/dist/admin/hooks/useI18n.js +4 -4
 - package/dist/admin/hooks/useI18n.js.map +1 -1
 - package/dist/admin/hooks/useI18n.mjs +4 -4
 - package/dist/admin/hooks/useI18n.mjs.map +1 -1
 - package/dist/admin/pages/SettingsPage.js +1 -1
 - package/dist/admin/pages/SettingsPage.js.map +1 -1
 - package/dist/admin/pages/SettingsPage.mjs +1 -1
 - package/dist/admin/pages/SettingsPage.mjs.map +1 -1
 - package/dist/admin/services/aiLocalizationJobs.js +26 -0
 - package/dist/admin/services/aiLocalizationJobs.js.map +1 -0
 - package/dist/admin/services/aiLocalizationJobs.mjs +24 -0
 - package/dist/admin/services/aiLocalizationJobs.mjs.map +1 -0
 - package/dist/admin/services/api.js +2 -1
 - package/dist/admin/services/api.js.map +1 -1
 - package/dist/admin/services/api.mjs +2 -1
 - package/dist/admin/services/api.mjs.map +1 -1
 - package/dist/admin/src/components/CMHeaderActions.d.ts +12 -5
 - package/dist/admin/src/hooks/useAILocalizationJobsPolling.d.ts +9 -0
 - package/dist/admin/src/services/aiLocalizationJobs.d.ts +6 -0
 - package/dist/admin/src/services/api.d.ts +1 -1
 - package/dist/admin/src/services/locales.d.ts +1 -1
 - package/dist/admin/src/services/relations.d.ts +1 -1
 - package/dist/admin/src/services/settings.d.ts +2 -2
 - package/dist/admin/translations/en.json.js +4 -1
 - package/dist/admin/translations/en.json.js.map +1 -1
 - package/dist/admin/translations/en.json.mjs +4 -1
 - package/dist/admin/translations/en.json.mjs.map +1 -1
 - package/dist/server/bootstrap.js +2 -0
 - package/dist/server/bootstrap.js.map +1 -1
 - package/dist/server/bootstrap.mjs +2 -0
 - package/dist/server/bootstrap.mjs.map +1 -1
 - package/dist/server/controllers/ai-localization-jobs.js +47 -0
 - package/dist/server/controllers/ai-localization-jobs.js.map +1 -0
 - package/dist/server/controllers/ai-localization-jobs.mjs +45 -0
 - package/dist/server/controllers/ai-localization-jobs.mjs.map +1 -0
 - package/dist/server/controllers/index.js +3 -1
 - package/dist/server/controllers/index.js.map +1 -1
 - package/dist/server/controllers/index.mjs +3 -1
 - package/dist/server/controllers/index.mjs.map +1 -1
 - package/dist/server/models/ai-localization-job.js +60 -0
 - package/dist/server/models/ai-localization-job.js.map +1 -0
 - package/dist/server/models/ai-localization-job.mjs +57 -0
 - package/dist/server/models/ai-localization-job.mjs.map +1 -0
 - package/dist/server/register.js +3 -1
 - package/dist/server/register.js.map +1 -1
 - package/dist/server/register.mjs +3 -1
 - package/dist/server/register.mjs.map +1 -1
 - package/dist/server/routes/admin.js +20 -0
 - package/dist/server/routes/admin.js.map +1 -1
 - package/dist/server/routes/admin.mjs +20 -0
 - package/dist/server/routes/admin.mjs.map +1 -1
 - package/dist/server/services/ai-localization-jobs.js +64 -0
 - package/dist/server/services/ai-localization-jobs.js.map +1 -0
 - package/dist/server/services/ai-localization-jobs.mjs +62 -0
 - package/dist/server/services/ai-localization-jobs.mjs.map +1 -0
 - package/dist/server/services/ai-localizations.js +253 -5
 - package/dist/server/services/ai-localizations.js.map +1 -1
 - package/dist/server/services/ai-localizations.mjs +253 -5
 - package/dist/server/services/ai-localizations.mjs.map +1 -1
 - package/dist/server/services/index.js +3 -1
 - package/dist/server/services/index.js.map +1 -1
 - package/dist/server/services/index.mjs +3 -1
 - package/dist/server/services/index.mjs.map +1 -1
 - package/dist/server/services/metrics.js +12 -1
 - package/dist/server/services/metrics.js.map +1 -1
 - package/dist/server/services/metrics.mjs +12 -1
 - package/dist/server/services/metrics.mjs.map +1 -1
 - package/dist/server/src/bootstrap.d.ts.map +1 -1
 - package/dist/server/src/controllers/ai-localization-jobs.d.ts +17 -0
 - package/dist/server/src/controllers/ai-localization-jobs.d.ts.map +1 -0
 - package/dist/server/src/controllers/index.d.ts +6 -0
 - package/dist/server/src/controllers/index.d.ts.map +1 -1
 - package/dist/server/src/index.d.ts +27 -2
 - package/dist/server/src/index.d.ts.map +1 -1
 - package/dist/server/src/models/ai-localization-job.d.ts +5 -0
 - package/dist/server/src/models/ai-localization-job.d.ts.map +1 -0
 - package/dist/server/src/models/index.d.ts +5 -0
 - package/dist/server/src/models/index.d.ts.map +1 -0
 - package/dist/server/src/register.d.ts +1 -1
 - package/dist/server/src/register.d.ts.map +1 -1
 - package/dist/server/src/routes/admin.d.ts.map +1 -1
 - package/dist/server/src/services/ai-localization-jobs.d.ts +26 -0
 - package/dist/server/src/services/ai-localization-jobs.d.ts.map +1 -0
 - package/dist/server/src/services/ai-localizations.d.ts +11 -1
 - package/dist/server/src/services/ai-localizations.d.ts.map +1 -1
 - package/dist/server/src/services/index.d.ts +20 -1
 - package/dist/server/src/services/index.d.ts.map +1 -1
 - package/dist/server/src/services/metrics.d.ts +1 -0
 - package/dist/server/src/services/metrics.d.ts.map +1 -1
 - package/dist/server/src/utils/index.d.ts +4 -0
 - package/dist/server/src/utils/index.d.ts.map +1 -1
 - package/dist/server/utils/index.js.map +1 -1
 - package/dist/server/utils/index.mjs.map +1 -1
 - package/dist/shared/contracts/ai-localization-jobs.d.ts +27 -0
 - package/dist/shared/contracts/ai-localization-jobs.d.ts.map +1 -0
 - package/dist/shared/contracts/shared.d.ts.map +1 -0
 - package/package.json +7 -6
 
| 
         @@ -0,0 +1,89 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import * as React from 'react';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { useNotification, adminApi } from '@strapi/admin/strapi-admin';
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { useIntl } from 'react-intl';
         
     | 
| 
      
 4 
     | 
    
         
            +
            import { useDispatch } from 'react-redux';
         
     | 
| 
      
 5 
     | 
    
         
            +
            import { useGetAILocalizationJobsByDocumentQuery } from '../services/aiLocalizationJobs.mjs';
         
     | 
| 
      
 6 
     | 
    
         
            +
            import { getTranslation } from '../utils/getTranslation.mjs';
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            const useAILocalizationJobsPolling = ({ documentId, model, collectionType })=>{
         
     | 
| 
      
 9 
     | 
    
         
            +
                const { toggleNotification } = useNotification();
         
     | 
| 
      
 10 
     | 
    
         
            +
                const { formatMessage } = useIntl();
         
     | 
| 
      
 11 
     | 
    
         
            +
                const dispatch = useDispatch();
         
     | 
| 
      
 12 
     | 
    
         
            +
                const [previousJobStatus, setPreviousJobStatus] = React.useState(null);
         
     | 
| 
      
 13 
     | 
    
         
            +
                /**
         
     | 
| 
      
 14 
     | 
    
         
            +
               * NOTE:
         
     | 
| 
      
 15 
     | 
    
         
            +
               * Due to a limitation with RTK query it is not possible to dynamically update the polling interval
         
     | 
| 
      
 16 
     | 
    
         
            +
               * @see https://github.com/reduxjs/redux-toolkit/issues/1651
         
     | 
| 
      
 17 
     | 
    
         
            +
               */ const { data: initialJobData } = useGetAILocalizationJobsByDocumentQuery({
         
     | 
| 
      
 18 
     | 
    
         
            +
                    documentId: documentId,
         
     | 
| 
      
 19 
     | 
    
         
            +
                    model: model,
         
     | 
| 
      
 20 
     | 
    
         
            +
                    collectionType: collectionType
         
     | 
| 
      
 21 
     | 
    
         
            +
                });
         
     | 
| 
      
 22 
     | 
    
         
            +
                const shouldPoll = initialJobData?.data?.status === 'processing' || previousJobStatus === 'processing';
         
     | 
| 
      
 23 
     | 
    
         
            +
                const { data: jobData } = useGetAILocalizationJobsByDocumentQuery({
         
     | 
| 
      
 24 
     | 
    
         
            +
                    documentId: documentId,
         
     | 
| 
      
 25 
     | 
    
         
            +
                    model: model,
         
     | 
| 
      
 26 
     | 
    
         
            +
                    collectionType: collectionType
         
     | 
| 
      
 27 
     | 
    
         
            +
                }, {
         
     | 
| 
      
 28 
     | 
    
         
            +
                    skip: !shouldPoll,
         
     | 
| 
      
 29 
     | 
    
         
            +
                    pollingInterval: 1000
         
     | 
| 
      
 30 
     | 
    
         
            +
                });
         
     | 
| 
      
 31 
     | 
    
         
            +
                const job = jobData?.data || initialJobData?.data;
         
     | 
| 
      
 32 
     | 
    
         
            +
                const currentJobStatus = job?.status;
         
     | 
| 
      
 33 
     | 
    
         
            +
                const invalidateDocument = React.useCallback(()=>{
         
     | 
| 
      
 34 
     | 
    
         
            +
                    dispatch(adminApi.util.invalidateTags([
         
     | 
| 
      
 35 
     | 
    
         
            +
                        {
         
     | 
| 
      
 36 
     | 
    
         
            +
                            // @ts-expect-error tag isn't available
         
     | 
| 
      
 37 
     | 
    
         
            +
                            type: 'Document',
         
     | 
| 
      
 38 
     | 
    
         
            +
                            id: collectionType !== 'single-types' ? `${model}_${documentId}` : model
         
     | 
| 
      
 39 
     | 
    
         
            +
                        }
         
     | 
| 
      
 40 
     | 
    
         
            +
                    ]));
         
     | 
| 
      
 41 
     | 
    
         
            +
                }, [
         
     | 
| 
      
 42 
     | 
    
         
            +
                    dispatch,
         
     | 
| 
      
 43 
     | 
    
         
            +
                    collectionType,
         
     | 
| 
      
 44 
     | 
    
         
            +
                    model,
         
     | 
| 
      
 45 
     | 
    
         
            +
                    documentId
         
     | 
| 
      
 46 
     | 
    
         
            +
                ]);
         
     | 
| 
      
 47 
     | 
    
         
            +
                // Check for job status changes and trigger callbacks
         
     | 
| 
      
 48 
     | 
    
         
            +
                React.useEffect(()=>{
         
     | 
| 
      
 49 
     | 
    
         
            +
                    if (!currentJobStatus) return;
         
     | 
| 
      
 50 
     | 
    
         
            +
                    // Detect transition from 'processing' to a terminal state
         
     | 
| 
      
 51 
     | 
    
         
            +
                    if (previousJobStatus === 'processing' && currentJobStatus === 'completed') {
         
     | 
| 
      
 52 
     | 
    
         
            +
                        toggleNotification({
         
     | 
| 
      
 53 
     | 
    
         
            +
                            type: 'success',
         
     | 
| 
      
 54 
     | 
    
         
            +
                            message: formatMessage({
         
     | 
| 
      
 55 
     | 
    
         
            +
                                id: getTranslation('CMEditViewAITranslation.job-completed'),
         
     | 
| 
      
 56 
     | 
    
         
            +
                                defaultMessage: 'AI translation completed successfully!'
         
     | 
| 
      
 57 
     | 
    
         
            +
                            })
         
     | 
| 
      
 58 
     | 
    
         
            +
                        });
         
     | 
| 
      
 59 
     | 
    
         
            +
                        invalidateDocument();
         
     | 
| 
      
 60 
     | 
    
         
            +
                    }
         
     | 
| 
      
 61 
     | 
    
         
            +
                    if (previousJobStatus === 'processing' && currentJobStatus === 'failed') {
         
     | 
| 
      
 62 
     | 
    
         
            +
                        toggleNotification({
         
     | 
| 
      
 63 
     | 
    
         
            +
                            type: 'warning',
         
     | 
| 
      
 64 
     | 
    
         
            +
                            message: formatMessage({
         
     | 
| 
      
 65 
     | 
    
         
            +
                                id: getTranslation('CMEditViewAITranslation.job-failed'),
         
     | 
| 
      
 66 
     | 
    
         
            +
                                defaultMessage: 'AI translation failed. Please try again.'
         
     | 
| 
      
 67 
     | 
    
         
            +
                            })
         
     | 
| 
      
 68 
     | 
    
         
            +
                        });
         
     | 
| 
      
 69 
     | 
    
         
            +
                        invalidateDocument();
         
     | 
| 
      
 70 
     | 
    
         
            +
                    }
         
     | 
| 
      
 71 
     | 
    
         
            +
                    // Update the previous status if it changed
         
     | 
| 
      
 72 
     | 
    
         
            +
                    if (previousJobStatus !== currentJobStatus) {
         
     | 
| 
      
 73 
     | 
    
         
            +
                        setPreviousJobStatus(currentJobStatus);
         
     | 
| 
      
 74 
     | 
    
         
            +
                    }
         
     | 
| 
      
 75 
     | 
    
         
            +
                }, [
         
     | 
| 
      
 76 
     | 
    
         
            +
                    currentJobStatus,
         
     | 
| 
      
 77 
     | 
    
         
            +
                    previousJobStatus,
         
     | 
| 
      
 78 
     | 
    
         
            +
                    setPreviousJobStatus,
         
     | 
| 
      
 79 
     | 
    
         
            +
                    toggleNotification,
         
     | 
| 
      
 80 
     | 
    
         
            +
                    formatMessage,
         
     | 
| 
      
 81 
     | 
    
         
            +
                    invalidateDocument
         
     | 
| 
      
 82 
     | 
    
         
            +
                ]);
         
     | 
| 
      
 83 
     | 
    
         
            +
                return {
         
     | 
| 
      
 84 
     | 
    
         
            +
                    status: job?.status
         
     | 
| 
      
 85 
     | 
    
         
            +
                };
         
     | 
| 
      
 86 
     | 
    
         
            +
            };
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
            export { useAILocalizationJobsPolling };
         
     | 
| 
      
 89 
     | 
    
         
            +
            //# sourceMappingURL=useAILocalizationJobsPolling.mjs.map
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"useAILocalizationJobsPolling.mjs","sources":["../../../admin/src/hooks/useAILocalizationJobsPolling.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, adminApi } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\n\nimport { AILocalizationJobs } from '../../../shared/contracts/ai-localization-jobs';\nimport { useGetAILocalizationJobsByDocumentQuery } from '../services/aiLocalizationJobs';\nimport { getTranslation } from '../utils/getTranslation';\n\ninterface UseAILocalizationJobsPollingOptions {\n  documentId?: string;\n  model?: string;\n  collectionType?: string;\n}\n\nexport const useAILocalizationJobsPolling = ({\n  documentId,\n  model,\n  collectionType,\n}: UseAILocalizationJobsPollingOptions) => {\n  const { toggleNotification } = useNotification();\n  const { formatMessage } = useIntl();\n  const dispatch = useDispatch();\n\n  const [previousJobStatus, setPreviousJobStatus] = React.useState<\n    AILocalizationJobs['status'] | null\n  >(null);\n\n  /**\n   * NOTE:\n   * Due to a limitation with RTK query it is not possible to dynamically update the polling interval\n   * @see https://github.com/reduxjs/redux-toolkit/issues/1651\n   */\n  const { data: initialJobData } = useGetAILocalizationJobsByDocumentQuery({\n    documentId: documentId!,\n    model: model!,\n    collectionType: collectionType!,\n  });\n\n  const shouldPoll =\n    initialJobData?.data?.status === 'processing' || previousJobStatus === 'processing';\n  const { data: jobData } = useGetAILocalizationJobsByDocumentQuery(\n    { documentId: documentId!, model: model!, collectionType: collectionType! },\n    {\n      skip: !shouldPoll,\n      pollingInterval: 1000,\n    }\n  );\n\n  const job = jobData?.data || initialJobData?.data;\n  const currentJobStatus = job?.status;\n\n  const invalidateDocument = React.useCallback(() => {\n    dispatch(\n      adminApi.util.invalidateTags([\n        {\n          // @ts-expect-error tag isn't available\n          type: 'Document',\n          id: collectionType !== 'single-types' ? `${model}_${documentId}` : model,\n        },\n      ])\n    );\n  }, [dispatch, collectionType, model, documentId]);\n\n  // Check for job status changes and trigger callbacks\n  React.useEffect(() => {\n    if (!currentJobStatus) return;\n\n    // Detect transition from 'processing' to a terminal state\n    if (previousJobStatus === 'processing' && currentJobStatus === 'completed') {\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({\n          id: getTranslation('CMEditViewAITranslation.job-completed'),\n          defaultMessage: 'AI translation completed successfully!',\n        }),\n      });\n      invalidateDocument();\n    }\n\n    if (previousJobStatus === 'processing' && currentJobStatus === 'failed') {\n      toggleNotification({\n        type: 'warning',\n        message: formatMessage({\n          id: getTranslation('CMEditViewAITranslation.job-failed'),\n          defaultMessage: 'AI translation failed. Please try again.',\n        }),\n      });\n      invalidateDocument();\n    }\n\n    // Update the previous status if it changed\n    if (previousJobStatus !== currentJobStatus) {\n      setPreviousJobStatus(currentJobStatus);\n    }\n  }, [\n    currentJobStatus,\n    previousJobStatus,\n    setPreviousJobStatus,\n    toggleNotification,\n    formatMessage,\n    invalidateDocument,\n  ]);\n\n  return {\n    status: job?.status,\n  };\n};\n"],"names":["useAILocalizationJobsPolling","documentId","model","collectionType","toggleNotification","useNotification","formatMessage","useIntl","dispatch","useDispatch","previousJobStatus","setPreviousJobStatus","React","useState","data","initialJobData","useGetAILocalizationJobsByDocumentQuery","shouldPoll","status","jobData","skip","pollingInterval","job","currentJobStatus","invalidateDocument","useCallback","adminApi","util","invalidateTags","type","id","useEffect","message","getTranslation","defaultMessage"],"mappings":"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"}
         
     | 
| 
         @@ -3,6 +3,7 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            var React = require('react');
         
     | 
| 
       4 
4 
     | 
    
         
             
            var strapiAdmin = require('@strapi/admin/strapi-admin');
         
     | 
| 
       5 
5 
     | 
    
         
             
            var strapiAdmin$1 = require('@strapi/content-manager/strapi-admin');
         
     | 
| 
      
 6 
     | 
    
         
            +
            var union = require('lodash/union');
         
     | 
| 
       6 
7 
     | 
    
         
             
            var reactRouterDom = require('react-router-dom');
         
     | 
| 
       7 
8 
     | 
    
         
             
            var fields = require('../utils/fields.js');
         
     | 
| 
       8 
9 
     | 
    
         
             
            var strings = require('../utils/strings.js');
         
     | 
| 
         @@ -39,10 +40,9 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React); 
     | 
|
| 
       39 
40 
     | 
    
         
             
                    const permissions = userPermissions.filter((permission)=>permission.subject === params.slug);
         
     | 
| 
       40 
41 
     | 
    
         
             
                    return permissions.reduce((acc, permission)=>{
         
     | 
| 
       41 
42 
     | 
    
         
             
                        const [actionShorthand] = permission.action.split('.').slice(-1);
         
     | 
| 
       42 
     | 
    
         
            -
                         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                        };
         
     | 
| 
      
 43 
     | 
    
         
            +
                        const permissionKey = `can${strings.capitalize(actionShorthand)}`;
         
     | 
| 
      
 44 
     | 
    
         
            +
                        acc[permissionKey] = union(acc[permissionKey] ?? [], permission.properties?.locales ?? []);
         
     | 
| 
      
 45 
     | 
    
         
            +
                        return acc;
         
     | 
| 
       46 
46 
     | 
    
         
             
                    }, {
         
     | 
| 
       47 
47 
     | 
    
         
             
                        canCreate: [],
         
     | 
| 
       48 
48 
     | 
    
         
             
                        canRead: [],
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"useI18n.js","sources":["../../../admin/src/hooks/useI18n.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useAuth } from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument as useDocument } from '@strapi/content-manager/strapi-admin';\nimport { useParams } from 'react-router-dom';\n\nimport { doesPluginOptionsHaveI18nLocalized } from '../utils/fields';\nimport { capitalize } from '../utils/strings';\n\ntype UseI18n = () => {\n  hasI18n: boolean;\n  canCreate: string[];\n  canRead: string[];\n  canUpdate: string[];\n  canDelete: string[];\n  canPublish: string[];\n};\n\n/**\n * @alpha\n * @description This hook is used to get the i18n status of a content type.\n * Also returns the CRUDP permission locale properties for the content type\n * so we know which locales the user can perform actions on.\n */\nconst useI18n: UseI18n = () => {\n  // Extract the params from the URL to pass to our useDocument hook\n  const params = useParams<{ collectionType: string; slug: string; model: string }>();\n\n  const userPermissions = useAuth('useI18n', (state) => state.permissions);\n  const actions = React.useMemo(() => {\n    const permissions = userPermissions.filter((permission) => permission.subject === params.slug);\n\n    return permissions.reduce< 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"useI18n.js","sources":["../../../admin/src/hooks/useI18n.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useAuth } from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument as useDocument } from '@strapi/content-manager/strapi-admin';\nimport union from 'lodash/union';\nimport { useParams } from 'react-router-dom';\n\nimport { doesPluginOptionsHaveI18nLocalized } from '../utils/fields';\nimport { capitalize } from '../utils/strings';\n\ntype UseI18n = () => {\n  hasI18n: boolean;\n  canCreate: string[];\n  canRead: string[];\n  canUpdate: string[];\n  canDelete: string[];\n  canPublish: string[];\n};\n\ntype I18nPermissionKeys = keyof Omit<ReturnType<UseI18n>, 'hasI18n'>;\n\n/**\n * @alpha\n * @description This hook is used to get the i18n status of a content type.\n * Also returns the CRUDP permission locale properties for the content type\n * so we know which locales the user can perform actions on.\n */\nconst useI18n: UseI18n = () => {\n  // Extract the params from the URL to pass to our useDocument hook\n  const params = useParams<{ collectionType: string; slug: string; model: string }>();\n\n  const userPermissions = useAuth('useI18n', (state) => state.permissions);\n  const actions = React.useMemo(() => {\n    const permissions = userPermissions.filter((permission) => permission.subject === params.slug);\n\n    return permissions.reduce<Record<I18nPermissionKeys, string[]>>(\n      (acc, permission) => {\n        const [actionShorthand] = permission.action.split('.').slice(-1);\n        const permissionKey = `can${capitalize(actionShorthand)}` as I18nPermissionKeys;\n\n        acc[permissionKey] = union(acc[permissionKey] ?? [], permission.properties?.locales ?? []);\n\n        return acc;\n      },\n      { canCreate: [], canRead: [], canUpdate: [], canDelete: [], canPublish: [] }\n    );\n  }, [params.slug, userPermissions]);\n\n  // TODO: use specific hook to get schema only\n  const { schema } = useDocument(\n    {\n      // We can non-null assert these because below we skip the query if they are not present\n      collectionType: params.collectionType!,\n      model: params.slug!,\n    },\n    {\n      skip: true,\n    }\n  );\n\n  if (doesPluginOptionsHaveI18nLocalized(schema?.pluginOptions)) {\n    return {\n      hasI18n: schema.pluginOptions.i18n.localized,\n      ...actions,\n    };\n  }\n\n  return {\n    hasI18n: false,\n    ...actions,\n  };\n};\n\nexport { useI18n };\n"],"names":["useI18n","params","useParams","userPermissions","useAuth","state","permissions","actions","React","useMemo","filter","permission","subject","slug","reduce","acc","actionShorthand","action","split","slice","permissionKey","capitalize","union","properties","locales","canCreate","canRead","canUpdate","canDelete","canPublish","schema","useDocument","collectionType","model","skip","doesPluginOptionsHaveI18nLocalized","pluginOptions","hasI18n","i18n","localized"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA;;;;;AAKC,UACKA,OAAmB,GAAA,IAAA;;AAEvB,IAAA,MAAMC,MAASC,GAAAA,wBAAAA,EAAAA;AAEf,IAAA,MAAMC,kBAAkBC,mBAAQ,CAAA,SAAA,EAAW,CAACC,KAAAA,GAAUA,MAAMC,WAAW,CAAA;IACvE,MAAMC,OAAAA,GAAUC,gBAAMC,CAAAA,OAAO,CAAC,IAAA;QAC5B,MAAMH,WAAAA,GAAcH,eAAgBO,CAAAA,MAAM,CAAC,CAACC,aAAeA,UAAWC,CAAAA,OAAO,KAAKX,MAAAA,CAAOY,IAAI,CAAA;AAE7F,QAAA,OAAOP,WAAYQ,CAAAA,MAAM,CACvB,CAACC,GAAKJ,EAAAA,UAAAA,GAAAA;YACJ,MAAM,CAACK,eAAgB,CAAA,GAAGL,UAAWM,CAAAA,MAAM,CAACC,KAAK,CAAC,GAAA,CAAA,CAAKC,KAAK,CAAC,CAAC,CAAA,CAAA;AAC9D,YAAA,MAAMC,gBAAgB,CAAC,GAAG,EAAEC,kBAAAA,CAAWL,iBAAiB,CAAC;AAEzDD,YAAAA,GAAG,CAACK,aAAAA,CAAc,GAAGE,KAAAA,CAAMP,GAAG,CAACK,aAAAA,CAAc,IAAI,EAAE,EAAET,UAAAA,CAAWY,UAAU,EAAEC,WAAW,EAAE,CAAA;YAEzF,OAAOT,GAAAA;SAET,EAAA;AAAEU,YAAAA,SAAAA,EAAW,EAAE;AAAEC,YAAAA,OAAAA,EAAS,EAAE;AAAEC,YAAAA,SAAAA,EAAW,EAAE;AAAEC,YAAAA,SAAAA,EAAW,EAAE;AAAEC,YAAAA,UAAAA,EAAY;AAAG,SAAA,CAAA;KAE5E,EAAA;AAAC5B,QAAAA,MAAAA,CAAOY,IAAI;AAAEV,QAAAA;AAAgB,KAAA,CAAA;;AAGjC,IAAA,MAAM,EAAE2B,MAAM,EAAE,GAAGC,kCACjB,CAAA;;AAEEC,QAAAA,cAAAA,EAAgB/B,OAAO+B,cAAc;AACrCC,QAAAA,KAAAA,EAAOhC,OAAOY;KAEhB,EAAA;QACEqB,IAAM,EAAA;AACR,KAAA,CAAA;IAGF,IAAIC,yCAAAA,CAAmCL,QAAQM,aAAgB,CAAA,EAAA;QAC7D,OAAO;AACLC,YAAAA,OAAAA,EAASP,MAAOM,CAAAA,aAAa,CAACE,IAAI,CAACC,SAAS;AAC5C,YAAA,GAAGhC;AACL,SAAA;AACF;IAEA,OAAO;QACL8B,OAAS,EAAA,KAAA;AACT,QAAA,GAAG9B;AACL,KAAA;AACF;;;;"}
         
     | 
| 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import * as React from 'react';
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { useAuth } from '@strapi/admin/strapi-admin';
         
     | 
| 
       3 
3 
     | 
    
         
             
            import { unstable_useDocument } from '@strapi/content-manager/strapi-admin';
         
     | 
| 
      
 4 
     | 
    
         
            +
            import union from 'lodash/union';
         
     | 
| 
       4 
5 
     | 
    
         
             
            import { useParams } from 'react-router-dom';
         
     | 
| 
       5 
6 
     | 
    
         
             
            import { doesPluginOptionsHaveI18nLocalized } from '../utils/fields.mjs';
         
     | 
| 
       6 
7 
     | 
    
         
             
            import { capitalize } from '../utils/strings.mjs';
         
     | 
| 
         @@ -18,10 +19,9 @@ import { capitalize } from '../utils/strings.mjs'; 
     | 
|
| 
       18 
19 
     | 
    
         
             
                    const permissions = userPermissions.filter((permission)=>permission.subject === params.slug);
         
     | 
| 
       19 
20 
     | 
    
         
             
                    return permissions.reduce((acc, permission)=>{
         
     | 
| 
       20 
21 
     | 
    
         
             
                        const [actionShorthand] = permission.action.split('.').slice(-1);
         
     | 
| 
       21 
     | 
    
         
            -
                         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                        };
         
     | 
| 
      
 22 
     | 
    
         
            +
                        const permissionKey = `can${capitalize(actionShorthand)}`;
         
     | 
| 
      
 23 
     | 
    
         
            +
                        acc[permissionKey] = union(acc[permissionKey] ?? [], permission.properties?.locales ?? []);
         
     | 
| 
      
 24 
     | 
    
         
            +
                        return acc;
         
     | 
| 
       25 
25 
     | 
    
         
             
                    }, {
         
     | 
| 
       26 
26 
     | 
    
         
             
                        canCreate: [],
         
     | 
| 
       27 
27 
     | 
    
         
             
                        canRead: [],
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"useI18n.mjs","sources":["../../../admin/src/hooks/useI18n.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useAuth } from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument as useDocument } from '@strapi/content-manager/strapi-admin';\nimport { useParams } from 'react-router-dom';\n\nimport { doesPluginOptionsHaveI18nLocalized } from '../utils/fields';\nimport { capitalize } from '../utils/strings';\n\ntype UseI18n = () => {\n  hasI18n: boolean;\n  canCreate: string[];\n  canRead: string[];\n  canUpdate: string[];\n  canDelete: string[];\n  canPublish: string[];\n};\n\n/**\n * @alpha\n * @description This hook is used to get the i18n status of a content type.\n * Also returns the CRUDP permission locale properties for the content type\n * so we know which locales the user can perform actions on.\n */\nconst useI18n: UseI18n = () => {\n  // Extract the params from the URL to pass to our useDocument hook\n  const params = useParams<{ collectionType: string; slug: string; model: string }>();\n\n  const userPermissions = useAuth('useI18n', (state) => state.permissions);\n  const actions = React.useMemo(() => {\n    const permissions = userPermissions.filter((permission) => permission.subject === params.slug);\n\n    return permissions.reduce< 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"useI18n.mjs","sources":["../../../admin/src/hooks/useI18n.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useAuth } from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument as useDocument } from '@strapi/content-manager/strapi-admin';\nimport union from 'lodash/union';\nimport { useParams } from 'react-router-dom';\n\nimport { doesPluginOptionsHaveI18nLocalized } from '../utils/fields';\nimport { capitalize } from '../utils/strings';\n\ntype UseI18n = () => {\n  hasI18n: boolean;\n  canCreate: string[];\n  canRead: string[];\n  canUpdate: string[];\n  canDelete: string[];\n  canPublish: string[];\n};\n\ntype I18nPermissionKeys = keyof Omit<ReturnType<UseI18n>, 'hasI18n'>;\n\n/**\n * @alpha\n * @description This hook is used to get the i18n status of a content type.\n * Also returns the CRUDP permission locale properties for the content type\n * so we know which locales the user can perform actions on.\n */\nconst useI18n: UseI18n = () => {\n  // Extract the params from the URL to pass to our useDocument hook\n  const params = useParams<{ collectionType: string; slug: string; model: string }>();\n\n  const userPermissions = useAuth('useI18n', (state) => state.permissions);\n  const actions = React.useMemo(() => {\n    const permissions = userPermissions.filter((permission) => permission.subject === params.slug);\n\n    return permissions.reduce<Record<I18nPermissionKeys, string[]>>(\n      (acc, permission) => {\n        const [actionShorthand] = permission.action.split('.').slice(-1);\n        const permissionKey = `can${capitalize(actionShorthand)}` as I18nPermissionKeys;\n\n        acc[permissionKey] = union(acc[permissionKey] ?? [], permission.properties?.locales ?? []);\n\n        return acc;\n      },\n      { canCreate: [], canRead: [], canUpdate: [], canDelete: [], canPublish: [] }\n    );\n  }, [params.slug, userPermissions]);\n\n  // TODO: use specific hook to get schema only\n  const { schema } = useDocument(\n    {\n      // We can non-null assert these because below we skip the query if they are not present\n      collectionType: params.collectionType!,\n      model: params.slug!,\n    },\n    {\n      skip: true,\n    }\n  );\n\n  if (doesPluginOptionsHaveI18nLocalized(schema?.pluginOptions)) {\n    return {\n      hasI18n: schema.pluginOptions.i18n.localized,\n      ...actions,\n    };\n  }\n\n  return {\n    hasI18n: false,\n    ...actions,\n  };\n};\n\nexport { useI18n };\n"],"names":["useI18n","params","useParams","userPermissions","useAuth","state","permissions","actions","React","useMemo","filter","permission","subject","slug","reduce","acc","actionShorthand","action","split","slice","permissionKey","capitalize","union","properties","locales","canCreate","canRead","canUpdate","canDelete","canPublish","schema","useDocument","collectionType","model","skip","doesPluginOptionsHaveI18nLocalized","pluginOptions","hasI18n","i18n","localized"],"mappings":";;;;;;;;AAqBA;;;;;AAKC,UACKA,OAAmB,GAAA,IAAA;;AAEvB,IAAA,MAAMC,MAASC,GAAAA,SAAAA,EAAAA;AAEf,IAAA,MAAMC,kBAAkBC,OAAQ,CAAA,SAAA,EAAW,CAACC,KAAAA,GAAUA,MAAMC,WAAW,CAAA;IACvE,MAAMC,OAAAA,GAAUC,KAAMC,CAAAA,OAAO,CAAC,IAAA;QAC5B,MAAMH,WAAAA,GAAcH,eAAgBO,CAAAA,MAAM,CAAC,CAACC,aAAeA,UAAWC,CAAAA,OAAO,KAAKX,MAAAA,CAAOY,IAAI,CAAA;AAE7F,QAAA,OAAOP,WAAYQ,CAAAA,MAAM,CACvB,CAACC,GAAKJ,EAAAA,UAAAA,GAAAA;YACJ,MAAM,CAACK,eAAgB,CAAA,GAAGL,UAAWM,CAAAA,MAAM,CAACC,KAAK,CAAC,GAAA,CAAA,CAAKC,KAAK,CAAC,CAAC,CAAA,CAAA;AAC9D,YAAA,MAAMC,gBAAgB,CAAC,GAAG,EAAEC,UAAAA,CAAWL,iBAAiB,CAAC;AAEzDD,YAAAA,GAAG,CAACK,aAAAA,CAAc,GAAGE,KAAAA,CAAMP,GAAG,CAACK,aAAAA,CAAc,IAAI,EAAE,EAAET,UAAAA,CAAWY,UAAU,EAAEC,WAAW,EAAE,CAAA;YAEzF,OAAOT,GAAAA;SAET,EAAA;AAAEU,YAAAA,SAAAA,EAAW,EAAE;AAAEC,YAAAA,OAAAA,EAAS,EAAE;AAAEC,YAAAA,SAAAA,EAAW,EAAE;AAAEC,YAAAA,SAAAA,EAAW,EAAE;AAAEC,YAAAA,UAAAA,EAAY;AAAG,SAAA,CAAA;KAE5E,EAAA;AAAC5B,QAAAA,MAAAA,CAAOY,IAAI;AAAEV,QAAAA;AAAgB,KAAA,CAAA;;AAGjC,IAAA,MAAM,EAAE2B,MAAM,EAAE,GAAGC,oBACjB,CAAA;;AAEEC,QAAAA,cAAAA,EAAgB/B,OAAO+B,cAAc;AACrCC,QAAAA,KAAAA,EAAOhC,OAAOY;KAEhB,EAAA;QACEqB,IAAM,EAAA;AACR,KAAA,CAAA;IAGF,IAAIC,kCAAAA,CAAmCL,QAAQM,aAAgB,CAAA,EAAA;QAC7D,OAAO;AACLC,YAAAA,OAAAA,EAASP,MAAOM,CAAAA,aAAa,CAACE,IAAI,CAACC,SAAS;AAC5C,YAAA,GAAGhC;AACL,SAAA;AACF;IAEA,OAAO;QACL8B,OAAS,EAAA,KAAA;AACT,QAAA,GAAG9B;AACL,KAAA;AACF;;;;"}
         
     | 
| 
         @@ -84,7 +84,7 @@ const SettingsPage = ()=>{ 
     | 
|
| 
       84 
84 
     | 
    
         
             
                        }),
         
     | 
| 
       85 
85 
     | 
    
         
             
                        /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Layouts.Content, {
         
     | 
| 
       86 
86 
     | 
    
         
             
                            children: [
         
     | 
| 
       87 
     | 
    
         
            -
                                isAIAvailable &&  
     | 
| 
      
 87 
     | 
    
         
            +
                                isAIAvailable && /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
         
     | 
| 
       88 
88 
     | 
    
         
             
                                    background: "neutral0",
         
     | 
| 
       89 
89 
     | 
    
         
             
                                    padding: 6,
         
     | 
| 
       90 
90 
     | 
    
         
             
                                    marginBottom: 6,
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"SettingsPage.js","sources":["../../../admin/src/pages/SettingsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n  Page,\n  useAPIErrorHandler,\n  useNotification,\n  useRBAC,\n  Layouts,\n  BaseQueryError,\n} from '@strapi/admin/strapi-admin';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport {\n  Box,\n  EmptyStateLayout,\n  Field,\n  Flex,\n  Tooltip,\n  Toggle,\n  Typography,\n} from '@strapi/design-system';\nimport { Sparkle } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { CreateLocale } from '../components/CreateLocale';\nimport { LocaleTable } from '../components/LocaleTable';\nimport { PERMISSIONS } from '../constants';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetSettingsQuery, useUpdatei18nSettingsMutation } from '../services/settings';\nimport { getTranslation } from '../utils/getTranslation';\n\nconst SettingsErrrorTooltip = ({\n  children,\n  error,\n}: {\n  children: React.ReactNode;\n  error: BaseQueryError | SerializedError | undefined;\n}) => {\n  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n  if (error) {\n    return (\n      <Tooltip label={formatAPIError(error)} style={{ maxWidth: '200px' }}>\n        {children}\n      </Tooltip>\n    );\n  }\n\n  return children;\n};\n\nconst SettingsPage = () => {\n  const { formatMessage } = useIntl();\n  const { toggleNotification } = useNotification();\n  const { data: locales, isLoading: isLoadingLocales, error } = useGetLocalesQuery();\n  const {\n    isLoading: isLoadingRBAC,\n    allowedActions: { canUpdate, canCreate, canDelete },\n  } = useRBAC(PERMISSIONS);\n  const isAIAvailable = useAIAvailability();\n\n  // Settings state management\n  const {\n    data: settings,\n    isLoading: isLoadingSettings,\n    error: settingsError,\n  } = useGetSettingsQuery();\n  const [updateSettings] = useUpdatei18nSettingsMutation();\n\n  const handleToggleChange = async (checked: boolean) => {\n    try {\n      await updateSettings({ aiLocalizations: checked }).unwrap();\n\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({ id: 'notification.form.success.fields' }),\n      });\n    } catch (err) {\n      console.error(err);\n      toggleNotification({\n        type: 'danger',\n        message: formatMessage({\n          id: 'notification.error',\n          defaultMessage: 'An error occurred',\n        }),\n      });\n    }\n  };\n\n  const isLoading = isLoadingLocales || isLoadingRBAC || isLoadingSettings;\n\n  if (isLoading) {\n    return <Page.Loading />;\n  }\n\n  if (error || !Array.isArray(locales)) {\n    return <Page.Error />;\n  }\n\n  return (\n    <Page.Main tabIndex={-1}>\n      <Layouts.Header\n        primaryAction={<CreateLocale disabled={!canCreate} />}\n        title={formatMessage({\n          id: getTranslation('plugin.name'),\n          defaultMessage: 'Internationalization',\n        })}\n        subtitle={formatMessage({\n          id: getTranslation('Settings.list.description'),\n          defaultMessage: 'Configure the settings',\n        })}\n      />\n      <Layouts.Content>\n        {isAIAvailable && window.strapi.future.isEnabled('unstableAILocalizations') && (\n          <Flex background=\"neutral0\" padding={6} marginBottom={6} shadow=\"filterShadow\" hasRadius>\n            <Flex direction=\"column\" alignItems=\"stretch\" gap={1} flex={1}>\n              <Flex gap={1}>\n                <Box color=\"alternative700\">\n                  <Sparkle />\n                </Box>\n                <Typography variant=\"delta\" tag=\"h2\">\n                  {formatMessage({\n                    id: getTranslation('Settings.aiLocalizations.label'),\n                    defaultMessage: 'AI Translations',\n                  })}\n                </Typography>\n              </Flex>\n              <Typography variant=\"pi\" textColor=\"neutral600\" fontSize=\"14px\">\n                {formatMessage({\n                  id: getTranslation('Settings.aiLocalizations.description'),\n                  defaultMessage:\n                    'Everytime you save in the Content Manager, our AI will use your default locale to translate all other locales automatically.',\n                })}\n              </Typography>\n            </Flex>\n            <Field.Root name=\"aiLocalizations\" minWidth=\"200px\">\n              <SettingsErrrorTooltip error={settingsError}>\n                <Toggle\n                  disabled={Boolean(settingsError)}\n                  checked={settings?.data?.aiLocalizations ?? false}\n                  offLabel={formatMessage({\n                    id: 'app.components.ToggleCheckbox.disabled-label',\n                    defaultMessage: 'Disabled',\n                  })}\n                  onLabel={formatMessage({\n                    id: 'app.components.ToggleCheckbox.enabled-label',\n                    defaultMessage: 'Enabled',\n                  })}\n                  onChange={(e) => handleToggleChange(e.target.checked)}\n                />\n              </SettingsErrrorTooltip>\n            </Field.Root>\n          </Flex>\n        )}\n        {locales.length > 0 ? (\n          <LocaleTable locales={locales} canDelete={canDelete} canUpdate={canUpdate} />\n        ) : (\n          <EmptyStateLayout\n            icon={<EmptyDocuments width={undefined} height={undefined} />}\n            content={formatMessage({\n              id: getTranslation('Settings.list.empty.title'),\n              defaultMessage: 'There are no locales',\n            })}\n            action={<CreateLocale disabled={!canCreate} variant=\"secondary\" />}\n          />\n        )}\n      </Layouts.Content>\n    </Page.Main>\n  );\n};\n\nconst ProtectedSettingsPage = () => {\n  return (\n    <Page.Protect permissions={PERMISSIONS.read}>\n      <SettingsPage />\n    </Page.Protect>\n  );\n};\n\nexport { ProtectedSettingsPage, SettingsPage };\n"],"names":["SettingsErrrorTooltip","children","error","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","_jsx","Tooltip","label","style","maxWidth","SettingsPage","formatMessage","useIntl","toggleNotification","useNotification","data","locales","isLoading","isLoadingLocales","useGetLocalesQuery","isLoadingRBAC","allowedActions","canUpdate","canCreate","canDelete","useRBAC","PERMISSIONS","isAIAvailable","useAIAvailability","settings","isLoadingSettings","settingsError","useGetSettingsQuery","updateSettings","useUpdatei18nSettingsMutation","handleToggleChange","checked","aiLocalizations","unwrap","type","message","id","err","console","defaultMessage","Page","Loading","Array","isArray","Error","_jsxs","Main","tabIndex","Layouts","Header","primaryAction","CreateLocale","disabled","title","getTranslation","subtitle","Content","window","strapi","future","isEnabled","Flex","background","padding","marginBottom","shadow","hasRadius","direction","alignItems","gap","flex","Box","color","Sparkle","Typography","variant","tag","textColor","fontSize","Field","Root","name","minWidth","Toggle","Boolean","offLabel","onLabel","onChange","e","target","length","LocaleTable","EmptyStateLayout","icon","EmptyDocuments","width","undefined","height","content","action","ProtectedSettingsPage","Protect","permissions","read"],"mappings":"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"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"SettingsPage.js","sources":["../../../admin/src/pages/SettingsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n  Page,\n  useAPIErrorHandler,\n  useNotification,\n  useRBAC,\n  Layouts,\n  BaseQueryError,\n} from '@strapi/admin/strapi-admin';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport {\n  Box,\n  EmptyStateLayout,\n  Field,\n  Flex,\n  Tooltip,\n  Toggle,\n  Typography,\n} from '@strapi/design-system';\nimport { Sparkle } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { CreateLocale } from '../components/CreateLocale';\nimport { LocaleTable } from '../components/LocaleTable';\nimport { PERMISSIONS } from '../constants';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetSettingsQuery, useUpdatei18nSettingsMutation } from '../services/settings';\nimport { getTranslation } from '../utils/getTranslation';\n\nconst SettingsErrrorTooltip = ({\n  children,\n  error,\n}: {\n  children: React.ReactNode;\n  error: BaseQueryError | SerializedError | undefined;\n}) => {\n  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n  if (error) {\n    return (\n      <Tooltip label={formatAPIError(error)} style={{ maxWidth: '200px' }}>\n        {children}\n      </Tooltip>\n    );\n  }\n\n  return children;\n};\n\nconst SettingsPage = () => {\n  const { formatMessage } = useIntl();\n  const { toggleNotification } = useNotification();\n  const { data: locales, isLoading: isLoadingLocales, error } = useGetLocalesQuery();\n  const {\n    isLoading: isLoadingRBAC,\n    allowedActions: { canUpdate, canCreate, canDelete },\n  } = useRBAC(PERMISSIONS);\n  const isAIAvailable = useAIAvailability();\n\n  // Settings state management\n  const {\n    data: settings,\n    isLoading: isLoadingSettings,\n    error: settingsError,\n  } = useGetSettingsQuery();\n  const [updateSettings] = useUpdatei18nSettingsMutation();\n\n  const handleToggleChange = async (checked: boolean) => {\n    try {\n      await updateSettings({ aiLocalizations: checked }).unwrap();\n\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({ id: 'notification.form.success.fields' }),\n      });\n    } catch (err) {\n      console.error(err);\n      toggleNotification({\n        type: 'danger',\n        message: formatMessage({\n          id: 'notification.error',\n          defaultMessage: 'An error occurred',\n        }),\n      });\n    }\n  };\n\n  const isLoading = isLoadingLocales || isLoadingRBAC || isLoadingSettings;\n\n  if (isLoading) {\n    return <Page.Loading />;\n  }\n\n  if (error || !Array.isArray(locales)) {\n    return <Page.Error />;\n  }\n\n  return (\n    <Page.Main tabIndex={-1}>\n      <Layouts.Header\n        primaryAction={<CreateLocale disabled={!canCreate} />}\n        title={formatMessage({\n          id: getTranslation('plugin.name'),\n          defaultMessage: 'Internationalization',\n        })}\n        subtitle={formatMessage({\n          id: getTranslation('Settings.list.description'),\n          defaultMessage: 'Configure the settings',\n        })}\n      />\n      <Layouts.Content>\n        {isAIAvailable && (\n          <Flex background=\"neutral0\" padding={6} marginBottom={6} shadow=\"filterShadow\" hasRadius>\n            <Flex direction=\"column\" alignItems=\"stretch\" gap={1} flex={1}>\n              <Flex gap={1}>\n                <Box color=\"alternative700\">\n                  <Sparkle />\n                </Box>\n                <Typography variant=\"delta\" tag=\"h2\">\n                  {formatMessage({\n                    id: getTranslation('Settings.aiLocalizations.label'),\n                    defaultMessage: 'AI Translations',\n                  })}\n                </Typography>\n              </Flex>\n              <Typography variant=\"pi\" textColor=\"neutral600\" fontSize=\"14px\">\n                {formatMessage({\n                  id: getTranslation('Settings.aiLocalizations.description'),\n                  defaultMessage:\n                    'Everytime you save in the Content Manager, our AI will use your default locale to translate all other locales automatically.',\n                })}\n              </Typography>\n            </Flex>\n            <Field.Root name=\"aiLocalizations\" minWidth=\"200px\">\n              <SettingsErrrorTooltip error={settingsError}>\n                <Toggle\n                  disabled={Boolean(settingsError)}\n                  checked={settings?.data?.aiLocalizations ?? false}\n                  offLabel={formatMessage({\n                    id: 'app.components.ToggleCheckbox.disabled-label',\n                    defaultMessage: 'Disabled',\n                  })}\n                  onLabel={formatMessage({\n                    id: 'app.components.ToggleCheckbox.enabled-label',\n                    defaultMessage: 'Enabled',\n                  })}\n                  onChange={(e) => handleToggleChange(e.target.checked)}\n                />\n              </SettingsErrrorTooltip>\n            </Field.Root>\n          </Flex>\n        )}\n        {locales.length > 0 ? (\n          <LocaleTable locales={locales} canDelete={canDelete} canUpdate={canUpdate} />\n        ) : (\n          <EmptyStateLayout\n            icon={<EmptyDocuments width={undefined} height={undefined} />}\n            content={formatMessage({\n              id: getTranslation('Settings.list.empty.title'),\n              defaultMessage: 'There are no locales',\n            })}\n            action={<CreateLocale disabled={!canCreate} variant=\"secondary\" />}\n          />\n        )}\n      </Layouts.Content>\n    </Page.Main>\n  );\n};\n\nconst ProtectedSettingsPage = () => {\n  return (\n    <Page.Protect permissions={PERMISSIONS.read}>\n      <SettingsPage />\n    </Page.Protect>\n  );\n};\n\nexport { ProtectedSettingsPage, SettingsPage };\n"],"names":["SettingsErrrorTooltip","children","error","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","_jsx","Tooltip","label","style","maxWidth","SettingsPage","formatMessage","useIntl","toggleNotification","useNotification","data","locales","isLoading","isLoadingLocales","useGetLocalesQuery","isLoadingRBAC","allowedActions","canUpdate","canCreate","canDelete","useRBAC","PERMISSIONS","isAIAvailable","useAIAvailability","settings","isLoadingSettings","settingsError","useGetSettingsQuery","updateSettings","useUpdatei18nSettingsMutation","handleToggleChange","checked","aiLocalizations","unwrap","type","message","id","err","console","defaultMessage","Page","Loading","Array","isArray","Error","_jsxs","Main","tabIndex","Layouts","Header","primaryAction","CreateLocale","disabled","title","getTranslation","subtitle","Content","Flex","background","padding","marginBottom","shadow","hasRadius","direction","alignItems","gap","flex","Box","color","Sparkle","Typography","variant","tag","textColor","fontSize","Field","Root","name","minWidth","Toggle","Boolean","offLabel","onLabel","onChange","e","target","length","LocaleTable","EmptyStateLayout","icon","EmptyDocuments","width","undefined","height","content","action","ProtectedSettingsPage","Protect","permissions","read"],"mappings":"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"}
         
     | 
| 
         @@ -82,7 +82,7 @@ const SettingsPage = ()=>{ 
     | 
|
| 
       82 
82 
     | 
    
         
             
                        }),
         
     | 
| 
       83 
83 
     | 
    
         
             
                        /*#__PURE__*/ jsxs(Layouts.Content, {
         
     | 
| 
       84 
84 
     | 
    
         
             
                            children: [
         
     | 
| 
       85 
     | 
    
         
            -
                                isAIAvailable &&  
     | 
| 
      
 85 
     | 
    
         
            +
                                isAIAvailable && /*#__PURE__*/ jsxs(Flex, {
         
     | 
| 
       86 
86 
     | 
    
         
             
                                    background: "neutral0",
         
     | 
| 
       87 
87 
     | 
    
         
             
                                    padding: 6,
         
     | 
| 
       88 
88 
     | 
    
         
             
                                    marginBottom: 6,
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"SettingsPage.mjs","sources":["../../../admin/src/pages/SettingsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n  Page,\n  useAPIErrorHandler,\n  useNotification,\n  useRBAC,\n  Layouts,\n  BaseQueryError,\n} from '@strapi/admin/strapi-admin';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport {\n  Box,\n  EmptyStateLayout,\n  Field,\n  Flex,\n  Tooltip,\n  Toggle,\n  Typography,\n} from '@strapi/design-system';\nimport { Sparkle } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { CreateLocale } from '../components/CreateLocale';\nimport { LocaleTable } from '../components/LocaleTable';\nimport { PERMISSIONS } from '../constants';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetSettingsQuery, useUpdatei18nSettingsMutation } from '../services/settings';\nimport { getTranslation } from '../utils/getTranslation';\n\nconst SettingsErrrorTooltip = ({\n  children,\n  error,\n}: {\n  children: React.ReactNode;\n  error: BaseQueryError | SerializedError | undefined;\n}) => {\n  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n  if (error) {\n    return (\n      <Tooltip label={formatAPIError(error)} style={{ maxWidth: '200px' }}>\n        {children}\n      </Tooltip>\n    );\n  }\n\n  return children;\n};\n\nconst SettingsPage = () => {\n  const { formatMessage } = useIntl();\n  const { toggleNotification } = useNotification();\n  const { data: locales, isLoading: isLoadingLocales, error } = useGetLocalesQuery();\n  const {\n    isLoading: isLoadingRBAC,\n    allowedActions: { canUpdate, canCreate, canDelete },\n  } = useRBAC(PERMISSIONS);\n  const isAIAvailable = useAIAvailability();\n\n  // Settings state management\n  const {\n    data: settings,\n    isLoading: isLoadingSettings,\n    error: settingsError,\n  } = useGetSettingsQuery();\n  const [updateSettings] = useUpdatei18nSettingsMutation();\n\n  const handleToggleChange = async (checked: boolean) => {\n    try {\n      await updateSettings({ aiLocalizations: checked }).unwrap();\n\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({ id: 'notification.form.success.fields' }),\n      });\n    } catch (err) {\n      console.error(err);\n      toggleNotification({\n        type: 'danger',\n        message: formatMessage({\n          id: 'notification.error',\n          defaultMessage: 'An error occurred',\n        }),\n      });\n    }\n  };\n\n  const isLoading = isLoadingLocales || isLoadingRBAC || isLoadingSettings;\n\n  if (isLoading) {\n    return <Page.Loading />;\n  }\n\n  if (error || !Array.isArray(locales)) {\n    return <Page.Error />;\n  }\n\n  return (\n    <Page.Main tabIndex={-1}>\n      <Layouts.Header\n        primaryAction={<CreateLocale disabled={!canCreate} />}\n        title={formatMessage({\n          id: getTranslation('plugin.name'),\n          defaultMessage: 'Internationalization',\n        })}\n        subtitle={formatMessage({\n          id: getTranslation('Settings.list.description'),\n          defaultMessage: 'Configure the settings',\n        })}\n      />\n      <Layouts.Content>\n        {isAIAvailable && window.strapi.future.isEnabled('unstableAILocalizations') && (\n          <Flex background=\"neutral0\" padding={6} marginBottom={6} shadow=\"filterShadow\" hasRadius>\n            <Flex direction=\"column\" alignItems=\"stretch\" gap={1} flex={1}>\n              <Flex gap={1}>\n                <Box color=\"alternative700\">\n                  <Sparkle />\n                </Box>\n                <Typography variant=\"delta\" tag=\"h2\">\n                  {formatMessage({\n                    id: getTranslation('Settings.aiLocalizations.label'),\n                    defaultMessage: 'AI Translations',\n                  })}\n                </Typography>\n              </Flex>\n              <Typography variant=\"pi\" textColor=\"neutral600\" fontSize=\"14px\">\n                {formatMessage({\n                  id: getTranslation('Settings.aiLocalizations.description'),\n                  defaultMessage:\n                    'Everytime you save in the Content Manager, our AI will use your default locale to translate all other locales automatically.',\n                })}\n              </Typography>\n            </Flex>\n            <Field.Root name=\"aiLocalizations\" minWidth=\"200px\">\n              <SettingsErrrorTooltip error={settingsError}>\n                <Toggle\n                  disabled={Boolean(settingsError)}\n                  checked={settings?.data?.aiLocalizations ?? false}\n                  offLabel={formatMessage({\n                    id: 'app.components.ToggleCheckbox.disabled-label',\n                    defaultMessage: 'Disabled',\n                  })}\n                  onLabel={formatMessage({\n                    id: 'app.components.ToggleCheckbox.enabled-label',\n                    defaultMessage: 'Enabled',\n                  })}\n                  onChange={(e) => handleToggleChange(e.target.checked)}\n                />\n              </SettingsErrrorTooltip>\n            </Field.Root>\n          </Flex>\n        )}\n        {locales.length > 0 ? (\n          <LocaleTable locales={locales} canDelete={canDelete} canUpdate={canUpdate} />\n        ) : (\n          <EmptyStateLayout\n            icon={<EmptyDocuments width={undefined} height={undefined} />}\n            content={formatMessage({\n              id: getTranslation('Settings.list.empty.title'),\n              defaultMessage: 'There are no locales',\n            })}\n            action={<CreateLocale disabled={!canCreate} variant=\"secondary\" />}\n          />\n        )}\n      </Layouts.Content>\n    </Page.Main>\n  );\n};\n\nconst ProtectedSettingsPage = () => {\n  return (\n    <Page.Protect permissions={PERMISSIONS.read}>\n      <SettingsPage />\n    </Page.Protect>\n  );\n};\n\nexport { ProtectedSettingsPage, SettingsPage };\n"],"names":["SettingsErrrorTooltip","children","error","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","_jsx","Tooltip","label","style","maxWidth","SettingsPage","formatMessage","useIntl","toggleNotification","useNotification","data","locales","isLoading","isLoadingLocales","useGetLocalesQuery","isLoadingRBAC","allowedActions","canUpdate","canCreate","canDelete","useRBAC","PERMISSIONS","isAIAvailable","useAIAvailability","settings","isLoadingSettings","settingsError","useGetSettingsQuery","updateSettings","useUpdatei18nSettingsMutation","handleToggleChange","checked","aiLocalizations","unwrap","type","message","id","err","console","defaultMessage","Page","Loading","Array","isArray","Error","_jsxs","Main","tabIndex","Layouts","Header","primaryAction","CreateLocale","disabled","title","getTranslation","subtitle","Content","window","strapi","future","isEnabled","Flex","background","padding","marginBottom","shadow","hasRadius","direction","alignItems","gap","flex","Box","color","Sparkle","Typography","variant","tag","textColor","fontSize","Field","Root","name","minWidth","Toggle","Boolean","offLabel","onLabel","onChange","e","target","length","LocaleTable","EmptyStateLayout","icon","EmptyDocuments","width","undefined","height","content","action","ProtectedSettingsPage","Protect","permissions","read"],"mappings":"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"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"SettingsPage.mjs","sources":["../../../admin/src/pages/SettingsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n  Page,\n  useAPIErrorHandler,\n  useNotification,\n  useRBAC,\n  Layouts,\n  BaseQueryError,\n} from '@strapi/admin/strapi-admin';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport {\n  Box,\n  EmptyStateLayout,\n  Field,\n  Flex,\n  Tooltip,\n  Toggle,\n  Typography,\n} from '@strapi/design-system';\nimport { Sparkle } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { CreateLocale } from '../components/CreateLocale';\nimport { LocaleTable } from '../components/LocaleTable';\nimport { PERMISSIONS } from '../constants';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetSettingsQuery, useUpdatei18nSettingsMutation } from '../services/settings';\nimport { getTranslation } from '../utils/getTranslation';\n\nconst SettingsErrrorTooltip = ({\n  children,\n  error,\n}: {\n  children: React.ReactNode;\n  error: BaseQueryError | SerializedError | undefined;\n}) => {\n  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n  if (error) {\n    return (\n      <Tooltip label={formatAPIError(error)} style={{ maxWidth: '200px' }}>\n        {children}\n      </Tooltip>\n    );\n  }\n\n  return children;\n};\n\nconst SettingsPage = () => {\n  const { formatMessage } = useIntl();\n  const { toggleNotification } = useNotification();\n  const { data: locales, isLoading: isLoadingLocales, error } = useGetLocalesQuery();\n  const {\n    isLoading: isLoadingRBAC,\n    allowedActions: { canUpdate, canCreate, canDelete },\n  } = useRBAC(PERMISSIONS);\n  const isAIAvailable = useAIAvailability();\n\n  // Settings state management\n  const {\n    data: settings,\n    isLoading: isLoadingSettings,\n    error: settingsError,\n  } = useGetSettingsQuery();\n  const [updateSettings] = useUpdatei18nSettingsMutation();\n\n  const handleToggleChange = async (checked: boolean) => {\n    try {\n      await updateSettings({ aiLocalizations: checked }).unwrap();\n\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({ id: 'notification.form.success.fields' }),\n      });\n    } catch (err) {\n      console.error(err);\n      toggleNotification({\n        type: 'danger',\n        message: formatMessage({\n          id: 'notification.error',\n          defaultMessage: 'An error occurred',\n        }),\n      });\n    }\n  };\n\n  const isLoading = isLoadingLocales || isLoadingRBAC || isLoadingSettings;\n\n  if (isLoading) {\n    return <Page.Loading />;\n  }\n\n  if (error || !Array.isArray(locales)) {\n    return <Page.Error />;\n  }\n\n  return (\n    <Page.Main tabIndex={-1}>\n      <Layouts.Header\n        primaryAction={<CreateLocale disabled={!canCreate} />}\n        title={formatMessage({\n          id: getTranslation('plugin.name'),\n          defaultMessage: 'Internationalization',\n        })}\n        subtitle={formatMessage({\n          id: getTranslation('Settings.list.description'),\n          defaultMessage: 'Configure the settings',\n        })}\n      />\n      <Layouts.Content>\n        {isAIAvailable && (\n          <Flex background=\"neutral0\" padding={6} marginBottom={6} shadow=\"filterShadow\" hasRadius>\n            <Flex direction=\"column\" alignItems=\"stretch\" gap={1} flex={1}>\n              <Flex gap={1}>\n                <Box color=\"alternative700\">\n                  <Sparkle />\n                </Box>\n                <Typography variant=\"delta\" tag=\"h2\">\n                  {formatMessage({\n                    id: getTranslation('Settings.aiLocalizations.label'),\n                    defaultMessage: 'AI Translations',\n                  })}\n                </Typography>\n              </Flex>\n              <Typography variant=\"pi\" textColor=\"neutral600\" fontSize=\"14px\">\n                {formatMessage({\n                  id: getTranslation('Settings.aiLocalizations.description'),\n                  defaultMessage:\n                    'Everytime you save in the Content Manager, our AI will use your default locale to translate all other locales automatically.',\n                })}\n              </Typography>\n            </Flex>\n            <Field.Root name=\"aiLocalizations\" minWidth=\"200px\">\n              <SettingsErrrorTooltip error={settingsError}>\n                <Toggle\n                  disabled={Boolean(settingsError)}\n                  checked={settings?.data?.aiLocalizations ?? false}\n                  offLabel={formatMessage({\n                    id: 'app.components.ToggleCheckbox.disabled-label',\n                    defaultMessage: 'Disabled',\n                  })}\n                  onLabel={formatMessage({\n                    id: 'app.components.ToggleCheckbox.enabled-label',\n                    defaultMessage: 'Enabled',\n                  })}\n                  onChange={(e) => handleToggleChange(e.target.checked)}\n                />\n              </SettingsErrrorTooltip>\n            </Field.Root>\n          </Flex>\n        )}\n        {locales.length > 0 ? (\n          <LocaleTable locales={locales} canDelete={canDelete} canUpdate={canUpdate} />\n        ) : (\n          <EmptyStateLayout\n            icon={<EmptyDocuments width={undefined} height={undefined} />}\n            content={formatMessage({\n              id: getTranslation('Settings.list.empty.title'),\n              defaultMessage: 'There are no locales',\n            })}\n            action={<CreateLocale disabled={!canCreate} variant=\"secondary\" />}\n          />\n        )}\n      </Layouts.Content>\n    </Page.Main>\n  );\n};\n\nconst ProtectedSettingsPage = () => {\n  return (\n    <Page.Protect permissions={PERMISSIONS.read}>\n      <SettingsPage />\n    </Page.Protect>\n  );\n};\n\nexport { ProtectedSettingsPage, SettingsPage };\n"],"names":["SettingsErrrorTooltip","children","error","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","_jsx","Tooltip","label","style","maxWidth","SettingsPage","formatMessage","useIntl","toggleNotification","useNotification","data","locales","isLoading","isLoadingLocales","useGetLocalesQuery","isLoadingRBAC","allowedActions","canUpdate","canCreate","canDelete","useRBAC","PERMISSIONS","isAIAvailable","useAIAvailability","settings","isLoadingSettings","settingsError","useGetSettingsQuery","updateSettings","useUpdatei18nSettingsMutation","handleToggleChange","checked","aiLocalizations","unwrap","type","message","id","err","console","defaultMessage","Page","Loading","Array","isArray","Error","_jsxs","Main","tabIndex","Layouts","Header","primaryAction","CreateLocale","disabled","title","getTranslation","subtitle","Content","Flex","background","padding","marginBottom","shadow","hasRadius","direction","alignItems","gap","flex","Box","color","Sparkle","Typography","variant","tag","textColor","fontSize","Field","Root","name","minWidth","Toggle","Boolean","offLabel","onLabel","onChange","e","target","length","LocaleTable","EmptyStateLayout","icon","EmptyDocuments","width","undefined","height","content","action","ProtectedSettingsPage","Protect","permissions","read"],"mappings":"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"}
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            'use strict';
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            var api = require('./api.js');
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            // Import the same constant used by the documents service for consistency
         
     | 
| 
      
 6 
     | 
    
         
            +
            const SINGLE_TYPES = 'single-types';
         
     | 
| 
      
 7 
     | 
    
         
            +
            const aiLocalizationJobsApi = api.i18nApi.injectEndpoints({
         
     | 
| 
      
 8 
     | 
    
         
            +
                endpoints: (builder)=>({
         
     | 
| 
      
 9 
     | 
    
         
            +
                        getAILocalizationJobsByDocument: builder.query({
         
     | 
| 
      
 10 
     | 
    
         
            +
                            query: ({ documentId, collectionType, model })=>({
         
     | 
| 
      
 11 
     | 
    
         
            +
                                    url: collectionType === SINGLE_TYPES ? `/i18n/ai-localization-jobs/single-types/${model}` : `/i18n/ai-localization-jobs/collection-types/${model}/${documentId}`,
         
     | 
| 
      
 12 
     | 
    
         
            +
                                    method: 'GET'
         
     | 
| 
      
 13 
     | 
    
         
            +
                                }),
         
     | 
| 
      
 14 
     | 
    
         
            +
                            providesTags: (result, error, { documentId, model, collectionType })=>[
         
     | 
| 
      
 15 
     | 
    
         
            +
                                    {
         
     | 
| 
      
 16 
     | 
    
         
            +
                                        type: 'AILocalizationJobs',
         
     | 
| 
      
 17 
     | 
    
         
            +
                                        id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
         
     | 
| 
      
 18 
     | 
    
         
            +
                                    }
         
     | 
| 
      
 19 
     | 
    
         
            +
                                ]
         
     | 
| 
      
 20 
     | 
    
         
            +
                        })
         
     | 
| 
      
 21 
     | 
    
         
            +
                    })
         
     | 
| 
      
 22 
     | 
    
         
            +
            });
         
     | 
| 
      
 23 
     | 
    
         
            +
            const { useGetAILocalizationJobsByDocumentQuery } = aiLocalizationJobsApi;
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            exports.useGetAILocalizationJobsByDocumentQuery = useGetAILocalizationJobsByDocumentQuery;
         
     | 
| 
      
 26 
     | 
    
         
            +
            //# sourceMappingURL=aiLocalizationJobs.js.map
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"aiLocalizationJobs.js","sources":["../../../admin/src/services/aiLocalizationJobs.ts"],"sourcesContent":["import { i18nApi } from './api';\n\nimport type { GetAILocalizationJobsByDocument } from '../../../shared/contracts/ai-localization-jobs';\n\n// Import the same constant used by the documents service for consistency\nconst SINGLE_TYPES = 'single-types';\n\nconst aiLocalizationJobsApi = i18nApi.injectEndpoints({\n  endpoints: (builder) => ({\n    getAILocalizationJobsByDocument: builder.query<\n      GetAILocalizationJobsByDocument.Response,\n      {\n        documentId: string;\n        model: string;\n        collectionType: string;\n      }\n    >({\n      query: ({ documentId, collectionType, model }) => ({\n        url:\n          collectionType === SINGLE_TYPES\n            ? `/i18n/ai-localization-jobs/single-types/${model}`\n            : `/i18n/ai-localization-jobs/collection-types/${model}/${documentId}`,\n        method: 'GET',\n      }),\n      providesTags: (result, error, { documentId, model, collectionType }) => [\n        {\n          type: 'AILocalizationJobs',\n          id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model,\n        },\n      ],\n    }),\n  }),\n});\n\nexport const { useGetAILocalizationJobsByDocumentQuery } = aiLocalizationJobsApi;\n"],"names":["SINGLE_TYPES","aiLocalizationJobsApi","i18nApi","injectEndpoints","endpoints","builder","getAILocalizationJobsByDocument","query","documentId","collectionType","model","url","method","providesTags","result","error","type","id","useGetAILocalizationJobsByDocumentQuery"],"mappings":";;;;AAIA;AACA,MAAMA,YAAe,GAAA,cAAA;AAErB,MAAMC,qBAAAA,GAAwBC,WAAQC,CAAAA,eAAe,CAAC;IACpDC,SAAW,EAAA,CAACC,WAAa;YACvBC,+BAAiCD,EAAAA,OAAAA,CAAQE,KAAK,CAO5C;gBACAA,KAAO,EAAA,CAAC,EAAEC,UAAU,EAAEC,cAAc,EAAEC,KAAK,EAAE,IAAM;AACjDC,wBAAAA,GAAAA,EACEF,cAAmBT,KAAAA,YAAAA,GACf,CAAC,wCAAwC,EAAEU,KAAM,CAAA,CAAC,GAClD,CAAC,4CAA4C,EAAEA,KAAAA,CAAM,CAAC,EAAEF,WAAW,CAAC;wBAC1EI,MAAQ,EAAA;qBACV,CAAA;gBACAC,YAAc,EAAA,CAACC,MAAQC,EAAAA,KAAAA,EAAO,EAAEP,UAAU,EAAEE,KAAK,EAAED,cAAc,EAAE,GAAK;AACtE,wBAAA;4BACEO,IAAM,EAAA,oBAAA;4BACNC,EAAIR,EAAAA,cAAAA,KAAmBT,eAAe,CAAC,EAAEU,MAAM,CAAC,EAAEF,UAAW,CAAA,CAAC,GAAGE;AACnE;AACD;AACH,aAAA;SACF;AACF,CAAA,CAAA;AAEa,MAAA,EAAEQ,uCAAuC,EAAE,GAAGjB;;;;"}
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { i18nApi } from './api.mjs';
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            // Import the same constant used by the documents service for consistency
         
     | 
| 
      
 4 
     | 
    
         
            +
            const SINGLE_TYPES = 'single-types';
         
     | 
| 
      
 5 
     | 
    
         
            +
            const aiLocalizationJobsApi = i18nApi.injectEndpoints({
         
     | 
| 
      
 6 
     | 
    
         
            +
                endpoints: (builder)=>({
         
     | 
| 
      
 7 
     | 
    
         
            +
                        getAILocalizationJobsByDocument: builder.query({
         
     | 
| 
      
 8 
     | 
    
         
            +
                            query: ({ documentId, collectionType, model })=>({
         
     | 
| 
      
 9 
     | 
    
         
            +
                                    url: collectionType === SINGLE_TYPES ? `/i18n/ai-localization-jobs/single-types/${model}` : `/i18n/ai-localization-jobs/collection-types/${model}/${documentId}`,
         
     | 
| 
      
 10 
     | 
    
         
            +
                                    method: 'GET'
         
     | 
| 
      
 11 
     | 
    
         
            +
                                }),
         
     | 
| 
      
 12 
     | 
    
         
            +
                            providesTags: (result, error, { documentId, model, collectionType })=>[
         
     | 
| 
      
 13 
     | 
    
         
            +
                                    {
         
     | 
| 
      
 14 
     | 
    
         
            +
                                        type: 'AILocalizationJobs',
         
     | 
| 
      
 15 
     | 
    
         
            +
                                        id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
         
     | 
| 
      
 16 
     | 
    
         
            +
                                    }
         
     | 
| 
      
 17 
     | 
    
         
            +
                                ]
         
     | 
| 
      
 18 
     | 
    
         
            +
                        })
         
     | 
| 
      
 19 
     | 
    
         
            +
                    })
         
     | 
| 
      
 20 
     | 
    
         
            +
            });
         
     | 
| 
      
 21 
     | 
    
         
            +
            const { useGetAILocalizationJobsByDocumentQuery } = aiLocalizationJobsApi;
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            export { useGetAILocalizationJobsByDocumentQuery };
         
     | 
| 
      
 24 
     | 
    
         
            +
            //# sourceMappingURL=aiLocalizationJobs.mjs.map
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"aiLocalizationJobs.mjs","sources":["../../../admin/src/services/aiLocalizationJobs.ts"],"sourcesContent":["import { i18nApi } from './api';\n\nimport type { GetAILocalizationJobsByDocument } from '../../../shared/contracts/ai-localization-jobs';\n\n// Import the same constant used by the documents service for consistency\nconst SINGLE_TYPES = 'single-types';\n\nconst aiLocalizationJobsApi = i18nApi.injectEndpoints({\n  endpoints: (builder) => ({\n    getAILocalizationJobsByDocument: builder.query<\n      GetAILocalizationJobsByDocument.Response,\n      {\n        documentId: string;\n        model: string;\n        collectionType: string;\n      }\n    >({\n      query: ({ documentId, collectionType, model }) => ({\n        url:\n          collectionType === SINGLE_TYPES\n            ? `/i18n/ai-localization-jobs/single-types/${model}`\n            : `/i18n/ai-localization-jobs/collection-types/${model}/${documentId}`,\n        method: 'GET',\n      }),\n      providesTags: (result, error, { documentId, model, collectionType }) => [\n        {\n          type: 'AILocalizationJobs',\n          id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model,\n        },\n      ],\n    }),\n  }),\n});\n\nexport const { useGetAILocalizationJobsByDocumentQuery } = aiLocalizationJobsApi;\n"],"names":["SINGLE_TYPES","aiLocalizationJobsApi","i18nApi","injectEndpoints","endpoints","builder","getAILocalizationJobsByDocument","query","documentId","collectionType","model","url","method","providesTags","result","error","type","id","useGetAILocalizationJobsByDocumentQuery"],"mappings":";;AAIA;AACA,MAAMA,YAAe,GAAA,cAAA;AAErB,MAAMC,qBAAAA,GAAwBC,OAAQC,CAAAA,eAAe,CAAC;IACpDC,SAAW,EAAA,CAACC,WAAa;YACvBC,+BAAiCD,EAAAA,OAAAA,CAAQE,KAAK,CAO5C;gBACAA,KAAO,EAAA,CAAC,EAAEC,UAAU,EAAEC,cAAc,EAAEC,KAAK,EAAE,IAAM;AACjDC,wBAAAA,GAAAA,EACEF,cAAmBT,KAAAA,YAAAA,GACf,CAAC,wCAAwC,EAAEU,KAAM,CAAA,CAAC,GAClD,CAAC,4CAA4C,EAAEA,KAAAA,CAAM,CAAC,EAAEF,WAAW,CAAC;wBAC1EI,MAAQ,EAAA;qBACV,CAAA;gBACAC,YAAc,EAAA,CAACC,MAAQC,EAAAA,KAAAA,EAAO,EAAEP,UAAU,EAAEE,KAAK,EAAED,cAAc,EAAE,GAAK;AACtE,wBAAA;4BACEO,IAAM,EAAA,oBAAA;4BACNC,EAAIR,EAAAA,cAAAA,KAAmBT,eAAe,CAAC,EAAEU,MAAM,CAAC,EAAEF,UAAW,CAAA,CAAC,GAAGE;AACnE;AACD;AACH,aAAA;SACF;AACF,CAAA,CAAA;AAEa,MAAA,EAAEQ,uCAAuC,EAAE,GAAGjB;;;;"}
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"api.js","sources":["../../../admin/src/services/api.ts"],"sourcesContent":["import { adminApi } from '@strapi/admin/strapi-admin';\n\nconst i18nApi = adminApi.enhanceEndpoints({\n  addTagTypes: ['Locale', 'KeyStatistics', 'Settings'],\n});\n\nexport { i18nApi };\n"],"names":["i18nApi","adminApi","enhanceEndpoints","addTagTypes"],"mappings":";;;;AAEMA,MAAAA,OAAAA,GAAUC,oBAASC,CAAAA,gBAAgB,CAAC;IACxCC,WAAa,EAAA;AAAC,QAAA,QAAA;AAAU,QAAA,eAAA;AAAiB,QAAA; 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"api.js","sources":["../../../admin/src/services/api.ts"],"sourcesContent":["import { adminApi } from '@strapi/admin/strapi-admin';\n\nconst i18nApi = adminApi.enhanceEndpoints({\n  addTagTypes: ['Locale', 'KeyStatistics', 'Settings', 'AILocalizationJobs'],\n});\n\nexport { i18nApi };\n"],"names":["i18nApi","adminApi","enhanceEndpoints","addTagTypes"],"mappings":";;;;AAEMA,MAAAA,OAAAA,GAAUC,oBAASC,CAAAA,gBAAgB,CAAC;IACxCC,WAAa,EAAA;AAAC,QAAA,QAAA;AAAU,QAAA,eAAA;AAAiB,QAAA,UAAA;AAAY,QAAA;AAAqB;AAC5E,CAAA;;;;"}
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"api.mjs","sources":["../../../admin/src/services/api.ts"],"sourcesContent":["import { adminApi } from '@strapi/admin/strapi-admin';\n\nconst i18nApi = adminApi.enhanceEndpoints({\n  addTagTypes: ['Locale', 'KeyStatistics', 'Settings'],\n});\n\nexport { i18nApi };\n"],"names":["i18nApi","adminApi","enhanceEndpoints","addTagTypes"],"mappings":";;AAEMA,MAAAA,OAAAA,GAAUC,QAASC,CAAAA,gBAAgB,CAAC;IACxCC,WAAa,EAAA;AAAC,QAAA,QAAA;AAAU,QAAA,eAAA;AAAiB,QAAA; 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"api.mjs","sources":["../../../admin/src/services/api.ts"],"sourcesContent":["import { adminApi } from '@strapi/admin/strapi-admin';\n\nconst i18nApi = adminApi.enhanceEndpoints({\n  addTagTypes: ['Locale', 'KeyStatistics', 'Settings', 'AILocalizationJobs'],\n});\n\nexport { i18nApi };\n"],"names":["i18nApi","adminApi","enhanceEndpoints","addTagTypes"],"mappings":";;AAEMA,MAAAA,OAAAA,GAAUC,QAASC,CAAAA,gBAAgB,CAAC;IACxCC,WAAa,EAAA;AAAC,QAAA,QAAA;AAAU,QAAA,eAAA;AAAiB,QAAA,UAAA;AAAY,QAAA;AAAqB;AAC5E,CAAA;;;;"}
         
     | 
| 
         @@ -3,18 +3,25 @@ import type { Locale } from '../../../shared/contracts/locales'; 
     | 
|
| 
       3 
3 
     | 
    
         
             
            import type { Modules } from '@strapi/types';
         
     | 
| 
       4 
4 
     | 
    
         
             
            declare const LocalePickerAction: ({ document, meta, model, collectionType, documentId, }: HeaderActionProps) => {
         
     | 
| 
       5 
5 
     | 
    
         
             
                label: string;
         
     | 
| 
       6 
     | 
    
         
            -
                options: {
         
     | 
| 
      
 6 
     | 
    
         
            +
                options: ({
         
     | 
| 
      
 7 
     | 
    
         
            +
                    _render: () => import("react/jsx-runtime").JSX.Element;
         
     | 
| 
      
 8 
     | 
    
         
            +
                    disabled?: undefined;
         
     | 
| 
      
 9 
     | 
    
         
            +
                    value?: undefined;
         
     | 
| 
      
 10 
     | 
    
         
            +
                    label?: undefined;
         
     | 
| 
      
 11 
     | 
    
         
            +
                    startIcon?: undefined;
         
     | 
| 
      
 12 
     | 
    
         
            +
                } | {
         
     | 
| 
       7 
13 
     | 
    
         
             
                    disabled: boolean;
         
     | 
| 
       8 
14 
     | 
    
         
             
                    value: string;
         
     | 
| 
       9 
15 
     | 
    
         
             
                    label: import("react/jsx-runtime").JSX.Element;
         
     | 
| 
       10 
     | 
    
         
            -
                    startIcon: import("react/jsx-runtime").JSX.Element 
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
                    startIcon: import("react/jsx-runtime").JSX.Element;
         
     | 
| 
      
 17 
     | 
    
         
            +
                    _render?: undefined;
         
     | 
| 
      
 18 
     | 
    
         
            +
                })[];
         
     | 
| 
       12 
19 
     | 
    
         
             
                customizeContent: () => string | undefined;
         
     | 
| 
       13 
20 
     | 
    
         
             
                onSelect: (value: string) => void;
         
     | 
| 
       14 
21 
     | 
    
         
             
                value: Locale | undefined;
         
     | 
| 
       15 
22 
     | 
    
         
             
            } | null;
         
     | 
| 
       16 
     | 
    
         
            -
            declare const AITranslationStatusAction: () => {
         
     | 
| 
       17 
     | 
    
         
            -
                 
     | 
| 
      
 23 
     | 
    
         
            +
            declare const AITranslationStatusAction: ({ documentId, model, collectionType }: HeaderActionProps) => {
         
     | 
| 
      
 24 
     | 
    
         
            +
                _status: {
         
     | 
| 
       18 
25 
     | 
    
         
             
                    message: import("react/jsx-runtime").JSX.Element;
         
     | 
| 
       19 
26 
     | 
    
         
             
                    tooltip: import("react/jsx-runtime").JSX.Element;
         
     | 
| 
       20 
27 
     | 
    
         
             
                };
         
     | 
| 
         @@ -0,0 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            interface UseAILocalizationJobsPollingOptions {
         
     | 
| 
      
 2 
     | 
    
         
            +
                documentId?: string;
         
     | 
| 
      
 3 
     | 
    
         
            +
                model?: string;
         
     | 
| 
      
 4 
     | 
    
         
            +
                collectionType?: string;
         
     | 
| 
      
 5 
     | 
    
         
            +
            }
         
     | 
| 
      
 6 
     | 
    
         
            +
            export declare const useAILocalizationJobsPolling: ({ documentId, model, collectionType, }: UseAILocalizationJobsPollingOptions) => {
         
     | 
| 
      
 7 
     | 
    
         
            +
                status: "processing" | "completed" | "failed" | undefined;
         
     | 
| 
      
 8 
     | 
    
         
            +
            };
         
     | 
| 
      
 9 
     | 
    
         
            +
            export {};
         
     | 
| 
         @@ -0,0 +1,6 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import type { GetAILocalizationJobsByDocument } from '../../../shared/contracts/ai-localization-jobs';
         
     | 
| 
      
 2 
     | 
    
         
            +
            export declare const useGetAILocalizationJobsByDocumentQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<{
         
     | 
| 
      
 3 
     | 
    
         
            +
                documentId: string;
         
     | 
| 
      
 4 
     | 
    
         
            +
                model: string;
         
     | 
| 
      
 5 
     | 
    
         
            +
                collectionType: string;
         
     | 
| 
      
 6 
     | 
    
         
            +
            }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", GetAILocalizationJobsByDocument.Response, "adminApi">>;
         
     | 
| 
         @@ -1,2 +1,2 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            declare const i18nApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, import("@reduxjs/toolkit/dist/query/endpointDefinitions").UpdateDefinitions<{}, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings", never>, "adminApi", "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings", typeof import("@reduxjs/toolkit/query").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react").reactHooksModuleName>;
         
     | 
| 
      
 1 
     | 
    
         
            +
            declare const i18nApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, import("@reduxjs/toolkit/dist/query/endpointDefinitions").UpdateDefinitions<{}, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", never>, "adminApi", "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", typeof import("@reduxjs/toolkit/query").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react").reactHooksModuleName>;
         
     | 
| 
       2 
2 
     | 
    
         
             
            export { i18nApi };
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import type { GetISOLocales } from '../../../shared/contracts/iso-locales';
         
     | 
| 
       2 
2 
     | 
    
         
             
            import type { GetLocales, CreateLocale, DeleteLocale, UpdateLocale } from '../../../shared/contracts/locales';
         
     | 
| 
       3 
     | 
    
         
            -
            declare const useCreateLocaleMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<Omit<import("../../../shared/contracts/locales").Locale, keyof import("../../../shared/contracts/shared").Entity>, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings", CreateLocale.Response, "adminApi">>, useDeleteLocaleMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<import("@strapi/types/dist/data").ID, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings", DeleteLocale.Response, "adminApi">>, useGetLocalesQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings", GetLocales.Response, "adminApi">>, useGetDefaultLocalesQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings", GetISOLocales.Response, "adminApi">>, useUpdateLocaleMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<Pick<import("../../../shared/contracts/locales").Locale, "name" | "isDefault"> & UpdateLocale.Params, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings", UpdateLocale.Response, "adminApi">>;
         
     | 
| 
      
 3 
     | 
    
         
            +
            declare const useCreateLocaleMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<Omit<import("../../../shared/contracts/locales").Locale, keyof import("../../../shared/contracts/shared").Entity>, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", CreateLocale.Response, "adminApi">>, useDeleteLocaleMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<import("@strapi/types/dist/data").ID, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", DeleteLocale.Response, "adminApi">>, useGetLocalesQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", GetLocales.Response, "adminApi">>, useGetDefaultLocalesQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", GetISOLocales.Response, "adminApi">>, useUpdateLocaleMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<Pick<import("../../../shared/contracts/locales").Locale, "name" | "isDefault"> & UpdateLocale.Params, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", UpdateLocale.Response, "adminApi">>;
         
     | 
| 
       4 
4 
     | 
    
         
             
            export { useCreateLocaleMutation, useDeleteLocaleMutation, useGetLocalesQuery, useGetDefaultLocalesQuery, useUpdateLocaleMutation, };
         
     | 
| 
         @@ -3,5 +3,5 @@ declare const useGetManyDraftRelationCountQuery: import("@reduxjs/toolkit/dist/q 
     | 
|
| 
       3 
3 
     | 
    
         
             
                locale?: string | string[] | null | undefined;
         
     | 
| 
       4 
4 
     | 
    
         
             
            } & {
         
     | 
| 
       5 
5 
     | 
    
         
             
                model: string;
         
     | 
| 
       6 
     | 
    
         
            -
            }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings", number, "adminApi">>;
         
     | 
| 
      
 6 
     | 
    
         
            +
            }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", number, "adminApi">>;
         
     | 
| 
       7 
7 
     | 
    
         
             
            export { useGetManyDraftRelationCountQuery };
         
     | 
| 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import type { UpdateSettings } from '../../../shared/contracts/settings';
         
     | 
| 
       2 
     | 
    
         
            -
            declare const useGetSettingsQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings", import("../../../shared/contracts/settings").Settings, "adminApi">>, useUpdatei18nSettingsMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<{
         
     | 
| 
      
 2 
     | 
    
         
            +
            declare const useGetSettingsQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", import("../../../shared/contracts/settings").Settings, "adminApi">>, useUpdatei18nSettingsMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<{
         
     | 
| 
       3 
3 
     | 
    
         
             
                aiLocalizations?: boolean | undefined;
         
     | 
| 
       4 
     | 
    
         
            -
            }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings", UpdateSettings.Response, "adminApi">>;
         
     | 
| 
      
 4 
     | 
    
         
            +
            }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "Locale" | "KeyStatistics" | "Settings" | "AILocalizationJobs", UpdateSettings.Response, "adminApi">>;
         
     | 
| 
       5 
5 
     | 
    
         
             
            export { useGetSettingsQuery, useUpdatei18nSettingsMutation };
         
     | 
| 
         @@ -22,9 +22,12 @@ var en = { 
     | 
|
| 
       22 
22 
     | 
    
         
             
                "CMEditViewBulkLocale.continue-confirmation": "Are you sure you want to continue?",
         
     | 
| 
       23 
23 
     | 
    
         
             
                "CMEditViewAITranslation.status-aria-label": "AI Translation Status",
         
     | 
| 
       24 
24 
     | 
    
         
             
                "CMEditViewAITranslation.status-title": "{enabled, select, true {AI translation enabled} false {AI translation disabled} other {AI translation disabled}}",
         
     | 
| 
       25 
     | 
    
         
            -
                "CMEditViewAITranslation.status-description": "Our AI translates content in all locales each time you save a modification.",
         
     | 
| 
      
 25 
     | 
    
         
            +
                "CMEditViewAITranslation.status-description": "Our AI translates content in all locales each time you save a modification in the default locale.",
         
     | 
| 
       26 
26 
     | 
    
         
             
                "CMEditViewAITranslation.settings-link": "{enabled, select, true {Disable it in settings} false {Enable it in settings} other {Enable it in settings}}",
         
     | 
| 
      
 27 
     | 
    
         
            +
                "CMEditViewAITranslation.job-completed": "AI translation completed successfully!",
         
     | 
| 
      
 28 
     | 
    
         
            +
                "CMEditViewAITranslation.job-failed": "AI translation failed. Please try again.",
         
     | 
| 
       27 
29 
     | 
    
         
             
                "CMEditViewLocalePicker.locale.create": "Create <bold>{locale}</bold> locale",
         
     | 
| 
      
 30 
     | 
    
         
            +
                "CMEditViewLocalePicker.locale.ai-translations": "AI Translations:",
         
     | 
| 
       28 
31 
     | 
    
         
             
                "CMListView.popover.display-locales.label": "Display translated locales",
         
     | 
| 
       29 
32 
     | 
    
         
             
                "CMListView.popover.display-locales.more": "{locales} + {count} more",
         
     | 
| 
       30 
33 
     | 
    
         
             
                "CheckboxConfirmation.Modal.body": "Do you want to disable it?",
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":" 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
         
     |