(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))a(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&a(s)}).observe(document,{childList:!0,subtree:!0});function r(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function a(n){if(n.ep)return;n.ep=!0;const i=r(n);fetch(n.href,i)}})();const od="ocp.lang",ld=["ko","en"],ud="ko",Sl={ko:{"app.title":"RPG Onta","app.subtitle":"프로젝트 크롤, 온톨로지 매핑, 클레임 리뷰, 추천 태그","header.refresh":"새로고침","header.lang.ko":"한","header.lang.en":"EN","sidebar.projects":"프로젝트","sidebar.config_path":"설정 파일 경로","sidebar.create_project":"프로젝트 생성","sidebar.reset_project":"현재 프로젝트 데이터 리셋","sidebar.crawl":"크롤","sidebar.source":"소스","sidebar.url_or_seed":"URL / 시드 URL","sidebar.analyzer":"분석기","sidebar.model":"모델","sidebar.base_url":"Base URL","sidebar.test_analyzer":"분석기 테스트","sidebar.discover":"링크 탐색","sidebar.crawl_url":"URL 크롤","sidebar.max_depth":"최대 깊이","sidebar.max_pages":"최대 페이지","sidebar.same_domain":"같은 도메인만","sidebar.respect_robots":"robots.txt 준수","sidebar.crawl_site":"시드부터 사이트 크롤","sidebar.stop_crawl":"현재 크롤 중지","tabs.overview":"개요","tabs.graph":"그래프","tabs.ontology":"온톨로지","tabs.entities":"엔티티","tabs.claims":"클레임","tabs.debug":"디버그","tabs.research":"리서치","tabs.tags":"태그","tabs.recommend":"추천","graph.search_placeholder":"엔티티명 검색...","graph.entity_type_all":"전체 타입","graph.predicate_all":"전체 관계","graph.min_confidence":"최소 신뢰도","graph.layout":"레이아웃","graph.layout.cose":"Force","graph.layout.circle":"원형","graph.layout.concentric":"동심원","graph.layout.grid":"그리드","graph.layout.breadthfirst":"트리","graph.reload":"그래프 새로고침","graph.fit":"맞춤","graph.empty":"아직 데이터가 없습니다. 크롤이 클레임을 만들면 그래프에 노드가 나타납니다.","graph.stats.nodes":"노드","graph.stats.edges":"엣지","graph.stats.shown":"표시","overview.project":"프로젝트","overview.domain":"도메인","overview.sources":"소스","overview.entities":"엔티티","overview.sources_heading":"소스","pipeline.heading":"파이프라인","pipeline.refresh":"새로고침","pipeline.stage.crawled":"크롤됨","pipeline.stage.extracted":"추출됨","pipeline.stage.claims":"클레임","pipeline.stage.validated":"승인됨","pipeline.stage.graph":"그래프 트리플","pipeline.retained":"유지율","pipeline.entity_types_heading":"엔티티 타입 분포","pipeline.recent_pages":"최근 페이지","pipeline.recent_claims":"최근 클레임","pipeline.empty.pages":"아직 크롤된 페이지가 없습니다.","pipeline.empty.claims":"아직 생성된 클레임이 없습니다.","search.placeholder":"엔티티 · 클레임 · 페이지 검색...","search.aria_label":"전역 검색","search.group.entities":"엔티티","search.group.claims":"클레임","search.group.pages":"페이지","search.group.predicates":"술어","search.empty":"결과 없음","search.hint":"최소 1글자 이상 입력하세요","table.name":"이름","table.type":"타입","table.trust":"신뢰도","table.robots":"robots","table.rate":"속도제한","table.domain":"도메인","table.status":"상태","table.confidence":"신뢰도","table.relation":"관계","table.subject":"주체","table.object":"객체","table.support":"근거 수","table.predicate":"술어","table.tag":"태그","table.brand":"브랜드","table.product":"상품","table.count":"수","table.no_data":"데이터 없음.","table.id":"ID","table.metadata":"메타데이터","table.reason":"사유","table.gap":"갭","table.target":"대상","table.priority":"우선순위","table.description":"설명","table.score":"점수","table.reasons":"근거","ontology.refresh_registry":"레지스트리 새로고침","ontology.configured_entity_types":"설정된 엔티티 타입","ontology.configured_predicates":"설정된 술어","ontology.registry_entity_types":"레지스트리 엔티티 타입","ontology.registry_relation_types":"레지스트리 관계 타입","ontology.triples":"온톨로지 트리플","ontology.proposals":"스키마 제안","ontology.knowledge_gaps":"지식 갭","entities.all_types":"전체 타입","entities.load":"불러오기","entities.merge_source_placeholder":"병합할 엔티티 ID","entities.merge_target_placeholder":"유지할 엔티티 ID","entities.merge":"병합","claims.show_candidates":"후보 포함","claims.refresh":"클레임 새로고침","claims.save":"저장","claims.confidence_label":"신뢰도","claims.reason_label":"사유","workbench.status_filter":"상태","workbench.status.all":"전체","workbench.status.active":"활성","workbench.status.validated_claim":"승인됨","workbench.status.rejected":"거절됨","workbench.search_placeholder":"주체/술어/객체 검색...","workbench.predicate_filter":"관계","workbench.predicate_all":"전체 관계","workbench.empty":"표시할 클레임이 없습니다.","workbench.select_hint":"왼쪽 목록에서 클레임을 선택하세요.","workbench.bulk_count":"{count}개 선택됨","workbench.action.accept":"승인","workbench.action.reject":"거절","workbench.action.unreview":"리뷰 취소","workbench.action.save_confidence":"신뢰도 저장","workbench.action.accept_similar":"동일 술어+객체 일괄 승인","workbench.shortcuts":"단축키","workbench.shortcut.nav":"J/K · 이동","workbench.shortcut.accept":"A · 승인","workbench.shortcut.reject":"R · 거절","workbench.shortcut.bulk_accept":"Shift+A · 선택 일괄 승인","workbench.shortcut.bulk_reject":"Shift+R · 선택 일괄 거절","workbench.shortcut.toggle":"Space · 선택 토글","workbench.shortcut.search":"/ · 검색","workbench.shortcut.escape":"Esc · 선택 해제","workbench.detail.subject":"주체","workbench.detail.predicate":"술어","workbench.detail.object":"객체","workbench.detail.status":"상태","workbench.detail.confidence":"신뢰도","workbench.detail.evidence":"근거 텍스트","workbench.detail.source":"출처","workbench.detail.page":"페이지","workbench.detail.breakdown":"신뢰도 분해","workbench.detail.reason_placeholder":"사유 (선택)","workbench.toast.reviewed":"리뷰 적용됨","workbench.toast.bulk_done":"{count}개 적용됨","debug.refresh_logs":"추출 로그 새로고침","research.heading":"그래프 리서치","research.goal":"목표","research.seed_entity":"시드 엔티티 ID","research.max_steps":"최대 스텝","research.min_relevance":"최소 관련도","research.run":"그래프 리서치 실행","research.load_sessions":"세션 불러오기","research.graph_query":"그래프 쿼리","research.filter_placeholder":"브랜드 또는 태그 필터","research.run_query":"쿼리 실행","research.query.trend_summary":"트렌드 요약","research.query.brand_products":"브랜드 상품","research.query.products_by_tag":"태그별 상품","research.query.relation_summary":"관계 요약","research.query.entity_type_summary":"엔티티 타입 요약","tags.load":"태그 불러오기","recommend.preferred_notes":"선호 노트","recommend.avoided_notes":"기피 노트","recommend.preferred_moods":"선호 무드","recommend.season":"계절","recommend.occasion":"상황","recommend.test":"추천 테스트","inspector.title":"인스펙터","inspector.hint":"엔티티/클레임/페이지를 선택하면 상세가 표시됩니다.","inspector.project_info":"프로젝트 정보","inspector.no_selection":"선택 없음","inspector.latest_activity":"최근 활동","inspector.latest_activity.empty":"최근 크롤/추출 활동이 없습니다.","extractor.rule_based":"규칙 기반","extractor.openai":"OpenAI API","extractor.ollama":"Ollama","extractor.lm_studio":"LM Studio","toast.project_created":"프로젝트 생성됨","toast.reset_confirm":"현재 프로젝트의 크롤 데이터(페이지/엔티티/클레임)를 리셋하시겠습니까?","toast.reset_done":"리셋 완료","toast.url_copied":"URL이 입력란에 복사됨","toast.url_crawl_completed":"URL 크롤 완료","toast.crawl_failed":"크롤 실패","toast.site_crawl_started":"사이트 크롤 시작","toast.site_crawl_failed":"사이트 크롤 실패","toast.site_crawl_completed":"사이트 크롤 완료","toast.stop_requested":"중지 요청됨","toast.stop_failed":"중지 실패","toast.analyzer_connected":"분석기 연결됨","toast.analyzer_failed":"분석기 실패","toast.discovery_failed":"탐색 실패","toast.claim_updated":"클레임 업데이트됨","toast.entity_merged":"엔티티 병합됨","toast.merge_check":"엔티티 ID를 확인하세요","toast.research_completed":"리서치 완료","toast.research_failed":"리서치 실패","toast.config_path_required":"설정 파일 경로가 필요합니다","status.starting_site_crawl":"시드부터 사이트 크롤 시작 중...","status.discovering":"링크 탐색 중...","status.testing_analyzer":"분석기 테스트 중...","status.crawling_url":"URL 1건 크롤 중...","status.stopping_crawl":"사이트 크롤 중지 중","status.research_running":"그래프 리서치 실행 중...","status.no_crawl":"준비됨"},en:{"app.title":"Ontology Crawler","app.subtitle":"Project crawler, ontology mapping, claim review, recommendation tags","header.refresh":"Refresh","header.lang.ko":"한","header.lang.en":"EN","sidebar.projects":"Projects","sidebar.config_path":"Config path","sidebar.create_project":"Create project","sidebar.reset_project":"Reset current project data","sidebar.crawl":"Crawl","sidebar.source":"Source","sidebar.url_or_seed":"URL / Seed URL","sidebar.analyzer":"Analyzer","sidebar.model":"Model","sidebar.base_url":"Base URL","sidebar.test_analyzer":"Test analyzer","sidebar.discover":"Discover links","sidebar.crawl_url":"Crawl URL","sidebar.max_depth":"Max depth","sidebar.max_pages":"Max pages","sidebar.same_domain":"Same domain","sidebar.respect_robots":"Respect robots.txt","sidebar.crawl_site":"Crawl site from seed","sidebar.stop_crawl":"Stop current crawl","tabs.overview":"Overview","tabs.graph":"Graph","tabs.ontology":"Ontology","tabs.entities":"Entities","tabs.claims":"Claims","tabs.debug":"Debug","tabs.research":"Research","tabs.tags":"Tags","tabs.recommend":"Recommend","graph.search_placeholder":"Search entity name...","graph.entity_type_all":"All types","graph.predicate_all":"All relations","graph.min_confidence":"Min confidence","graph.layout":"Layout","graph.layout.cose":"Force","graph.layout.circle":"Circle","graph.layout.concentric":"Concentric","graph.layout.grid":"Grid","graph.layout.breadthfirst":"Tree","graph.reload":"Reload graph","graph.fit":"Fit","graph.empty":"No data yet. As crawling produces claims, nodes will appear on the graph.","graph.stats.nodes":"nodes","graph.stats.edges":"edges","graph.stats.shown":"shown","overview.project":"Project","overview.domain":"Domain","overview.sources":"Sources","overview.entities":"Entities","overview.sources_heading":"Sources","pipeline.heading":"Pipeline","pipeline.refresh":"Refresh","pipeline.stage.crawled":"Crawled","pipeline.stage.extracted":"Extracted","pipeline.stage.claims":"Claims","pipeline.stage.validated":"Validated","pipeline.stage.graph":"Graph triples","pipeline.retained":"retained","pipeline.entity_types_heading":"Entity type breakdown","pipeline.recent_pages":"Recent pages","pipeline.recent_claims":"Recent claims","pipeline.empty.pages":"No pages crawled yet.","pipeline.empty.claims":"No claims generated yet.","search.placeholder":"Search entities, claims, pages...","search.aria_label":"Global search","search.group.entities":"Entities","search.group.claims":"Claims","search.group.pages":"Pages","search.group.predicates":"Predicates","search.empty":"No results","search.hint":"Type at least 1 character","table.name":"Name","table.type":"Type","table.trust":"Trust","table.robots":"Robots","table.rate":"Rate","table.domain":"Domain","table.status":"Status","table.confidence":"Confidence","table.relation":"Relation","table.subject":"Subject","table.object":"Object","table.support":"Support","table.predicate":"Predicate","table.tag":"Tag","table.brand":"Brand","table.product":"Product","table.count":"Count","table.no_data":"No data.","table.id":"ID","table.metadata":"Metadata","table.reason":"Reason","table.gap":"Gap","table.target":"Target","table.priority":"Priority","table.description":"Description","table.score":"Score","table.reasons":"Reasons","ontology.refresh_registry":"Refresh registry","ontology.configured_entity_types":"Configured Entity Types","ontology.configured_predicates":"Configured Predicates","ontology.registry_entity_types":"Registry Entity Types","ontology.registry_relation_types":"Registry Relation Types","ontology.triples":"Ontology Triples","ontology.proposals":"Schema Proposals","ontology.knowledge_gaps":"Knowledge Gaps","entities.all_types":"All types","entities.load":"Load","entities.merge_source_placeholder":"Entity ID to merge","entities.merge_target_placeholder":"Entity ID to keep","entities.merge":"Merge","claims.show_candidates":"Show candidates","claims.refresh":"Refresh claims","claims.save":"Save","claims.confidence_label":"confidence","claims.reason_label":"reason","workbench.status_filter":"Status","workbench.status.all":"All","workbench.status.active":"Active","workbench.status.validated_claim":"Validated","workbench.status.rejected":"Rejected","workbench.search_placeholder":"Search subject/predicate/object...","workbench.predicate_filter":"Predicate","workbench.predicate_all":"All predicates","workbench.empty":"No claims to display.","workbench.select_hint":"Select a claim from the list on the left.","workbench.bulk_count":"{count} selected","workbench.action.accept":"Accept","workbench.action.reject":"Reject","workbench.action.unreview":"Unreview","workbench.action.save_confidence":"Save confidence","workbench.action.accept_similar":"Accept all with same predicate+object","workbench.shortcuts":"Shortcuts","workbench.shortcut.nav":"J/K · navigate","workbench.shortcut.accept":"A · accept","workbench.shortcut.reject":"R · reject","workbench.shortcut.bulk_accept":"Shift+A · bulk accept","workbench.shortcut.bulk_reject":"Shift+R · bulk reject","workbench.shortcut.toggle":"Space · toggle select","workbench.shortcut.search":"/ · search","workbench.shortcut.escape":"Esc · clear selection","workbench.detail.subject":"Subject","workbench.detail.predicate":"Predicate","workbench.detail.object":"Object","workbench.detail.status":"Status","workbench.detail.confidence":"Confidence","workbench.detail.evidence":"Evidence text","workbench.detail.source":"Source","workbench.detail.page":"Page","workbench.detail.breakdown":"Confidence breakdown","workbench.detail.reason_placeholder":"reason (optional)","workbench.toast.reviewed":"Review applied","workbench.toast.bulk_done":"{count} updated","debug.refresh_logs":"Refresh extraction logs","research.heading":"Semantic Exploration","research.goal":"Goal","research.seed_entity":"Seed entity ID","research.max_steps":"Max steps","research.min_relevance":"Min relevance","research.run":"Run graph research","research.load_sessions":"Load sessions","research.graph_query":"Graph Query","research.filter_placeholder":"brand or tag filter","research.run_query":"Run query","research.query.trend_summary":"Trend summary","research.query.brand_products":"Brand products","research.query.products_by_tag":"Products by tag","research.query.relation_summary":"Relation summary","research.query.entity_type_summary":"Entity type summary","tags.load":"Load tags","recommend.preferred_notes":"Preferred notes","recommend.avoided_notes":"Avoided notes","recommend.preferred_moods":"Preferred moods","recommend.season":"Season","recommend.occasion":"Occasion","recommend.test":"Test recommendation","inspector.title":"Inspector","inspector.hint":"Select an entity/claim/page to see details.","inspector.project_info":"Project info","inspector.no_selection":"Nothing selected","inspector.latest_activity":"Latest activity","inspector.latest_activity.empty":"No recent crawl or extraction activity.","extractor.rule_based":"Rule-based","extractor.openai":"OpenAI API","extractor.ollama":"Ollama","extractor.lm_studio":"LM Studio","toast.project_created":"Project created","toast.reset_confirm":"Reset current project crawl data (pages/entities/claims)?","toast.reset_done":"Reset completed","toast.url_copied":"URL copied to input","toast.url_crawl_completed":"URL crawl completed","toast.crawl_failed":"Crawl failed","toast.site_crawl_started":"Site crawl started","toast.site_crawl_failed":"Site crawl failed","toast.site_crawl_completed":"Site crawl completed","toast.stop_requested":"Stop requested","toast.stop_failed":"Stop failed","toast.analyzer_connected":"Analyzer connected","toast.analyzer_failed":"Analyzer failed","toast.discovery_failed":"Discovery failed","toast.claim_updated":"Claim updated","toast.entity_merged":"Entity merged","toast.merge_check":"Check entity IDs","toast.research_completed":"Research completed","toast.research_failed":"Research failed","toast.config_path_required":"Config path is required","status.starting_site_crawl":"Starting site crawl from seed...","status.discovering":"Discovering links...","status.testing_analyzer":"Testing analyzer...","status.crawling_url":"Crawling one URL...","status.stopping_crawl":"Stopping site crawl","status.research_running":"Running graph research...","status.no_crawl":"Ready"}};let Hn=Bv();const co=new Set;function Bv(){try{const e=localStorage.getItem(od);if(e&&ld.includes(e))return e}catch{}return(navigator.language||"").toLowerCase().startsWith("en")?"en":ud}function kl(){return Hn}function Dv(t){if(!(!ld.includes(t)||t===Hn)){Hn=t;try{localStorage.setItem(od,t)}catch{}document.documentElement.setAttribute("lang",t),xt(document),co.forEach(e=>{try{e(t)}catch(r){console.warn("i18n listener failed",r)}})}}function fr(t){return co.add(t),()=>co.delete(t)}function V(t,e){const r=Sl[Hn]||Sl[ud];return t in r?r[t]:e??t}function xt(t=document){t.querySelectorAll("[data-i18n]").forEach(e=>{const r=e.getAttribute("data-i18n");r&&(e.textContent=V(r))}),t.querySelectorAll("[data-i18n-placeholder]").forEach(e=>{const r=e.getAttribute("data-i18n-placeholder");r&&e.setAttribute("placeholder",V(r))}),t.querySelectorAll("[data-i18n-title]").forEach(e=>{const r=e.getAttribute("data-i18n-title");r&&e.setAttribute("title",V(r))}),t.querySelectorAll("[data-i18n-aria-label]").forEach(e=>{const r=e.getAttribute("data-i18n-aria-label");r&&e.setAttribute("aria-label",V(r))})}function Rv(t){t.innerHTML=`

`,document.documentElement.setAttribute("lang",kl()),xt(t);const e=t.querySelectorAll(".lang-btn"),r=()=>{const a=kl();e.forEach(n=>{n.classList.toggle("active",n.dataset.lang===a)})};return e.forEach(a=>{a.addEventListener("click",()=>Dv(a.dataset.lang))}),r(),fr(r),{sidebarHost:document.getElementById("sidebarHost"),workspaceHost:document.getElementById("workspaceHost"),inspectorHost:document.getElementById("inspectorHost")}}async function Fe(t,e={}){const r=await fetch(t,{headers:{"Content-Type":"application/json"},...e});if(!r.ok){let a=`${r.status} ${r.statusText}`;try{const n=await r.json();a=n.detail||n.error||a}catch{}throw new Error(a)}return r.json()}const ue={projects:[],selectedProject:null,projectDetail:null,ontology:null,siteCrawlPoll:null,siteCrawlPageCount:0,siteCrawlPollErrorCount:0,activeSiteCrawlJobId:null,latestActivity:null,selection:null},F=t=>document.getElementById(t);function Di(t){return String(t||"").split(",").map(e=>e.trim()).filter(Boolean)}function z(t){return String(t??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Pl(t){return`${z(t)}`}function Mt(t,e){return e.length?` ${t.map(r=>``).join("")}${e.map(r=>`${r.map(a=>``).join("")}`).join("")}
${z(r)}
${String(a??"")}
`:`
${z(V("table.no_data"))}
`}let Ri=null;function Ae(t){const e=document.getElementById("toast");e&&(e.textContent=t,e.classList.add("show"),Ri&&window.clearTimeout(Ri),Ri=window.setTimeout(()=>e.classList.remove("show"),2400))}function Av(t,{onProjectChanged:e,onCrawlUpdate:r,refreshAll:a}){t.innerHTML=Lv(),xt(t),F("createProjectBtn").addEventListener("click",()=>_v(e)),F("initProjectBtn").addEventListener("click",()=>Iv(e)),F("discoverBtn").addEventListener("click",Fv),F("crawlBtn").addEventListener("click",()=>Ov(a)),F("siteCrawlBtn").addEventListener("click",()=>Nv(r,a)),F("stopSiteCrawlBtn").addEventListener("click",zv),F("extractorProvider").addEventListener("change",Bl),F("testExtractorBtn").addEventListener("click",()=>dd({announce:!0})),Bl(),Vv(),fr(()=>{xt(t),Go(),si(cd)})}function Lv(){return`

`}function Ho(){return{config_path:F("configPath").value.trim(),source_name:F("sourceSelect").value,url:F("crawlUrl").value.trim(),extractor_provider:F("extractorProvider").value,extractor_model:F("extractorModel").value.trim()||null,extractor_base_url:F("extractorBaseUrl").value.trim()||null,check_robots_txt:F("respectRobotsTxt")?.checked??!1}}function Go(){const t=F("projectList");t&&(t.innerHTML="",ue.projects.forEach(e=>{const r=document.createElement("button");r.className=`project-item ${ue.selectedProject===e.name?"active":""}`,r.innerHTML=`${z(e.name)}${z(e.domain)}`,r.addEventListener("click",()=>{const a=new CustomEvent("project:select",{detail:e.name});window.dispatchEvent(a)}),t.appendChild(r)}))}function Mv(t){const e=F("sourceSelect");e&&(e.innerHTML="",(t?.sources??[]).forEach(r=>{const a=document.createElement("option");a.value=r.name,a.textContent=`${r.name} (${r.type})`,e.appendChild(a)}))}async function _v(t){const e=F("configPath").value.trim();if(e)try{const r=await Fe("/projects",{method:"POST",body:JSON.stringify({config_path:e})});Ae(`${V("toast.project_created")}: ${r.name}`),ue.selectedProject=r.name,await t?.()}catch(r){Ae(r.message)}}async function Iv(t){const e=F("configPath").value.trim();if(!e){Ae(V("toast.config_path_required"));return}if(window.confirm(V("toast.reset_confirm")))try{const r=await Fe("/projects/reset",{method:"POST",body:JSON.stringify({config_path:e,project_name:ue.selectedProject})});if(ue.selectedProject=r.name,await t?.(),r.reset){const a=r.deleted?.claims??0,n=r.deleted?.entities??0,i=r.deleted?.pages??0;F("crawlResult").textContent=`${V("toast.reset_done")}: pages ${i}, entities ${n}, claims ${a}`,Ae(`${V("toast.reset_done")}: ${r.name}`)}else F("crawlResult").textContent=`${V("toast.project_created")}: ${r.name}`,Ae(`${V("toast.project_created")}: ${r.name}`)}catch(r){Ae(r.message)}}async function Ov(t){if(ue.selectedProject){F("crawlResult").textContent=V("status.crawling_url");try{const e=await Fe("/crawl",{method:"POST",body:JSON.stringify(Ho())});F("crawlResult").textContent=`URL done: page ${e.page_id}, ${e.crawl_status}/${e.extraction_status}, ${e.page_type}, raw ${e.raw_text_length}, clean ${e.clean_text_length}, claims ${e.claim_count}, entities ${e.entity_count}`,ue.latestActivity={kind:"url_crawl",result:e},Ae(V("toast.url_crawl_completed")),await t?.()}catch(e){F("crawlResult").textContent=`${V("toast.crawl_failed")}: ${e.message}`,Ae(V("toast.crawl_failed"))}}}let cd=null;async function Nv(t,e){if(ue.selectedProject){fo(),ue.siteCrawlPageCount=0,ue.siteCrawlPollErrorCount=0,F("crawlResult").textContent=V("status.starting_site_crawl"),F("discoveredLinks").innerHTML="";try{const r=await Fe("/crawl-site",{method:"POST",body:JSON.stringify({...Ho(),max_depth:Number(F("siteMaxDepth").value||0),max_pages:Number(F("siteMaxPages").value||1),same_domain_only:F("sameDomainOnly").checked,analyze_page_types:["ProductPage","BrandStoryPage","ReviewPage"]})});F("crawlResult").textContent=`Site crawl queued: job ${r.job_id}`,ue.activeSiteCrawlJobId=r.job_id,F("stopSiteCrawlBtn").disabled=!1,si(r),vo(r.job_id,t,e),Ae(V("toast.site_crawl_started"))}catch(r){F("crawlResult").textContent=`${V("toast.site_crawl_failed")}: ${r.message}`,Ae(V("toast.site_crawl_failed"))}}}async function zv(){const t=ue.activeSiteCrawlJobId;if(t){F("stopSiteCrawlBtn").disabled=!0,F("crawlResult").textContent=`${V("status.stopping_crawl")}: job ${t}`;try{const e=await Fe(`/crawl-site/jobs/${t}/cancel`,{method:"POST"});si(e),Ae(V("toast.stop_requested"))}catch(e){F("stopSiteCrawlBtn").disabled=!1,F("crawlResult").textContent=`${V("toast.stop_failed")}: ${e.message}`,Ae(V("toast.stop_failed"))}}}function fo(){ue.siteCrawlPoll&&(window.clearTimeout(ue.siteCrawlPoll),ue.siteCrawlPoll=null)}async function vo(t,e,r){let a;try{a=await Fe(`/crawl-site/jobs/${t}`)}catch(s){const o=ue.siteCrawlPollErrorCount=(ue.siteCrawlPollErrorCount??0)+1;if(F("crawlResult").textContent=`Site crawl status check failed (retry ${o}): ${s.message}`,o>=5){fo(),Ae(V("toast.site_crawl_failed"));return}ue.siteCrawlPoll=window.setTimeout(()=>vo(t,e,r),3e3);return}ue.siteCrawlPollErrorCount=0;const i=(a.progress??{}).pages?.length??0;if(si(a),e?.(a),i!==ue.siteCrawlPageCount){ue.siteCrawlPageCount=i;try{await r?.()}catch(s){console.warn("refreshAll during poll failed",s)}}if(["completed","failed","canceled"].includes(a.status)){fo(),ue.activeSiteCrawlJobId=null,F("stopSiteCrawlBtn").disabled=!0,Ae(a.status==="completed"?V("toast.site_crawl_completed"):`${V("toast.site_crawl_failed")}: ${a.status}`);return}ue.siteCrawlPoll=window.setTimeout(()=>vo(t,e,r),1500)}function si(t){if(cd=t,!t)return;const e=t.progress??{},r=e.pages??[];F("crawlResult").textContent=`Site ${t.status}: visited ${e.visited_count??0}, analyzed ${e.analyzed_count??0}, skipped ${e.skipped_count??0}, queued ${e.queued_count??0}`,F("discoveredLinks").innerHTML=r.map($v).join(""),document.querySelectorAll("[data-discovered-url]").forEach(a=>{a.addEventListener("click",()=>{F("crawlUrl").value=a.dataset.discoveredUrl,Ae(V("toast.url_copied"))})}),ue.latestActivity={kind:"site_crawl",job:t}}function $v(t){const e=`raw ${t.raw_text_length??0}, clean ${t.clean_text_length??0}, removed ${t.removed_noise_zones_count??0}`,r=(t.warnings??[]).length?`, warnings: ${(t.warnings??[]).join("; ")}`:"";return` `}async function Fv(){F("crawlResult").textContent=V("status.discovering"),F("discoveredLinks").innerHTML="";try{const t=await Fe("/discover",{method:"POST",body:JSON.stringify({config_path:F("configPath").value.trim(),source_name:F("sourceSelect").value,url:F("crawlUrl").value.trim(),limit:30,check_robots_txt:F("respectRobotsTxt")?.checked??!1})});if(!t.ok){F("crawlResult").textContent=t.error??V("toast.discovery_failed");return}F("crawlResult").textContent=`Discovered ${t.links.length} links`,F("discoveredLinks").innerHTML=t.links.map(qv).join(""),document.querySelectorAll("[data-discovered-url]").forEach(e=>{e.addEventListener("click",()=>{F("crawlUrl").value=e.dataset.discoveredUrl,Ae(V("toast.url_copied"))})})}catch(t){F("crawlResult").textContent=`${V("toast.discovery_failed")}: ${t.message}`,Ae(V("toast.discovery_failed"))}}function qv(t){return` `}function Bl(){const t=F("extractorProvider").value;F("extractorOptions").classList.toggle("active",t!=="rule_based"),t==="ollama"&&!F("extractorBaseUrl").value.trim()?F("extractorBaseUrl").placeholder="http://localhost:11434/api/chat":t==="lm_studio"&&!F("extractorBaseUrl").value.trim()?(F("extractorBaseUrl").value="http://localhost:1234/v1",F("extractorBaseUrl").placeholder="http://localhost:1234/v1"):F("extractorBaseUrl").placeholder="optional provider endpoint"}async function dd({announce:t=!0}={}){const e=F("extractorProvider").value,r=F("extractorBaseUrl").value.trim();t&&(F("crawlResult").textContent=V("status.testing_analyzer"));try{const a=await Fe("/extractors/models",{method:"POST",body:JSON.stringify({provider:e,base_url:r||null})});if(!a.ok){t&&(F("crawlResult").textContent=`${V("toast.analyzer_failed")}: ${a.error}`,Ae(V("toast.analyzer_failed")));return}const n=a.models??[];n.length&&!F("extractorModel").value.trim()&&(F("extractorModel").value=n[0].id),t&&(F("crawlResult").textContent=n.length?`${V("toast.analyzer_connected")}. Models: ${n.map(i=>i.id).join(", ")}`:`${V("toast.analyzer_connected")}. No models returned.`,Ae(V("toast.analyzer_connected")))}catch(a){t&&Ae(a.message)}}async function Vv(){if(F("extractorProvider").value==="lm_studio")try{await dd({announce:!1})}catch{}}let Rn=null;function Hv(t){Rn=t,An(),fr(An),window.addEventListener("inspector:update",An)}function ur(){An()}function An(){Rn&&(Rn.innerHTML=Gv(),xt(Rn))}function Gv(){const t=ue.selection;return`

${t?Wv(t):Uv()} `}function Uv(){const t=ue.projectDetail,e=ue.latestActivity;return`

${t?`
${z(V("overview.project"))}
${z(t.name)}
${z(V("overview.domain"))}
${z(t.domain)}
${z(V("overview.sources"))}
${(t.sources??[]).length}
`:'

'}

${e?Kv(e):'

'}
`}function Kv(t){if(t.kind==="site_crawl"){const e=t.job??{},r=e.progress??{};return`
job
${z(e.job_id??"-")}
status
${z(e.status??"-")}
visited
${r.visited_count??0}
analyzed
${r.analyzed_count??0}
skipped
${r.skipped_count??0}
queued
${r.queued_count??0}
`}if(t.kind==="url_crawl"){const e=t.result??{};return`
page
${z(e.page_id??"-")}
page_type
${z(e.page_type??"-")}
crawl
${z(e.crawl_status??"-")}
extraction
${z(e.extraction_status??"-")}
claims
${e.claim_count??0}
entities
${e.entity_count??0}
`}return""}function Wv(t){if(t.kind==="entity"){const e=t.data;return`

${z(e.name)}

${z(V("table.id"))}
${z(e.id)}
${z(V("table.type"))}
${z(e.type)}
${z(JSON.stringify(e.metadata??{},null,2))}
`}if(t.kind==="claim"){const e=t.data;return`

${z(e.subject)} · ${z(e.predicate)}

${z(V("table.object"))}
${z(e.object??JSON.stringify(e.object_value??""))}
${z(V("table.status"))}
${z(e.status??"")}
${z(V("table.confidence"))}
${Math.round((e.confidence??0)*100)}%
${e.evidence_text?`

${z(e.evidence_text)}

`:""}
`}if(t.kind==="graph_node"){const e=t.data;return`

${z(e.label)}

${z(V("table.id"))}
${z(e.entityId)}
${z(V("table.type"))}
${z(e.type??"")}
${e.canonical?`
canonical
${z(e.canonical)}
`:""}
${e.metadata&&Object.keys(e.metadata).length?`
${z(JSON.stringify(e.metadata,null,2))}
`:""}
`}if(t.kind==="graph_edge"){const e=t.data;return`

${z(e.predicate)}

${z(V("table.confidence"))}
${Math.round((e.confidence??0)*100)}%
${e.targetName?`
${z(V("table.object"))}
${z(e.targetName)}
`:""}
claim
${z(e.claimId)}
${e.metadata&&Object.keys(e.metadata).length?`
${z(JSON.stringify(e.metadata,null,2))}
`:""}
`}return""}function ho(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,a=Array(e);r=t.length?{done:!0}:{done:!1,value:t[a++]}},e:function(l){throw l},f:n}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i,s=!0,o=!1;return{s:function(){r=r.call(t)},n:function(){var l=r.next();return s=l.done,l},e:function(l){o=!0,i=l},f:function(){try{s||r.return==null||r.return()}finally{if(o)throw i}}}}function fd(t,e,r){return(e=vd(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Zv(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function Qv(t,e){var r=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(r!=null){var a,n,i,s,o=[],l=!0,u=!1;try{if(i=(r=r.call(t)).next,e===0){if(Object(r)!==r)return;l=!1}else for(;!(l=(a=i.call(r)).done)&&(o.push(a.value),o.length!==e);l=!0);}catch(c){u=!0,n=c}finally{try{if(!l&&r.return!=null&&(s=r.return(),Object(s)!==s))return}finally{if(u)throw n}}return o}}function Jv(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function eh(){throw new TypeError(`Invalid attempt to spread non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function at(t,e){return jv(t)||Qv(t,e)||Uo(t,e)||Jv()}function Gn(t){return Yv(t)||Zv(t)||Uo(t)||eh()}function th(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var a=r.call(t,e);if(typeof a!="object")return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}function vd(t){var e=th(t,"string");return typeof e=="symbol"?e:e+""}function ot(t){"@babel/helpers - typeof";return ot=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ot(t)}function Uo(t,e){if(t){if(typeof t=="string")return ho(t,e);var r={}.toString.call(t).slice(8,-1);return r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set"?Array.from(t):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ho(t,e):void 0}}var it=typeof window>"u"?null:window,Dl=it?it.navigator:null;it&&it.document;var rh=ot(""),hd=ot({}),ah=ot(function(){}),nh=typeof HTMLElement>"u"?"undefined":ot(HTMLElement),Qa=function(e){return e&&e.instanceString&&Ze(e.instanceString)?e.instanceString():null},me=function(e){return e!=null&&ot(e)==rh},Ze=function(e){return e!=null&&ot(e)===ah},Ue=function(e){return!It(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},Ne=function(e){return e!=null&&ot(e)===hd&&!Ue(e)&&e.constructor===Object},ih=function(e){return e!=null&&ot(e)===hd},se=function(e){return e!=null&&ot(e)===ot(1)&&!isNaN(e)},sh=function(e){return se(e)&&Math.floor(e)===e},Un=function(e){if(nh!=="undefined")return e!=null&&e instanceof HTMLElement},It=function(e){return Ja(e)||pd(e)},Ja=function(e){return Qa(e)==="collection"&&e._private.single},pd=function(e){return Qa(e)==="collection"&&!e._private.single},Ko=function(e){return Qa(e)==="core"},gd=function(e){return Qa(e)==="stylesheet"},oh=function(e){return Qa(e)==="event"},Sr=function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},lh=function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},uh=function(e){return Ne(e)&&se(e.x1)&&se(e.x2)&&se(e.y1)&&se(e.y2)},ch=function(e){return ih(e)&&Ze(e.then)},dh=function(){return Dl&&Dl.userAgent.match(/msie|trident|edge/i)},pa=function(e,r){r||(r=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var i=[],s=0;sr?1:0},mh=function(e,r){return-1*md(e,r)},xe=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(p-=1),p<1/6?v+(y-v)*6*p:p<1/2?y:p<2/3?v+(y-v)*(2/3-p)*6:v}var d=new RegExp("^"+hh+"$").exec(e);if(d){if(a=parseInt(d[1]),a<0?a=(360- -1*a%360)%360:a>360&&(a=a%360),a/=360,n=parseFloat(d[2]),n<0||n>100||(n=n/100,i=parseFloat(d[3]),i<0||i>100)||(i=i/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(n===0)o=l=u=Math.round(i*255);else{var f=i<.5?i*(1+n):i+n-i*n,h=2*i-f;o=Math.round(255*c(h,f,a+1/3)),l=Math.round(255*c(h,f,a)),u=Math.round(255*c(h,f,a-1/3))}r=[o,l,u,s]}return r},xh=function(e){var r,a=new RegExp("^"+fh+"$").exec(e);if(a){r=[];for(var n=[],i=1;i<=3;i++){var s=a[i];if(s[s.length-1]==="%"&&(n[i]=!0),s=parseFloat(s),n[i]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var o=n[1]||n[2]||n[3],l=n[1]&&n[2]&&n[3];if(o&&!l)return;var u=a[4];if(u!==void 0){if(u=parseFloat(u),u<0||u>1)return;r.push(u)}}return r},Eh=function(e){return Ch[e.toLowerCase()]},bd=function(e){return(Ue(e)?e:null)||Eh(e)||bh(e)||xh(e)||wh(e)},Ch={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},wd=function(e){for(var r=e.map,a=e.keys,n=a.length,i=0;i=l||A<0||m&&M>=f}function T(){var R=e();if(x(R))return k(R);v=setTimeout(T,C(R))}function k(R){return v=void 0,b&&c?w(R):(c=d=void 0,h)}function P(){v!==void 0&&clearTimeout(v),p=0,c=y=d=v=void 0}function B(){return v===void 0?h:k(e())}function D(){var R=e(),A=x(R);if(c=arguments,d=this,y=R,A){if(v===void 0)return E(y);if(m)return clearTimeout(v),v=setTimeout(T,l),w(y)}return v===void 0&&(v=setTimeout(T,l)),h}return D.cancel=P,D.flush=B,D}return Gi=s,Gi}var Mh=Lh(),an=en(Mh),Ui=it?it.performance:null,Cd=Ui&&Ui.now?function(){return Ui.now()}:function(){return Date.now()},_h=(function(){if(it){if(it.requestAnimationFrame)return function(t){it.requestAnimationFrame(t)};if(it.mozRequestAnimationFrame)return function(t){it.mozRequestAnimationFrame(t)};if(it.webkitRequestAnimationFrame)return function(t){it.webkitRequestAnimationFrame(t)};if(it.msRequestAnimationFrame)return function(t){it.msRequestAnimationFrame(t)}}return function(t){t&&setTimeout(function(){t(Cd())},1e3/60)}})(),Kn=function(e){return _h(e)},cr=Cd,Vr=9261,Td=65599,oa=5381,Sd=function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Vr,a=r,n;n=e.next(),!n.done;)a=a*Td+n.value|0;return a},Va=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Vr;return r*Td+e|0},Ha=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:oa;return(r<<5)+r+e|0},Ih=function(e,r){return e*2097152+r},gr=function(e){return e[0]*2097152+e[1]},hn=function(e,r){return[Va(e[0],r[0]),Ha(e[1],r[1])]},Ul=function(e,r){var a={value:0,done:!1},n=0,i=e.length,s={next:function(){return n=0;n--)e[n]===r&&e.splice(n,1)},Zo=function(e){e.splice(0,e.length)},Uh=function(e,r){for(var a=0;a"u"?"undefined":ot(Set))!==Wh?Set:jh,ui=function(e,r){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!Ko(e)){Ye("An element must have a core reference and parameters set");return}var n=r.group;if(n==null&&(r.data&&r.data.source!=null&&r.data.target!=null?n="edges":n="nodes"),n!=="nodes"&&n!=="edges"){Ye("An element must be of type `nodes` or `edges`; you specified `"+n+"`");return}this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:n,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?n==="edges":!!r.pannable,active:!1,classes:new ma,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(i.position.x==null&&(i.position.x=0),i.position.y==null&&(i.position.y=0),r.renderedPosition){var s=r.renderedPosition,o=e.pan(),l=e.zoom();i.position={x:(s.x-o.x)/l,y:(s.y-o.y)/l}}var u=[];Ue(r.classes)?u=r.classes:me(r.classes)&&(u=r.classes.split(/\s+/));for(var c=0,d=u.length;cm?1:0},c=function(g,m,b,w,E){var C;if(b==null&&(b=0),E==null&&(E=a),b<0)throw new Error("lo must be non-negative");for(w==null&&(w=g.length);bP;0<=P?k++:k--)T.push(k);return T}).apply(this).reverse(),x=[],w=0,E=C.length;wB;0<=B?++T:--T)D.push(s(g,b));return D},y=function(g,m,b,w){var E,C,x;for(w==null&&(w=a),E=g[b];b>m;){if(x=b-1>>1,C=g[x],w(E,C)<0){g[b]=C,b=x;continue}break}return g[b]=E},p=function(g,m,b){var w,E,C,x,T;for(b==null&&(b=a),E=g.length,T=m,C=g[m],w=2*m+1;w0;){var C=m.pop(),x=p(C),T=C.id();if(f[T]=x,x!==1/0)for(var k=C.neighborhood().intersect(v),P=0;P0)for(I.unshift(L);d[G];){var O=d[G];I.unshift(O.edge),I.unshift(O.node),H=O.node,G=H.id()}return o.spawn(I)}}}},tp={kruskal:function(e){e=e||function(b){return 1};for(var r=this.byGroup(),a=r.nodes,n=r.edges,i=a.length,s=new Array(i),o=a,l=function(w){for(var E=0;E0;){if(E(),x++,w===c){for(var T=[],k=i,P=c,B=g[P];T.unshift(k),B!=null&&T.unshift(B),k=p[P],k!=null;)P=k.id(),B=g[P];return{found:!0,distance:d[w],path:this.spawn(T),steps:x}}h[w]=!0;for(var D=b._private.edges,R=0;RB&&(v[P]=B,m[P]=k,b[P]=E),!i){var D=k*c+T;!i&&v[D]>B&&(v[D]=B,m[D]=T,b[D]=E)}}}for(var R=0;R1&&arguments[1]!==void 0?arguments[1]:s,ce=b(Ee),ye=[],pe=ce;;){if(pe==null)return r.spawn();var Se=m(pe),Ce=Se.edge,De=Se.pred;if(ye.unshift(pe[0]),pe.same(be)&&ye.length>0)break;Ce!=null&&ye.unshift(Ce),pe=De}return l.spawn(ye)},C=0;C=0;c--){var d=u[c],f=d[1],h=d[2];(r[f]===o&&r[h]===l||r[f]===l&&r[h]===o)&&u.splice(c,1)}for(var v=0;vn;){var i=Math.floor(Math.random()*r.length);r=up(i,e,r),a--}return r},cp={kargerStein:function(){var e=this,r=this.byGroup(),a=r.nodes,n=r.edges;n.unmergeBy(function(I){return I.isLoop()});var i=a.length,s=n.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),l=Math.floor(i/lp);if(i<2){Ye("At least 2 nodes are required for Karger-Stein algorithm");return}for(var u=[],c=0;c1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=1/0,i=r;i1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=-1/0,i=r;i1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=0,i=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;n?e=e.slice(r,a):(a0&&e.splice(0,r));for(var o=0,l=e.length-1;l>=0;l--){var u=e[l];s?isFinite(u)||(e[l]=-1/0,o++):e.splice(l,1)}i&&e.sort(function(f,h){return f-h});var c=e.length,d=Math.floor(c/2);return c%2!==0?e[d+1+o]:(e[d-1+o]+e[d+o])/2},gp=function(e){return Math.PI*e/180},pn=function(e,r){return Math.atan2(r,e)-Math.PI/2},Qo=Math.log2||function(t){return Math.log(t)/Math.log(2)},Jo=function(e){return e>0?1:e<0?-1:0},Kr=function(e,r){return Math.sqrt($r(e,r))},$r=function(e,r){var a=r.x-e.x,n=r.y-e.y;return a*a+n*n},yp=function(e){for(var r=e.length,a=0,n=0;n=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},bp=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},wp=function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},xp=function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},Ld=function(e,r,a){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,a),e.y2=Math.max(e.y2,a),e.h=e.y2-e.y1},Mn=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},_n=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],a,n,i,s;if(r.length===1)a=n=i=s=r[0];else if(r.length===2)a=i=r[0],s=n=r[1];else if(r.length===4){var o=at(r,4);a=o[0],n=o[1],i=o[2],s=o[3]}return e.x1-=s,e.x2+=n,e.y1-=a,e.y2+=i,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Zl=function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},el=function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},wr=function(e,r,a){return e.x1<=r&&r<=e.x2&&e.y1<=a&&a<=e.y2},Ql=function(e,r){return wr(e,r.x,r.y)},Md=function(e,r){return wr(e,r.x1,r.y1)&&wr(e,r.x2,r.y2)},Ep=(ji=Math.hypot)!==null&&ji!==void 0?ji:function(t,e){return Math.sqrt(t*t+e*e)};function Cp(t,e){if(t.length<3)throw new Error("Need at least 3 vertices");var r=function(T,k){return{x:T.x+k.x,y:T.y+k.y}},a=function(T,k){return{x:T.x-k.x,y:T.y-k.y}},n=function(T,k){return{x:T.x*k,y:T.y*k}},i=function(T,k){return T.x*k.y-T.y*k.x},s=function(T){var k=Ep(T.x,T.y);return k===0?{x:0,y:0}:{x:T.x/k,y:T.y/k}},o=function(T){for(var k=0,P=0;P7&&arguments[7]!==void 0?arguments[7]:"auto",u=l==="auto"?Pr(i,s):l,c=i/2,d=s/2;u=Math.min(u,c,d);var f=u!==c,h=u!==d,v;if(f){var y=a-c+u-o,p=n-d-o,g=a+c-u+o,m=p;if(v=xr(e,r,a,n,y,p,g,m,!1),v.length>0)return v}if(h){var b=a+c+o,w=n-d+u-o,E=b,C=n+d-u+o;if(v=xr(e,r,a,n,b,w,E,C,!1),v.length>0)return v}if(f){var x=a-c+u-o,T=n+d+o,k=a+c-u+o,P=T;if(v=xr(e,r,a,n,x,T,k,P,!1),v.length>0)return v}if(h){var B=a-c-o,D=n-d+u-o,R=B,A=n+d-u+o;if(v=xr(e,r,a,n,B,D,R,A,!1),v.length>0)return v}var M;{var _=a-c+u,L=n-d+u;if(M=Ia(e,r,a,n,_,L,u+o),M.length>0&&M[0]<=_&&M[1]<=L)return[M[0],M[1]]}{var I=a+c-u,H=n-d+u;if(M=Ia(e,r,a,n,I,H,u+o),M.length>0&&M[0]>=I&&M[1]<=H)return[M[0],M[1]]}{var G=a+c-u,O=n+d-u;if(M=Ia(e,r,a,n,G,O,u+o),M.length>0&&M[0]>=G&&M[1]>=O)return[M[0],M[1]]}{var $=a-c+u,Y=n+d-u;if(M=Ia(e,r,a,n,$,Y,u+o),M.length>0&&M[0]<=$&&M[1]>=Y)return[M[0],M[1]]}return[]},Sp=function(e,r,a,n,i,s,o){var l=o,u=Math.min(a,i),c=Math.max(a,i),d=Math.min(n,s),f=Math.max(n,s);return u-l<=e&&e<=c+l&&d-l<=r&&r<=f+l},kp=function(e,r,a,n,i,s,o,l,u){var c={x1:Math.min(a,o,i)-u,x2:Math.max(a,o,i)+u,y1:Math.min(n,l,s)-u,y2:Math.max(n,l,s)+u};return!(ec.x2||rc.y2)},Pp=function(e,r,a,n){a-=n;var i=r*r-4*e*a;if(i<0)return[];var s=Math.sqrt(i),o=2*e,l=(-r+s)/o,u=(-r-s)/o;return[l,u]},Bp=function(e,r,a,n,i){var s=1e-5;e===0&&(e=s),r/=e,a/=e,n/=e;var o,l,u,c,d,f,h,v;if(l=(3*a-r*r)/9,u=-(27*n)+r*(9*a-2*(r*r)),u/=54,o=l*l*l+u*u,i[1]=0,h=r/3,o>0){d=u+Math.sqrt(o),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),f=u-Math.sqrt(o),f=f<0?-Math.pow(-f,1/3):Math.pow(f,1/3),i[0]=-h+d+f,h+=(d+f)/2,i[4]=i[2]=-h,h=Math.sqrt(3)*(-f+d)/2,i[3]=h,i[5]=-h;return}if(i[5]=i[3]=0,o===0){v=u<0?-Math.pow(-u,1/3):Math.pow(u,1/3),i[0]=-h+2*v,i[4]=i[2]=-(v+h);return}l=-l,c=l*l*l,c=Math.acos(u/Math.sqrt(c)),v=2*Math.sqrt(l),i[0]=-h+v*Math.cos(c/3),i[2]=-h+v*Math.cos((c+2*Math.PI)/3),i[4]=-h+v*Math.cos((c+4*Math.PI)/3)},Dp=function(e,r,a,n,i,s,o,l){var u=1*a*a-4*a*i+2*a*o+4*i*i-4*i*o+o*o+n*n-4*n*s+2*n*l+4*s*s-4*s*l+l*l,c=9*a*i-3*a*a-3*a*o-6*i*i+3*i*o+9*n*s-3*n*n-3*n*l-6*s*s+3*s*l,d=3*a*a-6*a*i+a*o-a*e+2*i*i+2*i*e-o*e+3*n*n-6*n*s+n*l-n*r+2*s*s+2*s*r-l*r,f=1*a*i-a*a+a*e-i*e+n*s-n*n+n*r-s*r,h=[];Bp(u,c,d,f,h);for(var v=1e-7,y=[],p=0;p<6;p+=2)Math.abs(h[p+1])=0&&h[p]<=1&&y.push(h[p]);y.push(1),y.push(0);for(var g=-1,m,b,w,E=0;E=0?wu?(e-i)*(e-i)+(r-s)*(r-s):c-f},At=function(e,r,a){for(var n,i,s,o,l,u=0,c=0;c=e&&e>=s||n<=e&&e<=s)l=(e-n)/(s-n)*(o-i)+i,l>r&&u++;else continue;return u%2!==0},dr=function(e,r,a,n,i,s,o,l,u){var c=new Array(a.length),d;l[0]!=null?(d=Math.atan(l[1]/l[0]),l[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=l;for(var f=Math.cos(-d),h=Math.sin(-d),v=0;v0){var p=Yn(c,-u);y=jn(p)}else y=c;return At(e,r,y)},Ap=function(e,r,a,n,i,s,o,l){for(var u=new Array(a.length*2),c=0;c=0&&p<=1&&m.push(p),g>=0&&g<=1&&m.push(g),m.length===0)return[];var b=m[0]*l[0]+e,w=m[0]*l[1]+r;if(m.length>1){if(m[0]==m[1])return[b,w];var E=m[1]*l[0]+e,C=m[1]*l[1]+r;return[b,w,E,C]}else return[b,w]},Yi=function(e,r,a){return r<=e&&e<=a||a<=e&&e<=r?e:e<=r&&r<=a||a<=r&&r<=e?r:a},xr=function(e,r,a,n,i,s,o,l,u){var c=e-i,d=a-e,f=o-i,h=r-s,v=n-r,y=l-s,p=f*h-y*c,g=d*h-v*c,m=y*d-f*v;if(m!==0){var b=p/m,w=g/m,E=.001,C=0-E,x=1+E;return C<=b&&b<=x&&C<=w&&w<=x?[e+b*d,r+b*v]:u?[e+b*d,r+b*v]:[]}else return p===0||g===0?Yi(e,a,o)===o?[o,l]:Yi(e,a,i)===i?[i,s]:Yi(i,o,a)===a?[a,n]:[]:[]},Mp=function(e,r,a,n,i){var s=[],o=n/2,l=i/2,u=r,c=a;s.push({x:u+o*e[0],y:c+l*e[1]});for(var d=1;d0){var y=Yn(d,-l);h=jn(y)}else h=d}else h=a;for(var p,g,m,b,w=0;w2){for(var v=[c[0],c[1]],y=Math.pow(v[0]-e,2)+Math.pow(v[1]-r,2),p=1;pc&&(c=w)},get:function(b){return u[b]}},f=0;f0?M=A.edgesTo(R)[0]:M=R.edgesTo(A)[0];var _=n(M);R=R.id(),x[R]>x[B]+_&&(x[R]=x[B]+_,T.nodes.indexOf(R)<0?T.push(R):T.updateItem(R),C[R]=0,E[R]=[]),x[R]==x[B]+_&&(C[R]=C[R]+C[B],E[R].push(B))}else for(var L=0;L0;){for(var O=w.pop(),$=0;$0&&o.push(a[l]);o.length!==0&&i.push(n.collection(o))}return i},jp=function(e,r){for(var a=0;a5&&arguments[5]!==void 0?arguments[5]:Zp,o=n,l,u,c=0;c=2?Ba(e,r,a,0,au,Qp):Ba(e,r,a,0,ru)},squaredEuclidean:function(e,r,a){return Ba(e,r,a,0,au)},manhattan:function(e,r,a){return Ba(e,r,a,0,ru)},max:function(e,r,a){return Ba(e,r,a,-1/0,Jp)}};ga["squared-euclidean"]=ga.squaredEuclidean;ga.squaredeuclidean=ga.squaredEuclidean;function di(t,e,r,a,n,i){var s;return Ze(t)?s=t:s=ga[t]||ga.euclidean,e===0&&Ze(t)?s(n,i):s(e,r,a,n,i)}var eg=gt({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),rl=function(e){return eg(e)},Xn=function(e,r,a,n,i){var s=i!=="kMedoids",o=s?function(d){return a[d]}:function(d){return n[d](a)},l=function(f){return n[f](r)},u=a,c=r;return di(e,n.length,o,l,u,c)},Zi=function(e,r,a){for(var n=a.length,i=new Array(n),s=new Array(n),o=new Array(r),l=null,u=0;ua)return!1}return!0},ag=function(e,r,a){for(var n=0;no&&(o=r[u][c],l=c);i[l].push(e[u])}for(var d=0;d=i.threshold||i.mode==="dendrogram"&&e.length===1)return!1;var v=r[s],y=r[n[s]],p;i.mode==="dendrogram"?p={left:v,right:y,key:v.key}:p={value:v.value.concat(y.value),key:v.key},e[v.index]=p,e.splice(y.index,1),r[v.key]=p;for(var g=0;ga[y.key][m.key]&&(l=a[y.key][m.key])):i.linkage==="max"?(l=a[v.key][m.key],a[v.key][m.key]0&&n.push(i);return n},uu=function(e,r,a){for(var n=[],i=0;io&&(s=u,o=r[i*e+u])}s>0&&n.push(s)}for(var c=0;cu&&(l=c,u=d)}a[i]=s[l]}return n=uu(e,r,a),n},cu=function(e){for(var r=this.cy(),a=this.nodes(),n=pg(e),i={},s=0;s=B?(D=B,B=A,R=M):A>D&&(D=A);for(var _=0;_0?1:0;x[k%n.minIterations*o+$]=Y,O+=Y}if(O>0&&(k>=n.minIterations-1||k==n.maxIterations-1)){for(var te=0,J=0;J1||C>1)&&(o=!0),d[b]=[],m.outgoers().forEach(function(T){T.isEdge()&&d[b].push(T.id())})}else f[b]=[void 0,m.target().id()]}):s.forEach(function(m){var b=m.id();if(m.isNode()){var w=m.degree(!0);w%2&&(l?u?o=!0:u=b:l=b),d[b]=[],m.connectedEdges().forEach(function(E){return d[b].push(E.id())})}else f[b]=[m.source().id(),m.target().id()]});var h={found:!1,trail:void 0};if(o)return h;if(u&&l)if(i){if(c&&u!=c)return h;c=u}else{if(c&&u!=c&&l!=c)return h;c||(c=u)}else c||(c=s[0].id());var v=function(b){for(var w=b,E=[b],C,x,T;d[w].length;)C=d[w].shift(),x=f[C][0],T=f[C][1],w!=T?(d[T]=d[T].filter(function(k){return k!=C}),w=T):!i&&w!=x&&(d[x]=d[x].filter(function(k){return k!=C}),w=x),E.unshift(C),E.unshift(w);return E},y=[],p=[];for(p=v(c);p.length!=1;)d[p[0]].length==0?(y.unshift(s.getElementById(p.shift())),y.unshift(s.getElementById(p.shift()))):p=v(p.shift()).concat(p);y.unshift(s.getElementById(p.shift()));for(var g in d)if(d[g].length)return h;return h.found=!0,h.trail=this.spawn(y,!0),h}},yn=function(){var e=this,r={},a=0,n=0,i=[],s=[],o={},l=function(f,h){for(var v=s.length-1,y=[],p=e.spawn();s[v].x!=f||s[v].y!=h;)y.push(s.pop().edge),v--;y.push(s.pop().edge),y.forEach(function(g){var m=g.connectedNodes().intersection(e);p.merge(g),m.forEach(function(b){var w=b.id(),E=b.connectedEdges().intersection(e);p.merge(b),r[w].cutVertex?p.merge(E.filter(function(C){return C.isLoop()})):p.merge(E)})}),i.push(p)},u=function(f,h,v){f===v&&(n+=1),r[h]={id:a,low:a++,cutVertex:!1};var y=e.getElementById(h).connectedEdges().intersection(e);if(y.size()===0)i.push(e.spawn(e.getElementById(h)));else{var p,g,m,b;y.forEach(function(w){p=w.source().id(),g=w.target().id(),m=p===h?g:p,m!==v&&(b=w.id(),o[b]||(o[b]=!0,s.push({x:h,y:m,edge:w})),m in r?r[h].low=Math.min(r[h].low,r[m].id):(u(f,m,h),r[h].low=Math.min(r[h].low,r[m].low),r[h].id<=r[m].low&&(r[h].cutVertex=!0,l(h,m))))})}};e.forEach(function(d){if(d.isNode()){var f=d.id();f in r||(n=0,u(f,f),r[f].cutVertex=n>1)}});var c=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(c),components:i}},Cg={hopcroftTarjanBiconnected:yn,htbc:yn,htb:yn,hopcroftTarjanBiconnectedComponents:yn},mn=function(){var e=this,r={},a=0,n=[],i=[],s=e.spawn(e),o=function(u){i.push(u),r[u]={index:a,low:a++,explored:!1};var c=e.getElementById(u).connectedEdges().intersection(e);if(c.forEach(function(y){var p=y.target().id();p!==u&&(p in r||o(p),r[p].explored||(r[u].low=Math.min(r[u].low,r[p].low)))}),r[u].index===r[u].low){for(var d=e.spawn();;){var f=i.pop();if(d.merge(e.getElementById(f)),r[f].low=r[u].index,r[f].explored=!0,f===u)break}var h=d.edgesWith(d),v=d.merge(h);n.push(v),s=s.difference(v)}};return e.forEach(function(l){if(l.isNode()){var u=l.id();u in r||o(u)}}),{cut:s,components:n}},Tg={tarjanStronglyConnected:mn,tsc:mn,tscc:mn,tarjanStronglyConnectedComponents:mn},qd={};[Ga,ep,tp,ap,ip,op,cp,Np,fa,va,yo,Xp,ug,vg,wg,Eg,Cg,Tg].forEach(function(t){xe(qd,t)});var Vd=0,Hd=1,Gd=2,Wt=function(e){if(!(this instanceof Wt))return new Wt(e);this.id="Thenable/1.0.7",this.state=Vd,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))};Wt.prototype={fulfill:function(e){return du(this,Hd,"fulfillValue",e)},reject:function(e){return du(this,Gd,"rejectReason",e)},then:function(e,r){var a=this,n=new Wt;return a.onFulfilled.push(vu(e,n,"fulfill")),a.onRejected.push(vu(r,n,"reject")),Ud(a),n.proxy}};var du=function(e,r,a,n){return e.state===Vd&&(e.state=r,e[a]=n,Ud(e)),e},Ud=function(e){e.state===Hd?fu(e,"onFulfilled",e.fulfillValue):e.state===Gd&&fu(e,"onRejected",e.rejectReason)},fu=function(e,r,a){if(e[r].length!==0){var n=e[r];e[r]=[];var i=function(){for(var o=0;o0}},clearQueue:function(){return function(){var r=this,a=r.length!==void 0,n=a?r:[r],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var s=0;s-1}return bs=e,bs}var ws,Ou;function Hg(){if(Ou)return ws;Ou=1;var t=hi();function e(r,a){var n=this.__data__,i=t(n,r);return i<0?(++this.size,n.push([r,a])):n[i][1]=a,this}return ws=e,ws}var xs,Nu;function Gg(){if(Nu)return xs;Nu=1;var t=$g(),e=Fg(),r=qg(),a=Vg(),n=Hg();function i(s){var o=-1,l=s==null?0:s.length;for(this.clear();++o-1&&a%1==0&&a0&&this.spawn(n).updateStyle().emit("class"),r},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},toggleClass:function(e,r){Ue(e)||(e=e.match(/\S+/g)||[]);for(var a=this,n=r===void 0,i=[],s=0,o=a.length;s0&&this.spawn(i).updateStyle().emit("class"),a},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,r){var a=this;if(r==null)r=250;else if(r===0)return a;return a.addClass(e),setTimeout(function(){a.removeClass(e)},r),a}};In.className=In.classNames=In.classes;var Oe={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:st,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Oe.variable="(?:[\\w-.]|(?:\\\\"+Oe.metaChar+"))+";Oe.className="(?:[\\w-]|(?:\\\\"+Oe.metaChar+"))+";Oe.value=Oe.string+"|"+Oe.number;Oe.id=Oe.variable;(function(){var t,e,r;for(t=Oe.comparatorOp.split("|"),r=0;r=0)&&e!=="="&&(Oe.comparatorOp+="|\\!"+e)})();var Ge=function(){return{checks:[]}},fe={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},xo=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort(function(t,e){return mh(t.selector,e.selector)}),xy=(function(){for(var t={},e,r=0;r0&&c.edgeCount>0)return He("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(c.edgeCount>1)return He("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;c.edgeCount===1&&He("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},Py=function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=function(c){return c??""},r=function(c){return me(c)?'"'+c+'"':e(c)},a=function(c){return" "+c+" "},n=function(c,d){var f=c.type,h=c.value;switch(f){case fe.GROUP:{var v=e(h);return v.substring(0,v.length-1)}case fe.DATA_COMPARE:{var y=c.field,p=c.operator;return"["+y+a(e(p))+r(h)+"]"}case fe.DATA_BOOL:{var g=c.operator,m=c.field;return"["+e(g)+m+"]"}case fe.DATA_EXIST:{var b=c.field;return"["+b+"]"}case fe.META_COMPARE:{var w=c.operator,E=c.field;return"[["+E+a(e(w))+r(h)+"]]"}case fe.STATE:return h;case fe.ID:return"#"+h;case fe.CLASS:return"."+h;case fe.PARENT:case fe.CHILD:return i(c.parent,d)+a(">")+i(c.child,d);case fe.ANCESTOR:case fe.DESCENDANT:return i(c.ancestor,d)+" "+i(c.descendant,d);case fe.COMPOUND_SPLIT:{var C=i(c.left,d),x=i(c.subject,d),T=i(c.right,d);return C+(C.length>0?" ":"")+x+T}case fe.TRUE:return""}},i=function(c,d){return c.checks.reduce(function(f,h,v){return f+(d===c&&v===0?"$":"")+n(h,d)},"")},s="",o=0;o1&&o=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),c=!0),(i||o||c)&&(l=!i&&!s?"":""+e,u=""+a),c&&(e=l=l.toLowerCase(),a=u=u.toLowerCase()),r){case"*=":n=l.indexOf(u)>=0;break;case"$=":n=l.indexOf(u,l.length-u.length)>=0;break;case"^=":n=l.indexOf(u)===0;break;case"=":n=e===a;break;case">":f=!0,n=e>a;break;case">=":f=!0,n=e>=a;break;case"<":f=!0,n=e0;){var c=n.shift();e(c),i.add(c.id()),o&&a(n,i,c)}return t}function Jd(t,e,r){if(r.isParent())for(var a=r._private.children,n=0;n1&&arguments[1]!==void 0?arguments[1]:!0;return sl(this,t,e,Jd)};function ef(t,e,r){if(r.isChild()){var a=r._private.parent;e.has(a.id())||t.push(a)}}ya.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return sl(this,t,e,ef)};function Iy(t,e,r){ef(t,e,r),Jd(t,e,r)}ya.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return sl(this,t,e,Iy)};ya.ancestors=ya.parents;var Wa,tf;Wa=tf={data:Ve.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:Ve.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:Ve.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Ve.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:Ve.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:Ve.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}};Wa.attr=Wa.data;Wa.removeAttr=Wa.removeData;var Oy=tf,gi={};function Ys(t){return function(e){var r=this;if(e===void 0&&(e=!0),r.length!==0)if(r.isNode()&&!r.removed()){for(var a=0,n=r[0],i=n._private.edges,s=0;se}),minIndegree:ea("indegree",function(t,e){return te}),minOutdegree:ea("outdegree",function(t,e){return te})});xe(gi,{totalDegree:function(e){for(var r=0,a=this.nodes(),n=0;n0,f=d;d&&(c=c[0]);var h=f?c.position():{x:0,y:0};r!==void 0?u.position(e,r+h[e]):i!==void 0&&u.position({x:i.x+h.x,y:i.y+h.y})}else{var v=a.position(),y=o?a.parent():null,p=y&&y.length>0,g=p;p&&(y=y[0]);var m=g?y.position():{x:0,y:0};return i={x:v.x-m.x,y:v.y-m.y},e===void 0?i:i[e]}else if(!s)return;return this}};Kt.modelPosition=Kt.point=Kt.position;Kt.modelPositions=Kt.points=Kt.positions;Kt.renderedPoint=Kt.renderedPosition;Kt.relativePoint=Kt.relativePosition;var Ny=rf,ha,Mr;ha=Mr={};Mr.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),a=r.zoom(),n=r.pan(),i=e.x1*a+n.x,s=e.x2*a+n.x,o=e.y1*a+n.y,l=e.y2*a+n.y;return{x1:i,x2:s,y1:o,y2:l,w:s-i,h:l-o}};Mr.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var a=r._private;a.compoundBoundsClean=!1,a.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Mr.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var o=s._private,l=s.children(),u=s.pstyle("compound-sizing-wrt-labels").value==="include",c={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=l.boundingBox({includeLabels:u,includeOverlays:!1,useCache:!1}),f=o.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=f.x-d.w/2,d.x2=f.x+d.w/2,d.y1=f.y-d.h/2,d.y2=f.y+d.h/2);function h(k,P,B){var D=0,R=0,A=P+B;return k>0&&A>0&&(D=P/A*k,R=B/A*k),{biasDiff:D,biasComplementDiff:R}}function v(k,P,B,D){if(B.units==="%")switch(D){case"width":return k>0?B.pfValue*k:0;case"height":return P>0?B.pfValue*P:0;case"average":return k>0&&P>0?B.pfValue*(k+P)/2:0;case"min":return k>0&&P>0?k>P?B.pfValue*P:B.pfValue*k:0;case"max":return k>0&&P>0?k>P?B.pfValue*k:B.pfValue*P:0;default:return 0}else return B.units==="px"?B.pfValue:0}var y=c.width.left.value;c.width.left.units==="px"&&c.width.val>0&&(y=y*100/c.width.val);var p=c.width.right.value;c.width.right.units==="px"&&c.width.val>0&&(p=p*100/c.width.val);var g=c.height.top.value;c.height.top.units==="px"&&c.height.val>0&&(g=g*100/c.height.val);var m=c.height.bottom.value;c.height.bottom.units==="px"&&c.height.val>0&&(m=m*100/c.height.val);var b=h(c.width.val-d.w,y,p),w=b.biasDiff,E=b.biasComplementDiff,C=h(c.height.val-d.h,g,m),x=C.biasDiff,T=C.biasComplementDiff;o.autoPadding=v(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),o.autoWidth=Math.max(d.w,c.width.val),f.x=(-w+d.x1+d.x2+E)/2,o.autoHeight=Math.max(d.h,c.height.val),f.y=(-x+d.y1+d.y2+T)/2}for(var a=0;ae.x2?n:e.x2,e.y1=ae.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},mr=function(e,r){return r==null?e:Ut(e,r.x1,r.y1,r.x2,r.y2)},Da=function(e,r,a){return Rt(e,r,a)},bn=function(e,r,a){if(!r.cy().headless()){var n=r._private,i=n.rstyle,s=i.arrowWidth/2,o=r.pstyle(a+"-arrow-shape").value,l,u;if(o!=="none"){a==="source"?(l=i.srcX,u=i.srcY):a==="target"?(l=i.tgtX,u=i.tgtY):(l=i.midX,u=i.midY);var c=n.arrowBounds=n.arrowBounds||{},d=c[a]=c[a]||{};d.x1=l-s,d.y1=u-s,d.x2=l+s,d.y2=u+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,Mn(d,1),Ut(e,d.x1,d.y1,d.x2,d.y2)}}},Xs=function(e,r,a){if(!r.cy().headless()){var n;a?n=a+"-":n="";var i=r._private,s=i.rstyle,o=r.pstyle(n+"label").strValue;if(o){var l=r.pstyle("text-halign"),u=r.pstyle("text-valign"),c=Da(s,"labelWidth",a),d=Da(s,"labelHeight",a),f=Da(s,"labelX",a),h=Da(s,"labelY",a),v=r.pstyle(n+"text-margin-x").pfValue,y=r.pstyle(n+"text-margin-y").pfValue,p=r.isEdge(),g=r.pstyle(n+"text-rotation"),m=r.pstyle("text-outline-width").pfValue,b=r.pstyle("text-border-width").pfValue,w=b/2,E=r.pstyle("text-background-padding").pfValue,C=2,x=d,T=c,k=T/2,P=x/2,B,D,R,A;if(p)B=f-k,D=f+k,R=h-P,A=h+P;else{switch(l.value){case"left":B=f-T,D=f;break;case"center":B=f-k,D=f+k;break;case"right":B=f,D=f+T;break}switch(u.value){case"top":R=h-x,A=h;break;case"center":R=h-P,A=h+P;break;case"bottom":R=h,A=h+x;break}}var M=v-Math.max(m,w)-E-C,_=v+Math.max(m,w)+E+C,L=y-Math.max(m,w)-E-C,I=y+Math.max(m,w)+E+C;B+=M,D+=_,R+=L,A+=I;var H=a||"main",G=i.labelBounds,O=G[H]=G[H]||{};O.x1=B,O.y1=R,O.x2=D,O.y2=A,O.w=D-B,O.h=A-R,O.leftPad=M,O.rightPad=_,O.topPad=L,O.botPad=I;var $=p&&g.strValue==="autorotate",Y=g.pfValue!=null&&g.pfValue!==0;if($||Y){var te=$?Da(i.rstyle,"labelAngle",a):g.pfValue,J=Math.cos(te),re=Math.sin(te),ne=(B+D)/2,oe=(R+A)/2;if(!p){switch(l.value){case"left":ne=D;break;case"right":ne=B;break}switch(u.value){case"top":oe=A;break;case"bottom":oe=R;break}}var ee=function(Te,Ee){return Te=Te-ne,Ee=Ee-oe,{x:Te*J-Ee*re+ne,y:Te*re+Ee*J+oe}},q=ee(B,R),K=ee(B,A),W=ee(D,R),Q=ee(D,A);B=Math.min(q.x,K.x,W.x,Q.x),D=Math.max(q.x,K.x,W.x,Q.x),R=Math.min(q.y,K.y,W.y,Q.y),A=Math.max(q.y,K.y,W.y,Q.y)}var ie=H+"Rot",ge=G[ie]=G[ie]||{};ge.x1=B,ge.y1=R,ge.x2=D,ge.y2=A,ge.w=D-B,ge.h=A-R,Ut(e,B,R,D,A),Ut(i.labelBounds.all,B,R,D,A)}return e}},fc=function(e,r){if(!r.cy().headless()){var a=r.pstyle("outline-opacity").value,n=r.pstyle("outline-width").value,i=r.pstyle("outline-offset").value,s=n+i;nf(e,r,a,s,"outside",s/2)}},nf=function(e,r,a,n,i,s){if(!(a===0||n<=0||i==="inside")){var o=r.cy(),l=o.renderer(),u=l.nodeShapes[l.getNodeShape(r)];if(u){var c=r.position(),d=c.x,f=c.y,h=r.width(),v=r.height();if(u.hasMiterBounds){i==="center"&&(n/=2);var y=u.miterBounds(d,f,h,v,n);mr(e,y)}else s!=null&&s>0&&_n(e,[s,s,s,s])}}},zy=function(e,r){if(!r.cy().headless()){var a=r.pstyle("border-opacity").value,n=r.pstyle("border-width").pfValue,i=r.pstyle("border-position").value;nf(e,r,a,n,i)}},$y=function(e,r){var a=e._private.cy,n=a.styleEnabled(),i=a.headless(),s=kt(),o=e._private,l=e.isNode(),u=e.isEdge(),c,d,f,h,v,y,p=o.rstyle,g=l&&n?e.pstyle("bounds-expansion").pfValue:[0],m=function(Me){return Me.pstyle("display").value!=="none"},b=!n||m(e)&&(!u||m(e.source())&&m(e.target()));if(b){var w=0,E=0;n&&r.includeOverlays&&(w=e.pstyle("overlay-opacity").value,w!==0&&(E=e.pstyle("overlay-padding").value));var C=0,x=0;n&&r.includeUnderlays&&(C=e.pstyle("underlay-opacity").value,C!==0&&(x=e.pstyle("underlay-padding").value));var T=Math.max(E,x),k=0,P=0;if(n&&(k=e.pstyle("width").pfValue,P=k/2),l&&r.includeNodes){var B=e.position();v=B.x,y=B.y;var D=e.outerWidth(),R=D/2,A=e.outerHeight(),M=A/2;c=v-R,d=v+R,f=y-M,h=y+M,Ut(s,c,f,d,h),n&&fc(s,e),n&&r.includeOutlines&&!i&&fc(s,e),n&&zy(s,e)}else if(u&&r.includeEdges)if(n&&!i){var _=e.pstyle("curve-style").strValue;if(c=Math.min(p.srcX,p.midX,p.tgtX),d=Math.max(p.srcX,p.midX,p.tgtX),f=Math.min(p.srcY,p.midY,p.tgtY),h=Math.max(p.srcY,p.midY,p.tgtY),c-=P,d+=P,f-=P,h+=P,Ut(s,c,f,d,h),_==="haystack"){var L=p.haystackPts;if(L&&L.length===2){if(c=L[0].x,f=L[0].y,d=L[1].x,h=L[1].y,c>d){var I=c;c=d,d=I}if(f>h){var H=f;f=h,h=H}Ut(s,c-P,f-P,d+P,h+P)}}else if(_==="bezier"||_==="unbundled-bezier"||br(_,"segments")||br(_,"taxi")){var G;switch(_){case"bezier":case"unbundled-bezier":G=p.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":G=p.linePts;break}if(G!=null)for(var O=0;Od){var ne=c;c=d,d=ne}if(f>h){var oe=f;f=h,h=oe}c-=P,d+=P,f-=P,h+=P,Ut(s,c,f,d,h)}if(n&&r.includeEdges&&u&&(bn(s,e,"mid-source"),bn(s,e,"mid-target"),bn(s,e,"source"),bn(s,e,"target")),n){var ee=e.pstyle("ghost").value==="yes";if(ee){var q=e.pstyle("ghost-offset-x").pfValue,K=e.pstyle("ghost-offset-y").pfValue;Ut(s,s.x1+q,s.y1+K,s.x2+q,s.y2+K)}}var W=o.bodyBounds=o.bodyBounds||{};Zl(W,s),_n(W,g),Mn(W,1),n&&(c=s.x1,d=s.x2,f=s.y1,h=s.y2,Ut(s,c-T,f-T,d+T,h+T));var Q=o.overlayBounds=o.overlayBounds||{};Zl(Q,s),_n(Q,g),Mn(Q,1);var ie=o.labelBounds=o.labelBounds||{};ie.all!=null?wp(ie.all):ie.all=kt(),n&&r.includeLabels&&(r.includeMainLabels&&Xs(s,e,null),u&&(r.includeSourceLabels&&Xs(s,e,"source"),r.includeTargetLabels&&Xs(s,e,"target")))}return s.x1=$t(s.x1),s.y1=$t(s.y1),s.x2=$t(s.x2),s.y2=$t(s.y2),s.w=$t(s.x2-s.x1),s.h=$t(s.y2-s.y1),s.w>0&&s.h>0&&b&&(_n(s,g),Mn(s,1)),s},sf=function(e){var r=0,a=function(s){return(s?1:0)<0&&arguments[0]!==void 0?arguments[0]:em,e=arguments.length>1?arguments[1]:void 0,r=0;r=0;o--)s(o);return this};Rr.removeAllListeners=function(){return this.removeListener("*")};Rr.emit=Rr.trigger=function(t,e,r){var a=this.listeners,n=a.length;return this.emitting++,Ue(e)||(e=[e]),tm(this,function(i,s){r!=null&&(a=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],n=a.length);for(var o=function(){var c=a[l];if(c.type===s.type&&(!c.namespace||c.namespace===s.namespace||c.namespace===Jy)&&i.eventMatches(i.context,c,s)){var d=[s];e!=null&&Uh(d,e),i.beforeEmit(i.context,c,s),c.conf&&c.conf.one&&(i.listeners=i.listeners.filter(function(v){return v!==c}));var f=i.callbackContext(i.context,c,s),h=c.callback.apply(f,d);i.afterEmit(i.context,c,s),h===!1&&(s.stopPropagation(),s.preventDefault())}},l=0;l1&&!s){var o=this.length-1,l=this[o],u=l._private.data.id;this[o]=void 0,this[e]=l,i.set(u,{ele:l,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var r=this._private,a=e._private.data.id,n=r.map,i=n.get(a);if(!i)return this;var s=i.index;return this.unmergeAt(s),this},unmerge:function(e){var r=this._private.cy;if(!e)return this;if(e&&me(e)){var a=e;e=r.mutableElements().filter(a)}for(var n=0;n=0;r--){var a=this[r];e(a)&&this.unmergeAt(r)}return this},map:function(e,r){for(var a=[],n=this,i=0;ia&&(a=l,n=o)}return{value:a,ele:n}},min:function(e,r){for(var a=1/0,n,i=this,s=0;s=0&&i"u"?"undefined":ot(Symbol))!=e&&ot(Symbol.iterator)!=e;r&&(Zn[Symbol.iterator]=function(){var a=this,n={value:void 0,done:!1},i=0,s=this.length;return fd({next:function(){return i1&&arguments[1]!==void 0?arguments[1]:!0,a=this[0],n=a.cy();if(n.styleEnabled()&&a){a._private.styleDirty&&(a._private.styleDirty=!1,n.style().apply(a));var i=a._private.style[e];return i??(r?n.style().getDefaultProperty(e):null)}},numericStyle:function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var a=r.pstyle(e);return a.pfValue!==void 0?a.pfValue:a.value}},numericStyleUnits:function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},renderedStyle:function(e){var r=this.cy();if(!r.styleEnabled())return this;var a=this[0];if(a)return r.style().getRenderedStyle(a,e)},style:function(e,r){var a=this.cy();if(!a.styleEnabled())return this;var n=!1,i=a.style();if(Ne(e)){var s=e;i.applyBypass(this,s,n),this.emitAndNotify("style")}else if(me(e))if(r===void 0){var o=this[0];return o?i.getStylePropertyValue(o,e):void 0}else i.applyBypass(this,e,r,n),this.emitAndNotify("style");else if(e===void 0){var l=this[0];return l?i.getRawStyle(l):void 0}return this},removeStyle:function(e){var r=this.cy();if(!r.styleEnabled())return this;var a=!1,n=r.style(),i=this;if(e===void 0)for(var s=0;s0&&e.push(c[0]),e.push(o[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}});Et.neighbourhood=Et.neighborhood;Et.closedNeighbourhood=Et.closedNeighborhood;Et.openNeighbourhood=Et.openNeighborhood;xe(Et,{source:Ft(function(e){var r=this[0],a;return r&&(a=r._private.source||r.cy().collection()),a&&e?a.filter(e):a},"source"),target:Ft(function(e){var r=this[0],a;return r&&(a=r._private.target||r.cy().collection()),a&&e?a.filter(e):a},"target"),sources:Cc({attr:"source"}),targets:Cc({attr:"target"})});function Cc(t){return function(r){for(var a=[],n=0;n0);return s},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}});Et.componentsOf=Et.components;var pt=function(e,r){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){Ye("A collection must have a reference to the core");return}var i=new or,s=!1;if(!r)r=[];else if(r.length>0&&Ne(r[0])&&!Ja(r[0])){s=!0;for(var o=[],l=new ma,u=0,c=r.length;u0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,a=r.cy(),n=a._private,i=[],s=[],o,l=0,u=r.length;l0){for(var H=o.length===r.length?r:new pt(a,o),G=0;G0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,a=[],n={},i=r._private.cy;function s(A){for(var M=A._private.edges,_=0;_0&&(t?B.emitAndNotify("remove"):e&&B.emit("remove"));for(var D=0;D0?D=A:B=A;while(Math.abs(R)>s&&++M=i?m(P,M):_===0?M:w(P,B,B+u)}var C=!1;function x(){C=!0,(t!==e||r!==a)&&b()}var T=function(B){return C||x(),t===e&&r===a?B:B===0?0:B===1?1:p(E(B),e,a)};T.getControlPoints=function(){return[{x:t,y:e},{x:r,y:a}]};var k="generateBezier("+[t,e,r,a]+")";return T.toString=function(){return k},T}var fm=(function(){function t(a){return-a.tension*a.x-a.friction*a.v}function e(a,n,i){var s={x:a.x+i.dx*n,v:a.v+i.dv*n,tension:a.tension,friction:a.friction};return{dx:s.v,dv:t(s)}}function r(a,n){var i={dx:a.v,dv:t(a)},s=e(a,n*.5,i),o=e(a,n*.5,s),l=e(a,n,o),u=1/6*(i.dx+2*(s.dx+o.dx)+l.dx),c=1/6*(i.dv+2*(s.dv+o.dv)+l.dv);return a.x=a.x+u*n,a.v=a.v+c*n,a}return function a(n,i,s){var o={x:-1,v:0,tension:null,friction:null},l=[0],u=0,c=1/1e4,d=16/1e3,f,h,v;for(n=parseFloat(n)||500,i=parseFloat(i)||20,s=s||null,o.tension=n,o.friction=i,f=s!==null,f?(u=a(n,i),h=u/s*d):h=d;v=r(v||o,h),l.push(1+v.x),u+=16,Math.abs(v.x)>c&&Math.abs(v.v)>c;);return f?function(y){return l[y*(l.length-1)|0]}:u}})(),Ke=function(e,r,a,n){var i=dm(e,r,a,n);return function(s,o,l){return s+(o-s)*i(l)}},Nn={linear:function(e,r,a){return e+(r-e)*a},ease:Ke(.25,.1,.25,1),"ease-in":Ke(.42,0,1,1),"ease-out":Ke(0,0,.58,1),"ease-in-out":Ke(.42,0,.58,1),"ease-in-sine":Ke(.47,0,.745,.715),"ease-out-sine":Ke(.39,.575,.565,1),"ease-in-out-sine":Ke(.445,.05,.55,.95),"ease-in-quad":Ke(.55,.085,.68,.53),"ease-out-quad":Ke(.25,.46,.45,.94),"ease-in-out-quad":Ke(.455,.03,.515,.955),"ease-in-cubic":Ke(.55,.055,.675,.19),"ease-out-cubic":Ke(.215,.61,.355,1),"ease-in-out-cubic":Ke(.645,.045,.355,1),"ease-in-quart":Ke(.895,.03,.685,.22),"ease-out-quart":Ke(.165,.84,.44,1),"ease-in-out-quart":Ke(.77,0,.175,1),"ease-in-quint":Ke(.755,.05,.855,.06),"ease-out-quint":Ke(.23,1,.32,1),"ease-in-out-quint":Ke(.86,0,.07,1),"ease-in-expo":Ke(.95,.05,.795,.035),"ease-out-expo":Ke(.19,1,.22,1),"ease-in-out-expo":Ke(1,0,0,1),"ease-in-circ":Ke(.6,.04,.98,.335),"ease-out-circ":Ke(.075,.82,.165,1),"ease-in-out-circ":Ke(.785,.135,.15,.86),spring:function(e,r,a){if(a===0)return Nn.linear;var n=fm(e,r,a);return function(i,s,o){return i+(s-i)*n(o)}},"cubic-bezier":Ke};function kc(t,e,r,a,n){if(a===1||e===r)return r;var i=n(e,r,a);return t==null||((t.roundValue||t.color)&&(i=Math.round(i)),t.min!==void 0&&(i=Math.max(i,t.min)),t.max!==void 0&&(i=Math.min(i,t.max))),i}function Pc(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function ta(t,e,r,a,n){var i=n!=null?n.type:null;r<0?r=0:r>1&&(r=1);var s=Pc(t,n),o=Pc(e,n);if(se(s)&&se(o))return kc(i,s,o,r,a);if(Ue(s)&&Ue(o)){for(var l=[],u=0;u0?(h==="spring"&&v.push(s.duration),s.easingImpl=Nn[h].apply(null,v)):s.easingImpl=Nn[h]}var y=s.easingImpl,p;if(s.duration===0?p=1:p=(r-l)/s.duration,s.applying&&(p=s.progress),p<0?p=0:p>1&&(p=1),s.delay==null){var g=s.startPosition,m=s.position;if(m&&n&&!t.locked()){var b={};Aa(g.x,m.x)&&(b.x=ta(g.x,m.x,p,y)),Aa(g.y,m.y)&&(b.y=ta(g.y,m.y,p,y)),t.position(b)}var w=s.startPan,E=s.pan,C=i.pan,x=E!=null&&a;x&&(Aa(w.x,E.x)&&(C.x=ta(w.x,E.x,p,y)),Aa(w.y,E.y)&&(C.y=ta(w.y,E.y,p,y)),t.emit("pan"));var T=s.startZoom,k=s.zoom,P=k!=null&&a;P&&(Aa(T,k)&&(i.zoom=Ua(i.minZoom,ta(T,k,p,y),i.maxZoom)),t.emit("zoom")),(x||P)&&t.emit("viewport");var B=s.style;if(B&&B.length>0&&n){for(var D=0;D=0;x--){var T=C[x];T()}C.splice(0,C.length)},m=h.length-1;m>=0;m--){var b=h[m],w=b._private;if(w.stopped){h.splice(m,1),w.hooked=!1,w.playing=!1,w.started=!1,g(w.frames);continue}!w.playing&&!w.applying||(w.playing&&w.applying&&(w.applying=!1),w.started||hm(c,b,t),vm(c,b,t,d),w.applying&&(w.applying=!1),g(w.frames),w.step!=null&&w.step(t),b.completed()&&(h.splice(m,1),w.hooked=!1,w.playing=!1,w.started=!1,g(w.completes)),y=!0)}return!d&&h.length===0&&v.length===0&&a.push(c),y}for(var i=!1,s=0;s0?e.notify("draw",r):e.notify("draw")),r.unmerge(a),e.emit("step")}var pm={animate:Ve.animate(),animation:Ve.animation(),animated:Ve.animated(),clearQueue:Ve.clearQueue(),delay:Ve.delay(),delayAnimation:Ve.delayAnimation(),stop:Ve.stop(),addToAnimationPool:function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&Kn(function(i){Bc(i,e),r()})}var a=e.renderer();a&&a.beforeRender?a.beforeRender(function(i,s){Bc(s,e)},a.beforeRenderPriorities.animations):r()}},gm={qualifierCompare:function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},eventMatches:function(e,r,a){var n=r.qualifier;return n!=null?e!==a.target&&Ja(a.target)&&n.matches(a.target):!0},addEventFields:function(e,r){r.cy=e,r.target=e},callbackContext:function(e,r,a){return r.qualifier!=null?a.target:e}},En=function(e){return me(e)?new Br(e):e},yf={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new yi(gm,this)),this},emitter:function(){return this._private.emitter},on:function(e,r,a){return this.emitter().on(e,En(r),a),this},removeListener:function(e,r,a){return this.emitter().removeListener(e,En(r),a),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,r,a){return this.emitter().one(e,En(r),a),this},once:function(e,r,a){return this.emitter().one(e,En(r),a),this},emit:function(e,r){return this.emitter().emit(e,r),this},emitAndNotify:function(e,r){return this.emit(e),this.notify(e,r),this}};Ve.eventAliasesOn(yf);var Co={png:function(e){var r=this._private.renderer;return e=e||{},r.png(e)},jpg:function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)}};Co.jpeg=Co.jpg;var zn={layout:function(e){var r=this;if(e==null){Ye("Layout options must be specified to make a layout");return}if(e.name==null){Ye("A `name` must be specified to make a layout");return}var a=e.name,n=r.extension("layout",a);if(n==null){Ye("No such layout `"+a+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var i;me(e.eles)?i=r.$(e.eles):i=e.eles!=null?e.eles:r.$();var s=new n(xe({},e,{cy:r,eles:i}));return s}};zn.createLayout=zn.makeLayout=zn.layout;var ym={notify:function(e,r){var a=this._private;if(this.batching()){a.batchNotifications=a.batchNotifications||{};var n=a.batchNotifications[e]=a.batchNotifications[e]||this.collection();r!=null&&n.merge(r);return}if(a.notificationsEnabled){var i=this.renderer();this.destroyed()||!i||i.notify(e,r)}},notifications:function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(a){var n=e.batchNotifications[a];n.empty()?r.notify(a):r.notify(a,n)})}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var r=this;return this.batch(function(){for(var a=Object.keys(e),n=0;n0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(a){var n=a._private;n.rscratch={},n.rstyle={},n.animation.current=[],n.animation.queue=[]})},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};To.invalidateDimensions=To.resize;var $n={collection:function(e,r){return me(e)?this.$(e):It(e)?e.collection():Ue(e)?(r||(r={}),new pt(this,e,r.unique,r.removed)):new pt(this)},nodes:function(e){var r=this.$(function(a){return a.isNode()});return e?r.filter(e):r},edges:function(e){var r=this.$(function(a){return a.isEdge()});return e?r.filter(e):r},$:function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},mutableElements:function(){return this._private.elements}};$n.elements=$n.filter=$n.$;var ft={},za="t",bm="f";ft.apply=function(t){for(var e=this,r=e._private,a=r.cy,n=a.collection(),i=0;i0;if(f||d&&h){var v=void 0;f&&h||f?v=u.properties:h&&(v=u.mappedProperties);for(var y=0;y1&&(w=1),o.color){var C=a.valueMin[0],x=a.valueMax[0],T=a.valueMin[1],k=a.valueMax[1],P=a.valueMin[2],B=a.valueMax[2],D=a.valueMin[3]==null?1:a.valueMin[3],R=a.valueMax[3]==null?1:a.valueMax[3],A=[Math.round(C+(x-C)*w),Math.round(T+(k-T)*w),Math.round(P+(B-P)*w),Math.round(D+(R-D)*w)];i={bypass:a.bypass,name:a.name,value:A,strValue:"rgb("+A[0]+", "+A[1]+", "+A[2]+")"}}else if(o.number){var M=a.valueMin+(a.valueMax-a.valueMin)*w;i=this.parse(a.name,M,a.bypass,f)}else return!1;if(!i)return y(),!1;i.mapping=a,a=i;break}case s.data:{for(var _=a.field.split("."),L=d.data,I=0;I<_.length&&L;I++){var H=_[I];L=L[H]}if(L!=null&&(i=this.parse(a.name,L,a.bypass,f)),!i)return y(),!1;i.mapping=a,a=i;break}case s.fn:{var G=a.value,O=a.fnValue!=null?a.fnValue:G(t);if(a.prevFnValue=O,O==null)return He("Custom function mappers may not return null (i.e. `"+a.name+"` for ele `"+t.id()+"` is null)"),!1;if(i=this.parse(a.name,O,a.bypass,f),!i)return He("Custom function mappers may not return invalid values for the property type (i.e. `"+a.name+"` for ele `"+t.id()+"` is invalid)"),!1;i.mapping=Jt(a),a=i;break}case void 0:break;default:return!1}return l?(c?a.bypassed=u.bypassed:a.bypassed=u,n[a.name]=a):c?u.bypassed=a:n[a.name]=a,v(),!0};ft.cleanElements=function(t,e){for(var r=0;r0&&i>0){for(var o={},l=!1,u=0;u0?t.delayAnimation(s).play().promise().then(b):b()}).then(function(){return t.animation({style:o,duration:i,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,n),t.emitAndNotify("style"),a.transitioning=!1})}else a.transitioning&&(this.removeBypasses(t,n),t.emitAndNotify("style"),a.transitioning=!1)};ft.checkTrigger=function(t,e,r,a,n,i){var s=this.properties[e],o=n(s);t.removed()||o!=null&&o(r,a,t)&&i(s)};ft.checkZOrderTrigger=function(t,e,r,a){var n=this;this.checkTrigger(t,e,r,a,function(i){return i.triggersZOrder},function(){n._private.cy.notify("zorder",t)})};ft.checkBoundsTrigger=function(t,e,r,a){this.checkTrigger(t,e,r,a,function(n){return n.triggersBounds},function(n){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache()})};ft.checkConnectedEdgesBoundsTrigger=function(t,e,r,a){this.checkTrigger(t,e,r,a,function(n){return n.triggersBoundsOfConnectedEdges},function(n){t.connectedEdges().forEach(function(i){i.dirtyBoundingBoxCache()})})};ft.checkParallelEdgesBoundsTrigger=function(t,e,r,a){this.checkTrigger(t,e,r,a,function(n){return n.triggersBoundsOfParallelEdges},function(n){t.parallelEdges().forEach(function(i){i.dirtyBoundingBoxCache()})})};ft.checkTriggers=function(t,e,r,a){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,a),this.checkBoundsTrigger(t,e,r,a),this.checkConnectedEdgesBoundsTrigger(t,e,r,a),this.checkParallelEdgesBoundsTrigger(t,e,r,a)};var on={};on.applyBypass=function(t,e,r,a){var n=this,i=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var o=0;on.length?a=a.substr(n.length):a=""}function l(){i.length>s.length?i=i.substr(s.length):i=""}for(;;){var u=a.match(/^\s*$/);if(u)break;var c=a.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!c){He("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+a);break}n=c[0];var d=c[1];if(d!=="core"){var f=new Br(d);if(f.invalid){He("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),o();continue}}var h=c[2],v=!1;i=h;for(var y=[];;){var p=i.match(/^\s*$/);if(p)break;var g=i.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!g){He("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+h),v=!0;break}s=g[0];var m=g[1],b=g[2],w=e.properties[m];if(!w){He("Skipping property: Invalid property name in: "+s),l();continue}var E=r.parse(m,b);if(!E){He("Skipping property: Invalid property definition in: "+s),l();continue}y.push({name:m,val:b}),l()}if(v){o();break}r.selector(d);for(var C=0;C=7&&e[0]==="d"&&(c=new RegExp(o.data.regex).exec(e))){if(r)return!1;var f=o.data;return{name:t,value:c,strValue:""+e,mapped:f,field:c[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(o.mapData.regex).exec(e))){if(r||u.multiple)return!1;var h=o.mapData;if(!(u.color||u.number))return!1;var v=this.parse(t,d[4]);if(!v||v.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(v.pfValue===y.pfValue||v.strValue===y.strValue)return He("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+v.strValue+"`"),this.parse(t,v.strValue);if(u.color){var p=v.value,g=y.value,m=p[0]===g[0]&&p[1]===g[1]&&p[2]===g[2]&&(p[3]===g[3]||(p[3]==null||p[3]===1)&&(g[3]==null||g[3]===1));if(m)return!1}return{name:t,value:d,strValue:""+e,mapped:h,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:v.value,valueMax:y.value,bypass:r}}}if(u.multiple&&a!=="multiple"){var b;if(l?b=e.split(/\s+/):Ue(e)?b=e:b=[e],u.evenMultiple&&b.length%2!==0)return null;for(var w=[],E=[],C=[],x="",T=!1,k=0;k0?" ":"")+P.strValue}return u.validate&&!u.validate(w,E)?null:u.singleEnum&&T?w.length===1&&me(w[0])?{name:t,value:w[0],strValue:w[0],bypass:r}:null:{name:t,value:w,pfValue:C,strValue:x,bypass:r,units:E}}var B=function(){for(var ee=0;eeu.max||u.strictMax&&e===u.max))return null;var _={name:t,value:e,strValue:""+e+(D||""),units:D,bypass:r};return u.unitless||D!=="px"&&D!=="em"?_.pfValue=e:_.pfValue=D==="px"||!D?e:this.getEmSizeInPixels()*e,(D==="ms"||D==="s")&&(_.pfValue=D==="ms"?e:1e3*e),(D==="deg"||D==="rad")&&(_.pfValue=D==="rad"?e:gp(e)),D==="%"&&(_.pfValue=e/100),_}else if(u.propList){var L=[],I=""+e;if(I!=="none"){for(var H=I.split(/\s*,\s*|\s+/),G=0;G0&&o>0&&!isNaN(a.w)&&!isNaN(a.h)&&a.w>0&&a.h>0){l=Math.min((s-2*r)/a.w,(o-2*r)/a.h),l=l>this._private.maxZoom?this._private.maxZoom:l,l=l=a.minZoom&&(a.maxZoom=r),this},minZoom:function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var r=this._private,a=r.pan,n=r.zoom,i,s,o=!1;if(r.zoomingEnabled||(o=!0),se(e)?s=e:Ne(e)&&(s=e.level,e.position!=null?i=ci(e.position,n,a):e.renderedPosition!=null&&(i=e.renderedPosition),i!=null&&!r.panningEnabled&&(o=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=l,i.push("zoom"))}if(n&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var u=e.pan;se(u.x)&&(r.pan.x=u.x,o=!1),se(u.y)&&(r.pan.y=u.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,r){if(this._private.panningEnabled){if(me(e)){var a=e;e=this.mutableElements().filter(a)}else It(e)||(e=this.mutableElements());if(e.length!==0){var n=e.boundingBox(),i=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var o={x:(i-r*(n.x1+n.x2))/2,y:(s-r*(n.y1+n.y2))/2};return o}}},reset:function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e=this._private,r=e.container,a=this;return e.sizeCache=e.sizeCache||(r?(function(){var n=a.window().getComputedStyle(r),i=function(o){return parseFloat(n.getPropertyValue(o))};return{width:r.clientWidth-i("padding-left")-i("padding-right"),height:r.clientHeight-i("padding-top")-i("padding-bottom")}})():{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,r=this._private.zoom,a=this.renderedExtent(),n={x1:(a.x1-e.x)/r,x2:(a.x2-e.x)/r,y1:(a.y1-e.y)/r,y2:(a.y2-e.y)/r};return n.w=n.x2-n.x1,n.h=n.y2-n.y1,n},renderedExtent:function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},multiClickDebounceTime:function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this}};jr.centre=jr.center;jr.autolockNodes=jr.autolock;jr.autoungrabifyNodes=jr.autoungrabify;var Ya={data:Ve.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:Ve.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:Ve.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Ve.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Ya.attr=Ya.data;Ya.removeAttr=Ya.removeData;var Xa=function(e){var r=this;e=xe({},e);var a=e.container;a&&!Un(a)&&Un(a[0])&&(a=a[0]);var n=a?a._cyreg:null;n=n||{},n&&n.cy&&(n.cy.destroy(),n={});var i=n.readies=n.readies||[];a&&(a._cyreg=n),n.cy=r;var s=it!==void 0&&a!==void 0&&!e.headless,o=e;o.layout=xe({name:s?"grid":"null"},o.layout),o.renderer=xe({name:s?"canvas":"null"},o.renderer);var l=function(v,y,p){return y!==void 0?y:p!==void 0?p:v},u=this._private={container:a,ready:!1,options:o,elements:new pt(this),listeners:[],aniEles:new pt(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:l(!0,o.zoomingEnabled),userZoomingEnabled:l(!0,o.userZoomingEnabled),panningEnabled:l(!0,o.panningEnabled),userPanningEnabled:l(!0,o.userPanningEnabled),boxSelectionEnabled:l(!0,o.boxSelectionEnabled),autolock:l(!1,o.autolock,o.autolockNodes),autoungrabify:l(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:l(!1,o.autounselectify),styleEnabled:o.styleEnabled===void 0?s:o.styleEnabled,zoom:se(o.zoom)?o.zoom:1,pan:{x:Ne(o.pan)&&se(o.pan.x)?o.pan.x:0,y:Ne(o.pan)&&se(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:l(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});var c=function(v,y){var p=v.some(ch);if(p)return ba.all(v).then(y);y(v)};u.styleEnabled&&r.setStyle([]);var d=xe({},o,o.renderer);r.initRenderer(d);var f=function(v,y,p){r.notifications(!1);var g=r.mutableElements();g.length>0&&g.remove(),v!=null&&(Ne(v)||Ue(v))&&r.add(v),r.one("layoutready",function(b){r.notifications(!0),r.emit(b),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",p),r.emit("done")});var m=xe({},r._private.options.layout);m.eles=r.elements(),r.layout(m).run()};c([o.style,o.elements],function(h){var v=h[0],y=h[1];u.styleEnabled&&r.style().append(v),f(y,function(){r.startAnimationLoop(),u.ready=!0,Ze(o.ready)&&r.on("ready",o.ready);for(var p=0;p0,o=!!t.boundingBox,l=kt(o?t.boundingBox:structuredClone(e.extent())),u;if(It(t.roots))u=t.roots;else if(Ue(t.roots)){for(var c=[],d=0;d0;){var A=R(),M=k(A,B);if(M)A.outgoers().filter(function(be){return be.isNode()&&r.has(be)}).forEach(D);else if(M===null){He("Detected double maximal shift for node `"+A.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var _=0;if(t.avoidOverlap)for(var L=0;L0&&g[0].length<=3?Ce/2:0),Le=2*Math.PI/g[pe].length*Se;return pe===0&&g[0].length===1&&(De=1),{x:W.x+De*Math.cos(Le),y:W.y+De*Math.sin(Le)}}else{var qe=g[pe].length,ze=Math.max(qe===1?0:o?(l.w-t.padding*2-Q.w)/((t.grid?ge:qe)-1):(l.w-t.padding*2-Q.w)/((t.grid?ge:qe)+1),_),Ie={x:W.x+(Se+1-(qe+1)/2)*ze,y:W.y+(pe+1-(J+1)/2)*ie};return Ie}},Te={downward:0,leftward:90,upward:180,rightward:-90};Object.keys(Te).indexOf(t.direction)===-1&&Ye("Invalid direction '".concat(t.direction,"' specified for breadthfirst layout. Valid values are: ").concat(Object.keys(Te).join(", ")));var Ee=function(ce){return $h(Me(ce),l,Te[t.direction])};return r.nodes().layoutPositions(this,t,Ee),this};var Tm={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,r){return!0},ready:void 0,stop:void 0,transform:function(e,r){return r}};function bf(t){this.options=xe({},Tm,t)}bf.prototype.run=function(){var t=this.options,e=t,r=t.cy,a=e.eles,n=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,i=a.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));for(var s=kt(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),o={x:s.x1+s.w/2,y:s.y1+s.h/2},l=e.sweep===void 0?2*Math.PI-2*Math.PI/i.length:e.sweep,u=l/Math.max(1,i.length-1),c,d=0,f=0;f1&&e.avoidOverlap){d*=1.75;var g=Math.cos(u)-Math.cos(0),m=Math.sin(u)-Math.sin(0),b=Math.sqrt(d*d/(g*g+m*m));c=Math.max(b,c)}var w=function(C,x){var T=e.startAngle+x*u*(n?1:-1),k=c*Math.cos(T),P=c*Math.sin(T),B={x:o.x+k,y:o.y+P};return B};return a.nodes().layoutPositions(this,e,w),this};var Sm={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,r){return!0},ready:void 0,stop:void 0,transform:function(e,r){return r}};function wf(t){this.options=xe({},Sm,t)}wf.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=t.cy,n=e.eles,i=n.nodes().not(":parent"),s=kt(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:a.width(),h:a.height()}),o={x:s.x1+s.w/2,y:s.y1+s.h/2},l=[],u=0,c=0;c0){var E=Math.abs(m[0].value-w.value);E>=p&&(m=[],g.push(m))}m.push(w)}var C=u+e.minNodeSpacing;if(!e.avoidOverlap){var x=g.length>0&&g[0].length>1,T=Math.min(s.w,s.h)/2-C,k=T/(g.length+x?1:0);C=Math.min(C,k)}for(var P=0,B=0;B1&&e.avoidOverlap){var M=Math.cos(A)-Math.cos(0),_=Math.sin(A)-Math.sin(0),L=Math.sqrt(C*C/(M*M+_*_));P=Math.max(L,P)}D.r=P,P+=C}if(e.equidistant){for(var I=0,H=0,G=0;G=t.numIter||(Lm(a,t),a.temperature=a.temperature*t.coolingFactor,a.temperature=t.animationThreshold&&i(),Kn(c)}};c()}else{for(;u;)u=s(l),l++;Ac(a,t),o()}return this};Ei.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};Ei.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var Pm=function(e,r,a){for(var n=a.eles.edges(),i=a.eles.nodes(),s=kt(a.boundingBox?a.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:n.size(),temperature:a.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},l=a.eles.components(),u={},c=0;c0){o.graphSet.push(T);for(var c=0;cn.count?0:n.graph},xf=function(e,r,a,n){var i=n.graphSet[a];if(-10)var d=n.nodeOverlap*c,f=Math.sqrt(o*o+l*l),h=d*o/f,v=d*l/f;else var y=Jn(e,o,l),p=Jn(r,-1*o,-1*l),g=p.x-y.x,m=p.y-y.y,b=g*g+m*m,f=Math.sqrt(b),d=(e.nodeRepulsion+r.nodeRepulsion)/b,h=d*g/f,v=d*m/f;e.isLocked||(e.offsetX-=h,e.offsetY-=v),r.isLocked||(r.offsetX+=h,r.offsetY+=v)}},Im=function(e,r,a,n){if(a>0)var i=e.maxX-r.minX;else var i=r.maxX-e.minX;if(n>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return i>=0&&s>=0?Math.sqrt(i*i+s*s):0},Jn=function(e,r,a){var n=e.positionX,i=e.positionY,s=e.height||1,o=e.width||1,l=a/r,u=s/o,c={};return r===0&&0a?(c.x=n,c.y=i+s/2,c):0r&&-1*u<=l&&l<=u?(c.x=n-o/2,c.y=i-o*a/2/r,c):0=u)?(c.x=n+s*r/2/a,c.y=i+s/2,c):(0>a&&(l<=-1*u||l>=u)&&(c.x=n-s*r/2/a,c.y=i-s/2),c)},Om=function(e,r){for(var a=0;aa){var p=r.gravity*h/y,g=r.gravity*v/y;f.offsetX+=p,f.offsetY+=g}}}}},zm=function(e,r){var a=[],n=0,i=-1;for(a.push.apply(a,e.graphSet[0]),i+=e.graphSet[0].length;n<=i;){var s=a[n++],o=e.idToIndex[s],l=e.layoutNodes[o],u=l.children;if(0a)var i={x:a*e/n,y:a*r/n};else var i={x:e,y:r};return i},Cf=function(e,r){var a=e.parentId;if(a!=null){var n=r.layoutNodes[r.idToIndex[a]],i=!1;if((n.maxX==null||e.maxX+n.padRight>n.maxX)&&(n.maxX=e.maxX+n.padRight,i=!0),(n.minX==null||e.minX-n.padLeftn.maxY)&&(n.maxY=e.maxY+n.padBottom,i=!0),(n.minY==null||e.minY-n.padTopg&&(v+=p+r.componentSpacing,h=0,y=0,p=0)}}},qm={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,r){return!0},ready:void 0,stop:void 0,transform:function(e,r){return r}};function Tf(t){this.options=xe({},qm,t)}Tf.prototype.run=function(){var t=this.options,e=t,r=t.cy,a=e.eles,n=a.nodes().not(":parent");e.sort&&(n=n.sort(e.sort));var i=kt(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(i.h===0||i.w===0)a.nodes().layoutPositions(this,e,function(Y){return{x:i.x1,y:i.y1}});else{var s=n.size(),o=Math.sqrt(s*i.h/i.w),l=Math.round(o),u=Math.round(i.w/i.h*o),c=function(te){if(te==null)return Math.min(l,u);var J=Math.min(l,u);J==l?l=te:u=te},d=function(te){if(te==null)return Math.max(l,u);var J=Math.max(l,u);J==l?l=te:u=te},f=e.rows,h=e.cols!=null?e.cols:e.columns;if(f!=null&&h!=null)l=f,u=h;else if(f!=null&&h==null)l=f,u=Math.ceil(s/l);else if(f==null&&h!=null)u=h,l=Math.ceil(s/u);else if(u*l>s){var v=c(),y=d();(v-1)*y>=s?c(v-1):(y-1)*v>=s&&d(y-1)}else for(;u*l=s?d(g+1):c(p+1)}var m=i.w/u,b=i.h/l;if(e.condense&&(m=0,b=0),e.avoidOverlap)for(var w=0;w=u&&(M=0,A++)},L={},I=0;I(M=Rp(t,e,_[L],_[L+1],_[L+2],_[L+3])))return p(x,M),!0}else if(k.edgeType==="bezier"||k.edgeType==="multibezier"||k.edgeType==="self"||k.edgeType==="compound"){for(var _=k.allpts,L=0;L+5(M=Dp(t,e,_[L],_[L+1],_[L+2],_[L+3],_[L+4],_[L+5])))return p(x,M),!0}for(var I=I||T.source,H=H||T.target,G=n.getArrowWidth(P,B),O=[{name:"source",x:k.arrowStartX,y:k.arrowStartY,angle:k.srcArrowAngle},{name:"target",x:k.arrowEndX,y:k.arrowEndY,angle:k.tgtArrowAngle},{name:"mid-source",x:k.midX,y:k.midY,angle:k.midsrcArrowAngle},{name:"mid-target",x:k.midX,y:k.midY,angle:k.midtgtArrowAngle}],L=0;L0&&(g(I),g(H))}function b(x,T,k){return Rt(x,T,k)}function w(x,T){var k=x._private,P=f,B;T?B=T+"-":B="",x.boundingBox();var D=k.labelBounds[T||"main"],R=x.pstyle(B+"label").value,A=x.pstyle("text-events").strValue==="yes";if(!(!A||!R)){var M=b(k.rscratch,"labelX",T),_=b(k.rscratch,"labelY",T),L=b(k.rscratch,"labelAngle",T),I=x.pstyle(B+"text-margin-x").pfValue,H=x.pstyle(B+"text-margin-y").pfValue,G=D.x1-P-I,O=D.x2+P-I,$=D.y1-P-H,Y=D.y2+P-H;if(L){var te=Math.cos(L),J=Math.sin(L),re=function(Q,ie){return Q=Q-M,ie=ie-_,{x:Q*te-ie*J+M,y:Q*J+ie*te+_}},ne=re(G,$),oe=re(G,Y),ee=re(O,$),q=re(O,Y),K=[ne.x+I,ne.y+H,ee.x+I,ee.y+H,q.x+I,q.y+H,oe.x+I,oe.y+H];if(At(t,e,K))return p(x),!0}else if(wr(D,t,e))return p(x),!0}}for(var E=s.length-1;E>=0;E--){var C=s[E];C.isNode()?g(C)||w(C):m(C)||w(C)||w(C,"source")||w(C,"target")}return o};Zr.getAllInBox=function(t,e,r,a){var n=this.getCachedZSortedEles().interactive,i=this.cy.zoom(),s=2/i,o=[],l=Math.min(t,r),u=Math.max(t,r),c=Math.min(e,a),d=Math.max(e,a);t=l,r=u,e=c,a=d;var f=kt({x1:t,y1:e,x2:r,y2:a}),h=[{x:f.x1,y:f.y1},{x:f.x2,y:f.y1},{x:f.x2,y:f.y2},{x:f.x1,y:f.y2}],v=[[h[0],h[1]],[h[1],h[2]],[h[2],h[3]],[h[3],h[0]]];function y(Q,ie,ge){return Rt(Q,ie,ge)}function p(Q,ie){var ge=Q._private,Me=s,Te="";Q.boundingBox();var Ee=ge.labelBounds.main;if(!Ee)return null;var be=y(ge.rscratch,"labelX",ie),ce=y(ge.rscratch,"labelY",ie),ye=y(ge.rscratch,"labelAngle",ie),pe=Q.pstyle(Te+"text-margin-x").pfValue,Se=Q.pstyle(Te+"text-margin-y").pfValue,Ce=Ee.x1-Me-pe,De=Ee.x2+Me-pe,Le=Ee.y1-Me-Se,qe=Ee.y2+Me-Se;if(ye){var ze=Math.cos(ye),Ie=Math.sin(ye),Z=function(N,U){return N=N-be,U=U-ce,{x:N*ze-U*Ie+be,y:N*Ie+U*ze+ce}};return[Z(Ce,Le),Z(De,Le),Z(De,qe),Z(Ce,qe)]}else return[{x:Ce,y:Le},{x:De,y:Le},{x:De,y:qe},{x:Ce,y:qe}]}function g(Q,ie,ge,Me){function Te(Ee,be,ce){return(ce.y-Ee.y)*(be.x-Ee.x)>(be.y-Ee.y)*(ce.x-Ee.x)}return Te(Q,ge,Me)!==Te(ie,ge,Me)&&Te(Q,ie,ge)!==Te(Q,ie,Me)}for(var m=0;m0?-(Math.PI-e.ang):Math.PI+e.ang},Wm=function(e,r,a,n,i){if(e!==Oc?Nc(r,e,Zt):Km(zt,Zt),Nc(r,a,zt),_c=Zt.nx*zt.ny-Zt.ny*zt.nx,Ic=Zt.nx*zt.nx-Zt.ny*-zt.ny,nr=Math.asin(Math.max(-1,Math.min(1,_c))),Math.abs(nr)<1e-6){So=r.x,ko=r.y,Fr=aa=0;return}Hr=1,Fn=!1,Ic<0?nr<0?nr=Math.PI+nr:(nr=Math.PI-nr,Hr=-1,Fn=!0):nr>0&&(Hr=-1,Fn=!0),r.radius!==void 0?aa=r.radius:aa=n,Nr=nr/2,Cn=Math.min(Zt.len/2,zt.len/2),i?(Yt=Math.abs(Math.cos(Nr)*aa/Math.sin(Nr)),Yt>Cn?(Yt=Cn,Fr=Math.abs(Yt*Math.sin(Nr)/Math.cos(Nr))):Fr=aa):(Yt=Math.min(Cn,aa),Fr=Math.abs(Yt*Math.sin(Nr)/Math.cos(Nr))),Po=r.x+zt.nx*Yt,Bo=r.y+zt.ny*Yt,So=Po-zt.ny*Fr*Hr,ko=Bo+zt.nx*Fr*Hr,Bf=r.x+Zt.nx*Yt,Df=r.y+Zt.ny*Yt,Oc=r};function Rf(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function fl(t,e,r,a){var n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return a===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(Wm(t,e,r,a,n),{cx:So,cy:ko,radius:Fr,startX:Bf,startY:Df,stopX:Po,stopY:Bo,startAngle:Zt.ang+Math.PI/2*Hr,endAngle:zt.ang-Math.PI/2*Hr,counterClockwise:Fn})}var Za=.01,jm=Math.sqrt(2*Za),Tt={};Tt.findMidptPtsEtc=function(t,e){var r=e.posPts,a=e.intersectionPts,n=e.vectorNormInverse,i,s=t.pstyle("source-endpoint"),o=t.pstyle("target-endpoint"),l=s.units!=null&&o.units!=null,u=function(E,C,x,T){var k=T-C,P=x-E,B=Math.sqrt(P*P+k*k);return{x:-k/B,y:P/B}},c=t.pstyle("edge-distances").value;switch(c){case"node-position":i=r;break;case"intersection":i=a;break;case"endpoints":{if(l){var d=this.manualEndptToPx(t.source()[0],s),f=at(d,2),h=f[0],v=f[1],y=this.manualEndptToPx(t.target()[0],o),p=at(y,2),g=p[0],m=p[1],b={x1:h,y1:v,x2:g,y2:m};n=u(h,v,g,m),i=b}else He("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),i=a;break}}return{midptPts:i,vectorNormInverse:n}};Tt.findHaystackPoints=function(t){for(var e=0;e0?Math.max(U-j,0):Math.min(U+j,0)},R=D(P,T),A=D(B,k),M=!1;m===u?g=Math.abs(R)>Math.abs(A)?n:a:m===l||m===o?(g=a,M=!0):(m===i||m===s)&&(g=n,M=!0);var _=g===a,L=_?A:R,I=_?B:P,H=Jo(I),G=!1;!(M&&(w||C))&&(m===o&&I<0||m===l&&I>0||m===i&&I>0||m===s&&I<0)&&(H*=-1,L=H*Math.abs(L),G=!0);var O;if(w){var $=E<0?1+E:E;O=$*L}else{var Y=E<0?L:0;O=Y+E*H}var te=function(U){return Math.abs(U)=Math.abs(L)},J=te(O),re=te(Math.abs(L)-Math.abs(O)),ne=J||re;if(ne&&!G)if(_){var oe=Math.abs(I)<=f/2,ee=Math.abs(P)<=h/2;if(oe){var q=(c.x1+c.x2)/2,K=c.y1,W=c.y2;r.segpts=[q,K,q,W]}else if(ee){var Q=(c.y1+c.y2)/2,ie=c.x1,ge=c.x2;r.segpts=[ie,Q,ge,Q]}else r.segpts=[c.x1,c.y2]}else{var Me=Math.abs(I)<=d/2,Te=Math.abs(B)<=v/2;if(Me){var Ee=(c.y1+c.y2)/2,be=c.x1,ce=c.x2;r.segpts=[be,Ee,ce,Ee]}else if(Te){var ye=(c.x1+c.x2)/2,pe=c.y1,Se=c.y2;r.segpts=[ye,pe,ye,Se]}else r.segpts=[c.x2,c.y1]}else if(_){var Ce=c.y1+O+(p?f/2*H:0),De=c.x1,Le=c.x2;r.segpts=[De,Ce,Le,Ce]}else{var qe=c.x1+O+(p?d/2*H:0),ze=c.y1,Ie=c.y2;r.segpts=[qe,ze,qe,Ie]}if(r.isRound){var Z=t.pstyle("taxi-radius").value,S=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(Z),r.isArcRadius=new Array(r.segpts.length/2).fill(S)}};Tt.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var a=e.srcPos,n=e.tgtPos,i=e.srcW,s=e.srcH,o=e.tgtW,l=e.tgtH,u=e.srcShape,c=e.tgtShape,d=e.srcCornerRadius,f=e.tgtCornerRadius,h=e.srcRs,v=e.tgtRs,y=!se(r.startX)||!se(r.startY),p=!se(r.arrowStartX)||!se(r.arrowStartY),g=!se(r.endX)||!se(r.endY),m=!se(r.arrowEndX)||!se(r.arrowEndY),b=3,w=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,E=b*w,C=Kr({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),x=CI.poolIndex()){var H=L;L=I,I=H}var G=R.srcPos=L.position(),O=R.tgtPos=I.position(),$=R.srcW=L.outerWidth(),Y=R.srcH=L.outerHeight(),te=R.tgtW=I.outerWidth(),J=R.tgtH=I.outerHeight(),re=R.srcShape=r.nodeShapes[e.getNodeShape(L)],ne=R.tgtShape=r.nodeShapes[e.getNodeShape(I)],oe=R.srcCornerRadius=L.pstyle("corner-radius").value==="auto"?"auto":L.pstyle("corner-radius").pfValue,ee=R.tgtCornerRadius=I.pstyle("corner-radius").value==="auto"?"auto":I.pstyle("corner-radius").pfValue,q=R.tgtRs=I._private.rscratch,K=R.srcRs=L._private.rscratch;R.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var W=0;W=jm||(Le=Math.sqrt(Math.max(De*De,Za)+Math.max(Ce*Ce,Za)));var qe=R.vector={x:De,y:Ce},ze=R.vectorNorm={x:qe.x/Le,y:qe.y/Le},Ie={x:-ze.y,y:ze.x};R.nodesOverlap=!se(Le)||ne.checkPoint(Ee[0],Ee[1],0,te,J,O.x,O.y,ee,q)||re.checkPoint(ce[0],ce[1],0,$,Y,G.x,G.y,oe,K),R.vectorNormInverse=Ie,A={nodesOverlap:R.nodesOverlap,dirCounts:R.dirCounts,calculatedIntersection:!0,hasBezier:R.hasBezier,hasUnbundled:R.hasUnbundled,eles:R.eles,srcPos:O,srcRs:q,tgtPos:G,tgtRs:K,srcW:te,srcH:J,tgtW:$,tgtH:Y,srcIntn:ye,tgtIntn:be,srcShape:ne,tgtShape:re,posPts:{x1:Se.x2,y1:Se.y2,x2:Se.x1,y2:Se.y1},intersectionPts:{x1:pe.x2,y1:pe.y2,x2:pe.x1,y2:pe.y1},vector:{x:-qe.x,y:-qe.y},vectorNorm:{x:-ze.x,y:-ze.y},vectorNormInverse:{x:-Ie.x,y:-Ie.y}}}var Z=Te?A:R;ie.nodesOverlap=Z.nodesOverlap,ie.srcIntn=Z.srcIntn,ie.tgtIntn=Z.tgtIntn,ie.isRound=ge.startsWith("round"),n&&(L.isParent()||L.isChild()||I.isParent()||I.isChild())&&(L.parents().anySame(I)||I.parents().anySame(L)||L.same(I)&&L.isParent())?e.findCompoundLoopPoints(Q,Z,W,Me):L===I?e.findLoopPoints(Q,Z,W,Me):ge.endsWith("segments")?e.findSegmentsPoints(Q,Z):ge.endsWith("taxi")?e.findTaxiPoints(Q,Z):ge==="straight"||!Me&&R.eles.length%2===1&&W===Math.floor(R.eles.length/2)?e.findStraightEdgePoints(Q):e.findBezierPoints(Q,Z,W,Me,Te),e.findEndpoints(Q),e.tryToCorrectInvalidPoints(Q,Z),e.checkForInvalidEdgeWarning(Q),e.storeAllpts(Q),e.storeEdgeProjections(Q),e.calculateArrowAngles(Q),e.recalculateEdgeLabelProjections(Q),e.calculateLabelAngles(Q)}},x=0;x0){var Ee=u,be=$r(Ee,la(s)),ce=$r(Ee,la(Te)),ye=be;if(ce2){var pe=$r(Ee,{x:Te[2],y:Te[3]});pe0){var X=c,ve=$r(X,la(s)),ae=$r(X,la(j)),le=ve;if(ae2){var de=$r(X,{x:j[2],y:j[3]});de=v||x){p={cp:w,segment:C};break}}if(p)break}var T=p.cp,k=p.segment,P=(v-g)/k.length,B=k.t1-k.t0,D=h?k.t0+B*P:k.t1-B*P;D=Ua(0,D,1),e=da(T.p0,T.p1,T.p2,D),f=Xm(T.p0,T.p1,T.p2,D);break}case"straight":case"segments":case"haystack":{for(var R=0,A,M,_,L,I=a.allpts.length,H=0;H+3=v));H+=2);var G=v-M,O=G/A;O=Ua(0,O,1),e=mp(_,L,O),f=Mf(_,L);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,f)}};u("source"),u("target"),this.applyLabelDimensions(t)}};tr.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};tr.applyPrefixedLabelDimensions=function(t,e){var r=t._private,a=this.getLabelText(t,e),n=Ur(a,t._private.labelDimsKey);if(Rt(r.rscratch,"prefixedLabelDimsKey",e)!==n){ir(r.rscratch,"prefixedLabelDimsKey",e,n);var i=this.calculateLabelDimensions(t,a),s=t.pstyle("line-height").pfValue,o=t.pstyle("text-wrap").strValue,l=Rt(r.rscratch,"labelWrapCachedLines",e)||[],u=o!=="wrap"?1:Math.max(l.length,1),c=i.height/u,d=c*s,f=i.width,h=i.height+(u-1)*(s-1)*c;ir(r.rstyle,"labelWidth",e,f),ir(r.rscratch,"labelWidth",e,f),ir(r.rstyle,"labelHeight",e,h),ir(r.rscratch,"labelHeight",e,h),ir(r.rscratch,"labelLineHeight",e,d)}};tr.getLabelText=function(t,e){var r=t._private,a=e?e+"-":"",n=t.pstyle(a+"label").strValue,i=t.pstyle("text-transform").value,s=function(Y,te){return te?(ir(r.rscratch,Y,e,te),te):Rt(r.rscratch,Y,e)};if(!n)return"";i=="none"||(i=="uppercase"?n=n.toUpperCase():i=="lowercase"&&(n=n.toLowerCase()));var o=t.pstyle("text-wrap").value;if(o==="wrap"){var l=s("labelKey");if(l!=null&&s("labelWrapKey")===l)return s("labelWrapCachedText");for(var u="​",c=n.split(` `),d=t.pstyle("text-max-width").pfValue,f=t.pstyle("text-overflow-wrap").value,h=f==="anywhere",v=[],y=/[\s\u200b]+|$/g,p=0;pd){var E=g.matchAll(y),C="",x=0,T=Lt(E),k;try{for(T.s();!(k=T.n()).done;){var P=k.value,B=P[0],D=g.substring(x,P.index);x=P.index+B.length;var R=C.length===0?D:C+D+B,A=this.calculateLabelDimensions(t,R),M=A.width;M<=d?C+=D+B:(C&&v.push(C),C=D+B)}}catch($){T.e($)}finally{T.f()}C.match(/^[\s\u200b]+$/)||v.push(C)}else v.push(g)}s("labelWrapCachedLines",v),n=s("labelWrapCachedText",v.join(` `)),s("labelWrapKey",l)}else if(o==="ellipsis"){var _=t.pstyle("text-max-width").pfValue,L="",I="…",H=!1;if(this.calculateLabelDimensions(t,n).width<_)return n;for(var G=0;G_)break;L+=n[G],G===n.length-1&&(H=!0)}return H||(L+=I),L}return n};tr.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};tr.calculateLabelDimensions=function(t,e){var r=this,a=r.cy.window(),n=a.document,i=0,s=t.pstyle("font-style").strValue,o=t.pstyle("font-size").pfValue,l=t.pstyle("font-family").strValue,u=t.pstyle("font-weight").strValue,c=this.labelCalcCanvas,d=this.labelCalcCanvasContext;if(!c){c=this.labelCalcCanvas=n.createElement("canvas"),d=this.labelCalcCanvasContext=c.getContext("2d");var f=c.style;f.position="absolute",f.left="-9999px",f.top="-9999px",f.zIndex="-1",f.visibility="hidden",f.pointerEvents="none"}d.font="".concat(s," ").concat(u," ").concat(o,"px ").concat(l);for(var h=0,v=0,y=e.split(` `),p=0;p1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),o)for(var l=0;l=t.desktopTapThreshold2}var vt=i(S);ut&&(t.hoverData.tapholdCancelled=!0);var jt=function(){var Nt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];Nt.length===0?(Nt.push(Re[0]),Nt.push(Re[1])):(Nt[0]+=Re[0],Nt[1]+=Re[1])};U=!0,n(ke,["mousemove","vmousemove","tapdrag"],S,{x:ae[0],y:ae[1]});var Xe=function(Nt){return{originalEvent:S,type:Nt,position:{x:ae[0],y:ae[1]}}},ar=function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||j.emit(Xe("boxstart")),we[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()};if(t.hoverData.which===3){if(ut){var Vt=Xe("cxtdrag");he?he.emit(Vt):j.emit(Vt),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||ke!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit(Xe("cxtdragout")),t.hoverData.cxtOver=ke,ke&&ke.emit(Xe("cxtdragover")))}}else if(t.hoverData.dragging){if(U=!0,j.panningEnabled()&&j.userPanningEnabled()){var pr;if(t.hoverData.justStartedPan){var dn=t.hoverData.mdownPos;pr={x:(ae[0]-dn[0])*X,y:(ae[1]-dn[1])*X},t.hoverData.justStartedPan=!1}else pr={x:Re[0]*X,y:Re[1]*X};j.panBy(pr),j.emit(Xe("dragpan")),t.hoverData.dragged=!0}ae=t.projectIntoViewport(S.clientX,S.clientY)}else if(we[4]==1&&(he==null||he.pannable())){if(ut){if(!t.hoverData.dragging&&j.boxSelectionEnabled()&&(vt||!j.panningEnabled()||!j.userPanningEnabled()))ar();else if(!t.hoverData.selecting&&j.panningEnabled()&&j.userPanningEnabled()){var Or=s(he,t.hoverData.downs);Or&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,we[4]=0,t.data.bgActivePosistion=la(le),t.redrawHint("select",!0),t.redraw())}he&&he.pannable()&&he.active()&&he.unactivate()}}else{if(he&&he.pannable()&&he.active()&&he.unactivate(),(!he||!he.grabbed())&&ke!=Pe&&(Pe&&n(Pe,["mouseout","tapdragout"],S,{x:ae[0],y:ae[1]}),ke&&n(ke,["mouseover","tapdragover"],S,{x:ae[0],y:ae[1]}),t.hoverData.last=ke),he)if(ut){if(j.boxSelectionEnabled()&&vt)he&&he.grabbed()&&(y(_e),he.emit(Xe("freeon")),_e.emit(Xe("free")),t.dragData.didDrag&&(he.emit(Xe("dragfreeon")),_e.emit(Xe("dragfree")))),ar();else if(he&&he.grabbed()&&t.nodeIsDraggable(he)){var Bt=!t.dragData.didDrag;Bt&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||h(_e,{inDragLayer:!0});var mt={x:0,y:0};if(se(Re[0])&&se(Re[1])&&(mt.x+=Re[0],mt.y+=Re[1],Bt)){var Dt=t.hoverData.dragDelta;Dt&&se(Dt[0])&&se(Dt[1])&&(mt.x+=Dt[0],mt.y+=Dt[1])}t.hoverData.draggingEles=!0,_e.silentShift(mt).emit(Xe("position")).emit(Xe("drag")),t.redrawHint("drag",!0),t.redraw()}}else jt();U=!0}if(we[2]=ae[0],we[3]=ae[1],U)return S.stopPropagation&&S.stopPropagation(),S.preventDefault&&S.preventDefault(),!1}},!1);var P,B,D;t.registerBinding(e,"mouseup",function(S){if(!(t.hoverData.which===1&&S.which!==1&&t.hoverData.capture)){var N=t.hoverData.capture;if(N){t.hoverData.capture=!1;var U=t.cy,j=t.projectIntoViewport(S.clientX,S.clientY),X=t.selection,ve=t.findNearestElement(j[0],j[1],!0,!1),ae=t.dragData.possibleDragElements,le=t.hoverData.down,de=i(S);t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,le&&le.unactivate();var we=function(Qe){return{originalEvent:S,type:Qe,position:{x:j[0],y:j[1]}}};if(t.hoverData.which===3){var ke=we("cxttapend");if(le?le.emit(ke):U.emit(ke),!t.hoverData.cxtDragged){var Pe=we("cxttap");le?le.emit(Pe):U.emit(Pe)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(n(ve,["mouseup","tapend","vmouseup"],S,{x:j[0],y:j[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(n(le,["click","tap","vclick"],S,{x:j[0],y:j[1]}),B=!1,S.timeStamp-D<=U.multiClickDebounceTime()?(P&&clearTimeout(P),B=!0,D=null,n(le,["dblclick","dbltap","vdblclick"],S,{x:j[0],y:j[1]})):(P=setTimeout(function(){B||n(le,["oneclick","onetap","voneclick"],S,{x:j[0],y:j[1]})},U.multiClickDebounceTime()),D=S.timeStamp)),le==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!i(S)&&(U.$(r).unselect(["tapunselect"]),ae.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=ae=U.collection()),ve==le&&!t.dragData.didDrag&&!t.hoverData.selecting&&ve!=null&&ve._private.selectable&&(t.hoverData.dragging||(U.selectionType()==="additive"||de?ve.selected()?ve.unselect(["tapunselect"]):ve.select(["tapselect"]):de||(U.$(r).unmerge(ve).unselect(["tapunselect"]),ve.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var he=U.collection(t.getAllInBox(X[0],X[1],X[2],X[3]));t.redrawHint("select",!0),he.length>0&&t.redrawHint("eles",!0),U.emit(we("boxend"));var Re=function(Qe){return Qe.selectable()&&!Qe.selected()};U.selectionType()==="additive"||de||U.$(r).unmerge(he).unselect(),he.emit(we("box")).stdFilter(Re).select().emit(we("boxselect")),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!X[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var _e=le&&le.grabbed();y(ae),_e&&(le.emit(we("freeon")),ae.emit(we("free")),t.dragData.didDrag&&(le.emit(we("dragfreeon")),ae.emit(we("dragfree"))))}}X[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},!1);var R=[],A=4,M,_=1e5,L=function(S,N){for(var U=0;U=A){var j=R;if(M=L(j,5),!M){var X=Math.abs(j[0]);M=I(j)&&X>5}if(M)for(var ve=0;ve5&&(U=Jo(U)*5),Pe=U/-250,M&&(Pe/=_,Pe*=3),Pe=Pe*t.wheelSensitivity;var he=S.deltaMode===1;he&&(Pe*=33);var Re=ae.zoom()*Math.pow(10,Pe);S.type==="gesturechange"&&(Re=t.gestureStartZoom*S.scale),ae.zoom({level:Re,renderedPosition:{x:ke[0],y:ke[1]}}),ae.emit({type:S.type==="gesturechange"?"pinchzoom":"scrollzoom",originalEvent:S,position:{x:we[0],y:we[1]}})}}}};t.registerBinding(t.container,"wheel",H,!0),t.registerBinding(e,"scroll",function(S){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},!0),t.registerBinding(t.container,"gesturestart",function(S){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||S.preventDefault()},!0),t.registerBinding(t.container,"gesturechange",function(Z){t.hasTouchStarted||H(Z)},!0),t.registerBinding(t.container,"mouseout",function(S){var N=t.projectIntoViewport(S.clientX,S.clientY);t.cy.emit({originalEvent:S,type:"mouseout",position:{x:N[0],y:N[1]}})},!1),t.registerBinding(t.container,"mouseover",function(S){var N=t.projectIntoViewport(S.clientX,S.clientY);t.cy.emit({originalEvent:S,type:"mouseover",position:{x:N[0],y:N[1]}})},!1);var G,O,$,Y,te,J,re,ne,oe,ee,q,K,W,Q=function(S,N,U,j){return Math.sqrt((U-S)*(U-S)+(j-N)*(j-N))},ie=function(S,N,U,j){return(U-S)*(U-S)+(j-N)*(j-N)},ge;t.registerBinding(t.container,"touchstart",ge=function(S){if(t.hasTouchStarted=!0,!!T(S)){g(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var N=t.cy,U=t.touchData.now,j=t.touchData.earlier;if(S.touches[0]){var X=t.projectIntoViewport(S.touches[0].clientX,S.touches[0].clientY);U[0]=X[0],U[1]=X[1]}if(S.touches[1]){var X=t.projectIntoViewport(S.touches[1].clientX,S.touches[1].clientY);U[2]=X[0],U[3]=X[1]}if(S.touches[2]){var X=t.projectIntoViewport(S.touches[2].clientX,S.touches[2].clientY);U[4]=X[0],U[5]=X[1]}var ve=function(vt){return{originalEvent:S,type:vt,position:{x:U[0],y:U[1]}}};if(S.touches[1]){t.touchData.singleTouchMoved=!0,y(t.dragData.touchDragEles);var ae=t.findContainerClientCoords();oe=ae[0],ee=ae[1],q=ae[2],K=ae[3],G=S.touches[0].clientX-oe,O=S.touches[0].clientY-ee,$=S.touches[1].clientX-oe,Y=S.touches[1].clientY-ee,W=0<=G&&G<=q&&0<=$&&$<=q&&0<=O&&O<=K&&0<=Y&&Y<=K;var le=N.pan(),de=N.zoom();te=Q(G,O,$,Y),J=ie(G,O,$,Y),re=[(G+$)/2,(O+Y)/2],ne=[(re[0]-le.x)/de,(re[1]-le.y)/de];var we=200,ke=we*we;if(J=1){for(var qt=t.touchData.startPosition=[null,null,null,null,null,null],Je=0;Je=t.touchTapThreshold2}if(N&&t.touchData.cxt){S.preventDefault();var Je=S.touches[0].clientX-oe,tt=S.touches[0].clientY-ee,nt=S.touches[1].clientX-oe,vt=S.touches[1].clientY-ee,jt=ie(Je,tt,nt,vt),Xe=jt/J,ar=150,Vt=ar*ar,pr=1.5,dn=pr*pr;if(Xe>=dn||jt>=Vt){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var Or=de("cxttapend");t.touchData.start?(t.touchData.start.unactivate().emit(Or),t.touchData.start=null):j.emit(Or)}}if(N&&t.touchData.cxt){var Or=de("cxtdrag");t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(Or):j.emit(Or),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var Bt=t.findNearestElement(X[0],X[1],!0,!0);(!t.touchData.cxtOver||Bt!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit(de("cxtdragout")),t.touchData.cxtOver=Bt,Bt&&Bt.emit(de("cxtdragover")))}else if(N&&S.touches[2]&&j.boxSelectionEnabled())S.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||j.emit(de("boxstart")),t.touchData.selecting=!0,t.touchData.didSelect=!0,U[4]=1,!U||U.length===0||U[0]===void 0?(U[0]=(X[0]+X[2]+X[4])/3,U[1]=(X[1]+X[3]+X[5])/3,U[2]=(X[0]+X[2]+X[4])/3+1,U[3]=(X[1]+X[3]+X[5])/3+1):(U[2]=(X[0]+X[2]+X[4])/3,U[3]=(X[1]+X[3]+X[5])/3),t.redrawHint("select",!0),t.redraw();else if(N&&S.touches[1]&&!t.touchData.didSelect&&j.zoomingEnabled()&&j.panningEnabled()&&j.userZoomingEnabled()&&j.userPanningEnabled()){S.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var mt=t.dragData.touchDragEles;if(mt){t.redrawHint("drag",!0);for(var Dt=0;Dt0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},!1);var Te;t.registerBinding(e,"touchcancel",Te=function(S){var N=t.touchData.start;t.touchData.capture=!1,N&&N.unactivate()});var Ee,be,ce,ye;if(t.registerBinding(e,"touchend",Ee=function(S){var N=t.touchData.start,U=t.touchData.capture;if(U)S.touches.length===0&&(t.touchData.capture=!1),S.preventDefault();else return;var j=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var X=t.cy,ve=X.zoom(),ae=t.touchData.now,le=t.touchData.earlier;if(S.touches[0]){var de=t.projectIntoViewport(S.touches[0].clientX,S.touches[0].clientY);ae[0]=de[0],ae[1]=de[1]}if(S.touches[1]){var de=t.projectIntoViewport(S.touches[1].clientX,S.touches[1].clientY);ae[2]=de[0],ae[3]=de[1]}if(S.touches[2]){var de=t.projectIntoViewport(S.touches[2].clientX,S.touches[2].clientY);ae[4]=de[0],ae[5]=de[1]}var we=function(Vt){return{originalEvent:S,type:Vt,position:{x:ae[0],y:ae[1]}}};N&&N.unactivate();var ke;if(t.touchData.cxt){if(ke=we("cxttapend"),N?N.emit(ke):X.emit(ke),!t.touchData.cxtDragged){var Pe=we("cxttap");N?N.emit(Pe):X.emit(Pe)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!S.touches[2]&&X.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var he=X.collection(t.getAllInBox(j[0],j[1],j[2],j[3]));j[0]=void 0,j[1]=void 0,j[2]=void 0,j[3]=void 0,j[4]=0,t.redrawHint("select",!0),X.emit(we("boxend"));var Re=function(Vt){return Vt.selectable()&&!Vt.selected()};he.emit(we("box")).stdFilter(Re).select().emit(we("boxselect")),he.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(N?.unactivate(),S.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!S.touches[1]){if(!S.touches[0]){if(!S.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var _e=t.dragData.touchDragEles;if(N!=null){var ut=N._private.grabbed;y(_e),t.redrawHint("drag",!0),t.redrawHint("eles",!0),ut&&(N.emit(we("freeon")),_e.emit(we("free")),t.dragData.didDrag&&(N.emit(we("dragfreeon")),_e.emit(we("dragfree")))),n(N,["touchend","tapend","vmouseup","tapdragout"],S,{x:ae[0],y:ae[1]}),N.unactivate(),t.touchData.start=null}else{var Qe=t.findNearestElement(ae[0],ae[1],!0,!0);n(Qe,["touchend","tapend","vmouseup","tapdragout"],S,{x:ae[0],y:ae[1]})}var qt=t.touchData.startPosition[0]-ae[0],Je=qt*qt,tt=t.touchData.startPosition[1]-ae[1],nt=tt*tt,vt=Je+nt,jt=vt*ve*ve;t.touchData.singleTouchMoved||(N||X.$(":selected").unselect(["tapunselect"]),n(N,["tap","vclick"],S,{x:ae[0],y:ae[1]}),be=!1,S.timeStamp-ye<=X.multiClickDebounceTime()?(ce&&clearTimeout(ce),be=!0,ye=null,n(N,["dbltap","vdblclick"],S,{x:ae[0],y:ae[1]})):(ce=setTimeout(function(){be||n(N,["onetap","voneclick"],S,{x:ae[0],y:ae[1]})},X.multiClickDebounceTime()),ye=S.timeStamp)),N!=null&&!t.dragData.didDrag&&N._private.selectable&&jt"u"){var pe=[],Se=function(S){return{clientX:S.clientX,clientY:S.clientY,force:1,identifier:S.pointerId,pageX:S.pageX,pageY:S.pageY,radiusX:S.width/2,radiusY:S.height/2,screenX:S.screenX,screenY:S.screenY,target:S.target}},Ce=function(S){return{event:S,touch:Se(S)}},De=function(S){pe.push(Ce(S))},Le=function(S){for(var N=0;N0)return $[0]}return null},v=Object.keys(f),y=0;y0?h:_d(i,s,e,r,a,n,o,l)},checkPoint:function(e,r,a,n,i,s,o,l){l=l==="auto"?Pr(n,i):l;var u=2*l;if(dr(e,r,this.points,s,o,n,i-u,[0,-1],a)||dr(e,r,this.points,s,o,n-u,i,[0,-1],a))return!0;var c=n/2+2*a,d=i/2+2*a,f=[s-c,o-d,s-c,o,s+c,o,s+c,o-d];return!!(At(e,r,f)||Gr(e,r,u,u,s+n/2-l,o+i/2-l,a)||Gr(e,r,u,u,s-n/2+l,o+i/2-l,a))}}};vr.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",St(3,0)),this.generateRoundPolygon("round-triangle",St(3,0)),this.generatePolygon("rectangle",St(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",St(5,0)),this.generateRoundPolygon("round-pentagon",St(5,0)),this.generatePolygon("hexagon",St(6,0)),this.generateRoundPolygon("round-hexagon",St(6,0)),this.generatePolygon("heptagon",St(7,0)),this.generateRoundPolygon("round-heptagon",St(7,0)),this.generatePolygon("octagon",St(8,0)),this.generateRoundPolygon("round-octagon",St(8,0));var a=new Array(20);{var n=po(5,0),i=po(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var o=0;o=e.deqFastCost*w)break}else if(u){if(m>=e.deqCost*h||m>=e.deqAvgCost*f)break}else if(b>=e.deqNoDrawCost*Js)break;var E=e.deq(a,p,y);if(E.length>0)for(var C=0;C0&&(e.onDeqd(a,v),!u&&e.shouldRedraw(a,v,p,y)&&i())},o=e.priority||Xo;n.beforeRender(s,o(a))}}}},e0=(function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Wn;Ar(this,t),this.idsByKey=new or,this.keyForId=new or,this.cachesByLvl=new or,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return Lr(t,[{key:"getIdsFor",value:function(r){r==null&&Ye("Can not get id list for null key");var a=this.idsByKey,n=this.idsByKey.get(r);return n||(n=new ma,a.set(r,n)),n}},{key:"addIdForKey",value:function(r,a){r!=null&&this.getIdsFor(r).add(a)}},{key:"deleteIdForKey",value:function(r,a){r!=null&&this.getIdsFor(r).delete(a)}},{key:"getNumberOfIdsForKey",value:function(r){return r==null?0:this.getIdsFor(r).size}},{key:"updateKeyMappingFor",value:function(r){var a=r.id(),n=this.keyForId.get(a),i=this.getKey(r);this.deleteIdForKey(n,a),this.addIdForKey(i,a),this.keyForId.set(a,i)}},{key:"deleteKeyMappingFor",value:function(r){var a=r.id(),n=this.keyForId.get(a);this.deleteIdForKey(n,a),this.keyForId.delete(a)}},{key:"keyHasChangedFor",value:function(r){var a=r.id(),n=this.keyForId.get(a),i=this.getKey(r);return n!==i}},{key:"isInvalid",value:function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)}},{key:"getCachesAt",value:function(r){var a=this.cachesByLvl,n=this.lvls,i=a.get(r);return i||(i=new or,a.set(r,i),n.push(r)),i}},{key:"getCache",value:function(r,a){return this.getCachesAt(a).get(r)}},{key:"get",value:function(r,a){var n=this.getKey(r),i=this.getCache(n,a);return i!=null&&this.updateKeyMappingFor(r),i}},{key:"getForCachedKey",value:function(r,a){var n=this.keyForId.get(r.id()),i=this.getCache(n,a);return i}},{key:"hasCache",value:function(r,a){return this.getCachesAt(a).has(r)}},{key:"has",value:function(r,a){var n=this.getKey(r);return this.hasCache(n,a)}},{key:"setCache",value:function(r,a,n){n.key=r,this.getCachesAt(a).set(r,n)}},{key:"set",value:function(r,a,n){var i=this.getKey(r);this.setCache(i,a,n),this.updateKeyMappingFor(r)}},{key:"deleteCache",value:function(r,a){this.getCachesAt(a).delete(r)}},{key:"delete",value:function(r,a){var n=this.getKey(r);this.deleteCache(n,a)}},{key:"invalidateKey",value:function(r){var a=this;this.lvls.forEach(function(n){return a.deleteCache(r,n)})}},{key:"invalidate",value:function(r){var a=r.id(),n=this.keyForId.get(a);this.deleteKeyMappingFor(r);var i=this.doesEleInvalidateKey(r);return i&&this.invalidateKey(n),i||this.getNumberOfIdsForKey(n)===0}}])})(),qc=25,Tn=50,qn=-4,Do=3,Ff=7.99,t0=8,r0=1024,a0=1024,n0=1024,i0=.2,s0=.8,o0=10,l0=.15,u0=.1,c0=.9,d0=.9,f0=100,v0=1,ca={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},h0=gt({getKey:null,doesEleInvalidateKey:Wn,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Pd,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Na=function(e,r){var a=this;a.renderer=e,a.onDequeues=[];var n=h0(r);xe(a,n),a.lookup=new e0(n.getKey,n.doesEleInvalidateKey),a.setupDequeueing()},lt=Na.prototype;lt.reasons=ca;lt.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};lt.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},a=r[t]=r[t]||[];return a};lt.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new nn(function(r,a){return a.reqs-r.reqs});return e};lt.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};lt.getElement=function(t,e,r,a,n){var i=this,s=this.renderer,o=s.cy.zoom(),l=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!i.allowEdgeTxrCaching&&t.isEdge()||!i.allowParentTxrCaching&&t.isParent())return null;if(a==null&&(a=Math.ceil(Qo(o*r))),a=Ff||a>Do)return null;var u=Math.pow(2,a),c=e.h*u,d=e.w*u,f=s.eleTextBiggerThanMin(t,u);if(!this.isVisible(t,f))return null;var h=l.get(t,a);if(h&&h.invalidated&&(h.invalidated=!1,h.texture.invalidatedWidth-=h.width),h)return h;var v;if(c<=qc?v=qc:c<=Tn?v=Tn:v=Math.ceil(c/Tn)*Tn,c>n0||d>a0)return null;var y=i.getTextureQueue(v),p=y[y.length-2],g=function(){return i.recycleTexture(v,d)||i.addTexture(v,d)};p||(p=y[y.length-1]),p||(p=g()),p.width-p.usedWidtha;B--)k=i.getElement(t,e,r,B,ca.downscale);P()}else return i.queueElement(t,C.level-1),C;else{var D;if(!b&&!w&&!E)for(var R=a-1;R>=qn;R--){var A=l.get(t,R);if(A){D=A;break}}if(m(D))return i.queueElement(t,a),D;p.context.translate(p.usedWidth,0),p.context.scale(u,u),this.drawElement(p.context,t,e,f,!1),p.context.scale(1/u,1/u),p.context.translate(-p.usedWidth,0)}return h={x:p.usedWidth,texture:p,level:a,scale:u,width:d,height:c,scaledLabelShown:f},p.usedWidth+=Math.ceil(d+t0),p.eleCaches.push(h),l.set(t,a,h),i.checkTextureFullness(p),h};lt.invalidateElements=function(t){for(var e=0;e=i0*t.width&&this.retireTexture(t)};lt.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>s0&&t.fullnessChecks>=o0?kr(r,t):t.fullnessChecks++};lt.retireTexture=function(t){var e=this,r=t.height,a=e.getTextureQueue(r),n=this.lookup;kr(a,t),t.retired=!0;for(var i=t.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,Zo(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),kr(n,s),a.push(s),s}};lt.queueElement=function(t,e){var r=this,a=r.getElementQueue(),n=r.getElementKeyToQueue(),i=this.getKey(t),s=n[i];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,a.updateItem(s);else{var o={eles:t.spawn().merge(t),level:e,reqs:1,key:i};a.push(o),n[i]=o}};lt.dequeue=function(t){for(var e=this,r=e.getElementQueue(),a=e.getElementKeyToQueue(),n=[],i=e.lookup,s=0;s0;s++){var o=r.pop(),l=o.key,u=o.eles[0],c=i.hasCache(u,o.level);if(a[l]=null,c)continue;n.push(o);var d=e.getBoundingBox(u);e.getElement(u,d,t,o.level,ca.dequeue)}return n};lt.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),a=e.getElementKeyToQueue(),n=this.getKey(t),i=a[n];i!=null&&(i.eles.length===1?(i.reqs=Yo,r.updateItem(i),r.pop(),a[n]=null):i.eles.unmerge(t))};lt.onDequeue=function(t){this.onDequeues.push(t)};lt.offDequeue=function(t){kr(this.onDequeues,t)};lt.setupDequeueing=$f.setupDequeueing({deqRedrawThreshold:f0,deqCost:l0,deqAvgCost:u0,deqNoDrawCost:c0,deqFastCost:d0,deq:function(e,r,a){return e.dequeue(r,a)},onDeqd:function(e,r){for(var a=0;a=g0||r>ti)return null}a.validateLayersElesOrdering(r,t);var l=a.layersByLevel,u=Math.pow(2,r),c=l[r]=l[r]||[],d,f=a.levelIsComplete(r,t),h,v=function(){var P=function(M){if(a.validateLayersElesOrdering(M,t),a.levelIsComplete(M,t))return h=l[M],!0},B=function(M){if(!h)for(var _=r+M;$a<=_&&_<=ti&&!P(_);_+=M);};B(1),B(-1);for(var D=c.length-1;D>=0;D--){var R=c[D];R.invalid&&kr(c,R)}};if(!f)v();else return c;var y=function(){if(!d){d=kt();for(var P=0;PHc||R>Hc)return null;var A=D*R;if(A>T0)return null;var M=a.makeLayer(d,r);if(B!=null){var _=c.indexOf(B)+1;c.splice(_,0,M)}else(P.insert===void 0||P.insert)&&c.unshift(M);return M};if(a.skipping&&!o)return null;for(var g=null,m=t.length/p0,b=!o,w=0;w=m||!Md(g.bb,E.boundingBox()))&&(g=p({insert:!0,after:g}),!g))return null;h||b?a.queueLayer(g,E):a.drawEleInLayer(g,E,r,e),g.eles.push(E),x[r]=g}return h||(b?null:c)};yt.getEleLevelForLayerLevel=function(t,e){return t};yt.drawEleInLayer=function(t,e,r,a){var n=this,i=this.renderer,s=t.context,o=e.boundingBox();o.w===0||o.h===0||!e.visible()||(r=n.getEleLevelForLayerLevel(r,a),i.setImgSmoothing(s,!1),i.drawCachedElement(s,e,null,null,r,S0),i.setImgSmoothing(s,!0))};yt.levelIsComplete=function(t,e){var r=this,a=r.layersByLevel[t];if(!a||a.length===0)return!1;for(var n=0,i=0;i0||s.invalid)return!1;n+=s.eles.length}return n===e.length};yt.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var a=0;a0){e=!0;break}}return e};yt.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=cr(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,function(a,n,i){e.invalidateLayer(a)}))};yt.invalidateLayer=function(t){if(this.lastInvalidationTime=cr(),!t.invalid){var e=t.level,r=t.eles,a=this.layersByLevel[e];kr(a,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var n=0;n3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,o=e._private.rscratch;if(!(i&&!e.visible())&&!(o.badLine||o.allpts==null||isNaN(o.allpts[0]))){var l;r&&(l=r,t.translate(-l.x1,-l.y1));var u=i?e.pstyle("opacity").value:1,c=i?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,f=e.pstyle("line-style").value,h=e.pstyle("width").pfValue,v=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,p=e.pstyle("line-outline-color").value,g=u*c,m=u*c,b=function(){var M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:g;d==="straight-triangle"?(s.eleStrokeStyle(t,e,M),s.drawEdgeTrianglePath(e,t,o.allpts)):(t.lineWidth=h,t.lineCap=v,s.eleStrokeStyle(t,e,M),s.drawEdgePath(e,t,o.allpts,f),t.lineCap="butt")},w=function(){var M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:g;if(t.lineWidth=h+y,t.lineCap=v,y>0)s.colorStrokeStyle(t,p[0],p[1],p[2],M);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,o.allpts):(s.drawEdgePath(e,t,o.allpts,f),t.lineCap="butt")},E=function(){n&&s.drawEdgeOverlay(t,e)},C=function(){n&&s.drawEdgeUnderlay(t,e)},x=function(){var M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:m;s.drawArrowheads(t,e,M)},T=function(){s.drawElementText(t,e,null,a)};t.lineJoin="round";var k=e.pstyle("ghost").value==="yes";if(k){var P=e.pstyle("ghost-offset-x").pfValue,B=e.pstyle("ghost-offset-y").pfValue,D=e.pstyle("ghost-opacity").value,R=g*D;t.translate(P,B),b(R),x(R),t.translate(-P,-B)}else w();C(),b(),x(),E(),T(),r&&t.translate(l.x1,l.y1)}};var Hf=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,a){if(a.visible()){var n=a.pstyle("".concat(e,"-opacity")).value;if(n!==0){var i=this,s=i.usePaths(),o=a._private.rscratch,l=a.pstyle("".concat(e,"-padding")).pfValue,u=2*l,c=a.pstyle("".concat(e,"-color")).value;r.lineWidth=u,o.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",i.colorStrokeStyle(r,c[0],c[1],c[2],n),i.drawEdgePath(a,r,o.allpts,"solid")}}}};hr.drawEdgeOverlay=Hf("overlay");hr.drawEdgeUnderlay=Hf("underlay");hr.drawEdgePath=function(t,e,r,a){var n=t._private.rscratch,i=e,s,o=!1,l=this.usePaths(),u=t.pstyle("line-dash-pattern").pfValue,c=t.pstyle("line-dash-offset").pfValue;if(l){var d=r.join("$"),f=n.pathCacheKey&&n.pathCacheKey===d;f?(s=e=n.pathCache,o=!0):(s=e=new Path2D,n.pathCacheKey=d,n.pathCache=s)}if(i.setLineDash)switch(a){case"dotted":i.setLineDash([1,1]);break;case"dashed":i.setLineDash(u),i.lineDashOffset=c;break;case"solid":i.setLineDash([]);break}if(!o&&!n.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),n.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var h=2;h+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(a==null){if(i&&!s.eleTextBiggerThanMin(e))return}else if(a===!1)return;if(e.isNode()){var o=e.pstyle("label");if(!o||!o.value)return;var l=s.getLabelJustification(e);t.textAlign=l,t.textBaseline="bottom"}else{var u=e.element()._private.rscratch.badLine,c=e.pstyle("label"),d=e.pstyle("source-label"),f=e.pstyle("target-label");if(u||(!c||!c.value)&&(!d||!d.value)&&(!f||!f.value))return;t.textAlign="center",t.textBaseline="bottom"}var h=!r,v;r&&(v=r,t.translate(-v.x1,-v.y1)),n==null?(s.drawText(t,e,null,h,i),e.isEdge()&&(s.drawText(t,e,"source",h,i),s.drawText(t,e,"target",h,i))):s.drawText(t,e,n,h,i),r&&t.translate(v.x1,v.y1)};Qr.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,a=e.pstyle("font-style").strValue,n=e.pstyle("font-size").pfValue+"px",i=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,o=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,l=e.pstyle("text-outline-opacity").value*o,u=e.pstyle("color").value,c=e.pstyle("text-outline-color").value;t.font=a+" "+s+" "+n+" "+i,t.lineJoin="round",this.colorFillStyle(t,u[0],u[1],u[2],o),this.colorStrokeStyle(t,c[0],c[1],c[2],l)};function O0(t,e,r,a,n){var i=Math.min(a,n),s=i/2,o=e+a/2,l=r+n/2;t.beginPath(),t.arc(o,l,s,0,Math.PI*2),t.closePath()}function Wc(t,e,r,a,n){var i=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5,s=Math.min(i,a/2,n/2);t.beginPath(),t.moveTo(e+s,r),t.lineTo(e+a-s,r),t.quadraticCurveTo(e+a,r,e+a,r+s),t.lineTo(e+a,r+n-s),t.quadraticCurveTo(e+a,r+n,e+a-s,r+n),t.lineTo(e+s,r+n),t.quadraticCurveTo(e,r+n,e,r+n-s),t.lineTo(e,r+s),t.quadraticCurveTo(e,r,e+s,r),t.closePath()}Qr.getTextAngle=function(t,e){var r,a=t._private,n=a.rscratch,i=e?e+"-":"",s=t.pstyle(i+"text-rotation");if(s.strValue==="autorotate"){var o=Rt(n,"labelAngle",e);r=t.isEdge()?o:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};Qr.drawText=function(t,e,r){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=e._private,s=i.rscratch,o=n?e.effectiveOpacity():1;if(!(n&&(o===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var l=Rt(s,"labelX",r),u=Rt(s,"labelY",r),c,d,f=this.getLabelText(e,r);if(f!=null&&f!==""&&!isNaN(l)&&!isNaN(u)){this.setupTextStyle(t,e,n);var h=r?r+"-":"",v=Rt(s,"labelWidth",r),y=Rt(s,"labelHeight",r),p=e.pstyle(h+"text-margin-x").pfValue,g=e.pstyle(h+"text-margin-y").pfValue,m=e.isEdge(),b=e.pstyle("text-halign").value,w=e.pstyle("text-valign").value;m&&(b="center",w="center"),l+=p,u+=g;var E;switch(a?E=this.getTextAngle(e,r):E=0,E!==0&&(c=l,d=u,t.translate(c,d),t.rotate(E),l=0,u=0),w){case"top":break;case"center":u+=y/2;break;case"bottom":u+=y;break}var C=e.pstyle("text-background-opacity").value,x=e.pstyle("text-border-opacity").value,T=e.pstyle("text-border-width").pfValue,k=e.pstyle("text-background-padding").pfValue,P=e.pstyle("text-background-shape").strValue,B=P==="round-rectangle"||P==="roundrectangle",D=P==="circle",R=2;if(C>0||T>0&&x>0){var A=t.fillStyle,M=t.strokeStyle,_=t.lineWidth,L=e.pstyle("text-background-color").value,I=e.pstyle("text-border-color").value,H=e.pstyle("text-border-style").value,G=C>0,O=T>0&&x>0,$=l-k;switch(b){case"left":$-=v;break;case"center":$-=v/2;break}var Y=u-y-k,te=v+2*k,J=y+2*k;if(G&&(t.fillStyle="rgba(".concat(L[0],",").concat(L[1],",").concat(L[2],",").concat(C*o,")")),O&&(t.strokeStyle="rgba(".concat(I[0],",").concat(I[1],",").concat(I[2],",").concat(x*o,")"),t.lineWidth=T,t.setLineDash))switch(H){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=T/4,t.setLineDash([]);break;default:t.setLineDash([]);break}if(B?(t.beginPath(),Wc(t,$,Y,te,J,R)):D?(t.beginPath(),O0(t,$,Y,te,J)):(t.beginPath(),t.rect($,Y,te,J)),G&&t.fill(),O&&t.stroke(),O&&H==="double"){var re=T/2;t.beginPath(),B?Wc(t,$+re,Y+re,te-2*re,J-2*re,R):t.rect($+re,Y+re,te-2*re,J-2*re),t.stroke()}t.fillStyle=A,t.strokeStyle=M,t.lineWidth=_,t.setLineDash&&t.setLineDash([])}var ne=2*e.pstyle("text-outline-width").pfValue;if(ne>0&&(t.lineWidth=ne),e.pstyle("text-wrap").value==="wrap"){var oe=Rt(s,"labelWrapCachedLines",r),ee=Rt(s,"labelLineHeight",r),q=v/2,K=this.getLabelJustification(e);switch(K==="auto"||(b==="left"?K==="left"?l+=-v:K==="center"&&(l+=-q):b==="center"?K==="left"?l+=-q:K==="right"&&(l+=q):b==="right"&&(K==="center"?l+=q:K==="right"&&(l+=v))),w){case"top":u-=(oe.length-1)*ee;break;case"center":case"bottom":u-=(oe.length-1)*ee;break}for(var W=0;W0&&t.strokeText(oe[W],l,u),t.fillText(oe[W],l,u),u+=ee}else ne>0&&t.strokeText(f,l,u),t.fillText(f,l,u);E!==0&&(t.rotate(-E),t.translate(-c,-d))}}};var _r={};_r.drawNode=function(t,e,r){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,o,l,u=e._private,c=u.rscratch,d=e.position();if(!(!se(d.x)||!se(d.y))&&!(i&&!e.visible())){var f=i?e.effectiveOpacity():1,h=s.usePaths(),v,y=!1,p=e.padding();o=e.width()+2*p,l=e.height()+2*p;var g;r&&(g=r,t.translate(-g.x1,-g.y1));for(var m=e.pstyle("background-image"),b=m.value,w=new Array(b.length),E=new Array(b.length),C=0,x=0;x0&&arguments[0]!==void 0?arguments[0]:R;s.eleFillStyle(t,e,S)},ee=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:O;s.colorStrokeStyle(t,A[0],A[1],A[2],S)},q=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:J;s.colorStrokeStyle(t,Y[0],Y[1],Y[2],S)},K=function(S,N,U,j){var X=s.nodePathCache=s.nodePathCache||[],ve=kd(U==="polygon"?U+","+j.join(","):U,""+N,""+S,""+ne),ae=X[ve],le,de=!1;return ae!=null?(le=ae,de=!0,c.pathCache=le):(le=new Path2D,X[ve]=c.pathCache=le),{path:le,cacheHit:de}},W=e.pstyle("shape").strValue,Q=e.pstyle("shape-polygon-points").pfValue;if(h){t.translate(d.x,d.y);var ie=K(o,l,W,Q);v=ie.path,y=ie.cacheHit}var ge=function(){if(!y){var S=d;h&&(S={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(v||t,S.x,S.y,o,l,ne,c)}h?t.fill(v):t.fill()},Me=function(){for(var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:f,N=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,U=u.backgrounding,j=0,X=0;X0&&arguments[0]!==void 0?arguments[0]:!1,N=arguments.length>1&&arguments[1]!==void 0?arguments[1]:f;s.hasPie(e)&&(s.drawPie(t,e,N),S&&(h||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,o,l,ne,c)))},Ee=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,N=arguments.length>1&&arguments[1]!==void 0?arguments[1]:f;s.hasStripe(e)&&(t.save(),h?t.clip(c.pathCache):(s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,o,l,ne,c),t.clip()),s.drawStripe(t,e,N),t.restore(),S&&(h||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,o,l,ne,c)))},be=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:f,N=(B>0?B:-B)*S,U=B>0?0:255;B!==0&&(s.colorFillStyle(t,U,U,U,N),h?t.fill(v):t.fill())},ce=function(){if(D>0){if(t.lineWidth=D,t.lineCap=L,t.lineJoin=_,t.setLineDash)switch(M){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(H),t.lineDashOffset=G;break;case"solid":case"double":t.setLineDash([]);break}if(I!=="center"){if(t.save(),t.lineWidth*=2,I==="inside")h?t.clip(v):t.clip();else{var S=new Path2D;S.rect(-o/2-D,-l/2-D,o+2*D,l+2*D),S.addPath(v),t.clip(S,"evenodd")}h?t.stroke(v):t.stroke(),t.restore()}else h?t.stroke(v):t.stroke();if(M==="double"){t.lineWidth=D/3;var N=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",h?t.stroke(v):t.stroke(),t.globalCompositeOperation=N}t.setLineDash&&t.setLineDash([])}},ye=function(){if($>0){if(t.lineWidth=$,t.lineCap="butt",t.setLineDash)switch(te){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var S=d;h&&(S={x:0,y:0});var N=s.getNodeShape(e),U=D;I==="inside"&&(U=0),I==="outside"&&(U*=2);var j=(o+U+($+re))/o,X=(l+U+($+re))/l,ve=o*j,ae=l*X,le=s.nodeShapes[N].points,de;if(h){var we=K(ve,ae,N,le);de=we.path}if(N==="ellipse")s.drawEllipsePath(de||t,S.x,S.y,ve,ae);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(N)){var ke=0,Pe=0,he=0;N==="round-diamond"?ke=(U+re+$)*1.4:N==="round-heptagon"?(ke=(U+re+$)*1.075,he=-(U/2+re+$)/35):N==="round-hexagon"?ke=(U+re+$)*1.12:N==="round-pentagon"?(ke=(U+re+$)*1.13,he=-(U/2+re+$)/15):N==="round-tag"?(ke=(U+re+$)*1.12,Pe=(U/2+$+re)*.07):N==="round-triangle"&&(ke=(U+re+$)*(Math.PI/2),he=-(U+re/2+$)/Math.PI),ke!==0&&(j=(o+ke)/o,ve=o*j,["round-hexagon","round-tag"].includes(N)||(X=(l+ke)/l,ae=l*X)),ne=ne==="auto"?Od(ve,ae):ne;for(var Re=ve/2,_e=ae/2,ut=ne+(U+$+re)/2,Qe=new Array(le.length/2),qt=new Array(le.length/2),Je=0;Je0){if(n=n||a.position(),i==null||s==null){var h=a.padding();i=a.width()+2*h,s=a.height()+2*h}o.colorFillStyle(r,c[0],c[1],c[2],u),o.nodeShapes[d].draw(r,n.x,n.y,i+l*2,s+l*2,f),r.fill()}}}};_r.drawNodeOverlay=Gf("overlay");_r.drawNodeUnderlay=Gf("underlay");_r.hasPie=function(t){return t=t[0],t._private.hasPie};_r.hasStripe=function(t){return t=t[0],t._private.hasStripe};_r.drawPie=function(t,e,r,a){e=e[0],a=a||e.position();var n=e.cy().style(),i=e.pstyle("pie-size"),s=e.pstyle("pie-hole"),o=e.pstyle("pie-start-angle").pfValue,l=a.x,u=a.y,c=e.width(),d=e.height(),f=Math.min(c,d)/2,h,v=0,y=this.usePaths();if(y&&(l=0,u=0),i.units==="%"?f=f*i.pfValue:i.pfValue!==void 0&&(f=i.pfValue/2),s.units==="%"?h=f*s.pfValue:s.pfValue!==void 0&&(h=s.pfValue/2),!(h>=f))for(var p=1;p<=n.pieBackgroundN;p++){var g=e.pstyle("pie-"+p+"-background-size").value,m=e.pstyle("pie-"+p+"-background-color").value,b=e.pstyle("pie-"+p+"-background-opacity").value*r,w=g/100;w+v>1&&(w=1-v);var E=1.5*Math.PI+2*Math.PI*v;E+=o;var C=2*Math.PI*w,x=E+C;g===0||v>=1||v+w>1||(h===0?(t.beginPath(),t.moveTo(l,u),t.arc(l,u,f,E,x),t.closePath()):(t.beginPath(),t.arc(l,u,f,E,x),t.arc(l,u,h,x,E,!0),t.closePath()),this.colorFillStyle(t,m[0],m[1],m[2],b),t.fill(),v+=w)}};_r.drawStripe=function(t,e,r,a){e=e[0],a=a||e.position();var n=e.cy().style(),i=a.x,s=a.y,o=e.width(),l=e.height(),u=0,c=this.usePaths();t.save();var d=e.pstyle("stripe-direction").value,f=e.pstyle("stripe-size");switch(d){case"vertical":break;case"righward":t.rotate(-Math.PI/2);break}var h=o,v=l;f.units==="%"?(h=h*f.pfValue,v=v*f.pfValue):f.pfValue!==void 0&&(h=f.pfValue,v=f.pfValue),c&&(i=0,s=0),s-=h/2,i-=v/2;for(var y=1;y<=n.stripeBackgroundN;y++){var p=e.pstyle("stripe-"+y+"-background-size").value,g=e.pstyle("stripe-"+y+"-background-color").value,m=e.pstyle("stripe-"+y+"-background-opacity").value*r,b=p/100;b+u>1&&(b=1-u),!(p===0||u>=1||u+b>1)&&(t.beginPath(),t.rect(i,s+v*u,h,v*b),t.closePath(),this.colorFillStyle(t,g[0],g[1],g[2],m),t.fill(),u+=b)}t.restore()};var Pt={},N0=100;Pt.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};Pt.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,a,n=0;ne.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!d&&(c[e.NODE]=!0,c[e.SELECT_BOX]=!0);var m=r.style(),b=r.zoom(),w=s!==void 0?s:b,E=r.pan(),C={x:E.x,y:E.y},x={zoom:b,pan:{x:E.x,y:E.y}},T=e.prevViewport,k=T===void 0||x.zoom!==T.zoom||x.pan.x!==T.pan.x||x.pan.y!==T.pan.y;!k&&!(y&&!v)&&(e.motionBlurPxRatio=1),o&&(C=o),w*=l,C.x*=l,C.y*=l;var P=e.getCachedZSortedEles();function B(ee,q,K,W,Q){var ie=ee.globalCompositeOperation;ee.globalCompositeOperation="destination-out",e.colorFillStyle(ee,255,255,255,e.motionBlurTransparency),ee.fillRect(q,K,W,Q),ee.globalCompositeOperation=ie}function D(ee,q){var K,W,Q,ie;!e.clearingMotionBlur&&(ee===u.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||ee===u.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(K={x:E.x*h,y:E.y*h},W=b*h,Q=e.canvasWidth*h,ie=e.canvasHeight*h):(K=C,W=w,Q=e.canvasWidth,ie=e.canvasHeight),ee.setTransform(1,0,0,1,0,0),q==="motionBlur"?B(ee,0,0,Q,ie):!a&&(q===void 0||q)&&ee.clearRect(0,0,Q,ie),n||(ee.translate(K.x,K.y),ee.scale(W,W)),o&&ee.translate(o.x,o.y),s&&ee.scale(s,s)}if(d||(e.textureDrawLastFrame=!1),d){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=r.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var R=e.data.bufferContexts[e.TEXTURE_BUFFER];R.setTransform(1,0,0,1,0,0),R.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:R,drawOnlyNodeLayer:!0,forcedPxRatio:l*e.textureMult});var x=e.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:e.canvasWidth,height:e.canvasHeight};x.mpan={x:(0-x.pan.x)/x.zoom,y:(0-x.pan.y)/x.zoom}}c[e.DRAG]=!1,c[e.NODE]=!1;var A=u.contexts[e.NODE],M=e.textureCache.texture,x=e.textureCache.viewport;A.setTransform(1,0,0,1,0,0),f?B(A,0,0,x.width,x.height):A.clearRect(0,0,x.width,x.height);var _=m.core("outside-texture-bg-color").value,L=m.core("outside-texture-bg-opacity").value;e.colorFillStyle(A,_[0],_[1],_[2],L),A.fillRect(0,0,x.width,x.height);var b=r.zoom();D(A,!1),A.clearRect(x.mpan.x,x.mpan.y,x.width/x.zoom/l,x.height/x.zoom/l),A.drawImage(M,x.mpan.x,x.mpan.y,x.width/x.zoom/l,x.height/x.zoom/l)}else e.textureOnViewport&&!a&&(e.textureCache=null);var I=r.extent(),H=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),G=e.hideEdgesOnViewport&&H,O=[];if(O[e.NODE]=!c[e.NODE]&&f&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,O[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),O[e.DRAG]=!c[e.DRAG]&&f&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,O[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),c[e.NODE]||n||i||O[e.NODE]){var $=f&&!O[e.NODE]&&h!==1,A=a||($?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:u.contexts[e.NODE]),Y=f&&!$?"motionBlur":void 0;D(A,Y),G?e.drawCachedNodes(A,P.nondrag,l,I):e.drawLayeredElements(A,P.nondrag,l,I),e.debug&&e.drawDebugPoints(A,P.nondrag),!n&&!f&&(c[e.NODE]=!1)}if(!i&&(c[e.DRAG]||n||O[e.DRAG])){var $=f&&!O[e.DRAG]&&h!==1,A=a||($?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:u.contexts[e.DRAG]);D(A,f&&!$?"motionBlur":void 0),G?e.drawCachedNodes(A,P.drag,l,I):e.drawCachedElements(A,P.drag,l,I),e.debug&&e.drawDebugPoints(A,P.drag),!n&&!f&&(c[e.DRAG]=!1)}if(this.drawSelectionRectangle(t,D),f&&h!==1){var te=u.contexts[e.NODE],J=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],re=u.contexts[e.DRAG],ne=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],oe=function(q,K,W){q.setTransform(1,0,0,1,0,0),W||!g?q.clearRect(0,0,e.canvasWidth,e.canvasHeight):B(q,0,0,e.canvasWidth,e.canvasHeight);var Q=h;q.drawImage(K,0,0,e.canvasWidth*Q,e.canvasHeight*Q,0,0,e.canvasWidth,e.canvasHeight)};(c[e.NODE]||O[e.NODE])&&(oe(te,J,O[e.NODE]),c[e.NODE]=!1),(c[e.DRAG]||O[e.DRAG])&&(oe(re,ne,O[e.DRAG]),c[e.DRAG]=!1)}e.prevViewport=x,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),f&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!d,e.mbFrames=0,c[e.NODE]=!0,c[e.DRAG]=!0,e.redraw()},N0)),a||r.emit("render")};var La;Pt.drawSelectionRectangle=function(t,e){var r=this,a=r.cy,n=r.data,i=a.style(),s=t.drawOnlyNodeLayer,o=t.drawAllLayers,l=n.canvasNeedsRedraw,u=t.forcedContext;if(r.showFps||!s&&l[r.SELECT_BOX]&&!o){var c=u||n.contexts[r.SELECT_BOX];if(e(c),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var d=r.cy.zoom(),f=i.core("selection-box-border-width").value/d;c.lineWidth=f,c.fillStyle="rgba("+i.core("selection-box-color").value[0]+","+i.core("selection-box-color").value[1]+","+i.core("selection-box-color").value[2]+","+i.core("selection-box-opacity").value+")",c.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),f>0&&(c.strokeStyle="rgba("+i.core("selection-box-border-color").value[0]+","+i.core("selection-box-border-color").value[1]+","+i.core("selection-box-border-color").value[2]+","+i.core("selection-box-opacity").value+")",c.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(n.bgActivePosistion&&!r.hoverData.selecting){var d=r.cy.zoom(),h=n.bgActivePosistion;c.fillStyle="rgba("+i.core("active-bg-color").value[0]+","+i.core("active-bg-color").value[1]+","+i.core("active-bg-color").value[2]+","+i.core("active-bg-opacity").value+")",c.beginPath(),c.arc(h.x,h.y,i.core("active-bg-size").pfValue/d,0,2*Math.PI),c.fill()}var v=r.lastRedrawTime;if(r.showFps&&v){v=Math.round(v);var y=Math.round(1e3/v),p="1 frame = "+v+" ms = "+y+" fps";if(c.setTransform(1,0,0,1,0,0),c.fillStyle="rgba(255, 0, 0, 0.75)",c.strokeStyle="rgba(255, 0, 0, 0.75)",c.font="30px Arial",!La){var g=c.measureText(p);La=g.actualBoundingBoxAscent}c.fillText(p,0,La);var m=60;c.strokeRect(0,La+10,250,20),c.fillRect(0,La+10,250*Math.min(y/m,1),20)}o||(l[r.SELECT_BOX]=!1)}};function jc(t,e,r){var a=t.createShader(e);if(t.shaderSource(a,r),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(a));return a}function z0(t,e,r){var a=jc(t,t.VERTEX_SHADER,e),n=jc(t,t.FRAGMENT_SHADER,r),i=t.createProgram();if(t.attachShader(i,a),t.attachShader(i,n),t.linkProgram(i),!t.getProgramParameter(i,t.LINK_STATUS))throw new Error("Could not initialize shaders");return i}function $0(t,e,r){r===void 0&&(r=e);var a=t.makeOffscreenCanvas(e,r),n=a.context=a.getContext("2d");return a.clear=function(){return n.clearRect(0,0,a.width,a.height)},a.clear(),a}function pl(t){var e=t.pixelRatio,r=t.cy.zoom(),a=t.cy.pan();return{zoom:r*e,pan:{x:a.x*e,y:a.y*e}}}function F0(t){var e=t.pixelRatio,r=t.cy.zoom();return r*e}function q0(t,e,r,a,n){var i=a*r+e.x,s=n*r+e.y;return s=Math.round(t.canvasHeight-s),[i,s]}function V0(t,e){return e.picking?!0:t.pstyle("background-fill").value!=="solid"||t.pstyle("background-image").strValue!=="none"?!1:t.pstyle("border-width").value===0||t.pstyle("border-opacity").value===0?!0:t.pstyle("border-style").value==="solid"}function H0(t,e){if(t.length!==e.length)return!1;for(var r=0;r>0&255)/255,r[1]=(t>>8&255)/255,r[2]=(t>>16&255)/255,r[3]=(t>>24&255)/255,r}function G0(t){return t[0]+(t[1]<<8)+(t[2]<<16)+(t[3]<<24)}function U0(t,e){var r=t.createTexture();return r.buffer=function(a){t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_NEAREST),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,a),t.generateMipmap(t.TEXTURE_2D),t.bindTexture(t.TEXTURE_2D,null)},r.deleteTexture=function(){t.deleteTexture(r)},r}function Uf(t,e){switch(e){case"float":return[1,t.FLOAT,4];case"vec2":return[2,t.FLOAT,4];case"vec3":return[3,t.FLOAT,4];case"vec4":return[4,t.FLOAT,4];case"int":return[1,t.INT,4];case"ivec2":return[2,t.INT,4]}}function Kf(t,e,r){switch(e){case t.FLOAT:return new Float32Array(r);case t.INT:return new Int32Array(r)}}function K0(t,e,r,a,n,i){switch(e){case t.FLOAT:return new Float32Array(r.buffer,i*a,n);case t.INT:return new Int32Array(r.buffer,i*a,n)}}function W0(t,e,r,a){var n=Uf(t,e),i=at(n,2),s=i[0],o=i[1],l=Kf(t,o,a),u=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,u),t.bufferData(t.ARRAY_BUFFER,l,t.STATIC_DRAW),o===t.FLOAT?t.vertexAttribPointer(r,s,o,!1,0,0):o===t.INT&&t.vertexAttribIPointer(r,s,o,0,0),t.enableVertexAttribArray(r),t.bindBuffer(t.ARRAY_BUFFER,null),u}function Xt(t,e,r,a){var n=Uf(t,r),i=at(n,3),s=i[0],o=i[1],l=i[2],u=Kf(t,o,e*s),c=s*l,d=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,d),t.bufferData(t.ARRAY_BUFFER,e*c,t.DYNAMIC_DRAW),t.enableVertexAttribArray(a),o===t.FLOAT?t.vertexAttribPointer(a,s,o,!1,c,0):o===t.INT&&t.vertexAttribIPointer(a,s,o,c,0),t.vertexAttribDivisor(a,1),t.bindBuffer(t.ARRAY_BUFFER,null);for(var f=new Array(e),h=0;hs&&(o=s/a,l=a*o,u=n*o),{scale:o,texW:l,texH:u}}},{key:"draw",value:function(r,a,n){var i=this;if(this.locked)throw new Error("can't draw, atlas is locked");var s=this.texSize,o=this.texRows,l=this.texHeight,u=this.getScale(a),c=u.scale,d=u.texW,f=u.texH,h=function(b,w){if(n&&w){var E=w.context,C=b.x,x=b.row,T=C,k=l*x;E.save(),E.translate(T,k),E.scale(c,c),n(E,a),E.restore()}},v=[null,null],y=function(){h(i.freePointer,i.canvas),v[0]={x:i.freePointer.x,y:i.freePointer.row*l,w:d,h:f},v[1]={x:i.freePointer.x+d,y:i.freePointer.row*l,w:0,h:f},i.freePointer.x+=d,i.freePointer.x==s&&(i.freePointer.x=0,i.freePointer.row++)},p=function(){var b=i.scratch,w=i.canvas;b.clear(),h({x:0,row:0},b);var E=s-i.freePointer.x,C=d-E,x=l;{var T=i.freePointer.x,k=i.freePointer.row*l,P=E;w.context.drawImage(b,0,0,P,x,T,k,P,x),v[0]={x:T,y:k,w:P,h:f}}{var B=E,D=(i.freePointer.row+1)*l,R=C;w&&w.context.drawImage(b,B,0,R,x,0,D,R,x),v[1]={x:0,y:D,w:R,h:f}}i.freePointer.x=C,i.freePointer.row++},g=function(){i.freePointer.x=0,i.freePointer.row++};if(this.freePointer.x+d<=s)y();else{if(this.freePointer.row>=o-1)return!1;this.freePointer.x===s?(g(),y()):this.enableWrapping?p():(g(),y())}return this.keyToLocation.set(r,v),this.needsBuffer=!0,v}},{key:"getOffsets",value:function(r){return this.keyToLocation.get(r)}},{key:"isEmpty",value:function(){return this.freePointer.x===0&&this.freePointer.row===0}},{key:"canFit",value:function(r){if(this.locked)return!1;var a=this.texSize,n=this.texRows,i=this.getScale(r),s=i.texW;return this.freePointer.x+s>a?this.freePointer.row1&&arguments[1]!==void 0?arguments[1]:{},i=n.forceRedraw,s=i===void 0?!1:i,o=n.filterEle,l=o===void 0?function(){return!0}:o,u=n.filterType,c=u===void 0?function(){return!0}:u,d=!1,f=!1,h=Lt(r),v;try{for(h.s();!(v=h.n()).done;){var y=v.value;if(l(y)){var p=Lt(this.renderTypes.values()),g;try{var m=function(){var w=g.value,E=w.type;if(c(E)){var C=a.collections.get(w.collection),x=w.getKey(y),T=Array.isArray(x)?x:[x];if(s)T.forEach(function(D){return C.markKeyForGC(D)}),f=!0;else{var k=w.getID?w.getID(y):y.id(),P=a._key(E,k),B=a.typeAndIdToKey.get(P);B!==void 0&&!H0(T,B)&&(d=!0,a.typeAndIdToKey.delete(P),B.forEach(function(D){return C.markKeyForGC(D)}))}}};for(p.s();!(g=p.n()).done;)m()}catch(b){p.e(b)}finally{p.f()}}}}catch(b){h.e(b)}finally{h.f()}return f&&(this.gc(),d=!1),d}},{key:"gc",value:function(){var r=Lt(this.collections.values()),a;try{for(r.s();!(a=r.n()).done;){var n=a.value;n.gc()}}catch(i){r.e(i)}finally{r.f()}}},{key:"getOrCreateAtlas",value:function(r,a,n,i){var s=this.renderTypes.get(a),o=this.collections.get(s.collection),l=!1,u=o.draw(i,n,function(f){s.drawClipped?(f.save(),f.beginPath(),f.rect(0,0,n.w,n.h),f.clip(),s.drawElement(f,r,n,!0,!0),f.restore()):s.drawElement(f,r,n,!0,!0),l=!0});if(l){var c=s.getID?s.getID(r):r.id(),d=this._key(a,c);this.typeAndIdToKey.has(d)?this.typeAndIdToKey.get(d).push(i):this.typeAndIdToKey.set(d,[i])}return u}},{key:"getAtlasInfo",value:function(r,a){var n=this,i=this.renderTypes.get(a),s=i.getKey(r),o=Array.isArray(s)?s:[s];return o.map(function(l){var u=i.getBoundingBox(r,l),c=n.getOrCreateAtlas(r,a,u,l),d=c.getOffsets(l),f=at(d,2),h=f[0],v=f[1];return{atlas:c,tex:h,tex1:h,tex2:v,bb:u}})}},{key:"getDebugInfo",value:function(){var r=[],a=Lt(this.collections),n;try{for(a.s();!(n=a.n()).done;){var i=at(n.value,2),s=i[0],o=i[1],l=o.getCounts(),u=l.keyCount,c=l.atlasCount;r.push({type:s,keyCount:u,atlasCount:c})}}catch(d){a.e(d)}finally{a.f()}return r}}])})(),rb=(function(){function t(e){Ar(this,t),this.globalOptions=e,this.atlasSize=e.webglTexSize,this.maxAtlasesPerBatch=e.webglTexPerBatch,this.batchAtlases=[]}return Lr(t,[{key:"getMaxAtlasesPerBatch",value:function(){return this.maxAtlasesPerBatch}},{key:"getAtlasSize",value:function(){return this.atlasSize}},{key:"getIndexArray",value:function(){return Array.from({length:this.maxAtlasesPerBatch},function(r,a){return a})}},{key:"startBatch",value:function(){this.batchAtlases=[]}},{key:"getAtlasCount",value:function(){return this.batchAtlases.length}},{key:"getAtlases",value:function(){return this.batchAtlases}},{key:"canAddToCurrentBatch",value:function(r){return this.batchAtlases.length===this.maxAtlasesPerBatch?this.batchAtlases.includes(r):!0}},{key:"getAtlasIndexForBatch",value:function(r){var a=this.batchAtlases.indexOf(r);if(a<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)throw new Error("cannot add more atlases to batch");this.batchAtlases.push(r),a=this.batchAtlases.length-1}return a}}])})(),ab=` float circleSD(vec2 p, float r) { return distance(vec2(0), p) - r; // signed distance } `,nb=` float rectangleSD(vec2 p, vec2 b) { vec2 d = abs(p)-b; return distance(vec2(0),max(d,0.0)) + min(max(d.x,d.y),0.0); } `,ib=` float roundRectangleSD(vec2 p, vec2 b, vec4 cr) { cr.xy = (p.x > 0.0) ? cr.xy : cr.zw; cr.x = (p.y > 0.0) ? cr.x : cr.y; vec2 q = abs(p) - b + cr.x; return min(max(q.x, q.y), 0.0) + distance(vec2(0), max(q, 0.0)) - cr.x; } `,sb=` float ellipseSD(vec2 p, vec2 ab) { p = abs( p ); // symmetry // find root with Newton solver vec2 q = ab*(p-ab); float w = (q.x1.0) ? d : -d; } `,Fa={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},ri={IGNORE:1,USE_BB:2},ro=0,Qc=1,Jc=2,ao=3,ia=4,Sn=5,Ma=6,_a=7,ob=(function(){function t(e,r,a){Ar(this,t),this.r=e,this.gl=r,this.maxInstances=a.webglBatchSize,this.atlasSize=a.webglTexSize,this.bgColor=a.bgColor,this.debug=a.webglDebug,this.batchDebugInfo=[],a.enableWrapping=!0,a.createTextureCanvas=$0,this.atlasManager=new tb(e,a),this.batchManager=new rb(a),this.simpleShapeOptions=new Map,this.program=this._createShaderProgram(Fa.SCREEN),this.pickingProgram=this._createShaderProgram(Fa.PICKING),this.vao=this._createVAO()}return Lr(t,[{key:"addAtlasCollection",value:function(r,a){this.atlasManager.addAtlasCollection(r,a)}},{key:"addTextureAtlasRenderType",value:function(r,a){this.atlasManager.addRenderType(r,a)}},{key:"addSimpleShapeRenderType",value:function(r,a){this.simpleShapeOptions.set(r,a)}},{key:"invalidate",value:function(r){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=a.type,i=this.atlasManager;return n?i.invalidate(r,{filterType:function(o){return o===n},forceRedraw:!0}):i.invalidate(r)}},{key:"gc",value:function(){this.atlasManager.gc()}},{key:"_createShaderProgram",value:function(r){var a=this.gl,n=`#version 300 es precision highp float; uniform mat3 uPanZoomMatrix; uniform int uAtlasSize; // instanced in vec2 aPosition; // a vertex from the unit square in mat3 aTransform; // used to transform verticies, eg into a bounding box in int aVertType; // the type of thing we are rendering // the z-index that is output when using picking mode in vec4 aIndex; // For textures in int aAtlasId; // which shader unit/atlas to use in vec4 aTex; // x/y/w/h of texture in atlas // for edges in vec4 aPointAPointB; in vec4 aPointCPointD; in vec2 aLineWidth; // also used for node border width // simple shapes in vec4 aCornerRadius; // for round-rectangle [top-right, bottom-right, top-left, bottom-left] in vec4 aColor; // also used for edges in vec4 aBorderColor; // aLineWidth is used for border width // output values passed to the fragment shader out vec2 vTexCoord; out vec4 vColor; out vec2 vPosition; // flat values are not interpolated flat out int vAtlasId; flat out int vVertType; flat out vec2 vTopRight; flat out vec2 vBotLeft; flat out vec4 vCornerRadius; flat out vec4 vBorderColor; flat out vec2 vBorderWidth; flat out vec4 vIndex; void main(void) { int vid = gl_VertexID; vec2 position = aPosition; // TODO make this a vec3, simplifies some code below if(aVertType == `.concat(ro,`) { float texX = aTex.x; // texture coordinates float texY = aTex.y; float texW = aTex.z; float texH = aTex.w; if(vid == 1 || vid == 2 || vid == 4) { texX += texW; } if(vid == 2 || vid == 4 || vid == 5) { texY += texH; } float d = float(uAtlasSize); vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1 gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); } else if(aVertType == `).concat(ia," || aVertType == ").concat(_a,` || aVertType == `).concat(Sn," || aVertType == ").concat(Ma,`) { // simple shapes // the bounding box is needed by the fragment shader vBotLeft = (aTransform * vec3(0, 0, 1)).xy; // flat vTopRight = (aTransform * vec3(1, 1, 1)).xy; // flat vPosition = (aTransform * vec3(position, 1)).xy; // will be interpolated // calculations are done in the fragment shader, just pass these along vColor = aColor; vCornerRadius = aCornerRadius; vBorderColor = aBorderColor; vBorderWidth = aLineWidth; gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); } else if(aVertType == `).concat(Qc,`) { vec2 source = aPointAPointB.xy; vec2 target = aPointAPointB.zw; // adjust the geometry so that the line is centered on the edge position.y = position.y - 0.5; // stretch the unit square into a long skinny rectangle vec2 xBasis = target - source; vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x)); vec2 point = source + xBasis * position.x + yBasis * aLineWidth[0] * position.y; gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0); vColor = aColor; } else if(aVertType == `).concat(Jc,`) { vec2 pointA = aPointAPointB.xy; vec2 pointB = aPointAPointB.zw; vec2 pointC = aPointCPointD.xy; vec2 pointD = aPointCPointD.zw; // adjust the geometry so that the line is centered on the edge position.y = position.y - 0.5; vec2 p0, p1, p2, pos; if(position.x == 0.0) { // The left side of the unit square p0 = pointA; p1 = pointB; p2 = pointC; pos = position; } else { // The right side of the unit square, use same approach but flip the geometry upside down p0 = pointD; p1 = pointC; p2 = pointB; pos = vec2(0.0, -position.y); } vec2 p01 = p1 - p0; vec2 p12 = p2 - p1; vec2 p21 = p1 - p2; // Find the normal vector. vec2 tangent = normalize(normalize(p12) + normalize(p01)); vec2 normal = vec2(-tangent.y, tangent.x); // Find the vector perpendicular to p0 -> p1. vec2 p01Norm = normalize(vec2(-p01.y, p01.x)); // Determine the bend direction. float sigma = sign(dot(p01 + p21, normal)); float width = aLineWidth[0]; if(sign(pos.y) == -sigma) { // This is an intersecting vertex. Adjust the position so that there's no overlap. vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm); gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0); } else { // This is a non-intersecting vertex. Treat it like a mitre join. vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm); gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0); } vColor = aColor; } else if(aVertType == `).concat(ao,` && vid < 3) { // massage the first triangle into an edge arrow if(vid == 0) position = vec2(-0.15, -0.3); if(vid == 1) position = vec2( 0.0, 0.0); if(vid == 2) position = vec2( 0.15, -0.3); gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); vColor = aColor; } else { gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space } vAtlasId = aAtlasId; vVertType = aVertType; vIndex = aIndex; } `),i=this.batchManager.getIndexArray(),s=`#version 300 es precision highp float; // declare texture unit for each texture atlas in the batch `.concat(i.map(function(u){return"uniform sampler2D uTexture".concat(u,";")}).join(` `),` uniform vec4 uBGColor; uniform float uZoom; in vec2 vTexCoord; in vec4 vColor; in vec2 vPosition; // model coordinates flat in int vAtlasId; flat in vec4 vIndex; flat in int vVertType; flat in vec2 vTopRight; flat in vec2 vBotLeft; flat in vec4 vCornerRadius; flat in vec4 vBorderColor; flat in vec2 vBorderWidth; out vec4 outColor; `).concat(ab,` `).concat(nb,` `).concat(ib,` `).concat(sb,` vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha return vec4( top.rgb + (bot.rgb * (1.0 - top.a)), top.a + (bot.a * (1.0 - top.a)) ); } vec4 distInterp(vec4 cA, vec4 cB, float d) { // interpolate color using Signed Distance // scale to the zoom level so that borders don't look blurry when zoomed in // note 1.5 is an aribitrary value chosen because it looks good return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d))); } void main(void) { if(vVertType == `).concat(ro,`) { // look up the texel from the texture unit `).concat(i.map(function(u){return"if(vAtlasId == ".concat(u,") outColor = texture(uTexture").concat(u,", vTexCoord);")}).join(` else `),` } else if(vVertType == `).concat(ao,`) { // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out'; outColor = blend(vColor, uBGColor); outColor.a = 1.0; // make opaque, masks out line under arrow } else if(vVertType == `).concat(ia,` && vBorderWidth == vec2(0.0)) { // simple rectangle with no border outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done } else if(vVertType == `).concat(ia," || vVertType == ").concat(_a,` || vVertType == `).concat(Sn," || vVertType == ").concat(Ma,`) { // use SDF float outerBorder = vBorderWidth[0]; float innerBorder = vBorderWidth[1]; float borderPadding = outerBorder * 2.0; float w = vTopRight.x - vBotLeft.x - borderPadding; float h = vTopRight.y - vBotLeft.y - borderPadding; vec2 b = vec2(w/2.0, h/2.0); // half width, half height vec2 p = vPosition - vec2(vTopRight.x - b[0] - outerBorder, vTopRight.y - b[1] - outerBorder); // translate to center float d; // signed distance if(vVertType == `).concat(ia,`) { d = rectangleSD(p, b); } else if(vVertType == `).concat(_a,` && w == h) { d = circleSD(p, b.x); // faster than ellipse } else if(vVertType == `).concat(_a,`) { d = ellipseSD(p, b); } else { d = roundRectangleSD(p, b, vCornerRadius.wzyx); } // use the distance to interpolate a color to smooth the edges of the shape, doesn't need multisampling // we must smooth colors inwards, because we can't change pixels outside the shape's bounding box if(d > 0.0) { if(d > outerBorder) { discard; } else { outColor = distInterp(vBorderColor, vec4(0), d - outerBorder); } } else { if(d > innerBorder) { vec4 outerColor = outerBorder == 0.0 ? vec4(0) : vBorderColor; vec4 innerBorderColor = blend(vBorderColor, vColor); outColor = distInterp(innerBorderColor, outerColor, d); } else { vec4 outerColor; if(innerBorder == 0.0 && outerBorder == 0.0) { outerColor = vec4(0); } else if(innerBorder == 0.0) { outerColor = vBorderColor; } else { outerColor = blend(vBorderColor, vColor); } outColor = distInterp(vColor, outerColor, d - innerBorder); } } } else { outColor = vColor; } `).concat(r.picking?`if(outColor.a == 0.0) discard; else outColor = vIndex;`:"",` } `),o=z0(a,n,s);o.aPosition=a.getAttribLocation(o,"aPosition"),o.aIndex=a.getAttribLocation(o,"aIndex"),o.aVertType=a.getAttribLocation(o,"aVertType"),o.aTransform=a.getAttribLocation(o,"aTransform"),o.aAtlasId=a.getAttribLocation(o,"aAtlasId"),o.aTex=a.getAttribLocation(o,"aTex"),o.aPointAPointB=a.getAttribLocation(o,"aPointAPointB"),o.aPointCPointD=a.getAttribLocation(o,"aPointCPointD"),o.aLineWidth=a.getAttribLocation(o,"aLineWidth"),o.aColor=a.getAttribLocation(o,"aColor"),o.aCornerRadius=a.getAttribLocation(o,"aCornerRadius"),o.aBorderColor=a.getAttribLocation(o,"aBorderColor"),o.uPanZoomMatrix=a.getUniformLocation(o,"uPanZoomMatrix"),o.uAtlasSize=a.getUniformLocation(o,"uAtlasSize"),o.uBGColor=a.getUniformLocation(o,"uBGColor"),o.uZoom=a.getUniformLocation(o,"uZoom"),o.uTextures=[];for(var l=0;l1&&arguments[1]!==void 0?arguments[1]:Fa.SCREEN;this.panZoomMatrix=r,this.renderTarget=a,this.batchDebugInfo=[],this.wrappedCount=0,this.simpleCount=0,this.startBatch()}},{key:"startBatch",value:function(){this.instanceCount=0,this.batchManager.startBatch()}},{key:"endFrame",value:function(){this.endBatch()}},{key:"_isVisible",value:function(r,a){return r.visible()?a&&a.isVisible?a.isVisible(r):!0:!1}},{key:"drawTexture",value:function(r,a,n){var i=this.atlasManager,s=this.batchManager,o=i.getRenderTypeOpts(n);if(this._isVisible(r,o)&&!(r.isEdge()&&!this._isValidEdge(r))){if(this.renderTarget.picking&&o.getTexPickingMode){var l=o.getTexPickingMode(r);if(l===ri.IGNORE)return;if(l==ri.USE_BB){this.drawPickingRectangle(r,a,n);return}}var u=i.getAtlasInfo(r,n),c=Lt(u),d;try{for(c.s();!(d=c.n()).done;){var f=d.value,h=f.atlas,v=f.tex1,y=f.tex2;s.canAddToCurrentBatch(h)||this.endBatch();for(var p=s.getAtlasIndexForBatch(h),g=0,m=[[v,!0],[y,!1]];g=this.maxInstances&&this.endBatch()}}}}catch(B){c.e(B)}finally{c.f()}}}},{key:"setTransformMatrix",value:function(r,a,n,i){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,o=0;if(n.shapeProps&&n.shapeProps.padding&&(o=r.pstyle(n.shapeProps.padding).pfValue),i){var l=i.bb,u=i.tex1,c=i.tex2,d=u.w/(u.w+c.w);s||(d=1-d);var f=this._getAdjustedBB(l,o,s,d);this._applyTransformMatrix(a,f,n,r)}else{var h=n.getBoundingBox(r),v=this._getAdjustedBB(h,o,!0,1);this._applyTransformMatrix(a,v,n,r)}}},{key:"_applyTransformMatrix",value:function(r,a,n,i){var s,o;Xc(r);var l=n.getRotation?n.getRotation(i):0;if(l!==0){var u=n.getRotationPoint(i),c=u.x,d=u.y;Vn(r,r,[c,d]),Zc(r,r,l);var f=n.getRotationOffset(i);s=f.x+(a.xOffset||0),o=f.y+(a.yOffset||0)}else s=a.x1,o=a.y1;Vn(r,r,[s,o]),Ro(r,r,[a.w,a.h])}},{key:"_getAdjustedBB",value:function(r,a,n,i){var s=r.x1,o=r.y1,l=r.w,u=r.h,c=r.yOffset;a&&(s-=a,o-=a,l+=2*a,u+=2*a);var d=0,f=l*i;return n&&i<1?l=f:!n&&i<1&&(d=l-f,s+=d,l=f),{x1:s,y1:o,w:l,h:u,xOffset:d,yOffset:c}}},{key:"drawPickingRectangle",value:function(r,a,n){var i=this.atlasManager.getRenderTypeOpts(n),s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=ia;var o=this.indexBuffer.getView(s);na(a,o);var l=this.colorBuffer.getView(s);zr([0,0,0],1,l);var u=this.transformBuffer.getMatrixView(s);this.setTransformMatrix(r,u,i),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},{key:"drawNode",value:function(r,a,n){var i=this.simpleShapeOptions.get(n);if(this._isVisible(r,i)){var s=i.shapeProps,o=this._getVertTypeForShape(r,s.shape);if(o===void 0||i.isSimple&&!i.isSimple(r,this.renderTarget)){this.drawTexture(r,a,n);return}var l=this.instanceCount;if(this.vertTypeBuffer.getView(l)[0]=o,o===Sn||o===Ma){var u=i.getBoundingBox(r),c=this._getCornerRadius(r,s.radius,u),d=this.cornerRadiusBuffer.getView(l);d[0]=c,d[1]=c,d[2]=c,d[3]=c,o===Ma&&(d[0]=0,d[2]=0)}var f=this.indexBuffer.getView(l);na(a,f);var h=this.renderTarget.picking?1:n==="node-body"?r.effectiveOpacity():1,v=this.renderTarget.picking?1:r.pstyle(s.opacity).value*h,y=r.pstyle(s.color).value,p=this.colorBuffer.getView(l);zr(y,v,p);var g=this.lineWidthBuffer.getView(l);if(g[0]=0,g[1]=0,s.border){var m=r.pstyle("border-width").value;if(m>0){var b=r.pstyle("border-color").value,w=h*r.pstyle("border-opacity").value,E=this.borderColorBuffer.getView(l);zr(b,w,E);var C=r.pstyle("border-position").value;if(C==="inside")g[0]=0,g[1]=-m;else if(C==="outside")g[0]=m,g[1]=0;else{var x=m/2;g[0]=x,g[1]=-x}}}var T=this.transformBuffer.getMatrixView(l);this.setTransformMatrix(r,T,i),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}},{key:"_getVertTypeForShape",value:function(r,a){var n=r.pstyle(a).value;switch(n){case"rectangle":return ia;case"ellipse":return _a;case"roundrectangle":case"round-rectangle":return Sn;case"bottom-round-rectangle":return Ma;default:return}}},{key:"_getCornerRadius",value:function(r,a,n){var i=n.w,s=n.h;if(r.pstyle(a).value==="auto")return Pr(i,s);var o=r.pstyle(a).pfValue,l=i/2,u=s/2;return Math.min(o,u,l)}},{key:"drawEdgeArrow",value:function(r,a,n){if(r.visible()){var i=r._private.rscratch,s,o,l;if(n==="source"?(s=i.arrowStartX,o=i.arrowStartY,l=i.srcArrowAngle):(s=i.arrowEndX,o=i.arrowEndY,l=i.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(o)||o==null||isNaN(l)||l==null)){var u=r.pstyle(n+"-arrow-shape").value;if(u!=="none"){var c=r.pstyle(n+"-arrow-color").value,d=r.pstyle("opacity").value,f=r.pstyle("line-opacity").value,h=d*f,v=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,p=this.r.getArrowWidth(v,y),g=this.instanceCount,m=this.transformBuffer.getMatrixView(g);Xc(m),Vn(m,m,[s,o]),Ro(m,m,[p,p]),Zc(m,m,l),this.vertTypeBuffer.getView(g)[0]=ao;var b=this.indexBuffer.getView(g);na(a,b);var w=this.colorBuffer.getView(g);zr(c,h,w),this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}}},{key:"drawEdgeLine",value:function(r,a){if(r.visible()){var n=this._getEdgePoints(r);if(n){var i=r.pstyle("opacity").value,s=r.pstyle("line-opacity").value,o=r.pstyle("width").pfValue,l=r.pstyle("line-color").value,u=i*s;if(n.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),n.length==4){var c=this.instanceCount;this.vertTypeBuffer.getView(c)[0]=Qc;var d=this.indexBuffer.getView(c);na(a,d);var f=this.colorBuffer.getView(c);zr(l,u,f);var h=this.lineWidthBuffer.getView(c);h[0]=o;var v=this.pointAPointBBuffer.getView(c);v[0]=n[0],v[1]=n[1],v[2]=n[2],v[3]=n[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y=this.maxInstances&&this.endBatch()}}}}},{key:"_isValidEdge",value:function(r){var a=r._private.rscratch;return!(a.badLine||a.allpts==null||isNaN(a.allpts[0]))}},{key:"_getEdgePoints",value:function(r){var a=r._private.rscratch;if(this._isValidEdge(r)){var n=a.allpts;if(n.length==4)return n;var i=this._getNumSegments(r);return this._getCurveSegmentPoints(n,i)}}},{key:"_getNumSegments",value:function(r){var a=15;return Math.min(Math.max(a,5),this.maxInstances)}},{key:"_getCurveSegmentPoints",value:function(r,a){if(r.length==4)return r;for(var n=Array((a+1)*2),i=0;i<=a;i++)if(i==0)n[0]=r[0],n[1]=r[1];else if(i==a)n[i*2]=r[r.length-2],n[i*2+1]=r[r.length-1];else{var s=i/a;this._setCurvePoint(r,s,n,i*2)}return n}},{key:"_setCurvePoint",value:function(r,a,n,i){if(r.length<=2)n[i]=r[0],n[i+1]=r[1];else{for(var s=Array(r.length-2),o=0;o0}},o=function(d){var f=d.pstyle("text-events").strValue==="yes";return f?ri.USE_BB:ri.IGNORE},l=function(d){var f=d.position(),h=f.x,v=f.y,y=d.outerWidth(),p=d.outerHeight();return{w:y,h:p,x1:h-y/2,y1:v-p/2}};r.drawing.addAtlasCollection("node",{texRows:t.webglTexRowsNodes}),r.drawing.addAtlasCollection("label",{texRows:t.webglTexRows}),r.drawing.addTextureAtlasRenderType("node-body",{collection:"node",getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement}),r.drawing.addSimpleShapeRenderType("node-body",{getBoundingBox:l,isSimple:V0,shapeProps:{shape:"shape",color:"background-color",opacity:"background-opacity",radius:"corner-radius",border:!0}}),r.drawing.addSimpleShapeRenderType("node-overlay",{getBoundingBox:l,isVisible:s("overlay"),shapeProps:{shape:"overlay-shape",color:"overlay-color",opacity:"overlay-opacity",padding:"overlay-padding",radius:"overlay-corner-radius"}}),r.drawing.addSimpleShapeRenderType("node-underlay",{getBoundingBox:l,isVisible:s("underlay"),shapeProps:{shape:"underlay-shape",color:"underlay-color",opacity:"underlay-opacity",padding:"underlay-padding",radius:"underlay-corner-radius"}}),r.drawing.addTextureAtlasRenderType("label",{collection:"label",getTexPickingMode:o,getKey:no(e.getLabelKey,null),getBoundingBox:io(e.getLabelBox,null),drawClipped:!0,drawElement:e.drawLabel,getRotation:n(null),getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:i("label")}),r.drawing.addTextureAtlasRenderType("edge-source-label",{collection:"label",getTexPickingMode:o,getKey:no(e.getSourceLabelKey,"source"),getBoundingBox:io(e.getSourceLabelBox,"source"),drawClipped:!0,drawElement:e.drawSourceLabel,getRotation:n("source"),getRotationPoint:e.getSourceLabelRotationPoint,getRotationOffset:e.getSourceLabelRotationOffset,isVisible:i("source-label")}),r.drawing.addTextureAtlasRenderType("edge-target-label",{collection:"label",getTexPickingMode:o,getKey:no(e.getTargetLabelKey,"target"),getBoundingBox:io(e.getTargetLabelBox,"target"),drawClipped:!0,drawElement:e.drawTargetLabel,getRotation:n("target"),getRotationPoint:e.getTargetLabelRotationPoint,getRotationOffset:e.getTargetLabelRotationOffset,isVisible:i("target-label")});var u=an(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(c,d){var f=!1;d&&d.length>0&&(f|=r.drawing.invalidate(d)),f&&u()}),ub(r)};function lb(t){var e=t.cy.container(),r=e&&e.style&&e.style.backgroundColor||"white";return bd(r)}function jf(t,e){var r=t._private.rscratch;return Rt(r,"labelWrapCachedLines",e)||[]}var no=function(e,r){return function(a){var n=e(a),i=jf(a,r);return i.length>1?i.map(function(s,o){return"".concat(n,"_").concat(o)}):n}},io=function(e,r){return function(a,n){var i=e(a);if(typeof n=="string"){var s=n.indexOf("_");if(s>0){var o=Number(n.substring(s+1)),l=jf(a,r),u=i.h/l.length,c=u*o,d=i.y1+c;return{x1:i.x1,w:i.w,y1:d,h:u,yOffset:c}}}return i}};function ub(t){{var e=t.render;t.render=function(i){i=i||{};var s=t.cy;t.webgl&&(s.zoom()>Ff?(cb(t),e.call(t,i)):(db(t),Xf(t,i,Fa.SCREEN)))}}{var r=t.matchCanvasSize;t.matchCanvasSize=function(i){r.call(t,i),t.pickingFrameBuffer.setFramebufferAttachmentSizes(t.canvasWidth,t.canvasHeight),t.pickingFrameBuffer.needsDraw=!0}}t.findNearestElements=function(i,s,o,l){return yb(t,i,s)};{var a=t.invalidateCachedZSortedEles;t.invalidateCachedZSortedEles=function(){a.call(t),t.pickingFrameBuffer.needsDraw=!0}}{var n=t.notify;t.notify=function(i,s){n.call(t,i,s),i==="viewport"||i==="bounds"?t.pickingFrameBuffer.needsDraw=!0:i==="background"&&t.drawing.invalidate(s,{type:"node-body"})}}}function cb(t){var e=t.data.contexts[t.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function db(t){var e=function(a){a.save(),a.setTransform(1,0,0,1,0,0),a.clearRect(0,0,t.canvasWidth,t.canvasHeight),a.restore()};e(t.data.contexts[t.NODE]),e(t.data.contexts[t.DRAG])}function fb(t){var e=t.canvasWidth,r=t.canvasHeight,a=pl(t),n=a.pan,i=a.zoom,s=to();Vn(s,s,[n.x,n.y]),Ro(s,s,[i,i]);var o=to();Z0(o,e,r);var l=to();return X0(l,o,s),l}function Yf(t,e){var r=t.canvasWidth,a=t.canvasHeight,n=pl(t),i=n.pan,s=n.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,r,a),e.translate(i.x,i.y),e.scale(s,s)}function vb(t,e){t.drawSelectionRectangle(e,function(r){return Yf(t,r)})}function hb(t){var e=t.data.contexts[t.NODE];e.save(),Yf(t,e),e.strokeStyle="rgba(0, 0, 0, 0.3)",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function pb(t){var e=function(n,i,s){for(var o=n.atlasManager.getAtlasCollection(i),l=t.data.contexts[t.NODE],u=o.atlases,c=0;c=0&&w.add(x)}return w}function yb(t,e,r){var a=gb(t,e,r),n=t.getCachedZSortedEles(),i,s,o=Lt(a),l;try{for(o.s();!(l=o.n()).done;){var u=l.value,c=n[u];if(!i&&c.isNode()&&(i=c),!s&&c.isEdge()&&(s=c),i&&s)break}}catch(d){o.e(d)}finally{o.f()}return[i,s].filter(Boolean)}function so(t,e,r){var a=t.drawing;e+=1,r.isNode()?(a.drawNode(r,e,"node-underlay"),a.drawNode(r,e,"node-body"),a.drawTexture(r,e,"label"),a.drawNode(r,e,"node-overlay")):(a.drawEdgeLine(r,e),a.drawEdgeArrow(r,e,"source"),a.drawEdgeArrow(r,e,"target"),a.drawTexture(r,e,"label"),a.drawTexture(r,e,"edge-source-label"),a.drawTexture(r,e,"edge-target-label"))}function Xf(t,e,r){var a;t.webglDebug&&(a=performance.now());var n=t.drawing,i=0;if(r.screen&&t.data.canvasNeedsRedraw[t.SELECT_BOX]&&vb(t,e),t.data.canvasNeedsRedraw[t.NODE]||r.picking){var s=t.data.contexts[t.WEBGL];r.screen?(s.clearColor(0,0,0,0),s.enable(s.BLEND),s.blendFunc(s.ONE,s.ONE_MINUS_SRC_ALPHA)):s.disable(s.BLEND),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.viewport(0,0,s.canvas.width,s.canvas.height);var o=fb(t),l=t.getCachedZSortedEles();if(i=l.length,n.startFrame(o,r),r.screen){for(var u=0;u0&&s>0){h.clearRect(0,0,i,s),h.globalCompositeOperation="source-over";var v=this.getCachedZSortedEles();if(t.full)h.translate(-a.x1*u,-a.y1*u),h.scale(u,u),this.drawElements(h,v),h.scale(1/u,1/u),h.translate(a.x1*u,a.y1*u);else{var y=e.pan(),p={x:y.x*u,y:y.y*u};u*=e.zoom(),h.translate(p.x,p.y),h.scale(u,u),this.drawElements(h,v),h.scale(1/u,1/u),h.translate(-p.x,-p.y)}t.bg&&(h.globalCompositeOperation="destination-over",h.fillStyle=t.bg,h.rect(0,0,i,s),h.fill())}return f};function mb(t,e){for(var r=atob(t),a=new ArrayBuffer(r.length),n=new Uint8Array(a),i=0;i"u"?"undefined":ot(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var a=this.cy.window(),n=a.document;r=n.createElement("canvas"),r.width=t,r.height=e}return r};[Vf,rr,hr,hl,Qr,_r,Pt,Wf,Ir,cn,Jf].forEach(function(t){xe(Be,t)});var xb=[{name:"null",impl:Pf},{name:"base",impl:zf},{name:"canvas",impl:bb}],Eb=[{type:"layout",extensions:Um},{type:"renderer",extensions:xb}],tv={},rv={};function av(t,e,r){var a=r,n=function(T){He("Can not register `"+e+"` for `"+t+"` since `"+T+"` already exists in the prototype and can not be overridden")};if(t==="core"){if(Xa.prototype[e])return n(e);Xa.prototype[e]=r}else if(t==="collection"){if(pt.prototype[e])return n(e);pt.prototype[e]=r}else if(t==="layout"){for(var i=function(T){this.options=T,r.call(this,T),Ne(this._private)||(this._private={}),this._private.cy=T.cy,this._private.listeners=[],this.createEmitter()},s=i.prototype=Object.create(r.prototype),o=[],l=0;l
`}function Pb(){xt(F("graph")),F("graphSearch").addEventListener("input",t=>{bt.search=t.target.value.trim().toLowerCase(),kn()}),F("graphEntityType").addEventListener("change",t=>{bt.entity_type=t.target.value,kn()}),F("graphPredicate").addEventListener("change",t=>{bt.predicate=t.target.value,kn()}),F("graphMinConfidence").addEventListener("input",t=>{bt.min_confidence=Number(t.target.value),F("graphMinConfidenceOut").textContent=`${Math.round(bt.min_confidence*100)}%`,kn()}),F("graphLayout").addEventListener("change",t=>{bt.layout=t.target.value,iv()}),F("graphFitBtn").addEventListener("click",()=>Qt?.fit(void 0,40)),F("graphReloadBtn").addEventListener("click",()=>gl().catch(()=>{})),fr(()=>xt(F("graph")))}async function gl(){if(!ue.selectedProject)return;lr=await Fe(`/projects/${encodeURIComponent(ue.selectedProject)}/graph/neighborhood?limit=300`)??{nodes:[],edges:[]},Bb(lr.nodes),Db(lr),_o()}function Bb(t){const e=[...new Set(t.map(r=>r.type).filter(Boolean))].sort();ni=new Map,e.forEach((r,a)=>ni.set(r,ad[a%ad.length]))}function Db(t){const e=F("graphEntityType"),r=F("graphPredicate"),a=[...new Set(t.nodes.map(i=>i.type).filter(Boolean))].sort(),n=[...new Set(t.edges.map(i=>i.predicate).filter(Boolean))].sort();e.innerHTML=``+a.map(i=>``).join(""),r.innerHTML=``+n.map(i=>``).join(""),Rb(a)}function Rb(t){F("graphLegend").innerHTML=t.slice(0,12).map(e=>` ${z(e)} `).join("")}function Ab(){const t=bt.min_confidence,e=bt.search,r=bt.entity_type,a=bt.predicate,n=new Set,i=[];for(const l of lr.edges)l.confidencer&&l.type!==r||e&&!(l.name||"").toLowerCase().includes(e)&&!(l.canonical_name||"").toLowerCase().includes(e)?!1:bt.predicate||bt.min_confidence>0?n.has(l.id):!0),o=new Set(s.map(l=>l.id));return s.forEach(l=>{i.push({group:"nodes",data:{id:`n${l.id}`,entityId:l.id,label:l.name,type:l.type,canonical:l.canonical_name,metadata:l.metadata,color:ni.get(l.type)||"#7aa2ff"}})}),lr.edges.forEach(l=>{l.confidence{const n=a.target.data();ue.selection={kind:"graph_node",data:n},ur()}),Qt.on("tap","edge",a=>{const n=a.target.data();ue.selection={kind:"graph_edge",data:n},ur()}))}function kn(){if(!Qt)return _o();_o()}function iv(){Qt&&Qt.layout(sv(bt.layout)).run()}function sv(t){return t==="cose"?{name:"cose",animate:!1,idealEdgeLength:110,nodeRepulsion:16e3,padding:40}:t==="concentric"?{name:"concentric",concentric:e=>e.degree(!1),levelWidth:()=>1,animate:!1,padding:30}:t==="breadthfirst"?{name:"breadthfirst",directed:!0,animate:!1,padding:30,spacingFactor:1.2}:{name:t,animate:!1,padding:30}}function Lb(t){const e=lr.nodes.length,r=lr.edges.length;F("graphStats").textContent=`${e} ${V("graph.stats.nodes")} · ${r} ${V("graph.stats.edges")} · ${t} ${V("graph.stats.shown")}`}function Mb(){return[{selector:"node",style:{"background-color":"data(color)",label:"data(label)",color:"#e6ecf3","font-size":11,"text-outline-color":"#0f1216","text-outline-width":2,"text-valign":"bottom","text-margin-y":6,width:24,height:24,"border-width":1,"border-color":"#0f1216"}},{selector:"node:selected",style:{"border-color":"#ffffff","border-width":2,width:28,height:28}},{selector:"edge",style:{width:"mapData(confidence, 0, 1, 1, 4)","line-color":"#364154","target-arrow-color":"#364154","target-arrow-shape":"triangle","curve-style":"bezier",label:"data(predicate)","font-size":9,color:"#8c98ab","text-rotation":"autorotate","text-background-color":"#0f1216","text-background-opacity":.85,"text-background-padding":2,"arrow-scale":.8}},{selector:"edge:selected",style:{"line-color":"#7aa2ff","target-arrow-color":"#7aa2ff",color:"#7aa2ff",width:3}}]}let Si=[],_t=[],Ot=null;const wt=new Set,sr={status:"",predicate:"",search:""};let Pn=null;function _b(){return`
`}function Ib(){const t=F("claims");xt(t),fr(()=>{xt(t),Er()}),F("wbStatusFilter").addEventListener("change",e=>{sr.status=e.target.value,Er()}),F("wbPredicateFilter").addEventListener("change",e=>{sr.predicate=e.target.value,Er()}),F("wbSearch").addEventListener("input",e=>{sr.search=e.target.value.trim().toLowerCase(),Er()}),F("wbBulkAcceptBtn").addEventListener("click",()=>ii("validated_claim")),F("wbBulkRejectBtn").addEventListener("click",()=>ii("rejected")),Hb()}async function Ta(){if(!ue.selectedProject)return;const t=encodeURIComponent(ue.selectedProject),[e,r]=await Promise.all([Fe(`/projects/${t}/claims?limit=200&include_candidates=true`),Fe(`/projects/${t}/claims?limit=200&status=rejected`).catch(()=>[])]),a=new Map;for(const n of[...e,...r])a.set(n.id,n);Si=[...a.values()].sort((n,i)=>(i.last_seen_at??"").localeCompare(n.last_seen_at??"")),Ob(),Er()}function Ob(){const t=F("wbPredicateFilter");if(!t)return;const e=[...new Set(Si.map(a=>a.predicate).filter(Boolean))].sort(),r=sr.predicate;t.innerHTML=``+e.map(a=>``).join("")}function Nb(){const t=sr.search;_t=Si.filter(e=>!(sr.status&&e.status!==sr.status||sr.predicate&&e.predicate!==sr.predicate||t&&!`${e.subject??""} ${e.predicate??""} ${e.object??""} ${e.evidence_text??""}`.toLowerCase().includes(t))),_t.some(e=>e.id===Ot)||(Ot=_t[0]?.id??null);for(const e of[...wt])_t.some(r=>r.id===e)||wt.delete(e)}function Er(){Nb(),ov(),lv(),uv()}function ov(){const t=F("wbList");if(!_t.length){t.innerHTML=`
${z(V("workbench.empty"))}
`;return}t.innerHTML=_t.map(e=>zb(e)).join(""),t.querySelectorAll("[data-claim-row]").forEach(e=>{const r=Number(e.dataset.claimRow);e.addEventListener("click",a=>{a.shiftKey||a.ctrlKey||a.metaKey?cv(r):(Ot=r,wt.clear(),wt.add(r)),ov(),lv(),uv(),nd()})}),nd()}function zb(t){const e=t.id===Ot,r=wt.has(t.id),a=`workbench.status.${t.status??"active"}`;return` `}function lv(){const t=F("wbDetail"),e=_t.find(n=>n.id===Ot);if(!e){t.innerHTML=`
${z(V("workbench.select_hint"))}
`;return}const r=`workbench.status.${e.status??"active"}`,a=e.confidence_breakdown?`LLM ${Bn(e.confidence_breakdown.llm_confidence)} · evidence ${Bn(e.confidence_breakdown.evidence_confidence)} · ontology ${Bn(e.confidence_breakdown.ontology_confidence)} · stored ${Bn(e.confidence_breakdown.stored_confidence??e.confidence)}`:"";t.innerHTML=`

${z(e.subject??"")} ${z(e.predicate??"")} ${z(e.object??"")}

${z(V(r,e.status??""))} ${Math.round((e.confidence??0)*100)}%
${z(V("workbench.detail.subject"))}
${z(e.subject??"")} (${z(e.subject_type??"")})
${z(V("workbench.detail.predicate"))}
${z(e.predicate??"")}
${z(V("workbench.detail.object"))}
${z(e.object??JSON.stringify(e.object_value??""))}
${z(V("workbench.detail.source"))}
${z(e.source??"")}
${z(V("workbench.detail.page"))}
${e.page_url?`${z(e.page_url)}`:"-"}
${a?`
${z(V("workbench.detail.breakdown"))}
${z(a)}
`:""}
${e.evidence_text?`

${z(V("workbench.detail.evidence"))}

${$b(e.evidence_text,e)}
`:""}
`,xt(t),t.querySelectorAll("[data-action]").forEach(n=>{n.addEventListener("click",()=>Io(n.dataset.action))})}function $b(t,e){const r=[];e.subject&&r.push(e.subject),e.object&&r.push(e.object);let a=z(t);for(const n of r){if(!n||n.length<2)continue;const i=Fb(n);a=a.replace(new RegExp(i,"gi"),s=>`${s}`)}return a}function Fb(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function uv(){const t=wt.size;F("wbSelectedCount").textContent=t>1?V("workbench.bulk_count").replace("{count}",t):"";const e=t>1;F("wbBulkAcceptBtn").disabled=!e,F("wbBulkRejectBtn").disabled=!e}function Bn(t){return t==null?"-":`${Math.round(t*100)}%`}function cv(t){wt.has(t)?wt.delete(t):wt.add(t),wt.size===1&&(Ot=[...wt][0])}function nd(){const t=document.querySelector(`[data-claim-row="${Ot}"]`);t&&t.scrollIntoView({block:"nearest"})}async function Io(t){const e=_t.find(r=>r.id===Ot);e&&(t==="accept"?await oo(e.id,"validated_claim"):t==="reject"?await oo(e.id,"rejected"):t==="unreview"?await oo(e.id,"active"):t==="save-confidence"?await qb(e):t==="accept-similar"&&await Vb(e))}async function oo(t,e){const r=F("wbReason")?.value?.trim()||null;try{await Fe(`/claims/${t}/status`,{method:"PATCH",body:JSON.stringify({status:e,reason:r})}),Ae(V("workbench.toast.reviewed")),await Ta()}catch(a){Ae(a.message)}}async function qb(t){const e=Number(F("wbConfidence").value),r=F("wbReason").value.trim()||null;try{await Fe(`/claims/${t.id}/confidence`,{method:"PATCH",body:JSON.stringify({confidence:e,reason:r})}),Ae(V("toast.claim_updated")),await Ta()}catch(a){Ae(a.message)}}async function Vb(t){const e=t.object??JSON.stringify(t.object_value??""),r=Si.filter(a=>a.predicate===t.predicate&&(a.object??JSON.stringify(a.object_value??""))===e).map(a=>a.id);if(r.length)try{const a=await Fe("/claims/bulk-status",{method:"POST",body:JSON.stringify({claim_ids:r,status:"validated_claim",reason:F("wbReason")?.value?.trim()||null})});Ae(V("workbench.toast.bulk_done").replace("{count}",a.updated??r.length)),await Ta()}catch(a){Ae(a.message)}}async function ii(t){const e=[...wt];if(!(e.length<2))try{const r=await Fe("/claims/bulk-status",{method:"POST",body:JSON.stringify({claim_ids:e,status:t,reason:null})});Ae(V("workbench.toast.bulk_done").replace("{count}",r.updated??e.length)),wt.clear(),await Ta()}catch(r){Ae(r.message)}}function Hb(){Pn&&document.removeEventListener("keydown",Pn),Pn=t=>{if(!Gb()||t.target.matches("input, textarea, select"))return;const e=t.key;if(e==="j"||e==="ArrowDown"){t.preventDefault(),id(1);return}if(e==="k"||e==="ArrowUp"){t.preventDefault(),id(-1);return}if(e===" "){t.preventDefault(),Ot!=null&&(cv(Ot),Er());return}if(e==="Escape"){wt.clear(),Er();return}if(e==="/"){t.preventDefault(),F("wbSearch")?.focus();return}if(e==="a"&&!t.shiftKey){t.preventDefault(),Io("accept");return}if(e==="r"&&!t.shiftKey){t.preventDefault(),Io("reject");return}if(t.shiftKey&&(e==="A"||e==="a")){t.preventDefault(),ii("validated_claim");return}if(t.shiftKey&&(e==="R"||e==="r")){t.preventDefault(),ii("rejected");return}},document.addEventListener("keydown",Pn)}function Gb(){const t=F("claims");return t&&t.classList.contains("active")}function id(t){if(!_t.length)return;let r=_t.findIndex(a=>a.id===Ot)+t;r<0&&(r=0),r>=_t.length&&(r=_t.length-1),Ot=_t[r].id,wt.clear(),wt.add(Ot),Er()}let qr=null;function Ub(){return`

`}function Kb(){const t=F("overview");xt(t),F("pipelineRefreshBtn").addEventListener("click",()=>yl().catch(()=>{})),fr(()=>{xt(t),dv()})}async function yl(){ue.selectedProject&&(qr=await Fe(`/projects/${encodeURIComponent(ue.selectedProject)}/pipeline`),dv())}function dv(){qr&&(jb(qr.stages||[]),Xb(qr.stages||[]),Zb(qr.entity_types||[]),Qb(qr.recent_pages||[]),Jb(qr.recent_claims||[]))}const Wb={crawled:"#7aa2ff",extracted:"#22d3ee",claims:"#facc15",validated:"#4ade80",graph:"#a78bfa"};function jb(t){const e=Math.max(1,...t.map(a=>a.count||0)),r=F("pipelineStages");r.innerHTML=t.map((a,n)=>{const i=n>0?t[n-1].count:null,s=i&&i>0?Math.round(a.count/i*100):null,o=a.count/e*100,l=Wb[a.key]||"#7aa2ff",u=Yb(a);return`
${z(V(`pipeline.stage.${a.key}`,a.key))} ${s!=null?`${s}% ${z(V("pipeline.retained"))}`:""}
${a.count}
${u?`
${u}
`:""}
`}).join("")}function Yb(t){return t.extra?t.key==="extracted"?`events ${t.extra.events??0} · errors ${t.extra.errors??0}`:t.key==="claims"?Object.entries(t.extra).map(([e,r])=>`${z(e)} ${r}`).join(" · "):t.key==="graph"?`entities ${t.extra.entities??0}`:"":""}function Xb(t){const e=ue.projectDetail,r=t.find(n=>n.key==="claims"),a=t.find(n=>n.key==="validated");F("pipelineSummary").innerHTML=`
${z(V("overview.project"))}${z(e?.name??"-")}
${z(V("overview.domain"))}${z(e?.domain??"-")}
${z(V("overview.sources"))}${(e?.sources??[]).length}
${z(V("overview.entities"))}${t.find(n=>n.key==="graph")?.extra?.entities??0}
${z(V("pipeline.stage.claims"))}${r?.count??0}
${z(V("pipeline.stage.validated"))}${a?.count??0}
`}function Zb(t){const e=F("pipelineEntityTypes");if(!t.length){e.innerHTML=`

${z(V("pipeline.empty.claims"))}

`;return}const r=Math.max(1,...t.map(a=>a.count));e.innerHTML=t.map(a=>{const n=a.count/r*100;return`
${z(a.type)}
${a.count}
`}).join("")}function Qb(t){const e=F("pipelineRecentPages");if(!t.length){e.innerHTML=`

${z(V("pipeline.empty.pages"))}

`;return}e.innerHTML=t.map(r=>`
${z(r.page_type??"")} ${z(r.status_code??"-")} ${z(fv(r.fetched_at))}
${z(r.title??r.url??"")}
${z(r.url??"")}
`).join("")}function Jb(t){const e=F("pipelineRecentClaims");if(!t.length){e.innerHTML=`

${z(V("pipeline.empty.claims"))}

`;return}e.innerHTML=t.map(r=>`
${z(r.subject??"")} ${z(r.predicate??"")}
${z(r.status??"")} ${Math.round((r.confidence??0)*100)}% ${z(fv(r.last_seen_at))}
`).join("")}function fv(t){if(!t)return"";const e=new Date(t);if(isNaN(e.getTime()))return"";const a=(Date.now()-e.getTime())/1e3;return a<60?`${Math.floor(a)}s`:a<3600?`${Math.floor(a/60)}m`:a<86400?`${Math.floor(a/3600)}h`:`${Math.floor(a/86400)}d`}function ew(t){const e=F("sourceTable");if(!e)return;const r=t?.sources??[];if(!r.length){e.innerHTML=`
${z(V("table.no_data"))}
`;return}e.innerHTML=` ${r.map(a=>` `).join("")}
${z(V("table.name"))} ${z(V("table.type"))} ${z(V("table.trust"))} ${z(V("table.robots"))} ${z(V("table.rate"))}
${z(a.name)} ${z(a.type)} ${a.trust_level} ${a.respect_robots_txt?"on":"off"} ${a.rate_limit_per_minute}/min
`}let Dn=null;function tw(t){Dn=t,Dn.innerHTML=rw(),xt(Dn),document.querySelectorAll(".tab").forEach(e=>{e.addEventListener("click",()=>{document.querySelectorAll(".tab").forEach(r=>r.classList.remove("active")),document.querySelectorAll(".tab-panel").forEach(r=>r.classList.remove("active")),e.classList.add("active"),document.getElementById(e.dataset.tab).classList.add("active")})}),Pb(),Ib(),Kb(),F("loadOntologyRegistryBtn").addEventListener("click",Oo),F("loadEntitiesBtn").addEventListener("click",No),F("mergeEntitiesBtn").addEventListener("click",aw),F("loadExtractionLogsBtn").addEventListener("click",zo),F("runResearchBtn").addEventListener("click",iw),F("loadResearchBtn").addEventListener("click",$o),F("loadGraphQueryBtn").addEventListener("click",Fo),F("loadTagsBtn").addEventListener("click",qo),F("recommendBtn").addEventListener("click",lw),fr(()=>{xt(Dn),vv(),hv(),yl().catch(()=>{}),Oo().catch(()=>{}),No().catch(()=>{}),Ta().catch(()=>{}),zo().catch(()=>{}),$o().catch(()=>{}),Fo().catch(()=>{}),qo().catch(()=>{}),gl().catch(()=>{})})}function rw(){return` ${kb()} ${Ub()}

${_b()}

`}function vv(){ew(ue.projectDetail)}function hv(){const t=ue.ontology?.entity_types??[],e=ue.ontology?.predicates??[];F("ontologyEntities").innerHTML=t.map(Pl).join(""),F("ontologyPredicates").innerHTML=e.map(Pl).join(""),F("entityTypeFilter").innerHTML=`${t.map(r=>``).join("")}`}async function Oo(){if(!ue.selectedProject)return;const t=encodeURIComponent(ue.selectedProject),[e,r,a,n]=await Promise.all([Fe(`/projects/${t}/ontology/registry`),Fe(`/projects/${t}/ontology/proposals?limit=50`),Fe(`/projects/${t}/knowledge-gaps?limit=50`),Fe(`/projects/${t}/ontology/triples?limit=50`)]);F("ontologyRegistryEntityTable").innerHTML=Mt([V("table.type"),V("table.domain"),V("table.status"),V("table.confidence")],(e.entity_types??[]).map(i=>[i.name,i.domain,i.status,Math.round((i.confidence??0)*100)+"%"])),F("ontologyRegistryRelationTable").innerHTML=Mt([V("table.relation"),V("table.domain"),V("table.subject"),V("table.object"),V("table.status")],(e.relation_types??[]).map(i=>[i.name,i.domain,(i.allowed_subject_types??[]).join(", "),(i.allowed_object_types??[]).join(", ")||(i.semantic_constraints?.literal_value?"literal":""),i.status])),F("ontologyProposalTable").innerHTML=Mt([V("table.type"),V("table.name"),V("table.status"),V("table.reason")],(r??[]).map(i=>[i.proposal_type,i.name,i.status,z(i.reason??"")])),F("knowledgeGapTable").innerHTML=Mt([V("table.gap"),V("table.target"),V("table.priority"),V("table.description")],(a??[]).map(i=>[i.gap_type,`${i.target_type??""}: ${i.target_name??""}`,Math.round((i.priority??0)*100)+"%",z(i.description??"")])),F("ontologyTripleTable").innerHTML=Mt([V("table.subject"),V("table.relation"),V("table.object"),V("table.status"),V("table.support")],(n??[]).map(i=>[i.subject??"",i.predicate,i.object??JSON.stringify(i.object_value??""),i.status,i.support_count]))}let sd=[];async function No(){if(!ue.selectedProject)return;const t=F("entityTypeFilter").value,e=t?`?entity_type=${encodeURIComponent(t)}&limit=100`:"?limit=100",r=await Fe(`/projects/${encodeURIComponent(ue.selectedProject)}/entities${e}`);sd=r,F("metricEntities").textContent=r.length,F("entityTable").innerHTML=Mt([V("table.id"),V("table.type"),V("table.name"),V("table.metadata")],r.map(a=>[``,a.type,z(a.name),`${z(JSON.stringify(a.metadata??{}))}`])),F("entityTable").querySelectorAll("[data-entity-id]").forEach(a=>{a.addEventListener("click",()=>{const n=Number(a.dataset.entityId),i=sd.find(s=>s.id===n);i&&(ue.selection={kind:"entity",data:i},ur())})})}async function aw(){if(!ue.selectedProject)return;const t=Number(F("mergeSourceId").value),e=Number(F("mergeTargetId").value);if(!t||!e||t===e){Ae(V("toast.merge_check"));return}try{const r=await Fe("/entities/merge",{method:"POST",body:JSON.stringify({project_name:ue.selectedProject,source_entity_id:t,target_entity_id:e})});if(!r.ok){Ae(r.error??V("toast.merge_check"));return}Ae(V("toast.entity_merged")),F("mergeSourceId").value="",F("mergeTargetId").value="";const a=new CustomEvent("workspace:refresh");window.dispatchEvent(a)}catch(r){Ae(r.message)}}async function zo(){if(!ue.selectedProject)return;const t=await Fe(`/projects/${encodeURIComponent(ue.selectedProject)}/extraction-logs?limit=50`);F("extractionLogTable").innerHTML=t.map(nw).join("")}function nw(t){const e=t.validation??{},r=t.page_context??{},n=(e.rejected_claims??[]).slice(0,3).map(i=>`${i.predicate??""}: ${i.reason??""}`).join(" | ");return`
${z(t.extractor_name)} ${z(t.provider)} ${z(e.claim_status??"")} accepted ${e.accepted_claim_count??0} rejected ${e.rejected_claim_count??0}
${z(r.page_type??"")} / ${z(r.crawl_status??"")} / ${z(r.extraction_status??"")}
${z(t.page_url??"")}
${z(n)}
`}async function iw(){if(!ue.selectedProject)return;F("researchResult").textContent=V("status.research_running");const t=F("researchSeedEntityId").value.trim();try{const e=await Fe("/research/run",{method:"POST",body:JSON.stringify({...Ho(),project_name:ue.selectedProject,seed_entity_id:t?Number(t):null,goal:F("researchGoal").value.trim()||"Semantic ontology exploration",max_depth:Number(F("siteMaxDepth").value||2),max_steps:Number(F("researchMaxSteps").value||8),max_branch:8,min_relevance:Number(F("researchMinRelevance").value||.35),same_domain_only:F("sameDomainOnly").checked,analyze_page_types:["ProductPage","BrandStoryPage","ReviewPage"]})});F("researchResult").textContent=`Research ${e.status}: explored ${e.explored_count}, analyzed ${e.analyzed_count}, queued ${e.queued_count}, skipped ${e.skipped_count}`,Ae(V("toast.research_completed"));const r=new CustomEvent("workspace:refresh");window.dispatchEvent(r)}catch(e){F("researchResult").textContent=`${V("toast.research_failed")}: ${e.message}`,Ae(V("toast.research_failed"))}}async function $o(){if(!ue.selectedProject)return;const t=await Fe(`/projects/${encodeURIComponent(ue.selectedProject)}/research/sessions?limit=20`);F("researchSessions").innerHTML=t.map(sw).join("")}function sw(t){const e=t.history??[],r=e.length?e[e.length-1]:null,n=(t.memory??{}).conflicts??[];return`
${z(t.name??"Research session")} ${z(t.status??"")} history ${e.length} queue ${(t.queue??[]).length} conflicts ${n.length}
${z(t.goal??"")}
seed ${z(t.seed??"")}
${z(r?.outcome?.reason??r?.outcome?.status??"")}
`}async function Fo(){if(!ue.selectedProject)return;const t=F("graphQueryKind")?.value??"trend_summary",e=F("graphQueryText")?.value.trim()??"";let r=`kind=${encodeURIComponent(t)}`;t==="brand_products"&&e&&(r+=`&brand=${encodeURIComponent(e)}`),t==="products_by_tag"&&e&&(r+=`&tag=${encodeURIComponent(e)}`);const a=await Fe(`/projects/${encodeURIComponent(ue.selectedProject)}/graph/query?${r}`);F("graphQueryTable").innerHTML=ow(t,a)}function ow(t,e){return t==="brand_products"?Mt([V("table.product"),V("table.type"),V("table.brand"),V("table.confidence")],e.map(r=>[r.product,r.product_type,r.brand??"",Math.round(r.confidence*100)+"%"])):t==="products_by_tag"?Mt([V("table.product"),V("table.predicate"),V("table.tag"),V("table.confidence")],e.map(r=>[r.product,r.predicate,r.tag,Math.round(r.confidence*100)+"%"])):t==="relation_summary"?Mt([V("table.predicate"),V("table.status"),V("table.support"),V("table.confidence")],e.map(r=>[r.predicate,r.status,r.support_count,Math.round((r.max_confidence??0)*100)+"%"])):t==="entity_type_summary"?Mt([V("table.type"),V("table.count")],e.map(r=>[r.entity_type,r.count])):Mt([V("table.predicate"),V("table.name"),V("table.type"),V("table.support"),V("table.confidence")],e.map(r=>[r.predicate,r.name,r.entity_type,r.support_count,Math.round((r.max_confidence??0)*100)+"%"]))}async function qo(){if(!ue.selectedProject)return;const t=await Fe(`/projects/${encodeURIComponent(ue.selectedProject)}/recommendation-tags`);F("tagTable").innerHTML=Mt([V("table.predicate"),V("table.type"),V("table.name"),V("table.support"),V("table.confidence")],t.map(e=>[e.predicate,e.type,e.name,e.support_count,Math.round((e.max_confidence??0)*100)+"%"]))}async function lw(){if(ue.selectedProject)try{const t=await Fe("/recommend",{method:"POST",body:JSON.stringify({project_name:ue.selectedProject,target_entity_type:ue.projectDetail?.config?.recommendation?.target_entity_type??"Perfume",preferences:{preferred_notes:Di(F("preferredNotes").value),avoided_notes:Di(F("avoidedNotes").value),preferred_moods:Di(F("preferredMoods").value),season_context:F("seasonContext").value.trim()||null,occasion_context:F("occasionContext").value.trim()||null},limit:10})});F("recommendTable").innerHTML=Mt([V("table.name"),V("table.type"),V("table.score"),V("table.reasons")],t.map(e=>[e.name,e.entity_type,e.score,(e.reasons??[]).join(", ")]))}catch(t){Ae(t.message)}}let lo=null,pv="",qa=null;function uw(){const t=F("globalSearchInput"),e=F("globalSearchPanel");xt(t.parentElement),t.addEventListener("input",()=>{const r=t.value.trim();lo&&window.clearTimeout(lo),lo=window.setTimeout(()=>cw(r),200)}),t.addEventListener("focus",()=>{pv?Vo(qa):gv(),e.hidden=!1}),t.addEventListener("keydown",r=>{r.key==="Escape"&&(t.value="",e.hidden=!0,t.blur()),r.key==="ArrowDown"&&(r.preventDefault(),e.querySelector("[data-search-item]")?.focus())}),document.addEventListener("click",r=>{!e.contains(r.target)&&r.target!==t&&(e.hidden=!0)}),document.addEventListener("keydown",r=>{r.key==="/"&&!r.target.matches("input, textarea, select")&&(r.preventDefault(),t.focus(),t.select())}),fr(()=>{xt(t.parentElement),qa&&Vo(qa)})}async function cw(t){if(!ue.selectedProject)return;pv=t;const e=F("globalSearchPanel");if(!t){gv();return}try{qa=await Fe(`/projects/${encodeURIComponent(ue.selectedProject)}/search?q=${encodeURIComponent(t)}&limit=8`),Vo(qa)}catch(r){e.innerHTML=`
${z(r.message)}
`,e.hidden=!1}}function gv(){const t=F("globalSearchPanel");t.innerHTML=`
${z(V("search.hint"))}
`,t.hidden=!1}function Vo(t){const e=F("globalSearchPanel");if(!t)return;const r=[{key:"entities",items:t.entities,render:dw},{key:"claims",items:t.claims,render:fw},{key:"pages",items:t.pages,render:vw},{key:"predicates",items:t.predicates,render:hw}].filter(a=>(a.items??[]).length>0);r.length?(e.innerHTML=r.map(a=>`
${z(V(`search.group.${a.key}`))}
${a.items.map((n,i)=>a.render(n,i)).join("")}
`).join(""),e.querySelectorAll("[data-search-item]").forEach(a=>{a.addEventListener("click",()=>pw(a.dataset.searchItem,JSON.parse(a.dataset.payload))),a.addEventListener("keydown",n=>{n.key==="Enter"&&(n.preventDefault(),a.click()),n.key==="ArrowDown"&&(n.preventDefault(),(a.nextElementSibling||e.querySelector("[data-search-item]"))?.focus?.()),n.key==="ArrowUp"&&(n.preventDefault(),(a.previousElementSibling||e.querySelector("[data-search-item]:last-of-type"))?.focus?.()),n.key==="Escape"&&F("globalSearchInput").focus()})})):e.innerHTML=`
${z(V("search.empty"))}
`,e.hidden=!1}function dw(t){return` `}function fw(t){const e=t.object_value?JSON.stringify(t.object_value):"";return` `}function vw(t){return` `}function hw(t){return` `}function ki(t){return String(t).replaceAll("&","&").replaceAll("'","'").replaceAll('"',""")}function pw(t,e){const r=F("globalSearchPanel");if(r.hidden=!0,t==="entity")uo("entities"),ue.selection={kind:"entity",data:{id:e.id,name:e.name,type:e.type,metadata:{}}},ur();else if(t==="claim")uo("claims"),ue.selection={kind:"claim",data:{...e,object:void 0}},ur();else if(t==="page")e.url&&window.open(e.url,"_blank","noreferrer");else if(t==="predicate"){uo("graph");const a=F("graphPredicate");a&&(a.value=e,a.dispatchEvent(new Event("change")))}}function uo(t){document.querySelectorAll(".tab").forEach(e=>e.classList.toggle("active",e.dataset.tab===t)),document.querySelectorAll(".tab-panel").forEach(e=>e.classList.toggle("active",e.id===t))}const gw=document.getElementById("app"),ml=Rv(gw);Av(ml.sidebarHost,{onProjectChanged:bl,onCrawlUpdate:()=>ur(),refreshAll:wl});tw(ml.workspaceHost);Hv(ml.inspectorHost);uw();document.getElementById("refreshBtn").addEventListener("click",bl);window.addEventListener("project:select",t=>yv(t.detail));window.addEventListener("workspace:refresh",wl);fr(()=>ur());bl().catch(t=>Ae(t.message));async function bl(){ue.projects=await Fe("/projects"),!ue.selectedProject&&ue.projects.length&&(ue.selectedProject=ue.projects[0].name),Go(),ue.selectedProject&&await yv(ue.selectedProject)}async function yv(t){ue.selectedProject=t,ue.projectDetail=await Fe(`/projects/${encodeURIComponent(t)}`),ue.ontology=await Fe(`/ontology/${encodeURIComponent(ue.projectDetail.domain)}`),Go(),Mv(ue.projectDetail),vv(),hv(),ur(),await wl()}async function wl(){if(!ue.selectedProject)return;const t=[["pipeline",yl],["ontology registry",Oo],["entities",No],["claims workbench",Ta],["extraction logs",zo],["research sessions",$o],["graph query",Fo],["tags",qo],["graph",gl]];await Promise.all(t.map(async([e,r])=>{try{await r()}catch(a){console.warn(`${e} load failed`,a)}})),ur()} //# sourceMappingURL=index-BsoXaTIL.js.map