@sanity/document-internationalization 4.1.1 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +44 -36
  3. package/dist/_chunks-es/{resources.mjs → resources.js} +1 -1
  4. package/dist/{_chunks-cjs → _chunks-es}/resources.js.map +1 -1
  5. package/dist/index.d.ts +112 -88
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +1075 -1337
  8. package/dist/index.js.map +1 -1
  9. package/package.json +35 -69
  10. package/dist/_chunks-cjs/resources.js +0 -8
  11. package/dist/_chunks-es/resources.mjs.map +0 -1
  12. package/dist/_legacy/resources.esm.js +0 -9
  13. package/dist/_legacy/resources.esm.js.map +0 -1
  14. package/dist/index.d.mts +0 -108
  15. package/dist/index.esm.js +0 -1625
  16. package/dist/index.esm.js.map +0 -1
  17. package/dist/index.mjs +0 -1625
  18. package/dist/index.mjs.map +0 -1
  19. package/sanity.json +0 -8
  20. package/src/actions/DeleteMetadataAction.tsx +0 -93
  21. package/src/actions/DeleteTranslationAction.tsx +0 -102
  22. package/src/actions/DuplicateWithTranslationsAction.tsx +0 -251
  23. package/src/badges/index.tsx +0 -27
  24. package/src/components/BulkPublish/DocumentCheck.tsx +0 -90
  25. package/src/components/BulkPublish/Info.tsx +0 -28
  26. package/src/components/BulkPublish/InfoIcon.tsx +0 -34
  27. package/src/components/BulkPublish/index.tsx +0 -181
  28. package/src/components/ConstrainedBox.tsx +0 -6
  29. package/src/components/DeleteTranslationDialog/DocumentPreview.tsx +0 -19
  30. package/src/components/DeleteTranslationDialog/index.tsx +0 -111
  31. package/src/components/DeleteTranslationDialog/separateReferences.ts +0 -23
  32. package/src/components/DeleteTranslationFooter.tsx +0 -28
  33. package/src/components/DocumentInternationalizationContext.tsx +0 -47
  34. package/src/components/DocumentInternationalizationMenu.tsx +0 -235
  35. package/src/components/LanguageManage.tsx +0 -108
  36. package/src/components/LanguageOption.tsx +0 -259
  37. package/src/components/LanguagePatch.tsx +0 -67
  38. package/src/components/OptimisticallyStrengthen/ReferencePatcher.tsx +0 -50
  39. package/src/components/OptimisticallyStrengthen/index.tsx +0 -34
  40. package/src/components/Warning.tsx +0 -18
  41. package/src/constants.ts +0 -16
  42. package/src/hooks/useLanguageMetadata.tsx +0 -26
  43. package/src/hooks/useOpenInNewPane.tsx +0 -33
  44. package/src/i18n/index.ts +0 -21
  45. package/src/i18n/resources.ts +0 -7
  46. package/src/index.ts +0 -6
  47. package/src/plugin.tsx +0 -239
  48. package/src/schema/translation/metadata.ts +0 -68
  49. package/src/types.ts +0 -97
  50. package/src/utils/createReference.ts +0 -20
  51. package/src/utils/excludePaths.ts +0 -123
  52. package/v2-incompatible.js +0 -11
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Sanity.io
3
+ Copyright (c) 2024-2026 Sanity.io
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  # @sanity/document-internationalization
2
2
 
