@treeviz/gedcom-parser 2.1.11 → 2.1.12

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 (30) hide show
  1. package/dist/classes/index.js +704 -380
  2. package/dist/cli/index.js +704 -380
  3. package/dist/constants/index.js +703 -379
  4. package/dist/factories/index.js +703 -379
  5. package/dist/index.js +704 -380
  6. package/dist/kinship-translator/index.js +703 -379
  7. package/dist/kinship-translator/kinship-translator.de.d.ts +2 -3
  8. package/dist/kinship-translator/kinship-translator.de.d.ts.map +1 -1
  9. package/dist/kinship-translator/kinship-translator.en.d.ts.map +1 -1
  10. package/dist/kinship-translator/kinship-translator.es.d.ts +2 -3
  11. package/dist/kinship-translator/kinship-translator.es.d.ts.map +1 -1
  12. package/dist/kinship-translator/kinship-translator.fr.d.ts +2 -3
  13. package/dist/kinship-translator/kinship-translator.fr.d.ts.map +1 -1
  14. package/dist/kinship-translator/kinship-translator.hu.d.ts.map +1 -1
  15. package/dist/kinship-translator/kinship-translator.ja.d.ts.map +1 -1
  16. package/dist/kinship-translator/kinship-translator.ru.d.ts +1 -1
  17. package/dist/kinship-translator/kinship-translator.ru.d.ts.map +1 -1
  18. package/dist/kinship-translator/kinship-translator.zh.d.ts.map +1 -1
  19. package/dist/kinship-translator/patterns.de.d.ts +1 -0
  20. package/dist/kinship-translator/patterns.de.d.ts.map +1 -1
  21. package/dist/kinship-translator/patterns.es.d.ts +1 -0
  22. package/dist/kinship-translator/patterns.es.d.ts.map +1 -1
  23. package/dist/kinship-translator/patterns.fr.d.ts +1 -0
  24. package/dist/kinship-translator/patterns.fr.d.ts.map +1 -1
  25. package/dist/kinship-translator/patterns.hu.d.ts.map +1 -1
  26. package/dist/kinship-translator/patterns.ru.d.ts +1 -0
  27. package/dist/kinship-translator/patterns.ru.d.ts.map +1 -1
  28. package/dist/kinship-translator/patterns.zh.d.ts.map +1 -1
  29. package/dist/utils/index.js +704 -380
  30. package/package.json +1 -1
@@ -1728,7 +1728,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
1728
1728
  }
1729
1729
  return `${hungarianOrdinalize(
1730
1730
  degree
1731
- )}unokatestv\xE9r ${level}x elt\xE1vol\xEDtva`;
1731
+ )}unokatestv\xE9r ${Math.abs(level)}x elt\xE1vol\xEDtva`;
1732
1732
  }
1733
1733
  auncle() {
1734
1734
  const level = this.pathN?.level ?? 0;
@@ -1772,14 +1772,25 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
1772
1772
  return `${ordinalized ? `${ordinalized}unoka` : ""}testv\xE9r ${origPrefix.replace(/nagy$/, "")}unok\xE1ja`;
1773
1773
  }
1774
1774
  parent() {
1775
+ const level = Math.abs(this.pathN?.level ?? 0);
1776
+ if (level <= 1) {
1777
+ if (this.personN?.isMale()) {
1778
+ return "apa";
1779
+ }
1780
+ if (this.personN?.isFemale()) {
1781
+ return "anya";
1782
+ }
1783
+ return "sz\xFCl\u0151";
1784
+ }
1775
1785
  const prefix = this.directPrefix();
1786
+ const gen = prefix === "nagy" ? "" : prefix;
1776
1787
  if (this.personN?.isMale()) {
1777
- return `${prefix}apa`;
1788
+ return `${gen}nagyapa`;
1778
1789
  }
1779
1790
  if (this.personN?.isFemale()) {
1780
- return `${prefix}anya`;
1791
+ return `${gen}nagyanya`;
1781
1792
  }
1782
- return `${prefix}sz\xFCl\u0151`;
1793
+ return `${gen}nagysz\xFCl\u0151`;
1783
1794
  }
1784
1795
  child() {
1785
1796
  const level = Math.abs(this.pathN?.level ?? 0);
@@ -1973,27 +1984,30 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
1973
1984
  if (!degree) {
1974
1985
  return level < 0 ? this.nibling() : this.auncle();
1975
1986
  }
1976
- return `${ordinalize(degree)} cousin ${level}x removed`;
1987
+ return `${ordinalize(degree)} cousin ${Math.abs(level)}x removed`;
1977
1988
  }
1978
1989
  auncle() {
1979
- const prefix = this.directPrefix();
1990
+ const level = Math.abs(this.pathN?.level ?? 0);
1991
+ const greats = level <= 1 ? "" : "great-".repeat(level - 1);
1980
1992
  if (this.personN?.isMale()) {
1981
- return `${prefix}uncle`;
1993
+ return `${greats}uncle`;
1982
1994
  }
1983
1995
  if (this.personN?.isFemale()) {
1984
- return `${prefix}aunt`;
1996
+ return `${greats}aunt`;
1985
1997
  }
1986
- return `${prefix}auncle`;
1998
+ return greats ? `${greats}uncle/${greats}aunt` : "uncle/aunt";
1987
1999
  }
1988
2000
  nibling() {
1989
- const prefix = this.directPrefix();
2001
+ const level = Math.abs(this.pathN?.level ?? 0);
2002
+ const greats = level <= 2 ? "" : "great-".repeat(level - 2);
2003
+ const grand = level <= 1 ? "" : "grand";
1990
2004
  if (this.personN?.isMale()) {
1991
- return `${prefix}nephew`;
2005
+ return `${greats}${grand}nephew`;
1992
2006
  }
1993
2007
  if (this.personN?.isFemale()) {
1994
- return `${prefix}niece`;
2008
+ return `${greats}${grand}niece`;
1995
2009
  }
1996
- return `${prefix}nibling`;
2010
+ return greats || grand ? `${greats}${grand}nephew/${greats}${grand}niece` : "nephew/niece";
1997
2011
  }
1998
2012
  parent() {
1999
2013
  const prefix = this.directPrefix();
@@ -2121,45 +2135,64 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
2121
2135
  };
2122
2136
 
2123
2137
  // src/kinship-translator/patterns.de.ts
2138
+ var parentRelationsDe = {
2139
+ step: "Stief",
2140
+ foster: "Pflege",
2141
+ adopted: "Adoptiv"
2142
+ };
2124
2143
  var InLawsDe = {
2125
- "Ehepartner von (kind|tochter|sohn)": "Schwiegerkind",
2126
- "Ehefrau von (kind|tochter|sohn)": "Schwiegertochter",
2127
- "Ehemann von (kind|tochter|sohn)": "Schwiegersohn",
2128
- "mutter des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegermutter",
2129
- "vater des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegervater",
2130
- "elternteil des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegerelternteil",
2131
- "Ehefrau von (Halb)?(geschwister|schwester|bruder)": "Schw\xE4gerin",
2132
- "Ehemann von (Halb)?(geschwister|schwester|bruder)": "Schwager",
2133
- "Ehepartner von (Halb)?(geschwister|schwester|bruder)": "Schwager/Schw\xE4gerin",
2134
- "(Halb)?schwester des (Ehepartner|Ehefrau|Ehemann)s": "Schw\xE4gerin",
2135
- "(Halb)?bruder des (Ehepartner|Ehefrau|Ehemann)s": "Schwager",
2136
- "(Halb)?geschwister des (Ehepartner|Ehefrau|Ehemann)s": "Schwager/Schw\xE4gerin"
2144
+ "Ehepartner von (Kind|Tochter|Sohn)": "Schwiegerkind",
2145
+ "Ehefrau von (Kind|Tochter|Sohn)": "Schwiegertochter",
2146
+ "Ehemann von (Kind|Tochter|Sohn)": "Schwiegersohn",
2147
+ "Mutter (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegermutter",
2148
+ "Vater (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegervater",
2149
+ "Elternteil (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegerelternteil",
2150
+ "Ehefrau von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schw\xE4gerin",
2151
+ "Ehemann von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager",
2152
+ "Ehepartner von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager/Schw\xE4gerin",
2153
+ "(Halb)?-?(Schwester|schwester) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schw\xE4gerin",
2154
+ "(Halb)?-?(Bruder|bruder) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager",
2155
+ "(Halb)?-?(Geschwister|geschwister) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager/Schw\xE4gerin"
2137
2156
  };
2138
2157
 
2139
2158
  // src/kinship-translator/kinship-translator.de.ts
2140
- var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
2141
- directPrefix() {
2142
- const level = Math.abs(this.pathN?.level ?? 0);
2143
- if (level <= 1) {
2144
- return "";
2145
- }
2146
- if (level === 2) {
2147
- return "Gro\xDF";
2148
- }
2149
- if (level === 3) {
2150
- return "Urgro\xDF";
2151
- }
2152
- return `Ur${level - 2}-gro\xDF`;
2159
+ var sexOf = (person) => {
2160
+ if (person?.isMale?.()) {
2161
+ return "m";
2162
+ }
2163
+ if (person?.isFemale?.()) {
2164
+ return "f";
2153
2165
  }
2166
+ return "n";
2167
+ };
2168
+ var pick = (sex, male, female, neutral) => {
2169
+ if (sex === "m") {
2170
+ return male;
2171
+ }
2172
+ if (sex === "f") {
2173
+ return female;
2174
+ }
2175
+ return neutral;
2176
+ };
2177
+ var ur = (count) => count > 0 ? "Ur".repeat(count) : "";
2178
+ var genitiveArticle = (spouseType) => {
2179
+ if (spouseType === "Ehefrau") {
2180
+ return `der ${spouseType}`;
2181
+ }
2182
+ return `des ${spouseType}s`;
2183
+ };
2184
+ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
2154
2185
  indirect() {
2155
2186
  let degree = Math.abs(this.pathN?.degree ?? 0);
2156
2187
  if (degree > 0) {
2157
2188
  degree = degree - 1;
2158
2189
  }
2159
- if (degree === 1) {
2160
- return `Cousin`;
2190
+ const sex = sexOf(this.personN);
2191
+ const cousin = pick(sex, "Cousin", "Cousine", "Cousin/Cousine");
2192
+ if (degree <= 1) {
2193
+ return cousin;
2161
2194
  }
2162
- return `Cousin ${degree}. Grades`;
2195
+ return `${cousin} ${degree}. Grades`;
2163
2196
  }
2164
2197
  removal() {
2165
2198
  const level = this.pathN?.level ?? 0;
@@ -2170,101 +2203,101 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
2170
2203
  if (!degree) {
2171
2204
  return level < 0 ? this.nibling() : this.auncle();
2172
2205
  }
2173
- return `Cousin ${degree}. Grades ${Math.abs(level)}\xD7 entfernt`;
2206
+ return `${this.indirect()} ${Math.abs(level)}\xD7 entfernt`;
2174
2207
  }
2175
2208
  auncle() {
2176
- const prefix = this.directPrefix();
2177
- if (this.personN?.isMale()) {
2178
- return `${prefix}onkel`;
2179
- }
2180
- if (this.personN?.isFemale()) {
2181
- return `${prefix}tante`;
2209
+ const level = Math.abs(this.pathN?.level ?? 0);
2210
+ const sex = sexOf(this.personN);
2211
+ if (level <= 1) {
2212
+ return pick(sex, "Onkel", "Tante", "Onkel/Tante");
2182
2213
  }
2183
- return `${prefix}onkel/tante`;
2214
+ const prefix = `${ur(level - 2)}Gro\xDF`;
2215
+ return pick(
2216
+ sex,
2217
+ `${prefix}onkel`,
2218
+ `${prefix}tante`,
2219
+ `${prefix}onkel/tante`
2220
+ );
2184
2221
  }
2185
2222
  nibling() {
2186
- const prefix = this.directPrefix();
2187
- if (this.personN?.isMale()) {
2188
- return `${prefix}neffe`;
2189
- }
2190
- if (this.personN?.isFemale()) {
2191
- return `${prefix}nichte`;
2223
+ const level = Math.abs(this.pathN?.level ?? 0);
2224
+ const sex = sexOf(this.personN);
2225
+ if (level <= 1) {
2226
+ return pick(sex, "Neffe", "Nichte", "Neffe/Nichte");
2192
2227
  }
2193
- return `${prefix}neffe/nichte`;
2228
+ const prefix = `${ur(level - 2)}Gro\xDF`;
2229
+ return pick(
2230
+ sex,
2231
+ `${prefix}neffe`,
2232
+ `${prefix}nichte`,
2233
+ `${prefix}neffe/nichte`
2234
+ );
2194
2235
  }
2195
2236
  parent() {
2196
- const prefix = this.directPrefix();
2197
- if (this.personN?.isMale()) {
2198
- return `${prefix}vater`;
2199
- }
2200
- if (this.personN?.isFemale()) {
2201
- return `${prefix}mutter`;
2237
+ const level = Math.abs(this.pathN?.level ?? 0);
2238
+ const sex = sexOf(this.personN);
2239
+ if (level <= 1) {
2240
+ return pick(sex, "Vater", "Mutter", "Elternteil");
2202
2241
  }
2203
- return `${prefix}elternteil`;
2242
+ const prefix = `${ur(level - 2)}Gro\xDF`;
2243
+ return pick(
2244
+ sex,
2245
+ `${prefix}vater`,
2246
+ `${prefix}mutter`,
2247
+ `${prefix}elternteil`
2248
+ );
2204
2249
  }
2205
2250
  child() {
2206
- const prefix = this.directPrefix();
2207
- if (this.personN?.isMale()) {
2208
- return `${prefix}sohn`;
2209
- }
2210
- if (this.personN?.isFemale()) {
2211
- return `${prefix}tochter`;
2251
+ const level = Math.abs(this.pathN?.level ?? 0);
2252
+ const sex = sexOf(this.personN);
2253
+ if (level <= 1) {
2254
+ return pick(sex, "Sohn", "Tochter", "Kind");
2212
2255
  }
2213
- return `${prefix}kind`;
2256
+ const prefix = ur(level - 2);
2257
+ return pick(
2258
+ sex,
2259
+ `${prefix}Enkel`,
2260
+ `${prefix}Enkelin`,
2261
+ `${prefix}Enkelkind`
2262
+ );
2214
2263
  }
2215
2264
  sibling() {
2216
- if (this.personN?.isMale()) {
2217
- return "bruder";
2218
- }
2219
- if (this.personN?.isFemale()) {
2220
- return "schwester";
2221
- }
2222
- return "geschwister";
2265
+ return pick(sexOf(this.personN), "Bruder", "Schwester", "Geschwister");
2223
2266
  }
2224
2267
  halfBlood(relation) {
2225
2268
  if (!relation || !this.isHalfBlood) {
2226
2269
  return relation ?? "";
2227
2270
  }
2228
- if (/^[A-ZÄÖÜ]/.test(relation) || /[-\s]/.test(relation)) {
2271
+ if (/[\s-]/.test(relation) || /^(Groß|Ur)/.test(relation)) {
2229
2272
  return `Halb-${relation}`;
2230
2273
  }
2231
- return `Halb${relation}`;
2274
+ return `Halb${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
2232
2275
  }
