@treeviz/gedcom-parser 2.1.11 → 2.1.15

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 (45) hide show
  1. package/dist/classes/index.js +732 -396
  2. package/dist/classes/indi.d.ts +2 -2
  3. package/dist/classes/indi.d.ts.map +1 -1
  4. package/dist/cli/index.js +733 -397
  5. package/dist/constants/index.js +731 -395
  6. package/dist/factories/index.js +731 -395
  7. package/dist/factories/kinship-factory.d.ts +2 -2
  8. package/dist/factories/kinship-factory.d.ts.map +1 -1
  9. package/dist/index.js +733 -397
  10. package/dist/kinship-translator/index.js +731 -395
  11. package/dist/kinship-translator/kinship-translator.basic.d.ts +3 -1
  12. package/dist/kinship-translator/kinship-translator.basic.d.ts.map +1 -1
  13. package/dist/kinship-translator/kinship-translator.d.ts +3 -2
  14. package/dist/kinship-translator/kinship-translator.d.ts.map +1 -1
  15. package/dist/kinship-translator/kinship-translator.de.d.ts +2 -3
  16. package/dist/kinship-translator/kinship-translator.de.d.ts.map +1 -1
  17. package/dist/kinship-translator/kinship-translator.en.d.ts.map +1 -1
  18. package/dist/kinship-translator/kinship-translator.es.d.ts +2 -3
  19. package/dist/kinship-translator/kinship-translator.es.d.ts.map +1 -1
  20. package/dist/kinship-translator/kinship-translator.fr.d.ts +2 -3
  21. package/dist/kinship-translator/kinship-translator.fr.d.ts.map +1 -1
  22. package/dist/kinship-translator/kinship-translator.hu.d.ts.map +1 -1
  23. package/dist/kinship-translator/kinship-translator.ja.d.ts.map +1 -1
  24. package/dist/kinship-translator/kinship-translator.ru.d.ts +1 -1
  25. package/dist/kinship-translator/kinship-translator.ru.d.ts.map +1 -1
  26. package/dist/kinship-translator/kinship-translator.zh.d.ts.map +1 -1
  27. package/dist/kinship-translator/patterns.de.d.ts +1 -0
  28. package/dist/kinship-translator/patterns.de.d.ts.map +1 -1
  29. package/dist/kinship-translator/patterns.es.d.ts +1 -0
  30. package/dist/kinship-translator/patterns.es.d.ts.map +1 -1
  31. package/dist/kinship-translator/patterns.fr.d.ts +1 -0
  32. package/dist/kinship-translator/patterns.fr.d.ts.map +1 -1
  33. package/dist/kinship-translator/patterns.hu.d.ts.map +1 -1
  34. package/dist/kinship-translator/patterns.ru.d.ts +1 -0
  35. package/dist/kinship-translator/patterns.ru.d.ts.map +1 -1
  36. package/dist/kinship-translator/patterns.zh.d.ts.map +1 -1
  37. package/dist/structures/gedcom.d.ts +1 -0
  38. package/dist/structures/gedcom.d.ts.map +1 -1
  39. package/dist/structures/individual.d.ts +1 -0
  40. package/dist/structures/individual.d.ts.map +1 -1
  41. package/dist/types/types.d.ts +2 -0
  42. package/dist/types/types.d.ts.map +1 -1
  43. package/dist/utils/common-creator.d.ts.map +1 -1
  44. package/dist/utils/index.js +733 -397
  45. package/package.json +1 -1
@@ -5218,14 +5218,15 @@ var Indi = class extends Common {
5218
5218
  }
5219
5219
  return foundPath;
5220
5220
  }
5221
- kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname") {
5221
+ kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname", nameOrder) {
5222
5222
  const KinshipTranslatorClass2 = getKinshipTranslatorClass();
5223
5223
  const translator = new KinshipTranslatorClass2(
5224
5224
  this,
5225
5225
  other,
5226
5226
  lang,
5227
5227
  entirePath,
5228
- showMainPerson ? displayName : void 0
5228
+ showMainPerson ? displayName : void 0,
5229
+ nameOrder
5229
5230
  );
5230
5231
  return translator.translate(!!showMainPerson);
5231
5232
  }
