@sanity/document-internationalization
6.2.176.2.18
dist/index.js.map~
dist/index.js.mapModified+1−1
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["Preview","useSchema","Feedback","DocumentPreviewProps","value","type","DocumentPreview","props","$","_c","schema","t0","get","schemaType","t1","Symbol","for","PluginConfigContext","METADATA_SCHEMA_NAME","TRANSLATIONS_ARRAY_NAME","API_VERSION","DEFAULT_CONFIG","supportedLanguages","schemaTypes","languageField","weakReferences","bulkPublish","metadataFields","apiVersion","allowCreateMetaDoc","callback","hideLanguageFilter","metadataOmnisearchVisibility","addTemplates","SanityDocument","METADATA_SCHEMA_NAME","separateReferences","data","translations","otherReferences","length","forEach","doc","_type","push","Card","Flex","Spinner","Stack","Text","useEffect","useMemo","SanityDocument","useListeningQuery","MetadataDocument","DocumentPreview","separateReferences","DeleteTranslationDialogProps","doc","documentId","setTranslations","translations","DeleteTranslationDialog","props","$","_c","t0","id","t1","Symbol","for","t2","params","initialValue","data","loading","t3","otherReferences","t4","t5","t6","length","t7","t8","_type","t9","map","_temp","t10","_temp2","t11","t12","t13","reference","_id","translation","Button","Grid","DeleteTranslationFooterProps","translations","onClose","onProceed","DeleteTranslationFooter","props","$","_c","t0","t1","length","t2","t3","createContext","use","useContext","useMemo","LayoutProps","useClient","useWorkspace","DEFAULT_CONFIG","PluginConfig","PluginConfigContext","DocumentInternationalizationContext","useDocumentInternationalizationContext","DocumentInternationalizationProviderProps","pluginConfig","Required","Omit","Pick","promiseCache","Map","Promise","createCacheKey","workspaceId","createOrGetPromise","fn","cacheKey","cached","get","promise","set","DocumentInternationalizationProvider","props","$","_c","t0","apiVersion","client","workspace","name","t1","t2","bb0","Array","isArray","supportedLanguages","t3","t4","languagesPromise","contextValue","renderDefault","t5","TrashIcon","useToast","useCallback","useState","useClient","DocumentActionDescription","DocumentActionProps","LANGUAGE_FIELD_NAME","DeleteTranslationDialog","DeleteTranslationFooter","useDocumentInternationalizationContext","API_VERSION","TRANSLATIONS_ARRAY_NAME","MetadataDocument","DeleteOperation","useDeleteTranslationAction","props","$","_c","id","documentId","published","draft","doc","languageField","isDialogOpen","setDialogOpen","t0","Symbol","for","translations","setTranslations","t1","onClose","rawDocumentLanguage","documentLanguage","toast","t2","apiVersion","client","t3","tx","transaction","operation","length","forEach","translation","patch","_id","unset","delete","commit","then","push","status","title","description","catch","err","message","onProceed","t4","t5","t6","type","header","content","footer","t7","label","disabled","icon","tone","onHandle","dialog","action","displayName","DeleteTranslationAction","useListeningQuery","METADATA_SCHEMA_NAME","Metadata","query","useTranslationMetadata","id","$","_c","t0","params","translationSchema","data","loading","error","t1","defineLocaleResourceBundle","documenti18nLocaleNamespace","const","documentInternationalizationUsEnglishLocaleBundle","locale","namespace","resources","CopyIcon","useToast","uuid","useCallback","useMemo","useState","filter","firstValueFrom","DEFAULT_STUDIO_CLIENT_OPTIONS","Id","InsufficientPermissionsMessage","PatchOperations","useClient","useCurrentUser","useDocumentOperation","useDocumentPairPermissions","useDocumentStore","useTranslation","DocumentActionProps","DocumentActionDescription","LANGUAGE_FIELD_NAME","useRouter","structureLocaleNamespace","METADATA_SCHEMA_NAME","TRANSLATIONS_ARRAY_NAME","useTranslationMetadata","documenti18nLocaleNamespace","EditOperations","duplicate","disabled","execute","id","OperationSuccessEvent","op","type","DISABLED_REASON_KEY","METADATA_NOT_FOUND","MULTIPLE_METADATA","NOTHING_TO_DUPLICATE","NOT_READY","useDuplicateWithTranslationsAction","t0","$","_c","onComplete","documentStore","navigateIntent","isDuplicating","setDuplicating","t1","permission","permissions","isPermissionsLoading","data","loading","isMetadataDocumentLoading","hasOneMetadataDocument","Array","isArray","length","metadataDocument","client","toast","t","s","d","currentUser","t2","pair","performDuplication","Promise","reject","Error","translationsArray","translations","Map","all","map","translation","dupeId","locale","docId","value","_ref","trim","duplicateTranslation","editOperations","pipe","_temp","duplicateTranslationSuccess","operationEvents","_temp2","set","duplicateMetadata","_id","_temp3","duplicateMetadataSuccess","_temp4","dupeId_0","patch","Object","fromEntries","from","entries","_temp5","transaction","commit","values","at","catch","error","console","push","status","title","description","message","finally","handle","granted","t3","bb0","t4","t5","t6","icon","label","Boolean","t7","onHandle","action","displayName","DuplicateWithTranslationsAction","props","e","op_0","e_0","locale_0","documentId","useCallback","useRouter","usePaneRouter","useOpenInNewPane","id","type","$","_c","router","routerPanesState","groupIndex","t0","length","navigateIntent","panes","splice","params","href","resolvePathFromState","navigateUrl","path","openInNewPane","randomKey","LANGUAGE_FIELD_NAME","TranslationReference","createReference","language","ref","type","strengthenOnPublish","_key","_type","value","_ref","_weak","_strengthenOnPublish","CogIcon","Box","Button","Stack","Text","Tooltip","useCallback","useState","ObjectSchemaType","useClient","METADATA_SCHEMA_NAME","useOpenInNewPane","createReference","useDocumentInternationalizationContext","LanguageManageProps","id","metadataId","schemaType","documentId","sourceLanguageId","LanguageManage","props","$","_c","open","openCreated","allowCreateMetaDoc","apiVersion","weakReferences","t0","client","userHasClicked","setUserHasClicked","canCreate","Boolean","t1","name","transaction","sourceReference","newMetadataDocument","_id","_type","schemaTypes","translations","createIfNotExists","commit","then","catch","err","console","error","handleClick","disabled","t2","t3","Symbol","for","t4","t5","t6","extractWithPath","Mutation","isDocumentSchemaType","ObjectSchemaType","Path","pathToString","SanityDocument","SchemaType","DocumentMember","schemaType","path","name","value","removeExcludedPaths","doc","pathsToExclude","extractPaths","filter","field","options","documentInternationalization","exclude","map","mut","mutations","patch","id","_id","unset","apply","result","fields","fieldPath","fieldSchema","type","undefined","thisFieldWithPath","jsonType","innerFields","push","of","length","some","item","arrayValue","Array","_key","language","_type","itemPath","itemSchema","find","t","arrayMember","AddIcon","CheckmarkIcon","SplitVerticalIcon","Badge","Box","Button","Flex","Spinner","Text","Tooltip","useToast","uuid","useCallback","useState","getDraftId","getVersionFromId","getVersionId","isVersionId","ObjectSchemaType","SanityDocument","useClient","LANGUAGE_FIELD_NAME","METADATA_SCHEMA_NAME","useOpenInNewPane","Language","Metadata","MetadataDocument","TranslationReference","createReference","removeExcludedPaths","useDocumentInternationalizationContext","LanguageOptionProps","language","schemaType","documentId","disabled","current","source","metadataId","metadata","sourceLanguageId","LanguageOption","props","$","_c","userHasClicked","setUserHasClicked","t0","id","translations","length","find","t","undefined","translation","apiVersion","languageField","weakReferences","callback","t1","client","toast","open","value","_ref","name","t2","handleOpen","t3","title","_createdAt","Error","transaction","newTranslationDocumentId","sourceReleaseId","_id","newTranslationDocument","create","sourceReference","newTranslationReference","newMetadataDocument","_type","schemaTypes","createIfNotExists","metadataPatch","patch","setIfMissing","insert","commit","then","metadataExisted","Boolean","push","status","description","sourceDocument","newDocument","destinationLanguageId","metaDocumentId","catch","err","console","error","message","handleCreate","t4","t5","Symbol","for","t6","t7","t8","t9","t10","t11","t12","t13","t14","EditIcon","Badge","Box","Button","Flex","Text","useToast","useCallback","SanityDocument","useClient","Language","useDocumentInternationalizationContext","LanguagePatchProps","language","source","disabled","LanguagePatch","props","$","_c","apiVersion","languageField","t0","client","toast","t1","id","title","Error","currentId","_id","patch","set","commit","then","push","status","catch","err","console","error","handleClick","t2","Symbol","for","t3","t4","t5","t6","Box","ConstrainedBox","t0","$","_c","children","t1","Symbol","for","maxWidth","t2","Card","Flex","Text","PropsWithChildren","ConstrainedBox","Warning","t0","$","_c","children","t1","TranslateIcon","Box","Button","Card","Popover","Stack","Text","TextInput","useClickOutsideEvent","uuid","ChangeEvent","useCallback","useMemo","useRef","useState","useEditState","usePerspective","LANGUAGE_FIELD_NAME","useTranslationMetadata","DocumentInternationalizationMenuProps","useDocumentInternationalizationContext","LanguageManage","LanguageOption","LanguagePatch","Warning","DocumentInternationalizationMenu","props","$","_c","documentId","schemaType","languageField","supportedLanguages","query","setQuery","t0","Symbol","for","event","currentTarget","value","handleQuery","open","setOpen","t1","_temp","handleClick","buttonRef","popoverRef","t2","handleClickOutside","t3","current","data","loading","error","metadata","Array","isArray","length","_id","t4","bb0","t5","metadataId","selectedReleaseId","draft","published","version","name","source","documentIsInOneMetadataDocument","rawLanguageValue","sourceLanguageId","undefined","t6","l","id","some","sourceLanguageIsValid","every","_temp2","valid","console","warn","allLanguagesAreValid","t7","filter","language","title","toLowerCase","includes","map","language_0","translations","t","_ref","t_0","content","issueWithTranslations","t8","t9","t10","t11","l_0","o","TrashIcon","useToast","useCallback","useMemo","useState","DocumentActionDescription","DocumentActionProps","KeyedObject","Reference","TypedObject","useClient","API_VERSION","TRANSLATIONS_ARRAY_NAME","TranslationReference","value","useDeleteMetadataAction","props","$","_c","id","documentId","published","draft","doc","isDialogOpen","setDialogOpen","t0","Symbol","for","onClose","t1","Array","isArray","translations","toast","t2","apiVersion","client","t3","tx","transaction","patch","_temp","length","forEach","translation","delete","_ref","commit","then","push","status","title","catch","err","description","message","onProceed","t4","t5","t6","type","onCancel","onConfirm","tone","t7","label","disabled","icon","onHandle","dialog","unset","DocumentBadgeDescription","DocumentBadgeProps","useDocumentInternationalizationContext","LanguageBadge","props","source","version","draft","published","languageField","supportedLanguages","languageId","language","Array","isArray","find","l","id","label","title","undefined","color","Card","Spinner","useEffect","useMemo","Preview","useEditState","useSchema","useValidationStatus","DocumentCheckProps","id","onCheckComplete","addInvalidId","removeInvalidId","addDraftId","removeDraftId","DocumentCheck","props","$","_c","editState","documentType","draft","_type","published","isValidating","validation","t0","t1","undefined","schema","t2","some","_temp","validationHasErrors","t3","t4","t5","get","schemaType","t6","t7","t8","item","level","Box","ButtonTone","Text","Tooltip","ComponentType","PropsWithChildren","TextWithTone","InfoIconProps","icon","tone","text","InfoIcon","props","$","_c","children","Icon","t0","t1","t2","t3","InfoOutlineIcon","Box","Stack","Text","InfoIcon","Info","$","_c","t0","Symbol","for","maxWidth","t1","t2","t3","Button","Card","Dialog","Inline","Stack","Text","useToast","useCallback","useState","TextWithTone","useClient","useWorkspace","API_VERSION","TranslationReference","DocumentCheck","Info","BulkPublishProps","translations","BulkPublish","props","$","_c","t0","Symbol","for","apiVersion","client","projectId","dataset","toast","invalidIds","setInvalidIds","t1","checkedIds","setCheckedIds","t2","id","ids","Array","from","Set","onCheckComplete","open","setOpen","t3","onOpen","t4","onClose","t5","id_0","ids_0","addInvalidId","t6","id_1","ids_1","filter","i","removeInvalidId","t7","draftIds","setDraftIds","t8","id_2","ids_2","addDraftId","t9","id_3","ids_3","i_0","removeDraftId","t10","body","map","_temp","request","uri","method","then","push","status","title","description","catch","err","console","error","handleBulkPublish","disabled","length","Boolean","t11","_temp2","translation_1","translation","_key","value","_ref","translation_0","documentId","useEffect","PatchEvent","unset","useClient","useEditState","useDocumentPane","API_VERSION","TranslationReference","ReferencePatcherProps","translation","documentType","metadataId","ReferencePatcher","props","$","_c","editState","value","_ref","t0","Symbol","for","apiVersion","client","onChange","t1","_key","_strengthenOnPublish","_weak","draft","published","ready","referencePathBase","t2","TranslationReference","ReferencePatcher","OptimisticallyStrengthenProps","translations","metadataId","OptimisticallyStrengthen","props","$","_c","t0","t1","undefined","length","t2","t3","translation","value","_strengthenOnPublish","type","_key","map","TranslateIcon","defineField","defineType","DocumentDefinition","FieldDefinition","LANGUAGE_FIELD_NAME","METADATA_SCHEMA_NAME","TRANSLATIONS_ARRAY_NAME","TranslationReference","schemaTypes","metadataFields","omnisearchVisibility","type","name","title","icon","liveEdit","__experimental_omnisearch_visibility","fields","description","of","options","list","readOnly","value","Boolean","preview","select","translations","documentSchemaTypes","prepare","selection","length","languageKeys","map","t","toUpperCase","join","subtitle","s","filter","Stack","defineField","definePlugin","isSanityDocument","internationalizedArray","LANGUAGE_FIELD_NAME","useDeleteMetadataAction","LanguageBadge","BulkPublish","DocumentInternationalizationProvider","DocumentInternationalizationMenu","OptimisticallyStrengthen","API_VERSION","DEFAULT_CONFIG","METADATA_SCHEMA_NAME","documentInternationalizationUsEnglishLocaleBundle","metadata","PluginConfig","TranslationReference","documentInternationalization","config","pluginConfig","supportedLanguages","schemaTypes","languageField","bulkPublish","metadataFields","hideLanguageFilter","metadataOmnisearchVisibility","metadataInternationalization","addTemplates","length","Error","name","studio","components","layout","props","i18n","bundles","form","input","id","schemaType","value","metadataId","_id","translations","weakAndTypedTranslations","filter","_weak","_strengthenOnPublish","renderDefault","document","unstable_languageFilter","prev","ctx","documentId","Array","isArray","includes","badges","actions","schema","types","templates","parameterizedTemplates","map","title","get","parameters","type","languageId","staticTemplates","flatMap","language","plugins","apiVersion","languages","includeForDocumentType","documentType","fieldTypes","to","weak","weakReferences","validation","Rule","custom","item","context","_ref","client","getClient","valueLanguage","fetch","ref","draftRef","options","parent","parentArray","find","p","params","strict"],"sources":["../src/components/DeleteTranslationDialog/DocumentPreview.tsx","../src/constants.ts","../src/components/DeleteTranslationDialog/separateReferences.ts","../src/components/DeleteTranslationDialog/index.tsx","../src/components/DeleteTranslationFooter.tsx","../src/components/DocumentInternationalizationContext.tsx","../src/actions/DeleteTranslationAction.tsx","../src/hooks/useLanguageMetadata.tsx","../src/i18n/index.ts","../src/actions/DuplicateWithTranslationsAction.tsx","../src/hooks/useOpenInNewPane.tsx","../src/utils/createReference.ts","../src/components/LanguageManage.tsx","../src/utils/excludePaths.ts","../src/components/LanguageOption.tsx","../src/components/LanguagePatch.tsx","../src/components/ConstrainedBox.tsx","../src/components/Warning.tsx","../src/components/DocumentInternationalizationMenu.tsx","../src/actions/DeleteMetadataAction.tsx","../src/badges/index.tsx","../src/components/BulkPublish/DocumentCheck.tsx","../src/components/BulkPublish/InfoIcon.tsx","../src/components/BulkPublish/Info.tsx","../src/components/BulkPublish/index.tsx","../src/components/OptimisticallyStrengthen/ReferencePatcher.tsx","../src/components/OptimisticallyStrengthen/index.tsx","../src/schema/translation/metadata.ts","../src/plugin.tsx"],"sourcesContent":["import {Preview, useSchema} from 'sanity'\nimport {Feedback} from 'sanity-plugin-utils'\n\ntype DocumentPreviewProps = {\n value: unknown\n type: string\n}\n\n// Wrapper of Preview just so that the schema type is satisfied by schema.get()\nexport default function DocumentPreview(props: DocumentPreviewProps) {\n const schema = useSchema()\n\n const schemaType = schema.get(props.type)\n if (!schemaType) {\n return <Feedback tone=\"critical\" title=\"Schema type not found\" />\n }\n\n return <Preview value={props.value} schemaType={schemaType} />\n}\n","import type {PluginConfigContext} from './types'\n\nexport const METADATA_SCHEMA_NAME = `translation.metadata`\nexport const TRANSLATIONS_ARRAY_NAME = `translations`\nexport const API_VERSION = `2025-02-19`\nexport const DEFAULT_CONFIG: PluginConfigContext = {\n supportedLanguages: [],\n schemaTypes: [],\n languageField: `language`,\n weakReferences: false,\n bulkPublish: false,\n metadataFields: [],\n apiVersion: API_VERSION,\n allowCreateMetaDoc: false,\n callback: null,\n hideLanguageFilter: false,\n metadataOmnisearchVisibility: true,\n addTemplates: true,\n}\n","import type {SanityDocument} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../../constants'\n\n/**\n * Splits an array of referring documents into two groups: translation metadata\n * documents (whose `_type` matches the metadata schema name) and all other\n * references. Used by the delete-translation dialog to show which metadata\n * entries will be patched versus which external references may block deletion.\n */\nexport function separateReferences(data: SanityDocument[] | null = []): {\n translations: SanityDocument[]\n otherReferences: SanityDocument[]\n} {\n const translations: SanityDocument[] = []\n const otherReferences: SanityDocument[] = []\n\n if (data && data.length > 0) {\n data.forEach((doc) => {\n if (doc._type === METADATA_SCHEMA_NAME) {\n translations.push(doc)\n } else {\n otherReferences.push(doc)\n }\n })\n }\n\n return {translations, otherReferences}\n}\n","import {Card, Flex, Spinner, Stack, Text} from '@sanity/ui'\nimport {useEffect, useMemo} from 'react'\nimport type {SanityDocument} from 'sanity'\nimport {useListeningQuery} from 'sanity-plugin-utils'\n\nimport type {MetadataDocument} from '../../types'\nimport DocumentPreview from './DocumentPreview'\nimport {separateReferences} from './separateReferences'\n\ntype DeleteTranslationDialogProps = {\n doc: SanityDocument\n documentId: string\n setTranslations: (translations: MetadataDocument[]) => void\n}\n\nexport default function DeleteTranslationDialog(props: DeleteTranslationDialogProps) {\n const {doc, documentId, setTranslations} = props\n\n // Get all references and check if any of them are translations metadata\n const {data, loading} = useListeningQuery<SanityDocument[]>(\n `*[references($id)]{_id, _type, translations}`,\n {\n params: {id: documentId},\n initialValue: [],\n },\n )\n const {translations, otherReferences} = useMemo(() => separateReferences(data), [data])\n\n useEffect(() => {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n setTranslations(translations as MetadataDocument[])\n }, [setTranslations, translations])\n\n if (loading) {\n return (\n <Flex padding={4} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )\n }\n\n return (\n <Stack gap={4}>\n {translations && translations.length > 0 ? (\n <Text>\n This document is a language-specific version which other translations depend on.\n </Text>\n ) : (\n <Text>This document does not have connected translations.</Text>\n )}\n <Card border padding={3}>\n <Stack gap={4}>\n <Text size={1} weight=\"semibold\">\n {translations && translations.length > 0 ? (\n <>Before this document can be deleted</>\n ) : (\n <>This document can now be deleted</>\n )}\n </Text>\n <DocumentPreview value={doc} type={doc._type} />\n {translations && translations.length > 0 ? (\n <>\n <Card borderTop />\n <Text size={1} weight=\"semibold\">\n The reference in{' '}\n {translations.length === 1\n ? `this translations document`\n : `these translations documents`}{' '}\n must be removed\n </Text>\n {translations.map((translation) => (\n <DocumentPreview\n key={translation._id}\n value={translation}\n type={translation._type}\n />\n ))}\n </>\n ) : null}\n {otherReferences && otherReferences.length > 0 ? (\n <>\n <Card borderTop />\n <Text size={1} weight=\"semibold\">\n {otherReferences.length === 1\n ? `There is an additional reference`\n : `There are additional references`}{' '}\n to this document\n </Text>\n {otherReferences.map((reference) => (\n <DocumentPreview key={reference._id} value={reference} type={reference._type} />\n ))}\n </>\n ) : null}\n </Stack>\n </Card>\n {otherReferences.length === 0 ? (\n <Text>This document has no other references.</Text>\n ) : (\n <Text>\n You may not be able to delete this document because other documents refer to it.\n </Text>\n )}\n </Stack>\n )\n}\n","import {Button, Grid} from '@sanity/ui'\n\ntype DeleteTranslationFooterProps = {\n translations: unknown[]\n onClose: () => void\n onProceed: () => void\n}\n\nexport default function DeleteTranslationFooter(props: DeleteTranslationFooterProps) {\n const {translations, onClose, onProceed} = props\n\n return (\n <Grid gridTemplateColumns={2} gap={2}>\n <Button text=\"Cancel\" onClick={onClose} mode=\"ghost\" />\n <Button\n text={\n translations && translations.length > 0\n ? `Unset translation reference`\n : `Delete document`\n }\n onClick={onProceed}\n tone=\"critical\"\n />\n </Grid>\n )\n}\n","import {createContext, use, useContext, useMemo} from 'react'\nimport type {LayoutProps} from 'sanity'\nimport {useClient, useWorkspace} from 'sanity'\n\nimport {DEFAULT_CONFIG} from '../constants'\nimport type {PluginConfig, PluginConfigContext} from '../types'\n\nconst DocumentInternationalizationContext = createContext<PluginConfigContext>(DEFAULT_CONFIG)\n\nexport function useDocumentInternationalizationContext(): PluginConfigContext {\n return useContext(DocumentInternationalizationContext)\n}\n\ntype DocumentInternationalizationProviderProps = LayoutProps & {\n pluginConfig: Required<Omit<PluginConfig, 'metadataInternationalization'>> &\n Pick<PluginConfig, 'metadataInternationalization'>\n}\n\n// Simple promise cache for React.use\nconst promiseCache = new Map<string, Promise<PluginConfigContext['supportedLanguages']>>()\n\nfunction createCacheKey(workspaceId: string): string {\n return `languages-${workspaceId}`\n}\n\nfunction createOrGetPromise(\n fn: () => Promise<PluginConfigContext['supportedLanguages']>,\n cacheKey: string,\n): Promise<PluginConfigContext['supportedLanguages']> {\n const cached = promiseCache.get(cacheKey)\n if (cached) {\n return cached\n }\n const promise = fn()\n promiseCache.set(cacheKey, promise)\n return promise\n}\n\n/**\n * This Provider wraps the Studio and provides the DocumentInternationalization context to document actions and components.\n */\nexport function DocumentInternationalizationProvider(\n props: DocumentInternationalizationProviderProps,\n): React.JSX.Element {\n const {pluginConfig} = props\n\n const client = useClient({apiVersion: pluginConfig.apiVersion})\n const workspace = useWorkspace()\n\n // Use a stable workspace identifier\n const workspaceId = useMemo(() => workspace.name ?? '', [workspace])\n\n // Create cache key for promise caching\n const cacheKey = useMemo(() => createCacheKey(workspaceId), [workspaceId])\n\n // Fetch or return languages\n const languagesPromise = useMemo(() => {\n if (Array.isArray(pluginConfig.supportedLanguages)) {\n return null // Return null for synchronous arrays\n }\n\n // Create or get cached promise for React.use\n return createOrGetPromise(async () => {\n if (typeof pluginConfig.supportedLanguages === 'function') {\n return pluginConfig.supportedLanguages(client)\n }\n return pluginConfig.supportedLanguages\n }, cacheKey)\n }, [pluginConfig, client, cacheKey])\n\n // Use React.use to handle the promise with Suspense, or return array directly\n const supportedLanguages = languagesPromise\n ? use(languagesPromise)\n : // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (pluginConfig.supportedLanguages as PluginConfigContext['supportedLanguages'])\n\n const contextValue = useMemo(\n () => ({...pluginConfig, supportedLanguages}),\n [pluginConfig, supportedLanguages],\n )\n\n return (\n <DocumentInternationalizationContext.Provider value={contextValue}>\n {props.renderDefault(props)}\n </DocumentInternationalizationContext.Provider>\n )\n}\n","import {TrashIcon} from '@sanity/icons/Trash'\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {useClient, type DocumentActionDescription, type DocumentActionProps} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport DeleteTranslationDialog from '../components/DeleteTranslationDialog'\nimport DeleteTranslationFooter from '../components/DeleteTranslationFooter'\nimport {useDocumentInternationalizationContext} from '../components/DocumentInternationalizationContext'\nimport {API_VERSION, TRANSLATIONS_ARRAY_NAME} from '../constants'\nimport {type MetadataDocument} from '../types'\n\ntype DeleteOperation = 'DELETE' | 'UNSET'\n\n/**\n * Optional Document action that removes a single translation from the metadata document\n * and optionally deletes the translation document. Opens a confirmation dialog\n * showing which metadata entries reference the document and any other references\n * that may exist. When the document has translation references, those references\n * are unset; otherwise the document is deleted directly.\n *\n * To use it, you need to add it to the document actions config\n * ```\n * const translatedSchemaTypes = ['lesson', 'article'];\n * document: {\n * actions: (prev, {schemaType}) => {\n * if (translatedSchemaTypes.includes(schemaType)) {\n * return [...prev, useDeleteTranslationAction]\n * }\n * return prev\n * },\n * },\n * ```\n */\nexport const useDeleteTranslationAction = (\n props: DocumentActionProps,\n): DocumentActionDescription => {\n const {id: documentId, published, draft} = props\n const doc = draft || published\n const {languageField} = useDocumentInternationalizationContext()\n\n const [isDialogOpen, setDialogOpen] = useState(false)\n const [translations, setTranslations] = useState<MetadataDocument[]>([])\n const onClose = useCallback(() => setDialogOpen(false), [])\n const rawDocumentLanguage = doc ? doc[languageField] : null\n const documentLanguage = typeof rawDocumentLanguage === 'string' ? rawDocumentLanguage : null\n\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n // Remove translation reference and delete document in one transaction\n const onProceed = useCallback(() => {\n const tx = client.transaction()\n let operation: DeleteOperation = 'DELETE'\n\n if (documentLanguage && translations.length > 0) {\n operation = 'UNSET'\n translations.forEach((translation) => {\n tx.patch(translation._id, (patch) =>\n patch.unset([\n `${TRANSLATIONS_ARRAY_NAME}[${LANGUAGE_FIELD_NAME} == \"${documentLanguage}\"]`,\n ]),\n )\n })\n } else {\n tx.delete(documentId)\n tx.delete(`drafts.${documentId}`)\n }\n\n tx.commit()\n .then(() => {\n if (operation === 'DELETE') {\n onClose()\n }\n toast.push({\n status: 'success',\n title: operation === 'UNSET' ? 'Translation reference unset' : 'Document deleted',\n description: operation === 'UNSET' ? 'The document can now be deleted' : null,\n })\n return undefined\n })\n .catch((err: Error) => {\n toast.push({\n status: 'error',\n title:\n operation === 'UNSET'\n ? 'Failed to unset translation reference'\n : 'Failed to delete document',\n description: err.message,\n })\n })\n }, [client, documentLanguage, translations, documentId, onClose, toast])\n\n return {\n label: `Delete translation...`,\n disabled: !doc || !documentLanguage,\n icon: TrashIcon,\n tone: 'critical',\n onHandle: () => {\n setDialogOpen(true)\n },\n dialog: isDialogOpen && {\n type: 'dialog',\n onClose,\n header: 'Delete translation',\n content: doc ? (\n <DeleteTranslationDialog\n doc={doc}\n documentId={documentId}\n setTranslations={setTranslations}\n />\n ) : null,\n footer: (\n <DeleteTranslationFooter\n onClose={onClose}\n onProceed={onProceed}\n translations={translations}\n />\n ),\n },\n }\n}\n\nuseDeleteTranslationAction.action = 'deleteTranslation'\nuseDeleteTranslationAction.displayName = 'DeleteTranslationAction'\n\n/**\n * @deprecated use useDeleteTranslationAction instead\n * Will be removed in the next major version\n */\nexport const DeleteTranslationAction = (props: DocumentActionProps): DocumentActionDescription => {\n return useDeleteTranslationAction(props)\n}\n","import {useListeningQuery} from 'sanity-plugin-utils'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport type {Metadata} from '../types'\n\n// Using references() seemed less reliable for updating the listener\n// results than querying raw values in the array\n// AFAIK: references is _faster_ when querying with GROQ\n// const query = `*[_type == $translationSchema && references($id)]`\nconst query = `*[_type == $translationSchema && $id in translations[].value._ref]{\n _id,\n _createdAt,\n translations\n}`\n\nexport function useTranslationMetadata(id: string): {\n data: Metadata[] | null\n loading: boolean\n error: unknown\n} {\n const {data, loading, error} = useListeningQuery<Metadata[]>(query, {\n params: {id, translationSchema: METADATA_SCHEMA_NAME},\n })\n\n return {data, loading, error}\n}\n","import {defineLocaleResourceBundle} from 'sanity'\n\n/**\n * The locale namespace for the document internationalization plugin.\n *\n * @public\n */\nexport const documenti18nLocaleNamespace = 'document-internationalization' as const\n\n/**\n * The default locale bundle for the document internationalization plugin, which is US English.\n *\n * @internal\n */\nexport const documentInternationalizationUsEnglishLocaleBundle = defineLocaleResourceBundle({\n locale: 'en-US',\n namespace: documenti18nLocaleNamespace,\n resources: () => import('./resources'),\n})\n","import {CopyIcon} from '@sanity/icons/Copy'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useMemo, useState} from 'react'\nimport {filter, firstValueFrom} from 'rxjs'\nimport {\n DEFAULT_STUDIO_CLIENT_OPTIONS,\n type Id,\n InsufficientPermissionsMessage,\n type PatchOperations,\n useClient,\n useCurrentUser,\n useDocumentOperation,\n useDocumentPairPermissions,\n useDocumentStore,\n useTranslation,\n type DocumentActionProps,\n type DocumentActionDescription,\n} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\nimport {useRouter} from 'sanity/router'\nimport {structureLocaleNamespace} from 'sanity/structure'\n\nimport {METADATA_SCHEMA_NAME, TRANSLATIONS_ARRAY_NAME} from '../constants'\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport {documenti18nLocaleNamespace} from '../i18n'\n\n// Types for document store operations\ninterface EditOperations {\n duplicate: {disabled: string | false; execute: (id: string) => void}\n}\n\ninterface OperationSuccessEvent {\n op: string\n type: 'success' | 'error'\n}\n\nconst DISABLED_REASON_KEY = {\n METADATA_NOT_FOUND: 'action.duplicate.disabled.missing-metadata',\n MULTIPLE_METADATA: 'action.duplicate.disabled.multiple-metadata',\n NOTHING_TO_DUPLICATE: 'action.duplicate.disabled.nothing-to-duplicate',\n NOT_READY: 'action.duplicate.disabled.not-ready',\n}\n\n/**\n * Optional Document action that duplicates a document along with all its translations\n * and the associated metadata document. The workflow duplicates each translated\n * document, duplicates the metadata document, patches the new metadata to\n * reference the new translation copies, and navigates to the duplicated document.\n * Disabled when the user lacks permissions, metadata is missing or ambiguous,\n * or the underlying duplicate operation is unavailable.\n */\nexport const useDuplicateWithTranslationsAction = ({\n id,\n type,\n /* oxlint-disable-next-line typescript-eslint/no-deprecated -- kept for backwards compatibility */\n onComplete,\n}: DocumentActionProps): DocumentActionDescription => {\n const documentStore = useDocumentStore()\n const {duplicate} = useDocumentOperation(id, type)\n const {navigateIntent} = useRouter()\n const [isDuplicating, setDuplicating] = useState(false)\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'duplicate',\n })\n const {data, loading: isMetadataDocumentLoading} = useTranslationMetadata(id)\n const hasOneMetadataDocument = useMemo(() => {\n return Array.isArray(data) && data.length <= 1\n }, [data])\n const metadataDocument = Array.isArray(data) && data.length ? data[0] : null\n const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const toast = useToast()\n const {t: s} = useTranslation(structureLocaleNamespace)\n const {t: d} = useTranslation(documenti18nLocaleNamespace)\n const currentUser = useCurrentUser()\n\n const handle = useCallback(() => {\n setDuplicating(true)\n\n // Async function that does the actual work\n async function performDuplication(): Promise<void> {\n if (!metadataDocument) {\n return Promise.reject(new Error('Metadata document not found'))\n }\n\n const translationsArray = metadataDocument[TRANSLATIONS_ARRAY_NAME]\n if (!translationsArray || translationsArray.length === 0) {\n return Promise.reject(new Error('No translations found in metadata document'))\n }\n\n // 1. Duplicate the document and its localized versions\n const translations = new Map<string, Id>()\n await Promise.all(\n // oxlint-disable-next-line consistent-return\n translationsArray.map(async (translation) => {\n const dupeId = uuid()\n const locale = translation[LANGUAGE_FIELD_NAME]\n const docId = translation.value?._ref\n\n if (typeof locale !== 'string' || locale.trim().length === 0) {\n return Promise.reject(new Error('Invalid locale for translation'))\n }\n if (!docId) {\n return Promise.reject(new Error('Translation document not found'))\n }\n\n const {duplicate: duplicateTranslation} = await firstValueFrom(\n documentStore.pair\n .editOperations(docId, type)\n .pipe(filter((op: EditOperations) => op.duplicate.disabled !== 'NOT_READY')),\n )\n\n if (duplicateTranslation.disabled) {\n return Promise.reject(new Error('Cannot duplicate document'))\n }\n\n const duplicateTranslationSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(docId, type)\n .pipe(\n filter((e: OperationSuccessEvent) => e.op === 'duplicate' && e.type === 'success'),\n ),\n )\n duplicateTranslation.execute(dupeId)\n await duplicateTranslationSuccess\n\n translations.set(locale, dupeId)\n }),\n )\n\n // 2. Duplicate the metadata document\n const {duplicate: duplicateMetadata} = await firstValueFrom(\n documentStore.pair\n .editOperations(metadataDocument._id, METADATA_SCHEMA_NAME)\n .pipe(filter((op: EditOperations) => op.duplicate.disabled !== 'NOT_READY')),\n )\n\n if (duplicateMetadata.disabled) {\n return Promise.reject(new Error('Cannot duplicate document'))\n }\n\n const duplicateMetadataSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(metadataDocument._id, METADATA_SCHEMA_NAME)\n .pipe(filter((e: OperationSuccessEvent) => e.op === 'duplicate' && e.type === 'success')),\n )\n const dupeId = uuid()\n duplicateMetadata.execute(dupeId)\n await duplicateMetadataSuccess\n\n // 3. Patch the duplicated metadata document to update the references\n const patch: PatchOperations = {\n set: Object.fromEntries(\n Array.from(translations.entries()).map(([locale, documentId]) => {\n return [\n `${TRANSLATIONS_ARRAY_NAME}[${LANGUAGE_FIELD_NAME} == \"${locale}\"].value._ref`,\n documentId,\n ]\n }),\n ),\n }\n\n await client.transaction().patch(dupeId, patch).commit()\n\n // 4. Navigate to the duplicated document\n navigateIntent('edit', {\n id: Array.from(translations.values()).at(0),\n type,\n })\n\n onComplete()\n }\n\n // Execute and handle success/error\n performDuplication()\n .catch((error: unknown) => {\n console.error(error)\n toast.push({\n status: 'error',\n title: 'Error duplicating document',\n description: error instanceof Error ? error.message : 'Failed to duplicate document',\n })\n })\n .finally(() => {\n setDuplicating(false)\n })\n }, [client, documentStore.pair, metadataDocument, navigateIntent, onComplete, toast, type])\n\n return useMemo(() => {\n if (!isPermissionsLoading && !permissions?.granted) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: (\n <InsufficientPermissionsMessage context=\"duplicate-document\" currentUser={currentUser} />\n ),\n }\n }\n\n if (!isMetadataDocumentLoading && !metadataDocument) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: d(DISABLED_REASON_KEY.METADATA_NOT_FOUND),\n }\n }\n\n if (!hasOneMetadataDocument) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: d(DISABLED_REASON_KEY.MULTIPLE_METADATA),\n }\n }\n\n return {\n icon: CopyIcon,\n disabled:\n isDuplicating ||\n Boolean(duplicate.disabled) ||\n isPermissionsLoading ||\n isMetadataDocumentLoading,\n label: isDuplicating ? s('action.duplicate.running.label') : d('action.duplicate.label'),\n title: duplicate.disabled ? s(DISABLED_REASON_KEY[duplicate.disabled]) : '',\n onHandle: handle,\n }\n }, [\n currentUser,\n duplicate.disabled,\n handle,\n hasOneMetadataDocument,\n isDuplicating,\n isMetadataDocumentLoading,\n isPermissionsLoading,\n metadataDocument,\n permissions?.granted,\n s,\n d,\n ])\n}\n\nuseDuplicateWithTranslationsAction.action = 'duplicate'\nuseDuplicateWithTranslationsAction.displayName = 'DuplicateWithTranslationsAction'\n\n/**\n * @deprecated use useDuplicateWithTranslationsAction instead\n * Will be removed in the next major version\n */\nexport const DuplicateWithTranslationsAction = (\n props: DocumentActionProps,\n): DocumentActionDescription => {\n return useDuplicateWithTranslationsAction(props)\n}\n\n/* oxlint-disable-next-line typescript-eslint/no-deprecated -- re-exported for backwards compatibility */\nDuplicateWithTranslationsAction.action = 'duplicate'\n/* oxlint-disable-next-line typescript-eslint/no-deprecated -- re-exported for backwards compatibility */\nDuplicateWithTranslationsAction.displayName = 'DuplicateWithTranslationsAction'\n","import {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\nimport {usePaneRouter} from 'sanity/structure'\n\nexport function useOpenInNewPane(id?: string | null, type?: string): () => void {\n const router = useRouter()\n const {routerPanesState, groupIndex} = usePaneRouter()\n\n const openInNewPane = useCallback(() => {\n if (!id || !type) {\n return\n }\n\n // No panes open, function might be called outside Structure\n if (!routerPanesState.length) {\n router.navigateIntent('edit', {id, type})\n return\n }\n\n const panes = [...routerPanesState]\n panes.splice(groupIndex + 1, 0, [\n {\n id: id,\n params: {type},\n },\n ])\n\n const href = router.resolvePathFromState({panes})\n router.navigateUrl({path: href})\n }, [id, type, router, routerPanesState, groupIndex])\n\n return openInNewPane\n}\n","import {randomKey} from '@sanity/util/content'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {TranslationReference} from '../types'\n\n/**\n * Creates a translation reference object used in metadata documents to link\n * a language key to a document. References are created as weak by default,\n * with optional strengthen-on-publish metadata so the reference becomes\n * strong once the referenced document is published.\n */\nexport function createReference(\n language: string,\n ref: string,\n type: string,\n strengthenOnPublish: boolean = true,\n): TranslationReference {\n return {\n [LANGUAGE_FIELD_NAME]: language,\n _key: randomKey(),\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref: ref,\n _weak: true,\n // If the user has configured weakReferences, we won't want to strengthen them\n ...(strengthenOnPublish ? {_strengthenOnPublish: {type}} : {}),\n },\n }\n}\n","import {CogIcon} from '@sanity/icons/Cog'\nimport {Box, Button, Stack, Text, Tooltip} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {type ObjectSchemaType, useClient} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport {createReference} from '../utils/createReference'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguageManageProps = {\n id?: string\n metadataId?: string | null\n schemaType: ObjectSchemaType\n documentId: string\n sourceLanguageId?: string\n}\n\n/**\n * Button component for opening or creating the translation metadata document.\n * When metadata already exists, clicking opens it in a new pane. When no\n * metadata exists and creation is allowed, clicking creates a new metadata\n * document with the source language reference and then opens it.\n */\nexport default function LanguageManage(props: LanguageManageProps) {\n const {id, metadataId, schemaType, documentId, sourceLanguageId} = props\n const open = useOpenInNewPane(id, METADATA_SCHEMA_NAME)\n const openCreated = useOpenInNewPane(metadataId, METADATA_SCHEMA_NAME)\n const {allowCreateMetaDoc, apiVersion, weakReferences} = useDocumentInternationalizationContext()\n const client = useClient({apiVersion})\n const [userHasClicked, setUserHasClicked] = useState(false)\n\n const canCreate = !id && Boolean(metadataId) && allowCreateMetaDoc\n\n const handleClick = useCallback(() => {\n if (!id && metadataId && sourceLanguageId) {\n /* Disable button while this request is pending */\n setUserHasClicked(true)\n\n // handle creation of meta document\n const transaction = client.transaction()\n\n const sourceReference = createReference(\n sourceLanguageId,\n documentId,\n schemaType.name,\n !weakReferences,\n )\n const newMetadataDocument = {\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType.name],\n translations: [sourceReference],\n }\n\n transaction.createIfNotExists(newMetadataDocument)\n\n transaction\n .commit()\n .then(() => {\n setUserHasClicked(false)\n openCreated()\n return undefined\n })\n .catch((err: unknown) => {\n console.error(err)\n setUserHasClicked(false)\n })\n } else {\n open()\n }\n }, [\n id,\n metadataId,\n sourceLanguageId,\n client,\n documentId,\n schemaType.name,\n weakReferences,\n openCreated,\n open,\n ])\n\n const disabled = (!id && !canCreate) || (canCreate && !sourceLanguageId) || userHasClicked\n\n return (\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Document has no other translations\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n disabled={Boolean(id) || canCreate}\n >\n <Stack>\n <Button\n disabled={disabled}\n mode=\"ghost\"\n text=\"Manage Translations\"\n icon={CogIcon}\n loading={userHasClicked}\n onClick={handleClick}\n />\n </Stack>\n </Tooltip>\n )\n}\n","import {extractWithPath, Mutation} from '@sanity/mutator'\nimport {\n isDocumentSchemaType,\n type ObjectSchemaType,\n type Path,\n pathToString,\n type SanityDocument,\n type SchemaType,\n} from 'sanity'\n\nexport interface DocumentMember {\n schemaType: SchemaType\n path: Path\n name: string\n value: unknown\n}\n\n/**\n * Removes fields from a document that are marked with the\n * `documentInternationalization.exclude` schema option. This is used when\n * duplicating a source document to create a translation, so that\n * language-specific or non-translatable fields are stripped from the copy.\n * Returns the document with excluded paths unset, or `null` if the input is null.\n */\nexport function removeExcludedPaths(\n doc: SanityDocument | null,\n schemaType: ObjectSchemaType,\n): SanityDocument | null {\n // If the supplied doc is null or the schemaType\n // isn't a document, return as is.\n if (!isDocumentSchemaType(schemaType) || !doc) {\n return doc\n }\n\n // The extractPaths function gets all the fields in the doc with\n // a value, along with their schemaTypes and paths. We'll end up\n // with an array of paths in string form which we want to exclude\n const pathsToExclude: string[] = extractPaths(doc, schemaType, [])\n // We filter for any fields which should be excluded from the document\n // duplicate action, based on the schemaType option being set.\n .filter((field) => field.schemaType?.options?.documentInternationalization?.exclude === true)\n // then we return the stringified version of the path\n .map((field) => {\n return pathToString(field.path)\n })\n\n // Now we can use the Mutation class from @sanity/mutator to patch the document\n // to remove all the paths that are for one of the excluded fields. This is just\n // done locally, and the documents themselves are not patched in the Content Lake.\n const mut = new Mutation({\n mutations: [\n {\n patch: {\n id: doc._id,\n unset: pathsToExclude,\n },\n },\n ],\n })\n\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n return mut.apply(doc) as SanityDocument\n}\n\nfunction extractPaths(\n doc: SanityDocument,\n schemaType: ObjectSchemaType,\n path: Path,\n): DocumentMember[] {\n const result: DocumentMember[] = []\n\n for (const field of schemaType.fields) {\n const fieldPath = [...path, field.name]\n const fieldSchema = field.type\n const {value} = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}\n if (value === undefined || value === null) {\n continue\n }\n\n const thisFieldWithPath: DocumentMember = {\n path: fieldPath,\n name: field.name,\n schemaType: fieldSchema,\n value,\n }\n\n if (fieldSchema.jsonType === 'object') {\n const innerFields = extractPaths(doc, fieldSchema, fieldPath)\n result.push(thisFieldWithPath, ...innerFields)\n } else if (\n fieldSchema.jsonType === 'array' &&\n fieldSchema.of.length &&\n fieldSchema.of.some((item) => 'fields' in item)\n ) {\n const {value: arrayValue} = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}\n\n result.push(thisFieldWithPath)\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n if ((arrayValue as unknown[])?.length) {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n for (const item of arrayValue as Array<{\n _key?: string\n language?: string\n _type?: string\n }>) {\n if (!item._key) continue\n const itemPath = [...fieldPath, {_key: item._key}] as Path\n let itemSchema = fieldSchema.of.find((t) => t.name === item._type)\n if (!item._type) {\n itemSchema = fieldSchema.of[0]\n }\n if (itemSchema) {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n const innerFields = extractPaths(doc, itemSchema as ObjectSchemaType, itemPath)\n const arrayMember: DocumentMember = {\n path: itemPath,\n name: item._key,\n schemaType: itemSchema,\n value: item,\n }\n result.push(arrayMember, ...innerFields)\n }\n }\n }\n } else {\n result.push(thisFieldWithPath)\n }\n }\n\n return result\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {CheckmarkIcon} from '@sanity/icons/Checkmark'\nimport {SplitVerticalIcon} from '@sanity/icons/SplitVertical'\nimport {Badge, Box, Button, Flex, Spinner, Text, Tooltip, useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useState} from 'react'\nimport {\n getDraftId,\n getVersionFromId,\n getVersionId,\n isVersionId,\n type ObjectSchemaType,\n type SanityDocument,\n useClient,\n} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport type {Language, Metadata, MetadataDocument, TranslationReference} from '../types'\nimport {createReference} from '../utils/createReference'\nimport {removeExcludedPaths} from '../utils/excludePaths'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguageOptionProps = {\n language: Language\n schemaType: ObjectSchemaType\n documentId: string\n disabled: boolean\n current: boolean\n source: SanityDocument | null\n metadataId: string | null\n metadata?: Metadata | null\n sourceLanguageId?: string\n}\n\n/**\n * Button component representing a single language in the translations menu.\n * Displays the language name, an ID badge, and a contextual icon: checkmark\n * for the current language, split-vertical for existing translations, or add\n * for new translations. Clicking opens an existing translation in a new pane,\n * or creates a new translation document via a Sanity transaction.\n */\nexport default function LanguageOption(props: LanguageOptionProps) {\n const {\n language,\n schemaType,\n documentId,\n current,\n source,\n sourceLanguageId,\n metadata,\n metadataId,\n } = props\n /* When the user has clicked the Create button, the button should be disabled\n * to prevent double-clicks from firing onCreate twice. This creates duplicate\n * translation metadata entries, which editors will not be able to delete */\n const [userHasClicked, setUserHasClicked] = useState(false)\n const disabled =\n props.disabled || userHasClicked || current || !source || !sourceLanguageId || !metadataId\n const translation: TranslationReference | undefined = metadata?.translations.length\n ? metadata.translations.find((t) => t[LANGUAGE_FIELD_NAME] === language.id)\n : undefined\n const {apiVersion, languageField, weakReferences, callback} =\n useDocumentInternationalizationContext()\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const open = useOpenInNewPane(translation?.value?._ref, schemaType.name)\n const handleOpen = useCallback(() => open(), [open])\n\n const handleCreate = useCallback(async () => {\n if (!source) {\n throw new Error(`Cannot create translation without source document`)\n }\n\n if (!sourceLanguageId) {\n throw new Error(`Cannot create translation without source language ID`)\n }\n\n if (!metadataId) {\n throw new Error(`Cannot create translation without a metadata ID`)\n }\n /* Disable the create button while this request is pending */\n setUserHasClicked(true)\n\n const transaction = client.transaction()\n\n // 1. Duplicate source document\n // If the source belongs to a release, create the translation\n // as a version in that same release, otherwise as a draft\n const newTranslationDocumentId = uuid()\n const sourceReleaseId = isVersionId(source._id) ? getVersionFromId(source._id) : undefined\n let newTranslationDocument = {\n ...source,\n _id: sourceReleaseId\n ? getVersionId(newTranslationDocumentId, sourceReleaseId)\n : getDraftId(newTranslationDocumentId),\n // 2. Update language of the translation\n [languageField]: language.id,\n }\n\n // Remove fields / paths we don't want to duplicate\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n newTranslationDocument = removeExcludedPaths(\n newTranslationDocument,\n schemaType,\n ) as SanityDocument\n\n transaction.create(newTranslationDocument)\n\n // 3. Maybe create the metadata document\n const sourceReference = createReference(\n sourceLanguageId,\n documentId,\n schemaType.name,\n !weakReferences,\n )\n const newTranslationReference = createReference(\n language.id,\n newTranslationDocumentId,\n schemaType.name,\n !weakReferences,\n )\n const newMetadataDocument: MetadataDocument = {\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType.name],\n translations: [sourceReference],\n }\n\n transaction.createIfNotExists(newMetadataDocument)\n\n // 4. Patch translation to metadata document\n // Note: If the document was only just created in the operation above\n // This patch operation will have no effect\n const metadataPatch = client\n .patch(metadataId)\n .setIfMissing({translations: [sourceReference]})\n .insert(`after`, `translations[-1]`, [newTranslationReference])\n\n transaction.patch(metadataPatch)\n\n // 5. Commit!\n transaction\n .commit()\n .then(() => {\n const metadataExisted = Boolean(metadata?._createdAt)\n\n toast.push({\n status: 'success',\n title: `Created \"${language.title}\" translation`,\n description: metadataExisted\n ? `Updated Translations Metadata`\n : `Created Translations Metadata`,\n })\n\n /* Once a translation has been created, reset the userHasClicked state to false\n * so they can click on it to navigate to the translation */\n setUserHasClicked(false)\n\n // Execute callback if provided\n if (callback) {\n // oxlint-disable-next-line eslint-plugin-promise/no-callback-in-promise -- This is an async callback, not a Node.js callback\n return callback({\n client,\n sourceLanguageId,\n sourceDocument: source,\n newDocument: newTranslationDocument,\n destinationLanguageId: language.id,\n metaDocumentId: metadataId,\n })\n }\n\n return undefined\n })\n .catch((err: Error) => {\n console.error(err)\n\n /* Re-enable the create button if there was an error */\n setUserHasClicked(false)\n\n return toast.push({\n status: 'error',\n title: `Error creating translation`,\n description: err.message,\n })\n })\n }, [\n client,\n documentId,\n language.id,\n language.title,\n languageField,\n metadata?._createdAt,\n metadataId,\n schemaType,\n source,\n sourceLanguageId,\n toast,\n weakReferences,\n callback,\n ])\n\n let message\n\n if (current) {\n message = `Current document`\n } else if (translation) {\n message = `Open ${language.title} translation`\n } else if (!translation) {\n message = `Create new ${language.title} translation`\n }\n\n return (\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n {message}\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n >\n <Button\n onClick={translation ? handleOpen : handleCreate}\n mode={current && disabled ? `default` : `bleed`}\n disabled={disabled}\n >\n <Flex gap={3} align=\"center\">\n {disabled && !current ? (\n <Spinner />\n ) : (\n <Text size={2}>\n {translation ? <SplitVerticalIcon /> : current ? <CheckmarkIcon /> : <AddIcon />}\n </Text>\n )}\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge tone={disabled || current ? `default` : `primary`}>{language.id}</Badge>\n </Flex>\n </Button>\n </Tooltip>\n )\n}\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {Badge, Box, Button, Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {type SanityDocument, useClient} from 'sanity'\n\nimport type {Language} from '../types'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguagePatchProps = {\n language: Language\n source: SanityDocument | null\n disabled: boolean\n}\n\n/**\n * Button component that patches the current document's language field to\n * the selected language. Displays the language name and ID badge, and shows\n * a success or error toast after the patch operation completes.\n */\nexport default function LanguagePatch(props: LanguagePatchProps) {\n const {language, source} = props\n const {apiVersion, languageField} = useDocumentInternationalizationContext()\n const disabled = props.disabled || !source\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const handleClick = useCallback(() => {\n if (!source) {\n throw new Error(`Cannot patch missing document`)\n }\n\n const currentId = source._id\n\n client\n .patch(currentId)\n .set({[languageField]: language.id})\n .commit()\n .then(() => {\n toast.push({\n title: `Set document language to ${language.title}`,\n status: `success`,\n })\n return undefined\n })\n .catch((err: unknown) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to set document language to ${language.title}`,\n status: `error`,\n })\n })\n }, [source, client, languageField, language, toast])\n\n return (\n <Button mode=\"bleed\" onClick={handleClick} disabled={disabled} justify=\"flex-start\">\n <Flex gap={3} align=\"center\">\n <Text size={2}>\n <EditIcon />\n </Text>\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge>{language.id}</Badge>\n </Flex>\n </Button>\n )\n}\n","import {Box} from '@sanity/ui'\n\nexport default function ConstrainedBox({children}: {children: React.ReactNode}): React.JSX.Element {\n return <Box style={{maxWidth: 280}}>{children}</Box>\n}\n","import {Card, Flex, Text} from '@sanity/ui'\nimport type {PropsWithChildren} from 'react'\n\nimport ConstrainedBox from './ConstrainedBox'\n\n/**\n * Presentational component that renders a caution-toned card with centered\n * text inside a constrained-width box. Used to display warning messages\n * in the internationalization UI.\n */\nexport default function Warning({children}: PropsWithChildren) {\n return (\n <Card tone=\"caution\" padding={3}>\n <Flex justify=\"center\">\n <ConstrainedBox>\n <Text size={1} align=\"center\">\n {children}\n </Text>\n </ConstrainedBox>\n </Flex>\n </Card>\n )\n}\n","import {TranslateIcon} from '@sanity/icons/Translate'\nimport {Box, Button, Card, Popover, Stack, Text, TextInput, useClickOutsideEvent} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport type {ChangeEvent} from 'react'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {useEditState, usePerspective} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport type {DocumentInternationalizationMenuProps} from '../types'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\nimport LanguageManage from './LanguageManage'\nimport LanguageOption from './LanguageOption'\nimport LanguagePatch from './LanguagePatch'\nimport Warning from './Warning'\n\nexport function DocumentInternationalizationMenu(\n props: DocumentInternationalizationMenuProps,\n): React.JSX.Element | null {\n const {documentId} = props\n const schemaType = props.schemaType\n const {languageField, supportedLanguages} = useDocumentInternationalizationContext()\n\n // Search filter query\n const [query, setQuery] = useState(``)\n const handleQuery = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n if (event.currentTarget.value) {\n setQuery(event.currentTarget.value)\n } else {\n setQuery(``)\n }\n }, [])\n\n // UI Handlers\n const [open, setOpen] = useState(false)\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n const buttonRef = useRef<HTMLButtonElement>(null)\n const popoverRef = useRef<HTMLDivElement>(null)\n const handleClickOutside = useCallback(() => setOpen(false), [])\n useClickOutsideEvent(handleClickOutside, () => [buttonRef.current, popoverRef.current])\n\n // Get metadata from content lake\n const {data, loading, error} = useTranslationMetadata(documentId)\n const metadata = Array.isArray(data) && data.length ? data[0] : null\n\n // Optimistically set a metadata ID for a newly created metadata document\n // Cannot rely on generated metadata._id from useTranslationMetadata\n // As the document store might not have returned it before creating another translation\n const metadataId = useMemo(() => {\n if (loading) {\n return null\n }\n\n // Once created, these two values should be the same anyway\n return metadata?._id ?? uuid()\n }, [loading, metadata?._id])\n\n // Duplicate a new language version from the most recent version of this document\n // When a release is selected, the version document is the source, so documents\n // that only exist in that release can still be translated\n const {selectedReleaseId} = usePerspective()\n const {draft, published, version} = useEditState(\n documentId,\n schemaType.name,\n 'default',\n selectedReleaseId,\n )\n const source = version || draft || published\n\n // Check for data issues\n const documentIsInOneMetadataDocument = useMemo(() => {\n return Array.isArray(data) && data.length <= 1\n }, [data])\n const rawLanguageValue = source?.[languageField]\n const sourceLanguageId = typeof rawLanguageValue === 'string' ? rawLanguageValue : undefined\n const sourceLanguageIsValid = supportedLanguages.some((l) => l.id === sourceLanguageId)\n const allLanguagesAreValid = useMemo(() => {\n const valid = supportedLanguages.every((l) => l.id && l.title)\n if (!valid) {\n console.warn(\n `Not all languages are valid. It should be an array of objects with an \"id\" and \"title\" property. Or a function that returns an array of objects with an \"id\" and \"title\" property.`,\n supportedLanguages,\n )\n }\n\n return valid\n }, [supportedLanguages])\n\n const content = (\n <Box padding={1}>\n {error ? (\n <Card tone=\"critical\" padding={1}>\n <Text>There was an error returning translations metadata</Text>\n </Card>\n ) : (\n <Stack gap={1}>\n <LanguageManage\n id={metadata?._id}\n documentId={documentId}\n metadataId={metadataId}\n schemaType={schemaType}\n sourceLanguageId={sourceLanguageId}\n />\n {supportedLanguages.length > 4 ? (\n <TextInput onChange={handleQuery} value={query} placeholder=\"Filter languages\" />\n ) : null}\n {supportedLanguages.length > 0 ? (\n <>\n {/* Once metadata is loaded, there may be issues */}\n {loading ? null : (\n <>\n {/* Not all languages are valid */}\n {data && documentIsInOneMetadataDocument ? null : (\n <Warning>\n {/* TODO: Surface these documents to the user */}\n This document has been found in more than one Translations Metadata document\n </Warning>\n )}\n {/* Not all languages are valid */}\n {allLanguagesAreValid ? null : (\n <Warning>Not all language objects are valid. See the console.</Warning>\n )}\n {/* Current document has no language field */}\n {sourceLanguageId ? null : (\n <Warning>\n Choose a language to apply to <strong>this Document</strong>\n </Warning>\n )}\n {/* Current document has an invalid language field */}\n {sourceLanguageId && !sourceLanguageIsValid ? (\n <Warning>\n Select a supported language. Current language value:{' '}\n <code>{sourceLanguageId}</code>\n </Warning>\n ) : null}\n </>\n )}\n {supportedLanguages\n .filter((language) => {\n if (query) {\n return language.title.toLowerCase().includes(query.toLowerCase())\n }\n return true\n })\n .map((language) =>\n !loading && sourceLanguageId && sourceLanguageIsValid ? (\n // Button to duplicate this document to a new translation\n // And either create or update the metadata document\n <LanguageOption\n key={language.id}\n language={language}\n schemaType={schemaType}\n documentId={documentId}\n disabled={!allLanguagesAreValid}\n current={language.id === sourceLanguageId}\n metadata={metadata}\n metadataId={metadataId}\n source={source}\n sourceLanguageId={sourceLanguageId}\n />\n ) : (\n // Button to set a language field on *this* document\n <LanguagePatch\n key={language.id}\n source={source}\n language={language}\n // Only allow language patch change to:\n // - Keys not in metadata\n // - The key of this document in the metadata\n disabled={\n (loading ||\n !allLanguagesAreValid ||\n metadata?.translations\n .filter((t) => t?.value?._ref !== documentId)\n .some((t) => t[LANGUAGE_FIELD_NAME] === language.id)) ??\n false\n }\n />\n ),\n )}\n </>\n ) : null}\n </Stack>\n )}\n </Box>\n )\n\n const issueWithTranslations = !loading && sourceLanguageId && !sourceLanguageIsValid\n\n if (!documentId) {\n return null\n }\n\n if (!schemaType || !schemaType.name) {\n return null\n }\n\n return (\n <Popover\n animate\n constrainSize\n content={content}\n open={open}\n portal\n ref={popoverRef}\n overflow=\"auto\"\n tone=\"default\"\n >\n <Button\n text=\"Translations\"\n mode=\"bleed\"\n disabled={!source}\n tone={!source || loading || !issueWithTranslations ? undefined : `caution`}\n icon={TranslateIcon}\n onClick={handleClick}\n ref={buttonRef}\n selected={open}\n />\n </Popover>\n )\n}\n","import {TrashIcon} from '@sanity/icons/Trash'\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {\n type DocumentActionDescription,\n type DocumentActionProps,\n type KeyedObject,\n type Reference,\n type TypedObject,\n useClient,\n} from 'sanity'\n\nimport {API_VERSION, TRANSLATIONS_ARRAY_NAME} from '../constants'\n\ntype TranslationReference = TypedObject &\n KeyedObject & {\n value: Reference\n }\n\n/**\n * Document action that deletes a translation metadata document along with all\n * its referenced translation documents. Opens a confirmation dialog showing\n * how many translations will be deleted. Executes a single transaction that\n * unsets the translations array, deletes each referenced document (both\n * published and draft), and finally deletes the metadata document itself.\n */\nexport const useDeleteMetadataAction = (props: DocumentActionProps): DocumentActionDescription => {\n const {id: documentId, published, draft} = props\n const doc = draft || published\n\n const [isDialogOpen, setDialogOpen] = useState(false)\n const onClose = useCallback(() => setDialogOpen(false), [])\n const translations: TranslationReference[] = useMemo(\n () =>\n doc && Array.isArray(doc[TRANSLATIONS_ARRAY_NAME])\n ? // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (doc[TRANSLATIONS_ARRAY_NAME] as TranslationReference[])\n : [],\n [doc],\n )\n\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n\n // Remove translation reference and delete document in one transaction\n const onProceed = useCallback(() => {\n const tx = client.transaction()\n\n tx.patch(documentId, (patch) => patch.unset([TRANSLATIONS_ARRAY_NAME]))\n\n if (translations.length > 0) {\n translations.forEach((translation) => {\n tx.delete(translation.value._ref)\n tx.delete(`drafts.${translation.value._ref}`)\n })\n }\n\n tx.delete(documentId)\n // Shouldn't exist as this document type is in liveEdit\n tx.delete(`drafts.${documentId}`)\n\n tx.commit()\n .then(() => {\n onClose()\n\n toast.push({\n status: 'success',\n title: 'Deleted document and translations',\n })\n return undefined\n })\n .catch((err: Error) => {\n toast.push({\n status: 'error',\n title: 'Failed to delete document and translations',\n description: err.message,\n })\n })\n }, [client, translations, documentId, onClose, toast])\n\n return {\n label: `Delete all translations`,\n disabled: !doc || !translations.length,\n icon: TrashIcon,\n tone: 'critical',\n onHandle: () => {\n setDialogOpen(true)\n },\n dialog: isDialogOpen && {\n type: 'confirm',\n onCancel: onClose,\n onConfirm: () => {\n onProceed()\n onClose()\n },\n tone: 'critical',\n message:\n translations.length === 1\n ? `Delete 1 translation and this document`\n : `Delete all ${translations.length} translations and this document`,\n },\n }\n}\n","import type {DocumentBadgeDescription, DocumentBadgeProps} from 'sanity'\n\nimport {useDocumentInternationalizationContext} from '../components/DocumentInternationalizationContext'\n\n/**\n * Document badge that displays the language identifier of a document.\n * Reads the configured `languageField` from the version, draft or published\n * document, looks up the matching language in `supportedLanguages` to resolve\n * the title, and returns a badge descriptor with `primary` color. Returns\n * `null` when no document exists or the language field is empty/non-string.\n */\nexport function LanguageBadge(props: DocumentBadgeProps): DocumentBadgeDescription | null {\n const source = props?.version || props?.draft || props?.published\n const {languageField, supportedLanguages} = useDocumentInternationalizationContext()\n const languageId = source?.[languageField]\n\n if (!languageId || typeof languageId !== 'string') {\n return null\n }\n\n const language = Array.isArray(supportedLanguages)\n ? supportedLanguages.find((l) => l.id === languageId)\n : null\n\n // Currently we only show the language id if the supportedLanguages are async\n return {\n label: language?.id ?? languageId,\n title: language?.title ?? undefined,\n color: `primary`,\n }\n}\n","import {Card, Spinner} from '@sanity/ui'\nimport {useEffect, useMemo} from 'react'\nimport {Preview, useEditState, useSchema, useValidationStatus} from 'sanity'\n\ntype DocumentCheckProps = {\n id: string\n onCheckComplete: (id: string) => void\n addInvalidId: (id: string) => void\n removeInvalidId: (id: string) => void\n addDraftId: (id: string) => void\n removeDraftId: (id: string) => void\n}\n\n// Check if the document has a draft\n// Check if that draft is valid\n// Report back to parent that it can be added to bulk publish\nexport default function DocumentCheck(props: DocumentCheckProps) {\n const {id, onCheckComplete, addInvalidId, removeInvalidId, addDraftId, removeDraftId} = props\n // Use empty string for type initially - we get the actual type from the loaded document\n const editState = useEditState(id, '')\n const documentType = editState.draft?._type ?? editState.published?._type ?? ''\n // oxlint-disable-next-line no-useless-default-assignment\n const {isValidating, validation = []} = useValidationStatus(id, documentType, false)\n const schema = useSchema()\n\n const validationHasErrors = useMemo(() => {\n return !isValidating && validation.some((item) => item.level === 'error')\n }, [isValidating, validation])\n\n useEffect(() => {\n if (validationHasErrors) {\n addInvalidId(id)\n } else {\n removeInvalidId(id)\n }\n\n if (editState.draft) {\n addDraftId(id)\n } else {\n removeDraftId(id)\n }\n\n if (!isValidating) {\n onCheckComplete(id)\n }\n }, [\n addDraftId,\n addInvalidId,\n editState.draft,\n id,\n isValidating,\n onCheckComplete,\n removeDraftId,\n removeInvalidId,\n validationHasErrors,\n ])\n\n // We only care about drafts\n if (!editState.draft) {\n return null\n }\n\n const schemaType = schema.get(editState.draft._type)\n\n return (\n <Card border padding={2} tone={validationHasErrors ? `critical` : `positive`}>\n {editState.draft && schemaType ? (\n <Preview layout=\"default\" value={editState.draft} schemaType={schemaType} />\n ) : (\n <Spinner />\n )}\n </Card>\n )\n}\n","import {Box, type ButtonTone, Text, Tooltip} from '@sanity/ui'\nimport type {ComponentType, PropsWithChildren} from 'react'\nimport {TextWithTone} from 'sanity'\n\ntype InfoIconProps = PropsWithChildren & {\n icon: ComponentType\n tone: ButtonTone\n text?: string\n}\n\nexport default function InfoIcon(props: InfoIconProps) {\n const {text, icon, tone, children} = props\n const Icon = icon\n\n return (\n <Tooltip\n animate\n portal\n content={\n children ? (\n <>{children}</>\n ) : (\n <Box padding={2}>\n <Text size={1}>{text}</Text>\n </Box>\n )\n }\n >\n <TextWithTone tone={tone} size={1}>\n <Icon />\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {InfoOutlineIcon} from '@sanity/icons/InfoOutline'\nimport {Box, Stack, Text} from '@sanity/ui'\n\nimport InfoIcon from './InfoIcon'\n\nexport default function Info() {\n return (\n <InfoIcon icon={InfoOutlineIcon} tone=\"primary\">\n <Stack padding={3} gap={4} style={{maxWidth: 250}}>\n <Box>\n <Text size={1}>Bulk publishing uses the Scheduling API.</Text>\n </Box>\n <Box>\n <Text size={1}>\n Customized Document Actions in the Studio will not execute. Webhooks will execute.\n </Text>\n </Box>\n <Box>\n <Text size={1}>\n Validation is checked before rendering the button below, but the Scheduling API will not\n check for – or enforce – validation.\n </Text>\n </Box>\n </Stack>\n </InfoIcon>\n )\n}\n","import {Button, Card, Dialog, Inline, Stack, Text, useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {TextWithTone, useClient, useWorkspace} from 'sanity'\n\nimport {API_VERSION} from '../../constants'\nimport type {TranslationReference} from '../../types'\nimport DocumentCheck from './DocumentCheck'\nimport Info from './Info'\n\nexport type BulkPublishProps = {\n translations: TranslationReference[]\n}\n\n// A root-level component with UI for hitting the Publishing API\nexport default function BulkPublish(props: BulkPublishProps) {\n const {translations} = props\n const client = useClient({apiVersion: API_VERSION})\n const {projectId, dataset} = useWorkspace()\n const toast = useToast()\n const [invalidIds, setInvalidIds] = useState<string[] | null>(null)\n const [checkedIds, setCheckedIds] = useState<string[]>([])\n\n const onCheckComplete = useCallback((id: string) => {\n setCheckedIds((ids) => Array.from(new Set([...ids, id])))\n }, [])\n\n // Handle dialog\n const [open, setOpen] = useState(false)\n const onOpen = useCallback(() => setOpen(true), [])\n const onClose = useCallback(() => setOpen(false), [])\n\n const addInvalidId = useCallback((id: string) => {\n setInvalidIds((ids) => (ids ? Array.from(new Set([...ids, id])) : [id]))\n }, [])\n\n const removeInvalidId = useCallback((id: string) => {\n setInvalidIds((ids) => (ids ? ids.filter((i) => i !== id) : []))\n }, [])\n\n const [draftIds, setDraftIds] = useState<string[]>([])\n\n const addDraftId = useCallback((id: string) => {\n setDraftIds((ids) => Array.from(new Set([...ids, id])))\n }, [])\n\n const removeDraftId = useCallback((id: string) => {\n setDraftIds((ids) => ids.filter((i) => i !== id))\n }, [])\n\n const handleBulkPublish = useCallback(() => {\n const body = translations.map((translation) => ({\n documentId: translation.value._ref,\n }))\n client\n .request({\n uri: `/publish/${projectId}/${dataset}`,\n method: 'POST',\n body,\n })\n .then(() => {\n toast.push({\n status: 'success',\n title: 'Success',\n description: 'Bulk publish complete',\n })\n return undefined\n })\n .catch((err: Error) => {\n console.error(err)\n toast.push({\n status: 'error',\n title: 'Error',\n description: 'Bulk publish failed',\n })\n })\n }, [translations, client, projectId, dataset, toast])\n\n const disabled =\n // Not all documents have been checked\n checkedIds.length !== translations.length ||\n // Some document(s) are invalid\n Boolean(invalidIds && invalidIds?.length > 0) ||\n // No documents are drafts\n !draftIds.length\n\n return translations?.length > 0 ? (\n <Card padding={4} border radius={2}>\n <Stack gap={3}>\n <Inline gap={3}>\n <Text weight=\"bold\" size={1}>\n Bulk publishing\n </Text>\n <Info />\n </Inline>\n\n <Stack>\n <Button onClick={onOpen} text=\"Prepare bulk publishing\" mode=\"ghost\" />\n </Stack>\n\n {open && (\n <Dialog\n animate\n header=\"Bulk publishing\"\n id=\"bulk-publish-dialog\"\n onClose={onClose}\n zOffset={1000}\n width={3}\n >\n <Stack gap={4} padding={4}>\n {draftIds.length > 0 ? (\n <Stack gap={2}>\n <Text size={1}>\n There{' '}\n {draftIds.length === 1\n ? `is 1 draft document`\n : `are ${draftIds.length} draft documents`}\n .\n </Text>\n {invalidIds && invalidIds.length > 0 ? (\n <TextWithTone tone=\"critical\" size={1}>\n {invalidIds.length === 1\n ? `1 draft document has`\n : `${invalidIds.length} draft documents have`}{' '}\n validation issues that must be addressed first\n </TextWithTone>\n ) : (\n <TextWithTone tone=\"positive\" size={1}>\n All drafts are valid and can be bulk published\n </TextWithTone>\n )}\n </Stack>\n ) : null}\n\n <Stack gap={1}>\n {translations\n .filter((translation) => translation?.value?._ref)\n .map((translation) => (\n <DocumentCheck\n key={translation._key}\n id={translation.value._ref}\n onCheckComplete={onCheckComplete}\n addInvalidId={addInvalidId}\n removeInvalidId={removeInvalidId}\n addDraftId={addDraftId}\n removeDraftId={removeDraftId}\n />\n ))}\n </Stack>\n {draftIds.length > 0 ? (\n <Button\n mode=\"ghost\"\n tone={invalidIds && invalidIds?.length > 0 ? 'caution' : 'positive'}\n text={\n draftIds.length === 1\n ? `Publish draft document`\n : `Bulk publish ${draftIds.length} draft documents`\n }\n onClick={handleBulkPublish}\n disabled={disabled}\n />\n ) : (\n <Text muted size={1}>\n No draft documents to publish\n </Text>\n )}\n </Stack>\n </Dialog>\n )}\n </Stack>\n </Card>\n ) : null\n}\n","import {useEffect} from 'react'\nimport {PatchEvent, unset, useClient, useEditState} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {API_VERSION} from '../../constants'\nimport type {TranslationReference} from '../../types'\n\ntype ReferencePatcherProps = {\n translation: TranslationReference\n documentType: string\n metadataId: string\n}\n\n// For every reference, check if it is published, and if so, strengthen the reference\nexport default function ReferencePatcher(props: ReferencePatcherProps) {\n const {translation, documentType, metadataId} = props\n const editState = useEditState(translation.value._ref, documentType)\n const client = useClient({apiVersion: API_VERSION})\n const {onChange} = useDocumentPane()\n\n useEffect(() => {\n if (\n // We have a reference\n translation.value._ref &&\n // It's still weak and not-yet-strengthened\n translation.value._weak &&\n // We also want to keep this check because maybe the user *configured* weak refs\n translation.value._strengthenOnPublish &&\n // The referenced document has just been published\n !editState.draft &&\n editState.published &&\n editState.ready\n ) {\n const referencePathBase = ['translations', {_key: translation._key}, 'value']\n\n onChange(\n new PatchEvent([\n unset([...referencePathBase, '_weak']),\n unset([...referencePathBase, '_strengthenOnPublish']),\n ]),\n )\n }\n }, [translation, editState, metadataId, client, onChange])\n\n return null\n}\n","import type {TranslationReference} from '../../types'\nimport ReferencePatcher from './ReferencePatcher'\n\ntype OptimisticallyStrengthenProps = {\n translations: TranslationReference[]\n metadataId: string\n}\n\n// There's no good reason to leave published references as weak\n// So this component will run on every render and strengthen them\nexport default function OptimisticallyStrengthen(props: OptimisticallyStrengthenProps) {\n // oxlint-disable-next-line no-useless-default-assignment\n const {translations = [], metadataId} = props\n\n if (!translations.length) {\n return null\n }\n\n return (\n <>\n {translations.map((translation) =>\n translation.value._strengthenOnPublish?.type ? (\n <ReferencePatcher\n key={translation._key}\n translation={translation}\n documentType={translation.value._strengthenOnPublish.type}\n metadataId={metadataId}\n />\n ) : null,\n )}\n </>\n )\n}\n","import {TranslateIcon} from '@sanity/icons/Translate'\nimport {defineField, defineType, type DocumentDefinition, type FieldDefinition} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport {METADATA_SCHEMA_NAME, TRANSLATIONS_ARRAY_NAME} from '../../constants'\nimport type {TranslationReference} from '../../types'\n\n/**\n * Creates the `translation.metadata` document schema definition. This schema\n * type stores the array of translation references linking all language versions\n * of a document together, along with the allowed schema types and any custom\n * metadata fields provided by the plugin consumer. The document uses `liveEdit`\n * so changes are published immediately without drafts.\n */\nexport default (\n schemaTypes: string[],\n metadataFields: FieldDefinition[],\n omnisearchVisibility = true,\n): DocumentDefinition =>\n defineType({\n type: 'document',\n name: METADATA_SCHEMA_NAME,\n title: 'Translation metadata',\n icon: TranslateIcon,\n liveEdit: true,\n __experimental_omnisearch_visibility: omnisearchVisibility,\n fields: [\n defineField({\n name: TRANSLATIONS_ARRAY_NAME,\n type: 'internationalizedArrayReference',\n }),\n defineField({\n name: 'schemaTypes',\n description:\n 'Optional: Used to filter the reference fields above so all translations share the same types.',\n type: 'array',\n of: [{type: 'string'}],\n options: {list: schemaTypes},\n readOnly: ({value}) => Boolean(value),\n }),\n ...metadataFields,\n ],\n preview: {\n select: {\n translations: TRANSLATIONS_ARRAY_NAME,\n documentSchemaTypes: 'schemaTypes',\n },\n prepare(selection) {\n const {translations = [], documentSchemaTypes = []} = selection\n const title =\n translations.length === 1 ? `1 Translation` : `${translations.length} Translations`\n const languageKeys = translations.length\n ? translations\n .map((t: TranslationReference) => t[LANGUAGE_FIELD_NAME].toUpperCase())\n .join(', ')\n : ``\n const subtitle = [\n languageKeys ? `(${languageKeys})` : null,\n documentSchemaTypes?.length ? documentSchemaTypes.map((s: string) => s).join(`, `) : ``,\n ]\n .filter(Boolean)\n .join(` `)\n\n return {\n title,\n subtitle,\n }\n },\n },\n })\n","import {Stack} from '@sanity/ui'\nimport {defineField, definePlugin, isSanityDocument} from 'sanity'\nimport {internationalizedArray, LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport {useDeleteMetadataAction} from './actions/DeleteMetadataAction'\nimport {LanguageBadge} from './badges'\nimport BulkPublish from './components/BulkPublish'\nimport {DocumentInternationalizationProvider} from './components/DocumentInternationalizationContext'\nimport {DocumentInternationalizationMenu} from './components/DocumentInternationalizationMenu'\nimport OptimisticallyStrengthen from './components/OptimisticallyStrengthen'\nimport {API_VERSION, DEFAULT_CONFIG, METADATA_SCHEMA_NAME} from './constants'\nimport {documentInternationalizationUsEnglishLocaleBundle} from './i18n'\nimport metadata from './schema/translation/metadata'\nimport type {PluginConfig, TranslationReference} from './types'\n\nexport const documentInternationalization = definePlugin<PluginConfig>((config) => {\n const pluginConfig = {...DEFAULT_CONFIG, ...config}\n const {\n supportedLanguages,\n schemaTypes,\n languageField,\n bulkPublish,\n metadataFields,\n hideLanguageFilter,\n metadataOmnisearchVisibility,\n metadataInternationalization,\n addTemplates,\n } = pluginConfig\n\n if (schemaTypes.length === 0) {\n throw new Error(\n 'You must specify at least one schema type on which to enable document internationalization. Update the `schemaTypes` option in the documentInternationalization() configuration.',\n )\n }\n\n return {\n name: '@sanity/document-internationalization',\n\n studio: {\n components: {\n layout: (props) => (\n <DocumentInternationalizationProvider {...props} pluginConfig={pluginConfig} />\n ),\n },\n },\n\n i18n: {\n bundles: [documentInternationalizationUsEnglishLocaleBundle],\n },\n\n // Adds:\n // - A bulk-publishing UI component to the form\n // - Will only work for projects on a compatible plan\n form: {\n components: {\n input: (props) => {\n if (\n props.id === 'root' &&\n props.schemaType.name === METADATA_SCHEMA_NAME &&\n isSanityDocument(props?.value)\n ) {\n const metadataId = props?.value?._id\n const translations =\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (props?.value?.['translations'] as TranslationReference[]) ?? []\n const weakAndTypedTranslations = translations.filter(\n ({value}) => value?._weak && value._strengthenOnPublish,\n )\n\n return (\n <Stack gap={5}>\n {bulkPublish ? <BulkPublish translations={translations} /> : null}\n {weakAndTypedTranslations.length > 0 ? (\n <OptimisticallyStrengthen\n metadataId={metadataId}\n translations={weakAndTypedTranslations}\n />\n ) : null}\n {props.renderDefault(props)}\n </Stack>\n )\n }\n\n return props.renderDefault(props)\n },\n },\n },\n\n // Adds:\n // - The `Translations` dropdown to the editing form\n // - `Badges` to documents with a language value\n // - The `DeleteMetadataAction` action to the metadata document type\n document: {\n unstable_languageFilter: (prev, ctx) => {\n const {schemaType, documentId} = ctx\n\n if (typeof hideLanguageFilter === 'function') {\n if (hideLanguageFilter(ctx)) return prev\n } else if (Array.isArray(hideLanguageFilter)) {\n if (hideLanguageFilter.includes(schemaType)) return prev\n } else if (hideLanguageFilter) {\n return prev\n }\n\n return schemaTypes.includes(schemaType) && documentId\n ? [...prev, (props) => DocumentInternationalizationMenu({...props, documentId})]\n : prev\n },\n badges: (prev, {schemaType}) => {\n if (!schemaTypes.includes(schemaType)) {\n return prev\n }\n\n return [(props) => LanguageBadge(props), ...prev]\n },\n actions: (prev, {schemaType}) => {\n if (schemaType === METADATA_SCHEMA_NAME) {\n return [...prev, useDeleteMetadataAction]\n }\n\n return prev\n },\n },\n\n // Adds:\n // - The `Translations metadata` document type to the schema\n schema: {\n // Create the metadata document type\n types: [metadata(schemaTypes, metadataFields, metadataOmnisearchVisibility)],\n\n // For every schema type this plugin is enabled on\n // Create an initial value template to set the language\n templates: (prev, {schema}) => {\n if (!addTemplates) {\n return prev\n }\n\n // Templates are not setup for async languages\n if (!Array.isArray(supportedLanguages)) {\n return prev\n }\n\n const parameterizedTemplates = schemaTypes.map((schemaType) => ({\n id: `${schemaType}-parameterized`,\n title: `${schema?.get(schemaType)?.title ?? schemaType}: with Language`,\n schemaType,\n parameters: [{name: `languageId`, title: `Language ID`, type: `string`}],\n value: ({languageId}: {languageId: string}) => ({\n [languageField]: languageId,\n }),\n }))\n\n const staticTemplates = schemaTypes.flatMap((schemaType) => {\n return supportedLanguages.map((language) => ({\n id: `${schemaType}-${language.id}`,\n title: `${language.title} ${schema?.get(schemaType)?.title ?? schemaType}`,\n schemaType,\n value: {\n [languageField]: language.id,\n },\n }))\n })\n\n return [...prev, ...parameterizedTemplates, ...staticTemplates]\n },\n },\n\n // Uses:\n // - `sanity-plugin-internationalized-array` to maintain the translations array\n plugins: [\n // Translation metadata stores its references using this plugin\n // It cuts down on attribute usage and gives UI conveniences to add new translations\n internationalizedArray({\n ...metadataInternationalization,\n apiVersion: pluginConfig.apiVersion,\n languages: supportedLanguages,\n includeForDocumentType: (documentType) => documentType === METADATA_SCHEMA_NAME,\n fieldTypes: [\n defineField(\n {\n name: 'reference',\n type: 'reference',\n to: schemaTypes.map((type) => ({type})),\n weak: pluginConfig.weakReferences,\n // Reference filters don't actually enforce validation!\n validation: (Rule) =>\n // @ts-expect-error - fix typings\n Rule.custom(async (item: TranslationReference, context) => {\n if (!item?.value?._ref || !item?.[LANGUAGE_FIELD_NAME]) {\n return true\n }\n\n const client = context.getClient({apiVersion: API_VERSION})\n const valueLanguage = await client.fetch(\n `*[_id in [$ref, $draftRef]][0].${languageField}`,\n {\n ref: item.value._ref,\n draftRef: `drafts.${item.value._ref}`,\n },\n )\n\n if (valueLanguage && valueLanguage === item[LANGUAGE_FIELD_NAME]) {\n return true\n }\n\n return `Referenced document does not have the correct language value`\n }),\n options: {\n // @ts-expect-error - Update type once it knows the values of this filter\n filter: ({parent, document}) => {\n if (!parent) return null\n\n // I'm not sure in what instance there's an array of parents\n // But the Type suggests it's possible\n const parentArray = Array.isArray(parent) ? parent : [parent]\n const language = parentArray.find((p) => p[LANGUAGE_FIELD_NAME])\n\n if (!language?.[LANGUAGE_FIELD_NAME]) return null\n\n if (document['schemaTypes']) {\n return {\n filter: `_type in $schemaTypes && ${languageField} == $language`,\n params: {\n schemaTypes: document['schemaTypes'],\n language: language[LANGUAGE_FIELD_NAME],\n },\n }\n }\n\n return {\n filter: `${languageField} == $language`,\n params: {language: language[LANGUAGE_FIELD_NAME]},\n }\n },\n },\n },\n {strict: false},\n ),\n ],\n }),\n ],\n }\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AASA,SAAeM,gBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GACbC,SAAeT,UAAU,GAACU;CAAA,AAAAH,EAAA,OAAAD,MAAAF,QAAAG,EAAA,OAAAE,UAEPC,KAAAD,OAAME,IAAKL,MAAKF,IAAK,GAACG,EAAA,KAAAD,MAAAF,MAAAG,EAAA,KAAAE,QAAAF,EAAA,KAAAG,MAAAA,KAAAH,EAAA;CAAzC,IAAAK,aAAmBF;CACnB,IAAI,CAACE,YAAU;EAAA,IAAAC;EACoD,OADpDN,EAAA,OAAAO,OAAAC,IAAA,2BAAA,KACNF,KAAA,oBAAC,UAAD;GAAe,MAAA;GAAiB,OAAA;EAAuB,CAAA,GAAGN,EAAA,KAAAM,MAAAA,KAAAN,EAAA,IAA1DM;CAA0D;CAClE,IAAAA;CAE6D,OAF7DN,EAAA,OAAAD,MAAAH,SAAAI,EAAA,OAAAK,cAEMC,KAAA,oBAAC,SAAD;EAAgB,OAAAP,MAAKH;EAAoBS;CAAU,CAAA,GAAIL,EAAA,KAAAD,MAAAH,OAAAI,EAAA,KAAAK,YAAAL,EAAA,KAAAM,MAAAA,KAAAN,EAAA,IAAvDM;AAAuD;ACfhE,MAAaI,uBAAuB,wBACvBC,0BAA0B,gBAC1BC,cAAc,cACdC,iBAAsC;CACjDC,oBAAoB,CAAA;CACpBC,aAAa,CAAA;CACbC,eAAe;CACfC,gBAAgB;CAChBC,aAAa;CACbC,gBAAgB,CAAA;CAChBC,YAAYR;CACZS,oBAAoB;CACpBC,UAAU;CACVC,oBAAoB;CACpBC,8BAA8B;CAC9BC,cAAc;AAChB;;;;;;;ACRA,SAAgBG,mBAAmBC,OAAgC,CAAA,GAGjE;CACA,IAAMC,eAAiC,CAAA,GACjCC,kBAAoC,CAAA;CAY1C,OAVIF,QAAQA,KAAKG,SAAS,KACxBH,KAAKI,SAASC,QAAQ;EACpB,AAAIA,IAAIC,UAAUR,uBAChBG,aAAaM,KAAKF,GAAG,IAErBH,gBAAgBK,KAAKF,GAAG;CAE5B,CAAC,GAGI;EAACJ;EAAcC;CAAe;AACvC;ACbA,SAAeuB,wBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAP,KAAAC,YAAAC,oBAA2CG,OAAKG;CAAA,AAAAF,EAAA,OAAAL,aAMpBO,KAAAF,EAAA,MAAhBE,KAAA,EAAAC,IAAKR,WAAU,GAACK,EAAA,KAAAL,YAAAK,EAAA,KAAAE;CAAA,IAAAE;CAAA,AAAAJ,EAAA,OAAAK,OAAAC,IAAA,2BAAA,KACVF,KAAA,CAAA,GAAEJ,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CAAA,IAAAO;CAAA,AAAAP,EAAA,OAAAE,KACjBK,KAAAP,EAAA,MAHDO,KAAA;EAAAC,QACUN;EAAgBO,cACVL;CAChB,GAACJ,EAAA,KAAAE,IAAAF,EAAA,KAAAO;CALH,IAAA,EAAAG,MAAAC,YAAwBtB,kBACtB,gDACAkB,EAIF,GAACK;CAAA,AAAAZ,EAAA,OAAAU,OAC6EE,KAAAZ,EAAA,MAAxBY,KAAApB,mBAAmBkB,IAAI,GAACV,EAAA,KAAAU,MAAAV,EAAA,KAAAY;CAA9E,IAAA,EAAAf,cAAAgB,oBAAsDD,IAAiCE,IAAAC;CAOvF,IAPuFf,EAAA,OAAAJ,mBAAAI,EAAA,OAAAH,gBAE7EiB,WAAA;EAERlB,gBAAgBC,YAAkC;CAAC,GAClDkB,KAAA,CAACnB,iBAAiBC,YAAY,GAACG,EAAA,KAAAJ,iBAAAI,EAAA,KAAAH,cAAAG,EAAA,KAAAc,IAAAd,EAAA,MAAAe,OAAAD,KAAAd,EAAA,IAAAe,KAAAf,EAAA,MAHlCd,UAAU4B,IAGPC,EAA+B,GAE9BJ,SAAO;EAAA,IAAAK;EAIA,OAJAhB,EAAA,QAAAK,OAAAC,IAAA,2BAAA,KAEPU,KAAA,oBAAC,MAAD;GAAe,SAAA;GAAS,OAAA;GAAiB,SAAA;aACvC,oBAAC,SAAD,CAAQ,CAAA;EADL,CAAA,GAEEhB,EAAA,MAAAgB,MAAAA,KAAAhB,EAAA,KAFPgB;CAEO;CAEV,IAAAA;CAAA,AAAAhB,EAAA,QAAAH,eAUImB,KAAAhB,EAAA,OANAgB,KAAAnB,gBAAgBA,aAAYoB,SAAU,IACrC,oBAAC,MAAD,EAAA,UAAM,mFAAD,CAAA,IAIL,oBAAC,MAAD,EAAA,UAAM,sDAAD,CAAA,GACNjB,EAAA,MAAAH,cAAAG,EAAA,MAAAgB;CAAA,IAAAE;CAAA,AAAAlB,EAAA,QAAAH,eASUqB,KAAAlB,EAAA,OANPkB,KAAA,oBAAC,MAAD;EAAY,MAAA;EAAU,QAAA;YACnBrB,gBAAgBA,aAAYoB,SAAU,IAAtC,oBAAA,UAAA,EAAA,UACG,sCAAmC,CAAA,IADtC,oBAAA,UAAA,EAAA,UAGG,mCAAgC,CAAA;CAJjC,CAAA,GAMEjB,EAAA,MAAAH,cAAAG,EAAA,MAAAkB;CAAA,IAAAC;CAAA,AAAAnB,EAAA,QAAAN,MACyCyB,KAAAnB,EAAA,OAAhDmB,KAAA,oBAAC,iBAAD;EAAwBzB,OAAAA;EAAW,MAAAA,IAAG0B;CAAM,CAAA,GAAIpB,EAAA,MAAAN,KAAAM,EAAA,MAAAmB;CAAA,IAAAE;CAAA,AAAArB,EAAA,QAAAH,eAmBxCwB,KAAArB,EAAA,OAlBPqB,KAAAxB,gBAAgBA,aAAYoB,SAAU,IAAtC,qBAAA,UAAA,EAAA,UAAA;EAEG,oBAAC,MAAD,EAAM,WAAA,GAAS,CAAA;EACf,qBAAC,MAAD;GAAY,MAAA;GAAU,QAAA;aAAtB;IAAiC;IACd;IAChBpB,aAAYoB,WAAY,IAAxB,+BAAA;IAEmC;IAAI;GAJrC;;EAOJpB,aAAYyB,IAAKC,OAMjB;CAAC,EAAA,CAAA,IAhBL,MAkBOvB,EAAA,MAAAH,cAAAG,EAAA,MAAAqB;CAAA,IAAAG;CAAA,AAAAxB,EAAA,QAAAa,kBAcAW,MAAAxB,EAAA,OAbPwB,MAAAX,mBAAmBA,gBAAeI,SAAU,IAA5C,qBAAA,UAAA,EAAA,UAAA;EAEG,oBAAC,MAAD,EAAM,WAAA,GAAS,CAAA;EACf,qBAAC,MAAD;GAAY,MAAA;GAAU,QAAA;aAAtB;IACGJ,gBAAeI,WAAY,IAA3B,qCAAA;IAEsC;IAAI;GAHxC;;EAMJJ,gBAAeS,IAAKG,QAEpB;CAAC,EAAA,CAAA,IAXL,MAaOzB,EAAA,MAAAa,iBAAAb,EAAA,MAAAwB;CAAA,IAAAE;CAAA,AAAA1B,EAAA,QAAAwB,OAAAxB,EAAA,QAAAkB,MAAAlB,EAAA,QAAAmB,MAAAnB,EAAA,QAAAqB,MA1CZK,MAAA,oBAAC,MAAD;EAAM,QAAA;EAAgB,SAAA;YACpB,qBAAC,OAAD;GAAY,KAAA;aAAZ;IACER;IAOAC;IACCE;IAmBAG;GA5BG;;CADH,CAAA,GA4CExB,EAAA,MAAAwB,KAAAxB,EAAA,MAAAkB,IAAAlB,EAAA,MAAAmB,IAAAnB,EAAA,MAAAqB,IAAArB,EAAA,MAAA0B,OAAAA,MAAA1B,EAAA;CAAA,IAAA2B;CAAA,AAAA3B,EAAA,QAAAa,gBAAAI,SAONU,MAAA3B,EAAA,OANA2B,MAAAd,gBAAeI,WAAY,IAC1B,oBAAC,MAAD,EAAA,UAAM,yCAAD,CAAA,IAEL,oBAAC,MAAD,EAAA,UAAM,mFAAD,CAAA,GAGNjB,EAAA,MAAAa,gBAAAI,QAAAjB,EAAA,MAAA2B;CAAA,IAAAC;CACK,OADL5B,EAAA,QAAA0B,OAAA1B,EAAA,QAAA2B,OAAA3B,EAAA,QAAAgB,MA3DHY,MAAA,qBAAC,OAAD;EAAY,KAAA;YAAZ;GACGZ;GAODU;GA6CCC;EArDG;KA4DE3B,EAAA,MAAA0B,KAAA1B,EAAA,MAAA2B,KAAA3B,EAAA,MAAAgB,IAAAhB,EAAA,MAAA4B,OAAAA,MAAA5B,EAAA,KA5DR4B;AA4DQ;AAvFG,SAAAH,SAAAI,WAAA;CAAA,OA0EC,oBAAC,iBAAD;EAA4CA,OAAAA;EAAiB,MAAAA,UAAST;CAAM,GAAtDS,UAASC,GAA6C;AAAI;AA1EjF,SAAAP,QAAAQ,aAAA;CAAA,OAwDC,oBAAC,iBAAD;EAESA,OAAAA;EACD,MAAAA,YAAWX;CAAM,GAFlBW,YAAWD,GAEO;AACvB;ACnElB,SAAeQ,wBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GACb,EAAAN,cAAAC,SAAAC,cAA2CE,OAAKG;CAAA,AAAAF,EAAA,OAAAJ,UAIWM,KAAAF,EAAA,MAAvDE,KAAA,oBAAC,QAAD;EAAa,MAAA;EAAkBN,SAAAA;EAAc,MAAA;CAAO,CAAA,GAAGI,EAAA,KAAAJ,SAAAI,EAAA,KAAAE;CAGnD,IAAAC,KAAAR,gBAAgBA,aAAYS,SAAU,IAAtC,gCAAA,mBAEqBC;CAAA,AAAAL,EAAA,OAAAH,aAAAG,EAAA,OAAAG,MAJzBE,KAAA,oBAAC,QAAD;EAEI,MAAAF;EAION,SAAAA;EACJ,MAAA;CAAU,CAAA,GACfG,EAAA,KAAAH,WAAAG,EAAA,KAAAG,IAAAH,EAAA,KAAAK,MAAAA,KAAAL,EAAA;CAAA,IAAAM;CACG,OADHN,EAAA,OAAAE,MAAAF,EAAA,OAAAK,MAVJC,KAAA,qBAAC,MAAD;EAA2B,qBAAA;EAAQ,KAAA;YAAnC,CACEJ,IACAG,EAFG;KAWEL,EAAA,KAAAE,IAAAF,EAAA,KAAAK,IAAAL,EAAA,KAAAM,MAAAA,KAAAN,EAAA,IAXPM;AAWO;AChBX,MAAMW,sCAAsCV,cAAmCO,cAAc;AAE7F,SAAOI,yCAAA;CAAA,OACET,WAAWQ,mCAAmC;AAAC;AASxD,MAAMO,+BAAe,IAAIC,IAAgE;AAEzF,SAASE,eAAeC,aAA6B;CACnD,OAAO,aAAaA;AACtB;AAEA,SAASC,mBACPC,IACAC,UACoD;CACpD,IAAMC,SAASR,aAAaS,IAAIF,QAAQ;CACxC,IAAIC,QACF,OAAOA;CAET,IAAME,UAAUJ,GAAG;CAEnB,OADAN,aAAaW,IAAIJ,UAAUG,OAAO,GAC3BA;AACT;;;;AAKA,SAAOE,qCAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAGL,EAAAnB,iBAAuBiB,OAAKG;CAAA,AAAAF,EAAA,OAAAlB,aAAAqB,aAEkCD,KAAAF,EAAA,MAArCE,KAAA,EAAAC,YAAarB,aAAYqB,WAAW,GAACH,EAAA,KAAAlB,aAAAqB,YAAAH,EAAA,KAAAE;CAA9D,IAAAE,SAAe9B,UAAU4B,EAAqC,GAI9DZ,cAHkBf,aAGgB8B,CAAS,CAAAC,QAAT,IAAkCC;CAAA,AAAAP,EAAA,OAAAV,cAGViB,KAAAP,EAAA,MAA3BO,KAAAlB,eAAeC,WAAW,GAACU,EAAA,KAAAV,aAAAU,EAAA,KAAAO;CAA1D,IAAAd,WAA+Bc,IAA2CC;CAAAC,KAAA;EAIxE,IAAIC,MAAKC,QAAS7B,aAAY8B,kBAAmB,GAAC;GAChDJ,KAAO;GAAP,MAAAC;EAAW;EACZ,IAAAI;EAAA,AAAAb,EAAA,OAAAI,UAAAJ,EAAA,OAAAlB,gBAGyB+B,KAAA,YACpB,OAAO/B,aAAY8B,sBAAwB,aACtC9B,aAAY8B,mBAAoBR,MAAM,IAExCtB,aAAY8B,oBACpBZ,EAAA,KAAAI,QAAAJ,EAAA,KAAAlB,cAAAkB,EAAA,KAAAa,MAAAA,KAAAb,EAAA;EAAA,IAAAc;EALDN,AAKCR,EAAA,OAAAP,YAAAO,EAAA,OAAAa,MALMC,KAAAvB,mBAAmBsB,IAKvBpB,QAAQ,GAACO,EAAA,KAAAP,UAAAO,EAAA,KAAAa,IAAAb,EAAA,KAAAc,MAAAA,KAAAd,EAAA,IALZQ,KAAOM;CAKK;CAXd,IAAAC,mBAAyBP,IAezBI,qBAA2BG,mBACvB7C,IAAI6C,gBAEyE,IAA5EjC,aAAY8B,oBAAiEC;CAAA,AAAAb,EAAA,QAAAlB,gBAAAkB,EAAA,QAAAY,sBAGzEC,KAAA;EAAA,GAAI/B;EAAY8B;CAAoB,GAACZ,EAAA,MAAAlB,cAAAkB,EAAA,MAAAY,oBAAAZ,EAAA,MAAAa,MAAAA,KAAAb,EAAA;CAD9C,IAAAgB,eACSH,IAERC;CAAA,AAAAd,EAAA,QAAAD,QAI8Be,KAAAd,EAAA,OAA1Bc,KAAAf,MAAKkB,cAAelB,KAAK,GAACC,EAAA,MAAAD,OAAAC,EAAA,MAAAc;CAAA,IAAAI;CACkB,OADlBlB,EAAA,QAAAgB,gBAAAhB,EAAA,QAAAc,MAD7BI,KAAA,oBAAA,oCAAA,UAAA;EAAqDF,OAAAA;YAClDF;CACH,CAAA,GAA+Cd,EAAA,MAAAgB,cAAAhB,EAAA,MAAAc,IAAAd,EAAA,MAAAkB,MAAAA,KAAAlB,EAAA,KAF/CkB;AAE+C;;;;;;;;;;;;;;;;;;;;;AClDnD,MAAagB,8BAA6BC,UAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAGxC,EAAAC,IAAAC,YAAAC,WAAAC,UAA2CN,OAC3CO,MAAYD,SAAAD,WACZ,EAAAG,kBAAwBd,uCAAuC,GAE/D,CAAAe,cAAAC,iBAAsCvB,SAAS,EAAK,GAACwB;CAAA,AAAAV,EAAA,OAAAW,OAAAC,IAAA,2BAAA,KACgBF,KAAA,CAAA,GAAEV,EAAA,KAAAU,MAAAA,KAAAV,EAAA;CAAvE,IAAA,CAAAa,cAAAC,mBAAwC5B,SAA6BwB,EAAE,GAACK;CAAA,AAAAf,EAAA,OAAAW,OAAAC,IAAA,2BAAA,KAC5CG,WAAMN,cAAc,EAAK,GAACT,EAAA,KAAAe,MAAAA,KAAAf,EAAA;CAAtD,IAAAgB,UAAgBD,IAChBE,sBAA4BX,MAAMA,IAAIC,iBAAV,MAC5BW,mBAAyB,OAAOD,uBAAwB,WAA/BA,sBAAA,MAEzBE,QAAcnC,SAAS,GAACoC;CAAA,AAAApB,EAAA,OAAAW,OAAAC,IAAA,2BAAA,KACCQ,KAAA,EAAAC,YAAa3B,YAAW,GAACM,EAAA,KAAAoB,MAAAA,KAAApB,EAAA;CAAlD,IAAAsB,SAAenC,UAAUiC,EAAyB,GAACG;CAAA,AAAAvB,EAAA,OAAAsB,UAAAtB,EAAA,OAAAG,cAAAH,EAAA,OAAAkB,oBAAAlB,EAAA,OAAAmB,SAAAnB,EAAA,OAAAa,gBAErBU,WAAA;EAC5B,IAAAC,KAAWF,OAAMG,YAAa,GAC9BC,YAAiC;EAgBjCF,AAdIN,oBAAoBL,aAAYc,SAAU,KAC5CD,YAAYA,SACZb,aAAYe,SAASC,gBAAA;GACnBL,GAAEM,MAAOD,YAAWE,MAAMD,UACxBA,MAAKE,MAAO,CACV,GAAGrC,wBAAuB,GAAIL,oBAAmB,OAAQ4B,iBAAgB,GAAI,CAC9E,CACH;EAAC,CACF,MAEDM,GAAES,OAAQ9B,UAAU,GACpBqB,GAAES,OAAQ,UAAU9B,YAAY,IAGlCqB,GAAEU,OAAQ,CAAC,CAAAC,WACH;GAIJhB,AAHIO,cAAc,YAChBV,QAAQ,GAEVG,MAAKiB,KAAM;IAAAC,QACD;IAASC,OACVZ,cAAc,UAAd,gCAAA;IAA0Ea,aACpEb,cAAc,UAAd,oCAAA;GACf,CAAC;EAAC,CAEH,CAAC,CAAAc,OACKC,QAAA;GACLtB,MAAKiB,KAAM;IAAAC,QACD;IAAOC,OAEbZ,cAAc,UAAd,0CAAA;IAE+Ba,aACpBE,IAAGC;GAClB,CAAC;EAAC,CACH;CAAC,GACL1C,EAAA,KAAAsB,QAAAtB,EAAA,KAAAG,YAAAH,EAAA,KAAAkB,kBAAAlB,EAAA,KAAAmB,OAAAnB,EAAA,KAAAa,cAAAb,EAAA,KAAAuB,MAAAA,KAAAvB,EAAA;CAxCD,IAAA2C,YAAkBpB,IA4CNqB,KAAA,CAACtC,OAAD,CAASY,kBAAgB2B;CAAA,AAAA7C,EAAA,OAAAW,OAAAC,IAAA,2BAAA,KAGzBiC,WAAA;EACRpC,cAAc,EAAI;CAAC,GACpBT,EAAA,KAAA6C,MAAAA,KAAA7C,EAAA;CAAA,IAAA8C;CAAA,AAAA9C,EAAA,QAAAM,OAAAN,EAAA,QAAAG,cAAAH,EAAA,QAAAQ,gBAAAR,EAAA,QAAA2C,aAAA3C,EAAA,QAAAa,gBACOiC,KAAAtC,gBAAA;EAAAuC,MACA;EAAQ/B;EAAAgC,QAEN;EAAoBC,SACnB3C,MACP,oBAAC,yBAAD;GACOA;GACOH;GACKW;EAAe,CAAA,IAJ3B;EAMDoC,QAEN,oBAAC,yBAAD;GACWlC;GACE2B;GACG9B;EAAY,CAAA;CAGhC,GAACb,EAAA,MAAAM,KAAAN,EAAA,MAAAG,YAAAH,EAAA,MAAAQ,cAAAR,EAAA,MAAA2C,WAAA3C,EAAA,MAAAa,cAAAb,EAAA,MAAA8C,MAAAA,KAAA9C,EAAA;CAAA,IAAAmD;CACF,OADEnD,EAAA,QAAA4C,MAAA5C,EAAA,QAAA8C,MA1BIK,KAAA;EAAAC,OACE;EAAuBC,UACpBT;EAAyBU,MAC7BvE;EAASwE,MACT;EAAUC,UACNX;EAETY,QACOX;CAmBV,GAAC9C,EAAA,MAAA4C,IAAA5C,EAAA,MAAA8C,IAAA9C,EAAA,MAAAmD,MAAAA,KAAAnD,EAAA,KA3BMmD;AA2BN;AAGHrD,2BAA2B4D,SAAS,qBACpC5D,2BAA2B6D,cAAc;;;;;AAMzC,MAAaC,2BAA0B7D,UAC9BD,2BAA2BC,KAAK;ACnHzC,SAAOkE,uBAAAC,IAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAD,KAOJG,KAAAF,EAAA,MAFmEE,KAAA,EAAAC,QAC1D;EAAAJ;EAAAK,mBAAwBT;CAAoB,EACtD,GAACK,EAAA,KAAAD,IAAAC,EAAA,KAAAE;CAFD,IAAA,EAAAG,MAAAC,SAAAC,UAA+Bb,kBAA8BG,iHAAOK,EAEnE,GAACM;CAE2B,OAF3BR,EAAA,OAAAK,QAAAL,EAAA,OAAAO,SAAAP,EAAA,OAAAM,WAEKE,KAAA;EAAAH;EAAAC;EAAAC;CAAqB,GAACP,EAAA,KAAAK,MAAAL,EAAA,KAAAO,OAAAP,EAAA,KAAAM,SAAAN,EAAA,KAAAQ,MAAAA,KAAAR,EAAA,IAAtBQ;AAAsB;;;;;;ACjB/B,MAAaE,8BAA8B,iCAO9BE,oDAAoDH,2BAA2B;CAC1FI,QAAQ;CACRC,WAAWJ;CACXK,iBAAiB,OAAO;AAC1B,CAAC,GCmBKoC,sBAAsB;CAC1BC,oBAAoB;CACpBC,mBAAmB;CACnBC,sBAAsB;CACtBC,WAAW;AACb,GAUaC,sCAAqCC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAC,EAAAZ,IAAAG,MAAAU,eAAAH,IAMjDI,gBAAsB7B,iBAAiB,GACvC,EAAAY,cAAoBd,qBAAqBiB,IAAIG,IAAI,GACjD,EAAAY,mBAAyBzB,UAAU,GACnC,CAAA0B,eAAAC,kBAAwC3C,SAAS,EAAK,GAAC4C;CAAA,AAAAP,EAAA,OAAAX,MAAAW,EAAA,OAAAR,QACgBe,KAAA;EAAAlB;EAAAG;EAAAgB,YAGzD;CACd,GAACR,EAAA,KAAAX,IAAAW,EAAA,KAAAR,MAAAQ,EAAA,KAAAO,MAAAA,KAAAP,EAAA;CAJD,IAAA,CAAAS,aAAAC,wBAA4CrC,2BAA2BkC,EAItE,GACD,EAAAI,MAAAC,SAAAC,8BAAmD9B,uBAAuBM,EAAE,GAC5EyB,yBACSC,MAAKC,QAASL,IAAwB,KAAfA,KAAIM,UAAW,GAE/CC,mBAAyBH,MAAKC,QAASL,IAAmB,KAAVA,KAAIM,SAAUN,KAAI,KAAzC,MACzBQ,SAAejD,UAAUJ,6BAA6B,GACtDsD,QAAc7D,SAAS,GACvB,EAAA8D,GAAAC,MAAe/C,eAAeK,wBAAwB,GACtD,EAAAyC,GAAAE,MAAehD,eAAeS,2BAA2B,GACzDwC,cAAoBrD,eAAe,GAACsD;CAAA,AAAAzB,EAAA,OAAAmB,UAAAnB,EAAA,OAAAG,cAAAuB,QAAA1B,EAAA,OAAAkB,oBAAAlB,EAAA,OAAAI,kBAAAJ,EAAA,OAAAE,cAAAF,EAAA,OAAAoB,SAAApB,EAAA,OAAAR,QAETiC,WAAA;EAkGzBE,AAjGArB,eAAe,EAAI,IAiGnBqB,iBA9FA;GACE,IAAI,CAACT,kBAAgB,OACZU,QAAOC,OAAQ,gBAAIC,MAAM,6BAA6B,CAAC;GAGhE,IAAAC,oBAA0Bb,iBAAiBpC;GAC3C,IAAI,CAACiD,qBAAqBA,kBAAiBd,WAAY,GAAC,OAC/CW,QAAOC,OAAQ,gBAAIC,MAAM,4CAA4C,CAAC;GAI/E,IAAAE,+BAAqB,IAAIC,IAAgB;GACzC,MAAML,QAAOM,IAEXH,kBAAiBI,IAAK,OAAAC,gBAAA;IACpB,IAAAC,SAAe7E,KAAK,GACpB8E,SAAeF,YAAY1D,sBAC3B6D,QAAcH,YAAWI,OAAYC;IAErC,IAAI,OAAOH,UAAW,YAAYA,OAAMI,KAAM,CAAC,CAAAzB,WAAY,GAAC,OACnDW,QAAOC,OAAQ,gBAAIC,MAAM,gCAAgC,CAAC;IAEnE,IAAI,CAACS,OAAK,OACDX,QAAOC,OAAQ,gBAAIC,MAAM,gCAAgC,CAAC;IAGnE,IAAA,EAAA5C,WAAAyD,yBAA0C,MAAM9E,eAC9CsC,cAAauB,KAAKkB,eACAL,OAAO/C,IAAI,CAAC,CAAAqD,KACtBjF,OAAOkF,OAA6D,CAAC,CAC/E;IAEA,IAAIH,qBAAoBxD,UAAS,OACxByC,QAAOC,OAAQ,gBAAIC,MAAM,2BAA2B,CAAC;IAG9D,IAAAiB,8BAAoClF,eAClCsC,cAAauB,KAAKsB,gBACCT,OAAO/C,IAAI,CAAC,CAAAqD,KAE3BjF,OAAOqF,QAA0E,CACnF,CACJ;IAIAjB,AAHAW,qBAAoBvD,QAASiD,MAAM,GACnC,MAAMU,6BAENf,aAAYkB,IAAKZ,QAAQD,MAAM;GAAC,CACjC,CACH;GAGA,IAAA,EAAAnD,WAAAiE,sBAAuC,MAAMtF,eAC3CsC,cAAauB,KAAKkB,eACA1B,iBAAgBkC,KAAMvE,oBAAoB,CAAC,CAAAgE,KACrDjF,OAAOyF,MAA6D,CAAC,CAC/E;GAEA,IAAIF,kBAAiBhE,UAAS,OACrByC,QAAOC,OAAQ,gBAAIC,MAAM,2BAA2B,CAAC;GAG9D,IAAAwB,2BAAiCzF,eAC/BsC,cAAauB,KAAKsB,gBACC9B,iBAAgBkC,KAAMvE,oBAAoB,CAAC,CAAAgE,KACtDjF,OAAO2F,MAA0E,CAAC,CAC5F,GACAC,WAAehG,KAAK;GAEpB,AADA2F,kBAAiB/D,QAASiD,QAAM,GAChC,MAAMiB;GAGN,IAAAG,QAA+B,EAAAP,KACxBQ,OAAMC,YACT5C,MAAK6C,KAAM5B,aAAY6B,QAAS,CAAC,CAAC,CAAA1B,IAAK2B,MAKtC,CACH,EACF;GAUA5D,AARA,MAAMiB,OAAM4C,YAAa,CAAC,CAAAN,MAAOpB,UAAQoB,KAAK,CAAC,CAAAO,OAAQ,GAGvD5D,eAAe,QAAQ;IAAAf,IACjB0B,MAAK6C,KAAM5B,aAAYiC,OAAQ,CAAC,CAAC,CAAAC,GAAI,CAAC;IAAC1E;GAE7C,CAAC,GAEDU,WAAW;EAAC,EAAA,CAIK,CAAC,CAAAiE,OACXC,UAAA;GAELhD,AADAiD,QAAOD,MAAOA,KAAK,GACnBhD,MAAKkD,KAAM;IAAAC,QACD;IAAOC,OACR;IAA4BC,aACtBL,iBAAiBtC,QAAQsC,MAAKM,UAA9B;GACf,CAAC;EAAC,CACH,CAAC,CAAAC,cACO;GACPrE,eAAe,EAAK;EAAC,CACtB;CAAC,GACLN,EAAA,KAAAmB,QAAAnB,EAAA,KAAAG,cAAAuB,MAAA1B,EAAA,KAAAkB,kBAAAlB,EAAA,KAAAI,gBAAAJ,EAAA,KAAAE,YAAAF,EAAA,KAAAoB,OAAApB,EAAA,KAAAR,MAAAQ,EAAA,MAAAyB,MAAAA,KAAAzB,EAAA;CA9GD,IAAA4E,SAAenD;CAkKbhB,aAAWoE;CAAS,IAAAC;CAAAC,KAAA;EAjDpB,IAAI,CAACrE,wBAAD,CAA0BD,aAAWoE,SAAS;GAAA,IAAAG;GAAA,AAAAhF,EAAA,QAAAuB,IAIZyD,KAAAhF,EAAA,OAA3BgF,KAAAzD,EAAE,wBAAwB,GAACvB,EAAA,MAAAuB,GAAAvB,EAAA,MAAAgF;GAAA,IAAAC;GAAA,AAAAjF,EAAA,QAAAwB,cAEyDyD,KAAAjF,EAAA,OAAzFiF,KAAA,oBAAC,gCAAD;IAAwC,SAAA;IAAkCzD;GAAW,CAAA,GAAIxB,EAAA,MAAAwB,aAAAxB,EAAA,MAAAiF;GAAA,IAAAC;GAL7FJ,AAK6F9E,EAAA,QAAAgF,MAAAhF,EAAA,QAAAiF,MALtFC,KAAA;IAAAC,MACC7H;IAAQ6B,UACJ;IAAIiG,OACPJ;IAA2BR,OAEhCS;GAEJ,GAACjF,EAAA,MAAAgF,IAAAhF,EAAA,MAAAiF,IAAAjF,EAAA,MAAAkF,MAAAA,KAAAlF,EAAA,KAPD8E,KAAOI;GAAP,MAAAH;EAOC;EAGH,IAAI,CAAClE,6BAAD,CAA+BK,kBAAgB;GAAA,IAAA8D;GAAA,AAAAhF,EAAA,QAAAuB,IAIbyD,KAAAhF,EAAA,OAA3BgF,KAAAzD,EAAE,wBAAwB,GAACvB,EAAA,MAAAuB,GAAAvB,EAAA,MAAAgF;GAAA,IAAAC;GAAA,AAAAjF,EAAA,QAAAuB,IACc0D,KAAAjF,EAAA,OAAzCiF,KAAA1D,EAAE9B,oBAAmBC,kBAAmB,GAACM,EAAA,MAAAuB,GAAAvB,EAAA,MAAAiF;GAAA,IAAAC;GAJlDJ,AAIkD9E,EAAA,QAAAgF,MAAAhF,EAAA,QAAAiF,MAJ3CC,KAAA;IAAAC,MACC7H;IAAQ6B,UACJ;IAAIiG,OACPJ;IAA2BR,OAC3BS;GACT,GAACjF,EAAA,MAAAgF,IAAAhF,EAAA,MAAAiF,IAAAjF,EAAA,MAAAkF,MAAAA,KAAAlF,EAAA,KALD8E,KAAOI;GAAP,MAAAH;EAKC;EAGH,IAAI,CAACjE,wBAAsB;GAAA,IAAAkE;GAAA,AAAAhF,EAAA,QAAAuB,IAIWyD,KAAAhF,EAAA,OAA3BgF,KAAAzD,EAAE,wBAAwB,GAACvB,EAAA,MAAAuB,GAAAvB,EAAA,MAAAgF;GAAA,IAAAC;GAAA,AAAAjF,EAAA,QAAAuB,IACa0D,KAAAjF,EAAA,OAAxCiF,KAAA1D,EAAE9B,oBAAmBE,iBAAkB,GAACK,EAAA,MAAAuB,GAAAvB,EAAA,MAAAiF;GAAA,IAAAC;GAJjDJ,AAIiD9E,EAAA,QAAAgF,MAAAhF,EAAA,QAAAiF,MAJ1CC,KAAA;IAAAC,MACC7H;IAAQ6B,UACJ;IAAIiG,OACPJ;IAA2BR,OAC3BS;GACT,GAACjF,EAAA,MAAAgF,IAAAhF,EAAA,MAAAiF,IAAAjF,EAAA,MAAAkF,MAAAA,KAAAlF,EAAA,KALD8E,KAAOI;GAAP,MAAAH;EAKC;EAMC,IAAAC,KAAA3E,iBACAgF,EAAQnG,UAASC,YADjBuB,wBAAAG,2BAGyBoE;EAAA,AAAAjF,EAAA,QAAAuB,KAAAvB,EAAA,QAAAK,iBAAAL,EAAA,QAAAsB,KACpB2D,KAAA5E,gBAAgBiB,EAAE,gCAA8D,IAA1BC,EAAE,wBAAwB,GAACvB,EAAA,MAAAuB,GAAAvB,EAAA,MAAAK,eAAAL,EAAA,MAAAsB,GAAAtB,EAAA,MAAAiF,MAAAA,KAAAjF,EAAA;EAAA,IAAAkF;EAAA,AAAAlF,EAAA,QAAAd,UAAAC,YAAAa,EAAA,QAAAsB,KACjF4D,KAAAhG,UAASC,WAAYmC,EAAE7B,oBAAoBP,UAASC,SAAe,IAAnE,IAAoEa,EAAA,MAAAd,UAAAC,UAAAa,EAAA,MAAAsB,GAAAtB,EAAA,MAAAkF,MAAAA,KAAAlF,EAAA;EAAA,IAAAsF;EAR7ER,AAQ6E9E,EAAA,QAAA4E,UAAA5E,EAAA,QAAAgF,MAAAhF,EAAA,QAAAiF,MAAAjF,EAAA,QAAAkF,MARtEI,KAAA;GAAAH,MACC7H;GAAQ6B,UAEZ6F;GAGyBI,OACpBH;GAAiFT,OACjFU;GAAoEK,UACjEX;EACZ,GAAC5E,EAAA,MAAA4E,QAAA5E,EAAA,MAAAgF,IAAAhF,EAAA,MAAAiF,IAAAjF,EAAA,MAAAkF,IAAAlF,EAAA,MAAAsF,MAAAA,KAAAtF,EAAA,KAVD8E,KAAOQ;CAUN;CAAA,OAxCIR;AAqDL;AAGJhF,mCAAmC0F,SAAS,aAC5C1F,mCAAmC2F,cAAc;;;;;AAMjD,MAAaC,mCAAkCC,UAGtC7F,mCAAmC6F,KAAK;AAIjDD,gCAAgCF,SAAS,aAEzCE,gCAAgCD,cAAc;AAlNI,SAAA3C,QAAAvD,IAAA;CAAA,OA2DCA,GAAEL,UAAUC,aAAc;AAAW;AA3DtC,SAAA8D,SAAA2C,GAAA;CAAA,OAsEGA,EAACrG,OAAQ,eAAeqG,EAACpG,SAAU;AAAS;AAtE/C,SAAA6D,OAAAwC,MAAA;CAAA,OAoFHtG,KAAEL,UAAUC,aAAc;AAAW;AApFlC,SAAAoE,OAAAuC,KAAA;CAAA,OA8FGF,IAACrG,OAAQ,eAAeqG,IAACpG,SAAU;AAAS;AA9F/C,SAAAsE,OAAA/D,IAAA;CAuGA,IAAA,CAAAgG,UAAAC,cAAAjG;CAAoB,OACnD,CACL,GAAGjB,wBAAuB,GAAIJ,oBAAmB,OAAQ4D,SAAM,gBAC/D0D,UAAU;AACX;AC3Jb,SAAOI,iBAAAC,IAAAC,MAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GACLC,SAAeP,UAAU,GACzB,EAAAQ,kBAAAC,eAAuCR,cAAc,GAACS;CAuBF,OAvBEL,EAAA,OAAAI,cAAAJ,EAAA,OAAAF,MAAAE,EAAA,OAAAE,UAAAF,EAAA,OAAAG,oBAAAH,EAAA,OAAAD,QAEpBM,WAAA;EAChC,IAAI,CAACP,MAAD,CAAQC,MAAI;EAKhB,IAAI,CAACI,iBAAgBG,QAAO;GAC1BJ,OAAMK,eAAgB,QAAQ;IAAAT;IAAAC;GAAS,CAAC;GAAC;EAAA;EAI3C,IAAAS,QAAc,CAAA,GAAIL,gBAAgB;EAClCK,MAAKC,OAAQL,aAAa,GAAG,GAAG,CAC9B;GAAAN;GAAAY,QAEU,EAAAX,KAAK;EACf,CAAC,CACF;EAED,IAAAY,OAAaT,OAAMU,qBAAsB,EAAAJ,MAAM,CAAC;EAChDN,OAAMW,YAAa,EAAAC,MAAOH,KAAI,CAAC;CAAC,GACjCX,EAAA,KAAAI,YAAAJ,EAAA,KAAAF,IAAAE,EAAA,KAAAE,QAAAF,EAAA,KAAAG,kBAAAH,EAAA,KAAAD,MAAAC,EAAA,KAAAK,MAAAA,KAAAL,EAAA,IAEMe;AAAa;;;;;;;ACpBtB,SAAgBI,gBACdC,UACAC,KACAC,MACAC,sBAA+B,IACT;CACtB,OAAO;GACJN,sBAAsBG;EACvBI,MAAMR,UAAU;EAChBS,OAAO;EACPC,OAAO;GACLD,OAAO;GACPE,MAAMN;GACNO,OAAO;GAEP,GAAIL,sBAAsB,EAACM,sBAAsB,EAACP,KAAI,EAAC,IAAI,CAAC;EAC9D;CACF;AACF;;;;;;;ACLA,SAAe4B,eAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAR,IAAAC,YAAAC,YAAAC,YAAAC,qBAAmEE,OACnEG,OAAab,iBAAiBI,IAAIL,oBAAoB,GACtDe,cAAoBd,iBAAiBK,YAAYN,oBAAoB,GACrE,EAAAgB,oBAAAC,YAAAC,mBAAyDf,uCAAuC,GAACgB;CAAA,AAAAP,EAAA,OAAAK,aAC5DE,KAAAP,EAAA,MAAZO,KAAA,EAAAF,WAAW,GAACL,EAAA,KAAAK,YAAAL,EAAA,KAAAO;CAArC,IAAAC,SAAerB,UAAUoB,EAAY,GACrC,CAAAE,gBAAAC,qBAA4CzB,SAAS,EAAK,GAE1D0B,YAAkB,CAAClB,MAAMmB,EAAQlB,cAAfU,oBAAgDS;CAAA,AAAAb,EAAA,OAAAQ,UAAAR,EAAA,OAAAJ,cAAAI,EAAA,OAAAP,MAAAO,EAAA,OAAAN,cAAAM,EAAA,OAAAE,QAAAF,EAAA,OAAAG,eAAAH,EAAA,OAAAL,WAAAmB,QAAAd,EAAA,OAAAH,oBAAAG,EAAA,QAAAM,kBAElCO,WAAA;EAC9B,IAAI,CAACpB,MAADC,cAAAG,kBAAqC;GAEvCa,kBAAkB,EAAI;GAGtB,IAAAK,cAAoBP,OAAMO,YAAa,GAEvCC,kBAAwB1B,gBACtBO,kBACAD,YACAD,WAAUmB,MACV,CAACR,cACH,GACAW,sBAA4B;IAAAC,KACrBxB;IAAUyB,OACR/B;IAAoBgC,aACd,CAACzB,WAAUmB,IAAK;IAACO,cAChB,CAACL,eAAe;GAChC;GAIAD,AAFAA,YAAWO,kBAAmBL,mBAAmB,GAEjDF,YAAWQ,OACD,CAAC,CAAAC,WACH;IAEJrB,AADAO,kBAAkB,EAAK,GACvBP,YAAY;GAAC,CAEd,CAAC,CAAAsB,OACKC,QAAA;IAELhB,AADAiB,QAAOC,MAAOF,GAAG,GACjBhB,kBAAkB,EAAK;GAAC,CACzB;EAAC,OAEJR,KAAK;CACN,GACFF,EAAA,KAAAQ,QAAAR,EAAA,KAAAJ,YAAAI,EAAA,KAAAP,IAAAO,EAAA,KAAAN,YAAAM,EAAA,KAAAE,MAAAF,EAAA,KAAAG,aAAAH,EAAA,KAAAL,WAAAmB,MAAAd,EAAA,KAAAH,kBAAAG,EAAA,MAAAM,gBAAAN,EAAA,MAAAa,MAAAA,KAAAb,EAAA;CArCD,IAAA6B,cAAoBhB,IAiDpBiB,WAAkB,CAACrC,MAAD,CAAQkB,aAAeA,aAAA,CAAcd,oBAAtCY,gBAAyEsB,IAAAC;CAAA,AAAAhC,EAAA,QAAAiC,OAAAC,IAAA,2BAAA,KAMpFH,KAAA,oBAAC,KAAD;EAAc,SAAA;YACZ,oBAAC,MAAD;GAAM,OAAA;GAAY,MAAA;aAAG;EAAhB,CAAA;CADH,CAAA,GAMcC,KAAA,CAAC,SAAS,MAAM,GAAChC,EAAA,MAAA+B,IAAA/B,EAAA,MAAAgC,OAAAD,KAAA/B,EAAA,KAAAgC,KAAAhC,EAAA;CAG3B,IAAAmC,KAAAvB,EAAQnB,MAARkB,WAAwByB;CAAA,AAAApC,EAAA,QAAA8B,YAAA9B,EAAA,QAAA6B,eAAA7B,EAAA,QAAAS,kBAElC2B,KAAA,oBAAC,OAAD,EAAA,UACE,oBAAC,QAAD;EACYN;EACL,MAAA;EACA,MAAA;EACCpD,MAAAA;EACG+B,SAAAA;EACAoB,SAAAA;CAAW,CAAA,EAPlB,CAAA,GASE7B,EAAA,MAAA8B,UAAA9B,EAAA,MAAA6B,aAAA7B,EAAA,MAAAS,gBAAAT,EAAA,MAAAoC,MAAAA,KAAApC,EAAA;CAAA,IAAAqC;CACA,OADArC,EAAA,QAAAmC,MAAAnC,EAAA,QAAAoC,MAvBVC,KAAA,oBAAC,SAAD;EACE,SAAA;EAEE,SAAAN;EAMkB,oBAAAC;EACV,WAAA;EACV,QAAA;EACU,UAAAG;YAEVC;CAdM,CAAA,GAwBEpC,EAAA,MAAAmC,IAAAnC,EAAA,MAAAoC,IAAApC,EAAA,MAAAqC,MAAAA,KAAArC,EAAA,KAxBVqC;AAwBU;;;;;;;;ACtFd,SAAgBc,oBACdC,KACAL,YACuB;CAGvB,IAAI,CAACP,qBAAqBO,UAAU,KAAK,CAACK,KACxC,OAAOA;CAMT,IAAMC,iBAA2BC,aAAaF,KAAKL,YAAY,CAAA,CAAE,CAAA,CAG9DQ,QAAQC,UAAUA,MAAMT,YAAYU,SAASC,8BAA8BC,YAAY,EAAI,CAAA,CAE3FC,KAAKJ,UACGb,aAAaa,MAAMR,IAAI,CAC/B;CAiBH,OAAOa,IAZStB,SAAS,EACvBuB,WAAW,CACT,EACEC,OAAO;EACLC,IAAIZ,IAAIa;EACRC,OAAOb;CACT,EACF,CAAC,EAEL,CAGOQ,CAAG,CAACM,MAAMf,GAAG;AACtB;AAEA,SAASE,aACPF,KACAL,YACAC,MACkB;CAClB,IAAMoB,SAA2B,CAAA;CAEjC,KAAK,IAAMZ,SAAST,WAAWsB,QAAQ;EACrC,IAAMC,YAAY,CAAC,GAAGtB,MAAMQ,MAAMP,IAAI,GAChCsB,cAAcf,MAAMgB,MACpB,EAACtB,UAASZ,gBAAgBK,aAAa2B,SAAS,GAAGlB,GAAG,CAAC,CAAC,MAAM,CAAC;EACrE,IAAIF,SAAiC,MACnC;EAGF,IAAMwB,oBAAoC;GACxC1B,MAAMsB;GACNrB,MAAMO,MAAMP;GACZF,YAAYwB;GACZrB;EACF;EAEA,IAAIqB,YAAYI,aAAa,UAAU;GACrC,IAAMC,cAActB,aAAaF,KAAKmB,aAAaD,SAAS;GAC5DF,OAAOS,KAAKH,mBAAmB,GAAGE,WAAW;EAC/C,OAAO,IACLL,YAAYI,aAAa,WACzBJ,YAAYO,GAAGC,UACfR,YAAYO,GAAGE,MAAMC,SAAS,YAAYA,IAAI,GAC9C;GACA,IAAM,EAAC/B,OAAOgC,eAAc5C,gBAAgBK,aAAa2B,SAAS,GAAGlB,GAAG,CAAC,CAAC,MAAM,CAAC;GAIjF,IAFAgB,OAAOS,KAAKH,iBAAiB,GAExBQ,YAA0BH,QAE7B,KAAK,IAAME,QAAQC,YAIf;IACF,IAAI,CAACD,KAAKG,MAAM;IAChB,IAAMG,WAAW,CAAC,GAAGjB,WAAW,EAACc,MAAMH,KAAKG,KAAI,CAAC,GAC7CI,aAAajB,YAAYO,GAAGW,MAAMC,MAAMA,EAAEzC,SAASgC,KAAKK,KAAK;IAIjE,IAHKL,KAAKK,UACRE,aAAajB,YAAYO,GAAG,KAE1BU,YAAY;KAEd,IAAMZ,cAActB,aAAaF,KAAKoC,YAAgCD,QAAQ,GACxEI,cAA8B;MAClC3C,MAAMuC;MACNtC,MAAMgC,KAAKG;MACXrC,YAAYyC;MACZtC,OAAO+B;KACT;KACAb,OAAOS,KAAKc,aAAa,GAAGf,WAAW;IACzC;GACF;EAEJ,OACER,OAAOS,KAAKH,iBAAiB;CAEjC;CAEA,OAAON;AACT;;;;;;;;ACvFA,SAAeiE,eAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAZ,UAAAC,YAAAC,YAAAE,SAAAC,QAAAG,kBAAAD,UAAAD,eASII,OAIJ,CAAAG,gBAAAC,qBAA4CjC,SAAS,EAAK,GAC1DsB,WACEO,MAAKP,YAALU,kBAAAT,WAAA,CAAgDC,UAAhD,CAA2DG,oBAA3D,CAAgFF,YAAUS;CAAA,AAAAJ,EAAA,OAAAX,SAAAgB,MAAAL,EAAA,OAAAJ,YACtCQ,KAAAR,UAAQU,aAAqBC,SAC/EX,SAAQU,aAAaE,MAAMC,MAAOA,EAAE/B,yBAAyBW,SAAQgB,EAC7D,IAF0CK,KAAAA,GAEzCV,EAAA,KAAAX,SAAAgB,IAAAL,EAAA,KAAAJ,UAAAI,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CAFb,IAAAW,cAAsDP,IAGtD,EAAAQ,YAAAC,eAAAC,gBAAAC,aACE5B,uCAAuC,GAAC6B;CAAA,AAAAhB,EAAA,OAAAY,aACLI,KAAAhB,EAAA,MAAZgB,KAAA,EAAAJ,WAAW,GAACZ,EAAA,KAAAY,YAAAZ,EAAA,KAAAgB;CAArC,IAAAC,SAAexC,UAAUuC,EAAY,GACrCE,QAAcnD,SAAS,GAEvBoD,OAAavC,iBAAiB+B,aAAWS,OAAaC,MAAE/B,WAAUgC,IAAK,GAACC;CAAA,AAAAvB,EAAA,OAAAmB,OAC7BI,KAAAvB,EAAA,MAAZuB,WAAMJ,KAAK,GAACnB,EAAA,KAAAmB,MAAAnB,EAAA,KAAAuB;CAA3C,IAAAC,aAAmBD,IAAiCE;CA6HlD7B,AA7HkDI,EAAA,OAAAe,YAAAf,EAAA,OAAAiB,UAAAjB,EAAA,OAAAT,cAAAS,EAAA,QAAAX,SAAAgB,MAAAL,EAAA,QAAAX,SAAAqC,SAAA1B,EAAA,QAAAa,iBAAAb,EAAA,QAAAJ,UAAA+B,cAAA3B,EAAA,QAAAL,cAAAK,EAAA,QAAAV,cAAAU,EAAA,QAAAN,UAAAM,EAAA,QAAAH,oBAAAG,EAAA,QAAAkB,SAAAlB,EAAA,QAAAc,kBAEnBW,KAAA,YAAA;EAC/B,IAAI,CAAC/B,QACH,MAAUkC,MAAM,mDAAmD;EAGrE,IAAI,CAAC/B,kBACH,MAAU+B,MAAM,sDAAsD;EAGxE,IAAI,CAACjC,YACH,MAAUiC,MAAM,iDAAiD;EAGnEzB,kBAAkB,EAAI;EAEtB,IAAA0B,cAAoBZ,OAAMY,YAAa,GAKvCC,2BAAiC9D,KAAK,GACtC+D,kBAAwBzD,YAAYoB,OAAMsC,GAA+C,IAAvC5D,iBAAiBsB,OAAMsC,GAAgB,IAAjEtB,KAAAA,GACxBuB,yBAA6B;GAAA,GACxBvC;GAAMsC,KACJD,kBACD1D,aAAayD,0BAA0BC,eACJ,IAAnC5D,WAAW2D,wBAAwB;IAEtCjB,gBAAgBxB,SAAQgB;EAC3B;EASAwB,AALAI,yBAAyB/C,oBACvB+C,wBACA3C,UACF,GAEAuC,YAAWK,OAAQD,sBAAsB;EAGzC,IAAAE,kBAAwBlD,gBACtBY,kBACAN,YACAD,WAAUgC,MACV,CAACR,cACH,GACAsB,0BAAgCnD,gBAC9BI,SAAQgB,IACRyB,0BACAxC,WAAUgC,MACV,CAACR,cACH,GACAuB,sBAA8C;GAAAL,KACvCrC;GAAU2C,OACR3D;GAAoB4D,aACd,CAACjD,WAAUgC,IAAK;GAAChB,cAChB,CAAC6B,eAAe;EAChC;EAEAN,YAAWW,kBAAmBH,mBAAmB;EAKjD,IAAAI,gBAAsBxB,OAAMyB,MACnB/C,UAAU,CAAC,CAAAgD,aACJ,EAAArC,cAAe,CAAC6B,eAAe,EAAC,CAAC,CAAC,CAAAS,OACxC,SAAS,oBAAoB,CAACR,uBAAuB,CAAC;EAKhEP,AAHAA,YAAWa,MAAOD,aAAa,GAG/BZ,YAAWgB,OACD,CAAC,CAAAC,WACH;GACJ,IAAAC,kBAAwBC,EAAQpD,UAAQ+B;GAexC,IAbAT,MAAK+B,KAAM;IAAAC,QACD;IAASxB,OACV,YAAYrC,SAAQqC,MAAM;IAAeyB,aACnCJ,kBAAA,kCAAA;GAGf,CAAC,GAID5C,kBAAkB,EAAK,GAGnBY,UAAQ,OAEHA,SAAS;IAAAE;IAAApB;IAAAuD,gBAGE1D;IAAM2D,aACTpB;IAAsBqB,uBACZjE,SAAQgB;IAAGkD,gBAClB5D;GAClB,CAAC;EACF,CAGF,CAAC,CAAA6D,OACKC,SACLC,QAAOC,MAAOF,GAAG,GAGjBtD,kBAAkB,EAAK,GAEhBe,MAAK+B,KAAM;GAAAC,QACR;GAAOxB,OACR;GAA4ByB,aACtBM,IAAGG;EAClB,CAAC,EACF;CAAC,GACL5D,EAAA,KAAAe,UAAAf,EAAA,KAAAiB,QAAAjB,EAAA,KAAAT,YAAAS,EAAA,MAAAX,SAAAgB,IAAAL,EAAA,MAAAX,SAAAqC,OAAA1B,EAAA,MAAAa,eAAAb,EAAA,MAAAJ,UAAA+B,YAAA3B,EAAA,MAAAL,YAAAK,EAAA,MAAAV,YAAAU,EAAA,MAAAN,QAAAM,EAAA,MAAAH,kBAAAG,EAAA,MAAAkB,OAAAlB,EAAA,MAAAc,gBAAAd,EAAA,MAAAyB,MAAAA,KAAAzB,EAAA,KAMCJ,UAAQ+B;CA3HV,IAAAkC,eAAqBpC,IAqIjBmC;CAEJ,AAAInE,UACFmE,UAAUA,qBACDjD,cACTiD,UAAUA,QAAQvE,SAAQqC,MAAM,gBACtBf,gBACViD,UAAUA,cAAcvE,SAAQqC,MAAM;CACvC,IAAAoC;CAAA,AAAA9D,EAAA,QAAA4D,UAUWE,KAAA9D,EAAA,OAJN8D,KAAA,oBAAC,KAAD;EAAc,SAAA;YACZ,oBAAC,MAAD;GAAM,OAAA;GAAY,MAAA;aACfF;EADE,CAAA;CADH,CAAA,GAIE5D,EAAA,MAAA4D,SAAA5D,EAAA,MAAA8D;CAAA,IAAAC;CAAA,AAAA/D,EAAA,QAAAgE,OAAAC,IAAA,2BAAA,KAEYF,KAAA,CAAC,SAAS,MAAM,GAAC/D,EAAA,MAAA+D,MAAAA,KAAA/D,EAAA;CAK1B,IAAAkE,KAAAvD,cAAAa,aAAAqC,cACHM,KAAA1E,WAAAD,WAAA,YAAA,SAAyC4E;CAAA,AAAApE,EAAA,QAAAP,WAAAO,EAAA,QAAAR,YAAAQ,EAAA,QAAAW,eAI5CyD,KAAA5E,YAAA,CAAaC,UACZ,oBAAC,SAAD,CAAQ,CAAA,IAER,oBAAC,MAAD;EAAY,MAAA;YACK,IAAdkB,cAAe,oBAAuBlB,UAAW,gBAAoB,SAAvD,CAAkB,CAA4C;CAD1E,CAAA,GAGNO,EAAA,MAAAP,SAAAO,EAAA,MAAAR,UAAAQ,EAAA,MAAAW,aAAAX,EAAA,MAAAoE,MAAAA,KAAApE,EAAA;CAAA,IAAAqE;CAAA,AAAArE,EAAA,QAAAX,SAAAqC,QAGK2C,KAAArE,EAAA,OAFNqE,KAAA,oBAAC,KAAD;EAAW,MAAA;YACT,oBAAC,MAAD,EAAA,UAAOhF,SAAQqC,MAAV,CAAA;CADH,CAAA,GAEE1B,EAAA,MAAAX,SAAAqC,OAAA1B,EAAA,MAAAqE;CACO,IAAAC,MAAA9E,YAAAC,UAAA,YAAA,WAA2C8E;CAAA,AAAAvE,EAAA,QAAAX,SAAAgB,MAAAL,EAAA,QAAAsE,OAAxDC,MAAA,oBAAC,OAAD;EAAa,MAAAD;YAA8CjF,SAAQgB;CAA7D,CAAA,GAAyEL,EAAA,MAAAX,SAAAgB,IAAAL,EAAA,MAAAsE,KAAAtE,EAAA,MAAAuE,OAAAA,MAAAvE,EAAA;CAAA,IAAAwE;CAAA,AAAAxE,EAAA,QAAAuE,OAAAvE,EAAA,QAAAoE,MAAApE,EAAA,QAAAqE,MAXjFG,MAAA,qBAAC,MAAD;EAAW,KAAA;EAAS,OAAA;YAApB;GACGJ;GAODC;GAGAE;EAXG;KAYEvE,EAAA,MAAAuE,KAAAvE,EAAA,MAAAoE,IAAApE,EAAA,MAAAqE,IAAArE,EAAA,MAAAwE,OAAAA,MAAAxE,EAAA;CAAA,IAAAyE;CAAA,AAAAzE,EAAA,QAAAR,YAAAQ,EAAA,QAAAwE,OAAAxE,EAAA,QAAAkE,MAAAlE,EAAA,QAAAmE,MAjBTM,MAAA,oBAAC,QAAD;EACW,SAAAP;EACH,MAAAC;EACI3E;YAEVgF;CALK,CAAA,GAkBExE,EAAA,MAAAR,UAAAQ,EAAA,MAAAwE,KAAAxE,EAAA,MAAAkE,IAAAlE,EAAA,MAAAmE,IAAAnE,EAAA,MAAAyE,OAAAA,MAAAzE,EAAA;CAAA,IAAA0E;CACD,OADC1E,EAAA,QAAAyE,OAAAzE,EAAA,QAAA8D,MA/BXY,MAAA,oBAAC,SAAD;EACE,SAAA;EAEE,SAAAZ;EAMkB,oBAAAC;EACV,WAAA;EACV,QAAA;YAEAU;CAbM,CAAA,GAgCEzE,EAAA,MAAAyE,KAAAzE,EAAA,MAAA8D,IAAA9D,EAAA,MAAA0E,OAAAA,MAAA1E,EAAA,KAhCV0E;AAgCU;;;;;;ACpOd,SAAeiB,cAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAN,UAAAC,WAA2BG,OAC3B,EAAAG,YAAAC,kBAAoCV,uCAAuC,GAC3EI,WAAiBE,MAAKF,YAAL,CAAmBD,QAAMQ;CAAA,AAAAJ,EAAA,OAAAE,aACLE,KAAAJ,EAAA,MAAZI,KAAA,EAAAF,WAAW,GAACF,EAAA,KAAAE,YAAAF,EAAA,KAAAI;CAArC,IAAAC,SAAed,UAAUa,EAAY,GACrCE,QAAclB,SAAS,GAACmB;CAAA,AAAAP,EAAA,OAAAK,UAAAL,EAAA,OAAAL,SAAAa,MAAAR,EAAA,OAAAL,SAAAc,SAAAT,EAAA,OAAAG,iBAAAH,EAAA,OAAAJ,UAAAI,EAAA,OAAAM,SAEQC,WAAA;EAC9B,IAAI,CAACX,QACH,MAAUc,MAAM,+BAA+B;EAGjD,IAAAC,YAAkBf,OAAMgB;EAExBP,OAAMQ,MACGF,SAAS,CAAC,CAAAG,IACZ,GAAEX,gBAAgBR,SAAQa,GAAG,CAAC,CAAC,CAAAO,OAC5B,CAAC,CAAAC,WACH;GACJV,MAAKW,KAAM;IAAAR,OACF,4BAA4Bd,SAAQc;IAAQS,QAC3C;GACV,CAAC;EAAC,CAEH,CAAC,CAAAC,OACKC,SACLC,QAAOC,MAAOF,GAAG,GAEVd,MAAKW,KAAM;GAAAR,OACT,sCAAsCd,SAAQc;GAAQS,QACrD;EACV,CAAC,EACF;CAAC,GACLlB,EAAA,KAAAK,QAAAL,EAAA,KAAAL,SAAAa,IAAAR,EAAA,KAAAL,SAAAc,OAAAT,EAAA,KAAAG,eAAAH,EAAA,KAAAJ,QAAAI,EAAA,KAAAM,OAAAN,EAAA,KAAAO,MAAAA,KAAAP,EAAA;CA1BD,IAAAuB,cAAoBhB,IA0BgCiB;CAAA,AAAAxB,EAAA,OAAAyB,OAAAC,IAAA,2BAAA,KAK9CF,KAAA,oBAAC,MAAD;EAAY,MAAA;YACV,oBAAC,UAAD,CAAS,CAAA;CADN,CAAA,GAEExB,EAAA,KAAAwB,MAAAA,KAAAxB,EAAA;CAAA,IAAA2B;CAAA,AAAA3B,EAAA,QAAAL,SAAAc,QAGDkB,KAAA3B,EAAA,OAFN2B,KAAA,oBAAC,KAAD;EAAW,MAAA;YACT,oBAAC,MAAD,EAAA,UAAOhC,SAAQc,MAAV,CAAA;CADH,CAAA,GAEET,EAAA,MAAAL,SAAAc,OAAAT,EAAA,MAAA2B;CAAA,IAAAC;CAAA,AAAA5B,EAAA,QAAAL,SAAAa,KACsBoB,KAAA5B,EAAA,OAA5B4B,KAAA,oBAAC,OAAD,EAAA,UAAQjC,SAAQa,GAAV,CAAA,GAAsBR,EAAA,MAAAL,SAAAa,IAAAR,EAAA,MAAA4B;CAAA,IAAAC;CAAA,AAAA7B,EAAA,QAAA2B,MAAA3B,EAAA,QAAA4B,MAP9BC,KAAA,qBAAC,MAAD;EAAW,KAAA;EAAS,OAAA;YAApB;GACEL;GAGAG;GAGAC;EAPG;KAQE5B,EAAA,MAAA2B,IAAA3B,EAAA,MAAA4B,IAAA5B,EAAA,MAAA6B,MAAAA,KAAA7B,EAAA;CAAA,IAAA8B;CACA,OADA9B,EAAA,QAAAH,YAAAG,EAAA,QAAAuB,eAAAvB,EAAA,QAAA6B,MATTC,KAAA,oBAAC,QAAD;EAAa,MAAA;EAAiBP,SAAAA;EAAuB1B;EAAkB,SAAA;YACrEgC;CADK,CAAA,GAUE7B,EAAA,MAAAH,UAAAG,EAAA,MAAAuB,aAAAvB,EAAA,MAAA6B,IAAA7B,EAAA,MAAA8B,MAAAA,KAAA9B,EAAA,KAVT8B;AAUS;AC/Db,SAAeE,eAAAC,IAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAwB,EAAAC,aAAAH,IAAuCI;CAAA,AAAAH,EAAA,OAAAI,OAAAC,IAAA,2BAAA,KACzDF,KAAA,EAAAG,UAAW,IAAG,GAACN,EAAA,KAAAG,MAAAA,KAAAH,EAAA;CAAA,IAAAO;CAAkB,OAAlBP,EAAA,OAAAE,WAAkBK,KAAAP,EAAA,MAA7CO,KAAA,oBAAC,KAAD;EAAY,OAAAJ;EAAkBD;CAA1B,CAAA,GAAyCF,EAAA,KAAAE,UAAAF,EAAA,KAAAO,KAA7CA;AAA6C;;;;;;ACOtD,SAAeM,QAAAC,IAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAiB,EAAAC,aAAAH,IAA6BI;CAUlD,OAVkDH,EAAA,OAAAE,WAUlDC,KAAAH,EAAA,MARPG,KAAA,oBAAC,MAAD;EAAW,MAAA;EAAmB,SAAA;YAC5B,oBAAC,MAAD;GAAc,SAAA;aACZ,oBAAC,gBAAD,EAAA,UACE,oBAAC,MAAD;IAAY,MAAA;IAAS,OAAA;IAClBD;GADE,CAAA,EADQ,CAAA;EADZ,CAAA;CADF,CAAA,GAQEF,EAAA,KAAAE,UAAAF,EAAA,KAAAG,KARPA;AAQO;ACJX,SAAO0B,iCAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAGL,EAAAC,eAAqBH,OACrBI,aAAmBJ,MAAKI,YACxB,EAAAC,eAAAC,uBAA4CZ,uCAAuC,GAGnF,CAAAa,OAAAC,YAA0BpB,SAAS,EAAE,GAACqB;CAAA,AAAAR,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KACNF,MAAAG,UAAA;EAC9B,AAAIA,MAAKC,cAAcC,QACrBN,SAASI,MAAKC,cAAcC,KAAM,IAElCN,SAAS,EAAE;CACZ,GACFP,EAAA,KAAAQ,MAAAA,KAAAR,EAAA;CAND,IAAAc,cAAoBN,IASpB,CAAAO,MAAAC,WAAwB7B,SAAS,EAAK,GAAC8B;CAAA,AAAAjB,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KACPO,WAAMD,QAAQE,OAAS,GAAClB,EAAA,KAAAiB,MAAAA,KAAAjB,EAAA;CAAxD,IAAAmB,cAAoBF,IACpBG,YAAkBlC,OAA0B,IAAI,GAChDmC,aAAmBnC,OAAuB,IAAI,GAACoC;CAAA,AAAAtB,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KACRY,WAAMN,QAAQ,EAAK,GAAChB,EAAA,KAAAsB,MAAAA,KAAAtB,EAAA;CAA3D,IAAAuB,qBAA2BD,IAAqCE;CAChE3C,AADgEmB,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KACvBc,WAAM,CAACJ,UAASK,SAAUJ,WAAUI,OAAQ,GAACzB,EAAA,KAAAwB,MAAAA,KAAAxB,EAAA,IAAtFnB,qBAAqB0C,oBAAoBC,EAA6C;CAGtF,IAAA,EAAAE,MAAAC,SAAAC,UAA+BrC,uBAAuBW,UAAU,GAChE2B,WAAiBC,MAAKC,QAASL,IAAmB,KAAVA,KAAIM,SAAUN,KAAI,KAAzC;CAYJG,UAAQI;CAAK,IAAAC;CAAAC,KAAA;EANxB,IAAIR,SAAO;GACTO,KAAO;GAAP,MAAAC;EAAW;EACZ,IAAAC;EAGDF,AAHClC,EAAA,OAAA6B,UAAAI,MAG6BG,KAAApC,EAAA,MAAvBoC,KAAAP,UAAQI,OAASnD,KAAK,GAACkB,EAAA,KAAA6B,UAAAI,KAAAjC,EAAA,KAAAoC,KAA9BF,KAAOE;CAAuB;CANhC,IAAAC,aAAmBH,IAYnB,EAAAI,sBAA4BjD,eAAe,GAC3C,EAAAkD,OAAAC,WAAAC,YAAoCrD,aAClCc,YACAC,WAAUuC,MACV,WACAJ,iBACF,GACAK,SAAeF,WAAAF,SAAAC,WAGfI,kCACSd,MAAKC,QAASL,IAAwB,KAAfA,KAAIM,UAAW,GAE/Ca,mBAAyBF,SAASvC,gBAClC0C,mBAAyB,OAAOD,oBAAqB,WAA5BA,mBAAAE,KAAAA,GAAmEX;CAAA,IAAApC,EAAA,OAAA8C,oBAAA9C,EAAA,OAAAK,oBAAA;EAAA,IAAA2C;EACLhD,AADKA,EAAA,OAAA8C,mBACNE,KAAAhD,EAAA,OAAhCgD,MAAAC,MAAOA,EAACC,OAAQJ,kBAAgB9C,EAAA,KAAA8C,kBAAA9C,EAAA,MAAAgD,KAAxDZ,KAAA/B,mBAAkB8C,KAAMH,EAAgC,GAAChD,EAAA,KAAA8C,kBAAA9C,EAAA,KAAAK,oBAAAL,EAAA,KAAAoC;CAAA,OAAAA,KAAApC,EAAA;CAAvF,IAAAoD,wBAA8BhB,IAAyDY;CAAA,AAAAhD,EAAA,QAAAK,qBAEvB2C,KAAAhD,EAAA,OAAhDgD,KAAA3C,mBAAkBgD,MAAOC,QAAsB,GAACtD,EAAA,MAAAK,oBAAAL,EAAA,MAAAgD;CAA9D,IAAAO,QAAcP;CACd,AAAKO,SACHC,QAAOC,KACL,8LACApD,kBACF;CANJ,IAAAqD,uBASEH,OACsBI;CAAA,AAAA3D,EAAA,QAAA0D,wBAAA1D,EAAA,QAAA0B,QAAA1B,EAAA,QAAAE,cAAAF,EAAA,QAAA4C,mCAAA5C,EAAA,QAAA4B,SAAA5B,EAAA,QAAA2B,WAAA3B,EAAA,QAAA6B,YAAA7B,EAAA,QAAAqC,cAAArC,EAAA,QAAAM,SAAAN,EAAA,QAAAG,cAAAH,EAAA,QAAA2C,UAAA3C,EAAA,QAAA8C,oBAAA9C,EAAA,QAAAoD,yBAAApD,EAAA,QAAAK,sBAGtBsD,KAAA,oBAAC,KAAD;EAAc,SAAA;YACX/B,QACC,oBAAC,MAAD;GAAW,MAAA;GAAoB,SAAA;aAC7B,oBAAC,MAAD,EAAA,UAAM,qDAAD,CAAA;EADF,CAAA,IAIL,qBAAC,OAAD;GAAY,KAAA;aAAZ;IACE,oBAAC,gBAAD;KACM,IAAAC,UAAQI;KACA/B;KACAmC;KACAlC;KACM2C;IAAgB,CAAA;IAEnCzC,mBAAkB2B,SAAU,IAC3B,oBAAC,WAAD;KAAqBlB,UAAAA;KAAoBR,OAAAA;KAAmB,aAAA;IAAkB,CAAA,IAD/E;IAGAD,mBAAkB2B,SAAU,IAA5B,qBAAA,UAAA,EAAA,UAAA,CAGIL,UAAA,OAAA,qBAAA,UAAA,EAAA,UAAA;KAGID,QAAAkB,kCAAA,OACC,oBAAC,SAAD,EAAA,UACmD,+EAD3C,CAAA;KAMTc,uBAAA,OACC,oBAAC,SAAD,EAAA,UAAS,uDAAD,CAAA;KAGTZ,mBAAA,OACC,qBAAC,SAAD,EAAA,UAAA,CAAS,kCACuB,oBAAA,UAAA,EAAA,UAAQ,gBAAsB,CAAA,CADtD,EAAA,CAAA;KAKTA,oBAAA,CAAqBM,wBACpB,qBAAC,SAAD,EAAA,UAAA;MAAS;MAC8C;MACrD,oBAAA,QAAA,EAAA,UAAON,iBAAwB,CAAA;KAFzB,EAAA,CAAA,IADT;IAKO,EAAA,CAAA,GAGXzC,mBAAkBuD,QACTC,aACFvD,QACKuD,SAAQC,MAAMC,YAAa,CAAC,CAAAC,SAAU1D,MAAKyD,YAAa,CAAC,IAE3D,EACR,CAAC,CAAAE,KACGC,eACH,CAACvC,WAADmB,oBAAAM,wBAGE,oBAAC,gBAAD;KAEYS,UAAAA;KACE1D;KACAD;KACF,UAAA,CAACwD;KACF,SAAAG,WAAQX,OAAQJ;KACfjB;KACEQ;KACJM;KACUG;IAAgB,GAT7Be,WAAQX,EASqB,IAIpC,oBAAC,eAAD;KAEUP;KACEkB,UAAAA;KAKR,WAAClC,WAAA,CACE+B,wBACD7B,UAAQsC,aACCP,QAACQ,MAAOA,GAACvD,OAAawD,SAAKnE,UAC9B,CAAC,CAAAiD,MAACmB,QAAOF,IAAE9E,yBAAyBuE,WAAQX,EAAG,MAJvD;IAKK,GAZFW,WAAQX,EAYN,CAIb,CAAC,EAAA,CAAA,IAzEN;GAXG;;CANN,CAAA,GA+FElD,EAAA,MAAA0D,sBAAA1D,EAAA,MAAA0B,MAAA1B,EAAA,MAAAE,YAAAF,EAAA,MAAA4C,iCAAA5C,EAAA,MAAA4B,OAAA5B,EAAA,MAAA2B,SAAA3B,EAAA,MAAA6B,UAAA7B,EAAA,MAAAqC,YAAArC,EAAA,MAAAM,OAAAN,EAAA,MAAAG,YAAAH,EAAA,MAAA2C,QAAA3C,EAAA,MAAA8C,kBAAA9C,EAAA,MAAAoD,uBAAApD,EAAA,MAAAK,oBAAAL,EAAA,MAAA2D,MAAAA,KAAA3D,EAAA;CAhGR,IAAAuE,UACEZ,IAkGFa,wBAA8B,CAAC7C,WAADmB,oBAAA,CAAiCM;CAM/D,IAJI,CAAClD,cAID,CAACC,cAAD,CAAgBA,WAAUuC,MAAK,OAC1B;CAiBO,IAAA+B,KAAA,CAAC9B,QACL+B,KAAA,CAAC/B,UAADhB,WAAA,CAAuB6C,wBAAvBzB,KAAAA,IAAA,WAAoE4B;CAAA,AAAA3E,EAAA,QAAAe,QAAAf,EAAA,QAAAyE,MAAAzE,EAAA,QAAA0E,MAJ5EC,MAAA,oBAAC,QAAD;EACO,MAAA;EACA,MAAA;EACK,UAAAF;EACJ,MAAAC;EACArG,MAAAA;EACG8C,SAAAA;EACJC,KAAAA;EACKL,UAAAA;CAAI,CAAA,GACdf,EAAA,MAAAe,MAAAf,EAAA,MAAAyE,IAAAzE,EAAA,MAAA0E,IAAA1E,EAAA,MAAA2E,OAAAA,MAAA3E,EAAA;CAAA,IAAA4E;CACM,OADN5E,EAAA,QAAAuE,WAAAvE,EAAA,QAAAe,QAAAf,EAAA,QAAA2E,OAnBJC,MAAA,oBAAC,SAAD;EACE,SAAA;EACA,eAAA;EACSL;EACHxD;EACN,QAAA;EACKM,KAAAA;EACI,UAAA;EACJ,MAAA;YAELsD;CAVM,CAAA,GAoBE3E,EAAA,MAAAuE,SAAAvE,EAAA,MAAAe,MAAAf,EAAA,MAAA2E,KAAA3E,EAAA,MAAA4E,OAAAA,MAAA5E,EAAA,KApBV4E;AAoBU;AA1MP,SAAAtB,SAAAuB,KAAA;CAAA,OA6D2C5B,IAACC,MAAOD,IAACa;AAAM;AA7D1D,SAAA5C,QAAA4D,GAAA;CAAA,OAmBgD,CAACA;AAAC;;;;;;;;ACTzD,MAAagB,2BAA0BC,UAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACrC,EAAAC,IAAAC,YAAAC,WAAAC,UAA2CN,OAC3CO,MAAYD,SAAAD,WAEZ,CAAAG,cAAAC,iBAAsCrB,SAAS,EAAK,GAACsB;CAAA,AAAAT,EAAA,OAAAU,OAAAC,IAAA,2BAAA,KACzBF,WAAMD,cAAc,EAAK,GAACR,EAAA,KAAAS,MAAAA,KAAAT,EAAA;CAAtD,IAAAY,UAAgBH,IAA2CI;CAAA,AAAAb,EAAA,OAAAM,MAMjDO,KAAAb,EAAA,MAHNa,KAAAP,OAAOQ,MAAKC,QAAST,IAAIX,wBAAwB,IAE5CW,IAAIX,2BAFT,CAAA,GAGMK,EAAA,KAAAM,KAAAN,EAAA,KAAAa;CALV,IAAAG,eAEIH,IAOJI,QAAcjC,SAAS,GAACkC;CAAA,AAAAlB,EAAA,OAAAU,OAAAC,IAAA,2BAAA,KACCO,KAAA,EAAAC,YAAazB,YAAW,GAACM,EAAA,KAAAkB,MAAAA,KAAAlB,EAAA;CAAlD,IAAAoB,SAAe3B,UAAUyB,EAAyB,GAACG;CAAA,AAAArB,EAAA,OAAAoB,UAAApB,EAAA,OAAAG,cAAAH,EAAA,OAAAiB,SAAAjB,EAAA,OAAAgB,gBAGrBK,WAAA;EAC5B,IAAAC,KAAWF,OAAMG,YAAa;EAe9BD,AAbAA,GAAEE,MAAOrB,YAAYsB,OAAiD,GAElET,aAAYU,SAAU,KACxBV,aAAYW,SAASC,gBAAA;GAEnBN,AADAA,GAAEO,OAAQD,YAAW/B,MAAMiC,IAAK,GAChCR,GAAEO,OAAQ,UAAUD,YAAW/B,MAAMiC,MAAO;EAAC,CAC9C,GAGHR,GAAEO,OAAQ1B,UAAU,GAEpBmB,GAAEO,OAAQ,UAAU1B,YAAY,GAEhCmB,GAAES,OAAQ,CAAC,CAAAC,WACH;GAGJf,AAFAL,QAAQ,GAERK,MAAKgB,KAAM;IAAAC,QACD;IAASC,OACV;GACT,CAAC;EAAC,CAEH,CAAC,CAAAC,OACKC,QAAA;GACLpB,MAAKgB,KAAM;IAAAC,QACD;IAAOC,OACR;IAA4CG,aACtCD,IAAGE;GAClB,CAAC;EAAC,CACH;CAAC,GACLvC,EAAA,KAAAoB,QAAApB,EAAA,KAAAG,YAAAH,EAAA,KAAAiB,OAAAjB,EAAA,KAAAgB,cAAAhB,EAAA,KAAAqB,MAAAA,KAAArB,EAAA;CAjCD,IAAAwC,YAAkBnB,IAqCNoB,KAAA,CAACnC,OAAD,CAASU,aAAYU,QAAOgB;CAAA,AAAA1C,EAAA,OAAAU,OAAAC,IAAA,2BAAA,KAG5B+B,WAAA;EACRlC,cAAc,EAAI;CAAC,GACpBR,EAAA,KAAA0C,MAAAA,KAAA1C,EAAA;CAAA,IAAA2C;CAAA,AAAA3C,EAAA,QAAAO,gBAAAP,EAAA,QAAAwC,aAAAxC,EAAA,QAAAgB,gBACO2B,KAAApC,gBAAA;EAAAqC,MACA;EAASC,UACLjC;EAAOkC,iBACN;GAETlC,AADA4B,UAAU,GACV5B,QAAQ;EAAC;EACVmC,MACK;EAAUR,SAEdvB,aAAYU,WAAY,IAAxB,2CAAA,cAEkBV,aAAYU,OAAO;CACzC,GAAC1B,EAAA,MAAAO,cAAAP,EAAA,MAAAwC,WAAAxC,EAAA,MAAAgB,cAAAhB,EAAA,MAAA2C,MAAAA,KAAA3C,EAAA;CAAA,IAAAgD;CACF,OADEhD,EAAA,QAAAyC,MAAAzC,EAAA,QAAA2C,MApBIK,KAAA;EAAAC,OACE;EAAyBC,UACtBT;EAA4BU,MAChCpE;EAASgE,MACT;EAAUK,UACNV;EAETW,QACOV;CAaV,GAAC3C,EAAA,MAAAyC,IAAAzC,EAAA,MAAA2C,IAAA3C,EAAA,MAAAgD,MAAAA,KAAAhD,EAAA,KArBMgD;AAqBN;AA3EoC,SAAAvB,QAAAD,OAAA;CAAA,OAsBHA,MAAK8B,MAAO,CAAC3D,uBAAuB,CAAC;AAAC;;;;;;;;ACrC1E,SAAgB+D,cAAcC,OAA4D;CACxF,IAAMC,SAASD,OAAOE,WAAWF,OAAOG,SAASH,OAAOI,WAClD,EAACC,eAAeC,uBAAsBR,uCAAuC,GAC7ES,aAAaN,SAASI;CAE5B,IAAI,CAACE,cAAc,OAAOA,cAAe,UACvC,OAAO;CAGT,IAAMC,WAAWC,MAAMC,QAAQJ,kBAAkB,IAC7CA,mBAAmBK,MAAMC,MAAMA,EAAEC,OAAON,UAAU,IAClD;CAGJ,OAAO;EACLO,OAAON,UAAUK,MAAMN;EACvBQ,OAAOP,UAAUO,SAASC,KAAAA;EAC1BC,OAAO;CACT;AACF;ACdA,SAAegB,cAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAT,IAAAC,iBAAAC,cAAAC,iBAAAC,YAAAC,kBAAwFE,OAExFG,YAAkBd,aAAaI,IAAI,EAAE,GAGrC,EAAAe,cAAAC,YAAAC,OAAwCnB,oBAAoBE,IAFvCU,UAASE,OAAaC,SAAIH,UAASI,WAAiBD,SAApD,IAEyD,EAAK,GAACK;CAAA,AAAAV,EAAA,OAAAS,KAAhDC,KAAAV,EAAA,MAAfU,KAAAD,OAAAE,KAAAA,IAAA,CAAA,IAAAF,IAAeT,EAAA,KAAAS,IAAAT,EAAA,KAAAU;CAAf,IAAAF,aAAAE,IACrBE,SAAevB,UAAU,GAACwB;CAAA,AAAAb,EAAA,OAAAO,gBAAAP,EAAA,OAAAQ,cAGjBK,KAAA,CAACN,gBAAgBC,WAAUM,KAAMC,OAAgC,GAACf,EAAA,KAAAO,cAAAP,EAAA,KAAAQ,YAAAR,EAAA,KAAAa,MAAAA,KAAAb,EAAA;CAD3E,IAAAgB,sBACEH,IAC4BI,IAAAC;CA+B9B,IA/B8BlB,EAAA,OAAAJ,cAAAI,EAAA,OAAAN,gBAAAM,EAAA,OAAAE,UAAAE,SAAAJ,EAAA,OAAAR,MAAAQ,EAAA,OAAAO,gBAAAP,EAAA,QAAAP,mBAAAO,EAAA,QAAAH,iBAAAG,EAAA,QAAAL,mBAAAK,EAAA,QAAAgB,uBAEpBC,WAAA;EAaR,AAZID,sBACFtB,aAAaF,EAAE,IAEfG,gBAAgBH,EAAE,GAGhBU,UAASE,QACXR,WAAWJ,EAAE,IAEbK,cAAcL,EAAE,GAGbe,gBACHd,gBAAgBD,EAAE;CACnB,GACA0B,KAAA;EACDtB;EACAF;EACAQ,UAASE;EACTZ;EACAe;EACAd;EACAI;EACAF;EACAqB;CAAmB,GACpBhB,EAAA,KAAAJ,YAAAI,EAAA,KAAAN,cAAAM,EAAA,KAAAE,UAAAE,OAAAJ,EAAA,KAAAR,IAAAQ,EAAA,KAAAO,cAAAP,EAAA,MAAAP,iBAAAO,EAAA,MAAAH,eAAAG,EAAA,MAAAL,iBAAAK,EAAA,MAAAgB,qBAAAhB,EAAA,MAAAiB,IAAAjB,EAAA,MAAAkB,OAAAD,KAAAjB,EAAA,KAAAkB,KAAAlB,EAAA,MA1BDf,UAAUgC,IAgBPC,EAUF,GAGG,CAAChB,UAASE,OAAM,OACX;CACR,IAAAe;CAAA,AAAAnB,EAAA,QAAAE,UAAAE,MAAAC,SAAAL,EAAA,QAAAY,UAEkBO,KAAAP,OAAMQ,IAAKlB,UAASE,MAAMC,KAAM,GAACL,EAAA,MAAAE,UAAAE,MAAAC,OAAAL,EAAA,MAAAY,QAAAZ,EAAA,MAAAmB,MAAAA,KAAAnB,EAAA;CAApD,IAAAqB,aAAmBF,IAGcG,KAAAN,sBAAA,aAAA,YAA6CO;CAAA,AAAAvB,EAAA,QAAAE,UAAAE,SAAAJ,EAAA,QAAAqB,cACzEE,KAAArB,UAASE,SAATiB,aACC,oBAAC,SAAD;EAAgB,QAAA;EAAiB,OAAAnB,UAASE;EAAoBiB;CAAU,CAAA,IAExE,oBAAC,SAAD,CAAQ,CAAA,GACTrB,EAAA,MAAAE,UAAAE,OAAAJ,EAAA,MAAAqB,YAAArB,EAAA,MAAAuB,MAAAA,KAAAvB,EAAA;CAAA,IAAAwB;CACI,OADJxB,EAAA,QAAAsB,MAAAtB,EAAA,QAAAuB,MALHC,KAAA,oBAAC,MAAD;EAAM,QAAA;EAAgB,SAAA;EAAS,MAAAF;YAC5BC;CADE,CAAA,GAMEvB,EAAA,MAAAsB,IAAAtB,EAAA,MAAAuB,IAAAvB,EAAA,MAAAwB,MAAAA,KAAAxB,EAAA,KANPwB;AAMO;AAvDI,SAAAT,QAAAU,MAAA;CAAA,OAUuCA,KAAIC,UAAW;AAAO;AChB5E,SAAeY,SAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAJ,MAAAF,MAAAC,MAAAM,aAAqCH,OACrCI,OAAaR,MAAIS;CAAA,AAAAJ,EAAA,OAAAE,YAAAF,EAAA,OAAAH,QAOXO,KAAAF,WAAA,oBAAA,UAAA,EACKA,SAAQ,CAAA,IAEX,oBAAC,KAAD;EAAc,SAAA;YACZ,oBAAC,MAAD;GAAY,MAAA;aAAIL;EAAX,CAAA;CADH,CAAA,GAGLG,EAAA,KAAAE,UAAAF,EAAA,KAAAH,MAAAG,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CAAA,IAAAK;CAAA,AAAAL,EAAA,OAAAG,OAIOE,KAAAL,EAAA,MAARK,KAAA,oBAAC,MAAD,CAAK,CAAA,GAAGL,EAAA,KAAAG,MAAAH,EAAA,KAAAK;CAAA,IAAAC;CAAA,AAAAN,EAAA,OAAAK,MAAAL,EAAA,OAAAJ,QADVU,KAAA,oBAAC,cAAD;EAAoBV;EAAY,MAAA;YAC9BS;CADW,CAAA,GAEEL,EAAA,KAAAK,IAAAL,EAAA,KAAAJ,MAAAI,EAAA,KAAAM,MAAAA,KAAAN,EAAA;CAAA,IAAAO;CACP,OADOP,EAAA,OAAAI,MAAAJ,EAAA,OAAAM,MAfjBC,KAAA,oBAAC,SAAD;EACE,SAAA;EACA,QAAA;EAEE,SAAAH;YASFE;CAbM,CAAA,GAgBEN,EAAA,KAAAI,IAAAJ,EAAA,KAAAM,IAAAN,EAAA,MAAAO,MAAAA,KAAAP,EAAA,KAhBVO;AAgBU;AC1Bd,SAAeM,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAGyBF,KAAA,EAAAG,UAAW,IAAG,GAACL,EAAA,KAAAE,MAAAA,KAAAF,EAAA;CAAA,IAAAM;CAAA,AAAAN,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAC/CE,KAAA,oBAAC,KAAD,EAAA,UACE,oBAAC,MAAD;EAAY,MAAA;YAAG;CAAV,CAAA,EADH,CAAA,GAEEN,EAAA,KAAAM,MAAAA,KAAAN,EAAA;CAAA,IAAAO;CAAA,AAAAP,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KACNG,KAAA,oBAAC,KAAD,EAAA,UACE,oBAAC,MAAD;EAAY,MAAA;YAAG;CAAV,CAAA,EADH,CAAA,GAIEP,EAAA,KAAAO,MAAAA,KAAAP,EAAA;CAAA,IAAAQ;CAQC,OARDR,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KATVI,KAAA,oBAAC,UAAD;EAAgBd,MAAAA;EAAsB,MAAA;YACpC,qBAAC,OAAD;GAAgB,SAAA;GAAQ,KAAA;GAAU,OAAAQ;aAAlC;IACEI;IAGAC;IAKA,oBAAC,KAAD,EAAA,UACE,oBAAC,MAAD;KAAY,MAAA;eAAG;IAAV,CAAA,EADH,CAAA;GATA;;CADC,CAAA,GAiBEP,EAAA,KAAAQ,MAAAA,KAAAR,EAAA,IAjBXQ;AAiBW;ACVf,SAAemB,YAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAJ,iBAAuBE,OAAKG;CAAA,AAAAF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KACHF,KAAA,EAAAG,YAAab,YAAW,GAACQ,EAAA,KAAAE,MAAAA,KAAAF,EAAA;CAAlD,IAAAM,SAAehB,UAAUY,EAAyB,GAClD,EAAAK,WAAAC,YAA6BjB,aAAa,GAC1CkB,QAAcvB,SAAS,GACvB,CAAAwB,YAAAC,iBAAoCvB,SAA0B,IAAI,GAACwB;CAAA,AAAAZ,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KACZQ,KAAA,CAAA,GAAEZ,EAAA,KAAAY,MAAAA,KAAAZ,EAAA;CAAzD,IAAA,CAAAa,YAAAC,iBAAoC1B,SAAmBwB,EAAE,GAACG;CAAA,AAAAf,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAEtBW,MAAAC,OAAA;EAClCF,eAAcG,QAASC,MAAKC,qBAAM,IAAIC,IAAI,CAAA,GAAIH,KAAKD,EAAE,CAAC,CAAC,CAAC;CAAC,GAC1DhB,EAAA,KAAAe,MAAAA,KAAAf,EAAA;CAFD,IAAAqB,kBAAwBN,IAKxB,CAAAO,MAAAC,WAAwBnC,SAAS,EAAK,GAACoC;CAAA,AAAAxB,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KACZoB,WAAMD,QAAQ,EAAI,GAACvB,EAAA,KAAAwB,MAAAA,KAAAxB,EAAA;CAA9C,IAAAyB,SAAeD,IAAoCE;CAAA,AAAA1B,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KACvBsB,WAAMH,QAAQ,EAAK,GAACvB,EAAA,KAAA0B,MAAAA,KAAA1B,EAAA;CAAhD,IAAA2B,UAAgBD,IAAqCE;CAAA,AAAA5B,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAEpBwB,MAAAC,SAAA;EAC/BlB,eAAcmB,UAAUb,QAAMC,MAAKC,qBAAM,IAAIC,IAAI,CAAA,GAAIH,OAAKD,IAAE,CAAC,CAAQ,IAA7C,CAA2CA,IAAE,CAAE;CAAC,GACzEhB,EAAA,KAAA4B,MAAAA,KAAA5B,EAAA;CAFD,IAAA+B,eAAqBH,IAEfI;CAAA,AAAAhC,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAE8B4B,MAAAC,SAAA;EAClCtB,eAAcuB,UAAUjB,QAAMA,MAAGkB,QAAQC,MAAOA,MAAMpB,IAAO,IAArC,CAAA,CAAuC;CAAC,GACjEhB,EAAA,KAAAgC,MAAAA,KAAAhC,EAAA;CAFD,IAAAqC,kBAAwBL,IAElBM;CAAA,AAAAtC,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAE6CkC,KAAA,CAAA,GAAEtC,EAAA,KAAAsC,MAAAA,KAAAtC,EAAA;CAArD,IAAA,CAAAuC,UAAAC,eAAgCpD,SAAmBkD,EAAE,GAACG;CAAA,AAAAzC,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAEvBqC,MAAAC,SAAA;EAC7BF,aAAYG,UAASzB,MAAKC,qBAAM,IAAIC,IAAI,CAAA,GAAIH,OAAKD,IAAE,CAAC,CAAC,CAAC;CAAC,GACxDhB,EAAA,KAAAyC,MAAAA,KAAAzC,EAAA;CAFD,IAAA4C,aAAmBH,IAEbI;CAAA,AAAA7C,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAE4ByC,MAAAC,SAAA;EAChCN,aAAYO,UAAS9B,MAAGkB,QAAQa,QAAOZ,QAAMpB,IAAE,CAAC;CAAC,GAClDhB,EAAA,KAAA6C,MAAAA,KAAA7C,EAAA;CAFD,IAAAiD,gBAAsBJ,IAEhBK;CAAA,AAAAlD,EAAA,QAAAM,UAAAN,EAAA,QAAAQ,WAAAR,EAAA,QAAAO,aAAAP,EAAA,QAAAS,SAAAT,EAAA,QAAAH,gBAEgCqD,YAAA;EACpC,IAAAC,OAAatD,aAAYuD,IAAKC,KAE5B;EACF/C,OAAMgD,QACK;GAAAC,KACF,YAAYhD,UAAS,GAAIC;GAASgD,QAC/B;GAAML;EAEhB,CAAC,CAAC,CAAAM,WACI;GACJhD,MAAKiD,KAAM;IAAAC,QACD;IAASC,OACV;IAASC,aACH;GACf,CAAC;EAAC,CAEH,CAAC,CAAAC,OACKC,QAAA;GAELtD,AADAuD,QAAOC,MAAOF,GAAG,GACjBtD,MAAKiD,KAAM;IAAAC,QACD;IAAOC,OACR;IAAOC,aACD;GACf,CAAC;EAAC,CACH;CAAC,GACL7D,EAAA,MAAAM,QAAAN,EAAA,MAAAQ,SAAAR,EAAA,MAAAO,WAAAP,EAAA,MAAAS,OAAAT,EAAA,MAAAH,cAAAG,EAAA,MAAAkD,OAAAA,MAAAlD,EAAA;CA1BD,IAAAkE,oBAA0BhB,KA4B1BiB,WAEEtD,WAAUuD,WAAYvE,aAAYuE,UAElCC,GAAQ3D,cAAcA,YAAU0D,SAAW,MAF3C,CAIC7B,SAAQ6B,QAAOE;CAuFV,OAvFUtE,EAAA,QAAAmE,YAAAnE,EAAA,QAAAuC,YAAAvC,EAAA,QAAAkE,qBAAAlE,EAAA,QAAAU,cAAAV,EAAA,QAAAsB,QAAAtB,EAAA,QAAAH,gBAEXyE,MAAAzE,cAAYuE,SAAW,IAC5B,oBAAC,MAAD;EAAe,SAAA;EAAG,QAAA;EAAe,QAAA;YAC/B,qBAAC,OAAD;GAAY,KAAA;aAAZ;IACE,qBAAC,QAAD;KAAa,KAAA;eAAb,CACE,oBAAC,MAAD;MAAa,QAAA;MAAa,MAAA;gBAAG;KAAxB,CAAA,GAGL,oBAAC,MAAD,CAAK,CAAA,CAJA;;IAOP,oBAAC,OAAD,EAAA,UACE,oBAAC,QAAD;KAAiB3C,SAAAA;KAAa,MAAA;KAA+B,MAAA;IAAO,CAAA,EADhE,CAAA;IAILH,QACC,oBAAC,QAAD;KACE,SAAA;KACO,QAAA;KACJ,IAAA;KACMK;KACA,SAAA;KACF,OAAA;eAEP,qBAAC,OAAD;MAAY,KAAA;MAAY,SAAA;gBAAxB;OACGY,SAAQ6B,SAAU,IACjB,qBAAC,OAAD;QAAY,KAAA;kBAAZ,CACE,qBAAC,MAAD;SAAY,MAAA;mBAAZ;UAAe;UACP;UACL7B,SAAQ6B,WAAY,IAApB,wBAAA,OAEU7B,SAAQ6B,OAAO;UAAmB;SAJ1C;YAOJ1D,cAAcA,WAAU0D,SAAU,IACjC,qBAAC,cAAD;SAAmB,MAAA;SAAiB,MAAA;mBAApC;UACG1D,WAAU0D,WAAY,IAAtB,yBAAA,GAEM1D,WAAU0D,OAAO;UAAyB;UAAI;SAH1C;aAOb,oBAAC,cAAD;SAAmB,MAAA;SAAiB,MAAA;mBAAG;QAA1B,CAAA,CAhBX;YADP;OAwBD,oBAAC,OAAD;QAAY,KAAA;kBACTvE,aAAYsC,OACHoC,MAAyC,CAAC,CAAAnB,KAC7CoB,kBACH,oBAAC,eAAD;SAEM,IAAAC,cAAWE,MAAMC;SACJvD;SACHU;SACGM;SACLO;SACGK;QAAa,GANvBwB,cAAWC,IAMY,CAE/B;OAbC,CAAA;OAeLnC,SAAQ6B,SAAU,IACjB,oBAAC,QAAD;QACO,MAAA;QACC,MAAA1D,cAAcA,YAAU0D,SAAW,IAAnC,YAAA;QAEJ,MAAA7B,SAAQ6B,WAAY,IAApB,2BAAA,gBAEoB7B,SAAQ6B,OAAO;QAE5BF,SAAAA;QACCC;OAAQ,CAAA,IAGpB,oBAAC,MAAD;QAAM,OAAA;QAAY,MAAA;kBAAG;OAAhB,CAAA;MArDH;;IARD,CAAA;GAbL;;CADH,CAAA,IADA,MAqFCnE,EAAA,MAAAmE,UAAAnE,EAAA,MAAAuC,UAAAvC,EAAA,MAAAkE,mBAAAlE,EAAA,MAAAU,YAAAV,EAAA,MAAAsB,MAAAtB,EAAA,MAAAH,cAAAG,EAAA,MAAAsE,OAAAA,MAAAtE,EAAA,KArFDsE;AAqFC;AA5JK,SAAAC,OAAAM,eAAA;CAAA,OAyH4BJ,eAAWE,OAAaC;AAAA;AAzHpD,SAAAvB,MAAAoB,aAAA;CAAA,OAoCqC,EAAAK,YAClCL,YAAWE,MAAMC,KAC/B;AAAC;ACtCL,SAAee,iBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAN,aAAAC,cAAAC,eAAgDE,OAChDG,YAAkBZ,aAAaK,YAAWQ,MAAMC,MAAOR,YAAY,GAACS;CAAA,AAAAL,EAAA,OAAAM,OAAAC,IAAA,2BAAA,KAC3CF,KAAA,EAAAG,YAAahB,YAAW,GAACQ,EAAA,KAAAK,MAAAA,KAAAL,EAAA;CAAlD,IAAAS,SAAepB,UAAUgB,EAAyB,GAClD,EAAAK,aAAmBnB,gBAAgB,GAACoB;CAAA,AAAAX,EAAA,OAAAE,aAAAF,EAAA,OAAAU,YAAAV,EAAA,OAAAL,YAAAiB,QAAAZ,EAAA,OAAAL,YAAAQ,MAAAC,QAAAJ,EAAA,OAAAL,YAAAQ,MAAAU,wBAAAb,EAAA,OAAAL,YAAAQ,MAAAW,SAE1BH,WAAA;EACR,IAEEhB,YAAWQ,MAAMC,QAEjBT,YAAWQ,MAAMW,SAEjBnB,YAAWQ,MAAMU,wBAJjB,CAMCX,UAASa,SACVb,UAASc,aACTd,UAASe,OAAM;GAEf,IAAAC,oBAA0B;IAAC;IAAgB,EAAAN,MAAOjB,YAAWiB,KAAK;IAAG;GAAO;GAE5EF,SACE,IAAIvB,WAAW,CACbC,MAAM,CAAA,GAAI8B,mBAAmB,OAAO,CAAC,GACrC9B,MAAM,CAAA,GAAI8B,mBAAmB,sBAAsB,CAAC,CAAC,CACtD,CACH;EAAC;CACF,GACFlB,EAAA,KAAAE,WAAAF,EAAA,KAAAU,UAAAV,EAAA,KAAAL,YAAAiB,MAAAZ,EAAA,KAAAL,YAAAQ,MAAAC,MAAAJ,EAAA,KAAAL,YAAAQ,MAAAU,sBAAAb,EAAA,KAAAL,YAAAQ,MAAAW,OAAAd,EAAA,KAAAW,MAAAA,KAAAX,EAAA;CAAA,IAAAmB;CAAyD,OAAzDnB,EAAA,OAAAS,UAAAT,EAAA,OAAAE,aAAAF,EAAA,QAAAH,cAAAG,EAAA,QAAAU,YAAAV,EAAA,QAAAL,eAAEwB,KAAA;EAACxB;EAAaO;EAAWL;EAAYY;EAAQC;CAAQ,GAACV,EAAA,KAAAS,QAAAT,EAAA,KAAAE,WAAAF,EAAA,MAAAH,YAAAG,EAAA,MAAAU,UAAAV,EAAA,MAAAL,aAAAK,EAAA,MAAAmB,MAAAA,KAAAnB,EAAA,KAtBzDd,UAAUyB,IAsBPQ,EAAsD,GAElD;AAAI;AClCb,SAAeM,yBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAEb,EAAAL,cAAAM,IAAAL,eAAwCE,OAAKI;CAAA,AAAAH,EAAA,OAAAE,KAArBC,KAAAH,EAAA,MAAjBG,KAAAD,OAAAE,KAAAA,IAAA,CAAA,IAAAF,IAAiBF,EAAA,KAAAE,IAAAF,EAAA,KAAAG;CAAjB,IAAAP,eAAAO;CAEP,IAAI,CAACP,aAAYS,QAAO,OACf;CACR,IAAAC;CAAA,IAAAN,EAAA,OAAAH,cAAAG,EAAA,OAAAJ,cAAA;EAAA,IAAAW;EAaIP,AAbJA,EAAA,OAAAH,aAYaU,KAAAP,EAAA,MARQO,MAAAC,gBAChBA,YAAWC,MAAMC,sBAA2BC,OAC1C,oBAAC,kBAAD;GAEeH;GACC,cAAAA,YAAWC,MAAMC,qBAAqBC;GACxCd;EAAU,GAHjBW,YAAWI,IAGM,IAL1B,MAOQZ,EAAA,KAAAH,YAAAG,EAAA,KAAAO,KARTD,KAAAV,aAAYiB,IAAKN,EASlB,GAACP,EAAA,KAAAH,YAAAG,EAAA,KAAAJ,cAAAI,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,IAAAO;CACA,OADAP,EAAA,OAAAM,KACAC,KAAAP,EAAA,MAXHO,KAAA,oBAAA,UAAA,EAAA,UACGD,GASA,CAAA,GACAN,EAAA,KAAAM,IAAAN,EAAA,KAAAO,KAXHA;AAWG;;;;;;;;AChBP,IAAA,oBACEgB,aACAC,gBACAC,uBAAuB,OAEvBT,WAAW;CACTU,MAAM;CACNC,MAAMP;CACNQ,OAAO;CACPC,MAAMf;CACNgB,UAAU;CACVC,sCAAsCN;CACtCO,QAAQ;EACNjB,YAAY;GACVY,MAAMN;GACNK,MAAM;EACR,CAAC;EACDX,YAAY;GACVY,MAAM;GACNM,aACE;GACFP,MAAM;GACNQ,IAAI,CAAC,EAACR,MAAM,SAAQ,CAAC;GACrBS,SAAS,EAACC,MAAMb,YAAW;GAC3Bc,WAAW,EAACC,YAAWC,EAAQD;EACjC,CAAC;EACD,GAAGd;CAAc;CAEnBgB,SAAS;EACPC,QAAQ;GACNC,cAAcrB;GACdsB,qBAAqB;EACvB;EACAC,QAAQC,WAAW;GACjB,IAAM,EAACH,eAAe,CAAA,GAAIC,sBAAsB,CAAA,MAAME,WAChDjB,QACJc,aAAaI,WAAW,IAAI,kBAAkB,GAAGJ,aAAaI,OAAM,gBAChEC,eAAeL,aAAaI,SAC9BJ,aACGM,KAAKC,MAA4BA,EAAE9B,oBAAoB,CAAC+B,YAAY,CAAC,CAAC,CACtEC,KAAK,IAAI,IACZ;GAQJ,OAAO;IACLvB;IACAwB,UATe,CACfL,eAAe,IAAIA,aAAY,KAAM,MACrCJ,qBAAqBG,SAASH,oBAAoBK,KAAKK,MAAcA,CAAC,CAAC,CAACF,KAAK,IAAI,IAAI,EAAE,CACxF,CACEG,OAAOf,OAAO,CAAC,CACfY,KAAK,GAINC;GACF;EACF;CACF;AACF,CAAC;ACtDH,MAAasB,+BAA+BjB,cAA4BkB,WAAW;CACjF,IAAMC,eAAe;EAAC,GAAGR;EAAgB,GAAGO;CAAM,GAC5C,EACJE,oBACAC,aACAC,eACAC,aACAC,gBACAC,oBACAC,8BACAC,8BACAC,iBACET;CAEJ,IAAIE,YAAYQ,WAAW,GACzB,MAAUC,MACR,kLACF;CAGF,OAAO;EACLC,MAAM;EAENC,QAAQ,EACNC,YAAY,EACVC,SAASC,UACP,oBAAC,sCAAD;GAAsC,GAAIA;GAAqBhB;EAAa,CAAA,EAEhF,EACF;EAEAiB,MAAM,EACJC,SAAS,CAACxB,iDAAiD,EAC7D;EAKAyB,MAAM,EACJL,YAAY,EACVM,QAAQJ,UAAU;GAChB,IACEA,MAAMK,OAAO,UACbL,MAAMM,WAAWV,SAASnB,wBAC1BX,iBAAiBkC,OAAOO,KAAK,GAC7B;IACA,IAAMC,aAAaR,OAAOO,OAAOE,KAC3BC,eAEHV,OAAOO,OAAQ,gBAA8C,CAAA,GAC1DI,2BAA2BD,aAAaE,QAC3C,EAACL,YAAWA,OAAOM,SAASN,MAAMO,oBACrC;IAEA,OACE,qBAAC,OAAD;KAAO,KAAK;eAAZ;MACG1B,cAAc,oBAAC,aAAD,EAA2BsB,aAAa,CAAA,IAAM;MAC5DC,yBAAyBjB,SAAS,IACjC,oBAAC,0BAAD;OACcc;OACZ,cAAcG;MAAyB,CAAA,IAEvC;MACHX,MAAMe,cAAcf,KAAK;KACrB;;GAEX;GAEA,OAAOA,MAAMe,cAAcf,KAAK;EAClC,EACF,EACF;EAMAgB,UAAU;GACRC,0BAA0BC,MAAMC,QAAQ;IACtC,IAAM,EAACb,YAAYc,eAAcD;IAEjC,IAAI,OAAO7B,sBAAuB;SAC5BA,mBAAmB6B,GAAG,GAAG,OAAOD;IAAAA,OAC/B,IAAIG,MAAMC,QAAQhC,kBAAkB;SACrCA,mBAAmBiC,SAASjB,UAAU,GAAG,OAAOY;IAAAA,OAC/C,IAAI5B,oBACT,OAAO4B;IAGT,OAAOhC,YAAYqC,SAASjB,UAAU,KAAKc,aACvC,CAAC,GAAGF,OAAOlB,UAAU3B,iCAAiC;KAAC,GAAG2B;KAAOoB;IAAU,CAAC,CAAC,IAC7EF;GACN;GACAM,SAASN,MAAM,EAACZ,iBACTpB,YAAYqC,SAASjB,UAAU,IAI7B,EAAEN,UAAU9B,cAAc8B,KAAK,GAAG,GAAGkB,IAAI,IAHvCA;GAKXO,UAAUP,MAAM,EAACZ,iBACXA,eAAe7B,uBACV,CAAC,GAAGyC,MAAMjD,uBAAuB,IAGnCiD;EAEX;EAIAQ,QAAQ;GAENC,OAAO,CAAChD,iBAASO,aAAaG,gBAAgBE,4BAA4B,CAAC;GAI3EqC,YAAYV,MAAM,EAACQ,aAAY;IAM7B,IALI,CAACjC,gBAKD,CAAC4B,MAAMC,QAAQrC,kBAAkB,GACnC,OAAOiC;IAGT,IAAMW,yBAAyB3C,YAAY4C,KAAKxB,gBAAgB;KAC9DD,IAAI,GAAGC,WAAU;KACjByB,OAAO,GAAGL,QAAQM,IAAI1B,UAAU,CAAC,EAAEyB,SAASzB,WAAU;KACtDA;KACA2B,YAAY,CAAC;MAACrC,MAAM;MAAcmC,OAAO;MAAeG,MAAM;KAAQ,CAAC;KACvE3B,QAAQ,EAAC4B,kBAAuC,GAC7ChD,gBAAgBgD,WACnB;IACF,EAAE,GAEIC,kBAAkBlD,YAAYmD,SAAS/B,eACpCrB,mBAAmB6C,KAAKQ,cAAc;KAC3CjC,IAAI,GAAGC,WAAU,GAAIgC,SAASjC;KAC9B0B,OAAO,GAAGO,SAASP,MAAK,GAAIL,QAAQM,IAAI1B,UAAU,CAAC,EAAEyB,SAASzB;KAC9DA;KACAC,OAAO,GACJpB,gBAAgBmD,SAASjC,GAC5B;IACF,EAAE,CACH;IAED,OAAO;KAAC,GAAGa;KAAM,GAAGW;KAAwB,GAAGO;IAAe;GAChE;EACF;EAIAG,SAAS,CAGPxE,uBAAuB;GACrB,GAAGyB;GACHgD,YAAYxD,aAAawD;GACzBC,WAAWxD;GACXyD,yBAAyBC,iBAAiBA,iBAAiBlE;GAC3DmE,YAAY,CACVhF,YACE;IACEgC,MAAM;IACNsC,MAAM;IACNW,IAAI3D,YAAY4C,KAAKI,UAAU,EAACA,KAAI,EAAE;IACtCY,MAAM9D,aAAa+D;IAEnBC,aAAaC,SAEXA,KAAKC,OAAO,OAAOC,MAA4BC,YAAY;KACzD,IAAI,CAACD,MAAM5C,OAAO8C,QAAQ,CAACF,OAAOnF,sBAChC,OAAO;KAIT,IAAMwF,gBAAgB,MADPJ,QAAQG,UAAU,EAACf,YAAYjE,YAAW,CAC7B+E,CAAM,CAACG,MACjC,kCAAkCtE,iBAClC;MACEuE,KAAKP,KAAK5C,MAAM8C;MAChBM,UAAU,UAAUR,KAAK5C,MAAM8C;KACjC,CACF;KAMA,OAJIG,iBAAiBA,kBAAkBL,KAAKnF,uBACnC,KAGF;IACT,CAAC;IACH4F,SAAS,EAEPhD,SAAS,EAACiD,QAAQ7C,eAAc;KAC9B,IAAI,CAAC6C,QAAQ,OAAO;KAKpB,IAAMvB,YADcjB,MAAMC,QAAQuC,MAAM,IAAIA,SAAS,CAACA,MAAM,EAAA,CAC/BE,MAAMC,MAAMA,EAAEhG,oBAAoB;KAc/D,OAZKsE,WAAWtE,uBAEZgD,SAAS,cACJ;MACLJ,QAAQ,4BAA4BzB,cAAa;MACjD8E,QAAQ;OACN/E,aAAa8B,SAAS;OACtBsB,UAAUA,SAAStE;MACrB;KACF,IAGK;MACL4C,QAAQ,GAAGzB,cAAa;MACxB8E,QAAQ,EAAC3B,UAAUA,SAAStE,qBAAoB;KAClD,IAf6C;IAgB/C,EACF;GACF,GACA,EAACkG,QAAQ,GAAK,CAChB,CAAC;EAEL,CAAC,CAAC;CAEN;AACF,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["Preview","useSchema","Feedback","DocumentPreviewProps","value","type","DocumentPreview","props","$","_c","schema","t0","get","schemaType","t1","Symbol","for","PluginConfigContext","METADATA_SCHEMA_NAME","TRANSLATIONS_ARRAY_NAME","API_VERSION","DEFAULT_CONFIG","supportedLanguages","schemaTypes","languageField","weakReferences","bulkPublish","metadataFields","apiVersion","allowCreateMetaDoc","callback","hideLanguageFilter","metadataOmnisearchVisibility","addTemplates","SanityDocument","METADATA_SCHEMA_NAME","separateReferences","data","translations","otherReferences","length","forEach","doc","_type","push","Card","Flex","Spinner","Stack","Text","useEffect","useMemo","SanityDocument","useListeningQuery","MetadataDocument","DocumentPreview","separateReferences","DeleteTranslationDialogProps","doc","documentId","setTranslations","translations","DeleteTranslationDialog","props","$","_c","t0","id","t1","Symbol","for","t2","params","initialValue","data","loading","t3","otherReferences","t4","t5","t6","length","t7","t8","_type","t9","map","_temp","t10","_temp2","t11","t12","t13","reference","_id","translation","Button","Grid","DeleteTranslationFooterProps","translations","onClose","onProceed","DeleteTranslationFooter","props","$","_c","t0","t1","length","t2","t3","createContext","use","useContext","useMemo","LayoutProps","useClient","useWorkspace","DEFAULT_CONFIG","PluginConfig","PluginConfigContext","DocumentInternationalizationContext","useDocumentInternationalizationContext","DocumentInternationalizationProviderProps","pluginConfig","Required","Omit","Pick","promiseCache","Map","Promise","createCacheKey","workspaceId","createOrGetPromise","fn","cacheKey","cached","get","promise","set","DocumentInternationalizationProvider","props","$","_c","t0","apiVersion","client","workspace","name","t1","t2","bb0","Array","isArray","supportedLanguages","t3","t4","languagesPromise","contextValue","renderDefault","t5","TrashIcon","useToast","useCallback","useState","useClient","DocumentActionDescription","DocumentActionProps","LANGUAGE_FIELD_NAME","DeleteTranslationDialog","DeleteTranslationFooter","useDocumentInternationalizationContext","API_VERSION","TRANSLATIONS_ARRAY_NAME","MetadataDocument","DeleteOperation","useDeleteTranslationAction","props","$","_c","id","documentId","published","draft","doc","languageField","isDialogOpen","setDialogOpen","t0","Symbol","for","translations","setTranslations","t1","onClose","rawDocumentLanguage","documentLanguage","toast","t2","apiVersion","client","t3","tx","transaction","operation","length","forEach","translation","patch","_id","unset","delete","commit","then","push","status","title","description","catch","err","message","onProceed","t4","t5","t6","type","header","content","footer","t7","label","disabled","icon","tone","onHandle","dialog","action","displayName","DeleteTranslationAction","useListeningQuery","METADATA_SCHEMA_NAME","Metadata","query","useTranslationMetadata","id","$","_c","t0","params","translationSchema","data","loading","error","t1","defineLocaleResourceBundle","documenti18nLocaleNamespace","const","documentInternationalizationUsEnglishLocaleBundle","locale","namespace","resources","CopyIcon","useToast","uuid","useCallback","useMemo","useState","filter","firstValueFrom","DEFAULT_STUDIO_CLIENT_OPTIONS","Id","InsufficientPermissionsMessage","PatchOperations","useClient","useCurrentUser","useDocumentOperation","useDocumentPairPermissions","useDocumentStore","useTranslation","DocumentActionProps","DocumentActionDescription","LANGUAGE_FIELD_NAME","useRouter","structureLocaleNamespace","METADATA_SCHEMA_NAME","TRANSLATIONS_ARRAY_NAME","useTranslationMetadata","documenti18nLocaleNamespace","EditOperations","duplicate","disabled","execute","id","OperationSuccessEvent","op","type","DISABLED_REASON_KEY","METADATA_NOT_FOUND","MULTIPLE_METADATA","NOTHING_TO_DUPLICATE","NOT_READY","useDuplicateWithTranslationsAction","t0","$","_c","onComplete","documentStore","navigateIntent","isDuplicating","setDuplicating","t1","permission","permissions","isPermissionsLoading","data","loading","isMetadataDocumentLoading","hasOneMetadataDocument","Array","isArray","length","metadataDocument","client","toast","t","s","d","currentUser","t2","pair","performDuplication","Promise","reject","Error","translationsArray","translations","Map","all","map","translation","dupeId","locale","docId","value","_ref","trim","duplicateTranslation","editOperations","pipe","_temp","duplicateTranslationSuccess","operationEvents","_temp2","set","duplicateMetadata","_id","_temp3","duplicateMetadataSuccess","_temp4","dupeId_0","patch","Object","fromEntries","from","entries","_temp5","transaction","commit","values","at","catch","error","console","push","status","title","description","message","finally","handle","granted","t3","bb0","t4","t5","t6","icon","label","Boolean","t7","onHandle","action","displayName","DuplicateWithTranslationsAction","props","e","op_0","e_0","locale_0","documentId","useCallback","useRouter","usePaneRouter","useOpenInNewPane","id","type","$","_c","router","routerPanesState","groupIndex","t0","length","navigateIntent","panes","splice","params","href","resolvePathFromState","navigateUrl","path","openInNewPane","randomKey","LANGUAGE_FIELD_NAME","TranslationReference","createReference","language","ref","type","strengthenOnPublish","_key","_type","value","_ref","_weak","_strengthenOnPublish","CogIcon","Box","Button","Stack","Text","Tooltip","useCallback","useState","ObjectSchemaType","useClient","METADATA_SCHEMA_NAME","useOpenInNewPane","createReference","useDocumentInternationalizationContext","LanguageManageProps","id","metadataId","schemaType","documentId","sourceLanguageId","LanguageManage","props","$","_c","open","openCreated","allowCreateMetaDoc","apiVersion","weakReferences","t0","client","userHasClicked","setUserHasClicked","canCreate","Boolean","t1","name","transaction","sourceReference","newMetadataDocument","_id","_type","schemaTypes","translations","createIfNotExists","commit","then","catch","err","console","error","handleClick","disabled","t2","t3","Symbol","for","t4","t5","t6","extractWithPath","Mutation","isDocumentSchemaType","ObjectSchemaType","Path","pathToString","SanityDocument","SchemaType","DocumentMember","schemaType","path","name","value","removeExcludedPaths","doc","pathsToExclude","extractPaths","filter","field","options","documentInternationalization","exclude","map","mut","mutations","patch","id","_id","unset","apply","result","fields","fieldPath","fieldSchema","type","undefined","thisFieldWithPath","jsonType","innerFields","push","of","length","some","item","arrayValue","Array","_key","language","_type","itemPath","itemSchema","find","t","arrayMember","AddIcon","CheckmarkIcon","SplitVerticalIcon","Badge","Box","Button","Flex","Spinner","Text","Tooltip","useToast","uuid","useCallback","useState","getDraftId","getVersionFromId","getVersionId","isVersionId","ObjectSchemaType","SanityDocument","useClient","LANGUAGE_FIELD_NAME","METADATA_SCHEMA_NAME","useOpenInNewPane","Language","Metadata","MetadataDocument","TranslationReference","createReference","removeExcludedPaths","useDocumentInternationalizationContext","LanguageOptionProps","language","schemaType","documentId","disabled","current","source","metadataId","metadata","sourceLanguageId","LanguageOption","props","$","_c","userHasClicked","setUserHasClicked","t0","id","translations","length","find","t","undefined","translation","apiVersion","languageField","weakReferences","callback","t1","client","toast","open","value","_ref","name","t2","handleOpen","t3","title","_createdAt","Error","transaction","newTranslationDocumentId","sourceReleaseId","_id","newTranslationDocument","create","sourceReference","newTranslationReference","newMetadataDocument","_type","schemaTypes","createIfNotExists","metadataPatch","patch","setIfMissing","insert","commit","then","metadataExisted","Boolean","push","status","description","sourceDocument","newDocument","destinationLanguageId","metaDocumentId","catch","err","console","error","message","handleCreate","t4","t5","Symbol","for","t6","t7","t8","t9","t10","t11","t12","t13","t14","EditIcon","Badge","Box","Button","Flex","Text","useToast","useCallback","SanityDocument","useClient","Language","useDocumentInternationalizationContext","LanguagePatchProps","language","source","disabled","LanguagePatch","props","$","_c","apiVersion","languageField","t0","client","toast","t1","id","title","Error","currentId","_id","patch","set","commit","then","push","status","catch","err","console","error","handleClick","t2","Symbol","for","t3","t4","t5","t6","Box","ConstrainedBox","t0","$","_c","children","t1","Symbol","for","maxWidth","t2","Card","Flex","Text","PropsWithChildren","ConstrainedBox","Warning","t0","$","_c","children","t1","TranslateIcon","Box","Button","Card","Popover","Stack","Text","TextInput","useClickOutsideEvent","uuid","ChangeEvent","useCallback","useMemo","useRef","useState","useEditState","usePerspective","LANGUAGE_FIELD_NAME","useTranslationMetadata","DocumentInternationalizationMenuProps","useDocumentInternationalizationContext","LanguageManage","LanguageOption","LanguagePatch","Warning","DocumentInternationalizationMenu","props","$","_c","documentId","schemaType","languageField","supportedLanguages","query","setQuery","t0","Symbol","for","event","currentTarget","value","handleQuery","open","setOpen","t1","_temp","handleClick","buttonRef","popoverRef","t2","handleClickOutside","t3","current","data","loading","error","metadata","Array","isArray","length","_id","t4","bb0","t5","metadataId","selectedReleaseId","draft","published","version","name","source","documentIsInOneMetadataDocument","rawLanguageValue","sourceLanguageId","undefined","t6","l","id","some","sourceLanguageIsValid","every","_temp2","valid","console","warn","allLanguagesAreValid","t7","filter","language","title","toLowerCase","includes","map","language_0","translations","t","_ref","t_0","content","issueWithTranslations","t8","t9","t10","t11","l_0","o","TrashIcon","useToast","useCallback","useMemo","useState","DocumentActionDescription","DocumentActionProps","KeyedObject","Reference","TypedObject","useClient","API_VERSION","TRANSLATIONS_ARRAY_NAME","TranslationReference","value","useDeleteMetadataAction","props","$","_c","id","documentId","published","draft","doc","isDialogOpen","setDialogOpen","t0","Symbol","for","onClose","t1","Array","isArray","translations","toast","t2","apiVersion","client","t3","tx","transaction","patch","_temp","length","forEach","translation","delete","_ref","commit","then","push","status","title","catch","err","description","message","onProceed","t4","t5","t6","type","onCancel","onConfirm","tone","t7","label","disabled","icon","onHandle","dialog","unset","DocumentBadgeDescription","DocumentBadgeProps","useDocumentInternationalizationContext","LanguageBadge","props","source","version","draft","published","languageField","supportedLanguages","languageId","language","Array","isArray","find","l","id","label","title","undefined","color","Card","Spinner","useEffect","useMemo","Preview","useEditState","useSchema","useValidationStatus","DocumentCheckProps","id","onCheckComplete","addInvalidId","removeInvalidId","addDraftId","removeDraftId","DocumentCheck","props","$","_c","editState","documentType","draft","_type","published","isValidating","validation","t0","t1","undefined","schema","t2","some","_temp","validationHasErrors","t3","t4","t5","get","schemaType","t6","t7","t8","item","level","Box","ButtonTone","Text","Tooltip","ComponentType","PropsWithChildren","TextWithTone","InfoIconProps","icon","tone","text","InfoIcon","props","$","_c","children","Icon","t0","t1","t2","t3","InfoOutlineIcon","Box","Stack","Text","InfoIcon","Info","$","_c","t0","Symbol","for","maxWidth","t1","t2","t3","Button","Card","Dialog","Inline","Stack","Text","useToast","useCallback","useState","TextWithTone","useClient","useWorkspace","API_VERSION","TranslationReference","DocumentCheck","Info","BulkPublishProps","translations","BulkPublish","props","$","_c","t0","Symbol","for","apiVersion","client","projectId","dataset","toast","invalidIds","setInvalidIds","t1","checkedIds","setCheckedIds","t2","id","ids","Array","from","Set","onCheckComplete","open","setOpen","t3","onOpen","t4","onClose","t5","id_0","ids_0","addInvalidId","t6","id_1","ids_1","filter","i","removeInvalidId","t7","draftIds","setDraftIds","t8","id_2","ids_2","addDraftId","t9","id_3","ids_3","i_0","removeDraftId","t10","body","map","_temp","request","uri","method","then","push","status","title","description","catch","err","console","error","handleBulkPublish","disabled","length","Boolean","t11","_temp2","translation_1","translation","_key","value","_ref","translation_0","documentId","useEffect","PatchEvent","unset","useClient","useEditState","useDocumentPane","API_VERSION","TranslationReference","ReferencePatcherProps","translation","documentType","metadataId","ReferencePatcher","props","$","_c","editState","value","_ref","t0","Symbol","for","apiVersion","client","onChange","t1","_key","_strengthenOnPublish","_weak","draft","published","ready","referencePathBase","t2","TranslationReference","ReferencePatcher","OptimisticallyStrengthenProps","translations","metadataId","OptimisticallyStrengthen","props","$","_c","t0","t1","undefined","length","t2","t3","translation","value","_strengthenOnPublish","type","_key","map","TranslateIcon","defineField","defineType","DocumentDefinition","FieldDefinition","LANGUAGE_FIELD_NAME","METADATA_SCHEMA_NAME","TRANSLATIONS_ARRAY_NAME","TranslationReference","schemaTypes","metadataFields","omnisearchVisibility","type","name","title","icon","liveEdit","__experimental_omnisearch_visibility","fields","description","of","options","list","readOnly","value","Boolean","preview","select","translations","documentSchemaTypes","prepare","selection","length","languageKeys","map","t","toUpperCase","join","subtitle","s","filter","Stack","defineField","definePlugin","isSanityDocument","internationalizedArray","LANGUAGE_FIELD_NAME","useDeleteMetadataAction","LanguageBadge","BulkPublish","DocumentInternationalizationProvider","DocumentInternationalizationMenu","OptimisticallyStrengthen","API_VERSION","DEFAULT_CONFIG","METADATA_SCHEMA_NAME","documentInternationalizationUsEnglishLocaleBundle","metadata","PluginConfig","TranslationReference","documentInternationalization","config","pluginConfig","supportedLanguages","schemaTypes","languageField","bulkPublish","metadataFields","hideLanguageFilter","metadataOmnisearchVisibility","metadataInternationalization","addTemplates","length","Error","name","studio","components","layout","props","i18n","bundles","form","input","id","schemaType","value","metadataId","_id","translations","weakAndTypedTranslations","filter","_weak","_strengthenOnPublish","renderDefault","document","unstable_languageFilter","prev","ctx","documentId","Array","isArray","includes","badges","actions","schema","types","templates","parameterizedTemplates","map","title","get","parameters","type","languageId","staticTemplates","flatMap","language","plugins","apiVersion","languages","includeForDocumentType","documentType","fieldTypes","to","weak","weakReferences","validation","Rule","custom","item","context","_ref","client","getClient","valueLanguage","fetch","ref","draftRef","options","parent","parentArray","find","p","params","strict"],"sources":["../src/components/DeleteTranslationDialog/DocumentPreview.tsx","../src/constants.ts","../src/components/DeleteTranslationDialog/separateReferences.ts","../src/components/DeleteTranslationDialog/index.tsx","../src/components/DeleteTranslationFooter.tsx","../src/components/DocumentInternationalizationContext.tsx","../src/actions/DeleteTranslationAction.tsx","../src/hooks/useLanguageMetadata.tsx","../src/i18n/index.ts","../src/actions/DuplicateWithTranslationsAction.tsx","../src/hooks/useOpenInNewPane.tsx","../src/utils/createReference.ts","../src/components/LanguageManage.tsx","../src/utils/excludePaths.ts","../src/components/LanguageOption.tsx","../src/components/LanguagePatch.tsx","../src/components/ConstrainedBox.tsx","../src/components/Warning.tsx","../src/components/DocumentInternationalizationMenu.tsx","../src/actions/DeleteMetadataAction.tsx","../src/badges/index.tsx","../src/components/BulkPublish/DocumentCheck.tsx","../src/components/BulkPublish/InfoIcon.tsx","../src/components/BulkPublish/Info.tsx","../src/components/BulkPublish/index.tsx","../src/components/OptimisticallyStrengthen/ReferencePatcher.tsx","../src/components/OptimisticallyStrengthen/index.tsx","../src/schema/translation/metadata.ts","../src/plugin.tsx"],"sourcesContent":["import {Preview, useSchema} from 'sanity'\nimport {Feedback} from 'sanity-plugin-utils'\n\ntype DocumentPreviewProps = {\n value: unknown\n type: string\n}\n\n// Wrapper of Preview just so that the schema type is satisfied by schema.get()\nexport default function DocumentPreview(props: DocumentPreviewProps) {\n const schema = useSchema()\n\n const schemaType = schema.get(props.type)\n if (!schemaType) {\n return <Feedback tone=\"critical\" title=\"Schema type not found\" />\n }\n\n return <Preview value={props.value} schemaType={schemaType} />\n}\n","import type {PluginConfigContext} from './types'\n\nexport const METADATA_SCHEMA_NAME = `translation.metadata`\nexport const TRANSLATIONS_ARRAY_NAME = `translations`\nexport const API_VERSION = `2025-02-19`\nexport const DEFAULT_CONFIG: PluginConfigContext = {\n supportedLanguages: [],\n schemaTypes: [],\n languageField: `language`,\n weakReferences: false,\n bulkPublish: false,\n metadataFields: [],\n apiVersion: API_VERSION,\n allowCreateMetaDoc: false,\n callback: null,\n hideLanguageFilter: false,\n metadataOmnisearchVisibility: true,\n addTemplates: true,\n}\n","import type {SanityDocument} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../../constants'\n\n/**\n * Splits an array of referring documents into two groups: translation metadata\n * documents (whose `_type` matches the metadata schema name) and all other\n * references. Used by the delete-translation dialog to show which metadata\n * entries will be patched versus which external references may block deletion.\n */\nexport function separateReferences(data: SanityDocument[] | null = []): {\n translations: SanityDocument[]\n otherReferences: SanityDocument[]\n} {\n const translations: SanityDocument[] = []\n const otherReferences: SanityDocument[] = []\n\n if (data && data.length > 0) {\n data.forEach((doc) => {\n if (doc._type === METADATA_SCHEMA_NAME) {\n translations.push(doc)\n } else {\n otherReferences.push(doc)\n }\n })\n }\n\n return {translations, otherReferences}\n}\n","import {Card, Flex, Spinner, Stack, Text} from '@sanity/ui'\nimport {useEffect, useMemo} from 'react'\nimport type {SanityDocument} from 'sanity'\nimport {useListeningQuery} from 'sanity-plugin-utils'\n\nimport type {MetadataDocument} from '../../types'\nimport DocumentPreview from './DocumentPreview'\nimport {separateReferences} from './separateReferences'\n\ntype DeleteTranslationDialogProps = {\n doc: SanityDocument\n documentId: string\n setTranslations: (translations: MetadataDocument[]) => void\n}\n\nexport default function DeleteTranslationDialog(props: DeleteTranslationDialogProps) {\n const {doc, documentId, setTranslations} = props\n\n // Get all references and check if any of them are translations metadata\n const {data, loading} = useListeningQuery<SanityDocument[]>(\n `*[references($id)]{_id, _type, translations}`,\n {\n params: {id: documentId},\n initialValue: [],\n },\n )\n const {translations, otherReferences} = useMemo(() => separateReferences(data), [data])\n\n useEffect(() => {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n setTranslations(translations as MetadataDocument[])\n }, [setTranslations, translations])\n\n if (loading) {\n return (\n <Flex padding={4} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )\n }\n\n return (\n <Stack gap={4}>\n {translations && translations.length > 0 ? (\n <Text>\n This document is a language-specific version which other translations depend on.\n </Text>\n ) : (\n <Text>This document does not have connected translations.</Text>\n )}\n <Card border padding={3}>\n <Stack gap={4}>\n <Text size={1} weight=\"semibold\">\n {translations && translations.length > 0 ? (\n <>Before this document can be deleted</>\n ) : (\n <>This document can now be deleted</>\n )}\n </Text>\n <DocumentPreview value={doc} type={doc._type} />\n {translations && translations.length > 0 ? (\n <>\n <Card borderTop />\n <Text size={1} weight=\"semibold\">\n The reference in{' '}\n {translations.length === 1\n ? `this translations document`\n : `these translations documents`}{' '}\n must be removed\n </Text>\n {translations.map((translation) => (\n <DocumentPreview\n key={translation._id}\n value={translation}\n type={translation._type}\n />\n ))}\n </>\n ) : null}\n {otherReferences && otherReferences.length > 0 ? (\n <>\n <Card borderTop />\n <Text size={1} weight=\"semibold\">\n {otherReferences.length === 1\n ? `There is an additional reference`\n : `There are additional references`}{' '}\n to this document\n </Text>\n {otherReferences.map((reference) => (\n <DocumentPreview key={reference._id} value={reference} type={reference._type} />\n ))}\n </>\n ) : null}\n </Stack>\n </Card>\n {otherReferences.length === 0 ? (\n <Text>This document has no other references.</Text>\n ) : (\n <Text>\n You may not be able to delete this document because other documents refer to it.\n </Text>\n )}\n </Stack>\n )\n}\n","import {Button, Grid} from '@sanity/ui'\n\ntype DeleteTranslationFooterProps = {\n translations: unknown[]\n onClose: () => void\n onProceed: () => void\n}\n\nexport default function DeleteTranslationFooter(props: DeleteTranslationFooterProps) {\n const {translations, onClose, onProceed} = props\n\n return (\n <Grid gridTemplateColumns={2} gap={2}>\n <Button text=\"Cancel\" onClick={onClose} mode=\"ghost\" />\n <Button\n text={\n translations && translations.length > 0\n ? `Unset translation reference`\n : `Delete document`\n }\n onClick={onProceed}\n tone=\"critical\"\n />\n </Grid>\n )\n}\n","import {createContext, use, useContext, useMemo} from 'react'\nimport type {LayoutProps} from 'sanity'\nimport {useClient, useWorkspace} from 'sanity'\n\nimport {DEFAULT_CONFIG} from '../constants'\nimport type {PluginConfig, PluginConfigContext} from '../types'\n\nconst DocumentInternationalizationContext = createContext<PluginConfigContext>(DEFAULT_CONFIG)\n\nexport function useDocumentInternationalizationContext(): PluginConfigContext {\n return useContext(DocumentInternationalizationContext)\n}\n\ntype DocumentInternationalizationProviderProps = LayoutProps & {\n pluginConfig: Required<Omit<PluginConfig, 'metadataInternationalization'>> &\n Pick<PluginConfig, 'metadataInternationalization'>\n}\n\n// Simple promise cache for React.use\nconst promiseCache = new Map<string, Promise<PluginConfigContext['supportedLanguages']>>()\n\nfunction createCacheKey(workspaceId: string): string {\n return `languages-${workspaceId}`\n}\n\nfunction createOrGetPromise(\n fn: () => Promise<PluginConfigContext['supportedLanguages']>,\n cacheKey: string,\n): Promise<PluginConfigContext['supportedLanguages']> {\n const cached = promiseCache.get(cacheKey)\n if (cached) {\n return cached\n }\n const promise = fn()\n promiseCache.set(cacheKey, promise)\n return promise\n}\n\n/**\n * This Provider wraps the Studio and provides the DocumentInternationalization context to document actions and components.\n */\nexport function DocumentInternationalizationProvider(\n props: DocumentInternationalizationProviderProps,\n): React.JSX.Element {\n const {pluginConfig} = props\n\n const client = useClient({apiVersion: pluginConfig.apiVersion})\n const workspace = useWorkspace()\n\n // Use a stable workspace identifier\n const workspaceId = useMemo(() => workspace.name ?? '', [workspace])\n\n // Create cache key for promise caching\n const cacheKey = useMemo(() => createCacheKey(workspaceId), [workspaceId])\n\n // Fetch or return languages\n const languagesPromise = useMemo(() => {\n if (Array.isArray(pluginConfig.supportedLanguages)) {\n return null // Return null for synchronous arrays\n }\n\n // Create or get cached promise for React.use\n return createOrGetPromise(async () => {\n if (typeof pluginConfig.supportedLanguages === 'function') {\n return pluginConfig.supportedLanguages(client)\n }\n return pluginConfig.supportedLanguages\n }, cacheKey)\n }, [pluginConfig, client, cacheKey])\n\n // Use React.use to handle the promise with Suspense, or return array directly\n const supportedLanguages = languagesPromise\n ? use(languagesPromise)\n : // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (pluginConfig.supportedLanguages as PluginConfigContext['supportedLanguages'])\n\n const contextValue = useMemo(\n () => ({...pluginConfig, supportedLanguages}),\n [pluginConfig, supportedLanguages],\n )\n\n return (\n <DocumentInternationalizationContext.Provider value={contextValue}>\n {props.renderDefault(props)}\n </DocumentInternationalizationContext.Provider>\n )\n}\n","import {TrashIcon} from '@sanity/icons/Trash'\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {useClient, type DocumentActionDescription, type DocumentActionProps} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport DeleteTranslationDialog from '../components/DeleteTranslationDialog'\nimport DeleteTranslationFooter from '../components/DeleteTranslationFooter'\nimport {useDocumentInternationalizationContext} from '../components/DocumentInternationalizationContext'\nimport {API_VERSION, TRANSLATIONS_ARRAY_NAME} from '../constants'\nimport {type MetadataDocument} from '../types'\n\ntype DeleteOperation = 'DELETE' | 'UNSET'\n\n/**\n * Optional Document action that removes a single translation from the metadata document\n * and optionally deletes the translation document. Opens a confirmation dialog\n * showing which metadata entries reference the document and any other references\n * that may exist. When the document has translation references, those references\n * are unset; otherwise the document is deleted directly.\n *\n * To use it, you need to add it to the document actions config\n * ```\n * const translatedSchemaTypes = ['lesson', 'article'];\n * document: {\n * actions: (prev, {schemaType}) => {\n * if (translatedSchemaTypes.includes(schemaType)) {\n * return [...prev, useDeleteTranslationAction]\n * }\n * return prev\n * },\n * },\n * ```\n */\nexport const useDeleteTranslationAction = (\n props: DocumentActionProps,\n): DocumentActionDescription => {\n const {id: documentId, published, draft} = props\n const doc = draft || published\n const {languageField} = useDocumentInternationalizationContext()\n\n const [isDialogOpen, setDialogOpen] = useState(false)\n const [translations, setTranslations] = useState<MetadataDocument[]>([])\n const onClose = useCallback(() => setDialogOpen(false), [])\n const rawDocumentLanguage = doc ? doc[languageField] : null\n const documentLanguage = typeof rawDocumentLanguage === 'string' ? rawDocumentLanguage : null\n\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n // Remove translation reference and delete document in one transaction\n const onProceed = useCallback(() => {\n const tx = client.transaction()\n let operation: DeleteOperation = 'DELETE'\n\n if (documentLanguage && translations.length > 0) {\n operation = 'UNSET'\n translations.forEach((translation) => {\n tx.patch(translation._id, (patch) =>\n patch.unset([\n `${TRANSLATIONS_ARRAY_NAME}[${LANGUAGE_FIELD_NAME} == \"${documentLanguage}\"]`,\n ]),\n )\n })\n } else {\n tx.delete(documentId)\n tx.delete(`drafts.${documentId}`)\n }\n\n tx.commit()\n .then(() => {\n if (operation === 'DELETE') {\n onClose()\n }\n toast.push({\n status: 'success',\n title: operation === 'UNSET' ? 'Translation reference unset' : 'Document deleted',\n description: operation === 'UNSET' ? 'The document can now be deleted' : null,\n })\n return undefined\n })\n .catch((err: Error) => {\n toast.push({\n status: 'error',\n title:\n operation === 'UNSET'\n ? 'Failed to unset translation reference'\n : 'Failed to delete document',\n description: err.message,\n })\n })\n }, [client, documentLanguage, translations, documentId, onClose, toast])\n\n return {\n label: `Delete translation...`,\n disabled: !doc || !documentLanguage,\n icon: TrashIcon,\n tone: 'critical',\n onHandle: () => {\n setDialogOpen(true)\n },\n dialog: isDialogOpen && {\n type: 'dialog',\n onClose,\n header: 'Delete translation',\n content: doc ? (\n <DeleteTranslationDialog\n doc={doc}\n documentId={documentId}\n setTranslations={setTranslations}\n />\n ) : null,\n footer: (\n <DeleteTranslationFooter\n onClose={onClose}\n onProceed={onProceed}\n translations={translations}\n />\n ),\n },\n }\n}\n\nuseDeleteTranslationAction.action = 'deleteTranslation'\nuseDeleteTranslationAction.displayName = 'DeleteTranslationAction'\n\n/**\n * @deprecated use useDeleteTranslationAction instead\n * Will be removed in the next major version\n */\nexport const DeleteTranslationAction = (props: DocumentActionProps): DocumentActionDescription => {\n return useDeleteTranslationAction(props)\n}\n","import {useListeningQuery} from 'sanity-plugin-utils'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport type {Metadata} from '../types'\n\n// Using references() seemed less reliable for updating the listener\n// results than querying raw values in the array\n// AFAIK: references is _faster_ when querying with GROQ\n// const query = `*[_type == $translationSchema && references($id)]`\nconst query = `*[_type == $translationSchema && $id in translations[].value._ref]{\n _id,\n _createdAt,\n translations\n}`\n\nexport function useTranslationMetadata(id: string): {\n data: Metadata[] | null\n loading: boolean\n error: unknown\n} {\n const {data, loading, error} = useListeningQuery<Metadata[]>(query, {\n params: {id, translationSchema: METADATA_SCHEMA_NAME},\n })\n\n return {data, loading, error}\n}\n","import {defineLocaleResourceBundle} from 'sanity'\n\n/**\n * The locale namespace for the document internationalization plugin.\n *\n * @public\n */\nexport const documenti18nLocaleNamespace = 'document-internationalization' as const\n\n/**\n * The default locale bundle for the document internationalization plugin, which is US English.\n *\n * @internal\n */\nexport const documentInternationalizationUsEnglishLocaleBundle = defineLocaleResourceBundle({\n locale: 'en-US',\n namespace: documenti18nLocaleNamespace,\n resources: () => import('./resources'),\n})\n","import {CopyIcon} from '@sanity/icons/Copy'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useMemo, useState} from 'react'\nimport {filter, firstValueFrom} from 'rxjs'\nimport {\n DEFAULT_STUDIO_CLIENT_OPTIONS,\n type Id,\n InsufficientPermissionsMessage,\n type PatchOperations,\n useClient,\n useCurrentUser,\n useDocumentOperation,\n useDocumentPairPermissions,\n useDocumentStore,\n useTranslation,\n type DocumentActionProps,\n type DocumentActionDescription,\n} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\nimport {useRouter} from 'sanity/router'\nimport {structureLocaleNamespace} from 'sanity/structure'\n\nimport {METADATA_SCHEMA_NAME, TRANSLATIONS_ARRAY_NAME} from '../constants'\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport {documenti18nLocaleNamespace} from '../i18n'\n\n// Types for document store operations\ninterface EditOperations {\n duplicate: {disabled: string | false; execute: (id: string) => void}\n}\n\ninterface OperationSuccessEvent {\n op: string\n type: 'success' | 'error'\n}\n\nconst DISABLED_REASON_KEY = {\n METADATA_NOT_FOUND: 'action.duplicate.disabled.missing-metadata',\n MULTIPLE_METADATA: 'action.duplicate.disabled.multiple-metadata',\n NOTHING_TO_DUPLICATE: 'action.duplicate.disabled.nothing-to-duplicate',\n NOT_READY: 'action.duplicate.disabled.not-ready',\n}\n\n/**\n * Optional Document action that duplicates a document along with all its translations\n * and the associated metadata document. The workflow duplicates each translated\n * document, duplicates the metadata document, patches the new metadata to\n * reference the new translation copies, and navigates to the duplicated document.\n * Disabled when the user lacks permissions, metadata is missing or ambiguous,\n * or the underlying duplicate operation is unavailable.\n */\nexport const useDuplicateWithTranslationsAction = ({\n id,\n type,\n /* oxlint-disable-next-line typescript-eslint/no-deprecated -- kept for backwards compatibility */\n onComplete,\n}: DocumentActionProps): DocumentActionDescription => {\n const documentStore = useDocumentStore()\n const {duplicate} = useDocumentOperation(id, type)\n const {navigateIntent} = useRouter()\n const [isDuplicating, setDuplicating] = useState(false)\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'duplicate',\n })\n const {data, loading: isMetadataDocumentLoading} = useTranslationMetadata(id)\n const hasOneMetadataDocument = useMemo(() => {\n return Array.isArray(data) && data.length <= 1\n }, [data])\n const metadataDocument = Array.isArray(data) && data.length ? data[0] : null\n const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const toast = useToast()\n const {t: s} = useTranslation(structureLocaleNamespace)\n const {t: d} = useTranslation(documenti18nLocaleNamespace)\n const currentUser = useCurrentUser()\n\n const handle = useCallback(() => {\n setDuplicating(true)\n\n // Async function that does the actual work\n async function performDuplication(): Promise<void> {\n if (!metadataDocument) {\n return Promise.reject(new Error('Metadata document not found'))\n }\n\n const translationsArray = metadataDocument[TRANSLATIONS_ARRAY_NAME]\n if (!translationsArray || translationsArray.length === 0) {\n return Promise.reject(new Error('No translations found in metadata document'))\n }\n\n // 1. Duplicate the document and its localized versions\n const translations = new Map<string, Id>()\n await Promise.all(\n // oxlint-disable-next-line consistent-return\n translationsArray.map(async (translation) => {\n const dupeId = uuid()\n const locale = translation[LANGUAGE_FIELD_NAME]\n const docId = translation.value?._ref\n\n if (typeof locale !== 'string' || locale.trim().length === 0) {\n return Promise.reject(new Error('Invalid locale for translation'))\n }\n if (!docId) {\n return Promise.reject(new Error('Translation document not found'))\n }\n\n const {duplicate: duplicateTranslation} = await firstValueFrom(\n documentStore.pair\n .editOperations(docId, type)\n .pipe(filter((op: EditOperations) => op.duplicate.disabled !== 'NOT_READY')),\n )\n\n if (duplicateTranslation.disabled) {\n return Promise.reject(new Error('Cannot duplicate document'))\n }\n\n const duplicateTranslationSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(docId, type)\n .pipe(\n filter((e: OperationSuccessEvent) => e.op === 'duplicate' && e.type === 'success'),\n ),\n )\n duplicateTranslation.execute(dupeId)\n await duplicateTranslationSuccess\n\n translations.set(locale, dupeId)\n }),\n )\n\n // 2. Duplicate the metadata document\n const {duplicate: duplicateMetadata} = await firstValueFrom(\n documentStore.pair\n .editOperations(metadataDocument._id, METADATA_SCHEMA_NAME)\n .pipe(filter((op: EditOperations) => op.duplicate.disabled !== 'NOT_READY')),\n )\n\n if (duplicateMetadata.disabled) {\n return Promise.reject(new Error('Cannot duplicate document'))\n }\n\n const duplicateMetadataSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(metadataDocument._id, METADATA_SCHEMA_NAME)\n .pipe(filter((e: OperationSuccessEvent) => e.op === 'duplicate' && e.type === 'success')),\n )\n const dupeId = uuid()\n duplicateMetadata.execute(dupeId)\n await duplicateMetadataSuccess\n\n // 3. Patch the duplicated metadata document to update the references\n const patch: PatchOperations = {\n set: Object.fromEntries(\n Array.from(translations.entries()).map(([locale, documentId]) => {\n return [\n `${TRANSLATIONS_ARRAY_NAME}[${LANGUAGE_FIELD_NAME} == \"${locale}\"].value._ref`,\n documentId,\n ]\n }),\n ),\n }\n\n await client.transaction().patch(dupeId, patch).commit()\n\n // 4. Navigate to the duplicated document\n navigateIntent('edit', {\n id: Array.from(translations.values()).at(0),\n type,\n })\n\n onComplete()\n }\n\n // Execute and handle success/error\n performDuplication()\n .catch((error: unknown) => {\n console.error(error)\n toast.push({\n status: 'error',\n title: 'Error duplicating document',\n description: error instanceof Error ? error.message : 'Failed to duplicate document',\n })\n })\n .finally(() => {\n setDuplicating(false)\n })\n }, [client, documentStore.pair, metadataDocument, navigateIntent, onComplete, toast, type])\n\n return useMemo(() => {\n if (!isPermissionsLoading && !permissions?.granted) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: (\n <InsufficientPermissionsMessage context=\"duplicate-document\" currentUser={currentUser} />\n ),\n }\n }\n\n if (!isMetadataDocumentLoading && !metadataDocument) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: d(DISABLED_REASON_KEY.METADATA_NOT_FOUND),\n }\n }\n\n if (!hasOneMetadataDocument) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: d(DISABLED_REASON_KEY.MULTIPLE_METADATA),\n }\n }\n\n return {\n icon: CopyIcon,\n disabled:\n isDuplicating ||\n Boolean(duplicate.disabled) ||\n isPermissionsLoading ||\n isMetadataDocumentLoading,\n label: isDuplicating ? s('action.duplicate.running.label') : d('action.duplicate.label'),\n title: duplicate.disabled ? s(DISABLED_REASON_KEY[duplicate.disabled]) : '',\n onHandle: handle,\n }\n }, [\n currentUser,\n duplicate.disabled,\n handle,\n hasOneMetadataDocument,\n isDuplicating,\n isMetadataDocumentLoading,\n isPermissionsLoading,\n metadataDocument,\n permissions?.granted,\n s,\n d,\n ])\n}\n\nuseDuplicateWithTranslationsAction.action = 'duplicate'\nuseDuplicateWithTranslationsAction.displayName = 'DuplicateWithTranslationsAction'\n\n/**\n * @deprecated use useDuplicateWithTranslationsAction instead\n * Will be removed in the next major version\n */\nexport const DuplicateWithTranslationsAction = (\n props: DocumentActionProps,\n): DocumentActionDescription => {\n return useDuplicateWithTranslationsAction(props)\n}\n\n/* oxlint-disable-next-line typescript-eslint/no-deprecated -- re-exported for backwards compatibility */\nDuplicateWithTranslationsAction.action = 'duplicate'\n/* oxlint-disable-next-line typescript-eslint/no-deprecated -- re-exported for backwards compatibility */\nDuplicateWithTranslationsAction.displayName = 'DuplicateWithTranslationsAction'\n","import {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\nimport {usePaneRouter} from 'sanity/structure'\n\nexport function useOpenInNewPane(id?: string | null, type?: string): () => void {\n const router = useRouter()\n const {routerPanesState, groupIndex} = usePaneRouter()\n\n const openInNewPane = useCallback(() => {\n if (!id || !type) {\n return\n }\n\n // No panes open, function might be called outside Structure\n if (!routerPanesState.length) {\n router.navigateIntent('edit', {id, type})\n return\n }\n\n const panes = [...routerPanesState]\n panes.splice(groupIndex + 1, 0, [\n {\n id: id,\n params: {type},\n },\n ])\n\n const href = router.resolvePathFromState({panes})\n router.navigateUrl({path: href})\n }, [id, type, router, routerPanesState, groupIndex])\n\n return openInNewPane\n}\n","import {randomKey} from '@sanity/util/content'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {TranslationReference} from '../types'\n\n/**\n * Creates a translation reference object used in metadata documents to link\n * a language key to a document. References are created as weak by default,\n * with optional strengthen-on-publish metadata so the reference becomes\n * strong once the referenced document is published.\n */\nexport function createReference(\n language: string,\n ref: string,\n type: string,\n strengthenOnPublish: boolean = true,\n): TranslationReference {\n return {\n [LANGUAGE_FIELD_NAME]: language,\n _key: randomKey(),\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref: ref,\n _weak: true,\n // If the user has configured weakReferences, we won't want to strengthen them\n ...(strengthenOnPublish ? {_strengthenOnPublish: {type}} : {}),\n },\n }\n}\n","import {CogIcon} from '@sanity/icons/Cog'\nimport {Box, Button, Stack, Text, Tooltip} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {type ObjectSchemaType, useClient} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport {createReference} from '../utils/createReference'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguageManageProps = {\n id?: string\n metadataId?: string | null\n schemaType: ObjectSchemaType\n documentId: string\n sourceLanguageId?: string\n}\n\n/**\n * Button component for opening or creating the translation metadata document.\n * When metadata already exists, clicking opens it in a new pane. When no\n * metadata exists and creation is allowed, clicking creates a new metadata\n * document with the source language reference and then opens it.\n */\nexport default function LanguageManage(props: LanguageManageProps) {\n const {id, metadataId, schemaType, documentId, sourceLanguageId} = props\n const open = useOpenInNewPane(id, METADATA_SCHEMA_NAME)\n const openCreated = useOpenInNewPane(metadataId, METADATA_SCHEMA_NAME)\n const {allowCreateMetaDoc, apiVersion, weakReferences} = useDocumentInternationalizationContext()\n const client = useClient({apiVersion})\n const [userHasClicked, setUserHasClicked] = useState(false)\n\n const canCreate = !id && Boolean(metadataId) && allowCreateMetaDoc\n\n const handleClick = useCallback(() => {\n if (!id && metadataId && sourceLanguageId) {\n /* Disable button while this request is pending */\n setUserHasClicked(true)\n\n // handle creation of meta document\n const transaction = client.transaction()\n\n const sourceReference = createReference(\n sourceLanguageId,\n documentId,\n schemaType.name,\n !weakReferences,\n )\n const newMetadataDocument = {\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType.name],\n translations: [sourceReference],\n }\n\n transaction.createIfNotExists(newMetadataDocument)\n\n transaction\n .commit()\n .then(() => {\n setUserHasClicked(false)\n openCreated()\n return undefined\n })\n .catch((err: unknown) => {\n console.error(err)\n setUserHasClicked(false)\n })\n } else {\n open()\n }\n }, [\n id,\n metadataId,\n sourceLanguageId,\n client,\n documentId,\n schemaType.name,\n weakReferences,\n openCreated,\n open,\n ])\n\n const disabled = (!id && !canCreate) || (canCreate && !sourceLanguageId) || userHasClicked\n\n return (\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Document has no other translations\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n disabled={Boolean(id) || canCreate}\n >\n <Stack>\n <Button\n disabled={disabled}\n mode=\"ghost\"\n text=\"Manage Translations\"\n icon={CogIcon}\n loading={userHasClicked}\n onClick={handleClick}\n />\n </Stack>\n </Tooltip>\n )\n}\n","import {extractWithPath, Mutation} from '@sanity/mutator'\nimport {\n isDocumentSchemaType,\n type ObjectSchemaType,\n type Path,\n pathToString,\n type SanityDocument,\n type SchemaType,\n} from 'sanity'\n\nexport interface DocumentMember {\n schemaType: SchemaType\n path: Path\n name: string\n value: unknown\n}\n\n/**\n * Removes fields from a document that are marked with the\n * `documentInternationalization.exclude` schema option. This is used when\n * duplicating a source document to create a translation, so that\n * language-specific or non-translatable fields are stripped from the copy.\n * Returns the document with excluded paths unset, or `null` if the input is null.\n */\nexport function removeExcludedPaths(\n doc: SanityDocument | null,\n schemaType: ObjectSchemaType,\n): SanityDocument | null {\n // If the supplied doc is null or the schemaType\n // isn't a document, return as is.\n if (!isDocumentSchemaType(schemaType) || !doc) {\n return doc\n }\n\n // The extractPaths function gets all the fields in the doc with\n // a value, along with their schemaTypes and paths. We'll end up\n // with an array of paths in string form which we want to exclude\n const pathsToExclude: string[] = extractPaths(doc, schemaType, [])\n // We filter for any fields which should be excluded from the document\n // duplicate action, based on the schemaType option being set.\n .filter((field) => field.schemaType?.options?.documentInternationalization?.exclude === true)\n // then we return the stringified version of the path\n .map((field) => {\n return pathToString(field.path)\n })\n\n // Now we can use the Mutation class from @sanity/mutator to patch the document\n // to remove all the paths that are for one of the excluded fields. This is just\n // done locally, and the documents themselves are not patched in the Content Lake.\n const mut = new Mutation({\n mutations: [\n {\n patch: {\n id: doc._id,\n unset: pathsToExclude,\n },\n },\n ],\n })\n\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n return mut.apply(doc) as SanityDocument\n}\n\nfunction extractPaths(\n doc: SanityDocument,\n schemaType: ObjectSchemaType,\n path: Path,\n): DocumentMember[] {\n const result: DocumentMember[] = []\n\n for (const field of schemaType.fields) {\n const fieldPath = [...path, field.name]\n const fieldSchema = field.type\n const {value} = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}\n if (value === undefined || value === null) {\n continue\n }\n\n const thisFieldWithPath: DocumentMember = {\n path: fieldPath,\n name: field.name,\n schemaType: fieldSchema,\n value,\n }\n\n if (fieldSchema.jsonType === 'object') {\n const innerFields = extractPaths(doc, fieldSchema, fieldPath)\n result.push(thisFieldWithPath, ...innerFields)\n } else if (\n fieldSchema.jsonType === 'array' &&\n fieldSchema.of.length &&\n fieldSchema.of.some((item) => 'fields' in item)\n ) {\n const {value: arrayValue} = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}\n\n result.push(thisFieldWithPath)\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n if ((arrayValue as unknown[])?.length) {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n for (const item of arrayValue as Array<{\n _key?: string\n language?: string\n _type?: string\n }>) {\n if (!item._key) continue\n const itemPath = [...fieldPath, {_key: item._key}] as Path\n let itemSchema = fieldSchema.of.find((t) => t.name === item._type)\n if (!item._type) {\n itemSchema = fieldSchema.of[0]\n }\n if (itemSchema) {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n const innerFields = extractPaths(doc, itemSchema as ObjectSchemaType, itemPath)\n const arrayMember: DocumentMember = {\n path: itemPath,\n name: item._key,\n schemaType: itemSchema,\n value: item,\n }\n result.push(arrayMember, ...innerFields)\n }\n }\n }\n } else {\n result.push(thisFieldWithPath)\n }\n }\n\n return result\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {CheckmarkIcon} from '@sanity/icons/Checkmark'\nimport {SplitVerticalIcon} from '@sanity/icons/SplitVertical'\nimport {Badge, Box, Button, Flex, Spinner, Text, Tooltip, useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useState} from 'react'\nimport {\n getDraftId,\n getVersionFromId,\n getVersionId,\n isVersionId,\n type ObjectSchemaType,\n type SanityDocument,\n useClient,\n} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport type {Language, Metadata, MetadataDocument, TranslationReference} from '../types'\nimport {createReference} from '../utils/createReference'\nimport {removeExcludedPaths} from '../utils/excludePaths'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguageOptionProps = {\n language: Language\n schemaType: ObjectSchemaType\n documentId: string\n disabled: boolean\n current: boolean\n source: SanityDocument | null\n metadataId: string | null\n metadata?: Metadata | null\n sourceLanguageId?: string\n}\n\n/**\n * Button component representing a single language in the translations menu.\n * Displays the language name, an ID badge, and a contextual icon: checkmark\n * for the current language, split-vertical for existing translations, or add\n * for new translations. Clicking opens an existing translation in a new pane,\n * or creates a new translation document via a Sanity transaction.\n */\nexport default function LanguageOption(props: LanguageOptionProps) {\n const {\n language,\n schemaType,\n documentId,\n current,\n source,\n sourceLanguageId,\n metadata,\n metadataId,\n } = props\n /* When the user has clicked the Create button, the button should be disabled\n * to prevent double-clicks from firing onCreate twice. This creates duplicate\n * translation metadata entries, which editors will not be able to delete */\n const [userHasClicked, setUserHasClicked] = useState(false)\n const disabled =\n props.disabled || userHasClicked || current || !source || !sourceLanguageId || !metadataId\n const translation: TranslationReference | undefined = metadata?.translations.length\n ? metadata.translations.find((t) => t[LANGUAGE_FIELD_NAME] === language.id)\n : undefined\n const {apiVersion, languageField, weakReferences, callback} =\n useDocumentInternationalizationContext()\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const open = useOpenInNewPane(translation?.value?._ref, schemaType.name)\n const handleOpen = useCallback(() => open(), [open])\n\n const handleCreate = useCallback(async () => {\n if (!source) {\n throw new Error(`Cannot create translation without source document`)\n }\n\n if (!sourceLanguageId) {\n throw new Error(`Cannot create translation without source language ID`)\n }\n\n if (!metadataId) {\n throw new Error(`Cannot create translation without a metadata ID`)\n }\n /* Disable the create button while this request is pending */\n setUserHasClicked(true)\n\n const transaction = client.transaction()\n\n // 1. Duplicate source document\n // If the source belongs to a release, create the translation\n // as a version in that same release, otherwise as a draft\n const newTranslationDocumentId = uuid()\n const sourceReleaseId = isVersionId(source._id) ? getVersionFromId(source._id) : undefined\n let newTranslationDocument = {\n ...source,\n _id: sourceReleaseId\n ? getVersionId(newTranslationDocumentId, sourceReleaseId)\n : getDraftId(newTranslationDocumentId),\n // 2. Update language of the translation\n [languageField]: language.id,\n }\n\n // Remove fields / paths we don't want to duplicate\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n newTranslationDocument = removeExcludedPaths(\n newTranslationDocument,\n schemaType,\n ) as SanityDocument\n\n transaction.create(newTranslationDocument)\n\n // 3. Maybe create the metadata document\n const sourceReference = createReference(\n sourceLanguageId,\n documentId,\n schemaType.name,\n !weakReferences,\n )\n const newTranslationReference = createReference(\n language.id,\n newTranslationDocumentId,\n schemaType.name,\n !weakReferences,\n )\n const newMetadataDocument: MetadataDocument = {\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType.name],\n translations: [sourceReference],\n }\n\n transaction.createIfNotExists(newMetadataDocument)\n\n // 4. Patch translation to metadata document\n // Note: If the document was only just created in the operation above\n // This patch operation will have no effect\n const metadataPatch = client\n .patch(metadataId)\n .setIfMissing({translations: [sourceReference]})\n .insert(`after`, `translations[-1]`, [newTranslationReference])\n\n transaction.patch(metadataPatch)\n\n // 5. Commit!\n transaction\n .commit()\n .then(() => {\n const metadataExisted = Boolean(metadata?._createdAt)\n\n toast.push({\n status: 'success',\n title: `Created \"${language.title}\" translation`,\n description: metadataExisted\n ? `Updated Translations Metadata`\n : `Created Translations Metadata`,\n })\n\n /* Once a translation has been created, reset the userHasClicked state to false\n * so they can click on it to navigate to the translation */\n setUserHasClicked(false)\n\n // Execute callback if provided\n if (callback) {\n // oxlint-disable-next-line eslint-plugin-promise/no-callback-in-promise -- This is an async callback, not a Node.js callback\n return callback({\n client,\n sourceLanguageId,\n sourceDocument: source,\n newDocument: newTranslationDocument,\n destinationLanguageId: language.id,\n metaDocumentId: metadataId,\n })\n }\n\n return undefined\n })\n .catch((err: Error) => {\n console.error(err)\n\n /* Re-enable the create button if there was an error */\n setUserHasClicked(false)\n\n return toast.push({\n status: 'error',\n title: `Error creating translation`,\n description: err.message,\n })\n })\n }, [\n client,\n documentId,\n language.id,\n language.title,\n languageField,\n metadata?._createdAt,\n metadataId,\n schemaType,\n source,\n sourceLanguageId,\n toast,\n weakReferences,\n callback,\n ])\n\n let message\n\n if (current) {\n message = `Current document`\n } else if (translation) {\n message = `Open ${language.title} translation`\n } else if (!translation) {\n message = `Create new ${language.title} translation`\n }\n\n return (\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n {message}\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n >\n <Button\n onClick={translation ? handleOpen : handleCreate}\n mode={current && disabled ? `default` : `bleed`}\n disabled={disabled}\n >\n <Flex gap={3} align=\"center\">\n {disabled && !current ? (\n <Spinner />\n ) : (\n <Text size={2}>\n {translation ? <SplitVerticalIcon /> : current ? <CheckmarkIcon /> : <AddIcon />}\n </Text>\n )}\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge tone={disabled || current ? `default` : `primary`}>{language.id}</Badge>\n </Flex>\n </Button>\n </Tooltip>\n )\n}\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {Badge, Box, Button, Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {type SanityDocument, useClient} from 'sanity'\n\nimport type {Language} from '../types'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguagePatchProps = {\n language: Language\n source: SanityDocument | null\n disabled: boolean\n}\n\n/**\n * Button component that patches the current document's language field to\n * the selected language. Displays the language name and ID badge, and shows\n * a success or error toast after the patch operation completes.\n */\nexport default function LanguagePatch(props: LanguagePatchProps) {\n const {language, source} = props\n const {apiVersion, languageField} = useDocumentInternationalizationContext()\n const disabled = props.disabled || !source\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const handleClick = useCallback(() => {\n if (!source) {\n throw new Error(`Cannot patch missing document`)\n }\n\n const currentId = source._id\n\n client\n .patch(currentId)\n .set({[languageField]: language.id})\n .commit()\n .then(() => {\n toast.push({\n title: `Set document language to ${language.title}`,\n status: `success`,\n })\n return undefined\n })\n .catch((err: unknown) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to set document language to ${language.title}`,\n status: `error`,\n })\n })\n }, [source, client, languageField, language, toast])\n\n return (\n <Button mode=\"bleed\" onClick={handleClick} disabled={disabled} justify=\"flex-start\">\n <Flex gap={3} align=\"center\">\n <Text size={2}>\n <EditIcon />\n </Text>\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge>{language.id}</Badge>\n </Flex>\n </Button>\n )\n}\n","import {Box} from '@sanity/ui'\n\nexport default function ConstrainedBox({children}: {children: React.ReactNode}): React.JSX.Element {\n return <Box style={{maxWidth: 280}}>{children}</Box>\n}\n","import {Card, Flex, Text} from '@sanity/ui'\nimport type {PropsWithChildren} from 'react'\n\nimport ConstrainedBox from './ConstrainedBox'\n\n/**\n * Presentational component that renders a caution-toned card with centered\n * text inside a constrained-width box. Used to display warning messages\n * in the internationalization UI.\n */\nexport default function Warning({children}: PropsWithChildren) {\n return (\n <Card tone=\"caution\" padding={3}>\n <Flex justify=\"center\">\n <ConstrainedBox>\n <Text size={1} align=\"center\">\n {children}\n </Text>\n </ConstrainedBox>\n </Flex>\n </Card>\n )\n}\n","import {TranslateIcon} from '@sanity/icons/Translate'\nimport {Box, Button, Card, Popover, Stack, Text, TextInput, useClickOutsideEvent} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport type {ChangeEvent} from 'react'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {useEditState, usePerspective} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport type {DocumentInternationalizationMenuProps} from '../types'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\nimport LanguageManage from './LanguageManage'\nimport LanguageOption from './LanguageOption'\nimport LanguagePatch from './LanguagePatch'\nimport Warning from './Warning'\n\nexport function DocumentInternationalizationMenu(\n props: DocumentInternationalizationMenuProps,\n): React.JSX.Element | null {\n const {documentId} = props\n const schemaType = props.schemaType\n const {languageField, supportedLanguages} = useDocumentInternationalizationContext()\n\n // Search filter query\n const [query, setQuery] = useState(``)\n const handleQuery = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n if (event.currentTarget.value) {\n setQuery(event.currentTarget.value)\n } else {\n setQuery(``)\n }\n }, [])\n\n // UI Handlers\n const [open, setOpen] = useState(false)\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n const buttonRef = useRef<HTMLButtonElement>(null)\n const popoverRef = useRef<HTMLDivElement>(null)\n const handleClickOutside = useCallback(() => setOpen(false), [])\n useClickOutsideEvent(handleClickOutside, () => [buttonRef.current, popoverRef.current])\n\n // Get metadata from content lake\n const {data, loading, error} = useTranslationMetadata(documentId)\n const metadata = Array.isArray(data) && data.length ? data[0] : null\n\n // Optimistically set a metadata ID for a newly created metadata document\n // Cannot rely on generated metadata._id from useTranslationMetadata\n // As the document store might not have returned it before creating another translation\n const metadataId = useMemo(() => {\n if (loading) {\n return null\n }\n\n // Once created, these two values should be the same anyway\n return metadata?._id ?? uuid()\n }, [loading, metadata?._id])\n\n // Duplicate a new language version from the most recent version of this document\n // When a release is selected, the version document is the source, so documents\n // that only exist in that release can still be translated\n const {selectedReleaseId} = usePerspective()\n const {draft, published, version} = useEditState(\n documentId,\n schemaType.name,\n 'default',\n selectedReleaseId,\n )\n const source = version || draft || published\n\n // Check for data issues\n const documentIsInOneMetadataDocument = useMemo(() => {\n return Array.isArray(data) && data.length <= 1\n }, [data])\n const rawLanguageValue = source?.[languageField]\n const sourceLanguageId = typeof rawLanguageValue === 'string' ? rawLanguageValue : undefined\n const sourceLanguageIsValid = supportedLanguages.some((l) => l.id === sourceLanguageId)\n const allLanguagesAreValid = useMemo(() => {\n const valid = supportedLanguages.every((l) => l.id && l.title)\n if (!valid) {\n console.warn(\n `Not all languages are valid. It should be an array of objects with an \"id\" and \"title\" property. Or a function that returns an array of objects with an \"id\" and \"title\" property.`,\n supportedLanguages,\n )\n }\n\n return valid\n }, [supportedLanguages])\n\n const content = (\n <Box padding={1}>\n {error ? (\n <Card tone=\"critical\" padding={1}>\n <Text>There was an error returning translations metadata</Text>\n </Card>\n ) : (\n <Stack gap={1}>\n <LanguageManage\n id={metadata?._id}\n documentId={documentId}\n metadataId={metadataId}\n schemaType={schemaType}\n sourceLanguageId={sourceLanguageId}\n />\n {supportedLanguages.length > 4 ? (\n <TextInput onChange={handleQuery} value={query} placeholder=\"Filter languages\" />\n ) : null}\n {supportedLanguages.length > 0 ? (\n <>\n {/* Once metadata is loaded, there may be issues */}\n {loading ? null : (\n <>\n {/* Not all languages are valid */}\n {data && documentIsInOneMetadataDocument ? null : (\n <Warning>\n {/* TODO: Surface these documents to the user */}\n This document has been found in more than one Translations Metadata document\n </Warning>\n )}\n {/* Not all languages are valid */}\n {allLanguagesAreValid ? null : (\n <Warning>Not all language objects are valid. See the console.</Warning>\n )}\n {/* Current document has no language field */}\n {sourceLanguageId ? null : (\n <Warning>\n Choose a language to apply to <strong>this Document</strong>\n </Warning>\n )}\n {/* Current document has an invalid language field */}\n {sourceLanguageId && !sourceLanguageIsValid ? (\n <Warning>\n Select a supported language. Current language value:{' '}\n <code>{sourceLanguageId}</code>\n </Warning>\n ) : null}\n </>\n )}\n {supportedLanguages\n .filter((language) => {\n if (query) {\n return language.title.toLowerCase().includes(query.toLowerCase())\n }\n return true\n })\n .map((language) =>\n !loading && sourceLanguageId && sourceLanguageIsValid ? (\n // Button to duplicate this document to a new translation\n // And either create or update the metadata document\n <LanguageOption\n key={language.id}\n language={language}\n schemaType={schemaType}\n documentId={documentId}\n disabled={!allLanguagesAreValid}\n current={language.id === sourceLanguageId}\n metadata={metadata}\n metadataId={metadataId}\n source={source}\n sourceLanguageId={sourceLanguageId}\n />\n ) : (\n // Button to set a language field on *this* document\n <LanguagePatch\n key={language.id}\n source={source}\n language={language}\n // Only allow language patch change to:\n // - Keys not in metadata\n // - The key of this document in the metadata\n disabled={\n (loading ||\n !allLanguagesAreValid ||\n metadata?.translations\n .filter((t) => t?.value?._ref !== documentId)\n .some((t) => t[LANGUAGE_FIELD_NAME] === language.id)) ??\n false\n }\n />\n ),\n )}\n </>\n ) : null}\n </Stack>\n )}\n </Box>\n )\n\n const issueWithTranslations = !loading && sourceLanguageId && !sourceLanguageIsValid\n\n if (!documentId) {\n return null\n }\n\n if (!schemaType || !schemaType.name) {\n return null\n }\n\n return (\n <Popover\n animate\n constrainSize\n content={content}\n open={open}\n portal\n ref={popoverRef}\n overflow=\"auto\"\n tone=\"default\"\n >\n <Button\n text=\"Translations\"\n mode=\"bleed\"\n disabled={!source}\n tone={!source || loading || !issueWithTranslations ? undefined : `caution`}\n icon={TranslateIcon}\n onClick={handleClick}\n ref={buttonRef}\n selected={open}\n />\n </Popover>\n )\n}\n","import {TrashIcon} from '@sanity/icons/Trash'\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {\n type DocumentActionDescription,\n type DocumentActionProps,\n type KeyedObject,\n type Reference,\n type TypedObject,\n useClient,\n} from 'sanity'\n\nimport {API_VERSION, TRANSLATIONS_ARRAY_NAME} from '../constants'\n\ntype TranslationReference = TypedObject &\n KeyedObject & {\n value: Reference\n }\n\n/**\n * Document action that deletes a translation metadata document along with all\n * its referenced translation documents. Opens a confirmation dialog showing\n * how many translations will be deleted. Executes a single transaction that\n * unsets the translations array, deletes each referenced document (both\n * published and draft), and finally deletes the metadata document itself.\n */\nexport const useDeleteMetadataAction = (props: DocumentActionProps): DocumentActionDescription => {\n const {id: documentId, published, draft} = props\n const doc = draft || published\n\n const [isDialogOpen, setDialogOpen] = useState(false)\n const onClose = useCallback(() => setDialogOpen(false), [])\n const translations: TranslationReference[] = useMemo(\n () =>\n doc && Array.isArray(doc[TRANSLATIONS_ARRAY_NAME])\n ? // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (doc[TRANSLATIONS_ARRAY_NAME] as TranslationReference[])\n : [],\n [doc],\n )\n\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n\n // Remove translation reference and delete document in one transaction\n const onProceed = useCallback(() => {\n const tx = client.transaction()\n\n tx.patch(documentId, (patch) => patch.unset([TRANSLATIONS_ARRAY_NAME]))\n\n if (translations.length > 0) {\n translations.forEach((translation) => {\n tx.delete(translation.value._ref)\n tx.delete(`drafts.${translation.value._ref}`)\n })\n }\n\n tx.delete(documentId)\n // Shouldn't exist as this document type is in liveEdit\n tx.delete(`drafts.${documentId}`)\n\n tx.commit()\n .then(() => {\n onClose()\n\n toast.push({\n status: 'success',\n title: 'Deleted document and translations',\n })\n return undefined\n })\n .catch((err: Error) => {\n toast.push({\n status: 'error',\n title: 'Failed to delete document and translations',\n description: err.message,\n })\n })\n }, [client, translations, documentId, onClose, toast])\n\n return {\n label: `Delete all translations`,\n disabled: !doc || !translations.length,\n icon: TrashIcon,\n tone: 'critical',\n onHandle: () => {\n setDialogOpen(true)\n },\n dialog: isDialogOpen && {\n type: 'confirm',\n onCancel: onClose,\n onConfirm: () => {\n onProceed()\n onClose()\n },\n tone: 'critical',\n message:\n translations.length === 1\n ? `Delete 1 translation and this document`\n : `Delete all ${translations.length} translations and this document`,\n },\n }\n}\n","import type {DocumentBadgeDescription, DocumentBadgeProps} from 'sanity'\n\nimport {useDocumentInternationalizationContext} from '../components/DocumentInternationalizationContext'\n\n/**\n * Document badge that displays the language identifier of a document.\n * Reads the configured `languageField` from the version, draft or published\n * document, looks up the matching language in `supportedLanguages` to resolve\n * the title, and returns a badge descriptor with `primary` color. Returns\n * `null` when no document exists or the language field is empty/non-string.\n */\nexport function LanguageBadge(props: DocumentBadgeProps): DocumentBadgeDescription | null {\n const source = props?.version || props?.draft || props?.published\n const {languageField, supportedLanguages} = useDocumentInternationalizationContext()\n const languageId = source?.[languageField]\n\n if (!languageId || typeof languageId !== 'string') {\n return null\n }\n\n const language = Array.isArray(supportedLanguages)\n ? supportedLanguages.find((l) => l.id === languageId)\n : null\n\n // Currently we only show the language id if the supportedLanguages are async\n return {\n label: language?.id ?? languageId,\n title: language?.title ?? undefined,\n color: `primary`,\n }\n}\n","import {Card, Spinner} from '@sanity/ui'\nimport {useEffect, useMemo} from 'react'\nimport {Preview, useEditState, useSchema, useValidationStatus} from 'sanity'\n\ntype DocumentCheckProps = {\n id: string\n onCheckComplete: (id: string) => void\n addInvalidId: (id: string) => void\n removeInvalidId: (id: string) => void\n addDraftId: (id: string) => void\n removeDraftId: (id: string) => void\n}\n\n// Check if the document has a draft\n// Check if that draft is valid\n// Report back to parent that it can be added to bulk publish\nexport default function DocumentCheck(props: DocumentCheckProps) {\n const {id, onCheckComplete, addInvalidId, removeInvalidId, addDraftId, removeDraftId} = props\n // Use empty string for type initially - we get the actual type from the loaded document\n const editState = useEditState(id, '')\n const documentType = editState.draft?._type ?? editState.published?._type ?? ''\n // oxlint-disable-next-line no-useless-default-assignment\n const {isValidating, validation = []} = useValidationStatus(id, documentType, false)\n const schema = useSchema()\n\n const validationHasErrors = useMemo(() => {\n return !isValidating && validation.some((item) => item.level === 'error')\n }, [isValidating, validation])\n\n useEffect(() => {\n if (validationHasErrors) {\n addInvalidId(id)\n } else {\n removeInvalidId(id)\n }\n\n if (editState.draft) {\n addDraftId(id)\n } else {\n removeDraftId(id)\n }\n\n if (!isValidating) {\n onCheckComplete(id)\n }\n }, [\n addDraftId,\n addInvalidId,\n editState.draft,\n id,\n isValidating,\n onCheckComplete,\n removeDraftId,\n removeInvalidId,\n validationHasErrors,\n ])\n\n // We only care about drafts\n if (!editState.draft) {\n return null\n }\n\n const schemaType = schema.get(editState.draft._type)\n\n return (\n <Card border padding={2} tone={validationHasErrors ? `critical` : `positive`}>\n {editState.draft && schemaType ? (\n <Preview layout=\"default\" value={editState.draft} schemaType={schemaType} />\n ) : (\n <Spinner />\n )}\n </Card>\n )\n}\n","import {Box, type ButtonTone, Text, Tooltip} from '@sanity/ui'\nimport type {ComponentType, PropsWithChildren} from 'react'\nimport {TextWithTone} from 'sanity'\n\ntype InfoIconProps = PropsWithChildren & {\n icon: ComponentType\n tone: ButtonTone\n text?: string\n}\n\nexport default function InfoIcon(props: InfoIconProps) {\n const {text, icon, tone, children} = props\n const Icon = icon\n\n return (\n <Tooltip\n animate\n portal\n content={\n children ? (\n <>{children}</>\n ) : (\n <Box padding={2}>\n <Text size={1}>{text}</Text>\n </Box>\n )\n }\n >\n <TextWithTone tone={tone} size={1}>\n <Icon />\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {InfoOutlineIcon} from '@sanity/icons/InfoOutline'\nimport {Box, Stack, Text} from '@sanity/ui'\n\nimport InfoIcon from './InfoIcon'\n\nexport default function Info() {\n return (\n <InfoIcon icon={InfoOutlineIcon} tone=\"primary\">\n <Stack padding={3} gap={4} style={{maxWidth: 250}}>\n <Box>\n <Text size={1}>Bulk publishing uses the Scheduling API.</Text>\n </Box>\n <Box>\n <Text size={1}>\n Customized Document Actions in the Studio will not execute. Webhooks will execute.\n </Text>\n </Box>\n <Box>\n <Text size={1}>\n Validation is checked before rendering the button below, but the Scheduling API will not\n check for – or enforce – validation.\n </Text>\n </Box>\n </Stack>\n </InfoIcon>\n )\n}\n","import {Button, Card, Dialog, Inline, Stack, Text, useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {TextWithTone, useClient, useWorkspace} from 'sanity'\n\nimport {API_VERSION} from '../../constants'\nimport type {TranslationReference} from '../../types'\nimport DocumentCheck from './DocumentCheck'\nimport Info from './Info'\n\nexport type BulkPublishProps = {\n translations: TranslationReference[]\n}\n\n// A root-level component with UI for hitting the Publishing API\nexport default function BulkPublish(props: BulkPublishProps) {\n const {translations} = props\n const client = useClient({apiVersion: API_VERSION})\n const {projectId, dataset} = useWorkspace()\n const toast = useToast()\n const [invalidIds, setInvalidIds] = useState<string[] | null>(null)\n const [checkedIds, setCheckedIds] = useState<string[]>([])\n\n const onCheckComplete = useCallback((id: string) => {\n setCheckedIds((ids) => Array.from(new Set([...ids, id])))\n }, [])\n\n // Handle dialog\n const [open, setOpen] = useState(false)\n const onOpen = useCallback(() => setOpen(true), [])\n const onClose = useCallback(() => setOpen(false), [])\n\n const addInvalidId = useCallback((id: string) => {\n setInvalidIds((ids) => (ids ? Array.from(new Set([...ids, id])) : [id]))\n }, [])\n\n const removeInvalidId = useCallback((id: string) => {\n setInvalidIds((ids) => (ids ? ids.filter((i) => i !== id) : []))\n }, [])\n\n const [draftIds, setDraftIds] = useState<string[]>([])\n\n const addDraftId = useCallback((id: string) => {\n setDraftIds((ids) => Array.from(new Set([...ids, id])))\n }, [])\n\n const removeDraftId = useCallback((id: string) => {\n setDraftIds((ids) => ids.filter((i) => i !== id))\n }, [])\n\n const handleBulkPublish = useCallback(() => {\n const body = translations.map((translation) => ({\n documentId: translation.value._ref,\n }))\n client\n .request({\n uri: `/publish/${projectId}/${dataset}`,\n method: 'POST',\n body,\n })\n .then(() => {\n toast.push({\n status: 'success',\n title: 'Success',\n description: 'Bulk publish complete',\n })\n return undefined\n })\n .catch((err: Error) => {\n console.error(err)\n toast.push({\n status: 'error',\n title: 'Error',\n description: 'Bulk publish failed',\n })\n })\n }, [translations, client, projectId, dataset, toast])\n\n const disabled =\n // Not all documents have been checked\n checkedIds.length !== translations.length ||\n // Some document(s) are invalid\n Boolean(invalidIds && invalidIds?.length > 0) ||\n // No documents are drafts\n !draftIds.length\n\n return translations?.length > 0 ? (\n <Card padding={4} border radius={2}>\n <Stack gap={3}>\n <Inline gap={3}>\n <Text weight=\"bold\" size={1}>\n Bulk publishing\n </Text>\n <Info />\n </Inline>\n\n <Stack>\n <Button onClick={onOpen} text=\"Prepare bulk publishing\" mode=\"ghost\" />\n </Stack>\n\n {open && (\n <Dialog\n animate\n header=\"Bulk publishing\"\n id=\"bulk-publish-dialog\"\n onClose={onClose}\n zOffset={1000}\n width={3}\n >\n <Stack gap={4} padding={4}>\n {draftIds.length > 0 ? (\n <Stack gap={2}>\n <Text size={1}>\n There{' '}\n {draftIds.length === 1\n ? `is 1 draft document`\n : `are ${draftIds.length} draft documents`}\n .\n </Text>\n {invalidIds && invalidIds.length > 0 ? (\n <TextWithTone tone=\"critical\" size={1}>\n {invalidIds.length === 1\n ? `1 draft document has`\n : `${invalidIds.length} draft documents have`}{' '}\n validation issues that must be addressed first\n </TextWithTone>\n ) : (\n <TextWithTone tone=\"positive\" size={1}>\n All drafts are valid and can be bulk published\n </TextWithTone>\n )}\n </Stack>\n ) : null}\n\n <Stack gap={1}>\n {translations\n .filter((translation) => translation?.value?._ref)\n .map((translation) => (\n <DocumentCheck\n key={translation._key}\n id={translation.value._ref}\n onCheckComplete={onCheckComplete}\n addInvalidId={addInvalidId}\n removeInvalidId={removeInvalidId}\n addDraftId={addDraftId}\n removeDraftId={removeDraftId}\n />\n ))}\n </Stack>\n {draftIds.length > 0 ? (\n <Button\n mode=\"ghost\"\n tone={invalidIds && invalidIds?.length > 0 ? 'caution' : 'positive'}\n text={\n draftIds.length === 1\n ? `Publish draft document`\n : `Bulk publish ${draftIds.length} draft documents`\n }\n onClick={handleBulkPublish}\n disabled={disabled}\n />\n ) : (\n <Text muted size={1}>\n No draft documents to publish\n </Text>\n )}\n </Stack>\n </Dialog>\n )}\n </Stack>\n </Card>\n ) : null\n}\n","import {useEffect} from 'react'\nimport {PatchEvent, unset, useClient, useEditState} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {API_VERSION} from '../../constants'\nimport type {TranslationReference} from '../../types'\n\ntype ReferencePatcherProps = {\n translation: TranslationReference\n documentType: string\n metadataId: string\n}\n\n// For every reference, check if it is published, and if so, strengthen the reference\nexport default function ReferencePatcher(props: ReferencePatcherProps) {\n const {translation, documentType, metadataId} = props\n const editState = useEditState(translation.value._ref, documentType)\n const client = useClient({apiVersion: API_VERSION})\n const {onChange} = useDocumentPane()\n\n useEffect(() => {\n if (\n // We have a reference\n translation.value._ref &&\n // It's still weak and not-yet-strengthened\n translation.value._weak &&\n // We also want to keep this check because maybe the user *configured* weak refs\n translation.value._strengthenOnPublish &&\n // The referenced document has just been published\n !editState.draft &&\n editState.published &&\n editState.ready\n ) {\n const referencePathBase = ['translations', {_key: translation._key}, 'value']\n\n onChange(\n new PatchEvent([\n unset([...referencePathBase, '_weak']),\n unset([...referencePathBase, '_strengthenOnPublish']),\n ]),\n )\n }\n }, [translation, editState, metadataId, client, onChange])\n\n return null\n}\n","import type {TranslationReference} from '../../types'\nimport ReferencePatcher from './ReferencePatcher'\n\ntype OptimisticallyStrengthenProps = {\n translations: TranslationReference[]\n metadataId: string\n}\n\n// There's no good reason to leave published references as weak\n// So this component will run on every render and strengthen them\nexport default function OptimisticallyStrengthen(props: OptimisticallyStrengthenProps) {\n // oxlint-disable-next-line no-useless-default-assignment\n const {translations = [], metadataId} = props\n\n if (!translations.length) {\n return null\n }\n\n return (\n <>\n {translations.map((translation) =>\n translation.value._strengthenOnPublish?.type ? (\n <ReferencePatcher\n key={translation._key}\n translation={translation}\n documentType={translation.value._strengthenOnPublish.type}\n metadataId={metadataId}\n />\n ) : null,\n )}\n </>\n )\n}\n","import {TranslateIcon} from '@sanity/icons/Translate'\nimport {defineField, defineType, type DocumentDefinition, type FieldDefinition} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport {METADATA_SCHEMA_NAME, TRANSLATIONS_ARRAY_NAME} from '../../constants'\nimport type {TranslationReference} from '../../types'\n\n/**\n * Creates the `translation.metadata` document schema definition. This schema\n * type stores the array of translation references linking all language versions\n * of a document together, along with the allowed schema types and any custom\n * metadata fields provided by the plugin consumer. The document uses `liveEdit`\n * so changes are published immediately without drafts.\n */\nexport default (\n schemaTypes: string[],\n metadataFields: FieldDefinition[],\n omnisearchVisibility = true,\n): DocumentDefinition =>\n defineType({\n type: 'document',\n name: METADATA_SCHEMA_NAME,\n title: 'Translation metadata',\n icon: TranslateIcon,\n liveEdit: true,\n __experimental_omnisearch_visibility: omnisearchVisibility,\n fields: [\n defineField({\n name: TRANSLATIONS_ARRAY_NAME,\n type: 'internationalizedArrayReference',\n }),\n defineField({\n name: 'schemaTypes',\n description:\n 'Optional: Used to filter the reference fields above so all translations share the same types.',\n type: 'array',\n of: [{type: 'string'}],\n options: {list: schemaTypes},\n readOnly: ({value}) => Boolean(value),\n }),\n ...metadataFields,\n ],\n preview: {\n select: {\n translations: TRANSLATIONS_ARRAY_NAME,\n documentSchemaTypes: 'schemaTypes',\n },\n prepare(selection) {\n const {translations = [], documentSchemaTypes = []} = selection\n const title =\n translations.length === 1 ? `1 Translation` : `${translations.length} Translations`\n const languageKeys = translations.length\n ? translations\n .map((t: TranslationReference) => t[LANGUAGE_FIELD_NAME].toUpperCase())\n .join(', ')\n : ``\n const subtitle = [\n languageKeys ? `(${languageKeys})` : null,\n documentSchemaTypes?.length ? documentSchemaTypes.map((s: string) => s).join(`, `) : ``,\n ]\n .filter(Boolean)\n .join(` `)\n\n return {\n title,\n subtitle,\n }\n },\n },\n })\n","import {Stack} from '@sanity/ui'\nimport {defineField, definePlugin, isSanityDocument} from 'sanity'\nimport {internationalizedArray, LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport {useDeleteMetadataAction} from './actions/DeleteMetadataAction'\nimport {LanguageBadge} from './badges'\nimport BulkPublish from './components/BulkPublish'\nimport {DocumentInternationalizationProvider} from './components/DocumentInternationalizationContext'\nimport {DocumentInternationalizationMenu} from './components/DocumentInternationalizationMenu'\nimport OptimisticallyStrengthen from './components/OptimisticallyStrengthen'\nimport {API_VERSION, DEFAULT_CONFIG, METADATA_SCHEMA_NAME} from './constants'\nimport {documentInternationalizationUsEnglishLocaleBundle} from './i18n'\nimport metadata from './schema/translation/metadata'\nimport type {PluginConfig, TranslationReference} from './types'\n\nexport const documentInternationalization = definePlugin<PluginConfig>((config) => {\n const pluginConfig = {...DEFAULT_CONFIG, ...config}\n const {\n supportedLanguages,\n schemaTypes,\n languageField,\n bulkPublish,\n metadataFields,\n hideLanguageFilter,\n metadataOmnisearchVisibility,\n metadataInternationalization,\n addTemplates,\n } = pluginConfig\n\n if (schemaTypes.length === 0) {\n throw new Error(\n 'You must specify at least one schema type on which to enable document internationalization. Update the `schemaTypes` option in the documentInternationalization() configuration.',\n )\n }\n\n return {\n name: '@sanity/document-internationalization',\n\n studio: {\n components: {\n layout: (props) => (\n <DocumentInternationalizationProvider {...props} pluginConfig={pluginConfig} />\n ),\n },\n },\n\n i18n: {\n bundles: [documentInternationalizationUsEnglishLocaleBundle],\n },\n\n // Adds:\n // - A bulk-publishing UI component to the form\n // - Will only work for projects on a compatible plan\n form: {\n components: {\n input: (props) => {\n if (\n props.id === 'root' &&\n props.schemaType.name === METADATA_SCHEMA_NAME &&\n isSanityDocument(props?.value)\n ) {\n const metadataId = props?.value?._id\n const translations =\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (props?.value?.['translations'] as TranslationReference[]) ?? []\n const weakAndTypedTranslations = translations.filter(\n ({value}) => value?._weak && value._strengthenOnPublish,\n )\n\n return (\n <Stack gap={5}>\n {bulkPublish ? <BulkPublish translations={translations} /> : null}\n {weakAndTypedTranslations.length > 0 ? (\n <OptimisticallyStrengthen\n metadataId={metadataId}\n translations={weakAndTypedTranslations}\n />\n ) : null}\n {props.renderDefault(props)}\n </Stack>\n )\n }\n\n return props.renderDefault(props)\n },\n },\n },\n\n // Adds:\n // - The `Translations` dropdown to the editing form\n // - `Badges` to documents with a language value\n // - The `DeleteMetadataAction` action to the metadata document type\n document: {\n unstable_languageFilter: (prev, ctx) => {\n const {schemaType, documentId} = ctx\n\n if (typeof hideLanguageFilter === 'function') {\n if (hideLanguageFilter(ctx)) return prev\n } else if (Array.isArray(hideLanguageFilter)) {\n if (hideLanguageFilter.includes(schemaType)) return prev\n } else if (hideLanguageFilter) {\n return prev\n }\n\n return schemaTypes.includes(schemaType) && documentId\n ? [...prev, (props) => DocumentInternationalizationMenu({...props, documentId})]\n : prev\n },\n badges: (prev, {schemaType}) => {\n if (!schemaTypes.includes(schemaType)) {\n return prev\n }\n\n return [(props) => LanguageBadge(props), ...prev]\n },\n actions: (prev, {schemaType}) => {\n if (schemaType === METADATA_SCHEMA_NAME) {\n return [...prev, useDeleteMetadataAction]\n }\n\n return prev\n },\n },\n\n // Adds:\n // - The `Translations metadata` document type to the schema\n schema: {\n // Create the metadata document type\n types: [metadata(schemaTypes, metadataFields, metadataOmnisearchVisibility)],\n\n // For every schema type this plugin is enabled on\n // Create an initial value template to set the language\n templates: (prev, {schema}) => {\n if (!addTemplates) {\n return prev\n }\n\n // Templates are not setup for async languages\n if (!Array.isArray(supportedLanguages)) {\n return prev\n }\n\n const parameterizedTemplates = schemaTypes.map((schemaType) => ({\n id: `${schemaType}-parameterized`,\n title: `${schema?.get(schemaType)?.title ?? schemaType}: with Language`,\n schemaType,\n parameters: [{name: `languageId`, title: `Language ID`, type: `string`}],\n value: ({languageId}: {languageId: string}) => ({\n [languageField]: languageId,\n }),\n }))\n\n const staticTemplates = schemaTypes.flatMap((schemaType) => {\n return supportedLanguages.map((language) => ({\n id: `${schemaType}-${language.id}`,\n title: `${language.title} ${schema?.get(schemaType)?.title ?? schemaType}`,\n schemaType,\n value: {\n [languageField]: language.id,\n },\n }))\n })\n\n return [...prev, ...parameterizedTemplates, ...staticTemplates]\n },\n },\n\n // Uses:\n // - `sanity-plugin-internationalized-array` to maintain the translations array\n plugins: [\n // Translation metadata stores its references using this plugin\n // It cuts down on attribute usage and gives UI conveniences to add new translations\n internationalizedArray({\n ...metadataInternationalization,\n apiVersion: pluginConfig.apiVersion,\n languages: supportedLanguages,\n includeForDocumentType: (documentType) => documentType === METADATA_SCHEMA_NAME,\n fieldTypes: [\n defineField(\n {\n name: 'reference',\n type: 'reference',\n to: schemaTypes.map((type) => ({type})),\n weak: pluginConfig.weakReferences,\n // Reference filters don't actually enforce validation!\n validation: (Rule) =>\n // @ts-expect-error - fix typings\n Rule.custom(async (item: TranslationReference, context) => {\n if (!item?.value?._ref || !item?.[LANGUAGE_FIELD_NAME]) {\n return true\n }\n\n const client = context.getClient({apiVersion: API_VERSION})\n const valueLanguage = await client.fetch(\n `*[_id in [$ref, $draftRef]][0].${languageField}`,\n {\n ref: item.value._ref,\n draftRef: `drafts.${item.value._ref}`,\n },\n )\n\n if (valueLanguage && valueLanguage === item[LANGUAGE_FIELD_NAME]) {\n return true\n }\n\n return `Referenced document does not have the correct language value`\n }),\n options: {\n // @ts-expect-error - Update type once it knows the values of this filter\n filter: ({parent, document}) => {\n if (!parent) return null\n\n // I'm not sure in what instance there's an array of parents\n // But the Type suggests it's possible\n const parentArray = Array.isArray(parent) ? parent : [parent]\n const language = parentArray.find((p) => p[LANGUAGE_FIELD_NAME])\n\n if (!language?.[LANGUAGE_FIELD_NAME]) return null\n\n if (document['schemaTypes']) {\n return {\n filter: `_type in $schemaTypes && ${languageField} == $language`,\n params: {\n schemaTypes: document['schemaTypes'],\n language: language[LANGUAGE_FIELD_NAME],\n },\n }\n }\n\n return {\n filter: `${languageField} == $language`,\n params: {language: language[LANGUAGE_FIELD_NAME]},\n }\n },\n },\n },\n {strict: false},\n ),\n ],\n }),\n ],\n }\n})\n"],"mappings":"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"}
\ No newline at end of file