sanity-plugin-internationalized-array 4.0.3 → 5.0.0-canary.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.
package/dist/index.js CHANGED
@@ -1,11 +1,12 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { useLanguageFilterStudioContext, languageFilter } from "@sanity/language-filter";
2
3
  import { isSanityDocument, useSchema, setIfMissing, insert, PatchEvent, useClient, useWorkspace, useFormValue, defineDocumentFieldAction, ArrayOfObjectsItem, MemberItemError, set, defineField, unset, isDocumentSchemaType, definePlugin, isObjectInputProps } from "sanity";
3
4
  import { c } from "react/compiler-runtime";
4
- import { useLanguageFilterStudioContext } from "@sanity/language-filter";
5
- import { Grid, Button, useToast, Stack, Box, Text, Card, Code, Spinner, Label, MenuButton, Menu, MenuItem, Flex, Tooltip } from "@sanity/ui";
5
+ import { Grid, Button, useToast, Stack, Box, Text, Card, Code, Flex, Spinner, Label, MenuButton, Menu, MenuItem, Tooltip } from "@sanity/ui";
6
6
  import { createContext, useContext, useDeferredValue, use, useCallback, useEffect, createElement } from "react";
7
7
  import { useDocumentPane } from "sanity/structure";
8
- import { AddIcon, TranslateIcon, RemoveCircleIcon } from "@sanity/icons";
8
+ import { randomKey } from "@sanity/util/content";
9
+ import { AddIcon, TranslateIcon, WarningOutlineIcon, RemoveCircleIcon } from "@sanity/icons";
9
10
  import { get, upperFirst, camelCase } from "lodash-es";
10
11
  const namespace = "sanity-plugin-internationalized-array", functionCache = /* @__PURE__ */ new Map(), functionKeyCache = /* @__PURE__ */ new WeakMap(), promiseCache = /* @__PURE__ */ new Map();
