@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/cli/index.js CHANGED
@@ -4627,14 +4627,15 @@ var Indi = class extends Common {
4627
4627
  }
4628
4628
  return foundPath;
4629
4629
  }
4630
- kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname") {
4630
+ kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname", nameOrder) {
4631
4631
  const KinshipTranslatorClass2 = getKinshipTranslatorClass();
4632
4632
  const translator = new KinshipTranslatorClass2(
4633
4633
  this,
4634
4634
  other,
4635
4635
  lang,
4636
4636
  entirePath,
4637
- showMainPerson ? displayName : void 0
4637
+ showMainPerson ? displayName : void 0,
4638
+ nameOrder
4638
4639
  );
4639
4640
  return translator.translate(!!showMainPerson);
4640
4641
  }
@@ -5558,11 +5559,12 @@ var hungarianOrdinalize = (n) => {
5558
5559
 
5559
5560
  // src/kinship-translator/kinship-translator.basic.ts
5560
5561
  var KinshipTranslatorBasic = class {
5561
- constructor(path, displayName = "givenname") {
5562
+ constructor(path, displayName = "givenname", nameOrder = "first-last") {
5562
5563
  this.isOfSpouse = false;
5563
5564
  this.isSpouseOf = false;
5564
5565
  this._path = path;
5565
5566
  this.displayName = displayName;
5567
+ this.nameOrder = nameOrder;
5566
5568
  }
5567
5569
  get path() {
5568
5570
  return this._path;
@@ -5841,7 +5843,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
5841
5843
  }
5842
5844
  return `${hungarianOrdinalize(
5843
5845
  degree
5844
- )}unokatestv\xE9r ${level}x elt\xE1vol\xEDtva`;
5846
+ )}unokatestv\xE9r ${Math.abs(level)}x elt\xE1vol\xEDtva`;
5845
5847
  }
5846
5848
  auncle() {
5847
5849
  const level = this.pathN?.level ?? 0;
@@ -5885,14 +5887,25 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
5885
5887
  return `${ordinalized ? `${ordinalized}unoka` : ""}testv\xE9r ${origPrefix.replace(/nagy$/, "")}unok\xE1ja`;
5886
5888
  }
5887
5889
  parent() {
5890
+ const level = Math.abs(this.pathN?.level ?? 0);
5891
+ if (level <= 1) {
5892
+ if (this.personN?.isMale()) {
5893
+ return "apa";
5894
+ }
5895
+ if (this.personN?.isFemale()) {
5896
+ return "anya";
5897
+ }
5898
+ return "sz\xFCl\u0151";
5899
+ }
5888
5900
  const prefix = this.directPrefix();
5901
+ const gen = prefix === "nagy" ? "" : prefix;
5889
5902
  if (this.personN?.isMale()) {
5890
- return `${prefix}apa`;
5903
+ return `${gen}nagyapa`;
5891
5904
  }
5892
5905
  if (this.personN?.isFemale()) {
5893
- return `${prefix}anya`;
5906
+ return `${gen}nagyanya`;
5894
5907
  }
5895
- return `${prefix}sz\xFCl\u0151`;
5908
+ return `${gen}nagysz\xFCl\u0151`;
5896
5909
  }
5897
5910
  child() {
5898
5911
  const level = Math.abs(this.pathN?.level ?? 0);
@@ -5974,7 +5987,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
5974
5987
  }
5975
5988
  of(relation) {
5976
5989
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
5977
- nameOrder: "last-first"
5990
+ nameOrder: this.nameOrder
5978
5991
  });
5979
5992
  let name = formattedName.inOrder.filter(Boolean).join(" ");
5980
5993
  if (this.displayName === "none") {
@@ -6086,27 +6099,30 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6086
6099
  if (!degree) {
6087
6100
  return level < 0 ? this.nibling() : this.auncle();
6088
6101
  }
6089
- return `${ordinalize(degree)} cousin ${level}x removed`;
6102
+ return `${ordinalize(degree)} cousin ${Math.abs(level)}x removed`;
6090
6103
  }
6091
6104
  auncle() {
6092
- const prefix = this.directPrefix();
6105
+ const level = Math.abs(this.pathN?.level ?? 0);
6106
+ const greats = level <= 1 ? "" : "great-".repeat(level - 1);
6093
6107
  if (this.personN?.isMale()) {
6094
- return `${prefix}uncle`;
6108
+ return `${greats}uncle`;
6095
6109
  }
6096
6110
  if (this.personN?.isFemale()) {
6097
- return `${prefix}aunt`;
6111
+ return `${greats}aunt`;
6098
6112
  }
6099
- return `${prefix}auncle`;
6113
+ return greats ? `${greats}uncle/${greats}aunt` : "uncle/aunt";
6100
6114
  }
6101
6115
  nibling() {
6102
- const prefix = this.directPrefix();
6116
+ const level = Math.abs(this.pathN?.level ?? 0);
6117
+ const greats = level <= 2 ? "" : "great-".repeat(level - 2);
6118
+ const grand = level <= 1 ? "" : "grand";
6103
6119
  if (this.personN?.isMale()) {
6104
- return `${prefix}nephew`;
6120
+ return `${greats}${grand}nephew`;
6105
6121
  }
6106
6122
  if (this.personN?.isFemale()) {
6107
- return `${prefix}niece`;
6123
+ return `${greats}${grand}niece`;
6108
6124
  }
6109
- return `${prefix}nibling`;
6125
+ return greats || grand ? `${greats}${grand}nephew/${greats}${grand}niece` : "nephew/niece";
6110
6126
  }
6111
6127
  parent() {
6112
6128
  const prefix = this.directPrefix();
@@ -6185,7 +6201,7 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6185
6201
  }
6186
6202
  of(relation) {
6187
6203
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6188
- nameOrder: "first-last"
6204
+ nameOrder: this.nameOrder
6189
6205
  });
6190
6206
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6191
6207
  if (this.displayName === "none") {
@@ -6234,45 +6250,64 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6234
6250
  };
6235
6251
 
6236
6252
  // src/kinship-translator/patterns.de.ts
6253
+ var parentRelationsDe = {
6254
+ step: "Stief",
6255
+ foster: "Pflege",
6256
+ adopted: "Adoptiv"
6257
+ };
6237
6258
  var InLawsDe = {
6238
- "Ehepartner von (kind|tochter|sohn)": "Schwiegerkind",
6239
- "Ehefrau von (kind|tochter|sohn)": "Schwiegertochter",
6240
- "Ehemann von (kind|tochter|sohn)": "Schwiegersohn",
6241
- "mutter des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegermutter",
6242
- "vater des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegervater",
6243
- "elternteil des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegerelternteil",
6244
- "Ehefrau von (Halb)?(geschwister|schwester|bruder)": "Schw\xE4gerin",
6245
- "Ehemann von (Halb)?(geschwister|schwester|bruder)": "Schwager",
6246
- "Ehepartner von (Halb)?(geschwister|schwester|bruder)": "Schwager/Schw\xE4gerin",
6247
- "(Halb)?schwester des (Ehepartner|Ehefrau|Ehemann)s": "Schw\xE4gerin",
6248
- "(Halb)?bruder des (Ehepartner|Ehefrau|Ehemann)s": "Schwager",
6249
- "(Halb)?geschwister des (Ehepartner|Ehefrau|Ehemann)s": "Schwager/Schw\xE4gerin"
6259
+ "Ehepartner von (Kind|Tochter|Sohn)": "Schwiegerkind",
6260
+ "Ehefrau von (Kind|Tochter|Sohn)": "Schwiegertochter",
6261
+ "Ehemann von (Kind|Tochter|Sohn)": "Schwiegersohn",
6262
+ "Mutter (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegermutter",
6263
+ "Vater (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegervater",
6264
+ "Elternteil (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegerelternteil",
6265
+ "Ehefrau von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schw\xE4gerin",
6266
+ "Ehemann von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager",
6267
+ "Ehepartner von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager/Schw\xE4gerin",
6268
+ "(Halb)?-?(Schwester|schwester) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schw\xE4gerin",
6269
+ "(Halb)?-?(Bruder|bruder) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager",
6270
+ "(Halb)?-?(Geschwister|geschwister) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager/Schw\xE4gerin"
6250
6271
  };
6251
6272
 
6252
6273
  // src/kinship-translator/kinship-translator.de.ts
6253
- var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6254
- directPrefix() {
6255
- const level = Math.abs(this.pathN?.level ?? 0);
6256
- if (level <= 1) {
6257
- return "";
6258
- }
6259
- if (level === 2) {
6260
- return "Gro\xDF";
6261
- }
6262
- if (level === 3) {
6263
- return "Urgro\xDF";
6264
- }
6265
- return `Ur${level - 2}-gro\xDF`;
6274
+ var sexOf = (person) => {
6275
+ if (person?.isMale?.()) {
6276
+ return "m";
6277
+ }
6278
+ if (person?.isFemale?.()) {
6279
+ return "f";
6266
6280
  }
6281
+ return "n";
6282
+ };
6283
+ var pick = (sex, male, female, neutral) => {
6284
+ if (sex === "m") {
6285
+ return male;
6286
+ }
6287
+ if (sex === "f") {
6288
+ return female;
6289
+ }
6290
+ return neutral;
6291
+ };
6292
+ var ur = (count) => count > 0 ? "Ur".repeat(count) : "";
6293
+ var genitiveArticle = (spouseType) => {
6294
+ if (spouseType === "Ehefrau") {
6295
+ return `der ${spouseType}`;
6296
+ }
6297
+ return `des ${spouseType}s`;
6298
+ };
6299
+ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6267
6300
  indirect() {
6268
6301
  let degree = Math.abs(this.pathN?.degree ?? 0);
6269
6302
  if (degree > 0) {
6270
6303
  degree = degree - 1;
6271
6304
  }
6272
- if (degree === 1) {
6273
- return `Cousin`;
6305
+ const sex = sexOf(this.personN);
6306
+ const cousin = pick(sex, "Cousin", "Cousine", "Cousin/Cousine");
6307
+ if (degree <= 1) {
6308
+ return cousin;
6274
6309
  }
6275
- return `Cousin ${degree}. Grades`;
6310
+ return `${cousin} ${degree}. Grades`;
6276
6311
  }
6277
6312
  removal() {
6278
6313
  const level = this.pathN?.level ?? 0;
@@ -6283,106 +6318,106 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6283
6318
  if (!degree) {
6284
6319
  return level < 0 ? this.nibling() : this.auncle();
6285
6320
  }
6286
- return `Cousin ${degree}. Grades ${Math.abs(level)}\xD7 entfernt`;
6321
+ return `${this.indirect()} ${Math.abs(level)}\xD7 entfernt`;
6287
6322
  }
6288
6323
  auncle() {
6289
- const prefix = this.directPrefix();
6290
- if (this.personN?.isMale()) {
6291
- return `${prefix}onkel`;
6292
- }
6293
- if (this.personN?.isFemale()) {
6294
- return `${prefix}tante`;
6324
+ const level = Math.abs(this.pathN?.level ?? 0);
6325
+ const sex = sexOf(this.personN);
6326
+ if (level <= 1) {
6327
+ return pick(sex, "Onkel", "Tante", "Onkel/Tante");
6295
6328
  }
6296
- return `${prefix}onkel/tante`;
6329
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6330
+ return pick(
6331
+ sex,
6332
+ `${prefix}onkel`,
6333
+ `${prefix}tante`,
6334
+ `${prefix}onkel/tante`
6335
+ );
6297
6336
  }
6298
6337
  nibling() {
6299
- const prefix = this.directPrefix();
6300
- if (this.personN?.isMale()) {
6301
- return `${prefix}neffe`;
6302
- }
6303
- if (this.personN?.isFemale()) {
6304
- return `${prefix}nichte`;
6338
+ const level = Math.abs(this.pathN?.level ?? 0);
6339
+ const sex = sexOf(this.personN);
6340
+ if (level <= 1) {
6341
+ return pick(sex, "Neffe", "Nichte", "Neffe/Nichte");
6305
6342
  }
6306
- return `${prefix}neffe/nichte`;
6343
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6344
+ return pick(
6345
+ sex,
6346
+ `${prefix}neffe`,
6347
+ `${prefix}nichte`,
6348
+ `${prefix}neffe/nichte`
6349
+ );
6307
6350
  }
6308
6351
  parent() {
6309
- const prefix = this.directPrefix();
6310
- if (this.personN?.isMale()) {
6311
- return `${prefix}vater`;
6312
- }
6313
- if (this.personN?.isFemale()) {
6314
- return `${prefix}mutter`;
6352
+ const level = Math.abs(this.pathN?.level ?? 0);
6353
+ const sex = sexOf(this.personN);
6354
+ if (level <= 1) {
6355
+ return pick(sex, "Vater", "Mutter", "Elternteil");
6315
6356
  }
6316
- return `${prefix}elternteil`;
6357
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6358
+ return pick(
6359
+ sex,
6360
+ `${prefix}vater`,
6361
+ `${prefix}mutter`,
6362
+ `${prefix}elternteil`
6363
+ );
6317
6364
  }
6318
6365
  child() {
6319
- const prefix = this.directPrefix();
6320
- if (this.personN?.isMale()) {
6321
- return `${prefix}sohn`;
6322
- }
6323
- if (this.personN?.isFemale()) {
6324
- return `${prefix}tochter`;
6366
+ const level = Math.abs(this.pathN?.level ?? 0);
6367
+ const sex = sexOf(this.personN);
6368
+ if (level <= 1) {
6369
+ return pick(sex, "Sohn", "Tochter", "Kind");
6325
6370
  }
6326
- return `${prefix}kind`;
6371
+ const prefix = ur(level - 2);
6372
+ return pick(
6373
+ sex,
6374
+ `${prefix}Enkel`,
6375
+ `${prefix}Enkelin`,
6376
+ `${prefix}Enkelkind`
6377
+ );
6327
6378
  }
6328
6379
  sibling() {
6329
- if (this.personN?.isMale()) {
6330
- return "bruder";
6331
- }
6332
- if (this.personN?.isFemale()) {
6333
- return "schwester";
6334
- }
6335
- return "geschwister";
6380
+ return pick(sexOf(this.personN), "Bruder", "Schwester", "Geschwister");
6336
6381
  }
6337
6382
  halfBlood(relation) {
6338
6383
  if (!relation || !this.isHalfBlood) {
6339
6384
  return relation ?? "";
6340
6385
  }
6341
- if (/^[A-ZÄÖÜ]/.test(relation) || /[-\s]/.test(relation)) {
6386
+ if (/[\s-]/.test(relation) || /^(Groß|Ur)/.test(relation)) {
6342
6387
  return `Halb-${relation}`;
6343
6388
  }
6344
- return `Halb${relation}`;
6389
+ return `Halb${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
6345
6390
  }
6346
6391
  spouse() {
6347
- if (this.personN?.isMale()) {
6348
- return "Ehemann";
6349
- }
6350
- if (this.personN?.isFemale()) {
6351
- return "Ehefrau";
6352
- }
6353
- return "Ehepartner";
6392
+ return pick(sexOf(this.personN), "Ehemann", "Ehefrau", "Ehepartner");
6354
6393
  }
6355
6394
  ofSpouse(relation) {
6356
6395
  if (!relation) {
6357
6396
  return "";
6358
6397
  }
6359
- const spouse = this.path?.[1].indi;
6360
- let spouseType = "Ehepartner";
6361
- if (spouse?.isMale()) {
6362
- spouseType = "Ehemann";
6363
- }
6364
- if (spouse?.isFemale()) {
6365
- spouseType = "Ehefrau";
6366
- }
6367
- return `${relation} des ${spouseType}s`;
6398
+ const spouseType = pick(
6399
+ sexOf(this.path?.[1].indi),
6400
+ "Ehemann",
6401
+ "Ehefrau",
6402
+ "Ehepartner"
6403
+ );
6404
+ return `${relation} ${genitiveArticle(spouseType)}`;
6368
6405
  }
6369
6406
  spouseOf(relation) {
6370
6407
  if (!relation) {
6371
6408
  return "";
6372
6409
  }
6373
- const spouse = this.path?.[this.path.length - 1].indi;
6374
- let spouseType = "Ehepartner";
6375
- if (spouse?.isMale()) {
6376
- spouseType = "Ehemann";
6377
- }
6378
- if (spouse?.isFemale()) {
6379
- spouseType = "Ehefrau";
6380
- }
6410
+ const spouseType = pick(
6411
+ sexOf(this.path?.[this.path.length - 1].indi),
6412
+ "Ehemann",
6413
+ "Ehefrau",
6414
+ "Ehepartner"
6415
+ );
6381
6416
  return `${spouseType} von ${relation}`;
6382
6417
  }
6383
6418
  of(relation) {
6384
6419
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6385
- nameOrder: "first-last"
6420
+ nameOrder: this.nameOrder
6386
6421
  });