2233
2276
  spouse() {
2234
- if (this.personN?.isMale()) {
2235
- return "Ehemann";
2236
- }
2237
- if (this.personN?.isFemale()) {
2238
- return "Ehefrau";
2239
- }
2240
- return "Ehepartner";
2277
+ return pick(sexOf(this.personN), "Ehemann", "Ehefrau", "Ehepartner");
2241
2278
  }
2242
2279
  ofSpouse(relation) {
2243
2280
  if (!relation) {
2244
2281
  return "";
2245
2282
  }
2246
- const spouse = this.path?.[1].indi;
2247
- let spouseType = "Ehepartner";
2248
- if (spouse?.isMale()) {
2249
- spouseType = "Ehemann";
2250
- }
2251
- if (spouse?.isFemale()) {
2252
- spouseType = "Ehefrau";
2253
- }
2254
- return `${relation} des ${spouseType}s`;
2283
+ const spouseType = pick(
2284
+ sexOf(this.path?.[1].indi),
2285
+ "Ehemann",
2286
+ "Ehefrau",
2287
+ "Ehepartner"
2288
+ );
2289
+ return `${relation} ${genitiveArticle(spouseType)}`;
2255
2290
  }
2256
2291
  spouseOf(relation) {
2257
2292
  if (!relation) {
2258
2293
  return "";
2259
2294
  }
2260
- const spouse = this.path?.[this.path.length - 1].indi;
2261
- let spouseType = "Ehepartner";
2262
- if (spouse?.isMale()) {
2263
- spouseType = "Ehemann";
2264
- }
2265
- if (spouse?.isFemale()) {
2266
- spouseType = "Ehefrau";
2267
- }
2295
+ const spouseType = pick(
2296
+ sexOf(this.path?.[this.path.length - 1].indi),
2297
+ "Ehemann",
2298
+ "Ehefrau",
2299
+ "Ehepartner"
2300
+ );
2268
2301
  return `${spouseType} von ${relation}`;
2269
2302
  }