@@ -6156,11 +6157,12 @@ var hungarianOrdinalize = (n) => {
6156
6157
 
6157
6158
  // src/kinship-translator/kinship-translator.basic.ts
6158
6159
  var KinshipTranslatorBasic = class {
6159
- constructor(path, displayName = "givenname") {
6160
+ constructor(path, displayName = "givenname", nameOrder = "first-last") {
6160
6161
  this.isOfSpouse = false;
6161
6162
  this.isSpouseOf = false;
6162
6163
  this._path = path;
6163
6164
  this.displayName = displayName;
6165
+ this.nameOrder = nameOrder;
6164
6166
  }
6165
6167
  get path() {
6166
6168
  return this._path;
@@ -6439,7 +6441,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6439
6441
  }
6440
6442
  return `${hungarianOrdinalize(
6441
6443
  degree
6442
- )}unokatestv\xE9r ${level}x elt\xE1vol\xEDtva`;
6444
+ )}unokatestv\xE9r ${Math.abs(level)}x elt\xE1vol\xEDtva`;
6443
6445
  }
6444
6446
  auncle() {
6445
6447
  const level = this.pathN?.level ?? 0;
@@ -6483,14 +6485,25 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6483
6485
  return `${ordinalized ? `${ordinalized}unoka` : ""}testv\xE9r ${origPrefix.replace(/nagy$/, "")}unok\xE1ja`;
6484
6486
  }
6485
6487
  parent() {
6488
+ const level = Math.abs(this.pathN?.level ?? 0);
6489
+ if (level <= 1) {
6490
+ if (this.personN?.isMale()) {
6491
+ return "apa";
6492
+ }
6493
+ if (this.personN?.isFemale()) {
6494
+ return "anya";
6495
+ }
6496
+ return "sz\xFCl\u0151";
6497
+ }
6486
6498
  const prefix = this.directPrefix();
6499
+ const gen = prefix === "nagy" ? "" : prefix;
6487
6500
  if (this.personN?.isMale()) {
6488
- return `${prefix}apa`;
6501
+ return `${gen}nagyapa`;
6489
6502
  }
6490
6503
  if (this.personN?.isFemale()) {
6491
- return `${prefix}anya`;
6504
+ return `${gen}nagyanya`;
6492
6505
  }
6493
- return `${prefix}sz\xFCl\u0151`;
6506
+ return `${gen}nagysz\xFCl\u0151`;
6494
6507
  }
6495
6508
  child() {
6496
6509
  const level = Math.abs(this.pathN?.level ?? 0);
@@ -6572,7 +6585,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6572
6585
  }
6573
6586
  of(relation) {
6574
6587
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6575
- nameOrder: "last-first"
6588
+ nameOrder: this.nameOrder
6576
6589
  });
6577
6590
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6578
6591
  if (this.displayName === "none") {
@@ -6684,27 +6697,30 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6684
6697
  if (!degree) {
6685
6698
  return level < 0 ? this.nibling() : this.auncle();
6686
6699
  }
6687
- return `${ordinalize(degree)} cousin ${level}x removed`;
6700
+ return `${ordinalize(degree)} cousin ${Math.abs(level)}x removed`;
6688
6701
  }
6689
6702
  auncle() {
6690
- const prefix = this.directPrefix();
6703
+ const level = Math.abs(this.pathN?.level ?? 0);
6704
+ const greats = level <= 1 ? "" : "great-".repeat(level - 1);
6691
6705
  if (this.personN?.isMale()) {
6692
- return `${prefix}uncle`;
6706
+ return `${greats}uncle`;
6693
6707
  }
6694
6708
  if (this.personN?.isFemale()) {
6695
- return `${prefix}aunt`;
6709
+ return `${greats}aunt`;
6696
6710
  }
6697
- return `${prefix}auncle`;
6711
+ return greats ? `${greats}uncle/${greats}aunt` : "uncle/aunt";
6698
6712
  }
6699
6713
  nibling() {
6700
- const prefix = this.directPrefix();
6714
+ const level = Math.abs(this.pathN?.level ?? 0);
6715
+ const greats = level <= 2 ? "" : "great-".repeat(level - 2);
6716
+ const grand = level <= 1 ? "" : "grand";
6701
6717
  if (this.personN?.isMale()) {
6702
- return `${prefix}nephew`;
6718
+ return `${greats}${grand}nephew`;
6703
6719
  }
6704
6720
  if (this.personN?.isFemale()) {
6705
- return `${prefix}niece`;
6721
+ return `${greats}${grand}niece`;
6706
6722
  }
6707
- return `${prefix}nibling`;
6723
+ return greats || grand ? `${greats}${grand}nephew/${greats}${grand}niece` : "nephew/niece";
6708
6724
  }
6709
6725
  parent() {
6710
6726
  const prefix = this.directPrefix();
@@ -6783,7 +6799,7 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6783
6799
  }
6784
6800
  of(relation) {
6785
6801
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6786
- nameOrder: "first-last"
6802
+ nameOrder: this.nameOrder
6787
6803
  });
6788
6804
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6789
6805
  if (this.displayName === "none") {
@@ -6832,45 +6848,64 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6832
6848
  };
6833
6849
 
6834
6850
  // src/kinship-translator/patterns.de.ts
6851
+ var parentRelationsDe = {
6852
+ step: "Stief",
6853
+ foster: "Pflege",
6854
+ adopted: "Adoptiv"
6855
+ };
6835
6856
  var InLawsDe = {
6836
- "Ehepartner von (kind|tochter|sohn)": "Schwiegerkind",
6837
- "Ehefrau von (kind|tochter|sohn)": "Schwiegertochter",
6838
- "Ehemann von (kind|tochter|sohn)": "Schwiegersohn",
6839
- "mutter des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegermutter",
6840
- "vater des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegervater",
6841
- "elternteil des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegerelternteil",
6842
- "Ehefrau von (Halb)?(geschwister|schwester|bruder)": "Schw\xE4gerin",
6843
- "Ehemann von (Halb)?(geschwister|schwester|bruder)": "Schwager",
6844
- "Ehepartner von (Halb)?(geschwister|schwester|bruder)": "Schwager/Schw\xE4gerin",
6845
- "(Halb)?schwester des (Ehepartner|Ehefrau|Ehemann)s": "Schw\xE4gerin",
6846
- "(Halb)?bruder des (Ehepartner|Ehefrau|Ehemann)s": "Schwager",
6847
- "(Halb)?geschwister des (Ehepartner|Ehefrau|Ehemann)s": "Schwager/Schw\xE4gerin"
6857
+ "Ehepartner von (Kind|Tochter|Sohn)": "Schwiegerkind",
6858
+ "Ehefrau von (Kind|Tochter|Sohn)": "Schwiegertochter",
6859
+ "Ehemann von (Kind|Tochter|Sohn)": "Schwiegersohn",
6860
+ "Mutter (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegermutter",
6861
+ "Vater (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegervater",
6862
+ "Elternteil (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegerelternteil",
6863
+ "Ehefrau von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schw\xE4gerin",
6864
+ "Ehemann von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager",
6865
+ "Ehepartner von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager/Schw\xE4gerin",
6866
+ "(Halb)?-?(Schwester|schwester) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schw\xE4gerin",
6867
+ "(Halb)?-?(Bruder|bruder) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager",
6868
+ "(Halb)?-?(Geschwister|geschwister) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager/Schw\xE4gerin"
6848
6869
  };
6849
6870
 
6850
6871
  // src/kinship-translator/kinship-translator.de.ts
6851
- var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6852
- directPrefix() {
6853
- const level = Math.abs(this.pathN?.level ?? 0);
6854
- if (level <= 1) {
6855
- return "";
6856
- }
6857
- if (level === 2) {
6858
- return "Gro\xDF";
6859
- }
6860
- if (level === 3) {
6861
- return "Urgro\xDF";
6862
- }
6863
- return `Ur${level - 2}-gro\xDF`;
6872
+ var sexOf = (person) => {
6873
+ if (person?.isMale?.()) {
6874
+ return "m";
6875
+ }
6876
+ if (person?.isFemale?.()) {
6877
+ return "f";
6864
6878
  }
6879
+ return "n";
6880
+ };
6881
+ var pick = (sex, male, female, neutral) => {
6882
+ if (sex === "m") {
6883
+ return male;
6884
+ }
6885
+ if (sex === "f") {
6886
+ return female;
6887
+ }
6888
+ return neutral;
6889
+ };
6890
+ var ur = (count) => count > 0 ? "Ur".repeat(count) : "";
6891
+ var genitiveArticle = (spouseType) => {
6892
+ if (spouseType === "Ehefrau") {
6893
+ return `der ${spouseType}`;
6894
+ }
6895
+ return `des ${spouseType}s`;
6896
+ };
6897
+ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6865
6898
  indirect() {
6866
6899
  let degree = Math.abs(this.pathN?.degree ?? 0);
6867
6900
  if (degree > 0) {
6868
6901
  degree = degree - 1;
6869
6902
  }
6870
- if (degree === 1) {
6871
- return `Cousin`;
6903
+ const sex = sexOf(this.personN);
6904
+ const cousin = pick(sex, "Cousin", "Cousine", "Cousin/Cousine");
6905
+ if (degree <= 1) {
6906
+ return cousin;
6872
6907
  }
6873
- return `Cousin ${degree}. Grades`;
6908
+ return `${cousin} ${degree}. Grades`;
6874
6909
  }
6875
6910
  removal() {
6876
6911
  const level = this.pathN?.level ?? 0;
@@ -6881,106 +6916,106 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6881
6916
  if (!degree) {
6882
6917
  return level < 0 ? this.nibling() : this.auncle();
6883
6918
  }
6884
- return `Cousin ${degree}. Grades ${Math.abs(level)}\xD7 entfernt`;
6919
+ return `${this.indirect()} ${Math.abs(level)}\xD7 entfernt`;
6885
6920
  }
6886
6921
  auncle() {
6887
- const prefix = this.directPrefix();
6888
- if (this.personN?.isMale()) {
6889
- return `${prefix}onkel`;
6890
- }
6891
- if (this.personN?.isFemale()) {
6892
- return `${prefix}tante`;
6922
+ const level = Math.abs(this.pathN?.level ?? 0);
6923
+ const sex = sexOf(this.personN);
6924
+ if (level <= 1) {
6925
+ return pick(sex, "Onkel", "Tante", "Onkel/Tante");
6893
6926
  }
6894
- return `${prefix}onkel/tante`;
6927
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6928
+ return pick(
6929
+ sex,
6930
+ `${prefix}onkel`,
6931
+ `${prefix}tante`,
6932
+ `${prefix}onkel/tante`
6933
+ );
6895
6934
  }
6896
6935
  nibling() {
6897
- const prefix = this.directPrefix();
6898
- if (this.personN?.isMale()) {
6899
- return `${prefix}neffe`;
6900
- }
6901
- if (this.personN?.isFemale()) {
6902
- return `${prefix}nichte`;
6936
+ const level = Math.abs(this.pathN?.level ?? 0);
6937
+ const sex = sexOf(this.personN);
6938
+ if (level <= 1) {
6939
+ return pick(sex, "Neffe", "Nichte", "Neffe/Nichte");
6903
6940
  }
6904
- return `${prefix}neffe/nichte`;
6941
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6942
+ return pick(
6943
+ sex,
6944
+ `${prefix}neffe`,
6945
+ `${prefix}nichte`,
6946
+ `${prefix}neffe/nichte`
6947
+ );
6905
6948
  }
6906
6949
  parent() {
6907
- const prefix = this.directPrefix();
6908
- if (this.personN?.isMale()) {
6909
- return `${prefix}vater`;
6910
- }
6911
- if (this.personN?.isFemale()) {
6912
- return `${prefix}mutter`;
6950
+ const level = Math.abs(this.pathN?.level ?? 0);
6951
+ const sex = sexOf(this.personN);
6952
+ if (level <= 1) {
6953
+ return pick(sex, "Vater", "Mutter", "Elternteil");
6913
6954
  }
6914
- return `${prefix}elternteil`;
6955
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6956
+ return pick(
6957
+ sex,
6958
+ `${prefix}vater`,
6959
+ `${prefix}mutter`,
6960
+ `${prefix}elternteil`
6961
+ );
6915
6962
  }
6916
6963
  child() {
6917
- const prefix = this.directPrefix();
6918
- if (this.personN?.isMale()) {
6919
- return `${prefix}sohn`;
6920
- }
6921
- if (this.personN?.isFemale()) {
6922
- return `${prefix}tochter`;
6964
+ const level = Math.abs(this.pathN?.level ?? 0);
6965
+ const sex = sexOf(this.personN);
6966
+ if (level <= 1) {
6967
+ return pick(sex, "Sohn", "Tochter", "Kind");
6923
6968
  }
6924
- return `${prefix}kind`;
6969
+ const prefix = ur(level - 2);
6970
+ return pick(
6971
+ sex,
6972
+ `${prefix}Enkel`,
6973
+ `${prefix}Enkelin`,
6974
+ `${prefix}Enkelkind`
6975
+ );
6925
6976
  }
6926
6977
  sibling() {
6927
- if (this.personN?.isMale()) {
6928
- return "bruder";
6929
- }
6930
- if (this.personN?.isFemale()) {
6931
- return "schwester";
6932
- }
6933
- return "geschwister";
6978
+ return pick(sexOf(this.personN), "Bruder", "Schwester", "Geschwister");
6934
6979
  }
6935
6980
  halfBlood(relation) {
6936
6981
  if (!relation || !this.isHalfBlood) {
6937
6982
  return relation ?? "";
6938
6983
  }
6939
- if (/^[A-ZÄÖÜ]/.test(relation) || /[-\s]/.test(relation)) {
6984
+ if (/[\s-]/.test(relation) || /^(Groß|Ur)/.test(relation)) {
6940
6985
  return `Halb-${relation}`;
6941
6986
  }
6942
- return `Halb${relation}`;
6987
+ return `Halb${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
6943
6988
  }
6944
6989
  spouse() {
6945
- if (this.personN?.isMale()) {
6946
- return "Ehemann";
6947
- }
6948
- if (this.personN?.isFemale()) {
6949
- return "Ehefrau";
6950
- }
6951
- return "Ehepartner";
6990
+ return pick(sexOf(this.personN), "Ehemann", "Ehefrau", "Ehepartner");
6952
6991
  }
6953
6992
  ofSpouse(relation) {
6954
6993
  if (!relation) {
6955
6994
  return "";
6956
6995
  }
6957
- const spouse = this.path?.[1].indi;
6958
- let spouseType = "Ehepartner";
6959
- if (spouse?.isMale()) {
6960
- spouseType = "Ehemann";
6961
- }
6962
- if (spouse?.isFemale()) {
6963
- spouseType = "Ehefrau";
6964
- }
6965
- return `${relation} des ${spouseType}s`;
6996
+ const spouseType = pick(
6997
+ sexOf(this.path?.[1].indi),
6998
+ "Ehemann",
6999
+ "Ehefrau",
7000
+ "Ehepartner"
7001
+ );
7002
+ return `${relation} ${genitiveArticle(spouseType)}`;
6966
7003
  }
6967
7004
  spouseOf(relation) {
6968
7005
  if (!relation) {
6969
7006
  return "";
6970
7007
  }
6971
- const spouse = this.path?.[this.path.length - 1].indi;
6972
- let spouseType = "Ehepartner";
6973
- if (spouse?.isMale()) {
6974
- spouseType = "Ehemann";
6975
- }
6976
- if (spouse?.isFemale()) {
6977
- spouseType = "Ehefrau";
6978
- }
7008
+ const spouseType = pick(
7009
+ sexOf(this.path?.[this.path.length - 1].indi),
7010
+ "Ehemann",
7011
+ "Ehefrau",
7012
+ "Ehepartner"
7013
+ );
6979
7014
  return `${spouseType} von ${relation}`;
6980
7015
  }
6981
7016
  of(relation) {
6982
7017
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6983
- nameOrder: "first-last"
7018
+ nameOrder: this.nameOrder
6984
7019
  });
