@sanity/document-internationalization 1.0.1 → 2.0.0-studio-v3-plugin-v2.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.
Files changed (110) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +133 -59
  3. package/lib/index.esm.js +1 -1
  4. package/lib/index.esm.js.map +1 -1
  5. package/lib/index.js +1 -1
  6. package/lib/index.js.map +1 -1
  7. package/lib/src/index.d.ts +7 -190
  8. package/package.json +18 -62
  9. package/src/badges/index.tsx +23 -0
  10. package/src/components/BulkPublish/DocumentCheck.tsx +59 -0
  11. package/src/components/BulkPublish/index.tsx +100 -0
  12. package/src/components/LanguageManage.tsx +25 -0
  13. package/src/components/LanguageOption.tsx +166 -0
  14. package/src/components/LanguagePatch.tsx +64 -0
  15. package/src/components/MenuButton.tsx +131 -0
  16. package/src/constants.ts +1 -0
  17. package/src/hooks/useLanguageMetadata.tsx +21 -0
  18. package/src/hooks/useOpenInNewPane.tsx +27 -0
  19. package/src/index.ts +1 -6
  20. package/src/plugin.tsx +170 -0
  21. package/src/schema/translation/metadata.ts +57 -0
  22. package/src/types.ts +25 -0
  23. package/v2-incompatible.js +1 -1
  24. package/src/actions/DeleteWithi18nAction.tsx +0 -118
  25. package/src/actions/DuplicateWithi18nAction.tsx +0 -77
  26. package/src/actions/PublishWithi18nAction.ts +0 -118
  27. package/src/actions/index.ts +0 -42
  28. package/src/badges/LanguageBadge.tsx +0 -22
  29. package/src/constants/I18nDelimiter.ts +0 -1
  30. package/src/constants/I18nPrefix.ts +0 -1
  31. package/src/constants/IdStructure.ts +0 -4
  32. package/src/constants/LanguageCultures.ts +0 -902
  33. package/src/constants/ReferenceBehavior.ts +0 -5
  34. package/src/constants/SupportedEmojiFlagCodes.ts +0 -251
  35. package/src/constants/UiMessages.ts +0 -56
  36. package/src/constants/index.ts +0 -7
  37. package/src/documentI18n.tsx +0 -33
  38. package/src/hooks/index.ts +0 -2
  39. package/src/hooks/useConfig.ts +0 -22
  40. package/src/hooks/useDelayedFlag.ts +0 -31
  41. package/src/language-select/components/LanguageSelect/LanguageConfigContext.tsx +0 -4
  42. package/src/language-select/components/LanguageSelect/LanguageSelect.tsx +0 -188
  43. package/src/language-select/components/LanguageSelect/LanguageSelectContext.ts +0 -16
  44. package/src/language-select/components/LanguageSelect/LanguageSelectLabel.tsx +0 -12
  45. package/src/language-select/components/LanguageSelect/LanguageSelectList.tsx +0 -84
  46. package/src/language-select/components/LanguageSelect/LanguageSelectListItem.tsx +0 -251
  47. package/src/language-select/components/LanguageSelect/index.tsx +0 -25
  48. package/src/language-select/components/SingleFlag/SingleFlag.tsx +0 -44
  49. package/src/language-select/components/SingleFlag/allEmojiFlagCodes.ts +0 -251
  50. package/src/language-select/components/SingleFlag/index.ts +0 -1
  51. package/src/language-select/components/SplitPaneIcon/SplitPaneIcon.tsx +0 -25
  52. package/src/language-select/components/SplitPaneIcon/index.ts +0 -1
  53. package/src/language-select/components/index.ts +0 -2
  54. package/src/language-select/hooks/index.ts +0 -1
  55. package/src/language-select/hooks/useLanguages.ts +0 -37
  56. package/src/language-select/hooks/useListeningQuery.ts +0 -66
  57. package/src/structure/IDefaultDocumentNodeStructureProps.ts +0 -4
  58. package/src/structure/components/MaintenanceTab/MaintenanceTab.tsx +0 -13
  59. package/src/structure/components/MaintenanceTab/MaintenanceTabContent.tsx +0 -259
  60. package/src/structure/components/MaintenanceTab/index.ts +0 -1
  61. package/src/structure/components/MaintenanceTabResult/MaintenanceTabResult.tsx +0 -44
  62. package/src/structure/components/MaintenanceTabResult/index.ts +0 -1
  63. package/src/structure/components/MaintenanceTabTypeSelector/MaintenanceTabTypeSelector.tsx +0 -56
  64. package/src/structure/components/MaintenanceTabTypeSelector/index.ts +0 -1
  65. package/src/structure/hooks/index.ts +0 -1
  66. package/src/structure/hooks/useDocumentsInformation.ts +0 -110
  67. package/src/structure/index.tsx +0 -120
  68. package/src/structure/utils/fixBaseDocumentRefs.ts +0 -30
  69. package/src/structure/utils/fixBaseLanguageMismatch.ts +0 -21
  70. package/src/structure/utils/fixIdStructureMismatchDocuments.ts +0 -72
  71. package/src/structure/utils/fixLanguageFields.ts +0 -32
  72. package/src/structure/utils/fixOrphanedDocuments.ts +0 -22
  73. package/src/structure/utils/fixTranslationRefs.ts +0 -50
  74. package/src/structure/utils/index.ts +0 -6
  75. package/src/types/IEditState.ts +0 -6
  76. package/src/types/IExtendedLanguageObject.ts +0 -6
  77. package/src/types/ILanguageObject.ts +0 -4
  78. package/src/types/ILanguageQuery.ts +0 -13
  79. package/src/types/IResolverProps.ts +0 -10
  80. package/src/types/ITranslationRef.ts +0 -6
  81. package/src/types/IType.ts +0 -40
  82. package/src/types/IUseDocumentOperationResult.ts +0 -11
  83. package/src/types/TFieldNamesConfig.ts +0 -5
  84. package/src/types/TLanguage.ts +0 -3
  85. package/src/types/TLanguagesOption.ts +0 -4
  86. package/src/types/TSchema.ts +0 -6
  87. package/src/types/Ti18nConfig.ts +0 -33
  88. package/src/types/Ti18nDocument.ts +0 -14
  89. package/src/types/Ti18nSchema.ts +0 -13
  90. package/src/types/index.ts +0 -15
  91. package/src/utils/applyConfig.ts +0 -43
  92. package/src/utils/baseToTop.ts +0 -5
  93. package/src/utils/buildDocId.ts +0 -8
  94. package/src/utils/createSanityReference.ts +0 -11
  95. package/src/utils/getBaseIdFromId.ts +0 -20
  96. package/src/utils/getBaseLanguage.ts +0 -6
  97. package/src/utils/getFlag.ts +0 -38
  98. package/src/utils/getLanguageFromDocument.ts +0 -9
  99. package/src/utils/getLanguageFromId.ts +0 -13
  100. package/src/utils/getLanguagesFromOption.ts +0 -40
  101. package/src/utils/getTranslationsForId.ts +0 -39
  102. package/src/utils/index.ts +0 -14
  103. package/src/utils/makeObjectKey.ts +0 -3
  104. package/src/utils/normalizeLanguageList.ts +0 -26
  105. package/src/utils/serializePath.ts +0 -11
  106. package/src/utils/updateIntlFieldsForDocument.ts +0 -79
  107. package/src/utils/useSanityClient.ts +0 -6
  108. package/src/validators/index.ts +0 -1
  109. package/src/validators/isSlugUnique.ts +0 -56
  110. package/src/withDocumentI18nPlugin.ts +0 -24
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2022 Sanity.io
3
+ Copyright (c) 2022 Simeon Griggs
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,92 +1,162 @@
1
- # Document Internationalization Plugin for Sanity.io
1
+ # @sanity/document-internationalization
2
2
 