2270
2303
  of(relation) {
@@ -2282,8 +2315,8 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
2282
2315
  if (!name || !relation) {
2283
2316
  return relation ?? "";
2284
2317
  }
2285
- if (relation.includes(" des ") || relation.includes(" von ")) {
2286
- return relation.replace(/ (des|von) /, ` $1 ${name}s `);
2318
+ if (relation.includes(" des ") || relation.includes(" der ") || relation.includes(" von ")) {
2319
+ return relation.replace(/ (des|der|von) /, ` $1 ${name}s `);
2287
2320
  }
2288
2321
  return `${name}s ${relation}`;
2289
2322
  }
@@ -2313,50 +2346,82 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
2313
2346
  if (!relation || !this.pathN?.relation) {
2314
2347
  return relation ?? "";
2315
2348
  }
2316
- return `${this.pathN.relation} ${relation}`;
2349
+ const prefix = parentRelationsDe[this.pathN.relation];
2350
+ if (!prefix) {
2351
+ return relation;
2352
+ }
2353
+ if (prefix.endsWith("-") || prefix.endsWith(" ")) {
2354
+ return `${prefix}${relation}`;
2355
+ }
2356
+ return `${prefix}${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
2317
2357
  }
2318
2358
  };
2319
2359
 
2320
2360
  // src/kinship-translator/patterns.fr.ts
2361
+ var parentRelationsFr = {
2362
+ step: "step",
2363
+ foster: "foster",
2364
+ adopted: "adopted"
2365
+ };
2321
2366
  var InLawsFr = {
2322
2367
  "conjoint de (enfant|fille|fils)": "beau-fils/belle-fille",
2323
2368
  "\xE9pouse de (enfant|fille|fils)": "belle-fille",
2324
2369
  "mari de (enfant|fille|fils)": "gendre",
2325
- "m\xE8re du (conjoint|\xE9pouse|mari)": "belle-m\xE8re",
2326
- "p\xE8re du (conjoint|\xE9pouse|mari)": "beau-p\xE8re",
2327
- "parent du (conjoint|\xE9pouse|mari)": "beau-parent",
2370
+ "m\xE8re (du mari|du conjoint|de l'\xE9pouse)": "belle-m\xE8re",
2371
+ "p\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-p\xE8re",
2372
+ "parent (du mari|du conjoint|de l'\xE9pouse)": "beau-parent",
2328
2373
  "\xE9pouse de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "belle-s\u0153ur",
2329
2374
  "mari de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re",
2330
2375
  "conjoint de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re/belle-s\u0153ur",
2331
- "(demi-)?s\u0153ur du (conjoint|\xE9pouse|mari)": "belle-s\u0153ur",
2332
- "(demi-)?fr\xE8re du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re",
2333
- "(demi-)?fr\xE8re/s\u0153ur du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re/belle-s\u0153ur"
2376
+ "(demi-)?s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "belle-s\u0153ur",
2377
+ "(demi-)?fr\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re",
2378
+ "(demi-)?fr\xE8re/s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re/belle-s\u0153ur"
2334
2379
  };
2335
2380
 
2336
2381
  // src/kinship-translator/kinship-translator.fr.ts
2337
- var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
2338
- directPrefix() {
2339
- const level = Math.abs(this.pathN?.level ?? 0);
2340
- if (level <= 1) {
2341
- return "";
2342
- }
2343
- if (level === 2) {
2344
- return "grand-";
2345
- }
2346
- if (level === 3) {
2347
- return "arri\xE8re-grand-";
2348
- }
2349
- return `arri\xE8re${level - 2}-grand-`;
2382
+ var sexOf2 = (person) => {
2383
+ if (person?.isMale?.()) {
2384
+ return "m";
2385
+ }
2386
+ if (person?.isFemale?.()) {
2387
+ return "f";
2388
+ }
2389
+ return "n";
2390
+ };
2391
+ var pick2 = (sex, male, female, neutral) => {
2392
+ if (sex === "m") {
2393
+ return male;
2350
2394
  }
2395
+ if (sex === "f") {
2396
+ return female;
2397
+ }
2398
+ return neutral;
2399
+ };
2400
+ var arriere = (count) => count > 0 ? "arri\xE8re-".repeat(count) : "";
2401
+ var frenchOrdinal = (n) => n === 1 ? "1er" : `${n}e`;
2402
+ var isFeminineRelation = (relation) => /mère|fille|sœur|tante|nièce|cousine|épouse/.test(relation);
2403
+ var ofSpousePrep = (spouseType) => {
2404
+ if (spouseType === "\xE9pouse") {
2405
+ return "de l'";
2406
+ }
2407
+ return "du ";
2408
+ };
2409
+ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
2351
2410
  indirect() {
2352
2411
  let degree = Math.abs(this.pathN?.degree ?? 0);
2353
2412
  if (degree > 0) {
2354
2413
  degree = degree - 1;
2355
2414
  }
2356
- if (degree === 1) {
2357
- return `cousin`;
2415
+ const cousin = pick2(
2416
+ sexOf2(this.personN),
2417
+ "cousin",
2418
+ "cousine",
2419
+ "cousin/cousine"
2420
+ );
2421
+ if (degree <= 1) {
2422
+ return cousin;
2358
2423
  }
2359
- return `cousin au ${ordinalize(degree)} degr\xE9`;
2424
+ return `${cousin} au ${frenchOrdinal(degree)} degr\xE9`;
2360
2425
  }
2361
2426
  removal() {
2362
2427
  const level = this.pathN?.level ?? 0;
@@ -2367,56 +2432,57 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
2367
2432
  if (!degree) {
2368
2433
  return level < 0 ? this.nibling() : this.auncle();
2369
2434
  }
2370
- return `cousin au ${ordinalize(degree)} degr\xE9 ${Math.abs(level)}\xD7 \xE9loign\xE9`;
2435
+ return `${this.indirect()} ${Math.abs(level)}\xD7 \xE9loign\xE9`;
2371
2436
  }
2372
2437
  auncle() {
2373
- const prefix = this.directPrefix();
2374
- if (this.personN?.isMale()) {
2375
- return `${prefix}oncle`;
2376
- }
2377
- if (this.personN?.isFemale()) {
2378
- return `${prefix}tante`;
2438
+ const level = Math.abs(this.pathN?.level ?? 0);
2439
+ const sex = sexOf2(this.personN);
2440
+ const base = pick2(sex, "oncle", "tante", "oncle/tante");
2441
+ if (level <= 1) {
2442
+ return base;
2379
2443
  }
2380
- return `${prefix}oncle/tante`;
2444
+ const grands = pick2(
2445
+ sex,
2446
+ "grand-oncle",
2447
+ "grand-tante",
2448
+ "grand-oncle/tante"
2449
+ );
2450
+ return `${arriere(level - 2)}${grands}`;
2381
2451
  }
2382
2452
  nibling() {
2383
- const prefix = this.directPrefix();
2384
- if (this.personN?.isMale()) {
2385
- return `${prefix}neveu`;
2386
- }
2387
- if (this.personN?.isFemale()) {
2388
- return `${prefix}ni\xE8ce`;
2453
+ const level = Math.abs(this.pathN?.level ?? 0);
2454
+ const sex = sexOf2(this.personN);
2455
+ if (level <= 1) {
2456
+ return pick2(sex, "neveu", "ni\xE8ce", "neveu/ni\xE8ce");
2389
2457
  }
2390
- return `${prefix}neveu/ni\xE8ce`;
2458
+ const grands = pick2(
2459
+ sex,
2460
+ "grand-neveu",
2461
+ "grande-ni\xE8ce",
2462
+ "grand-neveu/grande-ni\xE8ce"
2463
+ );
2464
+ return `${arriere(level - 2)}${grands}`;
2391
2465
  }
2392
2466
  parent() {
2393
- const prefix = this.directPrefix();
2394
- if (this.personN?.isMale()) {
2395
- return `${prefix}p\xE8re`;
2396
- }
2397
- if (this.personN?.isFemale()) {
2398
- return `${prefix}m\xE8re`;
2467
+ const level = Math.abs(this.pathN?.level ?? 0);
2468
+ const sex = sexOf2(this.personN);
2469
+ if (level <= 1) {
2470
+ return pick2(sex, "p\xE8re", "m\xE8re", "parent");
2399
2471
  }
2400
- return `${prefix}parent`;
2472
+ const grands = pick2(sex, "grand-p\xE8re", "grand-m\xE8re", "grand-parent");
2473
+ return `${arriere(level - 2)}${grands}`;
2401
2474
  }
2402
2475
  child() {
2403
- const prefix = this.directPrefix();
2404
- if (this.personN?.isMale()) {
2405
- return `${prefix}fils`;
2406
- }
2407
- if (this.personN?.isFemale()) {
2408
- return `${prefix}fille`;
2476
+ const level = Math.abs(this.pathN?.level ?? 0);
2477
+ const sex = sexOf2(this.personN);
2478
+ if (level <= 1) {
2479
+ return pick2(sex, "fils", "fille", "enfant");
2409
2480
  }
2410
- return `${prefix}enfant`;
2481
+ const petits = pick2(sex, "petit-fils", "petite-fille", "petit-enfant");
2482
+ return `${arriere(level - 2)}${petits}`;
2411
2483
  }
2412
2484
  sibling() {
2413
- if (this.personN?.isMale()) {
2414
- return "fr\xE8re";
2415
- }
2416
- if (this.personN?.isFemale()) {
2417
- return "s\u0153ur";
2418
- }
2419
- return "fr\xE8re/s\u0153ur";
2485
+ return pick2(sexOf2(this.personN), "fr\xE8re", "s\u0153ur", "fr\xE8re/s\u0153ur");
2420
2486
  }
2421
2487
  halfBlood(relation) {
2422
2488
  if (!relation || !this.isHalfBlood) {
@@ -2425,40 +2491,30 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
2425
2491
  return `demi-${relation}`;
2426
2492
  }
2427
2493
  spouse() {
2428
- if (this.personN?.isMale()) {
2429
- return "mari";
2430
- }
2431
- if (this.personN?.isFemale()) {
2432
- return "\xE9pouse";
2433
- }
2434
- return "conjoint";
2494
+ return pick2(sexOf2(this.personN), "mari", "\xE9pouse", "conjoint");
2435
2495
  }
2436
2496
  ofSpouse(relation) {
2437
2497
  if (!relation) {
2438
2498
  return "";
2439
2499
  }
2440
- const spouse = this.path?.[1].indi;
2441
- let spouseType = "conjoint";
2442
- if (spouse?.isMale()) {
2443
- spouseType = "mari";
2444
- }
2445
- if (spouse?.isFemale()) {
2446
- spouseType = "\xE9pouse";
2447
- }
2448
- return `${relation} du ${spouseType}`;
2500
+ const spouseType = pick2(
2501
+ sexOf2(this.path?.[1].indi),
2502
+ "mari",
2503
+ "\xE9pouse",
2504
+ "conjoint"
2505
+ );
2506
+ return `${relation} ${ofSpousePrep(spouseType)}${spouseType}`;
2449
2507
  }
2450
2508
  spouseOf(relation) {
2451
2509
  if (!relation) {
2452
2510
  return "";
2453
2511
  }
2454
- const spouse = this.path?.[this.path.length - 1].indi;
2455
- let spouseType = "conjoint";
2456
- if (spouse?.isMale()) {
2457
- spouseType = "mari";
2458
- }
2459
- if (spouse?.isFemale()) {
2460
- spouseType = "\xE9pouse";
2461
- }
2512
+ const spouseType = pick2(
2513
+ sexOf2(this.path?.[this.path.length - 1].indi),
2514
+ "mari",
2515
+ "\xE9pouse",
2516
+ "conjoint"
2517
+ );
2462
2518
  return `${spouseType} de ${relation}`;
2463
2519
  }
2464
2520
  of(relation) {
@@ -2479,6 +2535,9 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
2479
2535
  if (relation.includes(" du ") || relation.includes(" de ")) {
2480
2536
  return relation.replace(/ (du|de) /, ` $1 ${name} `);
2481
2537
  }
2538
+ if (relation.includes(" de l'")) {
2539
+ return relation.replace(" de l'", ` de ${name} l'`);
2540
+ }
2482
2541
  return `${relation} de ${name}`;