11
12
  function stringifyCacheKey(key) {
@@ -51,7 +52,7 @@ const preloadWithKey = (fn, key) => {
51
52
  }, setFunctionCache = (fn, selectedValue, languages, workspaceId) => {
52
53
  const key = createFunctionCacheKey(fn, selectedValue, workspaceId);
53
54
  functionCache.set(key, languages);
54
- }, LANGUAGE_FIELD_NAME = "_key", MAX_COLUMNS = {
55
+ }, LANGUAGE_FIELD_NAME = "language", MAX_COLUMNS = {
55
56
  codeOnly: 5,
56
57
  titleOnly: 4,
57
58
  titleAndCode: 3
@@ -63,7 +64,10 @@ const preloadWithKey = (fn, key) => {
63
64
  apiVersion: "2025-10-15",
64
65
  buttonLocations: ["field"],
65
66
  buttonAddAll: !0,
66
- languageDisplay: "codeOnly"
67
+ languageDisplay: "codeOnly",
68
+ languageFilter: {
69
+ documentTypes: []
70
+ }
67
71
  }, getDocumentsToTranslate = (value, rootPath = []) => {
68
72
  if (Array.isArray(value)) {
69
73
  const arrayRootPath = [...rootPath], internationalizedValues = value.filter((item) => {
@@ -101,13 +105,13 @@ function AddButtons(props) {
101
105
  languageDisplay
102
106
  } = useInternationalizedArrayContext();
103
107
  let t0;
104
- return $[0] !== handleClick || $[1] !== languageDisplay || $[2] !== languages || $[3] !== readOnly || $[4] !== value ? (t0 = languages.length > 0 ? /* @__PURE__ */ jsx(Grid, { columns: Math.min(languages.length, MAX_COLUMNS[languageDisplay]), gap: 2, children: languages.map((language) => {
108
+ return $[0] !== handleClick || $[1] !== languageDisplay || $[2] !== languages || $[3] !== readOnly || $[4] !== value ? (t0 = languages.length > 0 ? /* @__PURE__ */ jsx(Grid, { columns: Math.min(languages.length, MAX_COLUMNS[languageDisplay]), gap: 2, "data-testid": "add-buttons-grid", children: languages.map((language) => {
105
109
  const languageTitle = getLanguageDisplay(languageDisplay, language.title, language.id);
106
110
  return /* @__PURE__ */ jsx(Button, { tone: "primary", mode: "ghost", fontSize: 1, "data-testid": `add-${language.id}`, disabled: readOnly || !!value?.find((item) => item[LANGUAGE_FIELD_NAME] === language.id), text: languageTitle, icon: languages.length > MAX_COLUMNS[languageDisplay] && languageDisplay === "codeOnly" ? void 0 : AddIcon, value: language.id, onClick: () => handleClick(language.id) }, language.id);
107
111
  }) }) : null, $[0] = handleClick, $[1] = languageDisplay, $[2] = languages, $[3] = readOnly, $[4] = value, $[5] = t0) : t0 = $[5], t0;
108
112
  }
109
113
  function DocumentAddButtons(props) {
110
- const $ = c(13), {
114
+ const $ = c(14), {
111
115
  filteredLanguages
112
116
  } = useInternationalizedArrayContext(), value = isSanityDocument(props.value) ? props.value : void 0, toast = useToast(), {
113
117
  onChange
@@ -127,7 +131,7 @@ function DocumentAddButtons(props) {
127
131
  return [];
128
132
  const schemaType = schema.get(typeName);
129
133
  if (schemaType && "fields" in schemaType) {
130
- const valueField = schemaType.fields.find(_temp$2);
134
+ const valueField = schemaType.fields.find(_temp$3);
131
135
  if (valueField) {
132
136
  const fieldType = valueField.type;
133
137
  if (fieldType?.jsonType === "array" || fieldType?.name === "array" || fieldType?.type === "array" || fieldType?.of !== void 0 || fieldType?.name && arrayBasedTypes.has(fieldType.name))
@@ -137,18 +141,20 @@ function DocumentAddButtons(props) {
137
141
  }, $[2] = schema, $[3] = t1) : t1 = $[3];
138
142
  const getInitialValueForType = t1;
139
143
  let t2;
140
- $[4] !== documentsToTranslation || $[5] !== getInitialValueForType || $[6] !== onChange || $[7] !== toast ? (t2 = async (languageId) => {
144
+ $[4] !== documentsToTranslation || $[5] !== filteredLanguages || $[6] !== getInitialValueForType || $[7] !== onChange || $[8] !== toast ? (t2 = async (languageId) => {
141
145
  const alreadyTranslated = documentsToTranslation.filter((translation) => translation?.[LANGUAGE_FIELD_NAME] === languageId), removeDuplicates = documentsToTranslation.reduce((filteredTranslations, translation_0) => (alreadyTranslated.filter((alreadyTranslation) => alreadyTranslation.pathString === translation_0.pathString).length > 0 || filteredTranslations.filter((filteredTranslation) => filteredTranslation.path === translation_0.path).length > 0 || filteredTranslations.push(translation_0), filteredTranslations), []);
142
146
  if (removeDuplicates.length === 0) {
147
+ const language = filteredLanguages.find((l) => l.id === languageId);
143
148
  toast.push({
144
- status: "error",
145
- title: "No internationalizedArray fields found in document root"
149
+ status: "warning",
150
+ title: `No missing translations for ${language?.title || languageId} found.`
146
151
  });
147
152
  return;
148
153
  }
149
154
  const patches = [];
150
155
  for (const toTranslate of removeDuplicates) {
151
156
  const path = toTranslate.path, initialValue = getInitialValueForType(toTranslate._type), ifMissing = setIfMissing([], path), insertValue = insert([{
157
+ _key: randomKey(),
152
158
  [LANGUAGE_FIELD_NAME]: languageId,
153
159
  _type: toTranslate._type,
154
160
  value: initialValue
@@ -156,17 +162,17 @@ function DocumentAddButtons(props) {
156
162
  patches.push(ifMissing), patches.push(insertValue);
157
163
  }
158
164
  onChange(PatchEvent.from(patches.flat()));
159
- }, $[4] = documentsToTranslation, $[5] = getInitialValueForType, $[6] = onChange, $[7] = toast, $[8] = t2) : t2 = $[8];
165
+ }, $[4] = documentsToTranslation, $[5] = filteredLanguages, $[6] = getInitialValueForType, $[7] = onChange, $[8] = toast, $[9] = t2) : t2 = $[9];
160
166
  const handleDocumentButtonClick = t2;
161
167
  let t3;
162
- $[9] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t3 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { size: 1, weight: "semibold", children: "Add translation to internationalized fields" }) }), $[9] = t3) : t3 = $[9];
168
+ $[10] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t3 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { size: 1, weight: "semibold", children: "Add translation to internationalized fields" }) }), $[10] = t3) : t3 = $[10];
163
169
  let t4;
164
- return $[10] !== filteredLanguages || $[11] !== handleDocumentButtonClick ? (t4 = /* @__PURE__ */ jsxs(Stack, { space: 3, children: [
170
+ return $[11] !== filteredLanguages || $[12] !== handleDocumentButtonClick ? (t4 = /* @__PURE__ */ jsxs(Stack, { space: 3, children: [
165
171
  t3,
166
172
  /* @__PURE__ */ jsx(AddButtons, { languages: filteredLanguages, readOnly: !1, value: void 0, handleClick: handleDocumentButtonClick })
167
- ] }), $[10] = filteredLanguages, $[11] = handleDocumentButtonClick, $[12] = t4) : t4 = $[12], t4;
173
+ ] }), $[11] = filteredLanguages, $[12] = handleDocumentButtonClick, $[13] = t4) : t4 = $[13], t4;
168
174
  }
169
- function _temp$2(f) {
175
+ function _temp$3(f) {
170
176
  return f.name === "value";
171
177
  }
172
178
  const getSelectedValue = (select, document) => {
@@ -343,8 +349,10 @@ function createAddLanguagePatches(config) {
343
349
  const itemBase = {
344
350
  _type: type
345
351
  }, newItems = Array.isArray(addLanguageKeys) && addLanguageKeys.length > 0 ? addLanguageKeys.filter((id) => value?.length ? !value.find((v) => v[LANGUAGE_FIELD_NAME] === id) : !0).map((id) => Object.assign({}, itemBase, {
352
+ _key: randomKey(),
346
353
  [LANGUAGE_FIELD_NAME]: id
347
354
  })) : filteredLanguages.filter((language) => value?.length ? !value.find((v) => v[LANGUAGE_FIELD_NAME] === language.id) : !0).map((language) => Object.assign({}, itemBase, {
355
+ _key: randomKey(),
348
356
  [LANGUAGE_FIELD_NAME]: language.id
349
357
  })), languagesInUse = value?.length ? value.map((v) => v) : [];
350
358
  return newItems.map((item) => {
@@ -475,14 +483,86 @@ function Feedback() {
475
483
  /* @__PURE__ */ jsx(Card, { padding: 2, border: !0, radius: 2, children: /* @__PURE__ */ jsx(Code, { size: 1, language: "javascript", children: JSON.stringify(schemaExample, null, 2) }) })
476
484
  ] }) }), $[3] = t3) : t3 = $[3], t3;
477
485
  }
486
+ function MigrationBanner(t0) {
487
+ const $ = c(19), {
488
+ value,
489
+ languages
490
+ } = t0;
491
+ useToast();
492
+ let t2;
493
+ bb0: {
494
+ if (!value?.length || !languages?.length) {
495
+ let t33;
496
+ $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t33 = [], $[0] = t33) : t33 = $[0], t2 = t33;
497
+ break bb0;
498
+ }
499
+ let t32;
500
+ $[1] !== languages ? (t32 = new Set(languages.map(_temp$2)), $[1] = languages, $[2] = t32) : t32 = $[2];
501
+ const languageIds = t32;
502
+ let t42;
503
+ if ($[3] !== languageIds || $[4] !== value) {
504
+ let t52;
505
+ $[6] !== languageIds ? (t52 = (item) => item._key && languageIds.has(item._key) && !item[LANGUAGE_FIELD_NAME], $[6] = languageIds, $[7] = t52) : t52 = $[7], t42 = value.filter(t52), $[3] = languageIds, $[4] = value, $[5] = t42;
506
+ } else
507
+ t42 = $[5];
508
+ t2 = t42;
509
+ }
510
+ const itemsNeedingMigration = t2;
511
+ if (!(itemsNeedingMigration.length > 0))
512
+ return null;
513
+ let t3;
514
+ $[8] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t3 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { size: 1, children: /* @__PURE__ */ jsx(WarningOutlineIcon, {}) }) }), $[8] = t3) : t3 = $[8];
515
+ let t4;
516
+ $[9] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t4 = /* @__PURE__ */ jsx(Text, { size: 1, weight: "semibold", children: "Data migration required" }), $[9] = t4) : t4 = $[9];
517
+ const t5 = itemsNeedingMigration.length === 1 ? "" : "s", t6 = itemsNeedingMigration.length === 1 ? "needs" : "need";
518
+ let t7;
519
+ $[10] !== itemsNeedingMigration.length || $[11] !== t5 || $[12] !== t6 ? (t7 = /* @__PURE__ */ jsxs(Text, { size: 1, muted: !0, children: [
520
+ itemsNeedingMigration.length,
521
+ " item",
522
+ t5,
523
+ " ",
524
+ t6,
525
+ " to be migrated to the v5 format."
526
+ ] }), $[10] = itemsNeedingMigration.length, $[11] = t5, $[12] = t6, $[13] = t7) : t7 = $[13];
527
+ let t8;
528
+ $[14] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t8 = /* @__PURE__ */ jsx("code", { children: "_key" }), $[14] = t8) : t8 = $[14];
529
+ let t9;
530
+ $[15] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t9 = /* @__PURE__ */ jsx("code", { children: "language" }), $[15] = t9) : t9 = $[15];
531
+ let t10;
532
+ $[16] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t10 = /* @__PURE__ */ jsx(Box, { marginTop: 2, children: /* @__PURE__ */ jsxs(Text, { size: 1, children: [
533
+ "This field still uses the v4 format where language is stored in ",
534
+ t8,
535
+ ". Migrate to the v5 format where language is stored in ",
536
+ t9,
537
+ ".",
538
+ " ",
539
+ /* @__PURE__ */ jsx("a", { rel: "noopener noreferrer", target: "_blank", href: "https://github.com/sanity-io/plugins/blob/main/plugins/sanity-plugin-internationalized-array/README.md#migrate-from-v4-to-v5", children: "Learn more" }),
540
+ "."
541
+ ] }) }), $[16] = t10) : t10 = $[16];
542
+ let t11;
543
+ return $[17] !== t7 ? (t11 = /* @__PURE__ */ jsx(Card, { tone: "caution", padding: 3, radius: 2, border: !0, children: /* @__PURE__ */ jsxs(Flex, { gap: 3, align: "center", children: [
544
+ t3,
545
+ /* @__PURE__ */ jsxs(Stack, { space: 2, flex: 1, children: [
546
+ t4,
547
+ t7,
548
+ t10
549
+ ] })
550
+ ] }) }), $[17] = t7, $[18] = t11) : t11 = $[18], t11;
551
+ }
552
+ function _temp$2(l) {
553
+ return l.id;
554
+ }
478
555
  function InternationalizedArray(props) {
479
- const $ = c(89), {
556
+ const $ = c(105), {
480
557
  members,
481
558
  value: _value,
482
559
  schemaType,
483
560
  onChange,
484
561
  readOnly: documentReadOnly
485
- } = props, value = _value, readOnly = typeof schemaType.readOnly == "boolean" ? schemaType.readOnly : !1, toast = useToast(), {
562
+ } = props, value = _value;
563
+ let t0;
564
+ $[0] !== value ? (t0 = value?.filter(_temp$1) ?? [], $[0] = value, $[1] = t0) : t0 = $[1];
565
+ const itemsNeedingMigration = t0.length > 0, readOnly = typeof schemaType.readOnly == "boolean" ? schemaType.readOnly : !1, toast = useToast(), {
486
566
  languages,
487
567
  filteredLanguages,
488
568
  defaultLanguages,
@@ -492,22 +572,22 @@ function InternationalizedArray(props) {
492
572
  selectedLanguageIds,
493
573
  options: languageFilterOptions
494
574
  } = useLanguageFilterStudioContext();
495
- let t0;
496
- $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = ["_type"], $[0] = t0) : t0 = $[0];
497
- const documentType = useFormValue(t0);
498
575
  let t1;
499
- $[1] !== documentType || $[2] !== languageFilterOptions ? (t1 = typeof documentType == "string" && languageFilterOptions.documentTypes.includes(documentType), $[1] = documentType, $[2] = languageFilterOptions, $[3] = t1) : t1 = $[3];
500
- const languageFilterEnabled = t1;
576
+ $[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = ["_type"], $[2] = t1) : t1 = $[2];
577
+ const documentType = useFormValue(t1);
501
578
  let t2;
502
- $[4] !== languageFilterEnabled || $[5] !== languageFilterOptions || $[6] !== members || $[7] !== selectedLanguageIds ? (t2 = languageFilterEnabled ? members.filter((member) => {
579
+ $[3] !== documentType || $[4] !== languageFilterOptions ? (t2 = typeof documentType == "string" && languageFilterOptions.documentTypes.includes(documentType), $[3] = documentType, $[4] = languageFilterOptions, $[5] = t2) : t2 = $[5];
580
+ const languageFilterEnabled = t2;
581
+ let t3;
582
+ $[6] !== languageFilterEnabled || $[7] !== languageFilterOptions || $[8] !== members || $[9] !== selectedLanguageIds || $[10] !== value ? (t3 = languageFilterEnabled ? members.filter((member) => {
503
583
  if (member.kind !== "item")
504
584
  return !1;
505
585
  const valueMember = member.item.members[0];
506
- return !valueMember || valueMember.kind !== "field" ? !1 : languageFilterOptions.filterField(member.item.schemaType, valueMember, selectedLanguageIds);
507
- }) : members, $[4] = languageFilterEnabled, $[5] = languageFilterOptions, $[6] = members, $[7] = selectedLanguageIds, $[8] = t2) : t2 = $[8];
508
- const filteredMembers = t2;
509
- let t3;
510
- $[9] !== filteredLanguages || $[10] !== languages || $[11] !== onChange || $[12] !== schemaType.name || $[13] !== value ? (t3 = (addLanguageKeys) => {
586
+ return !valueMember || valueMember.kind !== "field" ? !1 : languageFilterOptions.filterField(member.item.schemaType, valueMember, selectedLanguageIds, value[member.index]);
587
+ }) : members, $[6] = languageFilterEnabled, $[7] = languageFilterOptions, $[8] = members, $[9] = selectedLanguageIds, $[10] = value, $[11] = t3) : t3 = $[11];
588
+ const filteredMembers = t3;
589
+ let t4;
590
+ $[12] !== filteredLanguages || $[13] !== languages || $[14] !== onChange || $[15] !== schemaType.name || $[16] !== value ? (t4 = (addLanguageKeys) => {
511
591
  if (!filteredLanguages?.length)
512
592
  return;
513
593
  const patches = createAddLanguagePatches({
@@ -518,122 +598,139 @@ function InternationalizedArray(props) {
518
598
  value
519
599
  });
520
600
  onChange([setIfMissing([]), ...patches]);
521
- }, $[9] = filteredLanguages, $[10] = languages, $[11] = onChange, $[12] = schemaType.name, $[13] = value, $[14] = t3) : t3 = $[14];
522
- const handleAddLanguage = t3, {
601
+ }, $[12] = filteredLanguages, $[13] = languages, $[14] = onChange, $[15] = schemaType.name, $[16] = value, $[17] = t4) : t4 = $[17];
602
+ const handleAddLanguage = t4, {
523
603
  isDeleting
524
604
  } = useDocumentPane();
525
- let t4;
605
+ let t5;
526
606
  bb0: {
527
607
  if (!value?.length) {
528
- let t53;
529
- $[15] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t53 = [], $[15] = t53) : t53 = $[15], t4 = t53;
608
+ let t63;
609
+ $[18] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t63 = [], $[18] = t63) : t63 = $[18], t5 = t63;
530
610
  break bb0;
531
611
  }
532
- let t52;
533
- $[16] !== value ? (t52 = value.map(_temp$1).filter(Boolean), $[16] = value, $[17] = t52) : t52 = $[17], t4 = t52;
534
- }
535
- const addedLanguages = t4;
536
- let t5;
537
- if ($[18] !== addedLanguages || $[19] !== defaultLanguages || $[20] !== languages) {
538
612
  let t62;
539
- $[22] !== languages ? (t62 = (language) => languages.find((l) => l.id === language), $[22] = languages, $[23] = t62) : t62 = $[23];
613
+ $[19] !== languages ? (t62 = new Set(languages.map(_temp2$1)), $[19] = languages, $[20] = t62) : t62 = $[20];
614
+ const languageIds = t62;
540
615
  let t72;
541
- $[24] !== addedLanguages ? (t72 = (language_0) => addedLanguages.includes(language_0), $[24] = addedLanguages, $[25] = t72) : t72 = $[25], t5 = defaultLanguages.filter(t62).every(t72), $[18] = addedLanguages, $[19] = defaultLanguages, $[20] = languages, $[21] = t5;
616
+ if ($[21] !== languageIds || $[22] !== value) {
617
+ let t82;
618
+ $[24] !== languageIds ? (t82 = (v_0) => v_0[LANGUAGE_FIELD_NAME] || (v_0._key && languageIds.has(v_0._key) ? v_0._key : null), $[24] = languageIds, $[25] = t82) : t82 = $[25], t72 = value.map(t82).filter(_temp3$1), $[21] = languageIds, $[22] = value, $[23] = t72;
619
+ } else
620
+ t72 = $[23];
621
+ t5 = t72;
622
+ }
623
+ const addedLanguages = t5;
624
+ let t6;
625
+ if ($[26] !== addedLanguages || $[27] !== defaultLanguages || $[28] !== languages) {
626
+ let t72;
627
+ $[30] !== languages ? (t72 = (language_2) => languages.find((l) => l.id === language_2), $[30] = languages, $[31] = t72) : t72 = $[31];
628
+ let t82;
629
+ $[32] !== addedLanguages ? (t82 = (language_3) => addedLanguages.includes(language_3), $[32] = addedLanguages, $[33] = t82) : t82 = $[33], t6 = defaultLanguages.filter(t72).every(t82), $[26] = addedLanguages, $[27] = defaultLanguages, $[28] = languages, $[29] = t6;
542
630
  } else
543
- t5 = $[21];
544
- const hasAddedDefaultLanguages = t5;
545
- let t6, t7;
546
- $[26] !== addedLanguages || $[27] !== defaultLanguages || $[28] !== documentReadOnly || $[29] !== handleAddLanguage || $[30] !== hasAddedDefaultLanguages || $[31] !== isDeleting || $[32] !== languages ? (t6 = () => {
547
- if (!isDeleting && !hasAddedDefaultLanguages) {
548
- const languagesToAdd = defaultLanguages.filter((language_1) => !addedLanguages.includes(language_1)).filter((language_2) => languages.find((l_0) => l_0.id === language_2)), timeout = setTimeout(() => {
631
+ t6 = $[29];
632
+ const hasAddedDefaultLanguages = t6;
633
+ let t7, t8;
634
+ $[34] !== addedLanguages || $[35] !== defaultLanguages || $[36] !== documentReadOnly || $[37] !== handleAddLanguage || $[38] !== hasAddedDefaultLanguages || $[39] !== isDeleting || $[40] !== itemsNeedingMigration || $[41] !== languages ? (t7 = () => {
635
+ if (!isDeleting && !hasAddedDefaultLanguages && !itemsNeedingMigration) {
636
+ const languagesToAdd = defaultLanguages.filter((language_4) => !addedLanguages.includes(language_4)).filter((language_5) => languages.find((l_0) => l_0.id === language_5)), timeout = setTimeout(() => {
549
637
  documentReadOnly || handleAddLanguage(languagesToAdd);
550
638
  });
551
639
  return () => clearTimeout(timeout);
552
640
  }
553
- }, t7 = [isDeleting, hasAddedDefaultLanguages, handleAddLanguage, defaultLanguages, addedLanguages, languages, documentReadOnly], $[26] = addedLanguages, $[27] = defaultLanguages, $[28] = documentReadOnly, $[29] = handleAddLanguage, $[30] = hasAddedDefaultLanguages, $[31] = isDeleting, $[32] = languages, $[33] = t6, $[34] = t7) : (t6 = $[33], t7 = $[34]), useEffect(t6, t7);
554
- let t8;
555
- $[35] !== languages || $[36] !== onChange || $[37] !== toast || $[38] !== value ? (t8 = () => {
641
+ }, t8 = [isDeleting, hasAddedDefaultLanguages, handleAddLanguage, defaultLanguages, addedLanguages, languages, documentReadOnly, itemsNeedingMigration], $[34] = addedLanguages, $[35] = defaultLanguages, $[36] = documentReadOnly, $[37] = handleAddLanguage, $[38] = hasAddedDefaultLanguages, $[39] = isDeleting, $[40] = itemsNeedingMigration, $[41] = languages, $[42] = t7, $[43] = t8) : (t7 = $[42], t8 = $[43]), useEffect(t7, t8);
642
+ let t9;
643
+ $[44] !== languages || $[45] !== onChange || $[46] !== toast || $[47] !== value ? (t9 = () => {
556
644
  if (!value?.length || !languages?.length)
557
645
  return;
558
- const updatedValue = value.reduce((acc, v_0) => {
559
- const newIndex = languages.findIndex((l_1) => l_1.id === v_0?.[LANGUAGE_FIELD_NAME]);
560
- return newIndex > -1 && (acc[newIndex] = v_0), acc;
646
+ const updatedValue = value.reduce((acc, v_1) => {
647
+ const newIndex = languages.findIndex((l_1) => l_1.id === v_1?.[LANGUAGE_FIELD_NAME]);
648
+ return newIndex > -1 && (acc[newIndex] = v_1), acc;
561
649
  }, []).filter(Boolean);
562
650
  value?.length !== updatedValue.length && toast.push({
563
651
  title: "There was an error reordering languages",
564
652
  status: "warning"
565
653
  }), onChange(set(updatedValue));
566
- }, $[35] = languages, $[36] = onChange, $[37] = toast, $[38] = value, $[39] = t8) : t8 = $[39];
567
- const handleRestoreOrder = t8;
568
- let t9;
654
+ }, $[44] = languages, $[45] = onChange, $[46] = toast, $[47] = value, $[48] = t9) : t9 = $[48];
655
+ const handleRestoreOrder = t9;
656
+ let t10;
569
657
  bb1: {
570
658
  if (!value?.length || !languages?.length) {
571
- t9 = !0;
659
+ t10 = !0;
572
660
  break bb1;
573
661
  }
574
- let t102;
575
- $[40] !== languages || $[41] !== value ? (t102 = value?.every((v_1) => languages.find((l_2) => l_2?.id === v_1?.[LANGUAGE_FIELD_NAME])), $[40] = languages, $[41] = value, $[42] = t102) : t102 = $[42], t9 = t102;
662
+ let t112;
663
+ $[49] !== languages || $[50] !== value ? (t112 = value?.every((v_2) => languages.find((l_2) => l_2?.id === v_2?.[LANGUAGE_FIELD_NAME])), $[49] = languages, $[50] = value, $[51] = t112) : t112 = $[51], t10 = t112;
576
664
  }
577
- const allKeysAreLanguages = t9;
578
- let t10;
579
- $[43] !== languages || $[44] !== value ? (t10 = languages && languages.length > 1 ? languages.filter((l_3) => value?.find((v_2) => v_2[LANGUAGE_FIELD_NAME] === l_3.id)) : [], $[43] = languages, $[44] = value, $[45] = t10) : t10 = $[45];
580
- const languagesInUse = t10;
665
+ const allKeysAreLanguages = t10;
581
666
  let t11;
667
+ $[52] !== languages || $[53] !== value ? (t11 = languages && languages.length > 1 ? languages.filter((l_3) => value?.find((v_3) => v_3[LANGUAGE_FIELD_NAME] === l_3.id)) : [], $[52] = languages, $[53] = value, $[54] = t11) : t11 = $[54];
668
+ const languagesInUse = t11;
669
+ let t12;
582
670
  bb2: {
583
671
  if (!value?.length || !languagesInUse.length) {
584
- let t123;
585
- $[46] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t123 = [], $[46] = t123) : t123 = $[46], t11 = t123;
672
+ let t133;
673
+ $[55] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t133 = [], $[55] = t133) : t133 = $[55], t12 = t133;
586
674
  break bb2;
587
675
  }
588
- let t122;
589
- if ($[47] !== languagesInUse || $[48] !== value) {
590
- let t132;
591
- $[50] !== languagesInUse ? (t132 = (v_3, vIndex) => vIndex === languagesInUse.findIndex((l_4) => l_4.id === v_3[LANGUAGE_FIELD_NAME]) ? null : v_3, $[50] = languagesInUse, $[51] = t132) : t132 = $[51], t122 = value.map(t132).filter(Boolean), $[47] = languagesInUse, $[48] = value, $[49] = t122;
676
+ let t132;
677
+ if ($[56] !== languagesInUse || $[57] !== value) {
678
+ let t142;
679
+ $[59] !== languagesInUse ? (t142 = (v_4, vIndex) => vIndex === languagesInUse.findIndex((l_4) => l_4.id === v_4[LANGUAGE_FIELD_NAME]) ? null : v_4, $[59] = languagesInUse, $[60] = t142) : t142 = $[60], t132 = value.map(t142).filter(Boolean), $[56] = languagesInUse, $[57] = value, $[58] = t132;
592
680
  } else
593
- t122 = $[49];
594
- t11 = t122;
681
+ t132 = $[58];
682
+ t12 = t132;
595
683
  }
596
- const languagesOutOfOrder = t11, languagesAreValid = !languages?.length || languages?.length && languages.every(_temp2$1);
597
- let t12;
598
- $[52] !== allKeysAreLanguages || $[53] !== documentReadOnly || $[54] !== handleRestoreOrder || $[55] !== languagesOutOfOrder.length ? (t12 = () => {
599
- languagesOutOfOrder.length > 0 && allKeysAreLanguages && !documentReadOnly && handleRestoreOrder();
600
- }, $[52] = allKeysAreLanguages, $[53] = documentReadOnly, $[54] = handleRestoreOrder, $[55] = languagesOutOfOrder.length, $[56] = t12) : t12 = $[56];
684
+ const languagesOutOfOrder = t12, languagesAreValid = !languages?.length || languages?.length && languages.every(_temp4$1);
601
685
  let t13;
602
- $[57] !== allKeysAreLanguages || $[58] !== documentReadOnly || $[59] !== handleRestoreOrder || $[60] !== languagesOutOfOrder ? (t13 = [languagesOutOfOrder, allKeysAreLanguages, handleRestoreOrder, documentReadOnly], $[57] = allKeysAreLanguages, $[58] = documentReadOnly, $[59] = handleRestoreOrder, $[60] = languagesOutOfOrder, $[61] = t13) : t13 = $[61], useEffect(t12, t13);
686
+ $[61] !== allKeysAreLanguages || $[62] !== documentReadOnly || $[63] !== handleRestoreOrder || $[64] !== languagesOutOfOrder.length ? (t13 = () => {
687
+ languagesOutOfOrder.length > 0 && allKeysAreLanguages && !documentReadOnly && handleRestoreOrder();
688
+ }, $[61] = allKeysAreLanguages, $[62] = documentReadOnly, $[63] = handleRestoreOrder, $[64] = languagesOutOfOrder.length, $[65] = t13) : t13 = $[65];
603
689
  let t14;
604
- $[62] !== filteredLanguages || $[63] !== value ? (t14 = checkAllLanguagesArePresent(filteredLanguages, value), $[62] = filteredLanguages, $[63] = value, $[64] = t14) : t14 = $[64];
605
- const allLanguagesArePresent = t14;
690
+ $[66] !== allKeysAreLanguages || $[67] !== documentReadOnly || $[68] !== handleRestoreOrder || $[69] !== languagesOutOfOrder ? (t14 = [languagesOutOfOrder, allKeysAreLanguages, handleRestoreOrder, documentReadOnly], $[66] = allKeysAreLanguages, $[67] = documentReadOnly, $[68] = handleRestoreOrder, $[69] = languagesOutOfOrder, $[70] = t14) : t14 = $[70], useEffect(t13, t14);
691
+ let t15;
692
+ $[71] !== filteredLanguages || $[72] !== value ? (t15 = checkAllLanguagesArePresent(filteredLanguages, value), $[71] = filteredLanguages, $[72] = value, $[73] = t15) : t15 = $[73];
693
+ const allLanguagesArePresent = t15;
606
694
  if (!languagesAreValid) {
607
- let t152;
608
- return $[65] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t152 = /* @__PURE__ */ jsx(Feedback, {}), $[65] = t152) : t152 = $[65], t152;
695
+ let t162;
696
+ return $[74] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t162 = /* @__PURE__ */ jsx(Feedback, {}), $[74] = t162) : t162 = $[74], t162;
609
697
  }
610
- let t15;
611
- $[66] !== allLanguagesArePresent || $[67] !== buttonLocations || $[68] !== filteredLanguages?.length ? (t15 = buttonLocations.includes("field") && filteredLanguages?.length > 0 && !allLanguagesArePresent, $[66] = allLanguagesArePresent, $[67] = buttonLocations, $[68] = filteredLanguages?.length, $[69] = t15) : t15 = $[69];
612
- const addButtonsAreVisible = t15, fieldHasMembers = members?.length > 0;
613
698
  let t16;
614
- $[70] !== fieldHasMembers || $[71] !== filteredMembers || $[72] !== props ? (t16 = fieldHasMembers ? /* @__PURE__ */ jsx(Fragment, { children: filteredMembers.map((member_0) => member_0.kind === "item" ? /* @__PURE__ */ createElement(ArrayOfObjectsItem, { ...props, key: member_0.key, member: member_0 }) : /* @__PURE__ */ jsx(MemberItemError, { member: member_0 }, member_0.key)) }) : null, $[70] = fieldHasMembers, $[71] = filteredMembers, $[72] = props, $[73] = t16) : t16 = $[73];
699
+ $[75] !== allLanguagesArePresent || $[76] !== buttonLocations || $[77] !== filteredLanguages?.length || $[78] !== itemsNeedingMigration ? (t16 = !itemsNeedingMigration && buttonLocations.includes("field") && filteredLanguages?.length > 0 && !allLanguagesArePresent, $[75] = allLanguagesArePresent, $[76] = buttonLocations, $[77] = filteredLanguages?.length, $[78] = itemsNeedingMigration, $[79] = t16) : t16 = $[79];
700
+ const addButtonsAreVisible = t16, fieldHasMembers = members?.length > 0;
615
701
  let t17;
616
- $[74] !== addButtonsAreVisible || $[75] !== fieldHasMembers ? (t17 = !addButtonsAreVisible && !fieldHasMembers ? /* @__PURE__ */ jsx(Card, { border: !0, tone: "transparent", padding: 3, radius: 2, children: /* @__PURE__ */ jsx(Text, { size: 1, children: "This internationalized field currently has no translations." }) }) : null, $[74] = addButtonsAreVisible, $[75] = fieldHasMembers, $[76] = t17) : t17 = $[76];
702
+ $[80] !== languages || $[81] !== onChange || $[82] !== readOnly || $[83] !== value ? (t17 = /* @__PURE__ */ jsx(MigrationBanner, { value, languages, onChange, readOnly }), $[80] = languages, $[81] = onChange, $[82] = readOnly, $[83] = value, $[84] = t17) : t17 = $[84];
617
703
  let t18;
618
- $[77] !== addButtonsAreVisible || $[78] !== allLanguagesArePresent || $[79] !== buttonAddAll || $[80] !== filteredLanguages || $[81] !== handleAddLanguage || $[82] !== readOnly || $[83] !== value ? (t18 = addButtonsAreVisible ? /* @__PURE__ */ jsxs(Stack, { space: 2, children: [
619
- /* @__PURE__ */ jsx(AddButtons, { languages: filteredLanguages, value, readOnly, handleClick: handleAddLanguage }),
620
- buttonAddAll ? /* @__PURE__ */ jsx(Button, { tone: "primary", mode: "ghost", "data-testid": "add-all-languages", disabled: readOnly || allLanguagesArePresent, icon: AddIcon, text: createAddAllTitle(value, filteredLanguages), onClick: () => handleAddLanguage(filteredLanguages.map(_temp3$1)) }) : null
621
- ] }) : null, $[77] = addButtonsAreVisible, $[78] = allLanguagesArePresent, $[79] = buttonAddAll, $[80] = filteredLanguages, $[81] = handleAddLanguage, $[82] = readOnly, $[83] = value, $[84] = t18) : t18 = $[84];
704
+ $[85] !== fieldHasMembers || $[86] !== filteredMembers || $[87] !== props ? (t18 = fieldHasMembers ? /* @__PURE__ */ jsx(Fragment, { children: filteredMembers.map((member_0) => member_0.kind === "item" ? /* @__PURE__ */ createElement(ArrayOfObjectsItem, { ...props, key: member_0.key, member: member_0 }) : /* @__PURE__ */ jsx(MemberItemError, { member: member_0 }, member_0.key)) }) : null, $[85] = fieldHasMembers, $[86] = filteredMembers, $[87] = props, $[88] = t18) : t18 = $[88];
622
705
  let t19;
623
- return $[85] !== t16 || $[86] !== t17 || $[87] !== t18 ? (t19 = /* @__PURE__ */ jsxs(Stack, { space: 2, children: [
624
- t16,
706
+ $[89] !== addButtonsAreVisible || $[90] !== fieldHasMembers ? (t19 = !addButtonsAreVisible && !fieldHasMembers ? /* @__PURE__ */ jsx(Card, { border: !0, tone: "transparent", padding: 3, radius: 2, children: /* @__PURE__ */ jsx(Text, { size: 1, children: "This internationalized field currently has no translations." }) }) : null, $[89] = addButtonsAreVisible, $[90] = fieldHasMembers, $[91] = t19) : t19 = $[91];
707
+ let t20;
708
+ $[92] !== addButtonsAreVisible || $[93] !== allLanguagesArePresent || $[94] !== buttonAddAll || $[95] !== filteredLanguages || $[96] !== handleAddLanguage || $[97] !== readOnly || $[98] !== value ? (t20 = addButtonsAreVisible ? /* @__PURE__ */ jsxs(Stack, { space: 2, children: [
709
+ /* @__PURE__ */ jsx(AddButtons, { languages: filteredLanguages, value, readOnly, handleClick: handleAddLanguage }),
710
+ buttonAddAll ? /* @__PURE__ */ jsx(Button, { tone: "primary", mode: "ghost", "data-testid": "add-all-languages", disabled: readOnly || allLanguagesArePresent, icon: AddIcon, text: createAddAllTitle(value, filteredLanguages), onClick: () => handleAddLanguage(filteredLanguages.map(_temp5)) }) : null
711
+ ] }) : null, $[92] = addButtonsAreVisible, $[93] = allLanguagesArePresent, $[94] = buttonAddAll, $[95] = filteredLanguages, $[96] = handleAddLanguage, $[97] = readOnly, $[98] = value, $[99] = t20) : t20 = $[99];
712
+ let t21;
713
+ return $[100] !== t17 || $[101] !== t18 || $[102] !== t19 || $[103] !== t20 ? (t21 = /* @__PURE__ */ jsxs(Stack, { space: 2, children: [
625
714
  t17,
626
- t18
627
- ] }), $[85] = t16, $[86] = t17, $[87] = t18, $[88] = t19) : t19 = $[88], t19;
715
+ t18,
716
+ t19,
717
+ t20
718
+ ] }), $[100] = t17, $[101] = t18, $[102] = t19, $[103] = t20, $[104] = t21) : t21 = $[104], t21;
628
719
  }
629
- function _temp3$1(language_3) {
630
- return language_3.id;
720
+ function _temp5(language_6) {
721
+ return language_6.id;
631
722
  }
632
- function _temp2$1(item) {
723
+ function _temp4$1(item) {
633
724
  return item.id && item.title;
634
725
  }
726
+ function _temp3$1(language_1) {
727
+ return !!language_1;
728
+ }
729
+ function _temp2$1(language) {
730
+ return language.id;
731
+ }
635
732
  function _temp$1(v) {
636
- return v[LANGUAGE_FIELD_NAME] ?? v._key;
733
+ return !v[LANGUAGE_FIELD_NAME];
637
734
  }
638
735
  function getLanguagesFieldOption(schemaType) {
639
736
  return schemaType ? schemaType.options?.languages || getLanguagesFieldOption(schemaType.type) : void 0;
@@ -665,7 +762,19 @@ var array = (config) => {
665
762
  })],
666
763
  // @ts-expect-error - fix typings
667
764
  validation: (rule) => rule.custom(async (value, context) => {
668
- if (!value || value.length === 0 || value.length === 1 && !value[0]?.[LANGUAGE_FIELD_NAME])
765
+ if (!value || value.length === 0)
766
+ return !0;
767
+ const itemsMissingLanguage = value.filter((item) => item && !item[LANGUAGE_FIELD_NAME] && item._key);
768
+ if (itemsMissingLanguage.length > 0)
769
+ return {
770
+ message: "Language is required for each array item. Run the migration to update your data from the old format.",
771
+ paths: itemsMissingLanguage.flatMap((item) => [[{
772
+ _key: item._key
773
+ }], [{
774
+ _key: item._key
775
+ }, "value"]])
776
+ };
777
+ if (value.length === 1 && !value[0]?.[LANGUAGE_FIELD_NAME])
669
778
  return !0;
670
779
  const selectedValue = getSelectedValue(select, context.document), client = context.getClient({
671
780
  apiVersion
@@ -717,7 +826,7 @@ function getToneFromValidation(validations) {
717
826
  return "caution";
718
827
  }
719
828
  function InternationalizedInput(props) {
720
- const $ = c(13);
829
+ const $ = c(11);
721
830
  let t0;
722
831
  $[0] !== props.path ? (t0 = props.path.slice(0, -1), $[0] = props.path, $[1] = t0) : t0 = $[1];
723
832
  const parentValue = useFormValue(t0), originalOnChange = props.inputProps.onChange;
@@ -753,7 +862,7 @@ function InternationalizedInput(props) {
753
862
  } = useInternationalizedArrayContext();
754
863
  let t2;
755
864
  $[5] !== parentValue ? (t2 = parentValue?.map(_temp4) ?? [], $[5] = parentValue, $[6] = t2) : t2 = $[6];
756
- const languageKeysInUse = t2, keyIsValid = languages?.length ? languages.find((l) => l.id === value[LANGUAGE_FIELD_NAME]) : !1, handleKeyChange = (event) => {
865
+ const languageKeysInUse = t2, itemNeedsMigration = !value[LANGUAGE_FIELD_NAME], keyIsValid = languages?.length ? languages.find((l) => l.id === value[LANGUAGE_FIELD_NAME]) : !1, handleKeyChange = (event) => {
757
866
  const languageId = event?.currentTarget?.value;
758
867
  !value || !languages?.length || !languages.find((l_0) => l_0.id === languageId) || onChange([set(languageId, [LANGUAGE_FIELD_NAME])]);
759
868
  }, handleUnset = () => {
@@ -763,17 +872,14 @@ function InternationalizedInput(props) {
763
872
  let t32;
764
873
  return $[7] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t32 = /* @__PURE__ */ jsx(Spinner, {}), $[7] = t32) : t32 = $[7], t32;
765
874
  }
766
- const language = languages.find((l_1) => l_1.id === value[LANGUAGE_FIELD_NAME]), languageTitle = keyIsValid && language ? getLanguageDisplay(languageDisplay, language.title, language.id) : "", isDefault = defaultLanguages.includes(value[LANGUAGE_FIELD_NAME]), removeButton = /* @__PURE__ */ jsx(Button, { mode: "bleed", icon: RemoveCircleIcon, tone: "critical", disabled: readOnly || isDefault, onClick: handleUnset }), t3 = getToneFromValidation(validation), t4 = keyIsValid ? /* @__PURE__ */ jsx(Label, { muted: !0, size: 1, children: languageTitle }) : /* @__PURE__ */ jsx(MenuButton, { button: /* @__PURE__ */ jsx(Button, { fontSize: 1, text: `Change "${value[LANGUAGE_FIELD_NAME]}"` }), id: `${value[LANGUAGE_FIELD_NAME]}-change-key`, menu: /* @__PURE__ */ jsx(Menu, { children: languages.map((lang) => /* @__PURE__ */ jsx(MenuItem, { disabled: languageKeysInUse.includes(lang.id), fontSize: 1, text: lang.id.toLocaleUpperCase(), value: lang.id, onClick: handleKeyChange }, lang.id)) }), popover: {
767
- portal: !0
768
- } });
769
- let t5;
770
- $[8] !== t4 ? (t5 = /* @__PURE__ */ jsx(Card, { tone: "inherit", children: t4 }), $[8] = t4, $[9] = t5) : t5 = $[9];
771
- const T0 = Card, t6 = 1, t7 = "inherit", t8 = props.inputProps.renderInput(inlineProps);
772
- let t9;
773
- return $[10] !== T0 || $[11] !== t8 ? (t9 = /* @__PURE__ */ jsx(T0, { flex: t6, tone: t7, children: t8 }), $[10] = T0, $[11] = t8, $[12] = t9) : t9 = $[12], /* @__PURE__ */ jsx(Card, { paddingTop: 2, tone: t3, children: /* @__PURE__ */ jsxs(Stack, { space: 2, children: [
774
- t5,
875
+ const language = languages.find((l_1) => l_1.id === value[LANGUAGE_FIELD_NAME]), languageTitle = keyIsValid && language ? getLanguageDisplay(languageDisplay, language.title, language.id) : "", isDefault = defaultLanguages.includes(value[LANGUAGE_FIELD_NAME]), removeButton = /* @__PURE__ */ jsx(Button, { mode: "bleed", icon: RemoveCircleIcon, tone: "critical", disabled: readOnly || isDefault, onClick: handleUnset }), t3 = getToneFromValidation(validation), T0 = Card, t4 = 1, t5 = "inherit", t6 = props.inputProps.renderInput(inlineProps);
876
+ let t7;
877
+ return $[8] !== T0 || $[9] !== t6 ? (t7 = /* @__PURE__ */ jsx(T0, { flex: t4, tone: t5, children: t6 }), $[8] = T0, $[9] = t6, $[10] = t7) : t7 = $[10], /* @__PURE__ */ jsx(Card, { paddingTop: 2, tone: t3, children: /* @__PURE__ */ jsxs(Stack, { space: 2, children: [
878
+ !itemNeedsMigration && /* @__PURE__ */ jsx(Card, { tone: "inherit", children: keyIsValid ? /* @__PURE__ */ jsx(Label, { muted: !0, size: 1, children: languageTitle }) : /* @__PURE__ */ jsx(MenuButton, { button: /* @__PURE__ */ jsx(Button, { fontSize: 1, text: `Change "${value[LANGUAGE_FIELD_NAME]}"` }), id: `${value[LANGUAGE_FIELD_NAME]}-change-key`, menu: /* @__PURE__ */ jsx(Menu, { children: languages.map((lang) => /* @__PURE__ */ jsx(MenuItem, { disabled: languageKeysInUse.includes(lang.id), fontSize: 1, text: lang.id.toLocaleUpperCase(), value: lang.id, onClick: handleKeyChange }, lang.id)) }), popover: {
879
+ portal: !0
880
+ } }) }),
775
881
  /* @__PURE__ */ jsxs(Flex, { align: "center", gap: 2, children: [
776
- t9,
882
+ t7,
777
883
  /* @__PURE__ */ jsx(Card, { tone: "inherit", children: isDefault ? /* @__PURE__ */ jsx(Tooltip, { content: /* @__PURE__ */ jsx(Text, { muted: !0, size: 1, children: "Can't remove default language" }), fallbackPlacements: ["right", "left"], placement: "top", portal: !0, children: /* @__PURE__ */ jsx("span", { children: removeButton }) }) : removeButton })
778
884
  ] })
779
885
  ] }) });
@@ -811,12 +917,22 @@ var object = (config) => {
811
917
  // @ts-expect-error - fix typings
812
918
  item: InternationalizedInput
813
919
  },
814
- fields: [defineField({
815
- ...typeof type == "string" ? {
816
- type
817
- } : type,
818
- name: "value"
819
- })],
920
+ fields: [
921
+ defineField({
922
+ ...typeof type == "string" ? {
923
+ type
924
+ } : type,
925
+ name: "value"
926
+ }),
927
+ // Hidden language field - stores the language identifier (e.g., 'en', 'fr')
928
+ // This replaces the previous pattern of storing language in _key
929
+ defineField({
930
+ name: "language",
931
+ type: "string",
932
+ hidden: !0,
933
+ validation: (Rule) => Rule.required()
934
+ })
935
+ ],
820
936
  preview: {
821
937
  select: {
822
938
  title: "value",
@@ -849,7 +965,13 @@ function extractInnerFields(fields, path, maxDepth) {
849
965
  return acc.push(thisFieldWithPath), acc;
850
966
  }, []);
851
967
  }
852
- const internationalizedArray = definePlugin((config) => {
968
+ const internationalizedArrayLanguageFilter = (enclosingType, _member, selectedLanguageIds, parentValue) => {
969
+ if (isInternationalizedArrayItemType(enclosingType.name)) {
970
+ const language = typeof parentValue?.language == "string" ? parentValue?.language : null;
971
+ return language ? selectedLanguageIds.includes(language) : !1;
972
+ }
973
+ return !0;
974
+ }, internationalizedArray = definePlugin((config) => {
853
975
  const pluginConfig = {
854
976
  ...CONFIG_DEFAULT,
855
977
  ...config
@@ -858,7 +980,8 @@ const internationalizedArray = definePlugin((config) => {
858
980
  select,
859
981
  languages,
860
982
  fieldTypes,
861
- buttonLocations
983
+ buttonLocations,
984
+ languageFilter: languageFilterConfig
862
985
  } = pluginConfig;
863
986
  return {
864
987
  name: "sanity-plugin-internationalized-array",
@@ -892,13 +1015,19 @@ const internationalizedArray = definePlugin((config) => {
892
1015
  })), ...fieldTypes.map((type) => object({
893
1016
  type
894
1017
  }))]
895
- }
1018
+ },
1019
+ plugins: languageFilterConfig?.documentTypes?.length > 0 ? [languageFilter({
1020
+ documentTypes: languageFilterConfig.documentTypes,
1021
+ supportedLanguages: languages,
1022
+ filterField: internationalizedArrayLanguageFilter
1023
+ })] : void 0
896
1024
  };
897
1025
  });
898
1026
  export {
899
1027
  LANGUAGE_FIELD_NAME,
900
1028
  clear,
901
1029
  internationalizedArray,
1030
+ internationalizedArrayLanguageFilter,
902
1031
  isInternationalizedArrayItemType
903
1032
  };
904
1033
  //# sourceMappingURL=index.js.map