@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
package/dist/index.js CHANGED
@@ -5098,14 +5098,15 @@ var Indi = class extends Common {
5098
5098
  }
5099
5099
  return foundPath;
5100
5100
  }
5101
- kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname") {
5101
+ kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname", nameOrder) {
5102
5102
  const KinshipTranslatorClass2 = getKinshipTranslatorClass();
5103
5103
  const translator = new KinshipTranslatorClass2(
5104
5104
  this,
5105
5105
  other,
5106
5106
  lang,
5107
5107
  entirePath,
5108
- showMainPerson ? displayName : void 0
5108
+ showMainPerson ? displayName : void 0,
5109
+ nameOrder
5109
5110
  );
5110
5111
  return translator.translate(!!showMainPerson);
5111
5112
  }
@@ -6036,11 +6037,12 @@ var hungarianOrdinalize = (n) => {
6036
6037
 
6037
6038
  // src/kinship-translator/kinship-translator.basic.ts
6038
6039
  var KinshipTranslatorBasic = class {
6039
- constructor(path, displayName = "givenname") {
6040
+ constructor(path, displayName = "givenname", nameOrder = "first-last") {
6040
6041
  this.isOfSpouse = false;
6041
6042
  this.isSpouseOf = false;
6042
6043
  this._path = path;
6043
6044
  this.displayName = displayName;
6045
+ this.nameOrder = nameOrder;
6044
6046
  }
6045
6047
  get path() {
6046
6048
  return this._path;
@@ -6319,7 +6321,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6319
6321
  }
6320
6322
  return `${hungarianOrdinalize(
6321
6323
  degree
6322
- )}unokatestv\xE9r ${level}x elt\xE1vol\xEDtva`;
6324
+ )}unokatestv\xE9r ${Math.abs(level)}x elt\xE1vol\xEDtva`;
6323
6325
  }
6324
6326
  auncle() {
6325
6327
  const level = this.pathN?.level ?? 0;
@@ -6363,14 +6365,25 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6363
6365
  return `${ordinalized ? `${ordinalized}unoka` : ""}testv\xE9r ${origPrefix.replace(/nagy$/, "")}unok\xE1ja`;
6364
6366
  }
6365
6367
  parent() {
6368
+ const level = Math.abs(this.pathN?.level ?? 0);
6369
+ if (level <= 1) {
6370
+ if (this.personN?.isMale()) {
6371
+ return "apa";
6372
+ }
6373
+ if (this.personN?.isFemale()) {
6374
+ return "anya";
6375
+ }
6376
+ return "sz\xFCl\u0151";
6377
+ }
6366
6378
  const prefix = this.directPrefix();
6379
+ const gen = prefix === "nagy" ? "" : prefix;
6367
6380
  if (this.personN?.isMale()) {
6368
- return `${prefix}apa`;
6381
+ return `${gen}nagyapa`;
6369
6382
  }
6370
6383
  if (this.personN?.isFemale()) {
6371
- return `${prefix}anya`;
6384
+ return `${gen}nagyanya`;
6372
6385
  }
6373
- return `${prefix}sz\xFCl\u0151`;
6386
+ return `${gen}nagysz\xFCl\u0151`;
6374
6387
  }
6375
6388
  child() {
6376
6389
  const level = Math.abs(this.pathN?.level ?? 0);
@@ -6452,7 +6465,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6452
6465
  }
6453
6466
  of(relation) {
6454
6467
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6455
- nameOrder: "last-first"
6468
+ nameOrder: this.nameOrder
6456
6469
  });
6457
6470
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6458
6471
  if (this.displayName === "none") {
@@ -6564,27 +6577,30 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6564
6577
  if (!degree) {
6565
6578
  return level < 0 ? this.nibling() : this.auncle();
6566
6579
  }
6567
- return `${ordinalize(degree)} cousin ${level}x removed`;
6580
+ return `${ordinalize(degree)} cousin ${Math.abs(level)}x removed`;
6568
6581
  }
6569
6582
  auncle() {
6570
- const prefix = this.directPrefix();
6583
+ const level = Math.abs(this.pathN?.level ?? 0);
6584
+ const greats = level <= 1 ? "" : "great-".repeat(level - 1);
6571
6585
  if (this.personN?.isMale()) {
6572
- return `${prefix}uncle`;
6586
+ return `${greats}uncle`;
6573
6587
  }
6574
6588
  if (this.personN?.isFemale()) {
6575
- return `${prefix}aunt`;
6589
+ return `${greats}aunt`;
6576
6590
  }
6577
- return `${prefix}auncle`;
6591
+ return greats ? `${greats}uncle/${greats}aunt` : "uncle/aunt";
6578
6592
  }
6579
6593
  nibling() {
6580
- const prefix = this.directPrefix();
6594
+ const level = Math.abs(this.pathN?.level ?? 0);
6595
+ const greats = level <= 2 ? "" : "great-".repeat(level - 2);
6596
+ const grand = level <= 1 ? "" : "grand";
6581
6597
  if (this.personN?.isMale()) {
6582
- return `${prefix}nephew`;
6598
+ return `${greats}${grand}nephew`;
6583
6599
  }
6584
6600
  if (this.personN?.isFemale()) {
6585
- return `${prefix}niece`;
6601
+ return `${greats}${grand}niece`;
6586
6602
  }
6587
- return `${prefix}nibling`;
6603
+ return greats || grand ? `${greats}${grand}nephew/${greats}${grand}niece` : "nephew/niece";
6588
6604
  }
6589
6605
  parent() {
6590
6606
  const prefix = this.directPrefix();
@@ -6663,7 +6679,7 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6663
6679
  }
6664
6680
  of(relation) {
6665
6681
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6666
- nameOrder: "first-last"
6682
+ nameOrder: this.nameOrder
6667
6683
  });
6668
6684
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6669
6685
  if (this.displayName === "none") {
@@ -6712,45 +6728,64 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6712
6728
  };
6713
6729
 
6714
6730
  // src/kinship-translator/patterns.de.ts
6731
+ var parentRelationsDe = {
6732
+ step: "Stief",
6733
+ foster: "Pflege",
6734
+ adopted: "Adoptiv"
6735
+ };
6715
6736
  var InLawsDe = {
6716
- "Ehepartner von (kind|tochter|sohn)": "Schwiegerkind",
6717
- "Ehefrau von (kind|tochter|sohn)": "Schwiegertochter",
6718
- "Ehemann von (kind|tochter|sohn)": "Schwiegersohn",
6719
- "mutter des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegermutter",
6720
- "vater des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegervater",
6721
- "elternteil des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegerelternteil",
6722
- "Ehefrau von (Halb)?(geschwister|schwester|bruder)": "Schw\xE4gerin",
6723
- "Ehemann von (Halb)?(geschwister|schwester|bruder)": "Schwager",
6724
- "Ehepartner von (Halb)?(geschwister|schwester|bruder)": "Schwager/Schw\xE4gerin",
6725
- "(Halb)?schwester des (Ehepartner|Ehefrau|Ehemann)s": "Schw\xE4gerin",
6726
- "(Halb)?bruder des (Ehepartner|Ehefrau|Ehemann)s": "Schwager",
6727
- "(Halb)?geschwister des (Ehepartner|Ehefrau|Ehemann)s": "Schwager/Schw\xE4gerin"
6737
+ "Ehepartner von (Kind|Tochter|Sohn)": "Schwiegerkind",
6738
+ "Ehefrau von (Kind|Tochter|Sohn)": "Schwiegertochter",
6739
+ "Ehemann von (Kind|Tochter|Sohn)": "Schwiegersohn",
6740
+ "Mutter (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegermutter",
6741
+ "Vater (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegervater",
6742
+ "Elternteil (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegerelternteil",
6743
+ "Ehefrau von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schw\xE4gerin",
6744
+ "Ehemann von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager",
6745
+ "Ehepartner von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager/Schw\xE4gerin",
6746
+ "(Halb)?-?(Schwester|schwester) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schw\xE4gerin",
6747
+ "(Halb)?-?(Bruder|bruder) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager",
6748
+ "(Halb)?-?(Geschwister|geschwister) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager/Schw\xE4gerin"
6728
6749
  };
6729
6750
 
6730
6751
  // src/kinship-translator/kinship-translator.de.ts
6731
- var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6732
- directPrefix() {
6733
- const level = Math.abs(this.pathN?.level ?? 0);
6734
- if (level <= 1) {
6735
- return "";
6736
- }
6737
- if (level === 2) {
6738
- return "Gro\xDF";
6739
- }
6740
- if (level === 3) {
6741
- return "Urgro\xDF";
6742
- }
6743
- return `Ur${level - 2}-gro\xDF`;
6752
+ var sexOf = (person) => {
6753
+ if (person?.isMale?.()) {
6754
+ return "m";
6755
+ }
6756
+ if (person?.isFemale?.()) {
6757
+ return "f";
6744
6758
  }
6759
+ return "n";
6760
+ };
6761
+ var pick = (sex, male, female, neutral) => {
6762
+ if (sex === "m") {
6763
+ return male;
6764
+ }
6765
+ if (sex === "f") {
6766
+ return female;
6767
+ }
6768
+ return neutral;
6769
+ };
6770
+ var ur = (count) => count > 0 ? "Ur".repeat(count) : "";
6771
+ var genitiveArticle = (spouseType) => {
6772
+ if (spouseType === "Ehefrau") {
6773
+ return `der ${spouseType}`;
6774
+ }
6775
+ return `des ${spouseType}s`;
6776
+ };
6777
+ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6745
6778
  indirect() {
6746
6779
  let degree = Math.abs(this.pathN?.degree ?? 0);
6747
6780
  if (degree > 0) {
6748
6781
  degree = degree - 1;
6749
6782
  }
6750
- if (degree === 1) {
6751
- return `Cousin`;
6783
+ const sex = sexOf(this.personN);
6784
+ const cousin = pick(sex, "Cousin", "Cousine", "Cousin/Cousine");
6785
+ if (degree <= 1) {
6786
+ return cousin;
6752
6787
  }
6753
- return `Cousin ${degree}. Grades`;
6788
+ return `${cousin} ${degree}. Grades`;
6754
6789
  }
6755
6790
  removal() {
6756
6791
  const level = this.pathN?.level ?? 0;
@@ -6761,106 +6796,106 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6761
6796
  if (!degree) {
6762
6797
  return level < 0 ? this.nibling() : this.auncle();
6763
6798
  }
6764
- return `Cousin ${degree}. Grades ${Math.abs(level)}\xD7 entfernt`;
6799
+ return `${this.indirect()} ${Math.abs(level)}\xD7 entfernt`;
6765
6800
  }
6766
6801
  auncle() {
6767
- const prefix = this.directPrefix();
6768
- if (this.personN?.isMale()) {
6769
- return `${prefix}onkel`;
6770
- }
6771
- if (this.personN?.isFemale()) {
6772
- return `${prefix}tante`;
6802
+ const level = Math.abs(this.pathN?.level ?? 0);
6803
+ const sex = sexOf(this.personN);
6804
+ if (level <= 1) {
6805
+ return pick(sex, "Onkel", "Tante", "Onkel/Tante");
6773
6806
  }
6774
- return `${prefix}onkel/tante`;
6807
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6808
+ return pick(
6809
+ sex,
6810
+ `${prefix}onkel`,
6811
+ `${prefix}tante`,
6812
+ `${prefix}onkel/tante`
6813
+ );
6775
6814
  }
6776
6815
  nibling() {
6777
- const prefix = this.directPrefix();
6778
- if (this.personN?.isMale()) {
6779
- return `${prefix}neffe`;
6780
- }
6781
- if (this.personN?.isFemale()) {
6782
- return `${prefix}nichte`;
6816
+ const level = Math.abs(this.pathN?.level ?? 0);
6817
+ const sex = sexOf(this.personN);
6818
+ if (level <= 1) {
6819
+ return pick(sex, "Neffe", "Nichte", "Neffe/Nichte");
6783
6820
  }
6784
- return `${prefix}neffe/nichte`;
6821
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6822
+ return pick(
6823
+ sex,
6824
+ `${prefix}neffe`,
6825
+ `${prefix}nichte`,
6826
+ `${prefix}neffe/nichte`
6827
+ );
6785
6828
  }
6786
6829
  parent() {
6787
- const prefix = this.directPrefix();
6788
- if (this.personN?.isMale()) {
6789
- return `${prefix}vater`;
6790
- }
6791
- if (this.personN?.isFemale()) {
6792
- return `${prefix}mutter`;
6830
+ const level = Math.abs(this.pathN?.level ?? 0);
6831
+ const sex = sexOf(this.personN);
6832
+ if (level <= 1) {
6833
+ return pick(sex, "Vater", "Mutter", "Elternteil");
6793
6834
  }
6794
- return `${prefix}elternteil`;
6835
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6836
+ return pick(
6837
+ sex,
6838
+ `${prefix}vater`,
6839
+ `${prefix}mutter`,
6840
+ `${prefix}elternteil`
6841
+ );
6795
6842
  }
6796
6843
  child() {
6797
- const prefix = this.directPrefix();
6798
- if (this.personN?.isMale()) {
6799
- return `${prefix}sohn`;
6800
- }
6801
- if (this.personN?.isFemale()) {
6802
- return `${prefix}tochter`;
6844
+ const level = Math.abs(this.pathN?.level ?? 0);
6845
+ const sex = sexOf(this.personN);
6846
+ if (level <= 1) {
6847
+ return pick(sex, "Sohn", "Tochter", "Kind");
6803
6848
  }
6804
- return `${prefix}kind`;
6849
+ const prefix = ur(level - 2);
6850
+ return pick(
6851
+ sex,
6852
+ `${prefix}Enkel`,
6853
+ `${prefix}Enkelin`,
6854
+ `${prefix}Enkelkind`
6855
+ );
6805
6856
  }
6806
6857
  sibling() {
6807
- if (this.personN?.isMale()) {
6808
- return "bruder";
6809
- }
6810
- if (this.personN?.isFemale()) {
6811
- return "schwester";
6812
- }
6813
- return "geschwister";
6858
+ return pick(sexOf(this.personN), "Bruder", "Schwester", "Geschwister");
6814
6859
  }
6815
6860
  halfBlood(relation) {
6816
6861
  if (!relation || !this.isHalfBlood) {
6817
6862
  return relation ?? "";
6818
6863
  }
6819
- if (/^[A-ZÄÖÜ]/.test(relation) || /[-\s]/.test(relation)) {
6864
+ if (/[\s-]/.test(relation) || /^(Groß|Ur)/.test(relation)) {
6820
6865
  return `Halb-${relation}`;
6821
6866
  }
6822
- return `Halb${relation}`;
6867
+ return `Halb${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
6823
6868
  }
6824
6869
  spouse() {
6825
- if (this.personN?.isMale()) {
6826
- return "Ehemann";
6827
- }
6828
- if (this.personN?.isFemale()) {
6829
- return "Ehefrau";
6830
- }
6831
- return "Ehepartner";
6870
+ return pick(sexOf(this.personN), "Ehemann", "Ehefrau", "Ehepartner");
6832
6871
  }
6833
6872
  ofSpouse(relation) {
6834
6873
  if (!relation) {
6835
6874
  return "";
6836
6875
  }
6837
- const spouse = this.path?.[1].indi;
6838
- let spouseType = "Ehepartner";
6839
- if (spouse?.isMale()) {
6840
- spouseType = "Ehemann";
6841
- }
6842
- if (spouse?.isFemale()) {
6843
- spouseType = "Ehefrau";
6844
- }
6845
- return `${relation} des ${spouseType}s`;
6876
+ const spouseType = pick(
6877
+ sexOf(this.path?.[1].indi),
6878
+ "Ehemann",
6879
+ "Ehefrau",
6880
+ "Ehepartner"
6881
+ );
6882
+ return `${relation} ${genitiveArticle(spouseType)}`;
6846
6883
  }
6847
6884
  spouseOf(relation) {
6848
6885
  if (!relation) {
6849
6886
  return "";
6850
6887
  }
6851
- const spouse = this.path?.[this.path.length - 1].indi;
6852
- let spouseType = "Ehepartner";
6853
- if (spouse?.isMale()) {
6854
- spouseType = "Ehemann";
6855
- }
6856
- if (spouse?.isFemale()) {
6857
- spouseType = "Ehefrau";
6858
- }
6888
+ const spouseType = pick(
6889
+ sexOf(this.path?.[this.path.length - 1].indi),
6890
+ "Ehemann",
6891
+ "Ehefrau",
6892
+ "Ehepartner"
6893
+ );
6859
6894
  return `${spouseType} von ${relation}`;
6860
6895
  }
6861
6896
  of(relation) {
6862
6897
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6863
- nameOrder: "first-last"
6898
+ nameOrder: this.nameOrder
6864
6899
  });