2483
2542
  }
2484
2543
  inLaw(relation) {
@@ -2507,50 +2566,118 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
2507
2566
  if (!relation || !this.pathN?.relation) {
2508
2567
  return relation ?? "";
2509
2568
  }
2510
- return `${this.pathN.relation} ${relation}`;
2569
+ const kind = parentRelationsFr[this.pathN.relation];
2570
+ if (!kind) {
2571
+ return relation;
2572
+ }
2573
+ if (kind === "step") {
2574
+ return `${isFeminineRelation(relation) ? "belle-" : "beau-"}${relation}`;
2575
+ }
2576
+ if (kind === "adopted") {
2577
+ return `${relation} ${isFeminineRelation(relation) ? "adoptive" : "adoptif"}`;
2578
+ }
2579
+ if (kind === "foster") {
2580
+ return `${relation} d'accueil`;
2581
+ }
2582
+ return relation;
2511
2583
  }
2512
2584
  };
2513
2585
 
2514
2586
  // src/kinship-translator/patterns.es.ts
2587
+ var parentRelationsEs = {
2588
+ step: {
2589
+ padre: "padrastro",
2590
+ madre: "madrastra",
2591
+ hijo: "hijastro",
2592
+ hija: "hijastra",
2593
+ hermano: "hermanastro",
2594
+ hermana: "hermanastra",
2595
+ abuelo: "abuelastro",
2596
+ abuela: "abuelastra"
2597
+ }
2598
+ };
2515
2599
  var InLawsEs = {
2516
2600
  "c\xF3nyuge de (hijo/hija|hija|hijo)": "yerno/nuera",
2517
2601
  "esposa de (hijo/hija|hija|hijo)": "nuera",
2518
2602
  "esposo de (hijo/hija|hija|hijo)": "yerno",
2519
- "madre del (c\xF3nyuge|esposa|esposo)": "suegra",
2520
- "padre del (c\xF3nyuge|esposa|esposo)": "suegro",
2521
- "padre/madre del (c\xF3nyuge|esposa|esposo)": "suegro/suegra",
2603
+ "madre (del c\xF3nyuge|del esposo|de la esposa)": "suegra",
2604
+ "padre (del c\xF3nyuge|del esposo|de la esposa)": "suegro",
2605
+ "padre/madre (del c\xF3nyuge|del esposo|de la esposa)": "suegro/suegra",
2522
2606
  "esposa de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
2523
2607
  "esposo de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
2524
2608
  "c\xF3nyuge de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
2525
- "(medio |media |medio/a )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
2526
- "(medio |media |medio/a )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
2527
- "(medio |media |medio/a )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
2609
+ "(medio |media |medio/a )?hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ada",
2610
+ "(medio |media |medio/a )?hermano (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado",
2611
+ "(medio |media |medio/a )?hermano/hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado/cu\xF1ada"
2528
2612
  };
2529
2613
 
2530
2614
  // src/kinship-translator/kinship-translator.es.ts