3
- > This is a **Sanity Studio v3** plugin.
4
- > For the v2 version, please refer to the [v2-branch](https://github.com/sanity-io/document-internationalization/studio-v2).
3
+ - This is a completely new, **Sanity Studio v3 exclusive version** of @sanity/document-internationalization released as v2.0.0 which contains new features and requires content migrations to upgrade from previous versions. There is example code below.
5
4
 
6
- [![npm version](https://img.shields.io/npm/v/@sanity/document-internationalization.svg?style=flat)](https://www.npmjs.com/package/@sanity/document-internationalization)
5
+ - For the **Studio v3 compatible version** of the original plugin, please install v1.0.0 and above.
7
6
 
8
- ![Document Level Internationalization UI](docs/img/document-level-translation.gif)
7
+ - For the **Studio v2 version** (plugin version 0), please refer to the [v2-branch](https://github.com/sanity-io/document-internationalization) and install v0.0.0 and above.
9
8
 
10
- ## What this plugin solves
9
+ ![v3 Studio with @sanity/document-internationalization v1 Installed](/img/sanity-document-internationalization-v2.png)
11
10
 
12
- There are two popular methods of internationalization in Sanity Studio:
11
+ A complete rewrite of the original Document Internationalization plugin, exclusively for Sanity Studio v3. Major **benefits** from the previous versions include:
13
12
 
14
- - **Document-level translation**
15
- - A unique document version for every language
16
- - Joined together by references and/or a predictable `_id`
17
- - Best for documents that have unique, language-specific fields and no common content across languages
18
- - Best for translating content using Portable Text
19
- - **Field-level translation**
20
- - A single document with many languages of content
21
- - Achieved by mapping over languages on each field, to create an object
22
- - Best for documents that have a mix of language-specific and common fields
23
- - Not recommended for Portable Text
13
+ - Create new documents in any language and link references later
14
+ - Translation references are written to a separate "meta" document
15
+ - Updates to one translation no longer affect the change history of others
16
+ - Does not require custom - nor modify the built-in - Document Actions
17
+ - Changes made to one translation do not patch changes to other documents
18
+ - Configurable "language" field on documents
19
+ - Built-in static and parameterized initial value templates for new documents
24
20
 
25
- This plugin adds features to the Studio to improve handling **document-level translations**.
21
+ ## Note on Document counts
26
22
 
27
- - A Language Selector to create and browse language-specific versions of each Document
28
- - Document Actions to update base and translated documents to ensure references stay in tact
29
- - Document Badges to highlight the language version of a document
23
+ In previous versions of this plugin, translations were stored as an array of references on the actual documents. This required a base language and lead to messy transaction histories.
30
24
 
31
- For **field-level translations** you should use the [@sanity/language-filter plugin](https://www.npmjs.com/package/@sanity/language-filter).
25
+ In this version of the plugin, translations of a document are stored as an array of references in a document of the `_type: translation.metadata`, and one is created for every document that has translations. A document with no translations will not have a metadata document.
32
26
 
33
- *Studio V3 note*: language-filter is not available for V3 yet.
27
+ This means if you have 100 documents and they are all translated into 3 languages, you will have 400 documents. Keep this in mind for extremely high-volume datasets.
34
28
 
35
- ### Many projects use both!
29
+ ## Install
36
30
 
37
- *Studio V3 note*: language-filter is not available for V3 yet.
38
-
39
- An example of document-level translation could be a `lesson` schema, the `title`, `slug` and `content` fields would be unique in every language.
31
+ ```
32
+ npm install --save @sanity/document-internationalization@studio-v3-plugin-v2
33
+ ```
40
34
 
41
- A good use of field-level translation could be a `person` schema. It could have the same `name` and `image` in every language, but only the `biography` would need translating.
35
+ or
42
36
 
43
- ## Studio V3 known issues
37
+ ```
38
+ yarn add @sanity/document-internationalization@studio-v3-plugin-v2
39
+ ```
44
40
 
45
- Studio V3 does not implement language-filter yet. This means that the language button has moved into the document editor flow for the time being.
46
- We will be looking to restore the button placement during Studio V3 dev-preview.
41
+ ## Usage
42
+
43
+ Add it as a plugin in sanity.config.ts (or .js):
44
+
45
+ ```ts
46
+
47
+ // sanity.config.ts
48
+ import {createConfig} from 'sanity'
49
+ import {documentInternationalization} from '@sanity/document-internationalization'
50
+
51
+ export const createConfig({
52
+ // ...
53
+ plugins: [
54
+ documentInternationalization({
55
+ // Required
56
+ supportedLanguages: [
57
+ {id: 'nb', title: 'Norwegian (Bokmål)'},
58
+ {id: 'nn', title: 'Norwegian (Nynorsk)'},
59
+ {id: 'en', title: 'English'}
60
+ ],
61
+ schemaTypes: ['lesson'],
62
+ // Optional
63
+ languageField: `language` // defauts to "language"
64
+ // Requires access to the Publishing API
65
+ bulkPublish: true // defaults to false
66
+ })
67
+ ]
68
+ })
69
+ ```
47
70
 
48
- ## Installation
71
+ The schema types that use document internationalization must also have a `string` field type with the same name configured in the `languageField` setting. You can hide this field since the plugin will handle writing patches to it.
49
72
 
50
- From the same directory as the Studio run:
73
+ ```ts
74
+ // ./schema/lesson.ts
51
75
 
52
- ```sh
53
- npm install --save @sanity/document-internationalization
76
+ // ...all other settings
77
+ defineField({
78
+ name: 'language',
79
+ type: 'string',
80
+ readOnly: true,
81
+ hidden: true,
82
+ })
54
83
  ```
55
84
 
56
- or
57
-
58
- ```sh
59
- yarn add @sanity/document-internationalization
85
+ ## Querying with GROQ
86
+
87
+ To query a single document and all its translations, we use the `references()` function in GROQ.
88
+
89
+ ```json5
90
+ // All `lesson` documents of a single language
91
+ *[_type == "lesson" && language == $language]{
92
+ // Just these fields
93
+ title,
94
+ slug,
95
+ language,
96
+ // Get the translations metadata
97
+ // And resolve the `value` field in each array item
98
+ "_translations": *[_type == "translation.metadata" && references(^._id)].translations[].value->{
99
+ title,
100
+ slug,
101
+ language
102
+ },
103
+ }
60
104
  ```
61
105
 
106
+ ## Querying with GraphQL
107
+
108
+ Fortunately, the Sanity GraphQL API contains a similar filter for document references.
109
+
110
+ ```graphql
111
+ # In this example we retrieve a lesson by its `slug.current` field value
112
+ query GetLesson($language: String!, $slug: String!) {
113
+ allLesson(limit: 1, where: {language: {eq: $language}, slug: {current: {eq: $slug}}}) {
114
+ _id
115
+ title
116
+ language
117
+ slug {
118
+ current
119
+ }
120
+ }
121
+ }
122
+
123
+ # And then can run this query to find translation metadata documents that use its ID
124
+ query GetTranslations($id: ID!) {
125
+ allTranslationMetadata(where: {_: {references: $id}}) {
126
+ translations {
127
+ _key
128
+ value {
129
+ title
130
+ slug {
131
+ current
132
+ }
133
+ }
134
+ }
135
+ }
136
+ }
137
+ ```
62
138
 
63
- The plugin is now installed, but you will need to complete the following steps to see the Document Translation UI:
139
+ ## Migrating from v0 / v1
64
140
 
65
- ## Setup next steps
66
- 1. [Enabling and configuring the plugin](docs/enabling-and-configuring.md)
67
- To declare available Languages and other settings
68
- 2. [Activating internationalization on schema](docs/activating-internationalization-on-schema.md)
69
- To enable all the above features on schema
70
- 3. [Customise Desk Structure](docs/desk-structure.md)
71
- To filter documents down to the base language version
141
+ There are two scripts in the `./migrations` folder of this repository. They contain scripts that should help move your content over – however, they may require updating to match your current settings.
72
142
 
73
- ## Other documentation
143
+ **These have not been thoroughly tested on all platforms. Please take a backup before proceeding. Test on a duplicate dataset.**
74
144
 
75
- 1. [Known Caveats](docs/known-caveats.md)
76
- 2. [Data structure](docs/datastructure-intl-doc.md)
77
- 3. [Translation Maintenance](docs/translation-maintenance.md)
78
- 4. [GraphQL support](docs/graphql-intl-doc.md)
79
- 5. [Advanced languages](docs/advanced-languages.md)
80
- 6. [Usage with custom publish action](docs/usage-with-custom-publish.md)
81
- 7. [If you don't see the plugin document actions](docs/usage-with-custom-publish.md#add-additional-actions)
82
- 8. [GROQ query examples](/docs/groq-query-examples.md)
145
+ - `./migrations/renameField.ts` will update the language field on translated documents
146
+ - `./migrations/createMetadata.ts` will create metadata documents for the arrays of references and unset those fields from translated documents
83
147
 
84
- ## Migrating from sanity-plugin-intl-input
148
+ ## Roadmap
85
149
 
86
- While most of the UI is the same in the official version of this plugin there are some breaking changes you should be aware of before migrating:
150
+ - [ ] Asynchronous language plugin config option
151
+ - [ ] Export a validator to allow the same slug on connected translations
152
+ - [ ] Guidance to copy/paste changes between documents
153
+ - [ ] Guidance on handling singletons
154
+ - [ ] Add extra fields to the metadata document
87
155
 
88
- [Coming from sanity-plugin-intl-input](docs/coming-from-sanity-plugin-intl-input.md)
156
+ ## License
89
157
 
158
+ MIT © Simeon Griggs
159
+ See LICENSE
90
160
 
91
161
  ## License
92
162
 
@@ -106,3 +176,7 @@ Run ["CI & Release" workflow](https://github.com/sanity-io/document-internationa
106
176
  Make sure to select the main branch and check "Release new version".
107
177
 
108
178
  Semantic release will only release on configured branches, so it is safe to run release on any branch.
179
+
180
+ ## License
181
+
182
+ [MIT](LICENSE) © Simeon Griggs
package/lib/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- const e=["config"];var t,a,n,i,l,r,s,o,u,c,d;function h(e,t){if(null==e)return{};var a,n,i=function(e,t){if(null==e)return{};var a,n,i={},l=Object.keys(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}function m(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function g(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function f(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?g(Object(a),!0).forEach((function(t){p(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):g(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function p(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}import{useClient as v,isKeyedObject as b,useSchema as y,useEditState as S,useDocumentOperation as _,useValidationStatus as C,useSyncState as w,DefaultPreview as M,useDocumentStore as I,definePlugin as A}from"sanity";import E from"just-safe-get";import T from"lodash/compact";import*as L from"react";import N,{useState as k,useEffect as B,useMemo as D,forwardRef as R,useCallback as O,createContext as P,useContext as G,useRef as j}from"react";import{useToast as K,Stack as z,Text as F,Card as U,Autocomplete as x,Flex as H,Box as W,Button as Z,Code as V,Container as Y,Dialog as J,Grid as $,MenuItem as q,Badge as Q,MenuButton as X,Menu as ee}from"@sanity/ui";import{CheckmarkIcon as te,PublishIcon as ae,TrashIcon as ne,CopyIcon as ie,EarthGlobeIcon as le,SpinnerIcon as re,AddIcon as se,ChevronDownIcon as oe}from"@sanity/icons";import{jsx as ue,jsxs as ce}from"react/jsx-runtime";import{ConfirmDeleteDialog as de,usePaneRouter as he,deskTool as me}from"sanity/desk";import{uuid as ge}from"@sanity/uuid";import fe,{keyframes as pe,css as ve}from"styled-components";import be from"just-split";import ye from"lodash/chunk";import Se from"twemoji";import _e from"html-react-parser";import{getEmojiFlag as Ce}from"@cprecioso/country-flag-emoji";import{distinctUntilChanged as we,catchError as Me}from"rxjs/operators";import Ie from"react-fast-compare";import Ae from"just-omit";import{hues as Ee}from"@sanity/color";import{RouterContext as Te}from"sanity/router";const Le=["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"],Ne=[{value:"af",title:"Afrikaans"},{value:"af-ZA",title:"Afrikaans (South Africa)"},{value:"ar",title:"Arabic"},{value:"ar-AE",title:"Arabic (U.A.E.)"},{value:"ar-BH",title:"Arabic (Bahrain)"},{value:"ar-DZ",title:"Arabic (Algeria)"},{value:"ar-EG",title:"Arabic (Egypt)"},{value:"ar-IQ",title:"Arabic (Iraq)"},{value:"ar-JO",title:"Arabic (Jordan)"},{value:"ar-KW",title:"Arabic (Kuwait)"},{value:"ar-LB",title:"Arabic (Lebanon)"},{value:"ar-LY",title:"Arabic (Libya)"},{value:"ar-MA",title:"Arabic (Morocco)"},{value:"ar-OM",title:"Arabic (Oman)"},{value:"ar-QA",title:"Arabic (Qatar)"},{value:"ar-SA",title:"Arabic (Saudi Arabia)"},{value:"ar-SY",title:"Arabic (Syria)"},{value:"ar-TN",title:"Arabic (Tunisia)"},{value:"ar-YE",title:"Arabic (Yemen)"},{value:"az",title:"Azeri"},{value:"az-Cyrl-AZ",title:"Azeri (Cyrillic, Azerbaijan)"},{value:"az-Latn-AZ",title:"Azeri (Latin, Azerbaijan)"},{value:"be",title:"Belarusian"},{value:"be-BY",title:"Belarusian (Belarus)"},{value:"bg",title:"Bulgarian"},{value:"bg-BG",title:"Bulgarian (Bulgaria)"},{value:"bs-Latn-BA",title:"Bosnian (Bosnia and Herzegovina)"},{value:"ca",title:"Catalan"},{value:"ca-ES",title:"Catalan (Catalan)"},{value:"cs",title:"Czech"},{value:"cs-CZ",title:"Czech (Czech Republic)"},{value:"cy-GB",title:"Welsh (United Kingdom)"},{value:"da",title:"Danish"},{value:"da-DK",title:"Danish (Denmark)"},{value:"de",title:"German"},{value:"de-AT",title:"German (Austria)"},{value:"de-DE",title:"German (Germany)"},{value:"de-CH",title:"German (Switzerland)"},{value:"de-LI",title:"German (Liechtenstein)"},{value:"de-LU",title:"German (Luxembourg)"},{value:"dv",title:"Divehi"},{value:"dv-MV",title:"Divehi (Maldives)"},{value:"el",title:"Greek"},{value:"el-GR",title:"Greek (Greece)"},{value:"en",title:"English"},{value:"en-029",title:"English (Caribbean)"},{value:"en-AU",title:"English (Australia)"},{value:"en-BZ",title:"English (Belize)"},{value:"en-CA",title:"English (Canada)"},{value:"en-GB",title:"English (United Kingdom)"},{value:"en-IE",title:"English (Ireland)"},{value:"en-JM",title:"English (Jamaica)"},{value:"en-NZ",title:"English (New Zealand)"},{value:"en-PH",title:"English (Republic of the Philippines)"},{value:"en-TT",title:"English (Trinidad and Tobago)"},{value:"en-US",title:"English (United States)"},{value:"en-ZA",title:"English (South Africa)"},{value:"en-ZW",title:"English (Zimbabwe)"},{value:"es",title:"Spanish"},{value:"es-AR",title:"Spanish (Argentina)"},{value:"es-BO",title:"Spanish (Bolivia)"},{value:"es-CL",title:"Spanish (Chile)"},{value:"es-CO",title:"Spanish (Colombia)"},{value:"es-CR",title:"Spanish (Costa Rica)"},{value:"es-DO",title:"Spanish (Dominican Republic)"},{value:"es-EC",title:"Spanish (Ecuador)"},{value:"es-ES",title:"Spanish (Spain)"},{value:"es-GT",title:"Spanish (Guatemala)"},{value:"es-HN",title:"Spanish (Honduras)"},{value:"es-MX",title:"Spanish (Mexico)"},{value:"es-NI",title:"Spanish (Nicaragua)"},{value:"es-PA",title:"Spanish (Panama)"},{value:"es-PE",title:"Spanish (Peru)"},{value:"es-PR",title:"Spanish (Puerto Rico)"},{value:"es-PY",title:"Spanish (Paraguay)"},{value:"es-SV",title:"Spanish (El Salvador)"},{value:"es-UY",title:"Spanish (Uruguay)"},{value:"es-VE",title:"Spanish (Venezuela)"},{value:"et",title:"Estonian"},{value:"et-EE",title:"Estonian (Estonia)"},{value:"eu",title:"Basque"},{value:"eu-ES",title:"Basque (Basque)"},{value:"fa",title:"Persian"},{value:"fa-IR",title:"Persian (Iran)"},{value:"fi",title:"Finnish"},{value:"fi-FI",title:"Finnish (Finland)"},{value:"fo",title:"Faroese"},{value:"fo-FO",title:"Faroese (Faroe Islands)"},{value:"fr",title:"French"},{value:"fr-BE",title:"French (Belgium)"},{value:"fr-CA",title:"French (Canada)"},{value:"fr-FR",title:"French (France)"},{value:"fr-CH",title:"French (Switzerland)"},{value:"fr-LU",title:"French (Luxembourg)"},{value:"fr-MC",title:"French (Principality of Monaco)"},{value:"gl",title:"Galician"},{value:"gl-ES",title:"Galician (Galician)"},{value:"gu",title:"Gujarati"},{value:"gu-IN",title:"Gujarati (India)"},{value:"he",title:"Hebrew"},{value:"he-IL",title:"Hebrew (Israel)"},{value:"hi",title:"Hindi"},{value:"hi-IN",title:"Hindi (India)"},{value:"hr",title:"Croatian"},{value:"hr-BA",title:"Croatian (Bosnia and Herzegovina)"},{value:"hr-HR",title:"Croatian (Croatia)"},{value:"hu",title:"Hungarian"},{value:"hu-HU",title:"Hungarian (Hungary)"},{value:"hy",title:"Armenian"},{value:"hy-AM",title:"Armenian (Armenia)"},{value:"id",title:"Indonesian"},{value:"id-ID",title:"Indonesian (Indonesia)"},{value:"is",title:"Icelandic"},{value:"is-IS",title:"Icelandic (Iceland)"},{value:"it",title:"Italian"},{value:"it-CH",title:"Italian (Switzerland)"},{value:"it-IT",title:"Italian (Italy)"},{value:"ja",title:"Japanese"},{value:"ja-JP",title:"Japanese (Japan)"},{value:"ka",title:"Georgian"},{value:"ka-GE",title:"Georgian (Georgia)"},{value:"kk",title:"Kazakh"},{value:"kk-KZ",title:"Kazakh (Kazakhstan)"},{value:"kn",title:"Kannada"},{value:"kn-IN",title:"Kannada (India)"},{value:"ko",title:"Korean"},{value:"kok",title:"Konkani"},{value:"kok-IN",title:"Konkani (India)"},{value:"ko-KR",title:"Korean (Korea)"},{value:"ky",title:"Kyrgyz"},{value:"ky-KG",title:"Kyrgyz (Kyrgyzstan)"},{value:"lt",title:"Lithuanian"},{value:"lt-LT",title:"Lithuanian (Lithuania)"},{value:"lv",title:"Latvian"},{value:"lv-LV",title:"Latvian (Latvia)"},{value:"mi-NZ",title:"Maori (New Zealand)"},{value:"mk",title:"Macedonian"},{value:"mk-MK",title:"Macedonian (Former Yugoslav Republic of Macedonia)"},{value:"mn",title:"Mongolian"},{value:"mn-MN",title:"Mongolian (Cyrillic, Mongolia)"},{value:"mr",title:"Marathi"},{value:"mr-IN",title:"Marathi (India)"},{value:"ms",title:"Malay"},{value:"ms-BN",title:"Malay (Brunei Darussalam)"},{value:"ms-MY",title:"Malay (Malaysia)"},{value:"mt-MT",title:"Maltese (Malta)"},{value:"nb-NO",title:"Norwegian, Bokmal (Norway)"},{value:"nl",title:"Dutch"},{value:"nl-BE",title:"Dutch (Belgium)"},{value:"nl-NL",title:"Dutch (Netherlands)"},{value:"nn-NO",title:"Norwegian, Nynorsk (Norway)"},{value:"no",title:"Norwegian"},{value:"ns-ZA",title:"Northern Sotho (South Africa)"},{value:"pa",title:"Punjabi"},{value:"pa-IN",title:"Punjabi (India)"},{value:"pl",title:"Polish"},{value:"pl-PL",title:"Polish (Poland)"},{value:"pt",title:"Portuguese"},{value:"pt-BR",title:"Portuguese (Brazil)"},{value:"pt-PT",title:"Portuguese (Portugal)"},{value:"quz-BO",title:"Quechua (Bolivia)"},{value:"quz-EC",title:"Quechua (Ecuador)"},{value:"quz-PE",title:"Quechua (Peru)"},{value:"ro",title:"Romanian"},{value:"ro-RO",title:"Romanian (Romania)"},{value:"ru",title:"Russian"},{value:"ru-RU",title:"Russian (Russia)"},{value:"sa",title:"Sanskrit"},{value:"sa-IN",title:"Sanskrit (India)"},{value:"se-FI",title:"Sami (Northern) (Finland)"},{value:"se-NO",title:"Sami (Northern) (Norway)"},{value:"se-SE",title:"Sami (Northern) (Sweden)"},{value:"sk",title:"Slovak"},{value:"sk-SK",title:"Slovak (Slovakia)"},{value:"sl",title:"Slovenian"},{value:"sl-SI",title:"Slovenian (Slovenia)"},{value:"sma-NO",title:"Sami (Southern) (Norway)"},{value:"sma-SE",title:"Sami (Southern) (Sweden)"},{value:"smj-NO",title:"Sami (Lule) (Norway)"},{value:"smj-SE",title:"Sami (Lule) (Sweden)"},{value:"smn-FI",title:"Sami (Inari) (Finland)"},{value:"sms-FI",title:"Sami (Skolt) (Finland)"},{value:"sq",title:"Albanian"},{value:"sq-AL",title:"Albanian (Albania)"},{value:"sr",title:"Serbian"},{value:"sr-Cyrl-BA",title:"Serbian (Cyrillic) (Bosnia and Herzegovina)"},{value:"sr-Cyrl-CS",title:"Serbian (Cyrillic, Serbia)"},{value:"sr-Latn-BA",title:"Serbian (Latin) (Bosnia and Herzegovina)"},{value:"sr-Latn-CS",title:"Serbian (Latin, Serbia)"},{value:"sv",title:"Swedish"},{value:"sv-FI",title:"Swedish (Finland)"},{value:"sv-SE",title:"Swedish (Sweden)"},{value:"sw",title:"Kiswahili"},{value:"sw-KE",title:"Kiswahili (Kenya)"},{value:"syr",title:"Syriac"},{value:"syr-SY",title:"Syriac (Syria)"},{value:"ta",title:"Tamil"},{value:"ta-IN",title:"Tamil (India)"},{value:"te",title:"Telugu"},{value:"te-IN",title:"Telugu (India)"},{value:"th",title:"Thai"},{value:"th-TH",title:"Thai (Thailand)"},{value:"tn-ZA",title:"Tswana (South Africa)"},{value:"tr",title:"Turkish"},{value:"tr-TR",title:"Turkish (Turkey)"},{value:"tt",title:"Tatar"},{value:"tt-RU",title:"Tatar (Russia)"},{value:"uk",title:"Ukrainian"},{value:"uk-UA",title:"Ukrainian (Ukraine)"},{value:"ur",title:"Urdu"},{value:"ur-PK",title:"Urdu (Islamic Republic of Pakistan)"},{value:"uz",title:"Uzbek"},{value:"uz-Cyrl-UZ",title:"Uzbek (Cyrillic, Uzbekistan)"},{value:"uz-Latn-UZ",title:"Uzbek (Latin, Uzbekistan)"},{value:"vi",title:"Vietnamese"},{value:"vi-VN",title:"Vietnamese (Vietnam)"},{value:"xh-ZA",title:"Xhosa (South Africa)"},{value:"zh-CN",title:"Chinese (People's Republic of China)"},{value:"zh-HK",title:"Chinese (Hong Kong S.A.R.)"},{value:"zh-CHS",title:"Chinese (Simplified)"},{value:"zh-CHT",title:"Chinese (Traditional)"},{value:"zh-MO",title:"Chinese (Macao S.A.R.)"},{value:"zh-SG",title:"Chinese (Singapore)"},{value:"zh-TW",title:"Chinese (Taiwan)"},{value:"zu-ZA",title:"Zulu (South Africa)"}],ke="i18n",Be="__i18n_";var De=(e=>(e.STRONG="strong",e.WEAK="weak",e.DISABLED="disabled",e))(De||{}),Re=(e=>(e.SUBPATH="subpath",e.DELIMITER="delimiter",e))(Re||{});const Oe={publishing:"Publishing...",publish:"Publish",updatingIntlFields:"Updating i18n fields",intlFieldsUpdated:"i18n fields updated",baseDocumentCopied:"Base document copied",translationCreatedToast:{title:e=>"Translation created: ".concat(e),description:e=>"The content from ‘".concat(e,"’ is copied into the new document translation.")},loading:"Loading languages...",draft:"Draft",missingTranslations:"Following languages are missing some translations compared to the base language",base:"Base",missing:"Missing",deleteAll:{buttonTitle:"Delete (incl. translations)",deleting:"Deleting..."},duplicateAll:{buttonTitle:"Duplicate (incl. translations)",duplicating:"Duplicating..."},translationsMaintenance:{title:"Translation Maintenance",selectSchemaPlaceholder:"Select schema type",idStructureMismatch:"document(s) with mismatched ID structures",missingLanguageField:"document(s) are missing the language field",missingDocumentRefs:"document(s) have missing translation references",missingBaseDocumentRefs:"document(s) have missing base document references",orphanDocuments:"orphaned translation document(s)",referenceBehaviorMismatch:"document(s) with mismatched reference behaviors",baseLanguageMismatch:"base document(s) with mismatched language field",fix:"Fix",pendingTransactionDialog:{header:"Confirm pending transaction",caution:"Before continuing please review the transactions. Keep in mind, the translation maintenance functionality may remove or update many documents at once. It is recommended to back-up your dataset before performing data maintenance",cancel:"Cancel",confirm:"Confirm operation"}},errors:{baseDocumentNotPublished:"It looks like you have not published your base translation yet. When using strong references it is required to publish the base document before publishing any translated entries"},languageSelect:{placeholder:"Switch language",listLabels:{existing:"Select document translations",missing:"Create new document translations"}}},Pe=(e,t,a)=>e.idStructure===Re.DELIMITER?"".concat(t).concat("__i18n_").concat(a||"*"):"".concat("i18n",".").concat(t,".").concat(a||"*"),Ge=(e,t)=>t?e.find((e=>e.id===t))||null:e.length>0?e[0]:null;function je(){return v({apiVersion:"2021-10-01"})}const Ke=async(e,t,a,n)=>{const i=(e=>e.map((e=>{if("string"==typeof e){const t=Ne.find((t=>t.value===e));return t?{title:t.title,id:e}:{title:e,id:e}}return"name"in e?(console.warn('The "name" field in your language configuration is deprecated, please replace it with "id".'),{title:e.title,id:e.name}):{title:e.title,id:e.id}})))(await(async()=>{if(Array.isArray(a))return a;const t=await e.fetch(a.query),n=a.value;return"string"==typeof n?t.map((e=>E(e,n))):t.map((e=>"name"in n?{name:E(e,n.name),title:E(e,n.title)}:{id:E(e,n.id),title:E(e,n.title)}))})());return t.languagesLoader?t.languagesLoader(i,null!=n?n:void 0):i},ze=e=>{if(!e)return;const t=e.replace(/^drafts\./,""),a=new RegExp("".concat("i18n","\\.([^.]+)\\.[^.]+")),n=t.match(a);if(n&&2===n.length)return n[1];const i=t.split("__i18n_");return i.length>0?i[0]:t},Fe=async function(e,t,a){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(t.idStructure===Re.DELIMITER){const t=a.split("-");t[t.length-1]="".concat(t[t.length-1]).concat("__i18n_","*");const i=await e.fetch(n?"*[_id match $segments]":"*[_id match $segments && !(_id in path('drafts.**'))]",{segments:t});return i?i.filter((e=>e._id.startsWith(a)||n&&e._id.startsWith("drafts.".concat(a)))):[]}const i=await e.fetch(n?"*[_id in path($path) || _id in path($draftPath)]":"*[_id in path($path)]",{path:Pe(t,a,"*"),draftPath:"drafts.".concat(Pe(t,a,"*"))});return null!=i?i:[]};function Ue(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return f({_type:"reference",_ref:e.replace("drafts.","")},!0===t?{_weak:!0}:{})}function xe(e,t){return(null==e?void 0:e[t.fieldNames.lang])||t.base||null}function He(e){return e.reduce(((e,t,a)=>{const n="number"==typeof t,i=b(t),l=n||i?"[]":"".concat(0===a?"":".").concat(t);return"".concat(e).concat(l)}),"")}function We(e,t){var a,n,i,l,r,s;return{base:(null==t?void 0:t.base)||(null==e?void 0:e.base)||"",languages:(null==t?void 0:t.languages)||(null==e?void 0:e.languages)||[],idStructure:(null==e?void 0:e.idStructure)||Re.DELIMITER,referenceBehavior:(null==e?void 0:e.referenceBehavior)||De.STRONG,withTranslationsMaintenance:!0===(null==e?void 0:e.withTranslationsMaintenance),shouldReload:null==e?void 0:e.shouldReload,languagesLoader:null==e?void 0:e.languagesLoader,fallbackLanguageSelect:null==e?void 0:e.fallbackLanguageSelect,customFlagComponents:null==e?void 0:e.customFlagComponents,fieldNames:{lang:(null==(a=null==t?void 0:t.fieldNames)?void 0:a.lang)||(null==(n=null==e?void 0:e.fieldNames)?void 0:n.lang)||"__i18n_lang",references:(null==(i=null==t?void 0:t.fieldNames)?void 0:i.references)||(null==(l=null==e?void 0:e.fieldNames)?void 0:l.references)||"__i18n_refs",baseReference:(null==(r=null==t?void 0:t.fieldNames)?void 0:r.baseReference)||(null==(s=null==e?void 0:e.fieldNames)?void 0:s.baseReference)||"__i18n_base"}}}function Ze(e,t){const a=y(),n=D((()=>{if(t){const e=a.get(t);if(e&&"boolean"!=typeof e.i18n)return null==e?void 0:e.i18n}return null}),[t,a]);return D((()=>We(e,n)),[n,e])}function Ve(e){return t=>{let{type:a,id:n,onComplete:i}=t;const l=K(),r=je(),s=Ze(e,a),o=ze(n),u=L.useRef(null),[c,d]=L.useState(null),[h,m]=L.useState(!1),{draft:g,published:p}=S(n,a),v=S(o,a),{publish:b}=_(n,a),{isValidating:y,validation:M}=C(n,a),I=w(n,a),A=w(o,a),E=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const[i,l]=k(e);return B((()=>{if(i!==e)if(e){if(a){const e=setTimeout((()=>l(!0)),t);return()=>clearTimeout(e)}l(!0)}else if(!e){if(n){const e=setTimeout((()=>l(!1)),t);return()=>clearTimeout(e)}l(!1)}}),[i,e,t,a,n]),i}(!!("published"===c||"publishing"===c||h||b.disabled||I.isSyncing||A.isSyncing||y||M.some((e=>"error"===e.level)))),N=L.useMemo((()=>"publishing"===c?Oe.publishing:h?Oe.updatingIntlFields:Oe.publish),[c,h]),D=L.useCallback((async()=>{m(!0);try{const e=g||p;e&&await async function(e,t,a,n){var i;const{_type:l,_id:r}=a,s=ze(r),o=r!==s,u=t.fieldNames.lang,c=t.fieldNames.references,d=t.fieldNames.baseReference,h=await Ke(e,t,t.languages,a),m=xe(a,t)||(null==(i=Ge(h,t.base))?void 0:i.id),g=e.transaction();if(g.createIfNotExists({_id:r,_type:l}),g.patch(r,{set:f({[u]:m},o&&t.referenceBehavior!==De.DISABLED?{[d]:Ue(s,t.referenceBehavior===De.WEAK)}:{})}),await g.commit(),n){const a=await Fe(e,t,s);if(a.length>0){const n=e.transaction();let i=[];t.referenceBehavior!==De.DISABLED&&(i=T(a.map((e=>{const a=xe(e,t);return a?f({_key:a},Ue(e._id,t.referenceBehavior===De.WEAK)):null}),{}))),n.patch(s,{set:{[c]:i}}),await n.commit()}}}(r,s,e,v.published),l.push({closable:!0,status:"success",title:Oe.intlFieldsUpdated})}catch(e){console.error(e),l.push({closable:!0,status:"error",title:e.toString()})}m(!1)}),[l,g,p,r,v.published,s]),R=L.useCallback((()=>{d("publishing");if(n!==o&&!v.published&&s.referenceBehavior===De.STRONG)throw new Error(Oe.errors.baseDocumentNotPublished);b.execute()}),[n,o,b,s,v.published]);return L.useEffect((()=>{const e="publishing"===c&&!g,t=e?"published":null,a=setTimeout((()=>{d(t)}),e?200:4e3);return()=>clearTimeout(a)}),[c,g]),L.useEffect((()=>{"published"===c&&(u.current||(u.current=D().then((()=>i&&i())).finally((()=>u.current=null))))}),[c,i,D]),{disabled:E,label:N,icon:"published"===c?te:ae,shortcut:E?null:"Ctrl+Alt+P",onHandle:R}}}const Ye={NOTHING_TO_DELETE:"This document doesn't yet exist or is already deleted"};function Je(e){return function(t){let{id:a,type:n,onComplete:i}=t;const l=K(),r=je(),s=Ze(e,n),o=N.useMemo((()=>ze(a)),[a]),u=S(o,n),c=w(a,n),d=w(o,n),{delete:h}=_(a,n),[m,g]=N.useState(!1),[f,p]=N.useState(!1),v=N.useCallback((()=>{p(!0)}),[]),b=N.useCallback((()=>{p(!1),i&&i()}),[i]),y=N.useCallback((async()=>{try{if(g(!0),p(!1),u.draft||u.published){const e=r.transaction();u.draft&&e.delete("drafts.".concat(o)),u.published&&e.patch(o,{unset:[s.fieldNames.references]}),await e.commit()}const e=await Fe(r,s,o,!0),t=r.transaction();e.forEach((e=>{t.delete(e._id)})),await t.commit(),h.execute(),i&&i()}catch(e){l.push({closable:!0,status:"error",title:e.toString()})}finally{g(!0)}}),[l,s,r,o,u.draft,u.published,h,i]);return{onHandle:v,tone:"critical",icon:ne,disabled:m||Boolean(h.disabled)||c.isSyncing||d.isSyncing,shortcut:"CTRL+ALT+D",title:h.disabled&&Ye[h.disabled]||"",label:m?Oe.deleteAll.deleting:Oe.deleteAll.buttonTitle,modal:f&&{type:"dialog",onClose:i,content:ue(de,{action:"delete",id:a,type:n,onCancel:b,onConfirm:y})}}}}const $e={NOTHING_TO_DUPLICATE:"This document doesn't yet exist so there's nothing to duplicate"};function qe(e){return t=>{let{id:a,type:n,draft:i,published:l}=t;const r=K(),s=je(),o=Ze(e,n),u=ze(a),{duplicate:c}=_(a,n),[d,h]=N.useState(!1),m=N.useCallback((async()=>{h(!0);try{const e=ge(),t=await Fe(s,o,u),a=s.transaction();a.create(f(f({},null!=i?i:l),{},{_id:e,_type:n})),t.forEach((t=>{const n=t._id.startsWith("drafts."),i=Pe(o,e,xe(t,o));a.create(f(f({},t),{},{_id:n?"drafts.".concat(i):i}))})),await a.commit()}catch(e){console.error(e),r.push({description:e.message})}h(!1)}),[s,o,r,u,n,i,l]);return{icon:ie,disabled:Boolean(c.disabled)||d,title:c.disabled&&$e[c.disabled]||"",label:d?Oe.duplicateAll.duplicating:Oe.duplicateAll.buttonTitle,onHandle:m}}}const Qe=(e,t,a)=>{let{schema:n,schemaType:i,documentId:l}=t;const r=n.get(i),s=r&&r.i18n,o=l===ze(l);let u=e;return s&&(u=u.map((e=>{const t="publish"===e.action,n="delete"===e.action;return t?Ve(a):n&&o?Je(a):e})),o&&u.push(qe(a))),u},Xe=R((function(e,t){let{value:a,onChange:n,onOpen:i}=e;const l=y(),r=D((()=>{var e;return null==(e=l._original)?void 0:e.types.filter((e=>!!e.i18n))}),[l]);return ce(z,{space:4,children:[ue(F,{children:Oe.translationsMaintenance.selectSchemaPlaceholder}),ue(U,{children:ue(x,{ref:t,fontSize:[2,2,3],icon:le,id:"i18n-schema-selector",options:null==r?void 0:r.map((e=>({value:e.name,payload:e}))),value:a,placeholder:"Search",openButton:{onClick:()=>i},onChange:n,renderValue:(e,t)=>(null==t?void 0:t.payload.title)||e,renderOption:e=>{let{payload:t}=e;return ue(U,{padding:2,radius:2,as:"button",children:ue(M,{layout:"default",title:t.title,media:t.icon})})}})})]})})),et=e=>{let{pending:t,count:a,labelName:n,children:i,onClick:l}=e;return ue(U,{padding:3,radius:2,shadow:1,tone:a>0?"caution":"default",children:ce(H,{align:"center",children:[ue(W,{flex:1,children:ce(F,{muted:a<=0,children:[ue("span",{children:a}),ue("span",{children:" "}),ue("span",{children:n?String(Oe.translationsMaintenance[n]):i})]})}),a>0&&ue(Z,{padding:2,fontSize:2,disabled:t,onClick:l,text:Oe.translationsMaintenance.fix})]})})},tt=(e,t,a,n)=>{var i;const l=null==(i=t.fieldNames)?void 0:i.lang,r=e.transaction();return n.forEach((e=>{const n=a.get(e._type),i=("object"==typeof n.i18n?n.i18n.base:void 0)||t.base;if(!e[l]){const t=(e=>{const t=new RegExp("".concat("i18n","\\.[^.]+\\.([^.]+)")),a=e.match(t);if(a&&2===a.length)return a[1];const n=e.split("__i18n_");return n.length>1?n[1]:void 0})(e._id)||i;r.patch(e._id,{set:{[l]:t}})}})),r},at=(e,t,a,n)=>{const i=t.fieldNames.references;return ye(a,50).map((a=>{const l=e.transaction();return a.forEach((e=>{let a=[];const r=n.filter((t=>ze(t._id)===e._id));t.referenceBehavior!==De.DISABLED&&(a=T(r.map((e=>{const a=xe(e,t);return a?f({_key:a},Ue(e._id,t.referenceBehavior===De.WEAK)):null}),{}))),l.patch(e._id,{set:{[i]:a}})})),l}))},nt=(e,t,a,n)=>{const i=e.transaction();return n.forEach((e=>{a.find((a=>{var n,i;return Array.isArray(null==e?void 0:e[t.fieldNames.references])&&(null==(n=null==e?void 0:e[t.fieldNames.references])?void 0:n.some((t=>t._ref===e._id)))||a._id===(null==(i=null==e?void 0:e[t.fieldNames.baseReference])?void 0:i._ref)}))||i.delete(e._id)})),i},it=async(e,t,a)=>{const n=await Ke(e,t,t.languages),i=Ge(n,t.base),l=t.fieldNames.lang,r=e.transaction();return a.forEach((e=>{e[l]!==(null==i?void 0:i.id)&&r.patch(e._id,{set:{[l]:null==i?void 0:i.id}})})),r},lt=(e,t,a)=>{const n=e.transaction();if(t.referenceBehavior!==De.DISABLED){const e=t.fieldNames.baseReference;a.forEach((a=>{if(!a[e]){const i=ze(a._id);n.patch(a._id,{set:{[e]:Ue(i,t.referenceBehavior===De.WEAK)}})}}))}return n},rt=fe(U)(t||(t=m(["\n grid-column-start: 1;\n grid-row-start: 1;\n"]))),st=fe(V)(a||(a=m(["\n word-break: break-word;\n white-space: break-spaces;\n"]))),ot=fe(H)(n||(n=m(["\n grid-column-start: 1;\n grid-row-start: 1;\n"]))),ut=R((function(e,t){let{config:a}=e;const[n,i]=k(""),l=je(),{pending:r,setPending:s,documents:o,baseDocuments:u,translatedDocuments:c,documentsSummaryInformation:d,fetchInformation:h}=((e,t)=>{const a=je(),n=Ze(e,t),[i,l]=N.useState(!1),[r,s]=N.useState([]),[o,u]=N.useState([]),c=N.useMemo((()=>n.idStructure===Re.DELIMITER?r.filter((e=>!e._id.includes("__i18n_"))):r.filter((e=>!e._id.startsWith("i18n")))),[n,r]),d=N.useMemo((()=>n.idStructure===Re.DELIMITER?r.filter((e=>e._id.includes("__i18n_"))):r.filter((e=>e._id.startsWith("i18n")))),[n,r]),h=N.useMemo((()=>n.idStructure===Re.DELIMITER?r.filter((e=>e._id.startsWith("i18n"))):r.filter((e=>e._id.includes("__i18n_")))),[n,r]),m=N.useCallback((async e=>{l(!0);const[t,i]=await Promise.all([Ke(a,n,n.languages),a.fetch("*[_type == $type && !(_id in path('drafts.**'))]",{type:e})]);u(t),s(i),l(!1)}),[n,a]),g=N.useMemo((()=>{var e,t,a;const i=Ge(o,n.base),l=c,s=d,u=null==(e=n.fieldNames)?void 0:e.lang,m=null==(t=n.fieldNames)?void 0:t.references,g=null==(a=n.fieldNames)?void 0:a.baseReference;return{idStructureMismatch:h,missingLanguageField:r.filter((e=>!e[u])),missingDocumentRefs:l.filter((e=>{const t=s.filter((t=>ze(t._id)===e._id));return Object.values(e[m]||[]).filter((e=>"reference"===e._type&&!!e._ref)).length!=t.length})),missingBaseDocumentRefs:s.filter((e=>!e[g])),orphanDocuments:s.filter((e=>!l.find((t=>ze(e._id)===t._id)))),referenceBehaviorMismatch:l.filter((e=>{const t=e[m]||[];return n.referenceBehavior===De.DISABLED?Object.keys(t).length>0:n.referenceBehavior===De.WEAK?Object.values(t).some((e=>!e._weak)):Object.values(t).some((e=>!!e._weak))})),baseLanguageMismatch:l.filter((e=>(null==i?void 0:i.id)&&e[u]!==i.id))}}),[n,r,o,c,d,h]);return N.useEffect((()=>{t&&m(t)}),[t]),{pending:i,setPending:l,documents:r,baseDocuments:c,translatedDocuments:d,idStructureMismatchDocuments:h,documentsSummaryInformation:g,fetchInformation:m}})(a,n),[m,g]=k(null),p=y(),v=Ze(a,n),b=O((e=>i(e)),[]),S=O((()=>i("")),[]),_=O((()=>{g(((e,t,a,n)=>{const i=t.fieldNames.references,l=new Set(n.map((e=>ze(e._id)))),r=e.transaction();l.forEach((e=>{r.patch(e,{set:{[i]:[]}})}));const s=be(n.filter((e=>e._id!==ze(e._id))),100).map((n=>{const l=e.transaction();return n.forEach((e=>{const n=ze(e._id),r=xe(e,t);if(r){const s=Pe(t,n,r);l.createIfNotExists(f(f({},e),{},{_id:s,_type:a})),l.delete(e._id),t.referenceBehavior!==De.DISABLED&&(l.patch(n,{setIfMissing:{[i]:[]}}),l.patch(n,{insert:{after:"".concat(i,"[-1]"),items:[f({_key:r},Ue(s,t.referenceBehavior===De.WEAK))]}}))}})),l}));return[r,...s]})(l,v,n,o))}),[l,v,n,o]),C=O((()=>{g([tt(l,v,p,o)])}),[l,p,v,o]),w=O((()=>{g(at(l,v,u,c))}),[l,v,u,c]),M=O((()=>{g([lt(l,v,c)])}),[l,v,c]),I=O((()=>{g([nt(l,v,u,c)])}),[l,v,u,c]),A=O((()=>{g(at(l,v,u,c))}),[l,v,u,c]),E=O((async()=>{g([await it(l,v,u)])}),[l,v,u]),T=O((()=>{if(m){const e=JSON.stringify(m.map((e=>e.toJSON())),null,2),t=new Blob([e],{type:"application/json"}),a=URL.createObjectURL(t),n=document.createElement("a");n.href=a,n.download="transactions.json",n.style.display="none",document.body.appendChild(n),n.click(),URL.revokeObjectURL(a)}}),[m]),L=O((()=>{g(null)}),[g]),B=O((async()=>{s(!0);try{m&&(await m.reduce((async(e,t)=>{await e,await t.commit()}),Promise.resolve()),await h(n),g(null))}catch(e){console.error(e)}finally{s(!1)}}),[s,h,n,m]);return ce(Y,{width:1,children:[ce(z,{space:2,children:[ue(W,{padding:4,children:ue(Xe,{value:n,onChange:b,onOpen:S,ref:t})}),!!n&&ue(W,{paddingX:4,children:ce(z,{space:2,children:[ue(et,{pending:r,count:d.idStructureMismatch.length,labelName:"idStructureMismatch",onClick:_}),ue(et,{pending:r,count:d.missingLanguageField.length,labelName:"missingLanguageField",onClick:C}),ue(et,{pending:r,count:d.missingDocumentRefs.length,labelName:"missingDocumentRefs",onClick:w}),ue(et,{pending:r,count:d.missingBaseDocumentRefs.length,labelName:"missingBaseDocumentRefs",onClick:M}),ue(et,{pending:r,count:d.orphanDocuments.length,labelName:"orphanDocuments",onClick:I}),ue(et,{pending:r,count:d.referenceBehaviorMismatch.length,labelName:"referenceBehaviorMismatch",onClick:A}),ue(et,{pending:r,count:d.baseLanguageMismatch.length,labelName:"baseLanguageMismatch",onClick:E})]})})]}),!!(null==m?void 0:m.length)&&ue(J,{id:"confirm-pending-transactions",width:2,header:Oe.translationsMaintenance.pendingTransactionDialog.header,onClose:L,footer:ue(H,{padding:3,justify:"flex-end",children:ce($,{autoFlow:"column",autoCols:"auto",gap:2,children:[ue(Z,{tone:"default",loading:r,disabled:r,text:Oe.translationsMaintenance.pendingTransactionDialog.cancel,onClick:L}),ue(Z,{tone:"critical",loading:r,disabled:r,text:Oe.translationsMaintenance.pendingTransactionDialog.confirm,onClick:B})]})}),children:ce(z,{padding:3,space:3,children:[ue(U,{padding:3,radius:2,shadow:1,tone:"caution",children:ue(F,{size:2,children:Oe.translationsMaintenance.pendingTransactionDialog.caution})}),ce($,{cols:1,children:[ue(rt,{padding:3,radius:2,shadow:1,tone:"default",children:ue(st,{language:"json",children:JSON.stringify(m.map((e=>e.toJSON())),null,2)})}),ue(ot,{padding:2,justify:"flex-end",align:"flex-start",onClick:T,children:ue(Z,{text:"Download"})})]})]})})]})}));const ct=e=>e.document(),dt=e=>{const{S:t,schema:a}=e,n=[],i=t.documentTypeListItems().filter((e=>{let t=e.getSchemaType();t="string"==typeof t?a.get(t):t;const i=t&&t.i18n;return i||n.push(e),i}));return{withoutI18n:n,withI18n:i}},ht=e=>{const{S:t}=e,a=function(e){return R((function(t,a){return ue(ut,f(f({},e),{},{ref:a}))}))}(e);return t.component(a).title(Oe.translationsMaintenance.title).id("__i18n_translations_maintenance_tab")},mt=e=>{const{S:t}=e;return t.listItem().id("__i18n_translations_maintenance_tab").title(Oe.translationsMaintenance.title).icon(le).child(ht(e))},gt=e=>{const{S:t,config:a,schema:n}=e,i=We(a,"object"==typeof n.i18n?n.i18n:void 0),l=dt(e),r={[Re.SUBPATH]:(e,t)=>t.filter("!(_id in path($path)) && !(_id in path($drafts)) && _type == $type").params({path:"".concat("i18n",".**"),drafts:"drafts.".concat("i18n",".**"),type:e.getId()}),[Re.DELIMITER]:(e,t)=>t.filter("!(_id match $id) && _type == $type").params({id:"*".concat("__i18n_","*"),type:e.getId()})},s=[...l.withoutI18n,...l.withI18n.map((e=>{const a=e.getSchemaType(),n="string"==typeof a?a:null==a?void 0:a.name;return e.child(r[i.idStructure](e,t.documentList().id(e.getId()||"").title(e.getTitle()||"").schemaType(null!=n?n:"").menuItems([...n?t.orderingMenuItemsForType(n):[]])))}))];return i.withTranslationsMaintenance&&s.splice(0,0,mt(e)),s.map((e=>e.serialize()))};function ft(e){const{S:t}=e;if(0===dt(e).withI18n.length)return t.defaults();const a=gt(e);return t.list().id("__root__").title("Content").items(a).showIcons(a.some((e=>{return!(!(t=e.schemaType)||"string"==typeof t)&&Boolean(t.icon);var t})))}function pt(e){return(t,a)=>{const{document:n,path:i,type:l}=a,r=null==l?void 0:l.options;if(!n)throw new Error("`document` was not provided in validation context.");if(!i)throw new Error("`path` was not provided in validation context.");const s=(null==r?void 0:r.disableArrayWarning)||!1,o=ze(n._id),u=n._type,c=He(i.concat("current"));if(!s&&c.includes("[]")){const e=He(i);console.warn(["Slug field at path ".concat(e," is within an array and cannot be automatically checked for uniqueness"),'If you need to check for uniqueness, provide your own "isUnique" method',"To disable this message, set `disableArrayWarning: true` on the slug `options` field"].join("\n"))}const d=["_type == $docType",'!(_id in path("drafts.**"))',"_id != $baseId",'!(_id in path("i18n." + $baseId + ".*"))','!(_id match $baseId + "'.concat("__i18n_",'*")'),"".concat(c," == $slug")].join(" && ");return e.fetch("!defined(*[".concat(d,"][0]._id)"),{docType:u,baseId:o,slug:t},{tag:"validation.slug-is-unique"})}}const vt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(!e)return"";switch(e.toLocaleLowerCase()){case"en":return"gb";case"sq":return"al";default:return e}},bt=P({}),yt=fe(W)(i||(i=m(["\n min-width: 24px;\n transform: translateY(1px);\n"]))),St=e=>{let{code:t,langCulture:a}=e;const n=D((()=>t&&function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(!e)return"";const t=vt(e);if(!Le.includes(t.toUpperCase()))return"";return Ce(t)}(t)),[t]),i=Se.parse(null!=n?n:"🇺🇳",{folder:"svg",ext:".svg"}),l=_e(i),{customFlagComponents:r}=G(bt),s=D((()=>{if(a&&r){const e=a.replace(/[^a-zA-Z0-9_]/g,"_");if(e in r)return r[e]}return null}),[a,r]);return ue(W,{"aria-label":t,children:s&&t?ue(s,{code:t}):ue(yt,{children:l})})};const _t={},Ct={apiVersion:"v2022-05-09"};const wt=(e,t)=>{var a,n;return Number(null!=(a=e.isBase)?a:0)-Number(null!=(n=t.isBase)?n:0)};function Mt(e){let{children:t}=e;return ue(W,{padding:2,children:ue(F,{muted:!0,size:1,children:t})})}const It=R((function(e,t){return ue("svg",f(f({"data-sanity-icon":"splitPane",width:"1em",height:"1em",viewBox:"0 0 25 25",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t},e),{},{children:ue("path",{d:"M10.5 5.5V19.5M13 12.5H15.5M18 12.5H15.5M15.5 12.5V15M15.5 12.5V10M4.5 5.5H20.5V19.5H4.5V5.5Z",stroke:"currentColor",strokeWidth:1.2})}))})),At=P({currentDocumentId:null,currentDocumentType:null,baseLanguage:null,currentLanguage:null}),Et=pe(l||(l=m(["\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n"]))),Tt=fe(re)(r||(r=m(["\n animation: "," 500ms linear infinite;\n"])),Et),Lt=fe(Z)(s||(s=m(["\n display: none;\n flex-shrink: 0;\n margin-left: 4px;\n\n & svg {\n display: block;\n color: ",";\n }\n\n ","\n"])),Ee.gray[700].hex,(e=>{let{theme:t}=e;return ve(o||(o=m(["\n @media (min-width: ","em) {\n display: block;\n }\n "])),t.sanity.media[1]/16)})),Nt=N.forwardRef(((e,t)=>ue("button",f({type:"button",ref:t},e)))),kt=fe.button(u||(u=m(["\n color: ",";\n background-color: ",";\n\n span {\n color: ",";\n }\n"])),(e=>{let{theme:t}=e;return t.sanity.color.button.default.primary.enabled.fg}),(e=>{let{theme:t}=e;return t.sanity.color.button.default.primary.enabled.bg}),(e=>{let{theme:t}=e;return t.sanity.color.button.default.primary.enabled.fg})),Bt=e=>{let{status:t,language:a}=e;const n=K(),i=G(bt),l=je(),{currentDocumentId:r,currentDocumentType:s,baseLanguage:o}=N.useContext(At);if(!r||!s)throw new Error("No document in view");const u=Ze(i,s),c=N.useContext(Te),{routerPanesState:d,groupIndex:h,replaceCurrent:m}=he(),[g,p]=N.useState(!1),v=N.useMemo((()=>ze(r)),[r]),b=N.useMemo((()=>a.id.split(/[_-]/).pop()),[a.id]),y=N.useMemo((()=>a.id===(null==o?void 0:o.id)?v:Pe(u,v,a.id)),[u,v,a.id,o]),_=S(v,s),C=N.useMemo((()=>a.isBase?a.title.length>=20?Oe.base.split(" ")[0]:Oe.base:null),[a]),w=N.useCallback(((e,t)=>{m({id:e,params:{type:t}})}),[m]),M=N.useCallback(((e,t)=>{if(!c)return;const a=[...d];a.splice(h+1,0,[{id:e,params:{type:t}}]);const n=c.resolvePathFromState({panes:a});c.navigateUrl({path:n})}),[c,d,h]),I=N.useCallback((async()=>{try{p(!0);const e=_.draft||_.published,t=u.fieldNames.lang,i=u.fieldNames.references,r=u.fieldNames.baseReference,c=u.referenceBehavior;await l.createIfNotExists(f(f({_id:"drafts.".concat(y),_type:s},e?Ae(e,["_id","_type",i]):{}),{},{[t]:a.id},(null==e?void 0:e._id)&&c!==De.DISABLED?{[r]:{_type:"reference",_ref:e._id.replace("drafts.",""),_weak:!0,_strengthenOnPublish:{type:s,weak:"weak"===c,template:{id:s,params:void 0}}}}:{})),n.push({closable:!0,status:"success",title:Oe.translationCreatedToast.title(a.title),description:o?Oe.translationCreatedToast.description(o.title):void 0}),w(y,s)}catch(e){n.push({closable:!0,status:"error",title:e.toString()})}finally{p(!1)}}),[u,_,y,s,a.id,a.title,n,o,w,l]),A=N.useCallback((()=>{w(y,s)}),[w,y,s]),E=N.useCallback((()=>{M(y,s)}),[M,y,s]);return"missing"===t?ue(q,{as:Nt,"data-as":"button",disabled:g,icon:g?Tt:se,text:a.title,onClick:I}):ce(H,{children:[ue(q,{as:a.isCurrentLanguage?kt:Nt,"data-as":"button","data-selected":a.isCurrentLanguage,selected:a.isCurrentLanguage,onClick:A,paddingY:1,paddingX:2,children:ce(H,{align:"center",gap:2,children:[ue(St,{code:b,langCulture:a.id}),ue(W,{flex:1,children:ue(F,{children:a.title})}),C?ue(Q,{fontSize:0,children:C}):null]})}),!a.isCurrentLanguage&&ue(Lt,{type:"button",tone:"default",mode:"bleed",padding:2,onClick:E,children:ue(It,{width:19,height:19})})]})},Dt=fe(W)(c||(c=m(["\n border-bottom: 1px solid var(--card-shadow-outline-color);\n"]))),Rt=fe(W)(d||(d=m(["\n minwidth: 250;\n"]))),Ot=e=>{let{draftLanguageObjects:t,publishedLanguageObjects:a,missingLanguageObjects:n}=e;const i=N.useMemo((()=>Boolean(!(!t.length&&!a.length)&&n.length)),[t,a,n]),l=N.useMemo((()=>[...t.map((e=>f(f({},e),{},{status:"draft"}))),...a.map((e=>f(f({},e),{},{status:"published"})))].sort(wt).reverse()),[t,a]);return ce(Rt,{children:[!!l.length&&ce(W,{children:[ue(Mt,{children:Oe.languageSelect.listLabels.existing}),ue($,{columns:1,gap:1,children:l.map((e=>ue(Bt,{status:e.status,language:e},e.id)))})]}),i&&ue(Dt,{marginY:1}),!!n.length&&ce(W,{children:[ue(Mt,{children:Oe.languageSelect.listLabels.missing}),ue($,{columns:1,gap:1,children:n.map((e=>ue(Bt,{status:"missing",language:e},e.id)))})]})]})},Pt={constrainSize:!0,placement:"bottom",portal:!0},Gt=e=>{let{schemaType:t,document:a}=e;var n,i;const l=Ze(G(bt),t.name),[r,s]=function(e,t){const a=je(),{draft:n,published:i}=S(t._id.replace(/^drafts\./,""),t._type),[l,r]=k(!1),[s,o]=k([]),u=O((async()=>{if(0===s.length||e.shouldReload&&e.shouldReload(null!=n?n:i)){r(!0);const t=await Ke(a,e,e.languages,null!=n?n:i);o(t),r(!1)}}),[a,e,n,i,s]);return B((()=>{u()}),[n,i,s,e,u]),[l,s]}(l,a),o=N.useMemo((()=>Ge(s,l.base)),[s,l.base]),u=N.useMemo((()=>xe(a,l)||(o?o.id:null)),[a,o,l]),c=N.useMemo((()=>s.find((e=>e.id===u))),[s,u]),d=N.useMemo((()=>null==u?void 0:u.split(/[-_]/).pop()),[u]),h='*[_type == $type && _id in $ids]{\n _id,\n "'.concat(l.fieldNames.lang,'": ').concat(l.fieldNames.lang,"\n }"),m=N.useMemo((()=>{const e=ze(a._id),t=s.map((t=>t===o?e:Pe(l,e,t.id))),n=t.map((e=>"drafts.".concat(e)));return{ids:[...t,...n],type:a._type}}),[l,o,s,a._id,a._type]),{loading:g,data:p}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_t,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Ct;const[n,i]=k(!0),[l,r]=k(!1),[s,o]=k(null),u=j(null),c=I();return B((()=>(e&&(u.current=c.listenQuery(e,t,a).pipe(we(Ie),Me((e=>(console.error(e),r(e),i(!1),o(null),e)))).subscribe((e=>{o((t=>Ie(t,e)?t:e)),i(!1),r(!1)}))),()=>u.current?u.current.unsubscribe():void 0)),[e,t,a]),{loading:n,error:l,data:s}}(h,m),v=N.useMemo((()=>{const e=[],t=[],a=[];if(!(null==p?void 0:p.length))return{draftLanguageObjects:e,publishedLanguageObjects:t,missingLanguageObjects:a};const n=p.reduce(((e,t)=>{if(!t._id.startsWith("drafts.")){return p.some((e=>e._id==="drafts.".concat(t._id)))?e:[...e,t]}return[...e,t]}),[]),i=new Map;return n.forEach((e=>{const t=E(null!=e?e:{},l.fieldNames.lang),a=e&&e._id.replace(/^drafts\./,"")===ze(e._id);t?i.set(t,e):a&&(null==o?void 0:o.id)&&i.set(o.id,e)})),s.forEach(((n,l)=>{const r=f(f({},n),{},{isBase:o?n.id===o.id:0===l,isCurrentLanguage:n.id===u}),s=i.get(n.id);(null==s?void 0:s._id)&&!s._id.startsWith("drafts.")?t.push(r):(null==s?void 0:s._id)&&s._id.startsWith("drafts.")?e.push(r):a.push(r)})),{draftLanguageObjects:e,publishedLanguageObjects:t,missingLanguageObjects:a}}),[l,s,o,p,u]);return!c||!u||r||g||0===s.length?ue(Z,{disabled:!0,mode:"bleed",padding:3,loading:r||g,iconRight:oe,text:Oe.languageSelect.placeholder}):ue(At.Provider,{value:{baseLanguage:o,currentLanguage:c,currentDocumentType:a._type,currentDocumentId:a._id},children:ue(X,{id:"document-internationalization/language-select",popover:Pt,button:ue(Z,{paddingY:1,paddingX:2,mode:"bleed",title:null!=(n=c.title)?n:c.id,children:ce(H,{align:"center",gap:2,children:[ue(St,{code:d,langCulture:u}),ue(W,{flex:1,children:ue(F,{children:null!=(i=c.title)?i:c.id})}),ue(oe,{width:19,height:19})]})}),menu:ue(ee,{children:ue(Ot,f({},v))})})})};function jt(t){const{config:a}=t,n=h(t,e),i=t.value;return ce(bt.Provider,{value:a,children:[i._id&&ue(H,{flex:1,justify:"flex-end",children:ue(Gt,{schemaType:t.schemaType,document:i})}),t.renderDefault(n)]})}const Kt=A((e=>({name:"document-i18n",document:{actions:(t,a)=>Qe(t,a,e),badges:t=>{return[...t,(a=e,e=>{const t=Ze(a,e.type),n=e.draft||e.published,i=n?xe(n,t):null;return i?{label:i,color:"success"}:null})];var a}},form:{components:{input(t){const{value:a}=t;return t.schemaType.i18n&&"object"==typeof a&&(null==a?void 0:a._id)?ue(jt,f({config:e},t)):t.renderDefault(t)}}}})));function zt(e,t){var a;const n=Kt(t);return T([...Array.isArray(e)?e:e(t),null==(a=t.includeDeskTool)||a?me({structure:(e,a)=>{let{schema:n}=a;return ft({S:e,schema:n,config:t})}}):null,n])}export{Be as I18nDelimiter,ke as I18nPrefix,Re as IdStructure,Ne as LanguageCultures,De as ReferenceBehavior,Le as SupportedEmojiFlagCodes,Oe as UiMessages,Je as createDeleteAction,qe as createDuplicateAction,pt as createIsSlugUnique,Ve as createPublishAction,Kt as documentI18n,ct as getDefaultDocumentNode,ft as getDocumentList,dt as getDocumentTypes,gt as getFilteredDocumentTypeListItems,mt as getMaintenanceListItem,ht as getMaintenanceTabComponent,Qe as resolveActions,zt as withDocumentI18nPlugin};
1
+ function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function t(t){for(var a=1;a<arguments.length;a++){var r=null!=arguments[a]?arguments[a]:{};a%2?e(Object(r),!0).forEach((function(e){n(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function n(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}import{jsx as a,jsxs as r,Fragment as i}from"react/jsx-runtime";import{defineType as l,defineField as o,useClient as s,useEditState as c,useValidationStatus as d,useSchema as u,SanityPreview as p,useWorkspace as m,definePlugin as h}from"sanity";import{internationalizedArray as g}from"sanity-plugin-internationalized-array";import{useToast as f,Button as y,Flex as v,Spinner as b,Text as _,Box as T,Badge as k,useClickOutside as I,Card as O,Stack as j,Popover as P}from"@sanity/ui";import{TranslateIcon as S,SplitVerticalIcon as w,CheckmarkIcon as x,AddIcon as C,CogIcon as D,ChevronRightIcon as F}from"@sanity/icons";import z,{useCallback as E,useState as L}from"react";import{uuid as B}from"@sanity/uuid";import{usePaneRouter as M}from"sanity/desk";import{RouterContext as $}from"sanity/router";import{useListeningQuery as U}from"sanity-plugin-utils";var A=e=>l({type:"document",name:"translation.metadata",title:"Translation metadata",icon:S,liveEdit:!0,fields:[o({name:"translations",type:"internationalizedArrayReference"}),o({name:"schemaTypes",description:"Used to filter the reference fields above so all translations share the same types.",type:"array",of:[{type:"string"}],options:{list:e},readOnly:e=>{let{value:t}=e;return Boolean(t)}})],preview:{select:{translations:"translations",documentSchemaTypes:"schemaTypes"},prepare(e){const{translations:t,documentSchemaTypes:n}=e,a=1===t.length?"1 Translation":"".concat(t.length," Translations"),r=t.length?t.map((e=>e._key.toUpperCase())).join(", "):"";return{title:a,subtitle:[r?"(".concat(r,")"):null,(null==n?void 0:n.length)?n.map((e=>e.toUpperCase())).join(", "):"No Schemas Defined"].filter(Boolean).join(" ")}}}});function N(e,t){const n=z.useContext($),{routerPanesState:a,groupIndex:r}=M();return z.useCallback((()=>{if(!n||!e||!t)return;const i=[...a];i.splice(r+1,0,[{id:e,params:{type:t}}]);const l=n.resolvePathFromState({panes:i});n.navigateUrl({path:l})}),[e,t,n,a,r])}function q(e,t,n){return{_key:e,value:{_type:"reference",_ref:t,_weak:!0,_strengthenOnPublish:{type:n}}}}function R(e){var n;const{index:i,language:l,languageField:o,schemaType:c,documentId:d,disabled:u,current:p,sourceId:m,sourceLanguageId:h,metadata:g,translation:I}=e,O=s(),j=f(),P=N(null==(n=null==I?void 0:I.value)?void 0:n._ref,c),S=E((()=>P()),[P]),D=E((async()=>{var e;const n=Boolean(null==g?void 0:g._id),a=O.transaction(),r=d.startsWith("drafts.")?[d,d.replace("drafts.","")]:[d,"drafts.".concat(d)],s=t(t({},await O.fetch("*[_id in $ids]|order(_updatedAt desc)[0]",{ids:r})),{},{_id:"drafts.".concat(B()),[o]:l.id});a.create(s);const u=null!=(e=null==g?void 0:g._id)?e:B(),p=q(l.id,s._id.replace("drafts.",""),c);if(n){const e="translations[".concat(i-1,"]"),t=O.patch(u).setIfMissing({translations:[]}).insert("before",e,[p]);a.patch(t)}else{const e=h?q(h,m,c):null;a.createIfNotExists({_id:u,_type:"translation.metadata",schemaTypes:[c],translations:[p,e].filter(Boolean)})}a.commit().then((()=>j.push({status:"success",title:"Created ".concat(l.title," translation"),description:n?"Updated Translations Metadata":"Created Translations Metadata"}))).catch((e=>(console.error(e),j.push({status:"error",title:"Error creating translation",description:e.message}))))}),[O,d,i,l,o,null==g?void 0:g._id,c,m,h,j]);return a(y,{onClick:I?S:D,mode:p?"default":"bleed",disabled:u||p,children:r(v,{gap:3,align:"center",children:[u?a(b,{}):a(_,{size:2,children:a(I?w:p?x:C,{})}),a(T,{flex:1,children:a(_,{children:l.title})}),a(k,{tone:u||p?"default":"primary",children:l.id})]})})}function V(e){const{id:t}=e,n=N(t,"translation.metadata");return a(y,{disabled:!t,mode:"ghost",text:"Manage Translations",icon:D,onClick:()=>n()})}function W(e){const{language:t,languageField:n,documentId:r,schemaType:i,source:l,disabled:o=!1}=e,c=s(),d=f(),u=z.useCallback((()=>{const e=l?l._id:"draft.".concat(r),a=c.transaction();l||a.createIfNotExists({_id:e,_type:i});const o=c.patch(e).set({[n]:t.id});a.patch(o),a.commit().then((()=>{d.push({title:"Set document language to ".concat(t.title),status:"success"})})).catch((e=>(console.error(e),d.push({title:"Failed to set document language to ".concat(t.title),status:"error"}))))}),[l,r,c,n,t,i,d]);return a(y,{mode:"ghost",text:t.title,icon:F,onClick:()=>u(),disabled:o,justify:"flex-start"})}function G(e){const{supportedLanguages:t,schemaType:n,documentId:l,languageField:o}=e,[s,d]=L(!1),u=E((()=>d((e=>!e))),[]),[p,m]=L(null),[h,g]=L(null),f=E((()=>d(!1)),[]);I(f,[p,h]);const{data:v,loading:b,error:k}=function(e,t){const{data:n,loading:a,error:r}=U("*[_type == $translationSchema && $id in translations[].value._ref][0]",{params:{id:e,translationSchema:"translation.metadata"}});return{data:n,loading:a,error:r}}(l),{draft:w,published:x}=c(l,n),C=w||x,D=null==C?void 0:C[o],F=t.some((e=>e.id===D)),z=a(T,{overflow:"auto",children:k?a(O,{tone:"critical",padding:2,children:r(_,{children:["Error: ",k]})}):r(j,{padding:1,space:1,children:[t.length>0?r(i,{children:[t.map(((e,t)=>{var r;return!b&&D&&F?a(R,{index:t,language:e,languageField:o,schemaType:n,documentId:l,disabled:b,current:e.id===D,metadata:v,sourceId:l,sourceLanguageId:D,translation:null==v?void 0:v.translations.find((t=>t._key===e.id))},e.id):a(W,{languageField:o,source:C,documentId:l,schemaType:n,language:e,disabled:null!=(r=null==v?void 0:v.translations.filter((e=>{var t;return(null==(t=null==e?void 0:e.value)?void 0:t._ref)!==l})).some((t=>t._key===e.id)))&&r},e.id)})),b?null:r(i,{children:[D?null:a(O,{tone:"caution",padding:3,children:r(_,{size:1,children:["Choose a language to ",a("br",{}),"apply to ",a("strong",{children:"this Document"})]})}),D&&!F?a(O,{tone:"caution",padding:3,children:r(_,{size:1,children:["Change the current language value ",a("code",{children:D}),a("br",{}),"to one of the supported languages"]})}):null]})]}):null,a(V,{id:null==v?void 0:v._id})]})});return a(P,{constrainSize:!0,content:z,open:s,portal:!0,ref:g,children:a(y,{text:"Translations",mode:"bleed",disabled:!C,tone:!C||!b&&D&&F?void 0:"caution",icon:S,onClick:u,ref:m,selected:s})})}function H(e){const{id:t,addId:n,removeId:r}=e,i=c(t,""),l=d(t,""),o=u(),s=z.useMemo((()=>l.validation.length>0&&l.validation.find((e=>"error"===e.level))),[l]);return z.useEffect((()=>{s?n(t):r(t)}),[n,t,r,s]),i.draft?a(O,{border:!0,padding:2,tone:s?"critical":"positive",children:i.published?a(p,{layout:"default",value:i.published,schemaType:o.get(i.published._type)}):a(b,{})}):null}function J(e){const{translations:t}=e.value,n=s({apiVersion:"v2022-11-21"}),{projectId:i,dataset:l}=m(),o=f(),[c,d]=z.useState([]),u=E((e=>{d((t=>[...t,e]))}),[]),p=E((e=>{d((t=>t.filter((t=>t!==e))))}),[]),h=E((()=>{const e=t.map((e=>({documentId:e.value._ref})));n.request({uri:"/publish/".concat(i,"/").concat(l),method:"POST",body:e}).then((e=>{o.push({status:"success",title:"Success",description:"Bulk publish complete"})})).catch((e=>{console.error(e),o.push({status:"error",title:"Error",description:"Bulk publish failed"})}))}),[t,n,i,l,o]);return(null==t?void 0:t.length)>0?r(j,{space:4,children:[r(j,{space:3,children:[a(_,{weight:"bold",size:1,children:"Bulk publishing"}),r(_,{children:["There"," ",1===t.length?"is 1 document":"are ".concat(t.length," documents"),"."]}),c.length>0?r(_,{weight:"medium",children:[1===c.length?"1 draft has":"".concat(c.length," drafts have")," ","validation issues that must addressed first."]}):a(_,{children:"They are all valid."})]}),a(j,{space:2,children:t.map((e=>a(H,{id:e.value._ref,addId:u,removeId:p},e._key)))}),a(y,{text:"Simultaneously Publish ".concat(1===t.length?"1 Document":"".concat(t.length," Documents")),onClick:h,disabled:Boolean(c.length)})]}):null}const K={supportedLanguages:[],schemaTypes:[],languageField:"language",bulkPublish:!1},Q=h((e=>{const{supportedLanguages:n,schemaTypes:i,languageField:l,bulkPublish:s}=t(t({},K),e);return{name:"@sanity/document-internationalization",form:{components:{input:e=>s&&"root"===e.id&&"translation.metadata"===e.schemaType.name?r(j,{space:5,children:[a(J,t({},e)),e.renderDefault(e)]}):e.renderDefault(e)}},document:{unstable_languageFilter:(e,t)=>{const{schemaType:r,documentId:o}=t;return i.includes(r)?[...e,()=>((e,t)=>a(G,{supportedLanguages:n,schemaType:e,documentId:null!=t?t:"",languageField:l}))(r,o)]:e},badges:(e,t)=>{let{schemaType:a}=t;return i.includes(a)?[e=>function(e,t,n){const a=(null==e?void 0:e.draft)||(null==e?void 0:e.published),r=null==a?void 0:a[n],i=t.find((e=>e.id===r));return i?{label:i.id,title:i.title,color:"primary"}:null}(e,n,l),...e]:e}},schema:{types:[A(i)],templates:(e,t)=>{let{schema:a}=t;return[...e,...i.map((e=>{var t,n;return{id:"".concat(e,"-parameterized"),title:"".concat(null!=(n=null==(t=null==a?void 0:a.get(e))?void 0:t.title)?n:e,": with Language"),schemaType:e,parameters:[{name:"languageId",title:"Language ID",type:"string"}],value:e=>{let{languageId:t}=e;return{[l]:t}}}})),...i.flatMap((e=>n.map((t=>({id:"".concat(e,"-").concat(t.id),title:"".concat(t.title," Lesson"),schemaType:e,value:{[l]:t.id}})))))]}},plugins:[g({languages:n,fieldTypes:[o({name:"reference",type:"reference",to:i.map((e=>({type:e}))),options:{collapsed:!1,filter:e=>{let{parent:t,document:n}=e;if(!t)return null;const a=(Array.isArray(t)?t:[t]).find((e=>e._key));return(null==a?void 0:a._key)?n.schemaTypes?{filter:"_type in $schemaTypes && ".concat(l," == $language"),params:{schemaTypes:n.schemaTypes,language:a._key}}:{filter:"".concat(l," == $language"),params:{language:a._key}}:null}}},{strict:!1})]})]}}));export{Q as documentInternationalization};
2
2
  //# sourceMappingURL=index.esm.js.map