6387
6422
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6388
6423
  if (this.displayName === "none") {
@@ -6395,8 +6430,8 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6395
6430
  if (!name || !relation) {
6396
6431
  return relation ?? "";
6397
6432
  }
6398
- if (relation.includes(" des ") || relation.includes(" von ")) {
6399
- return relation.replace(/ (des|von) /, ` $1 ${name}s `);
6433
+ if (relation.includes(" des ") || relation.includes(" der ") || relation.includes(" von ")) {
6434
+ return relation.replace(/ (des|der|von) /, ` $1 ${name}s `);
6400
6435
  }
6401
6436
  return `${name}s ${relation}`;
6402
6437
  }
@@ -6426,50 +6461,82 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6426
6461
  if (!relation || !this.pathN?.relation) {
6427
6462
  return relation ?? "";
6428
6463
  }
6429
- return `${this.pathN.relation} ${relation}`;
6464
+ const prefix = parentRelationsDe[this.pathN.relation];
6465
+ if (!prefix) {
6466
+ return relation;
6467
+ }
6468
+ if (prefix.endsWith("-") || prefix.endsWith(" ")) {
6469
+ return `${prefix}${relation}`;
6470
+ }
6471
+ return `${prefix}${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
6430
6472
  }
6431
6473
  };
6432
6474
 
6433
6475
  // src/kinship-translator/patterns.fr.ts
6476
+ var parentRelationsFr = {
6477
+ step: "step",
6478
+ foster: "foster",
6479
+ adopted: "adopted"
6480
+ };
6434
6481
  var InLawsFr = {
6435
6482
  "conjoint de (enfant|fille|fils)": "beau-fils/belle-fille",
6436
6483
  "\xE9pouse de (enfant|fille|fils)": "belle-fille",
6437
6484
  "mari de (enfant|fille|fils)": "gendre",
6438
- "m\xE8re du (conjoint|\xE9pouse|mari)": "belle-m\xE8re",
6439
- "p\xE8re du (conjoint|\xE9pouse|mari)": "beau-p\xE8re",
6440
- "parent du (conjoint|\xE9pouse|mari)": "beau-parent",
6485
+ "m\xE8re (du mari|du conjoint|de l'\xE9pouse)": "belle-m\xE8re",
6486
+ "p\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-p\xE8re",
6487
+ "parent (du mari|du conjoint|de l'\xE9pouse)": "beau-parent",
6441
6488
  "\xE9pouse de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "belle-s\u0153ur",
6442
6489
  "mari de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re",
6443
6490
  "conjoint de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re/belle-s\u0153ur",
6444
- "(demi-)?s\u0153ur du (conjoint|\xE9pouse|mari)": "belle-s\u0153ur",
6445
- "(demi-)?fr\xE8re du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re",
6446
- "(demi-)?fr\xE8re/s\u0153ur du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re/belle-s\u0153ur"
6491
+ "(demi-)?s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "belle-s\u0153ur",
6492
+ "(demi-)?fr\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re",
6493
+ "(demi-)?fr\xE8re/s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re/belle-s\u0153ur"
6447
6494
  };
6448
6495
 
6449
6496
  // src/kinship-translator/kinship-translator.fr.ts
6450
- var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6451
- directPrefix() {
6452
- const level = Math.abs(this.pathN?.level ?? 0);
6453
- if (level <= 1) {
6454
- return "";
6455
- }
6456
- if (level === 2) {
6457
- return "grand-";
6458
- }
6459
- if (level === 3) {
6460
- return "arri\xE8re-grand-";
6461
- }
6462
- return `arri\xE8re${level - 2}-grand-`;
6497
+ var sexOf2 = (person) => {
6498
+ if (person?.isMale?.()) {
6499
+ return "m";
6500
+ }
6501
+ if (person?.isFemale?.()) {
6502
+ return "f";
6463
6503
  }
6504
+ return "n";
6505
+ };
6506
+ var pick2 = (sex, male, female, neutral) => {
6507
+ if (sex === "m") {
6508
+ return male;
6509
+ }
6510
+ if (sex === "f") {
6511
+ return female;
6512
+ }
6513
+ return neutral;
6514
+ };
6515
+ var arriere = (count) => count > 0 ? "arri\xE8re-".repeat(count) : "";
6516
+ var frenchOrdinal = (n) => n === 1 ? "1er" : `${n}e`;
6517
+ var isFeminineRelation = (relation) => /mère|fille|sœur|tante|nièce|cousine|épouse/.test(relation);
6518
+ var ofSpousePrep = (spouseType) => {
6519
+ if (spouseType === "\xE9pouse") {
6520
+ return "de l'";
6521
+ }
6522
+ return "du ";
6523
+ };
6524
+ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6464
6525
  indirect() {
6465
6526
  let degree = Math.abs(this.pathN?.degree ?? 0);
6466
6527
  if (degree > 0) {
6467
6528
  degree = degree - 1;
6468
6529
  }
6469
- if (degree === 1) {
6470
- return `cousin`;
6530
+ const cousin = pick2(
6531
+ sexOf2(this.personN),
6532
+ "cousin",
6533
+ "cousine",
6534
+ "cousin/cousine"
6535
+ );
6536
+ if (degree <= 1) {
6537
+ return cousin;
6471
6538
  }
6472
- return `cousin au ${ordinalize(degree)} degr\xE9`;
6539
+ return `${cousin} au ${frenchOrdinal(degree)} degr\xE9`;
6473
6540
  }
6474
6541
  removal() {
6475
6542
  const level = this.pathN?.level ?? 0;
@@ -6480,56 +6547,57 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6480
6547
  if (!degree) {
6481
6548
  return level < 0 ? this.nibling() : this.auncle();
6482
6549
  }
6483
- return `cousin au ${ordinalize(degree)} degr\xE9 ${Math.abs(level)}\xD7 \xE9loign\xE9`;
6550
+ return `${this.indirect()} ${Math.abs(level)}\xD7 \xE9loign\xE9`;
6484
6551
  }
6485
6552
  auncle() {
6486
- const prefix = this.directPrefix();
6487
- if (this.personN?.isMale()) {
6488
- return `${prefix}oncle`;
6489
- }
6490
- if (this.personN?.isFemale()) {
6491
- return `${prefix}tante`;
6553
+ const level = Math.abs(this.pathN?.level ?? 0);
6554
+ const sex = sexOf2(this.personN);
6555
+ const base = pick2(sex, "oncle", "tante", "oncle/tante");
6556
+ if (level <= 1) {
6557
+ return base;
6492
6558
  }
6493
- return `${prefix}oncle/tante`;
6559
+ const grands = pick2(
6560
+ sex,
6561
+ "grand-oncle",
6562
+ "grand-tante",
6563
+ "grand-oncle/tante"
6564
+ );
6565
+ return `${arriere(level - 2)}${grands}`;
6494
6566
  }
6495
6567
  nibling() {
6496
- const prefix = this.directPrefix();
6497
- if (this.personN?.isMale()) {
6498
- return `${prefix}neveu`;
6499
- }
6500
- if (this.personN?.isFemale()) {
6501
- return `${prefix}ni\xE8ce`;
6568
+ const level = Math.abs(this.pathN?.level ?? 0);
6569
+ const sex = sexOf2(this.personN);
6570
+ if (level <= 1) {
6571
+ return pick2(sex, "neveu", "ni\xE8ce", "neveu/ni\xE8ce");
6502
6572
  }
6503
- return `${prefix}neveu/ni\xE8ce`;
6573
+ const grands = pick2(
6574
+ sex,
6575
+ "grand-neveu",
6576
+ "grande-ni\xE8ce",
6577
+ "grand-neveu/grande-ni\xE8ce"
6578
+ );
6579
+ return `${arriere(level - 2)}${grands}`;
6504
6580
  }
6505
6581
  parent() {
6506
- const prefix = this.directPrefix();
6507
- if (this.personN?.isMale()) {
6508
- return `${prefix}p\xE8re`;
6509
- }
6510
- if (this.personN?.isFemale()) {
6511
- return `${prefix}m\xE8re`;
6582
+ const level = Math.abs(this.pathN?.level ?? 0);
6583
+ const sex = sexOf2(this.personN);
6584
+ if (level <= 1) {
6585
+ return pick2(sex, "p\xE8re", "m\xE8re", "parent");
6512
6586
  }
6513
- return `${prefix}parent`;
6587
+ const grands = pick2(sex, "grand-p\xE8re", "grand-m\xE8re", "grand-parent");
6588
+ return `${arriere(level - 2)}${grands}`;
6514
6589
  }
6515
6590
  child() {
6516
- const prefix = this.directPrefix();
6517
- if (this.personN?.isMale()) {
6518
- return `${prefix}fils`;
6519
- }
6520
- if (this.personN?.isFemale()) {
6521
- return `${prefix}fille`;
6591
+ const level = Math.abs(this.pathN?.level ?? 0);
6592
+ const sex = sexOf2(this.personN);
6593
+ if (level <= 1) {
6594
+ return pick2(sex, "fils", "fille", "enfant");
6522
6595
  }
6523
- return `${prefix}enfant`;
6596
+ const petits = pick2(sex, "petit-fils", "petite-fille", "petit-enfant");
6597
+ return `${arriere(level - 2)}${petits}`;
6524
6598
  }
6525
6599
  sibling() {
6526
- if (this.personN?.isMale()) {
6527
- return "fr\xE8re";
6528
- }
6529
- if (this.personN?.isFemale()) {
6530
- return "s\u0153ur";
6531
- }
6532
- return "fr\xE8re/s\u0153ur";
6600
+ return pick2(sexOf2(this.personN), "fr\xE8re", "s\u0153ur", "fr\xE8re/s\u0153ur");
6533
6601
  }
6534
6602
  halfBlood(relation) {
6535
6603
  if (!relation || !this.isHalfBlood) {
@@ -6538,45 +6606,35 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6538
6606
  return `demi-${relation}`;
6539
6607
  }
6540
6608
  spouse() {
6541
- if (this.personN?.isMale()) {
6542
- return "mari";
6543
- }
6544
- if (this.personN?.isFemale()) {
6545
- return "\xE9pouse";
6546
- }
6547
- return "conjoint";
6609
+ return pick2(sexOf2(this.personN), "mari", "\xE9pouse", "conjoint");
6548
6610
  }
6549
6611
  ofSpouse(relation) {
6550
6612
  if (!relation) {
6551
6613
  return "";
6552
6614
  }
6553
- const spouse = this.path?.[1].indi;
6554
- let spouseType = "conjoint";
6555
- if (spouse?.isMale()) {
6556
- spouseType = "mari";
6557
- }
6558
- if (spouse?.isFemale()) {
6559
- spouseType = "\xE9pouse";
6560
- }
6561
- return `${relation} du ${spouseType}`;
6615
+ const spouseType = pick2(
6616
+ sexOf2(this.path?.[1].indi),
6617
+ "mari",
6618
+ "\xE9pouse",
6619
+ "conjoint"
6620
+ );
6621
+ return `${relation} ${ofSpousePrep(spouseType)}${spouseType}`;
6562
6622
  }
6563
6623
  spouseOf(relation) {
6564
6624
  if (!relation) {
6565
6625
  return "";
6566
6626
  }
6567
- const spouse = this.path?.[this.path.length - 1].indi;
6568
- let spouseType = "conjoint";
6569
- if (spouse?.isMale()) {
6570
- spouseType = "mari";
6571
- }
6572
- if (spouse?.isFemale()) {
6573
- spouseType = "\xE9pouse";
6574
- }
6627
+ const spouseType = pick2(
6628
+ sexOf2(this.path?.[this.path.length - 1].indi),
6629
+ "mari",
6630
+ "\xE9pouse",
6631
+ "conjoint"
6632
+ );
6575
6633
  return `${spouseType} de ${relation}`;
6576
6634
  }
6577
6635
  of(relation) {
6578
6636
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6579
- nameOrder: "first-last"
6637
+ nameOrder: this.nameOrder
6580
6638
  });
6581
6639
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6582
6640
  if (this.displayName === "none") {
@@ -6592,6 +6650,9 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6592
6650
  if (relation.includes(" du ") || relation.includes(" de ")) {
6593
6651
  return relation.replace(/ (du|de) /, ` $1 ${name} `);
6594
6652
  }
6653
+ if (relation.includes(" de l'")) {
6654
+ return relation.replace(" de l'", ` de ${name} l'`);
6655
+ }
6595
6656
  return `${relation} de ${name}`;