6985
7020
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6986
7021
  if (this.displayName === "none") {
@@ -6993,8 +7028,8 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6993
7028
  if (!name || !relation) {
6994
7029
  return relation ?? "";
6995
7030
  }
6996
- if (relation.includes(" des ") || relation.includes(" von ")) {
6997
- return relation.replace(/ (des|von) /, ` $1 ${name}s `);
7031
+ if (relation.includes(" des ") || relation.includes(" der ") || relation.includes(" von ")) {
7032
+ return relation.replace(/ (des|der|von) /, ` $1 ${name}s `);
6998
7033
  }
6999
7034
  return `${name}s ${relation}`;
7000
7035
  }
@@ -7024,50 +7059,82 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
7024
7059
  if (!relation || !this.pathN?.relation) {
7025
7060
  return relation ?? "";
7026
7061
  }
7027
- return `${this.pathN.relation} ${relation}`;
7062
+ const prefix = parentRelationsDe[this.pathN.relation];
7063
+ if (!prefix) {
7064
+ return relation;
7065
+ }
7066
+ if (prefix.endsWith("-") || prefix.endsWith(" ")) {
7067
+ return `${prefix}${relation}`;
7068
+ }
7069
+ return `${prefix}${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
7028
7070
  }
7029
7071
  };
7030
7072
 
7031
7073
  // src/kinship-translator/patterns.fr.ts
7074
+ var parentRelationsFr = {
7075
+ step: "step",
7076
+ foster: "foster",
7077
+ adopted: "adopted"
7078
+ };
7032
7079
  var InLawsFr = {
7033
7080
  "conjoint de (enfant|fille|fils)": "beau-fils/belle-fille",
7034
7081
  "\xE9pouse de (enfant|fille|fils)": "belle-fille",
7035
7082
  "mari de (enfant|fille|fils)": "gendre",
7036
- "m\xE8re du (conjoint|\xE9pouse|mari)": "belle-m\xE8re",
7037
- "p\xE8re du (conjoint|\xE9pouse|mari)": "beau-p\xE8re",
7038
- "parent du (conjoint|\xE9pouse|mari)": "beau-parent",
7083
+ "m\xE8re (du mari|du conjoint|de l'\xE9pouse)": "belle-m\xE8re",
7084
+ "p\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-p\xE8re",
7085
+ "parent (du mari|du conjoint|de l'\xE9pouse)": "beau-parent",
7039
7086
  "\xE9pouse de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "belle-s\u0153ur",
7040
7087
  "mari de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re",
7041
7088
  "conjoint de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re/belle-s\u0153ur",
7042
- "(demi-)?s\u0153ur du (conjoint|\xE9pouse|mari)": "belle-s\u0153ur",
7043
- "(demi-)?fr\xE8re du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re",
7044
- "(demi-)?fr\xE8re/s\u0153ur du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re/belle-s\u0153ur"
7089
+ "(demi-)?s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "belle-s\u0153ur",
7090
+ "(demi-)?fr\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re",
7091
+ "(demi-)?fr\xE8re/s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re/belle-s\u0153ur"
7045
7092
  };
7046
7093
 
7047
7094
  // src/kinship-translator/kinship-translator.fr.ts
7048
- var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7049
- directPrefix() {
7050
- const level = Math.abs(this.pathN?.level ?? 0);
7051
- if (level <= 1) {
7052
- return "";
7053
- }
7054
- if (level === 2) {
7055
- return "grand-";
7056
- }
7057
- if (level === 3) {
7058
- return "arri\xE8re-grand-";
7059
- }
7060
- return `arri\xE8re${level - 2}-grand-`;
7095
+ var sexOf2 = (person) => {
7096
+ if (person?.isMale?.()) {
7097
+ return "m";
7098
+ }
7099
+ if (person?.isFemale?.()) {
7100
+ return "f";
7061
7101
  }
7102
+ return "n";
7103
+ };
7104
+ var pick2 = (sex, male, female, neutral) => {
7105
+ if (sex === "m") {
7106
+ return male;
7107
+ }
7108
+ if (sex === "f") {
7109
+ return female;
7110
+ }
7111
+ return neutral;
7112
+ };
7113
+ var arriere = (count) => count > 0 ? "arri\xE8re-".repeat(count) : "";
7114
+ var frenchOrdinal = (n) => n === 1 ? "1er" : `${n}e`;
7115
+ var isFeminineRelation = (relation) => /mère|fille|sœur|tante|nièce|cousine|épouse/.test(relation);
7116
+ var ofSpousePrep = (spouseType) => {
7117
+ if (spouseType === "\xE9pouse") {
7118
+ return "de l'";
7119
+ }
7120
+ return "du ";
7121
+ };
7122
+ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7062
7123
  indirect() {
7063
7124
  let degree = Math.abs(this.pathN?.degree ?? 0);
7064
7125
  if (degree > 0) {
7065
7126
  degree = degree - 1;
7066
7127
  }
7067
- if (degree === 1) {
7068
- return `cousin`;
7128
+ const cousin = pick2(
7129
+ sexOf2(this.personN),
7130
+ "cousin",
7131
+ "cousine",
7132
+ "cousin/cousine"
7133
+ );
7134
+ if (degree <= 1) {
7135
+ return cousin;
7069
7136
  }
7070
- return `cousin au ${ordinalize(degree)} degr\xE9`;
7137
+ return `${cousin} au ${frenchOrdinal(degree)} degr\xE9`;
7071
7138
  }
7072
7139
  removal() {
7073
7140
  const level = this.pathN?.level ?? 0;
@@ -7078,56 +7145,57 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7078
7145
  if (!degree) {
7079
7146
  return level < 0 ? this.nibling() : this.auncle();
7080
7147
  }
7081
- return `cousin au ${ordinalize(degree)} degr\xE9 ${Math.abs(level)}\xD7 \xE9loign\xE9`;
7148
+ return `${this.indirect()} ${Math.abs(level)}\xD7 \xE9loign\xE9`;
7082
7149
  }
7083
7150
  auncle() {
7084
- const prefix = this.directPrefix();
7085
- if (this.personN?.isMale()) {
7086
- return `${prefix}oncle`;
7087
- }
7088
- if (this.personN?.isFemale()) {
7089
- return `${prefix}tante`;
7151
+ const level = Math.abs(this.pathN?.level ?? 0);
7152
+ const sex = sexOf2(this.personN);
7153
+ const base = pick2(sex, "oncle", "tante", "oncle/tante");
7154
+ if (level <= 1) {
7155
+ return base;
7090
7156
  }
7091
- return `${prefix}oncle/tante`;
7157
+ const grands = pick2(
7158
+ sex,
7159
+ "grand-oncle",
7160
+ "grand-tante",
7161
+ "grand-oncle/tante"
7162
+ );
7163
+ return `${arriere(level - 2)}${grands}`;
7092
7164
  }
7093
7165
  nibling() {
7094
- const prefix = this.directPrefix();
7095
- if (this.personN?.isMale()) {
7096
- return `${prefix}neveu`;
7097
- }
7098
- if (this.personN?.isFemale()) {
7099
- return `${prefix}ni\xE8ce`;
7166
+ const level = Math.abs(this.pathN?.level ?? 0);
7167
+ const sex = sexOf2(this.personN);
7168
+ if (level <= 1) {
7169
+ return pick2(sex, "neveu", "ni\xE8ce", "neveu/ni\xE8ce");
7100
7170
  }
7101
- return `${prefix}neveu/ni\xE8ce`;
7171
+ const grands = pick2(
7172
+ sex,
7173
+ "grand-neveu",
7174
+ "grande-ni\xE8ce",
7175
+ "grand-neveu/grande-ni\xE8ce"
7176
+ );
7177
+ return `${arriere(level - 2)}${grands}`;
7102
7178
  }
7103
7179
  parent() {
7104
- const prefix = this.directPrefix();
7105
- if (this.personN?.isMale()) {
7106
- return `${prefix}p\xE8re`;
7107
- }
7108
- if (this.personN?.isFemale()) {
7109
- return `${prefix}m\xE8re`;
7180
+ const level = Math.abs(this.pathN?.level ?? 0);
7181
+ const sex = sexOf2(this.personN);
7182
+ if (level <= 1) {
7183
+ return pick2(sex, "p\xE8re", "m\xE8re", "parent");
7110
7184
  }
7111
- return `${prefix}parent`;
7185
+ const grands = pick2(sex, "grand-p\xE8re", "grand-m\xE8re", "grand-parent");
7186
+ return `${arriere(level - 2)}${grands}`;
7112
7187
  }
7113
7188
  child() {
7114
- const prefix = this.directPrefix();
7115
- if (this.personN?.isMale()) {
7116
- return `${prefix}fils`;
7117
- }
7118
- if (this.personN?.isFemale()) {
7119
- return `${prefix}fille`;
7189
+ const level = Math.abs(this.pathN?.level ?? 0);
7190
+ const sex = sexOf2(this.personN);
7191
+ if (level <= 1) {
7192
+ return pick2(sex, "fils", "fille", "enfant");
7120
7193
  }
7121
- return `${prefix}enfant`;
7194
+ const petits = pick2(sex, "petit-fils", "petite-fille", "petit-enfant");
7195
+ return `${arriere(level - 2)}${petits}`;
7122
7196
  }
7123
7197
  sibling() {
7124
- if (this.personN?.isMale()) {
7125
- return "fr\xE8re";
7126
- }
7127
- if (this.personN?.isFemale()) {
7128
- return "s\u0153ur";
7129
- }
7130
- return "fr\xE8re/s\u0153ur";
7198
+ return pick2(sexOf2(this.personN), "fr\xE8re", "s\u0153ur", "fr\xE8re/s\u0153ur");
7131
7199
  }
7132
7200
  halfBlood(relation) {
7133
7201
  if (!relation || !this.isHalfBlood) {
@@ -7136,45 +7204,35 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7136
7204
  return `demi-${relation}`;
7137
7205
  }
7138
7206
  spouse() {
7139
- if (this.personN?.isMale()) {
7140
- return "mari";
7141
- }
7142
- if (this.personN?.isFemale()) {
7143
- return "\xE9pouse";
7144
- }
7145
- return "conjoint";
7207
+ return pick2(sexOf2(this.personN), "mari", "\xE9pouse", "conjoint");
7146
7208
  }
7147
7209
  ofSpouse(relation) {
7148
7210
  if (!relation) {
7149
7211
  return "";
7150
7212
  }
7151
- const spouse = this.path?.[1].indi;
7152
- let spouseType = "conjoint";
7153
- if (spouse?.isMale()) {
7154
- spouseType = "mari";
7155
- }
7156
- if (spouse?.isFemale()) {
7157
- spouseType = "\xE9pouse";
7158
- }
7159
- return `${relation} du ${spouseType}`;
7213
+ const spouseType = pick2(
7214
+ sexOf2(this.path?.[1].indi),
7215
+ "mari",
7216
+ "\xE9pouse",
7217
+ "conjoint"
7218
+ );
7219
+ return `${relation} ${ofSpousePrep(spouseType)}${spouseType}`;
7160
7220
  }
7161
7221
  spouseOf(relation) {
7162
7222
  if (!relation) {
7163
7223
  return "";
7164
7224
  }
7165
- const spouse = this.path?.[this.path.length - 1].indi;
7166
- let spouseType = "conjoint";
7167
- if (spouse?.isMale()) {
7168
- spouseType = "mari";
7169
- }
7170
- if (spouse?.isFemale()) {
7171
- spouseType = "\xE9pouse";
7172
- }
7225
+ const spouseType = pick2(
7226
+ sexOf2(this.path?.[this.path.length - 1].indi),
7227
+ "mari",
7228
+ "\xE9pouse",
7229
+ "conjoint"
7230
+ );
7173
7231
  return `${spouseType} de ${relation}`;
7174
7232
  }
7175
7233
  of(relation) {
7176
7234
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7177
- nameOrder: "first-last"
7235
+ nameOrder: this.nameOrder
7178
7236
  });
7179
7237
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7180
7238
  if (this.displayName === "none") {
@@ -7190,6 +7248,9 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7190
7248
  if (relation.includes(" du ") || relation.includes(" de ")) {
7191
7249
  return relation.replace(/ (du|de) /, ` $1 ${name} `);
7192
7250
  }
7251
+ if (relation.includes(" de l'")) {
7252
+ return relation.replace(" de l'", ` de ${name} l'`);
7253
+ }
7193
7254
  return `${relation} de ${name}`;
