gt-sanity 2.0.21 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1220 -763
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +113 -1
- package/dist/index.d.ts +113 -1
- package/dist/index.js +1211 -754
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/adapter/core.ts +27 -2
- package/src/adapter/types.ts +9 -0
- package/src/components/TranslationsProvider.tsx +92 -6
- package/src/components/page/TranslationsTable.tsx +5 -3
- package/src/components/shared/SingleDocumentView.tsx +5 -3
- package/src/components/tab/TranslationView.tsx +24 -14
- package/src/configuration/baseDocumentLevelConfig/documentLevelPatch.ts +1 -1
- package/src/configuration/baseFieldLevelConfig.ts +1 -1
- package/src/configuration/internationalizedArrayConfig/internationalizedArrayPatch.ts +59 -0
- package/src/index.ts +114 -58
- package/src/schema/InternationalizedArrayInput.tsx +278 -0
- package/src/schema/__tests__/createInternationalizedArrayTypes.test.ts +169 -0
- package/src/schema/createInternationalizedArrayTypes.ts +209 -0
- package/src/schema/types.ts +84 -0
- package/src/serialization/__tests__/BaseDocumentDeserializer/baseDeserialization.test.ts +3 -3
- package/src/serialization/__tests__/BaseDocumentMerger/baseMerge.test.ts +1 -1
- package/src/serialization/__tests__/BaseDocumentMerger/documentLevelMerge.test.ts +1 -1
- package/src/serialization/__tests__/BaseDocumentMerger/fieldLevelMerge.test.ts +1 -1
- package/src/serialization/__tests__/BaseDocumentSerializer/baseSerialization.test.ts +2 -2
- package/src/serialization/__tests__/BaseDocumentSerializer/documentInlineMarks.test.ts +4 -2
- package/src/serialization/__tests__/global.setup.ts +6 -0
- package/src/serialization/__tests__/helpers.ts +2 -1
- package/src/serialization/internationalizedArray/__tests__/internationalizedArray.test.ts +265 -0
- package/src/serialization/internationalizedArray/__tests__/serializeRoundTrip.test.ts +83 -0
- package/src/serialization/internationalizedArray/collapse.ts +52 -0
- package/src/serialization/internationalizedArray/detect.ts +81 -0
- package/src/serialization/internationalizedArray/merge.ts +149 -0
- package/src/serialization/types.ts +5 -1
- package/src/translation/__tests__/strategy.test.ts +47 -0
- package/src/translation/importDocument.ts +9 -5
- package/src/translation/strategy.ts +92 -0
- package/src/translation/uploadFiles.ts +1 -1
- package/src/types.ts +1 -1
- package/src/utils/__tests__/batchProcessor.test.ts +61 -2
- package/src/utils/batchProcessor.ts +11 -6
- package/src/utils/serialize.ts +24 -7
- package/src/serialization/index.ts +0 -16
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/hooks/useClient.ts","../src/hooks/useSecrets.ts","../src/utils/shared.ts","../src/adapter/core.ts","../src/components/shared/BaseTranslationWrapper.tsx","../src/serialization/BaseDocumentMerger.ts","../src/serialization/deserialize/helpers.ts","../src/serialization/data.ts","../src/serialization/BaseSerializationConfig.ts","../src/serialization/serialize/fieldFilters.ts","../src/serialization/serialize/index.ts","../src/serialization/helpers.ts","../src/serialization/deserialize/BaseDocumentDeserializer.ts","../src/utils/applyDocuments.ts","../src/utils/documentIds.ts","../src/utils/serialize.ts","../src/translation/uploadFiles.ts","../src/translation/initProject.ts","../src/translation/createJobs.ts","../src/translation/downloadTranslations.ts","../src/translation/checkTranslationStatus.ts","../src/configuration/utils/findLatestDraft.ts","../src/configuration/utils/findDocumentAtRevision.ts","../src/utils/randomKey.ts","../src/configuration/baseDocumentLevelConfig/helpers/createI18nDocAndPatchMetadata.ts","../src/configuration/baseDocumentLevelConfig/helpers/getOrCreateTranslationMetadata.ts","../src/configuration/baseDocumentLevelConfig/helpers/patchI18nDoc.ts","../src/configuration/baseDocumentLevelConfig/documentLevelPatch.ts","../src/translation/importDocument.ts","../src/sanity-api/resolveRefs.ts","../src/sanity-api/findDocuments.ts","../src/utils/batchProcessor.ts","../src/utils/importUtils.ts","../src/sanity-api/publishDocuments.ts","../src/adapter/getLocales.ts","../src/components/TranslationsProvider.tsx","../src/components/shared/ProgressBar.tsx","../src/components/shared/LanguageStatus.tsx","../../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/@emotion+memoize@0.8.1/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../../node_modules/.pnpm/@emotion+is-prop-valid@1.2.2/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Enum.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Utility.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Tokenizer.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Parser.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Prefixer.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Serializer.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Middleware.js","../../../node_modules/.pnpm/@emotion+unitless@0.8.1/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../../../node_modules/.pnpm/styled-components@6.1.19_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/dist/styled-components.esm.js","../src/components/shared/LocaleCheckbox.tsx","../src/components/tab/TranslationView.tsx","../src/components/tab/TranslationsTab.tsx","../src/actions/translateAction.tsx","../src/components/page/TranslationsTable.tsx","../src/components/page/TranslateAllDialog.tsx","../src/components/page/ImportAllDialog.tsx","../src/components/page/ImportMissingDialog.tsx","../src/components/page/BatchProgress.tsx","../src/components/page/TranslationsTool.tsx","../src/index.ts"],"sourcesContent":["// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, useClient as useSanityClient } from 'sanity';\n\nexport const useClient = (): SanityClient => {\n return useSanityClient({ apiVersion: '2025-09-15' });\n};\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { useState, useEffect } from 'react';\nimport { SanityDocumentLike } from 'sanity';\nimport { useClient } from './useClient';\n\ninterface ReturnProps<T> {\n loading: boolean;\n secrets: T | null;\n}\nexport function useSecrets<T>(id: string): ReturnProps<T> {\n const [loading, setLoading] = useState<boolean>(true);\n const [secrets, setSecrets] = useState<T | null>(null);\n const client = useClient();\n\n useEffect(() => {\n function fetchData() {\n client\n .fetch('* [_id == $id][0]', { id })\n .then((doc: SanityDocumentLike) => {\n const result: Record<string, unknown> = {};\n for (const key in doc) {\n if (key[0] !== '_') {\n result[key] = doc[key];\n }\n }\n setSecrets(result as T);\n setLoading(false);\n });\n }\n fetchData();\n }, [id, client]);\n\n return { loading, secrets };\n}\n","export const SECRETS_NAMESPACE = 'generaltranslation.secrets';\n","import { GT } from 'generaltranslation';\nimport { libraryDefaultLocale } from 'generaltranslation/internal';\nimport type { Secrets } from '../types';\nimport type {\n TranslateDocumentFilter,\n DedupeFields,\n IgnoreFields,\n SkipFields,\n} from './types';\nimport { SECRETS_NAMESPACE } from '../utils/shared';\nimport type { PortableTextHtmlComponents } from '@portabletext/to-html';\nimport type { CustomDeserializers } from '../serialization/types';\nexport const gt = new GT();\n\nexport function overrideConfig(secrets: Secrets | null) {\n gt.setConfig({\n ...(secrets?.project && { projectId: secrets?.project }),\n ...(secrets?.secret && { apiKey: secrets?.secret }),\n });\n}\n\nexport class GTConfig {\n secretsNamespace: string;\n languageField: string;\n sourceLocale: string;\n locales: string[];\n singletons: string[];\n singletonMapping: (sourceDocumentId: string, locale: string) => string;\n ignoreFields: IgnoreFields[];\n dedupeFields: DedupeFields[];\n skipFields: SkipFields[];\n translateDocuments: TranslateDocumentFilter[];\n additionalStopTypes: string[];\n additionalSerializers: Partial<PortableTextHtmlComponents>;\n additionalDeserializers: CustomDeserializers;\n additionalBlockDeserializers: unknown[];\n\n private static instance: GTConfig;\n constructor(\n secretsNamespace: string,\n languageField: string,\n sourceLocale: string,\n locales: string[],\n singletons: string[],\n singletonMapping: (sourceDocumentId: string, locale: string) => string,\n ignoreFields: IgnoreFields[],\n dedupeFields: DedupeFields[],\n skipFields: SkipFields[],\n translateDocuments: TranslateDocumentFilter[],\n additionalStopTypes: string[] = [],\n additionalSerializers: Partial<PortableTextHtmlComponents> = {},\n additionalDeserializers: CustomDeserializers = { types: {} },\n additionalBlockDeserializers: unknown[] = []\n ) {\n this.secretsNamespace = secretsNamespace;\n this.languageField = languageField;\n this.sourceLocale = sourceLocale;\n this.locales = locales;\n this.singletons = singletons;\n this.singletonMapping = singletonMapping;\n this.ignoreFields = ignoreFields;\n this.dedupeFields = dedupeFields;\n this.skipFields = skipFields;\n this.translateDocuments = translateDocuments;\n this.additionalStopTypes = additionalStopTypes;\n this.additionalSerializers = additionalSerializers;\n this.additionalDeserializers = additionalDeserializers;\n this.additionalBlockDeserializers = additionalBlockDeserializers;\n }\n\n static getInstance() {\n if (!this.instance) {\n this.instance = new GTConfig(\n SECRETS_NAMESPACE,\n 'language',\n gt.sourceLocale || libraryDefaultLocale,\n [],\n [],\n () => '',\n [],\n [],\n [],\n [],\n [],\n { types: {} },\n {},\n []\n );\n }\n return this.instance;\n }\n\n init(\n secretsNamespace: string,\n languageField: string,\n sourceLocale: string,\n locales: string[],\n singletons: string[],\n singletonMapping: (sourceDocumentId: string, locale: string) => string,\n ignoreFields: IgnoreFields[],\n dedupeFields: DedupeFields[],\n skipFields: SkipFields[],\n translateDocuments: TranslateDocumentFilter[],\n additionalStopTypes: string[] = [],\n additionalSerializers: Partial<PortableTextHtmlComponents> = {},\n additionalDeserializers: CustomDeserializers = { types: {} },\n additionalBlockDeserializers: unknown[] = []\n ) {\n this.secretsNamespace = secretsNamespace;\n this.languageField = languageField;\n this.sourceLocale = sourceLocale;\n this.locales = locales;\n this.singletons = singletons;\n this.singletonMapping = singletonMapping;\n this.ignoreFields = ignoreFields;\n this.dedupeFields = dedupeFields;\n this.skipFields = skipFields;\n this.translateDocuments = translateDocuments;\n this.additionalStopTypes = additionalStopTypes;\n this.additionalSerializers = additionalSerializers;\n this.additionalDeserializers = additionalDeserializers;\n this.additionalBlockDeserializers = additionalBlockDeserializers;\n }\n\n getSecretsNamespace() {\n return this.secretsNamespace;\n }\n\n getLanguageField() {\n return this.languageField;\n }\n\n getSourceLocale() {\n return this.sourceLocale;\n }\n getLocales() {\n return this.locales;\n }\n getSingletons() {\n return this.singletons;\n }\n getSingletonMapping() {\n return this.singletonMapping;\n }\n getIgnoreFields() {\n return this.ignoreFields;\n }\n getDedupeFields() {\n return this.dedupeFields;\n }\n getSkipFields() {\n return this.skipFields;\n }\n getTranslateDocuments() {\n return this.translateDocuments;\n }\n getAdditionalStopTypes() {\n return this.additionalStopTypes;\n }\n getAdditionalSerializers() {\n return this.additionalSerializers;\n }\n getAdditionalDeserializers() {\n return this.additionalDeserializers;\n }\n getAdditionalBlockDeserializers() {\n return this.additionalBlockDeserializers;\n }\n}\nexport const pluginConfig = GTConfig.getInstance();\n","import React from 'react';\nimport {\n ThemeProvider,\n ToastProvider,\n Box,\n Card,\n Flex,\n Spinner,\n Text,\n} from '@sanity/ui';\nimport { buildTheme } from '@sanity/ui/theme';\nimport { useSecrets } from '../../hooks/useSecrets';\nimport { Secrets } from '../../types';\nimport { pluginConfig } from '../../adapter/core';\n\nconst theme = buildTheme();\n\ninterface BaseTranslationWrapperProps {\n children: React.ReactNode;\n secretsNamespace?: string;\n padding?: number;\n showContainer?: boolean;\n}\n\nexport const BaseTranslationWrapper: React.FC<BaseTranslationWrapperProps> = ({\n children,\n secretsNamespace = pluginConfig.getSecretsNamespace(),\n padding = 4,\n showContainer = true,\n}) => {\n const { loading: loadingSecrets, secrets } =\n useSecrets<Secrets>(secretsNamespace);\n\n const content = (\n <>\n {loadingSecrets && (\n <Flex padding={5} align='center' justify='center'>\n <Spinner />\n </Flex>\n )}\n\n {!loadingSecrets && !secrets && (\n <Box padding={padding}>\n <Card tone='caution' padding={[2, 3, 4, 4]} shadow={1} radius={2}>\n <Text>\n Can't find secrets for your translation service. Did you load them\n into this dataset?\n </Text>\n </Card>\n </Box>\n )}\n\n {!loadingSecrets && secrets && children}\n </>\n );\n\n return (\n <ThemeProvider theme={theme}>\n <ToastProvider paddingY={7}>\n {showContainer ? <Box padding={padding}>{content}</Box> : content}\n </ToastProvider>\n </ThemeProvider>\n );\n};\n\nexport interface UseTranslationSecretsResult {\n loadingSecrets: boolean;\n secrets: Secrets | null;\n}\n\nexport const useTranslationSecrets = (\n secretsNamespace?: string\n): UseTranslationSecretsResult => {\n const { loading: loadingSecrets, secrets } = useSecrets<Secrets>(\n secretsNamespace || 'translationService.secrets'\n );\n\n return {\n loadingSecrets,\n secrets,\n };\n};\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\n\nimport { Merger } from './types';\nimport { SanityDocument } from 'sanity';\nimport { extractWithPath, arrayToJSONMatchPath } from '@sanity/mutator';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst reconcileArray = (\n origArray: unknown[],\n translatedArray: unknown[]\n): unknown[] => {\n //arrays of strings don't have keys, so just replace the array and return\n if (translatedArray && translatedArray.some((el) => typeof el === 'string')) {\n return translatedArray;\n }\n\n //deep copy needed for field level patching\n const combined = JSON.parse(JSON.stringify(origArray)) as unknown[];\n\n translatedArray.forEach((translatedItem) => {\n if (!isRecord(translatedItem) || !translatedItem._key) {\n return;\n }\n const foundBlockIdx = origArray.findIndex(\n (origBlock) =>\n isRecord(origBlock) && origBlock._key === translatedItem._key\n );\n if (foundBlockIdx < 0) {\n //eslint-disable-next-line no-console\n console.warn(\n `This block no longer exists on the original document. Was it removed? ${JSON.stringify(\n translatedItem\n )}`\n );\n } else if (\n isRecord(origArray[foundBlockIdx]) &&\n (origArray[foundBlockIdx]._type === 'block' ||\n origArray[foundBlockIdx]._type === 'span')\n ) {\n combined[foundBlockIdx] = translatedItem;\n } else if (isRecord(origArray[foundBlockIdx])) {\n combined[foundBlockIdx] = reconcileObject(\n origArray[foundBlockIdx],\n translatedItem\n );\n }\n });\n return combined;\n};\n\nconst reconcileObject = (\n origObject: Record<string, unknown>,\n translatedObject: Record<string, unknown>\n): Record<string, unknown> => {\n if (\n typeof translatedObject !== 'object' ||\n !Object.keys(translatedObject).length\n ) {\n return origObject;\n }\n\n const updatedObj = JSON.parse(JSON.stringify(origObject)) as Record<\n string,\n unknown\n >;\n Object.entries(translatedObject).forEach(([key, value]) => {\n if (!value || key[0] === '_') {\n return;\n }\n if (typeof value === 'string') {\n updatedObj[key] = value;\n } else if (Array.isArray(value)) {\n updatedObj[key] = reconcileArray(\n Array.isArray(origObject[key]) ? origObject[key] : [],\n value\n );\n } else if (isRecord(value)) {\n updatedObj[key] = reconcileObject(\n isRecord(origObject[key]) ? origObject[key] : {},\n value\n );\n }\n });\n return updatedObj;\n};\n\nconst fieldLevelMerge = (\n translatedFields: Record<string, unknown>,\n //should be fetched according to the revision and id of the translated obj above\n baseDoc: SanityDocument,\n localeId: string,\n baseLang: string = 'en'\n): Record<string, unknown> => {\n const merged: Record<string, unknown> = {};\n const metaKeys = ['_rev', '_id', '_type'];\n metaKeys.forEach((metaKey) => {\n if (translatedFields[metaKey]) {\n merged[metaKey] = translatedFields[metaKey];\n }\n });\n\n //get any field that matches the base language, because it's been translated\n const originPaths = extractWithPath(`..${baseLang}`, translatedFields);\n originPaths.forEach((match) => {\n const origVal = extractWithPath(\n arrayToJSONMatchPath(match.path),\n baseDoc\n )[0].value;\n const translatedVal = extractWithPath(\n arrayToJSONMatchPath(match.path),\n translatedFields\n )[0].value;\n let valToPatch;\n if (typeof translatedVal === 'string') {\n valToPatch = translatedVal;\n } else if (Array.isArray(translatedVal) && translatedVal.length) {\n valToPatch = reconcileArray(\n (origVal as Array<unknown>) ?? [],\n translatedVal\n );\n } else if (\n typeof translatedVal === 'object' &&\n Object.keys(translatedVal as Record<string, unknown>).length\n ) {\n valToPatch = reconcileObject(\n isRecord(origVal) ? origVal : {},\n translatedVal as Record<string, unknown>\n );\n }\n const destinationPath = [\n ...match.path.slice(0, match.path.length - 1), //cut off the \"en\"\n localeId.replace('-', '_'), // replace it with our locale\n ];\n\n merged[arrayToJSONMatchPath(destinationPath)] = valToPatch;\n });\n\n return merged;\n};\n\nconst documentLevelMerge = <\n TTranslatedFields extends Record<string, unknown>,\n TBaseDoc extends SanityDocument,\n>(\n translatedFields: TTranslatedFields,\n //should be fetched according to the revision and id of the translated obj above\n baseDoc: TBaseDoc\n): TBaseDoc & TTranslatedFields => {\n return reconcileObject(\n baseDoc as Record<string, unknown>,\n translatedFields\n ) as TBaseDoc & TTranslatedFields;\n};\n\nexport const BaseDocumentMerger: Merger = {\n fieldLevelMerge,\n documentLevelMerge,\n reconcileArray,\n reconcileObject,\n};\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\nimport { htmlToBlocks } from '@portabletext/block-tools';\nimport { Schema } from '@sanity/schema';\nimport { ObjectField, PortableTextSpan, PortableTextTextBlock } from 'sanity';\n\nconst defaultSchema = Schema.compile({\n name: 'default',\n types: [\n {\n type: 'object',\n name: 'default',\n fields: [\n {\n name: 'block',\n type: 'array',\n of: [{ type: 'block' }],\n },\n ],\n },\n ],\n});\n\nexport const blockContentType = defaultSchema\n .get('default')\n .fields.find((field: ObjectField) => field.name === 'block').type;\n\nexport const noSchemaWarning = (obj: Element): string =>\n `WARNING: Unfortunately the deserializer may have issues with this field or object: ${obj.className}.\n If it's a specific type, you may need to declare at the top level, or write a custom deserializer.`;\n\n//helper to handle messy input -- take advantage\n//of blockTools' sanitizing behavior for single strings\nexport const preprocess = (html: string): string => {\n const intermediateBlocks = htmlToBlocks(\n `<p>${html}</p>`,\n blockContentType\n ) as PortableTextTextBlock<PortableTextSpan>[];\n if (!intermediateBlocks.length) {\n throw new Error(`Error parsing string '${html}'`);\n }\n return intermediateBlocks[0].children[0].text;\n};\n","export function attachGTData(\n html: string,\n data: Record<string, unknown>,\n type: 'markDef'\n): string {\n // Parse the HTML string to find the first element\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const firstElement = doc.body.firstElementChild;\n\n if (!firstElement) {\n // If no element found, return original HTML\n return html;\n }\n\n // Encode the data as base64 JSON\n const encodedData = encode(JSON.stringify({ [type]: data }));\n\n // Add the data-gt-internal attribute\n firstElement.setAttribute('data-gt-internal', encodedData);\n\n return firstElement.outerHTML;\n}\n\nexport function detachGTData(html: string): {\n html: string;\n data?: Record<'markDef', Record<string, unknown>>;\n} {\n // Parse the HTML string to find the first element\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const firstElement = doc.body.firstElementChild;\n\n if (!firstElement) {\n // If no element found, return original HTML with no data\n return { html };\n }\n\n // Get the encoded data\n const encodedData = firstElement.getAttribute('data-gt-internal');\n\n let extractedData: Record<'markDef', Record<string, unknown>> | undefined;\n if (encodedData) {\n try {\n // Decode and parse the data\n const decodedData = decode(encodedData);\n extractedData = JSON.parse(decodedData);\n\n // Remove the data attribute to clean up the HTML\n firstElement.removeAttribute('data-gt-internal');\n } catch (error) {\n console.warn('Failed to decode GT internal data:', error);\n }\n }\n\n return {\n html: firstElement.outerHTML,\n data: extractedData,\n };\n}\n\n// Encode a string to base64\nexport function encode(data: string): string {\n // Browser path\n const bytes = new TextEncoder().encode(data);\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\n// Decode a base64 string to a string\nexport function decode(base64: string): string {\n // Browser path\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new TextDecoder().decode(bytes);\n}\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\n\nimport type { PortableTextBlockStyle } from '@portabletext/types';\n\nimport {\n PortableTextBlockComponent,\n PortableTextListComponent,\n PortableTextListItemComponent,\n PortableTextMarkComponent,\n PortableTextHtmlComponents,\n} from '@portabletext/to-html';\n\nimport { htmlToBlocks } from '@portabletext/block-tools';\nimport { blockContentType } from './deserialize/helpers';\nimport { PortableTextObject, PortableTextTextBlock, TypedObject } from 'sanity';\nimport { detachGTData } from './data';\nimport type { CustomDeserializers } from './types';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const defaultStopTypes = [\n 'reference',\n 'date',\n 'datetime',\n 'file',\n 'geopoint',\n 'image',\n 'number',\n 'crop',\n 'hotspot',\n 'boolean',\n 'url',\n 'color',\n 'code',\n];\n\nexport const defaultMarks: Record<string, PortableTextMarkComponent> = {};\n\nexport const defaultPortableTextBlockStyles: Record<\n PortableTextBlockStyle,\n PortableTextBlockComponent | undefined\n> = {\n normal: ({ value, children }) => `<p id=\"${value._key}\">${children}</p>`,\n blockquote: ({ value, children }) =>\n `<blockquote id=\"${value._key}\">${children}</blockquote>`,\n h1: ({ value, children }) => `<h1 id=\"${value._key}\">${children}</h1>`,\n h2: ({ value, children }) => `<h2 id=\"${value._key}\">${children}</h2>`,\n h3: ({ value, children }) => `<h3 id=\"${value._key}\">${children}</h3>`,\n h4: ({ value, children }) => `<h4 id=\"${value._key}\">${children}</h4>`,\n h5: ({ value, children }) => `<h5 id=\"${value._key}\">${children}</h5>`,\n h6: ({ value, children }) => `<h6 id=\"${value._key}\">${children}</h6>`,\n};\n\nconst defaultLists: Record<'number' | 'bullet', PortableTextListComponent> = {\n number: ({ value, children }) =>\n `<ol id=\"${value._key.replace('-parent', '')}\">${children}</ol>`,\n bullet: ({ value, children }) =>\n `<ul id=\"${value._key.replace('-parent', '')}\">${children}</ul>`,\n};\n\nconst defaultListItem: PortableTextListItemComponent = ({\n value,\n children,\n}) => {\n const { _key, level } = value;\n return `<li id=\"${(_key || '').replace('-parent', '')}\" data-level=\"${level}\">${children}</li>`;\n};\n\nconst unknownBlockFunc: PortableTextBlockComponent = ({ value, children }) =>\n `<p id=\"${value._key}\" data-type=\"unknown-block-style\" data-style=\"${value.style}\">${children}</p>`;\n\nexport const customSerializers: Partial<PortableTextHtmlComponents> = {\n unknownType: ({ value }) => `<div class=\"${value._type}\"></div>`,\n types: {},\n marks: defaultMarks,\n block: defaultPortableTextBlockStyles,\n list: defaultLists,\n listItem: defaultListItem,\n unknownBlockStyle: unknownBlockFunc,\n};\n\nexport const customDeserializers: CustomDeserializers = { types: {} };\n\nexport const customBlockDeserializers: Array<unknown> = [\n // handle marks with data-gt-internal\n {\n deserialize(\n node: Node,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\n if (node.nodeType !== 1) {\n return undefined;\n }\n const el = node as HTMLElement;\n if (!el.hasChildNodes()) {\n return undefined;\n }\n\n if (!el.getAttribute('data-gt-internal')) {\n return undefined;\n }\n\n const { html, data } = detachGTData(el.outerHTML);\n const block = htmlToBlocks(html, blockContentType)[0];\n\n const children = next(el.childNodes);\n\n let markDefs: PortableTextObject[] = [];\n if ('markDefs' in block) {\n markDefs = (block.markDefs as PortableTextObject[]) ?? [];\n }\n if (data?.markDef) {\n markDefs.push(data.markDef as PortableTextObject);\n }\n if (Array.isArray(children)) {\n children.forEach((child) => {\n if (!isRecord(child)) {\n return;\n }\n const marks = Array.isArray(child.marks) ? child.marks : [];\n child.marks = data?.markDef?._key\n ? [...marks, data.markDef._key]\n : marks;\n });\n }\n // Resolve marks in the child nodes\n const output = {\n ...block,\n markDefs,\n children,\n };\n return output;\n },\n },\n //handle undeclared styles\n {\n deserialize(\n node: Node,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\n if (node.nodeType !== 1) {\n return undefined;\n }\n const el = node as HTMLElement;\n if (!el.hasChildNodes()) {\n return undefined;\n }\n\n if (el.getAttribute('data-type') !== 'unknown-block-style') {\n return undefined;\n }\n\n const style = el.getAttribute('data-style') ?? '';\n const block = htmlToBlocks(el.outerHTML, blockContentType)[0];\n\n return {\n ...block,\n style,\n children: next(el.childNodes),\n };\n },\n },\n //handle list items\n {\n deserialize(\n node: Node,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\n if (node.nodeType !== 1) {\n return undefined;\n }\n const el = node as HTMLElement;\n if (!el.hasChildNodes()) {\n return undefined;\n }\n\n if (el.tagName.toLowerCase() !== 'li') {\n return undefined;\n }\n\n const tagsToStyle: Record<string, string> = {\n ul: 'bullet',\n ol: 'number',\n };\n\n const parent = el.parentNode as HTMLUListElement | HTMLOListElement;\n if (!parent || !parent.tagName) {\n return undefined;\n }\n\n const listItem = tagsToStyle[parent.tagName.toLowerCase()];\n if (!listItem) {\n return undefined;\n }\n\n const level =\n el.getAttribute('data-level') &&\n parseInt(el.getAttribute('data-level') || '0', 10);\n const _key = el.id;\n let block = htmlToBlocks(parent.outerHTML, blockContentType)[0];\n const customStyle = el.children?.[0]?.getAttribute('data-style');\n\n //check if the object inside is also serialized -- that means it has a style\n //or custom annotation and we should use childNode serialization\n const regex = new RegExp(/<(\"[^\"]*\"|'[^']*'|[^'\">])*>/);\n if (regex.test(el.innerHTML)) {\n const newBlock = htmlToBlocks(el.innerHTML, blockContentType)[0];\n if (newBlock) {\n block = {\n ...block,\n ...newBlock,\n // @ts-ignore\n style: customStyle ?? (newBlock as PortableTextTextBlock).style,\n };\n\n //next(childNodes) plays poorly with custom styles, issue to be filed.\n if (customStyle) {\n return block as PortableTextTextBlock;\n }\n }\n }\n\n return {\n ...block,\n level,\n _key,\n listItem,\n children: next(el.childNodes),\n };\n },\n },\n];\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\n\nimport { ObjectField, TypedObject } from 'sanity';\n\nconst META_FIELDS = ['_key', '_type', '_id'];\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/*\n * Helper. If field-level translation pattern used, only sends over\n * content from the base language. Works recursively, so if users\n * use this pattern several layers deep, base language fields will still be found.\n */\nexport const languageObjectFieldFilter = (\n obj: Record<string, unknown>,\n baseLang: string\n): Record<string, unknown> => {\n const filterToLangField = (childObj: Record<string, unknown>) => {\n const filteredObj: Record<string, unknown> = {};\n filteredObj[baseLang] = childObj[baseLang];\n META_FIELDS.forEach((field) => {\n if (childObj[field]) {\n filteredObj[field] = childObj[field];\n }\n });\n return filteredObj;\n };\n\n const findBaseLang = (\n childObj: Record<string, unknown>\n ): Record<string, unknown> => {\n const filteredObj: Record<string, unknown> = {};\n META_FIELDS.forEach((field) => {\n if (childObj[field]) {\n filteredObj[field] = childObj[field];\n }\n });\n\n for (const key in childObj) {\n if (childObj.hasOwnProperty(key)) {\n const value: unknown = childObj[key];\n //we've reached a base language field, add it to\n //what we want to send to translation\n if (isRecord(value) && Object.hasOwn(value, baseLang)) {\n filteredObj[key] = filterToLangField(value);\n }\n //we have an array that may have language fields in its objects\n else if (\n Array.isArray(value) &&\n value.length &&\n typeof value[0] === 'object'\n ) {\n //recursively find and filter for any objects that have the base language\n const validLangObjects = value.reduce<Record<string, unknown>[]>(\n (validArr, objInArray) => {\n if (!isRecord(objInArray)) {\n return validArr;\n }\n if (objInArray._type === 'block') {\n validArr.push(objInArray);\n } else if (Object.hasOwn(objInArray, baseLang)) {\n validArr.push(filterToLangField(objInArray));\n } else {\n const filtered = findBaseLang(objInArray);\n const nonMetaFields = Object.keys(filtered).filter(\n (objInArrayKey) => META_FIELDS.indexOf(objInArrayKey) === -1\n );\n if (nonMetaFields.length) {\n validArr.push(filtered);\n }\n }\n return validArr;\n },\n []\n );\n if (validLangObjects.length) {\n filteredObj[key] = validLangObjects;\n }\n }\n //we have an object nested in an object\n //recurse down the tree\n else if (isRecord(value)) {\n const nestedLangObj = findBaseLang(value);\n const nonMetaFields = Object.keys(nestedLangObj).filter(\n (nestedObjKey) => META_FIELDS.indexOf(nestedObjKey) === -1\n );\n if (nonMetaFields.length) {\n filteredObj[key] = nestedLangObj;\n }\n }\n }\n }\n return filteredObj;\n };\n\n //send top level object into recursive function\n return findBaseLang(obj);\n};\n\n/*\n * Eliminates stop-types and non-localizable fields\n * for document-level translation.\n */\nexport const fieldFilter = (\n obj: Record<string, unknown>,\n objFields: ObjectField[],\n stopTypes: string[]\n): TypedObject => {\n const filteredObj: TypedObject = {\n _type: typeof obj._type === 'string' ? obj._type : '',\n };\n\n const fieldFilterFunc = (field: ObjectField): boolean => {\n const fieldMetadata = field as ObjectField & {\n localize?: boolean;\n type?: string | { name?: string };\n };\n const fieldType =\n typeof fieldMetadata.type === 'string'\n ? fieldMetadata.type\n : fieldMetadata.type?.name;\n\n if (fieldMetadata.localize === false) {\n return false;\n } else if (fieldType === 'string' || fieldType === 'text') {\n return true;\n } else if (Array.isArray(obj[field.name])) {\n return true;\n } else if (fieldType && !stopTypes.includes(fieldType)) {\n return true;\n }\n return false;\n };\n\n const validFields = [\n ...META_FIELDS,\n ...objFields.filter(fieldFilterFunc).map((field) => field.name),\n ];\n validFields.forEach((field) => {\n if (obj[field]) {\n filteredObj[field] = obj[field];\n }\n });\n return filteredObj;\n};\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\n\nimport {\n defaultStopTypes,\n customSerializers,\n} from '../BaseSerializationConfig';\nimport { ObjectField, SanityDocument, TypedObject, Schema } from 'sanity';\nimport { TranslationLevel } from '../types';\nimport { fieldFilter, languageObjectFieldFilter } from './fieldFilters';\nimport {\n PortableTextHtmlComponents,\n PortableTextTypeComponent,\n toHTML,\n} from '@portabletext/to-html';\n\nconst META_FIELDS = ['_key', '_type', '_id', '_weak'];\n\ntype SchemaTypeWithFields = {\n fields?: ObjectField[];\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const BaseDocumentSerializer = (schemas: Schema) => {\n /*\n * Helper function that allows us to get metadata (like `localize: false`) from schema fields.\n */\n const getSchema = (name: string): SchemaTypeWithFields | undefined =>\n schemas?._original?.types.find((s) => s.name === name) as\n | SchemaTypeWithFields\n | undefined;\n\n const serializeObject = (\n obj: TypedObject,\n stopTypes: string[],\n serializers: Partial<PortableTextHtmlComponents>\n ) => {\n if (stopTypes.includes(obj._type)) {\n return '';\n }\n\n //if user has declared a custom serializer, use that\n //instead of this method\n const typeSerializers = isRecord(serializers.types)\n ? serializers.types\n : ({} as PortableTextHtmlComponents['types']);\n const hasSerializer = Object.keys(typeSerializers).includes(obj._type);\n if (hasSerializer) {\n return toHTML([obj], { components: serializers });\n }\n\n //we don't need to worry about PT types\n if (obj._type === 'span' || obj._type === 'block') {\n return toHTML(obj, { components: serializers });\n }\n\n //if schema is available, encode values in the order they're declared in the schema,\n //since this will likely be more intuitive for a translator.\n let fieldNames = Object.keys(obj).filter((key) => key !== '_type');\n const schema = getSchema(obj._type);\n if (schema && schema.fields) {\n fieldNames = schema.fields\n .map((field) => field.name)\n .filter((schemaKey) => Object.keys(obj).includes(schemaKey));\n }\n\n //account for anonymous inline objects\n if (typeof obj === 'object' && !obj._type) {\n obj._type = '';\n }\n\n //in some cases, we might recurse through many objects of the same type\n //we should take all methods necessary to ensure state does not persist\n //otherwise we risk using old serialization methods on new items\n const newSerializationMethods: Record<string, PortableTextTypeComponent> =\n {};\n const tempType = `${obj._type}__temp_type__${Math.random().toString(36).substring(7)}`;\n const objToSerialize: TypedObject = { _type: tempType };\n //for our default serialization method, we only need to\n //capture metadata. the rest will be recursively turned into strings.\n META_FIELDS.filter((f) => f !== '_type').forEach((field) => {\n objToSerialize[field] = obj[field];\n });\n\n let innerHTML = '';\n\n //if it's a custom object, iterate through its keys to find and serialize translatable content\n fieldNames.forEach((fieldName) => {\n let htmlField = '';\n\n if (!META_FIELDS.includes(fieldName)) {\n const value = obj[fieldName];\n //strings are either string fields or have recursively been turned\n //into HTML because they were a nested object or array\n if (typeof value === 'string') {\n const htmlRegex = new RegExp(/<(\"[^\"]*\"|'[^']*'|[^'\">])*>/);\n if (htmlRegex.test(value)) {\n htmlField = value;\n } else {\n htmlField = `<span class=\"${fieldName}\">${value}</span>`;\n }\n }\n\n //array fields get filtered and its children serialized\n else if (Array.isArray(value)) {\n htmlField = serializeArray(value, fieldName, stopTypes, {\n ...serializers,\n types: { ...typeSerializers },\n });\n }\n\n //this is an object in an object, serialize it first\n else if (isRecord(value)) {\n const embeddedObject = value as TypedObject;\n const embeddedObjectSchema = getSchema(embeddedObject._type);\n let toTranslate = embeddedObject;\n if (embeddedObjectSchema && embeddedObjectSchema.fields) {\n toTranslate = fieldFilter(\n toTranslate,\n embeddedObjectSchema.fields,\n stopTypes\n );\n }\n const objHTML = serializeObject(toTranslate, stopTypes, {\n ...serializers,\n types: { ...typeSerializers },\n });\n htmlField = `<div class=\"${fieldName}\" data-level=\"field\">${objHTML}</div>`;\n }\n\n innerHTML += htmlField;\n }\n });\n\n if (!innerHTML) {\n return '';\n }\n\n newSerializationMethods[tempType] = ({ value }: { value: TypedObject }) => {\n let div = `<div class=\"${value._type.split('__temp_type__')[0]}\"`;\n if (value._key || value._id) {\n div += `id=\"${value._key ?? value._id}\"`;\n }\n\n return [div, ` data-type=\"object\">${innerHTML}</div>`].join('');\n };\n\n let serializedBlock = '';\n try {\n serializedBlock = toHTML(objToSerialize, {\n components: {\n ...serializers,\n types: {\n ...typeSerializers,\n ...newSerializationMethods,\n },\n },\n });\n } catch (err) {\n //eslint-disable-next-line no-console -- this is a warning\n console.warn(\n `Had issues serializing block of type \"${obj._type}\". Specify a serialization method for this block in your serialization config. Received error: ${err}`\n );\n }\n\n return serializedBlock;\n };\n\n const serializeArray = (\n fieldContent: Array<Record<string, unknown> | string>,\n fieldName: string,\n stopTypes: string[],\n serializers: Partial<PortableTextHtmlComponents>\n ) => {\n //filter for any blocks that user has indicated\n //should not be sent for translation\n const validBlocks = fieldContent.filter(\n (block) =>\n typeof block === 'string' ||\n typeof block._type !== 'string' ||\n !stopTypes.includes(block._type)\n );\n\n //take out any fields in these blocks that should\n //not be sent to translation\n const filteredBlocks = validBlocks.map((block) => {\n if (typeof block === 'string') {\n return block;\n }\n const schema = getSchema(\n typeof block._type === 'string' ? block._type : ''\n );\n if (schema && schema.fields) {\n return fieldFilter(block, schema.fields, stopTypes);\n }\n return block;\n });\n\n const output = filteredBlocks.map((obj) => {\n //if object in array is just a string, just return it\n if (typeof obj === 'string') {\n return `<span>${obj}</span>`;\n }\n //send to serialization method\n return serializeObject(obj as TypedObject, stopTypes, serializers);\n });\n\n //encode this with data-level field\n return `<div class=\"${fieldName}\" data-type=\"array\">${output.join('')}</div>`;\n };\n\n /*\n * Main parent function: finds fields to translate, and feeds them to appropriate child serialization\n * methods.\n */\n const serializeDocument = (\n doc: SanityDocument,\n translationLevel: TranslationLevel = 'document',\n baseLang = 'en',\n stopTypes = defaultStopTypes,\n serializers = customSerializers\n ) => {\n const schema = getSchema(doc._type);\n let filteredObj: Record<string, unknown> = {};\n\n //field level translations explicitly send over any fields that\n //match the base language, regardless of depth\n if (translationLevel === 'field') {\n filteredObj = languageObjectFieldFilter(doc, baseLang);\n }\n //otherwise, we can refer to the schema and a list of stop types\n //to determine what should not be sent\n else {\n filteredObj = fieldFilter(doc, schema?.fields ?? [], stopTypes);\n }\n\n const serializedFields: Record<string, unknown> = {};\n\n for (const key in filteredObj) {\n if (filteredObj.hasOwnProperty(key) === false) continue;\n const value = filteredObj[key];\n\n if (typeof value === 'string') {\n serializedFields[key] = value;\n } else if (Array.isArray(value)) {\n serializedFields[key] = serializeArray(\n value.filter(\n (item): item is Record<string, unknown> | string =>\n typeof item === 'string' || isRecord(item)\n ),\n key,\n stopTypes,\n serializers\n );\n } else if (\n value &&\n isRecord(value) &&\n !stopTypes.find((stopType) => stopType == value?._type)\n ) {\n const serialized = serializeObject(\n value as TypedObject,\n stopTypes,\n serializers\n );\n serializedFields[key] =\n `<div class=\"${key}\" data-level='field'>${serialized}</div>`;\n }\n }\n\n //create a valid HTML file\n const rawHTMLBody = document.createElement('body');\n rawHTMLBody.innerHTML = serializeObject(\n serializedFields as TypedObject,\n stopTypes,\n serializers\n );\n\n const rawHTMLHead = document.createElement('head');\n const metaFields = ['_id', '_type', '_rev'];\n //save our metadata as meta tags so we can use them later on\n metaFields.forEach((field) => {\n const metaEl = document.createElement('meta');\n metaEl.setAttribute('name', field);\n metaEl.setAttribute('content', doc[field] as string);\n rawHTMLHead.appendChild(metaEl);\n });\n //encode version so we can use the correct deserialization methods\n const versionMeta = document.createElement('meta');\n versionMeta.setAttribute('name', 'version');\n versionMeta.setAttribute('content', '3');\n rawHTMLHead.appendChild(versionMeta);\n\n const rawHTML = document.createElement('html');\n rawHTML.appendChild(rawHTMLHead);\n rawHTML.appendChild(rawHTMLBody);\n\n return {\n name: doc._id,\n content: rawHTML.outerHTML,\n };\n };\n\n return {\n serializeDocument,\n fieldFilter,\n languageObjectFieldFilter,\n serializeArray,\n serializeObject,\n };\n};\n","import { PortableTextTextBlock } from 'sanity';\n\n// Helper function to merge multiple blocks\n// Prioritize blocks[0]\nexport function mergeBlocks(blocks: PortableTextTextBlock[]) {\n const mergedBlock = { ...blocks[0] };\n mergedBlock.markDefs = mergedBlock.markDefs ?? [];\n for (const [idx, block] of blocks.entries()) {\n if (idx === 0) {\n continue;\n }\n mergedBlock.children.push(...block.children);\n mergedBlock.markDefs.push(...(block.markDefs ?? []));\n }\n mergedBlock._type = 'block';\n\n return mergedBlock;\n}\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\nimport { htmlToBlocks } from '@portabletext/block-tools';\nimport {\n customDeserializers,\n customBlockDeserializers,\n} from '../BaseSerializationConfig';\nimport { CustomDeserializers, Deserializer } from '../types';\nimport { blockContentType, preprocess } from './helpers';\nimport { mergeBlocks } from '../helpers';\n\nexport const deserializeArray = (\n arrayHTML: Element,\n deserializers: CustomDeserializers = customDeserializers,\n blockDeserializers: Array<unknown> = customBlockDeserializers\n) => {\n const output: unknown[] = [];\n const children = Array.from(arrayHTML.children);\n children.forEach((child) => {\n let deserializedObject: unknown;\n try {\n if (child.tagName?.toLowerCase() === 'span') {\n deserializedObject = preprocess(child.innerHTML);\n }\n //has specific class name or data type, so it's an obj\n else if (\n child.className ||\n child.getAttribute('data-type') === 'object'\n ) {\n deserializedObject = deserializeObject(\n child,\n deserializers,\n blockDeserializers\n );\n if (\n deserializedObject &&\n typeof deserializedObject === 'object' &&\n !Array.isArray(deserializedObject)\n ) {\n (deserializedObject as Record<string, unknown>)._key = child.id;\n }\n } else {\n const blocks = htmlToBlocks(child.outerHTML, blockContentType, {\n rules: blockDeserializers as NonNullable<\n Parameters<typeof htmlToBlocks>[2]\n >['rules'],\n });\n deserializedObject = mergeBlocks(\n blocks as unknown as Parameters<typeof mergeBlocks>[0]\n );\n (deserializedObject as Record<string, unknown>)._key = child.id;\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.debug(\n `Tried to deserialize block: ${child.outerHTML} in an array but failed to identify it! Error: ${e}`\n );\n }\n output.push(deserializedObject);\n });\n return output;\n};\n\nexport const deserializeObject = (\n objectHTML: Element,\n deserializers: CustomDeserializers = customDeserializers,\n blockDeserializers: Array<unknown> = customBlockDeserializers\n) => {\n const deserialize = deserializers.types?.[objectHTML.className];\n if (deserialize) {\n return deserialize(objectHTML as HTMLElement);\n }\n\n const output: Record<string, unknown> = {};\n //account for anonymous inline objects\n if (objectHTML.className) {\n output._type = objectHTML.className;\n }\n const children = Array.from(objectHTML.children);\n\n children.forEach((child) => {\n //string field\n if (child.tagName?.toLowerCase() === 'span') {\n output[child.className] = preprocess(child.innerHTML);\n }\n //richer field, either object or array\n else if (child.getAttribute('data-level') === 'field') {\n const deserialized = deserializeHTML(\n child.outerHTML,\n deserializers,\n blockDeserializers\n );\n if (deserialized && Object.keys(deserialized).length) {\n output[child.className] = deserialized;\n } else {\n //eslint-disable-next-line no-console\n console.debug(\n `Deserializer: Skipping empty or unreadable HTML: ${child.outerHTML}`\n );\n }\n } else if (child.getAttribute('data-type') === 'array') {\n output[child.className] = deserializeArray(\n child,\n deserializers,\n blockDeserializers\n );\n }\n });\n return output;\n};\n\nexport const deserializeHTML = (\n html: string,\n deserializers: CustomDeserializers,\n blockDeserializers: Array<unknown>\n): Record<string, unknown> | unknown[] => {\n //parent node is always div with classname of field -- get its child\n let HTMLnode = new DOMParser().parseFromString(html, 'text/html').body\n .children[0];\n\n //catch embedded object as a field\n if (HTMLnode?.getAttribute('data-level') === 'field') {\n HTMLnode = HTMLnode.children[0];\n }\n\n if (!HTMLnode) {\n return {};\n }\n\n let output: Record<string, unknown> | unknown[];\n\n //prioritize custom deserialization\n const deserialize = deserializers.types?.[HTMLnode.className];\n if (deserialize) {\n output = deserialize(HTMLnode as HTMLElement);\n } else if (HTMLnode.getAttribute('data-type') === 'object') {\n output = deserializeObject(HTMLnode, deserializers, blockDeserializers);\n } else if (HTMLnode.getAttribute('data-type') === 'array') {\n output = deserializeArray(HTMLnode, deserializers, blockDeserializers);\n } else {\n output = {};\n //eslint-disable-next-line no-console\n console.debug(\n `Tried to deserialize block ${HTMLnode.outerHTML} but failed to identify it!`\n );\n }\n\n return output;\n};\n\nexport const deserializeDocument = <\n TDocument extends Record<string, unknown> = Record<string, unknown>,\n>(\n serializedDoc: string,\n deserializers: CustomDeserializers = customDeserializers,\n blockDeserializers: Array<unknown> = customBlockDeserializers\n): TDocument => {\n const metadata: Record<string, unknown> = {};\n const head = new DOMParser().parseFromString(serializedDoc, 'text/html').head;\n\n Array.from(head.children).forEach((metaTag) => {\n const validTags = ['_id', '_rev', '_type'];\n const metaName = metaTag.getAttribute('name');\n if (metaName && validTags.includes(metaName)) {\n metadata[metaName] = metaTag.getAttribute('content');\n }\n });\n\n const content = deserializeHTML(\n serializedDoc,\n deserializers,\n blockDeserializers\n ) as Record<string, unknown>;\n\n return {\n ...content,\n ...metadata,\n } as TDocument;\n};\n\nexport const BaseDocumentDeserializer: Deserializer = {\n deserializeDocument,\n deserializeHTML,\n};\n","import { JSONPath } from 'jsonpath-plus';\nimport JSONPointer from 'jsonpointer';\nimport type { DedupeFields, FieldMatcher, SkipFields } from '../adapter/types';\n\nexport function forEachMatchingField(\n documentId: string,\n document: Record<string, unknown>,\n fields: FieldMatcher[],\n callback: (result: {\n pointer: string;\n value: unknown;\n parent: Record<string, unknown> | unknown[];\n parentProperty: string;\n }) => void\n): void {\n const applicable = fields.filter(\n (field) =>\n field.documentId === documentId ||\n field.documentId === undefined ||\n field.documentId === null\n );\n\n for (const entry of applicable) {\n if (!entry.fields) continue;\n\n for (const field of entry.fields) {\n const { property, type } = field;\n\n try {\n const results = JSONPath({\n json: document,\n path: property,\n resultType: 'all',\n flatten: true,\n wrap: true,\n });\n\n if (results && results.length > 0) {\n results.forEach(\n (result: {\n pointer: string;\n value: unknown;\n parent: Record<string, unknown> | unknown[];\n parentProperty: string;\n }) => {\n if (type !== undefined) {\n if (\n typeof result.value === 'object' &&\n result.value !== null &&\n !Array.isArray(result.value) &&\n (result.value as Record<string, unknown>)._type === type\n ) {\n callback(result);\n }\n } else {\n callback(result);\n }\n }\n );\n }\n } catch (error) {\n console.warn(`Invalid JSONPath: ${property}`, error);\n }\n }\n }\n}\n\nexport function deleteMatchingFields(\n documentId: string,\n document: Record<string, unknown>,\n fields: FieldMatcher[]\n): void {\n const arrayRemovals: Array<{ parent: unknown[]; index: number }> = [];\n\n forEachMatchingField(documentId, document, fields, (result) => {\n if (Array.isArray(result.parent)) {\n arrayRemovals.push({\n parent: result.parent,\n index: Number(result.parentProperty),\n });\n } else {\n delete result.parent[result.parentProperty];\n }\n });\n\n // Splice array elements in reverse index order to avoid shifting indices\n arrayRemovals.sort((a, b) => b.index - a.index);\n for (const { parent, index } of arrayRemovals) {\n parent.splice(index, 1);\n }\n}\n\nexport function applyDocuments(\n documentId: string,\n sourceDocument: Record<string, unknown>,\n targetDocument: Record<string, unknown>,\n ignore: FieldMatcher[],\n skip: SkipFields[] = [],\n dedupe: DedupeFields[] = [],\n localeId?: string\n) {\n // Deep copy both documents so mutations (e.g. skip-field deletions) never affect the originals\n const mergedDocument = JSON.parse(JSON.stringify(sourceDocument));\n\n // Merge top-level properties of targetDocument\n const clonedTarget = JSON.parse(JSON.stringify(targetDocument));\n for (const [key, value] of Object.entries(clonedTarget)) {\n mergedDocument[key] = value;\n }\n\n // Restore ignored fields from source document\n forEachMatchingField(documentId, sourceDocument, ignore, (result) => {\n JSONPointer.set(mergedDocument, result.pointer, result.value);\n });\n\n // Restore de-duped fields from the source document with a deterministic locale suffix.\n forEachMatchingField(documentId, sourceDocument, dedupe, (result) => {\n JSONPointer.set(\n mergedDocument,\n result.pointer,\n dedupeFieldValue(result.value, localeId)\n );\n });\n\n // Remove skip fields from merged document\n deleteMatchingFields(documentId, mergedDocument, skip);\n\n return mergedDocument;\n}\n\nfunction dedupeFieldValue(value: unknown, localeId?: string): unknown {\n if (!localeId) return value;\n\n if (typeof value === 'string') {\n return appendLocaleSuffix(value, localeId);\n }\n\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as Record<string, unknown>).current === 'string'\n ) {\n const slug = value as Record<string, unknown>;\n return {\n ...slug,\n current: appendLocaleSuffix(slug.current as string, localeId),\n };\n }\n\n return value;\n}\n\nfunction appendLocaleSuffix(value: string, localeId: string): string {\n if (!value) return value;\n\n const suffix = createLocaleSuffix(localeId);\n if (!suffix || value.endsWith(suffix)) return value;\n\n return `${value}${suffix}`;\n}\n\nfunction createLocaleSuffix(localeId: string): string {\n const normalized = localeId\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n\n return normalized ? `-${normalized}` : '';\n}\n","import type { SanityDocument } from 'sanity';\n\nexport function getPublishedId(documentId: string): string {\n return documentId.startsWith('drafts.') ? documentId.slice(7) : documentId;\n}\n\nexport function getDocumentPublishedId(document: SanityDocument): string {\n return getPublishedId(document._id);\n}\n\nexport function dedupeDocumentsPreferDraft<T extends SanityDocument>(\n documents: T[]\n): T[] {\n const byPublishedId = new Map<string, T>();\n\n for (const document of documents) {\n const publishedId = getDocumentPublishedId(document);\n const existing = byPublishedId.get(publishedId);\n\n if (!existing || document._id.startsWith('drafts.')) {\n byPublishedId.set(publishedId, document);\n }\n }\n\n return Array.from(byPublishedId.values());\n}\n\nexport function createTranslationStatusKey(\n branchId: string | undefined,\n documentId: string,\n versionId: string,\n localeId: string\n): string {\n const publishedId = getPublishedId(documentId);\n return branchId\n ? `${branchId}:${publishedId}:${versionId}:${localeId}`\n : `${publishedId}:${versionId}:${localeId}`;\n}\n\nexport function createStableTranslationKey(\n branchId: string | undefined,\n documentId: string,\n localeId: string\n): string {\n const publishedId = getPublishedId(documentId);\n return branchId\n ? `${branchId}:${publishedId}:${localeId}`\n : `${publishedId}:${localeId}`;\n}\n","import { SanityDocument, Schema } from 'sanity';\nimport {\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n defaultStopTypes,\n customSerializers,\n customBlockDeserializers,\n} from '../serialization/';\nimport { PortableTextHtmlComponents } from '@portabletext/to-html';\nimport { pluginConfig } from '../adapter/core';\nimport merge from 'lodash.merge';\nimport { deleteMatchingFields } from './applyDocuments';\nimport type { FieldMatcher } from '../adapter/types';\nimport { getPublishedId } from './documentIds';\nimport type { CustomDeserializers } from '../serialization';\n\nexport function deserializeDocument(document: string) {\n const deserializers = merge(\n { types: {} },\n pluginConfig.getAdditionalDeserializers()\n ) as CustomDeserializers;\n const blockDeserializers = [\n ...customBlockDeserializers,\n ...pluginConfig.getAdditionalBlockDeserializers(),\n ];\n const deserialized = BaseDocumentDeserializer.deserializeDocument(\n document,\n deserializers,\n blockDeserializers\n ) as SanityDocument;\n return deserialized;\n}\n\nexport function serializeDocument(\n document: SanityDocument,\n schema: Schema,\n baseLanguage: string\n) {\n const stopTypes = [\n ...defaultStopTypes,\n ...pluginConfig.getAdditionalStopTypes(),\n ];\n const serializers = merge(\n customSerializers,\n pluginConfig.getAdditionalSerializers()\n ) satisfies Partial<PortableTextHtmlComponents>;\n\n const docToSerialize = stripIgnoredFields(\n document,\n pluginConfig.getIgnoreFields(),\n pluginConfig.getDedupeFields()\n );\n\n const serialized = BaseDocumentSerializer(schema).serializeDocument(\n docToSerialize,\n 'document',\n baseLanguage,\n stopTypes,\n serializers\n );\n return serialized;\n}\n\nfunction stripIgnoredFields(\n document: SanityDocument,\n ignoreFields: FieldMatcher[],\n dedupeFields: FieldMatcher[]\n): SanityDocument {\n const fieldsToStrip = [...ignoreFields, ...dedupeFields];\n if (fieldsToStrip.length === 0) return document;\n\n const strippedDoc = JSON.parse(JSON.stringify(document)) as SanityDocument;\n\n deleteMatchingFields(\n getPublishedId(document._id),\n strippedDoc,\n fieldsToStrip\n );\n\n return strippedDoc;\n}\n","import type { GTFile, Secrets } from '../types';\nimport { gt, overrideConfig } from '../adapter/core';\nimport { libraryDefaultLocale } from 'generaltranslation/internal';\nimport type { SerializedDocument } from '../serialization';\n\n// note: this function is used to create a new translation task\n// uploads files & calls the getTranslationTask function\nexport async function uploadFiles(\n documents: {\n info: GTFile;\n serializedDocument: SerializedDocument;\n }[],\n secrets: Secrets | null\n): Promise<Awaited<ReturnType<typeof gt.uploadSourceFiles>>> {\n overrideConfig(secrets);\n const uploadResult = await gt.uploadSourceFiles(\n documents.map(({ info, serializedDocument }) => ({\n source: {\n content: serializedDocument.content,\n fileName: `sanity/${info.documentId}`,\n fileId: info.documentId,\n fileFormat: 'HTML',\n locale: gt.sourceLocale || libraryDefaultLocale,\n versionId: info.versionId || undefined,\n },\n })),\n {\n sourceLocale: gt.sourceLocale || libraryDefaultLocale,\n }\n );\n return uploadResult;\n}\n","import { gt, overrideConfig, pluginConfig } from '../adapter/core';\nimport type { Secrets } from '../types';\n\nexport async function initProject(\n uploadResult: Awaited<ReturnType<typeof gt.uploadSourceFiles>>,\n options: { timeout?: number },\n secrets: Secrets\n): Promise<boolean> {\n overrideConfig(secrets);\n // Calculate timeout once for setup fetching\n // Accept number or numeric string, default to 600s\n const timeoutVal =\n options?.timeout !== undefined ? Number(options.timeout) : 600;\n const setupTimeoutMs =\n (Number.isFinite(timeoutVal) ? timeoutVal : 600) * 1000;\n\n const setupResult = await gt.setupProject(uploadResult.uploadedFiles, {\n locales: pluginConfig.getLocales(),\n });\n\n if (setupResult?.status === 'queued') {\n const { setupJobId } = setupResult;\n const start = Date.now();\n const pollInterval = 2000;\n\n let setupCompleted = false;\n let setupFailedMessage: string | null = null;\n\n while (true) {\n const status = await gt.checkJobStatus([setupJobId]);\n if (!status[0]) {\n setupFailedMessage = 'Unknown error';\n break;\n }\n if (status[0].status === 'completed') {\n setupCompleted = true;\n break;\n }\n if (status[0].status === 'failed') {\n setupFailedMessage = status[0].error?.message || 'Unknown error';\n break;\n }\n if (Date.now() - start > setupTimeoutMs) {\n setupFailedMessage = 'Timed out while waiting for setup generation';\n break;\n }\n await new Promise((r) => setTimeout(r, pollInterval));\n }\n\n if (setupCompleted) {\n // eslint-disable-next-line no-console\n console.log('Setup successfully completed');\n } else {\n // eslint-disable-next-line no-console\n console.log(\n `Setup ${setupFailedMessage ? 'failed' : 'timed out'} — proceeding without setup${\n setupFailedMessage ? ` (${setupFailedMessage})` : ''\n }`\n );\n }\n }\n\n return true;\n}\n","import { libraryDefaultLocale } from 'generaltranslation/internal';\nimport { gt, overrideConfig } from '../adapter/core';\nimport type { Secrets } from '../types';\n\nexport async function createJobs(\n uploadResult: Awaited<ReturnType<typeof gt.uploadSourceFiles>>,\n localeIds: string[],\n secrets: Secrets\n): Promise<Awaited<ReturnType<typeof gt.enqueueFiles>>> {\n overrideConfig(secrets);\n const enqueueResult = await gt.enqueueFiles(uploadResult.uploadedFiles, {\n sourceLocale: gt.sourceLocale || libraryDefaultLocale,\n targetLocales: localeIds,\n });\n return enqueueResult;\n}\n","import { gt, overrideConfig } from '../adapter/core';\nimport { FileProperties } from '../adapter/types';\nimport { DownloadedFile } from 'generaltranslation/types';\nimport type { Secrets } from '../types';\n\n/**\n * Downloads multiple translation files in a single batch request\n * @param files - Array of files to download with their output paths\n * @param maxRetries - Maximum number of retry attempts\n * @param retryDelay - Delay between retries in milliseconds\n * @returns Object containing successful and failed file IDs\n */\nexport async function downloadTranslations(\n files: FileProperties[],\n secrets: Secrets,\n maxRetries = 3,\n retryDelay = 1000\n): Promise<DownloadedFile[]> {\n overrideConfig(secrets);\n let retries = 0;\n\n while (retries <= maxRetries) {\n try {\n // Download the files\n const responseData = await gt.downloadFileBatch(\n files.map((file) => ({\n fileId: file.fileId,\n branchId: file.branchId,\n versionId: file.versionId,\n locale: file.locale,\n }))\n );\n const downloadedFiles = responseData.files || [];\n return downloadedFiles;\n } catch {\n // Increment retry counter and wait before next attempt\n retries++;\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n }\n }\n\n return [];\n}\n","import type { Secrets } from '../types';\nimport { gt, overrideConfig } from '../adapter/core';\nimport { FileProperties } from '../adapter/types';\nimport {\n createStableTranslationKey,\n createTranslationStatusKey,\n} from '../utils/documentIds';\n\nexport async function checkTranslationStatus(\n fileQueryData: FileProperties[],\n downloadStatus: {\n downloaded: Set<string>;\n failed: Set<string>;\n skipped: Set<string>;\n },\n secrets: Secrets\n) {\n overrideConfig(secrets);\n try {\n // Only query for files that haven't been downloaded yet\n const currentQueryData = fileQueryData.filter((item) => {\n const statusKey = createTranslationStatusKey(\n item.branchId,\n item.fileId,\n item.versionId,\n item.locale\n );\n const stableKey = createStableTranslationKey(\n item.branchId,\n item.fileId,\n item.locale\n );\n return (\n !downloadStatus.downloaded.has(statusKey) &&\n !downloadStatus.downloaded.has(stableKey) &&\n !downloadStatus.failed.has(statusKey) &&\n !downloadStatus.failed.has(stableKey) &&\n !downloadStatus.skipped.has(statusKey) &&\n !downloadStatus.skipped.has(stableKey)\n );\n });\n\n // If all files have been downloaded, we're done\n if (currentQueryData.length === 0) {\n return true;\n }\n // Check for translations\n const responseData = await gt.queryFileData({\n translatedFiles: currentQueryData,\n });\n\n const translations = responseData.translatedFiles || [];\n\n // Filter for ready translations\n const readyTranslations = translations.filter(\n (translation) => translation.completedAt\n );\n\n return readyTranslations;\n } catch (error) {\n console.error('Error checking translation status', error);\n return [];\n }\n}\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, SanityDocument } from 'sanity';\nimport { getPublishedId } from '../../utils/documentIds';\n\n//use perspectives in the future\nexport const findLatestDraft = (\n documentId: string,\n client: SanityClient\n): Promise<SanityDocument> => {\n const publishedId = getPublishedId(documentId);\n const query = `*[_id == $id || _id == $draftId]`;\n const params = { id: publishedId, draftId: `drafts.${publishedId}` };\n return client\n .fetch(query, params)\n .then(\n (docs: SanityDocument[]) =>\n docs.find((doc) => doc._id.startsWith('drafts.')) ?? docs[0]\n );\n};\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, SanityDocument } from 'sanity';\n\n//revision fetch\nexport const findDocumentAtRevision = async (\n documentId: string,\n rev: string,\n client: SanityClient\n): Promise<SanityDocument> => {\n const dataset = client.config().dataset;\n const baseUrl = `/data/history/${dataset}/documents/${documentId}?revision=${rev}`;\n const url = client.getUrl(baseUrl);\n const revisionDoc = await fetch(url, { credentials: 'include' })\n .then((req) => req.json())\n .then((req) => {\n if (req.documents && req.documents.length) {\n return req.documents[0];\n }\n return null;\n });\n\n return revisionDoc;\n};\n","export function randomKey(): string {\n return Math.random().toString(36).slice(2, 10);\n}\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, SanityDocumentLike } from 'sanity';\nimport { pluginConfig } from '../../../adapter/core';\nimport { applyDocuments } from '../../../utils/applyDocuments';\nimport { getPublishedId } from '../../../utils/documentIds';\nimport { randomKey } from '../../../utils/randomKey';\n\nexport async function createI18nDocAndPatchMetadata(\n sourceDocument: SanityDocumentLike,\n translatedDoc: SanityDocumentLike,\n localeId: string,\n client: SanityClient,\n translationMetadata: SanityDocumentLike,\n sourceDocumentId: string,\n languageField: string = 'language'\n): Promise<void> {\n const publishedSourceDocumentId = getPublishedId(sourceDocumentId);\n translatedDoc[languageField] = localeId;\n const translations = translationMetadata.translations as Record<\n string,\n unknown\n >[];\n const existingLocaleKey = translations.find(\n (translation) => translation.language === localeId\n );\n const operation = existingLocaleKey ? 'replace' : 'after';\n const location = existingLocaleKey\n ? `translations[language == \"${localeId}\"]`\n : 'translations[-1]';\n\n //remove system fields\n const { _updatedAt, _createdAt, ...rest } = translatedDoc;\n\n const appliedDocument = applyDocuments(\n publishedSourceDocumentId,\n sourceDocument,\n rest,\n pluginConfig.getIgnoreFields(),\n pluginConfig.getSkipFields(),\n pluginConfig.getDedupeFields(),\n localeId\n );\n\n // Check if this is a singleton document and apply singleton mapping\n const singletons = pluginConfig.getSingletons();\n const isSingleton = singletons.includes(publishedSourceDocumentId);\n\n let createDocumentPromise;\n if (isSingleton) {\n const singletonMapping = pluginConfig.getSingletonMapping();\n const translatedDocId = singletonMapping(\n publishedSourceDocumentId,\n localeId\n );\n createDocumentPromise = client.create({\n ...appliedDocument,\n _type: rest._type,\n _id: `drafts.${translatedDocId}`,\n });\n } else {\n createDocumentPromise = client.create({\n ...appliedDocument,\n _type: rest._type,\n _id: 'drafts.',\n });\n }\n\n const doc = await createDocumentPromise;\n const _ref = getPublishedId(doc._id);\n await client\n .transaction()\n .patch(translationMetadata._id, (p) =>\n p.insert(operation, location, [\n {\n _key: randomKey(),\n language: localeId,\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref,\n _weak: true,\n _strengthenOnPublish: {\n type: doc._type,\n },\n },\n },\n ])\n )\n .commit();\n}\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport {\n KeyedObject,\n Reference,\n SanityClient,\n SanityDocumentLike,\n} from 'sanity';\nimport { randomKey } from '../../../utils/randomKey';\nimport { getPublishedId } from '../../../utils/documentIds';\n\ntype TranslationReference = KeyedObject & {\n _type: 'internationalizedArrayReferenceValue';\n value: Reference;\n};\n\nexport const getOrCreateTranslationMetadata = async (\n documentId: string,\n baseDocument: SanityDocumentLike,\n client: SanityClient,\n baseLanguage: string\n): Promise<SanityDocumentLike> => {\n const publishedId = getPublishedId(documentId);\n\n // First, try to get existing metadata\n const existingMetadata = await client.fetch(\n `*[\n _type == 'translation.metadata' &&\n translations[language == $baseLanguage][0].value._ref == $id\n ][0]`,\n { baseLanguage, id: publishedId }\n );\n\n if (existingMetadata) {\n return existingMetadata;\n }\n\n // If no metadata exists, create it atomically\n const baseLangEntry: TranslationReference = {\n _key: randomKey(),\n language: baseLanguage,\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref: getPublishedId(baseDocument._id),\n },\n };\n\n if (baseDocument._id.startsWith('drafts.')) {\n baseLangEntry.value = {\n ...baseLangEntry.value,\n _weak: true,\n //this should reflect doc i18n config when this\n //plugin is able to take that as a config option\n _strengthenOnPublish: {\n type: baseDocument._type,\n },\n };\n }\n\n try {\n // Use createIfNotExists to handle race conditions\n return await client.createIfNotExists({\n _id: `translation.metadata.${publishedId}`,\n _type: 'translation.metadata',\n translations: [baseLangEntry],\n });\n } catch (error) {\n // If creation fails due to race condition, fetch the existing document\n const metadata = await client.fetch(\n `*[\n _type == 'translation.metadata' &&\n translations[language == $baseLanguage][0].value._ref == $id\n ][0]`,\n { baseLanguage, id: publishedId }\n );\n\n if (metadata) {\n return metadata;\n }\n\n throw error;\n }\n};\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, SanityDocumentLike } from 'sanity';\nimport JSONPointer from 'jsonpointer';\nimport {\n applyDocuments,\n deleteMatchingFields,\n forEachMatchingField,\n} from '../../../utils/applyDocuments';\nimport { pluginConfig } from '../../../adapter/core';\n\nconst SYSTEM_FIELDS = ['_id', '_rev', '_updatedAt', 'language'];\n\nconst isSystemField = (field: string) => SYSTEM_FIELDS.includes(field);\n\nexport async function patchI18nDoc(\n sourceDocumentId: string,\n i18nDocId: string,\n sourceDocument: SanityDocumentLike,\n mergedDocument: SanityDocumentLike,\n translatedFields: Record<string, unknown>,\n client: SanityClient,\n existingDocument?: SanityDocumentLike\n): Promise<void> {\n const cleanedMerge: Record<string, unknown> = {};\n Object.entries(mergedDocument).forEach(([key, value]) => {\n if (\n //only patch those fields that had translated strings\n key in translatedFields &&\n //don't overwrite any existing system values on the i18n doc\n !isSystemField(key)\n ) {\n cleanedMerge[key] = value;\n }\n });\n const cleanedSourceDocument: Record<string, unknown> = {};\n Object.entries(sourceDocument).forEach(([key, value]) => {\n if (\n // extract only the fields that are not system fields\n !isSystemField(key)\n ) {\n cleanedSourceDocument[key] = value;\n }\n });\n const appliedDocument = applyDocuments(\n sourceDocumentId,\n cleanedSourceDocument,\n cleanedMerge,\n pluginConfig.getIgnoreFields(),\n pluginConfig.getSkipFields()\n );\n const dedupeFields = pluginConfig.getDedupeFields();\n deleteMatchingFields(sourceDocumentId, appliedDocument, dedupeFields);\n if (existingDocument) {\n forEachMatchingField(\n sourceDocumentId,\n existingDocument,\n dedupeFields,\n (result) => {\n JSONPointer.set(appliedDocument, result.pointer, result.value);\n }\n );\n }\n await client.patch(i18nDocId, { set: appliedDocument }).commit();\n}\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, SanityDocument, SanityDocumentLike } from 'sanity';\nimport { BaseDocumentMerger } from '../../serialization';\n\nimport { findLatestDraft } from '../utils/findLatestDraft';\nimport { findDocumentAtRevision } from '../utils/findDocumentAtRevision';\nimport { createI18nDocAndPatchMetadata } from './helpers/createI18nDocAndPatchMetadata';\nimport { getOrCreateTranslationMetadata } from './helpers/getOrCreateTranslationMetadata';\nimport { patchI18nDoc } from './helpers/patchI18nDoc';\nimport type { GTFile } from '../../types';\nimport { pluginConfig } from '../../adapter/core';\n\ntype TranslationReference = {\n language?: string;\n value?: {\n _ref?: string;\n };\n};\n\nexport const documentLevelPatch = async (\n docInfo: GTFile,\n translatedFields: SanityDocument,\n localeId: string,\n client: SanityClient,\n languageField: string = 'language',\n mergeWithTargetLocale: boolean = false\n): Promise<void> => {\n const baseLanguage = pluginConfig.getSourceLocale();\n //this is the document we use to merge with the translated fields\n let baseDoc: SanityDocument | null = null;\n\n //this is the document that will serve as the translated doc\n let i18nDoc: SanityDocument | null = null;\n\n /*\n * we send over the _rev with our translation file so we can\n * accurately coalesce the translations in case something has\n * changed in the base document since translating\n */\n if (docInfo.documentId && docInfo.versionId) {\n baseDoc = await findDocumentAtRevision(\n docInfo.documentId,\n docInfo.versionId,\n client\n );\n }\n if (!baseDoc) {\n baseDoc = await findLatestDraft(docInfo.documentId, client);\n }\n\n /* first, check our metadata to see if a translated document exists\n * if no metadata exists, we create it atomically\n */\n const translationMetadata = await getOrCreateTranslationMetadata(\n docInfo.documentId,\n baseDoc,\n client,\n baseLanguage\n );\n\n //the id of the translated document should be on the metadata if it exists\n const translations =\n translationMetadata.translations as TranslationReference[];\n const i18nDocId = translations.find(\n (translation) => translation.language === localeId\n )?.value?._ref;\n\n if (i18nDocId) {\n //get draft or published\n i18nDoc = await findLatestDraft(i18nDocId, client);\n }\n\n //if the user has chosen to merge with the target locale,\n //any existing target document will serve as our base document\n if (mergeWithTargetLocale && i18nDoc) {\n baseDoc = i18nDoc;\n } else if (docInfo.documentId && docInfo.versionId) {\n /*\n * we send over the _rev with our translation file so we can\n * accurately coalesce the translations in case something has\n * changed in the base document since translating\n */\n baseDoc = await findDocumentAtRevision(\n docInfo.documentId,\n docInfo.versionId,\n client\n );\n }\n\n if (!baseDoc) {\n baseDoc = await findLatestDraft(docInfo.documentId, client);\n }\n /*\n * we then merge the translation with the base document\n * to create a document that contains the translation and everything\n * that wasn't sent over for translation\n */\n const merged = BaseDocumentMerger.documentLevelMerge(\n translatedFields,\n baseDoc\n ) as SanityDocumentLike;\n\n if (i18nDoc) {\n await patchI18nDoc(\n docInfo.documentId,\n i18nDoc._id,\n baseDoc,\n merged,\n translatedFields,\n client,\n i18nDoc\n );\n }\n //otherwise, create a new document\n //and add the document reference to the metadata document\n else {\n const freshTranslationMetadata = await getOrCreateTranslationMetadata(\n docInfo.documentId,\n baseDoc,\n client,\n baseLanguage\n );\n const freshTranslations =\n freshTranslationMetadata.translations as TranslationReference[];\n const freshI18nDocId = freshTranslations.find(\n (translation) => translation.language === localeId\n )?.value?._ref;\n\n if (freshI18nDocId) {\n const freshI18nDoc = await findLatestDraft(freshI18nDocId, client);\n await patchI18nDoc(\n docInfo.documentId,\n freshI18nDoc._id,\n baseDoc,\n merged,\n translatedFields,\n client,\n freshI18nDoc\n );\n return;\n }\n\n await createI18nDocAndPatchMetadata(\n baseDoc,\n merged,\n localeId,\n client,\n freshTranslationMetadata,\n docInfo.documentId,\n languageField\n );\n }\n};\n","import { pluginConfig } from '../adapter/core';\nimport { documentLevelPatch } from '../configuration/baseDocumentLevelConfig/documentLevelPatch';\nimport type { GTFile, TranslationFunctionContext } from '../types';\nimport { deserializeDocument } from '../utils/serialize';\n\nexport async function importDocument(\n docInfo: GTFile,\n localeId: string,\n document: string,\n context: TranslationFunctionContext,\n mergeWithTargetLocale: boolean = false\n) {\n const { client } = context;\n const deserialized = deserializeDocument(document);\n return documentLevelPatch(\n docInfo, // versionId is not used here, since we just use the _rev id in the deserialized HTML itself\n deserialized,\n localeId,\n client,\n pluginConfig.getLanguageField(),\n mergeWithTargetLocale\n );\n}\n","import { SanityClient, SanityDocument } from 'sanity';\nimport { pluginConfig } from '../adapter/core';\n\ninterface Reference {\n _type: 'reference';\n _ref: string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst isReference = (value: unknown): value is Reference =>\n isRecord(value) &&\n value._type === 'reference' &&\n typeof value._ref === 'string';\n\n/**\n * Function that:\n * 1. Finds all references in the document\n * 2. Fetches the referenced documents, looks for the translation.metadata file for each reference\n * 3. Updates the document reference with the other translated document reference\n * 4. Returns the document with the updated references\n */\nexport async function resolveRefs(\n doc: SanityDocument,\n locale: string,\n client: SanityClient\n) {\n const references = findReferences(doc);\n\n if (references.length === 0) {\n return doc;\n }\n\n const translatedRefs = await resolveTranslatedReferences(\n references,\n locale,\n client\n );\n return updateDocumentReferences(doc, translatedRefs);\n}\n\n/**\n * Recursively finds all references in a document or object\n */\nfunction findReferences(\n obj: unknown,\n path: string[] = []\n): { ref: Reference; path: string[] }[] {\n if (!obj || typeof obj !== 'object') {\n return [];\n }\n\n const references: { ref: Reference; path: string[] }[] = [];\n\n if (isReference(obj)) {\n references.push({ ref: obj, path });\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n references.push(...findReferences(item, [...path, index.toString()]));\n });\n } else if (isRecord(obj)) {\n Object.keys(obj).forEach((key) => {\n references.push(...findReferences(obj[key], [...path, key]));\n });\n }\n\n return references;\n}\n\n/**\n * Fetches translation metadata and resolves translated references\n */\nasync function resolveTranslatedReferences(\n references: { ref: Reference; path: string[] }[],\n locale: string,\n client: SanityClient\n): Promise<Map<string, string>> {\n const refIds = references.map((r) => r.ref._ref);\n const translatedRefs = new Map<string, string>();\n\n if (refIds.length === 0) {\n return translatedRefs;\n }\n\n const sourceLocale = pluginConfig.getSourceLocale();\n\n // Optimized GROQ query that directly returns only the needed translation pairs\n const query = `*[_type == \"translation.metadata\" && count(translations[language == $sourceLocale && value._ref in $refIds]) > 0] {\n \"originalRef\": translations[language == $sourceLocale][0].value._ref,\n \"translatedRefs\": translations[language == $locale].value._ref\n }[defined(originalRef) && count(translatedRefs) > 0]`;\n\n const translationPairs: { originalRef: string; translatedRefs: string[] }[] =\n await client.fetch(query, { refIds, sourceLocale, locale });\n\n // Build the translation map\n for (const { originalRef, translatedRefs: localeRefs } of translationPairs) {\n const translatedRef = localeRefs[localeRefs.length - 1];\n translatedRefs.set(originalRef, translatedRef);\n }\n\n return translatedRefs;\n}\n\n/**\n * Updates document references with their translated versions\n */\nfunction updateDocumentReferences(\n doc: SanityDocument,\n translatedRefs: Map<string, string>\n): SanityDocument {\n return updateReferencesRecursive(doc, translatedRefs) as SanityDocument;\n}\n\n/**\n * Recursively updates references in an object\n */\nfunction updateReferencesRecursive(\n obj: unknown,\n translatedRefs: Map<string, string>\n): unknown {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n if (isReference(obj) && translatedRefs.has(obj._ref)) {\n return {\n ...obj,\n _ref: translatedRefs.get(obj._ref),\n };\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => updateReferencesRecursive(item, translatedRefs));\n }\n\n const updated: Record<string, unknown> = {};\n Object.keys(obj).forEach((key) => {\n updated[key] = updateReferencesRecursive(\n (obj as Record<string, unknown>)[key],\n translatedRefs\n );\n });\n\n return updated;\n}\n","import { SanityClient } from 'sanity';\nimport { pluginConfig } from '../adapter/core';\nimport { getPublishedId } from '../utils/documentIds';\nimport { findLatestDraft } from '../configuration/utils/findLatestDraft';\n\nexport async function findTranslatedDocuments(\n documentId: string,\n client: SanityClient\n) {\n const documents = await client.fetch(\n `*[_type == \"translation.metadata\" && references($documentId)]`\n );\n return documents;\n}\n\nexport async function findTranslatedDocumentForLocale(\n sourceDocumentId: string,\n localeId: string,\n client: SanityClient\n) {\n const cleanDocId = getPublishedId(sourceDocumentId);\n\n // Use the last locale entry defensively. Older versions could create\n // duplicate locale entries when bulk imports raced.\n const query = `*[\n _type == \"translation.metadata\" &&\n (\n translations[language == $sourceLocale][0].value._ref == $cleanDocId\n ) &&\n defined(translations[language == $localeId])\n ][0].translations[language == $localeId].value._ref`;\n\n const translatedDocIds = await client.fetch(query, {\n sourceLocale: pluginConfig.getSourceLocale(),\n cleanDocId,\n localeId,\n });\n\n const translatedDocId = translatedDocIds?.[translatedDocIds.length - 1];\n if (!translatedDocId) return null;\n\n return (await findLatestDraft(translatedDocId, client)) || null;\n}\n\nexport async function findDocument(documentId: string, client: SanityClient) {\n const query = `*[_id == $id]`;\n const params = { id: documentId };\n const document = await client.fetch(query, params);\n return document[0] || null;\n}\n","import { GTFile, TranslationFunctionContext } from '../types';\nimport { importDocument } from '../translation/importDocument';\nimport { createStableTranslationKey } from './documentIds';\n\nexport interface BatchProcessorOptions<T = unknown, R = unknown> {\n batchSize?: number;\n getConcurrencyKey?: (item: T) => string | undefined;\n onProgress?: (current: number, total: number) => void;\n onItemSuccess?: (item: T, result: R) => void;\n onItemFailure?: (item: T, error: unknown) => void;\n}\n\nexport interface ImportBatchItem {\n docInfo: GTFile;\n locale: string;\n data: string;\n translationContext: TranslationFunctionContext;\n key: string;\n}\n\nexport async function processBatch<T, R = unknown>(\n items: T[],\n processor: (item: T) => R | Promise<R>,\n options: BatchProcessorOptions<T, Awaited<R>> = {}\n): Promise<{\n successCount: number;\n failureCount: number;\n successfulItems: Awaited<R>[];\n failedItems: { item: T; error: unknown }[];\n}> {\n const {\n batchSize = 20,\n getConcurrencyKey,\n onProgress,\n onItemSuccess,\n onItemFailure,\n } = options;\n\n let successCount = 0;\n let failureCount = 0;\n const successfulItems: Awaited<R>[] = [];\n const failedItems: { item: T; error: unknown }[] = [];\n\n for (let i = 0; i < items.length; i += batchSize) {\n const batch = items.slice(i, i + batchSize);\n\n const pendingByKey = new Map<string, Promise<void>>();\n\n const batchPromises: Promise<\n | { success: true; item: T; result: Awaited<R> }\n | { success: false; item: T; error: unknown }\n >[] = batch.map(async (item) => {\n const concurrencyKey = getConcurrencyKey?.(item);\n const pending = concurrencyKey\n ? pendingByKey.get(concurrencyKey)\n : undefined;\n\n let release: () => void = () => {};\n const current = new Promise<void>((resolve) => {\n release = resolve;\n });\n\n if (concurrencyKey) {\n pendingByKey.set(concurrencyKey, current);\n }\n\n try {\n if (pending) {\n await pending;\n }\n\n const result = await processor(item);\n onItemSuccess?.(item, result);\n return { success: true as const, item, result };\n } catch (error) {\n onItemFailure?.(item, error);\n return { success: false as const, item, error };\n } finally {\n release();\n if (concurrencyKey && pendingByKey.get(concurrencyKey) === current) {\n pendingByKey.delete(concurrencyKey);\n }\n }\n });\n\n const batchResults = await Promise.all(batchPromises);\n\n batchResults.forEach((result) => {\n if (result.success) {\n successCount++;\n successfulItems.push(result.result);\n } else {\n failureCount++;\n failedItems.push({ item: result.item, error: result.error });\n }\n });\n\n onProgress?.(i + batch.length, items.length);\n }\n\n return { successCount, failureCount, successfulItems, failedItems };\n}\n\nexport async function processImportBatch(\n items: ImportBatchItem[],\n options: BatchProcessorOptions<ImportBatchItem, string> = {}\n): Promise<{\n successCount: number;\n failureCount: number;\n successfulImports: string[];\n failedItems: { item: ImportBatchItem; error: unknown }[];\n}> {\n const successfulImports: string[] = [];\n\n const result = await processBatch(\n items,\n async (item: ImportBatchItem) => {\n await importDocument(\n item.docInfo,\n item.locale,\n item.data,\n item.translationContext,\n false\n );\n return item.key;\n },\n {\n ...options,\n getConcurrencyKey: (item: ImportBatchItem) =>\n createStableTranslationKey(\n undefined,\n item.docInfo.documentId,\n item.locale\n ),\n onItemSuccess: (item: ImportBatchItem, key: string) => {\n successfulImports.push(key);\n options.onItemSuccess?.(item, key);\n },\n onItemFailure: (item: ImportBatchItem, error: unknown) => {\n console.error(\n `Failed to import ${item.docInfo.documentId} (${item.locale}):`,\n error\n );\n options.onItemFailure?.(item, error);\n },\n }\n );\n\n return {\n ...result,\n successfulImports,\n };\n}\n","import { Secrets, TranslationFunctionContext } from '../types';\nimport { downloadTranslations } from '../translation/downloadTranslations';\nimport { processImportBatch, ImportBatchItem } from './batchProcessor';\nimport type { FileProperties, TranslationStatus } from '../adapter/types';\nimport { createStableTranslationKey, getPublishedId } from './documentIds';\n\nexport interface ImportResult {\n successCount: number;\n failureCount: number;\n successfulImports: string[];\n}\n\nexport interface ImportOptions {\n filterReadyFiles?: (key: string, status: TranslationStatus) => boolean;\n onProgress?: (current: number, total: number) => void;\n onImportSuccess?: (key: string) => void;\n}\n\nexport async function getReadyFilesForImport(\n translationStatuses: Map<string, TranslationStatus>,\n options: ImportOptions = {}\n): Promise<FileProperties[]> {\n const { filterReadyFiles = () => true } = options;\n const readyFilesByDocumentLocale = new Map<string, FileProperties>();\n\n for (const [key, status] of translationStatuses.entries()) {\n if (status.isReady && status.fileData && filterReadyFiles(key, status)) {\n const fileData = {\n fileId: getPublishedId(status.fileData.fileId),\n versionId: status.fileData.versionId,\n branchId: status.fileData.branchId,\n locale: status.fileData.locale,\n };\n readyFilesByDocumentLocale.set(\n createStableTranslationKey(\n fileData.branchId,\n fileData.fileId,\n fileData.locale\n ),\n fileData\n );\n }\n }\n\n return Array.from(readyFilesByDocumentLocale.values());\n}\n\nexport async function importTranslations(\n readyFiles: FileProperties[],\n secrets: Secrets,\n translationContext: TranslationFunctionContext,\n options: ImportOptions = {}\n): Promise<ImportResult> {\n if (readyFiles.length === 0) {\n return { successCount: 0, failureCount: 0, successfulImports: [] };\n }\n\n const downloadedFiles = await downloadTranslations(readyFiles, secrets);\n\n const importItems: ImportBatchItem[] = downloadedFiles.map((file) => {\n const data =\n typeof file.data === 'string'\n ? file.data\n : JSON.stringify(file.data ?? '');\n return {\n docInfo: {\n documentId: file.fileId,\n versionId: file.versionId,\n },\n locale: file.locale!,\n data,\n translationContext,\n key: `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`,\n };\n });\n\n const result = await processImportBatch(importItems, {\n onProgress: options.onProgress,\n onItemSuccess: (item, key) => {\n options.onImportSuccess?.(key);\n },\n });\n\n return {\n successCount: result.successCount,\n failureCount: result.failureCount,\n successfulImports: result.successfulImports,\n };\n}\n","import { SanityClient } from 'sanity';\nimport { processBatch } from '../utils/batchProcessor';\nimport { findDocument } from './findDocuments';\nimport { getPublishedId } from '../utils/documentIds';\n\nexport async function publishDocument(\n documentId: string,\n client: SanityClient\n) {\n try {\n // only publish if the document is a draft\n if (documentId.startsWith('drafts.')) {\n await client.action(\n {\n actionType: 'sanity.action.document.publish',\n draftId: documentId,\n publishedId: getPublishedId(documentId),\n },\n {}\n );\n }\n } catch (error) {\n console.error('Error publishing document', error);\n }\n}\n\nexport async function publishTranslations(\n documentIds: string[],\n client: SanityClient\n) {\n const publishedDocumentIds: string[] = [];\n await processBatch(\n documentIds,\n async (documentId) => {\n const document = await findDocument(`drafts.${documentId}`, client);\n if (!document) {\n return { documentId, published: false };\n }\n await publishDocument(document._id, client);\n publishedDocumentIds.push(documentId);\n return { documentId, published: true };\n },\n {\n onItemFailure: (documentId, error) => {\n console.error(`Failed to publish document ${documentId}:`, error);\n },\n }\n );\n return publishedDocumentIds;\n}\n","import type { Adapter, Secrets } from '../types';\nimport { gt, pluginConfig } from './core';\n\n// note: this function is used to get the available locales for a project\nexport const getLocales: Adapter['getLocales'] = async (\n _secrets: Secrets | null\n) => {\n return pluginConfig.getLocales().map((locale: string) => ({\n localeId: locale,\n description: gt.getLocaleProperties(locale).name,\n enabled: true,\n }));\n};\n","import React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useEffect,\n useRef,\n ReactNode,\n} from 'react';\nimport { SanityDocument, useSchema } from 'sanity';\nimport { useToast } from '@sanity/ui';\nimport { useClient } from '../hooks/useClient';\nimport { useSecrets } from '../hooks/useSecrets';\nimport {\n GTFile,\n Secrets,\n TranslationLocale,\n TranslationFunctionContext,\n} from '../types';\nimport { gt, overrideConfig, pluginConfig } from '../adapter/core';\nimport { serializeDocument } from '../utils/serialize';\nimport { uploadFiles } from '../translation/uploadFiles';\nimport { initProject } from '../translation/initProject';\nimport { createJobs } from '../translation/createJobs';\nimport { downloadTranslations } from '../translation/downloadTranslations';\nimport { checkTranslationStatus } from '../translation/checkTranslationStatus';\nimport { importDocument } from '../translation/importDocument';\nimport { resolveRefs } from '../sanity-api/resolveRefs';\nimport { findTranslatedDocumentForLocale } from '../sanity-api/findDocuments';\nimport {\n getReadyFilesForImport,\n importTranslations,\n ImportOptions,\n} from '../utils/importUtils';\nimport { processBatch } from '../utils/batchProcessor';\nimport { publishTranslations } from '../sanity-api/publishDocuments';\nimport { getLocales } from '../adapter/getLocales';\nimport type { FileProperties, TranslationStatus } from '../adapter/types';\nimport {\n createStableTranslationKey,\n createTranslationStatusKey,\n dedupeDocumentsPreferDraft,\n getDocumentPublishedId,\n getPublishedId,\n} from '../utils/documentIds';\n\ninterface ImportProgress {\n current: number;\n total: number;\n isImporting: boolean;\n}\n\ninterface DownloadStatus {\n downloaded: Set<string>;\n failed: Set<string>;\n skipped: Set<string>;\n}\n\ntype ExistingTranslationMetadata = {\n sourceDocId: string;\n existingTranslations?: string[];\n};\n\ntype TranslationDocumentMetadata = {\n translationDocs?: { docId?: string }[];\n};\n\ninterface TranslationsContextType {\n // State\n isBusy: boolean;\n documents: SanityDocument[];\n locales: TranslationLocale[];\n autoRefresh: boolean;\n autoImport: boolean;\n autoPatchReferences: boolean;\n autoPublish: boolean;\n loadingDocuments: boolean;\n importProgress: ImportProgress;\n importedTranslations: Set<string>;\n existingTranslations: Set<string>;\n downloadStatus: DownloadStatus;\n translationStatuses: Map<string, TranslationStatus>;\n isRefreshing: boolean;\n loadingSecrets: boolean;\n secrets: Secrets | null;\n branchId: string | undefined;\n\n // Actions\n setLocales: (locales: TranslationLocale[]) => void;\n setAutoRefresh: (value: boolean) => void;\n setAutoImport: (value: boolean) => void;\n setAutoPatchReferences: (value: boolean) => void;\n setAutoPublish: (value: boolean) => void;\n handleTranslateAll: () => Promise<void>;\n handleImportAll: () => Promise<void>;\n handleImportMissing: () => Promise<void>;\n handleRefreshAll: () => Promise<void>;\n handleImportDocument: (\n documentId: string,\n versionId: string,\n localeId: string\n ) => Promise<void>;\n handlePatchDocumentReferences: () => Promise<number>;\n handlePublishAllTranslations: () => Promise<number>;\n}\n\nconst TranslationsContext = createContext<TranslationsContextType | null>(null);\n\nexport const useTranslations = () => {\n const context = useContext(TranslationsContext);\n if (!context) {\n throw new Error('useTranslations must be used within TranslationsProvider');\n }\n return context;\n};\n\ninterface TranslationsProviderProps {\n children: ReactNode;\n singleDocument?: SanityDocument | null;\n}\n\nexport const TranslationsProvider: React.FC<TranslationsProviderProps> = ({\n children,\n singleDocument,\n}) => {\n const [isBusy, setIsBusy] = useState(false);\n const [documents, setDocuments] = useState<SanityDocument[]>([]);\n const [locales, setLocales] = useState<TranslationLocale[]>([]);\n const [autoRefresh, setAutoRefresh] = useState(false);\n const [autoImport, setAutoImport] = useState(false);\n const [autoPatchReferences, setAutoPatchReferences] = useState(false);\n const [autoPublish, setAutoPublish] = useState(false);\n const [loadingDocuments, setLoadingDocuments] = useState(false);\n const [importProgress, setImportProgress] = useState<ImportProgress>({\n current: 0,\n total: 0,\n isImporting: false,\n });\n const [importedTranslations, setImportedTranslations] = useState<Set<string>>(\n new Set()\n );\n const [existingTranslations, setExistingTranslations] = useState<Set<string>>(\n new Set()\n );\n const [downloadStatus, setDownloadStatus] = useState<DownloadStatus>({\n downloaded: new Set<string>(),\n failed: new Set<string>(),\n skipped: new Set<string>(),\n });\n const downloadStatusRef = useRef(downloadStatus);\n const [translationStatuses, setTranslationStatuses] = useState<\n Map<string, TranslationStatus>\n >(new Map());\n const [isRefreshing, setIsRefreshing] = useState(false);\n\n const client = useClient();\n const schema = useSchema();\n const translationContext: TranslationFunctionContext = { client, schema };\n const toast = useToast();\n const { loading: loadingSecrets, secrets } = useSecrets<Secrets>(\n pluginConfig.getSecretsNamespace()\n );\n const [branchId, setBranchId] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n downloadStatusRef.current = downloadStatus;\n }, [downloadStatus]);\n\n const fetchDocuments = useCallback(async () => {\n setLoadingDocuments(true);\n try {\n if (singleDocument) {\n setDocuments([singleDocument]);\n return;\n }\n\n const translateDocuments = pluginConfig.getTranslateDocuments();\n\n const filterConditions = translateDocuments\n .map((filter) => {\n if (filter.type && filter.documentId) {\n return `(_type == \"${filter.type}\" && _id == \"${filter.documentId}\")`;\n } else if (filter.type) {\n return `_type == \"${filter.type}\"`;\n } else if (filter.documentId) {\n return `_id == \"${filter.documentId}\"`;\n }\n return null;\n })\n .filter(Boolean);\n\n const languageField = pluginConfig.getLanguageField();\n const sourceLocale = pluginConfig.getSourceLocale();\n const languageFilter = `(!defined(${languageField}) || ${languageField} == \"${sourceLocale}\")`;\n\n let query;\n if (filterConditions.length === 0) {\n query = `*[!(_type in [\"system.group\"]) && !(_id in path(\"_.**\")) && ${languageFilter}]`;\n } else {\n const filterQuery = filterConditions.join(' || ');\n query = `*[!(_type in [\"system.group\"]) && !(_id in path(\"_.**\")) && (${filterQuery}) && ${languageFilter}]`;\n }\n\n const docs = await client.fetch(query);\n setDocuments(dedupeDocumentsPreferDraft(docs));\n } catch {\n toast.push({\n title:\n 'Documents could not be loaded. Check your Sanity connection and try refreshing.',\n status: 'error',\n closable: true,\n });\n } finally {\n setLoadingDocuments(false);\n }\n }, [client, singleDocument]);\n\n const fetchLocales = useCallback(async () => {\n if (!secrets) return;\n try {\n const availableLocales = await getLocales(secrets);\n setLocales(availableLocales);\n } catch {\n toast.push({\n title:\n 'Locales could not be loaded. Check your General Translation credentials and try again.',\n status: 'error',\n closable: true,\n });\n }\n }, [secrets]);\n\n const fetchExistingTranslations = useCallback(async () => {\n if (!documents.length || !locales.length) return;\n\n try {\n const sourceLocale = pluginConfig.getSourceLocale();\n const availableLocaleIds = locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => locale.localeId);\n\n const documentIds = documents.map(getDocumentPublishedId);\n\n const query = `*[\n _type == 'translation.metadata' &&\n translations[language == $sourceLocale][0].value._ref in $documentIds\n ] {\n 'sourceDocId': translations[language == $sourceLocale][0].value._ref,\n 'existingTranslations': translations[language in $localeIds].language\n }`;\n\n const existingMetadata = await client.fetch<\n ExistingTranslationMetadata[]\n >(query, {\n sourceLocale,\n documentIds,\n localeIds: availableLocaleIds,\n });\n\n const existing = new Set<string>();\n existingMetadata.forEach((metadata) => {\n metadata.existingTranslations?.forEach((localeId: string) => {\n if (localeId !== sourceLocale) {\n existing.add(\n createStableTranslationKey(\n undefined,\n metadata.sourceDocId,\n localeId\n )\n );\n }\n });\n });\n\n setExistingTranslations(existing);\n } catch (error) {\n console.error('Error fetching existing translations:', error);\n toast.push({\n title:\n 'Existing translations could not be loaded. Try refreshing before importing.',\n status: 'error',\n closable: true,\n });\n }\n }, [documents, locales, client]);\n\n const handleTranslateAll = useCallback(async () => {\n if (!secrets || documents.length === 0) return;\n\n setIsBusy(true);\n\n try {\n const availableLocaleIds = locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => locale.localeId);\n\n const transformedDocuments = documents\n .map((doc) => {\n const { [pluginConfig.getLanguageField()]: _, ...cleanDoc } = doc;\n const baseLanguage = pluginConfig.getSourceLocale();\n try {\n const serialized = serializeDocument(\n cleanDoc as typeof doc,\n schema,\n baseLanguage\n );\n return {\n info: {\n documentId: getDocumentPublishedId(doc),\n versionId: doc._rev,\n },\n serializedDocument: serialized,\n };\n } catch (error) {\n console.error('Error transforming document', doc._id, error);\n }\n return null;\n })\n .filter((doc) => doc !== null);\n\n const uploadResult = await uploadFiles(transformedDocuments, secrets);\n await initProject(uploadResult, { timeout: 600 }, secrets);\n await createJobs(uploadResult, availableLocaleIds, secrets);\n\n toast.push({\n title: `Translation tasks created for ${documents.length} documents`,\n status: 'success',\n closable: true,\n });\n } catch {\n toast.push({\n title:\n 'Translation tasks could not be created. No documents were changed. Try again or check the console for details.',\n status: 'error',\n closable: true,\n });\n } finally {\n setIsBusy(false);\n }\n }, [secrets, documents, locales, schema]);\n\n const handleImportAll = useCallback(async () => {\n if (!secrets || documents.length === 0 || !branchId) return;\n\n setIsBusy(true);\n\n try {\n const readyFiles = await getReadyFilesForImport(translationStatuses);\n\n if (readyFiles.length === 0) {\n toast.push({\n title: 'No ready translations to import',\n status: 'warning',\n closable: true,\n });\n return;\n }\n\n setImportProgress({\n current: 0,\n total: readyFiles.length,\n isImporting: true,\n });\n\n const importOptions: ImportOptions = {\n onProgress: (current, total) => {\n setImportProgress({\n current,\n total,\n isImporting: true,\n });\n },\n onImportSuccess: (key) => {\n setImportedTranslations((prev) => new Set([...prev, key]));\n },\n };\n\n const result = await importTranslations(\n readyFiles,\n secrets,\n translationContext,\n importOptions\n );\n\n if (result.successfulImports.length > 0) {\n setDownloadStatus((prev) => ({\n ...prev,\n downloaded: new Set([\n ...prev.downloaded,\n ...result.successfulImports,\n ]),\n }));\n }\n\n toast.push({\n title: `Imported ${result.successCount} translations${result.failureCount > 0 ? `, ${result.failureCount} failed` : ''}`,\n status: result.successCount > 0 ? 'success' : 'error',\n closable: true,\n });\n } catch (error) {\n console.error('Error importing translations:', error);\n toast.push({\n title:\n 'Translations could not be imported. No documents were changed. Try again or check the console for details.',\n status: 'error',\n closable: true,\n });\n } finally {\n setIsBusy(false);\n setImportProgress({ current: 0, total: 0, isImporting: false });\n }\n }, [\n secrets,\n documents,\n translationStatuses,\n downloadStatus,\n translationContext,\n branchId,\n ]);\n\n const getExistingTranslations = useCallback(\n async (\n documentIds: string[],\n localeIds: string[],\n branchId: string\n ): Promise<Set<string>> => {\n const sourceLocale = pluginConfig.getSourceLocale();\n\n const query = `*[\n _type == 'translation.metadata' &&\n translations[language == $sourceLocale][0].value._ref in $documentIds\n ] {\n _rev,\n 'sourceDocId': translations[language == $sourceLocale][0].value._ref,\n 'existingTranslations': translations[language in $localeIds].language\n }`;\n\n const existingMetadata = await client.fetch<\n ExistingTranslationMetadata[]\n >(query, {\n sourceLocale,\n documentIds,\n localeIds,\n });\n\n const existing = new Set<string>();\n existingMetadata.forEach((metadata) => {\n metadata.existingTranslations?.forEach((localeId: string) => {\n if (localeId !== sourceLocale) {\n existing.add(\n createStableTranslationKey(\n branchId,\n metadata.sourceDocId,\n localeId\n )\n );\n }\n });\n });\n\n return existing;\n },\n [client]\n );\n\n const handleImportMissing = useCallback(async () => {\n if (!secrets || documents.length === 0 || !branchId) return;\n\n setIsBusy(true);\n\n try {\n const availableLocaleIds = locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => locale.localeId);\n\n const documentIds = documents.map(getDocumentPublishedId);\n\n const existingTranslations = await getExistingTranslations(\n documentIds,\n availableLocaleIds,\n branchId\n );\n\n const readyFiles = await getReadyFilesForImport(translationStatuses, {\n filterReadyFiles: (_key, status) =>\n !existingTranslations.has(\n createStableTranslationKey(\n branchId,\n status.fileData.fileId,\n status.fileData.locale\n )\n ),\n });\n\n if (readyFiles.length === 0) {\n toast.push({\n title: 'No missing translations to import',\n status: 'warning',\n closable: true,\n });\n return;\n }\n\n setImportProgress({\n current: 0,\n total: readyFiles.length,\n isImporting: true,\n });\n\n const importOptions: ImportOptions = {\n onProgress: (current, total) => {\n setImportProgress({\n current,\n total,\n isImporting: true,\n });\n },\n onImportSuccess: (key) => {\n setImportedTranslations((prev) => new Set([...prev, key]));\n setExistingTranslations((prev) => new Set([...prev, key]));\n },\n };\n\n const result = await importTranslations(\n readyFiles,\n secrets,\n translationContext,\n importOptions\n );\n\n if (result.successfulImports.length > 0) {\n setDownloadStatus((prev) => ({\n ...prev,\n downloaded: new Set([\n ...prev.downloaded,\n ...result.successfulImports,\n ]),\n }));\n }\n\n toast.push({\n title: `Imported ${result.successCount} missing translations${result.failureCount > 0 ? `, ${result.failureCount} failed` : ''}`,\n status: result.successCount > 0 ? 'success' : 'error',\n closable: true,\n });\n } catch (error) {\n console.error('Error importing missing translations:', error);\n toast.push({\n title:\n 'Missing translations could not be imported. No documents were changed. Try again or check the console for details.',\n status: 'error',\n closable: true,\n });\n } finally {\n setIsBusy(false);\n setImportProgress({ current: 0, total: 0, isImporting: false });\n }\n }, [\n secrets,\n documents,\n locales,\n translationStatuses,\n downloadStatus,\n translationContext,\n getExistingTranslations,\n branchId,\n ]);\n\n const handleGetBranchId = useCallback(\n async (secrets: Secrets) => {\n overrideConfig(secrets);\n const defaultBranch = await gt.createBranch({\n branchName: 'main',\n defaultBranch: true,\n });\n setBranchId(defaultBranch.branch.id);\n },\n [secrets]\n );\n\n const handleRefreshAll = useCallback(async () => {\n if (!secrets || documents.length === 0 || !branchId) return;\n setIsRefreshing(true);\n\n try {\n const availableLocaleIds = locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => locale.localeId);\n\n const fileQueryData: FileProperties[] = [];\n for (const doc of documents) {\n for (const localeId of availableLocaleIds) {\n const documentId = getDocumentPublishedId(doc);\n fileQueryData.push({\n versionId: doc._rev,\n fileId: documentId,\n branchId: branchId,\n locale: localeId,\n });\n }\n }\n\n const readyTranslations = await checkTranslationStatus(\n fileQueryData,\n downloadStatusRef.current,\n secrets\n );\n\n setTranslationStatuses(() => {\n const newStatuses = new Map();\n\n for (const doc of documents) {\n for (const localeId of availableLocaleIds) {\n const documentId = getDocumentPublishedId(doc);\n const versionId = doc._rev;\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n versionId,\n localeId\n );\n newStatuses.set(key, { progress: 0, isReady: false });\n }\n }\n\n if (Array.isArray(readyTranslations)) {\n for (const translation of readyTranslations) {\n const key = createTranslationStatusKey(\n branchId,\n translation.fileId,\n translation.versionId,\n translation.locale\n );\n newStatuses.set(key, {\n progress: 100,\n isReady: true,\n fileData: {\n versionId: translation.versionId,\n fileId: translation.fileId,\n branchId: translation.branchId,\n locale: translation.locale,\n },\n });\n }\n }\n\n return newStatuses;\n });\n\n toast.push({\n title: `Refreshed status for ${documents.length} documents`,\n status: 'success',\n closable: true,\n });\n } catch (error) {\n console.error('Error refreshing translation status:', error);\n toast.push({\n title:\n 'Translation status could not be refreshed. Try again before importing.',\n status: 'error',\n closable: true,\n });\n } finally {\n setIsRefreshing(false);\n }\n }, [secrets, documents, locales, branchId]);\n\n const handleImportDocument = useCallback(\n async (documentId: string, versionId: string, localeId: string) => {\n if (!secrets) return;\n\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n versionId,\n localeId\n );\n const status = translationStatuses.get(key);\n\n if (!status?.isReady || !status.fileData) {\n toast.push({\n title: `Translation not ready for ${documentId} (${localeId})`,\n status: 'warning',\n closable: true,\n });\n return;\n }\n\n const document = documents.find(\n (doc) => getDocumentPublishedId(doc) === getPublishedId(documentId)\n );\n\n if (!document) {\n toast.push({\n title: `Document ${documentId} not found`,\n status: 'error',\n closable: true,\n });\n return;\n }\n\n try {\n const downloadedFiles = await downloadTranslations(\n [\n {\n fileId: status.fileData.fileId,\n branchId: status.fileData.branchId,\n versionId: status.fileData.versionId,\n locale: status.fileData.locale,\n },\n ],\n secrets\n );\n\n if (downloadedFiles.length > 0) {\n try {\n const docInfo: GTFile = {\n documentId: getPublishedId(documentId),\n versionId: document._rev,\n };\n\n await importDocument(\n docInfo,\n localeId,\n downloadedFiles[0].data,\n translationContext,\n false\n );\n\n setDownloadStatus((prev) => ({\n ...prev,\n downloaded: new Set([...prev.downloaded, key]),\n }));\n setImportedTranslations((prev) => new Set([...prev, key]));\n setExistingTranslations(\n (prev) =>\n new Set([\n ...prev,\n createStableTranslationKey(branchId, documentId, localeId),\n ])\n );\n\n toast.push({\n title: `Successfully imported translation for ${documentId} (${localeId})`,\n status: 'success',\n closable: true,\n });\n } catch (importError) {\n console.error('Failed to import translation:', importError);\n toast.push({\n title: `Translation for ${documentId} (${localeId}) could not be imported. This document was not changed.`,\n status: 'error',\n closable: true,\n });\n }\n } else {\n toast.push({\n title: `No translation content received for ${documentId}`,\n status: 'warning',\n closable: true,\n });\n }\n } catch (error) {\n console.error('Error importing translation:', error);\n toast.push({\n title: `Translation for ${documentId} could not be imported. This document was not changed.`,\n status: 'error',\n closable: true,\n });\n }\n },\n [secrets, documents, translationContext, translationStatuses, branchId]\n );\n\n const handlePatchDocumentReferences = useCallback(async () => {\n if (!secrets || documents.length === 0) return 0;\n\n setIsBusy(true);\n\n try {\n const availableLocaleIds = locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => locale.localeId);\n\n const patchTasks: Array<{ doc: SanityDocument; localeId: string }> = [];\n for (const doc of documents) {\n for (const localeId of availableLocaleIds) {\n patchTasks.push({ doc, localeId });\n }\n }\n\n setImportProgress({\n current: 0,\n total: patchTasks.length,\n isImporting: true,\n });\n\n const result = await processBatch(\n patchTasks,\n async ({ doc, localeId }) => {\n const sourceLocale = pluginConfig.getSourceLocale();\n\n // Skip source locale - only process translated documents\n if (localeId === sourceLocale) {\n return { patched: false, doc, localeId, skipped: true };\n }\n\n // Find the translated document for this locale\n const translatedDoc = await findTranslatedDocumentForLocale(\n doc._id,\n localeId,\n client\n );\n\n if (!translatedDoc) {\n return { patched: false, doc, localeId, noTranslation: true };\n }\n\n const resolvedDoc = await resolveRefs(\n translatedDoc,\n localeId,\n client\n );\n\n if (resolvedDoc !== translatedDoc) {\n const mutation = {\n patch: {\n id: translatedDoc._id,\n set: resolvedDoc,\n },\n };\n\n await client.mutate([mutation]);\n return { patched: true, doc: translatedDoc, localeId };\n }\n return { patched: false, doc: translatedDoc, localeId };\n },\n {\n onProgress: (current, total) => {\n setImportProgress({\n current,\n total,\n isImporting: true,\n });\n },\n onItemFailure: ({ doc, localeId }, error) => {\n console.error(\n `Failed to patch references for ${doc._id} (${localeId}):`,\n error\n );\n },\n }\n );\n\n const patchedCount = result.successfulItems.filter(\n (item) => item.patched\n ).length;\n\n toast.push({\n title: `Patched references in ${patchedCount} documents${result.failureCount > 0 ? `, ${result.failureCount} failed` : ''}`,\n status:\n patchedCount > 0 || result.failureCount === 0 ? 'success' : 'error',\n closable: true,\n });\n\n return patchedCount;\n } catch (error) {\n console.error('Error patching document references:', error);\n toast.push({\n title:\n 'Document references could not be updated. Imported translations may need to be linked manually.',\n status: 'error',\n closable: true,\n });\n return 0;\n } finally {\n setIsBusy(false);\n setImportProgress({ current: 0, total: 0, isImporting: false });\n }\n }, [secrets, documents, locales, client, branchId]);\n\n const handlePublishAllTranslations = useCallback(async () => {\n if (!secrets || documents.length === 0) return 0;\n\n setIsBusy(true);\n\n try {\n const sourceLocale = pluginConfig.getSourceLocale();\n const sourceDocumentIds = documents.map(getDocumentPublishedId);\n const publishedDocumentIds = await client.fetch(\n `*[_id in $sourceDocumentIds]._id`,\n { sourceDocumentIds }\n );\n\n if (publishedDocumentIds.length === 0) {\n toast.push({\n title:\n 'No published source documents found to publish translations for',\n status: 'warning',\n closable: true,\n });\n return 0;\n }\n\n const query = `*[\n _type == 'translation.metadata' &&\n translations[language == $sourceLocale][0].value._ref in $publishedDocumentIds\n ] {\n 'sourceDocId': translations[language == $sourceLocale][0].value._ref,\n 'translationDocs': translations[language != $sourceLocale && defined(value._ref)]{\n _key,\n 'docId': value._ref\n }\n }`;\n\n const translationMetadata = await client.fetch<\n TranslationDocumentMetadata[]\n >(query, {\n sourceLocale,\n publishedDocumentIds,\n });\n\n const translationDocIds = new Set<string>();\n translationMetadata.forEach((metadata) => {\n metadata.translationDocs?.forEach((translation) => {\n if (translation.docId) {\n translationDocIds.add(translation.docId);\n }\n });\n });\n\n if (translationDocIds.size === 0) {\n toast.push({\n title: 'No translation documents found to publish',\n status: 'warning',\n closable: true,\n });\n return 0;\n }\n\n const translatedDocumentIds = await publishTranslations(\n Array.from(translationDocIds),\n client\n );\n\n toast.push({\n title: `Published ${translatedDocumentIds.length} translation documents`,\n status: 'success',\n closable: true,\n });\n\n return translatedDocumentIds.length;\n } catch (error) {\n console.error('Error publishing translations:', error);\n toast.push({\n title:\n 'Translations could not be published. No unpublished source documents were changed.',\n status: 'error',\n closable: true,\n });\n return 0;\n } finally {\n setIsBusy(false);\n }\n }, [secrets, documents, client, branchId]);\n\n useEffect(() => {\n fetchDocuments();\n }, [fetchDocuments]);\n\n useEffect(() => {\n if (secrets) {\n fetchLocales();\n }\n }, [fetchLocales, secrets]);\n\n useEffect(() => {\n if (documents.length > 0 && locales.length > 0) {\n fetchExistingTranslations();\n }\n }, [fetchExistingTranslations]);\n\n useEffect(() => {\n if (\n documents.length > 0 &&\n locales.length > 0 &&\n secrets &&\n !loadingDocuments &&\n branchId\n ) {\n handleRefreshAll();\n }\n }, [\n documents,\n locales,\n secrets,\n loadingDocuments,\n branchId,\n handleRefreshAll,\n ]);\n\n useEffect(() => {\n if (!autoRefresh || documents.length === 0 || !secrets) return;\n\n const interval = setInterval(async () => {\n await handleRefreshAll();\n }, 10000);\n\n return () => clearInterval(interval);\n }, [autoRefresh, documents.length, secrets, handleRefreshAll]);\n\n useEffect(() => {\n setImportedTranslations(new Set(downloadStatus.downloaded));\n }, [downloadStatus.downloaded]);\n\n useEffect(() => {\n if (secrets) {\n handleGetBranchId(secrets);\n }\n }, [secrets, handleGetBranchId]);\n\n const contextValue: TranslationsContextType = {\n // State\n isBusy,\n documents,\n locales,\n autoRefresh,\n autoImport,\n autoPatchReferences,\n autoPublish,\n loadingDocuments,\n importProgress,\n importedTranslations,\n existingTranslations,\n downloadStatus,\n translationStatuses,\n isRefreshing,\n loadingSecrets,\n secrets,\n branchId,\n\n // Actions\n setLocales,\n setAutoRefresh,\n setAutoImport,\n setAutoPatchReferences,\n setAutoPublish,\n handleTranslateAll,\n handleImportAll,\n handleImportMissing,\n handleRefreshAll,\n handleImportDocument,\n handlePatchDocumentReferences,\n handlePublishAllTranslations,\n };\n\n return (\n <TranslationsContext.Provider value={contextValue}>\n {children}\n </TranslationsContext.Provider>\n );\n};\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { Card, Flex, Label } from '@sanity/ui';\n\nexport default function ProgressBar({ progress }: { progress: number }) {\n if (typeof progress === 'undefined') {\n console.warn('No progress prop passed to ProgressBar');\n return null;\n }\n\n return (\n <Card border radius={2} style={{ width: `100%`, position: `relative` }}>\n <Flex\n style={{\n position: `absolute`,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n zIndex: 1,\n }}\n align='center'\n justify='center'\n >\n <Label size={1}>{progress}%</Label>\n </Flex>\n <Card\n style={{\n width: '100%',\n transform: `scaleX(${progress / 100})`,\n transformOrigin: 'left',\n transition: 'transform .2s ease',\n boxSizing: 'border-box',\n }}\n padding={2}\n tone='positive'\n />\n </Card>\n );\n}\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { useCallback, useState } from 'react';\nimport { Flex, Card, Text, Grid, Box, Button } from '@sanity/ui';\nimport { DownloadIcon, CheckmarkCircleIcon } from '@sanity/icons';\nimport ProgressBar from './ProgressBar';\n\ntype LanguageStatusProps = {\n title: string;\n progress: number;\n importFile: () => Promise<void>;\n isImported?: boolean;\n};\n\nexport const LanguageStatus = ({\n title,\n progress,\n importFile,\n isImported = false,\n}: LanguageStatusProps) => {\n const [isBusy, setIsBusy] = useState(false);\n const displayedProgress = isImported && progress < 100 ? 100 : progress;\n\n const handleImport = useCallback(async () => {\n setIsBusy(true);\n try {\n await importFile();\n } finally {\n setIsBusy(false);\n }\n }, [importFile, setIsBusy]);\n\n return (\n <Card shadow={1}>\n <Grid columns={5} gap={3} padding={3}>\n <Flex columnStart={1} columnEnd={3} align='center'>\n <Text weight='bold' size={1}>\n {title}\n </Text>\n </Flex>\n {typeof displayedProgress === 'number' ? (\n <Flex columnStart={3} columnEnd={5} align='center'>\n <ProgressBar progress={displayedProgress} />\n </Flex>\n ) : null}\n <Box columnStart={5} columnEnd={6}>\n {isImported ? (\n <Flex align='center' justify='center' style={{ color: 'green' }}>\n <CheckmarkCircleIcon />\n <Text size={1} style={{ marginLeft: '4px' }}>\n Imported\n </Text>\n </Flex>\n ) : (\n <Button\n style={{ width: `100%` }}\n mode='ghost'\n onClick={handleImport}\n text={isBusy ? 'Importing...' : 'Import'}\n icon={isBusy ? null : DownloadIcon}\n disabled={isBusy || !progress || progress < 100}\n />\n )}\n </Box>\n </Grid>\n </Card>\n );\n};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace, substr, match} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @param {object[]} children\n * @return {string}\n */\nexport function prefix (value, length, children) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// tab-size\n\t\tcase 4789:\n\t\t\treturn MOZ + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t\t// default: fallthrough to below\n\t\t\t}\n\t\t// flex, flex-direction, scroll-snap-type, writing-mode\n\t\tcase 6828: case 4268: case 2903:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/g, '') + (!match(value, /flex-|baseline/) ? MS + 'grid-row-' + replace(value, /flex-|-self/g, '') : '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/g, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// justify-self\n\t\tcase 4200:\n\t\t\tif (!match(value, /flex-|baseline/)) return MS + 'grid-column-align' + substr(value, length) + value\n\t\t\tbreak\n\t\t// grid-template-(columns|rows)\n\t\tcase 2592: case 3360:\n\t\t\treturn MS + replace(value, 'template-', '') + value\n\t\t// grid-(row|column)-start\n\t\tcase 4384: case 3616:\n\t\t\tif (children && children.some(function (element, index) { return length = index, match(element.props, /grid-\\w+-end/) })) {\n\t\t\t\treturn ~indexof(value + (children = children[length].value), 'span', 0) ? value : (MS + replace(value, '-start', '') + value + MS + 'grid-row-span:' + (~indexof(children, 'span', 0) ? match(children, /\\d+/) : +match(children, /\\d+/) - +match(value, /\\d+/)) + ';')\n\t\t\t}\n\t\t\treturn MS + replace(value, '-start', '') + value\n\t\t// grid-(row|column)-end\n\t\tcase 4896: case 4128:\n\t\t\treturn (children && children.some(function (element) { return match(element.props, /grid-\\w+-start/) })) ? value : MS + replace(replace(value, '-end', '-span'), 'span ', '') + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch', 0) ? prefix(replace(value, 'stretch', 'fill-available'), length, children) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// grid-(column|row)\n\t\tcase 5152: case 5920:\n\t\t\treturn replace(value, /(.+?):(\\d+)(\\s*\\/\\s*(span)?\\s*(\\d+))?(.*)/, function (_, a, b, c, d, e, f) { return (MS + a + ':' + b + f) + (c ? (MS + a + '-span:' + (d ? e : +e - +b)) + f : '') + value })\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// stick(y)?\n\t\t\tif (charat(value, length + 6) === 121)\n\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\tbreak\n\t\t// display: (flex|inline-flex|grid|inline-grid)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, charat(value, 14) === 45 ? 18 : 11)) {\n\t\t\t\t// (inline-)?fle(x)\n\t\t\t\tcase 120:\n\t\t\t\t\treturn replace(value, /(.+:)([^;\\s!]+)(;|(\\s+)?!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t\t// (inline-)?gri(d)\n\t\t\t\tcase 100:\n\t\t\t\t\treturn replace(value, ':', ':' + MS) + value\n\t\t\t}\n\t\t\tbreak\n\t\t// scroll-margin, scroll-margin-(top|right|bottom|left)\n\t\tcase 5719: case 2647: case 2135: case 3927: case 2391:\n\t\t\treturn replace(value, 'scroll-', 'scroll-snap-') + value\n\t}\n\n\treturn value\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine, filter, assign} from './Utility.js'\nimport {copy, lift, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(children = element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, callback = /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import{__spreadArray as e,__assign as t}from\"tslib\";import n from\"@emotion/is-prop-valid\";import o,{useRef as r,useState as s,useMemo as i,useEffect as a,useContext as c,useDebugValue as l,createElement as u}from\"react\";import p from\"shallowequal\";import*as d from\"stylis\";import h from\"@emotion/unitless\";var f=\"undefined\"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||\"data-styled\",m=\"active\",y=\"data-styled-version\",v=\"6.1.19\",g=\"/*!sc*/\\n\",S=\"undefined\"!=typeof window&&\"undefined\"!=typeof document,w=Boolean(\"boolean\"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:\"undefined\"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&\"\"!==process.env.REACT_APP_SC_DISABLE_SPEEDY?\"false\"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:\"undefined\"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&\"\"!==process.env.SC_DISABLE_SPEEDY?\"false\"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY:\"production\"!==process.env.NODE_ENV),b={},E=/invalid hook call/i,N=new Set,P=function(t,n){if(\"production\"!==process.env.NODE_ENV){var o=n?' with the id of \"'.concat(n,'\"'):\"\",s=\"The component \".concat(t).concat(o,\" has been created dynamically.\\n\")+\"You may see this warning because you've called styled inside another component.\\nTo resolve this only create new StyledComponents outside of any render method and function component.\\nSee https://styled-components.com/docs/basics#define-styled-components-outside-of-the-render-method for more info.\\n\",i=console.error;try{var a=!0;console.error=function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];E.test(t)?(a=!1,N.delete(s)):i.apply(void 0,e([t],n,!1))},r(),a&&!N.has(s)&&(console.warn(s),N.add(s))}catch(e){E.test(e.message)&&N.delete(s)}finally{console.error=i}}},_=Object.freeze([]),C=Object.freeze({});function I(e,t,n){return void 0===n&&(n=C),e.theme!==n.theme&&e.theme||t||n.theme}var A=new Set([\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"base\",\"bdi\",\"bdo\",\"big\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"data\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\",\"mark\",\"menu\",\"menuitem\",\"meta\",\"meter\",\"nav\",\"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"u\",\"ul\",\"use\",\"var\",\"video\",\"wbr\",\"circle\",\"clipPath\",\"defs\",\"ellipse\",\"foreignObject\",\"g\",\"image\",\"line\",\"linearGradient\",\"marker\",\"mask\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialGradient\",\"rect\",\"stop\",\"svg\",\"text\",\"tspan\"]),O=/[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~-]+/g,D=/(^-|-$)/g;function R(e){return e.replace(O,\"-\").replace(D,\"\")}var T=/(a)(d)/gi,k=52,j=function(e){return String.fromCharCode(e+(e>25?39:97))};function x(e){var t,n=\"\";for(t=Math.abs(e);t>k;t=t/k|0)n=j(t%k)+n;return(j(t%k)+n).replace(T,\"$1-$2\")}var V,F=5381,z=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},M=function(e){return z(F,e)};function $(e){return x(M(e)>>>0)}function B(e){return\"production\"!==process.env.NODE_ENV&&\"string\"==typeof e&&e||e.displayName||e.name||\"Component\"}function G(e){return\"string\"==typeof e&&(\"production\"===process.env.NODE_ENV||e.charAt(0)===e.charAt(0).toLowerCase())}var L=\"function\"==typeof Symbol&&Symbol.for,Y=L?Symbol.for(\"react.memo\"):60115,q=L?Symbol.for(\"react.forward_ref\"):60112,W={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},H={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},U={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},J=((V={})[q]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},V[Y]=U,V);function X(e){return(\"type\"in(t=e)&&t.type.$$typeof)===Y?U:\"$$typeof\"in e?J[e.$$typeof]:W;var t}var Z=Object.defineProperty,K=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,ee=Object.getOwnPropertyDescriptor,te=Object.getPrototypeOf,ne=Object.prototype;function oe(e,t,n){if(\"string\"!=typeof t){if(ne){var o=te(t);o&&o!==ne&&oe(e,o,n)}var r=K(t);Q&&(r=r.concat(Q(t)));for(var s=X(e),i=X(t),a=0;a<r.length;++a){var c=r[a];if(!(c in H||n&&n[c]||i&&c in i||s&&c in s)){var l=ee(t,c);try{Z(e,c,l)}catch(e){}}}}return e}function re(e){return\"function\"==typeof e}function se(e){return\"object\"==typeof e&&\"styledComponentId\"in e}function ie(e,t){return e&&t?\"\".concat(e,\" \").concat(t):e||t||\"\"}function ae(e,t){if(0===e.length)return\"\";for(var n=e[0],o=1;o<e.length;o++)n+=t?t+e[o]:e[o];return n}function ce(e){return null!==e&&\"object\"==typeof e&&e.constructor.name===Object.name&&!(\"props\"in e&&e.$$typeof)}function le(e,t,n){if(void 0===n&&(n=!1),!n&&!ce(e)&&!Array.isArray(e))return t;if(Array.isArray(t))for(var o=0;o<t.length;o++)e[o]=le(e[o],t[o]);else if(ce(t))for(var o in t)e[o]=le(e[o],t[o]);return e}function ue(e,t){Object.defineProperty(e,\"toString\",{value:t})}var pe=\"production\"!==process.env.NODE_ENV?{1:\"Cannot create styled-component for component: %s.\\n\\n\",2:\"Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n- Are you trying to reuse it across renders?\\n- Are you accidentally calling collectStyles twice?\\n\\n\",3:\"Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n\",4:\"The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n- Does this error occur on the client and is your target falsy?\\n- Does this error occur on the server and is the sheet falsy?\\n\\n\",5:\"The clone method cannot be used on the client!\\n\\n- Are you running in a client-like environment on the server?\\n- Are you trying to run SSR on the client?\\n\\n\",6:\"Trying to insert a new style tag, but the given Node is unmounted!\\n\\n- Are you using a custom target that isn't mounted?\\n- Does your document not have a valid head element?\\n- Have you accidentally removed a style tag manually?\\n\\n\",7:'ThemeProvider: Please return an object from your \"theme\" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n',8:'ThemeProvider: Please make your \"theme\" prop an object.\\n\\n',9:\"Missing document `<head>`\\n\\n\",10:\"Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\",11:\"_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\\n\\n\",12:\"It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\\\`\\\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\\n\\n\",13:\"%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\\n\\n\",14:'ThemeProvider: \"theme\" prop is required.\\n\\n',15:\"A stylis plugin has been supplied that is not named. We need a name for each plugin to be able to prevent styling collisions between different stylis configurations within the same app. Before you pass your plugin to `<StyleSheetManager stylisPlugins={[]}>`, please make sure each plugin is uniquely-named, e.g.\\n\\n```js\\nObject.defineProperty(importedPlugin, 'name', { value: 'some-unique-name' });\\n```\\n\\n\",16:\"Reached the limit of how many styled components may be created at group %s.\\nYou may only create up to 1,073,741,824 components. If you're creating components dynamically,\\nas for instance in your render method then you may be running into this limitation.\\n\\n\",17:\"CSSStyleSheet could not be found on HTMLStyleElement.\\nHas styled-components' style tag been unmounted or altered by another script?\\n\",18:\"ThemeProvider: Please make sure your useTheme hook is within a `<ThemeProvider>`\"}:{};function de(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=e[0],o=[],r=1,s=e.length;r<s;r+=1)o.push(e[r]);return o.forEach(function(e){n=n.replace(/%[a-z]/,e)}),n}function he(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];return\"production\"===process.env.NODE_ENV?new Error(\"An error occurred. See https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#\".concat(t,\" for more information.\").concat(n.length>0?\" Args: \".concat(n.join(\", \")):\"\")):new Error(de.apply(void 0,e([pe[t]],n,!1)).trim())}var fe=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n<e;n++)t+=this.groupSizes[n];return t},e.prototype.insertRules=function(e,t){if(e>=this.groupSizes.length){for(var n=this.groupSizes,o=n.length,r=o;e>=r;)if((r<<=1)<0)throw he(16,\"\".concat(e));this.groupSizes=new Uint32Array(r),this.groupSizes.set(n),this.length=r;for(var s=o;s<r;s++)this.groupSizes[s]=0}for(var i=this.indexOfGroup(e+1),a=(s=0,t.length);s<a;s++)this.tag.insertRule(i,t[s])&&(this.groupSizes[e]++,i++)},e.prototype.clearGroup=function(e){if(e<this.length){var t=this.groupSizes[e],n=this.indexOfGroup(e),o=n+t;this.groupSizes[e]=0;for(var r=n;r<o;r++)this.tag.deleteRule(n)}},e.prototype.getGroup=function(e){var t=\"\";if(e>=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],o=this.indexOfGroup(e),r=o+n,s=o;s<r;s++)t+=\"\".concat(this.tag.getRule(s)).concat(g);return t},e}(),me=1<<30,ye=new Map,ve=new Map,ge=1,Se=function(e){if(ye.has(e))return ye.get(e);for(;ve.has(ge);)ge++;var t=ge++;if(\"production\"!==process.env.NODE_ENV&&((0|t)<0||t>me))throw he(16,\"\".concat(t));return ye.set(e,t),ve.set(t,e),t},we=function(e,t){ge=t+1,ye.set(e,t),ve.set(t,e)},be=\"style[\".concat(f,\"][\").concat(y,'=\"').concat(v,'\"]'),Ee=new RegExp(\"^\".concat(f,'\\\\.g(\\\\d+)\\\\[id=\"([\\\\w\\\\d-]+)\"\\\\].*?\"([^\"]*)')),Ne=function(e,t,n){for(var o,r=n.split(\",\"),s=0,i=r.length;s<i;s++)(o=r[s])&&e.registerName(t,o)},Pe=function(e,t){for(var n,o=(null!==(n=t.textContent)&&void 0!==n?n:\"\").split(g),r=[],s=0,i=o.length;s<i;s++){var a=o[s].trim();if(a){var c=a.match(Ee);if(c){var l=0|parseInt(c[1],10),u=c[2];0!==l&&(we(u,l),Ne(e,u,c[3]),e.getTag().insertRules(l,r)),r.length=0}else r.push(a)}}},_e=function(e){for(var t=document.querySelectorAll(be),n=0,o=t.length;n<o;n++){var r=t[n];r&&r.getAttribute(f)!==m&&(Pe(e,r),r.parentNode&&r.parentNode.removeChild(r))}};function Ce(){return\"undefined\"!=typeof __webpack_nonce__?__webpack_nonce__:null}var Ie=function(e){var t=document.head,n=e||t,o=document.createElement(\"style\"),r=function(e){var t=Array.from(e.querySelectorAll(\"style[\".concat(f,\"]\")));return t[t.length-1]}(n),s=void 0!==r?r.nextSibling:null;o.setAttribute(f,m),o.setAttribute(y,v);var i=Ce();return i&&o.setAttribute(\"nonce\",i),n.insertBefore(o,s),o},Ae=function(){function e(e){this.element=Ie(e),this.element.appendChild(document.createTextNode(\"\")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,n=0,o=t.length;n<o;n++){var r=t[n];if(r.ownerNode===e)return r}throw he(17)}(this.element),this.length=0}return e.prototype.insertRule=function(e,t){try{return this.sheet.insertRule(t,e),this.length++,!0}catch(e){return!1}},e.prototype.deleteRule=function(e){this.sheet.deleteRule(e),this.length--},e.prototype.getRule=function(e){var t=this.sheet.cssRules[e];return t&&t.cssText?t.cssText:\"\"},e}(),Oe=function(){function e(e){this.element=Ie(e),this.nodes=this.element.childNodes,this.length=0}return e.prototype.insertRule=function(e,t){if(e<=this.length&&e>=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e<this.length?this.nodes[e].textContent:\"\"},e}(),De=function(){function e(e){this.rules=[],this.length=0}return e.prototype.insertRule=function(e,t){return e<=this.length&&(this.rules.splice(e,0,t),this.length++,!0)},e.prototype.deleteRule=function(e){this.rules.splice(e,1),this.length--},e.prototype.getRule=function(e){return e<this.length?this.rules[e]:\"\"},e}(),Re=S,Te={isServer:!S,useCSSOMInjection:!w},ke=function(){function e(e,n,o){void 0===e&&(e=C),void 0===n&&(n={});var r=this;this.options=t(t({},Te),e),this.gs=n,this.names=new Map(o),this.server=!!e.isServer,!this.server&&S&&Re&&(Re=!1,_e(this)),ue(this,function(){return function(e){for(var t=e.getTag(),n=t.length,o=\"\",r=function(n){var r=function(e){return ve.get(e)}(n);if(void 0===r)return\"continue\";var s=e.names.get(r),i=t.getGroup(n);if(void 0===s||!s.size||0===i.length)return\"continue\";var a=\"\".concat(f,\".g\").concat(n,'[id=\"').concat(r,'\"]'),c=\"\";void 0!==s&&s.forEach(function(e){e.length>0&&(c+=\"\".concat(e,\",\"))}),o+=\"\".concat(i).concat(a,'{content:\"').concat(c,'\"}').concat(g)},s=0;s<n;s++)r(s);return o}(r)})}return e.registerId=function(e){return Se(e)},e.prototype.rehydrate=function(){!this.server&&S&&_e(this)},e.prototype.reconstructWithOptions=function(n,o){return void 0===o&&(o=!0),new e(t(t({},this.options),n),this.gs,o&&this.names||void 0)},e.prototype.allocateGSInstance=function(e){return this.gs[e]=(this.gs[e]||0)+1},e.prototype.getTag=function(){return this.tag||(this.tag=(e=function(e){var t=e.useCSSOMInjection,n=e.target;return e.isServer?new De(n):t?new Ae(n):new Oe(n)}(this.options),new fe(e)));var e},e.prototype.hasNameForId=function(e,t){return this.names.has(e)&&this.names.get(e).has(t)},e.prototype.registerName=function(e,t){if(Se(e),this.names.has(e))this.names.get(e).add(t);else{var n=new Set;n.add(t),this.names.set(e,n)}},e.prototype.insertRules=function(e,t,n){this.registerName(e,t),this.getTag().insertRules(Se(e),n)},e.prototype.clearNames=function(e){this.names.has(e)&&this.names.get(e).clear()},e.prototype.clearRules=function(e){this.getTag().clearGroup(Se(e)),this.clearNames(e)},e.prototype.clearTag=function(){this.tag=void 0},e}(),je=/&/g,xe=/^\\s*\\/\\/.*$/gm;function Ve(e,t){return e.map(function(e){return\"rule\"===e.type&&(e.value=\"\".concat(t,\" \").concat(e.value),e.value=e.value.replaceAll(\",\",\",\".concat(t,\" \")),e.props=e.props.map(function(e){return\"\".concat(t,\" \").concat(e)})),Array.isArray(e.children)&&\"@keyframes\"!==e.type&&(e.children=Ve(e.children,t)),e})}function Fe(e){var t,n,o,r=void 0===e?C:e,s=r.options,i=void 0===s?C:s,a=r.plugins,c=void 0===a?_:a,l=function(e,o,r){return r.startsWith(n)&&r.endsWith(n)&&r.replaceAll(n,\"\").length>0?\".\".concat(t):e},u=c.slice();u.push(function(e){e.type===d.RULESET&&e.value.includes(\"&\")&&(e.props[0]=e.props[0].replace(je,n).replace(o,l))}),i.prefix&&u.push(d.prefixer),u.push(d.stringify);var p=function(e,r,s,a){void 0===r&&(r=\"\"),void 0===s&&(s=\"\"),void 0===a&&(a=\"&\"),t=a,n=r,o=new RegExp(\"\\\\\".concat(n,\"\\\\b\"),\"g\");var c=e.replace(xe,\"\"),l=d.compile(s||r?\"\".concat(s,\" \").concat(r,\" { \").concat(c,\" }\"):c);i.namespace&&(l=Ve(l,i.namespace));var p=[];return d.serialize(l,d.middleware(u.concat(d.rulesheet(function(e){return p.push(e)})))),p};return p.hash=c.length?c.reduce(function(e,t){return t.name||he(15),z(e,t.name)},F).toString():\"\",p}var ze=new ke,Me=Fe(),$e=o.createContext({shouldForwardProp:void 0,styleSheet:ze,stylis:Me}),Be=$e.Consumer,Ge=o.createContext(void 0);function Le(){return c($e)}function Ye(e){var t=s(e.stylisPlugins),n=t[0],r=t[1],c=Le().styleSheet,l=i(function(){var t=c;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t},[e.disableCSSOMInjection,e.sheet,e.target,c]),u=i(function(){return Fe({options:{namespace:e.namespace,prefix:e.enableVendorPrefixes},plugins:n})},[e.enableVendorPrefixes,e.namespace,n]);a(function(){p(n,e.stylisPlugins)||r(e.stylisPlugins)},[e.stylisPlugins]);var d=i(function(){return{shouldForwardProp:e.shouldForwardProp,styleSheet:l,stylis:u}},[e.shouldForwardProp,l,u]);return o.createElement($e.Provider,{value:d},o.createElement(Ge.Provider,{value:u},e.children))}var qe=function(){function e(e,t){var n=this;this.inject=function(e,t){void 0===t&&(t=Me);var o=n.name+t.hash;e.hasNameForId(n.id,o)||e.insertRules(n.id,o,t(n.rules,o,\"@keyframes\"))},this.name=e,this.id=\"sc-keyframes-\".concat(e),this.rules=t,ue(this,function(){throw he(12,String(n.name))})}return e.prototype.getName=function(e){return void 0===e&&(e=Me),this.name+e.hash},e}(),We=function(e){return e>=\"A\"&&e<=\"Z\"};function He(e){for(var t=\"\",n=0;n<e.length;n++){var o=e[n];if(1===n&&\"-\"===o&&\"-\"===e[0])return e;We(o)?t+=\"-\"+o.toLowerCase():t+=o}return t.startsWith(\"ms-\")?\"-\"+t:t}var Ue=function(e){return null==e||!1===e||\"\"===e},Je=function(t){var n,o,r=[];for(var s in t){var i=t[s];t.hasOwnProperty(s)&&!Ue(i)&&(Array.isArray(i)&&i.isCss||re(i)?r.push(\"\".concat(He(s),\":\"),i,\";\"):ce(i)?r.push.apply(r,e(e([\"\".concat(s,\" {\")],Je(i),!1),[\"}\"],!1)):r.push(\"\".concat(He(s),\": \").concat((n=s,null==(o=i)||\"boolean\"==typeof o||\"\"===o?\"\":\"number\"!=typeof o||0===o||n in h||n.startsWith(\"--\")?String(o).trim():\"\".concat(o,\"px\")),\";\")))}return r};function Xe(e,t,n,o){if(Ue(e))return[];if(se(e))return[\".\".concat(e.styledComponentId)];if(re(e)){if(!re(s=e)||s.prototype&&s.prototype.isReactComponent||!t)return[e];var r=e(t);return\"production\"===process.env.NODE_ENV||\"object\"!=typeof r||Array.isArray(r)||r instanceof qe||ce(r)||null===r||console.error(\"\".concat(B(e),\" is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\")),Xe(r,t,n,o)}var s;return e instanceof qe?n?(e.inject(n,o),[e.getName(o)]):[e]:ce(e)?Je(e):Array.isArray(e)?Array.prototype.concat.apply(_,e.map(function(e){return Xe(e,t,n,o)})):[e.toString()]}function Ze(e){for(var t=0;t<e.length;t+=1){var n=e[t];if(re(n)&&!se(n))return!1}return!0}var Ke=M(v),Qe=function(){function e(e,t,n){this.rules=e,this.staticRulesId=\"\",this.isStatic=\"production\"===process.env.NODE_ENV&&(void 0===n||n.isStatic)&&Ze(e),this.componentId=t,this.baseHash=z(Ke,t),this.baseStyle=n,ke.registerId(t)}return e.prototype.generateAndInjectStyles=function(e,t,n){var o=this.baseStyle?this.baseStyle.generateAndInjectStyles(e,t,n):\"\";if(this.isStatic&&!n.hash)if(this.staticRulesId&&t.hasNameForId(this.componentId,this.staticRulesId))o=ie(o,this.staticRulesId);else{var r=ae(Xe(this.rules,e,t,n)),s=x(z(this.baseHash,r)>>>0);if(!t.hasNameForId(this.componentId,s)){var i=n(r,\".\".concat(s),void 0,this.componentId);t.insertRules(this.componentId,s,i)}o=ie(o,s),this.staticRulesId=s}else{for(var a=z(this.baseHash,n.hash),c=\"\",l=0;l<this.rules.length;l++){var u=this.rules[l];if(\"string\"==typeof u)c+=u,\"production\"!==process.env.NODE_ENV&&(a=z(a,u));else if(u){var p=ae(Xe(u,e,t,n));a=z(a,p+l),c+=p}}if(c){var d=x(a>>>0);t.hasNameForId(this.componentId,d)||t.insertRules(this.componentId,d,n(c,\".\".concat(d),void 0,this.componentId)),o=ie(o,d)}}return o},e}(),et=o.createContext(void 0),tt=et.Consumer;function nt(){var e=c(et);if(!e)throw he(18);return e}function ot(e){var n=o.useContext(et),r=i(function(){return function(e,n){if(!e)throw he(14);if(re(e)){var o=e(n);if(\"production\"!==process.env.NODE_ENV&&(null===o||Array.isArray(o)||\"object\"!=typeof o))throw he(7);return o}if(Array.isArray(e)||\"object\"!=typeof e)throw he(8);return n?t(t({},n),e):e}(e.theme,n)},[e.theme,n]);return e.children?o.createElement(et.Provider,{value:r},e.children):null}var rt={},st=new Set;function it(e,r,s){var i=se(e),a=e,c=!G(e),p=r.attrs,d=void 0===p?_:p,h=r.componentId,f=void 0===h?function(e,t){var n=\"string\"!=typeof e?\"sc\":R(e);rt[n]=(rt[n]||0)+1;var o=\"\".concat(n,\"-\").concat($(v+n+rt[n]));return t?\"\".concat(t,\"-\").concat(o):o}(r.displayName,r.parentComponentId):h,m=r.displayName,y=void 0===m?function(e){return G(e)?\"styled.\".concat(e):\"Styled(\".concat(B(e),\")\")}(e):m,g=r.displayName&&r.componentId?\"\".concat(R(r.displayName),\"-\").concat(r.componentId):r.componentId||f,S=i&&a.attrs?a.attrs.concat(d).filter(Boolean):d,w=r.shouldForwardProp;if(i&&a.shouldForwardProp){var b=a.shouldForwardProp;if(r.shouldForwardProp){var E=r.shouldForwardProp;w=function(e,t){return b(e,t)&&E(e,t)}}else w=b}var N=new Qe(s,g,i?a.componentStyle:void 0);function O(e,r){return function(e,r,s){var i=e.attrs,a=e.componentStyle,c=e.defaultProps,p=e.foldedComponentIds,d=e.styledComponentId,h=e.target,f=o.useContext(et),m=Le(),y=e.shouldForwardProp||m.shouldForwardProp;\"production\"!==process.env.NODE_ENV&&l(d);var v=I(r,f,c)||C,g=function(e,n,o){for(var r,s=t(t({},n),{className:void 0,theme:o}),i=0;i<e.length;i+=1){var a=re(r=e[i])?r(s):r;for(var c in a)s[c]=\"className\"===c?ie(s[c],a[c]):\"style\"===c?t(t({},s[c]),a[c]):a[c]}return n.className&&(s.className=ie(s.className,n.className)),s}(i,r,v),S=g.as||h,w={};for(var b in g)void 0===g[b]||\"$\"===b[0]||\"as\"===b||\"theme\"===b&&g.theme===v||(\"forwardedAs\"===b?w.as=g.forwardedAs:y&&!y(b,S)||(w[b]=g[b],y||\"development\"!==process.env.NODE_ENV||n(b)||st.has(b)||!A.has(S)||(st.add(b),console.warn('styled-components: it looks like an unknown prop \"'.concat(b,'\" is being sent through to the DOM, which will likely trigger a React console error. If you would like automatic filtering of unknown props, you can opt-into that behavior via `<StyleSheetManager shouldForwardProp={...}>` (connect an API like `@emotion/is-prop-valid`) or consider using transient props (`$` prefix for automatic filtering.)')))));var E=function(e,t){var n=Le(),o=e.generateAndInjectStyles(t,n.styleSheet,n.stylis);return\"production\"!==process.env.NODE_ENV&&l(o),o}(a,g);\"production\"!==process.env.NODE_ENV&&e.warnTooManyClasses&&e.warnTooManyClasses(E);var N=ie(p,d);return E&&(N+=\" \"+E),g.className&&(N+=\" \"+g.className),w[G(S)&&!A.has(S)?\"class\":\"className\"]=N,s&&(w.ref=s),u(S,w)}(D,e,r)}O.displayName=y;var D=o.forwardRef(O);return D.attrs=S,D.componentStyle=N,D.displayName=y,D.shouldForwardProp=w,D.foldedComponentIds=i?ie(a.foldedComponentIds,a.styledComponentId):\"\",D.styledComponentId=g,D.target=i?a.target:e,Object.defineProperty(D,\"defaultProps\",{get:function(){return this._foldedDefaultProps},set:function(e){this._foldedDefaultProps=i?function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var o=0,r=t;o<r.length;o++)le(e,r[o],!0);return e}({},a.defaultProps,e):e}}),\"production\"!==process.env.NODE_ENV&&(P(y,g),D.warnTooManyClasses=function(e,t){var n={},o=!1;return function(r){if(!o&&(n[r]=!0,Object.keys(n).length>=200)){var s=t?' with the id of \"'.concat(t,'\"'):\"\";console.warn(\"Over \".concat(200,\" classes were generated for component \").concat(e).concat(s,\".\\n\")+\"Consider using the attrs method, together with a style object for frequently changed styles.\\nExample:\\n const Component = styled.div.attrs(props => ({\\n style: {\\n background: props.background,\\n },\\n }))`width: 100%;`\\n\\n <Component />\"),o=!0,n={}}}}(y,g)),ue(D,function(){return\".\".concat(D.styledComponentId)}),c&&oe(D,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0}),D}function at(e,t){for(var n=[e[0]],o=0,r=t.length;o<r;o+=1)n.push(t[o],e[o+1]);return n}var ct=function(e){return Object.assign(e,{isCss:!0})};function lt(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];if(re(t)||ce(t))return ct(Xe(at(_,e([t],n,!0))));var r=t;return 0===n.length&&1===r.length&&\"string\"==typeof r[0]?Xe(r):ct(Xe(at(r,n)))}function ut(n,o,r){if(void 0===r&&(r=C),!o)throw he(1,o);var s=function(t){for(var s=[],i=1;i<arguments.length;i++)s[i-1]=arguments[i];return n(o,r,lt.apply(void 0,e([t],s,!1)))};return s.attrs=function(e){return ut(n,o,t(t({},r),{attrs:Array.prototype.concat(r.attrs,e).filter(Boolean)}))},s.withConfig=function(e){return ut(n,o,t(t({},r),e))},s}var pt=function(e){return ut(it,e)},dt=pt;A.forEach(function(e){dt[e]=pt(e)});var ht=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Ze(e),ke.registerId(this.componentId+1)}return e.prototype.createStyles=function(e,t,n,o){var r=o(ae(Xe(this.rules,t,n,o)),\"\"),s=this.componentId+e;n.insertRules(s,s,r)},e.prototype.removeStyles=function(e,t){t.clearRules(this.componentId+e)},e.prototype.renderStyles=function(e,t,n,o){e>2&&ke.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,o)},e}();function ft(n){for(var r=[],s=1;s<arguments.length;s++)r[s-1]=arguments[s];var i=lt.apply(void 0,e([n],r,!1)),a=\"sc-global-\".concat($(JSON.stringify(i))),c=new ht(i,a);\"production\"!==process.env.NODE_ENV&&P(a);var l=function(e){var n=Le(),r=o.useContext(et),s=o.useRef(n.styleSheet.allocateGSInstance(a)).current;return\"production\"!==process.env.NODE_ENV&&o.Children.count(e.children)&&console.warn(\"The global style component \".concat(a,\" was given child JSX. createGlobalStyle does not render children.\")),\"production\"!==process.env.NODE_ENV&&i.some(function(e){return\"string\"==typeof e&&-1!==e.indexOf(\"@import\")})&&console.warn(\"Please do not use @import CSS syntax in createGlobalStyle at this time, as the CSSOM APIs we use in production do not handle it well. Instead, we recommend using a library such as react-helmet to inject a typical <link> meta tag to the stylesheet, or simply embedding it manually in your index.html <head> section for a simpler app.\"),n.styleSheet.server&&function(e,n,o,r,s){if(c.isStatic)c.renderStyles(e,b,o,s);else{var i=t(t({},n),{theme:I(n,r,l.defaultProps)});c.renderStyles(e,i,o,s)}}(s,e,n.styleSheet,r,n.stylis),null};return o.memo(l)}function mt(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.\");var r=ae(lt.apply(void 0,e([t],n,!1))),s=$(r);return new qe(s,r)}function yt(e){var n=o.forwardRef(function(n,r){var s=I(n,o.useContext(et),e.defaultProps);return\"production\"!==process.env.NODE_ENV&&void 0===s&&console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class \"'.concat(B(e),'\"')),o.createElement(e,t({},n,{theme:s,ref:r}))});return n.displayName=\"WithTheme(\".concat(B(e),\")\"),oe(n,e)}var vt=/^\\s*<\\/[a-z]/i,gt=function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString();if(!t)return\"\";var n=Ce(),o=ae([n&&'nonce=\"'.concat(n,'\"'),\"\".concat(f,'=\"true\"'),\"\".concat(y,'=\"').concat(v,'\"')].filter(Boolean),\" \");return\"<style \".concat(o,\">\").concat(t,\"</style>\")},this.getStyleTags=function(){if(e.sealed)throw he(2);return e._emitSheetCSS()},this.getStyleElement=function(){var n;if(e.sealed)throw he(2);var r=e.instance.toString();if(!r)return[];var s=((n={})[f]=\"\",n[y]=v,n.dangerouslySetInnerHTML={__html:r},n),i=Ce();return i&&(s.nonce=i),[o.createElement(\"style\",t({},s,{key:\"sc-0-0\"}))]},this.seal=function(){e.sealed=!0},this.instance=new ke({isServer:!0}),this.sealed=!1}return e.prototype.collectStyles=function(e){if(this.sealed)throw he(2);return o.createElement(Ye,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){if(S)throw he(3);if(this.sealed)throw he(2);this.seal();var t=require(\"stream\").Transform,n=e,o=this.instance,r=this._emitSheetCSS,s=new t({transform:function(e,t,n){var s=e.toString(),i=r();if(o.clearTag(),vt.test(s)){var a=s.indexOf(\">\")+1,c=s.slice(0,a),l=s.slice(a);this.push(c+i+l)}else this.push(i+s);n()}});return n.on(\"error\",function(e){s.emit(\"error\",e)}),n.pipe(s)},e}(),St={StyleSheet:ke,mainSheet:ze};\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"It looks like you've imported 'styled-components' on React Native.\\nPerhaps you're looking to import 'styled-components/native'?\\nRead more about this at https://www.styled-components.com/docs/basics#react-native\");var wt=\"__sc-\".concat(f,\"__\");\"production\"!==process.env.NODE_ENV&&\"test\"!==process.env.NODE_ENV&&\"undefined\"!=typeof window&&(window[wt]||(window[wt]=0),1===window[wt]&&console.warn(\"It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles to not render properly, errors during the rehydration process, a missing theme prop, and makes your application bigger without good reason.\\n\\nSee https://s-c.sh/2BAXzed for more info.\"),window[wt]+=1);export{gt as ServerStyleSheet,Be as StyleSheetConsumer,$e as StyleSheetContext,Ye as StyleSheetManager,tt as ThemeConsumer,et as ThemeContext,ot as ThemeProvider,St as __PRIVATE__,ft as createGlobalStyle,lt as css,dt as default,se as isStyledComponent,mt as keyframes,dt as styled,nt as useTheme,v as version,yt as withTheme};\n//# sourceMappingURL=styled-components.esm.js.map\n","import { useCallback } from 'react';\nimport { Button, Flex, Switch, Box, Text } from '@sanity/ui';\nimport styled from 'styled-components';\nimport { TranslationLocale } from '../../types';\n\nconst WrapText = styled(Box)`\n white-space: normal;\n`;\n\ntype LocaleCheckboxProps = {\n locale: TranslationLocale;\n toggle: (locale: string, shouldEnable: boolean) => void;\n checked: boolean;\n};\n\nexport const LocaleCheckbox = ({\n locale,\n toggle,\n checked,\n}: LocaleCheckboxProps) => {\n const onClick = useCallback(\n () => toggle(locale.localeId, !checked),\n [locale.localeId, toggle, checked]\n );\n\n return (\n <Button\n mode='ghost'\n onClick={onClick}\n style={{ cursor: 'pointer' }}\n radius={2}\n >\n <Flex align='center' gap={3}>\n <Switch\n style={{ pointerEvents: 'none' }}\n onChange={onClick}\n checked={checked}\n />\n <WrapText>\n <Text size={1} weight='semibold'>\n {locale.description}\n </Text>\n </WrapText>\n </Flex>\n </Button>\n );\n};\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\n/**\n * Add cleanup function to cancel async tasks\n */\n\nimport { useMemo, useState, useCallback, useEffect } from 'react';\nimport {\n Stack,\n Text,\n Card,\n Button,\n Grid,\n Box,\n Flex,\n Switch,\n Tooltip,\n useToast,\n} from '@sanity/ui';\nimport { pluginConfig } from '../../adapter/core';\nimport { useTranslations } from '../TranslationsProvider';\nimport { LanguageStatus } from '../shared/LanguageStatus';\nimport { LocaleCheckbox } from '../shared/LocaleCheckbox';\nimport { DownloadIcon, LinkIcon, PublishIcon } from '@sanity/icons';\nimport {\n createTranslationStatusKey,\n getDocumentPublishedId,\n} from '../../utils/documentIds';\n\nexport const TranslationView = () => {\n const {\n documents,\n locales,\n translationStatuses,\n branchId,\n isBusy,\n handleTranslateAll,\n handleImportDocument,\n handleRefreshAll,\n isRefreshing,\n importedTranslations,\n setLocales,\n handlePatchDocumentReferences,\n handlePublishAllTranslations,\n autoRefresh,\n setAutoRefresh,\n autoImport,\n setAutoImport,\n autoPatchReferences,\n setAutoPatchReferences,\n autoPublish,\n setAutoPublish,\n } = useTranslations();\n\n const [isImporting, setIsImporting] = useState(false);\n const [isPublishing, setIsPublishing] = useState(false);\n\n const toast = useToast();\n\n // Get the single document (first document in single document mode)\n const document = documents[0];\n\n // Extract the current document's language from the language field\n const currentDocumentLanguage = useMemo(() => {\n if (!document) return null;\n\n // Get the language from the document's language field\n const languageField = pluginConfig.getLanguageField();\n const documentLanguage = document[languageField];\n\n // If no language field is set, assume it's the source language\n return documentLanguage || pluginConfig.getSourceLocale();\n }, [document]);\n\n // Only show translation components if we're on a source language document\n const shouldShowTranslationComponents = useMemo(() => {\n if (!currentDocumentLanguage) return false;\n return currentDocumentLanguage === pluginConfig.getSourceLocale();\n }, [currentDocumentLanguage]);\n\n // Get available locales (excluding source locale)\n const availableLocales = useMemo(() => {\n const sourceLocale = pluginConfig.getSourceLocale();\n return locales.filter(\n (locale) => locale.enabled !== false && locale.localeId !== sourceLocale\n );\n }, [locales]);\n\n // Get document ID for status tracking\n const documentId = useMemo(() => {\n if (!document) return null;\n return getDocumentPublishedId(document);\n }, [document]);\n\n // Unified import functionality\n const handleImportTranslations = useCallback(\n async (options: { autoOnly?: boolean } = {}) => {\n const { autoOnly = false } = options;\n\n // Check preconditions\n if (isImporting || !documentId) return;\n if (autoOnly && !autoImport) return;\n\n // Find translations ready to import\n const readyTranslations = availableLocales.filter((locale) => {\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n document._rev,\n locale.localeId\n );\n const status = translationStatuses.get(key);\n return status?.isReady && !importedTranslations.has(key);\n });\n\n if (readyTranslations.length === 0) return;\n\n setIsImporting(true);\n try {\n // Import all ready translations\n await Promise.all(\n readyTranslations.map((locale) =>\n handleImportDocument(documentId, document._rev, locale.localeId)\n )\n );\n\n // Auto patch document references if enabled\n if (autoPatchReferences) {\n await handlePatchDocumentReferences();\n }\n\n // Auto publish translations if enabled\n if (autoPublish) {\n await handlePublishAllTranslations();\n }\n } finally {\n setIsImporting(false);\n }\n },\n [\n autoImport,\n isImporting,\n documentId,\n availableLocales,\n translationStatuses,\n importedTranslations,\n handleImportDocument,\n autoPatchReferences,\n handlePatchDocumentReferences,\n autoPublish,\n handlePublishAllTranslations,\n toast,\n ]\n );\n\n // Check for completed translations on status updates (auto-import)\n useEffect(() => {\n handleImportTranslations({ autoOnly: true });\n }, [handleImportTranslations]);\n\n // Enable auto features on mount\n useEffect(() => {\n setAutoRefresh(true);\n setAutoPatchReferences(true);\n setAutoPublish(true);\n }, [setAutoRefresh, setAutoPatchReferences, setAutoPublish]);\n\n // Locale toggle functionality\n const toggleLocale = useCallback(\n (localeId: string, shouldEnable: boolean) => {\n const updatedLocales = locales.map((locale) =>\n locale.localeId === localeId\n ? { ...locale, enabled: shouldEnable }\n : locale\n );\n setLocales(updatedLocales);\n },\n [locales, setLocales]\n );\n\n const toggleAllLocales = useCallback(() => {\n const sourceLocale = pluginConfig.getSourceLocale();\n const nonSourceLocales = locales.filter(\n (locale) => locale.localeId !== sourceLocale\n );\n const allEnabled = nonSourceLocales.every(\n (locale) => locale.enabled === true || locale.enabled === undefined\n );\n\n const updatedLocales = locales.map((locale) =>\n locale.localeId === sourceLocale\n ? locale // Don't change source locale\n : { ...locale, enabled: !allEnabled }\n );\n setLocales(updatedLocales);\n }, [locales, setLocales]);\n\n // Show message if we're not on a source language document\n if (!shouldShowTranslationComponents) {\n return (\n <Card padding={4} tone='neutral' border>\n <Text size={1} muted>\n Translation tools are only available for{' '}\n <code>{pluginConfig.getSourceLocale()}</code> documents.\n </Text>\n </Card>\n );\n }\n\n return (\n <Stack space={6} padding={4}>\n {/* Generate Translations Section */}\n <Stack space={4}>\n <Text as='h2' weight='semibold' size={2}>\n Generate Translations\n </Text>\n\n {/* Locale Selection */}\n <Stack space={3}>\n <Flex align='center' justify='space-between'>\n <Text weight='semibold' size={1}>\n {availableLocales.length === 1\n ? 'Select locale'\n : 'Select locales'}\n </Text>\n <Button\n fontSize={1}\n padding={2}\n text='Toggle All'\n onClick={toggleAllLocales}\n />\n </Flex>\n\n <Grid columns={[1, 1, 2, 3]} gap={1}>\n {locales\n .filter(\n (locale) => locale.localeId !== pluginConfig.getSourceLocale()\n )\n .map((locale) => (\n <LocaleCheckbox\n key={locale.localeId}\n locale={locale}\n toggle={toggleLocale}\n checked={\n locale.enabled === true || locale.enabled === undefined\n }\n />\n ))}\n </Grid>\n </Stack>\n\n <Button\n onClick={() => {\n setAutoImport(true);\n handleTranslateAll();\n }}\n disabled={isBusy || !availableLocales.length}\n tone='positive'\n text={isBusy ? 'Creating translations...' : 'Generate Translations'}\n />\n </Stack>\n\n {/* Translation Status Section */}\n {documentId && availableLocales.length > 0 && (\n <Stack space={4}>\n <Flex align='center' justify='space-between'>\n <Text as='h2' weight='semibold' size={2}>\n Translation Status\n </Text>\n <Flex gap={3} align='center'>\n <Flex gap={2} align='center'>\n <Text size={1}>Auto-refresh</Text>\n <Switch\n checked={autoRefresh}\n onChange={() => setAutoRefresh(!autoRefresh)}\n />\n </Flex>\n <Button\n fontSize={1}\n padding={2}\n text='Refresh Status'\n onClick={handleRefreshAll}\n disabled={isRefreshing || isBusy}\n />\n </Flex>\n </Flex>\n\n <Box>\n {availableLocales.map((locale) => {\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n document._rev,\n locale.localeId\n );\n const status = translationStatuses.get(key);\n const progress = status?.progress || 0;\n const isImported = importedTranslations.has(key);\n\n return (\n <LanguageStatus\n key={key}\n title={locale.description}\n progress={progress}\n isImported={isImported}\n importFile={async () => {\n if (!isImported && status?.isReady) {\n await handleImportDocument(\n documentId,\n document._rev,\n locale.localeId\n );\n }\n }}\n />\n );\n })}\n </Box>\n\n {/* Import Controls */}\n <Stack space={3}>\n <Flex gap={3} align='center' justify='space-between'>\n <Flex gap={2} align='center'>\n <Button\n mode='ghost'\n tone='primary'\n onClick={() => handleImportTranslations()}\n text={isImporting ? 'Importing...' : 'Import All'}\n icon={DownloadIcon}\n disabled={\n isImporting ||\n availableLocales.every((locale) => {\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n document._rev,\n locale.localeId\n );\n const status = translationStatuses.get(key);\n return !status?.isReady || importedTranslations.has(key);\n })\n }\n style={{ minWidth: '180px' }}\n />\n <Flex gap={2} align='center'>\n <Switch\n checked={autoImport}\n onChange={() => setAutoImport(!autoImport)}\n disabled={isImporting}\n />\n <Text size={1}>Auto-import when complete</Text>\n </Flex>\n </Flex>\n <Text size={1} muted>\n Imported{' '}\n {\n availableLocales.filter((locale) => {\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n document._rev,\n locale.localeId\n );\n return importedTranslations.has(key);\n }).length\n }\n /\n {\n availableLocales.filter((locale) => {\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n document._rev,\n locale.localeId\n );\n const status = translationStatuses.get(key);\n return status?.isReady;\n }).length\n }\n </Text>\n </Flex>\n\n <Flex gap={2} align='center' justify='flex-start'>\n <Tooltip\n placement='top'\n content={`Replaces references to ${pluginConfig.getSourceLocale()} documents in this document with the corresponding translated document reference`}\n >\n <Button\n mode='ghost'\n tone='caution'\n onClick={async () => {\n await handlePatchDocumentReferences();\n }}\n text={isBusy ? 'Patching...' : 'Patch References'}\n icon={isBusy ? null : LinkIcon}\n disabled={isBusy || isImporting}\n style={{ minWidth: '180px' }}\n />\n </Tooltip>\n <Flex gap={2} align='center'>\n <Switch\n checked={autoPatchReferences}\n onChange={() => setAutoPatchReferences(!autoPatchReferences)}\n disabled={isImporting || isBusy}\n />\n <Text size={1}>Auto-patch after import</Text>\n </Flex>\n </Flex>\n\n <Flex gap={2} align='center' justify='flex-start'>\n <Tooltip\n placement='top'\n content='Publishes all translations (if the source document is published)'\n >\n <Button\n mode='ghost'\n tone='positive'\n onClick={async () => {\n setIsPublishing(true);\n try {\n await handlePublishAllTranslations();\n } finally {\n setIsPublishing(false);\n }\n }}\n text={isPublishing ? 'Publishing...' : 'Publish Translations'}\n icon={isPublishing ? null : PublishIcon}\n disabled={isBusy || isPublishing || isImporting}\n style={{ minWidth: '180px' }}\n />\n </Tooltip>\n <Flex gap={2} align='center'>\n <Switch\n checked={autoPublish}\n onChange={() => setAutoPublish(!autoPublish)}\n disabled={isPublishing || isImporting || isBusy}\n />\n <Text size={1}>Auto-publish after import</Text>\n </Flex>\n </Flex>\n </Stack>\n </Stack>\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { SanityDocument } from 'sanity';\nimport { BaseTranslationWrapper } from '../shared/BaseTranslationWrapper';\nimport { TranslationsProvider } from '../TranslationsProvider';\nimport { TranslationView } from './TranslationView';\n\ntype TranslationTabProps = {\n document: {\n displayed: SanityDocument;\n };\n};\n\nconst TranslationTab = (props: TranslationTabProps) => {\n const { displayed } = props.document;\n\n return (\n <BaseTranslationWrapper showContainer={false}>\n <TranslationsProvider singleDocument={displayed}>\n <TranslationView />\n </TranslationsProvider>\n </BaseTranslationWrapper>\n );\n};\n\nexport default TranslationTab;\n","import React, { useState } from 'react';\nimport { DocumentActionComponent } from 'sanity';\nimport { TranslateIcon } from '@sanity/icons';\nimport { BaseTranslationWrapper } from '../components/shared/BaseTranslationWrapper';\nimport { TranslationsProvider } from '../components/TranslationsProvider';\nimport { TranslationView } from '../components/tab/TranslationView';\n\nexport const translateAction: DocumentActionComponent = (props) => {\n const [dialogOpen, setDialogOpen] = useState(false);\n const document = props.draft || props.published;\n\n return {\n label: 'Translate',\n icon: TranslateIcon,\n tone: 'primary',\n onHandle: () => setDialogOpen(true),\n dialog: dialogOpen\n ? {\n type: 'dialog' as const,\n header: 'Translations',\n onClose: () => setDialogOpen(false),\n content: (\n <BaseTranslationWrapper showContainer={false}>\n <TranslationsProvider singleDocument={document}>\n <TranslationView />\n </TranslationsProvider>\n </BaseTranslationWrapper>\n ),\n }\n : null,\n };\n};\n","import React from 'react';\nimport { Box, Card, Stack, Text, Flex, Spinner } from '@sanity/ui';\nimport { LanguageStatus } from '../shared/LanguageStatus';\nimport { useTranslations } from '../TranslationsProvider';\nimport {\n createTranslationStatusKey,\n getDocumentPublishedId,\n} from '../../utils/documentIds';\n\nexport const TranslationsTable: React.FC = () => {\n const {\n documents,\n locales,\n loadingDocuments,\n translationStatuses,\n downloadStatus,\n importedTranslations,\n handleImportDocument,\n branchId,\n } = useTranslations();\n\n if (loadingDocuments) {\n return (\n <Flex align='center' justify='center' padding={4}>\n <Spinner />\n </Flex>\n );\n }\n\n return (\n <Box style={{ maxHeight: '60vh', overflowY: 'auto' }}>\n <Stack space={2}>\n {documents.map((document) => (\n <Card key={document._id} shadow={1} padding={3}>\n <Stack space={3}>\n <Flex justify='space-between' align='flex-start'>\n <Box flex={1}>\n <Text weight='semibold' size={1}>\n {getDocumentPublishedId(document)}\n </Text>\n <Text size={0} muted style={{ marginTop: '2px' }}>\n {document._type}\n </Text>\n </Box>\n </Flex>\n\n <Stack space={2}>\n {locales.length > 0 ? (\n locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => {\n const documentId = getDocumentPublishedId(document);\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n document._rev,\n locale.localeId\n );\n const status = translationStatuses.get(key);\n const isDownloaded = downloadStatus.downloaded.has(key);\n const isImported = importedTranslations.has(key);\n\n return (\n <LanguageStatus\n key={`${document._id}-${document._rev}-${locale.localeId}`}\n title={locale.description || locale.localeId}\n progress={status?.progress || 0}\n isImported={isImported || isDownloaded}\n importFile={async () => {\n await handleImportDocument(\n documentId,\n document._rev,\n locale.localeId\n );\n }}\n />\n );\n })\n ) : (\n <Text size={1} muted>\n No locales configured\n </Text>\n )}\n </Stack>\n </Stack>\n </Card>\n ))}\n </Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Box, Button, Dialog, Flex, Stack, Text } from '@sanity/ui';\nimport { useTranslations } from '../TranslationsProvider';\n\ninterface TranslateAllDialogProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const TranslateAllDialog: React.FC<TranslateAllDialogProps> = ({\n isOpen,\n onClose,\n}) => {\n const { documents, handleTranslateAll } = useTranslations();\n\n const handleConfirm = async () => {\n onClose();\n await handleTranslateAll();\n };\n\n if (!isOpen) return null;\n\n return (\n <Dialog\n header='Confirm Translation'\n id='translate-all-dialog'\n onClose={onClose}\n footer={\n <Box padding={3}>\n <Flex gap={2}>\n <Button text='Cancel' mode='ghost' onClick={onClose} />\n <Button\n text='Translate All'\n tone='critical'\n onClick={handleConfirm}\n />\n </Flex>\n </Box>\n }\n >\n <Box padding={4}>\n <Stack space={3}>\n <Text>\n Are you sure you want to create translations for all{' '}\n {documents.length} documents?\n </Text>\n <Text size={1} muted>\n This will submit all documents to General Translation for\n processing.\n </Text>\n </Stack>\n </Box>\n </Dialog>\n );\n};\n","import React from 'react';\nimport { Box, Button, Dialog, Flex, Stack, Text } from '@sanity/ui';\nimport { useTranslations } from '../TranslationsProvider';\n\ninterface ImportAllDialogProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const ImportAllDialog: React.FC<ImportAllDialogProps> = ({\n isOpen,\n onClose,\n}) => {\n const { documents, handleImportAll } = useTranslations();\n\n const handleConfirm = async () => {\n onClose();\n await handleImportAll();\n };\n\n if (!isOpen) return null;\n\n return (\n <Dialog\n header='Confirm Import'\n id='import-all-dialog'\n onClose={onClose}\n footer={\n <Box padding={3}>\n <Flex gap={2}>\n <Button text='Cancel' mode='ghost' onClick={onClose} />\n <Button text='Import All' tone='critical' onClick={handleConfirm} />\n </Flex>\n </Box>\n }\n >\n <Box padding={4}>\n <Stack space={3}>\n <Text>\n Are you sure you want to import translations for all{' '}\n {documents.length} documents?\n </Text>\n <Text size={1} muted>\n This will download and apply translated content to your documents.\n Note that this will overwrite any existing translations!\n </Text>\n </Stack>\n </Box>\n </Dialog>\n );\n};\n","import React from 'react';\nimport { Box, Button, Dialog, Flex, Stack, Text } from '@sanity/ui';\nimport { useTranslations } from '../TranslationsProvider';\n\ninterface ImportMissingDialogProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const ImportMissingDialog: React.FC<ImportMissingDialogProps> = ({\n isOpen,\n onClose,\n}) => {\n const { handleImportMissing } = useTranslations();\n\n const handleConfirm = async () => {\n onClose();\n await handleImportMissing();\n };\n\n if (!isOpen) return null;\n\n return (\n <Dialog\n header='Confirm Import Missing'\n id='import-missing-dialog'\n onClose={onClose}\n footer={\n <Box padding={3}>\n <Flex gap={2}>\n <Button text='Cancel' mode='ghost' onClick={onClose} />\n <Button\n text='Import Missing'\n tone='primary'\n onClick={handleConfirm}\n />\n </Flex>\n </Box>\n }\n >\n <Box padding={4}>\n <Stack space={3}>\n <Text>\n Import only the missing translations (translations that are ready\n but haven't been imported to Sanity yet)?\n </Text>\n <Text size={1} muted>\n This will check existing translation metadata and only import\n translations that don't already exist in your dataset.\n </Text>\n </Stack>\n </Box>\n </Dialog>\n );\n};\n","import React from 'react';\nimport { Flex, Text, Spinner } from '@sanity/ui';\n\ninterface BatchProgressProps {\n isActive: boolean;\n current: number;\n total: number;\n operationName: string;\n}\n\nexport const BatchProgress: React.FC<BatchProgressProps> = ({\n isActive,\n current,\n total,\n operationName,\n}) => {\n if (!isActive) return null;\n\n return (\n <Flex justify='center' align='center' gap={3}>\n <Spinner size={1} />\n <Text size={1}>\n {operationName} {current} of {total}...\n </Text>\n </Flex>\n );\n};\n","import React, { useState } from 'react';\nimport {\n Box,\n Button,\n Container,\n Flex,\n Heading,\n Stack,\n Switch,\n Text,\n Tooltip,\n} from '@sanity/ui';\nimport {\n DownloadIcon,\n CheckmarkCircleIcon,\n LinkIcon,\n PublishIcon,\n} from '@sanity/icons';\nimport { Link } from 'sanity/router';\nimport { BaseTranslationWrapper } from '../shared/BaseTranslationWrapper';\nimport { TranslationsProvider, useTranslations } from '../TranslationsProvider';\nimport { TranslationsTable } from './TranslationsTable';\nimport { TranslateAllDialog } from './TranslateAllDialog';\nimport { ImportAllDialog } from './ImportAllDialog';\nimport { ImportMissingDialog } from './ImportMissingDialog';\nimport { BatchProgress } from './BatchProgress';\n\nconst TranslationsToolContent: React.FC = () => {\n const [isTranslateAllDialogOpen, setIsTranslateAllDialogOpen] =\n useState(false);\n const [isImportAllDialogOpen, setIsImportAllDialogOpen] = useState(false);\n const [isImportMissingDialogOpen, setIsImportMissingDialogOpen] =\n useState(false);\n\n const {\n isBusy,\n documents,\n locales,\n autoRefresh,\n loadingDocuments,\n importProgress,\n importedTranslations,\n isRefreshing,\n setAutoRefresh,\n handleRefreshAll,\n handlePatchDocumentReferences,\n handlePublishAllTranslations,\n } = useTranslations();\n\n // Track which specific operation is running\n const [currentOperation, setCurrentOperation] = useState<string | null>(null);\n\n const getOperationText = (\n operationName: string | null,\n isProcessing: boolean\n ) => {\n if (!isProcessing || !operationName) return operationName;\n\n switch (operationName) {\n case 'Translate All':\n return 'Translating...';\n case 'Import All':\n return 'Importing...';\n case 'Import Missing':\n return 'Importing...';\n case 'Patch Document References':\n return 'Patching...';\n case 'Publish Translations':\n return 'Publishing...';\n default:\n return 'Processing...';\n }\n };\n\n const getProgressOperationName = () => {\n switch (currentOperation) {\n case 'Import All':\n return 'Importing';\n case 'Import Missing':\n return 'Importing missing';\n case 'Patch Document References':\n return 'Patching';\n case 'Publish Translations':\n return 'Publishing';\n default:\n return 'Processing';\n }\n };\n\n // Reset current operation when operation completes\n React.useEffect(() => {\n if (!isBusy && !importProgress.isImporting) {\n setCurrentOperation(null);\n }\n }, [isBusy, importProgress.isImporting]);\n\n return (\n <Container width={2}>\n <Box padding={4} marginTop={5}>\n <Stack space={4}>\n <Flex align='center' justify='space-between'>\n <Stack space={2}>\n <Heading as='h2' size={3}>\n Translations\n </Heading>\n <Text size={2}>\n Manage your document translations from this centralized\n location.\n </Text>\n </Stack>\n\n <Flex gap={3} align='center'>\n <Flex gap={2} align='center'>\n <Text size={1}>Auto-refresh</Text>\n <Switch\n checked={autoRefresh}\n onChange={() => setAutoRefresh(!autoRefresh)}\n />\n </Flex>\n <Button\n fontSize={1}\n padding={2}\n text={isRefreshing ? 'Refreshing...' : 'Refresh Status'}\n onClick={handleRefreshAll}\n disabled={\n isRefreshing ||\n isBusy ||\n loadingDocuments ||\n documents.length === 0\n }\n />\n </Flex>\n </Flex>\n\n <Stack space={4}>\n <Box>\n <Text size={1} muted>\n {loadingDocuments\n ? 'Loading documents...'\n : `Found ${documents.length} documents available for translation`}\n </Text>\n </Box>\n\n <Flex justify='center'>\n <Button\n style={{ width: '200px' }}\n tone='critical'\n text={getOperationText(\n 'Translate All',\n isBusy && currentOperation === 'Translate All'\n )}\n onClick={() => {\n setCurrentOperation('Translate All');\n setIsTranslateAllDialogOpen(true);\n }}\n disabled={isBusy || loadingDocuments || documents.length === 0}\n />\n </Flex>\n\n <TranslationsTable />\n\n <Stack space={3}>\n <Flex gap={3} align='center' justify='space-between'>\n <Flex gap={2} align='center'>\n <Tooltip\n placement='top'\n content='Imports and overrides all translations'\n >\n <Button\n mode='ghost'\n onClick={() => {\n setCurrentOperation('Import All');\n setIsImportAllDialogOpen(true);\n }}\n text={getOperationText(\n 'Import All',\n isBusy && currentOperation === 'Import All'\n )}\n icon={\n isBusy && currentOperation === 'Import All'\n ? null\n : DownloadIcon\n }\n disabled={\n isBusy || loadingDocuments || documents.length === 0\n }\n />\n </Tooltip>\n <Tooltip\n placement='top'\n content=\"Imports all translations that are not yet imported (according to the source document's translation.metadata document)\"\n >\n <Button\n mode='ghost'\n tone='primary'\n onClick={() => {\n setCurrentOperation('Import Missing');\n setIsImportMissingDialogOpen(true);\n }}\n text={getOperationText(\n 'Import Missing',\n isBusy && currentOperation === 'Import Missing'\n )}\n icon={\n isBusy && currentOperation === 'Import Missing'\n ? null\n : DownloadIcon\n }\n disabled={\n isBusy || loadingDocuments || documents.length === 0\n }\n />\n </Tooltip>\n <Tooltip\n placement='top'\n content='Replaces references in documents with the corresponding translated document reference'\n >\n <Button\n mode='ghost'\n tone='caution'\n onClick={() => {\n setCurrentOperation('Patch Document References');\n handlePatchDocumentReferences();\n }}\n text={getOperationText(\n 'Patch Document References',\n isBusy &&\n currentOperation === 'Patch Document References'\n )}\n icon={\n isBusy &&\n currentOperation === 'Patch Document References'\n ? null\n : LinkIcon\n }\n disabled={\n isBusy || loadingDocuments || documents.length === 0\n }\n />\n </Tooltip>\n <Tooltip\n placement='top'\n content='Publishes all translations whose source document is published'\n >\n <Button\n mode='ghost'\n tone='positive'\n onClick={() => {\n setCurrentOperation('Publish Translations');\n handlePublishAllTranslations();\n }}\n text={getOperationText(\n 'Publish Translations',\n isBusy && currentOperation === 'Publish Translations'\n )}\n icon={\n isBusy && currentOperation === 'Publish Translations'\n ? null\n : PublishIcon\n }\n disabled={\n isBusy || loadingDocuments || documents.length === 0\n }\n />\n </Tooltip>\n {importedTranslations.size ===\n documents.length *\n locales.filter((l) => l.enabled !== false).length &&\n documents.length > 0 &&\n locales.length > 0 && (\n <Flex gap={2} align='center' style={{ color: 'green' }}>\n <CheckmarkCircleIcon />\n <Text size={1}>All translations imported</Text>\n </Flex>\n )}\n {importedTranslations.size > 0 &&\n importedTranslations.size <\n documents.length *\n locales.filter((l) => l.enabled !== false).length && (\n <Text size={1} style={{ color: '#666' }}>\n {importedTranslations.size}/\n {documents.length *\n locales.filter((l) => l.enabled !== false)\n .length}{' '}\n imported\n </Text>\n )}\n </Flex>\n <Box />\n </Flex>\n\n <BatchProgress\n isActive={importProgress.isImporting}\n current={importProgress.current}\n total={importProgress.total}\n operationName={getProgressOperationName()}\n />\n </Stack>\n </Stack>\n\n <Text size={2}>\n For more information, see the{' '}\n <Link href='https://dash.generaltranslation.com'>\n General Translation Dashboard\n </Link>\n .\n </Text>\n </Stack>\n </Box>\n\n <TranslateAllDialog\n isOpen={isTranslateAllDialogOpen}\n onClose={() => setIsTranslateAllDialogOpen(false)}\n />\n <ImportAllDialog\n isOpen={isImportAllDialogOpen}\n onClose={() => setIsImportAllDialogOpen(false)}\n />\n <ImportMissingDialog\n isOpen={isImportMissingDialogOpen}\n onClose={() => setIsImportMissingDialogOpen(false)}\n />\n </Container>\n );\n};\n\nconst TranslationsTool: React.FC = () => {\n return (\n <BaseTranslationWrapper showContainer={false}>\n <TranslationsProvider>\n <TranslationsToolContent />\n </TranslationsProvider>\n </BaseTranslationWrapper>\n );\n};\n\nexport default TranslationsTool;\n","export {\n documentInternationalization,\n useDocumentInternationalizationContext,\n DocumentInternationalizationMenu,\n useDeleteTranslationAction,\n useDuplicateWithTranslationsAction,\n} from './documentInternationalization';\nexport type {\n DocumentInternationalizationConfig,\n Language,\n Metadata,\n TranslationReference,\n} from './documentInternationalization';\n\nimport TranslationsTab from './components/tab/TranslationsTab';\nimport {\n Secrets,\n Adapter,\n ExportForTranslation,\n ImportTranslation,\n TranslationFunctionContext,\n TranslationsTabConfigOptions,\n} from './types';\nimport { findLatestDraft } from './configuration/utils/findLatestDraft';\nimport {\n BaseDocumentSerializer,\n BaseDocumentDeserializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n SerializedDocument,\n} from './serialization';\nimport { translateAction } from './actions/translateAction';\n\nexport type {\n Secrets,\n Adapter,\n ExportForTranslation,\n ImportTranslation,\n TranslationFunctionContext,\n TranslationsTabConfigOptions,\n SerializedDocument,\n};\nexport {\n TranslationsTab,\n translateAction,\n //helpers for end developers who may need to customize serialization\n findLatestDraft,\n BaseDocumentSerializer,\n BaseDocumentDeserializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n attachGTData,\n detachGTData,\n};\n\nimport { definePlugin } from 'sanity';\nimport { route } from 'sanity/router';\nimport { gt, pluginConfig } from './adapter/core';\nimport { libraryDefaultLocale } from 'generaltranslation/internal';\nimport { getLocaleProperties } from 'generaltranslation';\nimport type {\n DedupeFields,\n IgnoreFields,\n SkipFields,\n TranslateDocumentFilter,\n} from './adapter/types';\nimport TranslationsTool from './components/page/TranslationsTool';\nimport { SECRETS_NAMESPACE } from './utils/shared';\nimport type { PortableTextHtmlComponents } from '@portabletext/to-html';\nimport { attachGTData, detachGTData } from './serialization/data';\nimport { documentInternationalization } from './documentInternationalization';\nimport type { CustomDeserializers } from './serialization';\n\nexport type GTPluginConfig = Omit<\n Parameters<typeof gt.setConfig>[0],\n 'locales'\n> & {\n locales: string[];\n // Alias for sourceLocale — accepted so users can spread gt.config.json directly.\n defaultLocale?: string;\n singletons?: string[];\n // Optional mapping function to map source document ids to translated singleton document ids\n // By default, the translated singleton document is is `${sourceDocumentId}-${locale}`\n singletonMapping?: (sourceDocumentId: string, locale: string) => string;\n ignoreFields?: IgnoreFields[];\n dedupeFields?: DedupeFields[];\n skipFields?: SkipFields[];\n languageField?: string;\n translateDocuments?: TranslateDocumentFilter[] | string[];\n secretsNamespace?: string;\n additionalStopTypes?: string[];\n additionalSerializers?: Partial<PortableTextHtmlComponents>;\n additionalDeserializers?: CustomDeserializers;\n additionalBlockDeserializers?: unknown[];\n // When true (default), automatically adds the @sanity/document-internationalization plugin\n // with language badges, translation menu, and per-language templates.\n // Requires translateDocuments to specify which document types to enable translations for.\n showDocumentInternationalization?: boolean;\n};\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {gtPlugin} from 'gt-sanity'\n *\n * export default defineConfig({\n * // ...\n * plugins: [gtPlugin()],\n * })\n * ```\n */\nexport const gtPlugin = definePlugin<GTPluginConfig>(\n ({\n languageField = 'language',\n sourceLocale,\n defaultLocale,\n locales,\n customMapping,\n apiKey,\n projectId,\n singletons,\n singletonMapping,\n ignoreFields,\n dedupeFields,\n skipFields,\n translateDocuments,\n secretsNamespace = SECRETS_NAMESPACE,\n additionalStopTypes = [],\n additionalSerializers = {},\n additionalDeserializers = {},\n additionalBlockDeserializers = [],\n showDocumentInternationalization = true,\n }) => {\n // Resolve sourceLocale: explicit sourceLocale > defaultLocale (from gt.config.json) > library default\n const resolvedSourceLocale =\n sourceLocale ?? defaultLocale ?? libraryDefaultLocale;\n\n // Normalize translateDocuments: string[] → TranslateDocumentFilter[]\n let normalizedTranslateDocuments: TranslateDocumentFilter[] | undefined;\n if (translateDocuments) {\n normalizedTranslateDocuments = translateDocuments\n .map((entry) => (typeof entry === 'string' ? { type: entry } : entry))\n .filter((filter) => filter.documentId || filter.type);\n }\n\n pluginConfig.init(\n secretsNamespace,\n languageField,\n resolvedSourceLocale,\n locales,\n singletons || [],\n // singletons is a string array of singleton document ids\n singletonMapping ||\n ((sourceDocumentId, locale) => `${sourceDocumentId}-${locale}`),\n ignoreFields || [],\n dedupeFields || [],\n skipFields || [],\n normalizedTranslateDocuments || [],\n additionalStopTypes,\n additionalSerializers,\n additionalDeserializers,\n additionalBlockDeserializers\n );\n gt.setConfig({\n sourceLocale: resolvedSourceLocale,\n customMapping: customMapping,\n apiKey: apiKey,\n projectId: projectId,\n });\n\n // Auto-add document internationalization plugin\n const plugins = [];\n if (showDocumentInternationalization) {\n const schemaTypes =\n normalizedTranslateDocuments\n ?.map((filter) => filter.type)\n .filter((type): type is string => !!type) ?? [];\n if (schemaTypes.length > 0) {\n const allLocales = [resolvedSourceLocale, ...locales];\n const supportedLanguages = allLocales.map((locale) => {\n const props = getLocaleProperties(locale, resolvedSourceLocale);\n return { id: locale, title: props.name };\n });\n plugins.push(\n documentInternationalization({\n supportedLanguages,\n schemaTypes,\n languageField,\n })\n );\n }\n }\n\n return {\n name: 'gt-sanity',\n plugins,\n tools: [\n {\n name: 'translations',\n title: 'Translations',\n component: TranslationsTool,\n router: route.create('/*'),\n },\n ],\n document: {\n actions: (prev) => {\n return [...prev, translateAction];\n },\n },\n };\n }\n);\n"],"names":["useSanityClient","useState","useEffect","GT","libraryDefaultLocale","buildTheme","jsxs","Fragment","jsx","Flex","Spinner","Box","Card","Text","ThemeProvider","ToastProvider","isRecord","extractWithPath","match","arrayToJSONMatchPath","Schema","htmlToBlocks","node","next","META_FIELDS","toHTML","schema","f","deserializeDocument","document","JSONPath","JSONPointer","merge","createContext","useContext","useRef","useSchema","useToast","useCallback","filter","_","prev","branchId","existingTranslations","secrets","Label","Grid","CheckmarkCircleIcon","Button","DownloadIcon","from","length","position","character","characters","j","k","x","y","z","o","t","n","e","r","s","d.RULESET","d.prefixer","d.stringify","a","c","l","d.compile","p","d.serialize","d.middleware","d.rulesheet","h","m","g","S","w","E","N","O","i","d","v","b","u","D","styled","Switch","useMemo","Stack","Tooltip","LinkIcon","PublishIcon","TranslateIcon","Dialog","React","Container","Heading","Link","definePlugin","getLocaleProperties","documentInternationalization","route"],"mappings":"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","x_google_ignoreList":[38,39,40,41,42,43,44,45,46,47,48,49]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/hooks/useClient.ts","../src/hooks/useSecrets.ts","../src/utils/shared.ts","../src/adapter/core.ts","../src/components/shared/BaseTranslationWrapper.tsx","../src/serialization/BaseDocumentMerger.ts","../src/utils/documentIds.ts","../src/configuration/utils/findLatestDraft.ts","../src/configuration/utils/findDocumentAtRevision.ts","../src/utils/applyDocuments.ts","../src/utils/randomKey.ts","../src/configuration/baseDocumentLevelConfig/helpers/createI18nDocAndPatchMetadata.ts","../src/configuration/baseDocumentLevelConfig/helpers/getOrCreateTranslationMetadata.ts","../src/configuration/baseDocumentLevelConfig/helpers/patchI18nDoc.ts","../src/configuration/baseDocumentLevelConfig/documentLevelPatch.ts","../src/serialization/internationalizedArray/detect.ts","../src/serialization/internationalizedArray/merge.ts","../src/configuration/internationalizedArrayConfig/internationalizedArrayPatch.ts","../src/serialization/deserialize/helpers.ts","../src/serialization/data.ts","../src/serialization/BaseSerializationConfig.ts","../src/serialization/helpers.ts","../src/serialization/deserialize/BaseDocumentDeserializer.ts","../src/serialization/serialize/fieldFilters.ts","../src/serialization/serialize/index.ts","../src/serialization/internationalizedArray/collapse.ts","../src/utils/serialize.ts","../src/translation/strategy.ts","../src/translation/uploadFiles.ts","../src/translation/initProject.ts","../src/translation/createJobs.ts","../src/translation/downloadTranslations.ts","../src/translation/checkTranslationStatus.ts","../src/translation/importDocument.ts","../src/sanity-api/resolveRefs.ts","../src/sanity-api/findDocuments.ts","../src/utils/batchProcessor.ts","../src/utils/importUtils.ts","../src/sanity-api/publishDocuments.ts","../src/adapter/getLocales.ts","../src/components/TranslationsProvider.tsx","../src/components/shared/ProgressBar.tsx","../src/components/shared/LanguageStatus.tsx","../../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/@emotion+memoize@0.8.1/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../../node_modules/.pnpm/@emotion+is-prop-valid@1.2.2/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Enum.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Utility.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Tokenizer.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Parser.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Prefixer.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Serializer.js","../../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Middleware.js","../../../node_modules/.pnpm/@emotion+unitless@0.8.1/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../../../node_modules/.pnpm/styled-components@6.1.19_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/styled-components/dist/styled-components.esm.js","../src/components/shared/LocaleCheckbox.tsx","../src/components/tab/TranslationView.tsx","../src/actions/translateAction.tsx","../src/schema/InternationalizedArrayInput.tsx","../src/schema/createInternationalizedArrayTypes.ts","../src/components/page/TranslationsTable.tsx","../src/components/page/TranslateAllDialog.tsx","../src/components/page/ImportAllDialog.tsx","../src/components/page/ImportMissingDialog.tsx","../src/components/page/BatchProgress.tsx","../src/components/page/TranslationsTool.tsx","../src/components/tab/TranslationsTab.tsx","../src/index.ts"],"sourcesContent":["// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, useClient as useSanityClient } from 'sanity';\n\nexport const useClient = (): SanityClient => {\n return useSanityClient({ apiVersion: '2025-09-15' });\n};\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { useState, useEffect } from 'react';\nimport { SanityDocumentLike } from 'sanity';\nimport { useClient } from './useClient';\n\ninterface ReturnProps<T> {\n loading: boolean;\n secrets: T | null;\n}\nexport function useSecrets<T>(id: string): ReturnProps<T> {\n const [loading, setLoading] = useState<boolean>(true);\n const [secrets, setSecrets] = useState<T | null>(null);\n const client = useClient();\n\n useEffect(() => {\n function fetchData() {\n client\n .fetch('* [_id == $id][0]', { id })\n .then((doc: SanityDocumentLike) => {\n const result: Record<string, unknown> = {};\n for (const key in doc) {\n if (key[0] !== '_') {\n result[key] = doc[key];\n }\n }\n setSecrets(result as T);\n setLoading(false);\n });\n }\n fetchData();\n }, [id, client]);\n\n return { loading, secrets };\n}\n","export const SECRETS_NAMESPACE = 'generaltranslation.secrets';\n","import { GT } from 'generaltranslation';\nimport { libraryDefaultLocale } from 'generaltranslation/internal';\nimport type { Secrets } from '../types';\nimport type {\n TranslateDocumentFilter,\n DedupeFields,\n IgnoreFields,\n SkipFields,\n FieldLevelTranslationMode,\n} from './types';\nimport { SECRETS_NAMESPACE } from '../utils/shared';\nimport type { PortableTextHtmlComponents } from '@portabletext/to-html';\nimport type { CustomDeserializers } from '../serialization/types';\nexport const gt = new GT();\n\nexport function overrideConfig(secrets: Secrets | null) {\n gt.setConfig({\n ...(secrets?.project && { projectId: secrets?.project }),\n ...(secrets?.secret && { apiKey: secrets?.secret }),\n });\n}\n\nexport class GTConfig {\n secretsNamespace: string;\n languageField: string;\n sourceLocale: string;\n locales: string[];\n singletons: string[];\n singletonMapping: (sourceDocumentId: string, locale: string) => string;\n ignoreFields: IgnoreFields[];\n dedupeFields: DedupeFields[];\n skipFields: SkipFields[];\n translateDocuments: TranslateDocumentFilter[];\n additionalStopTypes: string[];\n additionalSerializers: Partial<PortableTextHtmlComponents>;\n additionalDeserializers: CustomDeserializers;\n additionalBlockDeserializers: unknown[];\n translationLevel: FieldLevelTranslationMode;\n fieldLevelDocuments: TranslateDocumentFilter[];\n fieldLevelTypePrefix: string;\n\n private static instance: GTConfig;\n constructor(\n secretsNamespace: string,\n languageField: string,\n sourceLocale: string,\n locales: string[],\n singletons: string[],\n singletonMapping: (sourceDocumentId: string, locale: string) => string,\n ignoreFields: IgnoreFields[],\n dedupeFields: DedupeFields[],\n skipFields: SkipFields[],\n translateDocuments: TranslateDocumentFilter[],\n additionalStopTypes: string[] = [],\n additionalSerializers: Partial<PortableTextHtmlComponents> = {},\n additionalDeserializers: CustomDeserializers = { types: {} },\n additionalBlockDeserializers: unknown[] = [],\n translationLevel: FieldLevelTranslationMode = 'document',\n fieldLevelDocuments: TranslateDocumentFilter[] = [],\n fieldLevelTypePrefix: string = 'internationalizedArray'\n ) {\n this.secretsNamespace = secretsNamespace;\n this.languageField = languageField;\n this.sourceLocale = sourceLocale;\n this.locales = locales;\n this.singletons = singletons;\n this.singletonMapping = singletonMapping;\n this.ignoreFields = ignoreFields;\n this.dedupeFields = dedupeFields;\n this.skipFields = skipFields;\n this.translateDocuments = translateDocuments;\n this.additionalStopTypes = additionalStopTypes;\n this.additionalSerializers = additionalSerializers;\n this.additionalDeserializers = additionalDeserializers;\n this.additionalBlockDeserializers = additionalBlockDeserializers;\n this.translationLevel = translationLevel;\n this.fieldLevelDocuments = fieldLevelDocuments;\n this.fieldLevelTypePrefix = fieldLevelTypePrefix;\n }\n\n static getInstance() {\n if (!this.instance) {\n this.instance = new GTConfig(\n SECRETS_NAMESPACE,\n 'language',\n gt.sourceLocale || libraryDefaultLocale,\n [],\n [],\n () => '',\n [],\n [],\n [],\n [],\n [],\n { types: {} },\n {},\n []\n );\n }\n return this.instance;\n }\n\n init(\n secretsNamespace: string,\n languageField: string,\n sourceLocale: string,\n locales: string[],\n singletons: string[],\n singletonMapping: (sourceDocumentId: string, locale: string) => string,\n ignoreFields: IgnoreFields[],\n dedupeFields: DedupeFields[],\n skipFields: SkipFields[],\n translateDocuments: TranslateDocumentFilter[],\n additionalStopTypes: string[] = [],\n additionalSerializers: Partial<PortableTextHtmlComponents> = {},\n additionalDeserializers: CustomDeserializers = { types: {} },\n additionalBlockDeserializers: unknown[] = [],\n translationLevel: FieldLevelTranslationMode = 'document',\n fieldLevelDocuments: TranslateDocumentFilter[] = [],\n fieldLevelTypePrefix: string = 'internationalizedArray'\n ) {\n this.secretsNamespace = secretsNamespace;\n this.languageField = languageField;\n this.sourceLocale = sourceLocale;\n this.locales = locales;\n this.singletons = singletons;\n this.singletonMapping = singletonMapping;\n this.ignoreFields = ignoreFields;\n this.dedupeFields = dedupeFields;\n this.skipFields = skipFields;\n this.translateDocuments = translateDocuments;\n this.additionalStopTypes = additionalStopTypes;\n this.additionalSerializers = additionalSerializers;\n this.additionalDeserializers = additionalDeserializers;\n this.additionalBlockDeserializers = additionalBlockDeserializers;\n this.translationLevel = translationLevel;\n this.fieldLevelDocuments = fieldLevelDocuments;\n this.fieldLevelTypePrefix = fieldLevelTypePrefix;\n }\n\n getSecretsNamespace() {\n return this.secretsNamespace;\n }\n\n getLanguageField() {\n return this.languageField;\n }\n\n getSourceLocale() {\n return this.sourceLocale;\n }\n getLocales() {\n return this.locales;\n }\n getSingletons() {\n return this.singletons;\n }\n getSingletonMapping() {\n return this.singletonMapping;\n }\n getIgnoreFields() {\n return this.ignoreFields;\n }\n getDedupeFields() {\n return this.dedupeFields;\n }\n getSkipFields() {\n return this.skipFields;\n }\n getTranslateDocuments() {\n return this.translateDocuments;\n }\n getAdditionalStopTypes() {\n return this.additionalStopTypes;\n }\n getAdditionalSerializers() {\n return this.additionalSerializers;\n }\n getAdditionalDeserializers() {\n return this.additionalDeserializers;\n }\n getAdditionalBlockDeserializers() {\n return this.additionalBlockDeserializers;\n }\n getTranslationLevel() {\n return this.translationLevel;\n }\n getFieldLevelDocuments() {\n return this.fieldLevelDocuments;\n }\n getFieldLevelTypePrefix() {\n return this.fieldLevelTypePrefix;\n }\n}\nexport const pluginConfig = GTConfig.getInstance();\n","import React from 'react';\nimport {\n ThemeProvider,\n ToastProvider,\n Box,\n Card,\n Flex,\n Spinner,\n Text,\n} from '@sanity/ui';\nimport { buildTheme } from '@sanity/ui/theme';\nimport { useSecrets } from '../../hooks/useSecrets';\nimport { Secrets } from '../../types';\nimport { pluginConfig } from '../../adapter/core';\n\nconst theme = buildTheme();\n\ninterface BaseTranslationWrapperProps {\n children: React.ReactNode;\n secretsNamespace?: string;\n padding?: number;\n showContainer?: boolean;\n}\n\nexport const BaseTranslationWrapper: React.FC<BaseTranslationWrapperProps> = ({\n children,\n secretsNamespace = pluginConfig.getSecretsNamespace(),\n padding = 4,\n showContainer = true,\n}) => {\n const { loading: loadingSecrets, secrets } =\n useSecrets<Secrets>(secretsNamespace);\n\n const content = (\n <>\n {loadingSecrets && (\n <Flex padding={5} align='center' justify='center'>\n <Spinner />\n </Flex>\n )}\n\n {!loadingSecrets && !secrets && (\n <Box padding={padding}>\n <Card tone='caution' padding={[2, 3, 4, 4]} shadow={1} radius={2}>\n <Text>\n Can't find secrets for your translation service. Did you load them\n into this dataset?\n </Text>\n </Card>\n </Box>\n )}\n\n {!loadingSecrets && secrets && children}\n </>\n );\n\n return (\n <ThemeProvider theme={theme}>\n <ToastProvider paddingY={7}>\n {showContainer ? <Box padding={padding}>{content}</Box> : content}\n </ToastProvider>\n </ThemeProvider>\n );\n};\n\nexport interface UseTranslationSecretsResult {\n loadingSecrets: boolean;\n secrets: Secrets | null;\n}\n\nexport const useTranslationSecrets = (\n secretsNamespace?: string\n): UseTranslationSecretsResult => {\n const { loading: loadingSecrets, secrets } = useSecrets<Secrets>(\n secretsNamespace || 'translationService.secrets'\n );\n\n return {\n loadingSecrets,\n secrets,\n };\n};\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\n\nimport { Merger } from './types';\nimport { SanityDocument } from 'sanity';\nimport { extractWithPath, arrayToJSONMatchPath } from '@sanity/mutator';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst reconcileArray = (\n origArray: unknown[],\n translatedArray: unknown[]\n): unknown[] => {\n //arrays of strings don't have keys, so just replace the array and return\n if (translatedArray && translatedArray.some((el) => typeof el === 'string')) {\n return translatedArray;\n }\n\n //deep copy needed for field level patching\n const combined = JSON.parse(JSON.stringify(origArray)) as unknown[];\n\n translatedArray.forEach((translatedItem) => {\n if (!isRecord(translatedItem) || !translatedItem._key) {\n return;\n }\n const foundBlockIdx = origArray.findIndex(\n (origBlock) =>\n isRecord(origBlock) && origBlock._key === translatedItem._key\n );\n if (foundBlockIdx < 0) {\n //eslint-disable-next-line no-console\n console.warn(\n `This block no longer exists on the original document. Was it removed? ${JSON.stringify(\n translatedItem\n )}`\n );\n } else if (\n isRecord(origArray[foundBlockIdx]) &&\n (origArray[foundBlockIdx]._type === 'block' ||\n origArray[foundBlockIdx]._type === 'span')\n ) {\n combined[foundBlockIdx] = translatedItem;\n } else if (isRecord(origArray[foundBlockIdx])) {\n combined[foundBlockIdx] = reconcileObject(\n origArray[foundBlockIdx],\n translatedItem\n );\n }\n });\n return combined;\n};\n\nconst reconcileObject = (\n origObject: Record<string, unknown>,\n translatedObject: Record<string, unknown>\n): Record<string, unknown> => {\n if (\n typeof translatedObject !== 'object' ||\n !Object.keys(translatedObject).length\n ) {\n return origObject;\n }\n\n const updatedObj = JSON.parse(JSON.stringify(origObject)) as Record<\n string,\n unknown\n >;\n Object.entries(translatedObject).forEach(([key, value]) => {\n if (!value || key[0] === '_') {\n return;\n }\n if (typeof value === 'string') {\n updatedObj[key] = value;\n } else if (Array.isArray(value)) {\n updatedObj[key] = reconcileArray(\n Array.isArray(origObject[key]) ? origObject[key] : [],\n value\n );\n } else if (isRecord(value)) {\n updatedObj[key] = reconcileObject(\n isRecord(origObject[key]) ? origObject[key] : {},\n value\n );\n }\n });\n return updatedObj;\n};\n\nconst fieldLevelMerge = (\n translatedFields: Record<string, unknown>,\n //should be fetched according to the revision and id of the translated obj above\n baseDoc: SanityDocument,\n localeId: string,\n baseLang: string = 'en'\n): Record<string, unknown> => {\n const merged: Record<string, unknown> = {};\n const metaKeys = ['_rev', '_id', '_type'];\n metaKeys.forEach((metaKey) => {\n if (translatedFields[metaKey]) {\n merged[metaKey] = translatedFields[metaKey];\n }\n });\n\n //get any field that matches the base language, because it's been translated\n const originPaths = extractWithPath(`..${baseLang}`, translatedFields);\n originPaths.forEach((match) => {\n const origVal = extractWithPath(\n arrayToJSONMatchPath(match.path),\n baseDoc\n )[0].value;\n const translatedVal = extractWithPath(\n arrayToJSONMatchPath(match.path),\n translatedFields\n )[0].value;\n let valToPatch;\n if (typeof translatedVal === 'string') {\n valToPatch = translatedVal;\n } else if (Array.isArray(translatedVal) && translatedVal.length) {\n valToPatch = reconcileArray(\n (origVal as Array<unknown>) ?? [],\n translatedVal\n );\n } else if (\n typeof translatedVal === 'object' &&\n Object.keys(translatedVal as Record<string, unknown>).length\n ) {\n valToPatch = reconcileObject(\n isRecord(origVal) ? origVal : {},\n translatedVal as Record<string, unknown>\n );\n }\n const destinationPath = [\n ...match.path.slice(0, match.path.length - 1), //cut off the \"en\"\n localeId.replace('-', '_'), // replace it with our locale\n ];\n\n merged[arrayToJSONMatchPath(destinationPath)] = valToPatch;\n });\n\n return merged;\n};\n\nconst documentLevelMerge = <\n TTranslatedFields extends Record<string, unknown>,\n TBaseDoc extends SanityDocument,\n>(\n translatedFields: TTranslatedFields,\n //should be fetched according to the revision and id of the translated obj above\n baseDoc: TBaseDoc\n): TBaseDoc & TTranslatedFields => {\n return reconcileObject(\n baseDoc as Record<string, unknown>,\n translatedFields\n ) as TBaseDoc & TTranslatedFields;\n};\n\nexport const BaseDocumentMerger: Merger = {\n fieldLevelMerge,\n documentLevelMerge,\n reconcileArray,\n reconcileObject,\n};\n","import type { SanityDocument } from 'sanity';\n\nexport function getPublishedId(documentId: string): string {\n return documentId.startsWith('drafts.') ? documentId.slice(7) : documentId;\n}\n\nexport function getDocumentPublishedId(document: SanityDocument): string {\n return getPublishedId(document._id);\n}\n\nexport function dedupeDocumentsPreferDraft<T extends SanityDocument>(\n documents: T[]\n): T[] {\n const byPublishedId = new Map<string, T>();\n\n for (const document of documents) {\n const publishedId = getDocumentPublishedId(document);\n const existing = byPublishedId.get(publishedId);\n\n if (!existing || document._id.startsWith('drafts.')) {\n byPublishedId.set(publishedId, document);\n }\n }\n\n return Array.from(byPublishedId.values());\n}\n\nexport function createTranslationStatusKey(\n branchId: string | undefined,\n documentId: string,\n versionId: string,\n localeId: string\n): string {\n const publishedId = getPublishedId(documentId);\n return branchId\n ? `${branchId}:${publishedId}:${versionId}:${localeId}`\n : `${publishedId}:${versionId}:${localeId}`;\n}\n\nexport function createStableTranslationKey(\n branchId: string | undefined,\n documentId: string,\n localeId: string\n): string {\n const publishedId = getPublishedId(documentId);\n return branchId\n ? `${branchId}:${publishedId}:${localeId}`\n : `${publishedId}:${localeId}`;\n}\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, SanityDocument } from 'sanity';\nimport { getPublishedId } from '../../utils/documentIds';\n\n//use perspectives in the future\nexport const findLatestDraft = (\n documentId: string,\n client: SanityClient\n): Promise<SanityDocument> => {\n const publishedId = getPublishedId(documentId);\n const query = `*[_id == $id || _id == $draftId]`;\n const params = { id: publishedId, draftId: `drafts.${publishedId}` };\n return client\n .fetch(query, params)\n .then(\n (docs: SanityDocument[]) =>\n docs.find((doc) => doc._id.startsWith('drafts.')) ?? docs[0]\n );\n};\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, SanityDocument } from 'sanity';\n\n//revision fetch\nexport const findDocumentAtRevision = async (\n documentId: string,\n rev: string,\n client: SanityClient\n): Promise<SanityDocument> => {\n const dataset = client.config().dataset;\n const baseUrl = `/data/history/${dataset}/documents/${documentId}?revision=${rev}`;\n const url = client.getUrl(baseUrl);\n const revisionDoc = await fetch(url, { credentials: 'include' })\n .then((req) => req.json())\n .then((req) => {\n if (req.documents && req.documents.length) {\n return req.documents[0];\n }\n return null;\n });\n\n return revisionDoc;\n};\n","import { JSONPath } from 'jsonpath-plus';\nimport JSONPointer from 'jsonpointer';\nimport type { DedupeFields, FieldMatcher, SkipFields } from '../adapter/types';\n\nexport function forEachMatchingField(\n documentId: string,\n document: Record<string, unknown>,\n fields: FieldMatcher[],\n callback: (result: {\n pointer: string;\n value: unknown;\n parent: Record<string, unknown> | unknown[];\n parentProperty: string;\n }) => void\n): void {\n const applicable = fields.filter(\n (field) =>\n field.documentId === documentId ||\n field.documentId === undefined ||\n field.documentId === null\n );\n\n for (const entry of applicable) {\n if (!entry.fields) continue;\n\n for (const field of entry.fields) {\n const { property, type } = field;\n\n try {\n const results = JSONPath({\n json: document,\n path: property,\n resultType: 'all',\n flatten: true,\n wrap: true,\n });\n\n if (results && results.length > 0) {\n results.forEach(\n (result: {\n pointer: string;\n value: unknown;\n parent: Record<string, unknown> | unknown[];\n parentProperty: string;\n }) => {\n if (type !== undefined) {\n if (\n typeof result.value === 'object' &&\n result.value !== null &&\n !Array.isArray(result.value) &&\n (result.value as Record<string, unknown>)._type === type\n ) {\n callback(result);\n }\n } else {\n callback(result);\n }\n }\n );\n }\n } catch (error) {\n console.warn(`Invalid JSONPath: ${property}`, error);\n }\n }\n }\n}\n\nexport function deleteMatchingFields(\n documentId: string,\n document: Record<string, unknown>,\n fields: FieldMatcher[]\n): void {\n const arrayRemovals: Array<{ parent: unknown[]; index: number }> = [];\n\n forEachMatchingField(documentId, document, fields, (result) => {\n if (Array.isArray(result.parent)) {\n arrayRemovals.push({\n parent: result.parent,\n index: Number(result.parentProperty),\n });\n } else {\n delete result.parent[result.parentProperty];\n }\n });\n\n // Splice array elements in reverse index order to avoid shifting indices\n arrayRemovals.sort((a, b) => b.index - a.index);\n for (const { parent, index } of arrayRemovals) {\n parent.splice(index, 1);\n }\n}\n\nexport function applyDocuments(\n documentId: string,\n sourceDocument: Record<string, unknown>,\n targetDocument: Record<string, unknown>,\n ignore: FieldMatcher[],\n skip: SkipFields[] = [],\n dedupe: DedupeFields[] = [],\n localeId?: string\n) {\n // Deep copy both documents so mutations (e.g. skip-field deletions) never affect the originals\n const mergedDocument = JSON.parse(JSON.stringify(sourceDocument));\n\n // Merge top-level properties of targetDocument\n const clonedTarget = JSON.parse(JSON.stringify(targetDocument));\n for (const [key, value] of Object.entries(clonedTarget)) {\n mergedDocument[key] = value;\n }\n\n // Restore ignored fields from source document\n forEachMatchingField(documentId, sourceDocument, ignore, (result) => {\n JSONPointer.set(mergedDocument, result.pointer, result.value);\n });\n\n // Restore de-duped fields from the source document with a deterministic locale suffix.\n forEachMatchingField(documentId, sourceDocument, dedupe, (result) => {\n JSONPointer.set(\n mergedDocument,\n result.pointer,\n dedupeFieldValue(result.value, localeId)\n );\n });\n\n // Remove skip fields from merged document\n deleteMatchingFields(documentId, mergedDocument, skip);\n\n return mergedDocument;\n}\n\nfunction dedupeFieldValue(value: unknown, localeId?: string): unknown {\n if (!localeId) return value;\n\n if (typeof value === 'string') {\n return appendLocaleSuffix(value, localeId);\n }\n\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as Record<string, unknown>).current === 'string'\n ) {\n const slug = value as Record<string, unknown>;\n return {\n ...slug,\n current: appendLocaleSuffix(slug.current as string, localeId),\n };\n }\n\n return value;\n}\n\nfunction appendLocaleSuffix(value: string, localeId: string): string {\n if (!value) return value;\n\n const suffix = createLocaleSuffix(localeId);\n if (!suffix || value.endsWith(suffix)) return value;\n\n return `${value}${suffix}`;\n}\n\nfunction createLocaleSuffix(localeId: string): string {\n const normalized = localeId\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n\n return normalized ? `-${normalized}` : '';\n}\n","export function randomKey(): string {\n return Math.random().toString(36).slice(2, 10);\n}\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, SanityDocumentLike } from 'sanity';\nimport { pluginConfig } from '../../../adapter/core';\nimport { applyDocuments } from '../../../utils/applyDocuments';\nimport { getPublishedId } from '../../../utils/documentIds';\nimport { randomKey } from '../../../utils/randomKey';\n\nexport async function createI18nDocAndPatchMetadata(\n sourceDocument: SanityDocumentLike,\n translatedDoc: SanityDocumentLike,\n localeId: string,\n client: SanityClient,\n translationMetadata: SanityDocumentLike,\n sourceDocumentId: string,\n languageField: string = 'language'\n): Promise<void> {\n const publishedSourceDocumentId = getPublishedId(sourceDocumentId);\n translatedDoc[languageField] = localeId;\n const translations = translationMetadata.translations as Record<\n string,\n unknown\n >[];\n const existingLocaleKey = translations.find(\n (translation) => translation.language === localeId\n );\n const operation = existingLocaleKey ? 'replace' : 'after';\n const location = existingLocaleKey\n ? `translations[language == \"${localeId}\"]`\n : 'translations[-1]';\n\n //remove system fields\n const { _updatedAt, _createdAt, ...rest } = translatedDoc;\n\n const appliedDocument = applyDocuments(\n publishedSourceDocumentId,\n sourceDocument,\n rest,\n pluginConfig.getIgnoreFields(),\n pluginConfig.getSkipFields(),\n pluginConfig.getDedupeFields(),\n localeId\n );\n\n // Check if this is a singleton document and apply singleton mapping\n const singletons = pluginConfig.getSingletons();\n const isSingleton = singletons.includes(publishedSourceDocumentId);\n\n let createDocumentPromise;\n if (isSingleton) {\n const singletonMapping = pluginConfig.getSingletonMapping();\n const translatedDocId = singletonMapping(\n publishedSourceDocumentId,\n localeId\n );\n createDocumentPromise = client.create({\n ...appliedDocument,\n _type: rest._type,\n _id: `drafts.${translatedDocId}`,\n });\n } else {\n createDocumentPromise = client.create({\n ...appliedDocument,\n _type: rest._type,\n _id: 'drafts.',\n });\n }\n\n const doc = await createDocumentPromise;\n const _ref = getPublishedId(doc._id);\n await client\n .transaction()\n .patch(translationMetadata._id, (p) =>\n p.insert(operation, location, [\n {\n _key: randomKey(),\n language: localeId,\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref,\n _weak: true,\n _strengthenOnPublish: {\n type: doc._type,\n },\n },\n },\n ])\n )\n .commit();\n}\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport {\n KeyedObject,\n Reference,\n SanityClient,\n SanityDocumentLike,\n} from 'sanity';\nimport { randomKey } from '../../../utils/randomKey';\nimport { getPublishedId } from '../../../utils/documentIds';\n\ntype TranslationReference = KeyedObject & {\n _type: 'internationalizedArrayReferenceValue';\n value: Reference;\n};\n\nexport const getOrCreateTranslationMetadata = async (\n documentId: string,\n baseDocument: SanityDocumentLike,\n client: SanityClient,\n baseLanguage: string\n): Promise<SanityDocumentLike> => {\n const publishedId = getPublishedId(documentId);\n\n // First, try to get existing metadata\n const existingMetadata = await client.fetch(\n `*[\n _type == 'translation.metadata' &&\n translations[language == $baseLanguage][0].value._ref == $id\n ][0]`,\n { baseLanguage, id: publishedId }\n );\n\n if (existingMetadata) {\n return existingMetadata;\n }\n\n // If no metadata exists, create it atomically\n const baseLangEntry: TranslationReference = {\n _key: randomKey(),\n language: baseLanguage,\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref: getPublishedId(baseDocument._id),\n },\n };\n\n if (baseDocument._id.startsWith('drafts.')) {\n baseLangEntry.value = {\n ...baseLangEntry.value,\n _weak: true,\n //this should reflect doc i18n config when this\n //plugin is able to take that as a config option\n _strengthenOnPublish: {\n type: baseDocument._type,\n },\n };\n }\n\n try {\n // Use createIfNotExists to handle race conditions\n return await client.createIfNotExists({\n _id: `translation.metadata.${publishedId}`,\n _type: 'translation.metadata',\n translations: [baseLangEntry],\n });\n } catch (error) {\n // If creation fails due to race condition, fetch the existing document\n const metadata = await client.fetch(\n `*[\n _type == 'translation.metadata' &&\n translations[language == $baseLanguage][0].value._ref == $id\n ][0]`,\n { baseLanguage, id: publishedId }\n );\n\n if (metadata) {\n return metadata;\n }\n\n throw error;\n }\n};\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, SanityDocumentLike } from 'sanity';\nimport JSONPointer from 'jsonpointer';\nimport {\n applyDocuments,\n deleteMatchingFields,\n forEachMatchingField,\n} from '../../../utils/applyDocuments';\nimport { pluginConfig } from '../../../adapter/core';\n\nconst SYSTEM_FIELDS = ['_id', '_rev', '_updatedAt', 'language'];\n\nconst isSystemField = (field: string) => SYSTEM_FIELDS.includes(field);\n\nexport async function patchI18nDoc(\n sourceDocumentId: string,\n i18nDocId: string,\n sourceDocument: SanityDocumentLike,\n mergedDocument: SanityDocumentLike,\n translatedFields: Record<string, unknown>,\n client: SanityClient,\n existingDocument?: SanityDocumentLike\n): Promise<void> {\n const cleanedMerge: Record<string, unknown> = {};\n Object.entries(mergedDocument).forEach(([key, value]) => {\n if (\n //only patch those fields that had translated strings\n key in translatedFields &&\n //don't overwrite any existing system values on the i18n doc\n !isSystemField(key)\n ) {\n cleanedMerge[key] = value;\n }\n });\n const cleanedSourceDocument: Record<string, unknown> = {};\n Object.entries(sourceDocument).forEach(([key, value]) => {\n if (\n // extract only the fields that are not system fields\n !isSystemField(key)\n ) {\n cleanedSourceDocument[key] = value;\n }\n });\n const appliedDocument = applyDocuments(\n sourceDocumentId,\n cleanedSourceDocument,\n cleanedMerge,\n pluginConfig.getIgnoreFields(),\n pluginConfig.getSkipFields()\n );\n const dedupeFields = pluginConfig.getDedupeFields();\n deleteMatchingFields(sourceDocumentId, appliedDocument, dedupeFields);\n if (existingDocument) {\n forEachMatchingField(\n sourceDocumentId,\n existingDocument,\n dedupeFields,\n (result) => {\n JSONPointer.set(appliedDocument, result.pointer, result.value);\n }\n );\n }\n await client.patch(i18nDocId, { set: appliedDocument }).commit();\n}\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { SanityClient, SanityDocument, SanityDocumentLike } from 'sanity';\nimport { BaseDocumentMerger } from '../../serialization/BaseDocumentMerger';\n\nimport { findLatestDraft } from '../utils/findLatestDraft';\nimport { findDocumentAtRevision } from '../utils/findDocumentAtRevision';\nimport { createI18nDocAndPatchMetadata } from './helpers/createI18nDocAndPatchMetadata';\nimport { getOrCreateTranslationMetadata } from './helpers/getOrCreateTranslationMetadata';\nimport { patchI18nDoc } from './helpers/patchI18nDoc';\nimport type { GTFile } from '../../types';\nimport { pluginConfig } from '../../adapter/core';\n\ntype TranslationReference = {\n language?: string;\n value?: {\n _ref?: string;\n };\n};\n\nexport const documentLevelPatch = async (\n docInfo: GTFile,\n translatedFields: SanityDocument,\n localeId: string,\n client: SanityClient,\n languageField: string = 'language',\n mergeWithTargetLocale: boolean = false\n): Promise<void> => {\n const baseLanguage = pluginConfig.getSourceLocale();\n //this is the document we use to merge with the translated fields\n let baseDoc: SanityDocument | null = null;\n\n //this is the document that will serve as the translated doc\n let i18nDoc: SanityDocument | null = null;\n\n /*\n * we send over the _rev with our translation file so we can\n * accurately coalesce the translations in case something has\n * changed in the base document since translating\n */\n if (docInfo.documentId && docInfo.versionId) {\n baseDoc = await findDocumentAtRevision(\n docInfo.documentId,\n docInfo.versionId,\n client\n );\n }\n if (!baseDoc) {\n baseDoc = await findLatestDraft(docInfo.documentId, client);\n }\n\n /* first, check our metadata to see if a translated document exists\n * if no metadata exists, we create it atomically\n */\n const translationMetadata = await getOrCreateTranslationMetadata(\n docInfo.documentId,\n baseDoc,\n client,\n baseLanguage\n );\n\n //the id of the translated document should be on the metadata if it exists\n const translations =\n translationMetadata.translations as TranslationReference[];\n const i18nDocId = translations.find(\n (translation) => translation.language === localeId\n )?.value?._ref;\n\n if (i18nDocId) {\n //get draft or published\n i18nDoc = await findLatestDraft(i18nDocId, client);\n }\n\n //if the user has chosen to merge with the target locale,\n //any existing target document will serve as our base document\n if (mergeWithTargetLocale && i18nDoc) {\n baseDoc = i18nDoc;\n } else if (docInfo.documentId && docInfo.versionId) {\n /*\n * we send over the _rev with our translation file so we can\n * accurately coalesce the translations in case something has\n * changed in the base document since translating\n */\n baseDoc = await findDocumentAtRevision(\n docInfo.documentId,\n docInfo.versionId,\n client\n );\n }\n\n if (!baseDoc) {\n baseDoc = await findLatestDraft(docInfo.documentId, client);\n }\n /*\n * we then merge the translation with the base document\n * to create a document that contains the translation and everything\n * that wasn't sent over for translation\n */\n const merged = BaseDocumentMerger.documentLevelMerge(\n translatedFields,\n baseDoc\n ) as SanityDocumentLike;\n\n if (i18nDoc) {\n await patchI18nDoc(\n docInfo.documentId,\n i18nDoc._id,\n baseDoc,\n merged,\n translatedFields,\n client,\n i18nDoc\n );\n }\n //otherwise, create a new document\n //and add the document reference to the metadata document\n else {\n const freshTranslationMetadata = await getOrCreateTranslationMetadata(\n docInfo.documentId,\n baseDoc,\n client,\n baseLanguage\n );\n const freshTranslations =\n freshTranslationMetadata.translations as TranslationReference[];\n const freshI18nDocId = freshTranslations.find(\n (translation) => translation.language === localeId\n )?.value?._ref;\n\n if (freshI18nDocId) {\n const freshI18nDoc = await findLatestDraft(freshI18nDocId, client);\n await patchI18nDoc(\n docInfo.documentId,\n freshI18nDoc._id,\n baseDoc,\n merged,\n translatedFields,\n client,\n freshI18nDoc\n );\n return;\n }\n\n await createI18nDocAndPatchMetadata(\n baseDoc,\n merged,\n localeId,\n client,\n freshTranslationMetadata,\n docInfo.documentId,\n languageField\n );\n }\n};\n","// Helpers for recognising the `sanity-plugin-internationalized-array` storage\n// shape, where a localized field is stored as an array of per-locale items:\n//\n// title: [\n// { _key: 'abc', _type: 'internationalizedArrayStringValue', language: 'en', value: 'Hello' },\n// { _key: 'def', _type: 'internationalizedArrayStringValue', language: 'es', value: 'Hola' },\n// ]\n//\n// Detection is shape-based (not schema-based) so the serializer/merger do not\n// have to thread the schema through every call, but it is anchored on the\n// value `_type` naming convention (`<typePrefix>…Value`) so user-defined types\n// that merely share the `{ language, value }` shape are not misdetected.\n\nimport { pluginConfig } from '../../adapter/core';\n\n// The reference-plugin prefix. Always recognized (even with a custom\n// `typePrefix`) because compatibility types with this prefix are generated by\n// default and pre-existing upstream data uses it.\nconst DEFAULT_TYPE_PREFIX = 'internationalizedArray';\n\nfunction hasRecognizedTypePrefix(type: string): boolean {\n return (\n type.startsWith(DEFAULT_TYPE_PREFIX) ||\n type.startsWith(pluginConfig.getFieldLevelTypePrefix())\n );\n}\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport type InternationalizedArrayItem = {\n _key?: string;\n _type: string;\n language: string;\n value: unknown;\n};\n\n/**\n * A single `{ _key, _type, language, value }` entry. The `_type` of the\n * generated value objects is always `<typePrefix><FieldType>Value`\n * (e.g. `internationalizedArrayStringValue`), so both the prefix and the\n * `Value` suffix are required — a bare `endsWith('Value')` check would\n * misdetect user-defined types like `priceValue` that happen to carry\n * `language`/`value` keys.\n */\nexport function isInternationalizedArrayItem(\n item: unknown\n): item is InternationalizedArrayItem {\n return (\n isRecord(item) &&\n typeof item._type === 'string' &&\n hasRecognizedTypePrefix(item._type) &&\n item._type.endsWith('Value') &&\n typeof item.language === 'string' &&\n 'value' in item\n );\n}\n\n/**\n * A non-empty array where every element is an internationalized-array item.\n */\nexport function isInternationalizedArrayField(\n value: unknown\n): value is InternationalizedArrayItem[] {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n value.every(isInternationalizedArrayItem)\n );\n}\n\n/**\n * Returns the item for a given locale, matching on the exact `language` id\n * (hyphens preserved, e.g. `fr-CA`). Never matches on `_key`, which is random.\n */\nexport function findLocaleItem(\n field: InternationalizedArrayItem[],\n locale: string\n): InternationalizedArrayItem | undefined {\n return field.find((item) => item.language === locale);\n}\n","import { randomKey } from '../../utils/randomKey';\nimport {\n findLocaleItem,\n InternationalizedArrayItem,\n isInternationalizedArrayField,\n isRecord,\n} from './detect';\n\n/**\n * Upsert the translated value for `targetLocale` into an internationalized\n * array, preserving every other locale item and its (random) `_key`.\n *\n * Sanity mutations can only address array items by `_key`, and `_key` is random\n * here, so we resolve the target item by its `language` field and reuse its\n * existing `_key`; if absent we append a fresh random `_key`.\n */\nfunction upsertLocaleItem(\n baseArray: InternationalizedArrayItem[],\n translatedValue: unknown,\n targetLocale: string,\n sourceLocale: string\n): InternationalizedArrayItem[] {\n const itemType = (findLocaleItem(baseArray, sourceLocale) ?? baseArray[0])\n ._type;\n\n const updated = baseArray.map((item) =>\n item.language === targetLocale\n ? { ...item, value: translatedValue }\n : { ...item }\n );\n\n if (!findLocaleItem(updated, targetLocale)) {\n updated.push({\n _key: randomKey(),\n _type: itemType,\n language: targetLocale,\n value: translatedValue,\n });\n }\n\n return updated;\n}\n\n/**\n * Merge a single base value with its translated counterpart, returning the new\n * value to write, or `undefined` when nothing localized changed at this level.\n * Recurses through plain objects (by key) and plain arrays (by `_key`) so\n * internationalized-array fields nested inside other content are also handled.\n */\nfunction mergeValue(\n baseValue: unknown,\n translatedValue: unknown,\n targetLocale: string,\n sourceLocale: string\n): unknown {\n if (isInternationalizedArrayField(baseValue)) {\n return upsertLocaleItem(\n baseValue,\n translatedValue,\n targetLocale,\n sourceLocale\n );\n }\n\n if (Array.isArray(baseValue) && Array.isArray(translatedValue)) {\n let changed = false;\n const merged = baseValue.map((item) => {\n if (!isRecord(item) || typeof item._key !== 'string') {\n return item;\n }\n const translatedItem = translatedValue.find(\n (candidate) => isRecord(candidate) && candidate._key === item._key\n );\n if (!translatedItem) {\n return item;\n }\n const mergedItem = mergeValue(\n item,\n translatedItem,\n targetLocale,\n sourceLocale\n );\n if (mergedItem !== undefined) {\n changed = true;\n return mergedItem;\n }\n return item;\n });\n return changed ? merged : undefined;\n }\n\n if (isRecord(baseValue) && isRecord(translatedValue)) {\n let changed = false;\n const merged: Record<string, unknown> = { ...baseValue };\n for (const key of Object.keys(translatedValue)) {\n if (key.startsWith('_') || !(key in baseValue)) {\n continue;\n }\n const mergedChild = mergeValue(\n baseValue[key],\n translatedValue[key],\n targetLocale,\n sourceLocale\n );\n if (mergedChild !== undefined) {\n merged[key] = mergedChild;\n changed = true;\n }\n }\n return changed ? merged : undefined;\n }\n\n return undefined;\n}\n\n/**\n * Compare a base Sanity document against a deserialized translation and produce\n * a patch object of top-level fields whose internationalized-array content\n * changed. Each entry is the full merged top-level value (with the target\n * locale upserted), suitable for `client.patch(id).set(changes)`.\n *\n * Only top-level fields that actually changed are returned, so unrelated\n * content and other locales are left untouched.\n */\nexport function mergeInternationalizedArrays(\n baseDoc: Record<string, unknown>,\n translatedFields: Record<string, unknown>,\n targetLocale: string,\n sourceLocale: string\n): Record<string, unknown> {\n const changes: Record<string, unknown> = {};\n\n for (const key of Object.keys(translatedFields)) {\n if (key.startsWith('_') || !(key in baseDoc)) {\n continue;\n }\n const merged = mergeValue(\n baseDoc[key],\n translatedFields[key],\n targetLocale,\n sourceLocale\n );\n if (merged !== undefined) {\n changes[key] = merged;\n }\n }\n\n return changes;\n}\n","import { SanityClient, SanityDocument } from 'sanity';\nimport { pluginConfig } from '../../adapter/core';\nimport { mergeInternationalizedArrays } from '../../serialization/internationalizedArray/merge';\nimport type { GTFile } from '../../types';\nimport { getPublishedId } from '../../utils/documentIds';\nimport { findLatestDraft } from '../utils/findLatestDraft';\n\n/**\n * Import a translated internationalized-array document in place.\n *\n * Unlike document-level import (which creates per-locale documents and tracks\n * translation metadata), array localization upserts the target-locale `value`\n * into the same source document. We read the latest draft so concurrent edits\n * to the source are not clobbered, merge only the changed top-level fields, and\n * commit a single patch.\n */\nexport const internationalizedArrayPatch = async (\n docInfo: GTFile,\n translatedFields: SanityDocument,\n localeId: string,\n client: SanityClient\n): Promise<void> => {\n const sourceLocale = pluginConfig.getSourceLocale();\n\n const baseDoc = await findLatestDraft(docInfo.documentId, client);\n if (!baseDoc) {\n return;\n }\n\n const changes = mergeInternationalizedArrays(\n baseDoc as Record<string, unknown>,\n translatedFields as Record<string, unknown>,\n localeId,\n sourceLocale\n );\n\n if (Object.keys(changes).length === 0) {\n return;\n }\n\n // Every key in `changes` already exists on the base document (merge only\n // returns existing fields), so a full `set` of the merged field is safe and\n // preserves all other locale items and their random `_key`s.\n if (baseDoc._id.startsWith('drafts.')) {\n await client.patch(baseDoc._id).set(changes).commit();\n return;\n }\n\n // Only the published document exists. Mutations via the client write to the\n // exact id given (drafts are a Studio convention, not created server-side),\n // so patch a draft seeded from the published state instead of publishing\n // translated content directly.\n const draftId = `drafts.${getPublishedId(baseDoc._id)}`;\n await client\n .transaction()\n .createIfNotExists({ ...baseDoc, _id: draftId })\n .patch(draftId, (patch) => patch.set(changes))\n .commit();\n};\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\nimport { htmlToBlocks } from '@portabletext/block-tools';\nimport { Schema } from '@sanity/schema';\nimport { ObjectField, PortableTextSpan, PortableTextTextBlock } from 'sanity';\n\nconst defaultSchema = Schema.compile({\n name: 'default',\n types: [\n {\n type: 'object',\n name: 'default',\n fields: [\n {\n name: 'block',\n type: 'array',\n of: [{ type: 'block' }],\n },\n ],\n },\n ],\n});\n\nexport const blockContentType = defaultSchema\n .get('default')\n .fields.find((field: ObjectField) => field.name === 'block').type;\n\nexport const noSchemaWarning = (obj: Element): string =>\n `WARNING: Unfortunately the deserializer may have issues with this field or object: ${obj.className}.\n If it's a specific type, you may need to declare at the top level, or write a custom deserializer.`;\n\n//helper to handle messy input -- take advantage\n//of blockTools' sanitizing behavior for single strings\nexport const preprocess = (html: string): string => {\n const intermediateBlocks = htmlToBlocks(\n `<p>${html}</p>`,\n blockContentType\n ) as PortableTextTextBlock<PortableTextSpan>[];\n if (!intermediateBlocks.length) {\n throw new Error(`Error parsing string '${html}'`);\n }\n return intermediateBlocks[0].children[0].text;\n};\n","export function attachGTData(\n html: string,\n data: Record<string, unknown>,\n type: 'markDef'\n): string {\n // Parse the HTML string to find the first element\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const firstElement = doc.body.firstElementChild;\n\n if (!firstElement) {\n // If no element found, return original HTML\n return html;\n }\n\n // Encode the data as base64 JSON\n const encodedData = encode(JSON.stringify({ [type]: data }));\n\n // Add the data-gt-internal attribute\n firstElement.setAttribute('data-gt-internal', encodedData);\n\n return firstElement.outerHTML;\n}\n\nexport function detachGTData(html: string): {\n html: string;\n data?: Record<'markDef', Record<string, unknown>>;\n} {\n // Parse the HTML string to find the first element\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const firstElement = doc.body.firstElementChild;\n\n if (!firstElement) {\n // If no element found, return original HTML with no data\n return { html };\n }\n\n // Get the encoded data\n const encodedData = firstElement.getAttribute('data-gt-internal');\n\n let extractedData: Record<'markDef', Record<string, unknown>> | undefined;\n if (encodedData) {\n try {\n // Decode and parse the data\n const decodedData = decode(encodedData);\n extractedData = JSON.parse(decodedData);\n\n // Remove the data attribute to clean up the HTML\n firstElement.removeAttribute('data-gt-internal');\n } catch (error) {\n console.warn('Failed to decode GT internal data:', error);\n }\n }\n\n return {\n html: firstElement.outerHTML,\n data: extractedData,\n };\n}\n\n// Encode a string to base64\nexport function encode(data: string): string {\n // Browser path\n const bytes = new TextEncoder().encode(data);\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\n// Decode a base64 string to a string\nexport function decode(base64: string): string {\n // Browser path\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new TextDecoder().decode(bytes);\n}\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\n\nimport type { PortableTextBlockStyle } from '@portabletext/types';\n\nimport {\n PortableTextBlockComponent,\n PortableTextListComponent,\n PortableTextListItemComponent,\n PortableTextMarkComponent,\n PortableTextHtmlComponents,\n} from '@portabletext/to-html';\n\nimport { htmlToBlocks } from '@portabletext/block-tools';\nimport { blockContentType } from './deserialize/helpers';\nimport { PortableTextObject, PortableTextTextBlock, TypedObject } from 'sanity';\nimport { detachGTData } from './data';\nimport type { CustomDeserializers } from './types';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const defaultStopTypes = [\n 'reference',\n 'date',\n 'datetime',\n 'file',\n 'geopoint',\n 'image',\n 'number',\n 'crop',\n 'hotspot',\n 'boolean',\n 'url',\n 'color',\n 'code',\n];\n\nexport const defaultMarks: Record<string, PortableTextMarkComponent> = {};\n\nexport const defaultPortableTextBlockStyles: Record<\n PortableTextBlockStyle,\n PortableTextBlockComponent | undefined\n> = {\n normal: ({ value, children }) => `<p id=\"${value._key}\">${children}</p>`,\n blockquote: ({ value, children }) =>\n `<blockquote id=\"${value._key}\">${children}</blockquote>`,\n h1: ({ value, children }) => `<h1 id=\"${value._key}\">${children}</h1>`,\n h2: ({ value, children }) => `<h2 id=\"${value._key}\">${children}</h2>`,\n h3: ({ value, children }) => `<h3 id=\"${value._key}\">${children}</h3>`,\n h4: ({ value, children }) => `<h4 id=\"${value._key}\">${children}</h4>`,\n h5: ({ value, children }) => `<h5 id=\"${value._key}\">${children}</h5>`,\n h6: ({ value, children }) => `<h6 id=\"${value._key}\">${children}</h6>`,\n};\n\nconst defaultLists: Record<'number' | 'bullet', PortableTextListComponent> = {\n number: ({ value, children }) =>\n `<ol id=\"${value._key.replace('-parent', '')}\">${children}</ol>`,\n bullet: ({ value, children }) =>\n `<ul id=\"${value._key.replace('-parent', '')}\">${children}</ul>`,\n};\n\nconst defaultListItem: PortableTextListItemComponent = ({\n value,\n children,\n}) => {\n const { _key, level } = value;\n return `<li id=\"${(_key || '').replace('-parent', '')}\" data-level=\"${level}\">${children}</li>`;\n};\n\nconst unknownBlockFunc: PortableTextBlockComponent = ({ value, children }) =>\n `<p id=\"${value._key}\" data-type=\"unknown-block-style\" data-style=\"${value.style}\">${children}</p>`;\n\nexport const customSerializers: Partial<PortableTextHtmlComponents> = {\n unknownType: ({ value }) => `<div class=\"${value._type}\"></div>`,\n types: {},\n marks: defaultMarks,\n block: defaultPortableTextBlockStyles,\n list: defaultLists,\n listItem: defaultListItem,\n unknownBlockStyle: unknownBlockFunc,\n};\n\nexport const customDeserializers: CustomDeserializers = { types: {} };\n\nexport const customBlockDeserializers: Array<unknown> = [\n // handle marks with data-gt-internal\n {\n deserialize(\n node: Node,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\n if (node.nodeType !== 1) {\n return undefined;\n }\n const el = node as HTMLElement;\n if (!el.hasChildNodes()) {\n return undefined;\n }\n\n if (!el.getAttribute('data-gt-internal')) {\n return undefined;\n }\n\n const { html, data } = detachGTData(el.outerHTML);\n const block = htmlToBlocks(html, blockContentType)[0];\n\n const children = next(el.childNodes);\n\n let markDefs: PortableTextObject[] = [];\n if ('markDefs' in block) {\n markDefs = (block.markDefs as PortableTextObject[]) ?? [];\n }\n if (data?.markDef) {\n markDefs.push(data.markDef as PortableTextObject);\n }\n if (Array.isArray(children)) {\n children.forEach((child) => {\n if (!isRecord(child)) {\n return;\n }\n const marks = Array.isArray(child.marks) ? child.marks : [];\n child.marks = data?.markDef?._key\n ? [...marks, data.markDef._key]\n : marks;\n });\n }\n // Resolve marks in the child nodes\n const output = {\n ...block,\n markDefs,\n children,\n };\n return output;\n },\n },\n //handle undeclared styles\n {\n deserialize(\n node: Node,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\n if (node.nodeType !== 1) {\n return undefined;\n }\n const el = node as HTMLElement;\n if (!el.hasChildNodes()) {\n return undefined;\n }\n\n if (el.getAttribute('data-type') !== 'unknown-block-style') {\n return undefined;\n }\n\n const style = el.getAttribute('data-style') ?? '';\n const block = htmlToBlocks(el.outerHTML, blockContentType)[0];\n\n return {\n ...block,\n style,\n children: next(el.childNodes),\n };\n },\n },\n //handle list items\n {\n deserialize(\n node: Node,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\n if (node.nodeType !== 1) {\n return undefined;\n }\n const el = node as HTMLElement;\n if (!el.hasChildNodes()) {\n return undefined;\n }\n\n if (el.tagName.toLowerCase() !== 'li') {\n return undefined;\n }\n\n const tagsToStyle: Record<string, string> = {\n ul: 'bullet',\n ol: 'number',\n };\n\n const parent = el.parentNode as HTMLUListElement | HTMLOListElement;\n if (!parent || !parent.tagName) {\n return undefined;\n }\n\n const listItem = tagsToStyle[parent.tagName.toLowerCase()];\n if (!listItem) {\n return undefined;\n }\n\n const level =\n el.getAttribute('data-level') &&\n parseInt(el.getAttribute('data-level') || '0', 10);\n const _key = el.id;\n let block = htmlToBlocks(parent.outerHTML, blockContentType)[0];\n const customStyle = el.children?.[0]?.getAttribute('data-style');\n\n //check if the object inside is also serialized -- that means it has a style\n //or custom annotation and we should use childNode serialization\n const regex = new RegExp(/<(\"[^\"]*\"|'[^']*'|[^'\">])*>/);\n if (regex.test(el.innerHTML)) {\n const newBlock = htmlToBlocks(el.innerHTML, blockContentType)[0];\n if (newBlock) {\n block = {\n ...block,\n ...newBlock,\n // @ts-ignore\n style: customStyle ?? (newBlock as PortableTextTextBlock).style,\n };\n\n //next(childNodes) plays poorly with custom styles, issue to be filed.\n if (customStyle) {\n return block as PortableTextTextBlock;\n }\n }\n }\n\n return {\n ...block,\n level,\n _key,\n listItem,\n children: next(el.childNodes),\n };\n },\n },\n];\n","import { PortableTextTextBlock } from 'sanity';\n\n// Helper function to merge multiple blocks\n// Prioritize blocks[0]\nexport function mergeBlocks(blocks: PortableTextTextBlock[]) {\n const mergedBlock = { ...blocks[0] };\n mergedBlock.markDefs = mergedBlock.markDefs ?? [];\n for (const [idx, block] of blocks.entries()) {\n if (idx === 0) {\n continue;\n }\n mergedBlock.children.push(...block.children);\n mergedBlock.markDefs.push(...(block.markDefs ?? []));\n }\n mergedBlock._type = 'block';\n\n return mergedBlock;\n}\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\nimport { htmlToBlocks } from '@portabletext/block-tools';\nimport {\n customDeserializers,\n customBlockDeserializers,\n} from '../BaseSerializationConfig';\nimport { CustomDeserializers, Deserializer } from '../types';\nimport { blockContentType, preprocess } from './helpers';\nimport { mergeBlocks } from '../helpers';\n\nexport const deserializeArray = (\n arrayHTML: Element,\n deserializers: CustomDeserializers = customDeserializers,\n blockDeserializers: Array<unknown> = customBlockDeserializers\n) => {\n const output: unknown[] = [];\n const children = Array.from(arrayHTML.children);\n children.forEach((child) => {\n let deserializedObject: unknown;\n try {\n if (child.tagName?.toLowerCase() === 'span') {\n deserializedObject = preprocess(child.innerHTML);\n }\n //has specific class name or data type, so it's an obj\n else if (\n child.className ||\n child.getAttribute('data-type') === 'object'\n ) {\n deserializedObject = deserializeObject(\n child,\n deserializers,\n blockDeserializers\n );\n if (\n deserializedObject &&\n typeof deserializedObject === 'object' &&\n !Array.isArray(deserializedObject)\n ) {\n (deserializedObject as Record<string, unknown>)._key = child.id;\n }\n } else {\n const blocks = htmlToBlocks(child.outerHTML, blockContentType, {\n rules: blockDeserializers as NonNullable<\n Parameters<typeof htmlToBlocks>[2]\n >['rules'],\n });\n deserializedObject = mergeBlocks(\n blocks as unknown as Parameters<typeof mergeBlocks>[0]\n );\n (deserializedObject as Record<string, unknown>)._key = child.id;\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.debug(\n `Tried to deserialize block: ${child.outerHTML} in an array but failed to identify it! Error: ${e}`\n );\n }\n output.push(deserializedObject);\n });\n return output;\n};\n\nexport const deserializeObject = (\n objectHTML: Element,\n deserializers: CustomDeserializers = customDeserializers,\n blockDeserializers: Array<unknown> = customBlockDeserializers\n) => {\n const deserialize = deserializers.types?.[objectHTML.className];\n if (deserialize) {\n return deserialize(objectHTML as HTMLElement);\n }\n\n const output: Record<string, unknown> = {};\n //account for anonymous inline objects\n if (objectHTML.className) {\n output._type = objectHTML.className;\n }\n const children = Array.from(objectHTML.children);\n\n children.forEach((child) => {\n //string field\n if (child.tagName?.toLowerCase() === 'span') {\n output[child.className] = preprocess(child.innerHTML);\n }\n //richer field, either object or array\n else if (child.getAttribute('data-level') === 'field') {\n const deserialized = deserializeHTML(\n child.outerHTML,\n deserializers,\n blockDeserializers\n );\n if (deserialized && Object.keys(deserialized).length) {\n output[child.className] = deserialized;\n } else {\n //eslint-disable-next-line no-console\n console.debug(\n `Deserializer: Skipping empty or unreadable HTML: ${child.outerHTML}`\n );\n }\n } else if (child.getAttribute('data-type') === 'array') {\n output[child.className] = deserializeArray(\n child,\n deserializers,\n blockDeserializers\n );\n }\n });\n return output;\n};\n\nexport const deserializeHTML = (\n html: string,\n deserializers: CustomDeserializers,\n blockDeserializers: Array<unknown>\n): Record<string, unknown> | unknown[] => {\n //parent node is always div with classname of field -- get its child\n let HTMLnode = new DOMParser().parseFromString(html, 'text/html').body\n .children[0];\n\n //catch embedded object as a field\n if (HTMLnode?.getAttribute('data-level') === 'field') {\n HTMLnode = HTMLnode.children[0];\n }\n\n if (!HTMLnode) {\n return {};\n }\n\n let output: Record<string, unknown> | unknown[];\n\n //prioritize custom deserialization\n const deserialize = deserializers.types?.[HTMLnode.className];\n if (deserialize) {\n output = deserialize(HTMLnode as HTMLElement);\n } else if (HTMLnode.getAttribute('data-type') === 'object') {\n output = deserializeObject(HTMLnode, deserializers, blockDeserializers);\n } else if (HTMLnode.getAttribute('data-type') === 'array') {\n output = deserializeArray(HTMLnode, deserializers, blockDeserializers);\n } else {\n output = {};\n //eslint-disable-next-line no-console\n console.debug(\n `Tried to deserialize block ${HTMLnode.outerHTML} but failed to identify it!`\n );\n }\n\n return output;\n};\n\nexport const deserializeDocument = <\n TDocument extends Record<string, unknown> = Record<string, unknown>,\n>(\n serializedDoc: string,\n deserializers: CustomDeserializers = customDeserializers,\n blockDeserializers: Array<unknown> = customBlockDeserializers\n): TDocument => {\n const metadata: Record<string, unknown> = {};\n const head = new DOMParser().parseFromString(serializedDoc, 'text/html').head;\n\n Array.from(head.children).forEach((metaTag) => {\n const validTags = ['_id', '_rev', '_type'];\n const metaName = metaTag.getAttribute('name');\n if (metaName && validTags.includes(metaName)) {\n metadata[metaName] = metaTag.getAttribute('content');\n }\n });\n\n const content = deserializeHTML(\n serializedDoc,\n deserializers,\n blockDeserializers\n ) as Record<string, unknown>;\n\n return {\n ...content,\n ...metadata,\n } as TDocument;\n};\n\nexport const BaseDocumentDeserializer: Deserializer = {\n deserializeDocument,\n deserializeHTML,\n};\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\n\nimport { ObjectField, TypedObject } from 'sanity';\n\nconst META_FIELDS = ['_key', '_type', '_id'];\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/*\n * Helper. If field-level translation pattern used, only sends over\n * content from the base language. Works recursively, so if users\n * use this pattern several layers deep, base language fields will still be found.\n */\nexport const languageObjectFieldFilter = (\n obj: Record<string, unknown>,\n baseLang: string\n): Record<string, unknown> => {\n const filterToLangField = (childObj: Record<string, unknown>) => {\n const filteredObj: Record<string, unknown> = {};\n filteredObj[baseLang] = childObj[baseLang];\n META_FIELDS.forEach((field) => {\n if (childObj[field]) {\n filteredObj[field] = childObj[field];\n }\n });\n return filteredObj;\n };\n\n const findBaseLang = (\n childObj: Record<string, unknown>\n ): Record<string, unknown> => {\n const filteredObj: Record<string, unknown> = {};\n META_FIELDS.forEach((field) => {\n if (childObj[field]) {\n filteredObj[field] = childObj[field];\n }\n });\n\n for (const key in childObj) {\n if (childObj.hasOwnProperty(key)) {\n const value: unknown = childObj[key];\n //we've reached a base language field, add it to\n //what we want to send to translation\n if (isRecord(value) && Object.hasOwn(value, baseLang)) {\n filteredObj[key] = filterToLangField(value);\n }\n //we have an array that may have language fields in its objects\n else if (\n Array.isArray(value) &&\n value.length &&\n typeof value[0] === 'object'\n ) {\n //recursively find and filter for any objects that have the base language\n const validLangObjects = value.reduce<Record<string, unknown>[]>(\n (validArr, objInArray) => {\n if (!isRecord(objInArray)) {\n return validArr;\n }\n if (objInArray._type === 'block') {\n validArr.push(objInArray);\n } else if (Object.hasOwn(objInArray, baseLang)) {\n validArr.push(filterToLangField(objInArray));\n } else {\n const filtered = findBaseLang(objInArray);\n const nonMetaFields = Object.keys(filtered).filter(\n (objInArrayKey) => META_FIELDS.indexOf(objInArrayKey) === -1\n );\n if (nonMetaFields.length) {\n validArr.push(filtered);\n }\n }\n return validArr;\n },\n []\n );\n if (validLangObjects.length) {\n filteredObj[key] = validLangObjects;\n }\n }\n //we have an object nested in an object\n //recurse down the tree\n else if (isRecord(value)) {\n const nestedLangObj = findBaseLang(value);\n const nonMetaFields = Object.keys(nestedLangObj).filter(\n (nestedObjKey) => META_FIELDS.indexOf(nestedObjKey) === -1\n );\n if (nonMetaFields.length) {\n filteredObj[key] = nestedLangObj;\n }\n }\n }\n }\n return filteredObj;\n };\n\n //send top level object into recursive function\n return findBaseLang(obj);\n};\n\n/*\n * Eliminates stop-types and non-localizable fields\n * for document-level translation.\n */\nexport const fieldFilter = (\n obj: Record<string, unknown>,\n objFields: ObjectField[],\n stopTypes: string[]\n): TypedObject => {\n const filteredObj: TypedObject = {\n _type: typeof obj._type === 'string' ? obj._type : '',\n };\n\n const fieldFilterFunc = (field: ObjectField): boolean => {\n const fieldMetadata = field as ObjectField & {\n localize?: boolean;\n type?: string | { name?: string };\n };\n const fieldType =\n typeof fieldMetadata.type === 'string'\n ? fieldMetadata.type\n : fieldMetadata.type?.name;\n\n if (fieldMetadata.localize === false) {\n return false;\n } else if (fieldType === 'string' || fieldType === 'text') {\n return true;\n } else if (Array.isArray(obj[field.name])) {\n return true;\n } else if (fieldType && !stopTypes.includes(fieldType)) {\n return true;\n }\n return false;\n };\n\n const validFields = [\n ...META_FIELDS,\n ...objFields.filter(fieldFilterFunc).map((field) => field.name),\n ];\n validFields.forEach((field) => {\n if (obj[field]) {\n filteredObj[field] = obj[field];\n }\n });\n return filteredObj;\n};\n","// Adapted from https://github.com/sanity-io/sanity-naive-html-serializer\n\nimport {\n defaultStopTypes,\n customSerializers,\n} from '../BaseSerializationConfig';\nimport { ObjectField, SanityDocument, TypedObject, Schema } from 'sanity';\nimport { TranslationLevel } from '../types';\nimport { fieldFilter, languageObjectFieldFilter } from './fieldFilters';\nimport {\n PortableTextHtmlComponents,\n PortableTextTypeComponent,\n toHTML,\n} from '@portabletext/to-html';\n\nconst META_FIELDS = ['_key', '_type', '_id', '_weak'];\n\ntype SchemaTypeWithFields = {\n fields?: ObjectField[];\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const BaseDocumentSerializer = (schemas: Schema) => {\n /*\n * Helper function that allows us to get metadata (like `localize: false`) from schema fields.\n */\n const getSchema = (name: string): SchemaTypeWithFields | undefined =>\n schemas?._original?.types.find((s) => s.name === name) as\n | SchemaTypeWithFields\n | undefined;\n\n const serializeObject = (\n obj: TypedObject,\n stopTypes: string[],\n serializers: Partial<PortableTextHtmlComponents>\n ) => {\n if (stopTypes.includes(obj._type)) {\n return '';\n }\n\n //if user has declared a custom serializer, use that\n //instead of this method\n const typeSerializers = isRecord(serializers.types)\n ? serializers.types\n : ({} as PortableTextHtmlComponents['types']);\n const hasSerializer = Object.keys(typeSerializers).includes(obj._type);\n if (hasSerializer) {\n return toHTML([obj], { components: serializers });\n }\n\n //we don't need to worry about PT types\n if (obj._type === 'span' || obj._type === 'block') {\n return toHTML(obj, { components: serializers });\n }\n\n //if schema is available, encode values in the order they're declared in the schema,\n //since this will likely be more intuitive for a translator.\n let fieldNames = Object.keys(obj).filter((key) => key !== '_type');\n const schema = getSchema(obj._type);\n if (schema && schema.fields) {\n fieldNames = schema.fields\n .map((field) => field.name)\n .filter((schemaKey) => Object.keys(obj).includes(schemaKey));\n }\n\n //account for anonymous inline objects\n if (typeof obj === 'object' && !obj._type) {\n obj._type = '';\n }\n\n //in some cases, we might recurse through many objects of the same type\n //we should take all methods necessary to ensure state does not persist\n //otherwise we risk using old serialization methods on new items\n const newSerializationMethods: Record<string, PortableTextTypeComponent> =\n {};\n const tempType = `${obj._type}__temp_type__${Math.random().toString(36).substring(7)}`;\n const objToSerialize: TypedObject = { _type: tempType };\n //for our default serialization method, we only need to\n //capture metadata. the rest will be recursively turned into strings.\n META_FIELDS.filter((f) => f !== '_type').forEach((field) => {\n objToSerialize[field] = obj[field];\n });\n\n let innerHTML = '';\n\n //if it's a custom object, iterate through its keys to find and serialize translatable content\n fieldNames.forEach((fieldName) => {\n let htmlField = '';\n\n if (!META_FIELDS.includes(fieldName)) {\n const value = obj[fieldName];\n //strings are either string fields or have recursively been turned\n //into HTML because they were a nested object or array\n if (typeof value === 'string') {\n const htmlRegex = new RegExp(/<(\"[^\"]*\"|'[^']*'|[^'\">])*>/);\n if (htmlRegex.test(value)) {\n htmlField = value;\n } else {\n htmlField = `<span class=\"${fieldName}\">${value}</span>`;\n }\n }\n\n //array fields get filtered and its children serialized\n else if (Array.isArray(value)) {\n htmlField = serializeArray(value, fieldName, stopTypes, {\n ...serializers,\n types: { ...typeSerializers },\n });\n }\n\n //this is an object in an object, serialize it first\n else if (isRecord(value)) {\n const embeddedObject = value as TypedObject;\n const embeddedObjectSchema = getSchema(embeddedObject._type);\n let toTranslate = embeddedObject;\n if (embeddedObjectSchema && embeddedObjectSchema.fields) {\n toTranslate = fieldFilter(\n toTranslate,\n embeddedObjectSchema.fields,\n stopTypes\n );\n }\n const objHTML = serializeObject(toTranslate, stopTypes, {\n ...serializers,\n types: { ...typeSerializers },\n });\n htmlField = `<div class=\"${fieldName}\" data-level=\"field\">${objHTML}</div>`;\n }\n\n innerHTML += htmlField;\n }\n });\n\n if (!innerHTML) {\n return '';\n }\n\n newSerializationMethods[tempType] = ({ value }: { value: TypedObject }) => {\n let div = `<div class=\"${value._type.split('__temp_type__')[0]}\"`;\n if (value._key || value._id) {\n div += `id=\"${value._key ?? value._id}\"`;\n }\n\n return [div, ` data-type=\"object\">${innerHTML}</div>`].join('');\n };\n\n let serializedBlock = '';\n try {\n serializedBlock = toHTML(objToSerialize, {\n components: {\n ...serializers,\n types: {\n ...typeSerializers,\n ...newSerializationMethods,\n },\n },\n });\n } catch (err) {\n //eslint-disable-next-line no-console -- this is a warning\n console.warn(\n `Had issues serializing block of type \"${obj._type}\". Specify a serialization method for this block in your serialization config. Received error: ${err}`\n );\n }\n\n return serializedBlock;\n };\n\n const serializeArray = (\n fieldContent: Array<Record<string, unknown> | string>,\n fieldName: string,\n stopTypes: string[],\n serializers: Partial<PortableTextHtmlComponents>\n ) => {\n //filter for any blocks that user has indicated\n //should not be sent for translation\n const validBlocks = fieldContent.filter(\n (block) =>\n typeof block === 'string' ||\n typeof block._type !== 'string' ||\n !stopTypes.includes(block._type)\n );\n\n //take out any fields in these blocks that should\n //not be sent to translation\n const filteredBlocks = validBlocks.map((block) => {\n if (typeof block === 'string') {\n return block;\n }\n const schema = getSchema(\n typeof block._type === 'string' ? block._type : ''\n );\n if (schema && schema.fields) {\n return fieldFilter(block, schema.fields, stopTypes);\n }\n return block;\n });\n\n const output = filteredBlocks.map((obj) => {\n //if object in array is just a string, just return it\n if (typeof obj === 'string') {\n return `<span>${obj}</span>`;\n }\n //send to serialization method\n return serializeObject(obj as TypedObject, stopTypes, serializers);\n });\n\n //encode this with data-level field\n return `<div class=\"${fieldName}\" data-type=\"array\">${output.join('')}</div>`;\n };\n\n /*\n * Main parent function: finds fields to translate, and feeds them to appropriate child serialization\n * methods.\n */\n const serializeDocument = (\n doc: SanityDocument,\n translationLevel: TranslationLevel = 'document',\n baseLang = 'en',\n stopTypes = defaultStopTypes,\n serializers = customSerializers\n ) => {\n const schema = getSchema(doc._type);\n let filteredObj: Record<string, unknown> = {};\n\n //field level translations explicitly send over any fields that\n //match the base language, regardless of depth\n if (translationLevel === 'field') {\n filteredObj = languageObjectFieldFilter(doc, baseLang);\n }\n //otherwise, we can refer to the schema and a list of stop types\n //to determine what should not be sent\n else {\n filteredObj = fieldFilter(doc, schema?.fields ?? [], stopTypes);\n }\n\n const serializedFields: Record<string, unknown> = {};\n\n for (const key in filteredObj) {\n if (filteredObj.hasOwnProperty(key) === false) continue;\n const value = filteredObj[key];\n\n if (typeof value === 'string') {\n serializedFields[key] = value;\n } else if (Array.isArray(value)) {\n serializedFields[key] = serializeArray(\n value.filter(\n (item): item is Record<string, unknown> | string =>\n typeof item === 'string' || isRecord(item)\n ),\n key,\n stopTypes,\n serializers\n );\n } else if (\n value &&\n isRecord(value) &&\n !stopTypes.find((stopType) => stopType == value?._type)\n ) {\n const serialized = serializeObject(\n value as TypedObject,\n stopTypes,\n serializers\n );\n serializedFields[key] =\n `<div class=\"${key}\" data-level='field'>${serialized}</div>`;\n }\n }\n\n //create a valid HTML file\n const rawHTMLBody = document.createElement('body');\n rawHTMLBody.innerHTML = serializeObject(\n serializedFields as TypedObject,\n stopTypes,\n serializers\n );\n\n const rawHTMLHead = document.createElement('head');\n const metaFields = ['_id', '_type', '_rev'];\n //save our metadata as meta tags so we can use them later on\n metaFields.forEach((field) => {\n const metaEl = document.createElement('meta');\n metaEl.setAttribute('name', field);\n metaEl.setAttribute('content', doc[field] as string);\n rawHTMLHead.appendChild(metaEl);\n });\n //encode version so we can use the correct deserialization methods\n const versionMeta = document.createElement('meta');\n versionMeta.setAttribute('name', 'version');\n versionMeta.setAttribute('content', '3');\n rawHTMLHead.appendChild(versionMeta);\n\n const rawHTML = document.createElement('html');\n rawHTML.appendChild(rawHTMLHead);\n rawHTML.appendChild(rawHTMLBody);\n\n return {\n name: doc._id,\n content: rawHTML.outerHTML,\n };\n };\n\n return {\n serializeDocument,\n fieldFilter,\n languageObjectFieldFilter,\n serializeArray,\n serializeObject,\n };\n};\n","import {\n findLocaleItem,\n isInternationalizedArrayField,\n isRecord,\n} from './detect';\n\n/**\n * Collapse every internationalized-array field in a value down to just its\n * source-locale `value`, recursing into nested objects/arrays.\n *\n * This runs *before* the generic HTML serializer so that the per-locale item\n * arrays never reach `serializeArray` (which would otherwise emit every\n * locale). After collapsing, an `internationalizedArrayString` field is a plain\n * string, an `internationalizedArrayText` is a plain string, Portable Text is a\n * plain `block` array, and a custom value object is a plain object — all shapes\n * the existing document-level serializer already round-trips.\n *\n * Returns `undefined` when a field has no source-locale entry, so the caller\n * drops it (nothing to translate) rather than emitting an empty field.\n */\nexport function collapseToSourceLocale(\n value: unknown,\n sourceLocale: string\n): unknown {\n if (isInternationalizedArrayField(value)) {\n const sourceItem = findLocaleItem(value, sourceLocale);\n if (!sourceItem) {\n return undefined;\n }\n // Recurse: the source value may itself contain nested localized fields.\n return collapseToSourceLocale(sourceItem.value, sourceLocale);\n }\n\n if (Array.isArray(value)) {\n return value\n .map((item) => collapseToSourceLocale(item, sourceLocale))\n .filter((item) => item !== undefined);\n }\n\n if (isRecord(value)) {\n const collapsed: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n const collapsedValue = collapseToSourceLocale(value[key], sourceLocale);\n if (collapsedValue !== undefined) {\n collapsed[key] = collapsedValue;\n }\n }\n return collapsed;\n }\n\n return value;\n}\n","import { SanityDocument, Schema } from 'sanity';\nimport { BaseDocumentDeserializer } from '../serialization/deserialize/BaseDocumentDeserializer';\nimport { BaseDocumentSerializer } from '../serialization/serialize/index';\nimport {\n defaultStopTypes,\n customSerializers,\n customBlockDeserializers,\n} from '../serialization/BaseSerializationConfig';\nimport { PortableTextHtmlComponents } from '@portabletext/to-html';\nimport { pluginConfig } from '../adapter/core';\nimport merge from 'lodash.merge';\nimport { deleteMatchingFields } from './applyDocuments';\nimport type { FieldMatcher } from '../adapter/types';\nimport { getPublishedId } from './documentIds';\nimport type {\n CustomDeserializers,\n TranslationLevel,\n} from '../serialization/types';\nimport { collapseToSourceLocale } from '../serialization/internationalizedArray/collapse';\n\nexport function deserializeDocument(document: string) {\n const deserializers = merge(\n { types: {} },\n pluginConfig.getAdditionalDeserializers()\n ) as CustomDeserializers;\n const blockDeserializers = [\n ...customBlockDeserializers,\n ...pluginConfig.getAdditionalBlockDeserializers(),\n ];\n const deserialized = BaseDocumentDeserializer.deserializeDocument(\n document,\n deserializers,\n blockDeserializers\n ) as SanityDocument;\n return deserialized;\n}\n\nexport function serializeDocument(\n document: SanityDocument,\n schema: Schema,\n baseLanguage: string,\n level: TranslationLevel = 'document'\n) {\n const stopTypes = [\n ...defaultStopTypes,\n ...pluginConfig.getAdditionalStopTypes(),\n ];\n const serializers = merge(\n customSerializers,\n pluginConfig.getAdditionalSerializers()\n ) satisfies Partial<PortableTextHtmlComponents>;\n\n let docToSerialize = stripIgnoredFields(\n document,\n pluginConfig.getIgnoreFields(),\n pluginConfig.getDedupeFields()\n );\n\n // The internationalized-array model collapses each localized field down to\n // its source-locale value, then serializes through the standard document\n // path so the existing HTML format and deserializer are reused as-is.\n let innerLevel: TranslationLevel = level;\n if (level === 'internationalizedArray') {\n docToSerialize = collapseToSourceLocale(\n docToSerialize,\n baseLanguage\n ) as SanityDocument;\n innerLevel = 'document';\n }\n\n const serialized = BaseDocumentSerializer(schema).serializeDocument(\n docToSerialize,\n innerLevel,\n baseLanguage,\n stopTypes,\n serializers\n );\n return serialized;\n}\n\nfunction stripIgnoredFields(\n document: SanityDocument,\n ignoreFields: FieldMatcher[],\n dedupeFields: FieldMatcher[]\n): SanityDocument {\n const fieldsToStrip = [...ignoreFields, ...dedupeFields];\n if (fieldsToStrip.length === 0) return document;\n\n const strippedDoc = JSON.parse(JSON.stringify(document)) as SanityDocument;\n\n deleteMatchingFields(\n getPublishedId(document._id),\n strippedDoc,\n fieldsToStrip\n );\n\n return strippedDoc;\n}\n","import { SanityClient, SanityDocument, Schema } from 'sanity';\nimport { pluginConfig } from '../adapter/core';\nimport { documentLevelPatch } from '../configuration/baseDocumentLevelConfig/documentLevelPatch';\nimport { internationalizedArrayPatch } from '../configuration/internationalizedArrayConfig/internationalizedArrayPatch';\nimport type {\n SerializedDocument,\n TranslationLevel,\n} from '../serialization/types';\nimport type { GTFile } from '../types';\nimport { serializeDocument } from '../utils/serialize';\n\n/**\n * A translation strategy bundles the serialize/patch pair for a given level.\n * The shared GT upload/enqueue/status/download workflow is identical across\n * strategies; only how a document is turned into the GT HTML file and how the\n * translated file is written back to Sanity differs.\n */\nexport type SanityTranslationAdapter = {\n level: TranslationLevel;\n serialize: (\n document: SanityDocument,\n schema: Schema,\n baseLanguage: string\n ) => SerializedDocument;\n patch: (\n docInfo: GTFile,\n deserialized: SanityDocument,\n localeId: string,\n client: SanityClient,\n mergeWithTargetLocale?: boolean\n ) => Promise<void>;\n};\n\nconst documentAdapter: SanityTranslationAdapter = {\n level: 'document',\n serialize: (document, schema, baseLanguage) =>\n serializeDocument(document, schema, baseLanguage, 'document'),\n patch: (docInfo, deserialized, localeId, client, mergeWithTargetLocale) =>\n documentLevelPatch(\n docInfo,\n deserialized,\n localeId,\n client,\n pluginConfig.getLanguageField(),\n mergeWithTargetLocale\n ),\n};\n\nconst internationalizedArrayAdapter: SanityTranslationAdapter = {\n level: 'internationalizedArray',\n serialize: (document, schema, baseLanguage) =>\n serializeDocument(document, schema, baseLanguage, 'internationalizedArray'),\n patch: (docInfo, deserialized, localeId, client) =>\n internationalizedArrayPatch(docInfo, deserialized, localeId, client),\n};\n\nfunction matchesFieldLevel(type: string | undefined): boolean {\n if (!type) {\n return false;\n }\n return pluginConfig\n .getFieldLevelDocuments()\n .some((filter) => filter.type === type);\n}\n\n/**\n * Resolve which strategy a document type uses:\n * - `document` → always document-level (default; unchanged).\n * - `internationalizedArray` → always the array strategy.\n * - `mixed` → array strategy for `fieldLevelDocuments`, else\n * document-level.\n */\nexport function getTranslationStrategyForType(\n type: string | undefined\n): SanityTranslationAdapter {\n const level = pluginConfig.getTranslationLevel();\n if (level === 'internationalizedArray') {\n return internationalizedArrayAdapter;\n }\n if (level === 'mixed') {\n return matchesFieldLevel(type)\n ? internationalizedArrayAdapter\n : documentAdapter;\n }\n return documentAdapter;\n}\n\nexport function getTranslationStrategy(\n document: SanityDocument\n): SanityTranslationAdapter {\n return getTranslationStrategyForType(document._type);\n}\n","import type { GTFile, Secrets } from '../types';\nimport { gt, overrideConfig } from '../adapter/core';\nimport { libraryDefaultLocale } from 'generaltranslation/internal';\nimport type { SerializedDocument } from '../serialization/types';\n\n// note: this function is used to create a new translation task\n// uploads files & calls the getTranslationTask function\nexport async function uploadFiles(\n documents: {\n info: GTFile;\n serializedDocument: SerializedDocument;\n }[],\n secrets: Secrets | null\n): Promise<Awaited<ReturnType<typeof gt.uploadSourceFiles>>> {\n overrideConfig(secrets);\n const uploadResult = await gt.uploadSourceFiles(\n documents.map(({ info, serializedDocument }) => ({\n source: {\n content: serializedDocument.content,\n fileName: `sanity/${info.documentId}`,\n fileId: info.documentId,\n fileFormat: 'HTML',\n locale: gt.sourceLocale || libraryDefaultLocale,\n versionId: info.versionId || undefined,\n },\n })),\n {\n sourceLocale: gt.sourceLocale || libraryDefaultLocale,\n }\n );\n return uploadResult;\n}\n","import { gt, overrideConfig, pluginConfig } from '../adapter/core';\nimport type { Secrets } from '../types';\n\nexport async function initProject(\n uploadResult: Awaited<ReturnType<typeof gt.uploadSourceFiles>>,\n options: { timeout?: number },\n secrets: Secrets\n): Promise<boolean> {\n overrideConfig(secrets);\n // Calculate timeout once for setup fetching\n // Accept number or numeric string, default to 600s\n const timeoutVal =\n options?.timeout !== undefined ? Number(options.timeout) : 600;\n const setupTimeoutMs =\n (Number.isFinite(timeoutVal) ? timeoutVal : 600) * 1000;\n\n const setupResult = await gt.setupProject(uploadResult.uploadedFiles, {\n locales: pluginConfig.getLocales(),\n });\n\n if (setupResult?.status === 'queued') {\n const { setupJobId } = setupResult;\n const start = Date.now();\n const pollInterval = 2000;\n\n let setupCompleted = false;\n let setupFailedMessage: string | null = null;\n\n while (true) {\n const status = await gt.checkJobStatus([setupJobId]);\n if (!status[0]) {\n setupFailedMessage = 'Unknown error';\n break;\n }\n if (status[0].status === 'completed') {\n setupCompleted = true;\n break;\n }\n if (status[0].status === 'failed') {\n setupFailedMessage = status[0].error?.message || 'Unknown error';\n break;\n }\n if (Date.now() - start > setupTimeoutMs) {\n setupFailedMessage = 'Timed out while waiting for setup generation';\n break;\n }\n await new Promise((r) => setTimeout(r, pollInterval));\n }\n\n if (setupCompleted) {\n // eslint-disable-next-line no-console\n console.log('Setup successfully completed');\n } else {\n // eslint-disable-next-line no-console\n console.log(\n `Setup ${setupFailedMessage ? 'failed' : 'timed out'} — proceeding without setup${\n setupFailedMessage ? ` (${setupFailedMessage})` : ''\n }`\n );\n }\n }\n\n return true;\n}\n","import { libraryDefaultLocale } from 'generaltranslation/internal';\nimport { gt, overrideConfig } from '../adapter/core';\nimport type { Secrets } from '../types';\n\nexport async function createJobs(\n uploadResult: Awaited<ReturnType<typeof gt.uploadSourceFiles>>,\n localeIds: string[],\n secrets: Secrets\n): Promise<Awaited<ReturnType<typeof gt.enqueueFiles>>> {\n overrideConfig(secrets);\n const enqueueResult = await gt.enqueueFiles(uploadResult.uploadedFiles, {\n sourceLocale: gt.sourceLocale || libraryDefaultLocale,\n targetLocales: localeIds,\n });\n return enqueueResult;\n}\n","import { gt, overrideConfig } from '../adapter/core';\nimport { FileProperties } from '../adapter/types';\nimport { DownloadedFile } from 'generaltranslation/types';\nimport type { Secrets } from '../types';\n\n/**\n * Downloads multiple translation files in a single batch request\n * @param files - Array of files to download with their output paths\n * @param maxRetries - Maximum number of retry attempts\n * @param retryDelay - Delay between retries in milliseconds\n * @returns Object containing successful and failed file IDs\n */\nexport async function downloadTranslations(\n files: FileProperties[],\n secrets: Secrets,\n maxRetries = 3,\n retryDelay = 1000\n): Promise<DownloadedFile[]> {\n overrideConfig(secrets);\n let retries = 0;\n\n while (retries <= maxRetries) {\n try {\n // Download the files\n const responseData = await gt.downloadFileBatch(\n files.map((file) => ({\n fileId: file.fileId,\n branchId: file.branchId,\n versionId: file.versionId,\n locale: file.locale,\n }))\n );\n const downloadedFiles = responseData.files || [];\n return downloadedFiles;\n } catch {\n // Increment retry counter and wait before next attempt\n retries++;\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n }\n }\n\n return [];\n}\n","import type { Secrets } from '../types';\nimport { gt, overrideConfig } from '../adapter/core';\nimport { FileProperties } from '../adapter/types';\nimport {\n createStableTranslationKey,\n createTranslationStatusKey,\n} from '../utils/documentIds';\n\nexport async function checkTranslationStatus(\n fileQueryData: FileProperties[],\n downloadStatus: {\n downloaded: Set<string>;\n failed: Set<string>;\n skipped: Set<string>;\n },\n secrets: Secrets\n) {\n overrideConfig(secrets);\n try {\n // Only query for files that haven't been downloaded yet\n const currentQueryData = fileQueryData.filter((item) => {\n const statusKey = createTranslationStatusKey(\n item.branchId,\n item.fileId,\n item.versionId,\n item.locale\n );\n const stableKey = createStableTranslationKey(\n item.branchId,\n item.fileId,\n item.locale\n );\n return (\n !downloadStatus.downloaded.has(statusKey) &&\n !downloadStatus.downloaded.has(stableKey) &&\n !downloadStatus.failed.has(statusKey) &&\n !downloadStatus.failed.has(stableKey) &&\n !downloadStatus.skipped.has(statusKey) &&\n !downloadStatus.skipped.has(stableKey)\n );\n });\n\n // If all files have been downloaded, we're done\n if (currentQueryData.length === 0) {\n return true;\n }\n // Check for translations\n const responseData = await gt.queryFileData({\n translatedFiles: currentQueryData,\n });\n\n const translations = responseData.translatedFiles || [];\n\n // Filter for ready translations\n const readyTranslations = translations.filter(\n (translation) => translation.completedAt\n );\n\n return readyTranslations;\n } catch (error) {\n console.error('Error checking translation status', error);\n return [];\n }\n}\n","import type { GTFile, TranslationFunctionContext } from '../types';\nimport { deserializeDocument } from '../utils/serialize';\nimport { getTranslationStrategyForType } from './strategy';\n\nexport async function importDocument(\n docInfo: GTFile,\n localeId: string,\n document: string,\n context: TranslationFunctionContext,\n mergeWithTargetLocale: boolean = false\n) {\n const { client } = context;\n const deserialized = deserializeDocument(document);\n // The serialized HTML carries the document `_type` as a <meta> tag, so the\n // deserialized doc tells us which strategy to import with. versionId is not\n // used for the patch since the _rev travels inside the deserialized HTML.\n const strategy = getTranslationStrategyForType(\n deserialized._type as string | undefined\n );\n return strategy.patch(\n docInfo,\n deserialized,\n localeId,\n client,\n mergeWithTargetLocale\n );\n}\n","import { SanityClient, SanityDocument } from 'sanity';\nimport { pluginConfig } from '../adapter/core';\n\ninterface Reference {\n _type: 'reference';\n _ref: string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst isReference = (value: unknown): value is Reference =>\n isRecord(value) &&\n value._type === 'reference' &&\n typeof value._ref === 'string';\n\n/**\n * Function that:\n * 1. Finds all references in the document\n * 2. Fetches the referenced documents, looks for the translation.metadata file for each reference\n * 3. Updates the document reference with the other translated document reference\n * 4. Returns the document with the updated references\n */\nexport async function resolveRefs(\n doc: SanityDocument,\n locale: string,\n client: SanityClient\n) {\n const references = findReferences(doc);\n\n if (references.length === 0) {\n return doc;\n }\n\n const translatedRefs = await resolveTranslatedReferences(\n references,\n locale,\n client\n );\n return updateDocumentReferences(doc, translatedRefs);\n}\n\n/**\n * Recursively finds all references in a document or object\n */\nfunction findReferences(\n obj: unknown,\n path: string[] = []\n): { ref: Reference; path: string[] }[] {\n if (!obj || typeof obj !== 'object') {\n return [];\n }\n\n const references: { ref: Reference; path: string[] }[] = [];\n\n if (isReference(obj)) {\n references.push({ ref: obj, path });\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n references.push(...findReferences(item, [...path, index.toString()]));\n });\n } else if (isRecord(obj)) {\n Object.keys(obj).forEach((key) => {\n references.push(...findReferences(obj[key], [...path, key]));\n });\n }\n\n return references;\n}\n\n/**\n * Fetches translation metadata and resolves translated references\n */\nasync function resolveTranslatedReferences(\n references: { ref: Reference; path: string[] }[],\n locale: string,\n client: SanityClient\n): Promise<Map<string, string>> {\n const refIds = references.map((r) => r.ref._ref);\n const translatedRefs = new Map<string, string>();\n\n if (refIds.length === 0) {\n return translatedRefs;\n }\n\n const sourceLocale = pluginConfig.getSourceLocale();\n\n // Optimized GROQ query that directly returns only the needed translation pairs\n const query = `*[_type == \"translation.metadata\" && count(translations[language == $sourceLocale && value._ref in $refIds]) > 0] {\n \"originalRef\": translations[language == $sourceLocale][0].value._ref,\n \"translatedRefs\": translations[language == $locale].value._ref\n }[defined(originalRef) && count(translatedRefs) > 0]`;\n\n const translationPairs: { originalRef: string; translatedRefs: string[] }[] =\n await client.fetch(query, { refIds, sourceLocale, locale });\n\n // Build the translation map\n for (const { originalRef, translatedRefs: localeRefs } of translationPairs) {\n const translatedRef = localeRefs[localeRefs.length - 1];\n translatedRefs.set(originalRef, translatedRef);\n }\n\n return translatedRefs;\n}\n\n/**\n * Updates document references with their translated versions\n */\nfunction updateDocumentReferences(\n doc: SanityDocument,\n translatedRefs: Map<string, string>\n): SanityDocument {\n return updateReferencesRecursive(doc, translatedRefs) as SanityDocument;\n}\n\n/**\n * Recursively updates references in an object\n */\nfunction updateReferencesRecursive(\n obj: unknown,\n translatedRefs: Map<string, string>\n): unknown {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n if (isReference(obj) && translatedRefs.has(obj._ref)) {\n return {\n ...obj,\n _ref: translatedRefs.get(obj._ref),\n };\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => updateReferencesRecursive(item, translatedRefs));\n }\n\n const updated: Record<string, unknown> = {};\n Object.keys(obj).forEach((key) => {\n updated[key] = updateReferencesRecursive(\n (obj as Record<string, unknown>)[key],\n translatedRefs\n );\n });\n\n return updated;\n}\n","import { SanityClient } from 'sanity';\nimport { pluginConfig } from '../adapter/core';\nimport { getPublishedId } from '../utils/documentIds';\nimport { findLatestDraft } from '../configuration/utils/findLatestDraft';\n\nexport async function findTranslatedDocuments(\n documentId: string,\n client: SanityClient\n) {\n const documents = await client.fetch(\n `*[_type == \"translation.metadata\" && references($documentId)]`\n );\n return documents;\n}\n\nexport async function findTranslatedDocumentForLocale(\n sourceDocumentId: string,\n localeId: string,\n client: SanityClient\n) {\n const cleanDocId = getPublishedId(sourceDocumentId);\n\n // Use the last locale entry defensively. Older versions could create\n // duplicate locale entries when bulk imports raced.\n const query = `*[\n _type == \"translation.metadata\" &&\n (\n translations[language == $sourceLocale][0].value._ref == $cleanDocId\n ) &&\n defined(translations[language == $localeId])\n ][0].translations[language == $localeId].value._ref`;\n\n const translatedDocIds = await client.fetch(query, {\n sourceLocale: pluginConfig.getSourceLocale(),\n cleanDocId,\n localeId,\n });\n\n const translatedDocId = translatedDocIds?.[translatedDocIds.length - 1];\n if (!translatedDocId) return null;\n\n return (await findLatestDraft(translatedDocId, client)) || null;\n}\n\nexport async function findDocument(documentId: string, client: SanityClient) {\n const query = `*[_id == $id]`;\n const params = { id: documentId };\n const document = await client.fetch(query, params);\n return document[0] || null;\n}\n","import { GTFile, TranslationFunctionContext } from '../types';\nimport { pluginConfig } from '../adapter/core';\nimport { importDocument } from '../translation/importDocument';\nimport { getPublishedId } from './documentIds';\n\nexport interface BatchProcessorOptions<T = unknown, R = unknown> {\n batchSize?: number;\n getConcurrencyKey?: (item: T) => string | undefined;\n onProgress?: (current: number, total: number) => void;\n onItemSuccess?: (item: T, result: R) => void;\n onItemFailure?: (item: T, error: unknown) => void;\n}\n\nexport interface ImportBatchItem {\n docInfo: GTFile;\n locale: string;\n data: string;\n translationContext: TranslationFunctionContext;\n key: string;\n}\n\nexport async function processBatch<T, R = unknown>(\n items: T[],\n processor: (item: T) => R | Promise<R>,\n options: BatchProcessorOptions<T, Awaited<R>> = {}\n): Promise<{\n successCount: number;\n failureCount: number;\n successfulItems: Awaited<R>[];\n failedItems: { item: T; error: unknown }[];\n}> {\n const {\n batchSize = 20,\n getConcurrencyKey,\n onProgress,\n onItemSuccess,\n onItemFailure,\n } = options;\n\n let successCount = 0;\n let failureCount = 0;\n const successfulItems: Awaited<R>[] = [];\n const failedItems: { item: T; error: unknown }[] = [];\n\n for (let i = 0; i < items.length; i += batchSize) {\n const batch = items.slice(i, i + batchSize);\n\n const pendingByKey = new Map<string, Promise<void>>();\n\n const batchPromises: Promise<\n | { success: true; item: T; result: Awaited<R> }\n | { success: false; item: T; error: unknown }\n >[] = batch.map(async (item) => {\n const concurrencyKey = getConcurrencyKey?.(item);\n const pending = concurrencyKey\n ? pendingByKey.get(concurrencyKey)\n : undefined;\n\n let release: () => void = () => {};\n const current = new Promise<void>((resolve) => {\n release = resolve;\n });\n\n if (concurrencyKey) {\n pendingByKey.set(concurrencyKey, current);\n }\n\n try {\n if (pending) {\n await pending;\n }\n\n const result = await processor(item);\n onItemSuccess?.(item, result);\n return { success: true as const, item, result };\n } catch (error) {\n onItemFailure?.(item, error);\n return { success: false as const, item, error };\n } finally {\n release();\n if (concurrencyKey && pendingByKey.get(concurrencyKey) === current) {\n pendingByKey.delete(concurrencyKey);\n }\n }\n });\n\n const batchResults = await Promise.all(batchPromises);\n\n batchResults.forEach((result) => {\n if (result.success) {\n successCount++;\n successfulItems.push(result.result);\n } else {\n failureCount++;\n failedItems.push({ item: result.item, error: result.error });\n }\n });\n\n onProgress?.(i + batch.length, items.length);\n }\n\n return { successCount, failureCount, successfulItems, failedItems };\n}\n\nexport async function processImportBatch(\n items: ImportBatchItem[],\n options: BatchProcessorOptions<ImportBatchItem, string> = {}\n): Promise<{\n successCount: number;\n failureCount: number;\n successfulImports: string[];\n failedItems: { item: ImportBatchItem; error: unknown }[];\n}> {\n const successfulImports: string[] = [];\n\n const result = await processBatch(\n items,\n async (item: ImportBatchItem) => {\n await importDocument(\n item.docInfo,\n item.locale,\n item.data,\n item.translationContext,\n false\n );\n return item.key;\n },\n {\n ...options,\n // Serialize all locales of the same document when imports may patch the\n // source document in place: internationalized-array imports do a\n // read-merge-set, so concurrent locale imports would clobber each other\n // (last write wins). Document-level imports write to separate per-locale\n // documents and stay parallel. In 'mixed' mode the per-document strategy\n // is only known after deserialization, so serialize conservatively.\n getConcurrencyKey: (item: ImportBatchItem) =>\n pluginConfig.getTranslationLevel() === 'document'\n ? undefined\n : getPublishedId(item.docInfo.documentId),\n onItemSuccess: (item: ImportBatchItem, key: string) => {\n successfulImports.push(key);\n options.onItemSuccess?.(item, key);\n },\n onItemFailure: (item: ImportBatchItem, error: unknown) => {\n console.error(\n `Failed to import ${item.docInfo.documentId} (${item.locale}):`,\n error\n );\n options.onItemFailure?.(item, error);\n },\n }\n );\n\n return {\n ...result,\n successfulImports,\n };\n}\n","import { Secrets, TranslationFunctionContext } from '../types';\nimport { downloadTranslations } from '../translation/downloadTranslations';\nimport { processImportBatch, ImportBatchItem } from './batchProcessor';\nimport type { FileProperties, TranslationStatus } from '../adapter/types';\nimport { createStableTranslationKey, getPublishedId } from './documentIds';\n\nexport interface ImportResult {\n successCount: number;\n failureCount: number;\n successfulImports: string[];\n}\n\nexport interface ImportOptions {\n filterReadyFiles?: (key: string, status: TranslationStatus) => boolean;\n onProgress?: (current: number, total: number) => void;\n onImportSuccess?: (key: string) => void;\n}\n\nexport async function getReadyFilesForImport(\n translationStatuses: Map<string, TranslationStatus>,\n options: ImportOptions = {}\n): Promise<FileProperties[]> {\n const { filterReadyFiles = () => true } = options;\n const readyFilesByDocumentLocale = new Map<string, FileProperties>();\n\n for (const [key, status] of translationStatuses.entries()) {\n if (status.isReady && status.fileData && filterReadyFiles(key, status)) {\n const fileData = {\n fileId: getPublishedId(status.fileData.fileId),\n versionId: status.fileData.versionId,\n branchId: status.fileData.branchId,\n locale: status.fileData.locale,\n };\n readyFilesByDocumentLocale.set(\n createStableTranslationKey(\n fileData.branchId,\n fileData.fileId,\n fileData.locale\n ),\n fileData\n );\n }\n }\n\n return Array.from(readyFilesByDocumentLocale.values());\n}\n\nexport async function importTranslations(\n readyFiles: FileProperties[],\n secrets: Secrets,\n translationContext: TranslationFunctionContext,\n options: ImportOptions = {}\n): Promise<ImportResult> {\n if (readyFiles.length === 0) {\n return { successCount: 0, failureCount: 0, successfulImports: [] };\n }\n\n const downloadedFiles = await downloadTranslations(readyFiles, secrets);\n\n const importItems: ImportBatchItem[] = downloadedFiles.map((file) => {\n const data =\n typeof file.data === 'string'\n ? file.data\n : JSON.stringify(file.data ?? '');\n return {\n docInfo: {\n documentId: file.fileId,\n versionId: file.versionId,\n },\n locale: file.locale!,\n data,\n translationContext,\n key: `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`,\n };\n });\n\n const result = await processImportBatch(importItems, {\n onProgress: options.onProgress,\n onItemSuccess: (item, key) => {\n options.onImportSuccess?.(key);\n },\n });\n\n return {\n successCount: result.successCount,\n failureCount: result.failureCount,\n successfulImports: result.successfulImports,\n };\n}\n","import { SanityClient } from 'sanity';\nimport { processBatch } from '../utils/batchProcessor';\nimport { findDocument } from './findDocuments';\nimport { getPublishedId } from '../utils/documentIds';\n\nexport async function publishDocument(\n documentId: string,\n client: SanityClient\n) {\n try {\n // only publish if the document is a draft\n if (documentId.startsWith('drafts.')) {\n await client.action(\n {\n actionType: 'sanity.action.document.publish',\n draftId: documentId,\n publishedId: getPublishedId(documentId),\n },\n {}\n );\n }\n } catch (error) {\n console.error('Error publishing document', error);\n }\n}\n\nexport async function publishTranslations(\n documentIds: string[],\n client: SanityClient\n) {\n const publishedDocumentIds: string[] = [];\n await processBatch(\n documentIds,\n async (documentId) => {\n const document = await findDocument(`drafts.${documentId}`, client);\n if (!document) {\n return { documentId, published: false };\n }\n await publishDocument(document._id, client);\n publishedDocumentIds.push(documentId);\n return { documentId, published: true };\n },\n {\n onItemFailure: (documentId, error) => {\n console.error(`Failed to publish document ${documentId}:`, error);\n },\n }\n );\n return publishedDocumentIds;\n}\n","import type { Adapter, Secrets } from '../types';\nimport { gt, pluginConfig } from './core';\n\n// note: this function is used to get the available locales for a project\nexport const getLocales: Adapter['getLocales'] = async (\n _secrets: Secrets | null\n) => {\n return pluginConfig.getLocales().map((locale: string) => ({\n localeId: locale,\n description: gt.getLocaleProperties(locale).name,\n enabled: true,\n }));\n};\n","import React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useEffect,\n useRef,\n ReactNode,\n} from 'react';\nimport { SanityDocument, useSchema } from 'sanity';\nimport { useToast } from '@sanity/ui';\nimport { useClient } from '../hooks/useClient';\nimport { useSecrets } from '../hooks/useSecrets';\nimport {\n GTFile,\n Secrets,\n TranslationLocale,\n TranslationFunctionContext,\n} from '../types';\nimport { gt, overrideConfig, pluginConfig } from '../adapter/core';\nimport { getTranslationStrategy } from '../translation/strategy';\nimport { uploadFiles } from '../translation/uploadFiles';\nimport { initProject } from '../translation/initProject';\nimport { createJobs } from '../translation/createJobs';\nimport { downloadTranslations } from '../translation/downloadTranslations';\nimport { checkTranslationStatus } from '../translation/checkTranslationStatus';\nimport { importDocument } from '../translation/importDocument';\nimport { resolveRefs } from '../sanity-api/resolveRefs';\nimport { findTranslatedDocumentForLocale } from '../sanity-api/findDocuments';\nimport {\n getReadyFilesForImport,\n importTranslations,\n ImportOptions,\n} from '../utils/importUtils';\nimport { processBatch } from '../utils/batchProcessor';\nimport { publishTranslations } from '../sanity-api/publishDocuments';\nimport { getLocales } from '../adapter/getLocales';\nimport type { FileProperties, TranslationStatus } from '../adapter/types';\nimport {\n createStableTranslationKey,\n createTranslationStatusKey,\n dedupeDocumentsPreferDraft,\n getDocumentPublishedId,\n getPublishedId,\n} from '../utils/documentIds';\n\ninterface ImportProgress {\n current: number;\n total: number;\n isImporting: boolean;\n}\n\ninterface DownloadStatus {\n downloaded: Set<string>;\n failed: Set<string>;\n skipped: Set<string>;\n}\n\ntype ExistingTranslationMetadata = {\n sourceDocId: string;\n existingTranslations?: string[];\n};\n\ntype TranslationDocumentMetadata = {\n translationDocs?: { docId?: string }[];\n};\n\ninterface TranslationsContextType {\n // State\n isBusy: boolean;\n documents: SanityDocument[];\n locales: TranslationLocale[];\n autoRefresh: boolean;\n autoImport: boolean;\n autoPatchReferences: boolean;\n autoPublish: boolean;\n loadingDocuments: boolean;\n importProgress: ImportProgress;\n importedTranslations: Set<string>;\n existingTranslations: Set<string>;\n downloadStatus: DownloadStatus;\n translationStatuses: Map<string, TranslationStatus>;\n isRefreshing: boolean;\n loadingSecrets: boolean;\n secrets: Secrets | null;\n branchId: string | undefined;\n // Version to use for translation status keys and GT file queries. Prefers\n // the _rev pinned at upload time over the live _rev, so in-place imports\n // (internationalized arrays) bumping the document _rev don't orphan the\n // statuses of the version actually uploaded to GT.\n getVersionId: (document: SanityDocument) => string;\n\n // Actions\n setLocales: (locales: TranslationLocale[]) => void;\n setAutoRefresh: (value: boolean) => void;\n setAutoImport: (value: boolean) => void;\n setAutoPatchReferences: (value: boolean) => void;\n setAutoPublish: (value: boolean) => void;\n handleTranslateAll: () => Promise<void>;\n handleImportAll: () => Promise<void>;\n handleImportMissing: () => Promise<void>;\n handleRefreshAll: () => Promise<void>;\n handleImportDocument: (\n documentId: string,\n versionId: string,\n localeId: string\n ) => Promise<void>;\n handlePatchDocumentReferences: () => Promise<number>;\n handlePublishAllTranslations: () => Promise<number>;\n}\n\nconst TranslationsContext = createContext<TranslationsContextType | null>(null);\n\n// Pinned upload versions are mirrored to sessionStorage so they survive a\n// Studio page refresh: falling back to the live document._rev after a refresh\n// would query GT with a version that was never uploaded (in-place imports bump\n// the _rev), making completed translations show as \"not started\". Keyed by\n// project + dataset so Studios sharing an origin don't collide.\nconst getUploadedVersionsStorageKey = (\n projectId: string | undefined,\n dataset: string | undefined\n) => `gt-sanity:uploadedVersions:${projectId ?? ''}:${dataset ?? ''}`;\n\nfunction readUploadedVersions(storageKey: string): Map<string, string> {\n try {\n const raw = window.sessionStorage.getItem(storageKey);\n if (!raw) return new Map();\n const parsed: unknown = JSON.parse(raw);\n if (!isPlainRecord(parsed)) return new Map();\n return new Map(\n Object.entries(parsed).filter(\n (entry): entry is [string, string] => typeof entry[1] === 'string'\n )\n );\n } catch {\n return new Map();\n }\n}\n\nfunction writeUploadedVersions(\n storageKey: string,\n versions: Map<string, string>\n): void {\n try {\n window.sessionStorage.setItem(\n storageKey,\n JSON.stringify(Object.fromEntries(versions))\n );\n } catch {\n // sessionStorage unavailable (SSR, private mode, quota) — pinned versions\n // fall back to in-memory only.\n }\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport const useTranslations = () => {\n const context = useContext(TranslationsContext);\n if (!context) {\n throw new Error('useTranslations must be used within TranslationsProvider');\n }\n return context;\n};\n\ninterface TranslationsProviderProps {\n children: ReactNode;\n singleDocument?: SanityDocument | null;\n}\n\nexport const TranslationsProvider: React.FC<TranslationsProviderProps> = ({\n children,\n singleDocument,\n}) => {\n const [isBusy, setIsBusy] = useState(false);\n const [documents, setDocuments] = useState<SanityDocument[]>([]);\n const [locales, setLocales] = useState<TranslationLocale[]>([]);\n const [autoRefresh, setAutoRefresh] = useState(false);\n const [autoImport, setAutoImport] = useState(false);\n const [autoPatchReferences, setAutoPatchReferences] = useState(false);\n const [autoPublish, setAutoPublish] = useState(false);\n const [loadingDocuments, setLoadingDocuments] = useState(false);\n const [importProgress, setImportProgress] = useState<ImportProgress>({\n current: 0,\n total: 0,\n isImporting: false,\n });\n const [importedTranslations, setImportedTranslations] = useState<Set<string>>(\n new Set()\n );\n const [existingTranslations, setExistingTranslations] = useState<Set<string>>(\n new Set()\n );\n const [downloadStatus, setDownloadStatus] = useState<DownloadStatus>({\n downloaded: new Set<string>(),\n failed: new Set<string>(),\n skipped: new Set<string>(),\n });\n const downloadStatusRef = useRef(downloadStatus);\n const [translationStatuses, setTranslationStatuses] = useState<\n Map<string, TranslationStatus>\n >(new Map());\n const [isRefreshing, setIsRefreshing] = useState(false);\n\n const client = useClient();\n const { projectId, dataset } = client.config();\n const uploadedVersionsStorageKey = getUploadedVersionsStorageKey(\n projectId,\n dataset\n );\n const [uploadedVersions, setUploadedVersions] = useState<Map<string, string>>(\n () => readUploadedVersions(uploadedVersionsStorageKey)\n );\n const schema = useSchema();\n const translationContext: TranslationFunctionContext = { client, schema };\n const toast = useToast();\n const { loading: loadingSecrets, secrets } = useSecrets<Secrets>(\n pluginConfig.getSecretsNamespace()\n );\n const [branchId, setBranchId] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n downloadStatusRef.current = downloadStatus;\n }, [downloadStatus]);\n\n const getVersionId = useCallback(\n (document: SanityDocument) =>\n uploadedVersions.get(getDocumentPublishedId(document)) ?? document._rev,\n [uploadedVersions]\n );\n\n const fetchDocuments = useCallback(async () => {\n setLoadingDocuments(true);\n try {\n if (singleDocument) {\n setDocuments([singleDocument]);\n return;\n }\n\n const translateDocuments = pluginConfig.getTranslateDocuments();\n\n const filterConditions = translateDocuments\n .map((filter) => {\n if (filter.type && filter.documentId) {\n return `(_type == \"${filter.type}\" && _id == \"${filter.documentId}\")`;\n } else if (filter.type) {\n return `_type == \"${filter.type}\"`;\n } else if (filter.documentId) {\n return `_id == \"${filter.documentId}\"`;\n }\n return null;\n })\n .filter(Boolean);\n\n const languageField = pluginConfig.getLanguageField();\n const sourceLocale = pluginConfig.getSourceLocale();\n const languageFilter = `(!defined(${languageField}) || ${languageField} == \"${sourceLocale}\")`;\n\n let query;\n if (filterConditions.length === 0) {\n query = `*[!(_type in [\"system.group\"]) && !(_id in path(\"_.**\")) && ${languageFilter}]`;\n } else {\n const filterQuery = filterConditions.join(' || ');\n query = `*[!(_type in [\"system.group\"]) && !(_id in path(\"_.**\")) && (${filterQuery}) && ${languageFilter}]`;\n }\n\n const docs = await client.fetch(query);\n setDocuments(dedupeDocumentsPreferDraft(docs));\n } catch {\n toast.push({\n title:\n 'Documents could not be loaded. Check your Sanity connection and try refreshing.',\n status: 'error',\n closable: true,\n });\n } finally {\n setLoadingDocuments(false);\n }\n }, [client, singleDocument]);\n\n const fetchLocales = useCallback(async () => {\n if (!secrets) return;\n try {\n const availableLocales = await getLocales(secrets);\n setLocales(availableLocales);\n } catch {\n toast.push({\n title:\n 'Locales could not be loaded. Check your General Translation credentials and try again.',\n status: 'error',\n closable: true,\n });\n }\n }, [secrets]);\n\n const fetchExistingTranslations = useCallback(async () => {\n if (!documents.length || !locales.length) return;\n\n try {\n const sourceLocale = pluginConfig.getSourceLocale();\n const availableLocaleIds = locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => locale.localeId);\n\n const documentIds = documents.map(getDocumentPublishedId);\n\n const query = `*[\n _type == 'translation.metadata' &&\n translations[language == $sourceLocale][0].value._ref in $documentIds\n ] {\n 'sourceDocId': translations[language == $sourceLocale][0].value._ref,\n 'existingTranslations': translations[language in $localeIds].language\n }`;\n\n const existingMetadata = await client.fetch<\n ExistingTranslationMetadata[]\n >(query, {\n sourceLocale,\n documentIds,\n localeIds: availableLocaleIds,\n });\n\n const existing = new Set<string>();\n existingMetadata.forEach((metadata) => {\n metadata.existingTranslations?.forEach((localeId: string) => {\n if (localeId !== sourceLocale) {\n existing.add(\n createStableTranslationKey(\n undefined,\n metadata.sourceDocId,\n localeId\n )\n );\n }\n });\n });\n\n setExistingTranslations(existing);\n } catch (error) {\n console.error('Error fetching existing translations:', error);\n toast.push({\n title:\n 'Existing translations could not be loaded. Try refreshing before importing.',\n status: 'error',\n closable: true,\n });\n }\n }, [documents, locales, client]);\n\n const handleTranslateAll = useCallback(async () => {\n if (!secrets || documents.length === 0) return;\n\n setIsBusy(true);\n\n try {\n const availableLocaleIds = locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => locale.localeId);\n\n const transformedDocuments = documents\n .map((doc) => {\n const { [pluginConfig.getLanguageField()]: _, ...cleanDoc } = doc;\n const baseLanguage = pluginConfig.getSourceLocale();\n try {\n const strategy = getTranslationStrategy(doc);\n const serialized = strategy.serialize(\n cleanDoc as typeof doc,\n schema,\n baseLanguage\n );\n return {\n info: {\n documentId: getDocumentPublishedId(doc),\n versionId: doc._rev,\n },\n serializedDocument: serialized,\n };\n } catch (error) {\n console.error('Error transforming document', doc._id, error);\n }\n return null;\n })\n .filter((doc) => doc !== null);\n\n const uploadResult = await uploadFiles(transformedDocuments, secrets);\n await initProject(uploadResult, { timeout: 600 }, secrets);\n await createJobs(uploadResult, availableLocaleIds, secrets);\n\n // Pin the _rev each file was uploaded under. GT status queries need the\n // exact uploaded versionId, and the live _rev moves on (in-place array\n // imports bump it), so status lookups go through getVersionId instead.\n // Persisted to sessionStorage so the pins survive a page refresh.\n const nextUploadedVersions = new Map(uploadedVersions);\n for (const { info } of transformedDocuments) {\n if (info.versionId) {\n nextUploadedVersions.set(info.documentId, info.versionId);\n }\n }\n writeUploadedVersions(uploadedVersionsStorageKey, nextUploadedVersions);\n setUploadedVersions(nextUploadedVersions);\n\n toast.push({\n title: `Translation tasks created for ${documents.length} documents`,\n status: 'success',\n closable: true,\n });\n } catch {\n toast.push({\n title:\n 'Translation tasks could not be created. No documents were changed. Try again or check the console for details.',\n status: 'error',\n closable: true,\n });\n } finally {\n setIsBusy(false);\n }\n }, [\n secrets,\n documents,\n locales,\n schema,\n uploadedVersions,\n uploadedVersionsStorageKey,\n ]);\n\n const handleImportAll = useCallback(async () => {\n if (!secrets || documents.length === 0 || !branchId) return;\n\n setIsBusy(true);\n\n try {\n const readyFiles = await getReadyFilesForImport(translationStatuses);\n\n if (readyFiles.length === 0) {\n toast.push({\n title: 'No ready translations to import',\n status: 'warning',\n closable: true,\n });\n return;\n }\n\n setImportProgress({\n current: 0,\n total: readyFiles.length,\n isImporting: true,\n });\n\n const importOptions: ImportOptions = {\n onProgress: (current, total) => {\n setImportProgress({\n current,\n total,\n isImporting: true,\n });\n },\n onImportSuccess: (key) => {\n setImportedTranslations((prev) => new Set([...prev, key]));\n },\n };\n\n const result = await importTranslations(\n readyFiles,\n secrets,\n translationContext,\n importOptions\n );\n\n if (result.successfulImports.length > 0) {\n setDownloadStatus((prev) => ({\n ...prev,\n downloaded: new Set([\n ...prev.downloaded,\n ...result.successfulImports,\n ]),\n }));\n }\n\n toast.push({\n title: `Imported ${result.successCount} translations${result.failureCount > 0 ? `, ${result.failureCount} failed` : ''}`,\n status: result.successCount > 0 ? 'success' : 'error',\n closable: true,\n });\n } catch (error) {\n console.error('Error importing translations:', error);\n toast.push({\n title:\n 'Translations could not be imported. No documents were changed. Try again or check the console for details.',\n status: 'error',\n closable: true,\n });\n } finally {\n setIsBusy(false);\n setImportProgress({ current: 0, total: 0, isImporting: false });\n }\n }, [\n secrets,\n documents,\n translationStatuses,\n downloadStatus,\n translationContext,\n branchId,\n ]);\n\n const getExistingTranslations = useCallback(\n async (\n documentIds: string[],\n localeIds: string[],\n branchId: string\n ): Promise<Set<string>> => {\n const sourceLocale = pluginConfig.getSourceLocale();\n\n const query = `*[\n _type == 'translation.metadata' &&\n translations[language == $sourceLocale][0].value._ref in $documentIds\n ] {\n _rev,\n 'sourceDocId': translations[language == $sourceLocale][0].value._ref,\n 'existingTranslations': translations[language in $localeIds].language\n }`;\n\n const existingMetadata = await client.fetch<\n ExistingTranslationMetadata[]\n >(query, {\n sourceLocale,\n documentIds,\n localeIds,\n });\n\n const existing = new Set<string>();\n existingMetadata.forEach((metadata) => {\n metadata.existingTranslations?.forEach((localeId: string) => {\n if (localeId !== sourceLocale) {\n existing.add(\n createStableTranslationKey(\n branchId,\n metadata.sourceDocId,\n localeId\n )\n );\n }\n });\n });\n\n return existing;\n },\n [client]\n );\n\n const handleImportMissing = useCallback(async () => {\n if (!secrets || documents.length === 0 || !branchId) return;\n\n setIsBusy(true);\n\n try {\n const availableLocaleIds = locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => locale.localeId);\n\n const documentIds = documents.map(getDocumentPublishedId);\n\n const existingTranslations = await getExistingTranslations(\n documentIds,\n availableLocaleIds,\n branchId\n );\n\n const readyFiles = await getReadyFilesForImport(translationStatuses, {\n filterReadyFiles: (_key, status) =>\n !existingTranslations.has(\n createStableTranslationKey(\n branchId,\n status.fileData.fileId,\n status.fileData.locale\n )\n ),\n });\n\n if (readyFiles.length === 0) {\n toast.push({\n title: 'No missing translations to import',\n status: 'warning',\n closable: true,\n });\n return;\n }\n\n setImportProgress({\n current: 0,\n total: readyFiles.length,\n isImporting: true,\n });\n\n const importOptions: ImportOptions = {\n onProgress: (current, total) => {\n setImportProgress({\n current,\n total,\n isImporting: true,\n });\n },\n onImportSuccess: (key) => {\n setImportedTranslations((prev) => new Set([...prev, key]));\n setExistingTranslations((prev) => new Set([...prev, key]));\n },\n };\n\n const result = await importTranslations(\n readyFiles,\n secrets,\n translationContext,\n importOptions\n );\n\n if (result.successfulImports.length > 0) {\n setDownloadStatus((prev) => ({\n ...prev,\n downloaded: new Set([\n ...prev.downloaded,\n ...result.successfulImports,\n ]),\n }));\n }\n\n toast.push({\n title: `Imported ${result.successCount} missing translations${result.failureCount > 0 ? `, ${result.failureCount} failed` : ''}`,\n status: result.successCount > 0 ? 'success' : 'error',\n closable: true,\n });\n } catch (error) {\n console.error('Error importing missing translations:', error);\n toast.push({\n title:\n 'Missing translations could not be imported. No documents were changed. Try again or check the console for details.',\n status: 'error',\n closable: true,\n });\n } finally {\n setIsBusy(false);\n setImportProgress({ current: 0, total: 0, isImporting: false });\n }\n }, [\n secrets,\n documents,\n locales,\n translationStatuses,\n downloadStatus,\n translationContext,\n getExistingTranslations,\n branchId,\n ]);\n\n const handleGetBranchId = useCallback(\n async (secrets: Secrets) => {\n overrideConfig(secrets);\n const defaultBranch = await gt.createBranch({\n branchName: 'main',\n defaultBranch: true,\n });\n setBranchId(defaultBranch.branch.id);\n },\n [secrets]\n );\n\n const handleRefreshAll = useCallback(async () => {\n if (!secrets || documents.length === 0 || !branchId) return;\n setIsRefreshing(true);\n\n try {\n const availableLocaleIds = locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => locale.localeId);\n\n const fileQueryData: FileProperties[] = [];\n for (const doc of documents) {\n for (const localeId of availableLocaleIds) {\n const documentId = getDocumentPublishedId(doc);\n fileQueryData.push({\n versionId: getVersionId(doc),\n fileId: documentId,\n branchId: branchId,\n locale: localeId,\n });\n }\n }\n\n const readyTranslations = await checkTranslationStatus(\n fileQueryData,\n downloadStatusRef.current,\n secrets\n );\n\n setTranslationStatuses(() => {\n const newStatuses = new Map();\n\n for (const doc of documents) {\n for (const localeId of availableLocaleIds) {\n const documentId = getDocumentPublishedId(doc);\n const versionId = getVersionId(doc);\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n versionId,\n localeId\n );\n newStatuses.set(key, { progress: 0, isReady: false });\n }\n }\n\n if (Array.isArray(readyTranslations)) {\n for (const translation of readyTranslations) {\n const key = createTranslationStatusKey(\n branchId,\n translation.fileId,\n translation.versionId,\n translation.locale\n );\n newStatuses.set(key, {\n progress: 100,\n isReady: true,\n fileData: {\n versionId: translation.versionId,\n fileId: translation.fileId,\n branchId: translation.branchId,\n locale: translation.locale,\n },\n });\n }\n }\n\n return newStatuses;\n });\n\n toast.push({\n title: `Refreshed status for ${documents.length} documents`,\n status: 'success',\n closable: true,\n });\n } catch (error) {\n console.error('Error refreshing translation status:', error);\n toast.push({\n title:\n 'Translation status could not be refreshed. Try again before importing.',\n status: 'error',\n closable: true,\n });\n } finally {\n setIsRefreshing(false);\n }\n }, [secrets, documents, locales, branchId, getVersionId]);\n\n const handleImportDocument = useCallback(\n async (documentId: string, versionId: string, localeId: string) => {\n if (!secrets) return;\n\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n versionId,\n localeId\n );\n const status = translationStatuses.get(key);\n\n if (!status?.isReady || !status.fileData) {\n toast.push({\n title: `Translation not ready for ${documentId} (${localeId})`,\n status: 'warning',\n closable: true,\n });\n return;\n }\n\n const document = documents.find(\n (doc) => getDocumentPublishedId(doc) === getPublishedId(documentId)\n );\n\n if (!document) {\n toast.push({\n title: `Document ${documentId} not found`,\n status: 'error',\n closable: true,\n });\n return;\n }\n\n try {\n const downloadedFiles = await downloadTranslations(\n [\n {\n fileId: status.fileData.fileId,\n branchId: status.fileData.branchId,\n versionId: status.fileData.versionId,\n locale: status.fileData.locale,\n },\n ],\n secrets\n );\n\n if (downloadedFiles.length > 0) {\n try {\n const docInfo: GTFile = {\n documentId: getPublishedId(documentId),\n versionId: document._rev,\n };\n\n await importDocument(\n docInfo,\n localeId,\n downloadedFiles[0].data,\n translationContext,\n false\n );\n\n setDownloadStatus((prev) => ({\n ...prev,\n downloaded: new Set([...prev.downloaded, key]),\n }));\n setImportedTranslations((prev) => new Set([...prev, key]));\n setExistingTranslations(\n (prev) =>\n new Set([\n ...prev,\n createStableTranslationKey(branchId, documentId, localeId),\n ])\n );\n\n toast.push({\n title: `Successfully imported translation for ${documentId} (${localeId})`,\n status: 'success',\n closable: true,\n });\n } catch (importError) {\n console.error('Failed to import translation:', importError);\n toast.push({\n title: `Translation for ${documentId} (${localeId}) could not be imported. This document was not changed.`,\n status: 'error',\n closable: true,\n });\n }\n } else {\n toast.push({\n title: `No translation content received for ${documentId}`,\n status: 'warning',\n closable: true,\n });\n }\n } catch (error) {\n console.error('Error importing translation:', error);\n toast.push({\n title: `Translation for ${documentId} could not be imported. This document was not changed.`,\n status: 'error',\n closable: true,\n });\n }\n },\n [secrets, documents, translationContext, translationStatuses, branchId]\n );\n\n const handlePatchDocumentReferences = useCallback(async () => {\n if (!secrets || documents.length === 0) return 0;\n\n setIsBusy(true);\n\n try {\n const availableLocaleIds = locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => locale.localeId);\n\n const patchTasks: Array<{ doc: SanityDocument; localeId: string }> = [];\n for (const doc of documents) {\n for (const localeId of availableLocaleIds) {\n patchTasks.push({ doc, localeId });\n }\n }\n\n setImportProgress({\n current: 0,\n total: patchTasks.length,\n isImporting: true,\n });\n\n const result = await processBatch(\n patchTasks,\n async ({ doc, localeId }) => {\n const sourceLocale = pluginConfig.getSourceLocale();\n\n // Skip source locale - only process translated documents\n if (localeId === sourceLocale) {\n return { patched: false, doc, localeId, skipped: true };\n }\n\n // Find the translated document for this locale\n const translatedDoc = await findTranslatedDocumentForLocale(\n doc._id,\n localeId,\n client\n );\n\n if (!translatedDoc) {\n return { patched: false, doc, localeId, noTranslation: true };\n }\n\n const resolvedDoc = await resolveRefs(\n translatedDoc,\n localeId,\n client\n );\n\n if (resolvedDoc !== translatedDoc) {\n const mutation = {\n patch: {\n id: translatedDoc._id,\n set: resolvedDoc,\n },\n };\n\n await client.mutate([mutation]);\n return { patched: true, doc: translatedDoc, localeId };\n }\n return { patched: false, doc: translatedDoc, localeId };\n },\n {\n onProgress: (current, total) => {\n setImportProgress({\n current,\n total,\n isImporting: true,\n });\n },\n onItemFailure: ({ doc, localeId }, error) => {\n console.error(\n `Failed to patch references for ${doc._id} (${localeId}):`,\n error\n );\n },\n }\n );\n\n const patchedCount = result.successfulItems.filter(\n (item) => item.patched\n ).length;\n\n toast.push({\n title: `Patched references in ${patchedCount} documents${result.failureCount > 0 ? `, ${result.failureCount} failed` : ''}`,\n status:\n patchedCount > 0 || result.failureCount === 0 ? 'success' : 'error',\n closable: true,\n });\n\n return patchedCount;\n } catch (error) {\n console.error('Error patching document references:', error);\n toast.push({\n title:\n 'Document references could not be updated. Imported translations may need to be linked manually.',\n status: 'error',\n closable: true,\n });\n return 0;\n } finally {\n setIsBusy(false);\n setImportProgress({ current: 0, total: 0, isImporting: false });\n }\n }, [secrets, documents, locales, client, branchId]);\n\n const handlePublishAllTranslations = useCallback(async () => {\n if (!secrets || documents.length === 0) return 0;\n\n setIsBusy(true);\n\n try {\n const sourceLocale = pluginConfig.getSourceLocale();\n const sourceDocumentIds = documents.map(getDocumentPublishedId);\n const publishedDocumentIds = await client.fetch(\n `*[_id in $sourceDocumentIds]._id`,\n { sourceDocumentIds }\n );\n\n if (publishedDocumentIds.length === 0) {\n toast.push({\n title:\n 'No published source documents found to publish translations for',\n status: 'warning',\n closable: true,\n });\n return 0;\n }\n\n const query = `*[\n _type == 'translation.metadata' &&\n translations[language == $sourceLocale][0].value._ref in $publishedDocumentIds\n ] {\n 'sourceDocId': translations[language == $sourceLocale][0].value._ref,\n 'translationDocs': translations[language != $sourceLocale && defined(value._ref)]{\n _key,\n 'docId': value._ref\n }\n }`;\n\n const translationMetadata = await client.fetch<\n TranslationDocumentMetadata[]\n >(query, {\n sourceLocale,\n publishedDocumentIds,\n });\n\n const translationDocIds = new Set<string>();\n translationMetadata.forEach((metadata) => {\n metadata.translationDocs?.forEach((translation) => {\n if (translation.docId) {\n translationDocIds.add(translation.docId);\n }\n });\n });\n\n if (translationDocIds.size === 0) {\n toast.push({\n title: 'No translation documents found to publish',\n status: 'warning',\n closable: true,\n });\n return 0;\n }\n\n const translatedDocumentIds = await publishTranslations(\n Array.from(translationDocIds),\n client\n );\n\n toast.push({\n title: `Published ${translatedDocumentIds.length} translation documents`,\n status: 'success',\n closable: true,\n });\n\n return translatedDocumentIds.length;\n } catch (error) {\n console.error('Error publishing translations:', error);\n toast.push({\n title:\n 'Translations could not be published. No unpublished source documents were changed.',\n status: 'error',\n closable: true,\n });\n return 0;\n } finally {\n setIsBusy(false);\n }\n }, [secrets, documents, client, branchId]);\n\n useEffect(() => {\n fetchDocuments();\n }, [fetchDocuments]);\n\n useEffect(() => {\n if (secrets) {\n fetchLocales();\n }\n }, [fetchLocales, secrets]);\n\n useEffect(() => {\n if (documents.length > 0 && locales.length > 0) {\n fetchExistingTranslations();\n }\n }, [fetchExistingTranslations]);\n\n useEffect(() => {\n if (\n documents.length > 0 &&\n locales.length > 0 &&\n secrets &&\n !loadingDocuments &&\n branchId\n ) {\n handleRefreshAll();\n }\n }, [\n documents,\n locales,\n secrets,\n loadingDocuments,\n branchId,\n handleRefreshAll,\n ]);\n\n useEffect(() => {\n if (!autoRefresh || documents.length === 0 || !secrets) return;\n\n const interval = setInterval(async () => {\n await handleRefreshAll();\n }, 10000);\n\n return () => clearInterval(interval);\n }, [autoRefresh, documents.length, secrets, handleRefreshAll]);\n\n useEffect(() => {\n setImportedTranslations(new Set(downloadStatus.downloaded));\n }, [downloadStatus.downloaded]);\n\n useEffect(() => {\n if (secrets) {\n handleGetBranchId(secrets);\n }\n }, [secrets, handleGetBranchId]);\n\n const contextValue: TranslationsContextType = {\n // State\n isBusy,\n documents,\n locales,\n autoRefresh,\n autoImport,\n autoPatchReferences,\n autoPublish,\n loadingDocuments,\n importProgress,\n importedTranslations,\n existingTranslations,\n downloadStatus,\n translationStatuses,\n isRefreshing,\n loadingSecrets,\n secrets,\n branchId,\n getVersionId,\n\n // Actions\n setLocales,\n setAutoRefresh,\n setAutoImport,\n setAutoPatchReferences,\n setAutoPublish,\n handleTranslateAll,\n handleImportAll,\n handleImportMissing,\n handleRefreshAll,\n handleImportDocument,\n handlePatchDocumentReferences,\n handlePublishAllTranslations,\n };\n\n return (\n <TranslationsContext.Provider value={contextValue}>\n {children}\n </TranslationsContext.Provider>\n );\n};\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { Card, Flex, Label } from '@sanity/ui';\n\nexport default function ProgressBar({ progress }: { progress: number }) {\n if (typeof progress === 'undefined') {\n console.warn('No progress prop passed to ProgressBar');\n return null;\n }\n\n return (\n <Card border radius={2} style={{ width: `100%`, position: `relative` }}>\n <Flex\n style={{\n position: `absolute`,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n zIndex: 1,\n }}\n align='center'\n justify='center'\n >\n <Label size={1}>{progress}%</Label>\n </Flex>\n <Card\n style={{\n width: '100%',\n transform: `scaleX(${progress / 100})`,\n transformOrigin: 'left',\n transition: 'transform .2s ease',\n boxSizing: 'border-box',\n }}\n padding={2}\n tone='positive'\n />\n </Card>\n );\n}\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\nimport { useCallback, useState } from 'react';\nimport { Flex, Card, Text, Grid, Box, Button } from '@sanity/ui';\nimport { DownloadIcon, CheckmarkCircleIcon } from '@sanity/icons';\nimport ProgressBar from './ProgressBar';\n\ntype LanguageStatusProps = {\n title: string;\n progress: number;\n importFile: () => Promise<void>;\n isImported?: boolean;\n};\n\nexport const LanguageStatus = ({\n title,\n progress,\n importFile,\n isImported = false,\n}: LanguageStatusProps) => {\n const [isBusy, setIsBusy] = useState(false);\n const displayedProgress = isImported && progress < 100 ? 100 : progress;\n\n const handleImport = useCallback(async () => {\n setIsBusy(true);\n try {\n await importFile();\n } finally {\n setIsBusy(false);\n }\n }, [importFile, setIsBusy]);\n\n return (\n <Card shadow={1}>\n <Grid columns={5} gap={3} padding={3}>\n <Flex columnStart={1} columnEnd={3} align='center'>\n <Text weight='bold' size={1}>\n {title}\n </Text>\n </Flex>\n {typeof displayedProgress === 'number' ? (\n <Flex columnStart={3} columnEnd={5} align='center'>\n <ProgressBar progress={displayedProgress} />\n </Flex>\n ) : null}\n <Box columnStart={5} columnEnd={6}>\n {isImported ? (\n <Flex align='center' justify='center' style={{ color: 'green' }}>\n <CheckmarkCircleIcon />\n <Text size={1} style={{ marginLeft: '4px' }}>\n Imported\n </Text>\n </Flex>\n ) : (\n <Button\n style={{ width: `100%` }}\n mode='ghost'\n onClick={handleImport}\n text={isBusy ? 'Importing...' : 'Import'}\n icon={isBusy ? null : DownloadIcon}\n disabled={isBusy || !progress || progress < 100}\n />\n )}\n </Box>\n </Grid>\n </Card>\n );\n};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace, substr, match} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @param {object[]} children\n * @return {string}\n */\nexport function prefix (value, length, children) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// tab-size\n\t\tcase 4789:\n\t\t\treturn MOZ + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t\t// default: fallthrough to below\n\t\t\t}\n\t\t// flex, flex-direction, scroll-snap-type, writing-mode\n\t\tcase 6828: case 4268: case 2903:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/g, '') + (!match(value, /flex-|baseline/) ? MS + 'grid-row-' + replace(value, /flex-|-self/g, '') : '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/g, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// justify-self\n\t\tcase 4200:\n\t\t\tif (!match(value, /flex-|baseline/)) return MS + 'grid-column-align' + substr(value, length) + value\n\t\t\tbreak\n\t\t// grid-template-(columns|rows)\n\t\tcase 2592: case 3360:\n\t\t\treturn MS + replace(value, 'template-', '') + value\n\t\t// grid-(row|column)-start\n\t\tcase 4384: case 3616:\n\t\t\tif (children && children.some(function (element, index) { return length = index, match(element.props, /grid-\\w+-end/) })) {\n\t\t\t\treturn ~indexof(value + (children = children[length].value), 'span', 0) ? value : (MS + replace(value, '-start', '') + value + MS + 'grid-row-span:' + (~indexof(children, 'span', 0) ? match(children, /\\d+/) : +match(children, /\\d+/) - +match(value, /\\d+/)) + ';')\n\t\t\t}\n\t\t\treturn MS + replace(value, '-start', '') + value\n\t\t// grid-(row|column)-end\n\t\tcase 4896: case 4128:\n\t\t\treturn (children && children.some(function (element) { return match(element.props, /grid-\\w+-start/) })) ? value : MS + replace(replace(value, '-end', '-span'), 'span ', '') + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch', 0) ? prefix(replace(value, 'stretch', 'fill-available'), length, children) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// grid-(column|row)\n\t\tcase 5152: case 5920:\n\t\t\treturn replace(value, /(.+?):(\\d+)(\\s*\\/\\s*(span)?\\s*(\\d+))?(.*)/, function (_, a, b, c, d, e, f) { return (MS + a + ':' + b + f) + (c ? (MS + a + '-span:' + (d ? e : +e - +b)) + f : '') + value })\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// stick(y)?\n\t\t\tif (charat(value, length + 6) === 121)\n\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\tbreak\n\t\t// display: (flex|inline-flex|grid|inline-grid)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, charat(value, 14) === 45 ? 18 : 11)) {\n\t\t\t\t// (inline-)?fle(x)\n\t\t\t\tcase 120:\n\t\t\t\t\treturn replace(value, /(.+:)([^;\\s!]+)(;|(\\s+)?!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t\t// (inline-)?gri(d)\n\t\t\t\tcase 100:\n\t\t\t\t\treturn replace(value, ':', ':' + MS) + value\n\t\t\t}\n\t\t\tbreak\n\t\t// scroll-margin, scroll-margin-(top|right|bottom|left)\n\t\tcase 5719: case 2647: case 2135: case 3927: case 2391:\n\t\t\treturn replace(value, 'scroll-', 'scroll-snap-') + value\n\t}\n\n\treturn value\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine, filter, assign} from './Utility.js'\nimport {copy, lift, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(children = element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, callback = /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import{__spreadArray as e,__assign as t}from\"tslib\";import n from\"@emotion/is-prop-valid\";import o,{useRef as r,useState as s,useMemo as i,useEffect as a,useContext as c,useDebugValue as l,createElement as u}from\"react\";import p from\"shallowequal\";import*as d from\"stylis\";import h from\"@emotion/unitless\";var f=\"undefined\"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||\"data-styled\",m=\"active\",y=\"data-styled-version\",v=\"6.1.19\",g=\"/*!sc*/\\n\",S=\"undefined\"!=typeof window&&\"undefined\"!=typeof document,w=Boolean(\"boolean\"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:\"undefined\"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&\"\"!==process.env.REACT_APP_SC_DISABLE_SPEEDY?\"false\"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:\"undefined\"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&\"\"!==process.env.SC_DISABLE_SPEEDY?\"false\"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY:\"production\"!==process.env.NODE_ENV),b={},E=/invalid hook call/i,N=new Set,P=function(t,n){if(\"production\"!==process.env.NODE_ENV){var o=n?' with the id of \"'.concat(n,'\"'):\"\",s=\"The component \".concat(t).concat(o,\" has been created dynamically.\\n\")+\"You may see this warning because you've called styled inside another component.\\nTo resolve this only create new StyledComponents outside of any render method and function component.\\nSee https://styled-components.com/docs/basics#define-styled-components-outside-of-the-render-method for more info.\\n\",i=console.error;try{var a=!0;console.error=function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];E.test(t)?(a=!1,N.delete(s)):i.apply(void 0,e([t],n,!1))},r(),a&&!N.has(s)&&(console.warn(s),N.add(s))}catch(e){E.test(e.message)&&N.delete(s)}finally{console.error=i}}},_=Object.freeze([]),C=Object.freeze({});function I(e,t,n){return void 0===n&&(n=C),e.theme!==n.theme&&e.theme||t||n.theme}var A=new Set([\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"base\",\"bdi\",\"bdo\",\"big\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"data\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\",\"mark\",\"menu\",\"menuitem\",\"meta\",\"meter\",\"nav\",\"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"u\",\"ul\",\"use\",\"var\",\"video\",\"wbr\",\"circle\",\"clipPath\",\"defs\",\"ellipse\",\"foreignObject\",\"g\",\"image\",\"line\",\"linearGradient\",\"marker\",\"mask\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialGradient\",\"rect\",\"stop\",\"svg\",\"text\",\"tspan\"]),O=/[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~-]+/g,D=/(^-|-$)/g;function R(e){return e.replace(O,\"-\").replace(D,\"\")}var T=/(a)(d)/gi,k=52,j=function(e){return String.fromCharCode(e+(e>25?39:97))};function x(e){var t,n=\"\";for(t=Math.abs(e);t>k;t=t/k|0)n=j(t%k)+n;return(j(t%k)+n).replace(T,\"$1-$2\")}var V,F=5381,z=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},M=function(e){return z(F,e)};function $(e){return x(M(e)>>>0)}function B(e){return\"production\"!==process.env.NODE_ENV&&\"string\"==typeof e&&e||e.displayName||e.name||\"Component\"}function G(e){return\"string\"==typeof e&&(\"production\"===process.env.NODE_ENV||e.charAt(0)===e.charAt(0).toLowerCase())}var L=\"function\"==typeof Symbol&&Symbol.for,Y=L?Symbol.for(\"react.memo\"):60115,q=L?Symbol.for(\"react.forward_ref\"):60112,W={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},H={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},U={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},J=((V={})[q]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},V[Y]=U,V);function X(e){return(\"type\"in(t=e)&&t.type.$$typeof)===Y?U:\"$$typeof\"in e?J[e.$$typeof]:W;var t}var Z=Object.defineProperty,K=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,ee=Object.getOwnPropertyDescriptor,te=Object.getPrototypeOf,ne=Object.prototype;function oe(e,t,n){if(\"string\"!=typeof t){if(ne){var o=te(t);o&&o!==ne&&oe(e,o,n)}var r=K(t);Q&&(r=r.concat(Q(t)));for(var s=X(e),i=X(t),a=0;a<r.length;++a){var c=r[a];if(!(c in H||n&&n[c]||i&&c in i||s&&c in s)){var l=ee(t,c);try{Z(e,c,l)}catch(e){}}}}return e}function re(e){return\"function\"==typeof e}function se(e){return\"object\"==typeof e&&\"styledComponentId\"in e}function ie(e,t){return e&&t?\"\".concat(e,\" \").concat(t):e||t||\"\"}function ae(e,t){if(0===e.length)return\"\";for(var n=e[0],o=1;o<e.length;o++)n+=t?t+e[o]:e[o];return n}function ce(e){return null!==e&&\"object\"==typeof e&&e.constructor.name===Object.name&&!(\"props\"in e&&e.$$typeof)}function le(e,t,n){if(void 0===n&&(n=!1),!n&&!ce(e)&&!Array.isArray(e))return t;if(Array.isArray(t))for(var o=0;o<t.length;o++)e[o]=le(e[o],t[o]);else if(ce(t))for(var o in t)e[o]=le(e[o],t[o]);return e}function ue(e,t){Object.defineProperty(e,\"toString\",{value:t})}var pe=\"production\"!==process.env.NODE_ENV?{1:\"Cannot create styled-component for component: %s.\\n\\n\",2:\"Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n- Are you trying to reuse it across renders?\\n- Are you accidentally calling collectStyles twice?\\n\\n\",3:\"Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n\",4:\"The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n- Does this error occur on the client and is your target falsy?\\n- Does this error occur on the server and is the sheet falsy?\\n\\n\",5:\"The clone method cannot be used on the client!\\n\\n- Are you running in a client-like environment on the server?\\n- Are you trying to run SSR on the client?\\n\\n\",6:\"Trying to insert a new style tag, but the given Node is unmounted!\\n\\n- Are you using a custom target that isn't mounted?\\n- Does your document not have a valid head element?\\n- Have you accidentally removed a style tag manually?\\n\\n\",7:'ThemeProvider: Please return an object from your \"theme\" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n',8:'ThemeProvider: Please make your \"theme\" prop an object.\\n\\n',9:\"Missing document `<head>`\\n\\n\",10:\"Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\",11:\"_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\\n\\n\",12:\"It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\\\`\\\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\\n\\n\",13:\"%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\\n\\n\",14:'ThemeProvider: \"theme\" prop is required.\\n\\n',15:\"A stylis plugin has been supplied that is not named. We need a name for each plugin to be able to prevent styling collisions between different stylis configurations within the same app. Before you pass your plugin to `<StyleSheetManager stylisPlugins={[]}>`, please make sure each plugin is uniquely-named, e.g.\\n\\n```js\\nObject.defineProperty(importedPlugin, 'name', { value: 'some-unique-name' });\\n```\\n\\n\",16:\"Reached the limit of how many styled components may be created at group %s.\\nYou may only create up to 1,073,741,824 components. If you're creating components dynamically,\\nas for instance in your render method then you may be running into this limitation.\\n\\n\",17:\"CSSStyleSheet could not be found on HTMLStyleElement.\\nHas styled-components' style tag been unmounted or altered by another script?\\n\",18:\"ThemeProvider: Please make sure your useTheme hook is within a `<ThemeProvider>`\"}:{};function de(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=e[0],o=[],r=1,s=e.length;r<s;r+=1)o.push(e[r]);return o.forEach(function(e){n=n.replace(/%[a-z]/,e)}),n}function he(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];return\"production\"===process.env.NODE_ENV?new Error(\"An error occurred. See https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#\".concat(t,\" for more information.\").concat(n.length>0?\" Args: \".concat(n.join(\", \")):\"\")):new Error(de.apply(void 0,e([pe[t]],n,!1)).trim())}var fe=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n<e;n++)t+=this.groupSizes[n];return t},e.prototype.insertRules=function(e,t){if(e>=this.groupSizes.length){for(var n=this.groupSizes,o=n.length,r=o;e>=r;)if((r<<=1)<0)throw he(16,\"\".concat(e));this.groupSizes=new Uint32Array(r),this.groupSizes.set(n),this.length=r;for(var s=o;s<r;s++)this.groupSizes[s]=0}for(var i=this.indexOfGroup(e+1),a=(s=0,t.length);s<a;s++)this.tag.insertRule(i,t[s])&&(this.groupSizes[e]++,i++)},e.prototype.clearGroup=function(e){if(e<this.length){var t=this.groupSizes[e],n=this.indexOfGroup(e),o=n+t;this.groupSizes[e]=0;for(var r=n;r<o;r++)this.tag.deleteRule(n)}},e.prototype.getGroup=function(e){var t=\"\";if(e>=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],o=this.indexOfGroup(e),r=o+n,s=o;s<r;s++)t+=\"\".concat(this.tag.getRule(s)).concat(g);return t},e}(),me=1<<30,ye=new Map,ve=new Map,ge=1,Se=function(e){if(ye.has(e))return ye.get(e);for(;ve.has(ge);)ge++;var t=ge++;if(\"production\"!==process.env.NODE_ENV&&((0|t)<0||t>me))throw he(16,\"\".concat(t));return ye.set(e,t),ve.set(t,e),t},we=function(e,t){ge=t+1,ye.set(e,t),ve.set(t,e)},be=\"style[\".concat(f,\"][\").concat(y,'=\"').concat(v,'\"]'),Ee=new RegExp(\"^\".concat(f,'\\\\.g(\\\\d+)\\\\[id=\"([\\\\w\\\\d-]+)\"\\\\].*?\"([^\"]*)')),Ne=function(e,t,n){for(var o,r=n.split(\",\"),s=0,i=r.length;s<i;s++)(o=r[s])&&e.registerName(t,o)},Pe=function(e,t){for(var n,o=(null!==(n=t.textContent)&&void 0!==n?n:\"\").split(g),r=[],s=0,i=o.length;s<i;s++){var a=o[s].trim();if(a){var c=a.match(Ee);if(c){var l=0|parseInt(c[1],10),u=c[2];0!==l&&(we(u,l),Ne(e,u,c[3]),e.getTag().insertRules(l,r)),r.length=0}else r.push(a)}}},_e=function(e){for(var t=document.querySelectorAll(be),n=0,o=t.length;n<o;n++){var r=t[n];r&&r.getAttribute(f)!==m&&(Pe(e,r),r.parentNode&&r.parentNode.removeChild(r))}};function Ce(){return\"undefined\"!=typeof __webpack_nonce__?__webpack_nonce__:null}var Ie=function(e){var t=document.head,n=e||t,o=document.createElement(\"style\"),r=function(e){var t=Array.from(e.querySelectorAll(\"style[\".concat(f,\"]\")));return t[t.length-1]}(n),s=void 0!==r?r.nextSibling:null;o.setAttribute(f,m),o.setAttribute(y,v);var i=Ce();return i&&o.setAttribute(\"nonce\",i),n.insertBefore(o,s),o},Ae=function(){function e(e){this.element=Ie(e),this.element.appendChild(document.createTextNode(\"\")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,n=0,o=t.length;n<o;n++){var r=t[n];if(r.ownerNode===e)return r}throw he(17)}(this.element),this.length=0}return e.prototype.insertRule=function(e,t){try{return this.sheet.insertRule(t,e),this.length++,!0}catch(e){return!1}},e.prototype.deleteRule=function(e){this.sheet.deleteRule(e),this.length--},e.prototype.getRule=function(e){var t=this.sheet.cssRules[e];return t&&t.cssText?t.cssText:\"\"},e}(),Oe=function(){function e(e){this.element=Ie(e),this.nodes=this.element.childNodes,this.length=0}return e.prototype.insertRule=function(e,t){if(e<=this.length&&e>=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e<this.length?this.nodes[e].textContent:\"\"},e}(),De=function(){function e(e){this.rules=[],this.length=0}return e.prototype.insertRule=function(e,t){return e<=this.length&&(this.rules.splice(e,0,t),this.length++,!0)},e.prototype.deleteRule=function(e){this.rules.splice(e,1),this.length--},e.prototype.getRule=function(e){return e<this.length?this.rules[e]:\"\"},e}(),Re=S,Te={isServer:!S,useCSSOMInjection:!w},ke=function(){function e(e,n,o){void 0===e&&(e=C),void 0===n&&(n={});var r=this;this.options=t(t({},Te),e),this.gs=n,this.names=new Map(o),this.server=!!e.isServer,!this.server&&S&&Re&&(Re=!1,_e(this)),ue(this,function(){return function(e){for(var t=e.getTag(),n=t.length,o=\"\",r=function(n){var r=function(e){return ve.get(e)}(n);if(void 0===r)return\"continue\";var s=e.names.get(r),i=t.getGroup(n);if(void 0===s||!s.size||0===i.length)return\"continue\";var a=\"\".concat(f,\".g\").concat(n,'[id=\"').concat(r,'\"]'),c=\"\";void 0!==s&&s.forEach(function(e){e.length>0&&(c+=\"\".concat(e,\",\"))}),o+=\"\".concat(i).concat(a,'{content:\"').concat(c,'\"}').concat(g)},s=0;s<n;s++)r(s);return o}(r)})}return e.registerId=function(e){return Se(e)},e.prototype.rehydrate=function(){!this.server&&S&&_e(this)},e.prototype.reconstructWithOptions=function(n,o){return void 0===o&&(o=!0),new e(t(t({},this.options),n),this.gs,o&&this.names||void 0)},e.prototype.allocateGSInstance=function(e){return this.gs[e]=(this.gs[e]||0)+1},e.prototype.getTag=function(){return this.tag||(this.tag=(e=function(e){var t=e.useCSSOMInjection,n=e.target;return e.isServer?new De(n):t?new Ae(n):new Oe(n)}(this.options),new fe(e)));var e},e.prototype.hasNameForId=function(e,t){return this.names.has(e)&&this.names.get(e).has(t)},e.prototype.registerName=function(e,t){if(Se(e),this.names.has(e))this.names.get(e).add(t);else{var n=new Set;n.add(t),this.names.set(e,n)}},e.prototype.insertRules=function(e,t,n){this.registerName(e,t),this.getTag().insertRules(Se(e),n)},e.prototype.clearNames=function(e){this.names.has(e)&&this.names.get(e).clear()},e.prototype.clearRules=function(e){this.getTag().clearGroup(Se(e)),this.clearNames(e)},e.prototype.clearTag=function(){this.tag=void 0},e}(),je=/&/g,xe=/^\\s*\\/\\/.*$/gm;function Ve(e,t){return e.map(function(e){return\"rule\"===e.type&&(e.value=\"\".concat(t,\" \").concat(e.value),e.value=e.value.replaceAll(\",\",\",\".concat(t,\" \")),e.props=e.props.map(function(e){return\"\".concat(t,\" \").concat(e)})),Array.isArray(e.children)&&\"@keyframes\"!==e.type&&(e.children=Ve(e.children,t)),e})}function Fe(e){var t,n,o,r=void 0===e?C:e,s=r.options,i=void 0===s?C:s,a=r.plugins,c=void 0===a?_:a,l=function(e,o,r){return r.startsWith(n)&&r.endsWith(n)&&r.replaceAll(n,\"\").length>0?\".\".concat(t):e},u=c.slice();u.push(function(e){e.type===d.RULESET&&e.value.includes(\"&\")&&(e.props[0]=e.props[0].replace(je,n).replace(o,l))}),i.prefix&&u.push(d.prefixer),u.push(d.stringify);var p=function(e,r,s,a){void 0===r&&(r=\"\"),void 0===s&&(s=\"\"),void 0===a&&(a=\"&\"),t=a,n=r,o=new RegExp(\"\\\\\".concat(n,\"\\\\b\"),\"g\");var c=e.replace(xe,\"\"),l=d.compile(s||r?\"\".concat(s,\" \").concat(r,\" { \").concat(c,\" }\"):c);i.namespace&&(l=Ve(l,i.namespace));var p=[];return d.serialize(l,d.middleware(u.concat(d.rulesheet(function(e){return p.push(e)})))),p};return p.hash=c.length?c.reduce(function(e,t){return t.name||he(15),z(e,t.name)},F).toString():\"\",p}var ze=new ke,Me=Fe(),$e=o.createContext({shouldForwardProp:void 0,styleSheet:ze,stylis:Me}),Be=$e.Consumer,Ge=o.createContext(void 0);function Le(){return c($e)}function Ye(e){var t=s(e.stylisPlugins),n=t[0],r=t[1],c=Le().styleSheet,l=i(function(){var t=c;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t},[e.disableCSSOMInjection,e.sheet,e.target,c]),u=i(function(){return Fe({options:{namespace:e.namespace,prefix:e.enableVendorPrefixes},plugins:n})},[e.enableVendorPrefixes,e.namespace,n]);a(function(){p(n,e.stylisPlugins)||r(e.stylisPlugins)},[e.stylisPlugins]);var d=i(function(){return{shouldForwardProp:e.shouldForwardProp,styleSheet:l,stylis:u}},[e.shouldForwardProp,l,u]);return o.createElement($e.Provider,{value:d},o.createElement(Ge.Provider,{value:u},e.children))}var qe=function(){function e(e,t){var n=this;this.inject=function(e,t){void 0===t&&(t=Me);var o=n.name+t.hash;e.hasNameForId(n.id,o)||e.insertRules(n.id,o,t(n.rules,o,\"@keyframes\"))},this.name=e,this.id=\"sc-keyframes-\".concat(e),this.rules=t,ue(this,function(){throw he(12,String(n.name))})}return e.prototype.getName=function(e){return void 0===e&&(e=Me),this.name+e.hash},e}(),We=function(e){return e>=\"A\"&&e<=\"Z\"};function He(e){for(var t=\"\",n=0;n<e.length;n++){var o=e[n];if(1===n&&\"-\"===o&&\"-\"===e[0])return e;We(o)?t+=\"-\"+o.toLowerCase():t+=o}return t.startsWith(\"ms-\")?\"-\"+t:t}var Ue=function(e){return null==e||!1===e||\"\"===e},Je=function(t){var n,o,r=[];for(var s in t){var i=t[s];t.hasOwnProperty(s)&&!Ue(i)&&(Array.isArray(i)&&i.isCss||re(i)?r.push(\"\".concat(He(s),\":\"),i,\";\"):ce(i)?r.push.apply(r,e(e([\"\".concat(s,\" {\")],Je(i),!1),[\"}\"],!1)):r.push(\"\".concat(He(s),\": \").concat((n=s,null==(o=i)||\"boolean\"==typeof o||\"\"===o?\"\":\"number\"!=typeof o||0===o||n in h||n.startsWith(\"--\")?String(o).trim():\"\".concat(o,\"px\")),\";\")))}return r};function Xe(e,t,n,o){if(Ue(e))return[];if(se(e))return[\".\".concat(e.styledComponentId)];if(re(e)){if(!re(s=e)||s.prototype&&s.prototype.isReactComponent||!t)return[e];var r=e(t);return\"production\"===process.env.NODE_ENV||\"object\"!=typeof r||Array.isArray(r)||r instanceof qe||ce(r)||null===r||console.error(\"\".concat(B(e),\" is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\")),Xe(r,t,n,o)}var s;return e instanceof qe?n?(e.inject(n,o),[e.getName(o)]):[e]:ce(e)?Je(e):Array.isArray(e)?Array.prototype.concat.apply(_,e.map(function(e){return Xe(e,t,n,o)})):[e.toString()]}function Ze(e){for(var t=0;t<e.length;t+=1){var n=e[t];if(re(n)&&!se(n))return!1}return!0}var Ke=M(v),Qe=function(){function e(e,t,n){this.rules=e,this.staticRulesId=\"\",this.isStatic=\"production\"===process.env.NODE_ENV&&(void 0===n||n.isStatic)&&Ze(e),this.componentId=t,this.baseHash=z(Ke,t),this.baseStyle=n,ke.registerId(t)}return e.prototype.generateAndInjectStyles=function(e,t,n){var o=this.baseStyle?this.baseStyle.generateAndInjectStyles(e,t,n):\"\";if(this.isStatic&&!n.hash)if(this.staticRulesId&&t.hasNameForId(this.componentId,this.staticRulesId))o=ie(o,this.staticRulesId);else{var r=ae(Xe(this.rules,e,t,n)),s=x(z(this.baseHash,r)>>>0);if(!t.hasNameForId(this.componentId,s)){var i=n(r,\".\".concat(s),void 0,this.componentId);t.insertRules(this.componentId,s,i)}o=ie(o,s),this.staticRulesId=s}else{for(var a=z(this.baseHash,n.hash),c=\"\",l=0;l<this.rules.length;l++){var u=this.rules[l];if(\"string\"==typeof u)c+=u,\"production\"!==process.env.NODE_ENV&&(a=z(a,u));else if(u){var p=ae(Xe(u,e,t,n));a=z(a,p+l),c+=p}}if(c){var d=x(a>>>0);t.hasNameForId(this.componentId,d)||t.insertRules(this.componentId,d,n(c,\".\".concat(d),void 0,this.componentId)),o=ie(o,d)}}return o},e}(),et=o.createContext(void 0),tt=et.Consumer;function nt(){var e=c(et);if(!e)throw he(18);return e}function ot(e){var n=o.useContext(et),r=i(function(){return function(e,n){if(!e)throw he(14);if(re(e)){var o=e(n);if(\"production\"!==process.env.NODE_ENV&&(null===o||Array.isArray(o)||\"object\"!=typeof o))throw he(7);return o}if(Array.isArray(e)||\"object\"!=typeof e)throw he(8);return n?t(t({},n),e):e}(e.theme,n)},[e.theme,n]);return e.children?o.createElement(et.Provider,{value:r},e.children):null}var rt={},st=new Set;function it(e,r,s){var i=se(e),a=e,c=!G(e),p=r.attrs,d=void 0===p?_:p,h=r.componentId,f=void 0===h?function(e,t){var n=\"string\"!=typeof e?\"sc\":R(e);rt[n]=(rt[n]||0)+1;var o=\"\".concat(n,\"-\").concat($(v+n+rt[n]));return t?\"\".concat(t,\"-\").concat(o):o}(r.displayName,r.parentComponentId):h,m=r.displayName,y=void 0===m?function(e){return G(e)?\"styled.\".concat(e):\"Styled(\".concat(B(e),\")\")}(e):m,g=r.displayName&&r.componentId?\"\".concat(R(r.displayName),\"-\").concat(r.componentId):r.componentId||f,S=i&&a.attrs?a.attrs.concat(d).filter(Boolean):d,w=r.shouldForwardProp;if(i&&a.shouldForwardProp){var b=a.shouldForwardProp;if(r.shouldForwardProp){var E=r.shouldForwardProp;w=function(e,t){return b(e,t)&&E(e,t)}}else w=b}var N=new Qe(s,g,i?a.componentStyle:void 0);function O(e,r){return function(e,r,s){var i=e.attrs,a=e.componentStyle,c=e.defaultProps,p=e.foldedComponentIds,d=e.styledComponentId,h=e.target,f=o.useContext(et),m=Le(),y=e.shouldForwardProp||m.shouldForwardProp;\"production\"!==process.env.NODE_ENV&&l(d);var v=I(r,f,c)||C,g=function(e,n,o){for(var r,s=t(t({},n),{className:void 0,theme:o}),i=0;i<e.length;i+=1){var a=re(r=e[i])?r(s):r;for(var c in a)s[c]=\"className\"===c?ie(s[c],a[c]):\"style\"===c?t(t({},s[c]),a[c]):a[c]}return n.className&&(s.className=ie(s.className,n.className)),s}(i,r,v),S=g.as||h,w={};for(var b in g)void 0===g[b]||\"$\"===b[0]||\"as\"===b||\"theme\"===b&&g.theme===v||(\"forwardedAs\"===b?w.as=g.forwardedAs:y&&!y(b,S)||(w[b]=g[b],y||\"development\"!==process.env.NODE_ENV||n(b)||st.has(b)||!A.has(S)||(st.add(b),console.warn('styled-components: it looks like an unknown prop \"'.concat(b,'\" is being sent through to the DOM, which will likely trigger a React console error. If you would like automatic filtering of unknown props, you can opt-into that behavior via `<StyleSheetManager shouldForwardProp={...}>` (connect an API like `@emotion/is-prop-valid`) or consider using transient props (`$` prefix for automatic filtering.)')))));var E=function(e,t){var n=Le(),o=e.generateAndInjectStyles(t,n.styleSheet,n.stylis);return\"production\"!==process.env.NODE_ENV&&l(o),o}(a,g);\"production\"!==process.env.NODE_ENV&&e.warnTooManyClasses&&e.warnTooManyClasses(E);var N=ie(p,d);return E&&(N+=\" \"+E),g.className&&(N+=\" \"+g.className),w[G(S)&&!A.has(S)?\"class\":\"className\"]=N,s&&(w.ref=s),u(S,w)}(D,e,r)}O.displayName=y;var D=o.forwardRef(O);return D.attrs=S,D.componentStyle=N,D.displayName=y,D.shouldForwardProp=w,D.foldedComponentIds=i?ie(a.foldedComponentIds,a.styledComponentId):\"\",D.styledComponentId=g,D.target=i?a.target:e,Object.defineProperty(D,\"defaultProps\",{get:function(){return this._foldedDefaultProps},set:function(e){this._foldedDefaultProps=i?function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var o=0,r=t;o<r.length;o++)le(e,r[o],!0);return e}({},a.defaultProps,e):e}}),\"production\"!==process.env.NODE_ENV&&(P(y,g),D.warnTooManyClasses=function(e,t){var n={},o=!1;return function(r){if(!o&&(n[r]=!0,Object.keys(n).length>=200)){var s=t?' with the id of \"'.concat(t,'\"'):\"\";console.warn(\"Over \".concat(200,\" classes were generated for component \").concat(e).concat(s,\".\\n\")+\"Consider using the attrs method, together with a style object for frequently changed styles.\\nExample:\\n const Component = styled.div.attrs(props => ({\\n style: {\\n background: props.background,\\n },\\n }))`width: 100%;`\\n\\n <Component />\"),o=!0,n={}}}}(y,g)),ue(D,function(){return\".\".concat(D.styledComponentId)}),c&&oe(D,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0}),D}function at(e,t){for(var n=[e[0]],o=0,r=t.length;o<r;o+=1)n.push(t[o],e[o+1]);return n}var ct=function(e){return Object.assign(e,{isCss:!0})};function lt(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];if(re(t)||ce(t))return ct(Xe(at(_,e([t],n,!0))));var r=t;return 0===n.length&&1===r.length&&\"string\"==typeof r[0]?Xe(r):ct(Xe(at(r,n)))}function ut(n,o,r){if(void 0===r&&(r=C),!o)throw he(1,o);var s=function(t){for(var s=[],i=1;i<arguments.length;i++)s[i-1]=arguments[i];return n(o,r,lt.apply(void 0,e([t],s,!1)))};return s.attrs=function(e){return ut(n,o,t(t({},r),{attrs:Array.prototype.concat(r.attrs,e).filter(Boolean)}))},s.withConfig=function(e){return ut(n,o,t(t({},r),e))},s}var pt=function(e){return ut(it,e)},dt=pt;A.forEach(function(e){dt[e]=pt(e)});var ht=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Ze(e),ke.registerId(this.componentId+1)}return e.prototype.createStyles=function(e,t,n,o){var r=o(ae(Xe(this.rules,t,n,o)),\"\"),s=this.componentId+e;n.insertRules(s,s,r)},e.prototype.removeStyles=function(e,t){t.clearRules(this.componentId+e)},e.prototype.renderStyles=function(e,t,n,o){e>2&&ke.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,o)},e}();function ft(n){for(var r=[],s=1;s<arguments.length;s++)r[s-1]=arguments[s];var i=lt.apply(void 0,e([n],r,!1)),a=\"sc-global-\".concat($(JSON.stringify(i))),c=new ht(i,a);\"production\"!==process.env.NODE_ENV&&P(a);var l=function(e){var n=Le(),r=o.useContext(et),s=o.useRef(n.styleSheet.allocateGSInstance(a)).current;return\"production\"!==process.env.NODE_ENV&&o.Children.count(e.children)&&console.warn(\"The global style component \".concat(a,\" was given child JSX. createGlobalStyle does not render children.\")),\"production\"!==process.env.NODE_ENV&&i.some(function(e){return\"string\"==typeof e&&-1!==e.indexOf(\"@import\")})&&console.warn(\"Please do not use @import CSS syntax in createGlobalStyle at this time, as the CSSOM APIs we use in production do not handle it well. Instead, we recommend using a library such as react-helmet to inject a typical <link> meta tag to the stylesheet, or simply embedding it manually in your index.html <head> section for a simpler app.\"),n.styleSheet.server&&function(e,n,o,r,s){if(c.isStatic)c.renderStyles(e,b,o,s);else{var i=t(t({},n),{theme:I(n,r,l.defaultProps)});c.renderStyles(e,i,o,s)}}(s,e,n.styleSheet,r,n.stylis),null};return o.memo(l)}function mt(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.\");var r=ae(lt.apply(void 0,e([t],n,!1))),s=$(r);return new qe(s,r)}function yt(e){var n=o.forwardRef(function(n,r){var s=I(n,o.useContext(et),e.defaultProps);return\"production\"!==process.env.NODE_ENV&&void 0===s&&console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class \"'.concat(B(e),'\"')),o.createElement(e,t({},n,{theme:s,ref:r}))});return n.displayName=\"WithTheme(\".concat(B(e),\")\"),oe(n,e)}var vt=/^\\s*<\\/[a-z]/i,gt=function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString();if(!t)return\"\";var n=Ce(),o=ae([n&&'nonce=\"'.concat(n,'\"'),\"\".concat(f,'=\"true\"'),\"\".concat(y,'=\"').concat(v,'\"')].filter(Boolean),\" \");return\"<style \".concat(o,\">\").concat(t,\"</style>\")},this.getStyleTags=function(){if(e.sealed)throw he(2);return e._emitSheetCSS()},this.getStyleElement=function(){var n;if(e.sealed)throw he(2);var r=e.instance.toString();if(!r)return[];var s=((n={})[f]=\"\",n[y]=v,n.dangerouslySetInnerHTML={__html:r},n),i=Ce();return i&&(s.nonce=i),[o.createElement(\"style\",t({},s,{key:\"sc-0-0\"}))]},this.seal=function(){e.sealed=!0},this.instance=new ke({isServer:!0}),this.sealed=!1}return e.prototype.collectStyles=function(e){if(this.sealed)throw he(2);return o.createElement(Ye,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){if(S)throw he(3);if(this.sealed)throw he(2);this.seal();var t=require(\"stream\").Transform,n=e,o=this.instance,r=this._emitSheetCSS,s=new t({transform:function(e,t,n){var s=e.toString(),i=r();if(o.clearTag(),vt.test(s)){var a=s.indexOf(\">\")+1,c=s.slice(0,a),l=s.slice(a);this.push(c+i+l)}else this.push(i+s);n()}});return n.on(\"error\",function(e){s.emit(\"error\",e)}),n.pipe(s)},e}(),St={StyleSheet:ke,mainSheet:ze};\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"It looks like you've imported 'styled-components' on React Native.\\nPerhaps you're looking to import 'styled-components/native'?\\nRead more about this at https://www.styled-components.com/docs/basics#react-native\");var wt=\"__sc-\".concat(f,\"__\");\"production\"!==process.env.NODE_ENV&&\"test\"!==process.env.NODE_ENV&&\"undefined\"!=typeof window&&(window[wt]||(window[wt]=0),1===window[wt]&&console.warn(\"It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles to not render properly, errors during the rehydration process, a missing theme prop, and makes your application bigger without good reason.\\n\\nSee https://s-c.sh/2BAXzed for more info.\"),window[wt]+=1);export{gt as ServerStyleSheet,Be as StyleSheetConsumer,$e as StyleSheetContext,Ye as StyleSheetManager,tt as ThemeConsumer,et as ThemeContext,ot as ThemeProvider,St as __PRIVATE__,ft as createGlobalStyle,lt as css,dt as default,se as isStyledComponent,mt as keyframes,dt as styled,nt as useTheme,v as version,yt as withTheme};\n//# sourceMappingURL=styled-components.esm.js.map\n","import { useCallback } from 'react';\nimport { Button, Flex, Switch, Box, Text } from '@sanity/ui';\nimport styled from 'styled-components';\nimport { TranslationLocale } from '../../types';\n\nconst WrapText = styled(Box)`\n white-space: normal;\n`;\n\ntype LocaleCheckboxProps = {\n locale: TranslationLocale;\n toggle: (locale: string, shouldEnable: boolean) => void;\n checked: boolean;\n};\n\nexport const LocaleCheckbox = ({\n locale,\n toggle,\n checked,\n}: LocaleCheckboxProps) => {\n const onClick = useCallback(\n () => toggle(locale.localeId, !checked),\n [locale.localeId, toggle, checked]\n );\n\n return (\n <Button\n mode='ghost'\n onClick={onClick}\n style={{ cursor: 'pointer' }}\n radius={2}\n >\n <Flex align='center' gap={3}>\n <Switch\n style={{ pointerEvents: 'none' }}\n onChange={onClick}\n checked={checked}\n />\n <WrapText>\n <Text size={1} weight='semibold'>\n {locale.description}\n </Text>\n </WrapText>\n </Flex>\n </Button>\n );\n};\n","// adapted from https://github.com/sanity-io/sanity-translations-tab. See LICENSE.md for more details.\n\n/**\n * Add cleanup function to cancel async tasks\n */\n\nimport { useMemo, useState, useCallback, useEffect } from 'react';\nimport {\n Stack,\n Text,\n Card,\n Button,\n Grid,\n Box,\n Flex,\n Switch,\n Tooltip,\n useToast,\n} from '@sanity/ui';\nimport { pluginConfig } from '../../adapter/core';\nimport { useTranslations } from '../TranslationsProvider';\nimport { LanguageStatus } from '../shared/LanguageStatus';\nimport { LocaleCheckbox } from '../shared/LocaleCheckbox';\nimport { DownloadIcon, LinkIcon, PublishIcon } from '@sanity/icons';\nimport {\n createTranslationStatusKey,\n getDocumentPublishedId,\n} from '../../utils/documentIds';\n\nexport const TranslationView = () => {\n const {\n documents,\n locales,\n translationStatuses,\n branchId,\n isBusy,\n handleTranslateAll,\n handleImportDocument,\n handleRefreshAll,\n isRefreshing,\n importedTranslations,\n setLocales,\n handlePatchDocumentReferences,\n handlePublishAllTranslations,\n autoRefresh,\n setAutoRefresh,\n autoImport,\n setAutoImport,\n autoPatchReferences,\n setAutoPatchReferences,\n autoPublish,\n setAutoPublish,\n getVersionId,\n } = useTranslations();\n\n const [isImporting, setIsImporting] = useState(false);\n const [isPublishing, setIsPublishing] = useState(false);\n\n const toast = useToast();\n\n // Get the single document (first document in single document mode)\n const document = documents[0];\n\n // Extract the current document's language from the language field\n const currentDocumentLanguage = useMemo(() => {\n if (!document) return null;\n\n // Get the language from the document's language field\n const languageField = pluginConfig.getLanguageField();\n const documentLanguage = document[languageField];\n\n // If no language field is set, assume it's the source language\n return documentLanguage || pluginConfig.getSourceLocale();\n }, [document]);\n\n // Only show translation components if we're on a source language document\n const shouldShowTranslationComponents = useMemo(() => {\n if (!currentDocumentLanguage) return false;\n return currentDocumentLanguage === pluginConfig.getSourceLocale();\n }, [currentDocumentLanguage]);\n\n // Get available locales (excluding source locale)\n const availableLocales = useMemo(() => {\n const sourceLocale = pluginConfig.getSourceLocale();\n return locales.filter(\n (locale) => locale.enabled !== false && locale.localeId !== sourceLocale\n );\n }, [locales]);\n\n // Get document ID for status tracking\n const documentId = useMemo(() => {\n if (!document) return null;\n return getDocumentPublishedId(document);\n }, [document]);\n\n // Version the status entries are keyed under: the _rev pinned at upload\n // time when available, so importing in place (which bumps the live _rev)\n // doesn't detach the UI from the statuses of the uploaded version.\n const versionId = useMemo(() => {\n if (!document) return null;\n return getVersionId(document);\n }, [document, getVersionId]);\n\n // Unified import functionality\n const handleImportTranslations = useCallback(\n async (options: { autoOnly?: boolean } = {}) => {\n const { autoOnly = false } = options;\n\n // Check preconditions\n if (isImporting || !documentId || !versionId) return;\n if (autoOnly && !autoImport) return;\n\n // Find translations ready to import\n const readyTranslations = availableLocales.filter((locale) => {\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n versionId,\n locale.localeId\n );\n const status = translationStatuses.get(key);\n return status?.isReady && !importedTranslations.has(key);\n });\n\n if (readyTranslations.length === 0) return;\n\n setIsImporting(true);\n try {\n // Import sequentially: internationalized-array imports patch this same\n // document in place, so concurrent locale imports would overwrite each\n // other and only the last locale would survive.\n for (const locale of readyTranslations) {\n await handleImportDocument(documentId, versionId, locale.localeId);\n }\n\n // Auto patch document references if enabled\n if (autoPatchReferences) {\n await handlePatchDocumentReferences();\n }\n\n // Auto publish translations if enabled\n if (autoPublish) {\n await handlePublishAllTranslations();\n }\n } finally {\n setIsImporting(false);\n }\n },\n [\n autoImport,\n isImporting,\n documentId,\n versionId,\n availableLocales,\n translationStatuses,\n importedTranslations,\n handleImportDocument,\n autoPatchReferences,\n handlePatchDocumentReferences,\n autoPublish,\n handlePublishAllTranslations,\n toast,\n ]\n );\n\n // Check for completed translations on status updates (auto-import)\n useEffect(() => {\n handleImportTranslations({ autoOnly: true });\n }, [handleImportTranslations]);\n\n // Enable auto features on mount\n useEffect(() => {\n setAutoRefresh(true);\n setAutoPatchReferences(true);\n setAutoPublish(true);\n }, [setAutoRefresh, setAutoPatchReferences, setAutoPublish]);\n\n // Locale toggle functionality\n const toggleLocale = useCallback(\n (localeId: string, shouldEnable: boolean) => {\n const updatedLocales = locales.map((locale) =>\n locale.localeId === localeId\n ? { ...locale, enabled: shouldEnable }\n : locale\n );\n setLocales(updatedLocales);\n },\n [locales, setLocales]\n );\n\n const toggleAllLocales = useCallback(() => {\n const sourceLocale = pluginConfig.getSourceLocale();\n const nonSourceLocales = locales.filter(\n (locale) => locale.localeId !== sourceLocale\n );\n const allEnabled = nonSourceLocales.every(\n (locale) => locale.enabled === true || locale.enabled === undefined\n );\n\n const updatedLocales = locales.map((locale) =>\n locale.localeId === sourceLocale\n ? locale // Don't change source locale\n : { ...locale, enabled: !allEnabled }\n );\n setLocales(updatedLocales);\n }, [locales, setLocales]);\n\n // Show message if we're not on a source language document\n if (!shouldShowTranslationComponents) {\n return (\n <Card padding={4} tone='neutral' border>\n <Text size={1} muted>\n Translation tools are only available for{' '}\n <code>{pluginConfig.getSourceLocale()}</code> documents.\n </Text>\n </Card>\n );\n }\n\n return (\n <Stack space={6} padding={4}>\n {/* Generate Translations Section */}\n <Stack space={4}>\n <Text as='h2' weight='semibold' size={2}>\n Generate Translations\n </Text>\n\n {/* Locale Selection */}\n <Stack space={3}>\n <Flex align='center' justify='space-between'>\n <Text weight='semibold' size={1}>\n {availableLocales.length === 1\n ? 'Select locale'\n : 'Select locales'}\n </Text>\n <Button\n fontSize={1}\n padding={2}\n text='Toggle All'\n onClick={toggleAllLocales}\n />\n </Flex>\n\n <Grid columns={[1, 1, 2, 3]} gap={1}>\n {locales\n .filter(\n (locale) => locale.localeId !== pluginConfig.getSourceLocale()\n )\n .map((locale) => (\n <LocaleCheckbox\n key={locale.localeId}\n locale={locale}\n toggle={toggleLocale}\n checked={\n locale.enabled === true || locale.enabled === undefined\n }\n />\n ))}\n </Grid>\n </Stack>\n\n <Button\n onClick={() => {\n setAutoImport(true);\n handleTranslateAll();\n }}\n disabled={isBusy || !availableLocales.length}\n tone='positive'\n text={isBusy ? 'Creating translations...' : 'Generate Translations'}\n />\n </Stack>\n\n {/* Translation Status Section */}\n {documentId && versionId && availableLocales.length > 0 && (\n <Stack space={4}>\n <Flex align='center' justify='space-between'>\n <Text as='h2' weight='semibold' size={2}>\n Translation Status\n </Text>\n <Flex gap={3} align='center'>\n <Flex gap={2} align='center'>\n <Text size={1}>Auto-refresh</Text>\n <Switch\n checked={autoRefresh}\n onChange={() => setAutoRefresh(!autoRefresh)}\n />\n </Flex>\n <Button\n fontSize={1}\n padding={2}\n text='Refresh Status'\n onClick={handleRefreshAll}\n disabled={isRefreshing || isBusy}\n />\n </Flex>\n </Flex>\n\n <Box>\n {availableLocales.map((locale) => {\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n versionId,\n locale.localeId\n );\n const status = translationStatuses.get(key);\n const progress = status?.progress || 0;\n const isImported = importedTranslations.has(key);\n\n return (\n <LanguageStatus\n key={key}\n title={locale.description}\n progress={progress}\n isImported={isImported}\n importFile={async () => {\n if (!isImported && status?.isReady) {\n await handleImportDocument(\n documentId,\n versionId,\n locale.localeId\n );\n }\n }}\n />\n );\n })}\n </Box>\n\n {/* Import Controls */}\n <Stack space={3}>\n <Flex gap={3} align='center' justify='space-between'>\n <Flex gap={2} align='center'>\n <Button\n mode='ghost'\n tone='primary'\n onClick={() => handleImportTranslations()}\n text={isImporting ? 'Importing...' : 'Import All'}\n icon={DownloadIcon}\n disabled={\n isImporting ||\n availableLocales.every((locale) => {\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n versionId,\n locale.localeId\n );\n const status = translationStatuses.get(key);\n return !status?.isReady || importedTranslations.has(key);\n })\n }\n style={{ minWidth: '180px' }}\n />\n <Flex gap={2} align='center'>\n <Switch\n checked={autoImport}\n onChange={() => setAutoImport(!autoImport)}\n disabled={isImporting}\n />\n <Text size={1}>Auto-import when complete</Text>\n </Flex>\n </Flex>\n <Text size={1} muted>\n Imported{' '}\n {\n availableLocales.filter((locale) => {\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n versionId,\n locale.localeId\n );\n return importedTranslations.has(key);\n }).length\n }\n /\n {\n availableLocales.filter((locale) => {\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n versionId,\n locale.localeId\n );\n const status = translationStatuses.get(key);\n return status?.isReady;\n }).length\n }\n </Text>\n </Flex>\n\n <Flex gap={2} align='center' justify='flex-start'>\n <Tooltip\n placement='top'\n content={`Replaces references to ${pluginConfig.getSourceLocale()} documents in this document with the corresponding translated document reference`}\n >\n <Button\n mode='ghost'\n tone='caution'\n onClick={async () => {\n await handlePatchDocumentReferences();\n }}\n text={isBusy ? 'Patching...' : 'Patch References'}\n icon={isBusy ? null : LinkIcon}\n disabled={isBusy || isImporting}\n style={{ minWidth: '180px' }}\n />\n </Tooltip>\n <Flex gap={2} align='center'>\n <Switch\n checked={autoPatchReferences}\n onChange={() => setAutoPatchReferences(!autoPatchReferences)}\n disabled={isImporting || isBusy}\n />\n <Text size={1}>Auto-patch after import</Text>\n </Flex>\n </Flex>\n\n <Flex gap={2} align='center' justify='flex-start'>\n <Tooltip\n placement='top'\n content='Publishes all translations (if the source document is published)'\n >\n <Button\n mode='ghost'\n tone='positive'\n onClick={async () => {\n setIsPublishing(true);\n try {\n await handlePublishAllTranslations();\n } finally {\n setIsPublishing(false);\n }\n }}\n text={isPublishing ? 'Publishing...' : 'Publish Translations'}\n icon={isPublishing ? null : PublishIcon}\n disabled={isBusy || isPublishing || isImporting}\n style={{ minWidth: '180px' }}\n />\n </Tooltip>\n <Flex gap={2} align='center'>\n <Switch\n checked={autoPublish}\n onChange={() => setAutoPublish(!autoPublish)}\n disabled={isPublishing || isImporting || isBusy}\n />\n <Text size={1}>Auto-publish after import</Text>\n </Flex>\n </Flex>\n </Stack>\n </Stack>\n )}\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { DocumentActionComponent } from 'sanity';\nimport { TranslateIcon } from '@sanity/icons';\nimport { BaseTranslationWrapper } from '../components/shared/BaseTranslationWrapper';\nimport { TranslationsProvider } from '../components/TranslationsProvider';\nimport { TranslationView } from '../components/tab/TranslationView';\n\nexport const translateAction: DocumentActionComponent = (props) => {\n const [dialogOpen, setDialogOpen] = useState(false);\n const document = props.draft || props.published;\n\n return {\n label: 'Translate',\n icon: TranslateIcon,\n tone: 'primary',\n onHandle: () => setDialogOpen(true),\n dialog: dialogOpen\n ? {\n type: 'dialog' as const,\n header: 'Translations',\n onClose: () => setDialogOpen(false),\n content: (\n <BaseTranslationWrapper showContainer={false}>\n <TranslationsProvider singleDocument={document}>\n <TranslationView />\n </TranslationsProvider>\n </BaseTranslationWrapper>\n ),\n }\n : null,\n };\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { AddIcon, RemoveCircleIcon } from '@sanity/icons';\nimport {\n Box,\n Button,\n Card,\n Flex,\n Grid,\n Label,\n Stack,\n Text,\n Tooltip,\n} from '@sanity/ui';\nimport {\n ArrayOfObjectsItem,\n MemberItemError,\n setIfMissing,\n unset,\n type ArrayOfObjectsInputProps,\n type ArraySchemaType,\n type FieldMember,\n type FormPatch,\n type ObjectItemProps,\n type ObjectSchemaType,\n type PatchEvent,\n} from 'sanity';\nimport { randomKey } from '../utils/randomKey';\n\ntype LocaleItem = { _key: string; _type?: string; language?: string };\n\ntype GTArrayOptions = {\n sourceLocale: string;\n locales: string[];\n titles?: Record<string, string>;\n};\n\nfunction readGTOptions(\n schemaType: ArraySchemaType | ObjectSchemaType | undefined\n): GTArrayOptions | undefined {\n const options = schemaType?.options as\n | { gtInternationalizedArray?: GTArrayOptions }\n | undefined;\n return options?.gtInternationalizedArray;\n}\n\nfunction toneFromValidation(\n validation: ObjectItemProps['validation']\n): 'critical' | 'caution' | undefined {\n if (!validation?.length) return undefined;\n if (validation.some((marker) => marker.level === 'error')) return 'critical';\n if (validation.some((marker) => marker.level === 'warning')) return 'caution';\n return undefined;\n}\n\nfunction RemoveLocaleButton(props: {\n isSource: boolean;\n readOnly: boolean;\n onRemove: () => void;\n}) {\n const { isSource, readOnly, onRemove } = props;\n const button = (\n // The span keeps the tooltip working when the button is disabled\n // (disabled buttons don't emit pointer events).\n <span style={{ paddingBottom: '2px' }}>\n <Button\n mode='bleed'\n icon={RemoveCircleIcon}\n tone='critical'\n disabled={readOnly || isSource}\n onClick={onRemove}\n />\n </span>\n );\n\n if (!isSource) return button;\n\n return (\n <Tooltip\n animate\n portal\n placement='top'\n fallbackPlacements={['right', 'left']}\n content={\n <Text muted size={1}>\n Can't remove the source language\n </Text>\n }\n >\n {button}\n </Tooltip>\n );\n}\n\n/**\n * Item component for generated `internationalizedArray*Value` objects.\n *\n * Replaces the default array item (collapsed preview row + edit dialog) with\n * an inline editor: the `value` field rendered in place, retitled with the\n * locale label, plus a remove button. This is what makes localized fields\n * read as \"one labeled input per language\" instead of a generic object list.\n */\nexport function InternationalizedValueItem(props: ObjectItemProps) {\n const { inputProps, parentSchemaType, schemaType, validation } = props;\n const value = props.value as LocaleItem & { value?: unknown };\n const { onChange } = inputProps;\n\n const gtOptions =\n readGTOptions(schemaType) ??\n readGTOptions(parentSchemaType as ArraySchemaType);\n const language = value?.language;\n const languageLabel = language\n ? (gtOptions?.titles?.[language] ?? language)\n : 'Unknown language';\n const isSource = !!language && language === gtOptions?.sourceLocale;\n\n // For array-based values (e.g. Portable Text), insert patches from the\n // nested input can arrive rooted at the item while `value` doesn't exist\n // yet; initialize it and re-root those patches under `value`.\n const wrappedOnChange = useCallback(\n (patch: FormPatch | FormPatch[] | PatchEvent) => {\n if (!Array.isArray(patch)) {\n onChange(patch);\n return;\n }\n const currentValue = value?.value;\n const valueIsEmpty =\n currentValue == null ||\n (Array.isArray(currentValue) && currentValue.length === 0);\n const needsRerooting =\n valueIsEmpty &&\n patch.some(\n (p) =>\n p.type === 'insert' &&\n Array.isArray(p.path) &&\n p.path.length > 0 &&\n (p.path[0] === 'value' || typeof p.path[0] === 'number')\n );\n if (!needsRerooting) {\n onChange(patch);\n return;\n }\n const rerooted = patch.map((p) =>\n p.type === 'insert' && Array.isArray(p.path) && p.path[0] !== 'value'\n ? { ...p, path: ['value', ...p.path] }\n : p\n );\n onChange(\n currentValue === undefined\n ? [setIfMissing([], ['value']), ...rerooted]\n : rerooted\n );\n },\n [onChange, value?.value]\n );\n\n // Render only the `value` field, with the locale label as its title.\n const members = useMemo(\n () =>\n inputProps.members\n .filter(\n (member): member is FieldMember =>\n member.kind === 'field' && member.name === 'value'\n )\n .map((member) => ({\n ...member,\n field: {\n ...member.field,\n schemaType: {\n ...member.field.schemaType,\n title: (\n <Label muted size={1}>\n {languageLabel}\n </Label>\n ) as unknown as string,\n },\n },\n })),\n [inputProps.members, languageLabel]\n );\n\n const handleRemove = useCallback(() => {\n onChange(unset());\n }, [onChange]);\n\n return (\n <Card paddingTop={2} tone={toneFromValidation(validation)}>\n <Flex align='flex-end' gap={2}>\n <Box flex={1}>\n {inputProps.renderInput({\n ...inputProps,\n members,\n onChange: wrappedOnChange,\n // renderInput's parameter is typed as the base InputProps, which\n // doesn't know about object members.\n } as unknown as Parameters<typeof inputProps.renderInput>[0])}\n </Box>\n <RemoveLocaleButton\n isSource={isSource}\n readOnly={!!inputProps.readOnly}\n onRemove={handleRemove}\n />\n </Flex>\n </Card>\n );\n}\n\n/**\n * Input for generated `internationalizedArray*` fields.\n *\n * Renders items inline (each one an `InternationalizedValueItem`) instead of\n * the default array input's draggable preview rows, followed by one add\n * button per locale that doesn't have an entry yet. Each add button appends\n * `{ _key, _type, language }` so the new item lands with its locale preset\n * (the default \"Add item\" would create an item with no `language` — a dead\n * end, since `language` is read-only).\n */\nexport function InternationalizedArrayInput(props: ArrayOfObjectsInputProps) {\n const { members, schemaType, value, readOnly, onItemAppend } = props;\n const gtOptions = readGTOptions(schemaType);\n const itemType = schemaType.of[0]?.name;\n\n const handleAdd = useCallback(\n (language: string) => {\n const item: LocaleItem = { _key: randomKey(), _type: itemType, language };\n onItemAppend(item);\n },\n [onItemAppend, itemType]\n );\n\n if (!gtOptions) {\n // No locale config on the type (not generated by gtPlugin) — fall back\n // to the default array input rather than rendering a dead-end UI.\n return props.renderDefault(props);\n }\n\n const allLocales = [gtOptions.sourceLocale, ...gtOptions.locales];\n const existing = new Set(\n ((value as LocaleItem[] | undefined) ?? [])\n .map((item) => item.language)\n .filter(Boolean)\n );\n const missing = allLocales.filter((locale) => !existing.has(locale));\n\n return (\n <Stack space={3}>\n {members.length > 0 ? (\n <Stack space={2}>\n {members.map((member) =>\n member.kind === 'item' ? (\n <ArrayOfObjectsItem key={member.key} {...props} member={member} />\n ) : (\n <MemberItemError key={member.key} member={member} />\n )\n )}\n </Stack>\n ) : (\n <Card border tone='transparent' padding={3} radius={2}>\n <Text size={1} muted>\n This internationalized field currently has no translations.\n </Text>\n </Card>\n )}\n {!readOnly && missing.length > 0 ? (\n <Grid columns={Math.min(missing.length, 4)} gap={1}>\n {missing.map((locale) => (\n <Button\n key={locale}\n icon={AddIcon}\n mode='ghost'\n text={gtOptions.titles?.[locale] ?? locale}\n onClick={() => handleAdd(locale)}\n />\n ))}\n </Grid>\n ) : null}\n </Stack>\n );\n}\n","import { getLocaleProperties } from 'generaltranslation';\nimport { FieldProps, SchemaTypeDefinition } from 'sanity';\nimport {\n InternationalizedArrayInput,\n InternationalizedValueItem,\n} from './InternationalizedArrayInput';\nimport {\n FieldLevelFieldType,\n FieldLevelUIComponents,\n GTFieldLevelLocalizationConfig,\n} from './types';\n\nconst DEFAULT_TYPE_PREFIX = 'internationalizedArray';\n\nexport type CreateInternationalizedArrayTypesOptions = {\n sourceLocale: string;\n locales: string[];\n fieldTypes: FieldLevelFieldType[];\n languageTitles?: Record<string, string>;\n getLanguageTitle?: (locale: string) => string;\n typePrefix?: string;\n includeCompatibilityTypes?: boolean;\n components?: FieldLevelUIComponents;\n};\n\n/**\n * Resolve the components to attach to generated types. Each slot can be a\n * custom component, `false` (detach — Sanity's default rendering), or\n * undefined (GT's default). The `field` level-reset wrapper only makes sense\n * alongside GT's inline input, so its default follows the resolved `input`.\n */\nfunction resolveComponents(overrides: FieldLevelUIComponents | undefined): {\n input?: unknown;\n item?: unknown;\n field?: unknown;\n} {\n const input =\n overrides?.input === false\n ? undefined\n : (overrides?.input ?? InternationalizedArrayInput);\n const item =\n overrides?.item === false\n ? undefined\n : (overrides?.item ?? InternationalizedValueItem);\n const defaultField =\n input === InternationalizedArrayInput\n ? // Reset the field level so inline per-locale inputs don't inherit\n // nested-object indentation.\n (fieldProps: FieldProps) =>\n fieldProps.renderDefault({ ...fieldProps, level: 0 })\n : undefined;\n const field =\n overrides?.field === false ? undefined : (overrides?.field ?? defaultField);\n return { input, item, field };\n}\n\nfunction capitalize(value: string): string {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nfunction fieldTypeName(fieldType: FieldLevelFieldType): string {\n return typeof fieldType === 'string' ? fieldType : fieldType.name;\n}\n\n/** Build the generated `value` field definition for a localizable field type. */\nfunction valueField(fieldType: FieldLevelFieldType): Record<string, unknown> {\n if (fieldType === 'string' || fieldType === 'text') {\n return { name: 'value', type: fieldType, title: 'Value' };\n }\n if (fieldType === 'block') {\n return {\n name: 'value',\n type: 'array',\n title: 'Value',\n of: [{ type: 'block' }],\n };\n }\n // Custom object form: pass the user definition through under `value`.\n const { name: _name, ...rest } = fieldType;\n return { name: 'value', title: 'Value', ...rest };\n}\n\nfunction makeLanguageTitle(\n options: CreateInternationalizedArrayTypesOptions\n): (locale: string) => string {\n const { languageTitles, getLanguageTitle, sourceLocale } = options;\n return (locale: string) =>\n getLanguageTitle?.(locale) ??\n languageTitles?.[locale] ??\n getLocaleProperties(locale, sourceLocale).name ??\n locale;\n}\n\nfunction buildTypesForPrefix(\n prefix: string,\n options: CreateInternationalizedArrayTypesOptions\n): SchemaTypeDefinition[] {\n const { sourceLocale, locales, fieldTypes } = options;\n const languageTitle = makeLanguageTitle(options);\n const components = resolveComponents(options.components);\n\n return fieldTypes.map((fieldType) => {\n const typeName = `${prefix}${capitalize(fieldTypeName(fieldType))}`;\n const valueTypeName = `${typeName}Value`;\n\n // Locale identity comes from gtPlugin (sourceLocale + locales); surfaced\n // on both the array type (per-locale add buttons) and the value object\n // (inline item label + source-locale remove guard).\n const gtInternationalizedArray = {\n sourceLocale,\n locales,\n titles: Object.fromEntries(\n [sourceLocale, ...locales].map((locale) => [\n locale,\n languageTitle(locale),\n ])\n ),\n };\n\n const valueObject = {\n type: 'object',\n name: valueTypeName,\n ...(components.item ? { components: { item: components.item } } : {}),\n fields: [\n {\n name: 'language',\n type: 'string',\n title: 'Language',\n readOnly: true,\n // GT's inline item shows the locale as the value field's label;\n // with a custom or detached item, keep the field visible so the\n // locale is still discoverable in default/dialog rendering.\n hidden: components.item === InternationalizedValueItem,\n },\n valueField(fieldType),\n ],\n options: { gtInternationalizedArray },\n preview: {\n select: { language: 'language', value: 'value' },\n prepare(selection: { language?: string; value?: unknown }) {\n const localeLabel = selection.language\n ? languageTitle(selection.language)\n : 'Unknown';\n return {\n title:\n typeof selection.value === 'string'\n ? selection.value\n : localeLabel,\n subtitle: localeLabel,\n };\n },\n },\n };\n\n const arrayComponents = {\n ...(components.input ? { input: components.input } : {}),\n ...(components.field ? { field: components.field } : {}),\n };\n\n return {\n name: typeName,\n type: 'array',\n ...(Object.keys(arrayComponents).length\n ? { components: arrayComponents }\n : {}),\n of: [valueObject],\n options: { gtInternationalizedArray },\n } as unknown as SchemaTypeDefinition;\n });\n}\n\n/**\n * Generate `internationalizedArray*` schema types from gtPlugin locale config.\n *\n * Each generated type is an array of `{ _key, _type, language, value }` objects\n * matching `sanity-plugin-internationalized-array`, giving zero-migration\n * interop with existing internationalized-array data.\n *\n * When `typePrefix` is customized and `includeCompatibilityTypes` is true, the\n * standard `internationalizedArray*` names are also generated so existing\n * content keeps resolving.\n */\nexport function createInternationalizedArrayTypes(\n options: CreateInternationalizedArrayTypesOptions\n): SchemaTypeDefinition[] {\n const prefix = options.typePrefix ?? DEFAULT_TYPE_PREFIX;\n const includeCompatibilityTypes = options.includeCompatibilityTypes ?? true;\n\n const types = buildTypesForPrefix(prefix, options);\n\n if (includeCompatibilityTypes && prefix !== DEFAULT_TYPE_PREFIX) {\n types.push(...buildTypesForPrefix(DEFAULT_TYPE_PREFIX, options));\n }\n\n return types;\n}\n\nexport function resolveFieldLevelConfig(\n config: GTFieldLevelLocalizationConfig | undefined\n): Required<Pick<GTFieldLevelLocalizationConfig, 'enabled' | 'fieldTypes'>> &\n GTFieldLevelLocalizationConfig {\n return {\n enabled: false,\n fieldTypes: ['string', 'text'],\n typePrefix: DEFAULT_TYPE_PREFIX,\n includeCompatibilityTypes: true,\n ...config,\n };\n}\n","import React from 'react';\nimport { Box, Card, Stack, Text, Flex, Spinner } from '@sanity/ui';\nimport { LanguageStatus } from '../shared/LanguageStatus';\nimport { useTranslations } from '../TranslationsProvider';\nimport {\n createTranslationStatusKey,\n getDocumentPublishedId,\n} from '../../utils/documentIds';\n\nexport const TranslationsTable: React.FC = () => {\n const {\n documents,\n locales,\n loadingDocuments,\n translationStatuses,\n downloadStatus,\n importedTranslations,\n handleImportDocument,\n branchId,\n getVersionId,\n } = useTranslations();\n\n if (loadingDocuments) {\n return (\n <Flex align='center' justify='center' padding={4}>\n <Spinner />\n </Flex>\n );\n }\n\n return (\n <Box style={{ maxHeight: '60vh', overflowY: 'auto' }}>\n <Stack space={2}>\n {documents.map((document) => (\n <Card key={document._id} shadow={1} padding={3}>\n <Stack space={3}>\n <Flex justify='space-between' align='flex-start'>\n <Box flex={1}>\n <Text weight='semibold' size={1}>\n {getDocumentPublishedId(document)}\n </Text>\n <Text size={0} muted style={{ marginTop: '2px' }}>\n {document._type}\n </Text>\n </Box>\n </Flex>\n\n <Stack space={2}>\n {locales.length > 0 ? (\n locales\n .filter((locale) => locale.enabled !== false)\n .map((locale) => {\n const documentId = getDocumentPublishedId(document);\n const versionId = getVersionId(document);\n const key = createTranslationStatusKey(\n branchId,\n documentId,\n versionId,\n locale.localeId\n );\n const status = translationStatuses.get(key);\n const isDownloaded = downloadStatus.downloaded.has(key);\n const isImported = importedTranslations.has(key);\n\n return (\n <LanguageStatus\n key={`${document._id}-${versionId}-${locale.localeId}`}\n title={locale.description || locale.localeId}\n progress={status?.progress || 0}\n isImported={isImported || isDownloaded}\n importFile={async () => {\n await handleImportDocument(\n documentId,\n versionId,\n locale.localeId\n );\n }}\n />\n );\n })\n ) : (\n <Text size={1} muted>\n No locales configured\n </Text>\n )}\n </Stack>\n </Stack>\n </Card>\n ))}\n </Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Box, Button, Dialog, Flex, Stack, Text } from '@sanity/ui';\nimport { useTranslations } from '../TranslationsProvider';\n\ninterface TranslateAllDialogProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const TranslateAllDialog: React.FC<TranslateAllDialogProps> = ({\n isOpen,\n onClose,\n}) => {\n const { documents, handleTranslateAll } = useTranslations();\n\n const handleConfirm = async () => {\n onClose();\n await handleTranslateAll();\n };\n\n if (!isOpen) return null;\n\n return (\n <Dialog\n header='Confirm Translation'\n id='translate-all-dialog'\n onClose={onClose}\n footer={\n <Box padding={3}>\n <Flex gap={2}>\n <Button text='Cancel' mode='ghost' onClick={onClose} />\n <Button\n text='Translate All'\n tone='critical'\n onClick={handleConfirm}\n />\n </Flex>\n </Box>\n }\n >\n <Box padding={4}>\n <Stack space={3}>\n <Text>\n Are you sure you want to create translations for all{' '}\n {documents.length} documents?\n </Text>\n <Text size={1} muted>\n This will submit all documents to General Translation for\n processing.\n </Text>\n </Stack>\n </Box>\n </Dialog>\n );\n};\n","import React from 'react';\nimport { Box, Button, Dialog, Flex, Stack, Text } from '@sanity/ui';\nimport { useTranslations } from '../TranslationsProvider';\n\ninterface ImportAllDialogProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const ImportAllDialog: React.FC<ImportAllDialogProps> = ({\n isOpen,\n onClose,\n}) => {\n const { documents, handleImportAll } = useTranslations();\n\n const handleConfirm = async () => {\n onClose();\n await handleImportAll();\n };\n\n if (!isOpen) return null;\n\n return (\n <Dialog\n header='Confirm Import'\n id='import-all-dialog'\n onClose={onClose}\n footer={\n <Box padding={3}>\n <Flex gap={2}>\n <Button text='Cancel' mode='ghost' onClick={onClose} />\n <Button text='Import All' tone='critical' onClick={handleConfirm} />\n </Flex>\n </Box>\n }\n >\n <Box padding={4}>\n <Stack space={3}>\n <Text>\n Are you sure you want to import translations for all{' '}\n {documents.length} documents?\n </Text>\n <Text size={1} muted>\n This will download and apply translated content to your documents.\n Note that this will overwrite any existing translations!\n </Text>\n </Stack>\n </Box>\n </Dialog>\n );\n};\n","import React from 'react';\nimport { Box, Button, Dialog, Flex, Stack, Text } from '@sanity/ui';\nimport { useTranslations } from '../TranslationsProvider';\n\ninterface ImportMissingDialogProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const ImportMissingDialog: React.FC<ImportMissingDialogProps> = ({\n isOpen,\n onClose,\n}) => {\n const { handleImportMissing } = useTranslations();\n\n const handleConfirm = async () => {\n onClose();\n await handleImportMissing();\n };\n\n if (!isOpen) return null;\n\n return (\n <Dialog\n header='Confirm Import Missing'\n id='import-missing-dialog'\n onClose={onClose}\n footer={\n <Box padding={3}>\n <Flex gap={2}>\n <Button text='Cancel' mode='ghost' onClick={onClose} />\n <Button\n text='Import Missing'\n tone='primary'\n onClick={handleConfirm}\n />\n </Flex>\n </Box>\n }\n >\n <Box padding={4}>\n <Stack space={3}>\n <Text>\n Import only the missing translations (translations that are ready\n but haven't been imported to Sanity yet)?\n </Text>\n <Text size={1} muted>\n This will check existing translation metadata and only import\n translations that don't already exist in your dataset.\n </Text>\n </Stack>\n </Box>\n </Dialog>\n );\n};\n","import React from 'react';\nimport { Flex, Text, Spinner } from '@sanity/ui';\n\ninterface BatchProgressProps {\n isActive: boolean;\n current: number;\n total: number;\n operationName: string;\n}\n\nexport const BatchProgress: React.FC<BatchProgressProps> = ({\n isActive,\n current,\n total,\n operationName,\n}) => {\n if (!isActive) return null;\n\n return (\n <Flex justify='center' align='center' gap={3}>\n <Spinner size={1} />\n <Text size={1}>\n {operationName} {current} of {total}...\n </Text>\n </Flex>\n );\n};\n","import React, { useState } from 'react';\nimport {\n Box,\n Button,\n Container,\n Flex,\n Heading,\n Stack,\n Switch,\n Text,\n Tooltip,\n} from '@sanity/ui';\nimport {\n DownloadIcon,\n CheckmarkCircleIcon,\n LinkIcon,\n PublishIcon,\n} from '@sanity/icons';\nimport { Link } from 'sanity/router';\nimport { BaseTranslationWrapper } from '../shared/BaseTranslationWrapper';\nimport { TranslationsProvider, useTranslations } from '../TranslationsProvider';\nimport { TranslationsTable } from './TranslationsTable';\nimport { TranslateAllDialog } from './TranslateAllDialog';\nimport { ImportAllDialog } from './ImportAllDialog';\nimport { ImportMissingDialog } from './ImportMissingDialog';\nimport { BatchProgress } from './BatchProgress';\n\nconst TranslationsToolContent: React.FC = () => {\n const [isTranslateAllDialogOpen, setIsTranslateAllDialogOpen] =\n useState(false);\n const [isImportAllDialogOpen, setIsImportAllDialogOpen] = useState(false);\n const [isImportMissingDialogOpen, setIsImportMissingDialogOpen] =\n useState(false);\n\n const {\n isBusy,\n documents,\n locales,\n autoRefresh,\n loadingDocuments,\n importProgress,\n importedTranslations,\n isRefreshing,\n setAutoRefresh,\n handleRefreshAll,\n handlePatchDocumentReferences,\n handlePublishAllTranslations,\n } = useTranslations();\n\n // Track which specific operation is running\n const [currentOperation, setCurrentOperation] = useState<string | null>(null);\n\n const getOperationText = (\n operationName: string | null,\n isProcessing: boolean\n ) => {\n if (!isProcessing || !operationName) return operationName;\n\n switch (operationName) {\n case 'Translate All':\n return 'Translating...';\n case 'Import All':\n return 'Importing...';\n case 'Import Missing':\n return 'Importing...';\n case 'Patch Document References':\n return 'Patching...';\n case 'Publish Translations':\n return 'Publishing...';\n default:\n return 'Processing...';\n }\n };\n\n const getProgressOperationName = () => {\n switch (currentOperation) {\n case 'Import All':\n return 'Importing';\n case 'Import Missing':\n return 'Importing missing';\n case 'Patch Document References':\n return 'Patching';\n case 'Publish Translations':\n return 'Publishing';\n default:\n return 'Processing';\n }\n };\n\n // Reset current operation when operation completes\n React.useEffect(() => {\n if (!isBusy && !importProgress.isImporting) {\n setCurrentOperation(null);\n }\n }, [isBusy, importProgress.isImporting]);\n\n return (\n <Container width={2}>\n <Box padding={4} marginTop={5}>\n <Stack space={4}>\n <Flex align='center' justify='space-between'>\n <Stack space={2}>\n <Heading as='h2' size={3}>\n Translations\n </Heading>\n <Text size={2}>\n Manage your document translations from this centralized\n location.\n </Text>\n </Stack>\n\n <Flex gap={3} align='center'>\n <Flex gap={2} align='center'>\n <Text size={1}>Auto-refresh</Text>\n <Switch\n checked={autoRefresh}\n onChange={() => setAutoRefresh(!autoRefresh)}\n />\n </Flex>\n <Button\n fontSize={1}\n padding={2}\n text={isRefreshing ? 'Refreshing...' : 'Refresh Status'}\n onClick={handleRefreshAll}\n disabled={\n isRefreshing ||\n isBusy ||\n loadingDocuments ||\n documents.length === 0\n }\n />\n </Flex>\n </Flex>\n\n <Stack space={4}>\n <Box>\n <Text size={1} muted>\n {loadingDocuments\n ? 'Loading documents...'\n : `Found ${documents.length} documents available for translation`}\n </Text>\n </Box>\n\n <Flex justify='center'>\n <Button\n style={{ width: '200px' }}\n tone='critical'\n text={getOperationText(\n 'Translate All',\n isBusy && currentOperation === 'Translate All'\n )}\n onClick={() => {\n setCurrentOperation('Translate All');\n setIsTranslateAllDialogOpen(true);\n }}\n disabled={isBusy || loadingDocuments || documents.length === 0}\n />\n </Flex>\n\n <TranslationsTable />\n\n <Stack space={3}>\n <Flex gap={3} align='center' justify='space-between'>\n <Flex gap={2} align='center'>\n <Tooltip\n placement='top'\n content='Imports and overrides all translations'\n >\n <Button\n mode='ghost'\n onClick={() => {\n setCurrentOperation('Import All');\n setIsImportAllDialogOpen(true);\n }}\n text={getOperationText(\n 'Import All',\n isBusy && currentOperation === 'Import All'\n )}\n icon={\n isBusy && currentOperation === 'Import All'\n ? null\n : DownloadIcon\n }\n disabled={\n isBusy || loadingDocuments || documents.length === 0\n }\n />\n </Tooltip>\n <Tooltip\n placement='top'\n content=\"Imports all translations that are not yet imported (according to the source document's translation.metadata document)\"\n >\n <Button\n mode='ghost'\n tone='primary'\n onClick={() => {\n setCurrentOperation('Import Missing');\n setIsImportMissingDialogOpen(true);\n }}\n text={getOperationText(\n 'Import Missing',\n isBusy && currentOperation === 'Import Missing'\n )}\n icon={\n isBusy && currentOperation === 'Import Missing'\n ? null\n : DownloadIcon\n }\n disabled={\n isBusy || loadingDocuments || documents.length === 0\n }\n />\n </Tooltip>\n <Tooltip\n placement='top'\n content='Replaces references in documents with the corresponding translated document reference'\n >\n <Button\n mode='ghost'\n tone='caution'\n onClick={() => {\n setCurrentOperation('Patch Document References');\n handlePatchDocumentReferences();\n }}\n text={getOperationText(\n 'Patch Document References',\n isBusy &&\n currentOperation === 'Patch Document References'\n )}\n icon={\n isBusy &&\n currentOperation === 'Patch Document References'\n ? null\n : LinkIcon\n }\n disabled={\n isBusy || loadingDocuments || documents.length === 0\n }\n />\n </Tooltip>\n <Tooltip\n placement='top'\n content='Publishes all translations whose source document is published'\n >\n <Button\n mode='ghost'\n tone='positive'\n onClick={() => {\n setCurrentOperation('Publish Translations');\n handlePublishAllTranslations();\n }}\n text={getOperationText(\n 'Publish Translations',\n isBusy && currentOperation === 'Publish Translations'\n )}\n icon={\n isBusy && currentOperation === 'Publish Translations'\n ? null\n : PublishIcon\n }\n disabled={\n isBusy || loadingDocuments || documents.length === 0\n }\n />\n </Tooltip>\n {importedTranslations.size ===\n documents.length *\n locales.filter((l) => l.enabled !== false).length &&\n documents.length > 0 &&\n locales.length > 0 && (\n <Flex gap={2} align='center' style={{ color: 'green' }}>\n <CheckmarkCircleIcon />\n <Text size={1}>All translations imported</Text>\n </Flex>\n )}\n {importedTranslations.size > 0 &&\n importedTranslations.size <\n documents.length *\n locales.filter((l) => l.enabled !== false).length && (\n <Text size={1} style={{ color: '#666' }}>\n {importedTranslations.size}/\n {documents.length *\n locales.filter((l) => l.enabled !== false)\n .length}{' '}\n imported\n </Text>\n )}\n </Flex>\n <Box />\n </Flex>\n\n <BatchProgress\n isActive={importProgress.isImporting}\n current={importProgress.current}\n total={importProgress.total}\n operationName={getProgressOperationName()}\n />\n </Stack>\n </Stack>\n\n <Text size={2}>\n For more information, see the{' '}\n <Link href='https://dash.generaltranslation.com'>\n General Translation Dashboard\n </Link>\n .\n </Text>\n </Stack>\n </Box>\n\n <TranslateAllDialog\n isOpen={isTranslateAllDialogOpen}\n onClose={() => setIsTranslateAllDialogOpen(false)}\n />\n <ImportAllDialog\n isOpen={isImportAllDialogOpen}\n onClose={() => setIsImportAllDialogOpen(false)}\n />\n <ImportMissingDialog\n isOpen={isImportMissingDialogOpen}\n onClose={() => setIsImportMissingDialogOpen(false)}\n />\n </Container>\n );\n};\n\nconst TranslationsTool: React.FC = () => {\n return (\n <BaseTranslationWrapper showContainer={false}>\n <TranslationsProvider>\n <TranslationsToolContent />\n </TranslationsProvider>\n </BaseTranslationWrapper>\n );\n};\n\nexport default TranslationsTool;\n","import React from 'react';\nimport { SanityDocument } from 'sanity';\nimport { BaseTranslationWrapper } from '../shared/BaseTranslationWrapper';\nimport { TranslationsProvider } from '../TranslationsProvider';\nimport { TranslationView } from './TranslationView';\n\ntype TranslationTabProps = {\n document: {\n displayed: SanityDocument;\n };\n};\n\nconst TranslationTab = (props: TranslationTabProps) => {\n const { displayed } = props.document;\n\n return (\n <BaseTranslationWrapper showContainer={false}>\n <TranslationsProvider singleDocument={displayed}>\n <TranslationView />\n </TranslationsProvider>\n </BaseTranslationWrapper>\n );\n};\n\nexport default TranslationTab;\n","import type { PortableTextHtmlComponents } from '@portabletext/to-html';\nimport { getLocaleProperties } from 'generaltranslation';\nimport { libraryDefaultLocale } from 'generaltranslation/internal';\nimport { definePlugin } from 'sanity';\nimport { route } from 'sanity/router';\nimport { translateAction } from './actions/translateAction';\nimport { gt, pluginConfig } from './adapter/core';\nimport type {\n DedupeFields,\n IgnoreFields,\n SkipFields,\n TranslateDocumentFilter,\n FieldLevelTranslationMode,\n} from './adapter/types';\nimport {\n createInternationalizedArrayTypes,\n resolveFieldLevelConfig,\n} from './schema/createInternationalizedArrayTypes';\nimport type { GTFieldLevelLocalizationConfig } from './schema/types';\nimport TranslationsTool from './components/page/TranslationsTool';\nimport { documentInternationalization } from './documentInternationalization';\nimport type { CustomDeserializers } from './serialization/types';\nimport { SECRETS_NAMESPACE } from './utils/shared';\n\n// ===== Document Internationalization ===== //\nexport {\n useDocumentInternationalizationContext,\n DocumentInternationalizationMenu,\n useDeleteTranslationAction,\n useDuplicateWithTranslationsAction,\n} from './documentInternationalization';\nexport { documentInternationalization };\nexport type {\n DocumentInternationalizationConfig,\n Language,\n Metadata,\n TranslationReference,\n} from './documentInternationalization';\n\n// ===== Serialization Helpers ===== //\nexport { default as TranslationsTab } from './components/tab/TranslationsTab';\nexport { findLatestDraft } from './configuration/utils/findLatestDraft';\nexport { BaseDocumentSerializer } from './serialization/serialize/index';\nexport { BaseDocumentDeserializer } from './serialization/deserialize/BaseDocumentDeserializer';\nexport { BaseDocumentMerger } from './serialization/BaseDocumentMerger';\nexport {\n defaultStopTypes,\n customSerializers,\n} from './serialization/BaseSerializationConfig';\nexport { attachGTData, detachGTData } from './serialization/data';\nexport { translateAction };\nexport type {\n Secrets,\n Adapter,\n ExportForTranslation,\n ImportTranslation,\n TranslationFunctionContext,\n TranslationsTabConfigOptions,\n} from './types';\nexport type { SerializedDocument } from './serialization/types';\n\n// ===== Field-Level (Internationalized Array) Localization ===== //\nexport { createInternationalizedArrayTypes };\nexport type {\n GTFieldLevelLocalizationConfig,\n FieldLevelFieldType,\n FieldLevelUIComponents,\n} from './schema/types';\nexport type { FieldLevelTranslationMode };\n\nexport type GTPluginConfig = Omit<\n Parameters<typeof gt.setConfig>[0],\n 'locales'\n> & {\n locales: string[];\n // Alias for sourceLocale — accepted so users can spread gt.config.json directly.\n defaultLocale?: string;\n singletons?: string[];\n // Optional mapping function to map source document ids to translated singleton document ids\n // By default, the translated singleton document is is `${sourceDocumentId}-${locale}`\n singletonMapping?: (sourceDocumentId: string, locale: string) => string;\n ignoreFields?: IgnoreFields[];\n dedupeFields?: DedupeFields[];\n skipFields?: SkipFields[];\n languageField?: string;\n translateDocuments?: TranslateDocumentFilter[] | string[];\n secretsNamespace?: string;\n additionalStopTypes?: string[];\n additionalSerializers?: Partial<PortableTextHtmlComponents>;\n additionalDeserializers?: CustomDeserializers;\n additionalBlockDeserializers?: unknown[];\n // When true (default), automatically adds the @sanity/document-internationalization plugin\n // with language badges, translation menu, and per-language templates.\n // Requires translateDocuments to specify which document types to enable translations for.\n showDocumentInternationalization?: boolean;\n // Field-level (internationalized-array) localization. Generates\n // `internationalizedArray*` schema types + input components when enabled.\n // `fieldLevelLocalization` is a descriptive alias for the same config.\n internationalizedArray?: GTFieldLevelLocalizationConfig;\n fieldLevelLocalization?: GTFieldLevelLocalizationConfig;\n // How matched documents are translated. Independent from schema generation:\n // enabling `internationalizedArray` only adds editable fields; routing\n // translation through the array path requires opting in here. Default 'document'.\n translationLevel?: FieldLevelTranslationMode;\n // In 'mixed' mode, the document types that use the internationalized-array\n // strategy; everything else stays document-level.\n fieldLevelDocuments?: TranslateDocumentFilter[] | string[];\n};\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {gtPlugin} from 'gt-sanity'\n *\n * export default defineConfig({\n * // ...\n * plugins: [gtPlugin()],\n * })\n * ```\n */\nexport const gtPlugin = definePlugin<GTPluginConfig>(\n ({\n languageField = 'language',\n sourceLocale,\n defaultLocale,\n locales,\n customMapping,\n apiKey,\n projectId,\n singletons,\n singletonMapping,\n ignoreFields,\n dedupeFields,\n skipFields,\n translateDocuments,\n secretsNamespace = SECRETS_NAMESPACE,\n additionalStopTypes = [],\n additionalSerializers = {},\n additionalDeserializers = {},\n additionalBlockDeserializers = [],\n showDocumentInternationalization = true,\n internationalizedArray,\n fieldLevelLocalization,\n translationLevel = 'document',\n fieldLevelDocuments,\n }) => {\n // Resolve sourceLocale: explicit sourceLocale > defaultLocale (from gt.config.json) > library default\n const resolvedSourceLocale =\n sourceLocale ?? defaultLocale ?? libraryDefaultLocale;\n\n // Normalize translateDocuments: string[] → TranslateDocumentFilter[]\n const normalizeFilters = (\n entries: (TranslateDocumentFilter | string)[] | undefined\n ): TranslateDocumentFilter[] | undefined =>\n entries\n ?.map((entry) => (typeof entry === 'string' ? { type: entry } : entry))\n .filter((filter) => filter.documentId || filter.type);\n\n const normalizedTranslateDocuments = normalizeFilters(translateDocuments);\n const normalizedFieldLevelDocuments =\n normalizeFilters(fieldLevelDocuments) ?? [];\n\n // `internationalizedArray` and `fieldLevelLocalization` are aliases.\n const fieldLevelConfig = resolveFieldLevelConfig(\n internationalizedArray ?? fieldLevelLocalization\n );\n\n pluginConfig.init(\n secretsNamespace,\n languageField,\n resolvedSourceLocale,\n locales,\n singletons || [],\n // singletons is a string array of singleton document ids\n singletonMapping ||\n ((sourceDocumentId, locale) => `${sourceDocumentId}-${locale}`),\n ignoreFields || [],\n dedupeFields || [],\n skipFields || [],\n normalizedTranslateDocuments || [],\n additionalStopTypes,\n additionalSerializers,\n additionalDeserializers,\n additionalBlockDeserializers,\n translationLevel,\n normalizedFieldLevelDocuments,\n fieldLevelConfig.typePrefix\n );\n gt.setConfig({\n sourceLocale: resolvedSourceLocale,\n customMapping: customMapping,\n apiKey: apiKey,\n projectId: projectId,\n });\n\n // Document types localized in place via internationalized arrays must NOT\n // get @sanity/document-internationalization (language badges + per-locale\n // documents). Build the set of array-localized types from translationLevel.\n const arrayLocalizedTypes = new Set<string>();\n if (translationLevel === 'internationalizedArray') {\n normalizedTranslateDocuments\n ?.map((filter) => filter.type)\n .filter((type): type is string => !!type)\n .forEach((type) => arrayLocalizedTypes.add(type));\n } else if (translationLevel === 'mixed') {\n normalizedFieldLevelDocuments\n .map((filter) => filter.type)\n .filter((type): type is string => !!type)\n .forEach((type) => arrayLocalizedTypes.add(type));\n }\n\n // Auto-add document internationalization plugin\n const plugins = [];\n if (showDocumentInternationalization) {\n const schemaTypes =\n normalizedTranslateDocuments\n ?.map((filter) => filter.type)\n .filter((type): type is string => !!type)\n .filter((type) => !arrayLocalizedTypes.has(type)) ?? [];\n if (schemaTypes.length > 0) {\n const allLocales = [resolvedSourceLocale, ...locales];\n const supportedLanguages = allLocales.map((locale) => {\n const props = getLocaleProperties(locale, resolvedSourceLocale);\n return { id: locale, title: props.name };\n });\n plugins.push(\n documentInternationalization({\n supportedLanguages,\n schemaTypes,\n languageField,\n })\n );\n }\n }\n\n const schemaTypes = fieldLevelConfig.enabled\n ? createInternationalizedArrayTypes({\n sourceLocale: resolvedSourceLocale,\n locales,\n fieldTypes: fieldLevelConfig.fieldTypes,\n languageTitles: fieldLevelConfig.languageTitles,\n getLanguageTitle: fieldLevelConfig.getLanguageTitle,\n typePrefix: fieldLevelConfig.typePrefix,\n includeCompatibilityTypes: fieldLevelConfig.includeCompatibilityTypes,\n components: fieldLevelConfig.components,\n })\n : [];\n\n return {\n name: 'gt-sanity',\n plugins,\n schema: {\n types: schemaTypes,\n },\n tools: [\n {\n name: 'translations',\n title: 'Translations',\n component: TranslationsTool,\n router: route.create('/*'),\n },\n ],\n document: {\n actions: (prev) => {\n return [...prev, translateAction];\n },\n },\n };\n }\n);\n"],"names":["useSanityClient","useState","useEffect","GT","libraryDefaultLocale","buildTheme","jsxs","Fragment","jsx","Flex","Spinner","Box","Card","Text","ThemeProvider","ToastProvider","isRecord","extractWithPath","match","arrayToJSONMatchPath","document","JSONPath","JSONPointer","DEFAULT_TYPE_PREFIX","Schema","htmlToBlocks","node","next","deserializeDocument","META_FIELDS","toHTML","schema","f","merge","filter","createContext","useContext","useRef","useSchema","useToast","useCallback","_","prev","branchId","existingTranslations","secrets","Label","Grid","CheckmarkCircleIcon","Button","DownloadIcon","from","length","position","character","characters","j","k","x","y","z","o","t","n","e","r","s","d.RULESET","d.prefixer","d.stringify","a","c","l","d.compile","p","d.serialize","d.middleware","d.rulesheet","h","m","g","S","w","E","N","O","i","d","v","b","u","D","styled","Switch","useMemo","Stack","Tooltip","LinkIcon","PublishIcon","TranslateIcon","RemoveCircleIcon","setIfMissing","unset","ArrayOfObjectsItem","MemberItemError","AddIcon","getLocaleProperties","prefix","Dialog","React","Container","Heading","Link","definePlugin","schemaTypes","documentInternationalization","route"],"mappings":"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","x_google_ignoreList":[43,44,45,46,47,48,49,50,51,52,53,54]}
|