6596
6657
  }
6597
6658
  inLaw(relation) {
@@ -6620,50 +6681,118 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6620
6681
  if (!relation || !this.pathN?.relation) {
6621
6682
  return relation ?? "";
6622
6683
  }
6623
- return `${this.pathN.relation} ${relation}`;
6684
+ const kind = parentRelationsFr[this.pathN.relation];
6685
+ if (!kind) {
6686
+ return relation;
6687
+ }
6688
+ if (kind === "step") {
6689
+ return `${isFeminineRelation(relation) ? "belle-" : "beau-"}${relation}`;
6690
+ }
6691
+ if (kind === "adopted") {
6692
+ return `${relation} ${isFeminineRelation(relation) ? "adoptive" : "adoptif"}`;
6693
+ }
6694
+ if (kind === "foster") {
6695
+ return `${relation} d'accueil`;
6696
+ }
6697
+ return relation;
6624
6698
  }
6625
6699
  };
6626
6700
 
6627
6701
  // src/kinship-translator/patterns.es.ts
6702
+ var parentRelationsEs = {
6703
+ step: {
6704
+ padre: "padrastro",
6705
+ madre: "madrastra",
6706
+ hijo: "hijastro",
6707
+ hija: "hijastra",
6708
+ hermano: "hermanastro",
6709
+ hermana: "hermanastra",
6710
+ abuelo: "abuelastro",
6711
+ abuela: "abuelastra"
6712
+ }
6713
+ };
6628
6714
  var InLawsEs = {
6629
6715
  "c\xF3nyuge de (hijo/hija|hija|hijo)": "yerno/nuera",
6630
6716
  "esposa de (hijo/hija|hija|hijo)": "nuera",
6631
6717
  "esposo de (hijo/hija|hija|hijo)": "yerno",
6632
- "madre del (c\xF3nyuge|esposa|esposo)": "suegra",
6633
- "padre del (c\xF3nyuge|esposa|esposo)": "suegro",
6634
- "padre/madre del (c\xF3nyuge|esposa|esposo)": "suegro/suegra",
6718
+ "madre (del c\xF3nyuge|del esposo|de la esposa)": "suegra",
6719
+ "padre (del c\xF3nyuge|del esposo|de la esposa)": "suegro",
6720
+ "padre/madre (del c\xF3nyuge|del esposo|de la esposa)": "suegro/suegra",
6635
6721
  "esposa de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
6636
6722
  "esposo de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
6637
6723
  "c\xF3nyuge de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
6638
- "(medio |media |medio/a )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
6639
- "(medio |media |medio/a )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
6640
- "(medio |media |medio/a )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
6724
+ "(medio |media |medio/a )?hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ada",
6725
+ "(medio |media |medio/a )?hermano (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado",
6726
+ "(medio |media |medio/a )?hermano/hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado/cu\xF1ada"
6641
6727
  };