7194
7255
  }
7195
7256
  inLaw(relation) {
@@ -7218,50 +7279,118 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7218
7279
  if (!relation || !this.pathN?.relation) {
7219
7280
  return relation ?? "";
7220
7281
  }
7221
- return `${this.pathN.relation} ${relation}`;
7282
+ const kind = parentRelationsFr[this.pathN.relation];
7283
+ if (!kind) {
7284
+ return relation;
7285
+ }
7286
+ if (kind === "step") {
7287
+ return `${isFeminineRelation(relation) ? "belle-" : "beau-"}${relation}`;
7288
+ }
7289
+ if (kind === "adopted") {
7290
+ return `${relation} ${isFeminineRelation(relation) ? "adoptive" : "adoptif"}`;
7291
+ }
7292
+ if (kind === "foster") {
7293
+ return `${relation} d'accueil`;
7294
+ }
7295
+ return relation;
7222
7296
  }
7223
7297
  };
7224
7298
 
7225
7299
  // src/kinship-translator/patterns.es.ts
7300
+ var parentRelationsEs = {
7301
+ step: {
7302
+ padre: "padrastro",
7303
+ madre: "madrastra",
7304
+ hijo: "hijastro",
7305
+ hija: "hijastra",
7306
+ hermano: "hermanastro",
7307
+ hermana: "hermanastra",
7308
+ abuelo: "abuelastro",
7309
+ abuela: "abuelastra"
7310
+ }
7311
+ };
7226
7312
  var InLawsEs = {
7227
7313
  "c\xF3nyuge de (hijo/hija|hija|hijo)": "yerno/nuera",
7228
7314
  "esposa de (hijo/hija|hija|hijo)": "nuera",
7229
7315
  "esposo de (hijo/hija|hija|hijo)": "yerno",
7230
- "madre del (c\xF3nyuge|esposa|esposo)": "suegra",
7231
- "padre del (c\xF3nyuge|esposa|esposo)": "suegro",
7232
- "padre/madre del (c\xF3nyuge|esposa|esposo)": "suegro/suegra",
7316
+ "madre (del c\xF3nyuge|del esposo|de la esposa)": "suegra",
7317
+ "padre (del c\xF3nyuge|del esposo|de la esposa)": "suegro",
7318
+ "padre/madre (del c\xF3nyuge|del esposo|de la esposa)": "suegro/suegra",
7233
7319
  "esposa de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
7234
7320
  "esposo de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
7235
7321
  "c\xF3nyuge de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
7236
- "(medio |media |medio/a )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
7237
- "(medio |media |medio/a )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
7238
- "(medio |media |medio/a )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
7322
+ "(medio |media |medio/a )?hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ada",
7323
+ "(medio |media |medio/a )?hermano (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado",
7324
+ "(medio |media |medio/a )?hermano/hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado/cu\xF1ada"
7239
7325
  };
7240
7326
 
7241
7327
  // src/kinship-translator/kinship-translator.es.ts