6865
6900
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6866
6901
  if (this.displayName === "none") {
@@ -6873,8 +6908,8 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6873
6908
  if (!name || !relation) {
6874
6909
  return relation ?? "";
6875
6910
  }
6876
- if (relation.includes(" des ") || relation.includes(" von ")) {
6877
- return relation.replace(/ (des|von) /, ` $1 ${name}s `);
6911
+ if (relation.includes(" des ") || relation.includes(" der ") || relation.includes(" von ")) {
6912
+ return relation.replace(/ (des|der|von) /, ` $1 ${name}s `);
6878
6913
  }
6879
6914
  return `${name}s ${relation}`;
6880
6915
  }
@@ -6904,50 +6939,82 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6904
6939
  if (!relation || !this.pathN?.relation) {
6905
6940
  return relation ?? "";
6906
6941
  }
6907
- return `${this.pathN.relation} ${relation}`;
6942
+ const prefix = parentRelationsDe[this.pathN.relation];
6943
+ if (!prefix) {
6944
+ return relation;
6945
+ }
6946
+ if (prefix.endsWith("-") || prefix.endsWith(" ")) {
6947
+ return `${prefix}${relation}`;
6948
+ }
6949
+ return `${prefix}${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
6908
6950
  }
6909
6951
  };
6910
6952
 
6911
6953
  // src/kinship-translator/patterns.fr.ts
6954
+ var parentRelationsFr = {
6955
+ step: "step",
6956
+ foster: "foster",
6957
+ adopted: "adopted"
6958
+ };
6912
6959
  var InLawsFr = {
6913
6960
  "conjoint de (enfant|fille|fils)": "beau-fils/belle-fille",
6914
6961
  "\xE9pouse de (enfant|fille|fils)": "belle-fille",
6915
6962
  "mari de (enfant|fille|fils)": "gendre",
6916
- "m\xE8re du (conjoint|\xE9pouse|mari)": "belle-m\xE8re",
6917
- "p\xE8re du (conjoint|\xE9pouse|mari)": "beau-p\xE8re",
6918
- "parent du (conjoint|\xE9pouse|mari)": "beau-parent",
6963
+ "m\xE8re (du mari|du conjoint|de l'\xE9pouse)": "belle-m\xE8re",
6964
+ "p\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-p\xE8re",
6965
+ "parent (du mari|du conjoint|de l'\xE9pouse)": "beau-parent",
6919
6966
  "\xE9pouse de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "belle-s\u0153ur",
6920
6967
  "mari de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re",
6921
6968
  "conjoint de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re/belle-s\u0153ur",
6922
- "(demi-)?s\u0153ur du (conjoint|\xE9pouse|mari)": "belle-s\u0153ur",
6923
- "(demi-)?fr\xE8re du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re",
6924
- "(demi-)?fr\xE8re/s\u0153ur du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re/belle-s\u0153ur"
6969
+ "(demi-)?s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "belle-s\u0153ur",
6970
+ "(demi-)?fr\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re",
6971
+ "(demi-)?fr\xE8re/s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re/belle-s\u0153ur"
6925
6972
  };
6926
6973
 
6927
6974
  // src/kinship-translator/kinship-translator.fr.ts
6928
- var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6929
- directPrefix() {
6930
- const level = Math.abs(this.pathN?.level ?? 0);
6931
- if (level <= 1) {
6932
- return "";
6933
- }
6934
- if (level === 2) {
6935
- return "grand-";
6936
- }
6937
- if (level === 3) {
6938
- return "arri\xE8re-grand-";
6939
- }
6940
- return `arri\xE8re${level - 2}-grand-`;
6975
+ var sexOf2 = (person) => {
6976
+ if (person?.isMale?.()) {
6977
+ return "m";
6978
+ }
6979
+ if (person?.isFemale?.()) {
6980
+ return "f";
6941
6981
  }
6982
+ return "n";
6983
+ };
6984
+ var pick2 = (sex, male, female, neutral) => {
6985
+ if (sex === "m") {
6986
+ return male;
6987
+ }
6988
+ if (sex === "f") {
6989
+ return female;
6990
+ }
6991
+ return neutral;
6992
+ };
6993
+ var arriere = (count) => count > 0 ? "arri\xE8re-".repeat(count) : "";
6994
+ var frenchOrdinal = (n) => n === 1 ? "1er" : `${n}e`;
6995
+ var isFeminineRelation = (relation) => /mère|fille|sœur|tante|nièce|cousine|épouse/.test(relation);
6996
+ var ofSpousePrep = (spouseType) => {
6997
+ if (spouseType === "\xE9pouse") {
6998
+ return "de l'";
6999
+ }
7000
+ return "du ";
7001
+ };
7002
+ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6942
7003
  indirect() {
6943
7004
  let degree = Math.abs(this.pathN?.degree ?? 0);
6944
7005
  if (degree > 0) {
6945
7006
  degree = degree - 1;
6946
7007
  }
6947
- if (degree === 1) {
6948
- return `cousin`;
7008
+ const cousin = pick2(
7009
+ sexOf2(this.personN),
7010
+ "cousin",
7011
+ "cousine",
7012
+ "cousin/cousine"
7013
+ );
7014
+ if (degree <= 1) {
7015
+ return cousin;
6949
7016
  }
6950
- return `cousin au ${ordinalize(degree)} degr\xE9`;
7017
+ return `${cousin} au ${frenchOrdinal(degree)} degr\xE9`;
6951
7018
  }
6952
7019
  removal() {
6953
7020
  const level = this.pathN?.level ?? 0;
@@ -6958,56 +7025,57 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6958
7025
  if (!degree) {
6959
7026
  return level < 0 ? this.nibling() : this.auncle();
6960
7027
  }
6961
- return `cousin au ${ordinalize(degree)} degr\xE9 ${Math.abs(level)}\xD7 \xE9loign\xE9`;
7028
+ return `${this.indirect()} ${Math.abs(level)}\xD7 \xE9loign\xE9`;
6962
7029
  }
6963
7030
  auncle() {
6964
- const prefix = this.directPrefix();
6965
- if (this.personN?.isMale()) {
6966
- return `${prefix}oncle`;
6967
- }
6968
- if (this.personN?.isFemale()) {
6969
- return `${prefix}tante`;
7031
+ const level = Math.abs(this.pathN?.level ?? 0);
7032
+ const sex = sexOf2(this.personN);
7033
+ const base = pick2(sex, "oncle", "tante", "oncle/tante");
7034
+ if (level <= 1) {
7035
+ return base;
6970
7036
  }
6971
- return `${prefix}oncle/tante`;
7037
+ const grands = pick2(
7038
+ sex,
7039
+ "grand-oncle",
7040
+ "grand-tante",
7041
+ "grand-oncle/tante"
7042
+ );
7043
+ return `${arriere(level - 2)}${grands}`;
6972
7044
  }
6973
7045
  nibling() {
6974
- const prefix = this.directPrefix();
6975
- if (this.personN?.isMale()) {
6976
- return `${prefix}neveu`;
6977
- }
6978
- if (this.personN?.isFemale()) {
6979
- return `${prefix}ni\xE8ce`;
7046
+ const level = Math.abs(this.pathN?.level ?? 0);
7047
+ const sex = sexOf2(this.personN);
7048
+ if (level <= 1) {
7049
+ return pick2(sex, "neveu", "ni\xE8ce", "neveu/ni\xE8ce");
6980
7050
  }
6981
- return `${prefix}neveu/ni\xE8ce`;
7051
+ const grands = pick2(
7052
+ sex,
7053
+ "grand-neveu",
7054
+ "grande-ni\xE8ce",
7055
+ "grand-neveu/grande-ni\xE8ce"
7056
+ );
7057
+ return `${arriere(level - 2)}${grands}`;
6982
7058
  }
6983
7059
  parent() {
6984
- const prefix = this.directPrefix();
6985
- if (this.personN?.isMale()) {
6986
- return `${prefix}p\xE8re`;
6987
- }
6988
- if (this.personN?.isFemale()) {
6989
- return `${prefix}m\xE8re`;
7060
+ const level = Math.abs(this.pathN?.level ?? 0);
7061
+ const sex = sexOf2(this.personN);
7062
+ if (level <= 1) {
7063
+ return pick2(sex, "p\xE8re", "m\xE8re", "parent");
6990
7064
  }
6991
- return `${prefix}parent`;
7065
+ const grands = pick2(sex, "grand-p\xE8re", "grand-m\xE8re", "grand-parent");
7066
+ return `${arriere(level - 2)}${grands}`;
6992
7067
  }
6993
7068
  child() {
6994
- const prefix = this.directPrefix();
6995
- if (this.personN?.isMale()) {
6996
- return `${prefix}fils`;
6997
- }
6998
- if (this.personN?.isFemale()) {
6999
- return `${prefix}fille`;
7069
+ const level = Math.abs(this.pathN?.level ?? 0);
7070
+ const sex = sexOf2(this.personN);
7071
+ if (level <= 1) {
7072
+ return pick2(sex, "fils", "fille", "enfant");
7000
7073
  }
7001
- return `${prefix}enfant`;
7074
+ const petits = pick2(sex, "petit-fils", "petite-fille", "petit-enfant");
7075
+ return `${arriere(level - 2)}${petits}`;
7002
7076
  }
7003
7077
  sibling() {
7004
- if (this.personN?.isMale()) {
7005
- return "fr\xE8re";
7006
- }
7007
- if (this.personN?.isFemale()) {
7008
- return "s\u0153ur";
7009
- }
7010
- return "fr\xE8re/s\u0153ur";
7078
+ return pick2(sexOf2(this.personN), "fr\xE8re", "s\u0153ur", "fr\xE8re/s\u0153ur");
7011
7079
  }
7012
7080
  halfBlood(relation) {
7013
7081
  if (!relation || !this.isHalfBlood) {
@@ -7016,45 +7084,35 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7016
7084
  return `demi-${relation}`;
7017
7085
  }
7018
7086
  spouse() {
7019
- if (this.personN?.isMale()) {
7020
- return "mari";
7021
- }
7022
- if (this.personN?.isFemale()) {
7023
- return "\xE9pouse";
7024
- }
7025
- return "conjoint";
7087
+ return pick2(sexOf2(this.personN), "mari", "\xE9pouse", "conjoint");
7026
7088
  }
7027
7089
  ofSpouse(relation) {
7028
7090
  if (!relation) {
7029
7091
  return "";
7030
7092
  }
7031
- const spouse = this.path?.[1].indi;
7032
- let spouseType = "conjoint";
7033
- if (spouse?.isMale()) {
7034
- spouseType = "mari";
7035
- }
7036
- if (spouse?.isFemale()) {
7037
- spouseType = "\xE9pouse";
7038
- }
7039
- return `${relation} du ${spouseType}`;
7093
+ const spouseType = pick2(
7094
+ sexOf2(this.path?.[1].indi),
7095
+ "mari",
7096
+ "\xE9pouse",
7097
+ "conjoint"
7098
+ );
7099
+ return `${relation} ${ofSpousePrep(spouseType)}${spouseType}`;
7040
7100
  }
7041
7101
  spouseOf(relation) {
7042
7102
  if (!relation) {
7043
7103
  return "";
7044
7104
  }
7045
- const spouse = this.path?.[this.path.length - 1].indi;
7046
- let spouseType = "conjoint";
7047
- if (spouse?.isMale()) {
7048
- spouseType = "mari";
7049
- }
7050
- if (spouse?.isFemale()) {
7051
- spouseType = "\xE9pouse";
7052
- }
7105
+ const spouseType = pick2(
7106
+ sexOf2(this.path?.[this.path.length - 1].indi),
7107
+ "mari",
7108
+ "\xE9pouse",
7109
+ "conjoint"
7110
+ );
7053
7111
  return `${spouseType} de ${relation}`;
7054
7112
  }
7055
7113
  of(relation) {
7056
7114
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7057
- nameOrder: "first-last"
7115
+ nameOrder: this.nameOrder
7058
7116
  });
7059
7117
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7060
7118
  if (this.displayName === "none") {
@@ -7070,6 +7128,9 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7070
7128
  if (relation.includes(" du ") || relation.includes(" de ")) {
7071
7129
  return relation.replace(/ (du|de) /, ` $1 ${name} `);
7072
7130
  }
7131
+ if (relation.includes(" de l'")) {
7132
+ return relation.replace(" de l'", ` de ${name} l'`);
7133
+ }
7073
7134
  return `${relation} de ${name}`;
