PageSourceSearch

https://xynergy.ai/_next/static/chunks/1e9e10a7.eb57dae575826ecb.js

js xynergy.ai collected 2026-10-05 16:01:57 UTC 92,891 bytes, 339 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5116],{32162:(e,t,i)=>{i.d(t,{R9:()=>Y});var r=i(45644);function a(e,t,i){return i.find(i=>i.id!==t.id&&e.rels.parents.includes(i.id))}function n(e,t,i){if(e.exiting=i,t)if(0!==e.depth||e.spouse)if(e.spouse)e._x=e.spouse.x,e._y=e.spouse.y;else if(e.is_ancestry){if(!e.parent)throw Error("no parent");e._x=e.parent.x,e._y=e.parent.y}else e._x=e.psx,e._y=e.psy;else e._x=e.x,e._y=e.y;else if(i){let t=e.x>0?1:-1,i=e.y>0?1:-1;e._x=e.x+400*t,e._y=e.y+400*i}}function s({data:e,rels:t}){var i,r;return{id:(i=new Date().getTime(),r=performance&&performance.now&&1e3*performance.now()||0,"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random();return i>0?(t=(i+t)%16|0,i=Math.floor(i/16)):(t=(r+t)%16|0,r=Math.floor(r/16)),("x"===e?t:3&t|8).toString(16)})),data:e||{},rels:Object.assign({parents:[],children:[],spouses:[]},t||{})}}function l(e,t,i){let r=.4*i,a=Math.max(...e.data.map(e=>e.is_ancestry?e.depth:0)),n=t.depth*r;return(0!==t.depth||t.spouse)&&!t.is_ancestry&&(n+=a*r,t.spouse&&(n+=r),n+=t.depth*r),n}function d(e){return e.forEach(e=>{var t;e.rels.parents||(e.rels.parents=[]),e.rels.spouses||(e.rels.spouses=[]),e.rels.children||(e.rels.children=[]),(t=e).rels.parents||(t.rels.parents=[]),t.rels.father&&t.rels.parents.push(t.rels.father),t.rels.mother&&t.rels.parents.push(t.rels.mother),delete t.rels.father,delete t.rels.mother}),e}function o({t:e,svg:t,transition_time:i=2e3}){let a=h(t),n=a.__zoomObj;r.Ltv(a).transition().duration(i||0).delay(100*!!i).call(n.transform,r.GSI.scale(e.k).translate(e.x,e.y))}function c({svg:e,svg_dim:t,tree_dim:i,transition_time:r}){o({t:function(e,t){let i=Math.min(e.width/t.width,e.height/t.height);i>1&&(i=1);let r=t.x_off+(e.width-t.width*i)/i/2,a=t.y_off+(e.height-t.height*i)/i/2;return{k:i,x:r,y:a}}(t,i),svg:e,transition_time:r})}function h(e){let t=e.__zoomObj?e:e.parentNode;if(!t.__zoomObj)throw Error("Zoom object not found");return t}function u(e,t=!1){let i=r.n8j().curve(r.uxU),a=r.n8j().curve(r.qrM),n=t?e._d():e.d;return e.curve?a(n):i(n)}function p(e){return function(e,t={}){let i,a=e.getBoundingClientRect(),n=`
2    <svg class="main_svg">
3      <rect width="${a.width}" height="${a.height}" fill="transparent" />
4      <g class="view">
5        <g class="links_view"></g>
6        <g class="cards_view"></g>
7      </g>
8      <g style="transform: translate(100%, 100%)">
9        <g class="fit_screen_icon cursor-pointer" style="transform: translate(-50px, -50px); display: none">
10          <rect width="27" height="27" stroke-dasharray="13.5" stroke-dashoffset="6.75" 
11            style="stroke:#fff;stroke-width:4px;fill:transparent;"/>
12          <circle r="5" cx="13.5" cy="13.5" style="fill:#fff" />          
13        </g>
14      </g>
15    </svg>
16  `,s=((i=e.querySelector("#f3Canvas"))||(i=r.vtF("div").attr("id","f3Canvas").attr("style","position: relative; overflow: hidden; width: 100%; height: 100%;").node()),i),l=r.vtF("div").node();l.innerHTML=n;let d=l.querySelector("svg");s.appendChild(d),e.appendChild(s),function(e,t={}){if(e.__zoom)return console.log("zoom already setup");let i=e.querySelector(".view"),a=r.s_O().on("zoom",t.onZoom||function(e){r.Ltv(i).attr("transform",e.transform)});r.Ltv(e).call(a),e.__zoomObj=a,t.zoom_polite&&a.filter(function(e){return("wheel"!==e.type||!!e.ctrlKey)&&(!e.touches||!(e.touches.length<2))})}(s,t)}(e,{onZoom:_(()=>e.querySelector("svg .view"),()=>e.querySelector("#htmlSvg .cards_view"))}),f(e),{svg:e.querySelector("svg.main_svg"),svgView:e.querySelector("svg .view"),htmlSvg:e.querySelector("#htmlSvg"),htmlView:e.querySelector("#htmlSvg .cards_view")}}function f(e){let t=r.Ltv(e).select("#f3Canvas").append("div").attr("id","htmlSvg").attr("style","position: absolute; width: 100%; height: 100%; z-index: 2; top: 0; left: 0");return t.append("div").attr("class","cards_view").style("transform-origin","0 0"),t.node()}function _(e,t){return function(i){let a=i.transform;r.Ltv(e()).style("transform",`translate(${a.x}px, ${a.y}px) scale(${a.k}) `),r.Ltv(t()).style("transform",`translate(${a.x}px, ${a.y}px) scale(${a.k}) `)}}var g=Object.freeze({__proto__:null,createHtmlSvg:f,default:p,onZoomSetup:_});function m(e){return r.Ltv(e()).select("div.cards_view_fake").node()}function v(e,t,i=[]){let r=t[0];if(e.id===r.id)return!0;let a=[...i],n=!1;return function e(i){if(n)return;let s=i.rels;[...s.parents,...s.spouses||[],...s.children||[]].filter(e=>!!e).forEach(i=>
16{if(a.includes(i))return;a.push(i);let s=t.find(e=>e.id===i);s.id===r.id?n=!0:e(s)})}(e),n}function y(e,t){Object.keys(e.data).forEach(i=>{if(i.includes("__ref__")){let r=i.split("__ref__")[1],a=t.find(e=>e.id===r);if(!a)return;let n=i.split("__ref__")[0]+"__ref__"+e.id;delete a.data[n]}})}function b(e,t,i=!0){return function(e,t){let i=e.rels;for(let r of[...i.parents,...i.spouses||[],...i.children||[]].filter(e=>!!e))if(!v(t.find(e=>e.id===r),t,[e.id]))return!1;return!0}(e,t)?(t.forEach(t=>{for(let i in t.rels)t.rels.hasOwnProperty(i)&&Array.isArray(t.rels[i])&&t.rels[i].includes(e.id)&&t.rels[i].splice(t.rels[i].findIndex(t=>t===e.id),1)}),y(e,t),t.splice(t.findIndex(t=>t.id===e.id),1),0===t.length&&t.push(s({data:{gender:"M"}})),i&&x(t)):(y(e,t),e.data={gender:e.data.gender},e.unknown=!0),{success:!0}}function x(e){for(let i=e.length-1;i>=0;i--){var t;e[i].to_add&&(t=e[i],b(t,e,!1))}}function w(){return`
17    <g data-icon="plus">
18      ${k()}
19      <path d="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" />
20    </g>
21  `}function C(){return E(`
22    <g data-icon="person">
23      <path d="M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 
24        64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 
25        0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z" />
26    </g>
27  `,"0 0 512 512")}function $(){return E(`
28    <g transform="translate(31,25)" data-icon="mini-tree">
29      <rect x="-31" y="-25" width="72" height="15" fill="rgba(0,0,0,0)"></rect>
30      <g>
31        <rect x="-31" y="-25" width="72" height="15" fill="rgba(0,0,0,0)"></rect>
32        <line y2="-17.5" stroke="#fff" />
33        <line x1="-20" x2="20" y1="-17.5" y2="-17.5" stroke="#fff" />
34        <rect x="-31" y="-25" width="25" height="15" rx="5" ry="5" class="card-male" />
35        <rect x="6" y="-25" width="25" height="15" rx="5" ry="5" class="card-female" />
36      </g>
37    </g>
38  `,"0 0 72 25")}function E(e,t="0 0 24 24"){let i=e.match(/data-icon="([^"]+)"/),r=i?`data-icon="${i[1]}"`:"";return`
39    <svg xmlns="http://www.w3.org/2000/svg" viewBox="${t}" style="fill: currentColor" ${r}>
40      ${e}
41    </svg>
42  `}function k(){return`
43    <circle r="12" cx="12" cy="12" style="fill: rgba(0,0,0,0)" />
44  `}function L(e){return e.editable?`
45    <div class="f3-radio-group">
46      ${e.gender_field.options.map(t=>`
47        <label>
48          <input type="radio" name="${e.gender_field.id}" 
49            value="${t.value}" 
50            ${t.value===e.gender_field.initial_value?"checked":""}
51            ${e.gender_field.disabled?"disabled":""}
52          >
53          ${t.label}
54        </label>
55      `).join("")}
56    </div>
57  `:""}function S(e){if(!e.editable){let t;return t="",e.fields.forEach(e=>{var i;if("rel_reference"===e.type){if(!e.initial_value)return;t+=`
58        <div class="f3-info-field">
59          <span class="f3-info-field-label">${e.label} - <i>${e.rel_label}</i></span>
60          <span class="f3-info-field-value">${e.initial_value||""}</span>
61        </div>`}else if("select"===e.type){if(!e.initial_value)return;t+=`
62        <div class="f3-info-field">
63          <span class="f3-info-field-label">${e.label}</span>
64          <span class="f3-info-field-value">${(null==(i=e.options.find(t=>t.value===e.initial_value))?void 0:i.label)||""}</span>
65        </div>`}else t+=`
66        <div class="f3-info-field">
67          <span class="f3-info-field-label">${e.label}</span>
68          <span class="f3-info-field-value">${e.initial_value||""}</span>
69        </div>`}),t}let t="";return e.fields.forEach(e=>{"text"===e.type?t+=`
70      <div class="f3-form-field">
71        <label>${e.label}</label>
72        <input type="${e.type}" 
73          name="${e.id}" 
74          value="${e.initial_value||""}"
75          placeholder="${e.label}">
76      </div>`:"textarea"===e.type?t+=`
77      <div class="f3-form-field">
78        <label>${e.label}</label>
79        <textarea name="${e.id}" 
80          placeholder="${e.label}">${e.initial_value||""}</textarea>
81      </div>`:"select"===e.type?t+=`
82      <div class="f3-form-field">
83        <label>${e.label}</label>
84        <select name="${e.id}" value="${e.initial_value||""}">
85          <option value="">${e.placeholder||`Select ${e.label}`}</option>
86          ${e.options.map(t=>`<option ${t.value===e.initial_value?"selected":""} value="${t.value}">${t.label}</option>`).join("")}
87        </select>
88      </div>`:"rel_reference"===e.type&&(t+=`
89      <div class="f3-form-field">
90        <label>${e.label} - <i>${e.rel_label}</i></label>
91        <input type="text" 
92          name="${e.id}" 
93          value="${e.initial_value||""}"
94          placeholder="${e.label}">
95      </div>`)}),t}function M(e){let t=e.linkExistingRelative.hasOwnProperty("title")?e.linkExistingRelative.title:"Profile already exists?",i=e.linkExistingRelative.hasOwnProperty("select_placeholder")?e.linkExistingRelative.select_placeholder:"Select profile",r=e.linkExistingRelative.options;return`
96    <div>
97      <hr>
98      <div class="f3-link-existing-relative">
99        <label>${t}</label>
100        <select>
101          <option value="">${i}</option>
102          ${r.map(e=>`<option value="${e.value}">${e.label}</option>`).join("")}
103        </select>
104      </div>
105    </div>
106  `}function R(){return`
107    <span class="f3-close-btn">
108      \xd7
109    </span>
110  `}function A(e,t){let i="new_rel"in e,r=document.createElement("div");return function a(){var n,s,l,d,o,c,h,u,p,f,_,g,m;let v,y,b,x,w,C,$,A;r.innerHTML=i?` 
111    <form id="familyForm" class="f3-form">
112      ${R()}
113      <h3 class="f3-form-title">${e.title}</h3>
114      ${L(e)}
115
116      ${S(e)}
117      
118      <div class="f3-form-buttons">
119        <button type="button" class="f3-cancel-btn">Cancel</button>
120        <button type="submit">Submit</button>
121      </div>
122
123      ${e.linkExistingRelative?M(e):""}
124    </form>
125  `:` 
126    <form id="familyForm" class="f3-form ${e.editable?"":"non-editable"}">
127      ${R()}
128      <div style="text-align: right; display: 'block'">
129        ${!e.no_edit?(n=e,`
130    <span class="f3-add-relative-btn">
131      ${n.addRelativeActive?E(`
132    <g data-icon="user-plus-close">
133      ${k()}
134      <path d="M15,14C12.33,14 7,15.33 7,18V20H23V18C23,15.33 17.67,14 15,14M6,10V7H4V10H1V12H4V15H6V12H9V10M15,12A4,4 0 0,0 19,8A4,4 0 0,0 15,4A4,4 0 0,0 11,8A4,4 0 0,0 15,12Z" />
135      <line x1="3" y1="3" x2="24" y2="24" stroke="currentColor" stroke-width="2" />
136    </g>
137  `):E(`
138    <g data-icon="user-plus">
139      ${k()}
140      <path d="M15,14C12.33,14 7,15.33 7,18V20H23V18C23,15.33 17.67,14 15,14M6,10V7H4V10H1V12H4V15H6V12H9V10M15,12A4,4 0 0,0 19,8A4,4 0 0,0 15,4A4,4 0 0,0 11,8A4,4 0 0,0 15,12Z" />
141    </g>
142  `)}
143    </span>
144  `):""}
145        ${e.no_edit?'<div style="height: 24px;"></div>':(s=e,`
146    <span class="f3-edit-btn">
147      ${s.editable?E(`
148    <g data-icon="pencil-off">
149      ${k()}
150      <path d="M18.66,2C18.4,2 18.16,2.09 17.97,2.28L16.13,4.13L19.88,7.88L21.72,6.03C22.11,5.64 22.11,5 21.72,4.63L19.38,2.28C19.18,2.09 18.91,2 18.66,2M3.28,4L2,5.28L8.5,11.75L4,16.25V20H7.75L12.25,15.5L18.72,22L20,20.72L13.5,14.25L9.75,10.5L3.28,4M15.06,5.19L11.03,9.22L14.78,12.97L18.81,8.94L15.06,5.19Z" />
151    </g>
152  `):E(`
153    <g data-icon="pencil">
154      ${k()}
155      <path d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29
155C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z" />
156    </g>
157  `)}
158    </span>
159  `)}
160      </div>
161
162      ${L(e)}
163
164      ${S(e)}
165      
166      <div class="f3-form-buttons">
167        <button type="button" class="f3-cancel-btn">Cancel</button>
168        <button type="submit">Submit</button>
169      </div>
170
171      ${e.linkExistingRelative?M(e):""}
172
173      <hr>
174      ${l=e,`
175    <div>
176      <button type="button" class="f3-delete-btn" ${l.can_delete?"":"disabled"}>
177        Delete
178      </button>
179    </div>
180  `}
181
182      ${d=e,`
183    <div>
184      <button type="button" class="f3-remove-relative-btn${d.removeRelativeActive?" active":""}">
185        ${d.removeRelativeActive?"Cancel Remove Relation":"Remove Relation"}
186      </button>
187    </div>
188  `}
189    </form>
190  `,o=r,c=e,h=t,u=a,(v=o.querySelector("form")).addEventListener("submit",c.onSubmit),v.querySelector(".f3-cancel-btn").addEventListener("click",function(){c.editable=!1,c.onCancel&&c.onCancel(),u()}),v.querySelector(".f3-close-btn").addEventListener("click",h),i?(p=r,f=e,(y=p.querySelector("form").querySelector(".f3-link-existing-relative select"))&&y.addEventListener("change",f.linkExistingRelative.onSelect)):(_=r,g=e,m=a,(x=(b=_.querySelector("form")).querySelector(".f3-edit-btn"))&&x.addEventListener("click",function(){g.editable=!g.editable,m()}),(w=b.querySelector(".f3-delete-btn"))&&g.onDelete&&w.addEventListener("click",g.onDelete),(C=b.querySelector(".f3-add-relative-btn"))&&g.addRelative&&C.addEventListener("click",()=>{g.addRelativeActive?g.addRelativeCancel():g.addRelative(),g.addRelativeActive=!g.addRelativeActive,m()}),($=b.querySelector(".f3-remove-relative-btn"))&&g.removeRelative&&$.addEventListener("click",()=>{g.removeRelativeActive?g.removeRelativeCancel():g.removeRelative(),g.removeRelativeActive=!g.removeRelativeActive,m()}),(A=b.querySelector(".f3-link-existing-relative select"))&&A.addEventListener("change",g.linkExistingRelative.onSelect)),e.onFormCreation&&e.onFormCreation({cont:r,form_creator:e})}(),r}function D({d:e,card_dim:t,is_new:i}){return{template:`
191    <rect width="${t.w}" height="${t.h}" rx="4" ry="4" class="card-outline ${e.data.main&&!i?"card-main-outline":""} ${i?"card-new-outline":""}" />
192  `}}function F(e,t,i){let r=document.createElementNS("http://www.w3.org/2000/svg","g");r.innerHTML=e,i?t.insertBefore(r,t.firstChild):t.appendChild(r)}let I=function(e,t){if(e.data.to_add)return;let i=t.card_dim;if(e.all_rels_displayed)return;let a=r.vtF("svg:g").html(function({d:e,card_dim:t}){return{template:`
193    <g class="card_family_tree" style="cursor: pointer">
194      <rect x="-31" y="-25" width="72" height="15" fill="rgba(0,0,0,0)"></rect>
195      <g transform="translate(${.8*t.w},6)scale(.9)">
196        <rect x="-31" y="-25" width="72" height="15" fill="rgba(0,0,0,0)"></rect>
197        <line y2="-17.5" stroke="#fff" />
198        <line x1="-20" x2="20" y1="-17.5" y2="-17.5" stroke="#fff" />
199        <rect x="-31" y="-25" width="25" height="15" rx="5" ry="5" class="card-male" />
200        <rect x="6" y="-25" width="25" height="15" rx="5" ry="5" class="card-female" />
201      </g>
202    </g>
203  `}}({d:e,card_dim:i}).template);return a.on("click",function(i){i.stopPropagation(),t.onMiniTreeClick?t.onMiniTreeClick.call(this,i,e):function(e,{d:t}){e.updateMainId(t.data.id),e.updateTree({})}(t.store,{d:e})}),a.node()},H=function(e,t){if(e.data.to_add)return;let i=t.card_dim;return r.vtF("svg:g").html(function({d:e,image:t,card_dim:i,maleIcon:r,femaleIcon:a}){return{template:`
204    <g style="transform: translate(${i.img_x}px,${i.img_y}px);" class="card_image" clip-path="url(#card_image_clip)">
205      ${t?`<image href="${t}" height="${i.img_h}" width="${i.img_w}" preserveAspectRatio="xMidYMin slice" />`:(e.data.data.gender,e.data.data.gender,`
206      <g class="genderless-icon">
207        <rect height="${i.img_h}" width="${i.img_w}" fill="rgb(59, 85, 96)" />
208        <g transform="scale(${.001616*i.img_w})">
209         <path transform="translate(50,40)" fill="lightgrey" d="M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 
210            64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 
211            0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z" />
212        </g>
213      </g>
214    `)}      
215    </g>
216  `}}({d:e,image:e.data.data.avatar||null,card_dim:i,maleIcon:void 0,femaleIcon:void 0}).template).node()};function O(e,t,i=!1){e&&(i?t.insertBefore(e,t.firstChild):t.appendChild(e))}function T(e,t){e.querySelector("defs#f3CardDef")||e.insertAdjacentHTML("afterbegin",`
217      <defs id="f3CardDef">
218        <linearGradient id="fadeGrad">
219          <stop offset="0.9" stop-color="white" stop-opacity="0"/>
220          <stop offset=".91" stop-color="white" stop-opacity=".5"/>
221          <stop offset="1" stop-color="white" stop-opacity="1"/>
222        </linearGradient>
223        <mask id="fade" maskContentUnits="objectBoundingBox"><rect width="1" height="1" fill="url(#fadeGrad)"/></mask>
224        <clipPath id="card_clip"><path d="${i({w:t.w,h:t.h},5)}"></clipPath>
225        <clipPath id="card_text_clip"><rect width="${t.w-10}" height="${t.h}"></rect></clipPath>
226        <clipPath id="card_image_clip"><path d="M0,0 Q 0,0 0,0 H${t.img_w} V${t.img_h} H0 Q 0,${t.img_h} 0,${t.img_h} z"></clipPath>
227        <clipPath id="card_image_clip_curved"><path d="${i({w:t.img_w,h:t.img_h},5,["rx","ry"])}"></clipPath>
228      </defs>
229    `);function i(e,t,i){let{w:r,h:a}=e,n=i||[],s=n.includes("lx")?"M0,0":`M0,${t} Q 0,0 5,0`,l=n.includes("rx")?`H${r}`:`H${r-t} Q ${r},0 ${r},5`,d=n.includes("ry")?`V${a}`:`V${a-t} Q ${r},${a} ${r-t},${a}`,o=n.includes("ly")?"H0":`H${t} Q 0,${a} 0,${a-t}`;return`${s} ${l} ${d} ${o} z`}}function q(e,t,i){var r,a;let n,s,l,d,o,c=(n=[],function e(t){let r=i.find(e=>e.id===t).rels;
229n.push(r.parents),r.parents.forEach(t=>e(t))}(e),n);return(r=t,s=i.find(e=>e.id===r),c.find(e=>e[0]===s.id||e[1]===s.id)&&(d=!0,l=r,o=!1),a=t,(i.find(t=>t.id===e).rels.spouses||[]).includes(a)&&(l=[e,a]),function t(r){if(l)return;if(r===e){d=!0,l=r,o=!1;return}let a=i.find(e=>e.id===r).rels,n=a.parents,s=c.find(e=>e[0]&&n[0]&&e[0]===n[0]||e[1]&&n[1]&&e[1]===n[1]);if(s){var h,u;l=n.filter((e,t)=>e===s[t]),h=n,u=s,o=h.some((e,t)=>e!==u[t])||u.some((e,t)=>e!==h[t]);return}a.parents.forEach(e=>t(e))}(t),l)?{found:l,is_ancestor:d,is_half_kin:o}:null}function P(e){let t=["st","nd","rd"];return t[e-1]?e+t[e-1]:e+"th"}function j(e){return Math.abs(e)-2}function N(e,t){let i=j(t);return(e.includes("great-")&&(e=e.split("great-")[1]),1===i)?`great-${e}`:i>1?`${i}x-great-${e}`:(console.error(`${e} should have great_count > 1`),e)}function V(e,t,i){let r=e.id;i.forEach(e=>{e.rels.parents.includes(r)&&(e.rels.parents[e.rels.parents.indexOf(r)]=t),e.rels.spouses&&e.rels.spouses.includes(r)&&(e.rels.spouses=e.rels.spouses.filter(e=>e!==r),e.rels.spouses.includes(t)||e.rels.spouses.push(t)),e.rels.children&&e.rels.children.includes(r)&&(e.rels.children=e.rels.children.filter(e=>e!==r),e.rels.children.includes(t)||e.rels.children.push(t))});let a=i.find(e=>e.id===t),n=i.find(e=>e.id===r);if(!n)throw Error("New rel not found");if(!a)throw Error("Link rel not found");if((n.rels.children||[]).forEach(e=>{a.rels.children||(a.rels.children=[]),a.rels.children.includes(e)||a.rels.children.push(e)}),(n.rels.spouses||[]).forEach(e=>{a.rels.spouses||(a.rels.spouses=[]),a.rels.spouses.includes(e)||a.rels.spouses.push(e)}),0===a.rels.parents.length)a.rels.parents=[...n.rels.parents];else{let e=a.rels.parents.find(e=>{var t;return(null==(t=i.find(t=>t.id===e))?void 0:t.data.gender)==="M"}),t=a.rels.parents.find(e=>{var t;return(null==(t=i.find(t=>t.id===e))?void 0:t.data.gender)==="F"}),r=n.rels.parents.find(e=>{var t;return(null==(t=i.find(t=>t.id===e))?void 0:t.data.gender)==="M"}),s=n.rels.parents.find(e=>{var t;return(null==(t=i.find(t=>t.id===e))?void 0:t.data.gender)==="F"});r&&(e?(console.error("link rel already has father"),a.rels.parents[a.rels.parents.indexOf(e)]=r):a.rels.parents.push(r)),s&&(t?(console.error("link rel already has mother"),a.rels.parents[a.rels.parents.indexOf(t)]=s):a.rels.parents.push(s))}i.splice(i.findIndex(e=>e.id===r),1)}class U{constructor(e,t,i){return this.store=e,this.onActivate=t,this.cancelCallback=i,this.datum=null,this.onChange=null,this.onCancel=null,this.is_active=!1,this.addRelLabels=this.addRelLabelsDefault(),this}activate(e){var t,i,r;let a,n;this.is_active&&this.onCancel(),this.onActivate(),this.is_active=!0,this.store.state.one_level_rels=!0;let l=this.store;this.datum=e;let d=this.datum.data.gender;t=this.getStoreData(),i=this.addRelLabels,r=this.canAdd,a={parent:!0,spouse:!0,child:!0},r&&(a=Object.assign(a,r(e))),e.rels.spouses||(e.rels.spouses=[]),e.rels.children||(e.rels.children=[]),a.parent&&function(){let r=e.rels.parents,a=r.find(e=>{var i;return(null==(i=t.find(t=>t.id===e))?void 0:i.data.gender)==="M"}),n=r.find(e=>{var i;return(null==(i=t.find(t=>t.id===e))?void 0:i.data.gender)==="F"});if(r.length<2&&!a){let r=s({data:{gender:"M"},rels:{children:[e.id]}});r._new_rel_data={rel_type:"father",label:i.father,rel_id:e.id},e.rels.parents.push(r.id),t.push(r)}if(r.length<2&&!n){let r=s({data:{gender:"F"},rels:{children:[e.id]}});r._new_rel_data={rel_type:"mother",label:i.mother,rel_id:e.id},e.rels.parents.push(r.id),t.push(r)}let l=t.find(t=>t.id===e.rels.parents[0]),d=t.find(t=>t.id===e.rels.parents[1]);l.rels.spouses||(l.rels.spouses=[]),d.rels.spouses||(d.rels.spouses=[]),l.rels.spouses.includes(d.id)||l.rels.spouses.push(d.id),d.rels.spouses.includes(l.id)||d.rels.spouses.push(l.id),l.rels.children||(l.rels.children=[]),d.rels.children||(d.rels.children=[]),l.rels.children.includes(e.id)||l.rels.children.push(e.id),d.rels.children.includes(e.id)||d.rels.children.push(e.id)}(),a.spouse&&(function(){if(e.rels.spouses||(e.rels.spouses=[]),e.rels.children){let r;e.rels.children.forEach(a=>{let n=t.find(e=>e.id===a);if(1===n.rels.parents.length){let a="M"===t.find(e=>e.id===n.rels.parents[0]).data.gender?"F":"M";r||(r=s({data:{gender:a},rels:{spouses:[e.id]}})),r._new_rel_data={rel_type:"spouse",label:i.spouse,rel_id:e.id}
229,r.rels.children.push(n.id),e.rels.spouses.push(r.id),n.rels.parents.push(r.id),t.push(r)}})}}(),e.rels.spouses||(e.rels.spouses=[]),(n=s({data:{gender:"M"===e.data.gender?"F":"M"},rels:{spouses:[e.id]}}))._new_rel_data={rel_type:"spouse",label:i.spouse,rel_id:e.id},e.rels.spouses.push(n.id),t.push(n)),a.child&&(e.rels.children||(e.rels.children=[]),e.rels.spouses||(e.rels.spouses=[]),e.rels.spouses.forEach(r=>{let a=t.find(e=>e.id===r);a.rels.children||(a.rels.children=[]);let n=s({data:{gender:"M"},rels:{parents:[e.id,a.id]}});n._new_rel_data={rel_type:"son",label:i.son,other_parent_id:a.id,rel_id:e.id},a.rels.children.push(n.id),e.rels.children.push(n.id),t.push(n);let l=s({data:{gender:"F"},rels:{parents:[e.id,a.id]}});l._new_rel_data={rel_type:"daughter",label:i.daughter,other_parent_id:a.id,rel_id:e.id},a.rels.children.push(l.id),e.rels.children.push(l.id),t.push(l)})),l.updateTree({}),this.onChange=function(t,i){(null==t?void 0:t._new_rel_data)?(null==i?void 0:i.link_rel_id)?V(t,i.link_rel_id,l.getData()):delete t._new_rel_data:t.id===e.id?t.data.gender!==d&&(d=t.data.gender,l.getData().forEach(e=>{let t=e._new_rel_data;t&&"spouse"===t.rel_type&&(e.data.gender="M"===e.data.gender?"F":"M")})):console.error("Something went wrong")},this.onCancel=()=>{var e;return e=this,void(e.is_active&&(e.is_active=!1,e.store.state.one_level_rels=!1,e.cleanUp(),e.cancelCallback(e.datum),e.datum=null,e.onChange=null,e.onCancel=null))}}setAddRelLabels(e){if("object"!=typeof e)return void console.error("add_rel_labels must be an object");for(let t in e)this.addRelLabels[t]=e[t];return this}setCanAdd(e){return this.canAdd=e,this}addRelLabelsDefault(){return{father:"Add Father",mother:"Add Mother",spouse:"Add Spouse",son:"Add Son",daughter:"Add Daughter"}}getStoreData(){return this.store.getData()}cleanUp(e){e||(e=this.store.getData());var t=e;for(let e=t.length-1;e>=0;e--){let i=t[e];i._new_rel_data&&(t.forEach(e=>{e.rels.parents.includes(i.id)&&e.rels.parents.splice(e.rels.parents.indexOf(i.id),1),e.rels.children&&e.rels.children.includes(i.id)&&e.rels.children.splice(e.rels.children.indexOf(i.id),1),e.rels.spouses&&e.rels.spouses.includes(i.id)&&e.rels.spouses.splice(e.rels.spouses.indexOf(i.id),1)}),t.splice(e,1))}return e}}class z{constructor(e,t,i,r){return this.store=e,this.onActivate=t,this.cancelCallback=i,this.modal=r,this.datum=null,this.onChange=null,this.onCancel=null,this.is_active=!1,this}activate(e){this.is_active&&this.onCancel(),this.onActivate(),this.is_active=!0,this.store.state.one_level_rels=!0;let t=this.store;t.updateTree({}),this.datum=e,this.onChange=(function(i,a){let n=function(t){if(t.is_ancestry){if(e.rels.parents.includes(t.data.id))return"parent"}else if(t.spouse){if(!e.rels.spouses)throw Error("Spouses not found");if(e.rels.spouses.includes(t.data.id))return"spouse"}else{if(!e.rels.children)throw Error("Children not found");if(e.rels.children.includes(t.data.id))return"children"}return null}(i),s=e.rels;"parent"===n?(function(){let r=i.data.id,n=t.getDatum(r);if(!n)throw Error("Parent not found");if(!n.rels.children)throw Error("Parent has no children");n.rels.children=n.rels.children.filter(t=>t!==e.id),s.parents=s.parents.filter(e=>e!==r),a()}).call(this):"spouse"===n?(function(){let n=i.data;function l(r){i.data.rels.spouses=i.data.rels.spouses.filter(t=>t!==e.id),s.spouses=s.spouses.filter(e=>e!==i.data.id);let n=r?e:i.data,l=r?i.data:e;(s.children||[]).forEach(e=>{let i=t.getDatum(e);if(!i)throw Error("Child not found");i.rels.parents.includes(l.id)&&(i.rels.parents=i.rels.parents.filter(e=>e!==l.id))}),l.rels.children&&(l.rels.children=l.rels.children.filter(e=>!(n.rels.children||[]).includes(e))),a()}(n.rels.children||[]).some(e=>{let i=t.getDatum(e);if(!i)throw Error("Child not found");return!!i.rels.parents.includes(n.id)})?(function(){let t="M"===e.data.gender?"f3-male-bg":"F"===e.data.gender?"f3-female-bg":null,i="M"===n.data.gender?"f3-male-bg":"F"===n.data.gender?"f3-female-bg":null,a=r.vtF("div").html(`
230            <p>You are removing a spouse relationship. Since there are shared children, please choose which parent should keep them in the family tree.</p>
231            <div class="f3-modal-options">
232              <button data-option="assign-to-current" class="f3-btn ${t}">Keep children with current person</button>
233              <button data-option="assign-to-spouse" class="f3-btn ${i}">Keep children with spouse</button>
234            </div>
235          `);a.selectAll('[data-option="assign-to-current"]').on("click",()=>{l(!0),this.modal.close()}),a.selectAll('[data-option="assign-to-spouse"]').on("click",()=>{l(!1),this.modal.close()}),this.modal.activate(a.node())}).call(this):l.call(this,!0)}).call(this):"children"===n&&(function(){if(!s.children)throw Error("Children not found");s.children=s.children.filter(e=>e!==i.data.id),i.data.rels.parents=i.data.rels.parents.filter(t=>t!==e.id),a()}).call(this)}).bind(this),this.onCancel=(function(){if(this.is_active){if(this.is_active=!1,this.store.state.one_level_rels=!1,!this.datum)throw Error("Datum not found");this.cancelCallback(this.datum),this.datum=null,this.onChange=null,this.onCancel=null}}).bind(this)}}class B{constructor(e){this.cont=e,this.active=!1,this.onClose=null,this.modal_cont=r.Ltv(this.cont).append("div").attr("class","f3-modal").node(),r.Ltv(this.modal_cont).style("display","none"),this.create()}create(){let e=r.Ltv(this.modal_cont);e.html(`
236      <div class="f3-modal-content">
237        <span class="f3-modal-close">&times;</span>
238        <div class="f3-modal-content-inner"></div>
239        <div class="f3-modal-content-bottom"></div>
240      </div>
241    `),e.select(".f3-modal-close").on("click",()=>{this.close()}),e.on("click",t=>{t.target==e.node()&&this.close()})}activate(e,{boolean:t,onAccept:i,onCancel:a}={}){this.reset();let n=r.Ltv(this.modal_cont).select(".f3-modal-content-inner").node();if("string"==typeof e?n.innerHTML=e:n.appendChild(e),t){if(!i)throw Error("onAccept is required");if(!a)throw Error("onCancel is required");r.Ltv(this.modal_cont).select(".f3-modal-content-bottom").html(`
242        <button class="f3-modal-accept f3-btn">Accept</button>
243        <button class="f3-modal-cancel f3-btn">Cancel</button>
244      `),r.Ltv(this.modal_cont).select(".f3-modal-accept").on("click",()=>{i(),this.reset(),this.close()}),r.Ltv(this.modal_cont).select(".f3-modal-cancel").on("click",()=>{this.close()}),this.onClose=a}this.open()}reset(){this.onClose=null,r.Ltv(this.modal_cont).select(".f3-modal-content-inner").html(""),r.Ltv(this.modal_cont).select(".f3-modal-content-bottom").html("")}open(){this.modal_cont.style.display="block",this.active=!0}close(){this.modal_cont.style.display="none",this.active=!1,this.onClose&&this.onClose()}}class J{constructor(e,t){return this.cont=e,this.store=t,this.fields=[{type:"text",label:"first name",id:"first name"},{type:"text",label:"last name",id:"last name"},{type:"text",label:"birthday",id:"birthday"},{type:"text",label:"avatar",id:"avatar"}],this.is_fixed=!0,this.no_edit=!1,this.onChange=null,this.editFirst=!1,this.postSubmit=null,this.onFormCreation=null,this.createFormEdit=null,this.createFormNew=null,this.formCont=this.getFormContDefault(),this.modal=this.setupModal(),this.addRelativeInstance=this.setupAddRelative(),this.removeRelativeInstance=this.setupRemoveRelative(),this.history=this.createHistory(),this}open(e){var t;e.rels||(e=e.data),this.addRelativeInstance.is_active?(t=this,e._new_rel_data?t.cardEditForm(e):(t.addRelativeInstance.onCancel(),t.cardEditForm(e),t.store.updateMainId(e.id),t.store.updateTree({}))):this.removeRelativeInstance.is_active?function(t,i){if(!i)throw Error("Tree datum not found");if(!t.removeRelativeInstance.datum)throw Error("Remove relative datum not found");if(!t.removeRelativeInstance.onCancel)throw Error("Remove relative onCancel not found");if(!t.removeRelativeInstance.onChange)throw Error("Remove relative onChange not found");e.id===t.removeRelativeInstance.datum.id?(t.removeRelativeInstance.onCancel(),t.cardEditForm(e)):t.removeRelativeInstance.onChange(i,(function(){t.removeRelativeInstance.onCancel(),t.updateHistory(),t.store.updateTree({})}).bind(t))}(this,this.store.getTreeDatum(e.id)):this.cardEditForm(e)}setupAddRelative(){return new U(this.store,()=>{var e;return e=this,void(e.removeRelativeInstance.is_active&&e.removeRelativeInstance.onCancel())},e=>{var t,i;return t=this,i=e,void(t.store.updateMainId(i.id),t.store.updateTree({}),t.openFormWithId(i.id))})}setupRemoveRelative(){let e,t;return e=this.store,t=(function(){this.addRelativeInstance.is_active&&this.addRelativeInstance.onCancel(),i(this.cont,!0)}).bind(this),new z(e,t,(function(e){i(this.cont,!1),this.store.updateMainId(e.id),this.store.updateTree({}),this.openFormWithId(e.id)}).bind(this),this.modal);function i(e,t){r.Ltv(e).select("#f3Canvas").classed("f3-remove-relative-active",t)}}createHistory(){let e=function(e,t,i){let r=[],a=-1;return{changed:function(){a<r.length-1&&(r=r.slice(0,a+1));let i=t();i.main_id=e.getMainId(),r.push(i),a++},back:function(){s()&&l(r[--a])},forward:function(){n()&&l(r[++a])},canForward:n,canBack:s};function n(){return a<r.length-1}function s(){return a>0}function l(t){let r=e.getMainId();(t=JSON.parse(JSON.stringify(t))).find(e=>e.id===r)||e.updateMainId(t.main_id),e.updateData(t),i()}}(this.store,this._getStoreDataCopy.bind(this),(function(){var e;console.log("historyUpdateTree"),this.addRelativeInstance.is_active&&this.addRelativeInstance.onCancel(),this.removeRelativeInstance.is_active&&this.removeRelativeInstance.onCancel(),this.store.updateTree({initial:!1}),this.history.controls.updateButtons(),this.openFormWithId(null==(e=this.store.getMainDatum())?void 0:e.id),this.onChange&&this.onChange()}).bind(this)),t=this.cont.querySelector(".f3-nav-cont");if(!t)throw Error("Nav cont not found");let i=function(e,t){let i=r.Ltv(e).append("div").attr("class","f3-history-controls");e.insertBefore(i.node(),e.firstChild);let a=i.append("button").attr("class","f3-back-button").on("click",()=>{t.back(),s()}),n=i.append("button").attr("class","f3-forward-button").on("click",()=>{t.forward(),s()});return a.html(E(`
245    <g data-icon="history-back">
246      ${k()}
247      <path d="M20 13.5C20 17.09 17.09 20 13.5 20H6V18H13.5C16 18 
24718 16 18 13.5S16 9 13.5 9H7.83L10.91 12.09L9.5 13.5L4 8L9.5 2.5L10.92 3.91L7.83 7H13.5C17.09 7 20 9.91 20 13.5Z" />
248    </g>
249  `)),n.html(E(`
250    <g data-icon="history-forward">
251      ${k()}
252      <path d="M10.5 18H18V20H10.5C6.91 20 4 17.09 4 13.5S6.91 7 10.5 7H16.17L13.08 3.91L14.5 2.5L20 8L14.5 13.5L13.09 12.09L16.17 9H10.5C8 9 6 11 6 13.5S8 18 10.5 18Z" />
253    </g>
254  `)),{back_btn:a.node(),forward_btn:n.node(),updateButtons:s,destroy:function(){r.Ltv(e).select(".f3-history-controls").remove()}};function s(){a.classed("disabled",!t.canBack()),n.classed("disabled",!t.canForward()),t.canBack()||t.canForward()?i.style("opacity",1).style("pointer-events","auto"):i.style("opacity",0).style("pointer-events","none")}}(t,e);return e.changed(),i.updateButtons(),Object.assign(Object.assign({},e),{controls:i})}openWithoutRelCancel(e){this.cardEditForm(e)}getFormContDefault(){let e=r.Ltv(this.cont).select("div.f3-form-cont").node();return e||(e=r.Ltv(this.cont).append("div").classed("f3-form-cont",!0).node()),{el:e,populate(t){e.innerHTML="",e.appendChild(t)},open(){r.Ltv(e).classed("opened",!0)},close(){r.Ltv(e).classed("opened",!1).html("")}}}setFormCont(e){return this.formCont=e,this}cardEditForm(e){let t={},i=null==e?void 0:e._new_rel_data;i?t.onCancel=()=>this.addRelativeInstance.onCancel():(t.addRelative=this.addRelativeInstance,t.removeRelative=this.removeRelativeInstance,t.deletePerson=()=>{b(e,this.store.getData()),this.openFormWithId(this.store.getLastAvailableMainDatum().id),this.store.updateTree({})});let r=function({datum:e,store:t,fields:i,postSubmitHandler:r,addRelative:a,removeRelative:n,deletePerson:s,onCancel:l,editFirst:d,link_existing_rel_config:o,onFormCreation:c,no_edit:h,onSubmit:u,onDelete:p,canEdit:f,canDelete:_}){let g,m=!_||_(e);!f||f(e)||(h=!0,m=!1);let v={datum_id:e.id,fields:[],onSubmit:function(i){u?u(i,e,a,()=>r({})):(i.preventDefault(),a(),r({}));function a(){var r,a;let n=new FormData(i.target);r=e,a=t.getData(),n.forEach((e,t)=>r.data[t]=e),function(e,t){Object.keys(e.data).forEach(i=>{if(i.includes("__ref__")){let r=i.split("__ref__")[1],a=t.find(e=>e.id===r);if(!a)return;let n=i.split("__ref__")[0]+"__ref__"+e.id;a.data[n]=e.data[i]}})}(r,a),r.to_add&&delete r.to_add,r.unknown&&delete r.unknown}},onCancel:l,onFormCreation:c,no_edit:h,gender_field:{id:"gender",type:"switch",label:"Gender",initial_value:e.data.gender,disabled:!1,options:[{value:"M",label:"Male"},{value:"F",label:"Female"}]}};if(e._new_rel_data)g=Object.assign(Object.assign({},v),{title:e._new_rel_data.label,new_rel:!0,editable:!0});else{if(!a)throw Error("addRelative is required");if(!n)throw Error("removeRelative is required");g=Object.assign(Object.assign({},v),{onDelete:function(){p?p(e,()=>s(),()=>r({delete:!0})):(s(),r({delete:!0}))},addRelative:()=>a.activate(e),addRelativeCancel:()=>a.onCancel(),addRelativeActive:a.is_active,removeRelative:()=>n.activate(e),removeRelativeCancel:()=>n.onCancel(),removeRelativeActive:n.is_active,editable:!1,can_delete:m})}return(e._new_rel_data||e.to_add||e.unknown)&&o&&(g.linkExistingRelative=function(e,t,i){if(!i)throw Error("link_existing_rel_config is required");return{title:i.title,select_placeholder:i.select_placeholder,options:(function(e,t){var i,r;let a,n=e._new_rel_data?t.find(t=>t.id===e._new_rel_data.rel_id):null,s=(i=e,r=t,a=[],function e(t){t.rels.parents.forEach(t=>{if(t){a.push(t);let i=r.find(e=>e.id===t);if(!i)throw Error("Parent not found");e(i)}})}(i),a),l=d(e,t);if(e._new_rel_data&&["son","daughter"].includes(e._new_rel_data.rel_type)){if(!n)throw Error("Rel datum not found");l.push(...d(n,t))}return t.filter(t=>t.id!==e.id&&t.id!==(null==n?void 0:n.id)&&!t._new_rel_data&&!t.to_add&&!t.unknown).filter(e=>!s.includes(e.id)).filter(e=>!l.includes(e.id)).filter(t=>!(t.rels.spouses||[]).includes(e.id));function d(e,t){let i=[];return function e(r){(r.rels.children?[...r.rels.children]:[]).forEach(r=>{i.push(r);let a=t.find(e=>e.id===r);if(!a)throw Error("Child not found");e(a)})}(e),i}})(e,t).map(e=>({value:e.id,label:i.linkRelLabel(e)})).sort((e,t)=>"string"==typeof e.label&&"string"==typeof t.label?e.label.localeCompare(t.label):e.label<t.label?-1:1),onSelect:y}}
254(e,t.getData(),o)),h?g.editable=!1:d&&(g.editable=!0),i.forEach(i=>{var r;"rel_reference"===i.type?((r=i).getRelLabel||console.error("getRelLabel is not set"),"spouse"===r.rel_type&&(e.rels.spouses||[]).forEach(i=>{let a=t.getDatum(i);if(!a)throw Error("Spouse not found");let n=`${r.id}__ref__${i}`,s={id:n,type:"rel_reference",label:r.label,rel_id:i,rel_label:r.getRelLabel(a),initial_value:e.data[n],rel_type:r.rel_type};g.fields.push(s)})):"select"===i.type?function(t){if(!t.options&&!t.optionCreator)return console.error("optionCreator or options is not set for field",t);let i={id:t.id,type:t.type,label:t.label,initial_value:e.data[t.id],placeholder:t.placeholder,options:t.options||t.optionCreator(e)};g.fields.push(i)}(i):g.fields.push({id:i.id,type:i.type,label:i.label,initial_value:e.data[i.id]})}),g;function y(e){r({link_rel_id:e.target.value})}}(Object.assign({store:this.store,datum:e,postSubmitHandler:t=>(function(t,i){if(t.addRelativeInstance.is_active){t.addRelativeInstance.onChange(e,i),t.postSubmit&&t.postSubmit(e,t.store.getData());let r=t.addRelativeInstance.datum;if(!r)throw Error("Active datum not found");t.store.updateMainId(r.id),t.openWithoutRelCancel(r)}else(e.to_add||e.unknown)&&(null==i?void 0:i.link_rel_id)?(V(e,i.link_rel_id,t.store.getData()),t.store.updateMainId(i.link_rel_id),t.openFormWithId(i.link_rel_id)):(null==i?void 0:i.delete)||(t.postSubmit&&t.postSubmit(e,t.store.getData()),t.openFormWithId(e.id));t.is_fixed||t.closeForm(),t.store.updateTree({}),t.updateHistory()})(this,t),fields:this.fields,onCancel:()=>{},editFirst:this.editFirst,no_edit:this.no_edit,link_existing_rel_config:this.link_existing_rel_config,onFormCreation:this.onFormCreation,onSubmit:this.onSubmit,onDelete:this.onDelete,canEdit:this.canEdit,canDelete:this.canDelete},t)),a=i?(this.createFormNew||function(e,t){return A(e,t)})(r,this.closeForm.bind(this)):(this.createFormEdit||function(e,t){return A(e,t)})(r,this.closeForm.bind(this));this.formCont.populate(a),this.openForm()}openForm(){this.formCont.open()}closeForm(){this.formCont.close(),this.store.updateTree({})}fixed(){return this.is_fixed=!0,this.formCont.el&&r.Ltv(this.formCont.el).style("position","relative"),this}absolute(){return this.is_fixed=!1,this.formCont.el&&r.Ltv(this.formCont.el).style("position","absolute"),this}setCardClickOpen(e){return e.setOnCardClick((t,i)=>{this.isAddingRelative()||this.isRemovingRelative()?this.open(i.data):(this.open(i.data),e.onCardClickDefault(t,i))}),this}openFormWithId(e){if(e){let t=this.store.getDatum(e);if(!t)throw Error("Datum not found");this.openWithoutRelCancel(t)}else{let e=this.store.getMainDatum();if(!e)throw Error("Main datum not found");this.openWithoutRelCancel(e)}}setNoEdit(){return this.no_edit=!0,this}setEdit(){return this.no_edit=!1,this}setFields(e){let t=[];if(!Array.isArray(e))return console.error("fields must be an array"),this;for(let i of e)"string"==typeof i?t.push({type:"text",label:i,id:i}):"object"==typeof i?i.id?t.push(i):console.error("fields must be an array of objects with id property"):console.error("fields must be an array of strings or objects");return this.fields=t,this}setOnChange(e){return this.onChange=e,this}setCanEdit(e){return this.canEdit=e,this}setCanDelete(e){return this.canDelete=e,this}setCanAdd(e){return this.addRelativeInstance.setCanAdd(e),this}addRelative(e){return e||(e=this.store.getMainDatum()),this.addRelativeInstance.activate(e),this}setupModal(){return new B(this.cont)}setEditFirst(e){return this.editFirst=e,this}isAddingRelative(){return this.addRelativeInstance.is_active}isRemovingRelative(){return this.removeRelativeInstance.is_active}setAddRelLabels(e){return this.addRelativeInstance.setAddRelLabels(e),this}setLinkExistingRelConfig(e){return this.link_existing_rel_config=e,this}setOnFormCreation(e){return this.onFormCreation=e,this}setCreateFormEdit(e){return this.createFormEdit=e,this}setCreateFormNew(e){return this.createFormNew=e,this}_getStoreDataCopy(){var e;let t=JSON.parse(JSON.stringify(this.store.getData()));return this.addRelativeInstance.is_active&&(t=this.addRelativeInstance.cleanUp(t)),x(e=t),e.forEach(e
254=>{delete e.main,delete e._tgdp,delete e._tgdp_sp,delete e.__tgdp_sp}),e.forEach(e=>{Object.keys(e).forEach(e=>{"_"===e[0]&&console.error("key starts with _",e)})}),t=e}getStoreDataCopy(){return this.exportData()}exportData(){let e=this._getStoreDataCopy();return function(e,t=!1){return e.forEach(i=>{var r;if(t){let t,a;null==(r=i.rels.parents)||r.forEach(i=>{let r=e.find(e=>e.id===i);if(!r)throw Error("Parent not found");"M"===r.data.gender&&(t?a=r.id:t=r.id),"F"===r.data.gender&&(a?t=r.id:a=r.id)}),t&&(i.rels.father=t),a&&(i.rels.mother=a),delete i.rels.parents}i.rels.parents&&0===i.rels.parents.length&&delete i.rels.parents,i.rels.spouses&&0===i.rels.spouses.length&&delete i.rels.spouses,i.rels.children&&0===i.rels.children.length&&delete i.rels.children}),e}(e,this.store.state.legacy_format)}getDataJson(){return JSON.stringify(this.exportData(),null,2)}updateHistory(){this.history&&(this.history.changed(),this.history.controls.updateButtons()),this.onChange&&this.onChange()}setPostSubmit(e){return this.postSubmit=e,this}setOnSubmit(e){return this.onSubmit=e,this}setOnDelete(e){return this.onDelete=e,this}destroy(){return this.history.controls.destroy(),this.history=null,this.formCont.el&&r.Ltv(this.formCont.el).remove(),this.addRelativeInstance.onCancel&&this.addRelativeInstance.onCancel(),this.store.updateTree({}),this}}class Z{constructor(e,t,i={}){this.cont=e,this.options=[],this.onSelect=t,this.config=i,this.autocomplete_cont=r.Ltv(this.cont).append("div").attr("class","f3-autocomplete-cont").node(),this.create()}create(){var e;let t=this;r.Ltv(this.autocomplete_cont).html(`
255      <div class="f3-autocomplete">
256        <div class="f3-autocomplete-input-cont">
257          <input type="text" placeholder="${(null==(e=this.config)?void 0:e.placeholder)||"Search"}">
258          <span class="f3-autocomplete-toggle">${E(`
259    <g data-icon="chevron-down">
260      ${k()}
261      <path d="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z" />
262    </g>
263  `)}</span>
264        </div>
265        <div class="f3-autocomplete-items" tabindex="0"></div>
266      </div>
267    `);let i=r.Ltv(this.autocomplete_cont).select(".f3-autocomplete"),a=i.select("input"),n=i.select(".f3-autocomplete-items");function s(){i.classed("active",!0);let e=a.property("value"),r=t.options.filter(t=>t.label.toLowerCase().includes(e.toLowerCase()));r.forEach(function(t){let i=t.label.toLowerCase().indexOf(e.toLowerCase());-1!==i?t.label_html=t.label.substring(0,i)+"<strong>"+t.label.substring(i,i+e.length)+"</strong>"+t.label.substring(i+e.length):t.label_html=t.label}),r.sort(function(e,t){return e.label<t.label?-1:+(e.label>t.label)}),d(r)}function l(){i.classed("active",!1),d([])}function d(e){n.selectAll("div.f3-autocomplete-item").data(e,e=>null==e?void 0:e.value).join("div").attr("class","f3-autocomplete-item").on("click",(e,i)=>{t.onSelect(i.value)}).html(e=>{var t;return e.optionHtml?e.optionHtml(e):(t=e,`<div class="${t.class?t.class:""}">${t.label_html}</div>`)})}i.on("focusout",()=>{setTimeout(()=>{i.node().contains(document.activeElement)||l()},200)}),a.on("focus",()=>{t.options=t.getOptions(),s()}).on("input",s).on("keydown",function(e){let i=n.selectAll("div.f3-autocomplete-item").nodes(),a=i.findIndex(e=>r.Ltv(e).classed("f3-selected"));if("ArrowDown"===e.key){e.preventDefault();let t=a<i.length-1?a+1:0;s(i,t)}else if("ArrowUp"===e.key){e.preventDefault();let t=a>0?a-1:i.length-1;s(i,t)}else if("Enter"===e.key&&-1!==a){e.preventDefault();
267let n=r.Ltv(i[a]).datum();n&&t.onSelect(n.value)}function s(e,t){e.forEach(e=>r.Ltv(e).classed("f3-selected",!1)),e[t]&&(r.Ltv(e[t]).classed("f3-selected",!0),e[t].scrollIntoView({block:"nearest"}))}}),n.on("wheel",e=>e.stopPropagation()),i.select(".f3-autocomplete-toggle").on("click",e=>{e.stopPropagation();let t=i.classed("active");i.classed("active",!t),t?l():(a.node().focus(),s())})}setOptionsGetter(e){return this.getOptions=e,this}setOptionsGetterPerson(e,t){return this.getOptions=()=>{let i=[];return e().forEach(r=>{var a;let n;r.to_add||r.unknown||r._new_rel_data||i.find(e=>e.value===r.id)||i.push({label:t(r),value:r.id,optionHtml:(n=!v(a=r,e()),e=>{var t;return`
268        <div>
269          <span style="float: left; width: 10px; height: 10px; margin-right: 10px;" class="f3-${"M"===(t=a).data.gender?"male":"F"===t.data.gender?"female":"genderless"}-color">${C()}</span>
270          <span>${e.label_html}</span>
271          ${n?`<span style="float: right; width: 10px; height: 10px; margin-left: 5px;" title="This profile is not connected to the main profile">${E(`
272    <g data-icon="link-off">
273      ${k()}
274      <path d="M17,7H13V8.9H17C18.71,8.9 20.1,10.29 20.1,12C20.1,13.43 19.12,14.63 17.79,15L19.25,16.44C20.88,15.61 22,13.95 
275      22,12A5,5 0 0,0 17,7M16,11H13.81L15.81,13H16V11M2,4.27L5.11,7.38C3.29,8.12 2,9.91 2,12A5,5 0 0,0 7,17H11V15.1H7C5.29,15.1 
276      3.9,13.71 3.9,12C3.9,10.41 5.11,9.1 6.66,8.93L8.73,11H8V13H10.73L13,15.27V17H14.73L18.74,21L20,19.74L3.27,3L2,4.27Z" />
277    </g>
278  `)}</span>`:""}
279        </div>
280      `})})}),i},this}destroy(){this.autocomplete_cont.remove()}}function W(e){let t=[];return Array.isArray(e)?e.forEach(e=>{"function"==typeof e?t.push(e):"string"==typeof e?t.push(t=>t.data[e]):Array.isArray(e)&&t.push(t=>e.map(e=>t.data[e]).join(" "))}):"function"==typeof e?t.push(e):"string"==typeof e&&t.push(t=>t.data[e]),t}function G(e,t){return new K(e,t)}let K=class{constructor(e,t){return this.cont=e,this.svg=this.cont.querySelector("svg.main_svg"),this.store=t,this.card_display=[e=>`${e.data["first name"]} ${e.data["last name"]}`],this.cardImageField="avatar",this.onCardClick=this.onCardClickDefault,this.style="default",this.mini_tree=!1,this.card_dim={},this}getCard(){return function(e){let t="default"===e.style?n:"imageCircleRect"===e.style?function(t){return t.data.data[e.cardImageField]?s(t):l(t)}:"imageCircle"===e.style?s:"imageRect"===e.style?function(e){return i(e)}:"rect"===e.style?l:n;return function(i){var a,n,s,l;let d;if(this.innerHTML=`
281    <div class="card ${(d=[],"M"===(a=i).data.data.gender?d.push("card-male"):"F"===a.data.data.gender?d.push("card-female"):d.push("card-genderless"),d.push(`card-depth-${a.is_ancestry?-a.depth:a.depth}`),a.data.main&&d.push("card-main"),a.data._new_rel_data&&d.push("card-new-rel"),a.data.to_add&&d.push("card-to-add"),a.data.unknown&&d.push("card-unknown"),d).join(" ")}" data-id="${i.tid}" style="transform: translate(-50%, -50%); pointer-events: auto;">
282      ${e.mini_tree?(n=i,!e.mini_tree||n.data.to_add||n.data._new_rel_data||n.all_rels_displayed?"":`<div class="mini-tree">${$()}</div>`):""}
283      ${e.cardInnerHtmlCreator&&!i.data._new_rel_data?e.cardInnerHtmlCreator(i):t(i)}
284    </div>
285    `,this.querySelector(".card").addEventListener("click",t=>e.onCardClick(t,i)),e.onCardUpdate&&e.onCardUpdate.call(this,i),e.onCardMouseenter&&r.Ltv(this).select(".card").on("mouseenter",t=>e.onCardMouseenter(t,i)),e.onCardMouseleave&&r.Ltv(this).select(".card").on("mouseleave",t=>e.onCardMouseleave(t,i)),i.duplicate&&(s=this,l=i,r.Ltv(s).on("mouseenter",e=>{r.Ltv(s.closest(".cards_view")).selectAll(".card_cont").select(".card").classed("f3-card-duplicate-hover",e=>e.data.id===l.data.id)}),r.Ltv(s).on("mouseleave",e=>{r.Ltv(s.closest(".cards_view")).selectAll(".card_cont").select(".card").classed("f3-card-duplicate-hover",!1)})),e.duplicate_branch_toggle&&function(e,t,i,a){let n,s;if(!t.hasOwnProperty("_toggle"))return;let l=e.querySelector(".card"),d=l.querySelector(".card-inner"),o=e.querySelector(".card").offsetWidth;e.querySelector(".card").offsetHeight;let c={};if(t.spouse){let e=t.spouse,r=e.data.main?"main":e.parent.data.id;if(n=e.data._tgdp_sp[r][t.data.id]<0,c.top=60,c.left=t.sx-t.x-30+o/2,i&&(c.top=t.sy-t.x+4,c.left=o/2+4,10>Math.abs(t.sx-t.y)&&(c.left=o-4)),-1===(s=e._toggle_id_sp?e._toggle_id_sp[t.data.id]:-1))return}else{let e=t.data.main?"main":t.parent.data.id;n=t.data._tgdp[e]<0,c.top=-65,c.left=-30+o/2,i&&(c.top=5,c.left=-55),s=t._toggle_id}if(d.style.zIndex=1,r.Ltv(l).append("div").attr("class","f3-toggle-div").attr("style","cursor: pointer; width: 60px; height: 60px;position: absolute; z-index: -1;").style("top",c.top+"px").style("left",c.left+"px").on("click",e=>{if(e.stopPropagation(),t.spouse){let e=t.spouse,i=e.data.main?"main":e.parent.data.id;e.data._tgdp_sp[i].hasOwnProperty(t.data.id)||console.error("no toggle",t,e);let r=e.data._tgdp_sp[i][t.data.id];r=r<0?new Date().getTime():-new Date().getTime(),e.data._tgdp_sp[i][t.data.id]=r}else{let e=t.data.main?"main":t.parent.data.id,i=t.data._tgdp[e];i=i<0?new Date().getTime():-new Date().getTime(),t.data._tgdp[e]=i}a()}).append("div").html(n?E(`
286    <g data-icon="toggle-off">
287      ${k()}
288      <circle class="f3-small-circle" r="4" cx="6" cy="12" />
289      <path d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M7,15A3,3 0 0,1 4,12A3,3 0 0,1 7,9A3,3 0 0,1 10,12A3,3 0 0,1 7,15Z" />
290    </g>
291  `):E(`
292    <g data-icon="toggle-on">
293      ${k()}
294      <circle class="f3-small-circle" r="4" cx="18" cy="12" />
295      <path d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z" />
296    </g>
297  `)).select("svg").classed("f3-toggle-icon",!0).style("color",n?"#585656":"#61bf52").style("padding","0"),r.Ltv(l).select(".f3-toggle-icon .f3-small-circle").style("fill","#fff"),r.Ltv(l).select(".f3-toggle-icon").append("text").attr("transform",n?"translate(10.6, 14.5)":"translate(4.1, 14.5)").attr("fill","#fff").attr("font-size","7px").text("C"+s),n){let e;e=t.is_ancestry?i?"translate(5, -30)rotate(-90)":"translate(0, -10)":i?"translate(11, -22)rotate(90)":"translate(-7, -32)rotate(180)",r.Ltv(l).select(".f3-toggle-div").insert("div").html($()).select("svg").attr("style","position: absolute; z-index: -1;top: 0;left: 0;border-radius: 0;").style("width","66px").style("height","112px").attr("transform",e).attr("viewBox","0 0 72 125").select("line").attr("y1",t.is_ancestry?"62":"92")}}(this,i,e.store.state.is_horizontal,e.store.updateTree),location.origin.includes("localhost")&&(i.__node=this.querySelector(".card"),i.__label=i.data.data["first name"],i.data.to_add)){let e=i.spouse||i.coparent||null;e&&r.Ltv(this).select(".card").attr("data-to-add",e.data.data["first name"])}};function i(t){return`
298    <div class="card-inner card-image-rect" ${d()}>
299      ${t.data.data[e.cardImageField]?`<img src="${t.data.data[e.cardImageField]}" ${o()}>`:c(t)}
300      <div class="card-label">${a(t)}</div>
301      ${t.duplicate?h(t):""}
302    </div>
303    `}function a(t){var i;let r;return t.data._new_rel_data?(i=t,(r=[]).push(`data-rel-type="${i.data._new_rel_data.rel_type}"`),["son","daughter"].includes(i.data._new_rel_data.rel_type)&&r.push(`data-other-parent-id="${i.data._new_rel_data.other_parent_id}"`),`<div ${r.join(" ")}>${i.data._new_rel_data.label}</div>`):t.data.to_add?`<div>${e.empty_card_label||"ADD"}</div>
303`:t.data.unknown?`<div>${e.unknown_card_label||"UNKNOWN"}</div>`:`
304      ${e.card_display.map(e=>`<div>${e(t.data)}</div>`).join("")}
305    `}function n(e){return i(e)}function s(t){return`
306    <div class="card-inner card-image-circle" ${d()}>
307      ${t.data.data[e.cardImageField]?`<img src="${t.data.data[e.cardImageField]}" ${o()}>`:c(t)}
308      <div class="card-label">${a(t)}</div>
309      ${t.duplicate?h(t):""}
310    </div>
311    `}function l(e){return`
312    <div class="card-inner card-rect" ${d()}>
313      ${a(e)}
314      ${e.duplicate?h(e):""}
315    </div>
316    `}function d(){let t='style="';return e.card_dim.w||e.card_dim.h?(t+=`width: ${e.card_dim.w}px; min-height: ${e.card_dim.h}px;`,e.card_dim.height_auto?t+="height: auto;":t+=`height: ${e.card_dim.h}px;`,t+='"'):""}function o(){let t='style="position: relative;';return e.card_dim.img_w||e.card_dim.img_h||e.card_dim.img_x||e.card_dim.img_y?t+=`width: ${e.card_dim.img_w}px; height: ${e.card_dim.img_h}px;left: ${e.card_dim.img_x}px; top: ${e.card_dim.img_y}px;"`:""}function c(t){return t.data._new_rel_data?`<div class="person-icon" ${o()}>${E(w())}</div>`:`<div class="person-icon" ${o()}>${e.defaultPersonIcon?e.defaultPersonIcon(t):C()}</div>`}function h(e){return`<div class="f3-card-duplicate-tag">x${e.duplicate}</div>`}}({store:this.store,card_display:this.card_display,cardImageField:this.cardImageField,defaultPersonIcon:this.defaultPersonIcon,onCardClick:this.onCardClick,style:this.style,mini_tree:this.mini_tree,onCardUpdate:this.onCardUpdate,card_dim:this.card_dim,empty_card_label:this.store.state.single_parent_empty_card_label||"",unknown_card_label:this.store.state.unknown_card_label||"",cardInnerHtmlCreator:this.cardInnerHtmlCreator,duplicate_branch_toggle:this.store.state.duplicate_branch_toggle,onCardMouseenter:this.onCardMouseenter?this.onCardMouseenter.bind(this):void 0,onCardMouseleave:this.onCardMouseleave?this.onCardMouseleave.bind(this):void 0})}setCardDisplay(e){return this.card_display=W(e),this}setCardImageField(e){return this.cardImageField=e,this}setDefaultPersonIcon(e){return this.defaultPersonIcon=e,this}setOnCardClick(e){return this.onCardClick=e,this}onCardClickDefault(e,t){this.store.updateMainId(t.data.id),this.store.updateTree({})}setStyle(e){return this.style=e,this}setMiniTree(e){return this.mini_tree=e,this}setOnCardUpdate(e){return this.onCardUpdate=e,this}setCardDim(e){if("object"!=typeof e)return console.error("card_dim must be an object"),this;for(let t in e){let i=e[t];if("number"!=typeof i&&"boolean"!=typeof i){console.error(`card_dim.${t} must be a number or boolean`);break}"width"===t&&(t="w"),"height"===t&&(t="h"),"img_width"===t&&(t="img_w"),"img_height"===t&&(t="img_h"),"img_x"===t&&(t="img_x"),"img_y"===t&&(t="img_y"),this.card_dim[t]=i}return this}resetCardDim(){return this.card_dim={},this}setCardInnerHtmlCreator(e){return this.cardInnerHtmlCreator=e,this}setOnHoverPathToMain(){return this.onCardMouseenter=this.onEnterPathToMain.bind(this),this.onCardMouseleave=this.onLeavePathToMain.bind(this),this}unsetOnHoverPathToMain(){return this.onCardMouseenter=void 0,this.onCardMouseleave=void 0,this}onEnterPathToMain(e,t){this.to_transition=t.data.id;let i=this.store.getTreeMainDatum(),{cards_node_to_main:a,links_node_to_main:n}=function(e,t,i,r){let a=i.is_ancestry,n=t.data(),s=[],l=[];if(a){let a=[],c=i,h=0;for(;c!==r&&h<100;){h++;let e=n.find(e=>!0===e.spouse&&(e.source===c||e.target===c));if(e){let t=o(n.filter(t=>Array.isArray(t.target)&&t.target.includes(e.source)&&t.target.includes(e.target)),r);if(!t)break;a.push(e),a.push(t),c=t.source}else{let e=o(n.filter(e=>Array.isArray(e.target)&&e.target.includes(c)),r);if(!e)break;a.push(e),c=e.source}}t.each(function(e){a.includes(e)&&s.push({link:e,node:this})});let u=d(i,a);e.each(function(e){u.includes(e)&&l.push({card:e,node:this})})}else if(i.spouse&&i.spouse.data===r.data){t.each(function(e){e.target===i&&s.push({link:e,node:this})});let a=[r,i];e.each(function(e){a.includes(e)&&l.push({card:e,node:this})})}else if(i.sibling){t.each(function(e){if(!Array.isArray(i.parents))throw Error("datum.parents is not an array");e.source===i&&s.push({link:e,node:this}),e.source===r&&Array.isArray(e.target)&&2===e.target.length&&s.push({link:e,node:this}),i.parents.includes(e.source)&&!Array.isArray(e.target)&&i.parents.includes(e.target)&&s.push({link:e,node:this})});let a=[r,i,...i.parents||[]];e.each(function(e){a.includes(e)&&l.push({card:e,node:this})})}else{let a=[],o=i,c=0;for(;o!==r&&c<100;){c++;let e=n.find(e=>e.target===o&&Array.isArray(e.source));if(e){let t=n.find(t=>!0===t.spouse&&function(e,t){return e.every(e=>t.some(t=>e===t))}([t.source,t.target],e.source));a.push(e),a.push(t),o=t?t.source:e.source[0]}else{let e=n.find(e=>e.target===o&&!Array.isArray(e.source));if(!e)break;a.push(e),o=e.source}}t.each(function(e){a.includes(e)&&s.push({link:e,node:this})});let h=d(r,a);e.each(function(e){h.includes(e)&&l.push({card:e,node:this})})}
316return{cards_node_to_main:l,links_node_to_main:s};function d(e,t){let a=t.filter(e=>e).reduce((e,t)=>(Array.isArray(t.target)?e.push(...t.target):e.push(t.target),Array.isArray(t.source)?e.push(...t.source):e.push(t.source),e),[]),n=[r,i];return function e(t){t.data.rels.children&&t.data.rels.children.forEach(t=>{let i=a.find(e=>e.data.id===t);i&&(n.push(i),e(i))})}(e),n}function o(e,t){return 0===e.length?null:1===e.length?e[0]:e.find(e=>e.source===t)}}(r.Ltv(this.cont).select("div.cards_view").selectAll(".card_cont"),r.Ltv(this.cont).select("svg.main_svg .links_view").selectAll(".link"),t,i);return a.forEach(e=>{let i=200*Math.abs(t.depth-e.card.depth);r.Ltv(e.node.querySelector("div.card-inner")).transition().duration(0).delay(i).on("end",()=>this.to_transition===t.data.id&&r.Ltv(e.node.querySelector("div.card-inner")).classed("f3-path-to-main",!0))}),n.forEach(e=>{let i=200*Math.abs(t.depth-e.link.depth);r.Ltv(e.node).transition().duration(0).delay(i).on("end",()=>this.to_transition===t.data.id&&r.Ltv(e.node).classed("f3-path-to-main",!0))}),this}onLeavePathToMain(e,t){return this.to_transition=!1,r.Ltv(this.cont).select("div.cards_view").selectAll("div.card-inner").classed("f3-path-to-main",!1),r.Ltv(this.cont).select("svg.main_svg .links_view").selectAll(".link").classed("f3-path-to-main",!1),this}};function Q(e,t){return new X(e,t)}let X=class{constructor(e,t){return this.cont=e,this.store=t,this.svg=this.cont.querySelector("svg.main_svg"),this.card_dim={w:220,h:70,text_x:75,text_y:15,img_w:60,img_h:60,img_x:5,img_y:5},this.card_display=[],this.mini_tree=!0,this.link_break=!1,this.onCardClick=this.onCardClickDefault.bind(this),this}getCard(){var e;return T((e=function(e){let t={img:!0,mini_tree:!0,link_break:!1,card_dim:{w:220,h:70,text_x:75,text_y:15,img_w:60,img_h:60,img_x:5,img_y:5}};for(let i in e||(e={}),t)void 0===e[i]&&(e[i]=t[i]);return e}(e={store:this.store,svg:this.svg,card_dim:this.card_dim,card_display:this.card_display,mini_tree:this.mini_tree,link_break:this.link_break,onCardClick:this.onCardClick,onCardUpdate:this.onCardUpdate})).svg,e.card_dim),function(t){let i="M"===t.data.data.gender?"card-male":"F"===t.data.data.gender?"card-female":"card-genderless",a=e.card_dim,n=r.vtF("svg:g").attr("class",`card ${i}`).attr("transform",`translate(${[-a.w/2,-a.h/2]})`);n.append("g").attr("class","card-inner").attr("clip-path","url(#card_clip)"),this.innerHTML="",this.appendChild(n.node()),n.on("click",function(i){i.stopPropagation(),e.onCardClick.call(this,i,t)}),t.data._new_rel_data?(F(D({d:t,card_dim:a,is_new:t.data.to_add}).template,n.node(),!0),F(function({d:e,card_dim:t,label:i}){return{template:`
317    <g class="card-body">
318      <rect class="card-body-rect" width="${t.w}" height="${t.h}" />
319      <text transform="translate(${t.img_w+5}, ${t.h/2})">
320        <tspan font-size="18" dy="8" pointer-events="none">${i}</tspan>
321      </text>
322    </g>
323  `}}({d:t,card_dim:a,label:t.data._new_rel_data.label}).template,this.querySelector(".card-inner"),!0),r.Ltv(this.querySelector(".card-inner")).append("g").attr("class","card-edit-icon").attr("fill","currentColor").attr("transform",`translate(-1,2)scale(${a.img_h/22})`).html(w())):(F(D({d:t,card_dim:a,is_new:t.data.to_add}).template,n.node(),!0),F(function({d:e,card_dim:t,card_display:i}){return{template:`
324    <g class="card-body">
325      <rect width="${t.w}" height="${t.h}" class="card-body-rect" />
326      ${function({d:e,card_dim:t,card_display:i}){return{template:`
327    <g>
328      <g class="card-text" clip-path="url(#card_text_clip)">
329        <g transform="translate(${t.text_x}, ${t.text_y})">
330          <text>
331            ${Array.isArray(i)?i.map(t=>`<tspan x="0" dy="14">${t(e.data)}</tspan>`).join("\n"):i(e.data)}
332          </text>
333        </g>
334      </g>
335      <rect width="${t.w-10}" height="${t.h}" style="mask: url(#fade)" class="text-overflow-mask" /> 
336    </g>
337  `}}({d:e,card_dim:t,card_display:i}).template}
338    </g>
339  `}}({d:t,card_dim:a,card_display:e.card_display}).template,this.querySelector(".card-inner"),!1),e.img&&O(H(t,e),this.querySelector(".card")),e.mini_tree&&O(I(t,e),this.querySelector(".card"),!0)),e.onCardUpdate&&e.onCardUpdate.call(this,t)}}setCardDisplay(e){return this.card_display=W(e),this}setCardDim(e){var t,i;if("object"!=typeof e)return console.error("card_dim must be an object"),this;for(let t in e){let i=e[t];if("number"!=typeof i&&"boolean"!=typeof i)return console.error(`card_dim.${t} must be a number or boolean`),this;"width"===t&&(t="w"),"height"===t&&(t="h"),"img_width"===t&&(t="img_w"),"img_height"===t&&(t="img_h"),"img_x"===t&&(t="img_x"),"img_y"===t&&(t="img_y"),this.card_dim[t]=i}return t=this.svg,i=this.card_dim,t.querySelector("defs#f3CardDef")&&t.querySelector("defs#f3CardDef").remove(),T(t,i),this}setOnCardUpdate(e){return this.onCardUpdate=e,this}setMiniTree(e){return this.mini_tree=e,this}setLinkBreak(e){return this.link_break=e,this}onCardClickDefault(e,t){this.store.updateMainId(t.data.id),this.store.updateTree({})}setOnCardClick(e){return this.onCardClick=e,this}};function Y(e,t){return new ee(e,t)}class ee{constructor(e,t){this.getCard=null,this.transition_time=2e3,this.linkSpouseText=null,this.personSearch=null,this.is_card_html=!1,this.beforeUpdate=null,this.afterUpdate=null,this.cont=function(e){if("string"==typeof e&&(e=document.querySelector(e)),!e)throw Error("cont not found");return e}(e);const{svg:i}=p(this.cont);this.svg=i,function(e){r.Ltv(e).append("div").attr("class","f3-nav-cont")}(this.cont);const a=t&&t.length>0?t[0].id:"";return this.store=this.createStore(t,a),this.setOnUpdate(),this.editTreeInstance=null,this}createStore(e,t){return function(e){let t,i=Object.assign({transition_time:1e3},e);return i.main_id_history=[],i.data&&(o(i.data),d(i.data)),{state:i,updateTree:e=>{let n;
339i.data&&0!==i.data.length&&(n={main_id:i.main_id},void 0!==i.node_separation&&(n.node_separation=i.node_separation),void 0!==i.level_separation&&(n.level_separation=i.level_separation),void 0!==i.single_parent_empty_card&&(n.single_parent_empty_card=i.single_parent_empty_card),void 0!==i.is_horizontal&&(n.is_horizontal=i.is_horizontal),void 0!==i.one_level_rels&&(n.one_level_rels=i.one_level_rels),void 0!==i.modifyTreeHierarchy&&(n.modifyTreeHierarchy=i.modifyTreeHierarchy),void 0!==i.sortChildrenFunction&&(n.sortChildrenFunction=i.sortChildrenFunction),void 0!==i.sortSpousesFunction&&(n.sortSpousesFunction=i.sortSpousesFunction),void 0!==i.ancestry_depth&&(n.ancestry_depth=i.ancestry_depth),void 0!==i.progeny_depth&&(n.progeny_depth=i.progeny_depth),void 0!==i.show_siblings_of_main&&(n.show_siblings_of_main=i.show_siblings_of_main),void 0!==i.private_cards_config&&(n.private_cards_config=i.private_cards_config),void 0!==i.duplicate_branch_toggle&&(n.duplicate_branch_toggle=i.duplicate_branch_toggle),i.tree=function(e,{main_id:t=null,node_separation:i=250,level_separation:n=150,single_parent_empty_card:l=!0,is_horizontal:d=!1,one_level_rels:o=!1,sortChildrenFunction:c,sortSpousesFunction:h,ancestry_depth:u,progeny_depth:p,show_siblings_of_main:f=!1,modifyTreeHierarchy:_,private_cards_config:g,duplicate_branch_toggle:m=!1,on_toggle_one_close_others:v=!0}){var y,b,x,w,C,$;let E,k;if(!e||!e.length)throw Error("No data");d&&([i,n]=[n,i]);let L=l?function(e){let t=[];for(let i=0;i<e.length;i++){let r=e[i];if(r.rels.children&&r.rels.children.length>0){let i;r.rels.spouses||(r.rels.spouses=[]),r.rels.children.forEach(a=>{let n=e.find(e=>e.id===a);if(2!==n.rels.parents.length){var l;if(i||(i=((l=r).rels.spouses||[]).map(t=>e.find(e=>e.id===t)).filter(e=>void 0!==e).find(e=>e.to_add)||function(e){let i=s({data:{gender:"M"===e.data.gender?"F":"M"},rels:{spouses:[e.id]}});return i.to_add=!0,t.push(i),e.rels.spouses||(e.rels.spouses=[]),e.rels.spouses.push(i.id),i}(l)),i.rels.children||(i.rels.children=[]),i.rels.children.push(n.id),1!==n.rels.parents.length)throw Error("child has more than 1 parent");n.rels.parents.push(i.id)}})}}return t.forEach(t=>e.push(t)),e}(e):e;t&&L.find(e=>e.id===t)||(t=L[0].id);let S=L.find(e=>e.id===t);if(!S)throw Error("Main not found");let M=F(S,"children",!1),R=F(S,"parents",!0);L.forEach(e=>e.main=e===S),y=R,b=M,E=(y[0].x-b[0].x)/2,y.forEach(e=>e.x-=E),b.forEach(e=>e.x+=E);let A=(x=R,w=M,x.forEach(e=>{e.is_ancestry=!0}),x.forEach(e=>1===e.depth?e.parent=w[0]:null),[...w,...x.slice(1)]);(C=A).forEach(e=>{if(delete e.children,C.forEach(t=>{t.parent===e&&(t.is_ancestry?(e.parents||(e.parents=[]),e.parents.push(t)):(e.children||(e.children=[]),e.children.push(t)))}),e.parents&&2===e.parents.length){let t=e.parents[0],i=e.parents[1];t.coparent=i,i.coparent=t}}),function(e,t){for(let i=e.length;i--;){let r=e[i];if(!r.is_ancestry){let i=r.data.rels.spouses||[];if(r._ignore_spouses&&(i=i.filter(e=>!r._ignore_spouses.includes(e))),i.length>0){if(o&&r.depth>0)continue;let a="M"===r.data.data.gender?-1:1;r.x+=i.length/2*t*a,i.forEach((i,n)=>{let s={data:L.find(e=>e.id===i),added:!0,depth:r.depth,spouse:r,x:r.x-t*(n+1)*a,y:r.y,tid:`${r.data.id}-spouse-${n}`};s.sx=n>0?s.x:s.x+t/2*a,s.sy=n>0?s.y:s.y+t/2*a,r.spouses||(r.spouses=[]),r.spouses.push(s),e.push(s)})}}if(r.parents&&2===r.parents.length){let e=r.parents[0],i=r.parents[1],a=e.x-(e.x-i.x)/2,n=(e,i)=>a+t/2*(e.x<i.x?1:-1);i.x=n(e,i),e.x=n(i,e)}}}(A,i),f&&!o&&function({tree:e,data_stash:t,node_separation:i,sortChildrenFunction:a}){var n;let s=e.find(e=>e.data.main);if(!s)throw Error("no main");let l=s.data.rels.parents[0],d=s.data.rels.parents[1],o=(n=s,t.filter(e=>e.id!==n.data.id&&!!(l&&e.rels.parents.includes(l)||d&&e.rels.parents.includes(d))));if(o.length>0&&!s.parents)throw Error("no parents");let c=function(t){let i=[];for(let r=0;r<o.length;r++){let a={data:o[r],sibling:!0,x:0,y:t.y,depth:t.depth-1,parents:[]},n=t.parents.find(e=>e.data.id===a.data.rels.parents[0]),s=t.parents.find(e=>e.data.id===a.data.rels.parents[1]);n&&a.parents.push(n),s&&a.parents.push(s),e.push(a),i.push(a)}return i}(s);!function(e){var t,n;let s=[e,...c];a&&s.sort((e,t)=>
339a(e.data,t.data)),s.sort((t,i)=>{let r=e.parents.find(e=>e.data.id===t.data.rels.parents[0]),a=e.parents.find(e=>e.data.id===t.data.rels.parents[1]),n=e.parents.find(e=>e.data.id===i.data.rels.parents[0]),s=e.parents.find(e=>e.data.id===i.data.rels.parents[1]);return!a&&s?-1:a&&!s||!r&&n?1:r&&!n?-1:0});let l=e.x,d=(e.spouses||[]).map(e=>e.x),o=r.Xxv([l,...d]),h=s.findIndex(t=>t.data.id===e.data.id);for(let e=0;e<s.length;e++){if(e===h)continue;let r=s[e];e<h?r.x=(null!=(t=o[0])?t:0)-i*(h-e):r.x=(null!=(n=o[1])?n:0)+i*(e-h)}}(s)}({tree:A,data_stash:L,node_separation:i,sortChildrenFunction:c}),A.forEach(e=>{if(e.is_ancestry||0===e.depth||e.added||e.sibling)return;let t=e.parent,i=((null==t?void 0:t.spouses)||[]).find(t=>e.data.rels.parents.includes(t.data.id));if(t&&i)t.added||i.added||console.error("no added spouse",t,i),r(e,t.added?t:i);else if(t||i){let a=t||i;if(!a)throw Error("no progeny parent");a.sx=a.x,a.sy=a.y,r(e,a)}function r(e,t){e.psx=d?t.y:t.sx,e.psy=d?t.sx:t.y}}),A.forEach(e=>{if(e.y*=e.is_ancestry?-1:1,d){let t=e.x;e.x=e.y,e.y=t}}),A.forEach(e=>{var t,i;let r;return t=e,i=A,e.all_rels_displayed=[...(r=t.data.rels).parents,...r.spouses||[],...r.children||[]].filter(e=>e).every(e=>i.some(t=>t.data.id===e))}),g&&function({tree:e,data_stash:t,private_cards_config:i}){let r={},a=i.condition;if(!a)return console.error("private_cards_config.condition is not set");e.forEach(e=>{var i;let n,s;if(e.data._new_rel_data)return;let l=(i=e.data.id,n=[],s=!1,function e(i){if(s)return;if(r.hasOwnProperty(i))return s=r[i];let l=t.find(e=>e.id===i);if(!l)throw Error("no d");if(l._new_rel_data)return;if(a(l))return s=!0,!0;let d=l.rels;[...d.parents,...d.spouses||[]].forEach(t=>{!t||n.includes(t)||(n.push(t),e(t))})}(i),r[i]=s,s);l&&(e.is_private=l)})}({tree:A,data_stash:L,private_cards_config:g}),k=[],($=A).forEach(e=>{if(k.includes(e.data.id)){let t=$.filter(t=>t.data.id===e.data.id);t.forEach((i,r)=>{i.tid=`${e.data.id}--x${r+1}`,i.duplicate=t.length,k.push(e.data.id)})}else e.tid=e.data.id,k.push(e.data.id)}),m&&A.forEach(e=>{if(!e.spouse)return;let t=e.spouse;if(e.duplicate&&t.data._tgdp_sp){let i=t.data.main?"main":t.parent.data.id;t.data._tgdp_sp[i]?.hasOwnProperty(e.data.id)&&(e._toggle=t.data._tgdp_sp[i][e.data.id])}});let D=function(e,t,i){d&&([t,i]=[i,t]);let a=r.Xxv(e,e=>e.x),n=r.Xxv(e,e=>e.y);if(void 0===a[0]||void 0===a[1]||void 0===n[0]||void 0===n[1])throw Error("No extent");return{width:a[1]-a[0]+t,height:n[1]-n[0]+i,x_off:-a[0]+t/2,y_off:-n[0]+i/2}}(A,i,n);return{data:A,data_stash:L,dim:D,main_id:S.id,is_horizontal:d};function F(e,t,s){var l,d,f;let g,y=r.B22().nodeSize([i,n]).separation(function(e,t){var i,r,a,n,l,d;let c,h,u=1;return s||(w(e,t)||(u+=.25),!o&&(i=e,r=t,C(i)||C(r))&&(u+=(a=e,n=t,((a.data.rels.spouses||[]).length+(n.data.rels.spouses||[]).length)*.5)),w(e,t)&&(l=e,d=t,c=[...l.data.rels.parents].sort(),h=[...d.data.rels.parents].sort(),!(c.length===h.length&&c.every((e,t)=>e===h[t])))&&(u+=.125)),u}),b=r.Sk5(e,"children"===t?function(e){let t=[...e.rels.children||[]].map(e=>L.find(t=>t.id===e)).filter(e=>void 0!==e);return c&&t.sort(c),t.sort((e,t)=>{let i=e._new_rel_data,r=t._new_rel_data;return i&&!r?1:!i&&r?-1:0}),h&&h(e,L),!function(e,t,i){if(!t.rels.children)return;let r=t.rels.spouses||[];e.sort((e,n)=>{let s=a(e,t,i),l=a(n,t,i),d=s?r.indexOf(s.id):-1,o=l?r.indexOf(l.id):-1;return"M"===t.data.gender?d-o:o-d})}(t,e,L),t}:function(e){let t=[...e.rels.parents],i=L.find(e=>e.id===t[0]);return i&&"F"===i.data.gender&&t.reverse(),t.filter(e=>e).map(e=>L.find(t=>t.id===e)).filter(e=>void 0!==e)});l=b,g=s?u:p,o&&(g=1),(g||0===g)&&function e(t,i){i===g?t.children&&delete t.children:t.children&&t.children.forEach(t=>{e(t,i+1)})}(l,0),m&&(d=b,f=L,s?function(e,t=!0){let i,r=[];(function i(a){if(a.children){var n;let s;if(r.some(e=>e.includes(a)))return;let l=(n=a.children,s=[],function e(t){var i,r;t.children&&((i=n)!==(r=t.children)&&i.every(e=>r.some(t=>e.data.id===t.data.id))?s.push(t):t.children.forEach(t=>{e(t)}))}(e),s);if(l.length>0){let i=[a,...l];r.push(i),function(i){if(i.forEach(t=>{t.data._tgdp||(t.data._tgdp={});let i=e===t?"main":t.parent.data.id;t.data._tgdp[i]||(t.data._tgdp[i]=-1),t._toggle=t.data._tgdp[i]}),t){if(i.every(e=>e._toggle<0)){let t=i.sort((e,t)=>
339t._toggle-e._toggle)[0],r=e===t?"main":t.parent.data.id;t.data._tgdp[r]=1}if(i.filter(e=>e._toggle>0).length>1){let t=i.sort((e,t)=>t._toggle-e._toggle)[0];i.forEach(i=>{if(i===t)return;let r=e===i?"main":i.parent.data.id;i.data._tgdp[r]=-1})}}}(i),i.forEach(t=>{let i=e===t?"main":t.parent.data.id;t.data._tgdp[i]<0&&delete t.children})}else a.children.forEach(e=>{i(e)})}})(e),i=0,r.forEach(e=>{i+=1,e.forEach(e=>{e._toggle_id=i})})}(d,v):function(e,t,i=!0){let r,a=[];function n(e,t){return e.every(e=>t.some(t=>e.id===t.id))}function s(e){let t={};return(e.children||[]).forEach(i=>{let r=i.data.rels,a=r.parents[0]===e.data.id?r.parents[1]:r.parents[0];t[a]||(t[a]=[]),t[a].push(i)}),t}(function r(l){if(!l.children)return;let d=l.data,o=(l.data.rels.spouses||[]).map(e=>t.find(t=>t.id===e)),c=s(l);o.forEach(o=>{var h,u,p,f,_,g;let m;if(a.some(e=>e.some(e=>n([d,o],[e.p1,e.p2]))))return;let v=(h=l,u=d,p=o,m=[],function e(i){if(i!==h&&i.children){let r=i.data,a=(i.data.rels.spouses||[]).map(e=>t.find(t=>t.id===e)),l=s(i);a.forEach(t=>{n([u,p],[r,t])?m.push({d:i,p1:r,p2:t}):(l[t.id]||[]).forEach(t=>{e(t)})})}}(e),m);if(v.length>0){let t=[{d:l,p1:d,p2:o},...v];a.push(t),function(t){if(t.forEach(({d:i,p1:r,p2:a},n)=>{var s,l,d;i.data._tgdp_sp||(i.data._tgdp_sp={});let o=e===i?"main":i.parent.data.id;s=i,l=o,d=a,s.data.__tgdp_sp&&s.data.__tgdp_sp[l]&&s.data.__tgdp_sp[l].hasOwnProperty(d.id)&&(s.data._tgdp_sp[l][d.id]=s.data.__tgdp_sp[l][d.id],delete s.data.__tgdp_sp[l][d.id]),i.data._tgdp_sp[o]||(i.data._tgdp_sp[o]={});let c=1;i.data._tgdp_sp[o].hasOwnProperty(a.id)?c=i.data._tgdp_sp[o][a.id]:i.data._tgdp_sp[o][a.id]=c,t[n].val=c}),i){if(t.every(e=>e.val<0)){let{d:i,p1:r,p2:a}=t.sort((e,t)=>t.val-e.val)[0],n=e===i?"main":i.parent.data.id;i.data._tgdp_sp[n][a.id]=1}if(t.filter(e=>e.val>0).length>1){let i=t.sort((e,t)=>t.val-e.val)[0];t.forEach(t=>{if(t===i)return;let{d:r,p1:a,p2:n}=t,s=e===r?"main":r.parent.data.id;r.data._tgdp_sp[s][n.id]=-1})}}}(t),t.forEach(({d:t,p1:i,p2:r})=>{let a=e===t?"main":t.parent.data.id;if(t.data._tgdp_sp[a][r.id]<0){let e=s(t);e[r.id]&&(t.children=t.children.filter(t=>!e[r.id].includes(t)),0===t.children.length&&delete t.children)}})}else{let t=e===l?"main":l.parent.data.id;f=l,_=t,g=o,f.data._tgdp_sp&&f.data._tgdp_sp[_]&&f.data._tgdp_sp[_].hasOwnProperty(g.id)&&(f.data.__tgdp_sp||(f.data.__tgdp_sp={}),f.data.__tgdp_sp[_]||(f.data.__tgdp_sp[_]={}),f.data.__tgdp_sp[_][g.id]=f.data._tgdp_sp[_][g.id],delete f.data._tgdp_sp[_][g.id]),(c[o.id]||[]).forEach(e=>{r(e)})}})})(e),r=0,a.forEach(e=>{r+=1,e.forEach(e=>{e.d._toggle_id_sp||(e.d._toggle_id_sp={}),e.d._toggle_id_sp[e.p2.id]=r})})}(d,f,v)),_&&_(b,s),y(b);let x=b.descendants();return x.forEach(e=>{void 0===e.x&&(e.x=0),void 0===e.y&&(e.y=0)}),x;function w(e,t){return e.parent==t.parent}function C(e){return e.data.rels.spouses&&e.data.rels.spouses.length>0}}}(i.data,n),!i.main_id&&i.tree&&l(i.tree.main_id),t&&t(e))},updateData:e=>{o(e),d(e),i.data=e,i.main_id?!i.data.find(e=>e.id===i.main_id)&&i.data.length>0&&l(i.data[0].id):i.data.length>0&&l(i.data[0].id)},updateMainId:l,getMainId:()=>i.main_id,getData:()=>i.data,getTree:()=>i.tree,setOnUpdate:e=>t=e,getMainDatum:function(){let e=i.data.find(e=>e.id===i.main_id);if(!e)throw Error("Main datum not found");return e},getDatum:n,getTreeMainDatum:function(){if(!i.tree)throw Error("No tree");let e=i.tree.data.find(e=>e.data.id===i.main_id);if(!e)throw Error("No tree main datum");return e},getTreeDatum:function(e){if(!i.tree)throw Error("No tree");let t=i.tree.data.find(t=>t.data.id===e);if(t)return t},getLastAvailableMainDatum:function(){let e=i.main_id_history.slice(0).reverse().find(e=>n(e));if(!e&&i.data.length>0&&(e=i.data[0].id),!e)throw Error("No main id");e!==i.main_id&&l(e);let t=n(e);if(!t)throw Error("Main datum not found");return t},methods:{}};function n(e){let t=i.data.find(t=>t.id===e);if(t)return t}function l(e){e!==i.main_id&&(i.main_id_history=i.main_id_history.filter(t=>t!==e).slice(-10),i.main_id_history.push(e),i.main_id=e)}function o(e){if(void 0===i.legacy_format){for(let t of e)if(t.rels.father||t.rels.mother){i.legacy_format=!0;return}i.legacy_format=!1}}}
339({data:e,main_id:t,node_separation:250,level_separation:150,single_parent_empty_card:!0,is_horizontal:!1})}setOnUpdate(){this.store.setOnUpdate(e=>{var t,i,a;let s,d,h,p,f,_;this.beforeUpdate&&this.beforeUpdate(e),e=Object.assign({transition_time:this.store.state.transition_time},e||{}),this.is_card_html&&(e=Object.assign({},e||{},{cardHtml:!0})),function(e,t,i,a={}){a.initial=a.hasOwnProperty("initial")?a.initial:!r.Ltv(t.parentNode).select(".card_cont").node(),a.transition_time=a.hasOwnProperty("transition_time")?a.transition_time:1e3,a.cardComponent?function(e,t,i,a={}){let s=a.cardHtmlDiv?a.cardHtmlDiv:e.closest("#f3Canvas").querySelector("#htmlSvg"),d=r.Ltv(m(()=>s)).selectAll("div.card_cont_fake").data(t.data,e=>e.data.id),o=d.exit(),c=d.enter().append("div").attr("class","card_cont_fake").style("display","none"),h=c.merge(d);o.each(e=>n(e,!1,!0)),c.each(e=>n(e,!0,!1)),o.each(function(e){let t=e?[e._x,e._y]:[0,0],n=r.Ltv(i(e)),s=r.Ltv(this);n.transition().duration(a.transition_time).style("opacity",0).style("transform",`translate(${t[0]}px, ${t[1]}px)`).on("end",()=>s.remove())}),d.each(function(e){}),c.each(function(e){r.Ltv(i(e)).style("position","absolute").style("top","0").style("left","0").style("opacity",0).style("transform",`translate(${e._x}px, ${e._y}px)`)}),h.each(function(e){let n=r.Ltv(i(e)),s=a.initial?l(t,e,a.transition_time):0;n.transition().duration(a.transition_time).delay(s).style("transform",`translate(${e.x}px, ${e.y}px)`).style("opacity",1)})}(t,e,i,a):a.cardHtml?function(e,t,i,a={}){let s=function(e){if(a.cardHtmlDiv)return a.cardHtmlDiv;let t=e.closest("#f3Canvas");if(!t)throw Error("canvas not found");let i=t.querySelector("#htmlSvg");if(!i)throw Error("htmlSvg not found");return i}(e),d=r.Ltv(s).select(".cards_view").selectAll("div.card_cont").data(t.data,e=>e.tid),o=d.exit(),c=d.enter().append("div").attr("class","card_cont").style("pointer-events","none"),h=c.merge(d);o.each(e=>n(e,!1,!0)),c.each(e=>n(e,!0,!1)),o.each(function(e){let t=e?[e._x,e._y]:[0,0],i=r.Ltv(this);i.transition().duration(a.transition_time).style("opacity",0).style("transform",`translate(${t[0]}px, ${t[1]}px)`).on("end",()=>i.remove())}),d.each(function(e){}),c.each(function(e){r.Ltv(this).style("position","absolute").style("top","0").style("left","0").style("transform",`translate(${e._x}px, ${e._y}px)`).style("opacity",0),i.call(this,e)}),h.each(function(e){i.call(this,e);let n=a.initial?l(t,e,a.transition_time):0;r.Ltv(this).transition().duration(a.transition_time).delay(n).style("transform",`translate(${e.x}px, ${e.y}px)`).style("opacity",1)})}(t,e,i,a):function(e,t,i,a={}){let s=r.Ltv(e).select(".cards_view").selectAll("g.card_cont").data(t.data,e=>e.data.id),d=s.exit(),o=s.enter().append("g").attr("class","card_cont"),c=o.merge(s);d.each(e=>n(e,!1,!0)),o.each(e=>n(e,!0,!1)),d.each(function(e){let t=e?[e._x,e._y]:[0,0],i=r.Ltv(this);i.transition().duration(a.transition_time).style("opacity",0).attr("transform",`translate(${t[0]}, ${t[1]})`).on("end",()=>i.remove())}),s.each(function(e){}),o.each(function(e){r.Ltv(this).attr("transform",`translate(${e._x}, ${e._y})`).style("opacity",0),i.call(this,e)}),c.each(function(e){i.call(this,e);let n=a.initial?l(t,e,a.transition_time):0;r.Ltv(this).transition().duration(a.transition_time).delay(n).attr("transform",`translate(${e.x}, ${e.y})`).style("opacity",1)})}(t,e,i,a),function(e,t,i={}){let a=Object.values(t.data.reduce((e,i)=>((function(e,t=!1){var i;let r=[];return(e.spouses||e.coparent)&&function(e){e.spouses?e.spouses.forEach(i=>r.push(t(e,i))):e.coparent&&r.push(t(e,e.coparent));function t(e,t){return{d:[[e.x,e.y],[t.x,t.y]],_d:()=>[e.is_ancestry?[n(e,"x")-1e-4,n(e,"y")]:[e.x,e.y],e.is_ancestry?[n(t,"x"),n(t,"y")]:[e.x-1e-4,e.y]],curve:!1,id:l(e,t),depth:e.depth,spouse:!0,is_ancestry:t.is_ancestry,source:e,target:t}}}(e),function(e){if(!e.parents)return;let t=e.parents[0],i=e.parents[1]||t,n={x:a(t,i,"x"),y:a(t,i,"y")};r.push({d:s(e,n),_d:()=>s({x:e.x,y:e.y},{x:e.x,y:e.y}),curve:!0,id:l(e,t,i),depth:e.depth+1,is_ancestry:!0,source:e,target:[t,i]})}
339(e),(i=e).children&&0!==i.children.length&&i.children.forEach((e,a)=>{var d;let o=(d=e,(i.spouses||[]).find(e=>d.data.rels.parents.includes(e.data.id))||i),c=o.sx;if("number"!=typeof c)throw Error("sx is not a number");let h=t?{x:i.x,y:c}:{x:c,y:i.y};r.push({d:s(e,h),_d:()=>s(h,{x:n(h,"x"),y:n(h,"y")}),curve:!0,id:l(e,i,o),depth:i.depth+1,is_ancestry:!1,source:[i,o],target:e})}),r;function a(e,t,i,r=!1){return r?n(e,i)-(n(e,i)-n(t,i))/2:e[i]-(e[i]-t[i])/2}function n(e,t){let i=e.hasOwnProperty(`_${t}`)?e[`_${t}`]:e[t];if("number"!=typeof i)throw Error(`${t} is not a number`);return i}function s(e,i){var r,a,n,s;let l,d;return t?(r=e,a=i,l=r.x+(a.x-r.x)/2,[[r.x,r.y],[l,r.y],[l,r.y],[l,a.y],[l,a.y],[a.x,a.y]]):(n=e,s=i,d=n.y+(s.y-n.y)/2,[[n.x,n.y],[n.x,d],[n.x,d],[s.x,d],[s.x,d],[s.x,s.y]])}function l(...e){return e.map(e=>e.tid).sort().join(", ")}})(i,t.is_horizontal).forEach(t=>e[t.id]=t),e),{})),n=r.Ltv(e).select(".links_view").selectAll("path.link").data(a,e=>e.id);if(void 0===i.transition_time)throw Error("transition_time is undefined");let s=n.exit(),d=n.enter().append("path").attr("class","link"),o=d.merge(n);s.each(function(e){let t=r.Ltv(this);t.transition("op").duration(800).style("opacity",0),t.transition("path").duration(i.transition_time).attr("d",u(e,!0)).on("end",()=>t.remove())}),d.each(function(e){r.Ltv(this).attr("fill","none").attr("stroke","#fff").attr("stroke-width",1).style("opacity",0).attr("d",u(e,!0))}),o.each(function(e){let a=r.Ltv(this),n=i.initial?l(t,e,i.transition_time):0;a.transition("path").duration(i.transition_time).delay(n).attr("d",u(e)).style("opacity",1)})}(t,e,a);let s=a.tree_position||"fit";a.initial?c({svg:t,svg_dim:t.getBoundingClientRect(),tree_dim:e.dim,transition_time:0}):"fit"===s?c({svg:t,svg_dim:t.getBoundingClientRect(),tree_dim:e.dim,transition_time:a.transition_time}):"main_to_middle"===s&&function({datum:e,svg:t,svg_dim:i,scale:r,transition_time:a}){let n=r||1,s=i.width/2-e.x*n;o({t:{k:n,x:s/n,y:(i.height/2-e.y)/n},svg:t,transition_time:a})}({datum:e.data[0],svg:t,svg_dim:t.getBoundingClientRect(),scale:a.scale,transition_time:a.transition_time})}(this.store.getTree(),this.svg,this.getCard(),e||{}),this.linkSpouseText&&(t=this.svg,i=this.store.getTree(),a=Object.assign({},e||{},{linkSpouseText:this.linkSpouseText,node_separation:this.store.state.node_separation}),s=[],i.data.forEach(e=>{e.coparent&&"F"===e.data.data.gender&&s.push({nodes:[e,e.coparent],id:`${e.data.id}--${e.coparent.data.id}`}),e.spouses&&e.spouses.forEach(t=>s.push({nodes:[t,e],id:`${t.data.id}--${e.data.id}`}))}),h=(d=r.Ltv(t).select(".links_view").selectAll("g.link-text").data(s,e=>e.id)).exit(),f=(p=d.enter().append("g").attr("class","link-text")).merge(d),_=(e,t)=>e.spouse&&"F"===e.data.data.gender?e.x-a.node_separation/2:t.spouse&&"M"===t.data.data.gender?t.x+a.node_separation/2:Math.min(e.x,t.x)+a.node_separation/2,h.each(function(e){let t=r.Ltv(this);t.transition("text").duration(100).style("opacity",0).on("end",()=>t.remove())}),p.each(function(e){let[t,i]=e.nodes,a=r.Ltv(this);a.attr("transform",`translate(${_(t,i)}, ${t.y-3})`).style("opacity",0),a.append("text").style("font-size","12px").style("fill","#fff").style("text-anchor","middle")}),f.each(function(e){let[t,n]=e.nodes,s=r.Ltv(this),d=a.initial?l(i,t,a.transition_time):0;s.select("text").text(a.linkSpouseText(t,n)),s.transition("text").duration(a.transition_time).delay(d).attr("transform",`translate(${_(t,n)}, ${t.y-3})`),s.transition("text-op").duration(100).delay(d+a.transition_time).style("opacity",1)})),this.afterUpdate&&this.afterUpdate(e)})}updateTree(e={initial:!1}){return this.store.updateTree(e),this}updateData(e){return this.store.updateData(e),this}setCardYSpacing(e){return"number"!=typeof e?console.error("card_y_spacing must be a number"):this.store.state.level_separation=e,this}setCardXSpacing(e){return"number"!=typeof e?console.error("card_x_spacing must be a number"):this.store.state.node_separation=e,this}setOrientationVertical(){return this.store.state.is_horizontal=!1,this}setOrientationHorizontal(){return this.store.state.is_horizontal=!0,this}setShowSiblingsOfMain(e){return this.store.state.show_siblings_of_main=e,this}setModifyTreeHierarchy(e){return this.store.state.modifyTreeHierarchy=e,this}setPrivateCardsConfig(e){return this.store.state.private_cards_config=e,this}setLinkSpouseText(e){return this.linkSpouseText=e,this}setSingleParentEmptyCard(e,{label:t="Unknown"}={}){return this.store.state.single_parent_empty_card=e,this.store.state.single_parent_empty_card_label=t,this.editTreeInstance&&this.editTreeInstance.addRelativeInstance.is_active&&this.editTreeInstance.addRelativeInstance.onCancel(),x(this.store.getData()||[]),this}setCard(e){if(e===G)return this.setCardHtml();if(e===Q)return this.setCardSvg();throw Error("Card must be an instance of cardHtml or cardSvg")}setCardHtml(){let e=this.cont.querySelector("#htmlSvg");if(!e)throw Error("htmlSvg not found");this.is_card_html=!0,this.svg.querySelector(".cards_view").innerHTML="",e.style.display="block";let t=G(this.cont,this.store);return this.getCard=()=>t.getCard(),t}setCardSvg(){let e=this.cont.querySelector("#htmlSvg");if(!e)throw Error("htmlSvg not found");this.is_card_html=!1,this.svg.querySelector(".cards_view").innerHTML="",e.style.display="none";let t=Q(this.cont,this.store);return this.getCard=()=>t.getCard(),t}setTransitionTime(e){return this.store.state.transition_time=e,this}setSortChildrenFunction(e){return this.store.state.sortChildrenFunction=e,this}setSortSpousesFunction(e){return this.store.state.sortSpousesFunction=e,this}setAncestryDepth(e){return this.store.state.ancestry_depth=e,this}setProgenyDepth(e){return this.store.state.progeny_depth=e,this}getMaxDepth(e){return function(e,t){let i=t.find(t=>
339t.id===e);if(!i)throw Error("no datum");let a=r.Sk5(i,e=>e.rels.parents.filter(e=>e).map(e=>t.find(t=>t.id===e)).filter(e=>e&&!e._new_rel_data&&!e.to_add)),n=r.Sk5(i,e=>[...e.rels.children||[]].map(e=>t.find(t=>t.id===e)).filter(e=>e&&!e._new_rel_data&&!e.to_add));return{ancestry:a.height,progeny:n.height}}(e,this.store.getData())}calculateKinships(e,t={}){var i,r,a,n,s,l,d;let o,c,h;return i=e,r=this.store.getData(),a=t,o=r.find(e=>e.id===i),c={},function e(t,i,a,n){if(!t||c[t])return;i&&(c[t]=i);let s=r.find(e=>e.id===t).rels;if("self"===i)s.parents.forEach(i=>e(i,"parent",a-1,t)),(s.spouses||[]).forEach(t=>e(t,"spouse",a)),(s.children||[]).forEach(t=>e(t,"child",a+1));else if("parent"===i)s.parents.forEach(i=>e(i,"grandparent",a-1,t)),(s.children||[]).forEach(t=>{n&&n===t||e(t,"sibling",a+1)});else if("spouse"===i);else if("child"===i)(s.children||[]).forEach(t=>e(t,"grandchild",a+1));else if("sibling"===i)(s.children||[]).forEach(t=>e(t,"nephew",a+1));else if("grandparent"===i)n||console.error(`${i} should have prev_rel_id`),s.parents.forEach(i=>e(i,"great-grandparent",a-1,t)),(s.children||[]).forEach(t=>{n&&n===t||e(t,"uncle",a+1)});else if(i.includes("grandchild"))(s.children||[]).forEach(t=>e(t,N(i,a+1),a+1));else if(i.includes("great-grandparent"))n||console.error(`${i} should have prev_rel_id`),s.parents.forEach(r=>e(r,N(i,a-1),a-1,t)),(s.children||[]).forEach(t=>{if(n&&n===t)return;let r=j(a+1);0===r?e(t,"granduncle",a+1):r>0?e(t,N("granduncle",a+1),a+1):console.error(`${i} should have great_count > -1`)});else if("nephew"===i)(s.children||[]).forEach(t=>e(t,"grandnephew",a+1));else if(i.includes("grandnephew"))(s.children||[]).forEach(t=>e(t,N(i,a+1),a+1));else if("uncle"===i)(s.children||[]).forEach(t=>e(t,"1st Cousin",a+1));else if("granduncle"===i)(s.children||[]).forEach(t=>e(t,"1st Cousin 1x removed",a+1));else if(i.includes("great-granduncle")){let t=a+1,i=Math.abs(t);(s.children||[]).forEach(r=>e(r,`1st Cousin ${i}x removed`,t))}else i.slice(4).startsWith("Cousin")?(s.children||[]).forEach(t=>{let r=a+1,n=Math.abs(r),s=+i[0];0===r?e(t,`${P(s+1)} Cousin`,r):r<0?e(t,`${P(s+1)} Cousin ${n}x removed`,r):r>0&&e(t,`${P(s)} Cousin ${n}x removed`,r)}):console.error(`${i} not found`)}(o.id,"self",0),h=[],Object.keys(n=c).forEach(e=>{let t=n[e];if(t.includes("child")||"spouse"===t)return;let i=q(o.id,e,r);if(!i)return console.error(`${r.find(t=>t.id===e).data} not found in main_ancestry`);i.is_half_kin&&h.push(e)}),h.forEach(e=>{n[e]=`Half ${n[e]}`}),a.show_in_law&&(s=c,l=r,Object.keys(s).forEach(e=>{let t=s[e],i=l.find(t=>t.id===e);if("spouse"===t){let e=[];i.rels.parents.forEach(t=>{var i;return((i=t,r.find(e=>e.id===i)).rels.children||[]).forEach(t=>e.push(t))}),e.forEach(e=>{s[e]||(s[e]="sibling-in-law")})}"sibling"===t&&(i.rels.spouses||[]).forEach(e=>{s[e]||(s[e]="sibling-in-law")}),"child"===t&&(i.rels.spouses||[]).forEach(e=>{s[e]||(s[e]="child-in-law")}),"uncle"===t&&(i.rels.spouses||[]).forEach(e=>{s[e]||(s[e]="uncle-in-law")}),t.includes("Cousin")&&(i.rels.spouses||[]).forEach(e=>{s[e]||(s[e]=`${t} in-law`)})})),Object.keys(d=c).forEach(e=>{let t=d[e],i=r.find(t=>t.id===e).data.gender;t.includes("parent")?d[e]=d[e].replace("parent","M"===i?"father":"F"===i?"mother":"parent"):t.includes("sibling")?d[e]=d[e].replace("sibling","M"===i?"brother":"F"===i?"sister":"sibling"):t.includes("child")?d[e]=d[e].replace("child","M"===i?"son":"F"===i?"daughter":"child"):t.includes("uncle")?d[e]=d[e].replace("uncle","M"===i?"uncle":"F"===i?"aunt":"aunt/uncle"):t.includes("nephew")&&(d[e]=d[e].replace("nephew","M"===i?"nephew":"F"===i?"niece":"neice/nephew"))}),c}getKinshipsDataStash(e,t){return function(e,t,i,a){var n,s,l,d,o;let c,h,u,p,f,_,g,m,v,y,b,x=a[t].toLowerCase();if(x.includes("in-law")){b=t;let r=i.find(e=>e.id===b);t=x.includes("sister")||x.includes("brother")?e:null==(n=r.rels.spouses)?void 0:n.find(e=>a[e]&&!a[e].includes("in-law"))}let w=q(e,t,i);if(!w)return console.error(`${t} not found in main_ancestry`);let C=w.is_ancestor?w.found:w.found[0],$=i.find(e=>e.id===C),E=r.Sk5($,function(e){return[...e.rels.children||[]].map(e=>i.find(t=>
339t.id===e)).filter(e=>e)}),k=E.descendants().map(e=>e.data.id),L=R(e,k),S=R(t,k);!function e(t){t.children=(t.children||[]).filter(e=>!!(L.includes(e.data.id)||S.includes(e.data.id))),t.children.forEach(t=>e(t)),0===t.children.length&&delete t.children}(E);let M=E.descendants().map(e=>{let t={id:e.data.id,data:JSON.parse(JSON.stringify(e.data.data)),kinship:a[e.data.id],rels:{parents:[],spouses:[],children:[]}};return e.children&&e.children.length>0&&(t.rels.children=e.children.map(e=>e.data.id)),t});return!(M.length>0)||w.is_ancestor||w.is_half_kin||function(e){let r=e[0];if(!w)return console.error(`${t} not found in main_ancestry`);let n=C===w.found[0]?w.found[1]:w.found[0];r.rels.spouses=[n];let s=i.find(e=>e.id===n),l={id:s.id,data:JSON.parse(JSON.stringify(s.data)),kinship:a[s.id],rels:{spouses:[r.id],children:r.rels.children,parents:[]}};e.push(l),(r.rels.children||[]).forEach(t=>{let r=i.find(e=>e.id===t);e.find(e=>e.id===t).rels.parents=[...r.rels.parents]})}(M),b&&(s=M,x.includes("sister")||x.includes("brother")?(c=(l=s).find(e=>e.id===t),h=A(b),l.push({id:b,data:JSON.parse(JSON.stringify(h.data)),kinship:a[b],rels:{spouses:[],children:[],parents:[]}}),u=[],h.rels.parents.forEach(e=>(A(e).rels.children||[]).forEach(e=>u.push(e))),p=null==(d=A(t).rels.spouses)?void 0:d.find(e=>u.includes(e)),c.rels.spouses=[p],_={id:(f=A(p)).id,data:JSON.parse(JSON.stringify(f.data)),kinship:a[f.id],rels:{spouses:[c.id],children:[],parents:[]}},l.push(_),h.rels.parents.forEach(e=>{let t=A(e),i="M"===t.data.gender?"Father-in-law":"F"===t.data.gender?"Mother-in-law":"Parent-in-law",r={id:t.id,data:JSON.parse(JSON.stringify(t.data)),kinship:i,rels:{spouses:[],children:[p,b],parents:[]}},a=h.rels.parents.find(e=>e!=e);a&&r.rels.parents.push(a),l.unshift(r)})):(g=(o=s).find(e=>e.id===t),m=b,g.rels.spouses=[m],y={id:(v=i.find(e=>e.id===m)).id,data:JSON.parse(JSON.stringify(v.data)),kinship:a[v.id],rels:{spouses:[g.id],children:[],parents:[]}},o.push(y))),M;function R(e,t){let r=[e];return function e(a){i.find(e=>e.id===a).rels.parents.forEach(i=>{t.includes(i)&&(r.push(i),e(i))})}(e),r}function A(e){return i.find(t=>t.id===e)}}(e,t,this.store.getData(),this.calculateKinships(e))}setDuplicateBranchToggle(e){return this.store.state.duplicate_branch_toggle=e,this}editTree(){return this.editTreeInstance=new J(this.cont,this.store)}updateMain(e){let t;return t=e.id?e.id:e.data.id,this.store.updateMainId(t),this.store.updateTree({}),this}updateMainId(e){return this.store.updateMainId(e),this}getMainDatum(){return this.store.getMainDatum()}setBeforeUpdate(e){return this.beforeUpdate=e,this}setAfterUpdate(e){return this.afterUpdate=e,this}setPersonDropdown(e,{cont:t=this.cont.querySelector(".f3-nav-cont"),onSelect:i,placeholder:r="Search"}={}){return i||(i=(function(e){let t=this.store.getDatum(e);if(!t)throw Error("Datum not found");this.editTreeInstance&&this.editTreeInstance.open(t),this.updateMainId(e),this.updateTree({initial:!1})}).bind(this)),this.personSearch=function(e,t,i={}){return new Z(e,t,i)}(t,i,{placeholder:r}),this.personSearch.setOptionsGetterPerson(this.store.getData,e),this}unSetPersonSearch(){return this.personSearch.destroy(),this.personSearch=null,this}}Object.assign({},g,{setupHtmlSvg:function(e){r.Ltv(e()).append("div").attr("class","cards_view_fake").style("display","none")},setupReactiveTreeData:function(e){let t=[];return function(i){var a,n,s,l;let d,o,c,h,u=(a=i,(n=t).length>0?n.filter(e=>!a.find(t=>t.data.id===e.data.id)):[]);return t=[...i,...u],s=m(e),l=t,o=(d=r.Ltv(s).selectAll("div.card_cont_2fake").data(l,e=>e.data.id)).exit(),h=(c=d.enter().append("div").attr("class","card_cont_2fake").style("display","none").attr("data-id",()=>Math.random())).merge(d),o.each(function(e){e&&(e.unique_id=r.Ltv(this).attr("data-id"),r.Ltv(this).remove())}),c.each(function(e){e.unique_id=r.Ltv(this).attr("data-id")}),h.each(function(e){e.unique_id=r.Ltv(this).attr("data-id")}),t}},getUniqueId:function(e){return e.unique_id}})}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.