7242
- var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7243
- directPrefix() {
7244
- const level = Math.abs(this.pathN?.level ?? 0);
7245
- if (level <= 1) {
7246
- return "";
7247
- }
7248
- if (level === 2) {
7249
- return "bisabuel";
7250
- }
7251
- if (level === 3) {
7252
- return "tatarabuel";
7253
- }
7254
- return `t\xE1tara${level - 2}-abuel`;
7328
+ var sexOf3 = (person) => {
7329
+ if (person?.isMale?.()) {
7330
+ return "m";
7255
7331
  }
7332
+ if (person?.isFemale?.()) {
7333
+ return "f";
7334
+ }
7335
+ return "n";
7336
+ };
7337
+ var pick3 = (sex, male, female, neutral) => {
7338
+ if (sex === "m") {
7339
+ return male;
7340
+ }
7341
+ if (sex === "f") {
7342
+ return female;
7343
+ }
7344
+ return neutral;
7345
+ };
7346
+ var SPANISH_ORDINALS_M = [
7347
+ "",
7348
+ "",
7349
+ "segundo",
7350
+ "tercero",
7351
+ "cuarto",
7352
+ "quinto",
7353
+ "sexto",
7354
+ "s\xE9ptimo",
7355
+ "octavo",
7356
+ "noveno",
7357
+ "d\xE9cimo"
7358
+ ];
7359
+ var SPANISH_ORDINALS_F = [
7360
+ "",
7361
+ "",
7362
+ "segunda",
7363
+ "tercera",
7364
+ "cuarta",
7365
+ "quinta",
7366
+ "sexta",
7367
+ "s\xE9ptima",
7368
+ "octava",
7369
+ "novena",
7370
+ "d\xE9cima"
7371
+ ];
7372
+ var spanishOrdinal = (n, sex) => {
7373
+ const list = sex === "f" ? SPANISH_ORDINALS_F : SPANISH_ORDINALS_M;
7374
+ return list[n] ?? `${n}.\xBA`;
7375
+ };
7376
+ var ofSpousePrep2 = (spouseType) => {
7377
+ if (spouseType === "esposa") {
7378
+ return "de la ";
7379
+ }
7380
+ return "del ";
7381
+ };
7382
+ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7256
7383
  indirect() {
7257
7384
  let degree = Math.abs(this.pathN?.degree ?? 0);
7258
7385
  if (degree > 0) {
7259
7386
  degree = degree - 1;
7260
7387
  }
7261
- if (degree === 1) {
7262
- return `primo`;
7388
+ const sex = sexOf3(this.personN);
7389
+ const cousin = pick3(sex, "primo", "prima", "primo/prima");
7390
+ if (degree <= 1) {
7391
+ return cousin;
7263
7392
  }
7264
- return `primo ${ordinalize(degree)}`;
7393
+ return `${cousin} ${spanishOrdinal(degree, sex)}`;
7265
7394
  }
7266
7395
  removal() {
7267
7396
  const level = this.pathN?.level ?? 0;
@@ -7272,56 +7401,133 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7272
7401
  if (!degree) {
7273
7402
  return level < 0 ? this.nibling() : this.auncle();
7274
7403
  }
7275
- return `primo ${ordinalize(degree)} ${Math.abs(level)}\xD7 separado`;
7404
+ return `${this.indirect()} ${Math.abs(level)}\xD7 separado`;
7276
7405
  }
7277
7406
  auncle() {
7278
- const prefix = this.directPrefix();
7279
- if (this.personN?.isMale()) {
7280
- return `${prefix}t\xEDo`;
7407
+ const level = Math.abs(this.pathN?.level ?? 0);
7408
+ const sex = sexOf3(this.personN);
7409
+ if (level <= 1) {
7410
+ return pick3(sex, "t\xEDo", "t\xEDa", "t\xEDo/t\xEDa");
7281
7411
  }
7282
- if (this.personN?.isFemale()) {
7283
- return `${prefix}t\xEDa`;
7412
+ if (level === 2) {
7413
+ return pick3(sex, "t\xEDo abuelo", "t\xEDa abuela", "t\xEDo/t\xEDa abuelo");
7414
+ }
7415
+ if (level === 3) {
7416
+ return pick3(
7417
+ sex,
7418
+ "t\xEDo bisabuelo",
7419
+ "t\xEDa bisabuela",
7420
+ "t\xEDo/t\xEDa bisabuelo"
7421
+ );
7284
7422
  }
7285
- return `${prefix}t\xEDo/t\xEDa`;
7423
+ return pick3(
7424
+ sex,
7425
+ `t\xEDo abuelo (${level - 1}.\xBA)`,
7426
+ `t\xEDa abuela (${level - 1}.\xAA)`,
7427
+ `t\xEDo/t\xEDa abuelo (${level - 1}.\xBA)`
7428
+ );
7286
7429
  }
7287
7430
  nibling() {
7288
- const prefix = this.directPrefix();
7289
- if (this.personN?.isMale()) {
7290
- return `${prefix}sobrino`;
7431
+ const level = Math.abs(this.pathN?.level ?? 0);
7432
+ const sex = sexOf3(this.personN);
7433
+ if (level <= 1) {
7434
+ return pick3(sex, "sobrino", "sobrina", "sobrino/sobrina");
7291
7435
  }
7292
- if (this.personN?.isFemale()) {
7293
- return `${prefix}sobrina`;
7436
+ if (level === 2) {
7437
+ return pick3(
7438
+ sex,
7439
+ "sobrino nieto",
7440
+ "sobrina nieta",
7441
+ "sobrino/sobrina nieto"
7442
+ );
7443
+ }
7444
+ if (level === 3) {
7445
+ return pick3(
7446
+ sex,
7447
+ "sobrino bisnieto",
7448
+ "sobrina bisnieta",
7449
+ "sobrino/sobrina bisnieto"
7450
+ );
7294
7451
  }
7295
- return `${prefix}sobrino/sobrina`;
7452
+ return pick3(
7453
+ sex,
7454
+ `sobrino nieto (${level - 1}.\xBA)`,
7455
+ `sobrina nieta (${level - 1}.\xAA)`,
7456
+ `sobrino/sobrina nieto (${level - 1}.\xBA)`
7457
+ );
7296
7458
  }
7297
7459
  parent() {
7298
- const prefix = this.directPrefix();
7299
- if (this.personN?.isMale()) {
7300
- return `${prefix}padre`;
7460
+ const level = Math.abs(this.pathN?.level ?? 0);
7461
+ const sex = sexOf3(this.personN);
7462
+ if (level <= 1) {
7463
+ return pick3(sex, "padre", "madre", "padre/madre");
7301
7464
  }
7302
- if (this.personN?.isFemale()) {
7303
- return `${prefix}madre`;
7465
+ if (level === 2) {
7466
+ return pick3(sex, "abuelo", "abuela", "abuelo/abuela");
7467
+ }
7468
+ if (level === 3) {
7469
+ return pick3(sex, "bisabuelo", "bisabuela", "bisabuelo/bisabuela");
7470
+ }
7471
+ if (level === 4) {
7472
+ return pick3(
7473
+ sex,
7474
+ "tatarabuelo",
7475
+ "tatarabuela",
7476
+ "tatarabuelo/tatarabuela"
7477
+ );
7478
+ }
7479
+ if (level === 5) {
7480
+ return pick3(
7481
+ sex,
7482
+ "trastatarabuelo",
7483
+ "trastatarabuela",
7484
+ "trastatarabuelo/trastatarabuela"
7485
+ );
7304
7486
  }
7305
- return `${prefix}padre/madre`;
7487
+ return pick3(
7488
+ sex,
7489
+ `abuelo (${level}.\xBA)`,
7490
+ `abuela (${level}.\xAA)`,
7491
+ `abuelo/abuela (${level}.\xBA)`
7492
+ );
7306
7493
  }
7307
7494
  child() {
7308
- const prefix = this.directPrefix();
7309
- if (this.personN?.isMale()) {
7310
- return `${prefix}hijo`;
7495
+ const level = Math.abs(this.pathN?.level ?? 0);
7496
+ const sex = sexOf3(this.personN);
7497
+ if (level <= 1) {
7498
+ return pick3(sex, "hijo", "hija", "hijo/hija");
7311
7499
  }
7312
- if (this.personN?.isFemale()) {
7313
- return `${prefix}hija`;
7500
+ if (level === 2) {
7501
+ return pick3(sex, "nieto", "nieta", "nieto/nieta");
7314
7502
  }
7315
- return `${prefix}hijo/hija`;
7316
- }
7317
- sibling() {
7318
- if (this.personN?.isMale()) {
7319
- return "hermano";
7503
+ if (level === 3) {
7504
+ return pick3(sex, "bisnieto", "bisnieta", "bisnieto/bisnieta");
7320
7505
  }
7321
- if (this.personN?.isFemale()) {
7322
- return "hermana";
7506
+ if (level === 4) {
7507
+ return pick3(
7508
+ sex,
7509
+ "tataranieto",
7510
+ "tataranieta",
7511
+ "tataranieto/tataranieta"
7512
+ );
7513
+ }
7514
+ if (level === 5) {
7515
+ return pick3(
7516
+ sex,
7517
+ "trastataranieto",
7518
+ "trastataranieta",
7519
+ "trastataranieto/trastataranieta"
7520
+ );
7323
7521
  }
7324
- return "hermano/hermana";
7522
+ return pick3(
7523
+ sex,
7524
+ `nieto (${level}.\xBA)`,
7525
+ `nieta (${level}.\xAA)`,
7526
+ `nieto/nieta (${level}.\xBA)`
7527
+ );
7528
+ }
7529
+ sibling() {
7530
+ return pick3(sexOf3(this.personN), "hermano", "hermana", "hermano/hermana");
7325
7531
  }
7326
7532
  halfBlood(relation) {
7327
7533
  if (!relation || !this.isHalfBlood) {
@@ -7336,45 +7542,35 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7336
7542
  return `medio/a ${relation}`;
7337
7543
  }
7338
7544
  spouse() {
7339
- if (this.personN?.isMale()) {
7340
- return "esposo";
7341
- }
7342
- if (this.personN?.isFemale()) {
7343
- return "esposa";
7344
- }
7345
- return "c\xF3nyuge";
7545
+ return pick3(sexOf3(this.personN), "esposo", "esposa", "c\xF3nyuge");
7346
7546
  }
7347
7547
  ofSpouse(relation) {
7348
7548
  if (!relation) {
7349
7549
  return "";
7350
7550
  }
7351
- const spouse = this.path?.[1].indi;
7352
- let spouseType = "c\xF3nyuge";
7353
- if (spouse?.isMale()) {
7354
- spouseType = "esposo";
7355
- }
7356
- if (spouse?.isFemale()) {
7357
- spouseType = "esposa";
7358
- }
7359
- return `${relation} del ${spouseType}`;
7551
+ const spouseType = pick3(
7552
+ sexOf3(this.path?.[1].indi),
7553
+ "esposo",
7554
+ "esposa",
7555
+ "c\xF3nyuge"
7556
+ );
7557
+ return `${relation} ${ofSpousePrep2(spouseType)}${spouseType}`;
7360
7558
  }
7361
7559
  spouseOf(relation) {
7362
7560
  if (!relation) {
7363
7561
  return "";
7364
7562
  }
7365
- const spouse = this.path?.[this.path.length - 1].indi;
7366
- let spouseType = "c\xF3nyuge";
7367
- if (spouse?.isMale()) {
7368
- spouseType = "esposo";
7369
- }
7370
- if (spouse?.isFemale()) {
7371
- spouseType = "esposa";
7372
- }
7563
+ const spouseType = pick3(
7564
+ sexOf3(this.path?.[this.path.length - 1].indi),
7565
+ "esposo",
7566
+ "esposa",
7567
+ "c\xF3nyuge"
7568
+ );
7373
7569
  return `${spouseType} de ${relation}`;
7374
7570
  }
7375
7571
  of(relation) {
7376
7572
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7377
- nameOrder: "first-last"
7573
+ nameOrder: this.nameOrder
7378
7574
  });
7379
7575
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7380
7576
  if (this.displayName === "none") {
@@ -7387,8 +7583,8 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7387
7583
  if (!name || !relation) {
7388
7584
  return relation ?? "";
7389
7585
  }
7390
- if (relation.includes(" del ") || relation.includes(" de ")) {
7391
- return relation.replace(/ (del|de) /, ` $1 ${name} `);
7586
+ if (relation.includes(" del ") || relation.includes(" de la ") || relation.includes(" de ")) {
7587
+ return relation.replace(/ (del|de la|de) /, ` $1 ${name} `);
7392
7588
  }
7393
7589
  return `${relation} de ${name}`;
7394
7590
  }
@@ -7418,7 +7614,20 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7418
7614
  if (!relation || !this.pathN?.relation) {
7419
7615
  return relation ?? "";
7420
7616
  }
7421
- return `${this.pathN.relation} ${relation}`;
7617
+ const mapped = parentRelationsEs[this.pathN.relation]?.[relation];
7618
+ if (mapped) {
7619
+ return mapped;
7620
+ }
7621
+ if (this.pathN.relation === "step") {
7622
+ return `${relation} pol\xEDtico`;
7623
+ }
7624
+ if (this.pathN.relation === "adopted") {
7625
+ return `${relation} adoptivo`;
7626
+ }
7627
+ if (this.pathN.relation === "foster") {
7628
+ return `${relation} de acogida`;
7629
+ }
7630
+ return relation;
7422
7631
  }
7423
7632
  };
7424
7633
 
@@ -7427,15 +7636,35 @@ var InLawsRu = {
7427
7636
  "\u0441\u0443\u043F\u0440\u0443\u0433(?:\u0430)? (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C/\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
7428
7637
  "\u0436\u0435\u043D\u0430 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
7429
7638
  "\u043C\u0443\u0436 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C",
7430
- "\u043C\u0430\u0442\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0451\u0449\u0430",
7431
- "\u043E\u0442\u0435\u0446 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C",
7432
- "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
7639
+ "\u043C\u0430\u0442\u044C \u0436\u0435\u043D\u044B": "\u0442\u0451\u0449\u0430",
7640
+ "\u043C\u0430\u0442\u044C \u043C\u0443\u0436\u0430": "\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7641
+ "\u043C\u0430\u0442\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0451\u0449\u0430/\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7642
+ "\u043E\u0442\u0435\u0446 \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C",
7643
+ "\u043E\u0442\u0435\u0446 \u043C\u0443\u0436\u0430": "\u0441\u0432\u0451\u043A\u043E\u0440",
7644
+ "\u043E\u0442\u0435\u0446 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0441\u0432\u0451\u043A\u043E\u0440",
7645
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
7646
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u043C\u0443\u0436\u0430": "\u0441\u0432\u0451\u043A\u043E\u0440/\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7647
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
7433
7648
  "\u0436\u0435\u043D\u0430 (\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?(\u0431\u0440\u0430\u0442\u0430|\u0441\u0435\u0441\u0442\u0440\u044B|\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430)": "\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
7434
7649
  "\u043C\u0443\u0436 (\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?(\u0431\u0440\u0430\u0442\u0430|\u0441\u0435\u0441\u0442\u0440\u044B|\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430)": "\u0437\u044F\u0442\u044C",
7435
7650
  "\u0441\u0443\u043F\u0440\u0443\u0433(?:\u0430)? (\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?(\u0431\u0440\u0430\u0442\u0430|\u0441\u0435\u0441\u0442\u0440\u044B|\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430)": "\u0437\u044F\u0442\u044C/\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
7436
- "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0435\u0441\u0442\u0440\u0430 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0437\u043E\u043B\u043E\u0432\u043A\u0430",
7437
- "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0448\u0443\u0440\u0438\u043D",
7438
- "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0438\u0431\u043B\u0438\u043D\u0433 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0448\u0443\u0440\u0438\u043D/\u0437\u043E\u043B\u043E\u0432\u043A\u0430"
7651
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0435\u0441\u0442\u0440\u0430 \u0436\u0435\u043D\u044B": "\u0441\u0432\u043E\u044F\u0447\u0435\u043D\u0438\u0446\u0430",
7652
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0435\u0441\u0442\u0440\u0430 \u043C\u0443\u0436\u0430": "\u0437\u043E\u043B\u043E\u0432\u043A\u0430",
7653
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0435\u0441\u0442\u0440\u0430 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0441\u0432\u043E\u044F\u0447\u0435\u043D\u0438\u0446\u0430/\u0437\u043E\u043B\u043E\u0432\u043A\u0430",
7654
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u0436\u0435\u043D\u044B": "\u0448\u0443\u0440\u0438\u043D",
7655
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u043C\u0443\u0436\u0430": "\u0434\u0435\u0432\u0435\u0440\u044C",
7656
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0448\u0443\u0440\u0438\u043D/\u0434\u0435\u0432\u0435\u0440\u044C",
7657
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0438\u0431\u043B\u0438\u043D\u0433 \u0436\u0435\u043D\u044B": "\u0448\u0443\u0440\u0438\u043D/\u0441\u0432\u043E\u044F\u0447\u0435\u043D\u0438\u0446\u0430",
7658
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0438\u0431\u043B\u0438\u043D\u0433 \u043C\u0443\u0436\u0430": "\u0434\u0435\u0432\u0435\u0440\u044C/\u0437\u043E\u043B\u043E\u0432\u043A\u0430",
7659
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0438\u0431\u043B\u0438\u043D\u0433 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0448\u0443\u0440\u0438\u043D/\u0437\u043E\u043B\u043E\u0432\u043A\u0430"
7660
+ };
7661
+ var parentRelationsRu = {
7662
+ step: {
7663
+ \u043E\u0442\u0435\u0446: "\u043E\u0442\u0447\u0438\u043C",
7664
+ \u043C\u0430\u0442\u044C: "\u043C\u0430\u0447\u0435\u0445\u0430",
7665
+ \u0441\u044B\u043D: "\u043F\u0430\u0441\u044B\u043D\u043E\u043A",
7666
+ \u0434\u043E\u0447\u044C: "\u043F\u0430\u0434\u0447\u0435\u0440\u0438\u0446\u0430"
7667
+ }
7439
7668
  };
7440
7669
 
7441
7670
  // src/kinship-translator/kinship-translator.ru.ts
@@ -7466,7 +7695,7 @@ var cousinWord = (degree, sex) => {
7466
7695
  return `${stem}\u044B\u0439 \u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430`;
7467
7696
  };
7468
7697
  var praRepeat = (count) => count > 0 ? "\u043F\u0440\u0430".repeat(count) : "";
7469
- var sexOf = (person) => {
7698
+ var sexOf4 = (person) => {
7470
7699
  if (person?.isMale?.()) {
7471
7700
  return "m";
7472
7701
  }
@@ -7481,7 +7710,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7481
7710
  if (degree > 0) {
7482
7711
  degree = degree - 1;
7483
7712
  }
7484
- return cousinWord(degree, sexOf(this.personN));
7713
+ return cousinWord(degree, sexOf4(this.personN));
7485
7714
  }
7486
7715
  removal() {
7487
7716
  const level = this.pathN?.level ?? 0;
@@ -7493,35 +7722,53 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7493
7722
  return level < 0 ? this.nibling() : this.auncle();
7494
7723
  }
7495
7724
  const removed = Math.abs(level);
7496
- return `${cousinWord(degree, sexOf(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
7725
+ return `${cousinWord(degree, sexOf4(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
7497
7726
  }
7498
7727
  auncle() {
7499
7728
  const level = Math.abs(this.pathN?.level ?? 0);
7500
- const pra = praRepeat(Math.max(0, level - 2));
7501
- const sex = sexOf(this.personN);
7729
+ const sex = sexOf4(this.personN);
7730
+ if (level <= 1) {
7731
+ if (sex === "m") {
7732
+ return "\u0434\u044F\u0434\u044F";
7733
+ }
7734
+ if (sex === "f") {
7735
+ return "\u0442\u0451\u0442\u044F";
7736
+ }
7737
+ return "\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F";
7738
+ }
7739
+ const pra = praRepeat(level - 2);
7502
7740
  if (sex === "m") {
7503
- return `${pra}\u0434\u044F\u0434\u044F`;
7741
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434`;
7504
7742
  }
7505
7743
  if (sex === "f") {
7506
- return `${pra}\u0442\u0451\u0442\u044F`;
7744
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u0430\u044F ${pra}\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
7507
7745
  }
7508
- return `${pra}\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F`;
7746
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434/\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
7509
7747
  }
7510
7748
  nibling() {
7511
7749
  const level = Math.abs(this.pathN?.level ?? 0);
7512
- const pra = praRepeat(Math.max(0, level - 2));
7513
- const sex = sexOf(this.personN);
7750
+ const sex = sexOf4(this.personN);
7751
+ if (level <= 1) {
7752
+ if (sex === "m") {
7753
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A";
7754
+ }
7755
+ if (sex === "f") {
7756
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
7757
+ }
7758
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
7759
+ }
7760
+ const pra = praRepeat(level - 2);
7514
7761
  if (sex === "m") {
7515
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
7762
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u044B\u0439 \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
7516
7763
  }
7517
7764
  if (sex === "f") {
7518
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7765
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u0430\u044F \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7519
7766
  }
7520
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7767
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u044B\u0439 \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7521
7768
  }
7522
7769
  parent() {
7523
7770
  const level = Math.abs(this.pathN?.level ?? 0);
7524
- const sex = sexOf(this.personN);
7771
+ const sex = sexOf4(this.personN);
7525
7772
  if (level <= 1) {
7526
7773
  if (sex === "m") {
7527
7774
  return "\u043E\u0442\u0435\u0446";
@@ -7551,7 +7798,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7551
7798
  }
7552
7799
  child() {
7553
7800
  const level = Math.abs(this.pathN?.level ?? 0);
7554
- const sex = sexOf(this.personN);
7801
+ const sex = sexOf4(this.personN);
7555
7802
  if (level <= 1) {
7556
7803
  if (sex === "m") {
7557
7804
  return "\u0441\u044B\u043D";
@@ -7580,14 +7827,14 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7580
7827
  return `${pra}\u0432\u043D\u0443\u043A/\u0432\u043D\u0443\u0447\u043A\u0430`;
7581
7828
  }
7582
7829
  sibling() {
7583
- const sex = sexOf(this.personN);
7830
+ const sex = sexOf4(this.personN);
7584
7831
  if (sex === "m") {
7585
7832
  return "\u0431\u0440\u0430\u0442";
7586
7833
  }
7587
7834
  if (sex === "f") {
7588
7835
  return "\u0441\u0435\u0441\u0442\u0440\u0430";
7589
7836
  }
7590
- return "\u0441\u0438\u0431\u043B\u0438\u043D\u0433";
7837
+ return "\u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430";
7591
7838
  }
7592
7839
  halfBlood(relation) {
7593
7840
  if (!relation || !this.isHalfBlood) {
@@ -7601,7 +7848,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7601
7848
  return `\u0441\u0432\u043E\u0434\u043D\u044B\u0439 ${relation}`;
7602
7849
  }
7603
7850
  spouse() {
7604
- const sex = sexOf(this.personN);
7851
+ const sex = sexOf4(this.personN);
7605
7852
  if (sex === "m") {
7606
7853
  return "\u043C\u0443\u0436";
7607
7854
  }
@@ -7615,7 +7862,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7615
7862
  return "";
7616
7863
  }
7617
7864
  const spouse = this.path?.[1].indi;
7618
- const sex = sexOf(spouse);
7865
+ const sex = sexOf4(spouse);
7619
7866
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
7620
7867
  return `${relation} ${toGenitive(spouseType)}`;
7621
7868
  }
@@ -7624,13 +7871,13 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7624
7871
  return "";
7625
7872
  }
7626
7873
  const spouse = this.path?.[this.path.length - 1].indi;
7627
- const sex = sexOf(spouse);
7874
+ const sex = sexOf4(spouse);
7628
7875
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
7629
7876
  return `${spouseType} ${toGenitive(relation)}`;
7630
7877
  }
7631
7878
  of(relation) {
7632
7879
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7633
- nameOrder: "first-last"
7880
+ nameOrder: this.nameOrder
7634
7881
  });
7635
7882
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7636
7883
  if (this.displayName === "none") {
@@ -7661,7 +7908,22 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7661
7908
  if (!relation || !this.pathN?.relation) {
7662
7909
  return relation ?? "";
7663
7910
  }
7664
- return `${this.pathN.relation} ${relation}`;
7911
+ const mapped = parentRelationsRu[this.pathN.relation]?.[relation];
7912
+ if (mapped) {
7913
+ return mapped;
7914
+ }
7915
+ if (this.pathN.relation === "step") {
7916
+ return `\u043D\u0435\u0440\u043E\u0434\u043D\u043E\u0439 ${relation}`;
7917
+ }
7918
+ if (this.pathN.relation === "adopted") {
7919
+ return /сестра|дочь|мать|тётя|бабушка|жена|племянница|внучка/.test(
7920
+ relation
7921
+ ) ? `\u043F\u0440\u0438\u0451\u043C\u043D\u0430\u044F ${relation}` : `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
7922
+ }
7923
+ if (this.pathN.relation === "foster") {
7924
+ return `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
7925
+ }
7926
+ return relation;
7665
7927
  }
7666
7928
  };
7667
7929
 
@@ -7685,7 +7947,7 @@ var InLawsJa = {
7685
7947
  };
7686
7948
 
7687
7949
  // src/kinship-translator/kinship-translator.ja.ts
7688
- var sexOf2 = (person) => {
7950
+ var sexOf5 = (person) => {
7689
7951
  if (person?.isMale?.()) {
7690
7952
  return "m";
7691
7953
  }
@@ -7694,7 +7956,7 @@ var sexOf2 = (person) => {
7694
7956
  }
7695
7957
  return "n";
7696
7958
  };
7697
- var pick = (sex, male, female, neutral) => {
7959
+ var pick4 = (sex, male, female, neutral) => {
7698
7960
  if (sex === "m") {
7699
7961
  return male;
7700
7962
  }
@@ -7707,18 +7969,18 @@ var lineal = (level, sex, kind) => {
7707
7969
  const L = Math.max(1, level);
7708
7970
  if (kind === "asc") {
7709
7971
  if (L <= 1) {
7710
- return pick(sex, "\u7236", "\u6BCD", "\u89AA");
7972
+ return pick4(sex, "\u7236", "\u6BCD", "\u89AA");
7711
7973
  }
7712
7974
  if (L === 2) {
7713
- return pick(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7975
+ return pick4(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7714
7976
  }
7715
7977
  if (L === 3) {
7716
- return pick(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7978
+ return pick4(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7717
7979
  }
7718
7980
  if (L === 4) {
7719
- return pick(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7981
+ return pick4(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7720
7982
  }
7721
- return pick(
7983
+ return pick4(
7722
7984
  sex,
7723
7985
  `${L - 1}\u4E16\u306E\u7956\u7236`,
7724
7986
  `${L - 1}\u4E16\u306E\u7956\u6BCD`,
@@ -7726,7 +7988,7 @@ var lineal = (level, sex, kind) => {
7726
7988
  );
7727
7989
  }
7728
7990
  if (L <= 1) {
7729
- return pick(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
7991
+ return pick4(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
7730
7992
  }
7731
7993
  if (L === 2) {
7732
7994
  return "\u5B6B";
@@ -7773,52 +8035,52 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7773
8035
  }
7774
8036
  auncle() {
7775
8037
  const level = Math.abs(this.pathN?.level ?? 0);
7776
- const sex = sexOf2(this.personN);
7777
- if (level <= 2) {
7778
- return pick(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
8038
+ const sex = sexOf5(this.personN);
8039
+ if (level <= 1) {
8040
+ return pick4(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
7779
8041
  }
7780
- if (level === 3) {
7781
- return pick(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
8042
+ if (level === 2) {
8043
+ return pick4(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
7782
8044
  }
7783
- return pick(
8045
+ return pick4(
7784
8046
  sex,
7785
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058`,
7786
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3070`,
7787
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
8047
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058`,
8048
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3070`,
8049
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
7788
8050
  );
7789
8051
  }
7790
8052
  nibling() {
7791
8053
  const level = Math.abs(this.pathN?.level ?? 0);
7792
- const sex = sexOf2(this.personN);
7793
- if (level <= 2) {
7794
- return pick(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
8054
+ const sex = sexOf5(this.personN);
8055
+ if (level <= 1) {
8056
+ return pick4(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
7795
8057
  }
7796
- if (level === 3) {
7797
- return pick(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
8058
+ if (level === 2) {
8059
+ return pick4(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
7798
8060
  }
7799
- return pick(
8061
+ return pick4(
7800
8062
  sex,
7801
- `${level - 2}\u4EE3\u4E0B\u306E\u7525`,
7802
- `${level - 2}\u4EE3\u4E0B\u306E\u59EA`,
7803
- `${level - 2}\u4EE3\u4E0B\u306E\u7525/\u59EA`
8063
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525`,
8064
+ `${level - 1}\u4EE3\u4E0B\u306E\u59EA`,
8065
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525/\u59EA`
7804
8066
  );
7805
8067
  }
7806
8068
  parent() {
7807
8069
  return lineal(
7808
8070
  Math.abs(this.pathN?.level ?? 0),
7809
- sexOf2(this.personN),
8071
+ sexOf5(this.personN),
7810
8072
  "asc"
7811
8073
  );
7812
8074
  }
7813
8075
  child() {
7814
8076
  return lineal(
7815
8077
  Math.abs(this.pathN?.level ?? 0),
7816
- sexOf2(this.personN),
8078
+ sexOf5(this.personN),
7817
8079
  "desc"
7818
8080
  );
7819
8081
  }
7820
8082
  sibling() {
7821
- return pick(sexOf2(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
8083
+ return pick4(sexOf5(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
7822
8084
  }
7823
8085
  halfBlood(relation) {
7824
8086
  if (!relation || !this.isHalfBlood) {
@@ -7827,14 +8089,14 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7827
8089
  return `\u7570\u7236\u6BCD\u306E${relation}`;
7828
8090
  }
7829
8091
  spouse() {
7830
- return pick(sexOf2(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
8092
+ return pick4(sexOf5(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7831
8093
  }
7832
8094
  ofSpouse(relation) {
7833
8095
  if (!relation) {
7834
8096
  return "";
7835
8097
  }
7836
- const spouseType = pick(
7837
- sexOf2(this.path?.[1].indi),
8098
+ const spouseType = pick4(
8099
+ sexOf5(this.path?.[1].indi),
7838
8100
  "\u592B",
7839
8101
  "\u59BB",
7840
8102
  "\u914D\u5076\u8005"
@@ -7846,12 +8108,12 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7846
8108
  return "";
7847
8109
  }
7848
8110
  const spouse = this.path?.[this.path.length - 1].indi;
7849
- const spouseType = pick(sexOf2(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
8111
+ const spouseType = pick4(sexOf5(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7850
8112
  return `${relation}\u306E${spouseType}`;
7851
8113
  }
7852
8114
  of(relation) {
7853
8115
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7854
- nameOrder: "last-first"
8116
+ nameOrder: this.nameOrder
7855
8117
  });
7856
8118
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7857
8119
  if (this.displayName === "none") {
@@ -7882,7 +8144,28 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7882
8144
  if (!relation || !this.pathN?.relation) {
7883
8145
  return relation ?? "";
7884
8146
  }
7885
- return `${this.pathN.relation}\u306E${relation}`;
8147
+ if (this.pathN.relation === "step") {
8148
+ if (relation === "\u7236") {
8149
+ return "\u7EE7\u7236";
8150
+ }
8151
+ if (relation === "\u6BCD") {
8152
+ return "\u7D99\u6BCD";
8153
+ }
8154
+ if (relation === "\u606F\u5B50") {
8155
+ return "\u7D99\u5B50";
8156
+ }
8157
+ if (relation === "\u5A18") {
8158
+ return "\u7D99\u5A18";
8159
+ }
8160
+ return `\u7D99${relation}`;
8161
+ }
8162
+ if (this.pathN.relation === "adopted") {
8163
+ return `\u990A\u5B50\u306E${relation}`;
8164
+ }
8165
+ if (this.pathN.relation === "foster") {
8166
+ return `\u91CC\u89AA\u306E${relation}`;
8167
+ }
8168
+ return relation;
7886
8169
  }
7887
8170
  };
7888
8171
 
@@ -7891,22 +8174,32 @@ var InLawsZh = {
7891
8174
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u914D\u5076": "\u513F\u5AB3/\u5973\u5A7F",
7892
8175
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u59BB\u5B50": "\u513F\u5AB3",
7893
8176
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u4E08\u592B": "\u5973\u5A7F",
7894
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
7895
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
7896
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
8177
+ "\u59BB\u5B50\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD",
8178
+ "\u4E08\u592B\u7684\u6BCD\u4EB2": "\u5A46\u5A46",
8179
+ "(\u914D\u5076)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
8180
+ "\u59BB\u5B50\u7684\u7236\u4EB2": "\u5CB3\u7236",
8181
+ "\u4E08\u592B\u7684\u7236\u4EB2": "\u516C\u516C",
8182
+ "(\u914D\u5076)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
8183
+ "\u59BB\u5B50\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD",
8184
+ "\u4E08\u592B\u7684\u7236\u6BCD": "\u516C\u516C\u5A46\u5A46",
8185
+ "(\u914D\u5076)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
7897
8186
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u59BB\u5B50": "\u5AC2\u5B50/\u5F1F\u59B9",
7898
8187
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u4E08\u592B": "\u59D0\u592B/\u59B9\u592B",
7899
8188
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u914D\u5076": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
7900
8189
  "(\u5F02\u7236\u6BCD\u7684)?\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59D0\u592B/\u59B9\u592B",
7901
8190
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u5AC2\u5B50/\u5F1F\u59B9",
7902
8191
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
7903
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
7904
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
8192
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u59D0\u59B9": "\u59E8\u5B50",
8193
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u59D0\u59B9": "\u59D1\u5B50",
8194
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
8195
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u5144\u5F1F": "\u5185\u5144/\u5185\u5F1F",
8196
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4",
8197
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
7905
8198
  "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F\u59D0\u59B9": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9"
7906
8199
  };
7907
8200
 
7908
8201
  // src/kinship-translator/kinship-translator.zh.ts
7909
- var sexOf3 = (person) => {
8202
+ var sexOf6 = (person) => {
7910
8203
  if (person?.isMale?.()) {
7911
8204
  return "m";
7912
8205
  }
@@ -7915,7 +8208,7 @@ var sexOf3 = (person) => {
7915
8208
  }
7916
8209
  return "n";
7917
8210
  };
7918
- var pick2 = (sex, male, female, neutral) => {
8211
+ var pick5 = (sex, male, female, neutral) => {
7919
8212
  if (sex === "m") {
7920
8213
  return male;
7921
8214
  }
@@ -7928,41 +8221,41 @@ var lineal2 = (level, sex, kind) => {
7928
8221
  const L = Math.max(1, level);
7929
8222
  if (kind === "asc") {
7930
8223
  if (L <= 1) {
7931
- return pick2(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
8224
+ return pick5(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
7932
8225
  }
7933
8226
  if (L === 2) {
7934
- return pick2(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
8227
+ return pick5(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7935
8228
  }
7936
8229
  if (L === 3) {
7937
- return pick2(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
8230
+ return pick5(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7938
8231
  }
7939
8232
  if (L === 4) {
7940
- return pick2(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
8233
+ return pick5(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7941
8234
  }
7942
- return pick2(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
8235
+ return pick5(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
7943
8236
  }
7944
8237
  if (L <= 1) {
7945
- return pick2(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
8238
+ return pick5(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
7946
8239
  }
7947
8240
  if (L === 2) {
7948
- return pick2(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
8241
+ return pick5(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
7949
8242
  }
7950
8243
  if (L === 3) {
7951
- return pick2(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
8244
+ return pick5(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
7952
8245
  }
7953
8246
  if (L === 4) {
7954
- return pick2(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
8247
+ return pick5(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
7955
8248
  }
7956
- return pick2(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
8249
+ return pick5(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
7957
8250
  };
7958
8251
  var cousinPlain2 = (degree, sex) => {
7959
8252
  if (degree <= 1) {
7960
- return pick2(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
8253
+ return pick5(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
7961
8254
  }
7962
8255
  if (degree === 2) {
7963
- return pick2(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
8256
+ return pick5(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
7964
8257
  }
7965
- return pick2(
8258
+ return pick5(
7966
8259
  sex,
7967
8260
  `${degree}\u4EE3\u5802\u8868\u5144\u5F1F`,
7968
8261
  `${degree}\u4EE3\u5802\u8868\u59D0\u59B9`,
@@ -7975,7 +8268,7 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7975
8268
  if (degree > 0) {
7976
8269
  degree = degree - 1;
7977
8270
  }
7978
- return cousinPlain2(degree, sexOf3(this.personN));
8271
+ return cousinPlain2(degree, sexOf6(this.personN));
7979
8272
  }
7980
8273
  removal() {
7981
8274
  const level = this.pathN?.level ?? 0;
@@ -7987,56 +8280,56 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7987
8280
  return level < 0 ? this.nibling() : this.auncle();
7988
8281
  }
7989
8282
  const removed = Math.abs(level);
7990
- return `${cousinPlain2(degree, sexOf3(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
8283
+ return `${cousinPlain2(degree, sexOf6(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
7991
8284
  }
7992
8285
  auncle() {
7993
8286
  const level = Math.abs(this.pathN?.level ?? 0);
7994
- const sex = sexOf3(this.personN);
7995
- if (level <= 2) {
7996
- return pick2(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
8287
+ const sex = sexOf6(this.personN);
8288
+ if (level <= 1) {
8289
+ return pick5(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
7997
8290
  }
7998
- if (level === 3) {
7999
- return pick2(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
8291
+ if (level === 2) {
8292
+ return pick5(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
8000
8293
  }
8001
- return pick2(
8294
+ return pick5(
8002
8295
  sex,
8003
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u53D4`,
8004
- `${level - 2}\u4EE3\u524D\u7684\u963F\u59E8`,
8005
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
8296
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u53D4`,
8297
+ `${level - 1}\u4EE3\u524D\u7684\u963F\u59E8`,
8298
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
8006
8299
  );
8007
8300
  }
8008
8301
  nibling() {
8009
8302
  const level = Math.abs(this.pathN?.level ?? 0);
8010
- const sex = sexOf3(this.personN);
8011
- if (level <= 2) {
8012
- return pick2(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
8303
+ const sex = sexOf6(this.personN);
8304
+ if (level <= 1) {
8305
+ return pick5(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
8013
8306
  }
8014
- if (level === 3) {
8015
- return pick2(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
8307
+ if (level === 2) {
8308
+ return pick5(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
8016
8309
  }
8017
- return pick2(
8310
+ return pick5(
8018
8311
  sex,
8019
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
8020
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5973`,
8021
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
8312
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
8313
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5973`,
8314
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
8022
8315
  );
8023
8316
  }
8024
8317
  parent() {
8025
8318
  return lineal2(
8026
8319
  Math.abs(this.pathN?.level ?? 0),
8027
- sexOf3(this.personN),
8320
+ sexOf6(this.personN),
8028
8321
  "asc"
8029
8322
  );
8030
8323
  }
8031
8324
  child() {
8032
8325
  return lineal2(
8033
8326
  Math.abs(this.pathN?.level ?? 0),
8034
- sexOf3(this.personN),
8327
+ sexOf6(this.personN),
8035
8328
  "desc"
8036
8329
  );
8037
8330
  }
8038
8331
  sibling() {
8039
- return pick2(sexOf3(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
8332
+ return pick5(sexOf6(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
8040
8333
  }
8041
8334
  halfBlood(relation) {
8042
8335
  if (!relation || !this.isHalfBlood) {
@@ -8045,14 +8338,14 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
8045
8338
  return `\u5F02\u7236\u6BCD\u7684${relation}`;
8046
8339
  }
8047
8340
  spouse() {
8048
- return pick2(sexOf3(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
8341
+ return pick5(sexOf6(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
8049
8342
  }
8050
8343
  ofSpouse(relation) {
8051
8344
  if (!relation) {
8052
8345
  return "";
8053
8346
  }
8054
- const spouseType = pick2(
8055
- sexOf3(this.path?.[1].indi),
8347
+ const spouseType = pick5(
8348
+ sexOf6(this.path?.[1].indi),
8056
8349
  "\u4E08\u592B",
8057
8350
  "\u59BB\u5B50",
8058
8351
  "\u914D\u5076"
@@ -8064,12 +8357,12 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
8064
8357
  return "";
8065
8358
  }
8066
8359
  const spouse = this.path?.[this.path.length - 1].indi;
8067
- const spouseType = pick2(sexOf3(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
8360
+ const spouseType = pick5(sexOf6(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
8068
8361
  return `${relation}\u7684${spouseType}`;
8069
8362
  }
8070
8363
  of(relation) {
8071
8364
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
8072
- nameOrder: "last-first"
8365
+ nameOrder: this.nameOrder
8073
8366
  });
8074
8367
  let name = formattedName.inOrder.filter(Boolean).join(" ");
8075
8368
  if (this.displayName === "none") {
@@ -8100,27 +8393,68 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
8100
8393
  if (!relation || !this.pathN?.relation) {
8101
8394
  return relation ?? "";
8102
8395
  }
8103
- return `${this.pathN.relation}${relation}`;
8396
+ if (this.pathN.relation === "step") {
8397
+ if (relation === "\u7236\u4EB2") {
8398
+ return "\u7EE7\u7236";
8399
+ }
8400
+ if (relation === "\u6BCD\u4EB2") {
8401
+ return "\u7EE7\u6BCD";
8402
+ }
8403
+ if (relation === "\u513F\u5B50") {
8404
+ return "\u7EE7\u5B50";
8405
+ }
8406
+ if (relation === "\u5973\u513F") {
8407
+ return "\u7EE7\u5973";
8408
+ }
8409
+ return `\u7EE7${relation}`;
8410
+ }
8411
+ if (this.pathN.relation === "adopted") {
8412
+ if (relation === "\u7236\u4EB2") {
8413
+ return "\u517B\u7236";
8414
+ }
8415
+ if (relation === "\u6BCD\u4EB2") {
8416
+ return "\u517B\u6BCD";
8417
+ }
8418
+ if (relation === "\u513F\u5B50") {
8419
+ return "\u517B\u5B50";
8420
+ }
8421
+ if (relation === "\u5973\u513F") {
8422
+ return "\u517B\u5973";
8423
+ }
8424
+ return `\u517B${relation}`;
8425
+ }
8426
+ if (this.pathN.relation === "foster") {
8427
+ return `\u5BC4\u517B${relation}`;
8428
+ }
8429
+ return relation;
8104
8430
  }
8105
8431
  };
8106
8432
 
8107
8433
  // src/kinship-translator/kinship-translator.ts
8434
+ var nameOrderForLang = (lang) => lang === "hu" || lang === "ja" || lang === "zh" ? "last-first" : "first-last";
8108
8435
  var KinshipTranslator = class {
8109
- constructor(person1, person2, lang = "en", entirePath, displayName = "givenname") {
8436
+ constructor(person1, person2, lang = "en", entirePath, displayName = "givenname", nameOrder) {
8110
8437
  this.displayName = displayName;
8111
8438
  this.lang = lang;
8112
8439
  this.entirePath = entirePath;
8113
8440
  this.person1 = person1;
8114
8441
  this.person2 = typeof person2 === "string" ? this.person1.getGedcom()?.indi(person2) : person2;
8115
8442
  this.path = this.person1.path(this.person2);
8443
+ const order = nameOrder ?? nameOrderForLang(lang);
8444
+ this.nameOrder = order;
8116
8445
  if (translators_exports[lang]) {
8117
8446
  this.translator = new translators_exports[lang](
8118
8447
  this.path ?? [],
8119
- displayName
8448
+ displayName,
8449
+ order
8120
8450
  );
8121
8451
  }
8122
8452
  if (!this.translator) {
8123
- this.translator = new KinshipTranslatorEn(this.path ?? [], displayName);
8453
+ this.translator = new KinshipTranslatorEn(
8454
+ this.path ?? [],
8455
+ displayName,
8456
+ order
8457
+ );
8124
8458
  }
8125
8459
  }
8126
8460
  get path0() {
@@ -8165,14 +8499,16 @@ var KinshipTranslator = class {
8165
8499
  showMainPerson,
8166
8500
  this.lang,
8167
8501
  false,
8168
- this.displayName
8502
+ this.displayName,
8503
+ this.nameOrder
8169
8504
  ),
8170
8505
  relative: this.path?.[index - 1]?.indi.kinship(
8171
8506
  path2.indi.id,
8172
8507
  showMainPerson,
8173
8508
  this.lang,
8174
8509
  false,
8175
- this.displayName
8510
+ this.displayName,
8511
+ this.nameOrder
8176
8512
  )
8177
8513
  }));
8178
8514
  return path;
@@ -9406,7 +9742,7 @@ var collectExtensionTagsFrom = (node, into = /* @__PURE__ */ new Set()) => {
9406
9742
  // package.json
9407
9743
  var package_default = {
9408
9744
  name: "@treeviz/gedcom-parser",
9409
- version: "2.1.11"};
9745
+ version: "2.1.15"};
9410
9746
 
9411
9747
  // src/utils/get-product-details.ts
9412
9748
  var isDevelopment = () => {
@@ -10505,7 +10841,7 @@ var create = (gedcom, type, id, nodes) => {
10505
10841
  prevNode = createObje(gedcom, void 0, mainNode, curNode);
10506
10842
  } else if (type === "DATE") {
10507
10843
  prevNode = createCommonDate(gedcom, void 0, mainNode, curNode);
10508
- } else if (type === "NOTE" || type === "SNOTE") {
10844
+ } else if (type === "NOTE" || type === "SNOTE" || type === "_TREEVIZ_LIFE_STORY" || type === "_TREEVIZ_FAMILY_STORY") {
10509
10845
  prevNode = createCommonNote(gedcom, void 0, mainNode, curNode);
10510
10846
  } else if (type === "NAME" && mainNode instanceof Indi) {
10511
10847
  prevNode = createCommonName(gedcom, void 0, mainNode, curNode);