7074
7135
  }
7075
7136
  inLaw(relation) {
@@ -7098,50 +7159,118 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7098
7159
  if (!relation || !this.pathN?.relation) {
7099
7160
  return relation ?? "";
7100
7161
  }
7101
- return `${this.pathN.relation} ${relation}`;
7162
+ const kind = parentRelationsFr[this.pathN.relation];
7163
+ if (!kind) {
7164
+ return relation;
7165
+ }
7166
+ if (kind === "step") {
7167
+ return `${isFeminineRelation(relation) ? "belle-" : "beau-"}${relation}`;
7168
+ }
7169
+ if (kind === "adopted") {
7170
+ return `${relation} ${isFeminineRelation(relation) ? "adoptive" : "adoptif"}`;
7171
+ }
7172
+ if (kind === "foster") {
7173
+ return `${relation} d'accueil`;
7174
+ }
7175
+ return relation;
7102
7176
  }
7103
7177
  };
7104
7178
 
7105
7179
  // src/kinship-translator/patterns.es.ts
7180
+ var parentRelationsEs = {
7181
+ step: {
7182
+ padre: "padrastro",
7183
+ madre: "madrastra",
7184
+ hijo: "hijastro",
7185
+ hija: "hijastra",
7186
+ hermano: "hermanastro",
7187
+ hermana: "hermanastra",
7188
+ abuelo: "abuelastro",
7189
+ abuela: "abuelastra"
7190
+ }
7191
+ };
7106
7192
  var InLawsEs = {
7107
7193
  "c\xF3nyuge de (hijo/hija|hija|hijo)": "yerno/nuera",
7108
7194
  "esposa de (hijo/hija|hija|hijo)": "nuera",
7109
7195
  "esposo de (hijo/hija|hija|hijo)": "yerno",
7110
- "madre del (c\xF3nyuge|esposa|esposo)": "suegra",
7111
- "padre del (c\xF3nyuge|esposa|esposo)": "suegro",
7112
- "padre/madre del (c\xF3nyuge|esposa|esposo)": "suegro/suegra",
7196
+ "madre (del c\xF3nyuge|del esposo|de la esposa)": "suegra",
7197
+ "padre (del c\xF3nyuge|del esposo|de la esposa)": "suegro",
7198
+ "padre/madre (del c\xF3nyuge|del esposo|de la esposa)": "suegro/suegra",
7113
7199
  "esposa de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
7114
7200
  "esposo de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
7115
7201
  "c\xF3nyuge de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
7116
- "(medio |media |medio/a )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
7117
- "(medio |media |medio/a )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
7118
- "(medio |media |medio/a )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
7202
+ "(medio |media |medio/a )?hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ada",
7203
+ "(medio |media |medio/a )?hermano (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado",
7204
+ "(medio |media |medio/a )?hermano/hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado/cu\xF1ada"
7119
7205
  };
