@sanity/document-internationalization 1.0.0 → 1.0.2

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 (114) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +89 -47
  3. package/lib/index.esm.js +2 -0
  4. package/lib/index.esm.js.map +1 -0
  5. package/lib/index.js +2 -0
  6. package/lib/index.js.map +1 -0
  7. package/lib/src/index.d.ts +200 -0
  8. package/package.json +99 -43
  9. package/src/actions/DeleteWithi18nAction.tsx +118 -0
  10. package/src/actions/DuplicateWithi18nAction.tsx +77 -0
  11. package/src/actions/PublishWithi18nAction.ts +118 -0
  12. package/src/actions/index.ts +42 -0
  13. package/src/badges/LanguageBadge.tsx +22 -0
  14. package/src/constants/I18nDelimiter.ts +1 -0
  15. package/src/constants/I18nPrefix.ts +1 -0
  16. package/src/constants/IdStructure.ts +4 -0
  17. package/src/constants/LanguageCultures.ts +902 -0
  18. package/src/constants/ReferenceBehavior.ts +5 -0
  19. package/src/constants/SupportedEmojiFlagCodes.ts +251 -0
  20. package/src/constants/UiMessages.ts +56 -0
  21. package/src/constants/index.ts +7 -0
  22. package/src/documentI18n.tsx +33 -0
  23. package/src/hooks/index.ts +2 -0
  24. package/src/hooks/useConfig.ts +22 -0
  25. package/src/hooks/useDelayedFlag.ts +31 -0
  26. package/src/index.ts +6 -1
  27. package/src/language-select/components/LanguageSelect/LanguageConfigContext.tsx +4 -0
  28. package/src/language-select/components/LanguageSelect/LanguageSelect.tsx +188 -0
  29. package/src/language-select/components/LanguageSelect/LanguageSelectContext.ts +16 -0
  30. package/src/language-select/components/LanguageSelect/LanguageSelectLabel.tsx +12 -0
  31. package/src/language-select/components/LanguageSelect/LanguageSelectList.tsx +84 -0
  32. package/src/language-select/components/LanguageSelect/LanguageSelectListItem.tsx +251 -0
  33. package/src/language-select/components/LanguageSelect/index.tsx +25 -0
  34. package/src/language-select/components/SingleFlag/SingleFlag.tsx +44 -0
  35. package/src/language-select/components/SingleFlag/allEmojiFlagCodes.ts +251 -0
  36. package/src/language-select/components/SingleFlag/index.ts +1 -0
  37. package/src/language-select/components/SplitPaneIcon/SplitPaneIcon.tsx +25 -0
  38. package/src/language-select/components/SplitPaneIcon/index.ts +1 -0
  39. package/src/language-select/components/index.ts +2 -0
  40. package/src/language-select/hooks/index.ts +1 -0
  41. package/src/language-select/hooks/useLanguages.ts +37 -0
  42. package/src/language-select/hooks/useListeningQuery.ts +66 -0
  43. package/src/structure/IDefaultDocumentNodeStructureProps.ts +4 -0
  44. package/src/structure/components/MaintenanceTab/MaintenanceTab.tsx +13 -0
  45. package/src/structure/components/MaintenanceTab/MaintenanceTabContent.tsx +259 -0
  46. package/src/structure/components/MaintenanceTab/index.ts +1 -0
  47. package/src/structure/components/MaintenanceTabResult/MaintenanceTabResult.tsx +44 -0
  48. package/src/structure/components/MaintenanceTabResult/index.ts +1 -0
  49. package/src/structure/components/MaintenanceTabTypeSelector/MaintenanceTabTypeSelector.tsx +56 -0
  50. package/src/structure/components/MaintenanceTabTypeSelector/index.ts +1 -0
  51. package/src/structure/hooks/index.ts +1 -0
  52. package/src/structure/hooks/useDocumentsInformation.ts +110 -0
  53. package/src/structure/index.tsx +120 -0
  54. package/src/structure/utils/fixBaseDocumentRefs.ts +30 -0
  55. package/src/structure/utils/fixBaseLanguageMismatch.ts +21 -0
  56. package/src/structure/utils/fixIdStructureMismatchDocuments.ts +72 -0
  57. package/src/structure/utils/fixLanguageFields.ts +32 -0
  58. package/src/structure/utils/fixOrphanedDocuments.ts +22 -0
  59. package/src/structure/utils/fixTranslationRefs.ts +50 -0
  60. package/src/structure/utils/index.ts +6 -0
  61. package/src/types/IEditState.ts +6 -0
  62. package/src/types/IExtendedLanguageObject.ts +6 -0
  63. package/src/types/ILanguageObject.ts +4 -0
  64. package/src/types/ILanguageQuery.ts +13 -0
  65. package/src/types/IResolverProps.ts +10 -0
  66. package/src/types/ITranslationRef.ts +6 -0
  67. package/src/types/IType.ts +40 -0
  68. package/src/types/IUseDocumentOperationResult.ts +11 -0
  69. package/src/types/TFieldNamesConfig.ts +5 -0
  70. package/src/types/TLanguage.ts +3 -0
  71. package/src/types/TLanguagesOption.ts +4 -0
  72. package/src/types/TSchema.ts +6 -0
  73. package/src/types/Ti18nConfig.ts +33 -0
  74. package/src/types/Ti18nDocument.ts +14 -0
  75. package/src/types/Ti18nSchema.ts +13 -0
  76. package/src/types/index.ts +15 -0
  77. package/src/utils/applyConfig.ts +43 -0
  78. package/src/utils/baseToTop.ts +5 -0
  79. package/src/utils/buildDocId.ts +8 -0
  80. package/src/utils/createSanityReference.ts +11 -0
  81. package/src/utils/getBaseIdFromId.ts +20 -0
  82. package/src/utils/getBaseLanguage.ts +6 -0
  83. package/src/utils/getFlag.ts +38 -0
  84. package/src/utils/getLanguageFromDocument.ts +9 -0
  85. package/src/utils/getLanguageFromId.ts +13 -0
  86. package/src/utils/getLanguagesFromOption.ts +40 -0
  87. package/src/utils/getTranslationsForId.ts +39 -0
  88. package/src/utils/index.ts +14 -0
  89. package/src/utils/makeObjectKey.ts +3 -0
  90. package/src/utils/normalizeLanguageList.ts +26 -0
  91. package/src/utils/serializePath.ts +11 -0
  92. package/src/utils/updateIntlFieldsForDocument.ts +79 -0
  93. package/src/utils/useSanityClient.ts +6 -0
  94. package/src/validators/index.ts +1 -0
  95. package/src/validators/isSlugUnique.ts +56 -0
  96. package/src/withDocumentI18nPlugin.ts +24 -0
  97. package/v2-incompatible.js +1 -1
  98. package/lib/cjs/index.js +0 -539
  99. package/lib/cjs/index.js.map +0 -1
  100. package/lib/esm/index.js +0 -532
  101. package/lib/esm/index.js.map +0 -1
  102. package/lib/types/index.d.ts +0 -12
  103. package/lib/types/index.d.ts.map +0 -1
  104. package/src/LanguageManage.tsx +0 -25
  105. package/src/LanguageOption.tsx +0 -158
  106. package/src/LanguagePatch.tsx +0 -61
  107. package/src/MenuButton.tsx +0 -101
  108. package/src/badges/index.tsx +0 -23
  109. package/src/constants.ts +0 -1
  110. package/src/hooks/useLanguageMetadata.tsx +0 -21
  111. package/src/hooks/useOpenInNewPane.tsx +0 -27
  112. package/src/plugin.tsx +0 -104
  113. package/src/schema/translation/metadata.ts +0 -42
  114. package/src/types.ts +0 -24
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/constants/SupportedEmojiFlagCodes.ts","../src/constants/LanguageCultures.ts","../src/constants/I18nPrefix.ts","../src/constants/I18nDelimiter.ts","../src/constants/ReferenceBehavior.ts","../src/constants/IdStructure.ts","../src/constants/UiMessages.ts","../src/utils/buildDocId.ts","../src/utils/getBaseLanguage.ts","../src/utils/useSanityClient.ts","../src/utils/getLanguagesFromOption.ts","../src/utils/normalizeLanguageList.ts","../src/utils/getBaseIdFromId.ts","../src/utils/getTranslationsForId.ts","../src/utils/createSanityReference.ts","../src/utils/getLanguageFromDocument.ts","../src/utils/serializePath.ts","../src/utils/applyConfig.ts","../src/hooks/useConfig.ts","../src/actions/PublishWithi18nAction.ts","../src/hooks/useDelayedFlag.ts","../src/utils/updateIntlFieldsForDocument.ts","../src/actions/DeleteWithi18nAction.tsx","../src/actions/DuplicateWithi18nAction.tsx","../src/actions/index.ts","../src/structure/components/MaintenanceTabTypeSelector/MaintenanceTabTypeSelector.tsx","../src/structure/components/MaintenanceTabResult/MaintenanceTabResult.tsx","../src/structure/utils/fixLanguageFields.ts","../src/utils/getLanguageFromId.ts","../src/structure/utils/fixTranslationRefs.ts","../src/structure/utils/fixOrphanedDocuments.ts","../src/structure/utils/fixBaseLanguageMismatch.ts","../src/structure/utils/fixBaseDocumentRefs.ts","../src/structure/components/MaintenanceTab/MaintenanceTabContent.tsx","../src/structure/hooks/useDocumentsInformation.ts","../src/structure/utils/fixIdStructureMismatchDocuments.ts","../src/structure/index.tsx","../src/structure/components/MaintenanceTab/MaintenanceTab.tsx","../src/validators/isSlugUnique.ts","../src/utils/getFlag.ts","../src/language-select/components/LanguageSelect/LanguageConfigContext.tsx","../src/language-select/components/SingleFlag/SingleFlag.tsx","../src/language-select/hooks/useListeningQuery.ts","../src/utils/baseToTop.ts","../src/language-select/components/LanguageSelect/LanguageSelectLabel.tsx","../src/language-select/components/SplitPaneIcon/SplitPaneIcon.tsx","../src/language-select/components/LanguageSelect/LanguageSelectContext.ts","../src/language-select/components/LanguageSelect/LanguageSelectListItem.tsx","../src/language-select/components/LanguageSelect/LanguageSelectList.tsx","../src/language-select/components/LanguageSelect/LanguageSelect.tsx","../src/language-select/hooks/useLanguages.ts","../src/language-select/components/LanguageSelect/index.tsx","../src/documentI18n.tsx","../src/badges/LanguageBadge.tsx","../src/withDocumentI18nPlugin.ts"],"sourcesContent":["export const SupportedEmojiFlagCodes = [\n 'AD',\n 'AE',\n 'AF',\n 'AG',\n 'AI',\n 'AL',\n 'AM',\n 'AO',\n 'AQ',\n 'AR',\n 'AS',\n 'AT',\n 'AU',\n 'AW',\n 'AX',\n 'AZ',\n 'BA',\n 'BB',\n 'BD',\n 'BE',\n 'BF',\n 'BG',\n 'BH',\n 'BI',\n 'BJ',\n 'BL',\n 'BM',\n 'BN',\n 'BO',\n 'BQ',\n 'BR',\n 'BS',\n 'BT',\n 'BV',\n 'BW',\n 'BY',\n 'BZ',\n 'CA',\n 'CC',\n 'CD',\n 'CF',\n 'CG',\n 'CH',\n 'CI',\n 'CK',\n 'CL',\n 'CM',\n 'CN',\n 'CO',\n 'CR',\n 'CU',\n 'CV',\n 'CW',\n 'CX',\n 'CY',\n 'CZ',\n 'DE',\n 'DJ',\n 'DK',\n 'DM',\n 'DO',\n 'DZ',\n 'EC',\n 'EE',\n 'EG',\n 'EH',\n 'ER',\n 'ES',\n 'ET',\n 'FI',\n 'FJ',\n 'FK',\n 'FM',\n 'FO',\n 'FR',\n 'GA',\n 'GB',\n 'GD',\n 'GE',\n 'GF',\n 'GG',\n 'GH',\n 'GI',\n 'GL',\n 'GM',\n 'GN',\n 'GP',\n 'GQ',\n 'GR',\n 'GS',\n 'GT',\n 'GU',\n 'GW',\n 'GY',\n 'HK',\n 'HM',\n 'HN',\n 'HR',\n 'HT',\n 'HU',\n 'ID',\n 'IE',\n 'IL',\n 'IM',\n 'IN',\n 'IO',\n 'IQ',\n 'IR',\n 'IS',\n 'IT',\n 'JE',\n 'JM',\n 'JO',\n 'JP',\n 'KE',\n 'KG',\n 'KH',\n 'KI',\n 'KM',\n 'KN',\n 'KP',\n 'KR',\n 'KW',\n 'KY',\n 'KZ',\n 'LA',\n 'LB',\n 'LC',\n 'LI',\n 'LK',\n 'LR',\n 'LS',\n 'LT',\n 'LU',\n 'LV',\n 'LY',\n 'MA',\n 'MC',\n 'MD',\n 'ME',\n 'MF',\n 'MG',\n 'MH',\n 'MK',\n 'ML',\n 'MM',\n 'MN',\n 'MO',\n 'MP',\n 'MQ',\n 'MR',\n 'MS',\n 'MT',\n 'MU',\n 'MV',\n 'MW',\n 'MX',\n 'MY',\n 'MZ',\n 'NA',\n 'NC',\n 'NE',\n 'NF',\n 'NG',\n 'NI',\n 'NL',\n 'NO',\n 'NP',\n 'NR',\n 'NU',\n 'NZ',\n 'OM',\n 'PA',\n 'PE',\n 'PF',\n 'PG',\n 'PH',\n 'PK',\n 'PL',\n 'PM',\n 'PN',\n 'PR',\n 'PS',\n 'PT',\n 'PW',\n 'PY',\n 'QA',\n 'RE',\n 'RO',\n 'RS',\n 'RU',\n 'RW',\n 'SA',\n 'SB',\n 'SC',\n 'SD',\n 'SE',\n 'SG',\n 'SH',\n 'SI',\n 'SJ',\n 'SK',\n 'SL',\n 'SM',\n 'SN',\n 'SO',\n 'SR',\n 'SS',\n 'ST',\n 'SV',\n 'SX',\n 'SY',\n 'SZ',\n 'TC',\n 'TD',\n 'TF',\n 'TG',\n 'TH',\n 'TJ',\n 'TK',\n 'TL',\n 'TM',\n 'TN',\n 'TO',\n 'TR',\n 'TT',\n 'TV',\n 'TW',\n 'TZ',\n 'UA',\n 'UG',\n 'UM',\n 'US',\n 'UY',\n 'UZ',\n 'VA',\n 'VC',\n 'VE',\n 'VG',\n 'VI',\n 'VN',\n 'VU',\n 'WF',\n 'WS',\n 'YE',\n 'YT',\n 'ZA',\n 'ZM',\n 'ZW',\n]\n","export const LanguageCultures = [\n {\n value: 'af',\n title: 'Afrikaans',\n },\n {\n value: 'af-ZA',\n title: 'Afrikaans (South Africa)',\n },\n {\n value: 'ar',\n title: 'Arabic',\n },\n {\n value: 'ar-AE',\n title: 'Arabic (U.A.E.)',\n },\n {\n value: 'ar-BH',\n title: 'Arabic (Bahrain)',\n },\n {\n value: 'ar-DZ',\n title: 'Arabic (Algeria)',\n },\n {\n value: 'ar-EG',\n title: 'Arabic (Egypt)',\n },\n {\n value: 'ar-IQ',\n title: 'Arabic (Iraq)',\n },\n {\n value: 'ar-JO',\n title: 'Arabic (Jordan)',\n },\n {\n value: 'ar-KW',\n title: 'Arabic (Kuwait)',\n },\n {\n value: 'ar-LB',\n title: 'Arabic (Lebanon)',\n },\n {\n value: 'ar-LY',\n title: 'Arabic (Libya)',\n },\n {\n value: 'ar-MA',\n title: 'Arabic (Morocco)',\n },\n {\n value: 'ar-OM',\n title: 'Arabic (Oman)',\n },\n {\n value: 'ar-QA',\n title: 'Arabic (Qatar)',\n },\n {\n value: 'ar-SA',\n title: 'Arabic (Saudi Arabia)',\n },\n {\n value: 'ar-SY',\n title: 'Arabic (Syria)',\n },\n {\n value: 'ar-TN',\n title: 'Arabic (Tunisia)',\n },\n {\n value: 'ar-YE',\n title: 'Arabic (Yemen)',\n },\n {\n value: 'az',\n title: 'Azeri',\n },\n {\n value: 'az-Cyrl-AZ',\n title: 'Azeri (Cyrillic, Azerbaijan)',\n },\n {\n value: 'az-Latn-AZ',\n title: 'Azeri (Latin, Azerbaijan)',\n },\n {\n value: 'be',\n title: 'Belarusian',\n },\n {\n value: 'be-BY',\n title: 'Belarusian (Belarus)',\n },\n {\n value: 'bg',\n title: 'Bulgarian',\n },\n {\n value: 'bg-BG',\n title: 'Bulgarian (Bulgaria)',\n },\n {\n value: 'bs-Latn-BA',\n title: 'Bosnian (Bosnia and Herzegovina)',\n },\n {\n value: 'ca',\n title: 'Catalan',\n },\n {\n value: 'ca-ES',\n title: 'Catalan (Catalan)',\n },\n {\n value: 'cs',\n title: 'Czech',\n },\n {\n value: 'cs-CZ',\n title: 'Czech (Czech Republic)',\n },\n {\n value: 'cy-GB',\n title: 'Welsh (United Kingdom)',\n },\n {\n value: 'da',\n title: 'Danish',\n },\n {\n value: 'da-DK',\n title: 'Danish (Denmark)',\n },\n {\n value: 'de',\n title: 'German',\n },\n {\n value: 'de-AT',\n title: 'German (Austria)',\n },\n {\n value: 'de-DE',\n title: 'German (Germany)',\n },\n {\n value: 'de-CH',\n title: 'German (Switzerland)',\n },\n {\n value: 'de-LI',\n title: 'German (Liechtenstein)',\n },\n {\n value: 'de-LU',\n title: 'German (Luxembourg)',\n },\n {\n value: 'dv',\n title: 'Divehi',\n },\n {\n value: 'dv-MV',\n title: 'Divehi (Maldives)',\n },\n {\n value: 'el',\n title: 'Greek',\n },\n {\n value: 'el-GR',\n title: 'Greek (Greece)',\n },\n {\n value: 'en',\n title: 'English',\n },\n {\n value: 'en-029',\n title: 'English (Caribbean)',\n },\n {\n value: 'en-AU',\n title: 'English (Australia)',\n },\n {\n value: 'en-BZ',\n title: 'English (Belize)',\n },\n {\n value: 'en-CA',\n title: 'English (Canada)',\n },\n {\n value: 'en-GB',\n title: 'English (United Kingdom)',\n },\n {\n value: 'en-IE',\n title: 'English (Ireland)',\n },\n {\n value: 'en-JM',\n title: 'English (Jamaica)',\n },\n {\n value: 'en-NZ',\n title: 'English (New Zealand)',\n },\n {\n value: 'en-PH',\n title: 'English (Republic of the Philippines)',\n },\n {\n value: 'en-TT',\n title: 'English (Trinidad and Tobago)',\n },\n {\n value: 'en-US',\n title: 'English (United States)',\n },\n {\n value: 'en-ZA',\n title: 'English (South Africa)',\n },\n {\n value: 'en-ZW',\n title: 'English (Zimbabwe)',\n },\n {\n value: 'es',\n title: 'Spanish',\n },\n {\n value: 'es-AR',\n title: 'Spanish (Argentina)',\n },\n {\n value: 'es-BO',\n title: 'Spanish (Bolivia)',\n },\n {\n value: 'es-CL',\n title: 'Spanish (Chile)',\n },\n {\n value: 'es-CO',\n title: 'Spanish (Colombia)',\n },\n {\n value: 'es-CR',\n title: 'Spanish (Costa Rica)',\n },\n {\n value: 'es-DO',\n title: 'Spanish (Dominican Republic)',\n },\n {\n value: 'es-EC',\n title: 'Spanish (Ecuador)',\n },\n {\n value: 'es-ES',\n title: 'Spanish (Spain)',\n },\n {\n value: 'es-GT',\n title: 'Spanish (Guatemala)',\n },\n {\n value: 'es-HN',\n title: 'Spanish (Honduras)',\n },\n {\n value: 'es-MX',\n title: 'Spanish (Mexico)',\n },\n {\n value: 'es-NI',\n title: 'Spanish (Nicaragua)',\n },\n {\n value: 'es-PA',\n title: 'Spanish (Panama)',\n },\n {\n value: 'es-PE',\n title: 'Spanish (Peru)',\n },\n {\n value: 'es-PR',\n title: 'Spanish (Puerto Rico)',\n },\n {\n value: 'es-PY',\n title: 'Spanish (Paraguay)',\n },\n {\n value: 'es-SV',\n title: 'Spanish (El Salvador)',\n },\n {\n value: 'es-UY',\n title: 'Spanish (Uruguay)',\n },\n {\n value: 'es-VE',\n title: 'Spanish (Venezuela)',\n },\n {\n value: 'et',\n title: 'Estonian',\n },\n {\n value: 'et-EE',\n title: 'Estonian (Estonia)',\n },\n {\n value: 'eu',\n title: 'Basque',\n },\n {\n value: 'eu-ES',\n title: 'Basque (Basque)',\n },\n {\n value: 'fa',\n title: 'Persian',\n },\n {\n value: 'fa-IR',\n title: 'Persian (Iran)',\n },\n {\n value: 'fi',\n title: 'Finnish',\n },\n {\n value: 'fi-FI',\n title: 'Finnish (Finland)',\n },\n {\n value: 'fo',\n title: 'Faroese',\n },\n {\n value: 'fo-FO',\n title: 'Faroese (Faroe Islands)',\n },\n {\n value: 'fr',\n title: 'French',\n },\n {\n value: 'fr-BE',\n title: 'French (Belgium)',\n },\n {\n value: 'fr-CA',\n title: 'French (Canada)',\n },\n {\n value: 'fr-FR',\n title: 'French (France)',\n },\n {\n value: 'fr-CH',\n title: 'French (Switzerland)',\n },\n {\n value: 'fr-LU',\n title: 'French (Luxembourg)',\n },\n {\n value: 'fr-MC',\n title: 'French (Principality of Monaco)',\n },\n {\n value: 'gl',\n title: 'Galician',\n },\n {\n value: 'gl-ES',\n title: 'Galician (Galician)',\n },\n {\n value: 'gu',\n title: 'Gujarati',\n },\n {\n value: 'gu-IN',\n title: 'Gujarati (India)',\n },\n {\n value: 'he',\n title: 'Hebrew',\n },\n {\n value: 'he-IL',\n title: 'Hebrew (Israel)',\n },\n {\n value: 'hi',\n title: 'Hindi',\n },\n {\n value: 'hi-IN',\n title: 'Hindi (India)',\n },\n {\n value: 'hr',\n title: 'Croatian',\n },\n {\n value: 'hr-BA',\n title: 'Croatian (Bosnia and Herzegovina)',\n },\n {\n value: 'hr-HR',\n title: 'Croatian (Croatia)',\n },\n {\n value: 'hu',\n title: 'Hungarian',\n },\n {\n value: 'hu-HU',\n title: 'Hungarian (Hungary)',\n },\n {\n value: 'hy',\n title: 'Armenian',\n },\n {\n value: 'hy-AM',\n title: 'Armenian (Armenia)',\n },\n {\n value: 'id',\n title: 'Indonesian',\n },\n {\n value: 'id-ID',\n title: 'Indonesian (Indonesia)',\n },\n {\n value: 'is',\n title: 'Icelandic',\n },\n {\n value: 'is-IS',\n title: 'Icelandic (Iceland)',\n },\n {\n value: 'it',\n title: 'Italian',\n },\n {\n value: 'it-CH',\n title: 'Italian (Switzerland)',\n },\n {\n value: 'it-IT',\n title: 'Italian (Italy)',\n },\n {\n value: 'ja',\n title: 'Japanese',\n },\n {\n value: 'ja-JP',\n title: 'Japanese (Japan)',\n },\n {\n value: 'ka',\n title: 'Georgian',\n },\n {\n value: 'ka-GE',\n title: 'Georgian (Georgia)',\n },\n {\n value: 'kk',\n title: 'Kazakh',\n },\n {\n value: 'kk-KZ',\n title: 'Kazakh (Kazakhstan)',\n },\n {\n value: 'kn',\n title: 'Kannada',\n },\n {\n value: 'kn-IN',\n title: 'Kannada (India)',\n },\n {\n value: 'ko',\n title: 'Korean',\n },\n {\n value: 'kok',\n title: 'Konkani',\n },\n {\n value: 'kok-IN',\n title: 'Konkani (India)',\n },\n {\n value: 'ko-KR',\n title: 'Korean (Korea)',\n },\n {\n value: 'ky',\n title: 'Kyrgyz',\n },\n {\n value: 'ky-KG',\n title: 'Kyrgyz (Kyrgyzstan)',\n },\n {\n value: 'lt',\n title: 'Lithuanian',\n },\n {\n value: 'lt-LT',\n title: 'Lithuanian (Lithuania)',\n },\n {\n value: 'lv',\n title: 'Latvian',\n },\n {\n value: 'lv-LV',\n title: 'Latvian (Latvia)',\n },\n {\n value: 'mi-NZ',\n title: 'Maori (New Zealand)',\n },\n {\n value: 'mk',\n title: 'Macedonian',\n },\n {\n value: 'mk-MK',\n title: 'Macedonian (Former Yugoslav Republic of Macedonia)',\n },\n {\n value: 'mn',\n title: 'Mongolian',\n },\n {\n value: 'mn-MN',\n title: 'Mongolian (Cyrillic, Mongolia)',\n },\n {\n value: 'mr',\n title: 'Marathi',\n },\n {\n value: 'mr-IN',\n title: 'Marathi (India)',\n },\n {\n value: 'ms',\n title: 'Malay',\n },\n {\n value: 'ms-BN',\n title: 'Malay (Brunei Darussalam)',\n },\n {\n value: 'ms-MY',\n title: 'Malay (Malaysia)',\n },\n {\n value: 'mt-MT',\n title: 'Maltese (Malta)',\n },\n {\n value: 'nb-NO',\n title: 'Norwegian, Bokmal (Norway)',\n },\n {\n value: 'nl',\n title: 'Dutch',\n },\n {\n value: 'nl-BE',\n title: 'Dutch (Belgium)',\n },\n {\n value: 'nl-NL',\n title: 'Dutch (Netherlands)',\n },\n {\n value: 'nn-NO',\n title: 'Norwegian, Nynorsk (Norway)',\n },\n {\n value: 'no',\n title: 'Norwegian',\n },\n {\n value: 'ns-ZA',\n title: 'Northern Sotho (South Africa)',\n },\n {\n value: 'pa',\n title: 'Punjabi',\n },\n {\n value: 'pa-IN',\n title: 'Punjabi (India)',\n },\n {\n value: 'pl',\n title: 'Polish',\n },\n {\n value: 'pl-PL',\n title: 'Polish (Poland)',\n },\n {\n value: 'pt',\n title: 'Portuguese',\n },\n {\n value: 'pt-BR',\n title: 'Portuguese (Brazil)',\n },\n {\n value: 'pt-PT',\n title: 'Portuguese (Portugal)',\n },\n {\n value: 'quz-BO',\n title: 'Quechua (Bolivia)',\n },\n {\n value: 'quz-EC',\n title: 'Quechua (Ecuador)',\n },\n {\n value: 'quz-PE',\n title: 'Quechua (Peru)',\n },\n {\n value: 'ro',\n title: 'Romanian',\n },\n {\n value: 'ro-RO',\n title: 'Romanian (Romania)',\n },\n {\n value: 'ru',\n title: 'Russian',\n },\n {\n value: 'ru-RU',\n title: 'Russian (Russia)',\n },\n {\n value: 'sa',\n title: 'Sanskrit',\n },\n {\n value: 'sa-IN',\n title: 'Sanskrit (India)',\n },\n {\n value: 'se-FI',\n title: 'Sami (Northern) (Finland)',\n },\n {\n value: 'se-NO',\n title: 'Sami (Northern) (Norway)',\n },\n {\n value: 'se-SE',\n title: 'Sami (Northern) (Sweden)',\n },\n {\n value: 'sk',\n title: 'Slovak',\n },\n {\n value: 'sk-SK',\n title: 'Slovak (Slovakia)',\n },\n {\n value: 'sl',\n title: 'Slovenian',\n },\n {\n value: 'sl-SI',\n title: 'Slovenian (Slovenia)',\n },\n {\n value: 'sma-NO',\n title: 'Sami (Southern) (Norway)',\n },\n {\n value: 'sma-SE',\n title: 'Sami (Southern) (Sweden)',\n },\n {\n value: 'smj-NO',\n title: 'Sami (Lule) (Norway)',\n },\n {\n value: 'smj-SE',\n title: 'Sami (Lule) (Sweden)',\n },\n {\n value: 'smn-FI',\n title: 'Sami (Inari) (Finland)',\n },\n {\n value: 'sms-FI',\n title: 'Sami (Skolt) (Finland)',\n },\n {\n value: 'sq',\n title: 'Albanian',\n },\n {\n value: 'sq-AL',\n title: 'Albanian (Albania)',\n },\n {\n value: 'sr',\n title: 'Serbian',\n },\n {\n value: 'sr-Cyrl-BA',\n title: 'Serbian (Cyrillic) (Bosnia and Herzegovina)',\n },\n {\n value: 'sr-Cyrl-CS',\n title: 'Serbian (Cyrillic, Serbia)',\n },\n {\n value: 'sr-Latn-BA',\n title: 'Serbian (Latin) (Bosnia and Herzegovina)',\n },\n {\n value: 'sr-Latn-CS',\n title: 'Serbian (Latin, Serbia)',\n },\n {\n value: 'sv',\n title: 'Swedish',\n },\n {\n value: 'sv-FI',\n title: 'Swedish (Finland)',\n },\n {\n value: 'sv-SE',\n title: 'Swedish (Sweden)',\n },\n {\n value: 'sw',\n title: 'Kiswahili',\n },\n {\n value: 'sw-KE',\n title: 'Kiswahili (Kenya)',\n },\n {\n value: 'syr',\n title: 'Syriac',\n },\n {\n value: 'syr-SY',\n title: 'Syriac (Syria)',\n },\n {\n value: 'ta',\n title: 'Tamil',\n },\n {\n value: 'ta-IN',\n title: 'Tamil (India)',\n },\n {\n value: 'te',\n title: 'Telugu',\n },\n {\n value: 'te-IN',\n title: 'Telugu (India)',\n },\n {\n value: 'th',\n title: 'Thai',\n },\n {\n value: 'th-TH',\n title: 'Thai (Thailand)',\n },\n {\n value: 'tn-ZA',\n title: 'Tswana (South Africa)',\n },\n {\n value: 'tr',\n title: 'Turkish',\n },\n {\n value: 'tr-TR',\n title: 'Turkish (Turkey)',\n },\n {\n value: 'tt',\n title: 'Tatar',\n },\n {\n value: 'tt-RU',\n title: 'Tatar (Russia)',\n },\n {\n value: 'uk',\n title: 'Ukrainian',\n },\n {\n value: 'uk-UA',\n title: 'Ukrainian (Ukraine)',\n },\n {\n value: 'ur',\n title: 'Urdu',\n },\n {\n value: 'ur-PK',\n title: 'Urdu (Islamic Republic of Pakistan)',\n },\n {\n value: 'uz',\n title: 'Uzbek',\n },\n {\n value: 'uz-Cyrl-UZ',\n title: 'Uzbek (Cyrillic, Uzbekistan)',\n },\n {\n value: 'uz-Latn-UZ',\n title: 'Uzbek (Latin, Uzbekistan)',\n },\n {\n value: 'vi',\n title: 'Vietnamese',\n },\n {\n value: 'vi-VN',\n title: 'Vietnamese (Vietnam)',\n },\n {\n value: 'xh-ZA',\n title: 'Xhosa (South Africa)',\n },\n {\n value: 'zh-CN',\n title: \"Chinese (People's Republic of China)\",\n },\n {\n value: 'zh-HK',\n title: 'Chinese (Hong Kong S.A.R.)',\n },\n {\n value: 'zh-CHS',\n title: 'Chinese (Simplified)',\n },\n {\n value: 'zh-CHT',\n title: 'Chinese (Traditional)',\n },\n {\n value: 'zh-MO',\n title: 'Chinese (Macao S.A.R.)',\n },\n {\n value: 'zh-SG',\n title: 'Chinese (Singapore)',\n },\n {\n value: 'zh-TW',\n title: 'Chinese (Taiwan)',\n },\n {\n value: 'zu-ZA',\n title: 'Zulu (South Africa)',\n },\n]\n","export const I18nPrefix = 'i18n'\n","export const I18nDelimiter = '__i18n_'\n","export enum ReferenceBehavior {\n STRONG = 'strong',\n WEAK = 'weak',\n DISABLED = 'disabled',\n}\n","export enum IdStructure {\n SUBPATH = 'subpath',\n DELIMITER = 'delimiter',\n}\n","export const UiMessages = {\n publishing: 'Publishing...',\n publish: 'Publish',\n updatingIntlFields: 'Updating i18n fields',\n intlFieldsUpdated: 'i18n fields updated',\n baseDocumentCopied: 'Base document copied',\n translationCreatedToast: {\n title: (name: string): string => `Translation created: ${name}`,\n description: (name: string): string =>\n `The content from ‘${name}’ is copied into the new document translation.`,\n },\n loading: 'Loading languages...',\n draft: 'Draft',\n missingTranslations:\n 'Following languages are missing some translations compared to the base language',\n base: 'Base',\n missing: 'Missing',\n deleteAll: {\n buttonTitle: 'Delete (incl. translations)',\n deleting: 'Deleting...',\n },\n duplicateAll: {\n buttonTitle: 'Duplicate (incl. translations)',\n duplicating: 'Duplicating...',\n },\n translationsMaintenance: {\n title: 'Translation Maintenance',\n selectSchemaPlaceholder: 'Select schema type',\n idStructureMismatch: 'document(s) with mismatched ID structures',\n missingLanguageField: 'document(s) are missing the language field',\n missingDocumentRefs: 'document(s) have missing translation references',\n missingBaseDocumentRefs: 'document(s) have missing base document references',\n orphanDocuments: 'orphaned translation document(s)',\n referenceBehaviorMismatch: 'document(s) with mismatched reference behaviors',\n baseLanguageMismatch: 'base document(s) with mismatched language field',\n fix: 'Fix',\n pendingTransactionDialog: {\n header: 'Confirm pending transaction',\n caution:\n 'Before continuing please review the transactions. Keep in mind, the translation maintenance functionality may remove or update many documents at once. It is recommended to back-up your dataset before performing data maintenance',\n cancel: 'Cancel',\n confirm: 'Confirm operation',\n },\n },\n errors: {\n baseDocumentNotPublished:\n 'It looks like you have not published your base translation yet. When using strong references it is required to publish the base document before publishing any translated entries',\n },\n languageSelect: {\n placeholder: 'Switch language',\n listLabels: {\n existing: 'Select document translations',\n missing: 'Create new document translations',\n },\n },\n}\n","import {Ti18nConfig} from '../types'\nimport {I18nDelimiter, I18nPrefix, IdStructure} from '../constants'\n\nexport const buildDocId = (pluginConfig: Ti18nConfig, id: string, lang?: string | null): string => {\n if (pluginConfig.idStructure === IdStructure.DELIMITER)\n return `${id}${I18nDelimiter}${lang || '*'}`\n return `${I18nPrefix}.${id}.${lang || '*'}`\n}\n","import {ILanguageObject} from '../types'\n\nexport const getBaseLanguage = (langs: ILanguageObject[], base?: string) => {\n if (base) return langs.find((l) => l.id === base) || null\n return langs.length > 0 ? langs[0] : null\n}\n","import {SanityClient} from '@sanity/client'\nimport {useClient} from 'sanity'\n\nexport function useSanityClient(): SanityClient {\n return useClient({apiVersion: '2021-10-01'})\n}\n","import get from 'just-safe-get'\nimport type {SanityClient, SanityDocument} from '@sanity/client'\nimport {ILanguageObject, ILanguageQuery, TLanguagesOption} from '../types'\nimport type {ApplyConfigResult} from '../utils'\nimport {normalizeLanguageList} from './normalizeLanguageList'\n\nexport const getLanguagesFromOption = async <D extends SanityDocument>(\n client: SanityClient,\n config: ApplyConfigResult,\n langs: TLanguagesOption,\n document?: D | null\n): Promise<ILanguageObject[]> => {\n const languages = normalizeLanguageList(\n await (async () => {\n if (Array.isArray(langs)) return langs\n const r = await client.fetch<ILanguageQuery['value'][]>(langs.query)\n const value = langs.value\n\n if (typeof value === 'string') return r.map((l) => get(l, value))\n return r.map((l) => {\n // @deprecated\n if ('name' in value) {\n return {\n name: get(l, value.name),\n title: get(l, value.title),\n }\n }\n\n return {\n id: get(l, value.id),\n title: get(l, value.title),\n }\n })\n })()\n )\n if (config.languagesLoader) {\n return config.languagesLoader(languages, document ?? undefined)\n }\n return languages\n}\n","import {ILanguageObject} from '../types'\nimport {LanguageCultures} from '../constants'\n\ntype LanguageConfigObject =\n | ILanguageObject\n | (Omit<ILanguageObject, 'id'> & {\n name: string\n })\n\nexport const normalizeLanguageList = (languages: (string | LanguageConfigObject)[]) =>\n languages.map<ILanguageObject>((l) => {\n if (typeof l === 'string') {\n const langCult = LanguageCultures.find((x) => x.value === l)\n if (langCult) return {title: langCult.title, id: l}\n return {title: l, id: l}\n }\n\n if ('name' in l) {\n console.warn(\n `The \"name\" field in your language configuration is deprecated, please replace it with \"id\".`\n )\n return {title: l.title, id: l.name}\n }\n\n return {title: l.title, id: l.id}\n })\n","import {I18nPrefix, I18nDelimiter} from '../constants'\n\n/* Generic to support both string -> string & string? -> string? */\nexport const getBaseIdFromId = <T extends string | undefined>(id?: T): T => {\n if (!id) {\n return undefined as T\n }\n const nonDraftId = id.replace(/^drafts\\./, '')\n\n // subpath\n const rx = new RegExp(`${I18nPrefix}\\\\.([^.]+)\\\\.[^.]+`)\n const match = nonDraftId.match(rx)\n if (match && match.length === 2) return match[1] as T\n\n // delimiter\n const split = nonDraftId.split(I18nDelimiter)\n if (split.length > 0) return split[0] as T\n\n return nonDraftId as T\n}\n","import {SanityClient} from '@sanity/client'\nimport type {ApplyConfigResult} from '../utils'\nimport {I18nDelimiter, IdStructure} from '../constants'\nimport {Ti18nDocument} from '../types'\nimport {buildDocId} from './buildDocId'\n\nexport const getTranslationsFor = async (\n client: SanityClient,\n config: ApplyConfigResult,\n baseDocumentId: string,\n includeDrafts = false\n): Promise<Ti18nDocument[]> => {\n if (config.idStructure === IdStructure.DELIMITER) {\n const segments = baseDocumentId.split('-')\n segments[segments.length - 1] = `${segments[segments.length - 1]}${I18nDelimiter}*`\n const documents = await client.fetch<Ti18nDocument[]>(\n includeDrafts\n ? '*[_id match $segments]'\n : `*[_id match $segments && !(_id in path('drafts.**'))]`,\n {segments}\n )\n\n return documents\n ? documents.filter(\n (d) =>\n d._id.startsWith(baseDocumentId) ||\n (includeDrafts && d._id.startsWith(`drafts.${baseDocumentId}`))\n )\n : []\n }\n const documents = await client.fetch<Ti18nDocument[]>(\n includeDrafts ? '*[_id in path($path) || _id in path($draftPath)]' : '*[_id in path($path)]',\n {\n path: buildDocId(config, baseDocumentId, '*'),\n draftPath: `drafts.${buildDocId(config, baseDocumentId, '*')}`,\n }\n )\n return documents ?? []\n}\n","import type {Reference} from 'sanity'\n\ntype Ref = Omit<Reference, '_type'> & {_type: 'reference'}\n\nexport function createSanityReference(id: string, weak = false): Ref {\n return {\n _type: 'reference' as const,\n _ref: id.replace(`drafts.`, ``),\n ...(weak === true ? {_weak: true} : {}),\n }\n}\n","import type {SanityDocument} from '@sanity/client'\nimport type {ApplyConfigResult} from './applyConfig'\n\nexport function getLanguageFromDocument(\n doc: SanityDocument,\n config: ApplyConfigResult\n): string | null {\n return doc?.[config.fieldNames.lang] || config.base || null\n}\n","import {Path, isKeyedObject} from 'sanity'\n\nexport function serializePath(path: Path): string {\n return path.reduce<string>((target, part, i) => {\n const isIndex = typeof part === 'number'\n const isKey = isKeyedObject(part)\n const separator = i === 0 ? '' : '.'\n const add = isIndex || isKey ? '[]' : `${separator}${part}`\n return `${target}${add}`\n }, '')\n}\n","import {IdStructure, ReferenceBehavior} from '../constants'\nimport type {Ti18nConfig} from '../types'\n\ntype ApplyConfigOptionalKeys =\n | 'shouldReload'\n | 'languagesLoader'\n | 'fallbackLanguageSelect'\n | 'customFlagComponents'\nexport type ApplyConfigResult = Omit<\n Required<{\n [K in keyof Ti18nConfig]: Required<Ti18nConfig[K]>\n }>,\n ApplyConfigOptionalKeys\n> &\n Pick<Ti18nConfig, ApplyConfigOptionalKeys>\n\nexport function applyConfig(\n baseConfig?: Ti18nConfig,\n incomingConfig?: Ti18nConfig | null\n): ApplyConfigResult {\n return {\n base: incomingConfig?.base || baseConfig?.base || '',\n languages: incomingConfig?.languages || baseConfig?.languages || [],\n idStructure: baseConfig?.idStructure || IdStructure.DELIMITER,\n referenceBehavior: baseConfig?.referenceBehavior || ReferenceBehavior.STRONG,\n withTranslationsMaintenance: baseConfig?.withTranslationsMaintenance === true,\n shouldReload: baseConfig?.shouldReload,\n languagesLoader: baseConfig?.languagesLoader,\n fallbackLanguageSelect: baseConfig?.fallbackLanguageSelect,\n customFlagComponents: baseConfig?.customFlagComponents,\n fieldNames: {\n lang: incomingConfig?.fieldNames?.lang || baseConfig?.fieldNames?.lang || '__i18n_lang',\n references:\n incomingConfig?.fieldNames?.references ||\n baseConfig?.fieldNames?.references ||\n '__i18n_refs',\n baseReference:\n incomingConfig?.fieldNames?.baseReference ||\n baseConfig?.fieldNames?.baseReference ||\n '__i18n_base',\n },\n }\n}\n","import {useMemo} from 'react'\nimport {useSchema} from 'sanity'\nimport type {Ti18nConfig, Ti18nSchema} from '../types'\nimport {applyConfig, ApplyConfigResult} from '../utils'\n\nexport function useConfig(pluginConfig: Ti18nConfig, type?: string): ApplyConfigResult {\n const schemaRegistry = useSchema()\n const schemaI18nConfig = useMemo(() => {\n if (type) {\n const schemaType = schemaRegistry.get(type) as Ti18nSchema | undefined\n if (schemaType && typeof schemaType.i18n !== 'boolean') {\n return schemaType?.i18n\n }\n }\n return null\n }, [type, schemaRegistry])\n\n return useMemo(\n () => applyConfig(pluginConfig, schemaI18nConfig),\n [schemaI18nConfig, pluginConfig]\n )\n}\n","import * as React from 'react'\n\nimport {useToast} from '@sanity/ui'\nimport {CheckmarkIcon, PublishIcon} from '@sanity/icons'\nimport {useDocumentOperation, useEditState, useSyncState, useValidationStatus} from 'sanity'\nimport type {DocumentActionComponent, DocumentActionDescription} from 'sanity'\nimport {getBaseIdFromId, updateIntlFieldsForDocument, useSanityClient} from '../utils'\nimport {ReferenceBehavior, UiMessages} from '../constants'\nimport {IEditState, IUseDocumentOperationResult, Ti18nConfig} from '../types'\nimport {useConfig, useDelayedFlag} from '../hooks'\n\nexport function createPublishAction(pluginConfig: Ti18nConfig): DocumentActionComponent {\n return ({type, id, onComplete}): DocumentActionDescription => {\n const toast = useToast()\n const client = useSanityClient()\n const config = useConfig(pluginConfig, type)\n const baseDocumentId = getBaseIdFromId(id)\n const updatingIntlFieldsPromiseRef = React.useRef<Promise<void> | null>(null)\n const [publishState, setPublishState] = React.useState<'publishing' | 'published' | null>(null)\n const [updatingIntlFields, setUpdatingIntlFields] = React.useState(false)\n const {draft, published} = useEditState(id, type) as IEditState\n const baseDocumentEditState = useEditState(baseDocumentId, type) as IEditState\n const {publish} = useDocumentOperation(id, type) as IUseDocumentOperationResult\n const {isValidating, validation} = useValidationStatus(id, type)\n const syncState = useSyncState(id, type)\n const baseDocumentSyncState = useSyncState(baseDocumentId, type)\n const disabled = useDelayedFlag(\n !!(\n publishState === 'published' ||\n publishState === 'publishing' ||\n updatingIntlFields ||\n publish.disabled ||\n syncState.isSyncing ||\n baseDocumentSyncState.isSyncing ||\n isValidating ||\n validation.some((marker) => marker.level === 'error')\n )\n )\n\n const label = React.useMemo(() => {\n if (publishState === 'publishing') return UiMessages.publishing\n if (updatingIntlFields) return UiMessages.updatingIntlFields\n return UiMessages.publish\n }, [publishState, updatingIntlFields])\n\n const doUpdateIntlFields = React.useCallback(async () => {\n setUpdatingIntlFields(true)\n try {\n const document = draft || published\n if (document) {\n await updateIntlFieldsForDocument(\n client,\n config,\n document,\n baseDocumentEditState.published\n )\n }\n\n toast.push({\n closable: true,\n status: 'success',\n title: UiMessages.intlFieldsUpdated,\n })\n } catch (err) {\n console.error(err)\n toast.push({\n closable: true,\n status: 'error',\n title: (err as Error).toString(),\n })\n }\n setUpdatingIntlFields(false)\n }, [toast, draft, published, client, baseDocumentEditState.published, config])\n\n const onHandle = React.useCallback(() => {\n setPublishState('publishing')\n const isTranslation = id !== baseDocumentId\n if (\n isTranslation &&\n !baseDocumentEditState.published &&\n config.referenceBehavior === ReferenceBehavior.STRONG\n ) {\n throw new Error(UiMessages.errors.baseDocumentNotPublished)\n } else {\n publish.execute()\n }\n }, [id, baseDocumentId, publish, config, baseDocumentEditState.published])\n\n React.useEffect(() => {\n const didPublish = publishState === 'publishing' && !draft\n\n const nextState = didPublish ? 'published' : null\n const delay = didPublish ? 200 : 4000\n const timer = setTimeout(() => {\n setPublishState(nextState)\n }, delay)\n return () => clearTimeout(timer)\n }, [publishState, draft])\n\n React.useEffect(() => {\n if (publishState === 'published') {\n if (!updatingIntlFieldsPromiseRef.current) {\n updatingIntlFieldsPromiseRef.current = doUpdateIntlFields()\n .then(() => onComplete && onComplete())\n .finally(() => (updatingIntlFieldsPromiseRef.current = null))\n }\n }\n }, [publishState, onComplete, doUpdateIntlFields])\n\n return {\n disabled,\n label,\n icon: publishState === 'published' ? CheckmarkIcon : PublishIcon,\n shortcut: disabled ? null : 'Ctrl+Alt+P',\n onHandle,\n }\n }\n}\n","import {useEffect, useState} from 'react'\n\nexport function useDelayedFlag(\n value = false,\n timeout = 500,\n delayedOn = false,\n delayedOff = true\n): boolean {\n const [flag, setFlag] = useState(value)\n\n useEffect(() => {\n if (flag !== value) {\n if (value) {\n if (delayedOn) {\n const timeoutId = setTimeout(() => setFlag(true), timeout)\n return () => clearTimeout(timeoutId)\n }\n setFlag(true)\n } else if (!value) {\n if (delayedOff) {\n const timeoutId = setTimeout(() => setFlag(false), timeout)\n return () => clearTimeout(timeoutId)\n }\n setFlag(false)\n }\n }\n return undefined\n }, [flag, value, timeout, delayedOn, delayedOff])\n\n return flag\n}\n","import compact from 'lodash/compact'\nimport {SanityClient, SanityDocument} from '@sanity/client'\nimport {ITranslationRef} from '../types'\nimport {ReferenceBehavior} from '../constants'\nimport {ApplyConfigResult} from '../utils'\nimport {getLanguagesFromOption} from './getLanguagesFromOption'\nimport {getBaseLanguage} from './getBaseLanguage'\nimport {getTranslationsFor} from './getTranslationsForId'\nimport {getBaseIdFromId} from './getBaseIdFromId'\nimport {createSanityReference} from './createSanityReference'\nimport {getLanguageFromDocument} from './getLanguageFromDocument'\n\n// @TODO make this into a hook so the hook\n// can look up the existance of a base document on its own\nexport async function updateIntlFieldsForDocument(\n client: SanityClient,\n config: ApplyConfigResult,\n document: SanityDocument,\n baseDocument?: SanityDocument\n): Promise<void> {\n const {_type: type, _id: id} = document\n const baseDocumentId = getBaseIdFromId(id)\n const isTranslation = id !== baseDocumentId\n const fieldName = config.fieldNames.lang\n const refsFieldName = config.fieldNames.references\n const baseRefFieldName = config.fieldNames.baseReference\n const langs = await getLanguagesFromOption(client, config, config.languages, document)\n const languageId =\n getLanguageFromDocument(document, config) || getBaseLanguage(langs, config.base)?.id\n\n // Update I18n field for current document\n const currentDocumentTransaction = client.transaction()\n currentDocumentTransaction.createIfNotExists({_id: id, _type: type})\n currentDocumentTransaction.patch(id, {\n set: {\n [fieldName]: languageId,\n ...(isTranslation && config.referenceBehavior !== ReferenceBehavior.DISABLED\n ? {\n [baseRefFieldName]: createSanityReference(\n baseDocumentId,\n config.referenceBehavior === ReferenceBehavior.WEAK\n ),\n }\n : {}),\n },\n })\n await currentDocumentTransaction.commit()\n\n // update base document reference if required\n if (baseDocument) {\n const translatedDocuments = await getTranslationsFor(client, config, baseDocumentId)\n if (translatedDocuments.length > 0) {\n const baseDocumentTransaction = client.transaction()\n let translatedRefs: ITranslationRef[] = []\n if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {\n translatedRefs = compact(\n translatedDocuments.map((doc) => {\n const lang = getLanguageFromDocument(doc, config)\n if (!lang) return null\n return {\n _key: lang,\n ...createSanityReference(\n doc._id,\n config.referenceBehavior === ReferenceBehavior.WEAK\n ),\n }\n }, {})\n )\n }\n // baseDocumentTransaction.createIfNotExists({_id: baseDocumentId, _type: type})\n baseDocumentTransaction.patch(baseDocumentId, {\n set: {\n [refsFieldName]: translatedRefs,\n },\n })\n await baseDocumentTransaction.commit()\n }\n }\n}\n","import React from 'react'\nimport {TrashIcon} from '@sanity/icons'\nimport {useDocumentOperation, useEditState, useSyncState} from 'sanity'\nimport {ConfirmDeleteDialog} from 'sanity/desk'\nimport {useToast} from '@sanity/ui'\nimport type {DocumentActionComponent, DocumentActionDescription} from 'sanity'\nimport {IEditState, IUseDocumentOperationResult, Ti18nConfig} from '../types'\nimport {getBaseIdFromId, getTranslationsFor, useSanityClient} from '../utils'\nimport {UiMessages} from '../constants'\nimport {useConfig} from '../hooks'\n\n/**\n * This code is mostly taken from the defualt DeleteAction provided by Sanity\n */\nconst DISABLED_REASON_TITLE = {\n NOTHING_TO_DELETE: \"This document doesn't yet exist or is already deleted\",\n}\n\nexport function createDeleteAction(pluginConfig: Ti18nConfig): DocumentActionComponent {\n return function DeleteWith18nAction({id, type, onComplete}): DocumentActionDescription {\n const toast = useToast()\n const client = useSanityClient()\n const config = useConfig(pluginConfig, type)\n const baseDocumentId = React.useMemo(() => getBaseIdFromId(id), [id])\n const baseDocumentEditState = useEditState(baseDocumentId, type) as IEditState\n const syncState = useSyncState(id, type)\n const baseDocumentSyncState = useSyncState(baseDocumentId, type)\n const {delete: deleteOp} = useDocumentOperation(id, type) as IUseDocumentOperationResult\n const [isDeleting, setIsDeleting] = React.useState(false)\n const [isConfirmDialogOpen, setConfirmDialogOpen] = React.useState(false)\n\n const onHandle = React.useCallback(() => {\n setConfirmDialogOpen(true)\n }, [])\n\n const onDialogCancel = React.useCallback(() => {\n setConfirmDialogOpen(false)\n if (onComplete) onComplete()\n }, [onComplete])\n\n const onDialogConfirm = React.useCallback(async () => {\n try {\n setIsDeleting(true)\n setConfirmDialogOpen(false)\n\n if (baseDocumentEditState.draft || baseDocumentEditState.published) {\n const baseTransaction = client.transaction()\n if (baseDocumentEditState.draft) {\n baseTransaction.delete(`drafts.${baseDocumentId}`)\n }\n if (baseDocumentEditState.published) {\n baseTransaction.patch(baseDocumentId, {\n unset: [config.fieldNames.references],\n })\n }\n await baseTransaction.commit()\n }\n\n const translatedDocuments = await getTranslationsFor(client, config, baseDocumentId, true)\n const translationsTransaction = client.transaction()\n translatedDocuments.forEach((doc) => {\n translationsTransaction.delete(doc._id)\n })\n await translationsTransaction.commit()\n\n deleteOp.execute()\n if (onComplete) onComplete()\n } catch (err) {\n toast.push({\n closable: true,\n status: 'error',\n title: (err as Error).toString(),\n })\n } finally {\n setIsDeleting(true)\n }\n }, [\n toast,\n config,\n client,\n baseDocumentId,\n baseDocumentEditState.draft,\n baseDocumentEditState.published,\n deleteOp,\n onComplete,\n ])\n\n return {\n onHandle,\n tone: 'critical',\n icon: TrashIcon,\n disabled:\n isDeleting ||\n Boolean(deleteOp.disabled) ||\n syncState.isSyncing ||\n baseDocumentSyncState.isSyncing,\n shortcut: 'CTRL+ALT+D',\n title:\n (deleteOp.disabled &&\n DISABLED_REASON_TITLE[deleteOp.disabled as keyof typeof DISABLED_REASON_TITLE]) ||\n '',\n label: isDeleting ? UiMessages.deleteAll.deleting : UiMessages.deleteAll.buttonTitle,\n dialog: isConfirmDialogOpen && {\n type: 'dialog',\n onClose: onComplete,\n content: (\n <ConfirmDeleteDialog\n action=\"delete\"\n id={id}\n type={type}\n onCancel={onDialogCancel}\n onConfirm={onDialogConfirm}\n />\n ),\n },\n }\n }\n}\n","import React from 'react'\nimport {CopyIcon} from '@sanity/icons'\nimport {useDocumentOperation} from 'sanity'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport type {DocumentActionComponent, DocumentActionDescription} from 'sanity'\nimport {\n buildDocId,\n getBaseIdFromId,\n getLanguageFromDocument,\n getTranslationsFor,\n useSanityClient,\n} from '../utils'\nimport {IUseDocumentOperationResult, Ti18nConfig} from '../types'\nimport {UiMessages} from '../constants'\nimport {useConfig} from '../hooks'\n\n/**\n * This code is mostly taken from the default DuplicateAction provided by Sanity\n */\n\nconst DISABLED_REASON_TITLE = {\n NOTHING_TO_DUPLICATE: \"This document doesn't yet exist so there's nothing to duplicate\",\n}\n\nexport function createDuplicateAction(pluginConfig: Ti18nConfig): DocumentActionComponent {\n return ({id, type, draft, published}): DocumentActionDescription => {\n const toast = useToast()\n const client = useSanityClient()\n const config = useConfig(pluginConfig, type)\n const baseDocumentId = getBaseIdFromId(id)\n const {duplicate: duplicateOp} = useDocumentOperation(id, type) as IUseDocumentOperationResult\n const [isDuplicating, setDuplicating] = React.useState(false)\n\n const onDuplicate = React.useCallback(async () => {\n setDuplicating(true)\n try {\n const dupeId = uuid()\n const translations = await getTranslationsFor(client, config, baseDocumentId)\n const transaction = client.transaction()\n transaction.create({\n ...(draft ?? published),\n _id: dupeId,\n _type: type,\n })\n translations.forEach((t) => {\n const isDraft = t._id.startsWith('drafts.')\n const newId = buildDocId(config, dupeId, getLanguageFromDocument(t, config))\n transaction.create({\n ...t,\n _id: isDraft ? `drafts.${newId}` : newId,\n })\n })\n await transaction.commit()\n } catch (err) {\n console.error(err)\n toast.push({\n description: (err as Error).message,\n })\n }\n setDuplicating(false)\n }, [client, config, toast, baseDocumentId, type, draft, published])\n\n return {\n icon: CopyIcon,\n disabled: Boolean(duplicateOp.disabled) || isDuplicating,\n title:\n (duplicateOp.disabled &&\n DISABLED_REASON_TITLE[duplicateOp.disabled as keyof typeof DISABLED_REASON_TITLE]) ||\n '',\n label: isDuplicating\n ? UiMessages.duplicateAll.duplicating\n : UiMessages.duplicateAll.buttonTitle,\n onHandle: onDuplicate,\n }\n }\n}\n","import {type DocumentActionsContext, type DocumentActionComponent} from 'sanity'\nimport {Ti18nConfig, Ti18nSchema} from '../types'\nimport {getBaseIdFromId} from '../utils'\nimport {createPublishAction} from './PublishWithi18nAction'\nimport {createDeleteAction} from './DeleteWithi18nAction'\nimport {createDuplicateAction} from './DuplicateWithi18nAction'\n\nexport {createPublishAction, createDeleteAction, createDuplicateAction}\n\nexport const resolveActions = (\n prev: DocumentActionComponent[],\n {schema, schemaType, documentId}: DocumentActionsContext,\n pluginConfig: Ti18nConfig\n): DocumentActionComponent[] => {\n const type: Ti18nSchema = schema.get(schemaType) as Ti18nSchema\n const isI18n = type && type.i18n\n const isBase = documentId === getBaseIdFromId(documentId)\n let actions = prev\n\n if (isI18n) {\n actions = actions.map((Action) => {\n const isPublishAction = Action.action === 'publish'\n const isDeleteAction = Action.action === 'delete'\n\n if (isPublishAction) {\n return createPublishAction(pluginConfig)\n }\n\n if (isDeleteAction && isBase) {\n return createDeleteAction(pluginConfig)\n }\n\n return Action\n })\n\n if (isBase) {\n actions.push(createDuplicateAction(pluginConfig))\n }\n }\n\n return actions\n}\n","import React, {forwardRef, Ref, useMemo} from 'react'\nimport {Autocomplete, Card, Stack, Text} from '@sanity/ui'\nimport {EarthGlobeIcon} from '@sanity/icons'\nimport {useSchema, DefaultPreview as Preview} from 'sanity'\nimport {Ti18nSchema} from '../../../types'\nimport {UiMessages} from '../../../constants'\n\ntype PreviewMedia = React.ComponentProps<typeof Preview>['media']\ntype Props = {\n value: string\n onChange: (value: string) => void\n onOpen: () => void\n}\n\nexport const MaintenanceTabTypeSelector = forwardRef(function MaintenanceTabTypeSelector(\n {value, onChange, onOpen}: Props,\n ref: Ref<HTMLInputElement>\n) {\n const schema = useSchema()\n const i18nSchemas = useMemo(\n () => schema._original?.types.filter((s: unknown) => !!(s as Ti18nSchema).i18n),\n [schema]\n )\n\n return (\n <Stack space={4}>\n <Text>{UiMessages.translationsMaintenance.selectSchemaPlaceholder}</Text>\n <Card>\n <Autocomplete\n ref={ref}\n fontSize={[2, 2, 3]}\n icon={EarthGlobeIcon}\n id=\"i18n-schema-selector\"\n options={i18nSchemas?.map((option) => ({\n value: option.name,\n payload: option,\n }))}\n value={value}\n placeholder=\"Search\"\n openButton={{onClick: () => onOpen}}\n onChange={onChange}\n renderValue={(v, option) => option?.payload.title || v}\n renderOption={({payload}) => (\n <Card padding={2} radius={2} as=\"button\">\n <Preview\n layout=\"default\"\n title={payload.title}\n media={payload.icon as PreviewMedia}\n />\n </Card>\n )}\n />\n </Card>\n </Stack>\n )\n})\n","import React from 'react'\nimport {Box, Button, Card, Flex, Text} from '@sanity/ui'\nimport {UiMessages} from '../../../constants/UiMessages'\n\ntype Props = React.PropsWithChildren<{\n pending?: boolean\n count: number\n labelName?: keyof typeof UiMessages['translationsMaintenance']\n onClick?: (event: React.SyntheticEvent<HTMLButtonElement, Event>) => void\n}>\n\nexport const MaintenanceTabResult: React.FC<Props> = ({\n pending,\n count,\n labelName,\n children,\n onClick,\n}) => {\n return (\n <Card padding={3} radius={2} shadow={1} tone={count > 0 ? `caution` : `default`}>\n <Flex align=\"center\">\n <Box flex={1}>\n <Text muted={count <= 0}>\n <span>{count}</span>\n <span>&nbsp;</span>\n <span>\n {labelName ? String(UiMessages.translationsMaintenance[labelName]) : children}\n </span>\n </Text>\n </Box>\n\n {count > 0 && (\n <Button\n padding={2}\n fontSize={2}\n disabled={pending}\n onClick={onClick}\n text={UiMessages.translationsMaintenance.fix}\n />\n )}\n </Flex>\n </Card>\n )\n}\n","import type {SanityClient, SanityDocument, Transaction} from '@sanity/client'\nimport type {Schema} from 'sanity'\nimport {Ti18nSchema} from '../../types'\nimport {ApplyConfigResult, getLanguageFromId} from '../../utils'\n\nexport const fixLanguageFields = (\n sanityClient: SanityClient,\n config: ApplyConfigResult,\n schemaRegistry: Schema,\n documents: SanityDocument[]\n): Transaction => {\n const langFieldName = config.fieldNames?.lang\n const transaction = sanityClient.transaction()\n\n documents.forEach((d) => {\n const schemaObject = schemaRegistry.get(d._type) as Ti18nSchema\n const base =\n (typeof schemaObject.i18n === 'object' ? schemaObject.i18n.base : undefined) || config.base\n if (!d[langFieldName]) {\n // @README keep the language from ID behavior\n // because in this case we expect the language field not to be available\n const language = getLanguageFromId(d._id) || base\n transaction.patch(d._id, {\n set: {\n [langFieldName]: language,\n },\n })\n }\n })\n\n return transaction\n}\n","import {I18nPrefix, I18nDelimiter} from '../constants'\n\nexport const getLanguageFromId = (id: string): string | undefined => {\n // subpath\n const rx = new RegExp(`${I18nPrefix}\\\\.[^.]+\\\\.([^.]+)`)\n const match = id.match(rx)\n if (match && match.length === 2) return match[1]\n\n // delimiter\n const split = id.split(I18nDelimiter)\n if (split.length > 1) return split[1]\n return undefined\n}\n","import chunk from 'lodash/chunk'\nimport compact from 'lodash/compact'\nimport {SanityClient, Transaction, SanityDocument} from '@sanity/client'\nimport type {Reference} from 'sanity'\nimport {ReferenceBehavior} from '../../constants'\nimport {\n ApplyConfigResult,\n createSanityReference,\n getBaseIdFromId,\n getLanguageFromDocument,\n} from '../../utils'\n\nexport const fixTranslationRefs = (\n sanityClient: SanityClient,\n config: ApplyConfigResult,\n baseDocuments: SanityDocument[],\n translatedDocuments: SanityDocument[]\n // eslint-disable-next-line max-params\n): Transaction[] => {\n const refsFieldName = config.fieldNames.references\n const transactions = chunk(baseDocuments, 50).map((documentsChunk) => {\n const transaction = sanityClient.transaction()\n documentsChunk.forEach((d) => {\n let translatedRefs: Reference[] = []\n const relevantTranslations = translatedDocuments.filter(\n (dx) => getBaseIdFromId(dx._id) === d._id\n )\n if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {\n translatedRefs = compact(\n relevantTranslations.map((doc) => {\n const lang = getLanguageFromDocument(doc, config)\n if (!lang) return null\n return {\n _key: lang,\n ...createSanityReference(\n doc._id,\n config.referenceBehavior === ReferenceBehavior.WEAK\n ),\n }\n }, {})\n )\n }\n transaction.patch(d._id, {\n set: {[refsFieldName]: translatedRefs},\n })\n })\n return transaction\n })\n return transactions\n}\n","import type {SanityClient, SanityDocument, Transaction} from '@sanity/client'\nimport type {Reference} from 'sanity'\nimport {ApplyConfigResult} from '../../utils'\n\nexport const fixOrphanedDocuments = (\n sanityClient: SanityClient,\n config: ApplyConfigResult,\n basedocuments: SanityDocument[],\n translatedDocuments: SanityDocument[]\n): Transaction => {\n const transaction = sanityClient.transaction()\n translatedDocuments.forEach((d) => {\n const base = basedocuments.find(\n (doc) =>\n (Array.isArray(d?.[config.fieldNames.references]) &&\n d?.[config.fieldNames.references]?.some((ref: Reference) => ref._ref === d._id)) ||\n doc._id === d?.[config.fieldNames.baseReference]?._ref\n )\n if (!base) transaction.delete(d._id)\n })\n return transaction\n}\n","import type {SanityDocument, SanityClient, Transaction} from '@sanity/client'\nimport {ApplyConfigResult, getBaseLanguage, getLanguagesFromOption} from '../../utils'\n\nexport const fixBaseLanguageMismatch = async (\n sanityClient: SanityClient,\n config: ApplyConfigResult,\n basedocuments: SanityDocument[]\n): Promise<Transaction> => {\n const languages = await getLanguagesFromOption(sanityClient, config, config.languages)\n const baseLanguage = getBaseLanguage(languages, config.base)\n const langFieldName = config.fieldNames.lang\n const transaction = sanityClient.transaction()\n basedocuments.forEach((doc) => {\n if (doc[langFieldName] !== baseLanguage?.id) {\n transaction.patch(doc._id, {\n set: {[langFieldName]: baseLanguage?.id}, // eslint-disable-line\n })\n }\n })\n return transaction\n}\n","import type {SanityDocument, SanityClient, Transaction} from '@sanity/client'\nimport {ReferenceBehavior} from '../../constants'\nimport {ApplyConfigResult, createSanityReference, getBaseIdFromId} from '../../utils'\n\nexport const fixBaseDocumentRefs = (\n sanityClient: SanityClient,\n config: ApplyConfigResult,\n translatedDocuments: SanityDocument[]\n): Transaction => {\n const transaction = sanityClient.transaction()\n\n if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {\n const baseRefFieldName = config.fieldNames.baseReference\n translatedDocuments.forEach((d) => {\n if (!d[baseRefFieldName]) {\n const baseId = getBaseIdFromId(d._id)\n transaction.patch(d._id, {\n set: {\n [baseRefFieldName]: createSanityReference(\n baseId,\n config.referenceBehavior === ReferenceBehavior.WEAK\n ),\n },\n })\n }\n })\n }\n\n return transaction\n}\n","import React, {forwardRef, Ref, useCallback, useState} from 'react'\nimport {useSchema} from 'sanity'\nimport {Box, Button, Card, Code, Container, Dialog, Flex, Grid, Stack, Text} from '@sanity/ui'\nimport {Transaction} from '@sanity/client'\nimport styled from 'styled-components'\nimport {UiMessages} from '../../../constants'\nimport {MaintenanceTabTypeSelector} from '../MaintenanceTabTypeSelector'\nimport {useDocumentsInformation} from '../../hooks'\nimport {MaintenanceTabResult} from '../MaintenanceTabResult'\nimport {\n fixBaseDocumentRefs,\n fixBaseLanguageMismatch,\n fixIdStructureMismatchDocuments,\n fixLanguageFields,\n fixOrphanedDocuments,\n fixTranslationRefs,\n} from '../../utils'\nimport {Ti18nConfig} from '../../../types'\nimport {useSanityClient} from '../../../utils'\nimport {useConfig} from '../../../hooks'\n\nconst StyledCodeCard = styled(Card)`\n grid-column-start: 1;\n grid-row-start: 1;\n`\n\nconst StyledCode = styled(Code)`\n word-break: break-word;\n white-space: break-spaces;\n`\n\nconst StyledDownloadCodeFlex = styled(Flex)`\n grid-column-start: 1;\n grid-row-start: 1;\n`\n\nexport interface MaintenanceTabContentProps {\n config: Ti18nConfig\n}\n\nexport const MaintenanceTabContent = forwardRef(function MaintenanceTabContent(\n {config: pluginConfig}: MaintenanceTabContentProps,\n ref: Ref<HTMLInputElement>\n) {\n const [selectedSchema, setSelectedSchema] = useState('')\n const client = useSanityClient()\n const {\n pending,\n setPending,\n documents,\n baseDocuments,\n translatedDocuments,\n documentsSummaryInformation,\n fetchInformation,\n } = useDocumentsInformation(pluginConfig, selectedSchema)\n const [pendingTransactions, setPendingTransactions] = useState<Transaction[] | null>(null)\n const schemaRegistry = useSchema()\n const config = useConfig(pluginConfig, selectedSchema)\n\n const onSchemaTypeChange = useCallback((schemaName: string) => setSelectedSchema(schemaName), [])\n\n const handleOpen = useCallback(() => setSelectedSchema(''), [])\n\n const handleFixIdStructureMismatchDocuments = useCallback(() => {\n setPendingTransactions(\n fixIdStructureMismatchDocuments(client, config, selectedSchema, documents)\n )\n }, [client, config, selectedSchema, documents])\n\n const handleFixMissingLanguageFields = useCallback(() => {\n setPendingTransactions([fixLanguageFields(client, config, schemaRegistry, documents)])\n }, [client, schemaRegistry, config, documents])\n\n const handleFixTranslationRefs = useCallback(() => {\n setPendingTransactions(fixTranslationRefs(client, config, baseDocuments, translatedDocuments))\n }, [client, config, baseDocuments, translatedDocuments])\n\n const handleFixBaseDocumntRefs = useCallback(() => {\n setPendingTransactions([fixBaseDocumentRefs(client, config, translatedDocuments)])\n }, [client, config, translatedDocuments])\n\n const handleFixOrphanDocuments = useCallback(() => {\n setPendingTransactions([\n fixOrphanedDocuments(client, config, baseDocuments, translatedDocuments),\n ])\n }, [client, config, baseDocuments, translatedDocuments])\n\n const handleFixReferenceBehaviorMismatch = useCallback(() => {\n setPendingTransactions(fixTranslationRefs(client, config, baseDocuments, translatedDocuments))\n }, [client, config, baseDocuments, translatedDocuments])\n\n const handleFixBaseLanguageMismatch = useCallback(async () => {\n setPendingTransactions([await fixBaseLanguageMismatch(client, config, baseDocuments)])\n }, [client, config, baseDocuments])\n\n const handleDownloadCode = useCallback(() => {\n if (pendingTransactions) {\n const json = JSON.stringify(\n pendingTransactions.map((transaction) => transaction.toJSON()),\n null,\n 2\n )\n const blob = new Blob([json], {\n type: 'application/json',\n })\n\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = 'transactions.json'\n a.style.display = 'none'\n document.body.appendChild(a)\n a.click()\n URL.revokeObjectURL(url)\n }\n }, [pendingTransactions])\n\n const handleCancelPendingTransaction = useCallback(() => {\n setPendingTransactions(null)\n }, [setPendingTransactions])\n\n const handleConfirmPendingTransaction = useCallback(async () => {\n setPending(true)\n try {\n // run all transactions\n if (pendingTransactions) {\n await pendingTransactions.reduce<Promise<void>>(async (prev, transaction) => {\n await prev\n await transaction.commit()\n }, Promise.resolve())\n await fetchInformation(selectedSchema)\n setPendingTransactions(null)\n }\n } catch (err) {\n console.error(err)\n // @TODO show error\n } finally {\n setPending(false)\n }\n }, [setPending, fetchInformation, selectedSchema, pendingTransactions])\n\n return (\n <Container width={1}>\n <Stack space={2}>\n <Box padding={4}>\n <MaintenanceTabTypeSelector\n value={selectedSchema}\n onChange={onSchemaTypeChange}\n onOpen={handleOpen}\n ref={ref}\n />\n </Box>\n {!!selectedSchema && (\n <Box paddingX={4}>\n <Stack space={2}>\n <MaintenanceTabResult\n pending={pending}\n count={documentsSummaryInformation.idStructureMismatch.length}\n labelName=\"idStructureMismatch\"\n onClick={handleFixIdStructureMismatchDocuments}\n />\n <MaintenanceTabResult\n pending={pending}\n count={documentsSummaryInformation.missingLanguageField.length}\n labelName=\"missingLanguageField\"\n onClick={handleFixMissingLanguageFields}\n />\n <MaintenanceTabResult\n pending={pending}\n count={documentsSummaryInformation.missingDocumentRefs.length}\n labelName=\"missingDocumentRefs\"\n onClick={handleFixTranslationRefs}\n />\n <MaintenanceTabResult\n pending={pending}\n count={documentsSummaryInformation.missingBaseDocumentRefs.length}\n labelName=\"missingBaseDocumentRefs\"\n onClick={handleFixBaseDocumntRefs}\n />\n <MaintenanceTabResult\n pending={pending}\n count={documentsSummaryInformation.orphanDocuments.length}\n labelName=\"orphanDocuments\"\n onClick={handleFixOrphanDocuments}\n />\n <MaintenanceTabResult\n pending={pending}\n count={documentsSummaryInformation.referenceBehaviorMismatch.length}\n labelName=\"referenceBehaviorMismatch\"\n onClick={handleFixReferenceBehaviorMismatch}\n />\n <MaintenanceTabResult\n pending={pending}\n count={documentsSummaryInformation.baseLanguageMismatch.length}\n labelName=\"baseLanguageMismatch\"\n onClick={handleFixBaseLanguageMismatch}\n />\n </Stack>\n </Box>\n )}\n </Stack>\n {!!pendingTransactions?.length && (\n <Dialog\n id=\"confirm-pending-transactions\"\n width={2}\n header={UiMessages.translationsMaintenance.pendingTransactionDialog.header}\n onClose={handleCancelPendingTransaction}\n footer={\n <Flex padding={3} justify=\"flex-end\">\n <Grid autoFlow=\"column\" autoCols=\"auto\" gap={2}>\n <Button\n tone=\"default\"\n loading={pending}\n disabled={pending}\n text={UiMessages.translationsMaintenance.pendingTransactionDialog.cancel}\n onClick={handleCancelPendingTransaction}\n />\n <Button\n tone=\"critical\"\n loading={pending}\n disabled={pending}\n text={UiMessages.translationsMaintenance.pendingTransactionDialog.confirm}\n onClick={handleConfirmPendingTransaction}\n />\n </Grid>\n </Flex>\n }\n >\n <Stack padding={3} space={3}>\n <Card padding={3} radius={2} shadow={1} tone=\"caution\">\n <Text size={2}>\n {UiMessages.translationsMaintenance.pendingTransactionDialog.caution}\n </Text>\n </Card>\n <Grid cols={1}>\n <StyledCodeCard padding={3} radius={2} shadow={1} tone=\"default\">\n <StyledCode language=\"json\">\n {JSON.stringify(\n pendingTransactions.map((transaction) => transaction.toJSON()),\n null,\n 2\n )}\n </StyledCode>\n </StyledCodeCard>\n <StyledDownloadCodeFlex\n padding={2}\n justify=\"flex-end\"\n align=\"flex-start\"\n onClick={handleDownloadCode}\n >\n <Button text=\"Download\" />\n </StyledDownloadCodeFlex>\n </Grid>\n </Stack>\n </Dialog>\n )}\n </Container>\n )\n})\n","import React from 'react'\nimport {useConfig} from '../../hooks'\nimport {I18nDelimiter, I18nPrefix, IdStructure, ReferenceBehavior} from '../../constants'\nimport {ILanguageObject, ITranslationRef, Ti18nConfig, Ti18nDocument} from '../../types'\nimport {\n getBaseIdFromId,\n getBaseLanguage,\n getLanguagesFromOption,\n useSanityClient,\n} from '../../utils'\n\nexport const useDocumentsInformation = (pluginConfig: Ti18nConfig, schema: string) => {\n const client = useSanityClient()\n const config = useConfig(pluginConfig, schema)\n const [pending, setPending] = React.useState(false)\n const [documents, setDocuments] = React.useState<Ti18nDocument[]>([])\n const [languages, setLanguages] = React.useState<ILanguageObject[]>([])\n const baseDocuments = React.useMemo(() => {\n if (config.idStructure === IdStructure.DELIMITER)\n return documents.filter((d) => !d._id.includes(I18nDelimiter))\n return documents.filter((d) => !d._id.startsWith(I18nPrefix))\n }, [config, documents])\n const translatedDocuments = React.useMemo(() => {\n if (config.idStructure === IdStructure.DELIMITER)\n return documents.filter((d) => d._id.includes(I18nDelimiter))\n return documents.filter((d) => d._id.startsWith(I18nPrefix))\n }, [config, documents])\n const idStructureMismatchDocuments = React.useMemo(() => {\n if (config.idStructure === IdStructure.DELIMITER)\n return documents.filter((d) => d._id.startsWith(I18nPrefix))\n return documents.filter((d) => d._id.includes(I18nDelimiter))\n }, [config, documents])\n\n const fetchInformation = React.useCallback(\n async (selectedSchema: string) => {\n setPending(true)\n const [langs, result] = await Promise.all([\n getLanguagesFromOption(client, config, config.languages),\n client.fetch<Ti18nDocument[]>(`*[_type == $type && !(_id in path('drafts.**'))]`, {\n type: selectedSchema,\n }),\n ])\n setLanguages(langs)\n setDocuments(result)\n setPending(false)\n },\n [config, client]\n )\n\n const documentsSummaryInformation = React.useMemo(() => {\n const base = getBaseLanguage(languages, config.base)\n const basedocuments = baseDocuments\n const translateddocuments = translatedDocuments\n const langFieldName = config.fieldNames?.lang\n const refsFieldName = config.fieldNames?.references\n const baseRefFieldName = config.fieldNames?.baseReference\n return {\n idStructureMismatch: idStructureMismatchDocuments,\n missingLanguageField: documents.filter((d) => !d[langFieldName]),\n missingDocumentRefs: basedocuments.filter((d) => {\n const docs = translateddocuments.filter((dx) => getBaseIdFromId(dx._id) === d._id)\n const refsCount = (Object.values(d[refsFieldName] || []) as any[]).filter(\n (ref) => ref._type === 'reference' && !!ref._ref\n ).length\n return refsCount != docs.length\n }),\n missingBaseDocumentRefs: translateddocuments.filter((d) => !d[baseRefFieldName]),\n orphanDocuments: translateddocuments.filter((d) => {\n const baseDoc = basedocuments.find((doc) => getBaseIdFromId(d._id) === doc._id)\n if (baseDoc) return false\n return true\n }),\n referenceBehaviorMismatch: basedocuments.filter((doc) => {\n const refs: ITranslationRef[] = doc[refsFieldName] || []\n if (config.referenceBehavior === ReferenceBehavior.DISABLED)\n return Object.keys(refs).length > 0\n if (config.referenceBehavior === ReferenceBehavior.WEAK)\n return Object.values(refs).some((r) => !r._weak)\n return Object.values(refs).some((r) => !!r._weak)\n }),\n baseLanguageMismatch: basedocuments.filter((doc) => {\n return base?.id && doc[langFieldName] !== base.id\n }),\n }\n }, [\n config,\n documents,\n languages,\n baseDocuments,\n translatedDocuments,\n idStructureMismatchDocuments,\n ])\n\n React.useEffect(() => {\n if (schema) {\n fetchInformation(schema)\n }\n }, [schema])\n\n return {\n pending,\n setPending,\n documents,\n baseDocuments,\n translatedDocuments,\n idStructureMismatchDocuments,\n documentsSummaryInformation,\n fetchInformation,\n }\n}\n","import type {SanityDocument, Transaction} from '@sanity/client'\nimport chunk from 'just-split'\nimport {SanityClient} from '@sanity/client'\nimport {ReferenceBehavior} from '../../constants'\nimport {\n ApplyConfigResult,\n buildDocId,\n createSanityReference,\n getBaseIdFromId,\n getLanguageFromDocument,\n} from '../../utils'\n\nexport const fixIdStructureMismatchDocuments = (\n sanityClient: SanityClient,\n config: ApplyConfigResult,\n schema: string,\n documents: SanityDocument[]\n): Transaction[] => {\n const refsFieldName = config.fieldNames.references\n\n // remove old refs\n const existingBaseDocumentIds = new Set(documents.map((d) => getBaseIdFromId(d._id)))\n const removeOldRefsTransaction = sanityClient.transaction()\n existingBaseDocumentIds.forEach((id) => {\n removeOldRefsTransaction.patch(id, {\n set: {[refsFieldName]: []},\n })\n })\n\n // create new document ids\n const newDocumentTransactions = chunk(\n documents.filter((d) => d._id !== getBaseIdFromId(d._id)),\n 100\n ).map((documentsChunk) => {\n const transaction = sanityClient.transaction()\n documentsChunk.forEach((d) => {\n const baseId = getBaseIdFromId(d._id)\n const lang = getLanguageFromDocument(d, config)\n if (lang) {\n const newId = buildDocId(config, baseId, lang)\n transaction.createIfNotExists({\n ...d,\n _id: newId,\n _type: schema,\n })\n transaction.delete(d._id)\n\n // patch base document with updated refs\n if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {\n transaction.patch(baseId, {setIfMissing: {[refsFieldName]: []}})\n transaction.patch(baseId, {\n insert: {\n after: `${refsFieldName}[-1]`,\n items: [\n {\n _key: lang,\n ...createSanityReference(\n newId,\n config.referenceBehavior === ReferenceBehavior.WEAK\n ),\n },\n ],\n },\n })\n }\n }\n })\n return transaction\n })\n\n return [removeOldRefsTransaction, ...newDocumentTransactions]\n}\n","import {EarthGlobeIcon} from '@sanity/icons'\nimport {Schema, SchemaType} from 'sanity'\nimport {DocumentListBuilder, ListItemBuilder, StructureBuilder} from 'sanity/desk'\nimport {applyConfig} from '../utils'\nimport {I18nDelimiter, I18nPrefix, IdStructure, UiMessages} from '../constants'\nimport {Ti18nConfig} from '../types'\nimport {createMaintenanceTabComponent} from './components/MaintenanceTab'\n\nexport interface StructureConfig {\n S: StructureBuilder\n config: Ti18nConfig\n schema: Schema & {\n i18n?: Ti18nConfig\n }\n}\n\nconst hasIcon = (schemaType?: SchemaType | string): boolean => {\n if (!schemaType || typeof schemaType === 'string') {\n return false\n }\n return Boolean(schemaType.icon)\n}\n\nexport const getDefaultDocumentNode = (S: StructureBuilder) => {\n return S.document()\n}\n\nexport const getDocumentTypes = (props: StructureConfig) => {\n const {S, schema} = props\n const listItemsWithouti18n: ListItemBuilder[] = []\n const listItemsWithi18n = S.documentTypeListItems().filter((l) => {\n let schemaType = l.getSchemaType()\n schemaType = typeof schemaType === 'string' ? schema.get(schemaType) : schemaType\n\n const hasi18n = schemaType && (schemaType as unknown as {i18n: boolean}).i18n\n if (!hasi18n) listItemsWithouti18n.push(l)\n return hasi18n\n })\n return {\n withoutI18n: listItemsWithouti18n,\n withI18n: listItemsWithi18n,\n }\n}\n\nexport const getMaintenanceTabComponent = (props: StructureConfig) => {\n const {S} = props\n const MaintenanceTab = createMaintenanceTabComponent(props)\n return S.component(MaintenanceTab)\n .title(UiMessages.translationsMaintenance.title)\n .id(`__i18n_translations_maintenance_tab`)\n}\n\nexport const getMaintenanceListItem = (props: StructureConfig) => {\n const {S} = props\n return S.listItem()\n .id(`__i18n_translations_maintenance_tab`)\n .title(UiMessages.translationsMaintenance.title)\n .icon(EarthGlobeIcon)\n .child(getMaintenanceTabComponent(props))\n}\n\nexport const getFilteredDocumentTypeListItems = (props: StructureConfig) => {\n const {S, config: pluginConfig, schema} = props\n const config = applyConfig(\n pluginConfig,\n typeof schema.i18n === 'object' ? schema.i18n : undefined\n )\n const types = getDocumentTypes(props)\n const filterFns = {\n [IdStructure.SUBPATH]: (list: ListItemBuilder, doc: DocumentListBuilder) =>\n doc.filter('!(_id in path($path)) && !(_id in path($drafts)) && _type == $type').params({\n path: `${I18nPrefix}.**`,\n drafts: `drafts.${I18nPrefix}.**`,\n type: list.getId(),\n }),\n [IdStructure.DELIMITER]: (list: ListItemBuilder, doc: DocumentListBuilder) =>\n doc.filter('!(_id match $id) && _type == $type').params({\n id: `*${I18nDelimiter}*`,\n type: list.getId(),\n }),\n }\n\n const items = [\n ...types.withoutI18n,\n ...types.withI18n.map((l) => {\n const schemaType = l.getSchemaType()\n const schemaTypeName = typeof schemaType === 'string' ? schemaType : schemaType?.name\n\n return l.child(\n filterFns[config.idStructure](\n l,\n S.documentList()\n .id(l.getId() || '')\n .title(l.getTitle() || '')\n .schemaType(schemaTypeName ?? '')\n .menuItems([...(schemaTypeName ? S.orderingMenuItemsForType(schemaTypeName) : [])])\n )\n )\n }),\n ]\n\n if (config.withTranslationsMaintenance) {\n items.splice(0, 0, getMaintenanceListItem(props))\n }\n\n return items.map((item) => item.serialize())\n}\n\nexport function getDocumentList(props: StructureConfig) {\n const {S} = props\n const types = getDocumentTypes(props)\n if (types.withI18n.length === 0) return S.defaults()\n\n const items = getFilteredDocumentTypeListItems(props)\n return S.list()\n .id('__root__')\n .title('Content')\n .items(items)\n .showIcons(items.some((item) => hasIcon(item.schemaType)))\n}\n","import React, {forwardRef, Ref, VoidFunctionComponent} from 'react'\nimport {Ti18nConfig} from '../../../types'\nimport {MaintenanceTabContent} from './MaintenanceTabContent'\n\nexport interface MaintenanceTabProps {\n config: Ti18nConfig\n}\n\nexport function createMaintenanceTabComponent(props: MaintenanceTabProps): VoidFunctionComponent {\n return forwardRef(function MaintenanceTab(p: any, ref: Ref<HTMLInputElement>) {\n return <MaintenanceTabContent {...props} ref={ref} />\n })\n}\n","import type {SlugIsUniqueValidator} from 'sanity'\nimport type {SanityClient} from '@sanity/client'\nimport {I18nDelimiter} from '../constants'\nimport {getBaseIdFromId, serializePath} from '../utils'\n\n/*\n * most of this is taken from the deafultUnique function in @sanity/validation\n */\nexport function createIsSlugUnique(client: SanityClient): SlugIsUniqueValidator {\n return (slug, context) => {\n const {document, path, type} = context\n const schemaOptions = type?.options as {disableArrayWarning?: boolean} | undefined\n\n if (!document) {\n throw new Error(`\\`document\\` was not provided in validation context.`)\n }\n if (!path) {\n throw new Error(`\\`path\\` was not provided in validation context.`)\n }\n\n const disableArrayWarning = schemaOptions?.disableArrayWarning || false\n const baseId = getBaseIdFromId(document._id)\n const docType = document._type\n const atPath = serializePath(path.concat('current'))\n\n if (!disableArrayWarning && atPath.includes('[]')) {\n const serializedPath = serializePath(path)\n console.warn(\n [\n `Slug field at path ${serializedPath} is within an array and cannot be automatically checked for uniqueness`,\n `If you need to check for uniqueness, provide your own \"isUnique\" method`,\n `To disable this message, set \\`disableArrayWarning: true\\` on the slug \\`options\\` field`,\n ].join('\\n')\n )\n }\n\n const constraints = [\n '_type == $docType',\n '!(_id in path(\"drafts.**\"))', // exclude drafts\n '_id != $baseId', // exclude own base document\n '!(_id in path(\"i18n.\" + $baseId + \".*\"))', // exclude any subpath translations\n `!(_id match $baseId + \"${I18nDelimiter}*\")`, // exclude any delimiter based translations\n `${atPath} == $slug`,\n ].join(' && ')\n\n return client.fetch<boolean>(\n `!defined(*[${constraints}][0]._id)`,\n {\n docType,\n baseId,\n slug,\n },\n {tag: 'validation.slug-is-unique'}\n )\n }\n}\n","import {getEmojiFlag} from '@cprecioso/country-flag-emoji'\nimport {SupportedEmojiFlagCodes} from '../constants'\n\n// Get flag from a valid country code\nexport const getFlag = (code = ``): string => {\n if (!code) {\n return ``\n }\n\n const flagCode = getFlagCode(code)\n\n if (!SupportedEmojiFlagCodes.includes(flagCode.toUpperCase())) {\n return ``\n }\n\n const emoji = getEmojiFlag(flagCode)\n\n return emoji\n}\n\n// Convert some language codes to country codes\nexport const getFlagCode = (code = ``): string => {\n if (!code) {\n return ``\n }\n\n switch (code.toLocaleLowerCase()) {\n // Return :flag-gb: for English\n case `en`:\n return `gb`\n // Return :flag-al: (Albania) for `sq` language code\n case `sq`:\n return `al`\n\n default:\n return code\n }\n}\n","import {createContext} from 'react'\nimport {Ti18nConfig} from '../../../types'\n\nexport const LanguageConfigContext = createContext<Ti18nConfig>({})\n","import React, {useContext, useMemo} from 'react'\nimport twemoji from 'twemoji'\nimport parse from 'html-react-parser'\nimport {Box} from '@sanity/ui'\nimport styled from 'styled-components'\nimport {getFlag} from '../../../utils/getFlag'\nimport {LanguageConfigContext} from '../LanguageSelect/LanguageConfigContext'\n\ntype Props = {\n code?: string\n langCulture?: string\n}\n\nconst EmojiBox = styled(Box)`\n min-width: 24px;\n transform: translateY(1px);\n`\n\nexport const SingleFlag: React.FunctionComponent<Props> = ({code, langCulture}) => {\n const flagEmoji = useMemo(() => code && getFlag(code), [code])\n const flagHtml = twemoji.parse(flagEmoji ?? `🇺🇳`, {folder: 'svg', ext: '.svg'})\n const flagReact = parse(flagHtml)\n\n const {customFlagComponents} = useContext(LanguageConfigContext)\n const CustomFlagComponent = useMemo(() => {\n if (langCulture && customFlagComponents) {\n const exportedName = langCulture.replace(/[^a-zA-Z0-9_]/g, '_')\n if (exportedName in customFlagComponents) {\n return customFlagComponents[exportedName]\n }\n }\n return null\n }, [langCulture, customFlagComponents])\n\n return (\n <Box aria-label={code}>\n {CustomFlagComponent && code ? (\n <CustomFlagComponent code={code} />\n ) : (\n <EmojiBox>{flagReact}</EmojiBox>\n )}\n </Box>\n )\n}\n","import {useEffect, useState, useRef} from 'react'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport isEqual from 'react-fast-compare'\nimport {useDocumentStore} from 'sanity'\n\ntype Params = Record<string, string | number | boolean | string[]>\n\ninterface ListenQueryOptions {\n tag?: string\n apiVersion?: string\n}\n\ntype ReturnShape = {\n loading: boolean\n error: boolean\n data: any\n}\n\ntype Observable = {\n unsubscribe: () => void\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2022-05-09`}\n\nexport function useListeningQuery(\n query: string,\n params: Params = DEFAULT_PARAMS,\n options: ListenQueryOptions = DEFAULT_OPTIONS\n): ReturnShape {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [data, setData] = useState(null)\n const subscription = useRef<null | Observable>(null)\n\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query) {\n subscription.current = documentStore\n .listenQuery(query, params, options)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents) => {\n setData((current) => (isEqual(current, documents) ? current : documents))\n setLoading(false)\n setError(false)\n })\n }\n\n return () => {\n return subscription.current ? subscription.current.unsubscribe() : undefined\n }\n }, [query, params, options])\n\n return {loading, error, data}\n}\n","import type {IExtendedLanguageObject} from '../types'\n\nexport const baseToTop = (a: IExtendedLanguageObject, b: IExtendedLanguageObject): number => {\n return Number(a.isBase ?? 0) - Number(b.isBase ?? 0)\n}\n","import React, {PropsWithChildren} from 'react'\nimport {Box, Text} from '@sanity/ui'\n\nexport function LanguageSelectLabel({children}: PropsWithChildren<Record<never, never>>) {\n return (\n <Box padding={2}>\n <Text muted size={1}>\n {children}\n </Text>\n </Box>\n )\n}\n","import React, {forwardRef} from 'react'\n\nexport const SplitPaneIcon = forwardRef(function UndoIcon(\n props: React.SVGProps<SVGSVGElement>,\n ref: React.Ref<SVGSVGElement>\n) {\n return (\n <svg\n data-sanity-icon=\"splitPane\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...props}\n >\n <path\n d=\"M10.5 5.5V19.5M13 12.5H15.5M18 12.5H15.5M15.5 12.5V15M15.5 12.5V10M4.5 5.5H20.5V19.5H4.5V5.5Z\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n />\n </svg>\n )\n})\n","import {createContext} from 'react'\nimport {ILanguageObject} from '../../../types'\n\ntype ContextValue = {\n currentDocumentId: string | null\n currentDocumentType: string | null\n baseLanguage: ILanguageObject | null\n currentLanguage: ILanguageObject | null\n}\n\nexport const LanguageSelectContext = createContext<ContextValue>({\n currentDocumentId: null,\n currentDocumentType: null,\n baseLanguage: null,\n currentLanguage: null,\n})\n","import React, {useContext} from 'react'\nimport omit from 'just-omit'\nimport {hues} from '@sanity/color'\nimport {Text, Button, Badge, Flex, useToast, MenuItem, Box} from '@sanity/ui'\nimport {AddIcon, SpinnerIcon} from '@sanity/icons'\nimport styled, {css, keyframes} from 'styled-components'\nimport {usePaneRouter} from 'sanity/desk'\nimport {useEditState} from 'sanity'\nimport {RouterContext} from 'sanity/router'\nimport {useConfig} from '../../../hooks'\nimport {SingleFlag} from '../SingleFlag'\nimport type {IExtendedLanguageObject} from '../../../types'\nimport {ReferenceBehavior, UiMessages} from '../../../constants'\nimport {buildDocId, getBaseIdFromId, useSanityClient} from '../../../utils'\nimport {SplitPaneIcon} from '../SplitPaneIcon'\nimport {LanguageSelectContext} from './LanguageSelectContext'\nimport {LanguageConfigContext} from './LanguageConfigContext'\n\ntype Props = {\n status: 'draft' | 'published' | 'missing'\n language: IExtendedLanguageObject\n}\n\nconst rotate = keyframes`\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n`\n\nconst ListItemSpinner = styled(SpinnerIcon)`\n animation: ${rotate} 500ms linear infinite;\n`\n\nconst ListItemSplitButton = styled(Button)`\n display: none;\n flex-shrink: 0;\n margin-left: 4px;\n\n & svg {\n display: block;\n color: ${hues.gray[700].hex};\n }\n\n ${({theme}) => css`\n @media (min-width: ${theme.sanity.media[1] / 16}em) {\n display: block;\n }\n `}\n`\n\nconst MenuItemButtonComponent: React.ForwardRefRenderFunction<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n> = (props, ref) => <button type=\"button\" ref={ref} {...props} />\nconst MenuItemButton = React.forwardRef(MenuItemButtonComponent)\n\nconst MenuItemSelectedButton = styled.button`\n color: ${({theme}) => theme.sanity.color.button.default.primary.enabled.fg};\n background-color: ${({theme}) => theme.sanity.color.button.default.primary.enabled.bg};\n\n span {\n color: ${({theme}) => theme.sanity.color.button.default.primary.enabled.fg};\n }\n`\n\nexport const LanguageSelectListItem: React.FC<Props> = ({status, language}) => {\n const toast = useToast()\n const pluginConfig = useContext(LanguageConfigContext)\n const client = useSanityClient()\n const {currentDocumentId, currentDocumentType, baseLanguage} =\n React.useContext(LanguageSelectContext)\n\n if (!currentDocumentId || !currentDocumentType) {\n throw new Error('No document in view')\n }\n\n const config = useConfig(pluginConfig, currentDocumentType)\n const routerContext = React.useContext(RouterContext)\n const {routerPanesState, groupIndex, replaceCurrent} = usePaneRouter()\n const [pending, setPending] = React.useState(false)\n\n const baseId = React.useMemo(() => getBaseIdFromId(currentDocumentId), [currentDocumentId])\n const flagCode = React.useMemo(() => language.id.split(/[_-]/).pop(), [language.id])\n\n const translatedId = React.useMemo(\n () => (language.id === baseLanguage?.id ? baseId : buildDocId(config, baseId, language.id)),\n [config, baseId, language.id, baseLanguage]\n )\n const baseDocumentEditState = useEditState(baseId, currentDocumentType)\n const baseTranslationBadgeLabel = React.useMemo(() => {\n if (language.isBase) {\n if (language.title.length >= 20) {\n return UiMessages.base.split(' ')[0]\n }\n return UiMessages.base\n }\n return null\n }, [language])\n\n const openDocumentInCurrentPane = React.useCallback(\n (id: string, type: string) => {\n replaceCurrent({\n id,\n params: {type},\n })\n },\n [replaceCurrent]\n )\n\n const openDocumentInSidePane = React.useCallback(\n (id: string, type: string) => {\n if (!routerContext) {\n return\n }\n const panes = [...routerPanesState]\n panes.splice(groupIndex + 1, 0, [\n {\n id: id,\n params: {type},\n },\n ])\n\n const href = routerContext.resolvePathFromState({panes})\n routerContext.navigateUrl({path: href})\n },\n [routerContext, routerPanesState, groupIndex]\n )\n\n const handleCreateClick = React.useCallback(async () => {\n try {\n setPending(true)\n const baseDocument = baseDocumentEditState.draft || baseDocumentEditState.published\n const langFieldName = config.fieldNames.lang\n const referencesFieldName = config.fieldNames.references\n const baseFieldName = config.fieldNames.baseReference\n const referenceBehavior = config.referenceBehavior\n await client.createIfNotExists({\n _id: `drafts.${translatedId}`,\n _type: currentDocumentType,\n\n // Remove other language references from new draft\n ...(baseDocument ? omit(baseDocument, [`_id`, `_type`, referencesFieldName]) : {}),\n\n // Set new language\n [langFieldName]: language.id,\n\n // Set base language reference\n ...(baseDocument?._id && referenceBehavior !== ReferenceBehavior.DISABLED\n ? {\n [baseFieldName]: {\n _type: 'reference',\n _ref: baseDocument._id.replace(`drafts.`, ``),\n _weak: true,\n _strengthenOnPublish: {\n type: currentDocumentType,\n weak: referenceBehavior === 'weak',\n template: {\n id: currentDocumentType,\n params: undefined,\n },\n },\n },\n }\n : {}),\n })\n toast.push({\n closable: true,\n status: 'success',\n title: UiMessages.translationCreatedToast.title(language.title),\n description: baseLanguage\n ? UiMessages.translationCreatedToast.description(baseLanguage.title)\n : undefined,\n })\n openDocumentInCurrentPane(translatedId, currentDocumentType)\n } catch (err) {\n toast.push({\n closable: true,\n status: 'error',\n title: (err as Error).toString(),\n })\n } finally {\n setPending(false)\n }\n }, [\n config,\n baseDocumentEditState,\n translatedId,\n currentDocumentType,\n language.id,\n language.title,\n toast,\n baseLanguage,\n openDocumentInCurrentPane,\n client,\n ])\n\n const handleOpenClick = React.useCallback(() => {\n openDocumentInCurrentPane(translatedId, currentDocumentType)\n }, [openDocumentInCurrentPane, translatedId, currentDocumentType])\n\n const handleOpenInSidePaneClick = React.useCallback(() => {\n openDocumentInSidePane(translatedId, currentDocumentType)\n }, [openDocumentInSidePane, translatedId, currentDocumentType])\n\n if (status === 'missing') {\n return (\n <MenuItem\n as={MenuItemButton}\n data-as=\"button\"\n disabled={pending}\n icon={pending ? ListItemSpinner : AddIcon}\n text={language.title}\n onClick={handleCreateClick}\n />\n )\n }\n\n return (\n <Flex>\n <MenuItem\n as={language.isCurrentLanguage ? MenuItemSelectedButton : MenuItemButton}\n data-as=\"button\"\n data-selected={language.isCurrentLanguage}\n selected={language.isCurrentLanguage}\n onClick={handleOpenClick}\n paddingY={1}\n paddingX={2}\n >\n <Flex align=\"center\" gap={2}>\n <SingleFlag code={flagCode} langCulture={language.id} />\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n {baseTranslationBadgeLabel ? (\n <Badge fontSize={0}>{baseTranslationBadgeLabel}</Badge>\n ) : null}\n </Flex>\n </MenuItem>\n {!language.isCurrentLanguage && (\n <ListItemSplitButton\n type=\"button\"\n tone=\"default\"\n mode=\"bleed\"\n padding={2}\n onClick={handleOpenInSidePaneClick}\n >\n <SplitPaneIcon width={19} height={19} />\n </ListItemSplitButton>\n )}\n </Flex>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport {Box, Grid} from '@sanity/ui'\nimport {IExtendedLanguageObject} from '../../../types'\nimport {UiMessages} from '../../../constants'\nimport {baseToTop} from '../../../utils/baseToTop'\nimport {LanguageSelectLabel} from './LanguageSelectLabel'\nimport {LanguageSelectListItem} from './LanguageSelectListItem'\n\ntype Props = {\n draftLanguageObjects: IExtendedLanguageObject[]\n publishedLanguageObjects: IExtendedLanguageObject[]\n missingLanguageObjects: IExtendedLanguageObject[]\n}\n\nconst Divider = styled(Box)`\n border-bottom: 1px solid var(--card-shadow-outline-color);\n`\n\nconst SelectorBox = styled(Box)`\n minwidth: 250;\n`\n\nexport const LanguageSelectList: React.FC<Props> = ({\n draftLanguageObjects,\n publishedLanguageObjects,\n missingLanguageObjects,\n}) => {\n const showDivider = React.useMemo(\n () =>\n Boolean(\n !!(draftLanguageObjects.length || publishedLanguageObjects.length) &&\n missingLanguageObjects.length\n ),\n [draftLanguageObjects, publishedLanguageObjects, missingLanguageObjects]\n )\n\n const existingLanguageObjects = React.useMemo(() => {\n return [\n ...draftLanguageObjects.map((lang) => ({\n ...lang,\n status: 'draft' as const,\n })),\n ...publishedLanguageObjects.map((lang) => ({\n ...lang,\n status: 'published' as const,\n })),\n ]\n .sort(baseToTop)\n .reverse()\n }, [draftLanguageObjects, publishedLanguageObjects])\n\n return (\n <SelectorBox>\n {!!existingLanguageObjects.length && (\n <Box>\n <LanguageSelectLabel>{UiMessages.languageSelect.listLabels.existing}</LanguageSelectLabel>\n <Grid columns={1} gap={1}>\n {existingLanguageObjects.map((language) => (\n <LanguageSelectListItem\n key={language.id}\n status={language.status}\n language={language}\n />\n ))}\n </Grid>\n </Box>\n )}\n\n {showDivider && <Divider marginY={1} />}\n\n {!!missingLanguageObjects.length && (\n <Box>\n <LanguageSelectLabel>{UiMessages.languageSelect.listLabels.missing}</LanguageSelectLabel>\n <Grid columns={1} gap={1}>\n {missingLanguageObjects.map((language) => (\n <LanguageSelectListItem key={language.id} status=\"missing\" language={language} />\n ))}\n </Grid>\n </Box>\n )}\n </SelectorBox>\n )\n}\n","import React, {useContext} from 'react'\nimport get from 'just-safe-get'\nimport {Box, Button, Flex, Menu, MenuButton, PopoverProps, Text} from '@sanity/ui'\nimport type {SchemaType, SanityDocument} from 'sanity'\nimport {ChevronDownIcon} from '@sanity/icons'\nimport {useConfig} from '../../../hooks'\nimport {SingleFlag} from '../SingleFlag'\nimport {buildDocId, getBaseIdFromId, getBaseLanguage, getLanguageFromDocument} from '../../../utils'\nimport {useLanguages} from '../../hooks'\nimport {UiMessages} from '../../../constants'\nimport {IExtendedLanguageObject} from '../../../types'\nimport {useListeningQuery} from '../../hooks/useListeningQuery'\nimport {LanguageSelectList} from './LanguageSelectList'\nimport {LanguageSelectContext} from './LanguageSelectContext'\nimport {LanguageConfigContext} from './LanguageConfigContext'\n\ntype Props = {\n schemaType: SchemaType\n document: SanityDocument\n}\n\nconst POPOVER_PROPS: PopoverProps = {\n constrainSize: true,\n placement: 'bottom',\n portal: true,\n}\n\nexport const LanguageSelect: React.FC<Props> = ({schemaType, document}) => {\n const pluginConfig = useContext(LanguageConfigContext)\n const config = useConfig(pluginConfig, schemaType.name)\n const [pending, languages] = useLanguages(config, document)\n\n const baseLanguage = React.useMemo(\n () => getBaseLanguage(languages, config.base),\n [languages, config.base]\n )\n\n const currentLanguageCode = React.useMemo(\n () => getLanguageFromDocument(document, config) || (baseLanguage ? baseLanguage.id : null),\n [document, baseLanguage, config]\n )\n const currentLanguageObject = React.useMemo(\n () => languages.find((lang) => lang.id === currentLanguageCode),\n [languages, currentLanguageCode]\n )\n const currentLanguageFlagCode = React.useMemo(\n () => currentLanguageCode?.split(/[-_]/).pop(),\n [currentLanguageCode]\n )\n\n // Find and listen to changes on all potential language versions of documents\n const query = `*[_type == $type && _id in $ids]{\n _id,\n \"${config.fieldNames.lang}\": ${config.fieldNames.lang}\n }`\n const queryParams = React.useMemo(() => {\n const baseId = getBaseIdFromId(document._id)\n const publishedIds = languages.map((lang) =>\n lang === baseLanguage ? baseId : buildDocId(config, baseId, lang.id)\n )\n const draftIds = publishedIds.map((id) => `drafts.${id}`)\n\n return {\n ids: [...publishedIds, ...draftIds],\n type: document._type,\n }\n }, [config, baseLanguage, languages, document._id, document._type])\n\n const {loading, data} = useListeningQuery(query, queryParams)\n\n // Create a list of objects with current status\n const languagesObjects = React.useMemo(() => {\n const draftLanguageObjects: IExtendedLanguageObject[] = []\n const publishedLanguageObjects: IExtendedLanguageObject[] = []\n const missingLanguageObjects: IExtendedLanguageObject[] = []\n\n if (!data?.length) {\n return {\n draftLanguageObjects,\n publishedLanguageObjects,\n missingLanguageObjects,\n }\n }\n\n // Prefer drafts if they exist\n const filteredDocuments: SanityDocument[] = data.reduce(\n (acc: SanityDocument[], cur: SanityDocument) => {\n if (!cur._id.startsWith(`drafts.`)) {\n const alsoHasDraft = data.some((doc: SanityDocument) => doc._id === `drafts.${cur._id}`)\n\n return alsoHasDraft ? acc : [...acc, cur]\n }\n\n return [...acc, cur]\n },\n []\n )\n\n const editStatePerLanguage = new Map()\n filteredDocuments.forEach((doc) => {\n const lang = get(doc ?? {}, config.fieldNames.lang) as string | undefined\n const isBase = doc && doc._id.replace(/^drafts\\./, '') === getBaseIdFromId(doc._id)\n if (lang) {\n editStatePerLanguage.set(lang, doc)\n } else if (isBase && baseLanguage?.id) {\n editStatePerLanguage.set(baseLanguage.id, doc)\n }\n })\n\n languages.forEach((lang, index) => {\n const extendedObject = {\n ...lang,\n isBase: baseLanguage ? lang.id === baseLanguage.id : index === 0,\n isCurrentLanguage: lang.id === currentLanguageCode,\n }\n const doc = editStatePerLanguage.get(lang.id)\n if (doc?._id && !doc._id.startsWith(`drafts.`)) {\n publishedLanguageObjects.push(extendedObject)\n } else if (doc?._id && doc._id.startsWith(`drafts.`)) {\n draftLanguageObjects.push(extendedObject)\n } else {\n missingLanguageObjects.push(extendedObject)\n }\n })\n\n return {\n draftLanguageObjects,\n publishedLanguageObjects,\n missingLanguageObjects,\n }\n }, [config, languages, baseLanguage, data, currentLanguageCode])\n\n if (\n !currentLanguageObject ||\n !currentLanguageCode ||\n pending ||\n loading ||\n languages.length === 0\n ) {\n return (\n <Button\n disabled\n mode=\"bleed\"\n padding={3}\n loading={pending || loading}\n iconRight={ChevronDownIcon}\n text={UiMessages.languageSelect.placeholder}\n />\n )\n }\n\n return (\n <LanguageSelectContext.Provider\n value={{\n baseLanguage,\n currentLanguage: currentLanguageObject,\n currentDocumentType: document._type,\n currentDocumentId: document._id,\n }}\n >\n <MenuButton\n id=\"document-internationalization/language-select\"\n popover={POPOVER_PROPS}\n button={\n <Button\n paddingY={1}\n paddingX={2}\n mode=\"bleed\"\n title={currentLanguageObject.title ?? currentLanguageObject.id}\n >\n <Flex align=\"center\" gap={2}>\n <SingleFlag code={currentLanguageFlagCode} langCulture={currentLanguageCode} />\n <Box flex={1}>\n <Text>{currentLanguageObject.title ?? currentLanguageObject.id}</Text>\n </Box>\n <ChevronDownIcon width={19} height={19} />\n </Flex>\n </Button>\n }\n menu={\n <Menu>\n <LanguageSelectList {...languagesObjects} />\n </Menu>\n }\n />\n </LanguageSelectContext.Provider>\n )\n}\n","import {SanityDocument} from '@sanity/client'\nimport {useCallback, useEffect, useState} from 'react'\nimport {useEditState} from 'sanity'\nimport {ILanguageObject} from '../../types'\nimport {getLanguagesFromOption, useSanityClient, ApplyConfigResult} from '../../utils'\n\nexport function useLanguages(\n config: ApplyConfigResult,\n document: SanityDocument\n): [boolean, ILanguageObject[]] {\n const client = useSanityClient()\n const {draft, published} = useEditState(document._id.replace(/^drafts\\./, ''), document._type)\n const [pending, setPending] = useState(false)\n const [languages, setLanguages] = useState<ILanguageObject[]>([])\n\n const loadOrReloadLanguages = useCallback(async () => {\n const shouldReload =\n languages.length === 0 || (config.shouldReload && config.shouldReload(draft ?? published))\n if (shouldReload) {\n setPending(true)\n const languageObjects = await getLanguagesFromOption(\n client,\n config,\n config.languages,\n draft ?? published\n )\n setLanguages(languageObjects)\n setPending(false)\n }\n }, [client, config, draft, published, languages])\n\n useEffect(() => {\n loadOrReloadLanguages()\n }, [draft, published, languages, config, loadOrReloadLanguages])\n\n return [pending, languages]\n}\n","import React from 'react'\nimport {InputProps, SanityDocument} from 'sanity'\nimport {Flex} from '@sanity/ui'\nimport {Ti18nConfig} from '../../../types'\nimport {LanguageSelect} from './LanguageSelect'\nimport {LanguageConfigContext} from './LanguageConfigContext'\n\nexport type LanguageSelectProps = InputProps & {\n config: Ti18nConfig\n}\n\nexport function LanguageSelectWrapped(props: LanguageSelectProps) {\n const {config, ...inputProps} = props\n const doc = props.value as SanityDocument\n return (\n <LanguageConfigContext.Provider value={config}>\n {doc._id && (\n <Flex flex={1} justify=\"flex-end\">\n <LanguageSelect schemaType={props.schemaType} document={doc} />\n </Flex>\n )}\n {props.renderDefault(inputProps)}\n </LanguageConfigContext.Provider>\n )\n}\n","import React from 'react'\nimport {definePlugin} from 'sanity'\nimport {resolveActions} from './actions'\nimport {createLanguageBadge} from './badges/LanguageBadge'\nimport {LanguageSelectWrapped} from './language-select/components'\nimport {Ti18nConfig, Ti18nSchema} from './types'\n\nexport const documentI18n = definePlugin<Ti18nConfig>((config) => {\n return {\n name: 'document-i18n',\n\n document: {\n actions: (prev, context) => resolveActions(prev, context, config),\n badges: (prev) => [...prev, createLanguageBadge(config)],\n },\n\n form: {\n components: {\n input(props) {\n const {value} = props\n if (\n (props.schemaType as Ti18nSchema).i18n &&\n typeof value === 'object' &&\n (value as Record<string, unknown>)?._id\n ) {\n return <LanguageSelectWrapped config={config} {...props} />\n }\n return props.renderDefault(props)\n },\n },\n },\n }\n})\n","import {DocumentBadgeComponent} from 'sanity'\nimport {useConfig} from '../hooks'\nimport {getLanguageFromDocument} from '../utils'\nimport {Ti18nConfig} from '../types'\n\nexport function createLanguageBadge(pluginConfig: Ti18nConfig): DocumentBadgeComponent {\n const LanguageBadge: DocumentBadgeComponent = (props) => {\n const config = useConfig(pluginConfig, props.type)\n const doc = props.draft || props.published\n const lang = doc ? getLanguageFromDocument(doc, config) : null\n if (lang) {\n return {\n label: lang,\n color: 'success',\n }\n }\n\n return null\n }\n\n return LanguageBadge\n}\n","import compact from 'lodash/compact'\nimport type {PluginOptions} from 'sanity'\nimport {deskTool} from 'sanity/desk'\nimport type {Ti18nConfig} from './types'\nimport {documentI18n} from './documentI18n'\nimport {getDocumentList} from './structure'\n\nexport function withDocumentI18nPlugin(\n plugins: PluginOptions[] | ((config: Ti18nConfig) => PluginOptions[]),\n config: Ti18nConfig & {\n includeDeskTool?: boolean\n }\n): PluginOptions[] {\n const i18nplugin = documentI18n(config)\n return compact([\n ...(Array.isArray(plugins) ? plugins : plugins(config)),\n config.includeDeskTool ?? true\n ? deskTool({\n structure: (S, {schema}) => getDocumentList({S, schema, config}),\n })\n : null,\n i18nplugin,\n ])\n}\n"],"names":["SupportedEmojiFlagCodes","LanguageCultures","value","title","I18nPrefix","I18nDelimiter","ReferenceBehavior","IdStructure","UiMessages","publishing","publish","updatingIntlFields","intlFieldsUpdated","baseDocumentCopied","translationCreatedToast","name","description","concat","loading","draft","missingTranslations","base","missing","deleteAll","buttonTitle","deleting","duplicateAll","duplicating","translationsMaintenance","selectSchemaPlaceholder","idStructureMismatch","missingLanguageField","missingDocumentRefs","missingBaseDocumentRefs","orphanDocuments","referenceBehaviorMismatch","baseLanguageMismatch","fix","pendingTransactionDialog","header","caution","cancel","confirm","errors","baseDocumentNotPublished","languageSelect","placeholder","listLabels","existing","buildDocId","pluginConfig","id","lang","idStructure","DELIMITER","getBaseLanguage","langs","find","l","length","useSanityClient","useClient","apiVersion","getLanguagesFromOption","async","client","config","document","languages","map","langCult","x","console","warn","normalizeLanguageList","Array","isArray","r","fetch","query","get","languagesLoader","getBaseIdFromId","nonDraftId","replace","rx","RegExp","match","split","getTranslationsFor","baseDocumentId","includeDrafts","segments","documents","filter","d","_id","startsWith","path","draftPath","createSanityReference","weak","_objectSpread","_type","_ref","_weak","getLanguageFromDocument","doc","fieldNames","serializePath","reduce","target","part","i","isIndex","isKey","isKeyedObject","add","separator","applyConfig","baseConfig","incomingConfig","_a","_b","_c","_d","_e","_f","referenceBehavior","STRONG","withTranslationsMaintenance","shouldReload","fallbackLanguageSelect","customFlagComponents","references","baseReference","useConfig","type","schemaRegistry","useSchema","schemaI18nConfig","useMemo","schemaType","i18n","createPublishAction","onComplete","toast","useToast","updatingIntlFieldsPromiseRef","React","useRef","publishState","setPublishState","useState","setUpdatingIntlFields","published","useEditState","baseDocumentEditState","useDocumentOperation","isValidating","validation","useValidationStatus","syncState","useSyncState","baseDocumentSyncState","disabled","timeout","delayedOn","delayedOff","flag","setFlag","useEffect","timeoutId","setTimeout","clearTimeout","useDelayedFlag","isSyncing","some","marker","level","label","doUpdateIntlFields","useCallback","baseDocument","isTranslation","fieldName","refsFieldName","baseRefFieldName","languageId","currentDocumentTransaction","transaction","createIfNotExists","patch","set","DISABLED","WEAK","commit","translatedDocuments","baseDocumentTransaction","translatedRefs","compact","_key","updateIntlFieldsForDocument","push","closable","status","err","error","toString","onHandle","Error","execute","didPublish","nextState","timer","current","then","finally","icon","CheckmarkIcon","PublishIcon","shortcut","DISABLED_REASON_TITLE","NOTHING_TO_DELETE","createDeleteAction","_ref2","delete","deleteOp","isDeleting","setIsDeleting","isConfirmDialogOpen","setConfirmDialogOpen","onDialogCancel","onDialogConfirm","baseTransaction","unset","translationsTransaction","forEach","tone","TrashIcon","Boolean","dialog","onClose","content","jsx","ConfirmDeleteDialog","action","onCancel","onConfirm","NOTHING_TO_DUPLICATE","createDuplicateAction","_ref3","duplicate","duplicateOp","isDuplicating","setDuplicating","onDuplicate","dupeId","uuid","translations","create","t","isDraft","newId","message","CopyIcon","resolveActions","prev","_ref4","schema","documentId","isI18n","isBase","actions","Action","isPublishAction","isDeleteAction","MaintenanceTabTypeSelector","forwardRef","ref","onChange","onOpen","_ref5","i18nSchemas","_original","types","s","jsxs","Stack","space","children","Text","Card","Autocomplete","fontSize","EarthGlobeIcon","options","option","payload","openButton","onClick","renderValue","v","renderOption","_ref6","padding","radius","as","Preview","layout","media","MaintenanceTabResult","_ref7","pending","count","labelName","shadow","Flex","align","Box","flex","muted","String","Button","text","fixLanguageFields","sanityClient","langFieldName","schemaObject","language","getLanguageFromId","fixTranslationRefs","baseDocuments","chunk","documentsChunk","relevantTranslations","dx","fixOrphanedDocuments","basedocuments","fixBaseLanguageMismatch","baseLanguage","fixBaseDocumentRefs","baseId","StyledCodeCard","styled","_templateObject","_taggedTemplateLiteral","StyledCode","Code","_templateObject2","StyledDownloadCodeFlex","_templateObject3","MaintenanceTabContent","selectedSchema","setSelectedSchema","setPending","documentsSummaryInformation","fetchInformation","setDocuments","setLanguages","includes","idStructureMismatchDocuments","result","Promise","all","translateddocuments","docs","Object","values","refs","keys","useDocumentsInformation","pendingTransactions","setPendingTransactions","onSchemaTypeChange","schemaName","handleOpen","handleFixIdStructureMismatchDocuments","existingBaseDocumentIds","Set","removeOldRefsTransaction","newDocumentTransactions","setIfMissing","insert","after","items","fixIdStructureMismatchDocuments","handleFixMissingLanguageFields","handleFixTranslationRefs","handleFixBaseDocumntRefs","handleFixOrphanDocuments","handleFixReferenceBehaviorMismatch","handleFixBaseLanguageMismatch","handleDownloadCode","json","JSON","stringify","toJSON","blob","Blob","url","URL","createObjectURL","a","createElement","href","download","style","display","body","appendChild","click","revokeObjectURL","handleCancelPendingTransaction","handleConfirmPendingTransaction","resolve","Container","width","paddingX","Dialog","footer","justify","Grid","autoFlow","autoCols","gap","size","cols","getDefaultDocumentNode","S","getDocumentTypes","props","listItemsWithouti18n","listItemsWithi18n","documentTypeListItems","getSchemaType","hasi18n","withoutI18n","withI18n","getMaintenanceTabComponent","MaintenanceTab","p","createMaintenanceTabComponent","component","getMaintenanceListItem","listItem","child","getFilteredDocumentTypeListItems","filterFns","SUBPATH","list","params","drafts","getId","schemaTypeName","documentList","getTitle","menuItems","orderingMenuItemsForType","splice","item","serialize","getDocumentList","defaults","showIcons","hasIcon","createIsSlugUnique","slug","context","schemaOptions","disableArrayWarning","docType","atPath","serializedPath","join","constraints","tag","getFlagCode","code","arguments","undefined","toLocaleLowerCase","LanguageConfigContext","createContext","EmojiBox","_templateObject4","SingleFlag","_ref9","langCulture","flagEmoji","flagCode","toUpperCase","getEmojiFlag","getFlag","flagHtml","twemoji","parse","folder","ext","flagReact","useContext","CustomFlagComponent","exportedName","DEFAULT_PARAMS","DEFAULT_OPTIONS","baseToTop","b","Number","LanguageSelectLabel","_ref10","SplitPaneIcon","height","viewBox","fill","xmlns","stroke","strokeWidth","LanguageSelectContext","currentDocumentId","currentDocumentType","currentLanguage","rotate","keyframes","_templateObject5","ListItemSpinner","SpinnerIcon","_templateObject6","ListItemSplitButton","_templateObject7","hues","gray","hex","_ref11","theme","css","sanity","MenuItemButton","MenuItemSelectedButton","button","_templateObject9","_ref12","color","default","primary","enabled","fg","_ref13","bg","_ref14","LanguageSelectListItem","_ref15","routerContext","RouterContext","routerPanesState","groupIndex","replaceCurrent","usePaneRouter","pop","translatedId","baseTranslationBadgeLabel","openDocumentInCurrentPane","openDocumentInSidePane","panes","resolvePathFromState","navigateUrl","handleCreateClick","referencesFieldName","baseFieldName","omit","_strengthenOnPublish","template","handleOpenClick","handleOpenInSidePaneClick","MenuItem","AddIcon","isCurrentLanguage","selected","paddingY","Badge","mode","Divider","_templateObject10","SelectorBox","_templateObject11","LanguageSelectList","_ref16","draftLanguageObjects","publishedLanguageObjects","missingLanguageObjects","showDivider","existingLanguageObjects","sort","reverse","columns","marginY","POPOVER_PROPS","constrainSize","placement","portal","LanguageSelect","_ref17","loadOrReloadLanguages","languageObjects","useLanguages","currentLanguageCode","currentLanguageObject","currentLanguageFlagCode","queryParams","publishedIds","draftIds","ids","data","setLoading","setError","setData","subscription","documentStore","useDocumentStore","listenQuery","pipe","distinctUntilChanged","isEqual","catchError","subscribe","unsubscribe","useListeningQuery","languagesObjects","filteredDocuments","acc","cur","editStatePerLanguage","Map","index","extendedObject","iconRight","ChevronDownIcon","Provider","MenuButton","popover","menu","Menu","LanguageSelectWrapped","inputProps","_excluded","renderDefault","documentI18n","definePlugin","badges","form","components","input","withDocumentI18nPlugin","plugins","i18nplugin","includeDeskTool","deskTool","structure","_ref18"],"mappings":"+nFAAO,MAAMA,GAA0B,CACrC,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MCzPWC,GAAmB,CAC9B,CACEC,MAAO,KACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,4BAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,QACPC,MAAO,iBAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,iBAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,QACPC,MAAO,yBAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,KACPC,MAAO,SAET,CACED,MAAO,aACPC,MAAO,gCAET,CACED,MAAO,aACPC,MAAO,6BAET,CACED,MAAO,KACPC,MAAO,cAET,CACED,MAAO,QACPC,MAAO,wBAET,CACED,MAAO,KACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,wBAET,CACED,MAAO,aACPC,MAAO,oCAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,KACPC,MAAO,SAET,CACED,MAAO,QACPC,MAAO,0BAET,CACED,MAAO,QACPC,MAAO,0BAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,wBAET,CACED,MAAO,QACPC,MAAO,0BAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,KACPC,MAAO,SAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,SACPC,MAAO,uBAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,4BAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,QACPC,MAAO,yBAET,CACED,MAAO,QACPC,MAAO,yCAET,CACED,MAAO,QACPC,MAAO,iCAET,CACED,MAAO,QACPC,MAAO,2BAET,CACED,MAAO,QACPC,MAAO,0BAET,CACED,MAAO,QACPC,MAAO,sBAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,sBAET,CACED,MAAO,QACPC,MAAO,wBAET,CACED,MAAO,QACPC,MAAO,gCAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,QACPC,MAAO,sBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,QACPC,MAAO,yBAET,CACED,MAAO,QACPC,MAAO,sBAET,CACED,MAAO,QACPC,MAAO,yBAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,KACPC,MAAO,YAET,CACED,MAAO,QACPC,MAAO,sBAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,2BAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,wBAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,QACPC,MAAO,mCAET,CACED,MAAO,KACPC,MAAO,YAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,KACPC,MAAO,YAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,KACPC,MAAO,SAET,CACED,MAAO,QACPC,MAAO,iBAET,CACED,MAAO,KACPC,MAAO,YAET,CACED,MAAO,QACPC,MAAO,qCAET,CACED,MAAO,QACPC,MAAO,sBAET,CACED,MAAO,KACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,KACPC,MAAO,YAET,CACED,MAAO,QACPC,MAAO,sBAET,CACED,MAAO,KACPC,MAAO,cAET,CACED,MAAO,QACPC,MAAO,0BAET,CACED,MAAO,KACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,yBAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,KACPC,MAAO,YAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,KACPC,MAAO,YAET,CACED,MAAO,QACPC,MAAO,sBAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,MACPC,MAAO,WAET,CACED,MAAO,SACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,KACPC,MAAO,cAET,CACED,MAAO,QACPC,MAAO,0BAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,KACPC,MAAO,cAET,CACED,MAAO,QACPC,MAAO,sDAET,CACED,MAAO,KACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,kCAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,KACPC,MAAO,SAET,CACED,MAAO,QACPC,MAAO,6BAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,8BAET,CACED,MAAO,KACPC,MAAO,SAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,QACPC,MAAO,+BAET,CACED,MAAO,KACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,iCAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,KACPC,MAAO,cAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,QACPC,MAAO,yBAET,CACED,MAAO,SACPC,MAAO,qBAET,CACED,MAAO,SACPC,MAAO,qBAET,CACED,MAAO,SACPC,MAAO,kBAET,CACED,MAAO,KACPC,MAAO,YAET,CACED,MAAO,QACPC,MAAO,sBAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,KACPC,MAAO,YAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,QACPC,MAAO,6BAET,CACED,MAAO,QACPC,MAAO,4BAET,CACED,MAAO,QACPC,MAAO,4BAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,KACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,wBAET,CACED,MAAO,SACPC,MAAO,4BAET,CACED,MAAO,SACPC,MAAO,4BAET,CACED,MAAO,SACPC,MAAO,wBAET,CACED,MAAO,SACPC,MAAO,wBAET,CACED,MAAO,SACPC,MAAO,0BAET,CACED,MAAO,SACPC,MAAO,0BAET,CACED,MAAO,KACPC,MAAO,YAET,CACED,MAAO,QACPC,MAAO,sBAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,aACPC,MAAO,+CAET,CACED,MAAO,aACPC,MAAO,8BAET,CACED,MAAO,aACPC,MAAO,4CAET,CACED,MAAO,aACPC,MAAO,2BAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,KACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,qBAET,CACED,MAAO,MACPC,MAAO,UAET,CACED,MAAO,SACPC,MAAO,kBAET,CACED,MAAO,KACPC,MAAO,SAET,CACED,MAAO,QACPC,MAAO,iBAET,CACED,MAAO,KACPC,MAAO,UAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,KACPC,MAAO,QAET,CACED,MAAO,QACPC,MAAO,mBAET,CACED,MAAO,QACPC,MAAO,yBAET,CACED,MAAO,KACPC,MAAO,WAET,CACED,MAAO,QACPC,MAAO,oBAET,CACED,MAAO,KACPC,MAAO,SAET,CACED,MAAO,QACPC,MAAO,kBAET,CACED,MAAO,KACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,uBAET,CACED,MAAO,KACPC,MAAO,QAET,CACED,MAAO,QACPC,MAAO,uCAET,CACED,MAAO,KACPC,MAAO,SAET,CACED,MAAO,aACPC,MAAO,gCAET,CACED,MAAO,aACPC,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"}
package/lib/index.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";const e=["config"];var t,a,n,i,l,r,s,u,o,c,d;function h(e,t){if(null==e)return{};var a,n,i=function(e,t){if(null==e)return{};var a,n,i={},l=Object.keys(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}function f(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function g(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function m(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?g(Object(a),!0).forEach((function(t){p(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):g(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function p(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Object.defineProperty(exports,"__esModule",{value:!0});var v=require("sanity"),b=require("just-safe-get"),S=require("lodash/compact"),y=require("react"),x=require("@sanity/ui"),C=require("@sanity/icons"),_=require("react/jsx-runtime"),j=require("sanity/desk"),I=require("@sanity/uuid"),M=require("styled-components"),w=require("just-split"),E=require("lodash/chunk"),T=require("twemoji"),A=require("html-react-parser"),k=require("@cprecioso/country-flag-emoji"),B=require("rxjs/operators"),L=require("react-fast-compare"),D=require("just-omit"),N=require("@sanity/color"),R=require("sanity/router");function O(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function P(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(a){if("default"!==a){var n=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,n.get?n:{enumerable:!0,get:function(){return e[a]}})}})),t.default=e,Object.freeze(t)}var G=O(b),F=O(S),K=P(y),z=O(y),U=O(M),H=O(w),q=O(E),W=O(T),Z=O(A),V=O(L),Y=O(D);const J=["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"],$=[{value:"af",title:"Afrikaans"},{value:"af-ZA",title:"Afrikaans (South Africa)"},{value:"ar",title:"Arabic"},{value:"ar-AE",title:"Arabic (U.A.E.)"},{value:"ar-BH",title:"Arabic (Bahrain)"},{value:"ar-DZ",title:"Arabic (Algeria)"},{value:"ar-EG",title:"Arabic (Egypt)"},{value:"ar-IQ",title:"Arabic (Iraq)"},{value:"ar-JO",title:"Arabic (Jordan)"},{value:"ar-KW",title:"Arabic (Kuwait)"},{value:"ar-LB",title:"Arabic (Lebanon)"},{value:"ar-LY",title:"Arabic (Libya)"},{value:"ar-MA",title:"Arabic (Morocco)"},{value:"ar-OM",title:"Arabic (Oman)"},{value:"ar-QA",title:"Arabic (Qatar)"},{value:"ar-SA",title:"Arabic (Saudi Arabia)"},{value:"ar-SY",title:"Arabic (Syria)"},{value:"ar-TN",title:"Arabic (Tunisia)"},{value:"ar-YE",title:"Arabic (Yemen)"},{value:"az",title:"Azeri"},{value:"az-Cyrl-AZ",title:"Azeri (Cyrillic, Azerbaijan)"},{value:"az-Latn-AZ",title:"Azeri (Latin, Azerbaijan)"},{value:"be",title:"Belarusian"},{value:"be-BY",title:"Belarusian (Belarus)"},{value:"bg",title:"Bulgarian"},{value:"bg-BG",title:"Bulgarian (Bulgaria)"},{value:"bs-Latn-BA",title:"Bosnian (Bosnia and Herzegovina)"},{value:"ca",title:"Catalan"},{value:"ca-ES",title:"Catalan (Catalan)"},{value:"cs",title:"Czech"},{value:"cs-CZ",title:"Czech (Czech Republic)"},{value:"cy-GB",title:"Welsh (United Kingdom)"},{value:"da",title:"Danish"},{value:"da-DK",title:"Danish (Denmark)"},{value:"de",title:"German"},{value:"de-AT",title:"German (Austria)"},{value:"de-DE",title:"German (Germany)"},{value:"de-CH",title:"German (Switzerland)"},{value:"de-LI",title:"German (Liechtenstein)"},{value:"de-LU",title:"German (Luxembourg)"},{value:"dv",title:"Divehi"},{value:"dv-MV",title:"Divehi (Maldives)"},{value:"el",title:"Greek"},{value:"el-GR",title:"Greek (Greece)"},{value:"en",title:"English"},{value:"en-029",title:"English (Caribbean)"},{value:"en-AU",title:"English (Australia)"},{value:"en-BZ",title:"English (Belize)"},{value:"en-CA",title:"English (Canada)"},{value:"en-GB",title:"English (United Kingdom)"},{value:"en-IE",title:"English (Ireland)"},{value:"en-JM",title:"English (Jamaica)"},{value:"en-NZ",title:"English (New Zealand)"},{value:"en-PH",title:"English (Republic of the Philippines)"},{value:"en-TT",title:"English (Trinidad and Tobago)"},{value:"en-US",title:"English (United States)"},{value:"en-ZA",title:"English (South Africa)"},{value:"en-ZW",title:"English (Zimbabwe)"},{value:"es",title:"Spanish"},{value:"es-AR",title:"Spanish (Argentina)"},{value:"es-BO",title:"Spanish (Bolivia)"},{value:"es-CL",title:"Spanish (Chile)"},{value:"es-CO",title:"Spanish (Colombia)"},{value:"es-CR",title:"Spanish (Costa Rica)"},{value:"es-DO",title:"Spanish (Dominican Republic)"},{value:"es-EC",title:"Spanish (Ecuador)"},{value:"es-ES",title:"Spanish (Spain)"},{value:"es-GT",title:"Spanish (Guatemala)"},{value:"es-HN",title:"Spanish (Honduras)"},{value:"es-MX",title:"Spanish (Mexico)"},{value:"es-NI",title:"Spanish (Nicaragua)"},{value:"es-PA",title:"Spanish (Panama)"},{value:"es-PE",title:"Spanish (Peru)"},{value:"es-PR",title:"Spanish (Puerto Rico)"},{value:"es-PY",title:"Spanish (Paraguay)"},{value:"es-SV",title:"Spanish (El Salvador)"},{value:"es-UY",title:"Spanish (Uruguay)"},{value:"es-VE",title:"Spanish (Venezuela)"},{value:"et",title:"Estonian"},{value:"et-EE",title:"Estonian (Estonia)"},{value:"eu",title:"Basque"},{value:"eu-ES",title:"Basque (Basque)"},{value:"fa",title:"Persian"},{value:"fa-IR",title:"Persian (Iran)"},{value:"fi",title:"Finnish"},{value:"fi-FI",title:"Finnish (Finland)"},{value:"fo",title:"Faroese"},{value:"fo-FO",title:"Faroese (Faroe Islands)"},{value:"fr",title:"French"},{value:"fr-BE",title:"French (Belgium)"},{value:"fr-CA",title:"French (Canada)"},{value:"fr-FR",title:"French (France)"},{value:"fr-CH",title:"French (Switzerland)"},{value:"fr-LU",title:"French (Luxembourg)"},{value:"fr-MC",title:"French (Principality of Monaco)"},{value:"gl",title:"Galician"},{value:"gl-ES",title:"Galician (Galician)"},{value:"gu",title:"Gujarati"},{value:"gu-IN",title:"Gujarati (India)"},{value:"he",title:"Hebrew"},{value:"he-IL",title:"Hebrew (Israel)"},{value:"hi",title:"Hindi"},{value:"hi-IN",title:"Hindi (India)"},{value:"hr",title:"Croatian"},{value:"hr-BA",title:"Croatian (Bosnia and Herzegovina)"},{value:"hr-HR",title:"Croatian (Croatia)"},{value:"hu",title:"Hungarian"},{value:"hu-HU",title:"Hungarian (Hungary)"},{value:"hy",title:"Armenian"},{value:"hy-AM",title:"Armenian (Armenia)"},{value:"id",title:"Indonesian"},{value:"id-ID",title:"Indonesian (Indonesia)"},{value:"is",title:"Icelandic"},{value:"is-IS",title:"Icelandic (Iceland)"},{value:"it",title:"Italian"},{value:"it-CH",title:"Italian (Switzerland)"},{value:"it-IT",title:"Italian (Italy)"},{value:"ja",title:"Japanese"},{value:"ja-JP",title:"Japanese (Japan)"},{value:"ka",title:"Georgian"},{value:"ka-GE",title:"Georgian (Georgia)"},{value:"kk",title:"Kazakh"},{value:"kk-KZ",title:"Kazakh (Kazakhstan)"},{value:"kn",title:"Kannada"},{value:"kn-IN",title:"Kannada (India)"},{value:"ko",title:"Korean"},{value:"kok",title:"Konkani"},{value:"kok-IN",title:"Konkani (India)"},{value:"ko-KR",title:"Korean (Korea)"},{value:"ky",title:"Kyrgyz"},{value:"ky-KG",title:"Kyrgyz (Kyrgyzstan)"},{value:"lt",title:"Lithuanian"},{value:"lt-LT",title:"Lithuanian (Lithuania)"},{value:"lv",title:"Latvian"},{value:"lv-LV",title:"Latvian (Latvia)"},{value:"mi-NZ",title:"Maori (New Zealand)"},{value:"mk",title:"Macedonian"},{value:"mk-MK",title:"Macedonian (Former Yugoslav Republic of Macedonia)"},{value:"mn",title:"Mongolian"},{value:"mn-MN",title:"Mongolian (Cyrillic, Mongolia)"},{value:"mr",title:"Marathi"},{value:"mr-IN",title:"Marathi (India)"},{value:"ms",title:"Malay"},{value:"ms-BN",title:"Malay (Brunei Darussalam)"},{value:"ms-MY",title:"Malay (Malaysia)"},{value:"mt-MT",title:"Maltese (Malta)"},{value:"nb-NO",title:"Norwegian, Bokmal (Norway)"},{value:"nl",title:"Dutch"},{value:"nl-BE",title:"Dutch (Belgium)"},{value:"nl-NL",title:"Dutch (Netherlands)"},{value:"nn-NO",title:"Norwegian, Nynorsk (Norway)"},{value:"no",title:"Norwegian"},{value:"ns-ZA",title:"Northern Sotho (South Africa)"},{value:"pa",title:"Punjabi"},{value:"pa-IN",title:"Punjabi (India)"},{value:"pl",title:"Polish"},{value:"pl-PL",title:"Polish (Poland)"},{value:"pt",title:"Portuguese"},{value:"pt-BR",title:"Portuguese (Brazil)"},{value:"pt-PT",title:"Portuguese (Portugal)"},{value:"quz-BO",title:"Quechua (Bolivia)"},{value:"quz-EC",title:"Quechua (Ecuador)"},{value:"quz-PE",title:"Quechua (Peru)"},{value:"ro",title:"Romanian"},{value:"ro-RO",title:"Romanian (Romania)"},{value:"ru",title:"Russian"},{value:"ru-RU",title:"Russian (Russia)"},{value:"sa",title:"Sanskrit"},{value:"sa-IN",title:"Sanskrit (India)"},{value:"se-FI",title:"Sami (Northern) (Finland)"},{value:"se-NO",title:"Sami (Northern) (Norway)"},{value:"se-SE",title:"Sami (Northern) (Sweden)"},{value:"sk",title:"Slovak"},{value:"sk-SK",title:"Slovak (Slovakia)"},{value:"sl",title:"Slovenian"},{value:"sl-SI",title:"Slovenian (Slovenia)"},{value:"sma-NO",title:"Sami (Southern) (Norway)"},{value:"sma-SE",title:"Sami (Southern) (Sweden)"},{value:"smj-NO",title:"Sami (Lule) (Norway)"},{value:"smj-SE",title:"Sami (Lule) (Sweden)"},{value:"smn-FI",title:"Sami (Inari) (Finland)"},{value:"sms-FI",title:"Sami (Skolt) (Finland)"},{value:"sq",title:"Albanian"},{value:"sq-AL",title:"Albanian (Albania)"},{value:"sr",title:"Serbian"},{value:"sr-Cyrl-BA",title:"Serbian (Cyrillic) (Bosnia and Herzegovina)"},{value:"sr-Cyrl-CS",title:"Serbian (Cyrillic, Serbia)"},{value:"sr-Latn-BA",title:"Serbian (Latin) (Bosnia and Herzegovina)"},{value:"sr-Latn-CS",title:"Serbian (Latin, Serbia)"},{value:"sv",title:"Swedish"},{value:"sv-FI",title:"Swedish (Finland)"},{value:"sv-SE",title:"Swedish (Sweden)"},{value:"sw",title:"Kiswahili"},{value:"sw-KE",title:"Kiswahili (Kenya)"},{value:"syr",title:"Syriac"},{value:"syr-SY",title:"Syriac (Syria)"},{value:"ta",title:"Tamil"},{value:"ta-IN",title:"Tamil (India)"},{value:"te",title:"Telugu"},{value:"te-IN",title:"Telugu (India)"},{value:"th",title:"Thai"},{value:"th-TH",title:"Thai (Thailand)"},{value:"tn-ZA",title:"Tswana (South Africa)"},{value:"tr",title:"Turkish"},{value:"tr-TR",title:"Turkish (Turkey)"},{value:"tt",title:"Tatar"},{value:"tt-RU",title:"Tatar (Russia)"},{value:"uk",title:"Ukrainian"},{value:"uk-UA",title:"Ukrainian (Ukraine)"},{value:"ur",title:"Urdu"},{value:"ur-PK",title:"Urdu (Islamic Republic of Pakistan)"},{value:"uz",title:"Uzbek"},{value:"uz-Cyrl-UZ",title:"Uzbek (Cyrillic, Uzbekistan)"},{value:"uz-Latn-UZ",title:"Uzbek (Latin, Uzbekistan)"},{value:"vi",title:"Vietnamese"},{value:"vi-VN",title:"Vietnamese (Vietnam)"},{value:"xh-ZA",title:"Xhosa (South Africa)"},{value:"zh-CN",title:"Chinese (People's Republic of China)"},{value:"zh-HK",title:"Chinese (Hong Kong S.A.R.)"},{value:"zh-CHS",title:"Chinese (Simplified)"},{value:"zh-CHT",title:"Chinese (Traditional)"},{value:"zh-MO",title:"Chinese (Macao S.A.R.)"},{value:"zh-SG",title:"Chinese (Singapore)"},{value:"zh-TW",title:"Chinese (Taiwan)"},{value:"zu-ZA",title:"Zulu (South Africa)"}];var Q=(e=>(e.STRONG="strong",e.WEAK="weak",e.DISABLED="disabled",e))(Q||{}),X=(e=>(e.SUBPATH="subpath",e.DELIMITER="delimiter",e))(X||{});const ee={publishing:"Publishing...",publish:"Publish",updatingIntlFields:"Updating i18n fields",intlFieldsUpdated:"i18n fields updated",baseDocumentCopied:"Base document copied",translationCreatedToast:{title:e=>"Translation created: ".concat(e),description:e=>"The content from ‘".concat(e,"’ is copied into the new document translation.")},loading:"Loading languages...",draft:"Draft",missingTranslations:"Following languages are missing some translations compared to the base language",base:"Base",missing:"Missing",deleteAll:{buttonTitle:"Delete (incl. translations)",deleting:"Deleting..."},duplicateAll:{buttonTitle:"Duplicate (incl. translations)",duplicating:"Duplicating..."},translationsMaintenance:{title:"Translation Maintenance",selectSchemaPlaceholder:"Select schema type",idStructureMismatch:"document(s) with mismatched ID structures",missingLanguageField:"document(s) are missing the language field",missingDocumentRefs:"document(s) have missing translation references",missingBaseDocumentRefs:"document(s) have missing base document references",orphanDocuments:"orphaned translation document(s)",referenceBehaviorMismatch:"document(s) with mismatched reference behaviors",baseLanguageMismatch:"base document(s) with mismatched language field",fix:"Fix",pendingTransactionDialog:{header:"Confirm pending transaction",caution:"Before continuing please review the transactions. Keep in mind, the translation maintenance functionality may remove or update many documents at once. It is recommended to back-up your dataset before performing data maintenance",cancel:"Cancel",confirm:"Confirm operation"}},errors:{baseDocumentNotPublished:"It looks like you have not published your base translation yet. When using strong references it is required to publish the base document before publishing any translated entries"},languageSelect:{placeholder:"Switch language",listLabels:{existing:"Select document translations",missing:"Create new document translations"}}},te=(e,t,a)=>e.idStructure===X.DELIMITER?"".concat(t).concat("__i18n_").concat(a||"*"):"".concat("i18n",".").concat(t,".").concat(a||"*"),ae=(e,t)=>t?e.find((e=>e.id===t))||null:e.length>0?e[0]:null;function ne(){return v.useClient({apiVersion:"2021-10-01"})}const ie=async(e,t,a,n)=>{const i=(e=>e.map((e=>{if("string"==typeof e){const t=$.find((t=>t.value===e));return t?{title:t.title,id:e}:{title:e,id:e}}return"name"in e?(console.warn('The "name" field in your language configuration is deprecated, please replace it with "id".'),{title:e.title,id:e.name}):{title:e.title,id:e.id}})))(await(async()=>{if(Array.isArray(a))return a;const t=await e.fetch(a.query),n=a.value;return"string"==typeof n?t.map((e=>G.default(e,n))):t.map((e=>"name"in n?{name:G.default(e,n.name),title:G.default(e,n.title)}:{id:G.default(e,n.id),title:G.default(e,n.title)}))})());return t.languagesLoader?t.languagesLoader(i,null!=n?n:void 0):i},le=e=>{if(!e)return;const t=e.replace(/^drafts\./,""),a=new RegExp("".concat("i18n","\\.([^.]+)\\.[^.]+")),n=t.match(a);if(n&&2===n.length)return n[1];const i=t.split("__i18n_");return i.length>0?i[0]:t},re=async function(e,t,a){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(t.idStructure===X.DELIMITER){const t=a.split("-");t[t.length-1]="".concat(t[t.length-1]).concat("__i18n_","*");const i=await e.fetch(n?"*[_id match $segments]":"*[_id match $segments && !(_id in path('drafts.**'))]",{segments:t});return i?i.filter((e=>e._id.startsWith(a)||n&&e._id.startsWith("drafts.".concat(a)))):[]}const i=await e.fetch(n?"*[_id in path($path) || _id in path($draftPath)]":"*[_id in path($path)]",{path:te(t,a,"*"),draftPath:"drafts.".concat(te(t,a,"*"))});return null!=i?i:[]};function se(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return m({_type:"reference",_ref:e.replace("drafts.","")},!0===t?{_weak:!0}:{})}function ue(e,t){return(null==e?void 0:e[t.fieldNames.lang])||t.base||null}function oe(e){return e.reduce(((e,t,a)=>{const n="number"==typeof t,i=v.isKeyedObject(t),l=n||i?"[]":"".concat(0===a?"":".").concat(t);return"".concat(e).concat(l)}),"")}function ce(e,t){var a,n,i,l,r,s;return{base:(null==t?void 0:t.base)||(null==e?void 0:e.base)||"",languages:(null==t?void 0:t.languages)||(null==e?void 0:e.languages)||[],idStructure:(null==e?void 0:e.idStructure)||X.DELIMITER,referenceBehavior:(null==e?void 0:e.referenceBehavior)||Q.STRONG,withTranslationsMaintenance:!0===(null==e?void 0:e.withTranslationsMaintenance),shouldReload:null==e?void 0:e.shouldReload,languagesLoader:null==e?void 0:e.languagesLoader,fallbackLanguageSelect:null==e?void 0:e.fallbackLanguageSelect,customFlagComponents:null==e?void 0:e.customFlagComponents,fieldNames:{lang:(null==(a=null==t?void 0:t.fieldNames)?void 0:a.lang)||(null==(n=null==e?void 0:e.fieldNames)?void 0:n.lang)||"__i18n_lang",references:(null==(i=null==t?void 0:t.fieldNames)?void 0:i.references)||(null==(l=null==e?void 0:e.fieldNames)?void 0:l.references)||"__i18n_refs",baseReference:(null==(r=null==t?void 0:t.fieldNames)?void 0:r.baseReference)||(null==(s=null==e?void 0:e.fieldNames)?void 0:s.baseReference)||"__i18n_base"}}}function de(e,t){const a=v.useSchema(),n=y.useMemo((()=>{if(t){const e=a.get(t);if(e&&"boolean"!=typeof e.i18n)return null==e?void 0:e.i18n}return null}),[t,a]);return y.useMemo((()=>ce(e,n)),[n,e])}function he(e){return t=>{let{type:a,id:n,onComplete:i}=t;const l=x.useToast(),r=ne(),s=de(e,a),u=le(n),o=K.useRef(null),[c,d]=K.useState(null),[h,f]=K.useState(!1),{draft:g,published:p}=v.useEditState(n,a),b=v.useEditState(u,a),{publish:S}=v.useDocumentOperation(n,a),{isValidating:_,validation:j}=v.useValidationStatus(n,a),I=v.useSyncState(n,a),M=v.useSyncState(u,a),w=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const[i,l]=y.useState(e);return y.useEffect((()=>{if(i!==e)if(e){if(a){const e=setTimeout((()=>l(!0)),t);return()=>clearTimeout(e)}l(!0)}else if(!e){if(n){const e=setTimeout((()=>l(!1)),t);return()=>clearTimeout(e)}l(!1)}}),[i,e,t,a,n]),i}(!!("published"===c||"publishing"===c||h||S.disabled||I.isSyncing||M.isSyncing||_||j.some((e=>"error"===e.level)))),E=K.useMemo((()=>"publishing"===c?ee.publishing:h?ee.updatingIntlFields:ee.publish),[c,h]),T=K.useCallback((async()=>{f(!0);try{const e=g||p;e&&await async function(e,t,a,n){var i;const{_type:l,_id:r}=a,s=le(r),u=r!==s,o=t.fieldNames.lang,c=t.fieldNames.references,d=t.fieldNames.baseReference,h=await ie(e,t,t.languages,a),f=ue(a,t)||(null==(i=ae(h,t.base))?void 0:i.id),g=e.transaction();if(g.createIfNotExists({_id:r,_type:l}),g.patch(r,{set:m({[o]:f},u&&t.referenceBehavior!==Q.DISABLED?{[d]:se(s,t.referenceBehavior===Q.WEAK)}:{})}),await g.commit(),n){const a=await re(e,t,s);if(a.length>0){const n=e.transaction();let i=[];t.referenceBehavior!==Q.DISABLED&&(i=F.default(a.map((e=>{const a=ue(e,t);return a?m({_key:a},se(e._id,t.referenceBehavior===Q.WEAK)):null}),{}))),n.patch(s,{set:{[c]:i}}),await n.commit()}}}(r,s,e,b.published),l.push({closable:!0,status:"success",title:ee.intlFieldsUpdated})}catch(e){console.error(e),l.push({closable:!0,status:"error",title:e.toString()})}f(!1)}),[l,g,p,r,b.published,s]),A=K.useCallback((()=>{d("publishing");if(n!==u&&!b.published&&s.referenceBehavior===Q.STRONG)throw new Error(ee.errors.baseDocumentNotPublished);S.execute()}),[n,u,S,s,b.published]);return K.useEffect((()=>{const e="publishing"===c&&!g,t=e?"published":null,a=setTimeout((()=>{d(t)}),e?200:4e3);return()=>clearTimeout(a)}),[c,g]),K.useEffect((()=>{"published"===c&&(o.current||(o.current=T().then((()=>i&&i())).finally((()=>o.current=null))))}),[c,i,T]),{disabled:w,label:E,icon:"published"===c?C.CheckmarkIcon:C.PublishIcon,shortcut:w?null:"Ctrl+Alt+P",onHandle:A}}}const fe={NOTHING_TO_DELETE:"This document doesn't yet exist or is already deleted"};function ge(e){return function(t){let{id:a,type:n,onComplete:i}=t;const l=x.useToast(),r=ne(),s=de(e,n),u=z.default.useMemo((()=>le(a)),[a]),o=v.useEditState(u,n),c=v.useSyncState(a,n),d=v.useSyncState(u,n),{delete:h}=v.useDocumentOperation(a,n),[f,g]=z.default.useState(!1),[m,p]=z.default.useState(!1),b=z.default.useCallback((()=>{p(!0)}),[]),S=z.default.useCallback((()=>{p(!1),i&&i()}),[i]),y=z.default.useCallback((async()=>{try{if(g(!0),p(!1),o.draft||o.published){const e=r.transaction();o.draft&&e.delete("drafts.".concat(u)),o.published&&e.patch(u,{unset:[s.fieldNames.references]}),await e.commit()}const e=await re(r,s,u,!0),t=r.transaction();e.forEach((e=>{t.delete(e._id)})),await t.commit(),h.execute(),i&&i()}catch(e){l.push({closable:!0,status:"error",title:e.toString()})}finally{g(!0)}}),[l,s,r,u,o.draft,o.published,h,i]);return{onHandle:b,tone:"critical",icon:C.TrashIcon,disabled:f||Boolean(h.disabled)||c.isSyncing||d.isSyncing,shortcut:"CTRL+ALT+D",title:h.disabled&&fe[h.disabled]||"",label:f?ee.deleteAll.deleting:ee.deleteAll.buttonTitle,dialog:m&&{type:"dialog",onClose:i,content:_.jsx(j.ConfirmDeleteDialog,{action:"delete",id:a,type:n,onCancel:S,onConfirm:y})}}}}const me={NOTHING_TO_DUPLICATE:"This document doesn't yet exist so there's nothing to duplicate"};function pe(e){return t=>{let{id:a,type:n,draft:i,published:l}=t;const r=x.useToast(),s=ne(),u=de(e,n),o=le(a),{duplicate:c}=v.useDocumentOperation(a,n),[d,h]=z.default.useState(!1),f=z.default.useCallback((async()=>{h(!0);try{const e=I.uuid(),t=await re(s,u,o),a=s.transaction();a.create(m(m({},null!=i?i:l),{},{_id:e,_type:n})),t.forEach((t=>{const n=t._id.startsWith("drafts."),i=te(u,e,ue(t,u));a.create(m(m({},t),{},{_id:n?"drafts.".concat(i):i}))})),await a.commit()}catch(e){console.error(e),r.push({description:e.message})}h(!1)}),[s,u,r,o,n,i,l]);return{icon:C.CopyIcon,disabled:Boolean(c.disabled)||d,title:c.disabled&&me[c.disabled]||"",label:d?ee.duplicateAll.duplicating:ee.duplicateAll.buttonTitle,onHandle:f}}}const ve=(e,t,a)=>{let{schema:n,schemaType:i,documentId:l}=t;const r=n.get(i),s=r&&r.i18n,u=l===le(l);let o=e;return s&&(o=o.map((e=>{const t="publish"===e.action,n="delete"===e.action;return t?he(a):n&&u?ge(a):e})),u&&o.push(pe(a))),o},be=y.forwardRef((function(e,t){let{value:a,onChange:n,onOpen:i}=e;const l=v.useSchema(),r=y.useMemo((()=>{var e;return null==(e=l._original)?void 0:e.types.filter((e=>!!e.i18n))}),[l]);return _.jsxs(x.Stack,{space:4,children:[_.jsx(x.Text,{children:ee.translationsMaintenance.selectSchemaPlaceholder}),_.jsx(x.Card,{children:_.jsx(x.Autocomplete,{ref:t,fontSize:[2,2,3],icon:C.EarthGlobeIcon,id:"i18n-schema-selector",options:null==r?void 0:r.map((e=>({value:e.name,payload:e}))),value:a,placeholder:"Search",openButton:{onClick:()=>i},onChange:n,renderValue:(e,t)=>(null==t?void 0:t.payload.title)||e,renderOption:e=>{let{payload:t}=e;return _.jsx(x.Card,{padding:2,radius:2,as:"button",children:_.jsx(v.DefaultPreview,{layout:"default",title:t.title,media:t.icon})})}})})]})})),Se=e=>{let{pending:t,count:a,labelName:n,children:i,onClick:l}=e;return _.jsx(x.Card,{padding:3,radius:2,shadow:1,tone:a>0?"caution":"default",children:_.jsxs(x.Flex,{align:"center",children:[_.jsx(x.Box,{flex:1,children:_.jsxs(x.Text,{muted:a<=0,children:[_.jsx("span",{children:a}),_.jsx("span",{children:" "}),_.jsx("span",{children:n?String(ee.translationsMaintenance[n]):i})]})}),a>0&&_.jsx(x.Button,{padding:2,fontSize:2,disabled:t,onClick:l,text:ee.translationsMaintenance.fix})]})})},ye=(e,t,a,n)=>{var i;const l=null==(i=t.fieldNames)?void 0:i.lang,r=e.transaction();return n.forEach((e=>{const n=a.get(e._type),i=("object"==typeof n.i18n?n.i18n.base:void 0)||t.base;if(!e[l]){const t=(e=>{const t=new RegExp("".concat("i18n","\\.[^.]+\\.([^.]+)")),a=e.match(t);if(a&&2===a.length)return a[1];const n=e.split("__i18n_");return n.length>1?n[1]:void 0})(e._id)||i;r.patch(e._id,{set:{[l]:t}})}})),r},xe=(e,t,a,n)=>{const i=t.fieldNames.references;return q.default(a,50).map((a=>{const l=e.transaction();return a.forEach((e=>{let a=[];const r=n.filter((t=>le(t._id)===e._id));t.referenceBehavior!==Q.DISABLED&&(a=F.default(r.map((e=>{const a=ue(e,t);return a?m({_key:a},se(e._id,t.referenceBehavior===Q.WEAK)):null}),{}))),l.patch(e._id,{set:{[i]:a}})})),l}))},Ce=(e,t,a,n)=>{const i=e.transaction();return n.forEach((e=>{a.find((a=>{var n,i;return Array.isArray(null==e?void 0:e[t.fieldNames.references])&&(null==(n=null==e?void 0:e[t.fieldNames.references])?void 0:n.some((t=>t._ref===e._id)))||a._id===(null==(i=null==e?void 0:e[t.fieldNames.baseReference])?void 0:i._ref)}))||i.delete(e._id)})),i},_e=async(e,t,a)=>{const n=await ie(e,t,t.languages),i=ae(n,t.base),l=t.fieldNames.lang,r=e.transaction();return a.forEach((e=>{e[l]!==(null==i?void 0:i.id)&&r.patch(e._id,{set:{[l]:null==i?void 0:i.id}})})),r},je=(e,t,a)=>{const n=e.transaction();if(t.referenceBehavior!==Q.DISABLED){const e=t.fieldNames.baseReference;a.forEach((a=>{if(!a[e]){const i=le(a._id);n.patch(a._id,{set:{[e]:se(i,t.referenceBehavior===Q.WEAK)}})}}))}return n},Ie=U.default(x.Card)(t||(t=f(["\n grid-column-start: 1;\n grid-row-start: 1;\n"]))),Me=U.default(x.Code)(a||(a=f(["\n word-break: break-word;\n white-space: break-spaces;\n"]))),we=U.default(x.Flex)(n||(n=f(["\n grid-column-start: 1;\n grid-row-start: 1;\n"]))),Ee=y.forwardRef((function(e,t){let{config:a}=e;const[n,i]=y.useState(""),l=ne(),{pending:r,setPending:s,documents:u,baseDocuments:o,translatedDocuments:c,documentsSummaryInformation:d,fetchInformation:h}=((e,t)=>{const a=ne(),n=de(e,t),[i,l]=z.default.useState(!1),[r,s]=z.default.useState([]),[u,o]=z.default.useState([]),c=z.default.useMemo((()=>n.idStructure===X.DELIMITER?r.filter((e=>!e._id.includes("__i18n_"))):r.filter((e=>!e._id.startsWith("i18n")))),[n,r]),d=z.default.useMemo((()=>n.idStructure===X.DELIMITER?r.filter((e=>e._id.includes("__i18n_"))):r.filter((e=>e._id.startsWith("i18n")))),[n,r]),h=z.default.useMemo((()=>n.idStructure===X.DELIMITER?r.filter((e=>e._id.startsWith("i18n"))):r.filter((e=>e._id.includes("__i18n_")))),[n,r]),f=z.default.useCallback((async e=>{l(!0);const[t,i]=await Promise.all([ie(a,n,n.languages),a.fetch("*[_type == $type && !(_id in path('drafts.**'))]",{type:e})]);o(t),s(i),l(!1)}),[n,a]),g=z.default.useMemo((()=>{var e,t,a;const i=ae(u,n.base),l=c,s=d,o=null==(e=n.fieldNames)?void 0:e.lang,f=null==(t=n.fieldNames)?void 0:t.references,g=null==(a=n.fieldNames)?void 0:a.baseReference;return{idStructureMismatch:h,missingLanguageField:r.filter((e=>!e[o])),missingDocumentRefs:l.filter((e=>{const t=s.filter((t=>le(t._id)===e._id));return Object.values(e[f]||[]).filter((e=>"reference"===e._type&&!!e._ref)).length!=t.length})),missingBaseDocumentRefs:s.filter((e=>!e[g])),orphanDocuments:s.filter((e=>!l.find((t=>le(e._id)===t._id)))),referenceBehaviorMismatch:l.filter((e=>{const t=e[f]||[];return n.referenceBehavior===Q.DISABLED?Object.keys(t).length>0:n.referenceBehavior===Q.WEAK?Object.values(t).some((e=>!e._weak)):Object.values(t).some((e=>!!e._weak))})),baseLanguageMismatch:l.filter((e=>(null==i?void 0:i.id)&&e[o]!==i.id))}}),[n,r,u,c,d,h]);return z.default.useEffect((()=>{t&&f(t)}),[t]),{pending:i,setPending:l,documents:r,baseDocuments:c,translatedDocuments:d,idStructureMismatchDocuments:h,documentsSummaryInformation:g,fetchInformation:f}})(a,n),[f,g]=y.useState(null),p=v.useSchema(),b=de(a,n),S=y.useCallback((e=>i(e)),[]),C=y.useCallback((()=>i("")),[]),j=y.useCallback((()=>{g(((e,t,a,n)=>{const i=t.fieldNames.references,l=new Set(n.map((e=>le(e._id)))),r=e.transaction();l.forEach((e=>{r.patch(e,{set:{[i]:[]}})}));const s=H.default(n.filter((e=>e._id!==le(e._id))),100).map((n=>{const l=e.transaction();return n.forEach((e=>{const n=le(e._id),r=ue(e,t);if(r){const s=te(t,n,r);l.createIfNotExists(m(m({},e),{},{_id:s,_type:a})),l.delete(e._id),t.referenceBehavior!==Q.DISABLED&&(l.patch(n,{setIfMissing:{[i]:[]}}),l.patch(n,{insert:{after:"".concat(i,"[-1]"),items:[m({_key:r},se(s,t.referenceBehavior===Q.WEAK))]}}))}})),l}));return[r,...s]})(l,b,n,u))}),[l,b,n,u]),I=y.useCallback((()=>{g([ye(l,b,p,u)])}),[l,p,b,u]),M=y.useCallback((()=>{g(xe(l,b,o,c))}),[l,b,o,c]),w=y.useCallback((()=>{g([je(l,b,c)])}),[l,b,c]),E=y.useCallback((()=>{g([Ce(l,b,o,c)])}),[l,b,o,c]),T=y.useCallback((()=>{g(xe(l,b,o,c))}),[l,b,o,c]),A=y.useCallback((async()=>{g([await _e(l,b,o)])}),[l,b,o]),k=y.useCallback((()=>{if(f){const e=JSON.stringify(f.map((e=>e.toJSON())),null,2),t=new Blob([e],{type:"application/json"}),a=URL.createObjectURL(t),n=document.createElement("a");n.href=a,n.download="transactions.json",n.style.display="none",document.body.appendChild(n),n.click(),URL.revokeObjectURL(a)}}),[f]),B=y.useCallback((()=>{g(null)}),[g]),L=y.useCallback((async()=>{s(!0);try{f&&(await f.reduce((async(e,t)=>{await e,await t.commit()}),Promise.resolve()),await h(n),g(null))}catch(e){console.error(e)}finally{s(!1)}}),[s,h,n,f]);return _.jsxs(x.Container,{width:1,children:[_.jsxs(x.Stack,{space:2,children:[_.jsx(x.Box,{padding:4,children:_.jsx(be,{value:n,onChange:S,onOpen:C,ref:t})}),!!n&&_.jsx(x.Box,{paddingX:4,children:_.jsxs(x.Stack,{space:2,children:[_.jsx(Se,{pending:r,count:d.idStructureMismatch.length,labelName:"idStructureMismatch",onClick:j}),_.jsx(Se,{pending:r,count:d.missingLanguageField.length,labelName:"missingLanguageField",onClick:I}),_.jsx(Se,{pending:r,count:d.missingDocumentRefs.length,labelName:"missingDocumentRefs",onClick:M}),_.jsx(Se,{pending:r,count:d.missingBaseDocumentRefs.length,labelName:"missingBaseDocumentRefs",onClick:w}),_.jsx(Se,{pending:r,count:d.orphanDocuments.length,labelName:"orphanDocuments",onClick:E}),_.jsx(Se,{pending:r,count:d.referenceBehaviorMismatch.length,labelName:"referenceBehaviorMismatch",onClick:T}),_.jsx(Se,{pending:r,count:d.baseLanguageMismatch.length,labelName:"baseLanguageMismatch",onClick:A})]})})]}),!!(null==f?void 0:f.length)&&_.jsx(x.Dialog,{id:"confirm-pending-transactions",width:2,header:ee.translationsMaintenance.pendingTransactionDialog.header,onClose:B,footer:_.jsx(x.Flex,{padding:3,justify:"flex-end",children:_.jsxs(x.Grid,{autoFlow:"column",autoCols:"auto",gap:2,children:[_.jsx(x.Button,{tone:"default",loading:r,disabled:r,text:ee.translationsMaintenance.pendingTransactionDialog.cancel,onClick:B}),_.jsx(x.Button,{tone:"critical",loading:r,disabled:r,text:ee.translationsMaintenance.pendingTransactionDialog.confirm,onClick:L})]})}),children:_.jsxs(x.Stack,{padding:3,space:3,children:[_.jsx(x.Card,{padding:3,radius:2,shadow:1,tone:"caution",children:_.jsx(x.Text,{size:2,children:ee.translationsMaintenance.pendingTransactionDialog.caution})}),_.jsxs(x.Grid,{cols:1,children:[_.jsx(Ie,{padding:3,radius:2,shadow:1,tone:"default",children:_.jsx(Me,{language:"json",children:JSON.stringify(f.map((e=>e.toJSON())),null,2)})}),_.jsx(we,{padding:2,justify:"flex-end",align:"flex-start",onClick:k,children:_.jsx(x.Button,{text:"Download"})})]})]})})]})}));const Te=e=>{const{S:t,schema:a}=e,n=[],i=t.documentTypeListItems().filter((e=>{let t=e.getSchemaType();t="string"==typeof t?a.get(t):t;const i=t&&t.i18n;return i||n.push(e),i}));return{withoutI18n:n,withI18n:i}},Ae=e=>{const{S:t}=e,a=function(e){return y.forwardRef((function(t,a){return _.jsx(Ee,m(m({},e),{},{ref:a}))}))}(e);return t.component(a).title(ee.translationsMaintenance.title).id("__i18n_translations_maintenance_tab")},ke=e=>{const{S:t}=e;return t.listItem().id("__i18n_translations_maintenance_tab").title(ee.translationsMaintenance.title).icon(C.EarthGlobeIcon).child(Ae(e))},Be=e=>{const{S:t,config:a,schema:n}=e,i=ce(a,"object"==typeof n.i18n?n.i18n:void 0),l=Te(e),r={[X.SUBPATH]:(e,t)=>t.filter("!(_id in path($path)) && !(_id in path($drafts)) && _type == $type").params({path:"".concat("i18n",".**"),drafts:"drafts.".concat("i18n",".**"),type:e.getId()}),[X.DELIMITER]:(e,t)=>t.filter("!(_id match $id) && _type == $type").params({id:"*".concat("__i18n_","*"),type:e.getId()})},s=[...l.withoutI18n,...l.withI18n.map((e=>{const a=e.getSchemaType(),n="string"==typeof a?a:null==a?void 0:a.name;return e.child(r[i.idStructure](e,t.documentList().id(e.getId()||"").title(e.getTitle()||"").schemaType(null!=n?n:"").menuItems([...n?t.orderingMenuItemsForType(n):[]])))}))];return i.withTranslationsMaintenance&&s.splice(0,0,ke(e)),s.map((e=>e.serialize()))};function Le(e){const{S:t}=e;if(0===Te(e).withI18n.length)return t.defaults();const a=Be(e);return t.list().id("__root__").title("Content").items(a).showIcons(a.some((e=>{return!(!(t=e.schemaType)||"string"==typeof t)&&Boolean(t.icon);var t})))}const De=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(!e)return"";switch(e.toLocaleLowerCase()){case"en":return"gb";case"sq":return"al";default:return e}},Ne=y.createContext({}),Re=U.default(x.Box)(i||(i=f(["\n min-width: 24px;\n transform: translateY(1px);\n"]))),Oe=e=>{let{code:t,langCulture:a}=e;const n=y.useMemo((()=>t&&function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(!e)return"";const t=De(e);if(!J.includes(t.toUpperCase()))return"";return k.getEmojiFlag(t)}(t)),[t]),i=W.default.parse(null!=n?n:"🇺🇳",{folder:"svg",ext:".svg"}),l=Z.default(i),{customFlagComponents:r}=y.useContext(Ne),s=y.useMemo((()=>{if(a&&r){const e=a.replace(/[^a-zA-Z0-9_]/g,"_");if(e in r)return r[e]}return null}),[a,r]);return _.jsx(x.Box,{"aria-label":t,children:s&&t?_.jsx(s,{code:t}):_.jsx(Re,{children:l})})};const Pe={},Ge={apiVersion:"v2022-05-09"};const Fe=(e,t)=>{var a,n;return Number(null!=(a=e.isBase)?a:0)-Number(null!=(n=t.isBase)?n:0)};function Ke(e){let{children:t}=e;return _.jsx(x.Box,{padding:2,children:_.jsx(x.Text,{muted:!0,size:1,children:t})})}const ze=y.forwardRef((function(e,t){return _.jsx("svg",m(m({"data-sanity-icon":"splitPane",width:"1em",height:"1em",viewBox:"0 0 25 25",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t},e),{},{children:_.jsx("path",{d:"M10.5 5.5V19.5M13 12.5H15.5M18 12.5H15.5M15.5 12.5V15M15.5 12.5V10M4.5 5.5H20.5V19.5H4.5V5.5Z",stroke:"currentColor",strokeWidth:1.2})}))})),Ue=y.createContext({currentDocumentId:null,currentDocumentType:null,baseLanguage:null,currentLanguage:null}),He=M.keyframes(l||(l=f(["\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n"]))),qe=U.default(C.SpinnerIcon)(r||(r=f(["\n animation: "," 500ms linear infinite;\n"])),He),We=U.default(x.Button)(s||(s=f(["\n display: none;\n flex-shrink: 0;\n margin-left: 4px;\n\n & svg {\n display: block;\n color: ",";\n }\n\n ","\n"])),N.hues.gray[700].hex,(e=>{let{theme:t}=e;return M.css(u||(u=f(["\n @media (min-width: ","em) {\n display: block;\n }\n "])),t.sanity.media[1]/16)})),Ze=z.default.forwardRef(((e,t)=>_.jsx("button",m({type:"button",ref:t},e)))),Ve=U.default.button(o||(o=f(["\n color: ",";\n background-color: ",";\n\n span {\n color: ",";\n }\n"])),(e=>{let{theme:t}=e;return t.sanity.color.button.default.primary.enabled.fg}),(e=>{let{theme:t}=e;return t.sanity.color.button.default.primary.enabled.bg}),(e=>{let{theme:t}=e;return t.sanity.color.button.default.primary.enabled.fg})),Ye=e=>{let{status:t,language:a}=e;const n=x.useToast(),i=y.useContext(Ne),l=ne(),{currentDocumentId:r,currentDocumentType:s,baseLanguage:u}=z.default.useContext(Ue);if(!r||!s)throw new Error("No document in view");const o=de(i,s),c=z.default.useContext(R.RouterContext),{routerPanesState:d,groupIndex:h,replaceCurrent:f}=j.usePaneRouter(),[g,p]=z.default.useState(!1),b=z.default.useMemo((()=>le(r)),[r]),S=z.default.useMemo((()=>a.id.split(/[_-]/).pop()),[a.id]),I=z.default.useMemo((()=>a.id===(null==u?void 0:u.id)?b:te(o,b,a.id)),[o,b,a.id,u]),M=v.useEditState(b,s),w=z.default.useMemo((()=>a.isBase?a.title.length>=20?ee.base.split(" ")[0]:ee.base:null),[a]),E=z.default.useCallback(((e,t)=>{f({id:e,params:{type:t}})}),[f]),T=z.default.useCallback(((e,t)=>{if(!c)return;const a=[...d];a.splice(h+1,0,[{id:e,params:{type:t}}]);const n=c.resolvePathFromState({panes:a});c.navigateUrl({path:n})}),[c,d,h]),A=z.default.useCallback((async()=>{try{p(!0);const e=M.draft||M.published,t=o.fieldNames.lang,i=o.fieldNames.references,r=o.fieldNames.baseReference,c=o.referenceBehavior;await l.createIfNotExists(m(m({_id:"drafts.".concat(I),_type:s},e?Y.default(e,["_id","_type",i]):{}),{},{[t]:a.id},(null==e?void 0:e._id)&&c!==Q.DISABLED?{[r]:{_type:"reference",_ref:e._id.replace("drafts.",""),_weak:!0,_strengthenOnPublish:{type:s,weak:"weak"===c,template:{id:s,params:void 0}}}}:{})),n.push({closable:!0,status:"success",title:ee.translationCreatedToast.title(a.title),description:u?ee.translationCreatedToast.description(u.title):void 0}),E(I,s)}catch(e){n.push({closable:!0,status:"error",title:e.toString()})}finally{p(!1)}}),[o,M,I,s,a.id,a.title,n,u,E,l]),k=z.default.useCallback((()=>{E(I,s)}),[E,I,s]),B=z.default.useCallback((()=>{T(I,s)}),[T,I,s]);return"missing"===t?_.jsx(x.MenuItem,{as:Ze,"data-as":"button",disabled:g,icon:g?qe:C.AddIcon,text:a.title,onClick:A}):_.jsxs(x.Flex,{children:[_.jsx(x.MenuItem,{as:a.isCurrentLanguage?Ve:Ze,"data-as":"button","data-selected":a.isCurrentLanguage,selected:a.isCurrentLanguage,onClick:k,paddingY:1,paddingX:2,children:_.jsxs(x.Flex,{align:"center",gap:2,children:[_.jsx(Oe,{code:S,langCulture:a.id}),_.jsx(x.Box,{flex:1,children:_.jsx(x.Text,{children:a.title})}),w?_.jsx(x.Badge,{fontSize:0,children:w}):null]})}),!a.isCurrentLanguage&&_.jsx(We,{type:"button",tone:"default",mode:"bleed",padding:2,onClick:B,children:_.jsx(ze,{width:19,height:19})})]})},Je=U.default(x.Box)(c||(c=f(["\n border-bottom: 1px solid var(--card-shadow-outline-color);\n"]))),$e=U.default(x.Box)(d||(d=f(["\n minwidth: 250;\n"]))),Qe=e=>{let{draftLanguageObjects:t,publishedLanguageObjects:a,missingLanguageObjects:n}=e;const i=z.default.useMemo((()=>Boolean(!(!t.length&&!a.length)&&n.length)),[t,a,n]),l=z.default.useMemo((()=>[...t.map((e=>m(m({},e),{},{status:"draft"}))),...a.map((e=>m(m({},e),{},{status:"published"})))].sort(Fe).reverse()),[t,a]);return _.jsxs($e,{children:[!!l.length&&_.jsxs(x.Box,{children:[_.jsx(Ke,{children:ee.languageSelect.listLabels.existing}),_.jsx(x.Grid,{columns:1,gap:1,children:l.map((e=>_.jsx(Ye,{status:e.status,language:e},e.id)))})]}),i&&_.jsx(Je,{marginY:1}),!!n.length&&_.jsxs(x.Box,{children:[_.jsx(Ke,{children:ee.languageSelect.listLabels.missing}),_.jsx(x.Grid,{columns:1,gap:1,children:n.map((e=>_.jsx(Ye,{status:"missing",language:e},e.id)))})]})]})},Xe={constrainSize:!0,placement:"bottom",portal:!0},et=e=>{let{schemaType:t,document:a}=e;var n,i;const l=de(y.useContext(Ne),t.name),[r,s]=function(e,t){const a=ne(),{draft:n,published:i}=v.useEditState(t._id.replace(/^drafts\./,""),t._type),[l,r]=y.useState(!1),[s,u]=y.useState([]),o=y.useCallback((async()=>{if(0===s.length||e.shouldReload&&e.shouldReload(null!=n?n:i)){r(!0);const t=await ie(a,e,e.languages,null!=n?n:i);u(t),r(!1)}}),[a,e,n,i,s]);return y.useEffect((()=>{o()}),[n,i,s,e,o]),[l,s]}(l,a),u=z.default.useMemo((()=>ae(s,l.base)),[s,l.base]),o=z.default.useMemo((()=>ue(a,l)||(u?u.id:null)),[a,u,l]),c=z.default.useMemo((()=>s.find((e=>e.id===o))),[s,o]),d=z.default.useMemo((()=>null==o?void 0:o.split(/[-_]/).pop()),[o]),h='*[_type == $type && _id in $ids]{\n _id,\n "'.concat(l.fieldNames.lang,'": ').concat(l.fieldNames.lang,"\n }"),f=z.default.useMemo((()=>{const e=le(a._id),t=s.map((t=>t===u?e:te(l,e,t.id))),n=t.map((e=>"drafts.".concat(e)));return{ids:[...t,...n],type:a._type}}),[l,u,s,a._id,a._type]),{loading:g,data:p}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Pe,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Ge;const[n,i]=y.useState(!0),[l,r]=y.useState(!1),[s,u]=y.useState(null),o=y.useRef(null),c=v.useDocumentStore();return y.useEffect((()=>(e&&(o.current=c.listenQuery(e,t,a).pipe(B.distinctUntilChanged(V.default),B.catchError((e=>(console.error(e),r(e),i(!1),u(null),e)))).subscribe((e=>{u((t=>V.default(t,e)?t:e)),i(!1),r(!1)}))),()=>o.current?o.current.unsubscribe():void 0)),[e,t,a]),{loading:n,error:l,data:s}}(h,f),b=z.default.useMemo((()=>{const e=[],t=[],a=[];if(!(null==p?void 0:p.length))return{draftLanguageObjects:e,publishedLanguageObjects:t,missingLanguageObjects:a};const n=p.reduce(((e,t)=>{if(!t._id.startsWith("drafts.")){return p.some((e=>e._id==="drafts.".concat(t._id)))?e:[...e,t]}return[...e,t]}),[]),i=new Map;return n.forEach((e=>{const t=G.default(null!=e?e:{},l.fieldNames.lang),a=e&&e._id.replace(/^drafts\./,"")===le(e._id);t?i.set(t,e):a&&(null==u?void 0:u.id)&&i.set(u.id,e)})),s.forEach(((n,l)=>{const r=m(m({},n),{},{isBase:u?n.id===u.id:0===l,isCurrentLanguage:n.id===o}),s=i.get(n.id);(null==s?void 0:s._id)&&!s._id.startsWith("drafts.")?t.push(r):(null==s?void 0:s._id)&&s._id.startsWith("drafts.")?e.push(r):a.push(r)})),{draftLanguageObjects:e,publishedLanguageObjects:t,missingLanguageObjects:a}}),[l,s,u,p,o]);return!c||!o||r||g||0===s.length?_.jsx(x.Button,{disabled:!0,mode:"bleed",padding:3,loading:r||g,iconRight:C.ChevronDownIcon,text:ee.languageSelect.placeholder}):_.jsx(Ue.Provider,{value:{baseLanguage:u,currentLanguage:c,currentDocumentType:a._type,currentDocumentId:a._id},children:_.jsx(x.MenuButton,{id:"document-internationalization/language-select",popover:Xe,button:_.jsx(x.Button,{paddingY:1,paddingX:2,mode:"bleed",title:null!=(n=c.title)?n:c.id,children:_.jsxs(x.Flex,{align:"center",gap:2,children:[_.jsx(Oe,{code:d,langCulture:o}),_.jsx(x.Box,{flex:1,children:_.jsx(x.Text,{children:null!=(i=c.title)?i:c.id})}),_.jsx(C.ChevronDownIcon,{width:19,height:19})]})}),menu:_.jsx(x.Menu,{children:_.jsx(Qe,m({},b))})})})};function tt(t){const{config:a}=t,n=h(t,e),i=t.value;return _.jsxs(Ne.Provider,{value:a,children:[i._id&&_.jsx(x.Flex,{flex:1,justify:"flex-end",children:_.jsx(et,{schemaType:t.schemaType,document:i})}),t.renderDefault(n)]})}const at=v.definePlugin((e=>({name:"document-i18n",document:{actions:(t,a)=>ve(t,a,e),badges:t=>{return[...t,(a=e,e=>{const t=de(a,e.type),n=e.draft||e.published,i=n?ue(n,t):null;return i?{label:i,color:"success"}:null})];var a}},form:{components:{input(t){const{value:a}=t;return t.schemaType.i18n&&"object"==typeof a&&(null==a?void 0:a._id)?_.jsx(tt,m({config:e},t)):t.renderDefault(t)}}}})));exports.I18nDelimiter="__i18n_",exports.I18nPrefix="i18n",exports.IdStructure=X,exports.LanguageCultures=$,exports.ReferenceBehavior=Q,exports.SupportedEmojiFlagCodes=J,exports.UiMessages=ee,exports.createDeleteAction=ge,exports.createDuplicateAction=pe,exports.createIsSlugUnique=function(e){return(t,a)=>{const{document:n,path:i,type:l}=a,r=null==l?void 0:l.options;if(!n)throw new Error("`document` was not provided in validation context.");if(!i)throw new Error("`path` was not provided in validation context.");const s=(null==r?void 0:r.disableArrayWarning)||!1,u=le(n._id),o=n._type,c=oe(i.concat("current"));if(!s&&c.includes("[]")){const e=oe(i);console.warn(["Slug field at path ".concat(e," is within an array and cannot be automatically checked for uniqueness"),'If you need to check for uniqueness, provide your own "isUnique" method',"To disable this message, set `disableArrayWarning: true` on the slug `options` field"].join("\n"))}const d=["_type == $docType",'!(_id in path("drafts.**"))',"_id != $baseId",'!(_id in path("i18n." + $baseId + ".*"))','!(_id match $baseId + "'.concat("__i18n_",'*")'),"".concat(c," == $slug")].join(" && ");return e.fetch("!defined(*[".concat(d,"][0]._id)"),{docType:o,baseId:u,slug:t},{tag:"validation.slug-is-unique"})}},exports.createPublishAction=he,exports.documentI18n=at,exports.getDefaultDocumentNode=e=>e.document(),exports.getDocumentList=Le,exports.getDocumentTypes=Te,exports.getFilteredDocumentTypeListItems=Be,exports.getMaintenanceListItem=ke,exports.getMaintenanceTabComponent=Ae,exports.resolveActions=ve,exports.withDocumentI18nPlugin=function(e,t){var a;const n=at(t);return F.default([...Array.isArray(e)?e:e(t),null==(a=t.includeDeskTool)||a?j.deskTool({structure:(e,a)=>{let{schema:n}=a;return Le({S:e,schema:n,config:t})}}):null,n])};
2
+ //# sourceMappingURL=index.js.map