(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,60207,s=>{"use strict";var f=s.i(34346),x=s.i(92879);function d(s,f){(null==f||f>s.length)&&(f=s.length);for(var x=0,d=Array(f);xs.length)&&(f=s.length);for(var x=0,d=Array(f);xO(s)&&!s.match(/[hw],/)?(A[s].forEach(function(s){!e&&s.includes("几")&&(e=s.replace("几",d))}),e||(e=(e=A[s][0]).match(/^[大小]/)?e.replace(/^[大小]/,d):d+e)):e=A[s][0],f.push(e)}}if(f.length||(f=x(s=s.replace(/&\d+/g,""))),f.length||(f=x(s=s.replace(/&[ol]/g,""))),f.length||(f=x(s=s.replace(/[ol](b|s)/g,"x$1"))),!f.length){var m=s.replace(/x/g,"l"),t=s.replace(/x/g,"o");f=f.concat(x(t),x(m))}return f}var T=Object.assign({},A,{xb:["兄弟"],xs:["姐妹"]}),D=Object.assign({},A,{"f,xb":["伯叔父","几爸爸","几爸","几爹"],"f,xb,w":["伯叔母","几妈妈","几妈","几娘"],"h,xb":["伯叔"],"h,xb,w":["妯娌","娣姒","娣姒姊妹","婶子"]}),P={},C=function(s){D[s].forEach(function(f){void 0===P[f]&&(P[f]=[]),P[f].push(s)})};for(var L in D)C(L);function B(s,f){(null==f||f>s.length)&&(f=s.length);for(var x=0,d=Array(f);x=s.length?{done:!0}:{done:!1,value:s[d++]}},e:function(s){throw s},f:e}}throw TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var m,t=!0,r=!1;return{s:function(){x=x.call(s)},n:function(){var s=x.next();return t=s.done,s},e:function(s){r=!0,m=s},f:function(){try{t||null==x.return||x.return()}finally{if(r)throw m}}}}(r);try{for(t.s();!(m=t.n()).done;){var o=m.value;if((d=d.replace(o.exp,o.str)).includes("#"))return d.split("#").forEach(s),!1}}catch(s){t.e(s)}finally{t.f()}}while(e!=d)if(d.match(/,[mwd0](&[ol\d+])?,w|,[hfs1](&[ol\d]+)?,h/))return!1;f.push(d)}}(s),f}function F(s,f){if(s.match(/^,/)||(s=","+s),f<0)s.match(/^,[w1]/)?f=1:s.match(/^,[h0]/)&&(f=0);else if(1==f&&s.match(/^,[h0]/)||0==f&&s.match(/^,[w1]/))return[];return(!(f>-1)||s.includes(",1")||s.includes(",0")||(s=","+f+s),s.match(/,[mwd0](&[ol\d]+)?,w|,[hfs1](&[ol\d]+)?,h/))?[]:N(k(s).map(function(s){return s.replace(/,[01]/,"").substr(1)}))}var K=function(s){"string"==typeof s&&(s=function(s){var f,x=function(s,f){var x="undefined"!=typeof Symbol&&s[Symbol.iterator]||s["@@iterator"];if(!x){if(Array.isArray(s)||(x=function(s,f){if(s){if("string"==typeof s)return t(s,void 0);var x=Object.prototype.toString.call(s).slice(8,-1);if("Object"===x&&s.constructor&&(x=s.constructor.name),"Map"===x||"Set"===x)return Array.from(s);if("Arguments"===x||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(x))return t(s,void 0)}}(s))){x&&(s=x);var d=0,e=function(){};return{s:e,n:function(){return d>=s.length?{done:!0}:{done:!1,value:s[d++]}},e:function(s){throw s},f:e}}throw TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var m,r=!0,o=!1;return{s:function(){x=x.call(s)},n:function(){var s=x.next();return r=s.done,s},e:function(s){o=!0,m=s},f:function(){try{r||null==x.return||x.return()}finally{if(o)throw m}}}}(m);try{for(x.s();!(f=x.n()).done;){var d=f.value,e=s.match(d.exp);if(e)return d.opt(e)}}catch(s){x.e(s)}finally{x.f()}return{}}(s));var f,x=Object.assign({text:"",target:"",sex:-1,type:"default",reverse:!1,mode:"default",optimal:!1},s),r=x.mode;if(A=Object.assign({},S),r&&E[r])for(var o in E[r])A[o]=[].concat(E[r][o],S[o]||[]);var h=U(x.text),l=U(x.target);l.length||(l=[""]);var n=[];return h.forEach(function(s){l.forEach(function(f){(function(s){var f=s.from,x=s.to,d=s.sex;if(d<0){var e=-1,m=-1;if(f.match(/^,[w1]/)?m=1:f.match(/^,[h0]/)&&(m=0),x.match(/^,[w1]/)?e=1:x.match(/^,[h0]/)&&(e=0),-1==m&&e>-1)d=e;else if(m>-1&&-1==e)d=m;else{if(m!=e)return[];d=m}}var t=F(s.from,d),r=F(s.to,d);if(!t.length||!r.length)return[];var o=[];return t.forEach(function(f){r.forEach(function(x){var e=d,m=","+x;if(m.match(/,([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?$/)&&(e=1),m.match(/,([mwd0](&[ol\d]+)?|[olx]s)(&[ol\d]+)?$/)&&(e=0),f&&x){var t=s.optimal;if((f.match(/&\d+/)||x.match(/&\d+/))&&(t=!0),t){var r=function(s){for(var f=s.from,x=s.to,d=s.sex,e=f.split(","),m=x.split(","),t=0;t+w?e[t]=e[t].replace(/^[xol]b|^s/,"lb").replace(/^[xol]s|^d/,"ls"):+a<+w&&(e[t]=e[t].replace(/^[xol]b|^s/,"ob").replace(/^[xol]s|^d/,"os")),f=e.slice(t).join(","),x=m.slice(t+1).join(","),d=+!!m[t].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/);else if(s.optimal&&(a=(null==(b=e[t].match(/([xol])[bs]/))?void 0:b[1])||"",w=(null==(n=m[t].match(/([xol])[bs]/))?void 0:n[1])||"","x"==a||"x"==w)){f=e.slice(t+1).join(","),x=m.slice(t+1).join(","),d=+!!e[t].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/);continue}}break}f=e.slice(t+1).join(","),x=m.slice(t+1).join(","),d=+!!e[t].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/)}return{from:f,to:x,sex:d}}({from:f,to:x,sex:d,optimal:s.optimal});f=r.from,x=r.to,d=r.sex}}(x?j(x,d):[""]).forEach(function(s){var x=(s?","+s:"")+(f?","+f:"");o.push({selector:x,sex:e})})})}),o})({from:s,to:f,sex:x.sex,optimal:x.optimal}).forEach(function(s){(s?F(s.selector,s.sex):[]).forEach(function(f){var d=[f],e=s.sex;x.reverse&&(d=j(f,e),e=+!!f.match(/([fhs1](&[ol\d]+)?|[olx]b)$/)),"chain"==x.type?d.forEach(function(f){var x=function(s){var f=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,x=s.split(",").map(function(s){return T[s.replace(/&[ol\d]+/,"")][0]}).join("的");return f>-1&&T[f+","+s]&&(0==f?x="(女性)"+x:1==f&&(x="(男性)"+x)),x}(f,s.sex);x&&n.push(x)}):"pair"==x.type?(d=j(f,s.sex)).forEach(function(s){var x=function(s,f){var x=[],d=[],e=[];s=s.replace(/&\d+/,""),f=f.replace(/&\d+/,"");var m=s.replace(/([ol])([bs])/,"x$2"),t=f.replace(/([ol])([bs])/,"x$2"),r=s.replace(/&[ol]/,""),o=f.replace(/&[ol]/,"");for(var h in b){var l=h.split("#");if(l.length>1){var n=F(l[0]),a=F(l[1]),w=n.map(function(s){return s.replace(/&[ol\d]+/,"").replace(/([ol])([bs])/,"x$2")}),M=a.map(function(s){return s.replace(/&[ol\d]+/,"").replace(/([ol])([bs])/,"x$2")});(n.includes(s)&&a.includes(f)||n.includes(f)&&a.includes(s))&&x.push(b[h][0]),(w.includes(m)&&M.includes(t)||w.includes(t)&&M.includes(m))&&d.push(b[h][0]),(w.includes(r)&&M.includes(o)||w.includes(o)&&M.includes(r))&&e.push(b[h][0])}}return x.length||(x=d),x.length||(x=e),x}(f,s);n=n.concat(x)}):d.forEach(function(s){var f=R(s);f.length||(f=R(e+","+s)),n=n.concat(f)})})})})}),function(s){if(Array.isArray(s))return d(s)}(f=new Set(n))||function(s){if("undefined"!=typeof Symbol&&null!=s[Symbol.iterator]||null!=s["@@iterator"])return Array.from(s)}(f)||e(f)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()};K.data=A,K.dataCount=Object.keys(A).length,K.setMode=function(s,f){E[s]=Object.assign(E[s]||{},f)};class Y{members;constructor(s){this.members=new Map(s.map(s=>[s.id,s]))}getRelationship(s,f){if(s===f)return{term:"本人",path:"",success:!0};let x=this.members.get(s),d=this.members.get(f);if(!x||!d)return{term:"未知",path:"",success:!1,error:"成员不存在"};let e=this.buildRelationPath(s,f);if(!e)return{term:"无血缘关系",path:"",success:!1};let m=this.pathToChineseText(e);try{let s=+("FEMALE"!==x.gender),f=K({text:m,target:"",sex:s,reverse:!0});return{term:Array.isArray(f)&&f.length>0?f[0]:"亲戚",path:m,success:!0}}catch(s){return{term:"亲戚",path:m,success:!0}}}buildRelationPath(s,f){let x=[{id:s,path:""}],d=new Set;for(;x.length>0;){let{id:s,path:e}=x.shift();if(s===f)return e;if(d.has(s))continue;d.add(s);let m=this.members.get(s);if(m){if(m.fatherId&&!d.has(m.fatherId)&&x.push({id:m.fatherId,path:e+"f"}),m.motherId&&!d.has(m.motherId)&&x.push({id:m.motherId,path:e+"m"}),m.spouseIds){for(let s of m.spouseIds)if(!d.has(s)&&this.members.get(s)){let f="MALE"===m.gender?"w":"h";x.push({id:s,path:e+f})}}if(m.childrenIds){for(let s of m.childrenIds)if(!d.has(s)){let f=this.members.get(s);if(f){let d="MALE"===f.gender?"s":"d";x.push({id:s,path:e+d})}}}if(m.fatherId||m.motherId){for(let f of this.getSiblings(s))if(!d.has(f)){let s=this.members.get(f);if(s){let d=this.getSiblingPath(m,s);x.push({id:f,path:e+d})}}}}}return null}getSiblings(s){let f=this.members.get(s);if(!f)return[];let x=[];if(f.fatherId){let d=this.members.get(f.fatherId);d?.childrenIds&&x.push(...d.childrenIds.filter(f=>f!==s))}if(f.motherId){let d=this.members.get(f.motherId);if(d?.childrenIds)for(let f of d.childrenIds)f===s||x.includes(f)||x.push(f)}return x}getSiblingPath(s,f){let x=this.getAge(s),d=this.getAge(f);return"MALE"===f.gender?d>x?"ob":"lb":d>x?"os":"ls"}getAge(s){if(!s.birthDate)return 0;let f=new Date(s.birthDate).getFullYear();return new Date().getFullYear()-f}getRelationshipDetail(s,f){let x=this.getRelationship(s,f);if(!x.success)return{...x,description:x.error||"无法计算关系"};let d=this.buildPathWithNames(s,f);return{...x,path:d||x.path,description:x.term}}buildPathWithNames(s,f){let x=[{id:s,path:[]}],d=new Set,e=this.members.get(s),m=e?.fullName||"未知";for(;x.length>0;){let{id:s,path:e}=x.shift();if(s===f){if(0===e.length)return"本人";let s=e.map(s=>`${s.relation}(${s.name})`).join(" → ");return`${m} → ${s}`}if(d.has(s))continue;d.add(s);let t=this.members.get(s);if(t){if(t.fatherId&&!d.has(t.fatherId)){let s=this.members.get(t.fatherId);s&&x.push({id:t.fatherId,path:[...e,{name:s.fullName,relation:"父亲"}]})}if(t.motherId&&!d.has(t.motherId)){let s=this.members.get(t.motherId);s&&x.push({id:t.motherId,path:[...e,{name:s.fullName,relation:"母亲"}]})}if(t.spouseIds){for(let s of t.spouseIds)if(!d.has(s)){let f=this.members.get(s);if(f){let d="MALE"===t.gender?"妻子":"丈夫";x.push({id:s,path:[...e,{name:f.fullName,relation:d}]})}}}if(t.childrenIds){for(let s of t.childrenIds)if(!d.has(s)){let f=this.members.get(s);if(f){let d="MALE"===f.gender?"儿子":"女儿";x.push({id:s,path:[...e,{name:f.fullName,relation:d}]})}}}if(t.fatherId||t.motherId){for(let f of this.getSiblings(s))if(!d.has(f)){let s=this.members.get(f);if(s){let d=this.getSiblingRelationName(t,s);x.push({id:f,path:[...e,{name:s.fullName,relation:d}]})}}}}}return null}getSiblingRelationName(s,f){let x=this.getAge(s),d=this.getAge(f);return"MALE"===f.gender?d>x?"哥哥":"弟弟":d>x?"姐姐":"妹妹"}calculatePathLength(s){let f=0,x=0;for(;xnew Y(Object.values(s.members)).getRelationshipDetail(f,x),calculateRelationshipAPI:async(s,f,x)=>{e(!0);try{let d=await fetch(`/api/trees/${s}/relationship?from=${f}&to=${x}`);if(!d.ok)throw Error("计算关系失败");let e=await d.json();return{term:e.relationship,path:e.path,description:e.description,success:e.success}}catch(s){return console.error("计算关系失败:",s),null}finally{e(!1)}},getDirectRelatives:f=>{let x=s.members[f];return x?{father:x.fatherId?s.members[x.fatherId]:null,mother:x.motherId?s.members[x.motherId]:null,spouses:x.spouseIds?.map(f=>s.members[f]).filter(Boolean)||[],children:x.childrenIds?.map(f=>s.members[f]).filter(Boolean)||[]}:null},getSiblings:f=>{let x=s.members[f];if(!x)return[];let d=new Set;if(x.fatherId){let e=s.members[x.fatherId];e?.childrenIds&&e.childrenIds.forEach(s=>{s!==f&&d.add(s)})}if(x.motherId){let e=s.members[x.motherId];e?.childrenIds&&e.childrenIds.forEach(s=>{s!==f&&d.add(s)})}return Array.from(d).map(f=>s.members[f]).filter(Boolean)},getAncestors:(f,x=10)=>{let d=[],e=new Set,m=[{id:f,generation:0}];for(;m.length>0;){let{id:f,generation:t}=m.shift();if(t>=x||e.has(f))continue;e.add(f);let r=s.members[f];r&&(t>0&&d.push({...r,generationDiff:t}),r.fatherId&&m.push({id:r.fatherId,generation:t+1}),r.motherId&&m.push({id:r.motherId,generation:t+1}))}return d},getDescendants:(f,x=10)=>{let d=[],e=new Set,m=[{id:f,generation:0}];for(;m.length>0;){let{id:f,generation:t}=m.shift();if(t>=x||e.has(f))continue;e.add(f);let r=s.members[f];r&&(t>0&&d.push({...r,generationDiff:t}),r.childrenIds&&r.childrenIds.forEach(s=>{m.push({id:s,generation:t+1})}))}return d},loading:d}}s.s(["useRelationship",()=>q],60207)}]);