7120
7206
 
7121
7207
  // src/kinship-translator/kinship-translator.es.ts
7122
- var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7123
- directPrefix() {
7124
- const level = Math.abs(this.pathN?.level ?? 0);
7125
- if (level <= 1) {
7126
- return "";
7127
- }
7128
- if (level === 2) {
7129
- return "bisabuel";
7130
- }
7131
- if (level === 3) {
7132
- return "tatarabuel";
7133
- }
7134
- return `t\xE1tara${level - 2}-abuel`;
7208
+ var sexOf3 = (person) => {
7209
+ if (person?.isMale?.()) {
7210
+ return "m";
7135
7211
  }
7212
+ if (person?.isFemale?.()) {
7213
+ return "f";
7214
+ }
7215
+ return "n";
7216
+ };
7217
+ var pick3 = (sex, male, female, neutral) => {
7218
+ if (sex === "m") {
7219
+ return male;
7220
+ }
7221
+ if (sex === "f") {
7222
+ return female;
7223
+ }
7224
+ return neutral;
7225
+ };
7226
+ var SPANISH_ORDINALS_M = [
7227
+ "",
7228
+ "",
7229
+ "segundo",
7230
+ "tercero",
7231
+ "cuarto",
7232
+ "quinto",
7233
+ "sexto",
7234
+ "s\xE9ptimo",
7235
+ "octavo",
7236
+ "noveno",
7237
+ "d\xE9cimo"
7238
+ ];
7239
+ var SPANISH_ORDINALS_F = [
7240
+ "",
7241
+ "",
7242
+ "segunda",
7243
+ "tercera",
7244
+ "cuarta",
7245
+ "quinta",
7246
+ "sexta",
7247
+ "s\xE9ptima",
7248
+ "octava",
7249
+ "novena",
7250
+ "d\xE9cima"
7251
+ ];
7252
+ var spanishOrdinal = (n, sex) => {
7253
+ const list = sex === "f" ? SPANISH_ORDINALS_F : SPANISH_ORDINALS_M;
7254
+ return list[n] ?? `${n}.\xBA`;
7255
+ };
7256
+ var ofSpousePrep2 = (spouseType) => {
7257
+ if (spouseType === "esposa") {
7258
+ return "de la ";
7259
+ }
7260
+ return "del ";
7261
+ };
7262
+ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7136
7263
  indirect() {
7137
7264
  let degree = Math.abs(this.pathN?.degree ?? 0);
7138
7265
  if (degree > 0) {
7139
7266
  degree = degree - 1;
7140
7267
  }
7141
- if (degree === 1) {
7142
- return `primo`;
7268
+ const sex = sexOf3(this.personN);
7269
+ const cousin = pick3(sex, "primo", "prima", "primo/prima");
7270
+ if (degree <= 1) {
7271
+ return cousin;
7143
7272
  }
7144
- return `primo ${ordinalize(degree)}`;
7273
+ return `${cousin} ${spanishOrdinal(degree, sex)}`;
7145
7274
  }
7146
7275
  removal() {
7147
7276
  const level = this.pathN?.level ?? 0;
@@ -7152,56 +7281,133 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7152
7281
  if (!degree) {
7153
7282
  return level < 0 ? this.nibling() : this.auncle();
7154
7283
  }
7155
- return `primo ${ordinalize(degree)} ${Math.abs(level)}\xD7 separado`;
7284
+ return `${this.indirect()} ${Math.abs(level)}\xD7 separado`;
7156
7285
  }
7157
7286
  auncle() {
7158
- const prefix = this.directPrefix();
7159
- if (this.personN?.isMale()) {
7160
- return `${prefix}t\xEDo`;
7287
+ const level = Math.abs(this.pathN?.level ?? 0);
7288
+ const sex = sexOf3(this.personN);
7289
+ if (level <= 1) {
7290
+ return pick3(sex, "t\xEDo", "t\xEDa", "t\xEDo/t\xEDa");
7161
7291
  }
7162
- if (this.personN?.isFemale()) {
7163
- return `${prefix}t\xEDa`;
7292
+ if (level === 2) {
7293
+ return pick3(sex, "t\xEDo abuelo", "t\xEDa abuela", "t\xEDo/t\xEDa abuelo");
7294
+ }
7295
+ if (level === 3) {
7296
+ return pick3(
7297
+ sex,
7298
+ "t\xEDo bisabuelo",
7299
+ "t\xEDa bisabuela",
7300
+ "t\xEDo/t\xEDa bisabuelo"
7301
+ );
7164
7302
  }
7165
- return `${prefix}t\xEDo/t\xEDa`;
7303
+ return pick3(
7304
+ sex,
7305
+ `t\xEDo abuelo (${level - 1}.\xBA)`,
7306
+ `t\xEDa abuela (${level - 1}.\xAA)`,
7307
+ `t\xEDo/t\xEDa abuelo (${level - 1}.\xBA)`
7308
+ );
7166
7309
  }
7167
7310
  nibling() {
7168
- const prefix = this.directPrefix();
7169
- if (this.personN?.isMale()) {
7170
- return `${prefix}sobrino`;
7311
+ const level = Math.abs(this.pathN?.level ?? 0);
7312
+ const sex = sexOf3(this.personN);
7313
+ if (level <= 1) {
7314
+ return pick3(sex, "sobrino", "sobrina", "sobrino/sobrina");
7171
7315
  }
7172
- if (this.personN?.isFemale()) {
7173
- return `${prefix}sobrina`;
7316
+ if (level === 2) {
7317
+ return pick3(
7318
+ sex,
7319
+ "sobrino nieto",
7320
+ "sobrina nieta",
7321
+ "sobrino/sobrina nieto"
7322
+ );
7323
+ }
7324
+ if (level === 3) {
7325
+ return pick3(
7326
+ sex,
7327
+ "sobrino bisnieto",
7328
+ "sobrina bisnieta",
7329
+ "sobrino/sobrina bisnieto"
7330
+ );
7174
7331
  }
7175
- return `${prefix}sobrino/sobrina`;
7332
+ return pick3(
7333
+ sex,
7334
+ `sobrino nieto (${level - 1}.\xBA)`,
7335
+ `sobrina nieta (${level - 1}.\xAA)`,
7336
+ `sobrino/sobrina nieto (${level - 1}.\xBA)`
7337
+ );
7176
7338
  }
7177
7339
  parent() {
7178
- const prefix = this.directPrefix();
7179
- if (this.personN?.isMale()) {
7180
- return `${prefix}padre`;
7340
+ const level = Math.abs(this.pathN?.level ?? 0);
7341
+ const sex = sexOf3(this.personN);
7342
+ if (level <= 1) {
7343
+ return pick3(sex, "padre", "madre", "padre/madre");
7181
7344
  }
7182
- if (this.personN?.isFemale()) {
7183
- return `${prefix}madre`;
7345
+ if (level === 2) {
7346
+ return pick3(sex, "abuelo", "abuela", "abuelo/abuela");
7347
+ }
7348
+ if (level === 3) {
7349
+ return pick3(sex, "bisabuelo", "bisabuela", "bisabuelo/bisabuela");
7350
+ }
7351
+ if (level === 4) {
7352
+ return pick3(
7353
+ sex,
7354
+ "tatarabuelo",
7355
+ "tatarabuela",
7356
+ "tatarabuelo/tatarabuela"
7357
+ );
7358
+ }
7359
+ if (level === 5) {
7360
+ return pick3(
7361
+ sex,
7362
+ "trastatarabuelo",
7363
+ "trastatarabuela",
7364
+ "trastatarabuelo/trastatarabuela"
7365
+ );
7184
7366
  }
7185
- return `${prefix}padre/madre`;
7367
+ return pick3(
7368
+ sex,
7369
+ `abuelo (${level}.\xBA)`,
7370
+ `abuela (${level}.\xAA)`,
7371
+ `abuelo/abuela (${level}.\xBA)`
7372
+ );
7186
7373
  }
7187
7374
  child() {
7188
- const prefix = this.directPrefix();
7189
- if (this.personN?.isMale()) {
7190
- return `${prefix}hijo`;
7375
+ const level = Math.abs(this.pathN?.level ?? 0);
7376
+ const sex = sexOf3(this.personN);
7377
+ if (level <= 1) {
7378
+ return pick3(sex, "hijo", "hija", "hijo/hija");
7191
7379
  }
7192
- if (this.personN?.isFemale()) {
7193
- return `${prefix}hija`;
7380
+ if (level === 2) {
7381
+ return pick3(sex, "nieto", "nieta", "nieto/nieta");
7194
7382
  }
7195
- return `${prefix}hijo/hija`;
7196
- }
7197
- sibling() {
7198
- if (this.personN?.isMale()) {
7199
- return "hermano";
7383
+ if (level === 3) {
7384
+ return pick3(sex, "bisnieto", "bisnieta", "bisnieto/bisnieta");
7200
7385
  }
7201
- if (this.personN?.isFemale()) {
7202
- return "hermana";
7386
+ if (level === 4) {
7387
+ return pick3(
7388
+ sex,
7389
+ "tataranieto",
7390
+ "tataranieta",
7391
+ "tataranieto/tataranieta"
7392
+ );
7393
+ }
7394
+ if (level === 5) {
7395
+ return pick3(
7396
+ sex,
7397
+ "trastataranieto",
7398
+ "trastataranieta",
7399
+ "trastataranieto/trastataranieta"
7400
+ );
7203
7401
  }
7204
- return "hermano/hermana";
7402
+ return pick3(
7403
+ sex,
7404
+ `nieto (${level}.\xBA)`,
7405
+ `nieta (${level}.\xAA)`,
7406
+ `nieto/nieta (${level}.\xBA)`
7407
+ );
7408
+ }
7409
+ sibling() {
7410
+ return pick3(sexOf3(this.personN), "hermano", "hermana", "hermano/hermana");
7205
7411
  }
7206
7412
  halfBlood(relation) {
7207
7413
  if (!relation || !this.isHalfBlood) {
@@ -7216,45 +7422,35 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7216
7422
  return `medio/a ${relation}`;
7217
7423
  }
7218
7424
  spouse() {
7219
- if (this.personN?.isMale()) {
7220
- return "esposo";
7221
- }
7222
- if (this.personN?.isFemale()) {
7223
- return "esposa";
7224
- }
7225
- return "c\xF3nyuge";
7425
+ return pick3(sexOf3(this.personN), "esposo", "esposa", "c\xF3nyuge");
7226
7426
  }
7227
7427
  ofSpouse(relation) {
7228
7428
  if (!relation) {
7229
7429
  return "";
7230
7430
  }
7231
- const spouse = this.path?.[1].indi;
7232
- let spouseType = "c\xF3nyuge";
7233
- if (spouse?.isMale()) {
7234
- spouseType = "esposo";
7235
- }
7236
- if (spouse?.isFemale()) {
7237
- spouseType = "esposa";
7238
- }
7239
- return `${relation} del ${spouseType}`;
7431
+ const spouseType = pick3(
7432
+ sexOf3(this.path?.[1].indi),
7433
+ "esposo",
7434
+ "esposa",
7435
+ "c\xF3nyuge"
7436
+ );
7437
+ return `${relation} ${ofSpousePrep2(spouseType)}${spouseType}`;
7240
7438
  }
7241
7439
  spouseOf(relation) {
7242
7440
  if (!relation) {
7243
7441
  return "";
7244
7442
  }
7245
- const spouse = this.path?.[this.path.length - 1].indi;
7246
- let spouseType = "c\xF3nyuge";
7247
- if (spouse?.isMale()) {
7248
- spouseType = "esposo";
7249
- }
7250
- if (spouse?.isFemale()) {
7251
- spouseType = "esposa";
7252
- }
7443
+ const spouseType = pick3(
7444
+ sexOf3(this.path?.[this.path.length - 1].indi),
7445
+ "esposo",
7446
+ "esposa",
7447
+ "c\xF3nyuge"
7448
+ );
7253
7449
  return `${spouseType} de ${relation}`;
7254
7450
  }
7255
7451
  of(relation) {
7256
7452
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7257
- nameOrder: "first-last"
7453
+ nameOrder: this.nameOrder
7258
7454
  });
7259
7455
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7260
7456
  if (this.displayName === "none") {
@@ -7267,8 +7463,8 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7267
7463
  if (!name || !relation) {
7268
7464
  return relation ?? "";
7269
7465
  }
7270
- if (relation.includes(" del ") || relation.includes(" de ")) {
7271
- return relation.replace(/ (del|de) /, ` $1 ${name} `);
7466
+ if (relation.includes(" del ") || relation.includes(" de la ") || relation.includes(" de ")) {
7467
+ return relation.replace(/ (del|de la|de) /, ` $1 ${name} `);
7272
7468
  }
7273
7469
  return `${relation} de ${name}`;
7274
7470
  }
@@ -7298,7 +7494,20 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7298
7494
  if (!relation || !this.pathN?.relation) {
7299
7495
  return relation ?? "";
7300
7496
  }
7301
- return `${this.pathN.relation} ${relation}`;
7497
+ const mapped = parentRelationsEs[this.pathN.relation]?.[relation];
7498
+ if (mapped) {
7499
+ return mapped;
7500
+ }
7501
+ if (this.pathN.relation === "step") {
7502
+ return `${relation} pol\xEDtico`;
7503
+ }
7504
+ if (this.pathN.relation === "adopted") {
7505
+ return `${relation} adoptivo`;
7506
+ }
7507
+ if (this.pathN.relation === "foster") {
7508
+ return `${relation} de acogida`;
7509
+ }
7510
+ return relation;
7302
7511
  }
7303
7512
  };
7304
7513
 
@@ -7307,15 +7516,35 @@ var InLawsRu = {
7307
7516
  "\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",
7308
7517
  "\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",
7309
7518
  "\u043C\u0443\u0436 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C",
7310
- "\u043C\u0430\u0442\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0451\u0449\u0430",
7311
- "\u043E\u0442\u0435\u0446 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C",
7312
- "\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",
7519
+ "\u043C\u0430\u0442\u044C \u0436\u0435\u043D\u044B": "\u0442\u0451\u0449\u0430",
7520
+ "\u043C\u0430\u0442\u044C \u043C\u0443\u0436\u0430": "\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7521
+ "\u043C\u0430\u0442\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0451\u0449\u0430/\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7522
+ "\u043E\u0442\u0435\u0446 \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C",
7523
+ "\u043E\u0442\u0435\u0446 \u043C\u0443\u0436\u0430": "\u0441\u0432\u0451\u043A\u043E\u0440",
7524
+ "\u043E\u0442\u0435\u0446 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0441\u0432\u0451\u043A\u043E\u0440",
7525
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
7526
+ "\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",
7527
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
7313
7528
  "\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",
7314
7529
  "\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",
7315
7530
  "\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",
7316
- "(\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",
7317
- "(\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",
7318
- "(\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"
7531
+ "(\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",
7532
+ "(\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",
7533
+ "(\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",
7534
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u0436\u0435\u043D\u044B": "\u0448\u0443\u0440\u0438\u043D",
7535
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u043C\u0443\u0436\u0430": "\u0434\u0435\u0432\u0435\u0440\u044C",
7536
+ "(\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",
7537
+ "(\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",
7538
+ "(\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",
7539
+ "(\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"
7540
+ };
7541
+ var parentRelationsRu = {
7542
+ step: {
7543
+ \u043E\u0442\u0435\u0446: "\u043E\u0442\u0447\u0438\u043C",
7544
+ \u043C\u0430\u0442\u044C: "\u043C\u0430\u0447\u0435\u0445\u0430",
7545
+ \u0441\u044B\u043D: "\u043F\u0430\u0441\u044B\u043D\u043E\u043A",
7546
+ \u0434\u043E\u0447\u044C: "\u043F\u0430\u0434\u0447\u0435\u0440\u0438\u0446\u0430"
7547
+ }
7319
7548
  };
7320
7549
 
7321
7550
  // src/kinship-translator/kinship-translator.ru.ts
@@ -7346,7 +7575,7 @@ var cousinWord = (degree, sex) => {
7346
7575
  return `${stem}\u044B\u0439 \u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430`;
7347
7576
  };
7348
7577
  var praRepeat = (count) => count > 0 ? "\u043F\u0440\u0430".repeat(count) : "";
7349
- var sexOf = (person) => {
7578
+ var sexOf4 = (person) => {
7350
7579
  if (person?.isMale?.()) {
7351
7580
  return "m";
7352
7581
  }
@@ -7361,7 +7590,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7361
7590
  if (degree > 0) {
7362
7591
  degree = degree - 1;
7363
7592
  }
7364
- return cousinWord(degree, sexOf(this.personN));
7593
+ return cousinWord(degree, sexOf4(this.personN));
7365
7594
  }
7366
7595
  removal() {
7367
7596
  const level = this.pathN?.level ?? 0;
@@ -7373,35 +7602,53 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7373
7602
  return level < 0 ? this.nibling() : this.auncle();
7374
7603
  }
7375
7604
  const removed = Math.abs(level);
7376
- return `${cousinWord(degree, sexOf(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
7605
+ return `${cousinWord(degree, sexOf4(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
7377
7606
  }
7378
7607
  auncle() {
7379
7608
  const level = Math.abs(this.pathN?.level ?? 0);
7380
- const pra = praRepeat(Math.max(0, level - 2));
7381
- const sex = sexOf(this.personN);
7609
+ const sex = sexOf4(this.personN);
7610
+ if (level <= 1) {
7611
+ if (sex === "m") {
7612
+ return "\u0434\u044F\u0434\u044F";
7613
+ }
7614
+ if (sex === "f") {
7615
+ return "\u0442\u0451\u0442\u044F";
7616
+ }
7617
+ return "\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F";
7618
+ }
7619
+ const pra = praRepeat(level - 2);
7382
7620
  if (sex === "m") {
7383
- return `${pra}\u0434\u044F\u0434\u044F`;
7621
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434`;
7384
7622
  }
7385
7623
  if (sex === "f") {
7386
- return `${pra}\u0442\u0451\u0442\u044F`;
7624
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u0430\u044F ${pra}\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
7387
7625
  }
7388
- return `${pra}\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F`;
7626
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434/\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
7389
7627
  }
7390
7628
  nibling() {
7391
7629
  const level = Math.abs(this.pathN?.level ?? 0);
7392
- const pra = praRepeat(Math.max(0, level - 2));
7393
- const sex = sexOf(this.personN);
7630
+ const sex = sexOf4(this.personN);
7631
+ if (level <= 1) {
7632
+ if (sex === "m") {
7633
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A";
7634
+ }
7635
+ if (sex === "f") {
7636
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
7637
+ }
7638
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
7639
+ }
7640
+ const pra = praRepeat(level - 2);
7394
7641
  if (sex === "m") {
7395
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
7642
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u044B\u0439 \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
7396
7643
  }
7397
7644
  if (sex === "f") {
7398
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7645
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u0430\u044F \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7399
7646
  }
7400
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7647
+ 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`;
7401
7648
  }
7402
7649
  parent() {
7403
7650
  const level = Math.abs(this.pathN?.level ?? 0);
7404
- const sex = sexOf(this.personN);
7651
+ const sex = sexOf4(this.personN);
7405
7652
  if (level <= 1) {
7406
7653
  if (sex === "m") {
7407
7654
  return "\u043E\u0442\u0435\u0446";
@@ -7431,7 +7678,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7431
7678
  }
7432
7679
  child() {
7433
7680
  const level = Math.abs(this.pathN?.level ?? 0);
7434
- const sex = sexOf(this.personN);
7681
+ const sex = sexOf4(this.personN);
7435
7682
  if (level <= 1) {
7436
7683
  if (sex === "m") {
7437
7684
  return "\u0441\u044B\u043D";
@@ -7460,14 +7707,14 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7460
7707
  return `${pra}\u0432\u043D\u0443\u043A/\u0432\u043D\u0443\u0447\u043A\u0430`;
7461
7708
  }
7462
7709
  sibling() {
7463
- const sex = sexOf(this.personN);
7710
+ const sex = sexOf4(this.personN);
7464
7711
  if (sex === "m") {
7465
7712
  return "\u0431\u0440\u0430\u0442";
7466
7713
  }
7467
7714
  if (sex === "f") {
7468
7715
  return "\u0441\u0435\u0441\u0442\u0440\u0430";
7469
7716
  }
7470
- return "\u0441\u0438\u0431\u043B\u0438\u043D\u0433";
7717
+ return "\u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430";
7471
7718
  }
7472
7719
  halfBlood(relation) {
7473
7720
  if (!relation || !this.isHalfBlood) {
@@ -7481,7 +7728,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7481
7728
  return `\u0441\u0432\u043E\u0434\u043D\u044B\u0439 ${relation}`;
7482
7729
  }
7483
7730
  spouse() {
7484
- const sex = sexOf(this.personN);
7731
+ const sex = sexOf4(this.personN);
7485
7732
  if (sex === "m") {
7486
7733
  return "\u043C\u0443\u0436";
7487
7734
  }
@@ -7495,7 +7742,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7495
7742
  return "";
7496
7743
  }
7497
7744
  const spouse = this.path?.[1].indi;
7498
- const sex = sexOf(spouse);
7745
+ const sex = sexOf4(spouse);
7499
7746
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
7500
7747
  return `${relation} ${toGenitive(spouseType)}`;
7501
7748
  }
@@ -7504,13 +7751,13 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7504
7751
  return "";
7505
7752
  }
7506
7753
  const spouse = this.path?.[this.path.length - 1].indi;
7507
- const sex = sexOf(spouse);
7754
+ const sex = sexOf4(spouse);
7508
7755
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
7509
7756
  return `${spouseType} ${toGenitive(relation)}`;
7510
7757
  }
7511
7758
  of(relation) {
7512
7759
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7513
- nameOrder: "first-last"
7760
+ nameOrder: this.nameOrder
7514
7761
  });
7515
7762
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7516
7763
  if (this.displayName === "none") {
@@ -7541,7 +7788,22 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7541
7788
  if (!relation || !this.pathN?.relation) {
7542
7789
  return relation ?? "";
7543
7790
  }
7544
- return `${this.pathN.relation} ${relation}`;
7791
+ const mapped = parentRelationsRu[this.pathN.relation]?.[relation];
7792
+ if (mapped) {
7793
+ return mapped;
7794
+ }
7795
+ if (this.pathN.relation === "step") {
7796
+ return `\u043D\u0435\u0440\u043E\u0434\u043D\u043E\u0439 ${relation}`;
7797
+ }
7798
+ if (this.pathN.relation === "adopted") {
7799
+ return /сестра|дочь|мать|тётя|бабушка|жена|племянница|внучка/.test(
7800
+ relation
7801
+ ) ? `\u043F\u0440\u0438\u0451\u043C\u043D\u0430\u044F ${relation}` : `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
7802
+ }
7803
+ if (this.pathN.relation === "foster") {
7804
+ return `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
7805
+ }
7806
+ return relation;
7545
7807
  }
7546
7808
  };
7547
7809
 
@@ -7565,7 +7827,7 @@ var InLawsJa = {
7565
7827
  };
7566
7828
 
7567
7829
  // src/kinship-translator/kinship-translator.ja.ts
7568
- var sexOf2 = (person) => {
7830
+ var sexOf5 = (person) => {
7569
7831
  if (person?.isMale?.()) {
7570
7832
  return "m";
7571
7833
  }
@@ -7574,7 +7836,7 @@ var sexOf2 = (person) => {
7574
7836
  }
7575
7837
  return "n";
7576
7838
  };
7577
- var pick = (sex, male, female, neutral) => {
7839
+ var pick4 = (sex, male, female, neutral) => {
7578
7840
  if (sex === "m") {
7579
7841
  return male;
7580
7842
  }
@@ -7587,18 +7849,18 @@ var lineal = (level, sex, kind) => {
7587
7849
  const L = Math.max(1, level);
7588
7850
  if (kind === "asc") {
7589
7851
  if (L <= 1) {
7590
- return pick(sex, "\u7236", "\u6BCD", "\u89AA");
7852
+ return pick4(sex, "\u7236", "\u6BCD", "\u89AA");
7591
7853
  }
7592
7854
  if (L === 2) {
7593
- return pick(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7855
+ return pick4(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7594
7856
  }
7595
7857
  if (L === 3) {
7596
- return pick(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7858
+ return pick4(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7597
7859
  }
7598
7860
  if (L === 4) {
7599
- return pick(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7861
+ return pick4(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7600
7862
  }
7601
- return pick(
7863
+ return pick4(
7602
7864
  sex,
7603
7865
  `${L - 1}\u4E16\u306E\u7956\u7236`,
7604
7866
  `${L - 1}\u4E16\u306E\u7956\u6BCD`,
@@ -7606,7 +7868,7 @@ var lineal = (level, sex, kind) => {
7606
7868
  );
7607
7869
  }
7608
7870
  if (L <= 1) {
7609
- return pick(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
7871
+ return pick4(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
7610
7872
  }
7611
7873
  if (L === 2) {
7612
7874
  return "\u5B6B";
@@ -7653,52 +7915,52 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7653
7915
  }
7654
7916
  auncle() {
7655
7917
  const level = Math.abs(this.pathN?.level ?? 0);
7656
- const sex = sexOf2(this.personN);
7657
- if (level <= 2) {
7658
- return pick(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
7918
+ const sex = sexOf5(this.personN);
7919
+ if (level <= 1) {
7920
+ return pick4(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
7659
7921
  }
7660
- if (level === 3) {
7661
- return pick(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
7922
+ if (level === 2) {
7923
+ return pick4(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
7662
7924
  }
7663
- return pick(
7925
+ return pick4(
7664
7926
  sex,
7665
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058`,
7666
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3070`,
7667
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
7927
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058`,
7928
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3070`,
7929
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
7668
7930
  );
7669
7931
  }
7670
7932
  nibling() {
7671
7933
  const level = Math.abs(this.pathN?.level ?? 0);
7672
- const sex = sexOf2(this.personN);
7673
- if (level <= 2) {
7674
- return pick(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
7934
+ const sex = sexOf5(this.personN);
7935
+ if (level <= 1) {
7936
+ return pick4(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
7675
7937
  }
7676
- if (level === 3) {
7677
- return pick(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
7938
+ if (level === 2) {
7939
+ return pick4(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
7678
7940
  }
7679
- return pick(
7941
+ return pick4(
7680
7942
  sex,
7681
- `${level - 2}\u4EE3\u4E0B\u306E\u7525`,
7682
- `${level - 2}\u4EE3\u4E0B\u306E\u59EA`,
7683
- `${level - 2}\u4EE3\u4E0B\u306E\u7525/\u59EA`
7943
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525`,
7944
+ `${level - 1}\u4EE3\u4E0B\u306E\u59EA`,
7945
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525/\u59EA`
7684
7946
  );
7685
7947
  }
7686
7948
  parent() {
7687
7949
  return lineal(
7688
7950
  Math.abs(this.pathN?.level ?? 0),
7689
- sexOf2(this.personN),
7951
+ sexOf5(this.personN),
7690
7952
  "asc"
7691
7953
  );
7692
7954
  }
7693
7955
  child() {
7694
7956
  return lineal(
7695
7957
  Math.abs(this.pathN?.level ?? 0),
7696
- sexOf2(this.personN),
7958
+ sexOf5(this.personN),
7697
7959
  "desc"
7698
7960
  );
7699
7961
  }
7700
7962
  sibling() {
7701
- return pick(sexOf2(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
7963
+ return pick4(sexOf5(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
7702
7964
  }
7703
7965
  halfBlood(relation) {
7704
7966
  if (!relation || !this.isHalfBlood) {
@@ -7707,14 +7969,14 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7707
7969
  return `\u7570\u7236\u6BCD\u306E${relation}`;
7708
7970
  }
7709
7971
  spouse() {
7710
- return pick(sexOf2(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7972
+ return pick4(sexOf5(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7711
7973
  }
7712
7974
  ofSpouse(relation) {
7713
7975
  if (!relation) {
7714
7976
  return "";
7715
7977
  }
7716
- const spouseType = pick(
7717
- sexOf2(this.path?.[1].indi),
7978
+ const spouseType = pick4(
7979
+ sexOf5(this.path?.[1].indi),
7718
7980
  "\u592B",
7719
7981
  "\u59BB",
7720
7982
  "\u914D\u5076\u8005"
@@ -7726,12 +7988,12 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7726
7988
  return "";
7727
7989
  }
7728
7990
  const spouse = this.path?.[this.path.length - 1].indi;
7729
- const spouseType = pick(sexOf2(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7991
+ const spouseType = pick4(sexOf5(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7730
7992
  return `${relation}\u306E${spouseType}`;
7731
7993
  }
7732
7994
  of(relation) {
7733
7995
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7734
- nameOrder: "last-first"
7996
+ nameOrder: this.nameOrder
7735
7997
  });
7736
7998
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7737
7999
  if (this.displayName === "none") {
@@ -7762,7 +8024,28 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7762
8024
  if (!relation || !this.pathN?.relation) {
7763
8025
  return relation ?? "";
7764
8026
  }
7765
- return `${this.pathN.relation}\u306E${relation}`;
8027
+ if (this.pathN.relation === "step") {
8028
+ if (relation === "\u7236") {
8029
+ return "\u7EE7\u7236";
8030
+ }
8031
+ if (relation === "\u6BCD") {
8032
+ return "\u7D99\u6BCD";
8033
+ }
8034
+ if (relation === "\u606F\u5B50") {
8035
+ return "\u7D99\u5B50";
8036
+ }
8037
+ if (relation === "\u5A18") {
8038
+ return "\u7D99\u5A18";
8039
+ }
8040
+ return `\u7D99${relation}`;
8041
+ }
8042
+ if (this.pathN.relation === "adopted") {
8043
+ return `\u990A\u5B50\u306E${relation}`;
8044
+ }
8045
+ if (this.pathN.relation === "foster") {
8046
+ return `\u91CC\u89AA\u306E${relation}`;
8047
+ }
8048
+ return relation;
7766
8049
  }
7767
8050
  };
7768
8051
 
@@ -7771,22 +8054,32 @@ var InLawsZh = {
7771
8054
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u914D\u5076": "\u513F\u5AB3/\u5973\u5A7F",
7772
8055
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u59BB\u5B50": "\u513F\u5AB3",
7773
8056
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u4E08\u592B": "\u5973\u5A7F",
7774
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
7775
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
7776
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
8057
+ "\u59BB\u5B50\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD",
8058
+ "\u4E08\u592B\u7684\u6BCD\u4EB2": "\u5A46\u5A46",
8059
+ "(\u914D\u5076)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
8060
+ "\u59BB\u5B50\u7684\u7236\u4EB2": "\u5CB3\u7236",
8061
+ "\u4E08\u592B\u7684\u7236\u4EB2": "\u516C\u516C",
8062
+ "(\u914D\u5076)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
8063
+ "\u59BB\u5B50\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD",
8064
+ "\u4E08\u592B\u7684\u7236\u6BCD": "\u516C\u516C\u5A46\u5A46",
8065
+ "(\u914D\u5076)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
7777
8066
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u59BB\u5B50": "\u5AC2\u5B50/\u5F1F\u59B9",
7778
8067
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u4E08\u592B": "\u59D0\u592B/\u59B9\u592B",
7779
8068
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u914D\u5076": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
7780
8069
  "(\u5F02\u7236\u6BCD\u7684)?\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59D0\u592B/\u59B9\u592B",
7781
8070
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u5AC2\u5B50/\u5F1F\u59B9",
7782
8071
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
7783
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
7784
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
8072
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u59D0\u59B9": "\u59E8\u5B50",
8073
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u59D0\u59B9": "\u59D1\u5B50",
8074
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
8075
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u5144\u5F1F": "\u5185\u5144/\u5185\u5F1F",
8076
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4",
8077
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
7785
8078
  "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F\u59D0\u59B9": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9"
7786
8079
  };
7787
8080
 
7788
8081
  // src/kinship-translator/kinship-translator.zh.ts
7789
- var sexOf3 = (person) => {
8082
+ var sexOf6 = (person) => {
7790
8083
  if (person?.isMale?.()) {
7791
8084
  return "m";
7792
8085
  }
@@ -7795,7 +8088,7 @@ var sexOf3 = (person) => {
7795
8088
  }
7796
8089
  return "n";
7797
8090
  };
7798
- var pick2 = (sex, male, female, neutral) => {
8091
+ var pick5 = (sex, male, female, neutral) => {
7799
8092
  if (sex === "m") {
7800
8093
  return male;
7801
8094
  }
@@ -7808,41 +8101,41 @@ var lineal2 = (level, sex, kind) => {
7808
8101
  const L = Math.max(1, level);
7809
8102
  if (kind === "asc") {
7810
8103
  if (L <= 1) {
7811
- return pick2(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
8104
+ return pick5(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
7812
8105
  }
7813
8106
  if (L === 2) {
7814
- return pick2(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
8107
+ return pick5(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7815
8108
  }
7816
8109
  if (L === 3) {
7817
- return pick2(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
8110
+ return pick5(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7818
8111
  }
7819
8112
  if (L === 4) {
7820
- return pick2(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
8113
+ return pick5(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7821
8114
  }
7822
- return pick2(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
8115
+ return pick5(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
7823
8116
  }
7824
8117
  if (L <= 1) {
7825
- return pick2(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
8118
+ return pick5(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
7826
8119
  }
7827
8120
  if (L === 2) {
7828
- return pick2(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
8121
+ return pick5(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
7829
8122
  }
7830
8123
  if (L === 3) {
7831
- return pick2(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
8124
+ return pick5(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
7832
8125
  }
7833
8126
  if (L === 4) {
7834
- return pick2(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
8127
+ return pick5(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
7835
8128
  }
7836
- return pick2(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
8129
+ return pick5(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
7837
8130
  };
7838
8131
  var cousinPlain2 = (degree, sex) => {
7839
8132
  if (degree <= 1) {
7840
- return pick2(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
8133
+ return pick5(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
7841
8134
  }
7842
8135
  if (degree === 2) {
7843
- return pick2(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
8136
+ return pick5(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
7844
8137
  }
7845
- return pick2(
8138
+ return pick5(
7846
8139
  sex,
7847
8140
  `${degree}\u4EE3\u5802\u8868\u5144\u5F1F`,
7848
8141
  `${degree}\u4EE3\u5802\u8868\u59D0\u59B9`,
@@ -7855,7 +8148,7 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7855
8148
  if (degree > 0) {
7856
8149
  degree = degree - 1;
7857
8150
  }
7858
- return cousinPlain2(degree, sexOf3(this.personN));
8151
+ return cousinPlain2(degree, sexOf6(this.personN));
7859
8152
  }
7860
8153
  removal() {
7861
8154
  const level = this.pathN?.level ?? 0;
@@ -7867,56 +8160,56 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7867
8160
  return level < 0 ? this.nibling() : this.auncle();
7868
8161
  }
7869
8162
  const removed = Math.abs(level);
7870
- return `${cousinPlain2(degree, sexOf3(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
8163
+ return `${cousinPlain2(degree, sexOf6(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
7871
8164
  }
7872
8165
  auncle() {
7873
8166
  const level = Math.abs(this.pathN?.level ?? 0);
7874
- const sex = sexOf3(this.personN);
7875
- if (level <= 2) {
7876
- return pick2(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
8167
+ const sex = sexOf6(this.personN);
8168
+ if (level <= 1) {
8169
+ return pick5(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
7877
8170
  }
7878
- if (level === 3) {
7879
- return pick2(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
8171
+ if (level === 2) {
8172
+ return pick5(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
7880
8173
  }
7881
- return pick2(
8174
+ return pick5(
7882
8175
  sex,
7883
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u53D4`,
7884
- `${level - 2}\u4EE3\u524D\u7684\u963F\u59E8`,
7885
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
8176
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u53D4`,
8177
+ `${level - 1}\u4EE3\u524D\u7684\u963F\u59E8`,
8178
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
7886
8179
  );
7887
8180
  }
7888
8181
  nibling() {
7889
8182
  const level = Math.abs(this.pathN?.level ?? 0);
7890
- const sex = sexOf3(this.personN);
7891
- if (level <= 2) {
7892
- return pick2(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
8183
+ const sex = sexOf6(this.personN);
8184
+ if (level <= 1) {
8185
+ return pick5(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
7893
8186
  }
7894
- if (level === 3) {
7895
- return pick2(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
8187
+ if (level === 2) {
8188
+ return pick5(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
7896
8189
  }
7897
- return pick2(
8190
+ return pick5(
7898
8191
  sex,
7899
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
7900
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5973`,
7901
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
8192
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
8193
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5973`,
8194
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
7902
8195
  );
7903
8196
  }
7904
8197
  parent() {
7905
8198
  return lineal2(
7906
8199
  Math.abs(this.pathN?.level ?? 0),
7907
- sexOf3(this.personN),
8200
+ sexOf6(this.personN),
7908
8201
  "asc"
7909
8202
  );
7910
8203
  }
7911
8204
  child() {
7912
8205
  return lineal2(
7913
8206
  Math.abs(this.pathN?.level ?? 0),
7914
- sexOf3(this.personN),
8207
+ sexOf6(this.personN),
7915
8208
  "desc"
7916
8209
  );
7917
8210
  }
7918
8211
  sibling() {
7919
- return pick2(sexOf3(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
8212
+ return pick5(sexOf6(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
7920
8213
  }
7921
8214
  halfBlood(relation) {
7922
8215
  if (!relation || !this.isHalfBlood) {
@@ -7925,14 +8218,14 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7925
8218
  return `\u5F02\u7236\u6BCD\u7684${relation}`;
7926
8219
  }
7927
8220
  spouse() {
7928
- return pick2(sexOf3(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
8221
+ return pick5(sexOf6(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7929
8222
  }
7930
8223
  ofSpouse(relation) {
7931
8224
  if (!relation) {
7932
8225
  return "";
7933
8226
  }
7934
- const spouseType = pick2(
7935
- sexOf3(this.path?.[1].indi),
8227
+ const spouseType = pick5(
8228
+ sexOf6(this.path?.[1].indi),
7936
8229
  "\u4E08\u592B",
7937
8230
  "\u59BB\u5B50",
7938
8231
  "\u914D\u5076"
@@ -7944,12 +8237,12 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7944
8237
  return "";
7945
8238
  }
7946
8239
  const spouse = this.path?.[this.path.length - 1].indi;
7947
- const spouseType = pick2(sexOf3(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
8240
+ const spouseType = pick5(sexOf6(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7948
8241
  return `${relation}\u7684${spouseType}`;
7949
8242
  }
7950
8243
  of(relation) {
7951
8244
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7952
- nameOrder: "last-first"
8245
+ nameOrder: this.nameOrder
7953
8246
  });
7954
8247
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7955
8248
  if (this.displayName === "none") {
@@ -7980,27 +8273,68 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7980
8273
  if (!relation || !this.pathN?.relation) {
7981
8274
  return relation ?? "";
7982
8275
  }
7983
- return `${this.pathN.relation}${relation}`;
8276
+ if (this.pathN.relation === "step") {
8277
+ if (relation === "\u7236\u4EB2") {
8278
+ return "\u7EE7\u7236";
8279
+ }
8280
+ if (relation === "\u6BCD\u4EB2") {
8281
+ return "\u7EE7\u6BCD";
8282
+ }
8283
+ if (relation === "\u513F\u5B50") {
8284
+ return "\u7EE7\u5B50";
8285
+ }
8286
+ if (relation === "\u5973\u513F") {
8287
+ return "\u7EE7\u5973";
8288
+ }
8289
+ return `\u7EE7${relation}`;
8290
+ }
8291
+ if (this.pathN.relation === "adopted") {
8292
+ if (relation === "\u7236\u4EB2") {
8293
+ return "\u517B\u7236";
8294
+ }
8295
+ if (relation === "\u6BCD\u4EB2") {
8296
+ return "\u517B\u6BCD";
8297
+ }
8298
+ if (relation === "\u513F\u5B50") {
8299
+ return "\u517B\u5B50";
8300
+ }
8301
+ if (relation === "\u5973\u513F") {
8302
+ return "\u517B\u5973";
8303
+ }
8304
+ return `\u517B${relation}`;
8305
+ }
8306
+ if (this.pathN.relation === "foster") {
8307
+ return `\u5BC4\u517B${relation}`;
8308
+ }
8309
+ return relation;
7984
8310
  }
7985
8311
  };
7986
8312
 
7987
8313
  // src/kinship-translator/kinship-translator.ts
8314
+ var nameOrderForLang = (lang) => lang === "hu" || lang === "ja" || lang === "zh" ? "last-first" : "first-last";
7988
8315
  var KinshipTranslator = class {
7989
- constructor(person1, person2, lang = "en", entirePath, displayName = "givenname") {
8316
+ constructor(person1, person2, lang = "en", entirePath, displayName = "givenname", nameOrder) {
7990
8317
  this.displayName = displayName;
7991
8318
  this.lang = lang;
7992
8319
  this.entirePath = entirePath;
7993
8320
  this.person1 = person1;
7994
8321
  this.person2 = typeof person2 === "string" ? this.person1.getGedcom()?.indi(person2) : person2;
7995
8322
  this.path = this.person1.path(this.person2);
8323
+ const order = nameOrder ?? nameOrderForLang(lang);
8324
+ this.nameOrder = order;
7996
8325
  if (translators_exports[lang]) {
7997
8326
  this.translator = new translators_exports[lang](
7998
8327
  this.path ?? [],
7999
- displayName
8328
+ displayName,
8329
+ order
8000
8330
  );
8001
8331
  }
8002
8332
  if (!this.translator) {
8003
- this.translator = new KinshipTranslatorEn(this.path ?? [], displayName);
8333
+ this.translator = new KinshipTranslatorEn(
8334
+ this.path ?? [],
8335
+ displayName,
8336
+ order
8337
+ );
8004
8338
  }
8005
8339
  }
8006
8340
  get path0() {
@@ -8045,14 +8379,16 @@ var KinshipTranslator = class {
8045
8379
  showMainPerson,
8046
8380
  this.lang,
8047
8381
  false,
8048
- this.displayName
8382
+ this.displayName,
8383
+ this.nameOrder
8049
8384
  ),
8050
8385
  relative: this.path?.[index - 1]?.indi.kinship(
8051
8386
  path2.indi.id,
8052
8387
  showMainPerson,
8053
8388
  this.lang,
8054
8389
  false,
8055
- this.displayName
8390
+ this.displayName,
8391
+ this.nameOrder
8056
8392
  )
8057
8393
  }));
8058
8394
  return path;
@@ -9572,7 +9908,7 @@ var collectExtensionTagsFrom = (node, into = /* @__PURE__ */ new Set()) => {
9572
9908
  // package.json
9573
9909
  var package_default = {
9574
9910
  name: "@treeviz/gedcom-parser",
9575
- version: "2.1.11"};
9911
+ version: "2.1.15"};
9576
9912
 
9577
9913
  // src/utils/get-product-details.ts
9578
9914
  var isDevelopment = () => {
@@ -10976,7 +11312,7 @@ var create = (gedcom, type, id, nodes) => {
10976
11312
  prevNode = createObje(gedcom, void 0, mainNode, curNode);
10977
11313
  } else if (type === "DATE") {
10978
11314
  prevNode = createCommonDate(gedcom, void 0, mainNode, curNode);
10979
- } else if (type === "NOTE" || type === "SNOTE") {
11315
+ } else if (type === "NOTE" || type === "SNOTE" || type === "_TREEVIZ_LIFE_STORY" || type === "_TREEVIZ_FAMILY_STORY") {
10980
11316
  prevNode = createCommonNote(gedcom, void 0, mainNode, curNode);
10981
11317
  } else if (type === "NAME" && mainNode instanceof Indi) {
10982
11318
  prevNode = createCommonName(gedcom, void 0, mainNode, curNode);