@strapi/i18n 5.42.0 → 5.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/admin/components/CMHeaderActions.js +28 -25
  2. package/dist/admin/components/CMHeaderActions.js.map +1 -1
  3. package/dist/admin/components/CMHeaderActions.mjs +26 -23
  4. package/dist/admin/components/CMHeaderActions.mjs.map +1 -1
  5. package/dist/admin/index.js +1 -0
  6. package/dist/admin/index.js.map +1 -1
  7. package/dist/admin/index.mjs +1 -0
  8. package/dist/admin/index.mjs.map +1 -1
  9. package/dist/admin/services/fillFromLocale.js +21 -0
  10. package/dist/admin/services/fillFromLocale.js.map +1 -0
  11. package/dist/admin/services/fillFromLocale.mjs +18 -0
  12. package/dist/admin/services/fillFromLocale.mjs.map +1 -0
  13. package/dist/admin/services/settings.js +1 -1
  14. package/dist/admin/services/settings.js.map +1 -1
  15. package/dist/admin/services/settings.mjs +1 -1
  16. package/dist/admin/services/settings.mjs.map +1 -1
  17. package/dist/admin/src/services/aiLocalizationJobs.d.ts +1 -1
  18. package/dist/admin/src/services/api.d.ts +1 -1
  19. package/dist/admin/src/services/fillFromLocale.d.ts +2 -0
  20. package/dist/admin/src/services/locales.d.ts +1 -1
  21. package/dist/admin/src/services/relations.d.ts +1 -1
  22. package/dist/admin/src/services/settings.d.ts +2 -2
  23. package/dist/admin/translations/nl.json.js +91 -0
  24. package/dist/admin/translations/nl.json.js.map +1 -0
  25. package/dist/admin/translations/nl.json.mjs +89 -0
  26. package/dist/admin/translations/nl.json.mjs.map +1 -0
  27. package/dist/admin/translations/pl.json.js +48 -23
  28. package/dist/admin/translations/pl.json.js.map +1 -1
  29. package/dist/admin/translations/pl.json.mjs +48 -23
  30. package/dist/admin/translations/pl.json.mjs.map +1 -1
  31. package/dist/server/bootstrap.js +3 -1
  32. package/dist/server/bootstrap.js.map +1 -1
  33. package/dist/server/bootstrap.mjs +3 -1
  34. package/dist/server/bootstrap.mjs.map +1 -1
  35. package/dist/server/controllers/ai-localization-jobs.js +8 -0
  36. package/dist/server/controllers/ai-localization-jobs.js.map +1 -1
  37. package/dist/server/controllers/ai-localization-jobs.mjs +8 -0
  38. package/dist/server/controllers/ai-localization-jobs.mjs.map +1 -1
  39. package/dist/server/controllers/content-types.js +42 -2
  40. package/dist/server/controllers/content-types.js.map +1 -1
  41. package/dist/server/controllers/content-types.mjs +43 -3
  42. package/dist/server/controllers/content-types.mjs.map +1 -1
  43. package/dist/server/routes/admin.js +18 -0
  44. package/dist/server/routes/admin.js.map +1 -1
  45. package/dist/server/routes/admin.mjs +18 -0
  46. package/dist/server/routes/admin.mjs.map +1 -1
  47. package/dist/server/services/ai-localizations.js +3 -13
  48. package/dist/server/services/ai-localizations.js.map +1 -1
  49. package/dist/server/services/ai-localizations.mjs +3 -13
  50. package/dist/server/services/ai-localizations.mjs.map +1 -1
  51. package/dist/server/services/fill-from-locale.js +435 -0
  52. package/dist/server/services/fill-from-locale.js.map +1 -0
  53. package/dist/server/services/fill-from-locale.mjs +433 -0
  54. package/dist/server/services/fill-from-locale.mjs.map +1 -0
  55. package/dist/server/services/index.js +3 -1
  56. package/dist/server/services/index.js.map +1 -1
  57. package/dist/server/services/index.mjs +3 -1
  58. package/dist/server/services/index.mjs.map +1 -1
  59. package/dist/server/src/bootstrap.d.ts.map +1 -1
  60. package/dist/server/src/controllers/ai-localization-jobs.d.ts.map +1 -1
  61. package/dist/server/src/controllers/content-types.d.ts +1 -0
  62. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  63. package/dist/server/src/controllers/index.d.ts +1 -0
  64. package/dist/server/src/controllers/index.d.ts.map +1 -1
  65. package/dist/server/src/index.d.ts +7 -0
  66. package/dist/server/src/index.d.ts.map +1 -1
  67. package/dist/server/src/routes/admin.d.ts.map +1 -1
  68. package/dist/server/src/services/ai-localizations.d.ts.map +1 -1
  69. package/dist/server/src/services/fill-from-locale.d.ts +16 -0
  70. package/dist/server/src/services/fill-from-locale.d.ts.map +1 -0
  71. package/dist/server/src/services/index.d.ts +6 -0
  72. package/dist/server/src/services/index.d.ts.map +1 -1
  73. package/dist/server/src/utils/index.d.ts +2 -0
  74. package/dist/server/src/utils/index.d.ts.map +1 -1
  75. package/dist/server/src/validation/content-types.d.ts +2 -1
  76. package/dist/server/src/validation/content-types.d.ts.map +1 -1
  77. package/dist/server/utils/index.js.map +1 -1
  78. package/dist/server/utils/index.mjs.map +1 -1
  79. package/dist/server/validation/content-types.js +15 -0
  80. package/dist/server/validation/content-types.js.map +1 -1
  81. package/dist/server/validation/content-types.mjs +15 -1
  82. package/dist/server/validation/content-types.mjs.map +1 -1
  83. package/dist/shared/contracts/content-manager.d.ts +27 -0
  84. package/dist/shared/contracts/content-manager.d.ts.map +1 -0
  85. package/package.json +8 -8
  86. package/dist/admin/src/utils/clean.d.ts +0 -4
  87. package/dist/admin/utils/clean.js +0 -70
  88. package/dist/admin/utils/clean.js.map +0 -1
  89. package/dist/admin/utils/clean.mjs +0 -68
  90. package/dist/admin/utils/clean.mjs.map +0 -1
@@ -14,10 +14,10 @@ var styledComponents = require('styled-components');
14
14
  var useAILocalizationJobsPolling = require('../hooks/useAILocalizationJobsPolling.js');
15
15
  var useI18n = require('../hooks/useI18n.js');
16
16
  var aiLocalizationJobs = require('../services/aiLocalizationJobs.js');
17
+ var fillFromLocale = require('../services/fillFromLocale.js');
17
18
  var locales = require('../services/locales.js');
18
19
  var relations = require('../services/relations.js');
19
20
  var settings = require('../services/settings.js');
20
- var clean = require('../utils/clean.js');
21
21
  var getTranslation = require('../utils/getTranslation.js');
22
22
  var strings = require('../utils/strings.js');
23
23
  var BulkLocaleActionModal = require('./BulkLocaleActionModal.js');