6642
6728
 
6643
6729
  // src/kinship-translator/kinship-translator.es.ts
6644
- var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6645
- directPrefix() {
6646
- const level = Math.abs(this.pathN?.level ?? 0);
6647
- if (level <= 1) {
6648
- return "";
6649
- }
6650
- if (level === 2) {
6651
- return "bisabuel";
6652
- }
6653
- if (level === 3) {
6654
- return "tatarabuel";
6655
- }
6656
- return `t\xE1tara${level - 2}-abuel`;
6730
+ var sexOf3 = (person) => {
6731
+ if (person?.isMale?.()) {
6732
+ return "m";
6657
6733
  }
6734
+ if (person?.isFemale?.()) {
6735
+ return "f";
6736
+ }
6737
+ return "n";
6738
+ };
6739
+ var pick3 = (sex, male, female, neutral) => {
6740
+ if (sex === "m") {
6741
+ return male;
6742
+ }
6743
+ if (sex === "f") {
6744
+ return female;
6745
+ }
6746
+ return neutral;
6747
+ };
6748
+ var SPANISH_ORDINALS_M = [
6749
+ "",
6750
+ "",
6751
+ "segundo",
6752
+ "tercero",
6753
+ "cuarto",
6754
+ "quinto",
6755
+ "sexto",
6756
+ "s\xE9ptimo",
6757
+ "octavo",
6758
+ "noveno",
6759
+ "d\xE9cimo"
6760
+ ];
6761
+ var SPANISH_ORDINALS_F = [
6762
+ "",
6763
+ "",
6764
+ "segunda",
6765
+ "tercera",
6766
+ "cuarta",
6767
+ "quinta",
6768
+ "sexta",
6769
+ "s\xE9ptima",
6770
+ "octava",
6771
+ "novena",
6772
+ "d\xE9cima"
6773
+ ];
6774
+ var spanishOrdinal = (n, sex) => {
6775
+ const list = sex === "f" ? SPANISH_ORDINALS_F : SPANISH_ORDINALS_M;
6776
+ return list[n] ?? `${n}.\xBA`;
6777
+ };
6778
+ var ofSpousePrep2 = (spouseType) => {
6779
+ if (spouseType === "esposa") {
6780
+ return "de la ";
6781
+ }
6782
+ return "del ";
6783
+ };
6784
+ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6658
6785
  indirect() {
6659
6786
  let degree = Math.abs(this.pathN?.degree ?? 0);
6660
6787
  if (degree > 0) {
6661
6788
  degree = degree - 1;
6662
6789
  }
6663
- if (degree === 1) {
6664
- return `primo`;
6790
+ const sex = sexOf3(this.personN);
6791
+ const cousin = pick3(sex, "primo", "prima", "primo/prima");
6792
+ if (degree <= 1) {
6793
+ return cousin;
6665
6794
  }
6666
- return `primo ${ordinalize(degree)}`;
6795
+ return `${cousin} ${spanishOrdinal(degree, sex)}`;
6667
6796
  }
6668
6797
  removal() {
6669
6798
  const level = this.pathN?.level ?? 0;
@@ -6674,56 +6803,133 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6674
6803
  if (!degree) {
6675
6804
  return level < 0 ? this.nibling() : this.auncle();
6676
6805
  }
6677
- return `primo ${ordinalize(degree)} ${Math.abs(level)}\xD7 separado`;
6806
+ return `${this.indirect()} ${Math.abs(level)}\xD7 separado`;
6678
6807
  }
6679
6808
  auncle() {
6680
- const prefix = this.directPrefix();
6681
- if (this.personN?.isMale()) {
6682
- return `${prefix}t\xEDo`;
6809
+ const level = Math.abs(this.pathN?.level ?? 0);
6810
+ const sex = sexOf3(this.personN);
6811
+ if (level <= 1) {
6812
+ return pick3(sex, "t\xEDo", "t\xEDa", "t\xEDo/t\xEDa");
6683
6813
  }
6684
- if (this.personN?.isFemale()) {
6685
- return `${prefix}t\xEDa`;
6814
+ if (level === 2) {
6815
+ return pick3(sex, "t\xEDo abuelo", "t\xEDa abuela", "t\xEDo/t\xEDa abuelo");
6816
+ }
6817
+ if (level === 3) {
6818
+ return pick3(
6819
+ sex,
6820
+ "t\xEDo bisabuelo",
6821
+ "t\xEDa bisabuela",
6822
+ "t\xEDo/t\xEDa bisabuelo"
6823
+ );
6686
6824
  }
6687
- return `${prefix}t\xEDo/t\xEDa`;
6825
+ return pick3(
6826
+ sex,
6827
+ `t\xEDo abuelo (${level - 1}.\xBA)`,
6828
+ `t\xEDa abuela (${level - 1}.\xAA)`,
6829
+ `t\xEDo/t\xEDa abuelo (${level - 1}.\xBA)`
6830
+ );
6688
6831
  }
6689
6832
  nibling() {
6690
- const prefix = this.directPrefix();
6691
- if (this.personN?.isMale()) {
6692
- return `${prefix}sobrino`;
6833
+ const level = Math.abs(this.pathN?.level ?? 0);
6834
+ const sex = sexOf3(this.personN);
6835
+ if (level <= 1) {
6836
+ return pick3(sex, "sobrino", "sobrina", "sobrino/sobrina");
6693
6837
  }
6694
- if (this.personN?.isFemale()) {
6695
- return `${prefix}sobrina`;
6838
+ if (level === 2) {
6839
+ return pick3(
6840
+ sex,
6841
+ "sobrino nieto",
6842
+ "sobrina nieta",
6843
+ "sobrino/sobrina nieto"
6844
+ );
6845
+ }
6846
+ if (level === 3) {
6847
+ return pick3(
6848
+ sex,
6849
+ "sobrino bisnieto",
6850
+ "sobrina bisnieta",
6851
+ "sobrino/sobrina bisnieto"
6852
+ );
6696
6853
  }
6697
- return `${prefix}sobrino/sobrina`;
6854
+ return pick3(
6855
+ sex,
6856
+ `sobrino nieto (${level - 1}.\xBA)`,
6857
+ `sobrina nieta (${level - 1}.\xAA)`,
6858
+ `sobrino/sobrina nieto (${level - 1}.\xBA)`
6859
+ );
6698
6860
  }
6699
6861
  parent() {
6700
- const prefix = this.directPrefix();
6701
- if (this.personN?.isMale()) {
6702
- return `${prefix}padre`;
6862
+ const level = Math.abs(this.pathN?.level ?? 0);
6863
+ const sex = sexOf3(this.personN);
6864
+ if (level <= 1) {
6865
+ return pick3(sex, "padre", "madre", "padre/madre");
6703
6866
  }
6704
- if (this.personN?.isFemale()) {
6705
- return `${prefix}madre`;
6867
+ if (level === 2) {
6868
+ return pick3(sex, "abuelo", "abuela", "abuelo/abuela");
6869
+ }
6870
+ if (level === 3) {
6871
+ return pick3(sex, "bisabuelo", "bisabuela", "bisabuelo/bisabuela");
6872
+ }
6873
+ if (level === 4) {
6874
+ return pick3(
6875
+ sex,
6876
+ "tatarabuelo",
6877
+ "tatarabuela",
6878
+ "tatarabuelo/tatarabuela"
6879
+ );
6880
+ }
6881
+ if (level === 5) {
6882
+ return pick3(
6883
+ sex,
6884
+ "trastatarabuelo",
6885
+ "trastatarabuela",
6886
+ "trastatarabuelo/trastatarabuela"
6887
+ );
6706
6888
  }
6707
- return `${prefix}padre/madre`;
6889
+ return pick3(
6890
+ sex,
6891
+ `abuelo (${level}.\xBA)`,
6892
+ `abuela (${level}.\xAA)`,
6893
+ `abuelo/abuela (${level}.\xBA)`
6894
+ );
6708
6895
  }
6709
6896
  child() {
6710
- const prefix = this.directPrefix();
6711
- if (this.personN?.isMale()) {
6712
- return `${prefix}hijo`;
6897
+ const level = Math.abs(this.pathN?.level ?? 0);
6898
+ const sex = sexOf3(this.personN);
6899
+ if (level <= 1) {
6900
+ return pick3(sex, "hijo", "hija", "hijo/hija");
6713
6901
  }
6714
- if (this.personN?.isFemale()) {
6715
- return `${prefix}hija`;
6902
+ if (level === 2) {
6903
+ return pick3(sex, "nieto", "nieta", "nieto/nieta");
6716
6904
  }
6717
- return `${prefix}hijo/hija`;
6718
- }
6719
- sibling() {
6720
- if (this.personN?.isMale()) {
6721
- return "hermano";
6905
+ if (level === 3) {
6906
+ return pick3(sex, "bisnieto", "bisnieta", "bisnieto/bisnieta");
6722
6907
  }
6723
- if (this.personN?.isFemale()) {
6724
- return "hermana";
6908
+ if (level === 4) {
6909
+ return pick3(
6910
+ sex,
6911
+ "tataranieto",
6912
+ "tataranieta",
6913
+ "tataranieto/tataranieta"
6914
+ );
6915
+ }
6916
+ if (level === 5) {
6917
+ return pick3(
6918
+ sex,
6919
+ "trastataranieto",
6920
+ "trastataranieta",
6921
+ "trastataranieto/trastataranieta"
6922
+ );
6725
6923
  }
6726
- return "hermano/hermana";
6924
+ return pick3(
6925
+ sex,
6926
+ `nieto (${level}.\xBA)`,
6927
+ `nieta (${level}.\xAA)`,
6928
+ `nieto/nieta (${level}.\xBA)`
6929
+ );
6930
+ }
6931
+ sibling() {
6932
+ return pick3(sexOf3(this.personN), "hermano", "hermana", "hermano/hermana");
6727
6933
  }
6728
6934
  halfBlood(relation) {
6729
6935
  if (!relation || !this.isHalfBlood) {
@@ -6738,45 +6944,35 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6738
6944
  return `medio/a ${relation}`;
6739
6945
  }
6740
6946
  spouse() {
6741
- if (this.personN?.isMale()) {
6742
- return "esposo";
6743
- }
6744
- if (this.personN?.isFemale()) {
6745
- return "esposa";
6746
- }
6747
- return "c\xF3nyuge";
6947
+ return pick3(sexOf3(this.personN), "esposo", "esposa", "c\xF3nyuge");
6748
6948
  }
6749
6949
  ofSpouse(relation) {
6750
6950
  if (!relation) {
6751
6951
  return "";
6752
6952
  }
6753
- const spouse = this.path?.[1].indi;
6754
- let spouseType = "c\xF3nyuge";
6755
- if (spouse?.isMale()) {
6756
- spouseType = "esposo";
6757
- }
6758
- if (spouse?.isFemale()) {
6759
- spouseType = "esposa";
6760
- }
6761
- return `${relation} del ${spouseType}`;
6953
+ const spouseType = pick3(
6954
+ sexOf3(this.path?.[1].indi),
6955
+ "esposo",
6956
+ "esposa",
6957
+ "c\xF3nyuge"
6958
+ );
6959
+ return `${relation} ${ofSpousePrep2(spouseType)}${spouseType}`;
6762
6960
  }
6763
6961
  spouseOf(relation) {
6764
6962
  if (!relation) {
6765
6963
  return "";
6766
6964
  }
6767
- const spouse = this.path?.[this.path.length - 1].indi;
6768
- let spouseType = "c\xF3nyuge";
6769
- if (spouse?.isMale()) {
6770
- spouseType = "esposo";
6771
- }
6772
- if (spouse?.isFemale()) {
6773
- spouseType = "esposa";
6774
- }
6965
+ const spouseType = pick3(
6966
+ sexOf3(this.path?.[this.path.length - 1].indi),
6967
+ "esposo",
6968
+ "esposa",
6969
+ "c\xF3nyuge"
6970
+ );
6775
6971
  return `${spouseType} de ${relation}`;
6776
6972
  }
6777
6973
  of(relation) {
6778
6974
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6779
- nameOrder: "first-last"
6975
+ nameOrder: this.nameOrder
6780
6976
  });
6781
6977
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6782
6978
  if (this.displayName === "none") {
@@ -6789,8 +6985,8 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6789
6985
  if (!name || !relation) {
6790
6986
  return relation ?? "";
6791
6987
  }
6792
- if (relation.includes(" del ") || relation.includes(" de ")) {
6793
- return relation.replace(/ (del|de) /, ` $1 ${name} `);
6988
+ if (relation.includes(" del ") || relation.includes(" de la ") || relation.includes(" de ")) {
6989
+ return relation.replace(/ (del|de la|de) /, ` $1 ${name} `);
6794
6990
  }
6795
6991
  return `${relation} de ${name}`;
6796
6992
  }
@@ -6820,7 +7016,20 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6820
7016
  if (!relation || !this.pathN?.relation) {
6821
7017
  return relation ?? "";
6822
7018
  }
6823
- return `${this.pathN.relation} ${relation}`;
7019
+ const mapped = parentRelationsEs[this.pathN.relation]?.[relation];
7020
+ if (mapped) {
7021
+ return mapped;
7022
+ }
7023
+ if (this.pathN.relation === "step") {
7024
+ return `${relation} pol\xEDtico`;
7025
+ }
7026
+ if (this.pathN.relation === "adopted") {
7027
+ return `${relation} adoptivo`;
7028
+ }
7029
+ if (this.pathN.relation === "foster") {
7030
+ return `${relation} de acogida`;
7031
+ }
7032
+ return relation;
6824
7033
  }
6825
7034
  };
6826
7035
 
@@ -6829,15 +7038,35 @@ var InLawsRu = {
6829
7038
  "\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",
6830
7039
  "\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",
6831
7040
  "\u043C\u0443\u0436 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C",
6832
- "\u043C\u0430\u0442\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0451\u0449\u0430",
6833
- "\u043E\u0442\u0435\u0446 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C",
6834
- "\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",
7041
+ "\u043C\u0430\u0442\u044C \u0436\u0435\u043D\u044B": "\u0442\u0451\u0449\u0430",
7042
+ "\u043C\u0430\u0442\u044C \u043C\u0443\u0436\u0430": "\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7043
+ "\u043C\u0430\u0442\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0451\u0449\u0430/\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7044
+ "\u043E\u0442\u0435\u0446 \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C",
7045
+ "\u043E\u0442\u0435\u0446 \u043C\u0443\u0436\u0430": "\u0441\u0432\u0451\u043A\u043E\u0440",
7046
+ "\u043E\u0442\u0435\u0446 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0441\u0432\u0451\u043A\u043E\u0440",
7047
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
7048
+ "\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",
7049
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
6835
7050
  "\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",
6836
7051
  "\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",
6837
7052
  "\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",
6838
- "(\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",
6839
- "(\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",
6840
- "(\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"
7053
+ "(\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",
7054
+ "(\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",
7055
+ "(\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",
7056
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u0436\u0435\u043D\u044B": "\u0448\u0443\u0440\u0438\u043D",
7057
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u043C\u0443\u0436\u0430": "\u0434\u0435\u0432\u0435\u0440\u044C",
7058
+ "(\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",
7059
+ "(\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",
7060
+ "(\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",
7061
+ "(\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"
7062
+ };
7063
+ var parentRelationsRu = {
7064
+ step: {
7065
+ \u043E\u0442\u0435\u0446: "\u043E\u0442\u0447\u0438\u043C",
7066
+ \u043C\u0430\u0442\u044C: "\u043C\u0430\u0447\u0435\u0445\u0430",
7067
+ \u0441\u044B\u043D: "\u043F\u0430\u0441\u044B\u043D\u043E\u043A",
7068
+ \u0434\u043E\u0447\u044C: "\u043F\u0430\u0434\u0447\u0435\u0440\u0438\u0446\u0430"
7069
+ }
6841
7070
  };
6842
7071
 
6843
7072
  // src/kinship-translator/kinship-translator.ru.ts
@@ -6868,7 +7097,7 @@ var cousinWord = (degree, sex) => {
6868
7097
  return `${stem}\u044B\u0439 \u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430`;
6869
7098
  };
6870
7099
  var praRepeat = (count) => count > 0 ? "\u043F\u0440\u0430".repeat(count) : "";
6871
- var sexOf = (person) => {
7100
+ var sexOf4 = (person) => {
6872
7101
  if (person?.isMale?.()) {
6873
7102
  return "m";
6874
7103
  }
@@ -6883,7 +7112,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
6883
7112
  if (degree > 0) {
6884
7113
  degree = degree - 1;
6885
7114
  }
6886
- return cousinWord(degree, sexOf(this.personN));
7115
+ return cousinWord(degree, sexOf4(this.personN));
6887
7116
  }
6888
7117
  removal() {
6889
7118
  const level = this.pathN?.level ?? 0;
@@ -6895,35 +7124,53 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
6895
7124
  return level < 0 ? this.nibling() : this.auncle();
6896
7125
  }
6897
7126
  const removed = Math.abs(level);
6898
- return `${cousinWord(degree, sexOf(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
7127
+ return `${cousinWord(degree, sexOf4(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
6899
7128
  }
6900
7129
  auncle() {
6901
7130
  const level = Math.abs(this.pathN?.level ?? 0);
6902
- const pra = praRepeat(Math.max(0, level - 2));
6903
- const sex = sexOf(this.personN);
7131
+ const sex = sexOf4(this.personN);
7132
+ if (level <= 1) {
7133
+ if (sex === "m") {
7134
+ return "\u0434\u044F\u0434\u044F";
7135
+ }
7136
+ if (sex === "f") {
7137
+ return "\u0442\u0451\u0442\u044F";
7138
+ }
7139
+ return "\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F";
7140
+ }
7141
+ const pra = praRepeat(level - 2);
6904
7142
  if (sex === "m") {
6905
- return `${pra}\u0434\u044F\u0434\u044F`;
7143
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434`;
6906
7144
  }
6907
7145
  if (sex === "f") {
6908
- return `${pra}\u0442\u0451\u0442\u044F`;
7146
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u0430\u044F ${pra}\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
6909
7147
  }
6910
- return `${pra}\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F`;
7148
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434/\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
6911
7149
  }
6912
7150
  nibling() {
6913
7151
  const level = Math.abs(this.pathN?.level ?? 0);
6914
- const pra = praRepeat(Math.max(0, level - 2));
6915
- const sex = sexOf(this.personN);
7152
+ const sex = sexOf4(this.personN);
7153
+ if (level <= 1) {
7154
+ if (sex === "m") {
7155
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A";
7156
+ }
7157
+ if (sex === "f") {
7158
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
7159
+ }
7160
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
7161
+ }
7162
+ const pra = praRepeat(level - 2);
6916
7163
  if (sex === "m") {
6917
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
7164
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u044B\u0439 \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
6918
7165
  }
6919
7166
  if (sex === "f") {
6920
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7167
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u0430\u044F \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
6921
7168
  }
6922
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7169
+ 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`;
6923
7170
  }
6924
7171
  parent() {
6925
7172
  const level = Math.abs(this.pathN?.level ?? 0);
6926
- const sex = sexOf(this.personN);
7173
+ const sex = sexOf4(this.personN);
6927
7174
  if (level <= 1) {
6928
7175
  if (sex === "m") {
6929
7176
  return "\u043E\u0442\u0435\u0446";
@@ -6953,7 +7200,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
6953
7200
  }
6954
7201
  child() {
6955
7202
  const level = Math.abs(this.pathN?.level ?? 0);
6956
- const sex = sexOf(this.personN);
7203
+ const sex = sexOf4(this.personN);
6957
7204
  if (level <= 1) {
6958
7205
  if (sex === "m") {
6959
7206
  return "\u0441\u044B\u043D";
@@ -6982,14 +7229,14 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
6982
7229
  return `${pra}\u0432\u043D\u0443\u043A/\u0432\u043D\u0443\u0447\u043A\u0430`;
6983
7230
  }
6984
7231
  sibling() {
6985
- const sex = sexOf(this.personN);
7232
+ const sex = sexOf4(this.personN);
6986
7233
  if (sex === "m") {
6987
7234
  return "\u0431\u0440\u0430\u0442";
6988
7235
  }
6989
7236
  if (sex === "f") {
6990
7237
  return "\u0441\u0435\u0441\u0442\u0440\u0430";
6991
7238
  }
6992
- return "\u0441\u0438\u0431\u043B\u0438\u043D\u0433";
7239
+ return "\u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430";
6993
7240
  }
6994
7241
  halfBlood(relation) {
6995
7242
  if (!relation || !this.isHalfBlood) {
@@ -7003,7 +7250,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7003
7250
  return `\u0441\u0432\u043E\u0434\u043D\u044B\u0439 ${relation}`;
7004
7251
  }
7005
7252
  spouse() {
7006
- const sex = sexOf(this.personN);
7253
+ const sex = sexOf4(this.personN);
7007
7254
  if (sex === "m") {
7008
7255
  return "\u043C\u0443\u0436";
7009
7256
  }
@@ -7017,7 +7264,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7017
7264
  return "";
7018
7265
  }
7019
7266
  const spouse = this.path?.[1].indi;
7020
- const sex = sexOf(spouse);
7267
+ const sex = sexOf4(spouse);
7021
7268
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
7022
7269
  return `${relation} ${toGenitive(spouseType)}`;
7023
7270
  }
@@ -7026,13 +7273,13 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7026
7273
  return "";
7027
7274
  }
7028
7275
  const spouse = this.path?.[this.path.length - 1].indi;
7029
- const sex = sexOf(spouse);
7276
+ const sex = sexOf4(spouse);
7030
7277
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
7031
7278
  return `${spouseType} ${toGenitive(relation)}`;
7032
7279
  }
7033
7280
  of(relation) {
7034
7281
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7035
- nameOrder: "first-last"
7282
+ nameOrder: this.nameOrder
7036
7283
  });
7037
7284
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7038
7285
  if (this.displayName === "none") {
@@ -7063,7 +7310,22 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7063
7310
  if (!relation || !this.pathN?.relation) {
7064
7311
  return relation ?? "";
7065
7312
  }
7066
- return `${this.pathN.relation} ${relation}`;
7313
+ const mapped = parentRelationsRu[this.pathN.relation]?.[relation];
7314
+ if (mapped) {
7315
+ return mapped;
7316
+ }
7317
+ if (this.pathN.relation === "step") {
7318
+ return `\u043D\u0435\u0440\u043E\u0434\u043D\u043E\u0439 ${relation}`;
7319
+ }
7320
+ if (this.pathN.relation === "adopted") {
7321
+ return /сестра|дочь|мать|тётя|бабушка|жена|племянница|внучка/.test(
7322
+ relation
7323
+ ) ? `\u043F\u0440\u0438\u0451\u043C\u043D\u0430\u044F ${relation}` : `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
7324
+ }
7325
+ if (this.pathN.relation === "foster") {
7326
+ return `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
7327
+ }
7328
+ return relation;
7067
7329
  }
7068
7330
  };
7069
7331
 
@@ -7087,7 +7349,7 @@ var InLawsJa = {
7087
7349
  };
7088
7350
 
7089
7351
  // src/kinship-translator/kinship-translator.ja.ts
7090
- var sexOf2 = (person) => {
7352
+ var sexOf5 = (person) => {
7091
7353
  if (person?.isMale?.()) {
7092
7354
  return "m";
7093
7355
  }
@@ -7096,7 +7358,7 @@ var sexOf2 = (person) => {
7096
7358
  }
7097
7359
  return "n";
7098
7360
  };
7099
- var pick = (sex, male, female, neutral) => {
7361
+ var pick4 = (sex, male, female, neutral) => {
7100
7362
  if (sex === "m") {
7101
7363
  return male;
7102
7364
  }
@@ -7109,18 +7371,18 @@ var lineal = (level, sex, kind) => {
7109
7371
  const L = Math.max(1, level);
7110
7372
  if (kind === "asc") {
7111
7373
  if (L <= 1) {
7112
- return pick(sex, "\u7236", "\u6BCD", "\u89AA");
7374
+ return pick4(sex, "\u7236", "\u6BCD", "\u89AA");
7113
7375
  }
7114
7376
  if (L === 2) {
7115
- return pick(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7377
+ return pick4(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7116
7378
  }
7117
7379
  if (L === 3) {
7118
- return pick(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7380
+ return pick4(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7119
7381
  }
7120
7382
  if (L === 4) {
7121
- return pick(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7383
+ return pick4(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7122
7384
  }
7123
- return pick(
7385
+ return pick4(
7124
7386
  sex,
7125
7387
  `${L - 1}\u4E16\u306E\u7956\u7236`,
7126
7388
  `${L - 1}\u4E16\u306E\u7956\u6BCD`,
@@ -7128,7 +7390,7 @@ var lineal = (level, sex, kind) => {
7128
7390
  );
7129
7391
  }
7130
7392
  if (L <= 1) {
7131
- return pick(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
7393
+ return pick4(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
7132
7394
  }
7133
7395
  if (L === 2) {
7134
7396
  return "\u5B6B";
@@ -7175,52 +7437,52 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7175
7437
  }
7176
7438
  auncle() {
7177
7439
  const level = Math.abs(this.pathN?.level ?? 0);
7178
- const sex = sexOf2(this.personN);
7179
- if (level <= 2) {
7180
- return pick(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
7440
+ const sex = sexOf5(this.personN);
7441
+ if (level <= 1) {
7442
+ return pick4(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
7181
7443
  }
7182
- if (level === 3) {
7183
- return pick(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
7444
+ if (level === 2) {
7445
+ return pick4(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
7184
7446
  }
7185
- return pick(
7447
+ return pick4(
7186
7448
  sex,
7187
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058`,
7188
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3070`,
7189
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
7449
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058`,
7450
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3070`,
7451
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
7190
7452
  );
7191
7453
  }
7192
7454
  nibling() {
7193
7455
  const level = Math.abs(this.pathN?.level ?? 0);
7194
- const sex = sexOf2(this.personN);
7195
- if (level <= 2) {
7196
- return pick(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
7456
+ const sex = sexOf5(this.personN);
7457
+ if (level <= 1) {
7458
+ return pick4(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
7197
7459
  }
7198
- if (level === 3) {
7199
- return pick(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
7460
+ if (level === 2) {
7461
+ return pick4(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
7200
7462
  }
7201
- return pick(
7463
+ return pick4(
7202
7464
  sex,
7203
- `${level - 2}\u4EE3\u4E0B\u306E\u7525`,
7204
- `${level - 2}\u4EE3\u4E0B\u306E\u59EA`,
7205
- `${level - 2}\u4EE3\u4E0B\u306E\u7525/\u59EA`
7465
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525`,
7466
+ `${level - 1}\u4EE3\u4E0B\u306E\u59EA`,
7467
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525/\u59EA`
7206
7468
  );
7207
7469
  }
7208
7470
  parent() {
7209
7471
  return lineal(
7210
7472
  Math.abs(this.pathN?.level ?? 0),
7211
- sexOf2(this.personN),
7473
+ sexOf5(this.personN),
7212
7474
  "asc"
7213
7475
  );
7214
7476
  }
7215
7477
  child() {
7216
7478
  return lineal(
7217
7479
  Math.abs(this.pathN?.level ?? 0),
7218
- sexOf2(this.personN),
7480
+ sexOf5(this.personN),
7219
7481
  "desc"
7220
7482
  );
7221
7483
  }
7222
7484
  sibling() {
7223
- return pick(sexOf2(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
7485
+ return pick4(sexOf5(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
7224
7486
  }
7225
7487
  halfBlood(relation) {
7226
7488
  if (!relation || !this.isHalfBlood) {
@@ -7229,14 +7491,14 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7229
7491
  return `\u7570\u7236\u6BCD\u306E${relation}`;
7230
7492
  }
7231
7493
  spouse() {
7232
- return pick(sexOf2(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7494
+ return pick4(sexOf5(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7233
7495
  }
7234
7496
  ofSpouse(relation) {
7235
7497
  if (!relation) {
7236
7498
  return "";
7237
7499
  }
7238
- const spouseType = pick(
7239
- sexOf2(this.path?.[1].indi),
7500
+ const spouseType = pick4(
7501
+ sexOf5(this.path?.[1].indi),
7240
7502
  "\u592B",
7241
7503
  "\u59BB",
7242
7504
  "\u914D\u5076\u8005"
@@ -7248,12 +7510,12 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7248
7510
  return "";
7249
7511
  }
7250
7512
  const spouse = this.path?.[this.path.length - 1].indi;
7251
- const spouseType = pick(sexOf2(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7513
+ const spouseType = pick4(sexOf5(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7252
7514
  return `${relation}\u306E${spouseType}`;
7253
7515
  }
7254
7516
  of(relation) {
7255
7517
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7256
- nameOrder: "last-first"
7518
+ nameOrder: this.nameOrder
7257
7519
  });
7258
7520
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7259
7521
  if (this.displayName === "none") {
@@ -7284,7 +7546,28 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7284
7546
  if (!relation || !this.pathN?.relation) {
7285
7547
  return relation ?? "";
7286
7548
  }
7287
- return `${this.pathN.relation}\u306E${relation}`;
7549
+ if (this.pathN.relation === "step") {
7550
+ if (relation === "\u7236") {
7551
+ return "\u7EE7\u7236";
7552
+ }
7553
+ if (relation === "\u6BCD") {
7554
+ return "\u7D99\u6BCD";
7555
+ }
7556
+ if (relation === "\u606F\u5B50") {
7557
+ return "\u7D99\u5B50";
7558
+ }
7559
+ if (relation === "\u5A18") {
7560
+ return "\u7D99\u5A18";
7561
+ }
7562
+ return `\u7D99${relation}`;
7563
+ }
7564
+ if (this.pathN.relation === "adopted") {
7565
+ return `\u990A\u5B50\u306E${relation}`;
7566
+ }
7567
+ if (this.pathN.relation === "foster") {
7568
+ return `\u91CC\u89AA\u306E${relation}`;
7569
+ }
7570
+ return relation;
7288
7571
  }
7289
7572
  };
7290
7573
 
@@ -7293,22 +7576,32 @@ var InLawsZh = {
7293
7576
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u914D\u5076": "\u513F\u5AB3/\u5973\u5A7F",
7294
7577
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u59BB\u5B50": "\u513F\u5AB3",
7295
7578
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u4E08\u592B": "\u5973\u5A7F",
7296
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
7297
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
7298
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
7579
+ "\u59BB\u5B50\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD",
7580
+ "\u4E08\u592B\u7684\u6BCD\u4EB2": "\u5A46\u5A46",
7581
+ "(\u914D\u5076)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
7582
+ "\u59BB\u5B50\u7684\u7236\u4EB2": "\u5CB3\u7236",
7583
+ "\u4E08\u592B\u7684\u7236\u4EB2": "\u516C\u516C",
7584
+ "(\u914D\u5076)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
7585
+ "\u59BB\u5B50\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD",
7586
+ "\u4E08\u592B\u7684\u7236\u6BCD": "\u516C\u516C\u5A46\u5A46",
7587
+ "(\u914D\u5076)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
7299
7588
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u59BB\u5B50": "\u5AC2\u5B50/\u5F1F\u59B9",
7300
7589
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u4E08\u592B": "\u59D0\u592B/\u59B9\u592B",
7301
7590
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u914D\u5076": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
7302
7591
  "(\u5F02\u7236\u6BCD\u7684)?\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59D0\u592B/\u59B9\u592B",
7303
7592
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u5AC2\u5B50/\u5F1F\u59B9",
7304
7593
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
7305
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
7306
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
7594
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u59D0\u59B9": "\u59E8\u5B50",
7595
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u59D0\u59B9": "\u59D1\u5B50",
7596
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
7597
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u5144\u5F1F": "\u5185\u5144/\u5185\u5F1F",
7598
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4",
7599
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
7307
7600
  "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F\u59D0\u59B9": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9"
7308
7601
  };
7309
7602
 
7310
7603
  // src/kinship-translator/kinship-translator.zh.ts
7311
- var sexOf3 = (person) => {
7604
+ var sexOf6 = (person) => {
7312
7605
  if (person?.isMale?.()) {
7313
7606
  return "m";
7314
7607
  }
@@ -7317,7 +7610,7 @@ var sexOf3 = (person) => {
7317
7610
  }
7318
7611
  return "n";
7319
7612
  };
7320
- var pick2 = (sex, male, female, neutral) => {
7613
+ var pick5 = (sex, male, female, neutral) => {
7321
7614
  if (sex === "m") {
7322
7615
  return male;
7323
7616
  }
@@ -7330,41 +7623,41 @@ var lineal2 = (level, sex, kind) => {
7330
7623
  const L = Math.max(1, level);
7331
7624
  if (kind === "asc") {
7332
7625
  if (L <= 1) {
7333
- return pick2(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
7626
+ return pick5(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
7334
7627
  }
7335
7628
  if (L === 2) {
7336
- return pick2(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7629
+ return pick5(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7337
7630
  }
7338
7631
  if (L === 3) {
7339
- return pick2(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7632
+ return pick5(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7340
7633
  }
7341
7634
  if (L === 4) {
7342
- return pick2(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7635
+ return pick5(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7343
7636
  }
7344
- return pick2(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
7637
+ return pick5(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
7345
7638
  }
7346
7639
  if (L <= 1) {
7347
- return pick2(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
7640
+ return pick5(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
7348
7641
  }
7349
7642
  if (L === 2) {
7350
- return pick2(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
7643
+ return pick5(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
7351
7644
  }
7352
7645
  if (L === 3) {
7353
- return pick2(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
7646
+ return pick5(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
7354
7647
  }
7355
7648
  if (L === 4) {
7356
- return pick2(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
7649
+ return pick5(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
7357
7650
  }
7358
- return pick2(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
7651
+ return pick5(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
7359
7652
  };
7360
7653
  var cousinPlain2 = (degree, sex) => {
7361
7654
  if (degree <= 1) {
7362
- return pick2(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
7655
+ return pick5(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
7363
7656
  }
7364
7657
  if (degree === 2) {
7365
- return pick2(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
7658
+ return pick5(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
7366
7659
  }
7367
- return pick2(
7660
+ return pick5(
7368
7661
  sex,
7369
7662
  `${degree}\u4EE3\u5802\u8868\u5144\u5F1F`,
7370
7663
  `${degree}\u4EE3\u5802\u8868\u59D0\u59B9`,
@@ -7377,7 +7670,7 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7377
7670
  if (degree > 0) {
7378
7671
  degree = degree - 1;
7379
7672
  }
7380
- return cousinPlain2(degree, sexOf3(this.personN));
7673
+ return cousinPlain2(degree, sexOf6(this.personN));
7381
7674
  }
7382
7675
  removal() {
7383
7676
  const level = this.pathN?.level ?? 0;
@@ -7389,56 +7682,56 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7389
7682
  return level < 0 ? this.nibling() : this.auncle();
7390
7683
  }
7391
7684
  const removed = Math.abs(level);
7392
- return `${cousinPlain2(degree, sexOf3(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
7685
+ return `${cousinPlain2(degree, sexOf6(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
7393
7686
  }
7394
7687
  auncle() {
7395
7688
  const level = Math.abs(this.pathN?.level ?? 0);
7396
- const sex = sexOf3(this.personN);
7397
- if (level <= 2) {
7398
- return pick2(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
7689
+ const sex = sexOf6(this.personN);
7690
+ if (level <= 1) {
7691
+ return pick5(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
7399
7692
  }
7400
- if (level === 3) {
7401
- return pick2(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
7693
+ if (level === 2) {
7694
+ return pick5(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
7402
7695
  }
7403
- return pick2(
7696
+ return pick5(
7404
7697
  sex,
7405
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u53D4`,
7406
- `${level - 2}\u4EE3\u524D\u7684\u963F\u59E8`,
7407
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
7698
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u53D4`,
7699
+ `${level - 1}\u4EE3\u524D\u7684\u963F\u59E8`,
7700
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
7408
7701
  );
7409
7702
  }
7410
7703
  nibling() {
7411
7704
  const level = Math.abs(this.pathN?.level ?? 0);
7412
- const sex = sexOf3(this.personN);
7413
- if (level <= 2) {
7414
- return pick2(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
7705
+ const sex = sexOf6(this.personN);
7706
+ if (level <= 1) {
7707
+ return pick5(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
7415
7708
  }
7416
- if (level === 3) {
7417
- return pick2(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
7709
+ if (level === 2) {
7710
+ return pick5(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
7418
7711
  }
7419
- return pick2(
7712
+ return pick5(
7420
7713
  sex,
7421
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
7422
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5973`,
7423
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
7714
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
7715
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5973`,
7716
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
7424
7717
  );
7425
7718
  }
7426
7719
  parent() {
7427
7720
  return lineal2(
7428
7721
  Math.abs(this.pathN?.level ?? 0),
7429
- sexOf3(this.personN),
7722
+ sexOf6(this.personN),
7430
7723
  "asc"
7431
7724
  );
7432
7725
  }
7433
7726
  child() {
7434
7727
  return lineal2(
7435
7728
  Math.abs(this.pathN?.level ?? 0),
7436
- sexOf3(this.personN),
7729
+ sexOf6(this.personN),
7437
7730
  "desc"
7438
7731
  );
7439
7732
  }
7440
7733
  sibling() {
7441
- return pick2(sexOf3(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
7734
+ return pick5(sexOf6(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
7442
7735
  }
7443
7736
  halfBlood(relation) {
7444
7737
  if (!relation || !this.isHalfBlood) {
@@ -7447,14 +7740,14 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7447
7740
  return `\u5F02\u7236\u6BCD\u7684${relation}`;
7448
7741
  }
7449
7742
  spouse() {
7450
- return pick2(sexOf3(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7743
+ return pick5(sexOf6(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7451
7744
  }
7452
7745
  ofSpouse(relation) {
7453
7746
  if (!relation) {
7454
7747
  return "";
7455
7748
  }
7456
- const spouseType = pick2(
7457
- sexOf3(this.path?.[1].indi),
7749
+ const spouseType = pick5(
7750
+ sexOf6(this.path?.[1].indi),
7458
7751
  "\u4E08\u592B",
7459
7752
  "\u59BB\u5B50",
7460
7753
  "\u914D\u5076"
@@ -7466,12 +7759,12 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7466
7759
  return "";
7467
7760
  }
7468
7761
  const spouse = this.path?.[this.path.length - 1].indi;
7469
- const spouseType = pick2(sexOf3(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7762
+ const spouseType = pick5(sexOf6(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7470
7763
  return `${relation}\u7684${spouseType}`;
7471
7764
  }
7472
7765
  of(relation) {
7473
7766
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7474
- nameOrder: "last-first"
7767
+ nameOrder: this.nameOrder
7475
7768
  });
7476
7769
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7477
7770
  if (this.displayName === "none") {
@@ -7502,27 +7795,68 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7502
7795
  if (!relation || !this.pathN?.relation) {
7503
7796
  return relation ?? "";
7504
7797
  }
7505
- return `${this.pathN.relation}${relation}`;
7798
+ if (this.pathN.relation === "step") {
7799
+ if (relation === "\u7236\u4EB2") {
7800
+ return "\u7EE7\u7236";
7801
+ }
7802
+ if (relation === "\u6BCD\u4EB2") {
7803
+ return "\u7EE7\u6BCD";
7804
+ }
7805
+ if (relation === "\u513F\u5B50") {
7806
+ return "\u7EE7\u5B50";
7807
+ }
7808
+ if (relation === "\u5973\u513F") {
7809
+ return "\u7EE7\u5973";
7810
+ }
7811
+ return `\u7EE7${relation}`;
7812
+ }
7813
+ if (this.pathN.relation === "adopted") {
7814
+ if (relation === "\u7236\u4EB2") {
7815
+ return "\u517B\u7236";
7816
+ }
7817
+ if (relation === "\u6BCD\u4EB2") {
7818
+ return "\u517B\u6BCD";
7819
+ }
7820
+ if (relation === "\u513F\u5B50") {
7821
+ return "\u517B\u5B50";
7822
+ }
7823
+ if (relation === "\u5973\u513F") {
7824
+ return "\u517B\u5973";
7825
+ }
7826
+ return `\u517B${relation}`;
7827
+ }
7828
+ if (this.pathN.relation === "foster") {
7829
+ return `\u5BC4\u517B${relation}`;
7830
+ }
7831
+ return relation;
7506
7832
  }
7507
7833
  };
7508
7834
 
7509
7835
  // src/kinship-translator/kinship-translator.ts
7836
+ var nameOrderForLang = (lang) => lang === "hu" || lang === "ja" || lang === "zh" ? "last-first" : "first-last";
7510
7837
  var KinshipTranslator = class {
7511
- constructor(person1, person2, lang = "en", entirePath, displayName = "givenname") {
7838
+ constructor(person1, person2, lang = "en", entirePath, displayName = "givenname", nameOrder) {
7512
7839
  this.displayName = displayName;
7513
7840
  this.lang = lang;
7514
7841
  this.entirePath = entirePath;
7515
7842
  this.person1 = person1;
7516
7843
  this.person2 = typeof person2 === "string" ? this.person1.getGedcom()?.indi(person2) : person2;
7517
7844
  this.path = this.person1.path(this.person2);
7845
+ const order = nameOrder ?? nameOrderForLang(lang);
7846
+ this.nameOrder = order;
7518
7847
  if (translators_exports[lang]) {
7519
7848
  this.translator = new translators_exports[lang](
7520
7849
  this.path ?? [],
7521
- displayName
7850
+ displayName,
7851
+ order
7522
7852
  );
7523
7853
  }
7524
7854
  if (!this.translator) {
7525
- this.translator = new KinshipTranslatorEn(this.path ?? [], displayName);
7855
+ this.translator = new KinshipTranslatorEn(
7856
+ this.path ?? [],
7857
+ displayName,
7858
+ order
7859
+ );
7526
7860
  }
7527
7861
  }
7528
7862
  get path0() {
@@ -7567,14 +7901,16 @@ var KinshipTranslator = class {
7567
7901
  showMainPerson,
7568
7902
  this.lang,
7569
7903
  false,
7570
- this.displayName
7904
+ this.displayName,
7905
+ this.nameOrder
7571
7906
  ),
7572
7907
  relative: this.path?.[index - 1]?.indi.kinship(
7573
7908
  path2.indi.id,
7574
7909
  showMainPerson,
7575
7910
  this.lang,
7576
7911
  false,
7577
- this.displayName
7912
+ this.displayName,
7913
+ this.nameOrder
7578
7914
  )
7579
7915
  }));
7580
7916
  return path;
@@ -8657,7 +8993,7 @@ var ensureExtensionSchema = (gedcom, extraTags) => {
8657
8993
 
8658
8994
  // package.json
8659
8995
  var package_default = {
8660
- version: "2.1.11"};
8996
+ version: "2.1.15"};
8661
8997
 
8662
8998
  // src/utils/get-product-details.ts
8663
8999
  var isDevelopment = () => {
@@ -10024,7 +10360,7 @@ var create = (gedcom, type, id, nodes) => {
10024
10360
  prevNode = createObje(gedcom, void 0, mainNode, curNode);
10025
10361
  } else if (type === "DATE") {
10026
10362
  prevNode = createCommonDate(gedcom, void 0, mainNode, curNode);
10027
- } else if (type === "NOTE" || type === "SNOTE") {
10363
+ } else if (type === "NOTE" || type === "SNOTE" || type === "_TREEVIZ_LIFE_STORY" || type === "_TREEVIZ_FAMILY_STORY") {
10028
10364
  prevNode = createCommonNote(gedcom, void 0, mainNode, curNode);
10029
10365
  } else if (type === "NAME" && mainNode instanceof Indi) {
10030
10366
  prevNode = createCommonName(gedcom, void 0, mainNode, curNode);