3
- All new rewrite exclusively for Sanity Studio v3
4
-
5
3
  - [@sanity/document-internationalization](#sanitydocument-internationalization)
6
4
  - [What this plugin solves](#what-this-plugin-solves)
7
5
  - [Many projects use both](#many-projects-use-both)
@@ -12,16 +10,13 @@ All new rewrite exclusively for Sanity Studio v3
12
10
  - [Advanced configuration](#advanced-configuration)
13
11
  - [Language field](#language-field)
14
12
  - [Excluding fields](#excluding-fields)
13
+ - [Document actions](#document-actions)
15
14
  - [Querying translations](#querying-translations)
16
15
  - [Querying with GROQ](#querying-with-groq)
17
16
  - [Querying with GraphQL](#querying-with-graphql)
18
17
  - [Note on document quotas](#note-on-document-quotas)
19
18
  - [Documentation](#documentation)
20
19
  - [License](#license)
21
- - [Develop \& test](#develop--test)
22
- - [Release new version](#release-new-version)
23
-
24
- ![v3 Studio with @sanity/document-internationalization v1 Installed](./docs/img/sanity-document-internationalization-v2.png)
25
20
 
26
21
  ## What this plugin solves
27
22
 
@@ -42,7 +37,7 @@ This plugin adds features to the Studio to improve handling **document-level tra
42
37
  - Hooks and components to use throughout your custom components to handle translations
43
38
  - Document Badges to highlight the language version of a document
44
39
 
45
- For **field-level translations** you should use the [sanity-plugin-internationalized-array](https://github.com/sanity-io/sanity-plugin-internationalized-array).
40
+ For **field-level translations** you should use the [sanity-plugin-internationalized-array](https://github.com/sanity-io/plugins/tree/main/plugins/sanity-plugin-internationalized-array).
46
41
 
47
42
  ### Many projects use both
48
43
 
@@ -52,7 +47,7 @@ A good use of **field-level** translation could be a `person` schema. It could h
52
47
 
53
48
  ## Upgrade
54
49
 
55
- [See the upgrade guide](./docs/00-upgrade-from-v1.md) for instructions on how to upgrade from the previous version of Document Internationalization.
50
+ If upgrading from a previous version (v1), please see the [upgrade documentation](https://github.com/sanity-io/document-internationalization/blob/main/docs/00-upgrade-from-v1.md) in the original repository.
56
51
 
57
52
  ## Install
58
53
 
@@ -126,7 +121,7 @@ export const defineConfig({
126
121
 
127
122
  // Optional
128
123
  // Customizes the name of the language field
129
- languageField: `language`, // defauts to "language"
124
+ languageField: `language`, // defaults to "language"
130
125
 
131
126
  // Optional
132
127
  // Keep translation.metadata references weak
@@ -205,6 +200,37 @@ defineField({
205
200
  }),
206
201
  ```
207
202
 
203
+ ### Document actions
204
+
205
+ This package exports hook-based document actions that you can add in your Studio `document.actions` configuration:
206
+
207
+ - `useDeleteTranslationAction`
208
+ - `useDuplicateWithTranslationsAction`
209
+
210
+ The legacy action exports `DeleteTranslationAction` and `DuplicateWithTranslationsAction` are deprecated.
211
+
212
+ ```ts
213
+ import {
214
+ useDeleteTranslationAction,
215
+ useDuplicateWithTranslationsAction,
216
+ } from '@sanity/document-internationalization'
217
+
218
+ export default defineConfig({
219
+ // ... all other config
220
+ document: {
221
+ actions: (prev, context) => {
222
+ const translatedSchemaTypes = ['lesson', 'article']
223
+
224
+ if (translatedSchemaTypes.includes(context.schemaType)) {
225
+ return [...prev, useDeleteTranslationAction, useDuplicateWithTranslationsAction]
226
+ }
227
+
228
+ return prev
229
+ },
230
+ },
231
+ })
232
+ ```
233
+
208
234
  ## Querying translations
209
235
 
210
236
  ### Querying with GROQ
@@ -234,10 +260,7 @@ Fortunately, the Sanity GraphQL API contains a similar filter for document refer
234
260
  ```graphql
235
261
  # In this example we retrieve a lesson by its `slug.current` field value
236
262
  query GetLesson($language: String!, $slug: String!) {
237
- allLesson(
238
- limit: 1
239
- where: {language: {eq: $language}, slug: {current: {eq: $slug}}}
240
- ) {
263
+ allLesson(limit: 1, where: {language: {eq: $language}, slug: {current: {eq: $slug}}}) {
241
264
  _id
242
265
  title
243
266
  language
@@ -273,31 +296,16 @@ This means if you have 100 documents and they are all translated into 3 language
273
296
 
274
297
  ## Documentation
275
298
 
276
- For more advanced topics see the documentation. For installation see [Usage](#usage).
299
+ For more advanced topics see the [original repository documentation](https://github.com/sanity-io/document-internationalization/tree/main/docs).
277
300
 
278
- - [Upgrade from v1](./docs/00-upgrade-from-v1.md)
279
- - [Creating translations of singleton documents](./docs/01-singleton-documents.md)
280
- - [Importing and creating documents](./docs/02-importing-and-creating-documents.md)
281
- - [Deleting translated documents](./docs/03-deleting-translated-documents.md)
282
- - [Importing plugin components](./docs/04-importing-plugin-components.md)
283
- - [Allowing the same slug on different language versions](./docs/05-allowing-the-same-slug-for-translations.md)
284
- - [Remove default new document template](./docs/06-remove-default-new-document-template.md)
301
+ - [Upgrade from v1](https://github.com/sanity-io/document-internationalization/blob/main/docs/00-upgrade-from-v1.md)
302
+ - [Creating translations of singleton documents](https://github.com/sanity-io/document-internationalization/blob/main/docs/01-singleton-documents.md)
303
+ - [Importing and creating documents](https://github.com/sanity-io/document-internationalization/blob/main/docs/02-importing-and-creating-documents.md)
304
+ - [Deleting translated documents](https://github.com/sanity-io/document-internationalization/blob/main/docs/03-deleting-translated-documents.md)
305
+ - [Importing plugin components](https://github.com/sanity-io/document-internationalization/blob/main/docs/04-importing-plugin-components.md)
306
+ - [Allowing the same slug on different language versions](https://github.com/sanity-io/document-internationalization/blob/main/docs/05-allowing-the-same-slug-for-translations.md)
307
+ - [Remove default new document template](https://github.com/sanity-io/document-internationalization/blob/main/docs/06-remove-default-new-document-template.md)
285
308
 
286
309
  ## License
287
310
 
288
311
  [MIT](LICENSE) © Sanity.io
289
-
290
- ## Develop & test
291
-
292
- This plugin uses [@sanity/plugin-kit](https://github.com/sanity-io/plugin-kit)
293
- with default configuration for build & watch scripts.
294
-
295
- See [Testing a plugin in Sanity Studio](https://github.com/sanity-io/plugin-kit#testing-a-plugin-in-sanity-studio)
296
- on how to run this plugin with hot reload in the studio.
297
-
298
- ### Release new version
299
-
300
- Run ["CI & Release" workflow](https://github.com/sanity-io/sanity-plugin-workflow/actions/workflows/main.yml).
301
- Make sure to select the main branch and check "Release new version".
302
-
303
- Semantic release will only release on configured branches, so it is safe to run the release on any branch.
@@ -6,4 +6,4 @@ var resources = {
6
6
  export {
7
7
  resources as default
8
8
  };
9
- //# sourceMappingURL=resources.mjs.map
9
+ //# sourceMappingURL=resources.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sources":["../../src/i18n/resources.ts"],"sourcesContent":["export default {\n 'action.duplicate.label': 'Duplicate with translations',\n 'action.duplicate.disabled.missing-metadata':\n 'The document cannot be duplicated because the metadata document is missing',\n 'action.duplicate.disabled.multiple-metadata':\n 'The document cannot be duplicated because there are multiple metadata documents',\n}\n"],"names":[],"mappings":";AAAA,IAAA,YAAe;AAAA,EACb,0BAA0B;AAAA,EAC1B,8CACE;AAAA,EACF,+CACE;AACJ;;"}
1
+ {"version":3,"file":"resources.js","sources":["../../src/i18n/resources.ts"],"sourcesContent":["export default {\n 'action.duplicate.label': 'Duplicate with translations',\n 'action.duplicate.disabled.missing-metadata':\n 'The document cannot be duplicated because the metadata document is missing',\n 'action.duplicate.disabled.multiple-metadata':\n 'The document cannot be duplicated because there are multiple metadata documents',\n}\n"],"names":[],"mappings":"AAAA,IAAA,YAAe;AAAA,EACb,0BAA0B;AAAA,EAC1B,8CACE;AAAA,EACF,+CACE;AACJ;"}
package/dist/index.d.ts CHANGED
@@ -1,92 +1,111 @@
1
- /// <reference types="react" />
2
-
3
- import {DocumentActionComponent} from 'sanity'
4
- import type {FieldDefinition} from 'sanity'
5
- import {JSX} from 'react'
6
- import type {KeyedObject} from 'sanity'
7
- import type {ObjectSchemaType} from 'sanity'
8
- import {Plugin as Plugin_2} from 'sanity'
9
- import type {Reference} from 'sanity'
10
- import type {SanityClient} from 'sanity'
11
- import type {SanityDocument} from 'sanity'
12
- import type {SanityDocumentLike} from 'sanity'
13
-
14
- export declare const DeleteTranslationAction: DocumentActionComponent
15
-
16
- export declare const documentInternationalization: Plugin_2<PluginConfig>
17
-
18
- export declare function DocumentInternationalizationMenu(
19
- props: DocumentInternationalizationMenuProps
20
- ): JSX.Element | null
21
-
22
- export declare type DocumentInternationalizationMenuProps = {
23
- schemaType: ObjectSchemaType
24
- documentId: string
25
- }
26
-
27
- export declare interface DocumentInternationalizationSchemaOpts {
1
+ import * as sanity0 from "sanity";
2
+ import { DocumentActionDescription, DocumentActionProps, FieldDefinition, ObjectSchemaType, Reference, SanityClient, SanityDocument, SanityDocumentLike } from "sanity";
3
+ import { InternationalizedArrayItem } from "sanity-plugin-internationalized-array";
4
+ /**
5
+ * Optional Document action that removes a single translation from the metadata document
6
+ * and optionally deletes the translation document. Opens a confirmation dialog
7
+ * showing which metadata entries reference the document and any other references
8
+ * that may exist. When the document has translation references, those references
9
+ * are unset; otherwise the document is deleted directly.
10
+ *
11
+ * To use it, you need to add it to the document actions config
12
+ * ```
13
+ * const translatedSchemaTypes = ['lesson', 'article'];
14
+ * document: {
15
+ * actions: (prev, {schemaType}) => {
16
+ * if (translatedSchemaTypes.includes(schemaType)) {
17
+ * return [...prev, useDeleteTranslationAction]
18
+ * }
19
+ * return prev
20
+ * },
21
+ * },
22
+ * ```
23
+ */
24
+ declare const useDeleteTranslationAction: {
25
+ (props: DocumentActionProps): DocumentActionDescription;
26
+ action: string;
27
+ displayName: string;
28
+ };
29
+ /**
30
+ * @deprecated use useDeleteTranslationAction instead
31
+ * Will be removed in the next major version
32
+ */
33
+ declare const DeleteTranslationAction: (props: DocumentActionProps) => DocumentActionDescription;
34
+ /**
35
+ * Optional Document action that duplicates a document along with all its translations
36
+ * and the associated metadata document. The workflow duplicates each translated
37
+ * document, duplicates the metadata document, patches the new metadata to
38
+ * reference the new translation copies, and navigates to the duplicated document.
39
+ * Disabled when the user lacks permissions, metadata is missing or ambiguous,
40
+ * or the underlying duplicate operation is unavailable.
41
+ */
42
+ declare const useDuplicateWithTranslationsAction: {
43
+ ({
44
+ id,
45
+ type,
46
+ onComplete
47
+ }: DocumentActionProps): DocumentActionDescription;
48
+ action: string;
49
+ displayName: string;
50
+ };
51
+ /**
52
+ * @deprecated use useDuplicateWithTranslationsAction instead
53
+ * Will be removed in the next major version
54
+ */
55
+ declare const DuplicateWithTranslationsAction: {
56
+ (props: DocumentActionProps): DocumentActionDescription;
57
+ action: string;
58
+ displayName: string;
59
+ };
60
+ type Language = {
61
+ id: Intl.UnicodeBCP47LocaleIdentifier;
62
+ title: string;
63
+ };
64
+ type SupportedLanguages = Language[] | ((client: SanityClient) => Promise<Language[]>);
65
+ type PluginCallbackArgs = {
66
+ sourceDocument: SanityDocument;
67
+ newDocument: SanityDocument;
68
+ sourceLanguageId: string;
69
+ destinationLanguageId: string;
70
+ metaDocumentId: string;
71
+ client: SanityClient;
72
+ };
73
+ type PluginConfig = {
74
+ supportedLanguages: SupportedLanguages;
75
+ schemaTypes: string[];
76
+ languageField?: string;
77
+ weakReferences?: boolean;
78
+ bulkPublish?: boolean;
79
+ metadataFields?: FieldDefinition[];
80
+ apiVersion?: string;
81
+ allowCreateMetaDoc?: boolean;
82
+ callback?: ((args: PluginCallbackArgs) => Promise<void>) | null;
83
+ };
84
+ type PluginConfigContext = Required<PluginConfig> & {
85
+ supportedLanguages: Language[];
86
+ };
87
+ type TranslationReference = InternationalizedArrayItem<Reference> & {
88
+ _type: 'internationalizedArrayReferenceValue';
89
+ value: Reference;
90
+ };
91
+ type Metadata = {
92
+ _id: string;
93
+ _createdAt: string;
94
+ translations: TranslationReference[];
95
+ };
96
+ type MetadataDocument = SanityDocumentLike & {
97
+ schemaTypes: string[];
98
+ translations: TranslationReference[];
99
+ };
100
+ type DocumentInternationalizationMenuProps = {
101
+ schemaType: ObjectSchemaType;
102
+ documentId: string;
103
+ };
104
+ interface DocumentInternationalizationSchemaOpts {
28
105
  documentInternationalization?: {
29
- /** Set to true to disable duplication of this field or type */
30
- exclude?: boolean
31
- }
32
- }
33
-
34
- export declare const DuplicateWithTranslationsAction: DocumentActionComponent
35
-
36
- export declare type Language = {
37
- id: Intl.UnicodeBCP47LocaleIdentifier
38
- title: string
39
- }
40
-
41
- export declare type Metadata = {
42
- _id: string
43
- _createdAt: string
44
- translations: TranslationReference[]
45
- }
46
-
47
- export declare type MetadataDocument = SanityDocumentLike & {
48
- schemaTypes: string[]
49
- translations: TranslationReference[]
50
- }
51
-
52
- export declare type PluginCallbackArgs = {
53
- sourceDocument: SanityDocument
54
- newDocument: SanityDocument
55
- sourceLanguageId: string
56
- destinationLanguageId: string
57
- metaDocumentId: string
58
- client: SanityClient
106
+ /** Set to true to disable duplication of this field or type */exclude?: boolean;
107
+ };
59
108
  }
60
-
61
- export declare type PluginConfig = {
62
- supportedLanguages: SupportedLanguages
63
- schemaTypes: string[]
64
- languageField?: string
65
- weakReferences?: boolean
66
- bulkPublish?: boolean
67
- metadataFields?: FieldDefinition[]
68
- apiVersion?: string
69
- allowCreateMetaDoc?: boolean
70
- callback?: ((args: PluginCallbackArgs) => Promise<void>) | null
71
- }
72
-
73
- export declare type PluginConfigContext = Required<PluginConfig> & {
74
- supportedLanguages: Language[]
75
- }
76
-
77
- export declare type SupportedLanguages =
78
- | Language[]
79
- | ((client: SanityClient) => Promise<Language[]>)
80
-
81
- export declare type TranslationReference = KeyedObject & {
82
- _type: 'internationalizedArrayReferenceValue'
83
- value: Reference
84
- }
85
-
86
- export declare function useDocumentInternationalizationContext(): PluginConfigContext
87
-
88
- export {}
89
-
90
109
  declare module 'sanity' {
91
110
  interface ArrayOptions extends DocumentInternationalizationSchemaOpts {}
92
111
  interface BlockOptions extends DocumentInternationalizationSchemaOpts {}
@@ -105,4 +124,9 @@ declare module 'sanity' {
105
124
  interface TextOptions extends DocumentInternationalizationSchemaOpts {}
106
125
  interface UrlOptions extends DocumentInternationalizationSchemaOpts {}
107
126
  interface EmailOptions extends DocumentInternationalizationSchemaOpts {}
108
- }
127
+ } //# sourceMappingURL=types.d.ts.map
128
+ declare function useDocumentInternationalizationContext(): PluginConfigContext;
129
+ declare function DocumentInternationalizationMenu(props: DocumentInternationalizationMenuProps): React.JSX.Element | null;
130
+ declare const documentInternationalization: sanity0.Plugin<PluginConfig>;
131
+ export { DeleteTranslationAction, DocumentInternationalizationMenu, DocumentInternationalizationMenuProps, DocumentInternationalizationSchemaOpts, DuplicateWithTranslationsAction, Language, Metadata, MetadataDocument, PluginCallbackArgs, PluginConfig, PluginConfigContext, SupportedLanguages, TranslationReference, documentInternationalization, useDeleteTranslationAction, useDocumentInternationalizationContext, useDuplicateWithTranslationsAction };
132
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/actions/DeleteTranslationAction.tsx","../src/actions/DuplicateWithTranslationsAction.tsx","../src/types.ts","../src/components/DocumentInternationalizationContext.tsx","../src/components/DocumentInternationalizationMenu.tsx","../src/plugin.tsx"],"mappings":";;;;;;AAkCA;;;;;;;;;;;AA+FA;;;;;;cA/Fa,0BAAA;EAAA,QACJ,mBAAA,GACN,yBAAA;;;;;;;;cA6FU,uBAAA,GAA2B,KAAA,EAAO,mBAAA,KAAsB,yBAAA;;;;AA/FrE;;;;;cCkBa,kCAAA;EAAA;;;;KAKV,mBAAA,GAAsB,yBAAA;;;;;ADwEzB;;;cC2Ha,+BAAA;EAAA,QACJ,mBAAA,GACN,yBAAA;;;;KCpPS,QAAA;EACV,EAAA,EAAI,IAAA,CAAK,4BAAA;EACT,KAAA;AAAA;AAAA,KAGU,kBAAA,GAAqB,QAAA,OAAe,MAAA,EAAQ,YAAA,KAAiB,OAAA,CAAQ,QAAA;AAAA,KAErE,kBAAA;EACV,cAAA,EAAgB,cAAA;EAChB,WAAA,EAAa,cAAA;EACb,gBAAA;EACA,qBAAA;EACA,cAAA;EACA,MAAA,EAAQ,YAAA;AAAA;AAAA,KAGE,YAAA;EACV,kBAAA,EAAoB,kBAAA;EACpB,WAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,cAAA,GAAiB,eAAA;EACjB,UAAA;EACA,kBAAA;EACA,QAAA,KAAa,IAAA,EAAM,kBAAA,KAAuB,OAAA;AAAA;AAAA,KAMhC,mBAAA,GAAsB,QAAA,CAAS,YAAA;EACzC,kBAAA,EAAoB,QAAA;AAAA;AAAA,KAGV,oBAAA,GAAuB,0BAAA,CAA2B,SAAA;EAC5D,KAAA;EACA,KAAA,EAAO,SAAA;AAAA;AAAA,KAGG,QAAA;EACV,GAAA;EACA,UAAA;EACA,YAAA,EAAc,oBAAA;AAAA;AAAA,KAGJ,gBAAA,GAAmB,kBAAA;EAC7B,WAAA;EACA,YAAA,EAAc,oBAAA;AAAA;AAAA,KAGJ,qCAAA;EACV,UAAA,EAAY,gBAAA;EACZ,UAAA;AAAA;AAAA,UAIe,sCAAA;EACf,4BAAA;ID4LD,+DC1LG,OAAA;EAAA;AAAA;AAAA;EAAA,UAKQ,YAAA,SAAqB,sCAAA;EAAA,UACrB,YAAA,SAAqB,sCAAA;EAAA,UACrB,cAAA,SAAuB,sCAAA;EAAA,UACvB,4BAAA,SAAqC,sCAAA;EAAA,UACrC,WAAA,SAAoB,sCAAA;EAAA,UACpB,eAAA,SAAwB,sCAAA;EAAA,UACxB,WAAA,SAAoB,sCAAA;EAAA,UACpB,eAAA,SAAwB,sCAAA;EAAA,UACxB,YAAA,SAAqB,sCAAA;EAAA,UACrB,aAAA,SAAsB,sCAAA;EAAA,UACtB,aAAA,SAAsB,sCAAA;EAAA,UACtB,oBAAA,SAA6B,sCAAA;EAAA,UAC7B,WAAA,SAAoB,sCAAA;EAAA,UACpB,aAAA,SAAsB,sCAAA;EAAA,UACtB,WAAA,SAAoB,sCAAA;EAAA,UACpB,UAAA,SAAmB,sCAAA;EAAA,UACnB,YAAA,SAAqB,sCAAA;AAAA;AAAA,iBChFjB,sCAAA,CAAA,GAA0C,mBAAA;AAAA,iBCO1C,gCAAA,CACd,KAAA,EAAO,qCAAA,GACN,KAAA,CAAM,GAAA,CAAI,OAAA;AAAA,cCJA,4BAAA,EAA4B,OAAA,CAAA,MAAA,CAAA,YAAA"}