@@ -429,41 +429,41 @@ const AITranslationStatusAction = ({ documentId, model, collectionType })=>{
429
429
  * FillFromAnotherLocaleAction
430
430
  * -----------------------------------------------------------------------------------------------*/ const FillFromAnotherLocaleAction = ({ documentId, meta, model, collectionType })=>{
431
431
  const { formatMessage } = reactIntl.useIntl();
432
+ const { toggleNotification } = strapiAdmin.useNotification();
433
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
432
434
  const [{ query }] = strapiAdmin.useQueryParams();
433
435
  const { hasI18n } = useI18n.useI18n();
434
436
  const currentDesiredLocale = query.plugins?.i18n?.locale;
435
437
  const [localeSelected, setLocaleSelected] = React__namespace.useState(null);
436
438
  const setValues = strapiAdmin.useForm('FillFromAnotherLocale', (state)=>state.setValues);
437
- const { getDocument } = strapiAdmin$1.unstable_useDocumentActions();
438
- const { schema, components } = strapiAdmin$1.unstable_useDocument({
439
- model,
440
- documentId,
441
- collectionType,
442
- params: {
443
- locale: currentDesiredLocale
444
- }
445
- });
439
+ const [getFillFromLocaleData, { isLoading: isFillFromLocaleLoading }] = fillFromLocale.useLazyGetFillFromLocaleDataQuery();
446
440
  const { data: locales$1 = [] } = locales.useGetLocalesQuery();
447
441
  const isAIAvailable = ee.useAIAvailability();
448
442
  const { data: settings$1 } = settings.useGetSettingsQuery();
449
443
  const isAISettingEnabled = settings$1?.data?.aiLocalizations;
450
444
  const availableLocales = Array.isArray(locales$1) ? locales$1.filter((locale)=>meta?.availableLocales.some((l)=>l.locale === locale.code)) : [];
451
- const fillFromLocale = (onClose)=>async ()=>{
452
- const response = await getDocument({
453
- collectionType,
454
- model,
455
- documentId,
456
- params: {
457
- locale: localeSelected
458
- }
459
- });
460
- if (!response || !schema) {
445
+ const fillFromLocale$1 = (onClose)=>async ()=>{
446
+ if (!localeSelected || !currentDesiredLocale) {
461
447
  return;
462
448
  }
463
- const { data } = response;
464
- const cleanedData = clean.cleanData(data, schema, components);
465
- setValues(cleanedData);
466
- onClose();
449
+ try {
450
+ const { data } = await getFillFromLocaleData({
451
+ model,
452
+ documentId,
453
+ sourceLocale: localeSelected,
454
+ targetLocale: currentDesiredLocale,
455
+ collectionType: collectionType
456
+ }).unwrap();
457
+ if (data) {
458
+ setValues(data);
459
+ }
460
+ onClose();
461
+ } catch (err) {
462
+ toggleNotification({
463
+ type: 'danger',
464
+ message: formatAPIError(err)
465
+ });
466
+ }
467
467
  };
468
468
  if (!hasI18n) {
469
469
  return null;
@@ -541,6 +541,7 @@ const AITranslationStatusAction = ({ documentId, model, collectionType })=>{
541
541
  flex: "auto",
542
542
  variant: "tertiary",
543
543
  onClick: onClose,
544
+ disabled: isFillFromLocaleLoading,
544
545
  children: formatMessage({
545
546
  id: getTranslation.getTranslation('CMEditViewCopyLocale.cancel-text'),
546
547
  defaultMessage: 'No, cancel'
@@ -549,7 +550,9 @@ const AITranslationStatusAction = ({ documentId, model, collectionType })=>{
549
550
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
550
551
  flex: "auto",
551
552
  variant: "success",
552
- onClick: fillFromLocale(onClose),
553
+ onClick: fillFromLocale$1(onClose),
554
+ loading: isFillFromLocaleLoading,
555
+ disabled: isFillFromLocaleLoading,
553
556
  children: formatMessage({
554
557
  id: getTranslation.getTranslation('CMEditViewCopyLocale.submit-text'),
555
558
  defaultMessage: 'Yes, fill in'
@@ -1 +1 @@
1
- {"version":3,"file":"CMHeaderActions.js","sources":["../../../admin/src/components/CMHeaderActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { skipToken } from '@reduxjs/toolkit/query';\nimport {\n useNotification,\n useQueryParams,\n Table,\n useAPIErrorHandler,\n FormErrors,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport {\n type DocumentActionComponent,\n type DocumentActionProps,\n unstable_useDocument as useDocument,\n unstable_useDocumentActions as useDocumentActions,\n buildValidParams,\n HeaderActionProps,\n} from '@strapi/content-manager/strapi-admin';\nimport {\n Flex,\n Status,\n Typography,\n Button,\n Modal,\n Field,\n SingleSelect,\n SingleSelectOption,\n Dialog,\n type StatusVariant,\n Box,\n Link,\n} from '@strapi/design-system';\nimport { WarningCircle, ListPlus, Trash, Earth, Cross, Plus, Sparkle, Loader } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAILocalizationJobsPolling } from '../hooks/useAILocalizationJobsPolling';\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetAILocalizationJobsByDocumentQuery } from '../services/aiLocalizationJobs';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetManyDraftRelationCountQuery } from '../services/relations';\nimport { useGetSettingsQuery } from '../services/settings';\nimport { cleanData } from '../utils/clean';\nimport { getTranslation } from '../utils/getTranslation';\nimport { capitalize } from '../utils/strings';\n\nimport { BulkLocaleActionModal } from './BulkLocaleActionModal';\n\nimport type { Locale } from '../../../shared/contracts/locales';\nimport type { I18nBaseQuery } from '../types';\nimport type { Modules } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * LocalePickerAction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocaleOptionProps {\n isDraftAndPublishEnabled: boolean;\n locale: Locale;\n status: 'draft' | 'published' | 'modified';\n entryExists: boolean;\n translationStatus?: 'processing' | 'failed' | 'completed' | undefined;\n}\n\nconst statusVariants: Record<LocaleOptionProps['status'], StatusVariant> = {\n draft: 'secondary',\n published: 'success',\n modified: 'alternative',\n};\n\nconst LocaleOption = ({\n isDraftAndPublishEnabled,\n locale,\n status,\n entryExists,\n}: LocaleOptionProps) => {\n const { formatMessage } = useIntl();\n\n if (!entryExists) {\n return formatMessage(\n {\n id: getTranslation('CMEditViewLocalePicker.locale.create'),\n defaultMessage: 'Create <bold>{locale}</bold> locale',\n },\n {\n bold: (locale: React.ReactNode) => <b>{locale}</b>,\n locale: locale.name,\n }\n );\n }\n\n return (\n <Flex width=\"100%\" gap={1} justifyContent=\"space-between\">\n <Typography>{locale.name}</Typography>\n {isDraftAndPublishEnabled ? (\n <Status\n display=\"flex\"\n paddingLeft=\"6px\"\n paddingRight=\"6px\"\n paddingTop=\"2px\"\n paddingBottom=\"2px\"\n size=\"S\"\n variant={statusVariants[status]}\n >\n <Typography tag=\"span\" variant=\"pi\" fontWeight=\"bold\">\n {capitalize(status)}\n </Typography>\n </Status>\n ) : null}\n </Flex>\n );\n};\n\nconst LocaleOptionStartIcon = ({\n entryWithLocaleExists,\n translationStatus,\n index,\n}: {\n entryWithLocaleExists: boolean;\n translationStatus?: 'processing' | 'failed' | 'completed' | undefined;\n index?: number;\n}) => {\n const isAiAvailable = useAIAvailability();\n\n if (!entryWithLocaleExists) {\n return <Plus />;\n }\n\n if (isAiAvailable && index !== 0 && translationStatus === 'failed') {\n return <WarningCircle fill=\"warning600\" />;\n }\n\n return null;\n};\n\nconst LocalePickerAction = ({\n document,\n meta,\n model,\n collectionType,\n documentId,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<I18nBaseQuery>();\n const { hasI18n, canCreate, canRead } = useI18n();\n const { data: locales = [] } = useGetLocalesQuery();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const { schema } = useDocument({\n model,\n collectionType,\n documentId,\n params: { locale: currentDesiredLocale },\n });\n const { data: jobData } = useGetAILocalizationJobsByDocumentQuery({\n documentId: documentId!,\n model: model!,\n collectionType: collectionType!,\n });\n const { data: settings } = useGetSettingsQuery();\n const isAiAvailable = useAIAvailability();\n const setValues = useForm('LocalePickerAction', (state) => state.setValues);\n\n const handleSelect = React.useCallback(\n (value: string) => {\n setQuery(\n {\n plugins: {\n ...query.plugins,\n i18n: {\n locale: value,\n },\n },\n },\n 'push',\n true\n );\n },\n [query.plugins, setQuery]\n );\n\n const nonTranslatedFields = React.useMemo(() => {\n if (!schema?.attributes) return [];\n return Object.keys(schema.attributes).filter((field) => {\n const attribute = schema.attributes[field] as Record<string, unknown>;\n return (attribute?.pluginOptions as any)?.i18n?.localized === false;\n });\n }, [schema?.attributes]);\n\n const sourceLocaleData = React.useMemo(() => {\n if (!Array.isArray(locales) || !meta?.availableLocales) return null;\n\n const defaultLocale = locales.find((locale: Locale) => locale.isDefault);\n const existingLocales = meta.availableLocales.map((loc) => loc.locale);\n\n const sourceLocaleCode =\n defaultLocale &&\n existingLocales.includes(defaultLocale.code) &&\n defaultLocale.code !== currentDesiredLocale\n ? defaultLocale.code\n : existingLocales.find((locale) => locale !== currentDesiredLocale);\n\n if (!sourceLocaleCode) return null;\n\n // Find the document data from availableLocales (now includes non-translatable fields)\n const sourceLocaleDoc = meta.availableLocales.find((loc) => loc.locale === sourceLocaleCode);\n\n return sourceLocaleDoc\n ? { locale: sourceLocaleCode, data: sourceLocaleDoc as Record<string, unknown> }\n : null;\n }, [locales, meta?.availableLocales, currentDesiredLocale]);\n\n /**\n * Prefilling form with non-translatable fields from already existing locale\n */\n React.useEffect(() => {\n // Only run when creating a new locale (no document ID yet) and when we have non-translatable fields\n if (!document?.id && nonTranslatedFields.length > 0 && sourceLocaleData?.data) {\n const dataToSet = nonTranslatedFields.reduce(\n (acc: Record<string, unknown>, field: string) => {\n acc[field] = sourceLocaleData.data[field];\n return acc;\n },\n {}\n );\n\n if (Object.keys(dataToSet).length > 0) {\n setValues(dataToSet);\n }\n }\n }, [document?.id, nonTranslatedFields, sourceLocaleData?.data, setValues]);\n\n React.useEffect(() => {\n if (!Array.isArray(locales) || !hasI18n) {\n return;\n }\n /**\n * Handle the case where the current locale query param doesn't exist\n * in the list of available locales, so we redirect to the default locale.\n */\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const defaultLocale = locales.find((locale) => locale.isDefault);\n if (!doesLocaleExist && defaultLocale?.code) {\n handleSelect(defaultLocale.code);\n }\n }, [handleSelect, hasI18n, locales, currentDesiredLocale]);\n\n const currentLocale = Array.isArray(locales)\n ? locales.find((locale) => locale.code === currentDesiredLocale)\n : undefined;\n\n // Use meta.availableLocales instead of document.localizations\n // meta.availableLocales contains all locales for the document, even when creating new locales\n const availableLocales = meta?.availableLocales ?? [];\n const documentLocalizations = document?.localizations ?? [];\n\n // Prefer meta.availableLocales as it's more reliable, fallback to document.localizations\n const allLocalizations = availableLocales.length > 0 ? availableLocales : documentLocalizations;\n\n const allCurrentLocales = [\n { status: getDocumentStatus(document, meta), locale: currentLocale?.code },\n ...allLocalizations,\n ];\n\n if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n return null;\n }\n\n const displayedLocales = locales.filter((locale) => {\n /**\n * If you can read we allow you to see the locale exists\n * otherwise the locale is hidden.\n */\n return canRead.includes(locale.code);\n });\n\n const localesSortingDefaultFirst = displayedLocales.sort((a, b) =>\n a.isDefault ? -1 : b.isDefault ? 1 : 0\n );\n\n return {\n label: formatMessage({\n id: getTranslation('Settings.locales.modal.locales.label'),\n defaultMessage: 'Locales',\n }),\n options: localesSortingDefaultFirst.map((locale, index) => {\n const entryWithLocaleExists = allCurrentLocales.some((doc) => doc.locale === locale.code);\n\n const currentLocaleDoc = allCurrentLocales.find((doc) =>\n 'locale' in doc ? doc.locale === locale.code : false\n );\n\n const permissionsToCheck = currentLocaleDoc ? canRead : canCreate;\n\n if (isAiAvailable && settings?.data?.aiLocalizations) {\n return {\n _render: () => (\n <React.Fragment key={index}>\n <SingleSelectOption\n disabled={!permissionsToCheck.includes(locale.code)}\n key={locale.code}\n startIcon={\n <LocaleOptionStartIcon\n entryWithLocaleExists={entryWithLocaleExists}\n translationStatus={jobData?.data?.status}\n index={index}\n />\n }\n value={locale.code}\n >\n <LocaleOption\n isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n locale={locale}\n status={currentLocaleDoc?.status}\n entryExists={entryWithLocaleExists}\n />\n </SingleSelectOption>\n {localesSortingDefaultFirst.length > 1 && index === 0 && (\n <Box paddingRight={4} paddingLeft={4} paddingTop={2} paddingBottom={2}>\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('CMEditViewLocalePicker.locale.ai-translations'),\n defaultMessage: 'AI Translations',\n })}\n </Typography>\n </Box>\n )}\n </React.Fragment>\n ),\n };\n }\n\n return {\n disabled: !permissionsToCheck.includes(locale.code),\n value: locale.code,\n label: (\n <LocaleOption\n isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n locale={locale}\n status={currentLocaleDoc?.status}\n entryExists={entryWithLocaleExists}\n translationStatus={jobData?.data?.status}\n />\n ),\n startIcon: <LocaleOptionStartIcon entryWithLocaleExists={entryWithLocaleExists} />,\n };\n }),\n customizeContent: () => currentLocale?.name,\n onSelect: handleSelect,\n value: currentLocale,\n };\n};\n\ntype UseDocument = typeof useDocument;\n\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AISettingsStatusAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst AITranslationStatusIcon = styled(Status)<{ $isAISettingEnabled: boolean }>`\n display: flex;\n gap: ${({ theme }) => theme.spaces[1]};\n justify-content: center;\n align-items: center;\n height: 3.2rem;\n width: 3.2rem;\n\n // Disabled state\n ${({ $isAISettingEnabled, theme }) =>\n !$isAISettingEnabled &&\n `\n background-color: ${theme.colors.neutral150};\n `}\n\n svg {\n ${({ $isAISettingEnabled, theme }) =>\n !$isAISettingEnabled &&\n `\n fill: ${theme.colors.neutral300};\n `}\n }\n`;\n\nconst SpinningLoader = styled(Loader)`\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n\n animation: spin 2s linear infinite;\n`;\n\nconst AITranslationStatusAction = ({ documentId, model, collectionType }: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const isAIAvailable = useAIAvailability();\n const { data: settings } = useGetSettingsQuery();\n const isAISettingEnabled = settings?.data?.aiLocalizations;\n const { hasI18n } = useI18n();\n\n // Poll for AI localizations jobs when AI is enabled and we have a documentId\n const { status } = useAILocalizationJobsPolling({\n documentId,\n model,\n collectionType,\n });\n const statusVariant = (() => {\n if (status === 'failed') {\n return 'warning';\n }\n\n if (isAISettingEnabled) {\n return 'alternative';\n }\n\n return 'neutral';\n })();\n\n // Do not display this action when i18n is not available\n if (!hasI18n) {\n return null;\n }\n\n // Do not display this action when AI is not available\n if (!isAIAvailable) {\n return null;\n }\n\n return {\n _status: {\n message: (\n <Flex\n height=\"100%\"\n alignItems=\"center\"\n aria-label={formatMessage({\n id: getTranslation('CMEditViewAITranslation.status-aria-label'),\n defaultMessage: 'AI Translation Status',\n })}\n >\n <AITranslationStatusIcon\n $isAISettingEnabled={Boolean(isAISettingEnabled)}\n variant={statusVariant}\n size=\"S\"\n >\n {status === 'processing' ? <SpinningLoader /> : <Sparkle />}\n </AITranslationStatusIcon>\n </Flex>\n ),\n tooltip: (\n <Flex direction=\"column\" padding={4} alignItems=\"flex-start\" width=\"25rem\">\n <Typography variant=\"pi\" fontWeight=\"600\">\n {formatMessage(\n {\n id: getTranslation('CMEditViewAITranslation.status-title'),\n defaultMessage:\n '{enabled, select, true {AI translation enabled} false {AI translation disabled} other {AI translation disabled}}',\n },\n { enabled: isAISettingEnabled }\n )}\n </Typography>\n <Typography variant=\"pi\" paddingTop={1} paddingBottom={3}>\n {formatMessage({\n id: getTranslation('CMEditViewAITranslation.status-description'),\n defaultMessage:\n 'Our AI translates content in all locales each time you save a modification in the default locale.',\n })}\n </Typography>\n <Link\n fontSize=\"inherit\"\n tag={NavLink}\n to=\"/settings/internationalization\"\n style={{ alignSelf: 'flex-end' }}\n >\n <Typography variant=\"pi\" textAlign=\"right\">\n {formatMessage(\n {\n id: getTranslation('CMEditViewAITranslation.settings-link'),\n defaultMessage:\n '{enabled, select, true {Disable it in settings} false {Enable it in settings} other {Enable it in settings}}',\n },\n { enabled: isAISettingEnabled }\n )}\n </Typography>\n </Link>\n </Flex>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FillFromAnotherLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst FillFromAnotherLocaleAction = ({\n documentId,\n meta,\n model,\n collectionType,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const { hasI18n } = useI18n();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const [localeSelected, setLocaleSelected] = React.useState<string | null>(null);\n const setValues = useForm('FillFromAnotherLocale', (state) => state.setValues);\n\n const { getDocument } = useDocumentActions();\n const { schema, components } = useDocument({\n model,\n documentId,\n collectionType,\n params: { locale: currentDesiredLocale },\n });\n const { data: locales = [] } = useGetLocalesQuery();\n\n const isAIAvailable = useAIAvailability();\n const { data: settings } = useGetSettingsQuery();\n const isAISettingEnabled = settings?.data?.aiLocalizations;\n\n const availableLocales = Array.isArray(locales)\n ? locales.filter((locale) => meta?.availableLocales.some((l) => l.locale === locale.code))\n : [];\n\n const fillFromLocale = (onClose: () => void) => async () => {\n const response = await getDocument({\n collectionType,\n model,\n documentId,\n params: { locale: localeSelected },\n });\n if (!response || !schema) {\n return;\n }\n\n const { data } = response;\n\n const cleanedData = cleanData(data, schema, components);\n\n setValues(cleanedData);\n\n onClose();\n };\n\n if (!hasI18n) {\n return null;\n }\n\n // Do not display this action when AI is available and AI translations are enabled\n if (isAIAvailable && isAISettingEnabled) {\n return null;\n }\n\n return {\n type: 'icon',\n icon: <Earth />,\n disabled: availableLocales.length === 0,\n label: formatMessage({\n id: getTranslation('CMEditViewCopyLocale.copy-text'),\n defaultMessage: 'Fill in from another locale',\n }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: ({ onClose }: { onClose: () => void }) => (\n <>\n <Dialog.Body>\n <Flex direction=\"column\" gap={3}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.body'),\n defaultMessage:\n 'Your current content will be erased and filled by the content of the selected locale:',\n })}\n </Typography>\n <Field.Root width=\"100%\">\n <Field.Label>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.field.label'),\n defaultMessage: 'Locale',\n })}\n </Field.Label>\n <SingleSelect\n value={localeSelected}\n placeholder={formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.field.placeholder'),\n defaultMessage: 'Select one locale...',\n })}\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={(value) => setLocaleSelected(value)}\n >\n {availableLocales.map((locale) => (\n <SingleSelectOption key={locale.code} value={locale.code}>\n {locale.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Flex gap={2} width=\"100%\">\n <Button flex=\"auto\" variant=\"tertiary\" onClick={onClose}>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.cancel-text'),\n defaultMessage: 'No, cancel',\n })}\n </Button>\n <Button flex=\"auto\" variant=\"success\" onClick={fillFromLocale(onClose)}>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.submit-text'),\n defaultMessage: 'Yes, fill in',\n })}\n </Button>\n </Flex>\n </Dialog.Footer>\n </>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteLocaleAction: DocumentActionComponent = ({\n document,\n documentId,\n model,\n collectionType,\n}) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { hasI18n, canDelete } = useI18n();\n\n // Get the current locale object, using the URL instead of document so it works while creating\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const { data: locales = [] } = useGetLocalesQuery();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const locale = !('error' in locales) && locales.find((loc) => loc.code === currentDesiredLocale);\n\n if (!hasI18n) {\n return null;\n }\n\n return {\n disabled:\n (document?.locale && !canDelete.includes(document.locale)) || !document || !document.id,\n position: ['header', 'table-row'],\n label: formatMessage(\n {\n id: getTranslation('actions.delete.label'),\n defaultMessage: 'Delete entry ({locale})',\n },\n { locale: locale && locale.name }\n ),\n icon: <StyledTrash />,\n variant: 'danger',\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('actions.delete.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: getTranslation('actions.delete.dialog.body'),\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n const unableToDelete =\n // We are unable to delete a collection type without a document ID\n // & unable to delete generally if there is no document locale\n (collectionType !== 'single-types' && !documentId) || !document?.locale;\n\n if (unableToDelete) {\n console.error(\n \"You're trying to delete a document without an id or locale, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: getTranslation('actions.delete.error'),\n defaultMessage: 'An error occurred while trying to delete the document locale.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: { locale: document.locale },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n },\n },\n };\n};\n\nexport type LocaleStatus = {\n locale: string;\n status: Modules.Documents.Params.PublicationStatus.Kind | 'modified';\n};\n\ninterface ExtendedDocumentActionProps extends DocumentActionProps {\n action?: 'bulk-publish' | 'bulk-unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleAction\n *\n * This component is used to handle bulk publish and unpublish actions on locales.\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkLocaleAction: DocumentActionComponent = ({\n document,\n documentId,\n model,\n collectionType,\n action,\n meta,\n}: ExtendedDocumentActionProps) => {\n const locale = document?.locale ?? null;\n const [{ query }] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const isOnPublishedTab = query.status === 'published';\n\n const { formatMessage } = useIntl();\n const { hasI18n, canPublish } = useI18n();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [selectedRows, setSelectedRows] = React.useState<any[]>([]);\n const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] =\n React.useState<boolean>(false);\n\n const { publishMany: publishManyAction, unpublishMany: unpublishManyAction } =\n useDocumentActions();\n\n const { schema, validate } = useDocument(\n {\n model,\n collectionType,\n documentId,\n params: {\n locale,\n },\n },\n {\n // No need to fetch the document, the data is already available in the `document` prop\n skip: true,\n }\n );\n\n const { data: localesMetadata = [] } = useGetLocalesQuery(hasI18n ? undefined : skipToken);\n\n const headers = [\n {\n label: formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: getTranslation('CMEditViewBulkLocale.status'),\n defaultMessage: 'Status',\n }),\n name: 'status',\n },\n {\n label: formatMessage({\n id: getTranslation('CMEditViewBulkLocale.publication-status'),\n defaultMessage: 'Publication Status',\n }),\n name: 'publication-status',\n },\n ];\n\n // Extract the rows for the bulk locale publish modal and any validation\n // errors per locale\n const [rows, validationErrors] = React.useMemo(() => {\n if (!document) {\n return [[], {}];\n }\n\n const metaLocalizations = (meta?.availableLocales ?? []).map((locale) => ({\n locale: locale.locale,\n status: (locale.status ?? 'draft') as LocaleStatus['status'],\n }));\n\n const documentLocalizations = (\n (document.localizations ?? []) as Array<{\n locale?: string | null;\n status?: Modules.Documents.Params.PublicationStatus.Kind | 'modified' | null;\n }>\n ).map((doc) => ({\n locale: doc.locale ?? undefined,\n status: (doc.status ?? 'draft') as LocaleStatus['status'],\n }));\n\n const localesMap = new Map<string, LocaleStatus>();\n\n metaLocalizations.forEach(({ locale, status }) => {\n if (locale) {\n localesMap.set(locale, { locale, status });\n }\n });\n\n documentLocalizations.forEach(({ locale, status }) => {\n if (locale) {\n localesMap.set(locale, { locale, status });\n }\n });\n\n // Build the rows for the bulk locale publish modal by combining the current\n // document with all the available locales from the document meta\n const locales: LocaleStatus[] = [];\n\n if (document?.locale) {\n locales.push({\n locale: document.locale,\n status: (document.status ?? 'draft') as LocaleStatus['status'],\n });\n }\n\n locales.push(\n ...Array.from(localesMap.entries())\n .filter(([locale]) => locale !== document?.locale)\n .map(([, value]) => value)\n );\n\n if (locales.length === 0 && document?.locale) {\n locales.push({\n locale: document.locale,\n status: (document.status ?? 'draft') as LocaleStatus['status'],\n });\n }\n\n // Validate the current document locale only. Other locales have minimal\n // data populated for performance reasons and will be validated server-side\n // during the actual bulk publish operation.\n const errors: FormErrors = {};\n if (document.locale) {\n const validation = validate(document as Modules.Documents.AnyDocument);\n if (validation !== null) {\n errors[document.locale] = validation;\n }\n }\n\n return [locales, errors];\n }, [document, meta?.availableLocales, validate]);\n\n const isBulkPublish = action === 'bulk-publish';\n const localesForAction = selectedRows.reduce((acc: string[], selectedRow: LocaleStatus) => {\n const isValidLocale =\n // Validation errors are irrelevant if we are trying to unpublish\n !isBulkPublish || !Object.keys(validationErrors).includes(selectedRow.locale);\n\n const shouldAddLocale = isBulkPublish\n ? selectedRow.status !== 'published' && isValidLocale\n : selectedRow.status !== 'draft' && isValidLocale;\n\n if (shouldAddLocale) {\n acc.push(selectedRow.locale);\n }\n\n return acc;\n }, []);\n\n // TODO skipping this for now as there is a bug with the draft relation count that will be worked on separately\n // see https://www.notion.so/strapi/Count-draft-relations-56901b492efb45ab90d42fe975b32bd8?pvs=4\n const enableDraftRelationsCount = false;\n const {\n data: draftRelationsCount = 0,\n isLoading: isDraftRelationsLoading,\n error: isDraftRelationsError,\n } = useGetManyDraftRelationCountQuery(\n {\n model,\n documentIds: [documentId!],\n locale: localesForAction,\n },\n {\n skip: !enableDraftRelationsCount || !documentId || localesForAction.length === 0,\n }\n );\n\n React.useEffect(() => {\n if (isDraftRelationsError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(isDraftRelationsError),\n });\n }\n }, [isDraftRelationsError, toggleNotification, formatAPIError]);\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n if (!hasI18n) {\n return null;\n }\n\n if (!documentId) {\n return null;\n }\n\n // This document action can be enabled given that draft and publish and i18n are\n // enabled and we can publish the current locale.\n\n const publish = async () => {\n await publishManyAction({\n model,\n documentIds: [documentId],\n params: {\n ...params,\n locale: localesForAction,\n },\n });\n\n setSelectedRows([]);\n };\n\n const unpublish = async () => {\n await unpublishManyAction({\n model,\n documentIds: [documentId],\n params: {\n ...params,\n locale: localesForAction,\n },\n });\n\n setSelectedRows([]);\n };\n\n const handleAction = async () => {\n if (draftRelationsCount > 0) {\n setIsDraftRelationConfirmationOpen(true);\n } else if (isBulkPublish) {\n await publish();\n } else {\n await unpublish();\n }\n };\n\n if (isDraftRelationConfirmationOpen) {\n return {\n label: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n variant: 'danger',\n dialog: {\n onCancel: () => {\n setIsDraftRelationConfirmationOpen(false);\n },\n onConfirm: async () => {\n await publish();\n\n setIsDraftRelationConfirmationOpen(false);\n },\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('actions.publish.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <WarningCircle width=\"2.4rem\" height=\"2.4rem\" fill=\"danger600\" />\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewBulkLocale.draft-relation-warning'),\n defaultMessage:\n 'Some locales are related to draft entries. Publishing them could leave broken links in your app.',\n })}\n </Typography>\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewBulkLocale.continue-confirmation'),\n defaultMessage: 'Are you sure you want to continue?',\n })}\n </Typography>\n </Flex>\n ),\n },\n };\n }\n\n const hasPermission = selectedRows\n .map(({ locale }) => locale)\n .every((locale) => canPublish.includes(locale));\n\n return {\n label: formatMessage({\n id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n }),\n variant: isBulkPublish ? 'secondary' : 'danger',\n icon: isBulkPublish ? <ListPlus /> : <Cross />,\n disabled: isOnPublishedTab || canPublish.length === 0,\n position: ['panel'],\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n }),\n content: () => {\n return (\n <Table.Root\n headers={headers}\n rows={rows.map((row) => ({\n ...row,\n id: row.locale,\n }))}\n selectedRows={selectedRows}\n onSelectedRowsChange={(tableSelectedRows) => setSelectedRows(tableSelectedRows)}\n >\n <BulkLocaleActionModal\n validationErrors={validationErrors}\n headers={headers}\n rows={rows}\n localesMetadata={localesMetadata as Locale[]}\n action={action ?? 'bulk-publish'}\n />\n </Table.Root>\n );\n },\n footer: () => (\n <Modal.Footer justifyContent=\"flex-end\">\n <Button\n loading={isDraftRelationsLoading}\n disabled={!hasPermission || localesForAction.length === 0}\n variant=\"default\"\n onClick={handleAction}\n >\n {formatMessage({\n id: isBulkPublish ? 'app.utils.publish' : 'app.utils.unpublish',\n defaultMessage: isBulkPublish ? 'Publish' : 'Unpublish',\n })}\n </Button>\n </Modal.Footer>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocalePublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocalePublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n return BulkLocaleAction({ action: 'bulk-publish', ...props });\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleUnpublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocaleUnpublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n return BulkLocaleAction({ action: 'bulk-unpublish', ...props });\n};\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledTrash = styled(Trash)`\n path {\n fill: currentColor;\n }\n`;\n\nexport {\n BulkLocalePublishAction,\n BulkLocaleUnpublishAction,\n DeleteLocaleAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n AITranslationStatusAction,\n};\n"],"names":["statusVariants","draft","published","modified","LocaleOption","isDraftAndPublishEnabled","locale","status","entryExists","formatMessage","useIntl","id","getTranslation","defaultMessage","bold","_jsx","b","name","_jsxs","Flex","width","gap","justifyContent","Typography","Status","display","paddingLeft","paddingRight","paddingTop","paddingBottom","size","variant","tag","fontWeight","capitalize","LocaleOptionStartIcon","entryWithLocaleExists","translationStatus","index","isAiAvailable","useAIAvailability","Plus","WarningCircle","fill","LocalePickerAction","document","meta","model","collectionType","documentId","query","setQuery","useQueryParams","hasI18n","canCreate","canRead","useI18n","data","locales","useGetLocalesQuery","currentDesiredLocale","plugins","i18n","schema","useDocument","params","jobData","useGetAILocalizationJobsByDocumentQuery","settings","useGetSettingsQuery","setValues","useForm","state","handleSelect","React","useCallback","value","nonTranslatedFields","useMemo","attributes","Object","keys","filter","field","attribute","pluginOptions","localized","sourceLocaleData","Array","isArray","availableLocales","defaultLocale","find","isDefault","existingLocales","map","loc","sourceLocaleCode","includes","code","sourceLocaleDoc","useEffect","length","dataToSet","reduce","acc","doesLocaleExist","currentLocale","undefined","documentLocalizations","localizations","allLocalizations","allCurrentLocales","getDocumentStatus","displayedLocales","localesSortingDefaultFirst","sort","a","label","options","some","doc","currentLocaleDoc","permissionsToCheck","aiLocalizations","_render","Fragment","SingleSelectOption","disabled","startIcon","draftAndPublish","Box","customizeContent","onSelect","docStatus","statuses","availableStatus","publishedAt","AITranslationStatusIcon","styled","theme","spaces","$isAISettingEnabled","colors","neutral150","neutral300","SpinningLoader","Loader","AITranslationStatusAction","isAIAvailable","isAISettingEnabled","useAILocalizationJobsPolling","statusVariant","_status","message","height","alignItems","aria-label","Boolean","Sparkle","tooltip","direction","padding","enabled","Link","fontSize","NavLink","to","style","alignSelf","textAlign","FillFromAnotherLocaleAction","localeSelected","setLocaleSelected","useState","getDocument","useDocumentActions","components","l","fillFromLocale","onClose","response","cleanedData","cleanData","type","icon","Earth","dialog","title","content","_Fragment","Dialog","Body","Field","Root","Label","SingleSelect","placeholder","onChange","Footer","Button","flex","onClick","DeleteLocaleAction","navigate","useNavigate","toggleNotification","useNotification","delete","deleteAction","isLoading","canDelete","position","StyledTrash","loading","onConfirm","unableToDelete","console","error","res","pathname","replace","BulkLocaleAction","action","buildValidParams","isOnPublishedTab","canPublish","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","selectedRows","setSelectedRows","isDraftRelationConfirmationOpen","setIsDraftRelationConfirmationOpen","publishMany","publishManyAction","unpublishMany","unpublishManyAction","validate","skip","localesMetadata","skipToken","headers","rows","validationErrors","metaLocalizations","localesMap","Map","forEach","set","push","from","entries","errors","validation","isBulkPublish","localesForAction","selectedRow","isValidLocale","shouldAddLocale","draftRelationsCount","isDraftRelationsLoading","isDraftRelationsError","useGetManyDraftRelationCountQuery","documentIds","publish","unpublish","handleAction","onCancel","hasPermission","every","ListPlus","Cross","Table","row","onSelectedRowsChange","tableSelectedRows","BulkLocaleActionModal","footer","Modal","BulkLocalePublishAction","props","BulkLocaleUnpublishAction","Trash"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmEA,MAAMA,cAAAA,GAAqE;IACzEC,KAAAA,EAAO,WAAA;IACPC,SAAAA,EAAW,SAAA;IACXC,QAAAA,EAAU;AACZ,CAAA;AAEA,MAAMC,YAAAA,GAAe,CAAC,EACpBC,wBAAwB,EACxBC,MAAM,EACNC,MAAM,EACNC,WAAW,EACO,GAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,IAAI,CAACF,WAAAA,EAAa;AAChB,QAAA,OAAOC,aAAAA,CACL;AACEE,YAAAA,EAAAA,EAAIC,6BAAAA,CAAe,sCAAA,CAAA;YACnBC,cAAAA,EAAgB;SAClB,EACA;YACEC,IAAAA,EAAM,CAACR,uBAA4BS,cAAA,CAACC,GAAAA,EAAAA;AAAGV,oBAAAA,QAAAA,EAAAA;;AACvCA,YAAAA,MAAAA,EAAQA,OAAOW;AACjB,SAAA,CAAA;AAEJ,IAAA;AAEA,IAAA,qBACEC,eAAA,CAACC,iBAAAA,EAAAA;QAAKC,KAAAA,EAAM,MAAA;QAAOC,GAAAA,EAAK,CAAA;QAAGC,cAAAA,EAAe,eAAA;;0BACxCP,cAAA,CAACQ,uBAAAA,EAAAA;AAAYjB,gBAAAA,QAAAA,EAAAA,MAAAA,CAAOW;;AACnBZ,YAAAA,wBAAAA,iBACCU,cAAA,CAACS,mBAAAA,EAAAA;gBACCC,OAAAA,EAAQ,MAAA;gBACRC,WAAAA,EAAY,KAAA;gBACZC,YAAAA,EAAa,KAAA;gBACbC,UAAAA,EAAW,KAAA;gBACXC,aAAAA,EAAc,KAAA;gBACdC,IAAAA,EAAK,GAAA;gBACLC,OAAAA,EAAS/B,cAAc,CAACO,MAAAA,CAAO;AAE/B,gBAAA,QAAA,gBAAAQ,cAAA,CAACQ,uBAAAA,EAAAA;oBAAWS,GAAAA,EAAI,MAAA;oBAAOD,OAAAA,EAAQ,IAAA;oBAAKE,UAAAA,EAAW,MAAA;8BAC5CC,kBAAAA,CAAW3B,MAAAA;;AAGd,aAAA,CAAA,GAAA;;;AAGV,CAAA;AAEA,MAAM4B,qBAAAA,GAAwB,CAAC,EAC7BC,qBAAqB,EACrBC,iBAAiB,EACjBC,KAAK,EAKN,GAAA;AACC,IAAA,MAAMC,aAAAA,GAAgBC,oBAAAA,EAAAA;AAEtB,IAAA,IAAI,CAACJ,qBAAAA,EAAuB;AAC1B,QAAA,qBAAOrB,cAAA,CAAC0B,UAAAA,EAAAA,EAAAA,CAAAA;AACV,IAAA;AAEA,IAAA,IAAIF,aAAAA,IAAiBD,KAAAA,KAAU,CAAA,IAAKD,iBAAAA,KAAsB,QAAA,EAAU;AAClE,QAAA,qBAAOtB,cAAA,CAAC2B,mBAAAA,EAAAA;YAAcC,IAAAA,EAAK;;AAC7B,IAAA;IAEA,OAAO,IAAA;AACT,CAAA;AAEA,MAAMC,kBAAAA,GAAqB,CAAC,EAC1BC,QAAQ,EACRC,IAAI,EACJC,KAAK,EACLC,cAAc,EACdC,UAAU,EACQ,GAAA;IAClB,MAAM,EAAExC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEwC,KAAK,EAAE,EAAEC,SAAS,GAAGC,0BAAAA,EAAAA;AAC9B,IAAA,MAAM,EAAEC,OAAO,EAAEC,SAAS,EAAEC,OAAO,EAAE,GAAGC,eAAAA,EAAAA;AACxC,IAAA,MAAM,EAAEC,IAAAA,EAAMC,SAAAA,GAAU,EAAE,EAAE,GAAGC,0BAAAA,EAAAA;AAC/B,IAAA,MAAMC,oBAAAA,GAAuBV,KAAAA,CAAMW,OAAO,EAAEC,IAAAA,EAAMxD,MAAAA;AAClD,IAAA,MAAM,EAAEyD,MAAM,EAAE,GAAGC,kCAAAA,CAAY;AAC7BjB,QAAAA,KAAAA;AACAC,QAAAA,cAAAA;AACAC,QAAAA,UAAAA;QACAgB,MAAAA,EAAQ;YAAE3D,MAAAA,EAAQsD;AAAqB;AACzC,KAAA,CAAA;AACA,IAAA,MAAM,EAAEH,IAAAA,EAAMS,OAAO,EAAE,GAAGC,0DAAAA,CAAwC;QAChElB,UAAAA,EAAYA,UAAAA;QACZF,KAAAA,EAAOA,KAAAA;QACPC,cAAAA,EAAgBA;AAClB,KAAA,CAAA;AACA,IAAA,MAAM,EAAES,IAAAA,EAAMW,UAAQ,EAAE,GAAGC,4BAAAA,EAAAA;AAC3B,IAAA,MAAM9B,aAAAA,GAAgBC,oBAAAA,EAAAA;AACtB,IAAA,MAAM8B,YAAYC,mBAAAA,CAAQ,oBAAA,EAAsB,CAACC,KAAAA,GAAUA,MAAMF,SAAS,CAAA;AAE1E,IAAA,MAAMG,YAAAA,GAAeC,gBAAAA,CAAMC,WAAW,CACpC,CAACC,KAAAA,GAAAA;QACCzB,QAAAA,CACE;YACEU,OAAAA,EAAS;AACP,gBAAA,GAAGX,MAAMW,OAAO;gBAChBC,IAAAA,EAAM;oBACJxD,MAAAA,EAAQsE;AACV;AACF;AACF,SAAA,EACA,MAAA,EACA,IAAA,CAAA;IAEJ,CAAA,EACA;AAAC1B,QAAAA,KAAAA,CAAMW,OAAO;AAAEV,QAAAA;AAAS,KAAA,CAAA;IAG3B,MAAM0B,mBAAAA,GAAsBH,gBAAAA,CAAMI,OAAO,CAAC,IAAA;AACxC,QAAA,IAAI,CAACf,MAAAA,EAAQgB,UAAAA,EAAY,OAAO,EAAE;QAClC,OAAOC,MAAAA,CAAOC,IAAI,CAAClB,MAAAA,CAAOgB,UAAU,CAAA,CAAEG,MAAM,CAAC,CAACC,KAAAA,GAAAA;AAC5C,YAAA,MAAMC,SAAAA,GAAYrB,MAAAA,CAAOgB,UAAU,CAACI,KAAAA,CAAM;AAC1C,YAAA,OAAO,SAACC,EAAWC,aAAAA,EAAuBvB,IAAAA,EAAMwB,SAAAA,KAAc,KAAA;AAChE,QAAA,CAAA,CAAA;IACF,CAAA,EAAG;QAACvB,MAAAA,EAAQgB;AAAW,KAAA,CAAA;IAEvB,MAAMQ,gBAAAA,GAAmBb,gBAAAA,CAAMI,OAAO,CAAC,IAAA;QACrC,IAAI,CAACU,MAAMC,OAAO,CAAC/B,cAAY,CAACZ,IAAAA,EAAM4C,kBAAkB,OAAO,IAAA;AAE/D,QAAA,MAAMC,gBAAgBjC,SAAAA,CAAQkC,IAAI,CAAC,CAACtF,MAAAA,GAAmBA,OAAOuF,SAAS,CAAA;QACvE,MAAMC,eAAAA,GAAkBhD,KAAK4C,gBAAgB,CAACK,GAAG,CAAC,CAACC,GAAAA,GAAQA,GAAAA,CAAI1F,MAAM,CAAA;QAErE,MAAM2F,gBAAAA,GACJN,iBACAG,eAAAA,CAAgBI,QAAQ,CAACP,aAAAA,CAAcQ,IAAI,KAC3CR,aAAAA,CAAcQ,IAAI,KAAKvC,oBAAAA,GACnB+B,aAAAA,CAAcQ,IAAI,GAClBL,eAAAA,CAAgBF,IAAI,CAAC,CAACtF,SAAWA,MAAAA,KAAWsD,oBAAAA,CAAAA;QAElD,IAAI,CAACqC,kBAAkB,OAAO,IAAA;;QAG9B,MAAMG,eAAAA,GAAkBtD,IAAAA,CAAK4C,gBAAgB,CAACE,IAAI,CAAC,CAACI,GAAAA,GAAQA,GAAAA,CAAI1F,MAAM,KAAK2F,gBAAAA,CAAAA;AAE3E,QAAA,OAAOG,eAAAA,GACH;YAAE9F,MAAAA,EAAQ2F,gBAAAA;YAAkBxC,IAAAA,EAAM2C;SAA2C,GAC7E,IAAA;IACN,CAAA,EAAG;AAAC1C,QAAAA,SAAAA;QAASZ,IAAAA,EAAM4C,gBAAAA;AAAkB9B,QAAAA;AAAqB,KAAA,CAAA;AAE1D;;MAGAc,gBAAAA,CAAM2B,SAAS,CAAC,IAAA;;QAEd,IAAI,CAACxD,UAAUlC,EAAAA,IAAMkE,mBAAAA,CAAoByB,MAAM,GAAG,CAAA,IAAKf,kBAAkB9B,IAAAA,EAAM;AAC7E,YAAA,MAAM8C,SAAAA,GAAY1B,mBAAAA,CAAoB2B,MAAM,CAC1C,CAACC,GAAAA,EAA8BtB,KAAAA,GAAAA;AAC7BsB,gBAAAA,GAAG,CAACtB,KAAAA,CAAM,GAAGI,gBAAAA,CAAiB9B,IAAI,CAAC0B,KAAAA,CAAM;gBACzC,OAAOsB,GAAAA;AACT,YAAA,CAAA,EACA,EAAC,CAAA;AAGH,YAAA,IAAIzB,OAAOC,IAAI,CAACsB,SAAAA,CAAAA,CAAWD,MAAM,GAAG,CAAA,EAAG;gBACrChC,SAAAA,CAAUiC,SAAAA,CAAAA;AACZ,YAAA;AACF,QAAA;IACF,CAAA,EAAG;QAAC1D,QAAAA,EAAUlC,EAAAA;AAAIkE,QAAAA,mBAAAA;QAAqBU,gBAAAA,EAAkB9B,IAAAA;AAAMa,QAAAA;AAAU,KAAA,CAAA;AAEzEI,IAAAA,gBAAAA,CAAM2B,SAAS,CAAC,IAAA;AACd,QAAA,IAAI,CAACb,KAAAA,CAAMC,OAAO,CAAC/B,SAAAA,CAAAA,IAAY,CAACL,OAAAA,EAAS;AACvC,YAAA;AACF,QAAA;AACA;;;QAIA,MAAMqD,kBAAkBhD,SAAAA,CAAQkC,IAAI,CAAC,CAACI,GAAAA,GAAQA,GAAAA,CAAIG,IAAI,KAAKvC,oBAAAA,CAAAA;AAC3D,QAAA,MAAM+B,gBAAgBjC,SAAAA,CAAQkC,IAAI,CAAC,CAACtF,MAAAA,GAAWA,OAAOuF,SAAS,CAAA;QAC/D,IAAI,CAACa,eAAAA,IAAmBf,aAAAA,EAAeQ,IAAAA,EAAM;AAC3C1B,YAAAA,YAAAA,CAAakB,cAAcQ,IAAI,CAAA;AACjC,QAAA;IACF,CAAA,EAAG;AAAC1B,QAAAA,YAAAA;AAAcpB,QAAAA,OAAAA;AAASK,QAAAA,SAAAA;AAASE,QAAAA;AAAqB,KAAA,CAAA;AAEzD,IAAA,MAAM+C,aAAAA,GAAgBnB,KAAAA,CAAMC,OAAO,CAAC/B,SAAAA,CAAAA,GAChCA,SAAAA,CAAQkC,IAAI,CAAC,CAACtF,MAAAA,GAAWA,MAAAA,CAAO6F,IAAI,KAAKvC,oBAAAA,CAAAA,GACzCgD,SAAAA;;;IAIJ,MAAMlB,gBAAAA,GAAmB5C,IAAAA,EAAM4C,gBAAAA,IAAoB,EAAE;IACrD,MAAMmB,qBAAAA,GAAwBhE,QAAAA,EAAUiE,aAAAA,IAAiB,EAAE;;AAG3D,IAAA,MAAMC,gBAAAA,GAAmBrB,gBAAAA,CAAiBY,MAAM,GAAG,IAAIZ,gBAAAA,GAAmBmB,qBAAAA;AAE1E,IAAA,MAAMG,iBAAAA,GAAoB;AACxB,QAAA;AAAEzG,YAAAA,MAAAA,EAAQ0G,kBAAkBpE,QAAAA,EAAUC,IAAAA,CAAAA;AAAOxC,YAAAA,MAAAA,EAAQqG,aAAAA,EAAeR;AAAK,SAAA;AACtEY,QAAAA,GAAAA;AACJ,KAAA;IAED,IAAI,CAAC1D,OAAAA,IAAW,CAACmC,KAAAA,CAAMC,OAAO,CAAC/B,SAAAA,CAAAA,IAAYA,SAAAA,CAAQ4C,MAAM,KAAK,CAAA,EAAG;QAC/D,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAMY,gBAAAA,GAAmBxD,SAAAA,CAAQwB,MAAM,CAAC,CAAC5E,MAAAA,GAAAA;AACvC;;;AAGC,QACD,OAAOiD,OAAAA,CAAQ2C,QAAQ,CAAC5F,OAAO6F,IAAI,CAAA;AACrC,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMgB,0BAAAA,GAA6BD,gBAAAA,CAAiBE,IAAI,CAAC,CAACC,CAAAA,EAAGrG,CAAAA,GAC3DqG,CAAAA,CAAExB,SAAS,GAAG,EAAC,GAAI7E,CAAAA,CAAE6E,SAAS,GAAG,CAAA,GAAI,CAAA,CAAA;IAGvC,OAAO;AACLyB,QAAAA,KAAAA,EAAO7G,aAAAA,CAAc;AACnBE,YAAAA,EAAAA,EAAIC,6BAAAA,CAAe,sCAAA,CAAA;YACnBC,cAAAA,EAAgB;AAClB,SAAA,CAAA;AACA0G,QAAAA,OAAAA,EAASJ,0BAAAA,CAA2BpB,GAAG,CAAC,CAACzF,MAAAA,EAAQgC,KAAAA,GAAAA;YAC/C,MAAMF,qBAAAA,GAAwB4E,iBAAAA,CAAkBQ,IAAI,CAAC,CAACC,MAAQA,GAAAA,CAAInH,MAAM,KAAKA,MAAAA,CAAO6F,IAAI,CAAA;AAExF,YAAA,MAAMuB,gBAAAA,GAAmBV,iBAAAA,CAAkBpB,IAAI,CAAC,CAAC6B,GAAAA,GAC/C,QAAA,IAAYA,GAAAA,GAAMA,GAAAA,CAAInH,MAAM,KAAKA,MAAAA,CAAO6F,IAAI,GAAG,KAAA,CAAA;YAGjD,MAAMwB,kBAAAA,GAAqBD,mBAAmBnE,OAAAA,GAAUD,SAAAA;YAExD,IAAIf,aAAAA,IAAiB6B,UAAAA,EAAUX,IAAAA,EAAMmE,eAAAA,EAAiB;gBACpD,OAAO;oBACLC,OAAAA,EAAS,kBACP3G,eAAA,CAACwD,gBAAAA,CAAMoD,QAAQ,EAAA;;8CACb/G,cAAA,CAACgH,+BAAAA,EAAAA;AACCC,oCAAAA,QAAAA,EAAU,CAACL,kBAAAA,CAAmBzB,QAAQ,CAAC5F,OAAO6F,IAAI,CAAA;AAElD8B,oCAAAA,SAAAA,gBACElH,cAAA,CAACoB,qBAAAA,EAAAA;wCACCC,qBAAAA,EAAuBA,qBAAAA;AACvBC,wCAAAA,iBAAAA,EAAmB6B,SAAST,IAAAA,EAAMlD,MAAAA;wCAClC+B,KAAAA,EAAOA;;AAGXsC,oCAAAA,KAAAA,EAAOtE,OAAO6F,IAAI;AAElB,oCAAA,QAAA,gBAAApF,cAAA,CAACX,YAAAA,EAAAA;wCACCC,wBAAAA,EAA0B,CAAC,CAAC0D,MAAAA,EAAQwD,OAAAA,EAASW,eAAAA;wCAC7C5H,MAAAA,EAAQA,MAAAA;AACRC,wCAAAA,MAAAA,EAAQmH,gBAAAA,EAAkBnH,MAAAA;wCAC1BC,WAAAA,EAAa4B;;AAdV9B,iCAAAA,EAAAA,MAAAA,CAAO6F,IAAI,CAAA;AAiBjBgB,gCAAAA,0BAAAA,CAA2Bb,MAAM,GAAG,CAAA,IAAKhE,KAAAA,KAAU,mBAClDvB,cAAA,CAACoH,gBAAAA,EAAAA;oCAAIxG,YAAAA,EAAc,CAAA;oCAAGD,WAAAA,EAAa,CAAA;oCAAGE,UAAAA,EAAY,CAAA;oCAAGC,aAAAA,EAAe,CAAA;AAClE,oCAAA,QAAA,gBAAAd,cAAA,CAACQ,uBAAAA,EAAAA;wCAAWQ,OAAAA,EAAQ,OAAA;kDACjBtB,aAAAA,CAAc;AACbE,4CAAAA,EAAAA,EAAIC,6BAAAA,CAAe,+CAAA,CAAA;4CACnBC,cAAAA,EAAgB;AAClB,yCAAA;;;;AA1BayB,yBAAAA,EAAAA,KAAAA;AAgCzB,iBAAA;AACF,YAAA;YAEA,OAAO;AACL0F,gBAAAA,QAAAA,EAAU,CAACL,kBAAAA,CAAmBzB,QAAQ,CAAC5F,OAAO6F,IAAI,CAAA;AAClDvB,gBAAAA,KAAAA,EAAOtE,OAAO6F,IAAI;AAClBmB,gBAAAA,KAAAA,gBACEvG,cAAA,CAACX,YAAAA,EAAAA;oBACCC,wBAAAA,EAA0B,CAAC,CAAC0D,MAAAA,EAAQwD,OAAAA,EAASW,eAAAA;oBAC7C5H,MAAAA,EAAQA,MAAAA;AACRC,oBAAAA,MAAAA,EAAQmH,gBAAAA,EAAkBnH,MAAAA;oBAC1BC,WAAAA,EAAa4B,qBAAAA;AACbC,oBAAAA,iBAAAA,EAAmB6B,SAAST,IAAAA,EAAMlD;;AAGtC0H,gBAAAA,SAAAA,gBAAWlH,cAAA,CAACoB,qBAAAA,EAAAA;oBAAsBC,qBAAAA,EAAuBA;;AAC3D,aAAA;AACF,QAAA,CAAA,CAAA;AACAgG,QAAAA,gBAAAA,EAAkB,IAAMzB,aAAAA,EAAe1F,IAAAA;QACvCoH,QAAAA,EAAU5D,YAAAA;QACVG,KAAAA,EAAO+B;AACT,KAAA;AACF;AAIA,MAAMM,iBAAAA,GAAoB,CACxBpE,QAAAA,EACAC,IAAAA,GAAAA;AAEA,IAAA,MAAMwF,YAAYzF,QAAAA,EAAUtC,MAAAA;IAC5B,MAAMgI,QAAAA,GAAWzF,IAAAA,EAAM0F,eAAAA,IAAmB,EAAE;AAE5C;;MAGA,IAAI,CAACF,SAAAA,EAAW;QACd,OAAO,OAAA;AACT,IAAA;AAEA;;MAGA,IAAIA,SAAAA,KAAc,OAAA,IAAWC,QAAAA,CAAS3C,IAAI,CAAC,CAAC6B,GAAAA,GAAQA,GAAAA,CAAIgB,WAAW,KAAK,IAAA,CAAA,EAAO;QAC7E,OAAO,WAAA;AACT,IAAA;IAEA,OAAOH,SAAAA;AACT,CAAA;AAEA;;AAEkG,qGAElG,MAAMI,uBAAAA,GAA0BC,uBAAAA,CAAOnH,mBAAAA,CAAyC;;OAEzE,EAAE,CAAC,EAAEoH,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,CAAC;;;;;;;EAOtC,EAAE,CAAC,EAAEC,mBAAmB,EAAEF,KAAK,EAAE,GAC/B,CAACE,mBAAAA,IACD;AACkB,sBAAA,EAAEF,KAAAA,CAAMG,MAAM,CAACC,UAAU,CAAC;AAC9C,EAAA,CAAC;;;IAGC,EAAE,CAAC,EAAEF,mBAAmB,EAAEF,KAAK,EAAE,GAC/B,CAACE,mBAAAA,IACD;AACQ,cAAA,EAAEF,KAAAA,CAAMG,MAAM,CAACE,UAAU,CAAC;AAClC,MAAA,CAAC;;AAEP,CAAC;AAED,MAAMC,cAAAA,GAAiBP,uBAAAA,CAAOQ,YAAAA,CAAO;;;;;;;;;;;AAWrC,CAAC;AAED,MAAMC,yBAAAA,GAA4B,CAAC,EAAEnG,UAAU,EAAEF,KAAK,EAAEC,cAAc,EAAqB,GAAA;IACzF,MAAM,EAAEvC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM2I,aAAAA,GAAgB7G,oBAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEiB,IAAAA,EAAMW,UAAQ,EAAE,GAAGC,4BAAAA,EAAAA;IAC3B,MAAMiF,kBAAAA,GAAqBlF,YAAUX,IAAAA,EAAMmE,eAAAA;IAC3C,MAAM,EAAEvE,OAAO,EAAE,GAAGG,eAAAA,EAAAA;;AAGpB,IAAA,MAAM,EAAEjD,MAAM,EAAE,GAAGgJ,yDAAAA,CAA6B;AAC9CtG,QAAAA,UAAAA;AACAF,QAAAA,KAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;IACA,MAAMwG,aAAAA,GAAgB,CAAC,IAAA;AACrB,QAAA,IAAIjJ,WAAW,QAAA,EAAU;YACvB,OAAO,SAAA;AACT,QAAA;AAEA,QAAA,IAAI+I,kBAAAA,EAAoB;YACtB,OAAO,aAAA;AACT,QAAA;QAEA,OAAO,SAAA;IACT,CAAA,GAAA;;AAGA,IAAA,IAAI,CAACjG,OAAAA,EAAS;QACZ,OAAO,IAAA;AACT,IAAA;;AAGA,IAAA,IAAI,CAACgG,aAAAA,EAAe;QAClB,OAAO,IAAA;AACT,IAAA;IAEA,OAAO;QACLI,OAAAA,EAAS;AACPC,YAAAA,OAAAA,gBACE3I,cAAA,CAACI,iBAAAA,EAAAA;gBACCwI,MAAAA,EAAO,MAAA;gBACPC,UAAAA,EAAW,QAAA;AACXC,gBAAAA,YAAAA,EAAYpJ,aAAAA,CAAc;AACxBE,oBAAAA,EAAAA,EAAIC,6BAAAA,CAAe,2CAAA,CAAA;oBACnBC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;AAEA,gBAAA,QAAA,gBAAAE,cAAA,CAAC2H,uBAAAA,EAAAA;AACCI,oBAAAA,mBAAAA,EAAqBgB,OAAAA,CAAQR,kBAAAA,CAAAA;oBAC7BvH,OAAAA,EAASyH,aAAAA;oBACT1H,IAAAA,EAAK,GAAA;8BAEJvB,MAAAA,KAAW,YAAA,iBAAeQ,cAAA,CAACmI,cAAAA,EAAAA,EAAAA,CAAAA,iBAAoBnI,cAAA,CAACgJ,aAAAA,EAAAA,EAAAA;;;AAIvDC,YAAAA,OAAAA,gBACE9I,eAAA,CAACC,iBAAAA,EAAAA;gBAAK8I,SAAAA,EAAU,QAAA;gBAASC,OAAAA,EAAS,CAAA;gBAAGN,UAAAA,EAAW,YAAA;gBAAaxI,KAAAA,EAAM,OAAA;;kCACjEL,cAAA,CAACQ,uBAAAA,EAAAA;wBAAWQ,OAAAA,EAAQ,IAAA;wBAAKE,UAAAA,EAAW,KAAA;kCACjCxB,aAAAA,CACC;AACEE,4BAAAA,EAAAA,EAAIC,6BAAAA,CAAe,sCAAA,CAAA;4BACnBC,cAAAA,EACE;yBACJ,EACA;4BAAEsJ,OAAAA,EAASb;AAAmB,yBAAA;;kCAGlCvI,cAAA,CAACQ,uBAAAA,EAAAA;wBAAWQ,OAAAA,EAAQ,IAAA;wBAAKH,UAAAA,EAAY,CAAA;wBAAGC,aAAAA,EAAe,CAAA;kCACpDpB,aAAAA,CAAc;AACbE,4BAAAA,EAAAA,EAAIC,6BAAAA,CAAe,4CAAA,CAAA;4BACnBC,cAAAA,EACE;AACJ,yBAAA;;kCAEFE,cAAA,CAACqJ,iBAAAA,EAAAA;wBACCC,QAAAA,EAAS,SAAA;wBACTrI,GAAAA,EAAKsI,sBAAAA;wBACLC,EAAAA,EAAG,gCAAA;wBACHC,KAAAA,EAAO;4BAAEC,SAAAA,EAAW;AAAW,yBAAA;AAE/B,wBAAA,QAAA,gBAAA1J,cAAA,CAACQ,uBAAAA,EAAAA;4BAAWQ,OAAAA,EAAQ,IAAA;4BAAK2I,SAAAA,EAAU,OAAA;sCAChCjK,aAAAA,CACC;AACEE,gCAAAA,EAAAA,EAAIC,6BAAAA,CAAe,uCAAA,CAAA;gCACnBC,cAAAA,EACE;6BACJ,EACA;gCAAEsJ,OAAAA,EAASb;AAAmB,6BAAA;;;;;AAM1C;AACF,KAAA;AACF;AAEA;;qGAIA,MAAMqB,2BAAAA,GAA8B,CAAC,EACnC1H,UAAU,EACVH,IAAI,EACJC,KAAK,EACLC,cAAc,EACI,GAAA;IAClB,MAAM,EAAEvC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEwC,KAAK,EAAE,CAAC,GAAGE,0BAAAA,EAAAA;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAGG,eAAAA,EAAAA;AACpB,IAAA,MAAMI,oBAAAA,GAAuBV,KAAAA,CAAMW,OAAO,EAAEC,IAAAA,EAAMxD,MAAAA;AAClD,IAAA,MAAM,CAACsK,cAAAA,EAAgBC,iBAAAA,CAAkB,GAAGnG,gBAAAA,CAAMoG,QAAQ,CAAgB,IAAA,CAAA;AAC1E,IAAA,MAAMxG,YAAYC,mBAAAA,CAAQ,uBAAA,EAAyB,CAACC,KAAAA,GAAUA,MAAMF,SAAS,CAAA;IAE7E,MAAM,EAAEyG,WAAW,EAAE,GAAGC,yCAAAA,EAAAA;AACxB,IAAA,MAAM,EAAEjH,MAAM,EAAEkH,UAAU,EAAE,GAAGjH,kCAAAA,CAAY;AACzCjB,QAAAA,KAAAA;AACAE,QAAAA,UAAAA;AACAD,QAAAA,cAAAA;QACAiB,MAAAA,EAAQ;YAAE3D,MAAAA,EAAQsD;AAAqB;AACzC,KAAA,CAAA;AACA,IAAA,MAAM,EAAEH,IAAAA,EAAMC,SAAAA,GAAU,EAAE,EAAE,GAAGC,0BAAAA,EAAAA;AAE/B,IAAA,MAAM0F,aAAAA,GAAgB7G,oBAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEiB,IAAAA,EAAMW,UAAQ,EAAE,GAAGC,4BAAAA,EAAAA;IAC3B,MAAMiF,kBAAAA,GAAqBlF,YAAUX,IAAAA,EAAMmE,eAAAA;IAE3C,MAAMlC,gBAAAA,GAAmBF,MAAMC,OAAO,CAAC/B,aACnCA,SAAAA,CAAQwB,MAAM,CAAC,CAAC5E,MAAAA,GAAWwC,MAAM4C,gBAAAA,CAAiB8B,IAAAA,CAAK,CAAC0D,CAAAA,GAAMA,CAAAA,CAAE5K,MAAM,KAAKA,MAAAA,CAAO6F,IAAI,CAAA,CAAA,GACtF,EAAE;IAEN,MAAMgF,cAAAA,GAAiB,CAACC,OAAAA,GAAwB,UAAA;YAC9C,MAAMC,QAAAA,GAAW,MAAMN,WAAAA,CAAY;AACjC/H,gBAAAA,cAAAA;AACAD,gBAAAA,KAAAA;AACAE,gBAAAA,UAAAA;gBACAgB,MAAAA,EAAQ;oBAAE3D,MAAAA,EAAQsK;AAAe;AACnC,aAAA,CAAA;YACA,IAAI,CAACS,QAAAA,IAAY,CAACtH,MAAAA,EAAQ;AACxB,gBAAA;AACF,YAAA;YAEA,MAAM,EAAEN,IAAI,EAAE,GAAG4H,QAAAA;YAEjB,MAAMC,WAAAA,GAAcC,eAAAA,CAAU9H,IAAAA,EAAMM,MAAAA,EAAQkH,UAAAA,CAAAA;YAE5C3G,SAAAA,CAAUgH,WAAAA,CAAAA;AAEVF,YAAAA,OAAAA,EAAAA;AACF,QAAA,CAAA;AAEA,IAAA,IAAI,CAAC/H,OAAAA,EAAS;QACZ,OAAO,IAAA;AACT,IAAA;;AAGA,IAAA,IAAIgG,iBAAiBC,kBAAAA,EAAoB;QACvC,OAAO,IAAA;AACT,IAAA;IAEA,OAAO;QACLkC,IAAAA,EAAM,MAAA;AACNC,QAAAA,IAAAA,gBAAM1K,cAAA,CAAC2K,WAAAA,EAAAA,EAAAA,CAAAA;QACP1D,QAAAA,EAAUtC,gBAAAA,CAAiBY,MAAM,KAAK,CAAA;AACtCgB,QAAAA,KAAAA,EAAO7G,aAAAA,CAAc;AACnBE,YAAAA,EAAAA,EAAIC,6BAAAA,CAAe,gCAAA,CAAA;YACnBC,cAAAA,EAAgB;AAClB,SAAA,CAAA;QACA8K,MAAAA,EAAQ;YACNH,IAAAA,EAAM,QAAA;AACNI,YAAAA,KAAAA,EAAOnL,aAAAA,CAAc;AACnBE,gBAAAA,EAAAA,EAAIC,6BAAAA,CAAe,mCAAA,CAAA;gBACnBC,cAAAA,EAAgB;AAClB,aAAA,CAAA;AACAgL,YAAAA,OAAAA,EAAS,CAAC,EAAET,OAAO,EAA2B,iBAC5ClK,eAAA,CAAA4K,mBAAA,EAAA;;AACE,sCAAA/K,cAAA,CAACgL,oBAAOC,IAAI,EAAA;AACV,4BAAA,QAAA,gBAAA9K,eAAA,CAACC,iBAAAA,EAAAA;gCAAK8I,SAAAA,EAAU,QAAA;gCAAS5I,GAAAA,EAAK,CAAA;;kDAC5BN,cAAA,CAAC2B,mBAAAA,EAAAA;wCAActB,KAAAA,EAAM,MAAA;wCAAOuI,MAAAA,EAAO,MAAA;wCAAOhH,IAAAA,EAAK;;kDAC/C5B,cAAA,CAACQ,uBAAAA,EAAAA;wCAAWmJ,SAAAA,EAAU,QAAA;kDACnBjK,aAAAA,CAAc;AACbE,4CAAAA,EAAAA,EAAIC,6BAAAA,CAAe,kCAAA,CAAA;4CACnBC,cAAAA,EACE;AACJ,yCAAA;;AAEF,kDAAAK,eAAA,CAAC+K,mBAAMC,IAAI,EAAA;wCAAC9K,KAAAA,EAAM,MAAA;;AAChB,0DAAAL,cAAA,CAACkL,mBAAME,KAAK,EAAA;0DACT1L,aAAAA,CAAc;AACbE,oDAAAA,EAAAA,EAAIC,6BAAAA,CAAe,yCAAA,CAAA;oDACnBC,cAAAA,EAAgB;AAClB,iDAAA;;0DAEFE,cAAA,CAACqL,yBAAAA,EAAAA;gDACCxH,KAAAA,EAAOgG,cAAAA;AACPyB,gDAAAA,WAAAA,EAAa5L,aAAAA,CAAc;AACzBE,oDAAAA,EAAAA,EAAIC,6BAAAA,CAAe,+CAAA,CAAA;oDACnBC,cAAAA,EAAgB;AAClB,iDAAA,CAAA;;gDAEAyL,QAAAA,EAAU,CAAC1H,QAAUiG,iBAAAA,CAAkBjG,KAAAA,CAAAA;AAEtCc,gDAAAA,QAAAA,EAAAA,gBAAAA,CAAiBK,GAAG,CAAC,CAACzF,MAAAA,iBACrBS,cAAA,CAACgH,+BAAAA,EAAAA;AAAqCnD,wDAAAA,KAAAA,EAAOtE,OAAO6F,IAAI;AACrD7F,wDAAAA,QAAAA,EAAAA,MAAAA,CAAOW;AADeX,qDAAAA,EAAAA,MAAAA,CAAO6F,IAAI,CAAA;;;;;;;AAQ9C,sCAAApF,cAAA,CAACgL,oBAAOQ,MAAM,EAAA;AACZ,4BAAA,QAAA,gBAAArL,eAAA,CAACC,iBAAAA,EAAAA;gCAAKE,GAAAA,EAAK,CAAA;gCAAGD,KAAAA,EAAM,MAAA;;kDAClBL,cAAA,CAACyL,mBAAAA,EAAAA;wCAAOC,IAAAA,EAAK,MAAA;wCAAO1K,OAAAA,EAAQ,UAAA;wCAAW2K,OAAAA,EAAStB,OAAAA;kDAC7C3K,aAAAA,CAAc;AACbE,4CAAAA,EAAAA,EAAIC,6BAAAA,CAAe,kCAAA,CAAA;4CACnBC,cAAAA,EAAgB;AAClB,yCAAA;;kDAEFE,cAAA,CAACyL,mBAAAA,EAAAA;wCAAOC,IAAAA,EAAK,MAAA;wCAAO1K,OAAAA,EAAQ,SAAA;AAAU2K,wCAAAA,OAAAA,EAASvB,cAAAA,CAAeC,OAAAA,CAAAA;kDAC3D3K,aAAAA,CAAc;AACbE,4CAAAA,EAAAA,EAAIC,6BAAAA,CAAe,kCAAA,CAAA;4CACnBC,cAAAA,EAAgB;AAClB,yCAAA;;;;;;;AAMZ;AACF,KAAA;AACF;AAEA;;qGAIA,MAAM8L,kBAAAA,GAA8C,CAAC,EACnD9J,QAAQ,EACRI,UAAU,EACVF,KAAK,EACLC,cAAc,EACf,GAAA;IACC,MAAM,EAAEvC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMkM,QAAAA,GAAWC,0BAAAA,EAAAA;IACjB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,MAAAA,EAAQC,YAAY,EAAEC,SAAS,EAAE,GAAGlC,yCAAAA,EAAAA;AAC5C,IAAA,MAAM,EAAE3H,OAAO,EAAE8J,SAAS,EAAE,GAAG3J,eAAAA,EAAAA;;AAG/B,IAAA,MAAM,CAAC,EAAEN,KAAK,EAAE,CAAC,GAAGE,0BAAAA,EAAAA;AACpB,IAAA,MAAM,EAAEK,IAAAA,EAAMC,SAAAA,GAAU,EAAE,EAAE,GAAGC,0BAAAA,EAAAA;AAC/B,IAAA,MAAMC,oBAAAA,GAAuBV,KAAAA,CAAMW,OAAO,EAAEC,IAAAA,EAAMxD,MAAAA;AAClD,IAAA,MAAMA,MAAAA,GAAS,EAAE,OAAA,IAAWoD,SAAM,CAAA,IAAMA,SAAAA,CAAQkC,IAAI,CAAC,CAACI,GAAAA,GAAQA,GAAAA,CAAIG,IAAI,KAAKvC,oBAAAA,CAAAA;AAE3E,IAAA,IAAI,CAACP,OAAAA,EAAS;QACZ,OAAO,IAAA;AACT,IAAA;IAEA,OAAO;AACL2E,QAAAA,QAAAA,EACE,QAACnF,EAAUvC,MAAAA,IAAU,CAAC6M,UAAUjH,QAAQ,CAACrD,QAAAA,CAASvC,MAAM,CAAA,IAAM,CAACuC,QAAAA,IAAY,CAACA,SAASlC,EAAE;QACzFyM,QAAAA,EAAU;AAAC,YAAA,QAAA;AAAU,YAAA;AAAY,SAAA;AACjC9F,QAAAA,KAAAA,EAAO7G,aAAAA,CACL;AACEE,YAAAA,EAAAA,EAAIC,6BAAAA,CAAe,sBAAA,CAAA;YACnBC,cAAAA,EAAgB;SAClB,EACA;YAAEP,MAAAA,EAAQA,MAAAA,IAAUA,OAAOW;AAAK,SAAA,CAAA;AAElCwK,QAAAA,IAAAA,gBAAM1K,cAAA,CAACsM,WAAAA,EAAAA,EAAAA,CAAAA;QACPtL,OAAAA,EAAS,QAAA;QACT4J,MAAAA,EAAQ;YACNH,IAAAA,EAAM,QAAA;AACNI,YAAAA,KAAAA,EAAOnL,aAAAA,CAAc;AACnBE,gBAAAA,EAAAA,EAAIC,6BAAAA,CAAe,6BAAA,CAAA;gBACnBC,cAAAA,EAAgB;AAClB,aAAA,CAAA;AACAgL,YAAAA,OAAAA,gBACE3K,eAAA,CAACC,iBAAAA,EAAAA;gBAAK8I,SAAAA,EAAU,QAAA;gBAAS5I,GAAAA,EAAK,CAAA;;kCAC5BN,cAAA,CAAC2B,mBAAAA,EAAAA;wBAActB,KAAAA,EAAM,MAAA;wBAAOuI,MAAAA,EAAO,MAAA;wBAAOhH,IAAAA,EAAK;;kCAC/C5B,cAAA,CAACQ,uBAAAA,EAAAA;wBAAWS,GAAAA,EAAI,GAAA;wBAAID,OAAAA,EAAQ,OAAA;wBAAQ2I,SAAAA,EAAU,QAAA;kCAC3CjK,aAAAA,CAAc;AACbE,4BAAAA,EAAAA,EAAIC,6BAAAA,CAAe,4BAAA,CAAA;4BACnBC,cAAAA,EAAgB;AAClB,yBAAA;;;;YAINyM,OAAAA,EAASJ,SAAAA;YACTK,SAAAA,EAAW,UAAA;gBACT,MAAMC,cAAAA;;AAGHxK,gBAAAA,cAAAA,KAAmB,cAAA,IAAkB,CAACC,UAAAA,IAAe,CAACJ,QAAAA,EAAUvC,MAAAA;AAEnE,gBAAA,IAAIkN,cAAAA,EAAgB;AAClBC,oBAAAA,OAAAA,CAAQC,KAAK,CACX,qHAAA,CAAA;oBAGFZ,kBAAAA,CAAmB;AACjBpD,wBAAAA,OAAAA,EAASjJ,aAAAA,CAAc;AACrBE,4BAAAA,EAAAA,EAAIC,6BAAAA,CAAe,sBAAA,CAAA;4BACnBC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA2K,IAAAA,EAAM;AACR,qBAAA,CAAA;AAEA,oBAAA;AACF,gBAAA;gBAEA,MAAMmC,GAAAA,GAAM,MAAMV,YAAAA,CAAa;AAC7BhK,oBAAAA,UAAAA;AACAF,oBAAAA,KAAAA;AACAC,oBAAAA,cAAAA;oBACAiB,MAAAA,EAAQ;AAAE3D,wBAAAA,MAAAA,EAAQuC,SAASvC;AAAO;AACpC,iBAAA,CAAA;AAEA,gBAAA,IAAI,EAAE,OAAA,IAAWqN,GAAE,CAAA,EAAI;oBACrBf,QAAAA,CAAS;AAAEgB,wBAAAA,QAAAA,EAAU,CAAC,GAAG,EAAE5K,cAAAA,CAAe,CAAC,EAAED,KAAAA,CAAAA;qBAAQ,EAAG;wBAAE8K,OAAAA,EAAS;AAAK,qBAAA,CAAA;AAC1E,gBAAA;AACF,YAAA;AACF;AACF,KAAA;AACF;AAWA;;;;AAIkG,qGAElG,MAAMC,gBAAAA,GAA4C,CAAC,EACjDjL,QAAQ,EACRI,UAAU,EACVF,KAAK,EACLC,cAAc,EACd+K,MAAM,EACNjL,IAAI,EACwB,GAAA;IAC5B,MAAMxC,MAAAA,GAASuC,UAAUvC,MAAAA,IAAU,IAAA;AACnC,IAAA,MAAM,CAAC,SAAE4C,OAAK,EAAE,CAAC,GAAGE,0BAAAA,EAAAA;AAEpB,IAAA,MAAMa,SAASS,gBAAAA,CAAMI,OAAO,CAAC,IAAMkJ,+BAAiB9K,OAAAA,CAAAA,EAAQ;AAACA,QAAAA;AAAM,KAAA,CAAA;IACnE,MAAM+K,gBAAAA,GAAmB/K,OAAAA,CAAM3C,MAAM,KAAK,WAAA;IAE1C,MAAM,EAAEE,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAE2C,OAAO,EAAE6K,UAAU,EAAE,GAAG1K,eAAAA,EAAAA;IAChC,MAAM,EAAEsJ,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEoB,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,8BAAAA,EAAAA;AAEpD,IAAA,MAAM,CAACC,YAAAA,EAAcC,eAAAA,CAAgB,GAAG7J,gBAAAA,CAAMoG,QAAQ,CAAQ,EAAE,CAAA;AAChE,IAAA,MAAM,CAAC0D,+BAAAA,EAAiCC,kCAAAA,CAAmC,GACzE/J,gBAAAA,CAAMoG,QAAQ,CAAU,KAAA,CAAA;AAE1B,IAAA,MAAM,EAAE4D,WAAAA,EAAaC,iBAAiB,EAAEC,aAAAA,EAAeC,mBAAmB,EAAE,GAC1E7D,yCAAAA,EAAAA;AAEF,IAAA,MAAM,EAAEjH,MAAM,EAAE+K,QAAQ,EAAE,GAAG9K,kCAAAA,CAC3B;AACEjB,QAAAA,KAAAA;AACAC,QAAAA,cAAAA;AACAC,QAAAA,UAAAA;QACAgB,MAAAA,EAAQ;AACN3D,YAAAA;AACF;KACF,EACA;;QAEEyO,IAAAA,EAAM;AACR,KAAA,CAAA;IAGF,MAAM,EAAEtL,MAAMuL,eAAAA,GAAkB,EAAE,EAAE,GAAGrL,0BAAAA,CAAmBN,UAAUuD,SAAAA,GAAYqI,eAAAA,CAAAA;AAEhF,IAAA,MAAMC,OAAAA,GAAU;AACd,QAAA;AACE5H,YAAAA,KAAAA,EAAO7G,aAAAA,CAAc;gBACnBE,EAAAA,EAAI,aAAA;gBACJE,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAI,IAAAA,EAAM;AACR,SAAA;AACA,QAAA;AACEqG,YAAAA,KAAAA,EAAO7G,aAAAA,CAAc;AACnBE,gBAAAA,EAAAA,EAAIC,6BAAAA,CAAe,6BAAA,CAAA;gBACnBC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAI,IAAAA,EAAM;AACR,SAAA;AACA,QAAA;AACEqG,YAAAA,KAAAA,EAAO7G,aAAAA,CAAc;AACnBE,gBAAAA,EAAAA,EAAIC,6BAAAA,CAAe,yCAAA,CAAA;gBACnBC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAI,IAAAA,EAAM;AACR;AACD,KAAA;;;AAID,IAAA,MAAM,CAACkO,IAAAA,EAAMC,gBAAAA,CAAiB,GAAG1K,gBAAAA,CAAMI,OAAO,CAAC,IAAA;AAC7C,QAAA,IAAI,CAACjC,QAAAA,EAAU;YACb,OAAO;gBAAC,EAAE;gBAAE;AAAG,aAAA;AACjB,QAAA;AAEA,QAAA,MAAMwM,iBAAAA,GAAqBvM,CAAAA,IAAAA,EAAM4C,gBAAAA,IAAoB,EAAE,EAAEK,GAAG,CAAC,CAACzF,MAAAA,IAAY;AACxEA,gBAAAA,MAAAA,EAAQA,OAAOA,MAAM;gBACrBC,MAAAA,EAASD,MAAAA,CAAOC,MAAM,IAAI;aAC5B,CAAA,CAAA;AAEA,QAAA,MAAMsG,qBAAAA,GACHhE,CAAAA,QAAAA,CAASiE,aAAa,IAAI,EAAC,EAI5Bf,GAAG,CAAC,CAAC0B,OAAS;gBACdnH,MAAAA,EAAQmH,GAAAA,CAAInH,MAAM,IAAIsG,SAAAA;gBACtBrG,MAAAA,EAASkH,GAAAA,CAAIlH,MAAM,IAAI;aACzB,CAAA,CAAA;AAEA,QAAA,MAAM+O,aAAa,IAAIC,GAAAA,EAAAA;AAEvBF,QAAAA,iBAAAA,CAAkBG,OAAO,CAAC,CAAC,EAAElP,MAAM,EAAEC,MAAM,EAAE,GAAA;AAC3C,YAAA,IAAID,MAAAA,EAAQ;gBACVgP,UAAAA,CAAWG,GAAG,CAACnP,MAAAA,EAAQ;AAAEA,oBAAAA,MAAAA;AAAQC,oBAAAA;AAAO,iBAAA,CAAA;AAC1C,YAAA;AACF,QAAA,CAAA,CAAA;AAEAsG,QAAAA,qBAAAA,CAAsB2I,OAAO,CAAC,CAAC,EAAElP,MAAM,EAAEC,MAAM,EAAE,GAAA;AAC/C,YAAA,IAAID,MAAAA,EAAQ;gBACVgP,UAAAA,CAAWG,GAAG,CAACnP,MAAAA,EAAQ;AAAEA,oBAAAA,MAAAA;AAAQC,oBAAAA;AAAO,iBAAA,CAAA;AAC1C,YAAA;AACF,QAAA,CAAA,CAAA;;;AAIA,QAAA,MAAMmD,UAA0B,EAAE;AAElC,QAAA,IAAIb,UAAUvC,MAAAA,EAAQ;AACpBoD,YAAAA,OAAAA,CAAQgM,IAAI,CAAC;AACXpP,gBAAAA,MAAAA,EAAQuC,SAASvC,MAAM;gBACvBC,MAAAA,EAASsC,QAAAA,CAAStC,MAAM,IAAI;AAC9B,aAAA,CAAA;AACF,QAAA;QAEAmD,OAAAA,CAAQgM,IAAI,IACPlK,KAAAA,CAAMmK,IAAI,CAACL,UAAAA,CAAWM,OAAO,EAAA,CAAA,CAC7B1K,MAAM,CAAC,CAAC,CAAC5E,MAAAA,CAAO,GAAKA,WAAWuC,QAAAA,EAAUvC,MAAAA,CAAAA,CAC1CyF,GAAG,CAAC,CAAC,GAAGnB,KAAAA,CAAM,GAAKA,KAAAA,CAAAA,CAAAA;AAGxB,QAAA,IAAIlB,OAAAA,CAAQ4C,MAAM,KAAK,CAAA,IAAKzD,UAAUvC,MAAAA,EAAQ;AAC5CoD,YAAAA,OAAAA,CAAQgM,IAAI,CAAC;AACXpP,gBAAAA,MAAAA,EAAQuC,SAASvC,MAAM;gBACvBC,MAAAA,EAASsC,QAAAA,CAAStC,MAAM,IAAI;AAC9B,aAAA,CAAA;AACF,QAAA;;;;AAKA,QAAA,MAAMsP,SAAqB,EAAC;QAC5B,IAAIhN,QAAAA,CAASvC,MAAM,EAAE;AACnB,YAAA,MAAMwP,aAAahB,QAAAA,CAASjM,QAAAA,CAAAA;AAC5B,YAAA,IAAIiN,eAAe,IAAA,EAAM;AACvBD,gBAAAA,MAAM,CAAChN,QAAAA,CAASvC,MAAM,CAAC,GAAGwP,UAAAA;AAC5B,YAAA;AACF,QAAA;QAEA,OAAO;AAACpM,YAAAA,OAAAA;AAASmM,YAAAA;AAAO,SAAA;IAC1B,CAAA,EAAG;AAAChN,QAAAA,QAAAA;QAAUC,IAAAA,EAAM4C,gBAAAA;AAAkBoJ,QAAAA;AAAS,KAAA,CAAA;AAE/C,IAAA,MAAMiB,gBAAgBhC,MAAAA,KAAW,cAAA;AACjC,IAAA,MAAMiC,gBAAAA,GAAmB1B,YAAAA,CAAa9H,MAAM,CAAC,CAACC,GAAAA,EAAewJ,WAAAA,GAAAA;AAC3D,QAAA,MAAMC;QAEJ,CAACH,aAAAA,IAAiB,CAAC/K,MAAAA,CAAOC,IAAI,CAACmK,gBAAAA,CAAAA,CAAkBlJ,QAAQ,CAAC+J,WAAAA,CAAY3P,MAAM,CAAA;QAE9E,MAAM6P,eAAAA,GAAkBJ,aAAAA,GACpBE,WAAAA,CAAY1P,MAAM,KAAK,eAAe2P,aAAAA,GACtCD,WAAAA,CAAY1P,MAAM,KAAK,OAAA,IAAW2P,aAAAA;AAEtC,QAAA,IAAIC,eAAAA,EAAiB;YACnB1J,GAAAA,CAAIiJ,IAAI,CAACO,WAAAA,CAAY3P,MAAM,CAAA;AAC7B,QAAA;QAEA,OAAOmG,GAAAA;AACT,IAAA,CAAA,EAAG,EAAE,CAAA;AAKL,IAAA,MAAM,EACJhD,IAAAA,EAAM2M,mBAAAA,GAAsB,CAAC,EAC7BlD,SAAAA,EAAWmD,uBAAuB,EAClC3C,KAAAA,EAAO4C,qBAAqB,EAC7B,GAAGC,2CAAAA,CACF;AACExN,QAAAA,KAAAA;QACAyN,WAAAA,EAAa;AAACvN,YAAAA;AAAY,SAAA;QAC1B3C,MAAAA,EAAQ0P;KACV,EACA;AACEjB,QAAAA,IAAAA,EAAM;AACR,KAAA,CAAA;AAGFrK,IAAAA,gBAAAA,CAAM2B,SAAS,CAAC,IAAA;AACd,QAAA,IAAIiK,qBAAAA,EAAuB;YACzBxD,kBAAAA,CAAmB;gBACjBtB,IAAAA,EAAM,QAAA;AACN9B,gBAAAA,OAAAA,EAAS0E,cAAAA,CAAekC,qBAAAA;AAC1B,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,qBAAAA;AAAuBxD,QAAAA,kBAAAA;AAAoBsB,QAAAA;AAAe,KAAA,CAAA;IAE9D,IAAI,CAACrK,MAAAA,EAAQwD,OAAAA,EAASW,eAAAA,EAAiB;QACrC,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAI,CAAC7E,OAAAA,EAAS;QACZ,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAI,CAACJ,UAAAA,EAAY;QACf,OAAO,IAAA;AACT,IAAA;;;AAKA,IAAA,MAAMwN,OAAAA,GAAU,UAAA;AACd,QAAA,MAAM9B,iBAAAA,CAAkB;AACtB5L,YAAAA,KAAAA;YACAyN,WAAAA,EAAa;AAACvN,gBAAAA;AAAW,aAAA;YACzBgB,MAAAA,EAAQ;AACN,gBAAA,GAAGA,MAAM;gBACT3D,MAAAA,EAAQ0P;AACV;AACF,SAAA,CAAA;AAEAzB,QAAAA,eAAAA,CAAgB,EAAE,CAAA;AACpB,IAAA,CAAA;AAEA,IAAA,MAAMmC,SAAAA,GAAY,UAAA;AAChB,QAAA,MAAM7B,mBAAAA,CAAoB;AACxB9L,YAAAA,KAAAA;YACAyN,WAAAA,EAAa;AAACvN,gBAAAA;AAAW,aAAA;YACzBgB,MAAAA,EAAQ;AACN,gBAAA,GAAGA,MAAM;gBACT3D,MAAAA,EAAQ0P;AACV;AACF,SAAA,CAAA;AAEAzB,QAAAA,eAAAA,CAAgB,EAAE,CAAA;AACpB,IAAA,CAAA;AAEA,IAAA,MAAMoC,YAAAA,GAAe,UAAA;AACnB,QAAA,IAAIP,sBAAsB,CAAA,EAAG;YAC3B3B,kCAAAA,CAAmC,IAAA,CAAA;AACrC,QAAA,CAAA,MAAO,IAAIsB,aAAAA,EAAe;YACxB,MAAMU,OAAAA,EAAAA;QACR,CAAA,MAAO;YACL,MAAMC,SAAAA,EAAAA;AACR,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,IAAIlC,+BAAAA,EAAiC;QACnC,OAAO;AACLlH,YAAAA,KAAAA,EAAO7G,aAAAA,CAAc;gBACnBE,EAAAA,EAAI,oCAAA;gBACJE,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAkB,OAAAA,EAAS,QAAA;YACT4J,MAAAA,EAAQ;gBACNiF,QAAAA,EAAU,IAAA;oBACRnC,kCAAAA,CAAmC,KAAA,CAAA;AACrC,gBAAA,CAAA;gBACAlB,SAAAA,EAAW,UAAA;oBACT,MAAMkD,OAAAA,EAAAA;oBAENhC,kCAAAA,CAAmC,KAAA,CAAA;AACrC,gBAAA,CAAA;gBACAjD,IAAAA,EAAM,QAAA;AACNI,gBAAAA,KAAAA,EAAOnL,aAAAA,CAAc;AACnBE,oBAAAA,EAAAA,EAAIC,6BAAAA,CAAe,8BAAA,CAAA;oBACnBC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;AACAgL,gBAAAA,OAAAA,gBACE3K,eAAA,CAACC,iBAAAA,EAAAA;oBAAK8I,SAAAA,EAAU,QAAA;oBAASL,UAAAA,EAAW,QAAA;oBAASvI,GAAAA,EAAK,CAAA;;sCAChDN,cAAA,CAAC2B,mBAAAA,EAAAA;4BAActB,KAAAA,EAAM,QAAA;4BAASuI,MAAAA,EAAO,QAAA;4BAAShH,IAAAA,EAAK;;sCACnD5B,cAAA,CAACQ,uBAAAA,EAAAA;4BAAWmJ,SAAAA,EAAU,QAAA;sCACnBjK,aAAAA,CAAc;AACbE,gCAAAA,EAAAA,EAAIC,6BAAAA,CAAe,6CAAA,CAAA;gCACnBC,cAAAA,EACE;AACJ,6BAAA;;sCAEFE,cAAA,CAACQ,uBAAAA,EAAAA;4BAAWmJ,SAAAA,EAAU,QAAA;sCACnBjK,aAAAA,CAAc;AACbE,gCAAAA,EAAAA,EAAIC,6BAAAA,CAAe,4CAAA,CAAA;gCACnBC,cAAAA,EAAgB;AAClB,6BAAA;;;;AAIR;AACF,SAAA;AACF,IAAA;AAEA,IAAA,MAAMgQ,gBAAgBvC,YAAAA,CACnBvI,GAAG,CAAC,CAAC,EAAEzF,MAAM,EAAE,GAAKA,MAAAA,CAAAA,CACpBwQ,KAAK,CAAC,CAACxQ,MAAAA,GAAW4N,UAAAA,CAAWhI,QAAQ,CAAC5F,MAAAA,CAAAA,CAAAA;IAEzC,OAAO;AACLgH,QAAAA,KAAAA,EAAO7G,aAAAA,CAAc;YACnBE,EAAAA,EAAIC,6BAAAA,CAAe,CAAC,qBAAqB,EAAEmP,gBAAgB,SAAA,GAAY,WAAA,CAAY,MAAM,CAAC,CAAA;AAC1FlP,YAAAA,cAAAA,EAAgB,CAAA,EAAGkP,aAAAA,GAAgB,SAAA,GAAY,WAAA,CAAY,iBAAiB;AAC9E,SAAA,CAAA;AACAhO,QAAAA,OAAAA,EAASgO,gBAAgB,WAAA,GAAc,QAAA;QACvCtE,IAAAA,EAAMsE,aAAAA,iBAAgBhP,cAAA,CAACgQ,cAAAA,EAAAA,EAAAA,CAAAA,iBAAchQ,cAAA,CAACiQ,WAAAA,EAAAA,EAAAA,CAAAA;QACtChJ,QAAAA,EAAUiG,gBAAAA,IAAoBC,UAAAA,CAAW5H,MAAM,KAAK,CAAA;QACpD8G,QAAAA,EAAU;AAAC,YAAA;AAAQ,SAAA;QACnBzB,MAAAA,EAAQ;YACNH,IAAAA,EAAM,OAAA;AACNI,YAAAA,KAAAA,EAAOnL,aAAAA,CAAc;gBACnBE,EAAAA,EAAIC,6BAAAA,CAAe,CAAC,qBAAqB,EAAEmP,gBAAgB,SAAA,GAAY,WAAA,CAAY,MAAM,CAAC,CAAA;AAC1FlP,gBAAAA,cAAAA,EAAgB,CAAA,EAAGkP,aAAAA,GAAgB,SAAA,GAAY,WAAA,CAAY,iBAAiB;AAC9E,aAAA,CAAA;YACAlE,OAAAA,EAAS,IAAA;gBACP,qBACE9K,cAAA,CAACkQ,kBAAM/E,IAAI,EAAA;oBACTgD,OAAAA,EAASA,OAAAA;AACTC,oBAAAA,IAAAA,EAAMA,IAAAA,CAAKpJ,GAAG,CAAC,CAACmL,OAAS;AACvB,4BAAA,GAAGA,GAAG;AACNvQ,4BAAAA,EAAAA,EAAIuQ,IAAI5Q;yBACV,CAAA,CAAA;oBACAgO,YAAAA,EAAcA,YAAAA;oBACd6C,oBAAAA,EAAsB,CAACC,oBAAsB7C,eAAAA,CAAgB6C,iBAAAA,CAAAA;AAE7D,oBAAA,QAAA,gBAAArQ,cAAA,CAACsQ,2CAAAA,EAAAA;wBACCjC,gBAAAA,EAAkBA,gBAAAA;wBAClBF,OAAAA,EAASA,OAAAA;wBACTC,IAAAA,EAAMA,IAAAA;wBACNH,eAAAA,EAAiBA,eAAAA;AACjBjB,wBAAAA,MAAAA,EAAQA,MAAAA,IAAU;;;AAI1B,YAAA,CAAA;YACAuD,MAAAA,EAAQ,kBACNvQ,cAAA,CAACwQ,kBAAAA,CAAMhF,MAAM,EAAA;oBAACjL,cAAAA,EAAe,UAAA;AAC3B,oBAAA,QAAA,gBAAAP,cAAA,CAACyL,mBAAAA,EAAAA;wBACCc,OAAAA,EAAS+C,uBAAAA;AACTrI,wBAAAA,QAAAA,EAAU,CAAC6I,aAAAA,IAAiBb,gBAAAA,CAAiB1J,MAAM,KAAK,CAAA;wBACxDvE,OAAAA,EAAQ,SAAA;wBACR2K,OAAAA,EAASiE,YAAAA;kCAERlQ,aAAAA,CAAc;AACbE,4BAAAA,EAAAA,EAAIoP,gBAAgB,mBAAA,GAAsB,qBAAA;AAC1ClP,4BAAAA,cAAAA,EAAgBkP,gBAAgB,SAAA,GAAY;AAC9C,yBAAA;;;AAIR;AACF,KAAA;AACF,CAAA;AAEA;;qGAGA,MAAMyB,0BAAmD,CAACC,KAAAA,GAAAA;AACxD,IAAA,OAAO3D,gBAAAA,CAAiB;QAAEC,MAAAA,EAAQ,cAAA;AAAgB,QAAA,GAAG0D;AAAM,KAAA,CAAA;AAC7D;AAEA;;qGAGA,MAAMC,4BAAqD,CAACD,KAAAA,GAAAA;AAC1D,IAAA,OAAO3D,gBAAAA,CAAiB;QAAEC,MAAAA,EAAQ,gBAAA;AAAkB,QAAA,GAAG0D;AAAM,KAAA,CAAA;AAC/D;AAEA;;;AAGC,IACD,MAAMpE,WAAAA,GAAc1E,uBAAAA,CAAOgJ,WAAAA,CAAM;;;;AAIjC,CAAC;;;;;;;;;"}
1
+ {"version":3,"file":"CMHeaderActions.js","sources":["../../../admin/src/components/CMHeaderActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { skipToken } from '@reduxjs/toolkit/query';\nimport {\n useNotification,\n useQueryParams,\n Table,\n useAPIErrorHandler,\n FormErrors,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport {\n type DocumentActionComponent,\n type DocumentActionProps,\n unstable_useDocument as useDocument,\n unstable_useDocumentActions as useDocumentActions,\n buildValidParams,\n HeaderActionProps,\n} from '@strapi/content-manager/strapi-admin';\nimport {\n Flex,\n Status,\n Typography,\n Button,\n Modal,\n Field,\n SingleSelect,\n SingleSelectOption,\n Dialog,\n type StatusVariant,\n Box,\n Link,\n} from '@strapi/design-system';\nimport { WarningCircle, ListPlus, Trash, Earth, Cross, Plus, Sparkle, Loader } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAILocalizationJobsPolling } from '../hooks/useAILocalizationJobsPolling';\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetAILocalizationJobsByDocumentQuery } from '../services/aiLocalizationJobs';\nimport { useLazyGetFillFromLocaleDataQuery } from '../services/fillFromLocale';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetManyDraftRelationCountQuery } from '../services/relations';\nimport { useGetSettingsQuery } from '../services/settings';\nimport { getTranslation } from '../utils/getTranslation';\nimport { capitalize } from '../utils/strings';\n\nimport { BulkLocaleActionModal } from './BulkLocaleActionModal';\n\nimport type { Locale } from '../../../shared/contracts/locales';\nimport type { I18nBaseQuery } from '../types';\nimport type { Modules } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * LocalePickerAction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocaleOptionProps {\n isDraftAndPublishEnabled: boolean;\n locale: Locale;\n status: 'draft' | 'published' | 'modified';\n entryExists: boolean;\n translationStatus?: 'processing' | 'failed' | 'completed' | undefined;\n}\n\nconst statusVariants: Record<LocaleOptionProps['status'], StatusVariant> = {\n draft: 'secondary',\n published: 'success',\n modified: 'alternative',\n};\n\nconst LocaleOption = ({\n isDraftAndPublishEnabled,\n locale,\n status,\n entryExists,\n}: LocaleOptionProps) => {\n const { formatMessage } = useIntl();\n\n if (!entryExists) {\n return formatMessage(\n {\n id: getTranslation('CMEditViewLocalePicker.locale.create'),\n defaultMessage: 'Create <bold>{locale}</bold> locale',\n },\n {\n bold: (locale: React.ReactNode) => <b>{locale}</b>,\n locale: locale.name,\n }\n );\n }\n\n return (\n <Flex width=\"100%\" gap={1} justifyContent=\"space-between\">\n <Typography>{locale.name}</Typography>\n {isDraftAndPublishEnabled ? (\n <Status\n display=\"flex\"\n paddingLeft=\"6px\"\n paddingRight=\"6px\"\n paddingTop=\"2px\"\n paddingBottom=\"2px\"\n size=\"S\"\n variant={statusVariants[status]}\n >\n <Typography tag=\"span\" variant=\"pi\" fontWeight=\"bold\">\n {capitalize(status)}\n </Typography>\n </Status>\n ) : null}\n </Flex>\n );\n};\n\nconst LocaleOptionStartIcon = ({\n entryWithLocaleExists,\n translationStatus,\n index,\n}: {\n entryWithLocaleExists: boolean;\n translationStatus?: 'processing' | 'failed' | 'completed' | undefined;\n index?: number;\n}) => {\n const isAiAvailable = useAIAvailability();\n\n if (!entryWithLocaleExists) {\n return <Plus />;\n }\n\n if (isAiAvailable && index !== 0 && translationStatus === 'failed') {\n return <WarningCircle fill=\"warning600\" />;\n }\n\n return null;\n};\n\nconst LocalePickerAction = ({\n document,\n meta,\n model,\n collectionType,\n documentId,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<I18nBaseQuery>();\n const { hasI18n, canCreate, canRead } = useI18n();\n const { data: locales = [] } = useGetLocalesQuery();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const { schema } = useDocument({\n model,\n collectionType,\n documentId,\n params: { locale: currentDesiredLocale },\n });\n const { data: jobData } = useGetAILocalizationJobsByDocumentQuery({\n documentId: documentId!,\n model: model!,\n collectionType: collectionType!,\n });\n const { data: settings } = useGetSettingsQuery();\n const isAiAvailable = useAIAvailability();\n const setValues = useForm('LocalePickerAction', (state) => state.setValues);\n\n const handleSelect = React.useCallback(\n (value: string) => {\n setQuery(\n {\n plugins: {\n ...query.plugins,\n i18n: {\n locale: value,\n },\n },\n },\n 'push',\n true\n );\n },\n [query.plugins, setQuery]\n );\n\n const nonTranslatedFields = React.useMemo(() => {\n if (!schema?.attributes) return [];\n return Object.keys(schema.attributes).filter((field) => {\n const attribute = schema.attributes[field] as Record<string, unknown>;\n return (attribute?.pluginOptions as any)?.i18n?.localized === false;\n });\n }, [schema?.attributes]);\n\n const sourceLocaleData = React.useMemo(() => {\n if (!Array.isArray(locales) || !meta?.availableLocales) return null;\n\n const defaultLocale = locales.find((locale: Locale) => locale.isDefault);\n const existingLocales = meta.availableLocales.map((loc) => loc.locale);\n\n const sourceLocaleCode =\n defaultLocale &&\n existingLocales.includes(defaultLocale.code) &&\n defaultLocale.code !== currentDesiredLocale\n ? defaultLocale.code\n : existingLocales.find((locale) => locale !== currentDesiredLocale);\n\n if (!sourceLocaleCode) return null;\n\n // Find the document data from availableLocales (now includes non-translatable fields)\n const sourceLocaleDoc = meta.availableLocales.find((loc) => loc.locale === sourceLocaleCode);\n\n return sourceLocaleDoc\n ? { locale: sourceLocaleCode, data: sourceLocaleDoc as Record<string, unknown> }\n : null;\n }, [locales, meta?.availableLocales, currentDesiredLocale]);\n\n /**\n * Prefilling form with non-translatable fields from already existing locale\n */\n React.useEffect(() => {\n // Only run when creating a new locale (no document ID yet) and when we have non-translatable fields\n if (!document?.id && nonTranslatedFields.length > 0 && sourceLocaleData?.data) {\n const dataToSet = nonTranslatedFields.reduce(\n (acc: Record<string, unknown>, field: string) => {\n acc[field] = sourceLocaleData.data[field];\n return acc;\n },\n {}\n );\n\n if (Object.keys(dataToSet).length > 0) {\n setValues(dataToSet);\n }\n }\n }, [document?.id, nonTranslatedFields, sourceLocaleData?.data, setValues]);\n\n React.useEffect(() => {\n if (!Array.isArray(locales) || !hasI18n) {\n return;\n }\n /**\n * Handle the case where the current locale query param doesn't exist\n * in the list of available locales, so we redirect to the default locale.\n */\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const defaultLocale = locales.find((locale) => locale.isDefault);\n if (!doesLocaleExist && defaultLocale?.code) {\n handleSelect(defaultLocale.code);\n }\n }, [handleSelect, hasI18n, locales, currentDesiredLocale]);\n\n const currentLocale = Array.isArray(locales)\n ? locales.find((locale) => locale.code === currentDesiredLocale)\n : undefined;\n\n // Use meta.availableLocales instead of document.localizations\n // meta.availableLocales contains all locales for the document, even when creating new locales\n const availableLocales = meta?.availableLocales ?? [];\n const documentLocalizations = document?.localizations ?? [];\n\n // Prefer meta.availableLocales as it's more reliable, fallback to document.localizations\n const allLocalizations = availableLocales.length > 0 ? availableLocales : documentLocalizations;\n\n const allCurrentLocales = [\n { status: getDocumentStatus(document, meta), locale: currentLocale?.code },\n ...allLocalizations,\n ];\n\n if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n return null;\n }\n\n const displayedLocales = locales.filter((locale) => {\n /**\n * If you can read we allow you to see the locale exists\n * otherwise the locale is hidden.\n */\n return canRead.includes(locale.code);\n });\n\n const localesSortingDefaultFirst = displayedLocales.sort((a, b) =>\n a.isDefault ? -1 : b.isDefault ? 1 : 0\n );\n\n return {\n label: formatMessage({\n id: getTranslation('Settings.locales.modal.locales.label'),\n defaultMessage: 'Locales',\n }),\n options: localesSortingDefaultFirst.map((locale, index) => {\n const entryWithLocaleExists = allCurrentLocales.some((doc) => doc.locale === locale.code);\n\n const currentLocaleDoc = allCurrentLocales.find((doc) =>\n 'locale' in doc ? doc.locale === locale.code : false\n );\n\n const permissionsToCheck = currentLocaleDoc ? canRead : canCreate;\n\n if (isAiAvailable && settings?.data?.aiLocalizations) {\n return {\n _render: () => (\n <React.Fragment key={index}>\n <SingleSelectOption\n disabled={!permissionsToCheck.includes(locale.code)}\n key={locale.code}\n startIcon={\n <LocaleOptionStartIcon\n entryWithLocaleExists={entryWithLocaleExists}\n translationStatus={jobData?.data?.status}\n index={index}\n />\n }\n value={locale.code}\n >\n <LocaleOption\n isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n locale={locale}\n status={currentLocaleDoc?.status}\n entryExists={entryWithLocaleExists}\n />\n </SingleSelectOption>\n {localesSortingDefaultFirst.length > 1 && index === 0 && (\n <Box paddingRight={4} paddingLeft={4} paddingTop={2} paddingBottom={2}>\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('CMEditViewLocalePicker.locale.ai-translations'),\n defaultMessage: 'AI Translations',\n })}\n </Typography>\n </Box>\n )}\n </React.Fragment>\n ),\n };\n }\n\n return {\n disabled: !permissionsToCheck.includes(locale.code),\n value: locale.code,\n label: (\n <LocaleOption\n isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n locale={locale}\n status={currentLocaleDoc?.status}\n entryExists={entryWithLocaleExists}\n translationStatus={jobData?.data?.status}\n />\n ),\n startIcon: <LocaleOptionStartIcon entryWithLocaleExists={entryWithLocaleExists} />,\n };\n }),\n customizeContent: () => currentLocale?.name,\n onSelect: handleSelect,\n value: currentLocale,\n };\n};\n\ntype UseDocument = typeof useDocument;\n\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AISettingsStatusAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst AITranslationStatusIcon = styled(Status)<{ $isAISettingEnabled: boolean }>`\n display: flex;\n gap: ${({ theme }) => theme.spaces[1]};\n justify-content: center;\n align-items: center;\n height: 3.2rem;\n width: 3.2rem;\n\n // Disabled state\n ${({ $isAISettingEnabled, theme }) =>\n !$isAISettingEnabled &&\n `\n background-color: ${theme.colors.neutral150};\n `}\n\n svg {\n ${({ $isAISettingEnabled, theme }) =>\n !$isAISettingEnabled &&\n `\n fill: ${theme.colors.neutral300};\n `}\n }\n`;\n\nconst SpinningLoader = styled(Loader)`\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n\n animation: spin 2s linear infinite;\n`;\n\nconst AITranslationStatusAction = ({ documentId, model, collectionType }: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const isAIAvailable = useAIAvailability();\n const { data: settings } = useGetSettingsQuery();\n const isAISettingEnabled = settings?.data?.aiLocalizations;\n const { hasI18n } = useI18n();\n\n // Poll for AI localizations jobs when AI is enabled and we have a documentId\n const { status } = useAILocalizationJobsPolling({\n documentId,\n model,\n collectionType,\n });\n const statusVariant = (() => {\n if (status === 'failed') {\n return 'warning';\n }\n\n if (isAISettingEnabled) {\n return 'alternative';\n }\n\n return 'neutral';\n })();\n\n // Do not display this action when i18n is not available\n if (!hasI18n) {\n return null;\n }\n\n // Do not display this action when AI is not available\n if (!isAIAvailable) {\n return null;\n }\n\n return {\n _status: {\n message: (\n <Flex\n height=\"100%\"\n alignItems=\"center\"\n aria-label={formatMessage({\n id: getTranslation('CMEditViewAITranslation.status-aria-label'),\n defaultMessage: 'AI Translation Status',\n })}\n >\n <AITranslationStatusIcon\n $isAISettingEnabled={Boolean(isAISettingEnabled)}\n variant={statusVariant}\n size=\"S\"\n >\n {status === 'processing' ? <SpinningLoader /> : <Sparkle />}\n </AITranslationStatusIcon>\n </Flex>\n ),\n tooltip: (\n <Flex direction=\"column\" padding={4} alignItems=\"flex-start\" width=\"25rem\">\n <Typography variant=\"pi\" fontWeight=\"600\">\n {formatMessage(\n {\n id: getTranslation('CMEditViewAITranslation.status-title'),\n defaultMessage:\n '{enabled, select, true {AI translation enabled} false {AI translation disabled} other {AI translation disabled}}',\n },\n { enabled: isAISettingEnabled }\n )}\n </Typography>\n <Typography variant=\"pi\" paddingTop={1} paddingBottom={3}>\n {formatMessage({\n id: getTranslation('CMEditViewAITranslation.status-description'),\n defaultMessage:\n 'Our AI translates content in all locales each time you save a modification in the default locale.',\n })}\n </Typography>\n <Link\n fontSize=\"inherit\"\n tag={NavLink}\n to=\"/settings/internationalization\"\n style={{ alignSelf: 'flex-end' }}\n >\n <Typography variant=\"pi\" textAlign=\"right\">\n {formatMessage(\n {\n id: getTranslation('CMEditViewAITranslation.settings-link'),\n defaultMessage:\n '{enabled, select, true {Disable it in settings} false {Enable it in settings} other {Enable it in settings}}',\n },\n { enabled: isAISettingEnabled }\n )}\n </Typography>\n </Link>\n </Flex>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FillFromAnotherLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst FillFromAnotherLocaleAction = ({\n documentId,\n meta,\n model,\n collectionType,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const { hasI18n } = useI18n();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const [localeSelected, setLocaleSelected] = React.useState<string | null>(null);\n const setValues = useForm('FillFromAnotherLocale', (state) => state.setValues);\n\n const [getFillFromLocaleData, { isLoading: isFillFromLocaleLoading }] =\n useLazyGetFillFromLocaleDataQuery();\n const { data: locales = [] } = useGetLocalesQuery();\n\n const isAIAvailable = useAIAvailability();\n const { data: settings } = useGetSettingsQuery();\n const isAISettingEnabled = settings?.data?.aiLocalizations;\n\n const availableLocales = Array.isArray(locales)\n ? locales.filter((locale) => meta?.availableLocales.some((l) => l.locale === locale.code))\n : [];\n\n const fillFromLocale = (onClose: () => void) => async () => {\n if (!localeSelected || !currentDesiredLocale) {\n return;\n }\n\n try {\n const { data } = await getFillFromLocaleData({\n model,\n documentId,\n sourceLocale: localeSelected,\n targetLocale: currentDesiredLocale,\n collectionType: collectionType as 'collection-types' | 'single-types',\n }).unwrap();\n\n if (data) {\n setValues(data);\n }\n\n onClose();\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(err as Parameters<typeof formatAPIError>[0]),\n });\n }\n };\n\n if (!hasI18n) {\n return null;\n }\n\n // Do not display this action when AI is available and AI translations are enabled\n if (isAIAvailable && isAISettingEnabled) {\n return null;\n }\n\n return {\n type: 'icon',\n icon: <Earth />,\n disabled: availableLocales.length === 0,\n label: formatMessage({\n id: getTranslation('CMEditViewCopyLocale.copy-text'),\n defaultMessage: 'Fill in from another locale',\n }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: ({ onClose }: { onClose: () => void }) => (\n <>\n <Dialog.Body>\n <Flex direction=\"column\" gap={3}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.body'),\n defaultMessage:\n 'Your current content will be erased and filled by the content of the selected locale:',\n })}\n </Typography>\n <Field.Root width=\"100%\">\n <Field.Label>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.field.label'),\n defaultMessage: 'Locale',\n })}\n </Field.Label>\n <SingleSelect\n value={localeSelected}\n placeholder={formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.field.placeholder'),\n defaultMessage: 'Select one locale...',\n })}\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={(value) => setLocaleSelected(value)}\n >\n {availableLocales.map((locale) => (\n <SingleSelectOption key={locale.code} value={locale.code}>\n {locale.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Flex gap={2} width=\"100%\">\n <Button\n flex=\"auto\"\n variant=\"tertiary\"\n onClick={onClose}\n disabled={isFillFromLocaleLoading}\n >\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.cancel-text'),\n defaultMessage: 'No, cancel',\n })}\n </Button>\n <Button\n flex=\"auto\"\n variant=\"success\"\n onClick={fillFromLocale(onClose)}\n loading={isFillFromLocaleLoading}\n disabled={isFillFromLocaleLoading}\n >\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.submit-text'),\n defaultMessage: 'Yes, fill in',\n })}\n </Button>\n </Flex>\n </Dialog.Footer>\n </>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteLocaleAction: DocumentActionComponent = ({\n document,\n documentId,\n model,\n collectionType,\n}) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { hasI18n, canDelete } = useI18n();\n\n // Get the current locale object, using the URL instead of document so it works while creating\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const { data: locales = [] } = useGetLocalesQuery();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const locale = !('error' in locales) && locales.find((loc) => loc.code === currentDesiredLocale);\n\n if (!hasI18n) {\n return null;\n }\n\n return {\n disabled:\n (document?.locale && !canDelete.includes(document.locale)) || !document || !document.id,\n position: ['header', 'table-row'],\n label: formatMessage(\n {\n id: getTranslation('actions.delete.label'),\n defaultMessage: 'Delete entry ({locale})',\n },\n { locale: locale && locale.name }\n ),\n icon: <StyledTrash />,\n variant: 'danger',\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('actions.delete.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: getTranslation('actions.delete.dialog.body'),\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n const unableToDelete =\n // We are unable to delete a collection type without a document ID\n // & unable to delete generally if there is no document locale\n (collectionType !== 'single-types' && !documentId) || !document?.locale;\n\n if (unableToDelete) {\n console.error(\n \"You're trying to delete a document without an id or locale, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: getTranslation('actions.delete.error'),\n defaultMessage: 'An error occurred while trying to delete the document locale.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: { locale: document.locale },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n },\n },\n };\n};\n\nexport type LocaleStatus = {\n locale: string;\n status: Modules.Documents.Params.PublicationStatus.Kind | 'modified';\n};\n\ninterface ExtendedDocumentActionProps extends DocumentActionProps {\n action?: 'bulk-publish' | 'bulk-unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleAction\n *\n * This component is used to handle bulk publish and unpublish actions on locales.\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkLocaleAction: DocumentActionComponent = ({\n document,\n documentId,\n model,\n collectionType,\n action,\n meta,\n}: ExtendedDocumentActionProps) => {\n const locale = document?.locale ?? null;\n const [{ query }] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const isOnPublishedTab = query.status === 'published';\n\n const { formatMessage } = useIntl();\n const { hasI18n, canPublish } = useI18n();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [selectedRows, setSelectedRows] = React.useState<any[]>([]);\n const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] =\n React.useState<boolean>(false);\n\n const { publishMany: publishManyAction, unpublishMany: unpublishManyAction } =\n useDocumentActions();\n\n const { schema, validate } = useDocument(\n {\n model,\n collectionType,\n documentId,\n params: {\n locale,\n },\n },\n {\n // No need to fetch the document, the data is already available in the `document` prop\n skip: true,\n }\n );\n\n const { data: localesMetadata = [] } = useGetLocalesQuery(hasI18n ? undefined : skipToken);\n\n const headers = [\n {\n label: formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: getTranslation('CMEditViewBulkLocale.status'),\n defaultMessage: 'Status',\n }),\n name: 'status',\n },\n {\n label: formatMessage({\n id: getTranslation('CMEditViewBulkLocale.publication-status'),\n defaultMessage: 'Publication Status',\n }),\n name: 'publication-status',\n },\n ];\n\n // Extract the rows for the bulk locale publish modal and any validation\n // errors per locale\n const [rows, validationErrors] = React.useMemo(() => {\n if (!document) {\n return [[], {}];\n }\n\n const metaLocalizations = (meta?.availableLocales ?? []).map((locale) => ({\n locale: locale.locale,\n status: (locale.status ?? 'draft') as LocaleStatus['status'],\n }));\n\n const documentLocalizations = (\n (document.localizations ?? []) as Array<{\n locale?: string | null;\n status?: Modules.Documents.Params.PublicationStatus.Kind | 'modified' | null;\n }>\n ).map((doc) => ({\n locale: doc.locale ?? undefined,\n status: (doc.status ?? 'draft') as LocaleStatus['status'],\n }));\n\n const localesMap = new Map<string, LocaleStatus>();\n\n metaLocalizations.forEach(({ locale, status }) => {\n if (locale) {\n localesMap.set(locale, { locale, status });\n }\n });\n\n documentLocalizations.forEach(({ locale, status }) => {\n if (locale) {\n localesMap.set(locale, { locale, status });\n }\n });\n\n // Build the rows for the bulk locale publish modal by combining the current\n // document with all the available locales from the document meta\n const locales: LocaleStatus[] = [];\n\n if (document?.locale) {\n locales.push({\n locale: document.locale,\n status: (document.status ?? 'draft') as LocaleStatus['status'],\n });\n }\n\n locales.push(\n ...Array.from(localesMap.entries())\n .filter(([locale]) => locale !== document?.locale)\n .map(([, value]) => value)\n );\n\n if (locales.length === 0 && document?.locale) {\n locales.push({\n locale: document.locale,\n status: (document.status ?? 'draft') as LocaleStatus['status'],\n });\n }\n\n // Validate the current document locale only. Other locales have minimal\n // data populated for performance reasons and will be validated server-side\n // during the actual bulk publish operation.\n const errors: FormErrors = {};\n if (document.locale) {\n const validation = validate(document as Modules.Documents.AnyDocument);\n if (validation !== null) {\n errors[document.locale] = validation;\n }\n }\n\n return [locales, errors];\n }, [document, meta?.availableLocales, validate]);\n\n const isBulkPublish = action === 'bulk-publish';\n const localesForAction = selectedRows.reduce((acc: string[], selectedRow: LocaleStatus) => {\n const isValidLocale =\n // Validation errors are irrelevant if we are trying to unpublish\n !isBulkPublish || !Object.keys(validationErrors).includes(selectedRow.locale);\n\n const shouldAddLocale = isBulkPublish\n ? selectedRow.status !== 'published' && isValidLocale\n : selectedRow.status !== 'draft' && isValidLocale;\n\n if (shouldAddLocale) {\n acc.push(selectedRow.locale);\n }\n\n return acc;\n }, []);\n\n // TODO skipping this for now as there is a bug with the draft relation count that will be worked on separately\n // see https://www.notion.so/strapi/Count-draft-relations-56901b492efb45ab90d42fe975b32bd8?pvs=4\n const enableDraftRelationsCount = false;\n const {\n data: draftRelationsCount = 0,\n isLoading: isDraftRelationsLoading,\n error: isDraftRelationsError,\n } = useGetManyDraftRelationCountQuery(\n {\n model,\n documentIds: [documentId!],\n locale: localesForAction,\n },\n {\n skip: !enableDraftRelationsCount || !documentId || localesForAction.length === 0,\n }\n );\n\n React.useEffect(() => {\n if (isDraftRelationsError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(isDraftRelationsError),\n });\n }\n }, [isDraftRelationsError, toggleNotification, formatAPIError]);\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n if (!hasI18n) {\n return null;\n }\n\n if (!documentId) {\n return null;\n }\n\n // This document action can be enabled given that draft and publish and i18n are\n // enabled and we can publish the current locale.\n\n const publish = async () => {\n await publishManyAction({\n model,\n documentIds: [documentId],\n params: {\n ...params,\n locale: localesForAction,\n },\n });\n\n setSelectedRows([]);\n };\n\n const unpublish = async () => {\n await unpublishManyAction({\n model,\n documentIds: [documentId],\n params: {\n ...params,\n locale: localesForAction,\n },\n });\n\n setSelectedRows([]);\n };\n\n const handleAction = async () => {\n if (draftRelationsCount > 0) {\n setIsDraftRelationConfirmationOpen(true);\n } else if (isBulkPublish) {\n await publish();\n } else {\n await unpublish();\n }\n };\n\n if (isDraftRelationConfirmationOpen) {\n return {\n label: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n variant: 'danger',\n dialog: {\n onCancel: () => {\n setIsDraftRelationConfirmationOpen(false);\n },\n onConfirm: async () => {\n await publish();\n\n setIsDraftRelationConfirmationOpen(false);\n },\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('actions.publish.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <WarningCircle width=\"2.4rem\" height=\"2.4rem\" fill=\"danger600\" />\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewBulkLocale.draft-relation-warning'),\n defaultMessage:\n 'Some locales are related to draft entries. Publishing them could leave broken links in your app.',\n })}\n </Typography>\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewBulkLocale.continue-confirmation'),\n defaultMessage: 'Are you sure you want to continue?',\n })}\n </Typography>\n </Flex>\n ),\n },\n };\n }\n\n const hasPermission = selectedRows\n .map(({ locale }) => locale)\n .every((locale) => canPublish.includes(locale));\n\n return {\n label: formatMessage({\n id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n }),\n variant: isBulkPublish ? 'secondary' : 'danger',\n icon: isBulkPublish ? <ListPlus /> : <Cross />,\n disabled: isOnPublishedTab || canPublish.length === 0,\n position: ['panel'],\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n }),\n content: () => {\n return (\n <Table.Root\n headers={headers}\n rows={rows.map((row) => ({\n ...row,\n id: row.locale,\n }))}\n selectedRows={selectedRows}\n onSelectedRowsChange={(tableSelectedRows) => setSelectedRows(tableSelectedRows)}\n >\n <BulkLocaleActionModal\n validationErrors={validationErrors}\n headers={headers}\n rows={rows}\n localesMetadata={localesMetadata as Locale[]}\n action={action ?? 'bulk-publish'}\n />\n </Table.Root>\n );\n },\n footer: () => (\n <Modal.Footer justifyContent=\"flex-end\">\n <Button\n loading={isDraftRelationsLoading}\n disabled={!hasPermission || localesForAction.length === 0}\n variant=\"default\"\n onClick={handleAction}\n >\n {formatMessage({\n id: isBulkPublish ? 'app.utils.publish' : 'app.utils.unpublish',\n defaultMessage: isBulkPublish ? 'Publish' : 'Unpublish',\n })}\n </Button>\n </Modal.Footer>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocalePublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocalePublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n return BulkLocaleAction({ action: 'bulk-publish', ...props });\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleUnpublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocaleUnpublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n return BulkLocaleAction({ action: 'bulk-unpublish', ...props });\n};\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledTrash = styled(Trash)`\n path {\n fill: currentColor;\n }\n`;\n\nexport {\n BulkLocalePublishAction,\n BulkLocaleUnpublishAction,\n DeleteLocaleAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n AITranslationStatusAction,\n};\n"],"names":["statusVariants","draft","published","modified","LocaleOption","isDraftAndPublishEnabled","locale","status","entryExists","formatMessage","useIntl","id","getTranslation","defaultMessage","bold","_jsx","b","name","_jsxs","Flex","width","gap","justifyContent","Typography","Status","display","paddingLeft","paddingRight","paddingTop","paddingBottom","size","variant","tag","fontWeight","capitalize","LocaleOptionStartIcon","entryWithLocaleExists","translationStatus","index","isAiAvailable","useAIAvailability","Plus","WarningCircle","fill","LocalePickerAction","document","meta","model","collectionType","documentId","query","setQuery","useQueryParams","hasI18n","canCreate","canRead","useI18n","data","locales","useGetLocalesQuery","currentDesiredLocale","plugins","i18n","schema","useDocument","params","jobData","useGetAILocalizationJobsByDocumentQuery","settings","useGetSettingsQuery","setValues","useForm","state","handleSelect","React","useCallback","value","nonTranslatedFields","useMemo","attributes","Object","keys","filter","field","attribute","pluginOptions","localized","sourceLocaleData","Array","isArray","availableLocales","defaultLocale","find","isDefault","existingLocales","map","loc","sourceLocaleCode","includes","code","sourceLocaleDoc","useEffect","length","dataToSet","reduce","acc","doesLocaleExist","currentLocale","undefined","documentLocalizations","localizations","allLocalizations","allCurrentLocales","getDocumentStatus","displayedLocales","localesSortingDefaultFirst","sort","a","label","options","some","doc","currentLocaleDoc","permissionsToCheck","aiLocalizations","_render","Fragment","SingleSelectOption","disabled","startIcon","draftAndPublish","Box","customizeContent","onSelect","docStatus","statuses","availableStatus","publishedAt","AITranslationStatusIcon","styled","theme","spaces","$isAISettingEnabled","colors","neutral150","neutral300","SpinningLoader","Loader","AITranslationStatusAction","isAIAvailable","isAISettingEnabled","useAILocalizationJobsPolling","statusVariant","_status","message","height","alignItems","aria-label","Boolean","Sparkle","tooltip","direction","padding","enabled","Link","fontSize","NavLink","to","style","alignSelf","textAlign","FillFromAnotherLocaleAction","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","localeSelected","setLocaleSelected","useState","getFillFromLocaleData","isLoading","isFillFromLocaleLoading","useLazyGetFillFromLocaleDataQuery","l","fillFromLocale","onClose","sourceLocale","targetLocale","unwrap","err","type","icon","Earth","dialog","title","content","_Fragment","Dialog","Body","Field","Root","Label","SingleSelect","placeholder","onChange","Footer","Button","flex","onClick","loading","DeleteLocaleAction","navigate","useNavigate","delete","deleteAction","useDocumentActions","canDelete","position","StyledTrash","onConfirm","unableToDelete","console","error","res","pathname","replace","BulkLocaleAction","action","buildValidParams","isOnPublishedTab","canPublish","selectedRows","setSelectedRows","isDraftRelationConfirmationOpen","setIsDraftRelationConfirmationOpen","publishMany","publishManyAction","unpublishMany","unpublishManyAction","validate","skip","localesMetadata","skipToken","headers","rows","validationErrors","metaLocalizations","localesMap","Map","forEach","set","push","from","entries","errors","validation","isBulkPublish","localesForAction","selectedRow","isValidLocale","shouldAddLocale","draftRelationsCount","isDraftRelationsLoading","isDraftRelationsError","useGetManyDraftRelationCountQuery","documentIds","publish","unpublish","handleAction","onCancel","hasPermission","every","ListPlus","Cross","Table","row","onSelectedRowsChange","tableSelectedRows","BulkLocaleActionModal","footer","Modal","BulkLocalePublishAction","props","BulkLocaleUnpublishAction","Trash"],"mappings":"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"}
@@ -12,10 +12,10 @@ import { styled } from 'styled-components';
12
12
  import { useAILocalizationJobsPolling } from '../hooks/useAILocalizationJobsPolling.mjs';
13
13
  import { useI18n } from '../hooks/useI18n.mjs';
14
14
  import { useGetAILocalizationJobsByDocumentQuery } from '../services/aiLocalizationJobs.mjs';
15
+ import { useLazyGetFillFromLocaleDataQuery } from '../services/fillFromLocale.mjs';
15
16
  import { useGetLocalesQuery } from '../services/locales.mjs';
16
17
  import { useGetManyDraftRelationCountQuery } from '../services/relations.mjs';
17
18
  import { useGetSettingsQuery } from '../services/settings.mjs';
18
- import { cleanData } from '../utils/clean.mjs';
19
19
  import { getTranslation } from '../utils/getTranslation.mjs';
20
20
  import { capitalize } from '../utils/strings.mjs';
21
21
  import { BulkLocaleActionModal } from './BulkLocaleActionModal.mjs';
@@ -408,41 +408,41 @@ const AITranslationStatusAction = ({ documentId, model, collectionType })=>{
408
408
  * FillFromAnotherLocaleAction
409
409
  * -----------------------------------------------------------------------------------------------*/ const FillFromAnotherLocaleAction = ({ documentId, meta, model, collectionType })=>{
410
410
  const { formatMessage } = useIntl();
411
+ const { toggleNotification } = useNotification();
412
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
411
413
  const [{ query }] = useQueryParams();
412
414
  const { hasI18n } = useI18n();
413
415
  const currentDesiredLocale = query.plugins?.i18n?.locale;
414
416
  const [localeSelected, setLocaleSelected] = React.useState(null);
415
417
  const setValues = useForm('FillFromAnotherLocale', (state)=>state.setValues);
416
- const { getDocument } = unstable_useDocumentActions();
417
- const { schema, components } = unstable_useDocument({
418
- model,
419
- documentId,
420
- collectionType,
421
- params: {
422
- locale: currentDesiredLocale
423
- }
424
- });
418
+ const [getFillFromLocaleData, { isLoading: isFillFromLocaleLoading }] = useLazyGetFillFromLocaleDataQuery();
425
419
  const { data: locales = [] } = useGetLocalesQuery();
426
420
  const isAIAvailable = useAIAvailability();
427
421
  const { data: settings } = useGetSettingsQuery();
428
422
  const isAISettingEnabled = settings?.data?.aiLocalizations;
429
423
  const availableLocales = Array.isArray(locales) ? locales.filter((locale)=>meta?.availableLocales.some((l)=>l.locale === locale.code)) : [];
430
424
  const fillFromLocale = (onClose)=>async ()=>{
431
- const response = await getDocument({
432
- collectionType,
433
- model,
434
- documentId,
435
- params: {
436
- locale: localeSelected
437
- }
438
- });
439
- if (!response || !schema) {
425
+ if (!localeSelected || !currentDesiredLocale) {
440
426
  return;
441
427
  }
442
- const { data } = response;
443
- const cleanedData = cleanData(data, schema, components);
444
- setValues(cleanedData);
445
- onClose();
428
+ try {
429
+ const { data } = await getFillFromLocaleData({
430
+ model,
431
+ documentId,
432
+ sourceLocale: localeSelected,
433
+ targetLocale: currentDesiredLocale,
434
+ collectionType: collectionType
435
+ }).unwrap();
436
+ if (data) {
437
+ setValues(data);
438
+ }
439
+ onClose();
440
+ } catch (err) {
441
+ toggleNotification({
442
+ type: 'danger',
443
+ message: formatAPIError(err)
444
+ });
445
+ }
446
446
  };
447
447
  if (!hasI18n) {
448
448
  return null;
@@ -520,6 +520,7 @@ const AITranslationStatusAction = ({ documentId, model, collectionType })=>{
520
520
  flex: "auto",
521
521
  variant: "tertiary",
522
522
  onClick: onClose,
523
+ disabled: isFillFromLocaleLoading,
523
524
  children: formatMessage({
524
525
  id: getTranslation('CMEditViewCopyLocale.cancel-text'),
525
526
  defaultMessage: 'No, cancel'
@@ -529,6 +530,8 @@ const AITranslationStatusAction = ({ documentId, model, collectionType })=>{
529
530
  flex: "auto",
530
531
  variant: "success",
531
532
  onClick: fillFromLocale(onClose),
533
+ loading: isFillFromLocaleLoading,
534
+ disabled: isFillFromLocaleLoading,
532
535
  children: formatMessage({
533
536
  id: getTranslation('CMEditViewCopyLocale.submit-text'),
534
537
  defaultMessage: 'Yes, fill in'