2531
- var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
2532
- directPrefix() {
2533
- const level = Math.abs(this.pathN?.level ?? 0);
2534
- if (level <= 1) {
2535
- return "";
2536
- }
2537
- if (level === 2) {
2538
- return "bisabuel";
2539
- }
2540
- if (level === 3) {
2541
- return "tatarabuel";
2542
- }
2543
- return `t\xE1tara${level - 2}-abuel`;
2615
+ var sexOf3 = (person) => {
2616
+ if (person?.isMale?.()) {
2617
+ return "m";
2618
+ }
2619
+ if (person?.isFemale?.()) {
2620
+ return "f";
2621
+ }
2622
+ return "n";
2623
+ };
2624
+ var pick3 = (sex, male, female, neutral) => {
2625
+ if (sex === "m") {
2626
+ return male;
2544
2627
  }
2628
+ if (sex === "f") {
2629
+ return female;
2630
+ }
2631
+ return neutral;
2632
+ };
2633
+ var SPANISH_ORDINALS_M = [
2634
+ "",
2635
+ "",
2636
+ "segundo",
2637
+ "tercero",
2638
+ "cuarto",
2639
+ "quinto",
2640
+ "sexto",
2641
+ "s\xE9ptimo",
2642
+ "octavo",
2643
+ "noveno",
2644
+ "d\xE9cimo"
2645
+ ];
2646
+ var SPANISH_ORDINALS_F = [
2647
+ "",
2648
+ "",
2649
+ "segunda",
2650
+ "tercera",
2651
+ "cuarta",
2652
+ "quinta",
2653
+ "sexta",
2654
+ "s\xE9ptima",
2655
+ "octava",
2656
+ "novena",
2657
+ "d\xE9cima"
2658
+ ];
2659
+ var spanishOrdinal = (n, sex) => {
2660
+ const list = sex === "f" ? SPANISH_ORDINALS_F : SPANISH_ORDINALS_M;
2661
+ return list[n] ?? `${n}.\xBA`;
2662
+ };
2663
+ var ofSpousePrep2 = (spouseType) => {
2664
+ if (spouseType === "esposa") {
2665
+ return "de la ";
2666
+ }
2667
+ return "del ";
2668
+ };
2669
+ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
2545
2670
  indirect() {
2546
2671
  let degree = Math.abs(this.pathN?.degree ?? 0);
2547
2672
  if (degree > 0) {
2548
2673
  degree = degree - 1;
2549
2674
  }
2550
- if (degree === 1) {
2551
- return `primo`;
2675
+ const sex = sexOf3(this.personN);
2676
+ const cousin = pick3(sex, "primo", "prima", "primo/prima");
2677
+ if (degree <= 1) {
2678
+ return cousin;
2552
2679
  }
2553
- return `primo ${ordinalize(degree)}`;
2680
+ return `${cousin} ${spanishOrdinal(degree, sex)}`;
2554
2681
  }
2555
2682
  removal() {
2556
2683
  const level = this.pathN?.level ?? 0;
@@ -2561,56 +2688,133 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
2561
2688
  if (!degree) {
2562
2689
  return level < 0 ? this.nibling() : this.auncle();
2563
2690
  }
2564
- return `primo ${ordinalize(degree)} ${Math.abs(level)}\xD7 separado`;
2691
+ return `${this.indirect()} ${Math.abs(level)}\xD7 separado`;
2565
2692
  }
2566
2693
  auncle() {
2567
- const prefix = this.directPrefix();
2568
- if (this.personN?.isMale()) {
2569
- return `${prefix}t\xEDo`;
2694
+ const level = Math.abs(this.pathN?.level ?? 0);
2695
+ const sex = sexOf3(this.personN);
2696
+ if (level <= 1) {
2697
+ return pick3(sex, "t\xEDo", "t\xEDa", "t\xEDo/t\xEDa");
2570
2698
  }
2571
- if (this.personN?.isFemale()) {
2572
- return `${prefix}t\xEDa`;
2699
+ if (level === 2) {
2700
+ return pick3(sex, "t\xEDo abuelo", "t\xEDa abuela", "t\xEDo/t\xEDa abuelo");
2701
+ }
2702
+ if (level === 3) {
2703
+ return pick3(
2704
+ sex,
2705
+ "t\xEDo bisabuelo",
2706
+ "t\xEDa bisabuela",
2707
+ "t\xEDo/t\xEDa bisabuelo"
2708
+ );
2573
2709
  }
2574
- return `${prefix}t\xEDo/t\xEDa`;
2710
+ return pick3(
2711
+ sex,
2712
+ `t\xEDo abuelo (${level - 1}.\xBA)`,
2713
+ `t\xEDa abuela (${level - 1}.\xAA)`,
2714
+ `t\xEDo/t\xEDa abuelo (${level - 1}.\xBA)`
2715
+ );
2575
2716
  }
2576
2717
  nibling() {
2577
- const prefix = this.directPrefix();
2578
- if (this.personN?.isMale()) {
2579
- return `${prefix}sobrino`;
2718
+ const level = Math.abs(this.pathN?.level ?? 0);
2719
+ const sex = sexOf3(this.personN);
2720
+ if (level <= 1) {
2721
+ return pick3(sex, "sobrino", "sobrina", "sobrino/sobrina");
2580
2722
  }
2581
- if (this.personN?.isFemale()) {
2582
- return `${prefix}sobrina`;
2723
+ if (level === 2) {
2724
+ return pick3(
2725
+ sex,
2726
+ "sobrino nieto",
2727
+ "sobrina nieta",
2728
+ "sobrino/sobrina nieto"
2729
+ );
2583
2730
  }
2584
- return `${prefix}sobrino/sobrina`;
2731
+ if (level === 3) {
2732
+ return pick3(
2733
+ sex,
2734
+ "sobrino bisnieto",
2735
+ "sobrina bisnieta",
2736
+ "sobrino/sobrina bisnieto"
2737
+ );
2738
+ }
2739
+ return pick3(
2740
+ sex,
2741
+ `sobrino nieto (${level - 1}.\xBA)`,
2742
+ `sobrina nieta (${level - 1}.\xAA)`,
2743
+ `sobrino/sobrina nieto (${level - 1}.\xBA)`
2744
+ );
2585
2745
  }
2586
2746
  parent() {
2587
- const prefix = this.directPrefix();
2588
- if (this.personN?.isMale()) {
2589
- return `${prefix}padre`;
2747
+ const level = Math.abs(this.pathN?.level ?? 0);
2748
+ const sex = sexOf3(this.personN);
2749
+ if (level <= 1) {
2750
+ return pick3(sex, "padre", "madre", "padre/madre");
2590
2751
  }
2591
- if (this.personN?.isFemale()) {
2592
- return `${prefix}madre`;
2752
+ if (level === 2) {
2753
+ return pick3(sex, "abuelo", "abuela", "abuelo/abuela");
2754
+ }
2755
+ if (level === 3) {
2756
+ return pick3(sex, "bisabuelo", "bisabuela", "bisabuelo/bisabuela");
2593
2757
  }
2594
- return `${prefix}padre/madre`;
2758
+ if (level === 4) {
2759
+ return pick3(
2760
+ sex,
2761
+ "tatarabuelo",
2762
+ "tatarabuela",
2763
+ "tatarabuelo/tatarabuela"
2764
+ );
2765
+ }
2766
+ if (level === 5) {
2767
+ return pick3(
2768
+ sex,
2769
+ "trastatarabuelo",
2770
+ "trastatarabuela",
2771
+ "trastatarabuelo/trastatarabuela"
2772
+ );
2773
+ }
2774
+ return pick3(
2775
+ sex,
2776
+ `abuelo (${level}.\xBA)`,
2777
+ `abuela (${level}.\xAA)`,
2778
+ `abuelo/abuela (${level}.\xBA)`
2779
+ );
2595
2780
  }
2596
2781
  child() {
2597
- const prefix = this.directPrefix();
2598
- if (this.personN?.isMale()) {
2599
- return `${prefix}hijo`;
2782
+ const level = Math.abs(this.pathN?.level ?? 0);
2783
+ const sex = sexOf3(this.personN);
2784
+ if (level <= 1) {
2785
+ return pick3(sex, "hijo", "hija", "hijo/hija");
2600
2786
  }
2601
- if (this.personN?.isFemale()) {
2602
- return `${prefix}hija`;
2787
+ if (level === 2) {
2788
+ return pick3(sex, "nieto", "nieta", "nieto/nieta");
2603
2789
  }
2604
- return `${prefix}hijo/hija`;
2605
- }
2606
- sibling() {
2607
- if (this.personN?.isMale()) {
2608
- return "hermano";
2790
+ if (level === 3) {
2791
+ return pick3(sex, "bisnieto", "bisnieta", "bisnieto/bisnieta");
2609
2792
  }
2610
- if (this.personN?.isFemale()) {
2611
- return "hermana";
2793
+ if (level === 4) {
2794
+ return pick3(
2795
+ sex,
2796
+ "tataranieto",
2797
+ "tataranieta",
2798
+ "tataranieto/tataranieta"
2799
+ );
2800
+ }
2801
+ if (level === 5) {
2802
+ return pick3(
2803
+ sex,
2804
+ "trastataranieto",
2805
+ "trastataranieta",
2806
+ "trastataranieto/trastataranieta"
2807
+ );
2612
2808
  }
2613
- return "hermano/hermana";
2809
+ return pick3(
2810
+ sex,
2811
+ `nieto (${level}.\xBA)`,
2812
+ `nieta (${level}.\xAA)`,
2813
+ `nieto/nieta (${level}.\xBA)`
2814
+ );
2815
+ }
2816
+ sibling() {
2817
+ return pick3(sexOf3(this.personN), "hermano", "hermana", "hermano/hermana");
2614
2818
  }
2615
2819
  halfBlood(relation) {
2616
2820
  if (!relation || !this.isHalfBlood) {
@@ -2625,40 +2829,30 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
2625
2829
  return `medio/a ${relation}`;
2626
2830
  }
2627
2831
  spouse() {
2628
- if (this.personN?.isMale()) {
2629
- return "esposo";
2630
- }
2631
- if (this.personN?.isFemale()) {
2632
- return "esposa";
2633
- }
2634
- return "c\xF3nyuge";
2832
+ return pick3(sexOf3(this.personN), "esposo", "esposa", "c\xF3nyuge");
2635
2833
  }
2636
2834
  ofSpouse(relation) {
2637
2835
  if (!relation) {
2638
2836
  return "";
2639
2837
  }
2640
- const spouse = this.path?.[1].indi;
2641
- let spouseType = "c\xF3nyuge";
2642
- if (spouse?.isMale()) {
2643
- spouseType = "esposo";
2644
- }
2645
- if (spouse?.isFemale()) {
2646
- spouseType = "esposa";
2647
- }
2648
- return `${relation} del ${spouseType}`;
2838
+ const spouseType = pick3(
2839
+ sexOf3(this.path?.[1].indi),
2840
+ "esposo",
2841
+ "esposa",
2842
+ "c\xF3nyuge"
2843
+ );
2844
+ return `${relation} ${ofSpousePrep2(spouseType)}${spouseType}`;
2649
2845
  }
2650
2846
  spouseOf(relation) {
2651
2847
  if (!relation) {
2652
2848
  return "";
2653
2849
  }
2654
- const spouse = this.path?.[this.path.length - 1].indi;
2655
- let spouseType = "c\xF3nyuge";
2656
- if (spouse?.isMale()) {
2657
- spouseType = "esposo";
2658
- }
2659
- if (spouse?.isFemale()) {
2660
- spouseType = "esposa";
2661
- }
2850
+ const spouseType = pick3(
2851
+ sexOf3(this.path?.[this.path.length - 1].indi),
2852
+ "esposo",
2853
+ "esposa",
2854
+ "c\xF3nyuge"
2855
+ );
2662
2856
  return `${spouseType} de ${relation}`;
2663
2857
  }
2664
2858
  of(relation) {
@@ -2676,8 +2870,8 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
2676
2870
  if (!name || !relation) {
2677
2871
  return relation ?? "";
2678
2872
  }
2679
- if (relation.includes(" del ") || relation.includes(" de ")) {
2680
- return relation.replace(/ (del|de) /, ` $1 ${name} `);
2873
+ if (relation.includes(" del ") || relation.includes(" de la ") || relation.includes(" de ")) {
2874
+ return relation.replace(/ (del|de la|de) /, ` $1 ${name} `);
2681
2875
  }
2682
2876
  return `${relation} de ${name}`;
2683
2877
  }
@@ -2707,7 +2901,20 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
2707
2901
  if (!relation || !this.pathN?.relation) {
2708
2902
  return relation ?? "";
2709
2903
  }
2710
- return `${this.pathN.relation} ${relation}`;
2904
+ const mapped = parentRelationsEs[this.pathN.relation]?.[relation];
2905
+ if (mapped) {
2906
+ return mapped;
2907
+ }
2908
+ if (this.pathN.relation === "step") {
2909
+ return `${relation} pol\xEDtico`;
2910
+ }
2911
+ if (this.pathN.relation === "adopted") {
2912
+ return `${relation} adoptivo`;
2913
+ }
2914
+ if (this.pathN.relation === "foster") {
2915
+ return `${relation} de acogida`;
2916
+ }
2917
+ return relation;
2711
2918
  }
2712
2919
  };
2713
2920
 
@@ -2716,15 +2923,35 @@ var InLawsRu = {
2716
2923
  "\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",
2717
2924
  "\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",
2718
2925
  "\u043C\u0443\u0436 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C",
2719
- "\u043C\u0430\u0442\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0451\u0449\u0430",
2720
- "\u043E\u0442\u0435\u0446 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C",
2721
- "\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",
2926
+ "\u043C\u0430\u0442\u044C \u0436\u0435\u043D\u044B": "\u0442\u0451\u0449\u0430",
2927
+ "\u043C\u0430\u0442\u044C \u043C\u0443\u0436\u0430": "\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
2928
+ "\u043C\u0430\u0442\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0451\u0449\u0430/\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
2929
+ "\u043E\u0442\u0435\u0446 \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C",
2930
+ "\u043E\u0442\u0435\u0446 \u043C\u0443\u0436\u0430": "\u0441\u0432\u0451\u043A\u043E\u0440",
2931
+ "\u043E\u0442\u0435\u0446 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0441\u0432\u0451\u043A\u043E\u0440",
2932
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
2933
+ "\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",
2934
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
2722
2935
  "\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",
2723
2936
  "\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",
2724
2937
  "\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",
2725
- "(\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",
2726
- "(\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",
2727
- "(\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"
2938
+ "(\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",
2939
+ "(\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",
2940
+ "(\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",
2941
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u0436\u0435\u043D\u044B": "\u0448\u0443\u0440\u0438\u043D",
2942
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u043C\u0443\u0436\u0430": "\u0434\u0435\u0432\u0435\u0440\u044C",
2943
+ "(\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",
2944
+ "(\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",
2945
+ "(\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",
2946
+ "(\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"
2947
+ };
2948
+ var parentRelationsRu = {
2949
+ step: {
2950
+ \u043E\u0442\u0435\u0446: "\u043E\u0442\u0447\u0438\u043C",
2951
+ \u043C\u0430\u0442\u044C: "\u043C\u0430\u0447\u0435\u0445\u0430",
2952
+ \u0441\u044B\u043D: "\u043F\u0430\u0441\u044B\u043D\u043E\u043A",
2953
+ \u0434\u043E\u0447\u044C: "\u043F\u0430\u0434\u0447\u0435\u0440\u0438\u0446\u0430"
2954
+ }
2728
2955
  };
2729
2956
 
2730
2957
  // src/kinship-translator/kinship-translator.ru.ts
@@ -2755,7 +2982,7 @@ var cousinWord = (degree, sex) => {
2755
2982
  return `${stem}\u044B\u0439 \u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430`;
2756
2983
  };
2757
2984
  var praRepeat = (count) => count > 0 ? "\u043F\u0440\u0430".repeat(count) : "";
2758
- var sexOf = (person) => {
2985
+ var sexOf4 = (person) => {
2759
2986
  if (person?.isMale?.()) {
2760
2987
  return "m";
2761
2988
  }
@@ -2770,7 +2997,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
2770
2997
  if (degree > 0) {
2771
2998
  degree = degree - 1;
2772
2999
  }
2773
- return cousinWord(degree, sexOf(this.personN));
3000
+ return cousinWord(degree, sexOf4(this.personN));
2774
3001
  }
2775
3002
  removal() {
2776
3003
  const level = this.pathN?.level ?? 0;
@@ -2782,35 +3009,53 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
2782
3009
  return level < 0 ? this.nibling() : this.auncle();
2783
3010
  }
2784
3011
  const removed = Math.abs(level);
2785
- return `${cousinWord(degree, sexOf(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
3012
+ return `${cousinWord(degree, sexOf4(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
2786
3013
  }
2787
3014
  auncle() {
2788
3015
  const level = Math.abs(this.pathN?.level ?? 0);
2789
- const pra = praRepeat(Math.max(0, level - 2));
2790
- const sex = sexOf(this.personN);
3016
+ const sex = sexOf4(this.personN);
3017
+ if (level <= 1) {
3018
+ if (sex === "m") {
3019
+ return "\u0434\u044F\u0434\u044F";
3020
+ }
3021
+ if (sex === "f") {
3022
+ return "\u0442\u0451\u0442\u044F";
3023
+ }
3024
+ return "\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F";
3025
+ }
3026
+ const pra = praRepeat(level - 2);
2791
3027
  if (sex === "m") {
2792
- return `${pra}\u0434\u044F\u0434\u044F`;
3028
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434`;
2793
3029
  }
2794
3030
  if (sex === "f") {
2795
- return `${pra}\u0442\u0451\u0442\u044F`;
3031
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u0430\u044F ${pra}\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
2796
3032
  }
2797
- return `${pra}\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F`;
3033
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434/\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
2798
3034
  }
2799
3035
  nibling() {
2800
3036
  const level = Math.abs(this.pathN?.level ?? 0);
2801
- const pra = praRepeat(Math.max(0, level - 2));
2802
- const sex = sexOf(this.personN);
3037
+ const sex = sexOf4(this.personN);
3038
+ if (level <= 1) {
3039
+ if (sex === "m") {
3040
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A";
3041
+ }
3042
+ if (sex === "f") {
3043
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
3044
+ }
3045
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
3046
+ }
3047
+ const pra = praRepeat(level - 2);
2803
3048
  if (sex === "m") {
2804
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
3049
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u044B\u0439 \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
2805
3050
  }
2806
3051
  if (sex === "f") {
2807
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
3052
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u0430\u044F \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
2808
3053
  }
2809
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
3054
+ 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`;
2810
3055
  }
2811
3056
  parent() {
2812
3057
  const level = Math.abs(this.pathN?.level ?? 0);
2813
- const sex = sexOf(this.personN);
3058
+ const sex = sexOf4(this.personN);
2814
3059
  if (level <= 1) {
2815
3060
  if (sex === "m") {
2816
3061
  return "\u043E\u0442\u0435\u0446";
@@ -2840,7 +3085,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
2840
3085
  }
2841
3086
  child() {
2842
3087
  const level = Math.abs(this.pathN?.level ?? 0);
2843
- const sex = sexOf(this.personN);
3088
+ const sex = sexOf4(this.personN);
2844
3089
  if (level <= 1) {
2845
3090
  if (sex === "m") {
2846
3091
  return "\u0441\u044B\u043D";
@@ -2869,14 +3114,14 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
2869
3114
  return `${pra}\u0432\u043D\u0443\u043A/\u0432\u043D\u0443\u0447\u043A\u0430`;
2870
3115
  }
2871
3116
  sibling() {
2872
- const sex = sexOf(this.personN);
3117
+ const sex = sexOf4(this.personN);
2873
3118
  if (sex === "m") {
2874
3119
  return "\u0431\u0440\u0430\u0442";
2875
3120
  }
2876
3121
  if (sex === "f") {
2877
3122
  return "\u0441\u0435\u0441\u0442\u0440\u0430";
2878
3123
  }
2879
- return "\u0441\u0438\u0431\u043B\u0438\u043D\u0433";
3124
+ return "\u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430";
2880
3125
  }
2881
3126
  halfBlood(relation) {
2882
3127
  if (!relation || !this.isHalfBlood) {
@@ -2890,7 +3135,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
2890
3135
  return `\u0441\u0432\u043E\u0434\u043D\u044B\u0439 ${relation}`;
2891
3136
  }
2892
3137
  spouse() {
2893
- const sex = sexOf(this.personN);
3138
+ const sex = sexOf4(this.personN);
2894
3139
  if (sex === "m") {
2895
3140
  return "\u043C\u0443\u0436";
2896
3141
  }
@@ -2904,7 +3149,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
2904
3149
  return "";
2905
3150
  }
2906
3151
  const spouse = this.path?.[1].indi;
2907
- const sex = sexOf(spouse);
3152
+ const sex = sexOf4(spouse);
2908
3153
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
2909
3154
  return `${relation} ${toGenitive(spouseType)}`;
2910
3155
  }
@@ -2913,7 +3158,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
2913
3158
  return "";
2914
3159
  }
2915
3160
  const spouse = this.path?.[this.path.length - 1].indi;
2916
- const sex = sexOf(spouse);
3161
+ const sex = sexOf4(spouse);
2917
3162
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
2918
3163
  return `${spouseType} ${toGenitive(relation)}`;
2919
3164
  }
@@ -2950,7 +3195,22 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
2950
3195
  if (!relation || !this.pathN?.relation) {
2951
3196
  return relation ?? "";
2952
3197
  }
2953
- return `${this.pathN.relation} ${relation}`;
3198
+ const mapped = parentRelationsRu[this.pathN.relation]?.[relation];
3199
+ if (mapped) {
3200
+ return mapped;
3201
+ }
3202
+ if (this.pathN.relation === "step") {
3203
+ return `\u043D\u0435\u0440\u043E\u0434\u043D\u043E\u0439 ${relation}`;
3204
+ }
3205
+ if (this.pathN.relation === "adopted") {
3206
+ return /сестра|дочь|мать|тётя|бабушка|жена|племянница|внучка/.test(
3207
+ relation
3208
+ ) ? `\u043F\u0440\u0438\u0451\u043C\u043D\u0430\u044F ${relation}` : `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
3209
+ }
3210
+ if (this.pathN.relation === "foster") {
3211
+ return `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
3212
+ }
3213
+ return relation;
2954
3214
  }
2955
3215
  };
2956
3216
 
@@ -2974,7 +3234,7 @@ var InLawsJa = {
2974
3234
  };
2975
3235
 
2976
3236
  // src/kinship-translator/kinship-translator.ja.ts
2977
- var sexOf2 = (person) => {
3237
+ var sexOf5 = (person) => {
2978
3238
  if (person?.isMale?.()) {
2979
3239
  return "m";
2980
3240
  }
@@ -2983,7 +3243,7 @@ var sexOf2 = (person) => {
2983
3243
  }
2984
3244
  return "n";
2985
3245
  };
2986
- var pick = (sex, male, female, neutral) => {
3246
+ var pick4 = (sex, male, female, neutral) => {
2987
3247
  if (sex === "m") {
2988
3248
  return male;
2989
3249
  }
@@ -2996,18 +3256,18 @@ var lineal = (level, sex, kind) => {
2996
3256
  const L = Math.max(1, level);
2997
3257
  if (kind === "asc") {
2998
3258
  if (L <= 1) {
2999
- return pick(sex, "\u7236", "\u6BCD", "\u89AA");
3259
+ return pick4(sex, "\u7236", "\u6BCD", "\u89AA");
3000
3260
  }
3001
3261
  if (L === 2) {
3002
- return pick(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
3262
+ return pick4(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
3003
3263
  }
3004
3264
  if (L === 3) {
3005
- return pick(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
3265
+ return pick4(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
3006
3266
  }
3007
3267
  if (L === 4) {
3008
- return pick(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
3268
+ return pick4(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
3009
3269
  }
3010
- return pick(
3270
+ return pick4(
3011
3271
  sex,
3012
3272
  `${L - 1}\u4E16\u306E\u7956\u7236`,
3013
3273
  `${L - 1}\u4E16\u306E\u7956\u6BCD`,
@@ -3015,7 +3275,7 @@ var lineal = (level, sex, kind) => {
3015
3275
  );
3016
3276
  }
3017
3277
  if (L <= 1) {
3018
- return pick(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
3278
+ return pick4(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
3019
3279
  }
3020
3280
  if (L === 2) {
3021
3281
  return "\u5B6B";
@@ -3062,52 +3322,52 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
3062
3322
  }
3063
3323
  auncle() {
3064
3324
  const level = Math.abs(this.pathN?.level ?? 0);
3065
- const sex = sexOf2(this.personN);
3066
- if (level <= 2) {
3067
- return pick(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
3325
+ const sex = sexOf5(this.personN);
3326
+ if (level <= 1) {
3327
+ return pick4(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
3068
3328
  }
3069
- if (level === 3) {
3070
- return pick(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
3329
+ if (level === 2) {
3330
+ return pick4(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
3071
3331
  }
3072
- return pick(
3332
+ return pick4(
3073
3333
  sex,
3074
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058`,
3075
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3070`,
3076
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
3334
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058`,
3335
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3070`,
3336
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
3077
3337
  );
3078
3338
  }
3079
3339
  nibling() {
3080
3340
  const level = Math.abs(this.pathN?.level ?? 0);
3081
- const sex = sexOf2(this.personN);
3082
- if (level <= 2) {
3083
- return pick(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
3341
+ const sex = sexOf5(this.personN);
3342
+ if (level <= 1) {
3343
+ return pick4(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
3084
3344
  }
3085
- if (level === 3) {
3086
- return pick(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
3345
+ if (level === 2) {
3346
+ return pick4(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
3087
3347
  }
3088
- return pick(
3348
+ return pick4(
3089
3349
  sex,
3090
- `${level - 2}\u4EE3\u4E0B\u306E\u7525`,
3091
- `${level - 2}\u4EE3\u4E0B\u306E\u59EA`,
3092
- `${level - 2}\u4EE3\u4E0B\u306E\u7525/\u59EA`
3350
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525`,
3351
+ `${level - 1}\u4EE3\u4E0B\u306E\u59EA`,
3352
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525/\u59EA`
3093
3353
  );
3094
3354
  }
3095
3355
  parent() {
3096
3356
  return lineal(
3097
3357
  Math.abs(this.pathN?.level ?? 0),
3098
- sexOf2(this.personN),
3358
+ sexOf5(this.personN),
3099
3359
  "asc"
3100
3360
  );
3101
3361
  }
3102
3362
  child() {
3103
3363
  return lineal(
3104
3364
  Math.abs(this.pathN?.level ?? 0),
3105
- sexOf2(this.personN),
3365
+ sexOf5(this.personN),
3106
3366
  "desc"
3107
3367
  );
3108
3368
  }
3109
3369
  sibling() {
3110
- return pick(sexOf2(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
3370
+ return pick4(sexOf5(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
3111
3371
  }
3112
3372
  halfBlood(relation) {
3113
3373
  if (!relation || !this.isHalfBlood) {
@@ -3116,14 +3376,14 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
3116
3376
  return `\u7570\u7236\u6BCD\u306E${relation}`;
3117
3377
  }
3118
3378
  spouse() {
3119
- return pick(sexOf2(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
3379
+ return pick4(sexOf5(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
3120
3380
  }
3121
3381
  ofSpouse(relation) {
3122
3382
  if (!relation) {
3123
3383
  return "";
3124
3384
  }
3125
- const spouseType = pick(
3126
- sexOf2(this.path?.[1].indi),
3385
+ const spouseType = pick4(
3386
+ sexOf5(this.path?.[1].indi),
3127
3387
  "\u592B",
3128
3388
  "\u59BB",
3129
3389
  "\u914D\u5076\u8005"
@@ -3135,7 +3395,7 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
3135
3395
  return "";
3136
3396
  }
3137
3397
  const spouse = this.path?.[this.path.length - 1].indi;
3138
- const spouseType = pick(sexOf2(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
3398
+ const spouseType = pick4(sexOf5(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
3139
3399
  return `${relation}\u306E${spouseType}`;
3140
3400
  }
3141
3401
  of(relation) {
@@ -3171,7 +3431,28 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
3171
3431
  if (!relation || !this.pathN?.relation) {
3172
3432
  return relation ?? "";
3173
3433
  }
3174
- return `${this.pathN.relation}\u306E${relation}`;
3434
+ if (this.pathN.relation === "step") {
3435
+ if (relation === "\u7236") {
3436
+ return "\u7EE7\u7236";
3437
+ }
3438
+ if (relation === "\u6BCD") {
3439
+ return "\u7D99\u6BCD";
3440
+ }
3441
+ if (relation === "\u606F\u5B50") {
3442
+ return "\u7D99\u5B50";
3443
+ }
3444
+ if (relation === "\u5A18") {
3445
+ return "\u7D99\u5A18";
3446
+ }
3447
+ return `\u7D99${relation}`;
3448
+ }
3449
+ if (this.pathN.relation === "adopted") {
3450
+ return `\u990A\u5B50\u306E${relation}`;
3451
+ }
3452
+ if (this.pathN.relation === "foster") {
3453
+ return `\u91CC\u89AA\u306E${relation}`;
3454
+ }
3455
+ return relation;
3175
3456
  }
3176
3457
  };
3177
3458
 
@@ -3180,22 +3461,32 @@ var InLawsZh = {
3180
3461
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u914D\u5076": "\u513F\u5AB3/\u5973\u5A7F",
3181
3462
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u59BB\u5B50": "\u513F\u5AB3",
3182
3463
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u4E08\u592B": "\u5973\u5A7F",
3183
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
3184
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
3185
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
3464
+ "\u59BB\u5B50\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD",
3465
+ "\u4E08\u592B\u7684\u6BCD\u4EB2": "\u5A46\u5A46",
3466
+ "(\u914D\u5076)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
3467
+ "\u59BB\u5B50\u7684\u7236\u4EB2": "\u5CB3\u7236",
3468
+ "\u4E08\u592B\u7684\u7236\u4EB2": "\u516C\u516C",
3469
+ "(\u914D\u5076)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
3470
+ "\u59BB\u5B50\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD",
3471
+ "\u4E08\u592B\u7684\u7236\u6BCD": "\u516C\u516C\u5A46\u5A46",
3472
+ "(\u914D\u5076)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
3186
3473
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u59BB\u5B50": "\u5AC2\u5B50/\u5F1F\u59B9",
3187
3474
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u4E08\u592B": "\u59D0\u592B/\u59B9\u592B",
3188
3475
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u914D\u5076": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
3189
3476
  "(\u5F02\u7236\u6BCD\u7684)?\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59D0\u592B/\u59B9\u592B",
3190
3477
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u5AC2\u5B50/\u5F1F\u59B9",
3191
3478
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
3192
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
3193
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
3479
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u59D0\u59B9": "\u59E8\u5B50",
3480
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u59D0\u59B9": "\u59D1\u5B50",
3481
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
3482
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u5144\u5F1F": "\u5185\u5144/\u5185\u5F1F",
3483
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4",
3484
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
3194
3485
  "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F\u59D0\u59B9": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9"
3195
3486
  };
3196
3487
 
3197
3488
  // src/kinship-translator/kinship-translator.zh.ts
3198
- var sexOf3 = (person) => {
3489
+ var sexOf6 = (person) => {
3199
3490
  if (person?.isMale?.()) {
3200
3491
  return "m";
3201
3492
  }
@@ -3204,7 +3495,7 @@ var sexOf3 = (person) => {
3204
3495
  }
3205
3496
  return "n";
3206
3497
  };
3207
- var pick2 = (sex, male, female, neutral) => {
3498
+ var pick5 = (sex, male, female, neutral) => {
3208
3499
  if (sex === "m") {
3209
3500
  return male;
3210
3501
  }
@@ -3217,41 +3508,41 @@ var lineal2 = (level, sex, kind) => {
3217
3508
  const L = Math.max(1, level);
3218
3509
  if (kind === "asc") {
3219
3510
  if (L <= 1) {
3220
- return pick2(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
3511
+ return pick5(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
3221
3512
  }
3222
3513
  if (L === 2) {
3223
- return pick2(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
3514
+ return pick5(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
3224
3515
  }
3225
3516
  if (L === 3) {
3226
- return pick2(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
3517
+ return pick5(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
3227
3518
  }
3228
3519
  if (L === 4) {
3229
- return pick2(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
3520
+ return pick5(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
3230
3521
  }
3231
- return pick2(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
3522
+ return pick5(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
3232
3523
  }
3233
3524
  if (L <= 1) {
3234
- return pick2(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
3525
+ return pick5(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
3235
3526
  }
3236
3527
  if (L === 2) {
3237
- return pick2(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
3528
+ return pick5(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
3238
3529
  }
3239
3530
  if (L === 3) {
3240
- return pick2(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
3531
+ return pick5(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
3241
3532
  }
3242
3533
  if (L === 4) {
3243
- return pick2(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
3534
+ return pick5(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
3244
3535
  }
3245
- return pick2(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
3536
+ return pick5(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
3246
3537
  };
3247
3538
  var cousinPlain2 = (degree, sex) => {
3248
3539
  if (degree <= 1) {
3249
- return pick2(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
3540
+ return pick5(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
3250
3541
  }
3251
3542
  if (degree === 2) {
3252
- return pick2(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
3543
+ return pick5(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
3253
3544
  }
3254
- return pick2(
3545
+ return pick5(
3255
3546
  sex,
3256
3547
  `${degree}\u4EE3\u5802\u8868\u5144\u5F1F`,
3257
3548
  `${degree}\u4EE3\u5802\u8868\u59D0\u59B9`,
@@ -3264,7 +3555,7 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
3264
3555
  if (degree > 0) {
3265
3556
  degree = degree - 1;
3266
3557
  }
3267
- return cousinPlain2(degree, sexOf3(this.personN));
3558
+ return cousinPlain2(degree, sexOf6(this.personN));
3268
3559
  }
3269
3560
  removal() {
3270
3561
  const level = this.pathN?.level ?? 0;
@@ -3276,56 +3567,56 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
3276
3567
  return level < 0 ? this.nibling() : this.auncle();
3277
3568
  }
3278
3569
  const removed = Math.abs(level);
3279
- return `${cousinPlain2(degree, sexOf3(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
3570
+ return `${cousinPlain2(degree, sexOf6(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
3280
3571
  }
3281
3572
  auncle() {
3282
3573
  const level = Math.abs(this.pathN?.level ?? 0);
3283
- const sex = sexOf3(this.personN);
3284
- if (level <= 2) {
3285
- return pick2(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
3574
+ const sex = sexOf6(this.personN);
3575
+ if (level <= 1) {
3576
+ return pick5(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
3286
3577
  }
3287
- if (level === 3) {
3288
- return pick2(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
3578
+ if (level === 2) {
3579
+ return pick5(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
3289
3580
  }
3290
- return pick2(
3581
+ return pick5(
3291
3582
  sex,
3292
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u53D4`,
3293
- `${level - 2}\u4EE3\u524D\u7684\u963F\u59E8`,
3294
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
3583
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u53D4`,
3584
+ `${level - 1}\u4EE3\u524D\u7684\u963F\u59E8`,
3585
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
3295
3586
  );
3296
3587
  }
3297
3588
  nibling() {
3298
3589
  const level = Math.abs(this.pathN?.level ?? 0);
3299
- const sex = sexOf3(this.personN);
3300
- if (level <= 2) {
3301
- return pick2(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
3590
+ const sex = sexOf6(this.personN);
3591
+ if (level <= 1) {
3592
+ return pick5(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
3302
3593
  }
3303
- if (level === 3) {
3304
- return pick2(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
3594
+ if (level === 2) {
3595
+ return pick5(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
3305
3596
  }
3306
- return pick2(
3597
+ return pick5(
3307
3598
  sex,
3308
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
3309
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5973`,
3310
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
3599
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
3600
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5973`,
3601
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
3311
3602
  );
3312
3603
  }
3313
3604
  parent() {
3314
3605
  return lineal2(
3315
3606
  Math.abs(this.pathN?.level ?? 0),
3316
- sexOf3(this.personN),
3607
+ sexOf6(this.personN),
3317
3608
  "asc"
3318
3609
  );
3319
3610
  }
3320
3611
  child() {
3321
3612
  return lineal2(
3322
3613
  Math.abs(this.pathN?.level ?? 0),
3323
- sexOf3(this.personN),
3614
+ sexOf6(this.personN),
3324
3615
  "desc"
3325
3616
  );
3326
3617
  }
3327
3618
  sibling() {
3328
- return pick2(sexOf3(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
3619
+ return pick5(sexOf6(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
3329
3620
  }
3330
3621
  halfBlood(relation) {
3331
3622
  if (!relation || !this.isHalfBlood) {
@@ -3334,14 +3625,14 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
3334
3625
  return `\u5F02\u7236\u6BCD\u7684${relation}`;
3335
3626
  }
3336
3627
  spouse() {
3337
- return pick2(sexOf3(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
3628
+ return pick5(sexOf6(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
3338
3629
  }
3339
3630
  ofSpouse(relation) {
3340
3631
  if (!relation) {
3341
3632
  return "";
3342
3633
  }
3343
- const spouseType = pick2(
3344
- sexOf3(this.path?.[1].indi),
3634
+ const spouseType = pick5(
3635
+ sexOf6(this.path?.[1].indi),
3345
3636
  "\u4E08\u592B",
3346
3637
  "\u59BB\u5B50",
3347
3638
  "\u914D\u5076"
@@ -3353,7 +3644,7 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
3353
3644
  return "";
3354
3645
  }
3355
3646
  const spouse = this.path?.[this.path.length - 1].indi;
3356
- const spouseType = pick2(sexOf3(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
3647
+ const spouseType = pick5(sexOf6(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
3357
3648
  return `${relation}\u7684${spouseType}`;
3358
3649
  }
3359
3650
  of(relation) {
@@ -3389,7 +3680,40 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
3389
3680
  if (!relation || !this.pathN?.relation) {
3390
3681
  return relation ?? "";
3391
3682
  }
3392
- return `${this.pathN.relation}${relation}`;
3683
+ if (this.pathN.relation === "step") {
3684
+ if (relation === "\u7236\u4EB2") {
3685
+ return "\u7EE7\u7236";
3686
+ }
3687
+ if (relation === "\u6BCD\u4EB2") {
3688
+ return "\u7EE7\u6BCD";
3689
+ }
3690
+ if (relation === "\u513F\u5B50") {
3691
+ return "\u7EE7\u5B50";
3692
+ }
3693
+ if (relation === "\u5973\u513F") {
3694
+ return "\u7EE7\u5973";
3695
+ }
3696
+ return `\u7EE7${relation}`;
3697
+ }
3698
+ if (this.pathN.relation === "adopted") {
3699
+ if (relation === "\u7236\u4EB2") {
3700
+ return "\u517B\u7236";
3701
+ }
3702
+ if (relation === "\u6BCD\u4EB2") {
3703
+ return "\u517B\u6BCD";
3704
+ }
3705
+ if (relation === "\u513F\u5B50") {
3706
+ return "\u517B\u5B50";
3707
+ }
3708
+ if (relation === "\u5973\u513F") {
3709
+ return "\u517B\u5973";
3710
+ }
3711
+ return `\u517B${relation}`;
3712
+ }
3713
+ if (this.pathN.relation === "foster") {
3714
+ return `\u5BC4\u517B${relation}`;
3715
+ }
3716
+ return relation;
3393
3717
  }
3394
3718
  };
3395
3719
 
@@ -8661,7 +8985,7 @@ var ensureExtensionSchema = (gedcom, extraTags) => {
8661
8985
 
8662
8986
  // package.json
8663
8987
  var package_default = {
8664
- version: "2.1.11"};
8988
+ version: "2.1.12"};
8665
8989
 
8666
8990
  // src/utils/get-product-details.ts
8667
8991
  var getVersion = () => package_default.version;