gt-sanity 1.0.6 → 1.0.8
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.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/translation/initProject.ts +20 -22
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","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/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/applyDocuments.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.1.1_react@19.1.1__react@19.1.1/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, any> = {};\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 { TranslateDocumentFilter, IgnoreFields } from './types';\nimport { SECRETS_NAMESPACE } from '../utils/shared';\nimport type { PortableTextHtmlComponents } from '@portabletext/to-html';\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 translateDocuments: TranslateDocumentFilter[];\n additionalStopTypes: string[];\n additionalSerializers: Partial<PortableTextHtmlComponents>;\n additionalDeserializers: Record<string, any>;\n additionalBlockDeserializers: any[];\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 translateDocuments: TranslateDocumentFilter[],\n additionalStopTypes: string[] = [],\n additionalSerializers: Partial<PortableTextHtmlComponents> = {},\n additionalDeserializers: Partial<PortableTextHtmlComponents> = {},\n additionalBlockDeserializers: any[] = []\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.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 []\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 translateDocuments: TranslateDocumentFilter[],\n additionalStopTypes: string[] = [],\n additionalSerializers: Partial<PortableTextHtmlComponents> = {},\n additionalDeserializers: Partial<PortableTextHtmlComponents> = {},\n additionalBlockDeserializers: any[] = []\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.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 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 reconcileArray = (origArray: any[], translatedArray: any[]): any[] => {\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));\n\n translatedArray.forEach((block) => {\n if (!block._key) {\n return;\n }\n const foundBlockIdx = origArray.findIndex(\n (origBlock) => origBlock._key === block._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 block\n )}`\n );\n } else if (\n origArray[foundBlockIdx]._type === 'block' ||\n origArray[foundBlockIdx]._type === 'span'\n ) {\n combined[foundBlockIdx] = block;\n } else if (Array.isArray(origArray[foundBlockIdx])) {\n combined[foundBlockIdx] = reconcileArray(origArray[foundBlockIdx], block);\n } else {\n combined[foundBlockIdx] = reconcileObject(\n origArray[foundBlockIdx],\n block\n );\n }\n });\n return combined;\n};\n\nconst reconcileObject = (\n origObject: Record<string, any>,\n translatedObject: Record<string, any>\n): Record<string, any> => {\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));\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(origObject[key] ?? [], value);\n } else {\n updatedObj[key] = reconcileObject(origObject[key] ?? {}, value);\n }\n });\n return updatedObj;\n};\n\nconst fieldLevelMerge = (\n translatedFields: Record<string, any>,\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, any> => {\n const merged: Record<string, any> = {};\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((origVal as Array<any>) ?? [], translatedVal);\n } else if (\n typeof translatedVal === 'object' &&\n Object.keys(translatedVal as Record<string, any>).length\n ) {\n valToPatch = reconcileObject(\n origVal ?? {},\n translatedVal as Record<string, any>\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 translatedFields: Record<string, any>,\n //should be fetched according to the revision and id of the translated obj above\n baseDoc: SanityDocument\n): Record<string, any> => {\n return reconcileObject(baseDoc, translatedFields);\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, any>,\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, any>>;\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, any>> | 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 { attachGTData, detachGTData } from './data';\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 }: { value: Record<string, any> }) =>\n `<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: Record<string, any> = { types: {} };\n\nexport const customBlockDeserializers: Array<any> = [\n // handle marks with data-gt-internal\n {\n deserialize(\n el: HTMLParagraphElement,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\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 (children) {\n (children as any).forEach((child: any) => {\n child.marks = data?.markDef?._key\n ? [...(child.marks || []), data.markDef._key]\n : [...(child.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 el: HTMLParagraphElement,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\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 el: HTMLParagraphElement,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\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\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, any>,\n baseLang: string\n): Record<string, any> => {\n const filterToLangField = (childObj: Record<string, any>) => {\n const filteredObj: Record<string, any> = {};\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 = (childObj: Record<string, any>): Record<string, any> => {\n const filteredObj: Record<string, any> = {};\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: any = childObj[key];\n //we've reached a base language field, add it to\n //what we want to send to translation\n if (value.hasOwnProperty(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((validArr, objInArray) => {\n if (objInArray._type === 'block') {\n validArr.push(objInArray);\n } else if (objInArray.hasOwnProperty(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 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 (typeof value === 'object') {\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, any>,\n objFields: ObjectField[],\n stopTypes: string[]\n): TypedObject => {\n const filteredObj: TypedObject = { _type: obj._type };\n\n const fieldFilterFunc = (field: Record<string, any>) => {\n if (field.localize === false) {\n return false;\n } else if (field.type === 'string' || field.type === 'text') {\n return true;\n } else if (Array.isArray(obj[field.name])) {\n return true;\n } else if (!stopTypes.includes(field.type)) {\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 { SanityDocument, TypedObject, Schema } from 'sanity';\nimport { TranslationLevel } from '../types';\nimport { fieldFilter, languageObjectFieldFilter } from './fieldFilters';\nimport { PortableTextTypeComponent, toHTML } from '@portabletext/to-html';\n\nconst META_FIELDS = ['_key', '_type', '_id', '_weak'];\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) =>\n schemas?._original?.types.find((s) => s.name === name) as any;\n\n const serializeObject = (\n obj: TypedObject,\n stopTypes: string[],\n serializers: Record<string, any>\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 hasSerializer =\n serializers.types && Object.keys(serializers.types).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: Record<string, any>) => field.name)\n .filter((schemaKey: string) => 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: { ...serializers.types },\n });\n }\n\n //this is an object in an object, serialize it first\n else {\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: { ...serializers.types },\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 ...serializers.types,\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}\". Please 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: Record<string, any>[],\n fieldName: string,\n stopTypes: string[],\n serializers: Record<string, any>\n ) => {\n //filter for any blocks that user has indicated\n //should not be sent for translation\n const validBlocks = fieldContent.filter(\n (block) => !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 const schema = getSchema(block._type);\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, any> = {};\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, any> = {};\n\n for (const key in filteredObj) {\n if (filteredObj.hasOwnProperty(key) === false) continue;\n const value: Record<string, any> | Array<any> | string = filteredObj[key];\n\n if (typeof value === 'string') {\n serializedFields[key] = value;\n } else if (Array.isArray(value)) {\n serializedFields[key] = serializeArray(\n value,\n key,\n stopTypes,\n serializers\n );\n } else if (\n 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 { Deserializer } from '../types';\nimport { blockContentType, preprocess } from './helpers';\nimport { mergeBlocks } from '../helpers';\n\nexport const deserializeArray = (\n arrayHTML: Element,\n deserializers: Record<string, any> = customDeserializers,\n blockDeserializers = customBlockDeserializers\n) => {\n const output: any[] = [];\n const children = Array.from(arrayHTML.children);\n children.forEach((child) => {\n let deserializedObject: any;\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 deserializedObject._key = child.id;\n } else {\n deserializedObject = htmlToBlocks(child.outerHTML, blockContentType, {\n rules: blockDeserializers,\n });\n deserializedObject = mergeBlocks(deserializedObject);\n deserializedObject._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: Record<string, any> = customDeserializers,\n blockDeserializers = customBlockDeserializers\n) => {\n const deserialize = deserializers.types[objectHTML.className];\n if (deserialize) {\n return deserialize(objectHTML);\n }\n\n const output: Record<string, any> = {};\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: Record<string, any>,\n blockDeserializers: Array<any>\n): Record<string, any> | any[] => {\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, any> | any[];\n\n //prioritize custom deserialization\n const deserialize = deserializers.types[HTMLnode.className];\n if (deserialize) {\n output = deserialize(HTMLnode);\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 serializedDoc: string,\n deserializers: Record<string, any> = customDeserializers,\n blockDeserializers = customBlockDeserializers\n): Record<string, any> => {\n const metadata: Record<string, any> = {};\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: Record<string, any> = deserializeHTML(\n serializedDoc,\n deserializers,\n blockDeserializers\n );\n\n return {\n ...content,\n ...metadata,\n };\n};\n\nexport const BaseDocumentDeserializer: Deserializer = {\n deserializeDocument,\n deserializeHTML,\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';\n\nexport function deserializeDocument(document: string) {\n const deserializers = merge(\n { types: {} },\n pluginConfig.getAdditionalDeserializers()\n ) satisfies Partial<PortableTextHtmlComponents>;\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 serialized = BaseDocumentSerializer(schema).serializeDocument(\n document,\n 'document',\n baseLanguage,\n stopTypes,\n serializers\n );\n return serialized;\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 } 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 const setupDecision = await Promise.resolve(gt.shouldSetupProject?.())\n .then((v: any) => v)\n .catch(() => ({ shouldSetupProject: false }));\n const shouldSetupProject = Boolean(setupDecision?.shouldSetupProject);\n\n // Step 2: Setup if needed and poll until complete\n if (shouldSetupProject) {\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 { setupJobId } = await gt.setupProject(uploadResult.uploadedFiles);\n\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.checkSetupStatus(setupJobId);\n\n if (status.status === 'completed') {\n setupCompleted = true;\n break;\n }\n if (status.status === 'failed') {\n setupFailedMessage = status.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 console.log('Setup successfully completed');\n return true;\n } else {\n console.log(`Setup ${setupFailedMessage ? 'failed' : 'timed out'} `);\n return false;\n }\n } else {\n console.log('Setup not needed');\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 type { Secrets } from '../types';\n\nexport type BatchedFiles = Array<{\n documentId: string;\n versionId: string;\n translationId: string;\n locale: string;\n}>;\n\nexport type DownloadedFile = {\n docData: {\n documentId: string;\n versionId: string;\n translationId: string;\n locale: string;\n };\n data: string;\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: BatchedFiles,\n secrets: Secrets,\n maxRetries = 3,\n retryDelay = 1000\n): Promise<DownloadedFile[]> {\n overrideConfig(secrets);\n let retries = 0;\n const fileIds = files.map((file) => file.translationId);\n\n const map = new Map(files.map((file) => [file.translationId, file]));\n const result = [] as DownloadedFile[];\n\n while (retries <= maxRetries) {\n try {\n // Download the files\n const responseData = await gt.downloadFileBatch(fileIds);\n const downloadedFiles = responseData.files || [];\n\n // Process each file in the response\n for (const file of downloadedFiles) {\n const documentData = map.get(file.id);\n if (!documentData) {\n continue;\n }\n\n result.push({\n docData: documentData,\n data: file.data,\n });\n }\n\n return result;\n } catch (error) {\n // Increment retry counter and wait before next attempt\n retries++;\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n }\n }\n\n return result;\n}\n","import type { Secrets } from '../types';\nimport { gt, overrideConfig } from '../adapter/core';\n\nexport async function checkTranslationStatus(\n fileQueryData: { versionId: string; fileId: string; locale: string }[],\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(\n (item) =>\n !downloadStatus.downloaded.has(`${item.fileId}:${item.locale}`) &&\n !downloadStatus.failed.has(`${item.fileId}:${item.locale}`) &&\n !downloadStatus.skipped.has(`${item.fileId}:${item.locale}`)\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.checkFileTranslations(currentQueryData);\n\n const translations = responseData.translations || [];\n\n // Filter for ready translations\n const readyTranslations = translations.filter(\n (translation) => translation.isReady && translation.fileId\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';\n\n//use perspectives in the future\nexport const findLatestDraft = (\n documentId: string,\n client: SanityClient\n): Promise<SanityDocument> => {\n const query = `*[_id == $id || _id == $draftId]`;\n const params = { id: documentId, draftId: `drafts.${documentId}` };\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 { IgnoreFields } from '../adapter/types';\n\nexport function applyDocuments(\n documentId: string,\n sourceDocument: Record<string, any>,\n targetDocument: Record<string, any>,\n ignore: IgnoreFields[]\n) {\n const ignoreFields = ignore.filter(\n (field) =>\n field.documentId === documentId ||\n field.documentId === undefined ||\n field.documentId === null\n );\n\n // Start with a shallow copy of the source document\n const mergedDocument = { ...sourceDocument };\n\n // Merge top-level properties of targetDocument\n for (const [key, value] of Object.entries(targetDocument)) {\n mergedDocument[key] = value;\n }\n\n // Process ignored fields and restore them from source document\n for (const ignoreField of ignoreFields) {\n if (!ignoreField.fields) continue;\n\n for (const field of ignoreField.fields) {\n const { property, type } = field;\n\n try {\n // Use JSONPath to find matching paths, then JSONPointer to get/set values\n const sourceResults = JSONPath({\n json: sourceDocument,\n path: property,\n resultType: 'all',\n flatten: true,\n wrap: true,\n });\n\n if (sourceResults && sourceResults.length > 0) {\n // Process each matching path\n sourceResults.forEach((result: { pointer: string; value: any }) => {\n const sourceValue = result.value;\n\n // If type is specified, check if it matches the object's _type property\n if (type !== undefined) {\n if (\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n sourceValue._type === type\n ) {\n // Type matches, restore the entire object using JSONPointer\n JSONPointer.set(mergedDocument, result.pointer, sourceValue);\n }\n } else {\n // No type specified, restore the value using JSONPointer\n JSONPointer.set(mergedDocument, result.pointer, sourceValue);\n }\n });\n }\n } catch (error) {\n // Invalid JSONPath, skip this field\n console.warn(`Invalid JSONPath: ${property}`, error);\n }\n }\n }\n\n return mergedDocument;\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';\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 translatedDoc[languageField] = localeId;\n const translations = translationMetadata.translations as Record<\n string,\n any\n >[];\n const existingLocaleKey = translations.find(\n (translation) => translation._key === localeId\n );\n const operation = existingLocaleKey ? 'replace' : 'after';\n const location = existingLocaleKey\n ? `translations[_key == \"${localeId}\"]`\n : 'translations[-1]';\n\n //remove system fields\n const { _updatedAt, _createdAt, ...rest } = translatedDoc;\n\n const appliedDocument = applyDocuments(\n sourceDocumentId,\n sourceDocument,\n rest,\n pluginConfig.getIgnoreFields()\n );\n\n // Check if this is a singleton document and apply singleton mapping\n const singletons = pluginConfig.getSingletons();\n const isSingleton = singletons.includes(sourceDocumentId);\n\n let createDocumentPromise;\n if (isSingleton) {\n const singletonMapping = pluginConfig.getSingletonMapping();\n const translatedDocId = singletonMapping(sourceDocumentId, localeId);\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 = doc._id.replace('drafts.', '');\n const result = await client\n .transaction()\n .patch(translationMetadata._id, (p) =>\n p.insert(operation, location, [\n {\n _key: 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';\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 // First, try to get existing metadata\n const existingMetadata = await client.fetch(\n `*[\n _type == 'translation.metadata' &&\n translations[_key == $baseLanguage][0].value._ref == $id\n ][0]`,\n { baseLanguage, id: documentId.replace('drafts.', '') }\n );\n\n if (existingMetadata) {\n return existingMetadata;\n }\n\n // If no metadata exists, create it atomically\n const baseLangEntry: TranslationReference = {\n _key: baseLanguage,\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref: baseDocument._id.replace('drafts.', ''),\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.${documentId.replace('drafts.', '')}`,\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[_key == $baseLanguage][0].value._ref == $id\n ][0]`,\n { baseLanguage, id: documentId.replace('drafts.', '') }\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 { applyDocuments } 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, any>,\n client: SanityClient\n): Promise<void> {\n const cleanedMerge: Record<string, any> = {};\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, any> = {};\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 );\n const newDocument = await client\n .patch(i18nDocId, { set: appliedDocument })\n .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\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 i18nDocId = (\n translationMetadata.translations as Array<Record<string, any>>\n ).find((translation) => translation._key === localeId)?.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 );\n }\n //otherwise, create a new document\n //and add the document reference to the metadata document\n else {\n await createI18nDocAndPatchMetadata(\n baseDoc,\n merged,\n localeId,\n client,\n translationMetadata,\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\ninterface TranslationMetadata {\n _id: string;\n _type: 'translation.metadata';\n translations: {\n _key: string;\n value: Reference;\n }[];\n}\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: any,\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 (obj._ref) {\n references.push({ ref: obj as Reference, path });\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n references.push(...findReferences(item, [...path, index.toString()]));\n });\n } else {\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[_key == $sourceLocale && value._ref in $refIds]) > 0] {\n \"originalRef\": translations[_key == $sourceLocale][0].value._ref,\n \"translatedRef\": translations[_key == $locale][0].value._ref\n }[defined(originalRef) && defined(translatedRef)]`;\n\n const translationPairs: { originalRef: string; translatedRef: string }[] =\n await client.fetch(query, { refIds, sourceLocale, locale });\n\n // Build the translation map\n for (const { originalRef, translatedRef } of translationPairs) {\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);\n}\n\n/**\n * Recursively updates references in an object\n */\nfunction updateReferencesRecursive(\n obj: any,\n translatedRefs: Map<string, string>\n): any {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n if (obj._ref && 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: any = {};\n Object.keys(obj).forEach((key) => {\n updated[key] = updateReferencesRecursive(obj[key], translatedRefs);\n });\n\n return updated;\n}\n","import { SanityClient } from 'sanity';\nimport { pluginConfig } from '../adapter/core';\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 = sourceDocumentId.replace('drafts.', '');\n\n // Try both clean and original IDs to be safe, and use -> to directly fetch the translated doc\n const query = `*[\n _type == \"translation.metadata\" &&\n (\n translations[_key == $sourceLocale][0].value._ref == $cleanDocId\n ) &&\n defined(translations[_key == $localeId])\n ][0].translations[_key == $localeId][0].value->`;\n\n const translatedDoc = await client.fetch(query, {\n sourceLocale: pluginConfig.getSourceLocale(),\n cleanDocId,\n localeId,\n });\n\n return translatedDoc || 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';\n\nexport interface BatchProcessorOptions {\n batchSize?: number;\n onProgress?: (current: number, total: number) => void;\n onItemSuccess?: (item: any, result: any) => void;\n onItemFailure?: (item: any, error: any) => void;\n}\n\nexport interface ImportBatchItem {\n docInfo: GTFile;\n locale: string;\n data: any;\n translationContext: TranslationFunctionContext;\n key: string;\n}\n\nexport async function processBatch<T>(\n items: T[],\n processor: (item: T) => Promise<any>,\n options: BatchProcessorOptions = {}\n): Promise<{\n successCount: number;\n failureCount: number;\n successfulItems: any[];\n failedItems: { item: T; error: any }[];\n}> {\n const { batchSize = 20, onProgress, onItemSuccess, onItemFailure } = options;\n\n let successCount = 0;\n let failureCount = 0;\n const successfulItems: any[] = [];\n const failedItems: { item: T; error: any }[] = [];\n\n for (let i = 0; i < items.length; i += batchSize) {\n const batch = items.slice(i, i + batchSize);\n\n const batchPromises = batch.map(async (item) => {\n try {\n const result = await processor(item);\n onItemSuccess?.(item, result);\n return { success: true, item, result };\n } catch (error) {\n onItemFailure?.(item, error);\n return { success: false, item, error };\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 = {}\n): Promise<{\n successCount: number;\n failureCount: number;\n successfulImports: string[];\n failedItems: { item: ImportBatchItem; error: any }[];\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 onItemSuccess: (item: ImportBatchItem, key: string) => {\n successfulImports.push(key);\n options.onItemSuccess?.(item, key);\n },\n onItemFailure: (item: ImportBatchItem, error: any) => {\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 { SanityDocument } from 'sanity';\nimport { GTFile, Secrets, TranslationFunctionContext } from '../types';\nimport {\n downloadTranslations,\n BatchedFiles,\n} from '../translation/downloadTranslations';\nimport { processImportBatch, ImportBatchItem } from './batchProcessor';\n\nexport interface TranslationStatus {\n progress: number;\n isReady: boolean;\n translationId?: string;\n}\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 documents: SanityDocument[],\n translationStatuses: Map<string, TranslationStatus>,\n options: ImportOptions = {}\n): Promise<BatchedFiles> {\n const { filterReadyFiles = () => true } = options;\n const readyFiles: BatchedFiles = [];\n\n for (const [key, status] of translationStatuses.entries()) {\n if (\n status.isReady &&\n status.translationId &&\n filterReadyFiles(key, status)\n ) {\n const [documentId, locale] = key.split(':');\n const document = documents.find(\n (doc) => (doc._id?.replace('drafts.', '') || doc._id) === documentId\n );\n\n if (document) {\n readyFiles.push({\n documentId,\n versionId: document._rev,\n translationId: status.translationId,\n locale,\n });\n }\n }\n }\n\n return readyFiles;\n}\n\nexport async function importTranslations(\n readyFiles: BatchedFiles,\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 docInfo: {\n documentId: file.docData.documentId,\n versionId: file.docData.versionId,\n },\n locale: file.docData.locale,\n data: file.data,\n translationContext,\n key: `${file.docData.documentId}:${file.docData.locale}`,\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';\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: documentId.replace('drafts.', ''),\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 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 { 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';\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\ninterface TranslationStatus {\n progress: number;\n isReady: boolean;\n translationId?: string;\n}\n\ninterface TranslationsContextType {\n // State\n isBusy: boolean;\n documents: SanityDocument[];\n locales: TranslationLocale[];\n autoRefresh: 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\n // Actions\n setLocales: (locales: TranslationLocale[]) => void;\n setAutoRefresh: (value: boolean) => void;\n handleTranslateAll: () => Promise<void>;\n handleImportAll: () => Promise<void>;\n handleImportMissing: () => Promise<void>;\n handleRefreshAll: () => Promise<void>;\n handleImportDocument: (documentId: string, localeId: string) => 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 [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 [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\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(docs);\n } catch {\n toast.push({\n title: 'Error fetching documents',\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: 'Error fetching locales',\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(\n (doc) => doc._id?.replace('drafts.', '') || doc._id\n );\n\n const query = `*[\n _type == 'translation.metadata' &&\n translations[_key == $sourceLocale][0].value._ref in $documentIds\n ] {\n 'sourceDocId': translations[_key == $sourceLocale][0].value._ref,\n 'existingTranslations': translations[_key in $localeIds]._key\n }`;\n\n const existingMetadata = await client.fetch(query, {\n sourceLocale,\n documentIds,\n localeIds: availableLocaleIds,\n });\n\n const existing = new Set<string>();\n existingMetadata.forEach((metadata: any) => {\n metadata.existingTranslations?.forEach((localeId: string) => {\n if (localeId !== sourceLocale) {\n existing.add(`${metadata.sourceDocId}:${localeId}`);\n }\n });\n });\n\n setExistingTranslations(existing);\n } catch (error) {\n console.error('Error fetching existing translations:', error);\n toast.push({\n title: 'Error fetching existing translations',\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 delete doc[pluginConfig.getLanguageField()];\n const baseLanguage = pluginConfig.getSourceLocale();\n try {\n const serialized = serializeDocument(doc, schema, baseLanguage);\n return {\n info: {\n documentId: doc._id?.replace('drafts.', '') || doc._id,\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: 'Error creating translation tasks',\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) return;\n\n setIsBusy(true);\n\n try {\n const readyFiles = await getReadyFilesForImport(\n documents,\n translationStatuses\n );\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: 'Error importing translations',\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 ]);\n\n const getMissingTranslations = useCallback(\n async (\n documentIds: string[],\n localeIds: string[]\n ): Promise<Set<string>> => {\n const sourceLocale = pluginConfig.getSourceLocale();\n\n const query = `*[\n _type == 'translation.metadata' &&\n translations[_key == $sourceLocale][0].value._ref in $documentIds\n ] {\n 'sourceDocId': translations[_key == $sourceLocale][0].value._ref,\n 'existingTranslations': translations[_key in $localeIds]._key\n }`;\n\n const existingMetadata = await client.fetch(query, {\n sourceLocale,\n documentIds,\n localeIds,\n });\n\n const existing = new Set<string>();\n existingMetadata.forEach((metadata: any) => {\n metadata.existingTranslations?.forEach((localeId: string) => {\n if (localeId !== sourceLocale) {\n existing.add(`${metadata.sourceDocId}:${localeId}`);\n }\n });\n });\n\n const missing = new Set<string>();\n documentIds.forEach((docId) => {\n localeIds.forEach((localeId) => {\n if (localeId !== sourceLocale) {\n const key = `${docId}:${localeId}`;\n if (!existing.has(key)) {\n missing.add(key);\n }\n }\n });\n });\n\n return missing;\n },\n [client]\n );\n\n const handleImportMissing = 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 documentIds = documents.map(\n (doc) => doc._id?.replace('drafts.', '') || doc._id\n );\n\n const missingTranslations = await getMissingTranslations(\n documentIds,\n availableLocaleIds\n );\n\n console.log('missingTranslations', missingTranslations);\n const readyFiles = await getReadyFilesForImport(\n documents,\n translationStatuses,\n {\n filterReadyFiles: (key) => missingTranslations.has(key),\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: 'Error importing missing translations',\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 getMissingTranslations,\n ]);\n\n const handleRefreshAll = useCallback(async () => {\n if (!secrets || documents.length === 0) return;\n\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 = [];\n for (const doc of documents) {\n for (const localeId of availableLocaleIds) {\n const documentId = doc._id?.replace('drafts.', '') || doc._id;\n fileQueryData.push({\n versionId: doc._rev,\n fileId: documentId,\n locale: localeId,\n });\n }\n }\n\n const readyTranslations = await checkTranslationStatus(\n fileQueryData,\n downloadStatus,\n secrets\n );\n\n setTranslationStatuses((prevStatuses) => {\n const newStatuses = new Map();\n\n for (const doc of documents) {\n for (const localeId of availableLocaleIds) {\n const documentId = doc._id?.replace('drafts.', '') || doc._id;\n const key = `${documentId}:${localeId}`;\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 = `${translation.fileId}:${translation.locale}`;\n newStatuses.set(key, {\n progress: 100,\n isReady: true,\n translationId: translation.id,\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: 'Error refreshing translation status',\n status: 'error',\n closable: true,\n });\n } finally {\n setIsRefreshing(false);\n }\n }, [secrets, documents, locales]);\n\n const handleImportDocument = useCallback(\n async (documentId: string, localeId: string) => {\n if (!secrets) return;\n\n const key = `${documentId}:${localeId}`;\n const status = translationStatuses.get(key);\n\n if (!status?.isReady || !status.translationId) {\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) => (doc._id?.replace('drafts.', '') || doc._id) === 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 documentId,\n versionId: document._rev,\n translationId: status.translationId,\n locale: localeId,\n },\n ],\n secrets\n );\n\n if (downloadedFiles.length > 0) {\n try {\n const docInfo: GTFile = {\n 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\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: `Failed to import translation for ${documentId} (${localeId})`,\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: `Error importing translation for ${documentId}`,\n status: 'error',\n closable: true,\n });\n }\n },\n [secrets, documents, translationContext, translationStatuses]\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: 'Error patching document references',\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]);\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 publishedDocumentIds = documents\n .filter((doc) => !doc._id.startsWith('drafts.'))\n .map((doc) => doc._id);\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[_key == $sourceLocale][0].value._ref in $publishedDocumentIds\n ] {\n 'sourceDocId': translations[_key == $sourceLocale][0].value._ref,\n 'translationDocs': translations[_key != $sourceLocale && defined(value._ref)]{\n _key,\n 'docId': value._ref\n }\n }`;\n\n const translationMetadata = await client.fetch(query, {\n sourceLocale,\n publishedDocumentIds,\n });\n\n const translationDocIds: string[] = [];\n translationMetadata.forEach((metadata: any) => {\n metadata.translationDocs?.forEach((translation: any) => {\n if (translation.docId) {\n translationDocIds.push(translation.docId);\n }\n });\n });\n\n if (translationDocIds.length === 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 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: 'Error publishing translations',\n status: 'error',\n closable: true,\n });\n return 0;\n } finally {\n setIsBusy(false);\n }\n }, [secrets, documents, client]);\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 ) {\n handleRefreshAll();\n }\n }, [documents]);\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 const contextValue: TranslationsContextType = {\n // State\n isBusy,\n documents,\n locales,\n autoRefresh,\n loadingDocuments,\n importProgress,\n importedTranslations,\n existingTranslations,\n downloadStatus,\n translationStatuses,\n isRefreshing,\n loadingSecrets,\n secrets,\n\n // Actions\n setLocales,\n setAutoRefresh,\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\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 progress === 'number' ? (\n <Flex columnStart={3} columnEnd={5} align='center'>\n <ProgressBar progress={progress} />\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';\n\nexport const TranslationView = () => {\n const {\n documents,\n locales,\n translationStatuses,\n isBusy,\n handleTranslateAll,\n handleImportDocument,\n handleRefreshAll,\n isRefreshing,\n importedTranslations,\n setLocales,\n handlePatchDocumentReferences,\n handlePublishAllTranslations,\n } = useTranslations();\n\n const [autoImport, setAutoImport] = useState(false);\n const [isImporting, setIsImporting] = useState(false);\n const [autoRefresh, setAutoRefresh] = useState(true);\n const [autoPatchReferences, setAutoPatchReferences] = useState(true);\n const [autoPublish, setAutoPublish] = useState(true);\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 document._id?.replace('drafts.', '') || document._id;\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 = `${documentId}:${locale.localeId}`;\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, 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 // Auto refresh functionality\n useEffect(() => {\n if (!autoRefresh || !documentId || availableLocales.length === 0) return;\n\n const interval = setInterval(async () => {\n await handleRefreshAll();\n await handleImportTranslations({ autoOnly: true });\n }, 10000);\n\n return () => clearInterval(interval);\n }, [\n autoRefresh,\n documentId,\n availableLocales.length,\n handleRefreshAll,\n handleImportTranslations,\n ]);\n\n useEffect(() => {\n const initialRefresh = async () => {\n await handleRefreshAll();\n await handleImportTranslations({ autoOnly: true });\n };\n initialRefresh();\n }, []);\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}\n />\n </Flex>\n </Flex>\n\n <Box>\n {availableLocales.map((locale) => {\n const key = `${documentId}:${locale.localeId}`;\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(documentId, locale.localeId);\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 = `${documentId}:${locale.localeId}`;\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 = `${documentId}:${locale.localeId}`;\n return importedTranslations.has(key);\n }).length\n }\n /\n {\n availableLocales.filter((locale) => {\n const key = `${documentId}:${locale.localeId}`;\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 { DocumentActionComponent } from 'sanity';\nimport { useRouter } from 'sanity/router';\nimport { TranslateIcon } from '@sanity/icons';\n\nexport const translateAction: DocumentActionComponent = (props) => {\n const router = useRouter();\n\n return {\n label: 'Translate',\n icon: TranslateIcon,\n tone: 'primary',\n onHandle: () => {\n // Switch to the translation tab using the document ID and type\n const { id, type } = props;\n\n // Navigate to the translation view for this document\n router.navigateIntent('edit', {\n id,\n type,\n view: 'general-translation',\n });\n },\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';\n\nexport const TranslationsTable: React.FC = () => {\n const {\n documents,\n locales,\n loadingDocuments,\n translationStatuses,\n downloadStatus,\n importedTranslations,\n handleImportDocument,\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 {document._id?.replace('drafts.', '') || document._id}\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 =\n document._id?.replace('drafts.', '') || document._id;\n const key = `${documentId}:${locale.localeId}`;\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}-${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 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 Spinner,\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 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 type { IgnoreFields, TranslateDocumentFilter } 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';\n\nexport type GTPluginConfig = Omit<\n Parameters<typeof gt.setConfig>[0],\n 'locales'\n> & {\n locales: 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 languageField?: string;\n translateDocuments?: TranslateDocumentFilter[];\n secretsNamespace?: string;\n additionalStopTypes?: string[];\n additionalSerializers?: Partial<PortableTextHtmlComponents>;\n additionalDeserializers?: Record<string, any>;\n additionalBlockDeserializers?: any[];\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 = libraryDefaultLocale,\n locales,\n customMapping,\n apiKey,\n projectId,\n singletons,\n singletonMapping,\n ignoreFields,\n translateDocuments,\n secretsNamespace = SECRETS_NAMESPACE,\n additionalStopTypes = [],\n additionalSerializers = {},\n additionalDeserializers = {},\n additionalBlockDeserializers = [],\n }) => {\n // Validate the translateDocuments\n translateDocuments = translateDocuments?.filter((filter) => {\n if (filter.documentId || filter.type) {\n return true;\n }\n return false;\n });\n\n pluginConfig.init(\n secretsNamespace,\n languageField,\n sourceLocale,\n locales,\n singletons || [],\n // singletons is a string array of singleton document ids\n singletonMapping ||\n ((sourceDocumentId, locale) => `${sourceDocumentId}-${locale}`),\n ignoreFields || [],\n translateDocuments || [],\n additionalStopTypes,\n additionalSerializers,\n additionalDeserializers,\n additionalBlockDeserializers\n );\n gt.setConfig({\n sourceLocale: sourceLocale,\n customMapping: customMapping,\n apiKey: apiKey,\n projectId: projectId,\n });\n return {\n name: 'gt-sanity',\n tools: [\n {\n name: 'translations',\n title: 'Translations',\n component: TranslationsTool,\n router: route.create('/*'),\n },\n ],\n document: {\n views: [\n {\n id: 'general-translation',\n title: 'Translations',\n component: TranslationsTab,\n },\n ],\n actions: (prev) => {\n // Move translateAction to the beginning so it appears as a prominent button\n return [...prev, translateAction];\n },\n },\n };\n }\n);\n"],"names":["useSanityClient","match","next","META_FIELDS","f","deserializeDocument","document","v","filter","prev","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","b","u","D","styled","React","TranslationsTab"],"mappings":"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","x_google_ignoreList":[36,37,38,39,40,41,42,43,44,45,46,47]}
|
|
1
|
+
{"version":3,"file":"index.mjs","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/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/applyDocuments.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.1.1_react@19.1.1__react@19.1.1/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, any> = {};\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 { TranslateDocumentFilter, IgnoreFields } from './types';\nimport { SECRETS_NAMESPACE } from '../utils/shared';\nimport type { PortableTextHtmlComponents } from '@portabletext/to-html';\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 translateDocuments: TranslateDocumentFilter[];\n additionalStopTypes: string[];\n additionalSerializers: Partial<PortableTextHtmlComponents>;\n additionalDeserializers: Record<string, any>;\n additionalBlockDeserializers: any[];\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 translateDocuments: TranslateDocumentFilter[],\n additionalStopTypes: string[] = [],\n additionalSerializers: Partial<PortableTextHtmlComponents> = {},\n additionalDeserializers: Partial<PortableTextHtmlComponents> = {},\n additionalBlockDeserializers: any[] = []\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.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 []\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 translateDocuments: TranslateDocumentFilter[],\n additionalStopTypes: string[] = [],\n additionalSerializers: Partial<PortableTextHtmlComponents> = {},\n additionalDeserializers: Partial<PortableTextHtmlComponents> = {},\n additionalBlockDeserializers: any[] = []\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.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 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 reconcileArray = (origArray: any[], translatedArray: any[]): any[] => {\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));\n\n translatedArray.forEach((block) => {\n if (!block._key) {\n return;\n }\n const foundBlockIdx = origArray.findIndex(\n (origBlock) => origBlock._key === block._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 block\n )}`\n );\n } else if (\n origArray[foundBlockIdx]._type === 'block' ||\n origArray[foundBlockIdx]._type === 'span'\n ) {\n combined[foundBlockIdx] = block;\n } else if (Array.isArray(origArray[foundBlockIdx])) {\n combined[foundBlockIdx] = reconcileArray(origArray[foundBlockIdx], block);\n } else {\n combined[foundBlockIdx] = reconcileObject(\n origArray[foundBlockIdx],\n block\n );\n }\n });\n return combined;\n};\n\nconst reconcileObject = (\n origObject: Record<string, any>,\n translatedObject: Record<string, any>\n): Record<string, any> => {\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));\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(origObject[key] ?? [], value);\n } else {\n updatedObj[key] = reconcileObject(origObject[key] ?? {}, value);\n }\n });\n return updatedObj;\n};\n\nconst fieldLevelMerge = (\n translatedFields: Record<string, any>,\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, any> => {\n const merged: Record<string, any> = {};\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((origVal as Array<any>) ?? [], translatedVal);\n } else if (\n typeof translatedVal === 'object' &&\n Object.keys(translatedVal as Record<string, any>).length\n ) {\n valToPatch = reconcileObject(\n origVal ?? {},\n translatedVal as Record<string, any>\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 translatedFields: Record<string, any>,\n //should be fetched according to the revision and id of the translated obj above\n baseDoc: SanityDocument\n): Record<string, any> => {\n return reconcileObject(baseDoc, translatedFields);\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, any>,\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, any>>;\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, any>> | 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 { attachGTData, detachGTData } from './data';\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 }: { value: Record<string, any> }) =>\n `<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: Record<string, any> = { types: {} };\n\nexport const customBlockDeserializers: Array<any> = [\n // handle marks with data-gt-internal\n {\n deserialize(\n el: HTMLParagraphElement,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\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 (children) {\n (children as any).forEach((child: any) => {\n child.marks = data?.markDef?._key\n ? [...(child.marks || []), data.markDef._key]\n : [...(child.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 el: HTMLParagraphElement,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\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 el: HTMLParagraphElement,\n next: (\n elements: Node | Node[] | NodeList\n ) => TypedObject | TypedObject[] | undefined\n ): PortableTextTextBlock | TypedObject | undefined {\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\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, any>,\n baseLang: string\n): Record<string, any> => {\n const filterToLangField = (childObj: Record<string, any>) => {\n const filteredObj: Record<string, any> = {};\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 = (childObj: Record<string, any>): Record<string, any> => {\n const filteredObj: Record<string, any> = {};\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: any = childObj[key];\n //we've reached a base language field, add it to\n //what we want to send to translation\n if (value.hasOwnProperty(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((validArr, objInArray) => {\n if (objInArray._type === 'block') {\n validArr.push(objInArray);\n } else if (objInArray.hasOwnProperty(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 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 (typeof value === 'object') {\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, any>,\n objFields: ObjectField[],\n stopTypes: string[]\n): TypedObject => {\n const filteredObj: TypedObject = { _type: obj._type };\n\n const fieldFilterFunc = (field: Record<string, any>) => {\n if (field.localize === false) {\n return false;\n } else if (field.type === 'string' || field.type === 'text') {\n return true;\n } else if (Array.isArray(obj[field.name])) {\n return true;\n } else if (!stopTypes.includes(field.type)) {\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 { SanityDocument, TypedObject, Schema } from 'sanity';\nimport { TranslationLevel } from '../types';\nimport { fieldFilter, languageObjectFieldFilter } from './fieldFilters';\nimport { PortableTextTypeComponent, toHTML } from '@portabletext/to-html';\n\nconst META_FIELDS = ['_key', '_type', '_id', '_weak'];\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) =>\n schemas?._original?.types.find((s) => s.name === name) as any;\n\n const serializeObject = (\n obj: TypedObject,\n stopTypes: string[],\n serializers: Record<string, any>\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 hasSerializer =\n serializers.types && Object.keys(serializers.types).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: Record<string, any>) => field.name)\n .filter((schemaKey: string) => 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: { ...serializers.types },\n });\n }\n\n //this is an object in an object, serialize it first\n else {\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: { ...serializers.types },\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 ...serializers.types,\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}\". Please 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: Record<string, any>[],\n fieldName: string,\n stopTypes: string[],\n serializers: Record<string, any>\n ) => {\n //filter for any blocks that user has indicated\n //should not be sent for translation\n const validBlocks = fieldContent.filter(\n (block) => !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 const schema = getSchema(block._type);\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, any> = {};\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, any> = {};\n\n for (const key in filteredObj) {\n if (filteredObj.hasOwnProperty(key) === false) continue;\n const value: Record<string, any> | Array<any> | string = filteredObj[key];\n\n if (typeof value === 'string') {\n serializedFields[key] = value;\n } else if (Array.isArray(value)) {\n serializedFields[key] = serializeArray(\n value,\n key,\n stopTypes,\n serializers\n );\n } else if (\n 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 { Deserializer } from '../types';\nimport { blockContentType, preprocess } from './helpers';\nimport { mergeBlocks } from '../helpers';\n\nexport const deserializeArray = (\n arrayHTML: Element,\n deserializers: Record<string, any> = customDeserializers,\n blockDeserializers = customBlockDeserializers\n) => {\n const output: any[] = [];\n const children = Array.from(arrayHTML.children);\n children.forEach((child) => {\n let deserializedObject: any;\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 deserializedObject._key = child.id;\n } else {\n deserializedObject = htmlToBlocks(child.outerHTML, blockContentType, {\n rules: blockDeserializers,\n });\n deserializedObject = mergeBlocks(deserializedObject);\n deserializedObject._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: Record<string, any> = customDeserializers,\n blockDeserializers = customBlockDeserializers\n) => {\n const deserialize = deserializers.types[objectHTML.className];\n if (deserialize) {\n return deserialize(objectHTML);\n }\n\n const output: Record<string, any> = {};\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: Record<string, any>,\n blockDeserializers: Array<any>\n): Record<string, any> | any[] => {\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, any> | any[];\n\n //prioritize custom deserialization\n const deserialize = deserializers.types[HTMLnode.className];\n if (deserialize) {\n output = deserialize(HTMLnode);\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 serializedDoc: string,\n deserializers: Record<string, any> = customDeserializers,\n blockDeserializers = customBlockDeserializers\n): Record<string, any> => {\n const metadata: Record<string, any> = {};\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: Record<string, any> = deserializeHTML(\n serializedDoc,\n deserializers,\n blockDeserializers\n );\n\n return {\n ...content,\n ...metadata,\n };\n};\n\nexport const BaseDocumentDeserializer: Deserializer = {\n deserializeDocument,\n deserializeHTML,\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';\n\nexport function deserializeDocument(document: string) {\n const deserializers = merge(\n { types: {} },\n pluginConfig.getAdditionalDeserializers()\n ) satisfies Partial<PortableTextHtmlComponents>;\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 serialized = BaseDocumentSerializer(schema).serializeDocument(\n document,\n 'document',\n baseLanguage,\n stopTypes,\n serializers\n );\n return serialized;\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.checkSetupStatus(setupJobId);\n\n if (status.status === 'completed') {\n setupCompleted = true;\n break;\n }\n if (status.status === 'failed') {\n setupFailedMessage = status.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 console.log('Setup successfully completed');\n } else {\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 type { Secrets } from '../types';\n\nexport type BatchedFiles = Array<{\n documentId: string;\n versionId: string;\n translationId: string;\n locale: string;\n}>;\n\nexport type DownloadedFile = {\n docData: {\n documentId: string;\n versionId: string;\n translationId: string;\n locale: string;\n };\n data: string;\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: BatchedFiles,\n secrets: Secrets,\n maxRetries = 3,\n retryDelay = 1000\n): Promise<DownloadedFile[]> {\n overrideConfig(secrets);\n let retries = 0;\n const fileIds = files.map((file) => file.translationId);\n\n const map = new Map(files.map((file) => [file.translationId, file]));\n const result = [] as DownloadedFile[];\n\n while (retries <= maxRetries) {\n try {\n // Download the files\n const responseData = await gt.downloadFileBatch(fileIds);\n const downloadedFiles = responseData.files || [];\n\n // Process each file in the response\n for (const file of downloadedFiles) {\n const documentData = map.get(file.id);\n if (!documentData) {\n continue;\n }\n\n result.push({\n docData: documentData,\n data: file.data,\n });\n }\n\n return result;\n } catch (error) {\n // Increment retry counter and wait before next attempt\n retries++;\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n }\n }\n\n return result;\n}\n","import type { Secrets } from '../types';\nimport { gt, overrideConfig } from '../adapter/core';\n\nexport async function checkTranslationStatus(\n fileQueryData: { versionId: string; fileId: string; locale: string }[],\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(\n (item) =>\n !downloadStatus.downloaded.has(`${item.fileId}:${item.locale}`) &&\n !downloadStatus.failed.has(`${item.fileId}:${item.locale}`) &&\n !downloadStatus.skipped.has(`${item.fileId}:${item.locale}`)\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.checkFileTranslations(currentQueryData);\n\n const translations = responseData.translations || [];\n\n // Filter for ready translations\n const readyTranslations = translations.filter(\n (translation) => translation.isReady && translation.fileId\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';\n\n//use perspectives in the future\nexport const findLatestDraft = (\n documentId: string,\n client: SanityClient\n): Promise<SanityDocument> => {\n const query = `*[_id == $id || _id == $draftId]`;\n const params = { id: documentId, draftId: `drafts.${documentId}` };\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 { IgnoreFields } from '../adapter/types';\n\nexport function applyDocuments(\n documentId: string,\n sourceDocument: Record<string, any>,\n targetDocument: Record<string, any>,\n ignore: IgnoreFields[]\n) {\n const ignoreFields = ignore.filter(\n (field) =>\n field.documentId === documentId ||\n field.documentId === undefined ||\n field.documentId === null\n );\n\n // Start with a shallow copy of the source document\n const mergedDocument = { ...sourceDocument };\n\n // Merge top-level properties of targetDocument\n for (const [key, value] of Object.entries(targetDocument)) {\n mergedDocument[key] = value;\n }\n\n // Process ignored fields and restore them from source document\n for (const ignoreField of ignoreFields) {\n if (!ignoreField.fields) continue;\n\n for (const field of ignoreField.fields) {\n const { property, type } = field;\n\n try {\n // Use JSONPath to find matching paths, then JSONPointer to get/set values\n const sourceResults = JSONPath({\n json: sourceDocument,\n path: property,\n resultType: 'all',\n flatten: true,\n wrap: true,\n });\n\n if (sourceResults && sourceResults.length > 0) {\n // Process each matching path\n sourceResults.forEach((result: { pointer: string; value: any }) => {\n const sourceValue = result.value;\n\n // If type is specified, check if it matches the object's _type property\n if (type !== undefined) {\n if (\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n sourceValue._type === type\n ) {\n // Type matches, restore the entire object using JSONPointer\n JSONPointer.set(mergedDocument, result.pointer, sourceValue);\n }\n } else {\n // No type specified, restore the value using JSONPointer\n JSONPointer.set(mergedDocument, result.pointer, sourceValue);\n }\n });\n }\n } catch (error) {\n // Invalid JSONPath, skip this field\n console.warn(`Invalid JSONPath: ${property}`, error);\n }\n }\n }\n\n return mergedDocument;\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';\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 translatedDoc[languageField] = localeId;\n const translations = translationMetadata.translations as Record<\n string,\n any\n >[];\n const existingLocaleKey = translations.find(\n (translation) => translation._key === localeId\n );\n const operation = existingLocaleKey ? 'replace' : 'after';\n const location = existingLocaleKey\n ? `translations[_key == \"${localeId}\"]`\n : 'translations[-1]';\n\n //remove system fields\n const { _updatedAt, _createdAt, ...rest } = translatedDoc;\n\n const appliedDocument = applyDocuments(\n sourceDocumentId,\n sourceDocument,\n rest,\n pluginConfig.getIgnoreFields()\n );\n\n // Check if this is a singleton document and apply singleton mapping\n const singletons = pluginConfig.getSingletons();\n const isSingleton = singletons.includes(sourceDocumentId);\n\n let createDocumentPromise;\n if (isSingleton) {\n const singletonMapping = pluginConfig.getSingletonMapping();\n const translatedDocId = singletonMapping(sourceDocumentId, localeId);\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 = doc._id.replace('drafts.', '');\n const result = await client\n .transaction()\n .patch(translationMetadata._id, (p) =>\n p.insert(operation, location, [\n {\n _key: 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';\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 // First, try to get existing metadata\n const existingMetadata = await client.fetch(\n `*[\n _type == 'translation.metadata' &&\n translations[_key == $baseLanguage][0].value._ref == $id\n ][0]`,\n { baseLanguage, id: documentId.replace('drafts.', '') }\n );\n\n if (existingMetadata) {\n return existingMetadata;\n }\n\n // If no metadata exists, create it atomically\n const baseLangEntry: TranslationReference = {\n _key: baseLanguage,\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref: baseDocument._id.replace('drafts.', ''),\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.${documentId.replace('drafts.', '')}`,\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[_key == $baseLanguage][0].value._ref == $id\n ][0]`,\n { baseLanguage, id: documentId.replace('drafts.', '') }\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 { applyDocuments } 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, any>,\n client: SanityClient\n): Promise<void> {\n const cleanedMerge: Record<string, any> = {};\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, any> = {};\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 );\n const newDocument = await client\n .patch(i18nDocId, { set: appliedDocument })\n .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\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 i18nDocId = (\n translationMetadata.translations as Array<Record<string, any>>\n ).find((translation) => translation._key === localeId)?.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 );\n }\n //otherwise, create a new document\n //and add the document reference to the metadata document\n else {\n await createI18nDocAndPatchMetadata(\n baseDoc,\n merged,\n localeId,\n client,\n translationMetadata,\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\ninterface TranslationMetadata {\n _id: string;\n _type: 'translation.metadata';\n translations: {\n _key: string;\n value: Reference;\n }[];\n}\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: any,\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 (obj._ref) {\n references.push({ ref: obj as Reference, path });\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n references.push(...findReferences(item, [...path, index.toString()]));\n });\n } else {\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[_key == $sourceLocale && value._ref in $refIds]) > 0] {\n \"originalRef\": translations[_key == $sourceLocale][0].value._ref,\n \"translatedRef\": translations[_key == $locale][0].value._ref\n }[defined(originalRef) && defined(translatedRef)]`;\n\n const translationPairs: { originalRef: string; translatedRef: string }[] =\n await client.fetch(query, { refIds, sourceLocale, locale });\n\n // Build the translation map\n for (const { originalRef, translatedRef } of translationPairs) {\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);\n}\n\n/**\n * Recursively updates references in an object\n */\nfunction updateReferencesRecursive(\n obj: any,\n translatedRefs: Map<string, string>\n): any {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n if (obj._ref && 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: any = {};\n Object.keys(obj).forEach((key) => {\n updated[key] = updateReferencesRecursive(obj[key], translatedRefs);\n });\n\n return updated;\n}\n","import { SanityClient } from 'sanity';\nimport { pluginConfig } from '../adapter/core';\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 = sourceDocumentId.replace('drafts.', '');\n\n // Try both clean and original IDs to be safe, and use -> to directly fetch the translated doc\n const query = `*[\n _type == \"translation.metadata\" &&\n (\n translations[_key == $sourceLocale][0].value._ref == $cleanDocId\n ) &&\n defined(translations[_key == $localeId])\n ][0].translations[_key == $localeId][0].value->`;\n\n const translatedDoc = await client.fetch(query, {\n sourceLocale: pluginConfig.getSourceLocale(),\n cleanDocId,\n localeId,\n });\n\n return translatedDoc || 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';\n\nexport interface BatchProcessorOptions {\n batchSize?: number;\n onProgress?: (current: number, total: number) => void;\n onItemSuccess?: (item: any, result: any) => void;\n onItemFailure?: (item: any, error: any) => void;\n}\n\nexport interface ImportBatchItem {\n docInfo: GTFile;\n locale: string;\n data: any;\n translationContext: TranslationFunctionContext;\n key: string;\n}\n\nexport async function processBatch<T>(\n items: T[],\n processor: (item: T) => Promise<any>,\n options: BatchProcessorOptions = {}\n): Promise<{\n successCount: number;\n failureCount: number;\n successfulItems: any[];\n failedItems: { item: T; error: any }[];\n}> {\n const { batchSize = 20, onProgress, onItemSuccess, onItemFailure } = options;\n\n let successCount = 0;\n let failureCount = 0;\n const successfulItems: any[] = [];\n const failedItems: { item: T; error: any }[] = [];\n\n for (let i = 0; i < items.length; i += batchSize) {\n const batch = items.slice(i, i + batchSize);\n\n const batchPromises = batch.map(async (item) => {\n try {\n const result = await processor(item);\n onItemSuccess?.(item, result);\n return { success: true, item, result };\n } catch (error) {\n onItemFailure?.(item, error);\n return { success: false, item, error };\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 = {}\n): Promise<{\n successCount: number;\n failureCount: number;\n successfulImports: string[];\n failedItems: { item: ImportBatchItem; error: any }[];\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 onItemSuccess: (item: ImportBatchItem, key: string) => {\n successfulImports.push(key);\n options.onItemSuccess?.(item, key);\n },\n onItemFailure: (item: ImportBatchItem, error: any) => {\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 { SanityDocument } from 'sanity';\nimport { GTFile, Secrets, TranslationFunctionContext } from '../types';\nimport {\n downloadTranslations,\n BatchedFiles,\n} from '../translation/downloadTranslations';\nimport { processImportBatch, ImportBatchItem } from './batchProcessor';\n\nexport interface TranslationStatus {\n progress: number;\n isReady: boolean;\n translationId?: string;\n}\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 documents: SanityDocument[],\n translationStatuses: Map<string, TranslationStatus>,\n options: ImportOptions = {}\n): Promise<BatchedFiles> {\n const { filterReadyFiles = () => true } = options;\n const readyFiles: BatchedFiles = [];\n\n for (const [key, status] of translationStatuses.entries()) {\n if (\n status.isReady &&\n status.translationId &&\n filterReadyFiles(key, status)\n ) {\n const [documentId, locale] = key.split(':');\n const document = documents.find(\n (doc) => (doc._id?.replace('drafts.', '') || doc._id) === documentId\n );\n\n if (document) {\n readyFiles.push({\n documentId,\n versionId: document._rev,\n translationId: status.translationId,\n locale,\n });\n }\n }\n }\n\n return readyFiles;\n}\n\nexport async function importTranslations(\n readyFiles: BatchedFiles,\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 docInfo: {\n documentId: file.docData.documentId,\n versionId: file.docData.versionId,\n },\n locale: file.docData.locale,\n data: file.data,\n translationContext,\n key: `${file.docData.documentId}:${file.docData.locale}`,\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';\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: documentId.replace('drafts.', ''),\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 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 { 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';\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\ninterface TranslationStatus {\n progress: number;\n isReady: boolean;\n translationId?: string;\n}\n\ninterface TranslationsContextType {\n // State\n isBusy: boolean;\n documents: SanityDocument[];\n locales: TranslationLocale[];\n autoRefresh: 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\n // Actions\n setLocales: (locales: TranslationLocale[]) => void;\n setAutoRefresh: (value: boolean) => void;\n handleTranslateAll: () => Promise<void>;\n handleImportAll: () => Promise<void>;\n handleImportMissing: () => Promise<void>;\n handleRefreshAll: () => Promise<void>;\n handleImportDocument: (documentId: string, localeId: string) => 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 [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 [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\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(docs);\n } catch {\n toast.push({\n title: 'Error fetching documents',\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: 'Error fetching locales',\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(\n (doc) => doc._id?.replace('drafts.', '') || doc._id\n );\n\n const query = `*[\n _type == 'translation.metadata' &&\n translations[_key == $sourceLocale][0].value._ref in $documentIds\n ] {\n 'sourceDocId': translations[_key == $sourceLocale][0].value._ref,\n 'existingTranslations': translations[_key in $localeIds]._key\n }`;\n\n const existingMetadata = await client.fetch(query, {\n sourceLocale,\n documentIds,\n localeIds: availableLocaleIds,\n });\n\n const existing = new Set<string>();\n existingMetadata.forEach((metadata: any) => {\n metadata.existingTranslations?.forEach((localeId: string) => {\n if (localeId !== sourceLocale) {\n existing.add(`${metadata.sourceDocId}:${localeId}`);\n }\n });\n });\n\n setExistingTranslations(existing);\n } catch (error) {\n console.error('Error fetching existing translations:', error);\n toast.push({\n title: 'Error fetching existing translations',\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 delete doc[pluginConfig.getLanguageField()];\n const baseLanguage = pluginConfig.getSourceLocale();\n try {\n const serialized = serializeDocument(doc, schema, baseLanguage);\n return {\n info: {\n documentId: doc._id?.replace('drafts.', '') || doc._id,\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: 'Error creating translation tasks',\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) return;\n\n setIsBusy(true);\n\n try {\n const readyFiles = await getReadyFilesForImport(\n documents,\n translationStatuses\n );\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: 'Error importing translations',\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 ]);\n\n const getMissingTranslations = useCallback(\n async (\n documentIds: string[],\n localeIds: string[]\n ): Promise<Set<string>> => {\n const sourceLocale = pluginConfig.getSourceLocale();\n\n const query = `*[\n _type == 'translation.metadata' &&\n translations[_key == $sourceLocale][0].value._ref in $documentIds\n ] {\n 'sourceDocId': translations[_key == $sourceLocale][0].value._ref,\n 'existingTranslations': translations[_key in $localeIds]._key\n }`;\n\n const existingMetadata = await client.fetch(query, {\n sourceLocale,\n documentIds,\n localeIds,\n });\n\n const existing = new Set<string>();\n existingMetadata.forEach((metadata: any) => {\n metadata.existingTranslations?.forEach((localeId: string) => {\n if (localeId !== sourceLocale) {\n existing.add(`${metadata.sourceDocId}:${localeId}`);\n }\n });\n });\n\n const missing = new Set<string>();\n documentIds.forEach((docId) => {\n localeIds.forEach((localeId) => {\n if (localeId !== sourceLocale) {\n const key = `${docId}:${localeId}`;\n if (!existing.has(key)) {\n missing.add(key);\n }\n }\n });\n });\n\n return missing;\n },\n [client]\n );\n\n const handleImportMissing = 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 documentIds = documents.map(\n (doc) => doc._id?.replace('drafts.', '') || doc._id\n );\n\n const missingTranslations = await getMissingTranslations(\n documentIds,\n availableLocaleIds\n );\n\n console.log('missingTranslations', missingTranslations);\n const readyFiles = await getReadyFilesForImport(\n documents,\n translationStatuses,\n {\n filterReadyFiles: (key) => missingTranslations.has(key),\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: 'Error importing missing translations',\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 getMissingTranslations,\n ]);\n\n const handleRefreshAll = useCallback(async () => {\n if (!secrets || documents.length === 0) return;\n\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 = [];\n for (const doc of documents) {\n for (const localeId of availableLocaleIds) {\n const documentId = doc._id?.replace('drafts.', '') || doc._id;\n fileQueryData.push({\n versionId: doc._rev,\n fileId: documentId,\n locale: localeId,\n });\n }\n }\n\n const readyTranslations = await checkTranslationStatus(\n fileQueryData,\n downloadStatus,\n secrets\n );\n\n setTranslationStatuses((prevStatuses) => {\n const newStatuses = new Map();\n\n for (const doc of documents) {\n for (const localeId of availableLocaleIds) {\n const documentId = doc._id?.replace('drafts.', '') || doc._id;\n const key = `${documentId}:${localeId}`;\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 = `${translation.fileId}:${translation.locale}`;\n newStatuses.set(key, {\n progress: 100,\n isReady: true,\n translationId: translation.id,\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: 'Error refreshing translation status',\n status: 'error',\n closable: true,\n });\n } finally {\n setIsRefreshing(false);\n }\n }, [secrets, documents, locales]);\n\n const handleImportDocument = useCallback(\n async (documentId: string, localeId: string) => {\n if (!secrets) return;\n\n const key = `${documentId}:${localeId}`;\n const status = translationStatuses.get(key);\n\n if (!status?.isReady || !status.translationId) {\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) => (doc._id?.replace('drafts.', '') || doc._id) === 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 documentId,\n versionId: document._rev,\n translationId: status.translationId,\n locale: localeId,\n },\n ],\n secrets\n );\n\n if (downloadedFiles.length > 0) {\n try {\n const docInfo: GTFile = {\n 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\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: `Failed to import translation for ${documentId} (${localeId})`,\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: `Error importing translation for ${documentId}`,\n status: 'error',\n closable: true,\n });\n }\n },\n [secrets, documents, translationContext, translationStatuses]\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: 'Error patching document references',\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]);\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 publishedDocumentIds = documents\n .filter((doc) => !doc._id.startsWith('drafts.'))\n .map((doc) => doc._id);\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[_key == $sourceLocale][0].value._ref in $publishedDocumentIds\n ] {\n 'sourceDocId': translations[_key == $sourceLocale][0].value._ref,\n 'translationDocs': translations[_key != $sourceLocale && defined(value._ref)]{\n _key,\n 'docId': value._ref\n }\n }`;\n\n const translationMetadata = await client.fetch(query, {\n sourceLocale,\n publishedDocumentIds,\n });\n\n const translationDocIds: string[] = [];\n translationMetadata.forEach((metadata: any) => {\n metadata.translationDocs?.forEach((translation: any) => {\n if (translation.docId) {\n translationDocIds.push(translation.docId);\n }\n });\n });\n\n if (translationDocIds.length === 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 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: 'Error publishing translations',\n status: 'error',\n closable: true,\n });\n return 0;\n } finally {\n setIsBusy(false);\n }\n }, [secrets, documents, client]);\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 ) {\n handleRefreshAll();\n }\n }, [documents]);\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 const contextValue: TranslationsContextType = {\n // State\n isBusy,\n documents,\n locales,\n autoRefresh,\n loadingDocuments,\n importProgress,\n importedTranslations,\n existingTranslations,\n downloadStatus,\n translationStatuses,\n isRefreshing,\n loadingSecrets,\n secrets,\n\n // Actions\n setLocales,\n setAutoRefresh,\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\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 progress === 'number' ? (\n <Flex columnStart={3} columnEnd={5} align='center'>\n <ProgressBar progress={progress} />\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';\n\nexport const TranslationView = () => {\n const {\n documents,\n locales,\n translationStatuses,\n isBusy,\n handleTranslateAll,\n handleImportDocument,\n handleRefreshAll,\n isRefreshing,\n importedTranslations,\n setLocales,\n handlePatchDocumentReferences,\n handlePublishAllTranslations,\n } = useTranslations();\n\n const [autoImport, setAutoImport] = useState(false);\n const [isImporting, setIsImporting] = useState(false);\n const [autoRefresh, setAutoRefresh] = useState(true);\n const [autoPatchReferences, setAutoPatchReferences] = useState(true);\n const [autoPublish, setAutoPublish] = useState(true);\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 document._id?.replace('drafts.', '') || document._id;\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 = `${documentId}:${locale.localeId}`;\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, 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 // Auto refresh functionality\n useEffect(() => {\n if (!autoRefresh || !documentId || availableLocales.length === 0) return;\n\n const interval = setInterval(async () => {\n await handleRefreshAll();\n await handleImportTranslations({ autoOnly: true });\n }, 10000);\n\n return () => clearInterval(interval);\n }, [\n autoRefresh,\n documentId,\n availableLocales.length,\n handleRefreshAll,\n handleImportTranslations,\n ]);\n\n useEffect(() => {\n const initialRefresh = async () => {\n await handleRefreshAll();\n await handleImportTranslations({ autoOnly: true });\n };\n initialRefresh();\n }, []);\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}\n />\n </Flex>\n </Flex>\n\n <Box>\n {availableLocales.map((locale) => {\n const key = `${documentId}:${locale.localeId}`;\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(documentId, locale.localeId);\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 = `${documentId}:${locale.localeId}`;\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 = `${documentId}:${locale.localeId}`;\n return importedTranslations.has(key);\n }).length\n }\n /\n {\n availableLocales.filter((locale) => {\n const key = `${documentId}:${locale.localeId}`;\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 { DocumentActionComponent } from 'sanity';\nimport { useRouter } from 'sanity/router';\nimport { TranslateIcon } from '@sanity/icons';\n\nexport const translateAction: DocumentActionComponent = (props) => {\n const router = useRouter();\n\n return {\n label: 'Translate',\n icon: TranslateIcon,\n tone: 'primary',\n onHandle: () => {\n // Switch to the translation tab using the document ID and type\n const { id, type } = props;\n\n // Navigate to the translation view for this document\n router.navigateIntent('edit', {\n id,\n type,\n view: 'general-translation',\n });\n },\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';\n\nexport const TranslationsTable: React.FC = () => {\n const {\n documents,\n locales,\n loadingDocuments,\n translationStatuses,\n downloadStatus,\n importedTranslations,\n handleImportDocument,\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 {document._id?.replace('drafts.', '') || document._id}\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 =\n document._id?.replace('drafts.', '') || document._id;\n const key = `${documentId}:${locale.localeId}`;\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}-${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 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 Spinner,\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 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 type { IgnoreFields, TranslateDocumentFilter } 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';\n\nexport type GTPluginConfig = Omit<\n Parameters<typeof gt.setConfig>[0],\n 'locales'\n> & {\n locales: 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 languageField?: string;\n translateDocuments?: TranslateDocumentFilter[];\n secretsNamespace?: string;\n additionalStopTypes?: string[];\n additionalSerializers?: Partial<PortableTextHtmlComponents>;\n additionalDeserializers?: Record<string, any>;\n additionalBlockDeserializers?: any[];\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 = libraryDefaultLocale,\n locales,\n customMapping,\n apiKey,\n projectId,\n singletons,\n singletonMapping,\n ignoreFields,\n translateDocuments,\n secretsNamespace = SECRETS_NAMESPACE,\n additionalStopTypes = [],\n additionalSerializers = {},\n additionalDeserializers = {},\n additionalBlockDeserializers = [],\n }) => {\n // Validate the translateDocuments\n translateDocuments = translateDocuments?.filter((filter) => {\n if (filter.documentId || filter.type) {\n return true;\n }\n return false;\n });\n\n pluginConfig.init(\n secretsNamespace,\n languageField,\n sourceLocale,\n locales,\n singletons || [],\n // singletons is a string array of singleton document ids\n singletonMapping ||\n ((sourceDocumentId, locale) => `${sourceDocumentId}-${locale}`),\n ignoreFields || [],\n translateDocuments || [],\n additionalStopTypes,\n additionalSerializers,\n additionalDeserializers,\n additionalBlockDeserializers\n );\n gt.setConfig({\n sourceLocale: sourceLocale,\n customMapping: customMapping,\n apiKey: apiKey,\n projectId: projectId,\n });\n return {\n name: 'gt-sanity',\n tools: [\n {\n name: 'translations',\n title: 'Translations',\n component: TranslationsTool,\n router: route.create('/*'),\n },\n ],\n document: {\n views: [\n {\n id: 'general-translation',\n title: 'Translations',\n component: TranslationsTab,\n },\n ],\n actions: (prev) => {\n // Move translateAction to the beginning so it appears as a prominent button\n return [...prev, translateAction];\n },\n },\n };\n }\n);\n"],"names":["useSanityClient","match","next","META_FIELDS","f","deserializeDocument","document","filter","prev","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","React","TranslationsTab"],"mappings":"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","x_google_ignoreList":[36,37,38,39,40,41,42,43,44,45,46,47]}
|