@sanity/document-internationalization 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.cjs.mjs +7 -0
- package/{lib → dist}/index.d.ts +4 -4
- package/{lib → dist}/index.esm.js +17 -16
- package/dist/index.esm.js.map +1 -0
- package/{lib → dist}/index.js +17 -16
- package/dist/index.js.map +1 -0
- package/package.json +28 -29
- package/src/actions/DeleteMetadataAction.tsx +4 -1
- package/src/components/DocumentInternationalizationMenu.tsx +2 -1
- package/src/plugin.tsx +6 -11
- package/src/types.ts +2 -1
- package/lib/index.esm.js.map +0 -1
- package/lib/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ A good use of **field-level** translation could be a `person` schema. It could h
|
|
|
53
53
|
|
|
54
54
|
## Upgrade
|
|
55
55
|
|
|
56
|
-
See the
|
|
56
|
+
[See the upgrade guide](./docs/00-upgrade-from-v1.md) for instructions on how to upgrade from the previous version of Document Internationalization.
|
|
57
57
|
|
|
58
58
|
## Install
|
|
59
59
|
|
|
@@ -244,7 +244,7 @@ For more advanced topics see the documentation. For installation see [Usage](#us
|
|
|
244
244
|
- [Importing and creating documents](./docs/02-importing-and-creating-documents.md)
|
|
245
245
|
- [Deleting translated documents](./docs/03-deleting-translated-documents.md)
|
|
246
246
|
- [Importing plugin components](./docs/04-importing-plugin-components.md)
|
|
247
|
-
- [Allowing the same slug on different language versions](./docs/05-allowing-the-same-slug-
|
|
247
|
+
- [Allowing the same slug on different language versions](./docs/05-allowing-the-same-slug-for-translations.md)
|
|
248
248
|
- [Remove default new document template](./docs/06-remove-default-new-document-template.md)
|
|
249
249
|
|
|
250
250
|
## License
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import cjs from './index.js';
|
|
2
|
+
|
|
3
|
+
export const DeleteTranslationAction = cjs.DeleteTranslationAction;
|
|
4
|
+
export const DocumentInternationalizationMenu = cjs.DocumentInternationalizationMenu;
|
|
5
|
+
export const documentInternationalization = cjs.documentInternationalization;
|
|
6
|
+
export const useDocumentInternationalizationContext = cjs.useDocumentInternationalizationContext;
|
|
7
|
+
|
package/{lib → dist}/index.d.ts
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
|
|
3
1
|
import {DocumentActionComponent} from 'sanity'
|
|
4
2
|
import type {FieldDefinition} from 'sanity'
|
|
3
|
+
import {JSX as JSX_2} from 'react/jsx-runtime'
|
|
5
4
|
import type {KeyedObject} from 'sanity'
|
|
5
|
+
import type {ObjectSchemaType} from 'sanity'
|
|
6
6
|
import {Plugin as Plugin_2} from 'sanity'
|
|
7
7
|
import type {Reference} from 'sanity'
|
|
8
8
|
import type {SanityClient} from 'sanity'
|
|
@@ -13,10 +13,10 @@ export declare const documentInternationalization: Plugin_2<PluginConfig>
|
|
|
13
13
|
|
|
14
14
|
export declare function DocumentInternationalizationMenu(
|
|
15
15
|
props: DocumentInternationalizationMenuProps
|
|
16
|
-
):
|
|
16
|
+
): JSX_2.Element | null
|
|
17
17
|
|
|
18
18
|
export declare type DocumentInternationalizationMenuProps = {
|
|
19
|
-
schemaType:
|
|
19
|
+
schemaType: ObjectSchemaType
|
|
20
20
|
documentId: string
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
var _templateObject;
|
|
2
|
-
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
3
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
2
|
import { TrashIcon, CogIcon, SplitVerticalIcon, CheckmarkIcon, AddIcon, EditIcon, TranslateIcon, InfoOutlineIcon } from '@sanity/icons';
|
|
5
3
|
import { Flex, Spinner, Stack, Text, Card, Grid, Button, useToast, Tooltip, Box, Badge, useClickOutside, TextInput, Popover, Inline, Dialog } from '@sanity/ui';
|
|
@@ -260,7 +258,7 @@ const DeleteTranslationAction = props => {
|
|
|
260
258
|
if (documentLanguage && translations.length > 0) {
|
|
261
259
|
operation = "UNSET";
|
|
262
260
|
translations.forEach(translation => {
|
|
263
|
-
tx.patch(translation._id, patch => patch.unset(["".concat(TRANSLATIONS_ARRAY_NAME,
|
|
261
|
+
tx.patch(translation._id, patch => patch.unset(["".concat(TRANSLATIONS_ARRAY_NAME, '[_key == "').concat(documentLanguage, '"]')]));
|
|
264
262
|
});
|
|
265
263
|
} else {
|
|
266
264
|
tx.delete(documentId);
|
|
@@ -466,7 +464,7 @@ function LanguageOption(props) {
|
|
|
466
464
|
const metadataExisted = Boolean(metadata == null ? void 0 : metadata._createdAt);
|
|
467
465
|
return toast.push({
|
|
468
466
|
status: "success",
|
|
469
|
-
title:
|
|
467
|
+
title: 'Created "'.concat(language.title, '" translation'),
|
|
470
468
|
description: metadataExisted ? "Updated Translations Metadata" : "Created Translations Metadata"
|
|
471
469
|
});
|
|
472
470
|
}).catch(err => {
|
|
@@ -577,7 +575,13 @@ function LanguagePatch(props) {
|
|
|
577
575
|
})
|
|
578
576
|
});
|
|
579
577
|
}
|
|
580
|
-
var
|
|
578
|
+
var __freeze = Object.freeze;
|
|
579
|
+
var __defProp = Object.defineProperty;
|
|
580
|
+
var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", {
|
|
581
|
+
value: __freeze(raw || cooked.slice())
|
|
582
|
+
}));
|
|
583
|
+
var _a;
|
|
584
|
+
var ConstrainedBox = styled(Box)(_a || (_a = __template(["\n max-width: 280px;\n"])));
|
|
581
585
|
function Warning(_ref) {
|
|
582
586
|
let {
|
|
583
587
|
children
|
|
@@ -599,9 +603,9 @@ function Warning(_ref) {
|
|
|
599
603
|
}
|
|
600
604
|
function DocumentInternationalizationMenu(props) {
|
|
601
605
|
const {
|
|
602
|
-
schemaType,
|
|
603
606
|
documentId
|
|
604
607
|
} = props;
|
|
608
|
+
const schemaType = props.schemaType.name;
|
|
605
609
|
const {
|
|
606
610
|
languageField,
|
|
607
611
|
supportedLanguages
|
|
@@ -646,7 +650,7 @@ function DocumentInternationalizationMenu(props) {
|
|
|
646
650
|
const allLanguagesAreValid = useMemo(() => {
|
|
647
651
|
const valid = supportedLanguages.every(l => l.id && l.title);
|
|
648
652
|
if (!valid) {
|
|
649
|
-
console.warn(
|
|
653
|
+
console.warn('Not all languages are valid. It should be an array of objects with an "id" and "title" property. Or a function that returns an array of objects with an "id" and "title" property.', supportedLanguages);
|
|
650
654
|
}
|
|
651
655
|
return valid;
|
|
652
656
|
}, [supportedLanguages]);
|
|
@@ -754,7 +758,7 @@ const DeleteMetadataAction = props => {
|
|
|
754
758
|
const doc = draft || published;
|
|
755
759
|
const [isDialogOpen, setDialogOpen] = useState(false);
|
|
756
760
|
const onClose = useCallback(() => setDialogOpen(false), []);
|
|
757
|
-
const translations = useMemo(() => doc ? doc[TRANSLATIONS_ARRAY_NAME] : [], [doc]);
|
|
761
|
+
const translations = useMemo(() => doc && Array.isArray(doc[TRANSLATIONS_ARRAY_NAME]) ? doc[TRANSLATIONS_ARRAY_NAME] : [], [doc]);
|
|
758
762
|
const toast = useToast();
|
|
759
763
|
const client = useClient({
|
|
760
764
|
apiVersion: API_VERSION
|
|
@@ -1170,14 +1174,8 @@ const documentInternationalization = definePlugin(config => {
|
|
|
1170
1174
|
metadataFields
|
|
1171
1175
|
} = pluginConfig;
|
|
1172
1176
|
if (schemaTypes.length === 0) {
|
|
1173
|
-
throw new Error("You must specify at least one schema type on which to enable document internationalization. Update the `schemaTypes` option in
|
|
1177
|
+
throw new Error("You must specify at least one schema type on which to enable document internationalization. Update the `schemaTypes` option in the documentInternationalization() configuration.");
|
|
1174
1178
|
}
|
|
1175
|
-
const renderLanguageFilter = (schemaType, documentId) => {
|
|
1176
|
-
return /* @__PURE__ */jsx(DocumentInternationalizationMenu, {
|
|
1177
|
-
schemaType,
|
|
1178
|
-
documentId
|
|
1179
|
-
});
|
|
1180
|
-
};
|
|
1181
1179
|
return {
|
|
1182
1180
|
name: "@sanity/document-internationalization",
|
|
1183
1181
|
studio: {
|
|
@@ -1228,7 +1226,10 @@ const documentInternationalization = definePlugin(config => {
|
|
|
1228
1226
|
schemaType,
|
|
1229
1227
|
documentId
|
|
1230
1228
|
} = ctx;
|
|
1231
|
-
return schemaTypes.includes(schemaType) && documentId ? [...prev,
|
|
1229
|
+
return schemaTypes.includes(schemaType) && documentId ? [...prev, props => DocumentInternationalizationMenu({
|
|
1230
|
+
...props,
|
|
1231
|
+
documentId
|
|
1232
|
+
})] : prev;
|
|
1232
1233
|
},
|
|
1233
1234
|
badges: (prev, _ref4) => {
|
|
1234
1235
|
let {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/components/DeleteTranslationDialog/DocumentPreview.tsx","../src/constants.ts","../src/components/DeleteTranslationDialog/separateReferences.ts","../src/components/DeleteTranslationDialog/index.tsx","../src/components/DeleteTranslationFooter.tsx","../node_modules/suspend-react/dist/index.js","../src/components/DocumentInternationalizationContext.tsx","../src/actions/DeleteTranslationAction.tsx","../src/hooks/useLanguageMetadata.tsx","../src/hooks/useOpenInNewPane.tsx","../src/components/LanguageManage.tsx","../src/utils/createReference.ts","../src/components/LanguageOption.tsx","../src/components/LanguagePatch.tsx","../src/components/ConstrainedBox.tsx","../src/components/Warning.tsx","../src/components/DocumentInternationalizationMenu.tsx","../src/actions/DeleteMetadataAction.tsx","../src/badges/index.tsx","../src/components/BulkPublish/DocumentCheck.tsx","../src/components/BulkPublish/InfoIcon.tsx","../src/components/BulkPublish/Info.tsx","../src/components/BulkPublish/index.tsx","../src/components/OptimisticallyStrengthen/ReferencePatcher.tsx","../src/components/OptimisticallyStrengthen/index.tsx","../src/schema/translation/metadata.ts","../src/plugin.tsx"],"sourcesContent":["import {Preview, useSchema} from 'sanity'\nimport {Feedback} from 'sanity-plugin-utils'\n\ntype DocumentPreviewProps = {\n value: unknown\n type: string\n}\n\n// Wrapper of Preview just so that the schema type is satisfied by schema.get()\nexport default function DocumentPreview(props: DocumentPreviewProps) {\n const schema = useSchema()\n\n const schemaType = schema.get(props.type)\n if (!schemaType) {\n return <Feedback tone=\"critical\" title=\"Schema type not found\" />\n }\n\n return <Preview value={props.value} schemaType={schemaType} />\n}\n","import {PluginConfigContext} from './types'\n\nexport const METADATA_SCHEMA_NAME = `translation.metadata`\nexport const TRANSLATIONS_ARRAY_NAME = `translations`\nexport const API_VERSION = `2023-05-22`\nexport const DEFAULT_CONFIG: PluginConfigContext = {\n supportedLanguages: [],\n schemaTypes: [],\n languageField: `language`,\n weakReferences: false,\n bulkPublish: false,\n metadataFields: [],\n apiVersion: API_VERSION,\n}\n","import {SanityDocument} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../../constants'\n\nexport function separateReferences(data: SanityDocument[] | null = []): {\n translations: SanityDocument[]\n otherReferences: SanityDocument[]\n} {\n const translations: SanityDocument[] = []\n const otherReferences: SanityDocument[] = []\n\n if (data && data.length > 0) {\n data.forEach((doc) => {\n if (doc._type === METADATA_SCHEMA_NAME) {\n translations.push(doc)\n } else {\n otherReferences.push(doc)\n }\n })\n }\n\n return {translations, otherReferences}\n}\n","import {Card, Flex, Spinner, Stack, Text} from '@sanity/ui'\nimport {useEffect, useMemo} from 'react'\nimport {SanityDocument} from 'sanity'\nimport {useListeningQuery} from 'sanity-plugin-utils'\n\nimport DocumentPreview from './DocumentPreview'\nimport {separateReferences} from './separateReferences'\n\ntype DeleteTranslationDialogProps = {\n doc: SanityDocument\n documentId: string\n setTranslations: (translations: SanityDocument[]) => void\n}\n\nexport default function DeleteTranslationDialog(\n props: DeleteTranslationDialogProps\n) {\n const {doc, documentId, setTranslations} = props\n\n // Get all references and check if any of them are translations metadata\n const {data, loading} = useListeningQuery<SanityDocument[]>(\n `*[references($id)]{_id, _type}`,\n {params: {id: documentId}, initialValue: []}\n )\n const {translations, otherReferences} = useMemo(\n () => separateReferences(data),\n [data]\n )\n\n useEffect(() => {\n setTranslations(translations)\n }, [setTranslations, translations])\n\n if (loading) {\n return (\n <Flex padding={4} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )\n }\n\n return (\n <Stack space={4}>\n {translations && translations.length > 0 ? (\n <Text>\n This document is a language-specific version which other translations\n depend on.\n </Text>\n ) : (\n <Text>This document does not have connected translations.</Text>\n )}\n <Card border padding={3}>\n <Stack space={4}>\n <Text size={1} weight=\"semibold\">\n {translations && translations.length > 0 ? (\n <>Before this document can be deleted</>\n ) : (\n <>This document can now be deleted</>\n )}\n </Text>\n <DocumentPreview value={doc} type={doc._type} />\n {translations && translations.length > 0 ? (\n <>\n <Card borderTop />\n <Text size={1} weight=\"semibold\">\n The reference in{' '}\n {translations.length === 1\n ? `this translations document`\n : `these translations documents`}{' '}\n must be removed\n </Text>\n {translations.map((translation) => (\n <DocumentPreview\n key={translation._id}\n value={translation}\n type={translation._type}\n />\n ))}\n </>\n ) : null}\n {otherReferences && otherReferences.length > 0 ? (\n <>\n <Card borderTop />\n <Text size={1} weight=\"semibold\">\n {otherReferences.length === 1\n ? `There is an additional reference`\n : `There are additional references`}{' '}\n to this document\n </Text>\n {otherReferences.map((reference) => (\n <DocumentPreview\n key={reference._id}\n value={reference}\n type={reference._type}\n />\n ))}\n </>\n ) : null}\n </Stack>\n </Card>\n {otherReferences.length === 0 ? (\n <Text>This document has no other references.</Text>\n ) : (\n <Text>\n You may not be able to delete this document because other documents\n refer to it.\n </Text>\n )}\n </Stack>\n )\n}\n","import {Button, Grid} from '@sanity/ui'\n\ntype DeleteTranslationFooterProps = {\n translations: unknown[]\n onClose: () => void\n onProceed: () => void\n}\n\nexport default function DeleteTranslationFooter(\n props: DeleteTranslationFooterProps\n) {\n const {translations, onClose, onProceed} = props\n\n return (\n <Grid columns={2} gap={2}>\n <Button text=\"Cancel\" onClick={onClose} mode=\"ghost\" />\n <Button\n text={\n translations && translations.length > 0\n ? `Unset translation reference`\n : `Delete document`\n }\n onClick={onProceed}\n tone=\"critical\"\n />\n </Grid>\n )\n}\n","function shallowEqualArrays(arrA, arrB, equal = (a, b) => a === b) {\n if (arrA === arrB) return true;\n if (!arrA || !arrB) return false;\n const len = arrA.length;\n if (arrB.length !== len) return false;\n\n for (let i = 0; i < len; i++) if (!equal(arrA[i], arrB[i])) return false;\n\n return true;\n}\n\nconst globalCache = [];\n\nfunction query(fn, keys, preload = false, config = {}) {\n for (const entry of globalCache) {\n // Find a match\n if (shallowEqualArrays(keys, entry.keys, entry.equal)) {\n // If we're pre-loading and the element is present, just return\n if (preload) return undefined; // If an error occurred, throw\n\n if (Object.prototype.hasOwnProperty.call(entry, 'error')) throw entry.error; // If a response was successful, return\n\n if (Object.prototype.hasOwnProperty.call(entry, 'response')) return entry.response; // If the promise is still unresolved, throw\n\n if (!preload) throw entry.promise;\n }\n } // The request is new or has changed.\n\n\n const entry = {\n keys,\n equal: config.equal,\n promise: // Execute the promise\n fn(...keys) // When it resolves, store its value\n .then(response => entry.response = response) // Remove the entry if a lifespan was given\n .then(() => {\n if (config.lifespan && config.lifespan > 0) {\n setTimeout(() => {\n const index = globalCache.indexOf(entry);\n if (index !== -1) globalCache.splice(index, 1);\n }, config.lifespan);\n }\n }) // Store caught errors, they will be thrown in the render-phase to bubble into an error-bound\n .catch(error => entry.error = error)\n }; // Register the entry\n\n globalCache.push(entry); // And throw the promise, this yields control back to React\n\n if (!preload) throw entry.promise;\n return undefined;\n}\n\nconst suspend = (fn, keys, config) => query(fn, keys, false, config);\n\nconst preload = (fn, keys, config) => void query(fn, keys, true, config);\n\nconst peek = keys => {\n var _globalCache$find;\n\n return (_globalCache$find = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal))) == null ? void 0 : _globalCache$find.response;\n};\n\nconst clear = keys => {\n if (keys === undefined || keys.length === 0) globalCache.splice(0, globalCache.length);else {\n const entry = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal));\n\n if (entry) {\n const index = globalCache.indexOf(entry);\n if (index !== -1) globalCache.splice(index, 1);\n }\n }\n};\n\nexport { clear, peek, preload, suspend };\n","import {useContext} from 'react'\nimport {createContext} from 'react'\nimport {LayoutProps, useClient} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport {DEFAULT_CONFIG} from '../constants'\nimport {PluginConfig, PluginConfigContext} from '../types'\n\nconst DocumentInternationalizationContext =\n createContext<PluginConfigContext>(DEFAULT_CONFIG)\n\nexport function useDocumentInternationalizationContext() {\n return useContext(DocumentInternationalizationContext)\n}\n\ntype DocumentInternationalizationProviderProps = LayoutProps & {\n pluginConfig: Required<PluginConfig>\n}\n\n/**\n * This Provider wraps the Studio and provides the DocumentInternationalization context to document actions and components.\n */\nexport function DocumentInternationalizationProvider(\n props: DocumentInternationalizationProviderProps\n) {\n const {pluginConfig} = props\n\n const client = useClient({apiVersion: pluginConfig.apiVersion})\n const supportedLanguages = Array.isArray(pluginConfig.supportedLanguages)\n ? pluginConfig.supportedLanguages\n : // eslint-disable-next-line require-await\n suspend(async () => {\n if (typeof pluginConfig.supportedLanguages === 'function') {\n return pluginConfig.supportedLanguages(client)\n }\n return pluginConfig.supportedLanguages\n }, [])\n\n return (\n <DocumentInternationalizationContext.Provider\n value={{...pluginConfig, supportedLanguages}}\n >\n {props.renderDefault(props)}\n </DocumentInternationalizationContext.Provider>\n )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {ButtonTone, useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {DocumentActionComponent, SanityDocument, useClient} from 'sanity'\n\nimport DeleteTranslationDialog from '../components/DeleteTranslationDialog'\nimport DeleteTranslationFooter from '../components/DeleteTranslationFooter'\nimport {useDocumentInternationalizationContext} from '../components/DocumentInternationalizationContext'\nimport {API_VERSION, TRANSLATIONS_ARRAY_NAME} from '../constants'\n\nexport const DeleteTranslationAction: DocumentActionComponent = (props) => {\n const {id: documentId, published, draft} = props\n const doc = draft || published\n const {languageField} = useDocumentInternationalizationContext()\n\n const [isDialogOpen, setDialogOpen] = useState(false)\n const [translations, setTranslations] = useState<SanityDocument[]>([])\n const onClose = useCallback(() => setDialogOpen(false), [])\n const documentLanguage = doc ? doc[languageField] : null\n\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n\n // Remove translation reference and delete document in one transaction\n const onProceed = useCallback(() => {\n const tx = client.transaction()\n let operation = 'DELETE'\n\n if (documentLanguage && translations.length > 0) {\n operation = 'UNSET'\n translations.forEach((translation) => {\n tx.patch(translation._id, (patch) =>\n patch.unset([\n `${TRANSLATIONS_ARRAY_NAME}[_key == \"${documentLanguage}\"]`,\n ])\n )\n })\n } else {\n tx.delete(documentId)\n tx.delete(`drafts.${documentId}`)\n }\n\n tx.commit()\n .then(() => {\n if (operation === 'DELETE') {\n onClose()\n }\n toast.push({\n status: 'success',\n title:\n operation === 'UNSET'\n ? 'Translation reference unset'\n : 'Document deleted',\n description:\n operation === 'UNSET' ? 'The document can now be deleted' : null,\n })\n })\n .catch((err) => {\n toast.push({\n status: 'error',\n title:\n operation === 'unset'\n ? 'Failed to unset translation reference'\n : 'Failed to delete document',\n description: err.message,\n })\n })\n }, [client, documentLanguage, translations, documentId, onClose, toast])\n\n return {\n label: `Delete translation...`,\n disabled: !doc || !documentLanguage,\n icon: TrashIcon,\n tone: 'critical' as ButtonTone,\n onHandle: () => {\n setDialogOpen(true)\n },\n dialog: isDialogOpen && {\n type: 'dialog',\n onClose,\n header: 'Delete translation',\n content: doc ? (\n <DeleteTranslationDialog\n doc={doc}\n documentId={documentId}\n setTranslations={setTranslations}\n />\n ) : null,\n footer: (\n <DeleteTranslationFooter\n onClose={onClose}\n onProceed={onProceed}\n translations={translations}\n />\n ),\n },\n }\n}\n","import {useListeningQuery} from 'sanity-plugin-utils'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {Metadata} from '../types'\n\n// Using references() seemed less reliable for updating the listener\n// results than querying raw values in the array\n// AFAIK: references is _faster_ when querying with GROQ\n// const query = `*[_type == $translationSchema && references($id)]`\nconst query = `*[_type == $translationSchema && $id in translations[].value._ref]{\n _id,\n _createdAt,\n translations\n}`\n\nexport function useTranslationMetadata(id: string): {\n data: Metadata[] | null\n loading: boolean\n error: boolean | unknown | ProgressEvent\n} {\n const {data, loading, error} = useListeningQuery<Metadata[]>(query, {\n params: {id, translationSchema: METADATA_SCHEMA_NAME},\n })\n\n return {data, loading, error}\n}\n","import {useCallback, useContext} from 'react'\nimport {usePaneRouter} from 'sanity/desk'\nimport {RouterContext} from 'sanity/router'\n\nexport function useOpenInNewPane(id?: string, type?: string) {\n const routerContext = useContext(RouterContext)\n const {routerPanesState, groupIndex} = usePaneRouter()\n\n const openInNewPane = useCallback(() => {\n if (!routerContext || !id || !type) {\n return\n }\n\n // No panes open, function might be called outside Desk\n if (!routerPanesState.length) {\n routerContext.navigateIntent('edit', {id, type})\n return\n }\n\n const panes = [...routerPanesState]\n panes.splice(groupIndex + 1, 0, [\n {\n id: id,\n params: {type},\n },\n ])\n\n const href = routerContext.resolvePathFromState({panes})\n routerContext.navigateUrl({path: href})\n }, [id, type, routerContext, routerPanesState, groupIndex])\n\n return openInNewPane\n}\n","import {CogIcon} from '@sanity/icons'\nimport {Box, Button, Stack, Text, Tooltip} from '@sanity/ui'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\n\ntype LanguageManageProps = {\n id?: string\n}\n\nexport default function LanguageManage(props: LanguageManageProps) {\n const {id} = props\n const open = useOpenInNewPane(id, METADATA_SCHEMA_NAME)\n\n return (\n <Tooltip\n content={\n id ? null : (\n <Box padding={2}>\n <Text muted size={1}>\n Document has no other translations\n </Text>\n </Box>\n )\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n >\n <Stack>\n <Button\n disabled={!id}\n mode=\"ghost\"\n text=\"Manage Translations\"\n icon={CogIcon}\n onClick={() => open()}\n />\n </Stack>\n </Tooltip>\n )\n}\n","import {TranslationReference} from '../types'\n\nexport function createReference(\n key: string,\n ref: string,\n type: string,\n strengthenOnPublish: boolean = true\n): TranslationReference {\n return {\n _key: key,\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref: ref,\n _weak: true,\n // If the user has configured weakReferences, we won't want to strengthen them\n ...(strengthenOnPublish ? {_strengthenOnPublish: {type}} : {}),\n },\n }\n}\n","import {AddIcon, CheckmarkIcon, SplitVerticalIcon} from '@sanity/icons'\nimport {\n Badge,\n Box,\n Button,\n Flex,\n Spinner,\n Text,\n Tooltip,\n useToast,\n} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback} from 'react'\nimport {SanityDocument, useClient} from 'sanity'\n\nimport {API_VERSION, METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport {Language, Metadata, TranslationReference} from '../types'\nimport {createReference} from '../utils/createReference'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguageOptionProps = {\n language: Language\n schemaType: string\n documentId: string\n disabled: boolean\n current: boolean\n source: SanityDocument | null\n metadataId: string | null\n metadata?: Metadata | null\n sourceLanguageId?: string\n}\n\nexport default function LanguageOption(props: LanguageOptionProps) {\n const {\n language,\n schemaType,\n documentId,\n current,\n source,\n sourceLanguageId,\n metadata,\n metadataId,\n } = props\n const disabled =\n props.disabled || current || !source || !sourceLanguageId || !metadataId\n const translation: TranslationReference | undefined = metadata?.translations\n .length\n ? metadata.translations.find((t) => t._key === language.id)\n : undefined\n const {apiVersion, languageField, weakReferences} =\n useDocumentInternationalizationContext()\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const open = useOpenInNewPane(translation?.value?._ref, schemaType)\n const handleOpen = useCallback(() => open(), [open])\n\n const handleCreate = useCallback(async () => {\n if (!source) {\n throw new Error(`Cannot create translation without source document`)\n }\n\n if (!sourceLanguageId) {\n throw new Error(`Cannot create translation without source language ID`)\n }\n\n if (!metadataId) {\n throw new Error(`Cannot create translation without a metadata ID`)\n }\n\n const transaction = client.transaction()\n\n // 1. Duplicate source document\n const newTranslationDocumentId = uuid()\n const newTranslationDocument = {\n ...source,\n _id: `drafts.${newTranslationDocumentId}`,\n // 2. Update language of the translation\n [languageField]: language.id,\n }\n\n transaction.create(newTranslationDocument)\n\n // 3. Maybe create the metadata document\n const sourceReference = createReference(\n sourceLanguageId,\n documentId,\n schemaType,\n !weakReferences\n )\n const newTranslationReference = createReference(\n language.id,\n newTranslationDocumentId,\n schemaType,\n !weakReferences\n )\n const newMetadataDocument = {\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType],\n translations: [sourceReference],\n }\n\n transaction.createIfNotExists(newMetadataDocument)\n\n // 4. Patch translation to metadata document\n // Note: If the document was only just created in the operation above\n // This patch operation will have no effect\n const metadataPatch = client\n .patch(metadataId)\n .setIfMissing({translations: [sourceReference]})\n .insert(`after`, `translations[-1]`, [newTranslationReference])\n\n transaction.patch(metadataPatch)\n\n // 5. Commit!\n transaction\n .commit()\n .then(() => {\n const metadataExisted = Boolean(metadata?._createdAt)\n\n return toast.push({\n status: 'success',\n title: `Created \"${language.title}\" translation`,\n description: metadataExisted\n ? `Updated Translations Metadata`\n : `Created Translations Metadata`,\n })\n })\n .catch((err) => {\n console.error(err)\n\n return toast.push({\n status: 'error',\n title: `Error creating translation`,\n description: err.message,\n })\n })\n }, [\n client,\n documentId,\n language.id,\n language.title,\n languageField,\n metadata?._createdAt,\n metadataId,\n schemaType,\n source,\n sourceLanguageId,\n toast,\n ])\n\n let message\n\n if (current) {\n message = `Current document`\n } else if (translation) {\n message = `Open ${language.title} translation`\n } else if (!translation) {\n message = `Create new ${language.title} translation`\n }\n\n return (\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n {message}\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n >\n <Button\n onClick={translation ? handleOpen : handleCreate}\n mode={current && disabled ? `default` : `bleed`}\n disabled={disabled}\n >\n <Flex gap={3} align=\"center\">\n {disabled && !current ? (\n <Spinner />\n ) : (\n <Text size={2}>\n {/* eslint-disable-next-line no-nested-ternary */}\n {translation ? (\n <SplitVerticalIcon />\n ) : current ? (\n <CheckmarkIcon />\n ) : (\n <AddIcon />\n )}\n </Text>\n )}\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge tone={disabled || current ? `default` : `primary`}>\n {language.id}\n </Badge>\n </Flex>\n </Button>\n </Tooltip>\n )\n}\n","import {EditIcon} from '@sanity/icons'\nimport {Badge, Box, Button, Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {SanityDocument, useClient} from 'sanity'\n\nimport {Language} from '../types'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguagePatchProps = {\n language: Language\n source: SanityDocument | null\n disabled: boolean\n}\n\nexport default function LanguagePatch(props: LanguagePatchProps) {\n const {language, source} = props\n const {apiVersion, languageField} = useDocumentInternationalizationContext()\n const disabled = props.disabled || !source\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const handleClick = useCallback(() => {\n if (!source) {\n throw new Error(`Cannot patch missing document`)\n }\n\n const currentId = source._id\n\n client\n .patch(currentId)\n .set({[languageField]: language.id})\n .commit()\n .then(() => {\n toast.push({\n title: `Set document language to ${language.title}`,\n status: `success`,\n })\n })\n .catch((err) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to set document language to ${language.title}`,\n status: `error`,\n })\n })\n }, [source, client, languageField, language, toast])\n\n return (\n <Button\n mode=\"bleed\"\n onClick={handleClick}\n disabled={disabled}\n justify=\"flex-start\"\n >\n <Flex gap={3} align=\"center\">\n <Text size={2}>\n <EditIcon />\n </Text>\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge>{language.id}</Badge>\n </Flex>\n </Button>\n )\n}\n","import {Box} from '@sanity/ui'\nimport styled from 'styled-components'\n\nexport default styled(Box)`\n max-width: 280px;\n`\n","import {Card, Flex, Text} from '@sanity/ui'\nimport {PropsWithChildren} from 'react'\n\nimport ConstrainedBox from './ConstrainedBox'\n\nexport default function Warning({children}: PropsWithChildren) {\n return (\n <Card tone=\"caution\" padding={3}>\n <Flex justify=\"center\">\n <ConstrainedBox>\n <Text size={1} align=\"center\">\n {children}\n </Text>\n </ConstrainedBox>\n </Flex>\n </Card>\n )\n}\n","import {TranslateIcon} from '@sanity/icons'\nimport {\n Box,\n Button,\n Card,\n Popover,\n Stack,\n Text,\n TextInput,\n useClickOutside,\n} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {FormEvent, useCallback, useMemo, useState} from 'react'\nimport {useEditState} from 'sanity'\n\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport {DocumentInternationalizationMenuProps} from '../types'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\nimport LanguageManage from './LanguageManage'\nimport LanguageOption from './LanguageOption'\nimport LanguagePatch from './LanguagePatch'\nimport Warning from './Warning'\n\nexport function DocumentInternationalizationMenu(\n props: DocumentInternationalizationMenuProps\n) {\n const {documentId} = props\n const schemaType = props.schemaType.name\n const {languageField, supportedLanguages} =\n useDocumentInternationalizationContext()\n\n // Search filter query\n const [query, setQuery] = useState(``)\n const handleQuery = useCallback((event: FormEvent<HTMLInputElement>) => {\n if (event.currentTarget.value) {\n setQuery(event.currentTarget.value)\n } else {\n setQuery(``)\n }\n }, [])\n\n // UI Handlers\n const [open, setOpen] = useState(false)\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n const [button, setButton] = useState<HTMLElement | null>(null)\n const [popover, setPopover] = useState<HTMLElement | null>(null)\n const handleClickOutside = useCallback(() => setOpen(false), [])\n useClickOutside(handleClickOutside, [button, popover])\n\n // Get metadata from content lake\n const {data, loading, error} = useTranslationMetadata(documentId)\n const metadata = Array.isArray(data) && data.length ? data[0] : null\n\n // Optimistically set a metadata ID for a newly created metadata document\n // Cannot rely on generated metadata._id from useTranslationMetadata\n // As the document store might not have returned it before creating another translation\n const metadataId = useMemo(() => {\n if (loading) {\n return null\n }\n\n // Once created, these two values should be the same anyway\n return metadata?._id ?? uuid()\n }, [loading, metadata?._id])\n\n // Duplicate a new language version from the most recent version of this document\n const {draft, published} = useEditState(documentId, schemaType)\n const source = draft || published\n\n // Check for data issues\n const documentIsInOneMetadataDocument = useMemo(() => {\n return Array.isArray(data) && data.length <= 1\n }, [data])\n const sourceLanguageId = source?.[languageField] as string | undefined\n const sourceLanguageIsValid = supportedLanguages.some(\n (l) => l.id === sourceLanguageId\n )\n const allLanguagesAreValid = useMemo(() => {\n const valid = supportedLanguages.every((l) => l.id && l.title)\n if (!valid) {\n console.warn(\n `Not all languages are valid. It should be an array of objects with an \"id\" and \"title\" property. Or a function that returns an array of objects with an \"id\" and \"title\" property.`,\n supportedLanguages\n )\n }\n\n return valid\n }, [supportedLanguages])\n\n const content = (\n <Box padding={1}>\n {error ? (\n <Card tone=\"critical\" padding={1}>\n <Text>There was an error returning translations metadata</Text>\n </Card>\n ) : (\n <Stack space={1}>\n <LanguageManage id={metadata?._id} />\n {supportedLanguages.length > 4 ? (\n <TextInput\n onChange={handleQuery}\n value={query}\n placeholder=\"Filter languages\"\n />\n ) : null}\n {supportedLanguages.length > 0 ? (\n <>\n {/* Once metadata is loaded, there may be issues */}\n {loading ? null : (\n <>\n {/* Not all languages are valid */}\n {data && documentIsInOneMetadataDocument ? null : (\n <Warning>\n {/* TODO: Surface these documents to the user */}\n This document has been found in more than one Translations\n Metadata documents\n </Warning>\n )}\n {/* Not all languages are valid */}\n {allLanguagesAreValid ? null : (\n <Warning>\n Not all language objects are valid. See the console.\n </Warning>\n )}\n {/* Current document has no language field */}\n {sourceLanguageId ? null : (\n <Warning>\n Choose a language to apply to{' '}\n <strong>this Document</strong>\n </Warning>\n )}\n {/* Current document has an invalid language field */}\n {sourceLanguageId && !sourceLanguageIsValid ? (\n <Warning>\n Select a supported language. Current language value:{' '}\n <code>{sourceLanguageId}</code>\n </Warning>\n ) : null}\n </>\n )}\n {supportedLanguages\n .filter((language) => {\n if (query) {\n return language.title\n .toLowerCase()\n .includes(query.toLowerCase())\n }\n return true\n })\n .map((language) =>\n !loading && sourceLanguageId && sourceLanguageIsValid ? (\n // Button to duplicate this document to a new translation\n // And either create or update the metadata document\n <LanguageOption\n key={language.id}\n language={language}\n schemaType={schemaType}\n documentId={documentId}\n disabled={loading || !allLanguagesAreValid}\n current={language.id === sourceLanguageId}\n metadata={metadata}\n metadataId={metadataId}\n source={source}\n sourceLanguageId={sourceLanguageId}\n />\n ) : (\n // Button to set a language field on *this* document\n <LanguagePatch\n key={language.id}\n source={source}\n language={language}\n // Only allow language patch change to:\n // - Keys not in metadata\n // - The key of this document in the metadata\n disabled={\n (loading ||\n !allLanguagesAreValid ||\n metadata?.translations\n .filter((t) => t?.value?._ref !== documentId)\n .some((t) => t._key === language.id)) ??\n false\n }\n />\n )\n )}\n </>\n ) : null}\n </Stack>\n )}\n </Box>\n )\n\n const issueWithTranslations =\n !loading && sourceLanguageId && !sourceLanguageIsValid\n\n if (!documentId) {\n return null\n }\n\n if (!schemaType) {\n return null\n }\n\n return (\n <Popover\n constrainSize\n content={content}\n open={open}\n portal\n ref={setPopover}\n overflow=\"auto\"\n tone=\"default\"\n >\n <Button\n text=\"Translations\"\n mode=\"bleed\"\n disabled={!source}\n tone={\n !source || loading || !issueWithTranslations ? undefined : `caution`\n }\n icon={TranslateIcon}\n onClick={handleClick}\n ref={setButton}\n selected={open}\n />\n </Popover>\n )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {ButtonTone, useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {\n DocumentActionComponent,\n KeyedObject,\n Reference,\n TypedObject,\n useClient,\n} from 'sanity'\n\nimport {API_VERSION, TRANSLATIONS_ARRAY_NAME} from '../constants'\n\ntype TranslationReference = TypedObject &\n KeyedObject & {\n value: Reference\n }\n\nexport const DeleteMetadataAction: DocumentActionComponent = (props) => {\n const {id: documentId, published, draft, onComplete} = props\n const doc = draft || published\n\n const [isDialogOpen, setDialogOpen] = useState(false)\n const onClose = useCallback(() => setDialogOpen(false), [])\n const translations: TranslationReference[] = useMemo(\n () =>\n doc && Array.isArray(doc[TRANSLATIONS_ARRAY_NAME])\n ? (doc[TRANSLATIONS_ARRAY_NAME] as TranslationReference[])\n : [],\n [doc]\n )\n\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n\n // Remove translation reference and delete document in one transaction\n const onProceed = useCallback(() => {\n const tx = client.transaction()\n\n tx.patch(documentId, (patch) => patch.unset([TRANSLATIONS_ARRAY_NAME]))\n\n if (translations.length > 0) {\n translations.forEach((translation) => {\n tx.delete(translation.value._ref)\n tx.delete(`drafts.${translation.value._ref}`)\n })\n }\n\n tx.delete(documentId)\n // Shouldn't exist as this document type is in liveEdit\n tx.delete(`drafts.${documentId}`)\n\n tx.commit()\n .then(() => {\n onClose()\n\n toast.push({\n status: 'success',\n title: 'Deleted document and translations',\n })\n })\n .catch((err) => {\n toast.push({\n status: 'error',\n title: 'Failed to delete document and translations',\n description: err.message,\n })\n })\n }, [client, translations, documentId, onClose, toast])\n\n return {\n label: `Delete all translations`,\n disabled: !doc || !translations.length,\n icon: TrashIcon,\n tone: 'critical' as ButtonTone,\n onHandle: () => {\n setDialogOpen(true)\n },\n dialog: isDialogOpen && {\n type: 'confirm',\n onCancel: onComplete,\n onConfirm: () => {\n onProceed()\n onComplete()\n },\n tone: 'critical' as ButtonTone,\n message:\n translations.length === 1\n ? `Delete 1 translation and this document`\n : `Delete all ${translations.length} translations and this document`,\n },\n }\n}\n","import {DocumentBadgeDescription, DocumentBadgeProps} from 'sanity'\n\nimport {useDocumentInternationalizationContext} from '../components/DocumentInternationalizationContext'\n\nexport function LanguageBadge(\n props: DocumentBadgeProps\n): DocumentBadgeDescription | null {\n const source = props?.draft || props?.published\n const {languageField, supportedLanguages} =\n useDocumentInternationalizationContext()\n const languageId = source?.[languageField]\n\n if (!languageId) {\n return null\n }\n\n const language = Array.isArray(supportedLanguages)\n ? supportedLanguages.find((l) => l.id === languageId)\n : null\n\n // Currently we only show the language id if the supportedLanguages are async\n return {\n label: language?.id ?? String(languageId),\n title: language?.title ?? undefined,\n color: `primary`,\n }\n}\n","import {Card, Spinner} from '@sanity/ui'\nimport React, {useEffect, useMemo} from 'react'\nimport {Preview, useEditState, useSchema, useValidationStatus} from 'sanity'\n\ntype DocumentCheckProps = {\n id: string\n onCheckComplete: (id: string) => void\n addInvalidId: (id: string) => void\n removeInvalidId: (id: string) => void\n addDraftId: (id: string) => void\n removeDraftId: (id: string) => void\n}\n\n// Check if the document has a draft\n// Check if that draft is valid\n// Report back to parent that it can be added to bulk publish\nexport default function DocumentCheck(props: DocumentCheckProps) {\n const {\n id,\n onCheckComplete,\n addInvalidId,\n removeInvalidId,\n addDraftId,\n removeDraftId,\n } = props\n const editState = useEditState(id, ``)\n const {isValidating, validation} = useValidationStatus(id, ``)\n const schema = useSchema()\n\n const validationHasErrors = useMemo(() => {\n return (\n !isValidating &&\n validation.length > 0 &&\n validation.some((item) => item.level === 'error')\n )\n }, [isValidating, validation])\n\n useEffect(() => {\n if (validationHasErrors) {\n addInvalidId(id)\n } else {\n removeInvalidId(id)\n }\n\n if (editState.draft) {\n addDraftId(id)\n } else {\n removeDraftId(id)\n }\n\n if (!isValidating) {\n onCheckComplete(id)\n }\n }, [\n addDraftId,\n addInvalidId,\n editState.draft,\n id,\n isValidating,\n onCheckComplete,\n removeDraftId,\n removeInvalidId,\n validationHasErrors,\n ])\n\n // We only care about drafts\n if (!editState.draft) {\n return null\n }\n\n const schemaType = schema.get(editState.draft._type)\n\n return (\n <Card\n border\n padding={2}\n tone={validationHasErrors ? `critical` : `positive`}\n >\n {editState.draft && schemaType ? (\n <Preview\n layout=\"default\"\n value={editState.draft}\n schemaType={schemaType}\n />\n ) : (\n <Spinner />\n )}\n </Card>\n )\n}\n","import {Box, ButtonTone, Text, Tooltip} from '@sanity/ui'\nimport React, {PropsWithChildren} from 'react'\nimport {TextWithTone} from 'sanity'\n\ntype InfoIconProps = PropsWithChildren & {\n icon: React.ComponentType\n tone: ButtonTone\n text?: string\n}\n\nexport default function InfoIcon(props: InfoIconProps) {\n const {text, icon, tone, children} = props\n const Icon = icon\n\n return (\n <Tooltip\n portal\n content={\n children ? (\n <>{children}</>\n ) : (\n <Box padding={2}>\n <Text size={1}>{text}</Text>\n </Box>\n )\n }\n >\n <TextWithTone tone={tone} size={1}>\n <Icon />\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {InfoOutlineIcon} from '@sanity/icons'\nimport {Box, Stack, Text} from '@sanity/ui'\n\nimport InfoIcon from './InfoIcon'\n\nexport default function Info() {\n return (\n <InfoIcon icon={InfoOutlineIcon} tone=\"primary\">\n <Stack padding={3} space={4} style={{maxWidth: 250}}>\n <Box>\n <Text size={1}>Bulk publishing uses the Scheduling API.</Text>\n </Box>\n <Box>\n <Text size={1}>\n Customized Document Actions in the Studio will not execute. Webhooks\n will execute.\n </Text>\n </Box>\n <Box>\n <Text size={1}>\n Validation is checked before rendering the button below, but the\n Scheduling API will not check for – or enforce – validation.\n </Text>\n </Box>\n </Stack>\n </InfoIcon>\n )\n}\n","import {Button, Card, Dialog, Inline, Stack, Text, useToast} from '@sanity/ui'\nimport React, {useCallback, useState} from 'react'\nimport {TextWithTone, useClient, useWorkspace} from 'sanity'\n\nimport {API_VERSION} from '../../constants'\nimport {TranslationReference} from '../../types'\nimport DocumentCheck from './DocumentCheck'\nimport Info from './Info'\n\nexport type BulkPublishProps = {\n translations: TranslationReference[]\n}\n\n// A root-level component with UI for hitting the Publishing API\nexport default function BulkPublish(props: BulkPublishProps) {\n const {translations} = props\n const client = useClient({apiVersion: API_VERSION})\n const {projectId, dataset} = useWorkspace()\n const toast = useToast()\n const [invalidIds, setInvalidIds] = useState<string[] | null>(null)\n const [checkedIds, setCheckedIds] = useState<string[]>([])\n\n const onCheckComplete = useCallback((id: string) => {\n setCheckedIds((ids) => Array.from(new Set([...ids, id])))\n }, [])\n\n // Handle dialog\n const [open, setOpen] = useState(false)\n const onOpen = useCallback(() => setOpen(true), [])\n const onClose = useCallback(() => setOpen(false), [])\n\n const addInvalidId = useCallback((id: string) => {\n setInvalidIds((ids) => (ids ? Array.from(new Set([...ids, id])) : [id]))\n }, [])\n\n const removeInvalidId = useCallback((id: string) => {\n setInvalidIds((ids) => (ids ? ids.filter((i) => i !== id) : []))\n }, [])\n\n const [draftIds, setDraftIds] = useState<string[]>([])\n\n const addDraftId = useCallback((id: string) => {\n setDraftIds((ids) => Array.from(new Set([...ids, id])))\n }, [])\n\n const removeDraftId = useCallback((id: string) => {\n setDraftIds((ids) => ids.filter((i) => i !== id))\n }, [])\n\n const handleBulkPublish = useCallback(() => {\n const body = translations.map((translation) => ({\n documentId: translation.value._ref,\n }))\n client\n .request({\n uri: `/publish/${projectId}/${dataset}`,\n method: 'POST',\n body,\n })\n .then(() => {\n toast.push({\n status: 'success',\n title: 'Success',\n description: 'Bulk publish complete',\n })\n })\n .catch((err) => {\n console.error(err)\n toast.push({\n status: 'error',\n title: 'Error',\n description: 'Bulk publish failed',\n })\n })\n }, [translations, client, projectId, dataset, toast])\n\n const disabled =\n // Not all documents have been checked\n checkedIds.length !== translations.length ||\n // Some document(s) are invalid\n Boolean(invalidIds && invalidIds?.length > 0) ||\n // No documents are drafts\n !draftIds.length\n\n return translations?.length > 0 ? (\n <Card padding={4} border radius={2}>\n <Stack space={3}>\n <Inline space={3}>\n <Text weight=\"bold\" size={1}>\n Bulk publishing\n </Text>\n <Info />\n </Inline>\n\n <Stack>\n <Button\n onClick={onOpen}\n text=\"Prepare bulk publishing\"\n mode=\"ghost\"\n />\n </Stack>\n\n {open && (\n <Dialog\n header=\"Bulk publishing\"\n id=\"bulk-publish-dialog\"\n onClose={onClose}\n zOffset={1000}\n width={3}\n >\n <Stack space={4} padding={4}>\n {draftIds.length > 0 ? (\n <Stack space={2}>\n <Text size={1}>\n There{' '}\n {draftIds.length === 1\n ? `is 1 draft document`\n : `are ${draftIds.length} draft documents`}\n .\n </Text>\n {invalidIds && invalidIds.length > 0 ? (\n <TextWithTone tone=\"critical\" size={1}>\n {invalidIds && invalidIds.length === 1\n ? `1 draft document has`\n : `${\n invalidIds && invalidIds.length\n } draft documents have`}{' '}\n validation issues that must addressed first\n </TextWithTone>\n ) : (\n <TextWithTone tone=\"positive\" size={1}>\n All drafts are valid and can be bulk published\n </TextWithTone>\n )}\n </Stack>\n ) : null}\n\n <Stack space={1}>\n {translations\n .filter((translation) => translation?.value?._ref)\n .map((translation) => (\n <DocumentCheck\n key={translation._key}\n id={translation.value._ref}\n onCheckComplete={onCheckComplete}\n addInvalidId={addInvalidId}\n removeInvalidId={removeInvalidId}\n addDraftId={addDraftId}\n removeDraftId={removeDraftId}\n />\n ))}\n </Stack>\n {draftIds.length > 0 ? (\n <Button\n mode=\"ghost\"\n tone={\n invalidIds && invalidIds?.length > 0\n ? 'caution'\n : 'positive'\n }\n text={\n draftIds.length === 1\n ? `Publish draft document`\n : `Bulk publish ${draftIds.length} draft documents`\n }\n onClick={handleBulkPublish}\n disabled={disabled}\n />\n ) : (\n <Text muted size={1}>\n No draft documents to publish\n </Text>\n )}\n </Stack>\n </Dialog>\n )}\n </Stack>\n </Card>\n ) : null\n}\n","import {useEffect} from 'react'\nimport {PatchEvent, unset, useClient, useEditState} from 'sanity'\nimport {useDocumentPane} from 'sanity/desk'\n\nimport {API_VERSION} from '../../constants'\nimport {TranslationReference} from '../../types'\n\ntype ReferencePatcherProps = {\n translation: TranslationReference\n documentType: string\n metadataId: string\n}\n\n// For every reference, check if it is published, and if so, strengthen the reference\nexport default function ReferencePatcher(props: ReferencePatcherProps) {\n const {translation, documentType, metadataId} = props\n const editState = useEditState(translation.value._ref, documentType)\n const client = useClient({apiVersion: API_VERSION})\n const {onChange} = useDocumentPane()\n\n useEffect(() => {\n if (\n // We have a reference\n translation.value._ref &&\n // It's still weak and not-yet-strengthened\n translation.value._weak &&\n // We also want to keep this check because maybe the user *configured* weak refs\n translation.value._strengthenOnPublish &&\n // The referenced document has just been published\n !editState.draft &&\n editState.published &&\n editState.ready\n ) {\n const referencePathBase = [\n 'translations',\n {_key: translation._key},\n 'value',\n ]\n\n onChange(\n new PatchEvent([\n unset([...referencePathBase, '_weak']),\n unset([...referencePathBase, '_strengthenOnPublish']),\n ])\n )\n }\n }, [translation, editState, metadataId, client, onChange])\n\n return null\n}\n","import {TranslationReference} from '../../types'\nimport ReferencePatcher from './ReferencePatcher'\n\ntype OptimisticallyStrengthenProps = {\n translations: TranslationReference[]\n metadataId: string\n}\n\n// There's no good reason to leave published references as weak\n// So this component will run on every render and strengthen them\nexport default function OptimisticallyStrengthen(\n props: OptimisticallyStrengthenProps\n) {\n const {translations = [], metadataId} = props\n\n if (!translations.length) {\n return null\n }\n\n return (\n <>\n {translations.map((translation) =>\n translation.value._strengthenOnPublish?.type ? (\n <ReferencePatcher\n key={translation._key}\n translation={translation}\n documentType={translation.value._strengthenOnPublish.type}\n metadataId={metadataId}\n />\n ) : null\n )}\n </>\n )\n}\n","import {TranslateIcon} from '@sanity/icons'\nimport {\n defineField,\n defineType,\n DocumentDefinition,\n FieldDefinition,\n} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME, TRANSLATIONS_ARRAY_NAME} from '../../constants'\n\nexport default (\n schemaTypes: string[],\n metadataFields: FieldDefinition[]\n): DocumentDefinition =>\n defineType({\n type: 'document',\n name: METADATA_SCHEMA_NAME,\n title: 'Translation metadata',\n icon: TranslateIcon,\n liveEdit: true,\n fields: [\n defineField({\n name: TRANSLATIONS_ARRAY_NAME,\n type: 'internationalizedArrayReference',\n }),\n defineField({\n name: 'schemaTypes',\n description:\n 'Optional: Used to filter the reference fields above so all translations share the same types.',\n type: 'array',\n // For some reason TS dislikes this line because of the DocumentDefinition return type\n // @ts-expect-error\n of: [{type: 'string'}],\n options: {list: schemaTypes},\n readOnly: ({value}) => Boolean(value),\n }),\n ...metadataFields,\n ],\n preview: {\n select: {\n translations: TRANSLATIONS_ARRAY_NAME,\n documentSchemaTypes: 'schemaTypes',\n },\n prepare(selection) {\n const {translations = [], documentSchemaTypes = []} = selection\n const title =\n translations.length === 1\n ? `1 Translation`\n : `${translations.length} Translations`\n const languageKeys = translations.length\n ? translations\n .map((t: {_key: string}) => t._key.toUpperCase())\n .join(', ')\n : ``\n const subtitle = [\n languageKeys ? `(${languageKeys})` : null,\n documentSchemaTypes?.length\n ? documentSchemaTypes.map((s: string) => s).join(`, `)\n : ``,\n ]\n .filter(Boolean)\n .join(` `)\n\n return {\n title,\n subtitle,\n }\n },\n },\n })\n","import {Stack} from '@sanity/ui'\nimport {defineField, definePlugin, isSanityDocument} from 'sanity'\nimport {internationalizedArray} from 'sanity-plugin-internationalized-array'\n\nimport {DeleteMetadataAction} from './actions/DeleteMetadataAction'\nimport {LanguageBadge} from './badges'\nimport BulkPublish from './components/BulkPublish'\nimport {DocumentInternationalizationProvider} from './components/DocumentInternationalizationContext'\nimport {DocumentInternationalizationMenu} from './components/DocumentInternationalizationMenu'\nimport OptimisticallyStrengthen from './components/OptimisticallyStrengthen'\nimport {API_VERSION, DEFAULT_CONFIG, METADATA_SCHEMA_NAME} from './constants'\nimport metadata from './schema/translation/metadata'\nimport {PluginConfig, TranslationReference} from './types'\n\nexport const documentInternationalization = definePlugin<PluginConfig>(\n (config) => {\n const pluginConfig = {...DEFAULT_CONFIG, ...config}\n const {\n supportedLanguages,\n schemaTypes,\n languageField,\n bulkPublish,\n metadataFields,\n } = pluginConfig\n\n if (schemaTypes.length === 0) {\n throw new Error(\n 'You must specify at least one schema type on which to enable document internationalization. Update the `schemaTypes` option in the documentInternationalization() configuration.'\n )\n }\n\n return {\n name: '@sanity/document-internationalization',\n\n studio: {\n components: {\n layout: (props) =>\n DocumentInternationalizationProvider({...props, pluginConfig}),\n },\n },\n\n // Adds:\n // - A bulk-publishing UI component to the form\n // - Will only work for projects on a compatible plan\n form: {\n components: {\n input: (props) => {\n if (\n props.id === 'root' &&\n props.schemaType.name === METADATA_SCHEMA_NAME &&\n isSanityDocument(props?.value)\n ) {\n const metadataId = props?.value?._id\n const translations =\n (props?.value?.translations as TranslationReference[]) ?? []\n const weakAndTypedTranslations = translations.filter(\n ({value}) => value && value._weak && value._strengthenOnPublish\n )\n\n return (\n <Stack space={5}>\n {bulkPublish ? (\n <BulkPublish translations={translations} />\n ) : null}\n {weakAndTypedTranslations.length > 0 ? (\n <OptimisticallyStrengthen\n metadataId={metadataId}\n translations={weakAndTypedTranslations}\n />\n ) : null}\n {props.renderDefault(props)}\n </Stack>\n )\n }\n\n return props.renderDefault(props)\n },\n },\n },\n\n // Adds:\n // - The `Translations` dropdown to the editing form\n // - `Badges` to documents with a language value\n // - The `DeleteMetadataAction` action to the metadata document type\n document: {\n unstable_languageFilter: (prev, ctx) => {\n const {schemaType, documentId} = ctx\n\n return schemaTypes.includes(schemaType) && documentId\n ? [\n ...prev,\n (props) =>\n DocumentInternationalizationMenu({...props, documentId}),\n ]\n : prev\n },\n badges: (prev, {schemaType}) => {\n if (!schemaTypes.includes(schemaType)) {\n return prev\n }\n\n return [(props) => LanguageBadge(props), ...prev]\n },\n actions: (prev, {schemaType}) => {\n if (schemaType === METADATA_SCHEMA_NAME) {\n return [...prev, DeleteMetadataAction]\n }\n\n return prev\n },\n },\n\n // Adds:\n // - The `Translations metadata` document type to the schema\n schema: {\n // Create the metadata document type\n types: [metadata(schemaTypes, metadataFields)],\n\n // For every schema type this plugin is enabled on\n // Create an initial value template to set the language\n templates: (prev, {schema}) => {\n // Templates are not setup for async languages\n if (!Array.isArray(supportedLanguages)) {\n return prev\n }\n\n const parameterizedTemplates = schemaTypes.map((schemaType) => ({\n id: `${schemaType}-parameterized`,\n title: `${\n schema?.get(schemaType)?.title ?? schemaType\n }: with Language`,\n schemaType,\n parameters: [\n {name: `languageId`, title: `Language ID`, type: `string`},\n ],\n value: ({languageId}: {languageId: string}) => ({\n [languageField]: languageId,\n }),\n }))\n\n const staticTemplates = schemaTypes.flatMap((schemaType) => {\n return supportedLanguages.map((language) => ({\n id: `${schemaType}-${language.id}`,\n title: `${language.title} ${\n schema?.get(schemaType)?.title ?? schemaType\n }`,\n schemaType,\n value: {\n [languageField]: language.id,\n },\n }))\n })\n\n return [...prev, ...parameterizedTemplates, ...staticTemplates]\n },\n },\n\n // Uses:\n // - `sanity-plugin-internationalized-array` to maintain the translations array\n plugins: [\n // Translation metadata stores its references using this plugin\n // It cuts down on attribute usage and gives UI conveniences to add new translations\n internationalizedArray({\n languages: supportedLanguages,\n fieldTypes: [\n defineField(\n {\n name: 'reference',\n type: 'reference',\n to: schemaTypes.map((type) => ({type})),\n weak: pluginConfig.weakReferences,\n // Reference filters don't actually enforce validation!\n validation: (Rule) =>\n Rule.custom(async (item: TranslationReference, context) => {\n if (!item?.value?._ref || !item?._key) {\n return true\n }\n\n const client = context.getClient({apiVersion: API_VERSION})\n const valueLanguage = await client.fetch(\n `*[_id in [$ref, $draftRef]][0].${languageField}`,\n {\n ref: item.value._ref,\n draftRef: `drafts.${item.value._ref}`,\n }\n )\n\n if (valueLanguage && valueLanguage === item._key) {\n return true\n }\n\n return `Referenced document does not have the correct language value`\n }),\n options: {\n // TODO: Update type once it knows the values of this filter\n // @ts-expect-error\n filter: ({parent, document}) => {\n if (!parent) return null\n\n // I'm not sure in what instance there's an array of parents\n // But the Type suggests it's possible\n const parentArray = Array.isArray(parent)\n ? parent\n : [parent]\n const language = parentArray.find((p) => p._key)\n\n if (!language?._key) return null\n\n if (document.schemaTypes) {\n return {\n filter: `_type in $schemaTypes && ${languageField} == $language`,\n params: {\n schemaTypes: document.schemaTypes,\n language: language._key,\n },\n }\n }\n\n return {\n filter: `${languageField} == $language`,\n params: {language: language._key},\n }\n },\n },\n },\n {strict: false}\n ),\n ],\n }),\n ],\n }\n }\n)\n"],"names":["DocumentPreview","props","schema","useSchema","schemaType","get","type","jsx","Feedback","tone","title","Preview","value","METADATA_SCHEMA_NAME","TRANSLATIONS_ARRAY_NAME","API_VERSION","DEFAULT_CONFIG","supportedLanguages","schemaTypes","languageField","weakReferences","bulkPublish","metadataFields","apiVersion","separateReferences","data","arguments","length","undefined","translations","otherReferences","forEach","doc","_type","push","DeleteTranslationDialog","documentId","setTranslations","loading","useListeningQuery","params","id","initialValue","useMemo","useEffect","Flex","padding","align","justify","children","Spinner","jsxs","Stack","space","Text","Card","border","size","weight","Fragment","borderTop","map","translation","_id","reference","DeleteTranslationFooter","onClose","onProceed","Grid","columns","gap","Button","text","onClick","mode","shallowEqualArrays","arrA","arrB","equal","a","b","len","i","globalCache","query","query$1","fn","keys","preload","config","entry","Object","prototype","hasOwnProperty","call","error","response","promise","then","lifespan","setTimeout","index","indexOf","splice","catch","suspend","DocumentInternationalizationContext","createContext","useDocumentInternationalizationContext","useContext","DocumentInternationalizationProvider","pluginConfig","client","useClient","Array","isArray","Provider","renderDefault","DeleteTranslationAction","published","draft","isDialogOpen","setDialogOpen","useState","useCallback","documentLanguage","toast","useToast","tx","transaction","operation","patch","unset","concat","delete","commit","status","description","err","message","label","disabled","icon","TrashIcon","onHandle","dialog","header","content","footer","useTranslationMetadata","translationSchema","useOpenInNewPane","routerContext","RouterContext","routerPanesState","groupIndex","usePaneRouter","openInNewPane","navigateIntent","panes","href","resolvePathFromState","navigateUrl","path","LanguageManage","open","Tooltip","Box","muted","fallbackPlacements","placement","portal","CogIcon","createReference","key","ref","strengthenOnPublish","_key","_ref","_weak","_strengthenOnPublish","LanguageOption","_a","language","current","source","sourceLanguageId","metadata","metadataId","find","t","handleOpen","handleCreate","Error","newTranslationDocumentId","uuid","newTranslationDocument","create","sourceReference","newTranslationReference","newMetadataDocument","createIfNotExists","metadataPatch","setIfMissing","insert","metadataExisted","Boolean","_createdAt","console","SplitVerticalIcon","CheckmarkIcon","AddIcon","flex","Badge","LanguagePatch","handleClick","currentId","set","EditIcon","ConstrainedBox","styled","__template","Warning","DocumentInternationalizationMenu","name","setQuery","handleQuery","event","currentTarget","setOpen","o","button","setButton","popover","setPopover","handleClickOutside","useClickOutside","useEditState","documentIsInOneMetadataDocument","sourceLanguageIsValid","some","l","allLanguagesAreValid","valid","every","warn","TextInput","onChange","placeholder","filter","toLowerCase","includes","issueWithTranslations","Popover","constrainSize","overflow","TranslateIcon","selected","DeleteMetadataAction","onComplete","onCancel","onConfirm","LanguageBadge","_b","languageId","String","color","DocumentCheck","onCheckComplete","addInvalidId","removeInvalidId","addDraftId","removeDraftId","editState","isValidating","validation","useValidationStatus","validationHasErrors","item","level","layout","InfoIcon","Icon","TextWithTone","Info","InfoOutlineIcon","style","maxWidth","BulkPublish","projectId","dataset","useWorkspace","invalidIds","setInvalidIds","checkedIds","setCheckedIds","ids","from","Set","onOpen","draftIds","setDraftIds","handleBulkPublish","body","request","uri","method","radius","Inline","Dialog","zOffset","width","ReferencePatcher","documentType","useDocumentPane","ready","referencePathBase","PatchEvent","OptimisticallyStrengthen","defineType","liveEdit","fields","defineField","of","options","list","readOnly","_ref2","preview","select","documentSchemaTypes","prepare","selection","languageKeys","toUpperCase","join","subtitle","s","documentInternationalization","definePlugin","studio","components","form","input","_c","isSanityDocument","weakAndTypedTranslations","_ref3","document","unstable_languageFilter","prev","ctx","badges","_ref4","actions","_ref5","types","templates","_ref6","parameterizedTemplates","parameters","_ref7","staticTemplates","flatMap","plugins","internationalizedArray","languages","fieldTypes","to","weak","Rule","custom","context","getClient","valueLanguage","fetch","draftRef","_ref8","parent","parentArray","p","strict"],"mappings":";;;;;;;;;;;AASA,SAAwBA,gBAAgBC,KAA6B,EAAA;EACnE,MAAMC,SAASC,SAAU,EAAA;EAEzB,MAAMC,UAAa,GAAAF,MAAA,CAAOG,GAAI,CAAAJ,KAAA,CAAMK,IAAI,CAAA;EACxC,IAAI,CAACF,UAAY,EAAA;IACf,OAAQ,eAAAG,GAAA,CAAAC,QAAA,EAAA;MAASC,IAAK,EAAA,UAAA;MAAWC,OAAM;IAAwB,CAAA,CAAA;EACjE;EAEA,OAAQ,eAAAH,GAAA,CAAAI,OAAA,EAAA;IAAQC,KAAO,EAAAX,KAAA,CAAMW;IAAOR;EAAwB,CAAA,CAAA;AAC9D;AChBO,MAAMS,oBAAuB,GAAA,sBAAA;AAC7B,MAAMC,uBAA0B,GAAA,cAAA;AAChC,MAAMC,WAAc,GAAA,YAAA;AACpB,MAAMC,cAAsC,GAAA;EACjDC,oBAAoB,EAAC;EACrBC,aAAa,EAAC;EACdC,aAAe,EAAA,UAAA;EACfC,cAAgB,EAAA,KAAA;EAChBC,WAAa,EAAA,KAAA;EACbC,gBAAgB,EAAC;EACjBC,UAAY,EAAAR;AACd,CAAA;ACTgB,SAAAS,kBAAAA,CAAA,EAGd;EAAA,IAHiCC,IAAgC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAA,EAGjE;EACA,MAAMG,eAAiC,EAAC;EACxC,MAAMC,kBAAoC,EAAC;EAEvC,IAAAL,IAAA,IAAQA,IAAK,CAAAE,MAAA,GAAS,CAAG,EAAA;IACtBF,IAAA,CAAAM,OAAA,CAASC,GAAQ,IAAA;MAChB,IAAAA,GAAA,CAAIC,UAAUpB,oBAAsB,EAAA;QACtCgB,YAAA,CAAaK,KAAKF,GAAG,CAAA;MAAA,CAChB,MAAA;QACLF,eAAA,CAAgBI,KAAKF,GAAG,CAAA;MAC1B;IAAA,CACD,CAAA;EACH;EAEO,OAAA;IAACH;IAAcC;GAAe;AACvC;ACRA,SAAwBK,wBACtBlC,KACA,EAAA;EACA,MAAM;IAAC+B,GAAA;IAAKI,UAAY;IAAAC;EAAA,CAAmB,GAAApC,KAAA;EAGrC,MAAA;IAACwB,IAAM;IAAAa;EAAA,CAAW,GAAAC,iBAAA,CACtB,gCAAA,EACA;IAACC,QAAQ;MAACC,EAAA,EAAIL;KAAa;IAAAM,YAAA,EAAc;EAAE,CAAA,CAC7C;EACM,MAAA;IAACb,YAAc;IAAAC;EAAA,CAAmB,GAAAa,OAAA,CACtC,MAAMnB,mBAAmBC,IAAI,CAAA,EAC7B,CAACA,IAAI,CAAA,CACP;EAEAmB,SAAA,CAAU,MAAM;IACdP,eAAA,CAAgBR,YAAY,CAAA;EAAA,CAC3B,EAAA,CAACQ,eAAiB,EAAAR,YAAY,CAAC,CAAA;EAElC,IAAIS,OAAS,EAAA;IAET,OAAA,eAAA/B,GAAA,CAACsC,IAAK,EAAA;MAAAC,OAAA,EAAS,CAAG;MAAAC,KAAA,EAAM;MAASC,OAAQ,EAAA,QAAA;MACvCC,QAAC,EAAA,eAAA1C,GAAA,CAAA2C,OAAA,EAAA,CAAQ,CAAA;IACX,CAAA,CAAA;EAEJ;EAGE,OAAA,eAAAC,IAAA,CAACC,KAAM,EAAA;IAAAC,KAAA,EAAO,CACX;IAAAJ,QAAA,EAAA,CAAgBpB,YAAA,IAAAA,YAAA,CAAaF,SAAS,CACrC,GAAA,eAAApB,GAAA,CAAC+C;MAAKL,QAGN,EAAA;IAAA,CAAA,CAAA,GAEC,eAAA1C,GAAA,CAAA+C,IAAA,EAAA;MAAKL,QAAmD,EAAA;IAAA,CAAA,CAAA,EAE3D,eAAA1C,GAAA,CAACgD;MAAKC,MAAM,EAAA,IAAA;MAACV,SAAS,CACpB;MAAAG,QAAA,EAAA,eAAAE,IAAA,CAACC,KAAM,EAAA;QAAAC,KAAA,EAAO,CACZ;QAAAJ,QAAA,EAAA,CAAA,eAAA1C,GAAA,CAAC+C,IAAK,EAAA;UAAAG,IAAA,EAAM,CAAG;UAAAC,MAAA,EAAO;UACnBT,QAAgB,EAAApB,YAAA,IAAAA,YAAA,CAAaF,MAAS,GAAA,CAAA,kBACnCpB,GAAA,CAAAoD,QAAA,EAAA;YAAAV,QAAA,EAAA;WAAmC,CAErC,GAAA,eAAA1C,GAAA,CAAAoD,QAAA,EAAA;YAAEV;WAAgC;QAEtC,CAAA,CAAA,EAAA,mBACCjD,eAAgB,EAAA;UAAAY,KAAA,EAAOoB,GAAK;UAAA1B,IAAA,EAAM0B,IAAIC;SAAO,CAAA,EAC7CJ,YAAgB,IAAAA,YAAA,CAAaF,MAAS,GAAA,CAAA,GAEnC,eAAAwB,IAAA,CAAAQ,QAAA,EAAA;UAAAV,QAAA,EAAA,CAAC,eAAA1C,GAAA,CAAAgD,IAAA,EAAA;YAAKK,WAAS;UAAC,CAAA,CAAA,EAAA,eACfT,IAAA,CAAAG,IAAA,EAAA;YAAKG,IAAM,EAAA,CAAA;YAAGC,QAAO,UAAW;YAAAT,QAAA,EAAA,CAAA,kBAAA,EACd,GAAA,EAChBpB,YAAA,CAAaF,MAAW,KAAA,CAAA,GACrB,4BACA,GAAA,8BAAA,EAAgC,GAAA,EAAI,iBAAA;WAE1C,CAAA,EACCE,YAAA,CAAagC,GAAI,CAACC,WACjB,mBAAAvD,GAAA,CAACP,eAAA,EAAA;YAECY,KAAO,EAAAkD,WAAA;YACPxD,MAAMwD,WAAY,CAAA7B;UAAA,CAAA,EAFb6B,WAAY,CAAAC,GAAA,CAIpB,CAAA;QAAA,CACH,CACE,GAAA,IAAA,EACHjC,eAAmB,IAAAA,eAAA,CAAgBH,MAAS,GAAA,CAAA,GAEzC,eAAAwB,IAAA,CAAAQ,QAAA,EAAA;UAAAV,QAAA,EAAA,CAAC,eAAA1C,GAAA,CAAAgD,IAAA,EAAA;YAAKK,WAAS;UAAC,CAAA,CAAA,EAAA,eACfT,IAAA,CAAAG,IAAA,EAAA;YAAKG,IAAM,EAAA,CAAA;YAAGC,QAAO,UACnB;YAAAT,QAAA,EAAA,CAAgBnB,eAAA,CAAAH,MAAA,KAAW,IACxB,kCACA,GAAA,iCAAA,EAAmC,GAAA,EAAI,kBAAA;WAE7C,CAAA,EACCG,eAAA,CAAgB+B,GAAI,CAACG,SACpB,mBAAAzD,GAAA,CAACP,eAAA,EAAA;YAECY,KAAO,EAAAoD,SAAA;YACP1D,MAAM0D,SAAU,CAAA/B;UAAA,CAAA,EAFX+B,SAAU,CAAAD,GAAA,CAIlB,CAAA;QAAA,CACH,CACE,GAAA,IAAA;MAAA,CACN;IACF,CAAA,CAAA,EACCjC,eAAA,CAAgBH,WAAW,CAC1B,GAAA,eAAApB,GAAA,CAAC+C;MAAKL,QAAsC,EAAA;IAAA,CAAA,CAAA,GAE3C,eAAA1C,GAAA,CAAA+C,IAAA,EAAA;MAAKL,QAGN,EAAA;IAAA,CAAA,CAAA;EAEJ,CAAA,CAAA;AAEJ;ACtGA,SAAwBgB,wBACtBhE,KACA,EAAA;EACA,MAAM;IAAC4B,YAAA;IAAcqC,OAAS;IAAAC;EAAA,CAAa,GAAAlE,KAAA;EAE3C,OACG,eAAAkD,IAAA,CAAAiB,IAAA,EAAA;IAAKC,OAAS,EAAA,CAAA;IAAGC,KAAK,CACrB;IAAArB,QAAA,EAAA,CAAA,eAAA1C,GAAA,CAACgE;MAAOC,IAAK,EAAA,QAAA;MAASC,OAAS,EAAAP,OAAA;MAASQ,MAAK;KAAQ,CAAA,EAAA,eACrDnE,GAAA,CAACgE,MAAA,EAAA;MACCC,IACE,EAAA3C,YAAA,IAAgBA,YAAa,CAAAF,MAAA,GAAS,IAClC,6BACA,GAAA,iBAAA;MAEN8C,OAAS,EAAAN,SAAA;MACT1D,IAAK,EAAA;IAAA,CACP,CAAA;EACF,CAAA,CAAA;AAEJ;AC3BA,SAASkE,kBAAkBA,CAACC,IAAI,EAAEC,IAAI,EAA6B;EAAA,IAA3BC,KAAK,GAAApD,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAACqD,CAAC,EAAEC,CAAC,KAAKD,CAAC,KAAKC,CAAC;EAC/D,IAAIJ,IAAI,KAAKC,IAAI,EAAE,OAAO,IAAI;EAC9B,IAAI,CAACD,IAAI,IAAI,CAACC,IAAI,EAAE,OAAO,KAAK;EAChC,MAAMI,GAAG,GAAGL,IAAI,CAACjD,MAAM;EACvB,IAAIkD,IAAI,CAAClD,MAAM,KAAKsD,GAAG,EAAE,OAAO,KAAK;EAErC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,GAAG,EAAEC,CAAC,EAAE,EAAE,IAAI,CAACJ,KAAK,CAACF,IAAI,CAACM,CAAC,CAAC,EAAEL,IAAI,CAACK,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;EAExE,OAAO,IAAI;AACb;AAEA,MAAMC,WAAW,GAAG,EAAE;AAEtB,SAASC,OAAKC,CAACC,EAAE,EAAEC,IAAI,EAAgC;EAAA,IAA9BC,OAAO,GAAA9D,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAAA,IAAE+D,MAAM,GAAA/D,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EACnD,KAAK,MAAMgE,KAAK,IAAIP,WAAW,EAAE;IACnC;IACI,IAAIR,kBAAkB,CAACY,IAAI,EAAEG,KAAK,CAACH,IAAI,EAAEG,KAAK,CAACZ,KAAK,CAAC,EAAE;MAC3D;MACM,IAAIU,OAAO,EAAE,OAAO5D,SAAS,CAAC,CAAA;;MAE9B,IAAI+D,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,KAAK,EAAE,OAAO,CAAC,EAAE,MAAMA,KAAK,CAACK,KAAK,CAAC,CAAA;;MAE5E,IAAIJ,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,KAAK,EAAE,UAAU,CAAC,EAAE,OAAOA,KAAK,CAACM,QAAQ,CAAC,CAAA;;MAEnF,IAAI,CAACR,OAAO,EAAE,MAAME,KAAK,CAACO,OAAO;IAClC;EACF,CAAA,CAAA;;EAGD,MAAMP,KAAK,GAAG;IACZH,IAAI;IACJT,KAAK,EAAEW,MAAM,CAACX,KAAK;IACnBmB,OAAO;IAAA;IACPX,EAAE,CAAC,GAAGC,IAAI,CAAC,CAAA;IAAA,CACVW,IAAI,CAACF,QAAQ,IAAIN,KAAK,CAACM,QAAQ,GAAGA,QAAQ,CAAC,CAAA;IAAA,CAC3CE,IAAI,CAAC,MAAM;MACV,IAAIT,MAAM,CAACU,QAAQ,IAAIV,MAAM,CAACU,QAAQ,GAAG,CAAC,EAAE;QAC1CC,UAAU,CAAC,MAAM;UACf,MAAMC,KAAK,GAAGlB,WAAW,CAACmB,OAAO,CAACZ,KAAK,CAAC;UACxC,IAAIW,KAAK,KAAK,CAAC,CAAC,EAAElB,WAAW,CAACoB,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;QACxD,CAAS,EAAEZ,MAAM,CAACU,QAAQ,CAAC;MACpB;IACP,CAAK,CAAC,CAAA;IAAA,CACDK,KAAK,CAACT,KAAK,IAAIL,KAAK,CAACK,KAAK,GAAGA,KAAK;EACvC,CAAG,CAAC,CAAA;;EAEFZ,WAAW,CAACjD,IAAI,CAACwD,KAAK,CAAC,CAAC,CAAA;;EAExB,IAAI,CAACF,OAAO,EAAE,MAAME,KAAK,CAACO,OAAO;EACjC,OAAOrE,SAAS;AAClB;AAEA,MAAM6E,OAAO,GAAGA,CAACnB,EAAE,EAAEC,IAAI,EAAEE,MAAM,KAAKL,OAAK,CAACE,EAAE,EAAEC,IAAI,EAAE,KAAK,EAAEE,MAAM,CAAC;AC5CpE,MAAMiB,mCAAA,GACJC,cAAmC3F,cAAc,CAAA;AAE5C,SAAS4F,sCAAyCA,CAAA,EAAA;EACvD,OAAOC,WAAWH,mCAAmC,CAAA;AACvD;AASO,SAASI,qCACd7G,KACA,EAAA;EACM,MAAA;IAAC8G;EAAgB,CAAA,GAAA9G,KAAA;EAEvB,MAAM+G,SAASC,SAAU,CAAA;IAAC1F,UAAY,EAAAwF,YAAA,CAAaxF;GAAW,CAAA;EAC9D,MAAMN,qBAAqBiG,KAAM,CAAAC,OAAA,CAAQJ,YAAa,CAAA9F,kBAAkB,IACpE8F,YAAa,CAAA9F,kBAAA;EAAA;EAEbwF,QAAQ,YAAY;IACd,IAAA,OAAOM,YAAa,CAAA9F,kBAAA,KAAuB,UAAY,EAAA;MAClD,OAAA8F,YAAA,CAAa9F,mBAAmB+F,MAAM,CAAA;IAC/C;IACA,OAAOD,YAAa,CAAA9F,kBAAA;EACtB,CAAA,EAAG,EAAE,CAAA;EAGP,sBAAAV,GAAA,CAACmG,mCAAoC,CAAAU,QAAA,EAApC;IACCxG,KAAO,EAAA;MAAC,GAAGmG,YAAA;MAAc9F;IAAkB,CAAA;IAE1CgC,QAAA,EAAAhD,KAAA,CAAMoH,cAAcpH,KAAK;EAAA,CAAA,CAC5B;AAEJ;ACnCa,MAAAqH,uBAAA,GAAoDrH,KAAU,IAAA;EACzE,MAAM;IAACwC,EAAA,EAAIL,UAAY;IAAAmF,SAAA;IAAWC;GAAS,GAAAvH,KAAA;EAC3C,MAAM+B,MAAMwF,KAAS,IAAAD,SAAA;EACf,MAAA;IAACpG;GAAa,GAAIyF,sCAAuC,EAAA;EAE/D,MAAM,CAACa,YAAA,EAAcC,aAAa,CAAA,GAAIC,SAAS,KAAK,CAAA;EACpD,MAAM,CAAC9F,YAAc,EAAAQ,eAAe,CAAI,GAAAsF,QAAA,CAA2B,EAAE,CAAA;EACrE,MAAMzD,UAAU0D,WAAY,CAAA,MAAMF,cAAc,KAAK,CAAA,EAAG,EAAE,CAAA;EAC1D,MAAMG,gBAAmB,GAAA7F,GAAA,GAAMA,GAAI,CAAAb,aAAa,CAAI,GAAA,IAAA;EAEpD,MAAM2G,QAAQC,QAAS,EAAA;EACvB,MAAMf,MAAS,GAAAC,SAAA,CAAU;IAAC1F,UAAA,EAAYR;EAAY,CAAA,CAAA;EAG5C,MAAAoD,SAAA,GAAYyD,YAAY,MAAM;IAC5B,MAAAI,EAAA,GAAKhB,OAAOiB,WAAY,EAAA;IAC9B,IAAIC,SAAY,GAAA,QAAA;IAEZ,IAAAL,gBAAA,IAAoBhG,YAAa,CAAAF,MAAA,GAAS,CAAG,EAAA;MACnCuG,SAAA,GAAA,OAAA;MACCrG,YAAA,CAAAE,OAAA,CAAS+B,WAAgB,IAAA;QACjCkE,EAAA,CAAAG,KAAA,CAAMrE,WAAY,CAAAC,GAAA,EAAMoE,KACzB,IAAAA,KAAA,CAAMC,KAAM,CAAA,CACV,EAAA,CAAGC,MAAuB,CAAAvH,uBAAA,EAAA,YAAA,CAAA,CAAauH,MAAgB,CAAAR,gBAAA,EAAA,IAAA,CAAA,CACxD,CAAA,CACH;MAAA,CACD,CAAA;IAAA,CACI,MAAA;MACLG,EAAA,CAAGM,OAAOlG,UAAU,CAAA;MACjB4F,EAAA,CAAAM,MAAA,CAAO,UAAUD,MAAY,CAAAjG,UAAA,CAAA,CAAA;IAClC;IAEG4F,EAAA,CAAAO,MAAA,EACA,CAAArC,IAAA,CAAK,MAAM;MACV,IAAIgC,cAAc,QAAU,EAAA;QAClBhE,OAAA,EAAA;MACV;MACA4D,KAAA,CAAM5F,IAAK,CAAA;QACTsG,MAAQ,EAAA,SAAA;QACR9H,KAAA,EACEwH,SAAc,KAAA,OAAA,GACV,6BACA,GAAA,kBAAA;QACNO,WAAA,EACEP,SAAc,KAAA,OAAA,GAAU,iCAAoC,GAAA;MAAA,CAC/D,CAAA;IAAA,CACF,CAAA,CACA1B,KAAM,CAACkC,GAAQ,IAAA;MACdZ,KAAA,CAAM5F,IAAK,CAAA;QACTsG,MAAQ,EAAA,OAAA;QACR9H,KAAA,EACEwH,SAAc,KAAA,OAAA,GACV,uCACA,GAAA,2BAAA;QACNO,aAAaC,GAAI,CAAAC;MAAA,CAClB,CAAA;IAAA,CACF,CAAA;EAAA,CACL,EAAG,CAAC3B,MAAQ,EAAAa,gBAAA,EAAkBhG,cAAcO,UAAY,EAAA8B,OAAA,EAAS4D,KAAK,CAAC,CAAA;EAEhE,OAAA;IACLc,KAAO,EAAA,uBAAA;IACPC,QAAA,EAAU,CAAC7G,GAAA,IAAO,CAAC6F,gBAAA;IACnBiB,IAAM,EAAAC,SAAA;IACNtI,IAAM,EAAA,UAAA;IACNuI,UAAUA,CAAA,KAAM;MACdtB,aAAA,CAAc,IAAI,CAAA;IACpB,CAAA;IACAuB,QAAQxB,YAAgB,IAAA;MACtBnH,IAAM,EAAA,QAAA;MACN4D,OAAA;MACAgF,MAAQ,EAAA,oBAAA;MACRC,SAASnH,GACP,GAAA,eAAAzB,GAAA,CAAC4B,uBAAA,EAAA;QACCH,GAAA;QACAI,UAAA;QACAC;MAAA,CAAA,CAEA,GAAA,IAAA;MACJ+G,MACE,iBAAA7I,GAAA,CAAC0D,uBAAA,EAAA;QACCC,OAAA;QACAC,SAAA;QACAtC;MAAA,CACF;IAEJ;EAAA,CACF;AACF,CAAA;ACxFA,MAAMuD,KAAQ,GAAA,+GAAA;AAMP,SAASiE,uBAAuB5G,EAIrC,EAAA;EACA,MAAM;IAAChB,IAAM;IAAAa,OAAA;IAASyD;EAAK,CAAA,GAAIxD,kBAA8B6C,KAAO,EAAA;IAClE5C,MAAQ,EAAA;MAACC,EAAI;MAAA6G,iBAAA,EAAmBzI;IAAoB;EAAA,CACrD,CAAA;EAEM,OAAA;IAACY,IAAM;IAAAa,OAAA;IAASyD;GAAK;AAC9B;ACrBgB,SAAAwD,gBAAAA,CAAiB9G,IAAanC,IAAe,EAAA;EACrD,MAAAkJ,aAAA,GAAgB3C,WAAW4C,aAAa,CAAA;EAC9C,MAAM;IAACC,gBAAA;IAAkBC;EAAU,CAAA,GAAIC,aAAc,CAAA,CAAA;EAE/C,MAAAC,aAAA,GAAgBjC,YAAY,MAAM;IACtC,IAAI,CAAC4B,aAAA,IAAiB,CAAC/G,EAAA,IAAM,CAACnC,IAAM,EAAA;MAClC;IACF;IAGI,IAAA,CAACoJ,iBAAiB/H,MAAQ,EAAA;MAC5B6H,aAAA,CAAcM,cAAe,CAAA,MAAA,EAAQ;QAACrH,EAAA;QAAInC;MAAK,CAAA,CAAA;MAC/C;IACF;IAEM,MAAAyJ,KAAA,GAAQ,CAAC,GAAGL,gBAAgB,CAAA;IAC5BK,KAAA,CAAAxD,MAAA,CAAOoD,UAAa,GAAA,CAAA,EAAG,CAAG,EAAA,CAC9B;MACElH,EAAA;MACAD,MAAA,EAAQ;QAAClC;MAAI;IACf,CAAA,CACD,CAAA;IAED,MAAM0J,IAAO,GAAAR,aAAA,CAAcS,oBAAqB,CAAA;MAACF;IAAM,CAAA,CAAA;IACvDP,aAAA,CAAcU,WAAY,CAAA;MAACC,IAAM,EAAAH;IAAK,CAAA,CAAA;EAAA,GACrC,CAACvH,EAAA,EAAInC,MAAMkJ,aAAe,EAAAE,gBAAA,EAAkBC,UAAU,CAAC,CAAA;EAEnD,OAAAE,aAAA;AACT;ACtBA,SAAwBO,eAAenK,KAA4B,EAAA;EAC3D,MAAA;IAACwC;EAAM,CAAA,GAAAxC,KAAA;EACP,MAAAoK,IAAA,GAAOd,gBAAiB,CAAA9G,EAAA,EAAI5B,oBAAoB,CAAA;EAGpD,sBAAAN,GAAA,CAAC+J,OAAA,EAAA;IACCnB,OACE,EAAA1G,EAAA,GAAK,IACH,kBAAAlC,GAAA,CAACgK;MAAIzH,OAAS,EAAA,CAAA;MACZG,QAAC,EAAA,eAAA1C,GAAA,CAAA+C,IAAA,EAAA;QAAKkH,KAAK,EAAA,IAAA;QAAC/G,IAAM,EAAA,CAAA;QAAGR;MAErB,CAAA;KACF,CAAA;IAGJwH,kBAAA,EAAoB,CAAC,OAAA,EAAS,MAAM,CAAA;IACpCC,SAAU,EAAA,KAAA;IACVC,MAAM,EAAA,IAAA;IAEN1H,6BAACG,KACC,EAAA;MAAAH,QAAA,EAAA,eAAA1C,GAAA,CAACgE,MAAA,EAAA;QACCsE,UAAU,CAACpG,EAAA;QACXiC,IAAK,EAAA,OAAA;QACLF,IAAK,EAAA,qBAAA;QACLsE,IAAM,EAAA8B,OAAA;QACNnG,OAAA,EAASA,CAAA,KAAM4F,IAAK,CAAA;MAAA,CAAA;KAExB;EAAA,CAAA,CACF;AAEJ;ACtCO,SAASQ,eACdA,CAAAC,GAAA,EACAC,GACA,EAAAzK,IAAA,EAEsB;EAAA,IADtB0K,0FAA+B,IACT;EACf,OAAA;IACLC,IAAM,EAAAH,GAAA;IACN7I,KAAO,EAAA,sCAAA;IACPrB,KAAO,EAAA;MACLqB,KAAO,EAAA,WAAA;MACPiJ,IAAM,EAAAH,GAAA;MACNI,KAAO,EAAA,IAAA;MAAA;MAEP,IAAIH,sBAAsB;QAACI,oBAAA,EAAsB;UAAC9K;QAAI;UAAK,CAAC,CAAA;IAC9D;EAAA,CACF;AACF;ACcA,SAAwB+K,eAAepL,KAA4B,EAAA;EAjCnE,IAAAqL,EAAA;EAkCQ,MAAA;IACJC,QAAA;IACAnL,UAAA;IACAgC,UAAA;IACAoJ,OAAA;IACAC,MAAA;IACAC,gBAAA;IACAC,QAAA;IACAC;EACE,CAAA,GAAA3L,KAAA;EACE,MAAA4I,QAAA,GACJ5I,MAAM4I,QAAY,IAAA2C,OAAA,IAAW,CAACC,MAAU,IAAA,CAACC,oBAAoB,CAACE,UAAA;EAChE,MAAM9H,WAAgD,GAAA,CAAA6H,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,QAAA,CAAU9J,YAC7D,CAAAF,MAAA,IACCgK,QAAS,CAAA9J,YAAA,CAAagK,IAAK,CAACC,CAAM,IAAAA,CAAA,CAAEb,IAAS,KAAAM,QAAA,CAAS9I,EAAE,CACxD,GAAA,KAAA,CAAA;EACJ,MAAM;IAAClB,UAAA;IAAYJ,aAAe;IAAAC;MAChCwF,sCAAuC,CAAA,CAAA;EACzC,MAAMI,MAAS,GAAAC,SAAA,CAAU;IAAC1F;EAAW,CAAA,CAAA;EACrC,MAAMuG,QAAQC,QAAS,EAAA;EAEvB,MAAMsC,OAAOd,gBAAiB,CAAA,CAAA+B,EAAA,GAAAxH,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,WAAA,CAAalD,KAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA0K,EAAA,CAAoBJ,MAAM9K,UAAU,CAAA;EAClE,MAAM2L,aAAanE,WAAY,CAAA,MAAMyC,MAAQ,EAAA,CAACA,IAAI,CAAC,CAAA;EAE7C,MAAA2B,YAAA,GAAepE,YAAY,YAAY;IAC3C,IAAI,CAAC6D,MAAQ,EAAA;MACL,MAAA,IAAIQ,MAAM,mDAAmD,CAAA;IACrE;IAEA,IAAI,CAACP,gBAAkB,EAAA;MACf,MAAA,IAAIO,MAAM,sDAAsD,CAAA;IACxE;IAEA,IAAI,CAACL,UAAY,EAAA;MACT,MAAA,IAAIK,MAAM,iDAAiD,CAAA;IACnE;IAEM,MAAAhE,WAAA,GAAcjB,OAAOiB,WAAY,EAAA;IAGvC,MAAMiE,2BAA2BC,IAAK,EAAA;IACtC,MAAMC,sBAAyB,GAAA;MAC7B,GAAGX,MAAA;MACH1H,KAAK,SAAU,CAAAsE,MAAA,CAAA6D,wBAAA,CAAA;MAAA;MAEf,CAAC/K,aAAa,GAAGoK,QAAS,CAAA9I;IAAA,CAC5B;IAEAwF,WAAA,CAAYoE,OAAOD,sBAAsB,CAAA;IAGzC,MAAME,eAAkB,GAAAzB,eAAA,CACtBa,gBAAA,EACAtJ,UAAA,EACAhC,UAAA,EACA,CAACgB,cAAA,CACH;IACA,MAAMmL,uBAA0B,GAAA1B,eAAA,CAC9BU,QAAS,CAAA9I,EAAA,EACTyJ,wBAAA,EACA9L,UAAA,EACA,CAACgB,cAAA,CACH;IACA,MAAMoL,mBAAsB,GAAA;MAC1BzI,GAAK,EAAA6H,UAAA;MACL3J,KAAO,EAAApB,oBAAA;MACPK,WAAA,EAAa,CAACd,UAAU,CAAA;MACxByB,YAAA,EAAc,CAACyK,eAAe;IAAA,CAChC;IAEArE,WAAA,CAAYwE,kBAAkBD,mBAAmB,CAAA;IAKjD,MAAME,gBAAgB1F,MACnB,CAAAmB,KAAA,CAAMyD,UAAU,CAChB,CAAAe,YAAA,CAAa;MAAC9K,YAAc,EAAA,CAACyK,eAAe;IAAA,CAAE,CAC9C,CAAAM,MAAA,CAAO,SAAS,kBAAoB,EAAA,CAACL,uBAAuB,CAAC,CAAA;IAEhEtE,WAAA,CAAYE,MAAMuE,aAAa,CAAA;IAI5BzE,WAAA,CAAAM,MAAA,EACA,CAAArC,IAAA,CAAK,MAAM;MACJ,MAAA2G,eAAA,GAAkBC,OAAQ,CAAAnB,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,QAAA,CAAUoB,UAAU,CAAA;MAEpD,OAAOjF,MAAM5F,IAAK,CAAA;QAChBsG,MAAQ,EAAA,SAAA;QACR9H,KAAA,EAAO,WAAY,CAAA2H,MAAA,CAAAkD,QAAA,CAAS7K,KAAK,EAAA,eAAA,CAAA;QACjC+H,WAAA,EAAaoE,kBACT,+BACA,GAAA;MAAA,CACL,CAAA;IAAA,CACF,CAAA,CACArG,KAAM,CAACkC,GAAQ,IAAA;MACdsE,OAAA,CAAQjH,MAAM2C,GAAG,CAAA;MAEjB,OAAOZ,MAAM5F,IAAK,CAAA;QAChBsG,MAAQ,EAAA,OAAA;QACR9H,KAAO,EAAA,4BAAA;QACP+H,aAAaC,GAAI,CAAAC;MAAA,CAClB,CAAA;IAAA,CACF,CAAA;EAAA,CACF,EAAA,CACD3B,MAAA,EACA5E,UAAA,EACAmJ,QAAS,CAAA9I,EAAA,EACT8I,QAAS,CAAA7K,KAAA,EACTS,aAAA,EACAwK,QAAU,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,QAAA,CAAAoB,UAAA,EACVnB,UAAA,EACAxL,UAAA,EACAqL,MAAA,EACAC,gBAAA,EACA5D,KAAA,CACD,CAAA;EAEG,IAAAa,OAAA;EAEJ,IAAI6C,OAAS,EAAA;IACD7C,OAAA,GAAA,kBAAA;aACD7E,WAAa,EAAA;IACZ6E,OAAA,GAAA,OAAA,CAAQN,gBAAS3H,KAAK,EAAA,cAAA,CAAA;EAAA,CAClC,MAAA,IAAW,CAACoD,WAAa,EAAA;IACb6E,OAAA,GAAA,aAAA,CAAcN,gBAAS3H,KAAK,EAAA,cAAA,CAAA;EACxC;EAGE,sBAAAH,GAAA,CAAC+J,OAAA,EAAA;IACCnB,OACE,EAAA,eAAA5I,GAAA,CAACgK,GAAI,EAAA;MAAAzH,OAAA,EAAS,CACZ;MAAAG,QAAA,EAAA,eAAA1C,GAAA,CAAC+C,IAAK,EAAA;QAAAkH,KAAA,EAAK,IAAC;QAAA/G,IAAA,EAAM,CACf;QAAAR,QAAA,EAAA0F;MACH,CAAA;KACF,CAAA;IAEF8B,kBAAA,EAAoB,CAAC,OAAA,EAAS,MAAM,CAAA;IACpCC,SAAU,EAAA,KAAA;IACVC,MAAM,EAAA,IAAA;IAEN1H,QAAA,iBAAA1C,GAAA,CAACgE,MAAA,EAAA;MACCE,OAAA,EAASX,cAAciI,UAAa,GAAAC,YAAA;MACpCtH,IAAA,EAAM8G,OAAW,IAAA3C,QAAA,GAAW,SAAY,GAAA,OAAA;MACxCA,QAAA;MAEA5F,QAAC,EAAA,eAAAE,IAAA,CAAAN,IAAA,EAAA;QAAKyB,GAAK,EAAA,CAAA;QAAGvB,OAAM,QACjB;QAAAE,QAAA,EAAA,CAAA4F,QAAA,IAAY,CAAC2C,OACZ,kBAAAjL,GAAA,CAAC2C,UAAQ,CAAA,CAET,kBAAA3C,GAAA,CAAC+C;UAAKG,IAAM,EAAA,CAAA;UAETR,uCACE1C,GAAA,CAAA0M,iBAAA,EAAA,CAAA,CAAkB,IACjBzB,OACF,GAAA,eAAAjL,GAAA,CAAC2M,gBAAc,CAAA,CAEf,kBAAA3M,GAAA,CAAC4M,WAAQ;QAEb,CAAA,CAAA,EAEF,eAAA5M,GAAA,CAACgK;UAAI6C,IAAM,EAAA,CAAA;UACTnK,6BAACK,IAAM,EAAA;YAAAL,QAAA,EAAAsI,QAAA,CAAS7K;WAAM;QACxB,CAAA,CAAA,EACA,eAAAH,GAAA,CAAC8M;UAAM5M,IAAM,EAAAoI,QAAA,IAAY2C,UAAU,SAAY,GAAA,SAAA;UAC5CvI,mBAASR;QACZ,CAAA,CAAA;OACF;IAAA,CACF;EAAA,CAAA,CACF;AAEJ;AChMA,SAAwB6K,cAAcrN,KAA2B,EAAA;EACzD,MAAA;IAACsL,QAAU;IAAAE;EAAU,CAAA,GAAAxL,KAAA;EAC3B,MAAM;IAACsB,UAAA;IAAYJ;EAAa,CAAA,GAAIyF,sCAAuC,CAAA,CAAA;EACrE,MAAAiC,QAAA,GAAW5I,KAAM,CAAA4I,QAAA,IAAY,CAAC4C,MAAA;EACpC,MAAMzE,MAAS,GAAAC,SAAA,CAAU;IAAC1F;EAAW,CAAA,CAAA;EACrC,MAAMuG,QAAQC,QAAS,EAAA;EAEjB,MAAAwF,WAAA,GAAc3F,YAAY,MAAM;IACpC,IAAI,CAAC6D,MAAQ,EAAA;MACL,MAAA,IAAIQ,MAAM,+BAA+B,CAAA;IACjD;IAEA,MAAMuB,YAAY/B,MAAO,CAAA1H,GAAA;IAEzBiD,MAAA,CACGmB,KAAM,CAAAqF,SAAS,CACf,CAAAC,GAAA,CAAI;MAAC,CAACtM,aAAa,GAAGoK,QAAA,CAAS9I;KAAG,CAAA,CAClC8F,MAAO,CAAA,CAAA,CACPrC,KAAK,MAAM;MACV4B,KAAA,CAAM5F,IAAK,CAAA;QACTxB,KAAA,EAAO,4BAA4B2H,MAAS,CAAAkD,QAAA,CAAA7K,KAAA,CAAA;QAC5C8H,MAAQ,EAAA;MAAA,CACT,CAAA;IAAA,CACF,CAAA,CACAhC,KAAM,CAACkC,GAAQ,IAAA;MACdsE,OAAA,CAAQjH,MAAM2C,GAAG,CAAA;MAEjB,OAAOZ,MAAM5F,IAAK,CAAA;QAChBxB,KAAA,EAAO,sCAAsC2H,MAAS,CAAAkD,QAAA,CAAA7K,KAAA,CAAA;QACtD8H,MAAQ,EAAA;MAAA,CACT,CAAA;IAAA,CACF,CAAA;EAAA,GACF,CAACiD,MAAA,EAAQzE,QAAQ7F,aAAe,EAAAoK,QAAA,EAAUzD,KAAK,CAAC,CAAA;EAGjD,sBAAAvH,GAAA,CAACgE,MAAA,EAAA;IACCG,IAAK,EAAA,OAAA;IACLD,OAAS,EAAA8I,WAAA;IACT1E,QAAA;IACA7F,OAAQ,EAAA,YAAA;IAERC,QAAC,EAAA,eAAAE,IAAA,CAAAN,IAAA,EAAA;MAAKyB,GAAK,EAAA,CAAA;MAAGvB,OAAM,QAClB;MAAAE,QAAA,EAAA,CAAA,eAAA1C,GAAA,CAAC+C,IAAK,EAAA;QAAAG,IAAA,EAAM,CACV;QAAAR,QAAA,EAAA,eAAA1C,GAAA,CAACmN,WAAS,CAAA;OACZ,CAAA,EACA,eAAAnN,GAAA,CAACgK;QAAI6C,IAAM,EAAA,CAAA;QACTnK,6BAACK,IAAM,EAAA;UAAAL,QAAA,EAAAsI,QAAA,CAAS7K;SAAM;MACxB,CAAA,CAAA,EACA,eAAAH,GAAA,CAAC8M,KAAO,EAAA;QAAApK,QAAA,EAAAsI,QAAA,CAAS9I;MAAG,CAAA,CAAA;KACtB;EAAA,CAAA,CACF;AAEJ;;;;;;AClEA,IAAA6I,EAAA;AAGA,IAAAqC,cAAA,GAAeC,MAAA,CAAOrD,GAAG,CAAA,CAAVe,EAAW,KAAAA,EAAA,GAAAuC,UAAA,CAAA,CAAA,yBAAA,CAAA,CAAA,CAAA,CAAA;ACEF,SAAAC,OAAAA,CAAA5C,IAAA,EAAuC;EAAA,IAA/B;IAACjI;GAA8B,GAAAiI,IAAA;EAE3D,OAAA,eAAA3K,GAAA,CAACgD;IAAK9C,IAAK,EAAA,SAAA;IAAUqC,SAAS,CAC5B;IAAAG,QAAA,EAAA,eAAA1C,GAAA,CAACsC;MAAKG,OAAQ,EAAA,QAAA;MACZC,6BAAC0K,cACC,EAAA;QAAA1K,QAAA,EAAA,eAAA1C,GAAA,CAAC+C;UAAKG,IAAM,EAAA,CAAA;UAAGV,OAAM,QAClB;UAAAE;QACH,CAAA;MACF,CAAA;IACF,CAAA;EACF,CAAA,CAAA;AAEJ;ACMO,SAAS8K,iCACd9N,KACA,EAAA;EACM,MAAA;IAACmC;EAAc,CAAA,GAAAnC,KAAA;EACf,MAAAG,UAAA,GAAaH,MAAMG,UAAW,CAAA4N,IAAA;EACpC,MAAM;IAAC7M,aAAA;IAAeF;EAAkB,CAAA,GACtC2F,sCAAuC,CAAA,CAAA;EAGzC,MAAM,CAACxB,KAAA,EAAO6I,QAAQ,CAAA,GAAItG,SAAS,EAAE,CAAA;EAC/B,MAAAuG,WAAA,GAActG,WAAY,CAACuG,KAAuC,IAAA;IAClE,IAAAA,KAAA,CAAMC,cAAcxN,KAAO,EAAA;MACpBqN,QAAA,CAAAE,KAAA,CAAMC,cAAcxN,KAAK,CAAA;IAAA,CAC7B,MAAA;MACLqN,QAAA,CAAS,EAAE,CAAA;IACb;EACF,CAAA,EAAG,EAAE,CAAA;EAGL,MAAM,CAAC5D,IAAA,EAAMgE,OAAO,CAAA,GAAI1G,SAAS,KAAK,CAAA;EAChC,MAAA4F,WAAA,GAAc3F,WAAY,CAAA,MAAMyG,OAAQ,CAACC,KAAM,CAACA,CAAC,CAAG,EAAA,EAAE,CAAA;EAC5D,MAAM,CAACC,MAAA,EAAQC,SAAS,CAAA,GAAI7G,SAA6B,IAAI,CAAA;EAC7D,MAAM,CAAC8G,OAAA,EAASC,UAAU,CAAA,GAAI/G,SAA6B,IAAI,CAAA;EAC/D,MAAMgH,qBAAqB/G,WAAY,CAAA,MAAMyG,QAAQ,KAAK,CAAA,EAAG,EAAE,CAAA;EAC/DO,eAAA,CAAgBD,kBAAoB,EAAA,CAACJ,MAAQ,EAAAE,OAAO,CAAC,CAAA;EAGrD,MAAM;IAAChN,IAAM;IAAAa,OAAA;IAASyD;EAAK,CAAA,GAAIsD,uBAAuBjH,UAAU,CAAA;EAC1D,MAAAuJ,QAAA,GAAWzE,MAAMC,OAAQ,CAAA1F,IAAI,KAAKA,IAAK,CAAAE,MAAA,GAASF,IAAK,CAAA,CAAC,CAAI,GAAA,IAAA;EAK1D,MAAAmK,UAAA,GAAajJ,QAAQ,MAAM;IAxDnC,IAAA2I,EAAA;IAyDI,IAAIhJ,OAAS,EAAA;MACJ,OAAA,IAAA;IACT;IAGO,OAAA,CAAAgJ,EAAA,GAAAK,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,QAAA,CAAU5H,GAAV,KAAA,IAAA,GAAAuH,EAAA,GAAiBa,IAAK,CAAA,CAAA;EAAA,CAC5B,EAAA,CAAC7J,OAAS,EAAAqJ,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,QAAA,CAAU5H,GAAG,CAAC,CAAA;EAG3B,MAAM;IAACyD,KAAO;IAAAD;EAAA,CAAa,GAAAsH,YAAA,CAAazM,YAAYhC,UAAU,CAAA;EAC9D,MAAMqL,SAASjE,KAAS,IAAAD,SAAA;EAGlB,MAAAuH,+BAAA,GAAkCnM,QAAQ,MAAM;IACpD,OAAOuE,KAAM,CAAAC,OAAA,CAAQ1F,IAAI,CAAA,IAAKA,KAAKE,MAAU,IAAA,CAAA;EAAA,CAC/C,EAAG,CAACF,IAAI,CAAC,CAAA;EACT,MAAMiK,mBAAmBD,MAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,MAAA,CAAAtK,aAAA,CAAA;EAClC,MAAM4N,wBAAwB9N,kBAAmB,CAAA+N,IAAA,CAC9CC,CAAM,IAAAA,CAAA,CAAExM,EAAO,KAAAiJ,gBAAA,CAClB;EACM,MAAAwD,oBAAA,GAAuBvM,QAAQ,MAAM;IACnC,MAAAwM,KAAA,GAAQlO,mBAAmBmO,KAAM,CAACH,KAAMA,CAAE,CAAAxM,EAAA,IAAMwM,EAAEvO,KAAK,CAAA;IAC7D,IAAI,CAACyO,KAAO,EAAA;MACFnC,OAAA,CAAAqC,IAAA,CACN,oLAAA,EACApO,kBAAA,CACF;IACF;IAEO,OAAAkO,KAAA;EAAA,CACT,EAAG,CAAClO,kBAAkB,CAAC,CAAA;EAEjB,MAAAkI,OAAA,GAAA,mBACHoB,GAAI,EAAA;IAAAzH,OAAA,EAAS;IACXG,QACC,EAAA8C,KAAA,GAAA,eAAAxF,GAAA,CAACgD;MAAK9C,IAAK,EAAA,UAAA;MAAWqC,SAAS,CAC7B;MAAAG,QAAA,EAAA,eAAA1C,GAAA,CAAC+C;QAAKL,QAAkD,EAAA;MAAA,CAAA;KAC1D,mBAECE,IAAA,CAAAC,KAAA,EAAA;MAAMC,OAAO,CACZ;MAAAJ,QAAA,EAAA,CAAA,eAAC1C,GAAA,CAAA6J,cAAA,EAAA;QAAe3H,EAAI,EAAAkJ,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,QAAA,CAAU5H;OAAK,CAAA,EAClC9C,kBAAA,CAAmBU,SAAS,CAC3B,kBAAApB,GAAA,CAAC+O,SAAA,EAAA;QACCC,QAAU,EAAArB,WAAA;QACVtN,KAAO,EAAAwE,KAAA;QACPoK,WAAY,EAAA;MAAA,CAAA,CAEZ,GAAA,IAAA,EACHvO,kBAAA,CAAmBU,MAAS,GAAA,CAAA,GAAA,eAGxBwB,IAAA,CAAAQ,QAAA,EAAA;QAAAV,QAAA,EAAA,CAAAX,OAAA,GAAU,OAGN,eAAAa,IAAA,CAAAQ,QAAA,EAAA;UAAAV,QAAA,EAAA,CAAAxB,IAAA,IAAQqN,+BAAkC,GAAA,IAAA,GACxC,eAAAvO,GAAA,CAAAuN,OAAA,EAAA;YACkD7K,QAGnD,EAAA;WAAA,CAAA,EAGDiM,oBAAuB,GAAA,IAAA,GAAA,eACrB3O,GAAA,CAAAuN,OAAA,EAAA;YAAQ7K,QAET,EAAA;WAAA,CAAA,EAGDyI,gBAAA,GAAmB,IAClB,GAAA,eAAAvI,IAAA,CAAC2K,OAAQ,EAAA;YAAA7K,QAAA,EAAA,CAAA,+BAAA,EACuB,GAAA,EAC9B,eAAA1C,GAAA,CAAC;cAAO0C,QAAa,EAAA;YAAA,CAAA,CAAA;WACvB,CAAA,EAGDyI,gBAAoB,IAAA,CAACqD,qBACpB,GAAA,eAAA5L,IAAA,CAAC2K,OAAQ,EAAA;YAAA7K,QAAA,EAAA,CAAA,sDAAA,EAC8C,GAAA,EACrD,eAAA1C,GAAA,CAAC;cAAM0C,QAAiB,EAAAyI;YAAA,CAAA,CAAA;UAAA,CAC1B,CACE,GAAA,IAAA;SACN,CAAA,EAEDzK,kBAAA,CACEwO,MAAO,CAAClE,QAAa,IAAA;UACpB,IAAInG,KAAO,EAAA;YACT,OAAOmG,SAAS7K,KACb,CAAAgP,WAAA,CAAA,EACAC,QAAS,CAAAvK,KAAA,CAAMsK,aAAa,CAAA;UACjC;UACO,OAAA,IAAA;QACR,CAAA,CACA,CAAA7L,GAAA,CAAK0H,QAAU,IAAA;UArJhC,IAAAD,EAAA;UAsJkB,OAAA,CAAChJ,WAAWoJ,gBAAoB,IAAAqD,qBAAA;UAAA;UAAA;UAAA;UAG9BxO,GAAA,CAAC8K,cAAA,EAAA;YAECE,QAAA;YACAnL,UAAA;YACAgC,UAAA;YACAyG,QAAA,EAAUvG,WAAW,CAAC4M,oBAAA;YACtB1D,OAAA,EAASD,SAAS9I,EAAO,KAAAiJ,gBAAA;YACzBC,QAAA;YACAC,UAAA;YACAH,MAAA;YACAC;UAAA,CAAA,EATKH,QAAS,CAAA9I,EAUhB,CAAA;UAAA;UAAA;UAGAlC,GAAA,CAAC+M,aAAA,EAAA;YAEC7B,MAAA;YACAF,QAAA;YAIA1C,QAAA,EAAA,CACGyC,gBACC,CAAC4D,oBAAA,KACDvD,qCAAU9J,YACP,CAAA4N,MAAA,CAAQ3D,CAAG,IAAA;cAlLxCR,IAAAA,GAAAA;cAkL2C,OAAA,CAAA,CAAAA,GAAA,GAAAQ,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,CAAA,CAAGlL,KAAH,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA0K,IAAUJ,IAAS,MAAA9I,UAAA;YAAA,CAAA,CAAA,CACjC4M,KAAMlD,CAAA,IAAMA,EAAEb,IAAS,KAAAM,QAAA,CAAS9I,SAJpC,IAKD,GAAA6I,EAAA,GAAA;UAAA,CAAA,EAZGC,QAAS,CAAA9I,EAchB,CAAA;QAAA,CAEJ,CAAA;MAAA,CACJ,CACE,GAAA,IAAA;IACN,CAAA;EAEJ,CAAA,CAAA;EAGF,MAAMmN,qBACJ,GAAA,CAACtN,OAAW,IAAAoJ,gBAAA,IAAoB,CAACqD,qBAAA;EAEnC,IAAI,CAAC3M,UAAY,EAAA;IACR,OAAA,IAAA;EACT;EAEA,IAAI,CAAChC,UAAY,EAAA;IACR,OAAA,IAAA;EACT;EAGE,sBAAAG,GAAA,CAACsP,OAAA,EAAA;IACCC,aAAa,EAAA,IAAA;IACb3G,OAAA;IACAkB,IAAA;IACAM,MAAM,EAAA,IAAA;IACNI,GAAK,EAAA2D,UAAA;IACLqB,QAAS,EAAA,MAAA;IACTtP,IAAK,EAAA,SAAA;IAELwC,QAAA,iBAAA1C,GAAA,CAACgE,MAAA,EAAA;MACCC,IAAK,EAAA,cAAA;MACLE,IAAK,EAAA,OAAA;MACLmE,UAAU,CAAC4C,MAAA;MACXhL,MACE,CAACgL,MAAA,IAAUnJ,OAAW,IAAA,CAACsN,wBAAwB,KAAY,CAAA,GAAA,SAAA;MAE7D9G,IAAM,EAAAkH,aAAA;MACNvL,OAAS,EAAA8I,WAAA;MACTxC,GAAK,EAAAyD,SAAA;MACLyB,QAAU,EAAA5F;IAAA,CACZ;EAAA,CAAA,CACF;AAEJ;ACjNa,MAAA6F,oBAAA,GAAiDjQ,KAAU,IAAA;EACtE,MAAM;IAACwC,EAAI,EAAAL,UAAA;IAAYmF,SAAW;IAAAC,KAAA;IAAO2I;EAAc,CAAA,GAAAlQ,KAAA;EACvD,MAAM+B,MAAMwF,KAAS,IAAAD,SAAA;EAErB,MAAM,CAACE,YAAA,EAAcC,aAAa,CAAA,GAAIC,SAAS,KAAK,CAAA;EACpD,MAAMzD,UAAU0D,WAAY,CAAA,MAAMF,cAAc,KAAK,CAAA,EAAG,EAAE,CAAA;EAC1D,MAAM7F,YAAuC,GAAAc,OAAA,CAC3C,MACEX,GAAO,IAAAkF,KAAA,CAAMC,OAAQ,CAAAnF,GAAA,CAAIlB,uBAAuB,CAAC,CAC5C,GAAAkB,GAAA,CAAIlB,uBAAuB,CAAA,GAC5B,EAAC,EACP,CAACkB,GAAG,CAAA,CACN;EAEA,MAAM8F,QAAQC,QAAS,EAAA;EACvB,MAAMf,MAAS,GAAAC,SAAA,CAAU;IAAC1F,UAAA,EAAYR;EAAY,CAAA,CAAA;EAG5C,MAAAoD,SAAA,GAAYyD,YAAY,MAAM;IAC5B,MAAAI,EAAA,GAAKhB,OAAOiB,WAAY,EAAA;IAE3BD,EAAA,CAAAG,KAAA,CAAM/F,YAAa+F,KAAA,IAAUA,MAAMC,KAAM,CAAA,CAACtH,uBAAuB,CAAC,CAAC,CAAA;IAElE,IAAAe,YAAA,CAAaF,SAAS,CAAG,EAAA;MACdE,YAAA,CAAAE,OAAA,CAAS+B,WAAgB,IAAA;QACjCkE,EAAA,CAAAM,MAAA,CAAOxE,WAAY,CAAAlD,KAAA,CAAMsK,IAAI,CAAA;QAChClD,EAAA,CAAGM,MAAO,CAAA,SAAA,CAAUD,MAAY,CAAAvE,WAAA,CAAAlD,KAAA,CAAMsK,IAAM,CAAA,CAAA;MAAA,CAC7C,CAAA;IACH;IAEAlD,EAAA,CAAGM,OAAOlG,UAAU,CAAA;IAEjB4F,EAAA,CAAAM,MAAA,CAAO,UAAUD,MAAY,CAAAjG,UAAA,CAAA,CAAA;IAE7B4F,EAAA,CAAAO,MAAA,EACA,CAAArC,IAAA,CAAK,MAAM;MACFhC,OAAA,EAAA;MAER4D,KAAA,CAAM5F,IAAK,CAAA;QACTsG,MAAQ,EAAA,SAAA;QACR9H,KAAO,EAAA;MAAA,CACR,CAAA;IAAA,CACF,CAAA,CACA8F,KAAM,CAACkC,GAAQ,IAAA;MACdZ,KAAA,CAAM5F,IAAK,CAAA;QACTsG,MAAQ,EAAA,OAAA;QACR9H,KAAO,EAAA,4CAAA;QACP+H,aAAaC,GAAI,CAAAC;MAAA,CAClB,CAAA;IAAA,CACF,CAAA;EAAA,GACF,CAAC3B,MAAA,EAAQnF,cAAcO,UAAY,EAAA8B,OAAA,EAAS4D,KAAK,CAAC,CAAA;EAE9C,OAAA;IACLc,KAAO,EAAA,yBAAA;IACPC,QAAU,EAAA,CAAC7G,GAAO,IAAA,CAACH,YAAa,CAAAF,MAAA;IAChCmH,IAAM,EAAAC,SAAA;IACNtI,IAAM,EAAA,UAAA;IACNuI,UAAUA,CAAA,KAAM;MACdtB,aAAA,CAAc,IAAI,CAAA;IACpB,CAAA;IACAuB,QAAQxB,YAAgB,IAAA;MACtBnH,IAAM,EAAA,SAAA;MACN8P,QAAU,EAAAD,UAAA;MACVE,WAAWA,CAAA,KAAM;QACLlM,SAAA,EAAA;QACCgM,UAAA,EAAA;MACb,CAAA;MACA1P,IAAM,EAAA,UAAA;MACNkI,SACE9G,YAAa,CAAAF,MAAA,KAAW,IACpB,wCACA,GAAA,aAAA,CAAc0G,oBAAa1G,MAAM,EAAA,iCAAA;IACzC;EAAA,CACF;AACF,CAAA;ACxFO,SAAS2O,cACdrQ,KACiC,EAAA;EANnC,IAAAqL,EAAA,EAAAiF,EAAA;EAOQ,MAAA9E,MAAA,GAAA,CAASxL,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,KAAA,CAAAuH,KAAA,MAASvH,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,KAAA,CAAAsH,SAAA,CAAA;EACtC,MAAM;IAACpG,aAAA;IAAeF;EAAkB,CAAA,GACtC2F,sCAAuC,CAAA,CAAA;EACzC,MAAM4J,aAAa/E,MAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,MAAA,CAAAtK,aAAA,CAAA;EAE5B,IAAI,CAACqP,UAAY,EAAA;IACR,OAAA,IAAA;EACT;EAEA,MAAMjF,QAAW,GAAArE,KAAA,CAAMC,OAAQ,CAAAlG,kBAAkB,CAC7C,GAAAA,kBAAA,CAAmB4K,IAAK,CAACoD,CAAM,IAAAA,CAAA,CAAExM,EAAO,KAAA+N,UAAU,CAClD,GAAA,IAAA;EAGG,OAAA;IACL5H,KAAO,EAAA,CAAA0C,EAAA,GAAAC,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,QAAA,CAAU9I,EAAV,KAAA,IAAA,GAAA6I,EAAA,GAAgBmF,OAAOD,UAAU,CAAA;IACxC9P,KAAA,EAAA,CAAO6P,EAAU,GAAAhF,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,QAAA,CAAA7K,KAAA,KAAV,IAAmB,GAAA6P,EAAA,GAAA,KAAA,CAAA;IAC1BG,KAAO,EAAA;EAAA,CACT;AACF;ACVA,SAAwBC,cAAc1Q,KAA2B,EAAA;EACzD,MAAA;IACJwC,EAAA;IACAmO,eAAA;IACAC,YAAA;IACAC,eAAA;IACAC,UAAA;IACAC;EACE,CAAA,GAAA/Q,KAAA;EACE,MAAAgR,SAAA,GAAYpC,YAAa,CAAApM,EAAA,EAAI,EAAE,CAAA;EACrC,MAAM;IAACyO,YAAc;IAAAC;EAAA,CAAc,GAAAC,mBAAA,CAAoB3O,IAAI,EAAE,CAAA;EAC7D,MAAMvC,SAASC,SAAU,EAAA;EAEnB,MAAAkR,mBAAA,GAAsB1O,QAAQ,MAAM;IAEtC,OAAA,CAACuO,YACD,IAAAC,UAAA,CAAWxP,MAAS,GAAA,CAAA,IACpBwP,UAAW,CAAAnC,IAAA,CAAMsC,IAAA,IAASA,IAAK,CAAAC,KAAA,KAAU,OAAO,CAAA;EAAA,CAEjD,EAAA,CAACL,YAAc,EAAAC,UAAU,CAAC,CAAA;EAE7BvO,SAAA,CAAU,MAAM;IACd,IAAIyO,mBAAqB,EAAA;MACvBR,YAAA,CAAapO,EAAE,CAAA;IAAA,CACV,MAAA;MACLqO,eAAA,CAAgBrO,EAAE,CAAA;IACpB;IAEA,IAAIwO,UAAUzJ,KAAO,EAAA;MACnBuJ,UAAA,CAAWtO,EAAE,CAAA;IAAA,CACR,MAAA;MACLuO,aAAA,CAAcvO,EAAE,CAAA;IAClB;IAEA,IAAI,CAACyO,YAAc,EAAA;MACjBN,eAAA,CAAgBnO,EAAE,CAAA;IACpB;EAAA,CACC,EAAA,CACDsO,UAAA,EACAF,YAAA,EACAI,SAAU,CAAAzJ,KAAA,EACV/E,EAAA,EACAyO,YAAA,EACAN,eAAA,EACAI,aAAA,EACAF,eAAA,EACAO,mBAAA,CACD,CAAA;EAGG,IAAA,CAACJ,UAAUzJ,KAAO,EAAA;IACb,OAAA,IAAA;EACT;EAEA,MAAMpH,UAAa,GAAAF,MAAA,CAAOG,GAAI,CAAA4Q,SAAA,CAAUzJ,MAAMvF,KAAK,CAAA;EAGjD,sBAAA1B,GAAA,CAACgD,IAAA,EAAA;IACCC,MAAM,EAAA,IAAA;IACNV,OAAS,EAAA,CAAA;IACTrC,IAAA,EAAM4Q,sBAAsB,UAAa,GAAA,UAAA;IAExCpO,QAAA,EAAAgO,SAAA,CAAUzJ,SAASpH,UAClB,kBAAAG,GAAA,CAACI,OAAA,EAAA;MACC6Q,MAAO,EAAA,SAAA;MACP5Q,OAAOqQ,SAAU,CAAAzJ,KAAA;MACjBpH;IAAA,CAAA,CACF,sBAEC8C,OAAQ,EAAA,EAAA;EAAA,CAAA,CAEb;AAEJ;AC/EA,SAAwBuO,SAASxR,KAAsB,EAAA;EACrD,MAAM;IAACuE,IAAA;IAAMsE,IAAM;IAAArI,IAAA;IAAMwC;GAAY,GAAAhD,KAAA;EACrC,MAAMyR,IAAO,GAAA5I,IAAA;EAGX,sBAAAvI,GAAA,CAAC+J,OAAA,EAAA;IACCK,MAAM,EAAA,IAAA;IACNxB,OACE,EAAAlG,QAAA,GACK,eAAA1C,GAAA,CAAAoD,QAAA,EAAA;MAAAV;KAAS,mBAEX1C,GAAA,CAAAgK,GAAA,EAAA;MAAIzH,OAAS,EAAA,CAAA;MACZG,QAAC,EAAA,eAAA1C,GAAA,CAAA+C,IAAA,EAAA;QAAKG,IAAM,EAAA,CAAA;QAAIR;MAAK,CAAA;KACvB,CAAA;IAIJA,6BAAC0O,YAAa,EAAA;MAAAlR,IAAA;MAAYgD,MAAM,CAC9B;MAAAR,QAAA,iBAAA1C,GAAA,CAACmR,QAAK;IACR,CAAA;EAAA,CAAA,CACF;AAEJ;AC3BA,SAAwBE,IAAOA,CAAA,EAAA;EAC7B,0BACGH,QAAS,EAAA;IAAA3I,IAAA,EAAM+I,eAAiB;IAAApR,IAAA,EAAK;IACpCwC,QAAC,EAAA,eAAAE,IAAA,CAAAC,KAAA,EAAA;MAAMN,OAAS,EAAA,CAAA;MAAGO,OAAO,CAAG;MAAAyO,KAAA,EAAO;QAACC,QAAA,EAAU;MAC7C,CAAA;MAAA9O,QAAA,EAAA,CAAA,eAAA1C,GAAA,CAACgK;QACCtH,QAAC,EAAA,eAAA1C,GAAA,CAAA+C,IAAA,EAAA;UAAKG,IAAM,EAAA,CAAA;UAAGR;SAAwC;MACzD,CAAA,CAAA,qBACCsH,GACC,EAAA;QAAAtH,QAAA,EAAA,eAAA1C,GAAA,CAAC+C;UAAKG,IAAM,EAAA,CAAA;UAAGR;SAGf;MACF,CAAA,CAAA,qBACCsH,GACC,EAAA;QAAAtH,QAAA,EAAA,eAAA1C,GAAA,CAAC+C;UAAKG,IAAM,EAAA,CAAA;UAAGR;SAGf;MACF,CAAA,CAAA;IACF,CAAA;EACF,CAAA,CAAA;AAEJ;ACbA,SAAwB+O,YAAY/R,KAAyB,EAAA;EACrD,MAAA;IAAC4B;EAAgB,CAAA,GAAA5B,KAAA;EACvB,MAAM+G,MAAS,GAAAC,SAAA,CAAU;IAAC1F,UAAA,EAAYR;EAAY,CAAA,CAAA;EAClD,MAAM;IAACkR,SAAA;IAAWC;EAAO,CAAA,GAAIC,YAAa,CAAA,CAAA;EAC1C,MAAMrK,QAAQC,QAAS,EAAA;EACvB,MAAM,CAACqK,UAAA,EAAYC,aAAa,CAAA,GAAI1K,SAA0B,IAAI,CAAA;EAClE,MAAM,CAAC2K,UAAY,EAAAC,aAAa,CAAI,GAAA5K,QAAA,CAAmB,EAAE,CAAA;EAEnD,MAAAiJ,eAAA,GAAkBhJ,WAAY,CAACnF,EAAe,IAAA;IAClD8P,aAAA,CAAeC,GAAA,IAAQtL,KAAM,CAAAuL,IAAA,EAAS,eAAA,IAAAC,GAAA,CAAI,CAAC,GAAGF,GAAK,EAAA/P,EAAE,CAAC,CAAC,CAAC,CAAA;EAC1D,CAAA,EAAG,EAAE,CAAA;EAGL,MAAM,CAAC4H,IAAA,EAAMgE,OAAO,CAAA,GAAI1G,SAAS,KAAK,CAAA;EACtC,MAAMgL,SAAS/K,WAAY,CAAA,MAAMyG,QAAQ,IAAI,CAAA,EAAG,EAAE,CAAA;EAClD,MAAMnK,UAAU0D,WAAY,CAAA,MAAMyG,QAAQ,KAAK,CAAA,EAAG,EAAE,CAAA;EAE9C,MAAAwC,YAAA,GAAejJ,WAAY,CAACnF,EAAe,IAAA;IAC/C4P,aAAA,CAAeG,GAAS,IAAAA,GAAA,GAAMtL,KAAM,CAAAuL,IAAA,EAAA,mBAASC,GAAI,CAAA,CAAC,GAAGF,GAAA,EAAK/P,EAAE,CAAC,CAAC,CAAI,GAAA,CAACA,EAAE,CAAE,CAAA;EACzE,CAAA,EAAG,EAAE,CAAA;EAEC,MAAAqO,eAAA,GAAkBlJ,WAAY,CAACnF,EAAe,IAAA;IACpC4P,aAAA,CAACG,GAAS,IAAAA,GAAA,GAAMA,GAAI,CAAA/C,MAAA,CAAQvK,CAAA,IAAMA,CAAM,KAAAzC,EAAE,CAAI,GAAA,EAAG,CAAA;EACjE,CAAA,EAAG,EAAE,CAAA;EAEL,MAAM,CAACmQ,QAAU,EAAAC,WAAW,CAAI,GAAAlL,QAAA,CAAmB,EAAE,CAAA;EAE/C,MAAAoJ,UAAA,GAAanJ,WAAY,CAACnF,EAAe,IAAA;IAC7CoQ,WAAA,CAAaL,GAAA,IAAQtL,KAAM,CAAAuL,IAAA,EAAS,eAAA,IAAAC,GAAA,CAAI,CAAC,GAAGF,GAAK,EAAA/P,EAAE,CAAC,CAAC,CAAC,CAAA;EACxD,CAAA,EAAG,EAAE,CAAA;EAEC,MAAAuO,aAAA,GAAgBpJ,WAAY,CAACnF,EAAe,IAAA;IACpCoQ,WAAA,CAACL,OAAQA,GAAI,CAAA/C,MAAA,CAAQvK,CAAM,IAAAA,CAAA,KAAMzC,EAAE,CAAC,CAAA;EAClD,CAAA,EAAG,EAAE,CAAA;EAEC,MAAAqQ,iBAAA,GAAoBlL,YAAY,MAAM;IAC1C,MAAMmL,IAAO,GAAAlR,YAAA,CAAagC,GAAI,CAACC,WAAiB,KAAA;MAC9C1B,UAAA,EAAY0B,YAAYlD,KAAM,CAAAsK;IAC9B,CAAA,CAAA,CAAA;IACFlE,MAAA,CACGgM,OAAQ,CAAA;MACPC,GAAA,EAAK,WAAY,CAAA5K,MAAA,CAAA4J,SAAA,EAAS,GAAI,CAAA,CAAA5J,MAAA,CAAA6J,OAAA,CAAA;MAC9BgB,MAAQ,EAAA,MAAA;MACRH;IAAA,CACD,CACA,CAAA7M,IAAA,CAAK,MAAM;MACV4B,KAAA,CAAM5F,IAAK,CAAA;QACTsG,MAAQ,EAAA,SAAA;QACR9H,KAAO,EAAA,SAAA;QACP+H,WAAa,EAAA;MAAA,CACd,CAAA;IAAA,CACF,CAAA,CACAjC,KAAM,CAACkC,GAAQ,IAAA;MACdsE,OAAA,CAAQjH,MAAM2C,GAAG,CAAA;MACjBZ,KAAA,CAAM5F,IAAK,CAAA;QACTsG,MAAQ,EAAA,OAAA;QACR9H,KAAO,EAAA,OAAA;QACP+H,WAAa,EAAA;MAAA,CACd,CAAA;IAAA,CACF,CAAA;EAAA,GACF,CAAC5G,YAAA,EAAcmF,QAAQiL,SAAW,EAAAC,OAAA,EAASpK,KAAK,CAAC,CAAA;EAE9C,MAAAe,QAAA;EAAA;EAEJyJ,UAAA,CAAW3Q,WAAWE,YAAa,CAAAF,MAAA;EAAA;EAEnCmL,OAAQ,CAAAsF,UAAA,IAAA,CAAcA,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,UAAA,CAAAzQ,MAAA,IAAS,CAAC,CAAA;EAAA;EAE5C,CAACiR,QAAS,CAAAjR,MAAA;EAEZ,OAAA,CAAOE,YAAc,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,YAAA,CAAAF,MAAA,IAAS,CAC5B,GAAA,eAAApB,GAAA,CAACgD;IAAKT,OAAS,EAAA,CAAA;IAAGU,MAAM,EAAA,IAAA;IAAC2P,MAAQ,EAAA,CAAA;IAC/BlQ,QAAC,EAAA,eAAAE,IAAA,CAAAC,KAAA,EAAA;MAAMC,OAAO,CACZ;MAAAJ,QAAA,EAAA,CAAC,eAAAE,IAAA,CAAAiQ,MAAA,EAAA;QAAO/P,OAAO,CACb;QAAAJ,QAAA,EAAA,CAAA,eAAA1C,GAAA,CAAC+C,IAAK,EAAA;UAAAI,MAAA,EAAO,MAAO;UAAAD,IAAA,EAAM;UAAGR,QAE7B,EAAA;SAAA,CAAA,EAAA,mBACC2O,IAAK,EAAA,EAAA,CAAA;OACR,CAAA,EAAA,mBAECxO,KACC,EAAA;QAAAH,QAAA,iBAAA1C,GAAA,CAACgE,MAAA,EAAA;UACCE,OAAS,EAAAkO,MAAA;UACTnO,IAAK,EAAA,yBAAA;UACLE,IAAK,EAAA;QAAA,CAAA;OAET,CAAA,EAEC2F,IACC,mBAAA9J,GAAA,CAAC8S,MAAA,EAAA;QACCnK,MAAO,EAAA,iBAAA;QACPzG,EAAG,EAAA,qBAAA;QACHyB,OAAA;QACAoP,OAAS,EAAA,GAAA;QACTC,KAAO,EAAA,CAAA;QAEPtQ,QAAC,EAAA,eAAAE,IAAA,CAAAC,KAAA,EAAA;UAAMC,KAAO,EAAA,CAAA;UAAGP,SAAS,CACvB;UAAAG,QAAA,EAAA,CAAA2P,QAAA,CAASjR,MAAS,GAAA,CAAA,kBAChBwB,IAAA,CAAAC,KAAA,EAAA;YAAMC,OAAO,CACZ;YAAAJ,QAAA,EAAA,CAAC,eAAAE,IAAA,CAAAG,IAAA,EAAA;cAAKG,MAAM,CAAG;cAAAR,QAAA,EAAA,CAAA,OAAA,EACP,GAAA,EACL2P,SAASjR,MAAW,KAAA,CAAA,GACjB,qBACA,GAAA,MAAA,CAAO0G,gBAAS1G,MAAM,EAAA,kBAAA,CAAA,EAAmB,GAAA;aAE/C,CAAA,EACCyQ,UAAA,IAAcA,WAAWzQ,MAAS,GAAA,CAAA,uBAChCgQ,YAAa,EAAA;cAAAlR,IAAA,EAAK,UAAW;cAAAgD,IAAA,EAAM,CACjC;cAAAR,QAAA,EAAA,CAAAmP,UAAA,IAAcA,WAAWzQ,MAAW,KAAA,CAAA,GACjC,yBACA,EACE,CAAA0G,MAAA,CAAA+J,UAAA,IAAcA,WAAWzQ,MAC3B,EAAA,uBAAA,CAAA,EAAyB,GAAA,EAAI,6CAAA;YAAA,CAEnC,IAEC,eAAApB,GAAA,CAAAoR,YAAA,EAAA;cAAalR,MAAK,UAAW;cAAAgD,IAAA,EAAM;cAAGR,QAEvC,EAAA;aAAA,CAAA;UAAA,CAEJ,CACE,GAAA,IAAA,EAAA,mBAEHG,KAAM,EAAA;YAAAC,KAAA,EAAO;YACXJ,QACE,EAAApB,YAAA,CAAA4N,MAAA,CAAQ3L,WAAa,IAAA;cA3IxC,IAAAwH,EAAA;cA2I2C,OAAA,CAAAA,EAAA,GAAAxH,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,WAAA,CAAalD,UAAb,IAAoB,GAAA,KAAA,CAAA,GAAA0K,EAAA,CAAAJ,IAAA;YAAA,CAAI,CAAA,CAChDrH,GAAI,CAACC,WACJ,mBAAAvD,GAAA,CAACoQ,aAAA,EAAA;cAEClO,EAAA,EAAIqB,YAAYlD,KAAM,CAAAsK,IAAA;cACtB0F,eAAA;cACAC,YAAA;cACAC,eAAA;cACAC,UAAA;cACAC;YAAA,CAAA,EANKlN,WAAY,CAAAmH,IAQpB,CAAA;WACL,CAAA,EACC2H,QAAA,CAASjR,SAAS,CACjB,kBAAApB,GAAA,CAACgE,MAAA,EAAA;YACCG,IAAK,EAAA,OAAA;YACLjE,IACE,EAAA2R,UAAA,IAAA,CAAcA,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,UAAA,CAAAzQ,MAAA,IAAS,IAC/B,SACA,GAAA,UAAA;YAEN6C,MACEoO,QAAS,CAAAjR,MAAA,KAAW,IAChB,wBACA,GAAA,eAAA,CAAgB0G,gBAAS1G,MAAM,EAAA,kBAAA,CAAA;YAErC8C,OAAS,EAAAqO,iBAAA;YACTjK;UAAA,CAAA,mBAGDtI,GAAA,CAAA+C,IAAA,EAAA;YAAKkH,OAAK,IAAC;YAAA/G,IAAA,EAAM;YAAGR,QAErB,EAAA;WAAA,CAAA;SAEJ;MAAA,CACF,CAAA;KAEJ;GACF,CACE,GAAA,IAAA;AACN;ACrKA,SAAwBuQ,iBAAiBvT,KAA8B,EAAA;EACrE,MAAM;IAAC6D,WAAA;IAAa2P,YAAc;IAAA7H;EAAA,CAAc,GAAA3L,KAAA;EAChD,MAAMgR,SAAY,GAAApC,YAAA,CAAa/K,WAAY,CAAAlD,KAAA,CAAMsK,MAAMuI,YAAY,CAAA;EACnE,MAAMzM,MAAS,GAAAC,SAAA,CAAU;IAAC1F,UAAA,EAAYR;EAAY,CAAA,CAAA;EAC5C,MAAA;IAACwO;GAAQ,GAAImE,eAAgB,EAAA;EAEnC9Q,SAAA,CAAU,MAAM;IACd;IAAA;IAEEkB,YAAYlD,KAAM,CAAAsK,IAAA;IAAA;IAElBpH,YAAYlD,KAAM,CAAAuK,KAAA;IAAA;IAElBrH,YAAYlD,KAAM,CAAAwK,oBAAA;IAAA;IAElB,CAAC6F,SAAA,CAAUzJ,KACX,IAAAyJ,SAAA,CAAU1J,aACV0J,SAAU,CAAA0C,KAAA,EACV;MACA,MAAMC,iBAAoB,GAAA,CACxB,cAAA,EACA;QAAC3I,IAAM,EAAAnH,WAAA,CAAYmH;MAAI,CAAA,EACvB,OAAA,CACF;MAEAsE,QAAA,CACE,IAAIsE,UAAW,CAAA,CACbzL,KAAM,CAAA,CAAC,GAAGwL,iBAAA,EAAmB,OAAO,CAAC,CAAA,EACrCxL,KAAM,CAAA,CAAC,GAAGwL,iBAAA,EAAmB,sBAAsB,CAAC,CAAA,CACrD,CAAA,CACH;IACF;EAAA,GACC,CAAC9P,WAAA,EAAamN,WAAWrF,UAAY,EAAA5E,MAAA,EAAQuI,QAAQ,CAAC,CAAA;EAElD,OAAA,IAAA;AACT;ACvCA,SAAwBuE,yBACtB7T,KACA,EAAA;EACA,MAAM;IAAC4B,YAAA,GAAe,EAAC;IAAG+J;GAAc,GAAA3L,KAAA;EAEpC,IAAA,CAAC4B,aAAaF,MAAQ,EAAA;IACjB,OAAA,IAAA;EACT;EAEA,OAAA;IAEKsB,QAAa,EAAApB,YAAA,CAAAgC,GAAA,CAAKC,WAAa,IAAA;MArBtC,IAAAwH,EAAA;MAsBoB,OAAA,CAAA,CAAAA,EAAA,GAAAxH,WAAA,CAAAlD,KAAA,CAAMwK,oBAAlB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAE,EAAA,CAAwChL,IACtC,mBAAAC,GAAA,CAACiT,gBAAA,EAAA;QAEC1P,WAAA;QACA2P,YAAA,EAAc3P,WAAY,CAAAlD,KAAA,CAAMwK,oBAAqB,CAAA9K,IAAA;QACrDsL;MAAA,CAAA,EAHK9H,WAAY,CAAAmH,IAKjB,CAAA,GAAA,IAAA;IAAA,CAER;EAAA,CAAA,CAAA;AAEJ;ACvBA,IAAAU,QAAA,GAAeA,CACbzK,WACA,EAAAI,cAAA,KAEAyS,UAAW,CAAA;EACTzT,IAAM,EAAA,UAAA;EACN0N,IAAM,EAAAnN,oBAAA;EACNH,KAAO,EAAA,sBAAA;EACPoI,IAAM,EAAAkH,aAAA;EACNgE,QAAU,EAAA,IAAA;EACVC,MAAQ,EAAA,CACNC,WAAY,CAAA;IACVlG,IAAM,EAAAlN,uBAAA;IACNR,IAAM,EAAA;EAAA,CACP,CAAA,EACD4T,WAAY,CAAA;IACVlG,IAAM,EAAA,aAAA;IACNvF,WACE,EAAA,+FAAA;IACFnI,IAAM,EAAA,OAAA;IAAA;IAAA;IAGN6T,EAAI,EAAA,CAAC;MAAC7T,IAAA,EAAM;KAAS,CAAA;IACrB8T,OAAA,EAAS;MAACC,IAAA,EAAMnT;IAAW,CAAA;IAC3BoT,UAAUC,KAAA;MAAA,IAAC;QAAC3T;OAAK,GAAA2T,KAAA;MAAA,OAAMzH,QAAQlM,KAAK,CAAA;IAAA;EAAA,CACrC,CAAA,EACD,GAAGU,cAAA,CACL;EACAkT,OAAS,EAAA;IACPC,MAAQ,EAAA;MACN5S,YAAc,EAAAf,uBAAA;MACd4T,mBAAqB,EAAA;IACvB,CAAA;IACAC,QAAQC,SAAW,EAAA;MACjB,MAAM;QAAC/S,YAAe,GAAA;QAAI6S,mBAAsB,GAAA;OAAM,GAAAE,SAAA;MACtD,MAAMlU,QACJmB,YAAa,CAAAF,MAAA,KAAW,IACpB,eACA,GAAA,EAAA,CAAG0G,oBAAa1G,MAAM,EAAA,eAAA,CAAA;MAC5B,MAAMkT,YAAe,GAAAhT,YAAA,CAAaF,MAC9B,GAAAE,YAAA,CACGgC,IAAKiI,CAAA,IAAsBA,CAAE,CAAAb,IAAA,CAAK6J,WAAY,CAAA,CAAC,CAC/C,CAAAC,IAAA,CAAK,IAAI,CACZ,GAAA,EAAA;MACJ,MAAMC,QAAW,GAAA,CACfH,YAAA,GAAe,GAAI,CAAAxM,MAAA,CAAAwM,YAAA,EAAY,GAAM,CAAA,GAAA,IAAA,EACrC,CAAAH,mBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,mBAAA,CAAqB/S,MACjB,IAAA+S,mBAAA,CAAoB7Q,GAAI,CAACoR,KAAcA,CAAC,CAAA,CAAEF,IAAK,CAAA,IAAI,CACnD,GAAA,EAAA,CAEH,CAAAtF,MAAA,CAAO3C,OAAO,CAAA,CACdiI,KAAK,GAAG,CAAA;MAEJ,OAAA;QACLrU,KAAA;QACAsU;MAAA,CACF;IACF;EACF;AACF,CAAC,CAAA;ACvDI,MAAME,4BAA+B,GAAAC,YAAA,CACzC1P,MAAW,IAAA;EACV,MAAMsB,YAAe,GAAA;IAAC,GAAG/F,cAAA;IAAgB,GAAGyE;EAAM,CAAA;EAC5C,MAAA;IACJxE,kBAAA;IACAC,WAAA;IACAC,aAAA;IACAE,WAAA;IACAC;EACE,CAAA,GAAAyF,YAAA;EAEA,IAAA7F,WAAA,CAAYS,WAAW,CAAG,EAAA;IAC5B,MAAM,IAAIsK,KAAA,CACR,kLAAA,CACF;EACF;EAEO,OAAA;IACL+B,IAAM,EAAA,uCAAA;IAENoH,MAAQ,EAAA;MACNC,UAAY,EAAA;QACV7D,MAAA,EAASvR,KACP,IAAA6G,oCAAA,CAAqC;UAAC,GAAG7G,KAAA;UAAO8G;SAAa;MACjE;IACF,CAAA;IAAA;IAAA;IAAA;IAKAuO,IAAM,EAAA;MACJD,UAAY,EAAA;QACVE,KAAA,EAAQtV,KAAU,IAAA;UA9C5B,IAAAqL,EAAA,EAAAiF,EAAA,EAAAiF,EAAA;UAgDc,IAAAvV,KAAA,CAAMwC,EAAO,KAAA,MAAA,IACbxC,KAAM,CAAAG,UAAA,CAAW4N,SAASnN,oBAC1B,IAAA4U,gBAAA,CAAiBxV,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,KAAA,CAAAW,KAAK,CAC7B,EAAA;YACM,MAAAgL,UAAA,GAAA,CAAaN,EAAO,GAAArL,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,KAAA,CAAAW,KAAA,KAAP,IAAc,GAAA,KAAA,CAAA,GAAA0K,EAAA,CAAAvH,GAAA;YACjC,MAAMlC,gBACH2T,EAAO,GAAA,CAAAjF,EAAA,GAAAtQ,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,KAAA,CAAAW,KAAA,KAAP,IAAc,GAAA,KAAA,CAAA,GAAA2P,EAAA,CAAA1O,YAAA,KAAd,YAAyD,EAAC;YAC7D,MAAM6T,2BAA2B7T,YAAa,CAAA4N,MAAA,CAC5CkG,KAAA;cAAA,IAAC;gBAAC/U;cAAA;qBAAWA,KAAS,IAAAA,KAAA,CAAMuK,SAASvK,KAAM,CAAAwK,oBAAA;YAAA,CAAA,CAC7C;YAGE,OAAA,eAAAjI,IAAA,CAACC,KAAM,EAAA;cAAAC,KAAA,EAAO,CACX;cAAAJ,QAAA,EAAA,CACC5B,WAAA,GAAA,eAAAd,GAAA,CAACyR,WAAY,EAAA;gBAAAnQ;cAAA,CAA4B,CACvC,GAAA,IAAA,EACH6T,wBAAA,CAAyB/T,SAAS,CACjC,kBAAApB,GAAA,CAACuT,wBAAA,EAAA;gBACClI,UAAA;gBACA/J,YAAc,EAAA6T;cAAA,CAAA,CAEd,GAAA,IAAA,EACHzV,KAAA,CAAMoH,cAAcpH,KAAK,CAAA;YAC5B,CAAA,CAAA;UAEJ;UAEO,OAAAA,KAAA,CAAMoH,cAAcpH,KAAK,CAAA;QAClC;MACF;IACF,CAAA;IAAA;IAAA;IAAA;IAAA;IAMA2V,QAAU,EAAA;MACRC,uBAAA,EAAyBA,CAACC,IAAA,EAAMC,GAAQ,KAAA;QAChC,MAAA;UAAC3V,UAAY;UAAAgC;QAAc,CAAA,GAAA2T,GAAA;QAEjC,OAAO7U,WAAY,CAAAyO,QAAA,CAASvP,UAAU,CAAA,IAAKgC,UACvC,GAAA,CACE,GAAG0T,IAAA,EACF7V,KACC,IAAA8N,gCAAA,CAAiC;UAAC,GAAG9N,KAAA;UAAOmC;SAAW,CAAA,CAE3D,GAAA0T,IAAA;MACN,CAAA;MACAE,MAAQ,EAAAA,CAACF,IAAM,EAAAG,KAAA,KAAiB;QAAA,IAAjB;UAAC7V;SAAgB,GAAA6V,KAAA;QAC9B,IAAI,CAAC/U,WAAA,CAAYyO,QAAS,CAAAvP,UAAU,CAAG,EAAA;UAC9B,OAAA0V,IAAA;QACT;QAEA,OAAO,CAAE7V,KAAA,IAAUqQ,cAAcrQ,KAAK,CAAA,EAAG,GAAG6V,IAAI,CAAA;MAClD,CAAA;MACAI,OAAS,EAAAA,CAACJ,IAAM,EAAAK,KAAA,KAAiB;QAAA,IAAjB;UAAC/V;SAAgB,GAAA+V,KAAA;QAC/B,IAAI/V,eAAeS,oBAAsB,EAAA;UAChC,OAAA,CAAC,GAAGiV,IAAA,EAAM5F,oBAAoB,CAAA;QACvC;QAEO,OAAA4F,IAAA;MACT;IACF,CAAA;IAAA;IAAA;IAIA5V,MAAQ,EAAA;MAAA;MAENkW,KAAO,EAAA,CAACzK,QAAS,CAAAzK,WAAA,EAAaI,cAAc,CAAC,CAAA;MAAA;MAAA;MAI7C+U,SAAW,EAAAA,CAACP,IAAM,EAAAQ,KAAA,KAAa;QAAA,IAAb;UAACpW;SAAY,GAAAoW,KAAA;QAE7B,IAAI,CAACpP,KAAA,CAAMC,OAAQ,CAAAlG,kBAAkB,CAAG,EAAA;UAC/B,OAAA6U,IAAA;QACT;QAEA,MAAMS,sBAAyB,GAAArV,WAAA,CAAY2C,GAAI,CAACzD,UAAY,IAAA;UA9HtE,IAAAkL,EAAA,EAAAiF,EAAA;UA8H0E,OAAA;YAC9D9N,EAAA,EAAI,GAAG4F,MAAU,CAAAjI,UAAA,EAAA,gBAAA,CAAA;YACjBM,KAAA,EAAO,GACL2H,MAAQ,CAAA,CAAAkI,EAAA,GAAA,CAAAjF,EAAA,GAAApL,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,MAAA,CAAAG,GAAA,CAAID,gBAAZ,IAAyB,GAAA,KAAA,CAAA,GAAAkL,EAAA,CAAA5K,KAAA,KAAzB,YAAkCN,UACpC,EAAA,iBAAA,CAAA;YACAA,UAAA;YACAoW,UAAY,EAAA,CACV;cAACxI,IAAM,EAAA,YAAA;cAActN,KAAO,EAAA,aAAA;cAAeJ,MAAM;YAAQ,CAAA,CAC3D;YACAM,KAAO,EAAA6V,KAAA;cAAA,IAAC;gBAACjG;eAAuC,GAAAiG,KAAA;cAAA,OAAA;gBAC9C,CAACtV,aAAa,GAAGqP;cAAA,CACnB;YAAA;UAAA,CACF;QAAA,CAAE,CAAA;QAEF,MAAMkG,eAAkB,GAAAxV,WAAA,CAAYyV,OAAQ,CAACvW,UAAe,IAAA;UACnD,OAAAa,kBAAA,CAAmB4C,GAAI,CAAC0H,QAAU,IAAA;YA7IrD,IAAAD,EAAA,EAAAiF,EAAA;YA6IyD,OAAA;cAC3C9N,EAAI,EAAA,EAAA,CAAG4F,MAAU,CAAAjI,UAAA,EAAA,GAAA,CAAA,CAAIiI,MAAS,CAAAkD,QAAA,CAAA9I,EAAA,CAAA;cAC9B/B,KAAA,EAAO,EAAG,CAAA2H,MAAA,CAAAkD,QAAA,CAAS7K,KAAK,EAAA,GAAA,CAAA,CACtB2H,oDAAQhI,GAAI,CAAAD,UAAA,CAAA,KAAZ,IAAyB,GAAA,KAAA,CAAA,GAAAkL,EAAA,CAAA5K,KAAA,KAAzB,IAAkC,GAAA6P,EAAA,GAAAnQ,UAAA,CAAA;cAEpCA,UAAA;cACAQ,KAAO,EAAA;gBACL,CAACO,aAAa,GAAGoK,QAAS,CAAA9I;cAC5B;YAAA,CACF;UAAA,CAAE,CAAA;QAAA,CACH,CAAA;QAED,OAAO,CAAC,GAAGqT,IAAA,EAAM,GAAGS,sBAAA,EAAwB,GAAGG,eAAe,CAAA;MAChE;IACF,CAAA;IAAA;IAAA;IAIAE,OAAS,EAAA;IAAA;IAAA;IAGPC,sBAAuB,CAAA;MACrBC,SAAW,EAAA7V,kBAAA;MACX8V,UAAY,EAAA,CACV7C,WAAA,CACE;QACElG,IAAM,EAAA,WAAA;QACN1N,IAAM,EAAA,WAAA;QACN0W,IAAI9V,WAAY,CAAA2C,GAAA,CAAKvD,IAAU,KAAA;UAACA;SAAM,CAAA,CAAA;QACtC2W,MAAMlQ,YAAa,CAAA3F,cAAA;QAAA;QAEnB+P,YAAa+F,IAAA,IACXA,KAAKC,MAAO,CAAA,OAAO7F,MAA4B8F,OAAY,KAAA;UA7K7E,IAAA9L,EAAA;UA8KoB,IAAI,GAACA,EAAM,GAAAgG,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAA,CAAA1Q,KAAA,KAAN,mBAAasK,IAAQ,CAAA,IAAA,EAACoG,6BAAMrG,IAAM,CAAA,EAAA;YAC9B,OAAA,IAAA;UACT;UAEA,MAAMjE,SAASoQ,OAAQ,CAAAC,SAAA,CAAU;YAAC9V,UAAA,EAAYR;WAAY,CAAA;UACpD,MAAAuW,aAAA,GAAgB,MAAMtQ,MAAO,CAAAuQ,KAAA,CACjC,iCAAkC,CAAAlP,MAAA,CAAAlH,aAAA,CAAA,EAClC;YACE4J,GAAA,EAAKuG,KAAK1Q,KAAM,CAAAsK,IAAA;YAChBsM,QAAA,EAAU,SAAU,CAAAnP,MAAA,CAAAiJ,IAAA,CAAK1Q,KAAM,CAAAsK,IAAA;UACjC,CAAA,CACF;UAEI,IAAAoM,aAAA,IAAiBA,aAAkB,KAAAhG,IAAA,CAAKrG,IAAM,EAAA;YACzC,OAAA,IAAA;UACT;UAEO,OAAA,8DAAA;QAAA,CACR,CAAA;QACHmJ,OAAS,EAAA;UAAA;UAAA;UAGP3E,MAAQ,EAAAgI,KAAA,IAAwB;YAAA,IAAvB;cAACC,MAAA;cAAQ9B;aAAc,GAAA6B,KAAA;YAC9B,IAAI,CAACC,MAAA,EAAe,OAAA,IAAA;YAIpB,MAAMC,cAAczQ,KAAM,CAAAC,OAAA,CAAQuQ,MAAM,CACpC,GAAAA,MAAA,GACA,CAACA,MAAM,CAAA;YACX,MAAMnM,WAAWoM,WAAY,CAAA9L,IAAA,CAAM+L,CAAA,IAAMA,EAAE3M,IAAI,CAAA;YAE/C,IAAI,EAACM,QAAU,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,QAAA,CAAAN,IAAA,CAAA,EAAa,OAAA,IAAA;YAE5B,IAAI2K,SAAS1U,WAAa,EAAA;cACjB,OAAA;gBACLuO,MAAA,EAAQ,4BAA4BpH,MAAa,CAAAlH,aAAA,EAAA,eAAA,CAAA;gBACjDqB,MAAQ,EAAA;kBACNtB,aAAa0U,QAAS,CAAA1U,WAAA;kBACtBqK,UAAUA,QAAS,CAAAN;gBACrB;cAAA,CACF;YACF;YAEO,OAAA;cACLwE,MAAA,EAAQ,GAAGpH,MAAa,CAAAlH,aAAA,EAAA,eAAA,CAAA;cACxBqB,MAAQ,EAAA;gBAAC+I,QAAU,EAAAA,QAAA,CAASN;cAAI;YAAA,CAClC;UACF;QACF;MACF,CAAA,EACA;QAAC4M,QAAQ;MAAK,CAChB,CAAA;IACF,CACD,CAAA;EACH,CACF;AACF,CACF,CAAA;","x_google_ignoreList":[5]}
|
package/{lib → dist}/index.js
RENAMED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var _templateObject;
|
|
4
|
-
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
5
3
|
Object.defineProperty(exports, '__esModule', {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -271,7 +269,7 @@ const DeleteTranslationAction = props => {
|
|
|
271
269
|
if (documentLanguage && translations.length > 0) {
|
|
272
270
|
operation = "UNSET";
|
|
273
271
|
translations.forEach(translation => {
|
|
274
|
-
tx.patch(translation._id, patch => patch.unset(["".concat(TRANSLATIONS_ARRAY_NAME,
|
|
272
|
+
tx.patch(translation._id, patch => patch.unset(["".concat(TRANSLATIONS_ARRAY_NAME, '[_key == "').concat(documentLanguage, '"]')]));
|
|
275
273
|
});
|
|
276
274
|
} else {
|
|
277
275
|
tx.delete(documentId);
|
|
@@ -477,7 +475,7 @@ function LanguageOption(props) {
|
|
|
477
475
|
const metadataExisted = Boolean(metadata == null ? void 0 : metadata._createdAt);
|
|
478
476
|
return toast.push({
|
|
479
477
|
status: "success",
|
|
480
|
-
title:
|
|
478
|
+
title: 'Created "'.concat(language.title, '" translation'),
|
|
481
479
|
description: metadataExisted ? "Updated Translations Metadata" : "Created Translations Metadata"
|
|
482
480
|
});
|
|
483
481
|
}).catch(err => {
|
|
@@ -588,7 +586,13 @@ function LanguagePatch(props) {
|
|
|
588
586
|
})
|
|
589
587
|
});
|
|
590
588
|
}
|
|
591
|
-
var
|
|
589
|
+
var __freeze = Object.freeze;
|
|
590
|
+
var __defProp = Object.defineProperty;
|
|
591
|
+
var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", {
|
|
592
|
+
value: __freeze(raw || cooked.slice())
|
|
593
|
+
}));
|
|
594
|
+
var _a;
|
|
595
|
+
var ConstrainedBox = styled__default.default(ui.Box)(_a || (_a = __template(["\n max-width: 280px;\n"])));
|
|
592
596
|
function Warning(_ref) {
|
|
593
597
|
let {
|
|
594
598
|
children
|
|
@@ -610,9 +614,9 @@ function Warning(_ref) {
|
|
|
610
614
|
}
|
|
611
615
|
function DocumentInternationalizationMenu(props) {
|
|
612
616
|
const {
|
|
613
|
-
schemaType,
|
|
614
617
|
documentId
|
|
615
618
|
} = props;
|
|
619
|
+
const schemaType = props.schemaType.name;
|
|
616
620
|
const {
|
|
617
621
|
languageField,
|
|
618
622
|
supportedLanguages
|
|
@@ -657,7 +661,7 @@ function DocumentInternationalizationMenu(props) {
|
|
|
657
661
|
const allLanguagesAreValid = react.useMemo(() => {
|
|
658
662
|
const valid = supportedLanguages.every(l => l.id && l.title);
|
|
659
663
|
if (!valid) {
|
|
660
|
-
console.warn(
|
|
664
|
+
console.warn('Not all languages are valid. It should be an array of objects with an "id" and "title" property. Or a function that returns an array of objects with an "id" and "title" property.', supportedLanguages);
|
|
661
665
|
}
|
|
662
666
|
return valid;
|
|
663
667
|
}, [supportedLanguages]);
|
|
@@ -765,7 +769,7 @@ const DeleteMetadataAction = props => {
|
|
|
765
769
|
const doc = draft || published;
|
|
766
770
|
const [isDialogOpen, setDialogOpen] = react.useState(false);
|
|
767
771
|
const onClose = react.useCallback(() => setDialogOpen(false), []);
|
|
768
|
-
const translations = react.useMemo(() => doc ? doc[TRANSLATIONS_ARRAY_NAME] : [], [doc]);
|
|
772
|
+
const translations = react.useMemo(() => doc && Array.isArray(doc[TRANSLATIONS_ARRAY_NAME]) ? doc[TRANSLATIONS_ARRAY_NAME] : [], [doc]);
|
|
769
773
|
const toast = ui.useToast();
|
|
770
774
|
const client = sanity.useClient({
|
|
771
775
|
apiVersion: API_VERSION
|
|
@@ -1181,14 +1185,8 @@ const documentInternationalization = sanity.definePlugin(config => {
|
|
|
1181
1185
|
metadataFields
|
|
1182
1186
|
} = pluginConfig;
|
|
1183
1187
|
if (schemaTypes.length === 0) {
|
|
1184
|
-
throw new Error("You must specify at least one schema type on which to enable document internationalization. Update the `schemaTypes` option in
|
|
1188
|
+
throw new Error("You must specify at least one schema type on which to enable document internationalization. Update the `schemaTypes` option in the documentInternationalization() configuration.");
|
|
1185
1189
|
}
|
|
1186
|
-
const renderLanguageFilter = (schemaType, documentId) => {
|
|
1187
|
-
return /* @__PURE__ */jsxRuntime.jsx(DocumentInternationalizationMenu, {
|
|
1188
|
-
schemaType,
|
|
1189
|
-
documentId
|
|
1190
|
-
});
|
|
1191
|
-
};
|
|
1192
1190
|
return {
|
|
1193
1191
|
name: "@sanity/document-internationalization",
|
|
1194
1192
|
studio: {
|
|
@@ -1239,7 +1237,10 @@ const documentInternationalization = sanity.definePlugin(config => {
|
|
|
1239
1237
|
schemaType,
|
|
1240
1238
|
documentId
|
|
1241
1239
|
} = ctx;
|
|
1242
|
-
return schemaTypes.includes(schemaType) && documentId ? [...prev,
|
|
1240
|
+
return schemaTypes.includes(schemaType) && documentId ? [...prev, props => DocumentInternationalizationMenu({
|
|
1241
|
+
...props,
|
|
1242
|
+
documentId
|
|
1243
|
+
})] : prev;
|
|
1243
1244
|
},
|
|
1244
1245
|
badges: (prev, _ref4) => {
|
|
1245
1246
|
let {
|