fixing sql filters pt 2
Browse files- assets/index-7BQiBOoY.js +2 -2
- data/metadata.json +36 -0
- index.html +1 -1
assets/index-7BQiBOoY.js
CHANGED
|
@@ -1523,13 +1523,13 @@ fn points_downsampled_vs(
|
|
| 1523 |
${i?`AND (${i})`:""}
|
| 1524 |
)
|
| 1525 |
LEFT JOIN ${e} ON ${ae(n.id,e)} = __search_result_id__
|
| 1526 |
-
`),h=Array.from(f).map(d=>{let p={id:d.id,distance:c.get(d.id)?.distance,fields:{}};for(let m in d)m.startsWith("field_")?p.fields[m.substring(6)]=d[m]:p[m]=d[m];return p});return h=h.sort((d,p)=>(u.get(d.id)??0)-(u.get(p.id)??0)),h}function bBe(t){let{coordinator:e,table:n,idColumn:r,searcher:i,textColumn:s,neighborsColumn:o}=t;if(i===null)return{};let a={};if(i?.fullTextSearch!=null)a.fullTextSearch=i.fullTextSearch.bind(i);else if(s!=null){let l=new gBe(e,n,{id:r,text:s});a.fullTextSearch=l.fullTextSearch.bind(l)}return i?.vectorSearch!=null&&(a.vectorSearch=i.vectorSearch.bind(i)),i?.nearestNeighbors!=null?a.nearestNeighbors=i.nearestNeighbors.bind(i):o!=null&&(a.nearestNeighbors=async l=>{let u=Be.from(n).select({knn:ae(o)}).where(qs(ae(r),Ae(l))),c=await e.query(u),f=Array.from(c);if(f.length!=1)return[];let{distances:h,ids:d}=f[0].knn;return Array.from(d).map((m,g)=>({id:m,distance:h[g]})).filter(m=>m.id!=l)}),a}async function OBe({searcher:t,predicate:e,query:n,mode:r,limit:i,onStatus:s}){s("Searching...");let o=[];if(n.toString(),r=="full-text"&&t.fullTextSearch!=null)n=n.trim(),o=await t.fullTextSearch(n,{limit:i,predicate:e,onStatus:s});else if(r=="vector"&&t.vectorSearch!=null)n=n.trim(),o=await t.vectorSearch(n,{limit:i,predicate:e,onStatus:s});else if(r=="neighbors"&&t.nearestNeighbors!=null)""+n.toString(),o=await t.nearestNeighbors(n,{limit:i,predicate:e,onStatus:s});else return[];return o}let fK=typeof window<"u"?window.matchMedia?.("(prefers-color-scheme: dark)"):null,W_=Xi(fK?.matches?"dark":"light");fK?.addEventListener("change",t=>{W_.set(t.matches?"dark":"light")});function vBe(){let t=Xi(null);return{colorScheme:ty([W_,t],([n,r])=>r??n),userColorScheme:t}}function wBe(t,e){let n=0;return(...r)=>{const i=++n;t(...r).then(s=>{i===n&&e(s)}).catch(s=>{console.error(s)})}}var xBe=G('<div class="p-2"><!></div>'),_Be=G('<div class="absolute w-96 left-0 top-[32px] rounded-md right-0 z-20 border border-slate-300 dark:border-slate-600 overflow-hidden resize shadow-lg bg-white/75 dark:bg-slate-800/75 backdrop-blur-sm"><!></div>'),SBe=G('<div class="relative w-full"><!> <!> <!></div>'),kBe=G('<div class="text-slate-500 dark:text-slate-400">Embedding Atlas</div>'),CBe=G('<button title="Export Selection"><!></button>'),ABe=G('<div class="min-w-[420px] flex flex-col gap-2"><div class="flex flex-row gap-2"><!> <!></div></div>'),EBe=G('<div class="col-start-1 row-start-1"><!></div>'),TBe=G('<h4 class="text-slate-500 dark:text-slate-400 select-none">Column Styles</h4> <!>',1),DBe=G('<div class="flex flex-col gap-2"><!></div>'),PBe=G('<div class="w-3 h-3 rounded-full bg-orange-500 animate-pulse"></div> Connecting...',1),RBe=G('<div class="w-3 h-3 rounded-full bg-green-500"></div> Connected',1),IBe=G('<div class="w-3 h-3 rounded-full bg-red-500"></div> Error or server closed connection',1),FBe=G('<h4 class="text-slate-500 dark:text-slate-400 select-none">MCP (Model Context Protocol)</h4> <div class="flex flex-none gap-2 select-none items-center"><!></div>',1),$Be=G('<div class="min-w-[420px] flex flex-col gap-2"><!> <h4 class="text-slate-500 dark:text-slate-400 select-none">Export</h4> <div class="flex flex-col gap-2"><!></div> <!> <!> <h4 class="text-slate-500 dark:text-slate-400 select-none">About</h4> <div> </div></div>'),MBe=G('<div class="flex flex-row flex-1 justify-between min-w-[180px]"><!></div> <div class="flex flex-none gap-2 items-center pl-2 rounded-md border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900"><!> <div class="flex flex-row items-center"><button title="Clear filters" class="rounded-md flex select-none items-center p-1.5 text-slate-400 dark:text-slate-500 focus-visible:outline-2 outline-blue-600 -outline-offset-1"><!></button> <!></div></div> <div class="flex flex-none flex-row gap-2"><div class="grid grid-cols-1 grid-rows-1 justify-items-end items-center"><!></div> <!> <!> <!></div>',1),LBe=G('<div class="embedding-atlas-root"><div><div class="m-2 flex flex-row items-center gap-2 flex-wrap"><!></div> <div class="flex-1 overflow-hidden h-full ml-2 mr-2 mb-2"><!></div></div></div>');function hK(t,e){De(e,!0);const n=()=>hr(c,"$colorScheme",s),r=()=>hr(E,"$searchResultStore",s),i=()=>hr(v,"$resolvedColumnStyles",s),[s,o]=Lo(),a=500;let l=Xe(e,"embeddingViewConfig",3,null),u=Xe(e,"embeddingViewLabels",3,null);const{colorScheme:c,userColorScheme:f}=vBe();An(()=>{LT(f,e.colorScheme)});let h,d=pe(!1),p=pe("parquet");const m=I6.crossfilter();function g(){return L_(m.predicate(null))}let y=pe([]),O=pe({}),v=Xi({});An(()=>{let Se=w(b(y),b(O));v.set(Se)});function w(Se,gt){let Kt={};for(let Rn of Se)Kt[Rn.name]={display:e.data.text==Rn.name?"full":"badge",...gt[Rn.name]??{}};return Kt}let x=bBe({coordinator:e.coordinator,table:e.data.table,idColumn:e.data.id,textColumn:e.data.text,neighborsColumn:e.data.neighbors,searcher:e.searcher}),S=[...x.fullTextSearch!=null?["full-text"]:[],...x.vectorSearch!=null?["vector"]:[],...x.nearestNeighbors!=null?["neighbors"]:[]];const _={"full-text":{value:"full-text",label:"Full Text"},vector:{value:"vector",label:"Vector"},neighbors:{value:"neighbors",label:"Neighbors"}};let k=pe("full-text"),C=pe(""),D=pe(""),A=pe(!1),E=Xi(null);const T=wBe(async(Se,gt)=>{X(A,!0);let Kt=g(),Rn=await OBe({searcher:x,predicate:Kt,query:Se,mode:gt,limit:a,onStatus:jt=>{X(D,jt,!0)}}),Ri=await yBe(e.coordinator,e.data.table,{id:e.data.id,x:e.data.projection?.x,y:e.data.projection?.y,text:e.data.text},Object.fromEntries(b(y).map(jt=>[jt.name,jt.name])),Kt,Rn),Bn=Se.toString().trim(),er=Se.toString().trim();return gt=="neighbors"&&(Bn="Neighbors of #"+Se.toString(),er=""),X(D,""),{query:Se,mode:gt,ids:Ri.map(jt=>jt.id),label:Bn,highlight:er,items:Ri}},Se=>{E.set(Se)}),R=qC(T,500);function $(){E.set(null),X(A,!1)}An(()=>{b(C)==""?$():R(b(C),b(k))});function Q(){for(let Se of m.clauses)Se.source?.reset?.(),m.update({...Se,value:null,predicate:null});globalThis.dispatchEvent?.(new CustomEvent("nemotron-atlas-filters-cleared"))}function nV3HiddenFields(){return(e.defaultChartsConfig?.exclude??[]).concat(["emb","true_rows","True_rows","row_id","text","dataset_full_name","source_file","source_line","source_group","projection_x","projection_y","num_tool_calls","pass_rate","__collection_source","license","benchmark_task_id","benchmark_query_id","benchmark_row_id","benchmark_accuracy","row_kind","available_rows","sample_rows","samples_rows","smaples_rows","sample_policy","sub_file","row_x","row_y","Collection","collection","Collection_memberships"])}function nV3CleanChart(Se){if(Se==null||typeof Se!="object")return Se;let gt=Se.data?.field,Kt=Se.data?.category;if(Se.type==="embedding"&&(Kt==null||Kt===""))Se={...Se,data:{...Se.data,category:"dataset"}},Kt="dataset";let Rn=typeof Se.title=="string"?Se.title:"",nV3Hidden=nV3HiddenFields(),nV3ChartJson=JSON.stringify(Se);if(nV3Hidden.indexOf(gt)>=0||nV3Hidden.indexOf(Kt)>=0)return null;if(Se.type!=="predicates"&&nV3Hidden.some(nV3Field=>Rn===nV3Field||nV3ChartJson.indexOf(`"field":"${nV3Field}"`)>=0||nV3ChartJson.indexOf(`"category":"${nV3Field}"`)>=0))return null;if(Se.type==="embedding"&&(Kt==="Collection"||Kt==="collection"))return{...Se,data:{...Se.data,category:"pipeline_stage"}};if((gt==="Collection"||gt==="collection")&&Rn==="Collection")return null;if(Rn==="Collection")return null;if(JSON.stringify(Se).indexOf('"field":"Collection"')>=0||JSON.stringify(Se).indexOf('"field":"collection"')>=0)return null;if(Se.type==="predicates"){let nV3PredicateHidden=nV3Hidden.filter(nV3Field=>["num_turns","num_tool_calls","has_tools","pass_rate"].indexOf(nV3Field)<0),nV3HiddenPredicate=Kt=>{let Ri=String(Kt?.predicate??""),Bn=String(Kt?.name??""),er=Ri.split(/[^A-Za-z0-9_]+/);return nV3PredicateHidden.some(jt=>er.indexOf(jt)>=0||Bn.indexOf(jt)>=0)||Ri.indexOf("Benchmark")>=0||Bn.indexOf("Benchmark")>=0},gt=(Array.isArray(Se.items)?Se.items:[]).filter(Kt=>!nV3HiddenPredicate(Kt)).filter(Kt=>!(typeof Kt?.predicate=="string"&&/\bCollection\b/.test(Kt.predicate)&&Kt.predicate.indexOf("Collections")<0));return{...Se,items:gt}}return Se}function nV3CleanCharts(Se){let gt=[],Kt=null,nV3DatasetChart=null,nV3UsedInChart=null,nV3PredicatesChart=null,nV3RowKindChart=null,nV3BenchAccuracyChart=null;for(let[Rn,Ri]of Object.entries(Se??{})){let Bn=nV3CleanChart(Ri);Bn!=null&&(Bn.data?.field==="Collections"?Kt=Bn:Bn.data?.field==="dataset"?nV3DatasetChart=Bn:Bn.data?.field==="Used_in"?nV3UsedInChart=Bn:Bn.type==="predicates"?nV3PredicatesChart=Bn:Bn.data?.field==="row_kind"?nV3RowKindChart=Bn:Bn.data?.field==="benchmark_accuracy"?nV3BenchAccuracyChart=Bn:gt.push(Bn))}let Rn=e.defaultChartsConfig?.override?.Collections,nV3DatasetDefault=e.defaultChartsConfig?.override?.dataset,nV3UsedInDefault=e.defaultChartsConfig?.override?.Used_in,nV3PredicatesDefault=e.defaultChartsConfig?.predicates,nV3RowKindDefault=e.defaultChartsConfig?.override?.row_kind,nV3BenchAccuracyDefault=e.defaultChartsConfig?.override?.benchmark_accuracy,Ri=[];for(let Bn of gt)Bn.type==="embedding"&&Ri.push(Bn);(nV3PredicatesChart!=null||nV3PredicatesDefault!=null)&&Ri.push({type:"predicates",...(nV3PredicatesDefault??{}),...(nV3PredicatesChart??{}),title:"SQL Predicates"}),(Kt!=null||Rn!=null)&&Ri.push({...(Kt??Rn),title:"Collections"}),(nV3DatasetChart!=null||nV3DatasetDefault!=null)&&Ri.push({...(nV3DatasetChart??nV3DatasetDefault),title:"Dataset"}),(nV3UsedInChart!=null||nV3UsedInDefault!=null)&&Ri.push({...(nV3UsedInChart??nV3UsedInDefault),title:"Used in"}),(nV3RowKindChart!=null||nV3RowKindDefault!=null)&&Ri.push({...(nV3RowKindChart??nV3RowKindDefault),title:"row_kind"}),(nV3BenchAccuracyChart!=null||nV3BenchAccuracyDefault!=null)&&Ri.push({...(nV3BenchAccuracyChart??nV3BenchAccuracyDefault),title:"benchmark_accuracy"});for(let Bn of gt)Bn.type!=="embedding"&&Ri.push(Bn);return Object.fromEntries(Ri.map((Bn,er)=>[`${er+1}`,Bn]))}function B(Se){let gt=nV3CleanCharts(Se.charts??{});X(K,gt),X(H,{}),X(J,Se.layout??"list"),X(Y,Object.fromEntries(Object.entries(Se.layoutStates??{}).filter(([Kt])=>gt[Kt]!=null))),X(O,Object.fromEntries(Object.entries(Se.columnStyles??{}).filter(([Kt])=>nV3HiddenFields().indexOf(Kt)<0)))}function q(){let Se=nV3CleanCharts(b(K)),gt=Object.fromEntries(Object.entries(b(H)).filter(([Kt])=>Se[Kt]!=null)),Kt=Object.fromEntries(Object.entries(b(Y)).filter(([Rn])=>Se[Rn]!=null)),Rn=Object.fromEntries(Object.entries(b(O)).filter(([Ri])=>nV3HiddenFields().indexOf(Ri)<0));return{version:xC,timestamp:new Date().getTime()/1e3,charts:Se,chartStates:gt,layout:b(J),layoutStates:Kt,columnStyles:Rn,predicate:g()}}ki(()=>{b(d)&&e.onStateChange?.(q())}),Ah(async()=>{let nV3AllColumns=await bH(e.coordinator,e.data.table);if(X(y,nV3AllColumns.filter(Se=>{let gt=nV3HiddenFields();return!Se.name.startsWith("__")&>.indexOf(Se.name)<0})),W.columns=b(y),W.predicateColumns=nV3AllColumns.filter(Se=>!Se.name.startsWith("__")),e.initialState&&B(e.initialState),Object.keys(b(K)).length==0){let Se=await aQe({coordinator:e.coordinator,table:e.data.table,id:e.data.id,projection:e.data.projection?{...e.data.projection,text:e.data.text??void 0}:void 0,config:e.defaultChartsConfig??void 0});X(K,nV3CleanCharts(Object.fromEntries(Se.map((gt,Kt)=>[`${Kt+1}`,gt]))))}X(d,!0)});function z(Se){if(Se.key=="Escape"){Q(),Se.preventDefault();try{document.activeElement?.blur?.()}catch{}}}let ee=Xi(e.chartTheme??void 0);An(()=>{ee.set(e.chartTheme??void 0)});let W={coordinator:e.coordinator,filter:m,table:e.data.table,id:e.data.id,columns:[],colorScheme:c,theme:ee,columnStyles:v,cache:new cBe,persistentCache:e.cache??{get:async()=>null,set:async(Se,gt)=>{}},searchModes:S,search:T,searchResult:E,highlight:Xi(null),semanticHighlights:Xi(null),benchmarkOverlay:Xi(null),embeddingViewConfig:l(),embeddingViewLabels:u(),hiddenFields:nV3HiddenFields()};const nV3VolumePredicatePrefix="Volume bar:",nV3VolumePredicateRetryDelay=100;let nV3PendingDatasetPredicate=null,nV3DatasetPredicateRetry=null;function nV3SqlString(Se){return`'${String(Se).replace(/'/g,"''")}'`}function nV3DatasetPredicate(Se){let gt=[...new Set((Array.isArray(Se)?Se:[Se]).map(Kt=>String(Kt??"").trim()).filter(Boolean))];return gt.length===0?null:gt.length===1?`dataset = ${nV3SqlString(gt[0])}`:`dataset IN (${gt.map(nV3SqlString).join(", ")})`}function nV3ScheduleDatasetPredicateRetry(){nV3DatasetPredicateRetry==null&&(nV3DatasetPredicateRetry=setTimeout(()=>{nV3DatasetPredicateRetry=null;if(nV3PendingDatasetPredicate!=null){let Se=nV3PendingDatasetPredicate;nV3PendingDatasetPredicate=null,nV3SetDatasetPredicate(Se)}},nV3VolumePredicateRetryDelay))}function nV3SetDatasetPredicate(Se){let gt=Object.entries(b(K)).find(([jt,jr])=>jr?.type==="predicates");if(!gt)return nV3PendingDatasetPredicate=Se,nV3ScheduleDatasetPredicateRetry(),!1;let[Kt,Rn]=gt,Ri=nV3DatasetPredicate(Se),Bn=(Rn.items??[]).filter(jt=>!String(jt?.name??"").startsWith(nV3VolumePredicatePrefix)),er=new Set((Rn.items??[]).filter(jt=>String(jt?.name??"").startsWith(nV3VolumePredicatePrefix)).map(jt=>jt.predicate)),jt=(b(H)[Kt]?.selection??[]).filter(jr=>!er.has(jr));if(Ri){let jr=[...new Set((Array.isArray(Se)?Se:[Se]).map(Zl=>String(Zl??"").trim()).filter(Boolean))],Zl=jr.length===1?`Dataset: ${jr[0]}`:`Datasets: ${jr.length} selected`;Bn=[...Bn,{name:`${nV3VolumePredicatePrefix} ${Zl}`,predicate:Ri}],jt=[...jt,Ri]}return X(K,{...b(K),[Kt]:{...Rn,items:Bn}}),X(H,{...b(H),[Kt]:{...(b(H)[Kt]??{}),selection:jt}}),!0};(()=>{const Se=globalThis.__nemotronAtlas=globalThis.__nemotronAtlas??{};Se.setHighlight=gt=>{W.highlight.set(gt==null?null:Array.isArray(gt)?gt:[gt])};Se.clearHighlight=()=>{W.highlight.set(null)};Se.setSemanticHighlights=gt=>{W.semanticHighlights.set(gt==null?null:Array.isArray(gt)?gt:[gt])};Se.clearSemanticHighlights=()=>{W.semanticHighlights.set(null)};Se.setBenchmarkOverlay=gt=>{W.benchmarkOverlay.set(gt==null?null:Array.isArray(gt)?gt:[gt])};Se.clearBenchmarkOverlay=()=>{W.benchmarkOverlay.set(null)};Se.focusSemanticResult=gt=>{W.highlight.set(gt==null?null:[gt])};Se.clearSemanticFocus=()=>{W.highlight.set(null)};Se.setDatasetPredicate=gt=>nV3SetDatasetPredicate(gt);Se.clearDatasetPredicate=()=>nV3SetDatasetPredicate([]);globalThis.dispatchEvent?.(new CustomEvent("nemotron-atlas-ready"))})();let K=pe({}),H=pe({}),J=pe("list"),Y=pe({}),Z=new Map;function he(Se,gt){return Z.has(Se)||Z.set(Se,new Set),Z.get(Se).add(gt),()=>{Z.get(Se)?.delete(gt)}}let me=pe(void 0);Ah(()=>{e.modelContext&&(dBe(e.modelContext,{context:W,set charts(Se){X(K,Se)},get charts(){return b(K)},set chartStates(Se){X(H,Se)},get chartStates(){return b(H)},set layout(Se){X(J,Se)},get layout(){return b(J)},set layoutStates(Se){X(Y,Se)},get layoutStates(){return b(Y)},get chartDelegates(){return Z},get container(){return h},get columnStyles(){return b(O)},set columnStyles(Se){X(O,Se)}}),ki(()=>{let Se=e.modelContext.connectionStatus?.subscribe(gt=>{X(me,gt)});return()=>{Se?.()}}))});async function te(){let Se=JSON.stringify(q());await navigator.clipboard.writeText(Se)}var le=LBe();cl("keydown",vk,z),Ve(le,"",{},{width:"100%",height:"100%"});var ve=M(le);let xe,ue;var Ee=M(ve),Le=M(Ee);{var qe=Se=>{var gt=MBe(),Kt=ke(gt),Rn=M(Kt);{var Ri=un=>{var Yn=SBe(),qr=M(Yn);M_(qr,{type:"search",placeholder:"Search...",className:"w-full max-w-[400px] ",get value(){return b(C)},set value(Vt){X(C,Vt,!0)}});var In=V(qr,2);{var Ii=Vt=>{{let Rr=L(()=>S.filter(ti=>ti!="neighbors").map(ti=>_[ti]));Zs(Vt,{get options(){return b(Rr)},get value(){return b(k)},onChange:ti=>X(k,ti,!0)})}};oe(In,Vt=>{S.filter(Rr=>Rr!="neighbors").length>1&&Vt(Ii)})}var rs=V(In,2);{var qt=Vt=>{var Rr=_Be();Ve(Rr,"",{},{height:"48em"});var ti=M(Rr);{var Aa=is=>{const tr=L(r);var xn=ot(),xr=ke(xn);bv(xr,()=>b(tr),Fi=>{oBe(Fi,{get items(){return b(tr).items},get label(){return b(tr).label},get highlight(){return b(tr).highlight},limit:a,onClick:async ao=>{W.highlight.set([ao.id])},onClose:$,get columnStyles(){return i()}})}),I(is,xn)},Xl=is=>{var tr=ot(),xn=ke(tr);{var xr=Fi=>{var ao=xBe(),Wl=M(ao);uBe(Wl,{get status(){return b(D)}}),F(ao),I(Fi,ao)};oe(xn,Fi=>{b(D)!=null&&Fi(xr)},!0)}I(is,tr)};oe(ti,is=>{r()!=null?is(Aa):is(Xl,!1)})}F(Rr),I(Vt,Rr)};oe(rs,Vt=>{b(A)&&Vt(qt)})}F(Yn),I(un,Yn)},Bn=un=>{var Yn=kBe();I(un,Yn)};oe(Rn,un=>{b(k).length>0?un(Ri):un(Bn,!1)})}F(Kt);var er=V(Kt,2),jt=M(er);GQe(jt,{get coordinator(){return e.coordinator},get filter(){return m},get table(){return e.data.table}});var jr=V(jt,2),Zl=M(jr);Zl.__click=Q;var yd=M(Zl);sd(yd,{class:"w-5 h-5"}),F(Zl);var vf=V(Zl,2);{var bd=un=>{Uw(un,{title:"Export Selection",button:(qr,In)=>{let Ii=()=>In?.().visible,rs=()=>In?.().toggle;var qt=CBe();qt.__click=function(...ti){rs()?.apply(this,ti)};let Vt;var Rr=M(qt);L3(Rr,{class:"w-5 h-5"}),F(qt),de(()=>Vt=Qt(qt,1,"rounded-md px-1.5 py-1.5 flex select-none items-center focus-visible:outline-2 outline-blue-600 -outline-offset-1",null,Vt,{"text-slate-400":!Ii(),"dark:text-slate-500":!Ii()})),I(qr,qt)},children:(qr,In)=>{var Ii=ABe(),rs=M(Ii),qt=M(rs);dk(qt,{get icon(){return L3},label:"Export Selection",title:"Export the selected points",class:"w-48",onClick:()=>e.onExportSelection(g(),b(p))});var Vt=V(qt,2);Zs(Vt,{label:"Format",get value(){return b(p)},onChange:Rr=>X(p,Rr,!0),options:[{value:"parquet",label:"Parquet"},{value:"jsonl",label:"JSONL"},{value:"json",label:"JSON"},{value:"csv",label:"CSV"}]}),F(rs),F(Ii),I(qr,Ii)},$$slots:{button:!0,default:!0}})};oe(vf,un=>{e.onExportSelection&&un(bd)})}F(jr),F(er);var zo=V(er,2),Ca=M(zo),ns=M(Ca);bv(ns,()=>b(J),un=>{var Yn=EBe(),qr=M(Yn);UQe(qr,{get context(){return W},get charts(){return b(K)},get chartStates(){return b(H)},get layout(){return b(J)},get layoutStates(){return b(Y)},onChartsChange:In=>X(K,In),onChartStatesChange:In=>X(H,In),onLayoutStatesChange:In=>X(Y,In)}),F(Yn),xc(3,Yn,()=>hae),I(un,Yn)}),F(Ca);var oo=V(Ca,2);{let un=L(()=>[{value:"list",icon:bke,title:"List layout"},{value:"dashboard",icon:gke,title:"Dashboard layout"}]);gT(oo,{get value(){return b(J)},onChange:Yn=>X(J,Yn),get options(){return b(un)}})}var oc=V(oo,2);{var wf=un=>{{let Yn=L(()=>n()=="dark"?Pke:Tke);Nu(un,{get icon(){return b(Yn)},title:"Toggle light / dark mode",onClick:()=>{LT(f,n()=="light"?"dark":"light")}})}};oe(oc,un=>{e.colorScheme==null&&un(wf)})}var cm=V(oc,2);Uw(cm,{get icon(){return t8},title:"Options",children:(un,Yn)=>{var qr=$Be(),In=M(qr);{var Ii=tr=>{var xn=TBe(),xr=V(ke(xn),2);WQe(xr,{get columns(){return b(y)},get styles(){return i()},onStylesChange:Fi=>{X(O,Fi)}}),I(tr,xn)};oe(In,tr=>{b(y).length>0&&tr(Ii)})}var rs=V(In,4),qt=M(rs);dk(qt,{get icon(){return eke},label:"Copy State",title:"Copy the current Embedding Atlas state as JSON to clipboard.",class:"w-48",onClick:te}),F(rs);var Vt=V(rs,2);{var Rr=tr=>{var xn=DBe(),xr=M(xn);dk(xr,{get icon(){return L3},label:"Export Application",title:"Download a self-contained static web application",class:"w-48",get onClick(){return e.onExportApplication}}),F(xn),I(tr,xn)};oe(Vt,tr=>{e.onExportApplication&&tr(Rr)})}var ti=V(Vt,2);{var Aa=tr=>{var xn=FBe(),xr=V(ke(xn),2),Fi=M(xr);{var ao=Uo=>{var ie=PBe();ws(),I(Uo,ie)},Wl=Uo=>{var ie=ot(),ye=ke(ie);{var Re=Ne=>{var Je=RBe();ws(),I(Ne,Je)},Qe=Ne=>{var Je=ot(),be=ke(Je);{var j=se=>{var we=IBe();ws(),I(se,we)};oe(be,se=>{(b(me)=="closed"||b(me)=="error")&&se(j)},!0)}I(Ne,Je)};oe(ye,Ne=>{b(me)=="connected"?Ne(Re):Ne(Qe,!1)},!0)}I(Uo,ie)};oe(Fi,Uo=>{b(me)=="connecting"?Uo(ao):Uo(Wl,!1)})}F(xr),I(tr,xn)};oe(ti,tr=>{b(me)&&tr(Aa)})}var Xl=V(ti,4),is=M(Xl);F(Xl),F(qr),de(()=>ut(is,`Embedding Atlas, ${xC}`)),I(un,qr)},$$slots:{default:!0}}),F(zo),I(Se,gt)};oe(Le,Se=>{b(d)&&Se(qe)})}F(Ee);var Fe=V(Ee,2),it=M(Fe);{var St=Se=>{jQe(Se,{get context(){return W},get layout(){return b(J)},get layoutStates(){return b(Y)},get charts(){return b(K)},get chartStates(){return b(H)},onChartsChange:gt=>X(K,gt),onChartStatesChange:gt=>X(H,gt),onLayoutStatesChange:gt=>X(Y,gt),registerChartDelegate:he})};oe(it,Se=>{b(d)&&Se(St)})}F(Fe),F(ve),F(le),lr(le,Se=>h=Se,()=>h),de(()=>{xe=Qt(ve,1,"w-full h-full flex flex-col text-slate-800 bg-slate-200 dark:text-slate-200 dark:bg-slate-800",null,xe,{dark:n()=="dark"}),ue=Ve(ve,"",ue,{"color-scheme":n()})}),I(t,le),Pe(),o()}dn(["click"]);var NBe=G('<div class="content-markdown svelte-zqu787"><!></div>'),QBe=G('<div class="flex items-start leading-5 text-slate-500 dark:text-slate-400"><div class="w-7 flex-none"><!></div> <div><!></div> <div class="flex-none font-mono text-sm"><!> <!></div></div>'),BBe=G('<div class="flex flex-col gap-1 p-4 w-[420px] border rounded-md bg-slate-50 border-slate-300 dark:bg-slate-900 dark:border-slate-700 select-text"></div>');function dK(t,e){De(e,!0);let n=Xe(e,"messages",19,()=>[]);var r=BBe();Ot(r,21,n,Wt,(i,s,o)=>{const a=L(()=>o==n().length-1);var l=QBe(),u=M(l),c=M(u);{var f=S=>{var _=ot(),k=ke(_);{var C=A=>{JX(A,{class:"text-red-400 w-5 h-5"})},D=A=>{n8(A,{class:"text-blue-500 w-5 h-5"})};oe(k,A=>{b(s).error?A(C):A(D,!1)})}I(S,_)};oe(c,S=>{(b(a)||b(s).error)&&S(f)})}F(u);var h=V(u,2);let d;var p=M(h);{var m=S=>{var _=NBe(),k=M(_);ix(k,()=>O_(b(s).text)),F(_),I(S,_)},g=S=>{var _=hh();de(()=>ut(_,b(s).text)),I(S,_)};oe(p,S=>{b(s).markdown?S(m):S(g,!1)})}F(h);var y=V(h,2),O=M(y);{var v=S=>{var _=hh();de(k=>ut(_,`${k??""}%`),[()=>b(s).progress.toFixed(0)]),I(S,_)};oe(O,S=>{b(s).progress!=null&&S(v)})}var w=V(O,2);{var x=S=>{var _=hh();de(()=>ut(_,b(s).progressText)),I(S,_)};oe(w,S=>{b(s).progressText!=null&&S(x)})}F(y),F(l),de(()=>d=Qt(h,1,"flex-1",null,d,{"text-red-400":b(s).error})),I(i,l)}),F(r),I(t,r),Pe()}const pK="deflate-raw";async function zBe(t){let n=new TextEncoder().encode(JSON.stringify(t)),r=await ree(n,pK);return aee(r)}async function UBe(t){let e=lee(t),n=await iee(e,pK),r=new TextDecoder;return JSON.parse(r.decode(n))}function mK(t){let e=t.lastIndexOf("?");if(e<0)return{};let n=new URLSearchParams(t.slice(e+1));return Object.fromEntries(n.entries())}function jBe(t,e){let n=t.lastIndexOf("?"),r=new URLSearchParams(e);r.sort();let i=r.toString();return i==""?n<0?t:t.slice(0,n):n<0?t+"?"+i:t.slice(0,n)+"?"+r.toString()}async function cv(t,e="object"){try{let n=mK(window.location.hash);return n[t]==null?void 0:e=="text"?n[t]:e=="object"?await UBe(n[t]):void 0}catch{return}}async function Lf(t,e,n="object"){let r;if(e!==void 0)if(n=="text"){if(typeof e!="string")return;r=e}else if(n=="object")r=await zBe(e);else return;let i=mK(window.location.hash);r===void 0?delete i[t]:i[t]=r,window.location.hash=jBe(window.location.hash,i)}var qBe=G("<div><!></div>"),VBe=G('<div class="fixed left-0 right-0 top-0 bottom-0"><!></div>');function ZBe(t,e){De(e,!0);const n=()=>hr(W_,"$systemColorScheme",r),[r,i]=Lo(),s=_x();let o=pe(!1),a=pe(!1),l=pe("Loading..."),u=pe(null),c=pe(null);Ah(async()=>{try{X(u,await cv("state")),X(l,"Initializing database..."),X(c,await e.dataSource.initializeCoordinator(s,"dataset",O=>{X(l,O,!0)})),X(o,!0)}catch(O){X(a,!0),X(l,O.message,!0);return}});async function f(O,v){e.dataSource.downloadSelection&&await e.dataSource.downloadSelection(O,v)}async function h(){e.dataSource.downloadArchive&&await e.dataSource.downloadArchive()}function d(O){mK(window.location.hash).state!=null&&Lf("state",{...O,predicate:void 0})}var p=VBe(),m=M(p);{var g=O=>{{let v=L(()=>({...b(c).data??{id:"id"},table:"dataset"})),w=L(()=>b(u)??b(c).initialState),x=L(()=>e.dataSource.downloadArchive?h:null),S=L(()=>e.dataSource.downloadSelection?f:null),_=L(()=>qC(d,200));hK(O,{get coordinator(){return s},get data(){return b(v)},get embeddingViewConfig(){return b(c).embeddingViewConfig},get embeddingViewLabels(){return b(c).embeddingViewLabels},get defaultChartsConfig(){return b(c).defaultChartsConfig},get chartTheme(){return b(c).chartTheme},get stylesheet(){return b(c).stylesheet},get initialState(){return b(w)},get modelContext(){return b(c).modelContext},get onExportApplication(){return b(x)},get onExportSelection(){return b(S)},get onStateChange(){return b(_)},get cache(){return e.dataSource.cache}})}},y=O=>{var v=qBe();let w;var x=M(v);{let S=L(()=>[{text:b(l),error:b(a)}]);dK(x,{get messages(){return b(S)}})}F(v),de(()=>w=Qt(v,1,"w-full h-full grid place-content-center select-none text-slate-800 bg-slate-200 dark:text-slate-200 dark:bg-slate-800",null,w,{dark:n()=="dark"})),I(O,v)};oe(m,O=>{b(o)&&b(c)!=null?O(g):O(y,!1)})}F(p),I(t,p),Pe(),i()}function fv(t,e){let n=document.createElement("a");n.href=URL.createObjectURL(new Blob([t],{type:"application/octet-stream"})),n.download=e,n.click()}const _C={json:{query:"(FORMAT JSON, ARRAY true)",extension:"json"},jsonl:{query:"(FORMAT JSON)",extension:"jsonl"},csv:{query:"(FORMAT CSV)",extension:"csv"},parquet:{query:"(FORMAT parquet)",extension:"parquet"}};function XBe(t,e,n,r){return e==null||e.length==0?Ze`COPY ${t} TO ${Ae(n)} ${_C[r].query}`:Ze`COPY (SELECT * FROM ${t} WHERE ${e}) TO ${Ae(n)} ${_C[r].query}`}function gK(t){return`selection-${Date.now()}.${_C[t].extension}`}async function yK(t,e,n,r){let i=await t.databaseConnector()?.getDuckDB(),s=gK(r);await i.registerEmptyFileBuffer(s);let o=XBe(e,n,s,r);await t.query(o.toString());let a=await i.copyFileToBuffer(s);return i.dropFile(s),[a,s]}class WBe{ws=null;endpoint;shouldReconnect=!0;reconnectAttempts=0;maxReconnectAttempts;reconnectDelay;maxReconnectDelay;reconnectTimeoutId=null;onMessage;onStatus;constructor(e,n){this.endpoint=e,this.maxReconnectAttempts=n.maxReconnectAttempts??10,this.reconnectDelay=n.initialReconnectDelay??1e3,this.maxReconnectDelay=n.maxReconnectDelay??3e4,this.onMessage=n.onMessage,this.onStatus=n.onStatus,this.connect()}connect(){if(this.shouldReconnect){this.onStatus?.("connecting");try{this.ws=new WebSocket(this.endpoint),this.ws.onopen=()=>{console.debug("WebSocket connected"),this.reconnectAttempts=0,this.onStatus?.("connected")},this.ws.onmessage=e=>{this.onMessage(e)},this.ws.onclose=e=>{console.debug("WebSocket closed:",e.code,e.reason),this.ws=null,this.shouldReconnect&&this.reconnectAttempts<this.maxReconnectAttempts?this.scheduleReconnect():this.reconnectAttempts>=this.maxReconnectAttempts&&(console.error("Max reconnection attempts reached, giving up"),this.onStatus?.("error"))},this.ws.onerror=e=>{console.error("WebSocket error:",e)}}catch(e){console.error("Failed to create WebSocket:",e),this.shouldReconnect&&this.reconnectAttempts<this.maxReconnectAttempts?this.scheduleReconnect():this.onStatus?.("error")}}}scheduleReconnect(){this.reconnectTimeoutId&&clearTimeout(this.reconnectTimeoutId),this.reconnectAttempts++;const e=Math.min(this.reconnectDelay*Math.pow(2,this.reconnectAttempts-1),this.maxReconnectDelay);console.debug(`Scheduling reconnection attempt ${this.reconnectAttempts} in ${e}ms`),this.reconnectTimeoutId=window.setTimeout(()=>{this.reconnectTimeoutId=null,this.connect()},e)}send(e){return this.ws?.readyState===WebSocket.OPEN?(this.ws.send(e),!0):!1}close(){this.shouldReconnect=!1,this.reconnectTimeoutId&&(clearTimeout(this.reconnectTimeoutId),this.reconnectTimeoutId=null),this.ws?.close(),this.onStatus?.("closed")}}class YBe{tools;toolsMap;ws;connectionStatus;constructor(e){this.tools=[],this.toolsMap=new Map,this.connectionStatus=Xi("connecting"),this.ws=new WBe(e,{onMessage:async n=>{try{const r=JSON.parse(n.data);if(r.control==="close"){this.ws.close();return}const i=r,s=await this.processRequest(i);this.ws.send(JSON.stringify(s))}catch(r){console.error("Error processing MCP request:",r)}},onStatus:n=>{this.connectionStatus.set(n)}})}close(){this.ws.close()}provideContext(e){this.tools=e.tools??[],this.toolsMap=new Map(this.tools.map(n=>[n.name,n]))}async processRequest(e){if(e.request instanceof Array){let n=[];for(let r of e.request)n.push(await this.processRPC(r));return{id:e.id,response:n}}else return{id:e.id,response:await this.processRPC(e.request)}}async processRPC(e){let n,r;try{n=await this.rpc(e.method,e.params??{})}catch(i){r={code:-32603,message:i.toString()}}return{jsonrpc:"2.0",id:e.id,result:n,error:r}}async rpc(e,n){switch(e){case"initialize":return await this.initialize(n);case"tools/list":return await this.toolsList(n);case"tools/call":return await this.toolsCall(n);default:throw new Error(`method ${e} is not implemented`)}}async initialize(e){return console.info("MCP Initialize",e.clientInfo),{protocolVersion:"2024-11-05",capabilities:{logging:{},prompts:{},resources:{},tools:{},tasks:{}},serverInfo:{name:"Embedding Atlas",title:"Embedding Atlas MCP Server",version:"1.0.0",description:"MCP server for the Embedding Atlas frontend",icons:[{src:"https://apple.github.io/embedding-atlas/favicon.svg",mimeType:"image/svg+xml",sizes:["any"]}],websiteUrl:"https://apple.github.io/embedding-atlas"},instructions:"Optional instructions for the client"}}async toolsList(e){return{tools:this.tools.map(r=>({name:r.name,title:r.title,description:r.description,inputSchema:r.inputSchema,outputSchema:r.outputSchema}))}}async toolsCall(e){let n=this.toolsMap.get(e.name);if(n==null)throw new Error("tool not found");try{return await n.execute(e.arguments,void 0)}catch(r){return{content:[{type:"text",text:"Exception: "+r.toString()}],isError:!0}}}}function jm(t,e){return e.startsWith(".")&&(e=e.slice(1)),t.endsWith("/")&&e.startsWith("/")?t+e.slice(1):!t.endsWith("/")&&!e.startsWith("/")?t+"/"+e:t+e}class GBe{serverUrl;downloadArchive=void 0;downloadSelection=void 0;constructor(e){if(e.startsWith("http"))this.serverUrl=e;else{let n=window.location.origin+window.location.pathname;n=n.replace(/\/[^/]*$/,"/"),this.serverUrl=jm(n,e)}}async initializeCoordinator(e,n,r){let i=await this.metadata();r("Initializing database...");let s=i.database?.type??"wasm";if(await yH(e,s,i.database?.uri??jm(this.serverUrl,"query")),i.database?.load){r("Loading data...");let o=i.database?.datasetUrl??jm(this.serverUrl,"dataset.parquet");await e.exec(`
|
| 1527 |
CREATE OR REPLACE TABLE ${n} AS (
|
| 1528 |
SELECT *,
|
| 1529 |
Collection_memberships AS Collections
|
| 1530 |
FROM read_parquet(${Ae(o)})
|
| 1531 |
);
|
| 1532 |
-
`)}return i.isStatic||(this.downloadArchive=async()=>{let a=await(await this.fetchEndpoint("archive.zip")).arrayBuffer();fv(a,"embedding-atlas.zip")}),s=="wasm"?this.downloadSelection=async(o,a)=>{let[l,u]=await yK(e,n,o,a);fv(l,u)}:i.isStatic||(this.downloadSelection=async(o,a)=>{let l=gK(a),c=await(await this.fetchEndpoint("selection",{method:"POST",body:JSON.stringify({predicate:o,format:a})})).arrayBuffer();fv(c,l)}),i.mcp&&i.mcp.type=="websocket"&&(i.props.modelContext=new YBe(jm(this.serverUrl,"mcp_websocket"))),i.props}async fetchEndpoint(e,n){let r=await fetch(jm(this.serverUrl,e),n);if(r.status!=200)throw new Error("ERROR FETCH");return r}async metadata(){try{return await this.fetchEndpoint("metadata.json?v=
|
| 1533 |
${b(r)?"bg-slate-50 border-slate-500 dark:bg-slate-900 dark:border-slate-500":"bg-slate-50 border-slate-300 dark:bg-slate-900 dark:border-slate-700"}`),ut(d,b(r)?"Drop your files here":"Drag & drop files here or click to select"),ne(p,"accept",m),p.multiple=n()},[()=>e.extensions?.join(",")]),cl("dragover",c,s),cl("dragleave",c,o),cl("drop",c,a),I(t,c),Pe()}dn(["click","change"]);var eze=G('<button class="px-2 py-1 text-left rounded-md text-slate-600 dark:text-slate-400 hover:bg-slate-200 dark:hover:bg-slate-700"> </button>'),tze=G('<ul class="absolute mt-1 w-full rounded-md shadow-md p-1 z-10 flex flex-col bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700"></ul>'),nze=G('<div><input type="text" class="form-input rounded-md py-1 bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 w-full"/> <!></div>');function G$(t,e){De(e,!0);let n=Xe(e,"value",3,""),r=Xe(e,"options",19,()=>[]),i,s,o=pe(!1),a=L(()=>n()!=null&&r()!=null?r().filter(p=>p.toLowerCase().includes(n().toLowerCase())):r()??[]);function l(p){e.onChange?.(p)}function u(p){l(p),X(o,!1)}var c=nze(),f=M(c);ox(f),f.__change=()=>l(i.value??""),f.__input=()=>l(i.value??""),lr(f,p=>i=p,()=>i);var h=V(f,2);{var d=p=>{var m=tze();Ot(m,20,()=>b(a),g=>g,(g,y)=>{var O=eze();O.__click=()=>u(y);var v=M(O,!0);F(O),de(()=>ut(v,y)),I(g,O)}),F(m),I(p,m)};oe(h,p=>{b(o)&&b(a).length>0&&p(d)})}F(c),lr(c,p=>s=p,()=>s),de(()=>{Qt(c,1,`relative ${e.className??""??""}`),ne(f,"placeholder",e.placeholder),KM(f,n())}),cl("focus",f,()=>X(o,!0)),cl("blur",f,p=>{p.relatedTarget&&p.relatedTarget instanceof Node&&s.contains(p.relatedTarget)||X(o,!1)}),I(t,c),Pe()}dn(["change","input","click"]);var rze=G('<div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">X</div> <!></div> <div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Y</div> <!></div> <div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Neighbors</div> <!></div> <p class="text-sm text-slate-400 dark:text-slate-600">Neighbors column should contain pre-computed nearest neighbors in format: <code></code>. IDs should be zero-based row indices.</p>',1),ize=G(`<div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Text</div> <!></div> <div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Model</div> <!></div> <p class="text-sm text-slate-400 dark:text-slate-600">Computing the embedding and 2D projection in browser may take a while. The model will be loaded with
|
| 1534 |
Transformers.js.</p>`,1),sze=G(`<div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Image</div> <!></div> <div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Model</div> <!></div> <p class="text-sm text-slate-400 dark:text-slate-600">Computing the embedding and 2D projection in browser may take a while. The model will be loaded with
|
| 1535 |
Transformers.js.</p>`,1),oze=G(`<div class="flex flex-col p-4 w-[40rem] border rounded-md bg-slate-50 border-slate-300 dark:bg-slate-900 dark:border-slate-700"><div class="flex flex-col gap-2 pb-4"><h2 class="text-slate-500 dark:text-slate-500">Search and Tooltip (optional)</h2> <p class="text-sm text-slate-400 dark:text-slate-600">The selected column, if any, will be used for full-text search and tooltips. Choose a column with freeform text,
|
|
|
|
| 1523 |
${i?`AND (${i})`:""}
|
| 1524 |
)
|
| 1525 |
LEFT JOIN ${e} ON ${ae(n.id,e)} = __search_result_id__
|
| 1526 |
+
`),h=Array.from(f).map(d=>{let p={id:d.id,distance:c.get(d.id)?.distance,fields:{}};for(let m in d)m.startsWith("field_")?p.fields[m.substring(6)]=d[m]:p[m]=d[m];return p});return h=h.sort((d,p)=>(u.get(d.id)??0)-(u.get(p.id)??0)),h}function bBe(t){let{coordinator:e,table:n,idColumn:r,searcher:i,textColumn:s,neighborsColumn:o}=t;if(i===null)return{};let a={};if(i?.fullTextSearch!=null)a.fullTextSearch=i.fullTextSearch.bind(i);else if(s!=null){let l=new gBe(e,n,{id:r,text:s});a.fullTextSearch=l.fullTextSearch.bind(l)}return i?.vectorSearch!=null&&(a.vectorSearch=i.vectorSearch.bind(i)),i?.nearestNeighbors!=null?a.nearestNeighbors=i.nearestNeighbors.bind(i):o!=null&&(a.nearestNeighbors=async l=>{let u=Be.from(n).select({knn:ae(o)}).where(qs(ae(r),Ae(l))),c=await e.query(u),f=Array.from(c);if(f.length!=1)return[];let{distances:h,ids:d}=f[0].knn;return Array.from(d).map((m,g)=>({id:m,distance:h[g]})).filter(m=>m.id!=l)}),a}async function OBe({searcher:t,predicate:e,query:n,mode:r,limit:i,onStatus:s}){s("Searching...");let o=[];if(n.toString(),r=="full-text"&&t.fullTextSearch!=null)n=n.trim(),o=await t.fullTextSearch(n,{limit:i,predicate:e,onStatus:s});else if(r=="vector"&&t.vectorSearch!=null)n=n.trim(),o=await t.vectorSearch(n,{limit:i,predicate:e,onStatus:s});else if(r=="neighbors"&&t.nearestNeighbors!=null)""+n.toString(),o=await t.nearestNeighbors(n,{limit:i,predicate:e,onStatus:s});else return[];return o}let fK=typeof window<"u"?window.matchMedia?.("(prefers-color-scheme: dark)"):null,W_=Xi(fK?.matches?"dark":"light");fK?.addEventListener("change",t=>{W_.set(t.matches?"dark":"light")});function vBe(){let t=Xi(null);return{colorScheme:ty([W_,t],([n,r])=>r??n),userColorScheme:t}}function wBe(t,e){let n=0;return(...r)=>{const i=++n;t(...r).then(s=>{i===n&&e(s)}).catch(s=>{console.error(s)})}}var xBe=G('<div class="p-2"><!></div>'),_Be=G('<div class="absolute w-96 left-0 top-[32px] rounded-md right-0 z-20 border border-slate-300 dark:border-slate-600 overflow-hidden resize shadow-lg bg-white/75 dark:bg-slate-800/75 backdrop-blur-sm"><!></div>'),SBe=G('<div class="relative w-full"><!> <!> <!></div>'),kBe=G('<div class="text-slate-500 dark:text-slate-400">Embedding Atlas</div>'),CBe=G('<button title="Export Selection"><!></button>'),ABe=G('<div class="min-w-[420px] flex flex-col gap-2"><div class="flex flex-row gap-2"><!> <!></div></div>'),EBe=G('<div class="col-start-1 row-start-1"><!></div>'),TBe=G('<h4 class="text-slate-500 dark:text-slate-400 select-none">Column Styles</h4> <!>',1),DBe=G('<div class="flex flex-col gap-2"><!></div>'),PBe=G('<div class="w-3 h-3 rounded-full bg-orange-500 animate-pulse"></div> Connecting...',1),RBe=G('<div class="w-3 h-3 rounded-full bg-green-500"></div> Connected',1),IBe=G('<div class="w-3 h-3 rounded-full bg-red-500"></div> Error or server closed connection',1),FBe=G('<h4 class="text-slate-500 dark:text-slate-400 select-none">MCP (Model Context Protocol)</h4> <div class="flex flex-none gap-2 select-none items-center"><!></div>',1),$Be=G('<div class="min-w-[420px] flex flex-col gap-2"><!> <h4 class="text-slate-500 dark:text-slate-400 select-none">Export</h4> <div class="flex flex-col gap-2"><!></div> <!> <!> <h4 class="text-slate-500 dark:text-slate-400 select-none">About</h4> <div> </div></div>'),MBe=G('<div class="flex flex-row flex-1 justify-between min-w-[180px]"><!></div> <div class="flex flex-none gap-2 items-center pl-2 rounded-md border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900"><!> <div class="flex flex-row items-center"><button title="Clear filters" class="rounded-md flex select-none items-center p-1.5 text-slate-400 dark:text-slate-500 focus-visible:outline-2 outline-blue-600 -outline-offset-1"><!></button> <!></div></div> <div class="flex flex-none flex-row gap-2"><div class="grid grid-cols-1 grid-rows-1 justify-items-end items-center"><!></div> <!> <!> <!></div>',1),LBe=G('<div class="embedding-atlas-root"><div><div class="m-2 flex flex-row items-center gap-2 flex-wrap"><!></div> <div class="flex-1 overflow-hidden h-full ml-2 mr-2 mb-2"><!></div></div></div>');function hK(t,e){De(e,!0);const n=()=>hr(c,"$colorScheme",s),r=()=>hr(E,"$searchResultStore",s),i=()=>hr(v,"$resolvedColumnStyles",s),[s,o]=Lo(),a=500;let l=Xe(e,"embeddingViewConfig",3,null),u=Xe(e,"embeddingViewLabels",3,null);const{colorScheme:c,userColorScheme:f}=vBe();An(()=>{LT(f,e.colorScheme)});let h,d=pe(!1),p=pe("parquet");const m=I6.crossfilter();function g(){return L_(m.predicate(null))}let y=pe([]),O=pe({}),v=Xi({});An(()=>{let Se=w(b(y),b(O));v.set(Se)});function w(Se,gt){let Kt={};for(let Rn of Se)Kt[Rn.name]={display:e.data.text==Rn.name?"full":"badge",...gt[Rn.name]??{}};return Kt}let x=bBe({coordinator:e.coordinator,table:e.data.table,idColumn:e.data.id,textColumn:e.data.text,neighborsColumn:e.data.neighbors,searcher:e.searcher}),S=[...x.fullTextSearch!=null?["full-text"]:[],...x.vectorSearch!=null?["vector"]:[],...x.nearestNeighbors!=null?["neighbors"]:[]];const _={"full-text":{value:"full-text",label:"Full Text"},vector:{value:"vector",label:"Vector"},neighbors:{value:"neighbors",label:"Neighbors"}};let k=pe("full-text"),C=pe(""),D=pe(""),A=pe(!1),E=Xi(null);const T=wBe(async(Se,gt)=>{X(A,!0);let Kt=g(),Rn=await OBe({searcher:x,predicate:Kt,query:Se,mode:gt,limit:a,onStatus:jt=>{X(D,jt,!0)}}),Ri=await yBe(e.coordinator,e.data.table,{id:e.data.id,x:e.data.projection?.x,y:e.data.projection?.y,text:e.data.text},Object.fromEntries(b(y).map(jt=>[jt.name,jt.name])),Kt,Rn),Bn=Se.toString().trim(),er=Se.toString().trim();return gt=="neighbors"&&(Bn="Neighbors of #"+Se.toString(),er=""),X(D,""),{query:Se,mode:gt,ids:Ri.map(jt=>jt.id),label:Bn,highlight:er,items:Ri}},Se=>{E.set(Se)}),R=qC(T,500);function $(){E.set(null),X(A,!1)}An(()=>{b(C)==""?$():R(b(C),b(k))});function Q(){for(let Se of m.clauses)Se.source?.reset?.(),m.update({...Se,value:null,predicate:null});globalThis.dispatchEvent?.(new CustomEvent("nemotron-atlas-filters-cleared"))}function nV3HiddenFields(){return(e.defaultChartsConfig?.exclude??[]).concat(["emb","true_rows","True_rows","row_id","text","dataset_full_name","source_file","source_line","source_group","projection_x","projection_y","num_tool_calls","pass_rate","__collection_source","license","benchmark_task_id","benchmark_query_id","benchmark_row_id","benchmark_accuracy","row_kind","available_rows","sample_rows","samples_rows","smaples_rows","sample_policy","sub_file","row_x","row_y","Collection","collection","Collection_memberships"])}function nV3CleanChart(Se){if(Se==null||typeof Se!="object")return Se;let gt=Se.data?.field,Kt=Se.data?.category;if(Se.type==="embedding"&&(Kt==null||Kt===""))Se={...Se,data:{...Se.data,category:"dataset"}},Kt="dataset";let Rn=typeof Se.title=="string"?Se.title:"",nV3Hidden=nV3HiddenFields(),nV3SidebarChartFields=["num_tool_calls","pass_rate"],nV3HiddenForChart=nV3Hidden.filter(nV3Field=>nV3SidebarChartFields.indexOf(nV3Field)<0),nV3ChartJson=JSON.stringify(Se);if(nV3Hidden.indexOf(gt)>=0&&nV3SidebarChartFields.indexOf(gt)<0||nV3Hidden.indexOf(Kt)>=0)return null;if(Se.type!=="predicates"&&nV3HiddenForChart.some(nV3Field=>Rn===nV3Field||nV3ChartJson.indexOf(`"field":"${nV3Field}"`)>=0||nV3ChartJson.indexOf(`"category":"${nV3Field}"`)>=0))return null;if(Se.type==="embedding"&&(Kt==="Collection"||Kt==="collection"))return{...Se,data:{...Se.data,category:"pipeline_stage"}};if((gt==="Collection"||gt==="collection")&&Rn==="Collection")return null;if(Rn==="Collection")return null;if(JSON.stringify(Se).indexOf('"field":"Collection"')>=0||JSON.stringify(Se).indexOf('"field":"collection"')>=0)return null;if(Se.type==="predicates"){let nV3PredicateHidden=nV3Hidden.filter(nV3Field=>["num_turns","num_tool_calls","has_tools","pass_rate"].indexOf(nV3Field)<0),nV3HiddenPredicate=Kt=>{let Ri=String(Kt?.predicate??""),Bn=String(Kt?.name??""),er=Ri.split(/[^A-Za-z0-9_]+/);return nV3PredicateHidden.some(jt=>er.indexOf(jt)>=0||Bn.indexOf(jt)>=0)||Ri.indexOf("Benchmark")>=0||Bn.indexOf("Benchmark")>=0},gt=(Array.isArray(Se.items)?Se.items:[]).filter(Kt=>!nV3HiddenPredicate(Kt)).filter(Kt=>!(typeof Kt?.predicate=="string"&&/\bCollection\b/.test(Kt.predicate)&&Kt.predicate.indexOf("Collections")<0));return{...Se,items:gt}}return Se}function nV3CleanCharts(Se){let gt=[],Kt=null,nV3DatasetChart=null,nV3UsedInChart=null,nV3HasToolsChart=null,nV3NumTurnsChart=null,nV3NumToolCallsChart=null,nV3PassRateChart=null,nV3PredicatesChart=null,nV3RowKindChart=null,nV3BenchAccuracyChart=null;for(let[Rn,Ri]of Object.entries(Se??{})){let Bn=nV3CleanChart(Ri);Bn!=null&&(Bn.data?.field==="Collections"?Kt=Bn:Bn.data?.field==="dataset"?nV3DatasetChart=Bn:Bn.data?.field==="Used_in"?nV3UsedInChart=Bn:Bn.data?.field==="has_tools"?nV3HasToolsChart=Bn:Bn.data?.field==="num_turns"?nV3NumTurnsChart=Bn:Bn.data?.field==="num_tool_calls"?nV3NumToolCallsChart=Bn:Bn.data?.field==="pass_rate"?nV3PassRateChart=Bn:Bn.type==="predicates"?nV3PredicatesChart=Bn:Bn.data?.field==="row_kind"?nV3RowKindChart=Bn:Bn.data?.field==="benchmark_accuracy"?nV3BenchAccuracyChart=Bn:gt.push(Bn))}let Rn=e.defaultChartsConfig?.override?.Collections,nV3DatasetDefault=e.defaultChartsConfig?.override?.dataset,nV3UsedInDefault=e.defaultChartsConfig?.override?.Used_in,nV3HasToolsDefault=e.defaultChartsConfig?.override?.has_tools,nV3NumTurnsDefault=e.defaultChartsConfig?.override?.num_turns,nV3NumToolCallsDefault=e.defaultChartsConfig?.override?.num_tool_calls,nV3PassRateDefault=e.defaultChartsConfig?.override?.pass_rate,nV3PredicatesDefault=e.defaultChartsConfig?.predicates,nV3RowKindDefault=e.defaultChartsConfig?.override?.row_kind,nV3BenchAccuracyDefault=e.defaultChartsConfig?.override?.benchmark_accuracy,Ri=[];for(let Bn of gt)Bn.type==="embedding"&&Ri.push(Bn);(nV3PredicatesChart!=null||nV3PredicatesDefault!=null)&&Ri.push({type:"predicates",...(nV3PredicatesDefault??{}),...(nV3PredicatesChart??{}),items:[...(nV3PredicatesDefault?.items??[]),...(nV3PredicatesChart?.items??[])].filter((Bn,er,jt)=>jt.findIndex(jr=>jr.predicate===Bn.predicate&&jr.name===Bn.name)===er),title:"SQL Predicates"}),(Kt!=null||Rn!=null)&&Ri.push({...(Kt??Rn),title:"Collections"}),(nV3DatasetChart!=null||nV3DatasetDefault!=null)&&Ri.push({...(nV3DatasetChart??nV3DatasetDefault),title:"Dataset"}),(nV3UsedInChart!=null||nV3UsedInDefault!=null)&&Ri.push({...(nV3UsedInChart??nV3UsedInDefault),title:"Used in"}),(nV3HasToolsChart!=null||nV3HasToolsDefault!=null)&&Ri.push({...(nV3HasToolsChart??nV3HasToolsDefault),title:"has_tools"}),(nV3NumTurnsChart!=null||nV3NumTurnsDefault!=null)&&Ri.push({...(nV3NumTurnsChart??nV3NumTurnsDefault),title:"num_turns"}),(nV3NumToolCallsChart!=null||nV3NumToolCallsDefault!=null)&&Ri.push({...(nV3NumToolCallsChart??nV3NumToolCallsDefault),title:"num_tool_calls"}),(nV3PassRateChart!=null||nV3PassRateDefault!=null)&&Ri.push({...(nV3PassRateChart??nV3PassRateDefault),title:"pass_rate"}),(nV3RowKindChart!=null||nV3RowKindDefault!=null)&&Ri.push({...(nV3RowKindChart??nV3RowKindDefault),title:"row_kind"}),(nV3BenchAccuracyChart!=null||nV3BenchAccuracyDefault!=null)&&Ri.push({...(nV3BenchAccuracyChart??nV3BenchAccuracyDefault),title:"benchmark_accuracy"});for(let Bn of gt)Bn.type!=="embedding"&&Ri.push(Bn);return Object.fromEntries(Ri.map((Bn,er)=>[`${er+1}`,Bn]))}function B(Se){let gt=nV3CleanCharts(Se.charts??{}),nV3HasPredicateDefaults=Object.values(gt).some(Kt=>Kt?.type==="predicates"&&(Kt.items??[]).some(Rn=>["num_turns","num_tool_calls","has_tools","pass_rate"].some(Ri=>String(Rn?.predicate??"").indexOf(Ri)>=0)));X(K,gt),X(H,{}),X(J,nV3HasPredicateDefaults?"list":Se.layout??"list"),X(Y,Object.fromEntries(Object.entries(Se.layoutStates??{}).filter(([Kt])=>gt[Kt]!=null))),X(O,Object.fromEntries(Object.entries(Se.columnStyles??{}).filter(([Kt])=>nV3HiddenFields().indexOf(Kt)<0)))}function q(){let Se=nV3CleanCharts(b(K)),gt=Object.fromEntries(Object.entries(b(H)).filter(([Kt])=>Se[Kt]!=null)),Kt=Object.fromEntries(Object.entries(b(Y)).filter(([Rn])=>Se[Rn]!=null)),Rn=Object.fromEntries(Object.entries(b(O)).filter(([Ri])=>nV3HiddenFields().indexOf(Ri)<0));return{version:xC,timestamp:new Date().getTime()/1e3,charts:Se,chartStates:gt,layout:b(J),layoutStates:Kt,columnStyles:Rn,predicate:g()}}ki(()=>{b(d)&&e.onStateChange?.(q())}),Ah(async()=>{let nV3AllColumns=await bH(e.coordinator,e.data.table);if(X(y,nV3AllColumns.filter(Se=>{let gt=nV3HiddenFields();return!Se.name.startsWith("__")&>.indexOf(Se.name)<0})),W.columns=b(y),W.predicateColumns=nV3AllColumns.filter(Se=>!Se.name.startsWith("__")),e.initialState&&B(e.initialState),Object.keys(b(K)).length==0){let Se=await aQe({coordinator:e.coordinator,table:e.data.table,id:e.data.id,projection:e.data.projection?{...e.data.projection,text:e.data.text??void 0}:void 0,config:e.defaultChartsConfig??void 0});X(K,nV3CleanCharts(Object.fromEntries(Se.map((gt,Kt)=>[`${Kt+1}`,gt]))))}X(d,!0)});function z(Se){if(Se.key=="Escape"){Q(),Se.preventDefault();try{document.activeElement?.blur?.()}catch{}}}let ee=Xi(e.chartTheme??void 0);An(()=>{ee.set(e.chartTheme??void 0)});let W={coordinator:e.coordinator,filter:m,table:e.data.table,id:e.data.id,columns:[],colorScheme:c,theme:ee,columnStyles:v,cache:new cBe,persistentCache:e.cache??{get:async()=>null,set:async(Se,gt)=>{}},searchModes:S,search:T,searchResult:E,highlight:Xi(null),semanticHighlights:Xi(null),benchmarkOverlay:Xi(null),embeddingViewConfig:l(),embeddingViewLabels:u(),hiddenFields:nV3HiddenFields()};const nV3VolumePredicatePrefix="Volume bar:",nV3VolumePredicateRetryDelay=100;let nV3PendingDatasetPredicate=null,nV3DatasetPredicateRetry=null;function nV3SqlString(Se){return`'${String(Se).replace(/'/g,"''")}'`}function nV3DatasetPredicate(Se){let gt=[...new Set((Array.isArray(Se)?Se:[Se]).map(Kt=>String(Kt??"").trim()).filter(Boolean))];return gt.length===0?null:gt.length===1?`dataset = ${nV3SqlString(gt[0])}`:`dataset IN (${gt.map(nV3SqlString).join(", ")})`}function nV3ScheduleDatasetPredicateRetry(){nV3DatasetPredicateRetry==null&&(nV3DatasetPredicateRetry=setTimeout(()=>{nV3DatasetPredicateRetry=null;if(nV3PendingDatasetPredicate!=null){let Se=nV3PendingDatasetPredicate;nV3PendingDatasetPredicate=null,nV3SetDatasetPredicate(Se)}},nV3VolumePredicateRetryDelay))}function nV3SetDatasetPredicate(Se){let gt=Object.entries(b(K)).find(([jt,jr])=>jr?.type==="predicates");if(!gt)return nV3PendingDatasetPredicate=Se,nV3ScheduleDatasetPredicateRetry(),!1;let[Kt,Rn]=gt,Ri=nV3DatasetPredicate(Se),Bn=(Rn.items??[]).filter(jt=>!String(jt?.name??"").startsWith(nV3VolumePredicatePrefix)),er=new Set((Rn.items??[]).filter(jt=>String(jt?.name??"").startsWith(nV3VolumePredicatePrefix)).map(jt=>jt.predicate)),jt=(b(H)[Kt]?.selection??[]).filter(jr=>!er.has(jr));if(Ri){let jr=[...new Set((Array.isArray(Se)?Se:[Se]).map(Zl=>String(Zl??"").trim()).filter(Boolean))],Zl=jr.length===1?`Dataset: ${jr[0]}`:`Datasets: ${jr.length} selected`;Bn=[...Bn,{name:`${nV3VolumePredicatePrefix} ${Zl}`,predicate:Ri}],jt=[...jt,Ri]}return X(K,{...b(K),[Kt]:{...Rn,items:Bn}}),X(H,{...b(H),[Kt]:{...(b(H)[Kt]??{}),selection:jt}}),!0};(()=>{const Se=globalThis.__nemotronAtlas=globalThis.__nemotronAtlas??{};Se.setHighlight=gt=>{W.highlight.set(gt==null?null:Array.isArray(gt)?gt:[gt])};Se.clearHighlight=()=>{W.highlight.set(null)};Se.setSemanticHighlights=gt=>{W.semanticHighlights.set(gt==null?null:Array.isArray(gt)?gt:[gt])};Se.clearSemanticHighlights=()=>{W.semanticHighlights.set(null)};Se.setBenchmarkOverlay=gt=>{W.benchmarkOverlay.set(gt==null?null:Array.isArray(gt)?gt:[gt])};Se.clearBenchmarkOverlay=()=>{W.benchmarkOverlay.set(null)};Se.focusSemanticResult=gt=>{W.highlight.set(gt==null?null:[gt])};Se.clearSemanticFocus=()=>{W.highlight.set(null)};Se.setDatasetPredicate=gt=>nV3SetDatasetPredicate(gt);Se.clearDatasetPredicate=()=>nV3SetDatasetPredicate([]);globalThis.dispatchEvent?.(new CustomEvent("nemotron-atlas-ready"))})();let K=pe({}),H=pe({}),J=pe("list"),Y=pe({}),Z=new Map;function he(Se,gt){return Z.has(Se)||Z.set(Se,new Set),Z.get(Se).add(gt),()=>{Z.get(Se)?.delete(gt)}}let me=pe(void 0);Ah(()=>{e.modelContext&&(dBe(e.modelContext,{context:W,set charts(Se){X(K,Se)},get charts(){return b(K)},set chartStates(Se){X(H,Se)},get chartStates(){return b(H)},set layout(Se){X(J,Se)},get layout(){return b(J)},set layoutStates(Se){X(Y,Se)},get layoutStates(){return b(Y)},get chartDelegates(){return Z},get container(){return h},get columnStyles(){return b(O)},set columnStyles(Se){X(O,Se)}}),ki(()=>{let Se=e.modelContext.connectionStatus?.subscribe(gt=>{X(me,gt)});return()=>{Se?.()}}))});async function te(){let Se=JSON.stringify(q());await navigator.clipboard.writeText(Se)}var le=LBe();cl("keydown",vk,z),Ve(le,"",{},{width:"100%",height:"100%"});var ve=M(le);let xe,ue;var Ee=M(ve),Le=M(Ee);{var qe=Se=>{var gt=MBe(),Kt=ke(gt),Rn=M(Kt);{var Ri=un=>{var Yn=SBe(),qr=M(Yn);M_(qr,{type:"search",placeholder:"Search...",className:"w-full max-w-[400px] ",get value(){return b(C)},set value(Vt){X(C,Vt,!0)}});var In=V(qr,2);{var Ii=Vt=>{{let Rr=L(()=>S.filter(ti=>ti!="neighbors").map(ti=>_[ti]));Zs(Vt,{get options(){return b(Rr)},get value(){return b(k)},onChange:ti=>X(k,ti,!0)})}};oe(In,Vt=>{S.filter(Rr=>Rr!="neighbors").length>1&&Vt(Ii)})}var rs=V(In,2);{var qt=Vt=>{var Rr=_Be();Ve(Rr,"",{},{height:"48em"});var ti=M(Rr);{var Aa=is=>{const tr=L(r);var xn=ot(),xr=ke(xn);bv(xr,()=>b(tr),Fi=>{oBe(Fi,{get items(){return b(tr).items},get label(){return b(tr).label},get highlight(){return b(tr).highlight},limit:a,onClick:async ao=>{W.highlight.set([ao.id])},onClose:$,get columnStyles(){return i()}})}),I(is,xn)},Xl=is=>{var tr=ot(),xn=ke(tr);{var xr=Fi=>{var ao=xBe(),Wl=M(ao);uBe(Wl,{get status(){return b(D)}}),F(ao),I(Fi,ao)};oe(xn,Fi=>{b(D)!=null&&Fi(xr)},!0)}I(is,tr)};oe(ti,is=>{r()!=null?is(Aa):is(Xl,!1)})}F(Rr),I(Vt,Rr)};oe(rs,Vt=>{b(A)&&Vt(qt)})}F(Yn),I(un,Yn)},Bn=un=>{var Yn=kBe();I(un,Yn)};oe(Rn,un=>{b(k).length>0?un(Ri):un(Bn,!1)})}F(Kt);var er=V(Kt,2),jt=M(er);GQe(jt,{get coordinator(){return e.coordinator},get filter(){return m},get table(){return e.data.table}});var jr=V(jt,2),Zl=M(jr);Zl.__click=Q;var yd=M(Zl);sd(yd,{class:"w-5 h-5"}),F(Zl);var vf=V(Zl,2);{var bd=un=>{Uw(un,{title:"Export Selection",button:(qr,In)=>{let Ii=()=>In?.().visible,rs=()=>In?.().toggle;var qt=CBe();qt.__click=function(...ti){rs()?.apply(this,ti)};let Vt;var Rr=M(qt);L3(Rr,{class:"w-5 h-5"}),F(qt),de(()=>Vt=Qt(qt,1,"rounded-md px-1.5 py-1.5 flex select-none items-center focus-visible:outline-2 outline-blue-600 -outline-offset-1",null,Vt,{"text-slate-400":!Ii(),"dark:text-slate-500":!Ii()})),I(qr,qt)},children:(qr,In)=>{var Ii=ABe(),rs=M(Ii),qt=M(rs);dk(qt,{get icon(){return L3},label:"Export Selection",title:"Export the selected points",class:"w-48",onClick:()=>e.onExportSelection(g(),b(p))});var Vt=V(qt,2);Zs(Vt,{label:"Format",get value(){return b(p)},onChange:Rr=>X(p,Rr,!0),options:[{value:"parquet",label:"Parquet"},{value:"jsonl",label:"JSONL"},{value:"json",label:"JSON"},{value:"csv",label:"CSV"}]}),F(rs),F(Ii),I(qr,Ii)},$$slots:{button:!0,default:!0}})};oe(vf,un=>{e.onExportSelection&&un(bd)})}F(jr),F(er);var zo=V(er,2),Ca=M(zo),ns=M(Ca);bv(ns,()=>b(J),un=>{var Yn=EBe(),qr=M(Yn);UQe(qr,{get context(){return W},get charts(){return b(K)},get chartStates(){return b(H)},get layout(){return b(J)},get layoutStates(){return b(Y)},onChartsChange:In=>X(K,In),onChartStatesChange:In=>X(H,In),onLayoutStatesChange:In=>X(Y,In)}),F(Yn),xc(3,Yn,()=>hae),I(un,Yn)}),F(Ca);var oo=V(Ca,2);{let un=L(()=>[{value:"list",icon:bke,title:"List layout"},{value:"dashboard",icon:gke,title:"Dashboard layout"}]);gT(oo,{get value(){return b(J)},onChange:Yn=>X(J,Yn),get options(){return b(un)}})}var oc=V(oo,2);{var wf=un=>{{let Yn=L(()=>n()=="dark"?Pke:Tke);Nu(un,{get icon(){return b(Yn)},title:"Toggle light / dark mode",onClick:()=>{LT(f,n()=="light"?"dark":"light")}})}};oe(oc,un=>{e.colorScheme==null&&un(wf)})}var cm=V(oc,2);Uw(cm,{get icon(){return t8},title:"Options",children:(un,Yn)=>{var qr=$Be(),In=M(qr);{var Ii=tr=>{var xn=TBe(),xr=V(ke(xn),2);WQe(xr,{get columns(){return b(y)},get styles(){return i()},onStylesChange:Fi=>{X(O,Fi)}}),I(tr,xn)};oe(In,tr=>{b(y).length>0&&tr(Ii)})}var rs=V(In,4),qt=M(rs);dk(qt,{get icon(){return eke},label:"Copy State",title:"Copy the current Embedding Atlas state as JSON to clipboard.",class:"w-48",onClick:te}),F(rs);var Vt=V(rs,2);{var Rr=tr=>{var xn=DBe(),xr=M(xn);dk(xr,{get icon(){return L3},label:"Export Application",title:"Download a self-contained static web application",class:"w-48",get onClick(){return e.onExportApplication}}),F(xn),I(tr,xn)};oe(Vt,tr=>{e.onExportApplication&&tr(Rr)})}var ti=V(Vt,2);{var Aa=tr=>{var xn=FBe(),xr=V(ke(xn),2),Fi=M(xr);{var ao=Uo=>{var ie=PBe();ws(),I(Uo,ie)},Wl=Uo=>{var ie=ot(),ye=ke(ie);{var Re=Ne=>{var Je=RBe();ws(),I(Ne,Je)},Qe=Ne=>{var Je=ot(),be=ke(Je);{var j=se=>{var we=IBe();ws(),I(se,we)};oe(be,se=>{(b(me)=="closed"||b(me)=="error")&&se(j)},!0)}I(Ne,Je)};oe(ye,Ne=>{b(me)=="connected"?Ne(Re):Ne(Qe,!1)},!0)}I(Uo,ie)};oe(Fi,Uo=>{b(me)=="connecting"?Uo(ao):Uo(Wl,!1)})}F(xr),I(tr,xn)};oe(ti,tr=>{b(me)&&tr(Aa)})}var Xl=V(ti,4),is=M(Xl);F(Xl),F(qr),de(()=>ut(is,`Embedding Atlas, ${xC}`)),I(un,qr)},$$slots:{default:!0}}),F(zo),I(Se,gt)};oe(Le,Se=>{b(d)&&Se(qe)})}F(Ee);var Fe=V(Ee,2),it=M(Fe);{var St=Se=>{jQe(Se,{get context(){return W},get layout(){return b(J)},get layoutStates(){return b(Y)},get charts(){return b(K)},get chartStates(){return b(H)},onChartsChange:gt=>X(K,gt),onChartStatesChange:gt=>X(H,gt),onLayoutStatesChange:gt=>X(Y,gt),registerChartDelegate:he})};oe(it,Se=>{b(d)&&Se(St)})}F(Fe),F(ve),F(le),lr(le,Se=>h=Se,()=>h),de(()=>{xe=Qt(ve,1,"w-full h-full flex flex-col text-slate-800 bg-slate-200 dark:text-slate-200 dark:bg-slate-800",null,xe,{dark:n()=="dark"}),ue=Ve(ve,"",ue,{"color-scheme":n()})}),I(t,le),Pe(),o()}dn(["click"]);var NBe=G('<div class="content-markdown svelte-zqu787"><!></div>'),QBe=G('<div class="flex items-start leading-5 text-slate-500 dark:text-slate-400"><div class="w-7 flex-none"><!></div> <div><!></div> <div class="flex-none font-mono text-sm"><!> <!></div></div>'),BBe=G('<div class="flex flex-col gap-1 p-4 w-[420px] border rounded-md bg-slate-50 border-slate-300 dark:bg-slate-900 dark:border-slate-700 select-text"></div>');function dK(t,e){De(e,!0);let n=Xe(e,"messages",19,()=>[]);var r=BBe();Ot(r,21,n,Wt,(i,s,o)=>{const a=L(()=>o==n().length-1);var l=QBe(),u=M(l),c=M(u);{var f=S=>{var _=ot(),k=ke(_);{var C=A=>{JX(A,{class:"text-red-400 w-5 h-5"})},D=A=>{n8(A,{class:"text-blue-500 w-5 h-5"})};oe(k,A=>{b(s).error?A(C):A(D,!1)})}I(S,_)};oe(c,S=>{(b(a)||b(s).error)&&S(f)})}F(u);var h=V(u,2);let d;var p=M(h);{var m=S=>{var _=NBe(),k=M(_);ix(k,()=>O_(b(s).text)),F(_),I(S,_)},g=S=>{var _=hh();de(()=>ut(_,b(s).text)),I(S,_)};oe(p,S=>{b(s).markdown?S(m):S(g,!1)})}F(h);var y=V(h,2),O=M(y);{var v=S=>{var _=hh();de(k=>ut(_,`${k??""}%`),[()=>b(s).progress.toFixed(0)]),I(S,_)};oe(O,S=>{b(s).progress!=null&&S(v)})}var w=V(O,2);{var x=S=>{var _=hh();de(()=>ut(_,b(s).progressText)),I(S,_)};oe(w,S=>{b(s).progressText!=null&&S(x)})}F(y),F(l),de(()=>d=Qt(h,1,"flex-1",null,d,{"text-red-400":b(s).error})),I(i,l)}),F(r),I(t,r),Pe()}const pK="deflate-raw";async function zBe(t){let n=new TextEncoder().encode(JSON.stringify(t)),r=await ree(n,pK);return aee(r)}async function UBe(t){let e=lee(t),n=await iee(e,pK),r=new TextDecoder;return JSON.parse(r.decode(n))}function mK(t){let e=t.lastIndexOf("?");if(e<0)return{};let n=new URLSearchParams(t.slice(e+1));return Object.fromEntries(n.entries())}function jBe(t,e){let n=t.lastIndexOf("?"),r=new URLSearchParams(e);r.sort();let i=r.toString();return i==""?n<0?t:t.slice(0,n):n<0?t+"?"+i:t.slice(0,n)+"?"+r.toString()}async function cv(t,e="object"){try{let n=mK(window.location.hash);return n[t]==null?void 0:e=="text"?n[t]:e=="object"?await UBe(n[t]):void 0}catch{return}}async function Lf(t,e,n="object"){let r;if(e!==void 0)if(n=="text"){if(typeof e!="string")return;r=e}else if(n=="object")r=await zBe(e);else return;let i=mK(window.location.hash);r===void 0?delete i[t]:i[t]=r,window.location.hash=jBe(window.location.hash,i)}var qBe=G("<div><!></div>"),VBe=G('<div class="fixed left-0 right-0 top-0 bottom-0"><!></div>');function ZBe(t,e){De(e,!0);const n=()=>hr(W_,"$systemColorScheme",r),[r,i]=Lo(),s=_x();let o=pe(!1),a=pe(!1),l=pe("Loading..."),u=pe(null),c=pe(null);Ah(async()=>{try{X(u,await cv("state")),X(l,"Initializing database..."),X(c,await e.dataSource.initializeCoordinator(s,"dataset",O=>{X(l,O,!0)})),X(o,!0)}catch(O){X(a,!0),X(l,O.message,!0);return}});async function f(O,v){e.dataSource.downloadSelection&&await e.dataSource.downloadSelection(O,v)}async function h(){e.dataSource.downloadArchive&&await e.dataSource.downloadArchive()}function d(O){mK(window.location.hash).state!=null&&Lf("state",{...O,predicate:void 0})}var p=VBe(),m=M(p);{var g=O=>{{let v=L(()=>({...b(c).data??{id:"id"},table:"dataset"})),w=L(()=>b(u)??b(c).initialState),x=L(()=>e.dataSource.downloadArchive?h:null),S=L(()=>e.dataSource.downloadSelection?f:null),_=L(()=>qC(d,200));hK(O,{get coordinator(){return s},get data(){return b(v)},get embeddingViewConfig(){return b(c).embeddingViewConfig},get embeddingViewLabels(){return b(c).embeddingViewLabels},get defaultChartsConfig(){return b(c).defaultChartsConfig},get chartTheme(){return b(c).chartTheme},get stylesheet(){return b(c).stylesheet},get initialState(){return b(w)},get modelContext(){return b(c).modelContext},get onExportApplication(){return b(x)},get onExportSelection(){return b(S)},get onStateChange(){return b(_)},get cache(){return e.dataSource.cache}})}},y=O=>{var v=qBe();let w;var x=M(v);{let S=L(()=>[{text:b(l),error:b(a)}]);dK(x,{get messages(){return b(S)}})}F(v),de(()=>w=Qt(v,1,"w-full h-full grid place-content-center select-none text-slate-800 bg-slate-200 dark:text-slate-200 dark:bg-slate-800",null,w,{dark:n()=="dark"})),I(O,v)};oe(m,O=>{b(o)&&b(c)!=null?O(g):O(y,!1)})}F(p),I(t,p),Pe(),i()}function fv(t,e){let n=document.createElement("a");n.href=URL.createObjectURL(new Blob([t],{type:"application/octet-stream"})),n.download=e,n.click()}const _C={json:{query:"(FORMAT JSON, ARRAY true)",extension:"json"},jsonl:{query:"(FORMAT JSON)",extension:"jsonl"},csv:{query:"(FORMAT CSV)",extension:"csv"},parquet:{query:"(FORMAT parquet)",extension:"parquet"}};function XBe(t,e,n,r){return e==null||e.length==0?Ze`COPY ${t} TO ${Ae(n)} ${_C[r].query}`:Ze`COPY (SELECT * FROM ${t} WHERE ${e}) TO ${Ae(n)} ${_C[r].query}`}function gK(t){return`selection-${Date.now()}.${_C[t].extension}`}async function yK(t,e,n,r){let i=await t.databaseConnector()?.getDuckDB(),s=gK(r);await i.registerEmptyFileBuffer(s);let o=XBe(e,n,s,r);await t.query(o.toString());let a=await i.copyFileToBuffer(s);return i.dropFile(s),[a,s]}class WBe{ws=null;endpoint;shouldReconnect=!0;reconnectAttempts=0;maxReconnectAttempts;reconnectDelay;maxReconnectDelay;reconnectTimeoutId=null;onMessage;onStatus;constructor(e,n){this.endpoint=e,this.maxReconnectAttempts=n.maxReconnectAttempts??10,this.reconnectDelay=n.initialReconnectDelay??1e3,this.maxReconnectDelay=n.maxReconnectDelay??3e4,this.onMessage=n.onMessage,this.onStatus=n.onStatus,this.connect()}connect(){if(this.shouldReconnect){this.onStatus?.("connecting");try{this.ws=new WebSocket(this.endpoint),this.ws.onopen=()=>{console.debug("WebSocket connected"),this.reconnectAttempts=0,this.onStatus?.("connected")},this.ws.onmessage=e=>{this.onMessage(e)},this.ws.onclose=e=>{console.debug("WebSocket closed:",e.code,e.reason),this.ws=null,this.shouldReconnect&&this.reconnectAttempts<this.maxReconnectAttempts?this.scheduleReconnect():this.reconnectAttempts>=this.maxReconnectAttempts&&(console.error("Max reconnection attempts reached, giving up"),this.onStatus?.("error"))},this.ws.onerror=e=>{console.error("WebSocket error:",e)}}catch(e){console.error("Failed to create WebSocket:",e),this.shouldReconnect&&this.reconnectAttempts<this.maxReconnectAttempts?this.scheduleReconnect():this.onStatus?.("error")}}}scheduleReconnect(){this.reconnectTimeoutId&&clearTimeout(this.reconnectTimeoutId),this.reconnectAttempts++;const e=Math.min(this.reconnectDelay*Math.pow(2,this.reconnectAttempts-1),this.maxReconnectDelay);console.debug(`Scheduling reconnection attempt ${this.reconnectAttempts} in ${e}ms`),this.reconnectTimeoutId=window.setTimeout(()=>{this.reconnectTimeoutId=null,this.connect()},e)}send(e){return this.ws?.readyState===WebSocket.OPEN?(this.ws.send(e),!0):!1}close(){this.shouldReconnect=!1,this.reconnectTimeoutId&&(clearTimeout(this.reconnectTimeoutId),this.reconnectTimeoutId=null),this.ws?.close(),this.onStatus?.("closed")}}class YBe{tools;toolsMap;ws;connectionStatus;constructor(e){this.tools=[],this.toolsMap=new Map,this.connectionStatus=Xi("connecting"),this.ws=new WBe(e,{onMessage:async n=>{try{const r=JSON.parse(n.data);if(r.control==="close"){this.ws.close();return}const i=r,s=await this.processRequest(i);this.ws.send(JSON.stringify(s))}catch(r){console.error("Error processing MCP request:",r)}},onStatus:n=>{this.connectionStatus.set(n)}})}close(){this.ws.close()}provideContext(e){this.tools=e.tools??[],this.toolsMap=new Map(this.tools.map(n=>[n.name,n]))}async processRequest(e){if(e.request instanceof Array){let n=[];for(let r of e.request)n.push(await this.processRPC(r));return{id:e.id,response:n}}else return{id:e.id,response:await this.processRPC(e.request)}}async processRPC(e){let n,r;try{n=await this.rpc(e.method,e.params??{})}catch(i){r={code:-32603,message:i.toString()}}return{jsonrpc:"2.0",id:e.id,result:n,error:r}}async rpc(e,n){switch(e){case"initialize":return await this.initialize(n);case"tools/list":return await this.toolsList(n);case"tools/call":return await this.toolsCall(n);default:throw new Error(`method ${e} is not implemented`)}}async initialize(e){return console.info("MCP Initialize",e.clientInfo),{protocolVersion:"2024-11-05",capabilities:{logging:{},prompts:{},resources:{},tools:{},tasks:{}},serverInfo:{name:"Embedding Atlas",title:"Embedding Atlas MCP Server",version:"1.0.0",description:"MCP server for the Embedding Atlas frontend",icons:[{src:"https://apple.github.io/embedding-atlas/favicon.svg",mimeType:"image/svg+xml",sizes:["any"]}],websiteUrl:"https://apple.github.io/embedding-atlas"},instructions:"Optional instructions for the client"}}async toolsList(e){return{tools:this.tools.map(r=>({name:r.name,title:r.title,description:r.description,inputSchema:r.inputSchema,outputSchema:r.outputSchema}))}}async toolsCall(e){let n=this.toolsMap.get(e.name);if(n==null)throw new Error("tool not found");try{return await n.execute(e.arguments,void 0)}catch(r){return{content:[{type:"text",text:"Exception: "+r.toString()}],isError:!0}}}}function jm(t,e){return e.startsWith(".")&&(e=e.slice(1)),t.endsWith("/")&&e.startsWith("/")?t+e.slice(1):!t.endsWith("/")&&!e.startsWith("/")?t+"/"+e:t+e}class GBe{serverUrl;downloadArchive=void 0;downloadSelection=void 0;constructor(e){if(e.startsWith("http"))this.serverUrl=e;else{let n=window.location.origin+window.location.pathname;n=n.replace(/\/[^/]*$/,"/"),this.serverUrl=jm(n,e)}}async initializeCoordinator(e,n,r){let i=await this.metadata();r("Initializing database...");let s=i.database?.type??"wasm";if(await yH(e,s,i.database?.uri??jm(this.serverUrl,"query")),i.database?.load){r("Loading data...");let o=i.database?.datasetUrl??jm(this.serverUrl,"dataset.parquet");await e.exec(`
|
| 1527 |
CREATE OR REPLACE TABLE ${n} AS (
|
| 1528 |
SELECT *,
|
| 1529 |
Collection_memberships AS Collections
|
| 1530 |
FROM read_parquet(${Ae(o)})
|
| 1531 |
);
|
| 1532 |
+
`)}return i.isStatic||(this.downloadArchive=async()=>{let a=await(await this.fetchEndpoint("archive.zip")).arrayBuffer();fv(a,"embedding-atlas.zip")}),s=="wasm"?this.downloadSelection=async(o,a)=>{let[l,u]=await yK(e,n,o,a);fv(l,u)}:i.isStatic||(this.downloadSelection=async(o,a)=>{let l=gK(a),c=await(await this.fetchEndpoint("selection",{method:"POST",body:JSON.stringify({predicate:o,format:a})})).arrayBuffer();fv(c,l)}),i.mcp&&i.mcp.type=="websocket"&&(i.props.modelContext=new YBe(jm(this.serverUrl,"mcp_websocket"))),i.props}async fetchEndpoint(e,n){let r=await fetch(jm(this.serverUrl,e),n);if(r.status!=200)throw new Error("ERROR FETCH");return r}async metadata(){try{return await this.fetchEndpoint("metadata.json?v=sidebar-field-charts-2").then(e=>e.json())}catch{throw new Error("Network Error: Failed to fetch dataset metadata")}}async cacheGet(e){try{return await this.fetchEndpoint("cache/"+e).then(n=>n.json())}catch{return null}}async cacheSet(e,n){try{await this.fetchEndpoint("cache/"+e,{method:"POST",body:JSON.stringify(n)})}catch{}}cache={get:e=>this.cacheGet(e),set:(e,n)=>this.cacheSet(e,n)}}function HBe(t,e){De(e,!1);let n="./data/",r=new GBe(n);BC(),ZBe(t,{get dataSource(){return r}}),Pe()}var KBe=G('<button><div class="text-center space-y-2"><p class="text-slate-500 dark:text-slate-500"> </p> <p class="text-sm text-slate-400 dark:text-slate-600">Accepted file types: JSON, CSV, Parquet</p></div> <input type="file" class="hidden"/></button>');function JBe(t,e){De(e,!0);let n=Xe(e,"multiple",3,!1),r=pe(!1),i;function s(m){m.preventDefault(),X(r,!0)}function o(){X(r,!1)}function a(m){if(m.preventDefault(),X(r,!1),m.dataTransfer.files){let g=Array.from(m.dataTransfer.files);(n()||g.length==1)&&g.length>0&&g.every(u)&&e.onUpload(g)}}function l(m){let g=Array.from(m.target.files);(n()||g.length==1)&&g.length>0&&g.every(u)&&e.onUpload(g)}function u(m){if(e.extensions==null)return!0;for(let g of e.extensions)if(m.name.toLowerCase().endsWith(g.toLowerCase()))return!0;return!1}var c=KBe();c.__click=()=>{i.click()};var f=M(c),h=M(f),d=M(h,!0);F(h),ws(2),F(f);var p=V(f,2);p.__change=l,lr(p,m=>i=m,()=>i),F(c),de(m=>{Qt(c,1,`flex flex-col items-center w-full justify-center py-20 border-2 border-dashed rounded-md transition-all
|
| 1533 |
${b(r)?"bg-slate-50 border-slate-500 dark:bg-slate-900 dark:border-slate-500":"bg-slate-50 border-slate-300 dark:bg-slate-900 dark:border-slate-700"}`),ut(d,b(r)?"Drop your files here":"Drag & drop files here or click to select"),ne(p,"accept",m),p.multiple=n()},[()=>e.extensions?.join(",")]),cl("dragover",c,s),cl("dragleave",c,o),cl("drop",c,a),I(t,c),Pe()}dn(["click","change"]);var eze=G('<button class="px-2 py-1 text-left rounded-md text-slate-600 dark:text-slate-400 hover:bg-slate-200 dark:hover:bg-slate-700"> </button>'),tze=G('<ul class="absolute mt-1 w-full rounded-md shadow-md p-1 z-10 flex flex-col bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700"></ul>'),nze=G('<div><input type="text" class="form-input rounded-md py-1 bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 w-full"/> <!></div>');function G$(t,e){De(e,!0);let n=Xe(e,"value",3,""),r=Xe(e,"options",19,()=>[]),i,s,o=pe(!1),a=L(()=>n()!=null&&r()!=null?r().filter(p=>p.toLowerCase().includes(n().toLowerCase())):r()??[]);function l(p){e.onChange?.(p)}function u(p){l(p),X(o,!1)}var c=nze(),f=M(c);ox(f),f.__change=()=>l(i.value??""),f.__input=()=>l(i.value??""),lr(f,p=>i=p,()=>i);var h=V(f,2);{var d=p=>{var m=tze();Ot(m,20,()=>b(a),g=>g,(g,y)=>{var O=eze();O.__click=()=>u(y);var v=M(O,!0);F(O),de(()=>ut(v,y)),I(g,O)}),F(m),I(p,m)};oe(h,p=>{b(o)&&b(a).length>0&&p(d)})}F(c),lr(c,p=>s=p,()=>s),de(()=>{Qt(c,1,`relative ${e.className??""??""}`),ne(f,"placeholder",e.placeholder),KM(f,n())}),cl("focus",f,()=>X(o,!0)),cl("blur",f,p=>{p.relatedTarget&&p.relatedTarget instanceof Node&&s.contains(p.relatedTarget)||X(o,!1)}),I(t,c),Pe()}dn(["change","input","click"]);var rze=G('<div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">X</div> <!></div> <div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Y</div> <!></div> <div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Neighbors</div> <!></div> <p class="text-sm text-slate-400 dark:text-slate-600">Neighbors column should contain pre-computed nearest neighbors in format: <code></code>. IDs should be zero-based row indices.</p>',1),ize=G(`<div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Text</div> <!></div> <div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Model</div> <!></div> <p class="text-sm text-slate-400 dark:text-slate-600">Computing the embedding and 2D projection in browser may take a while. The model will be loaded with
|
| 1534 |
Transformers.js.</p>`,1),sze=G(`<div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Image</div> <!></div> <div class="w-full flex flex-row items-center"><div class="w-[6rem] dark:text-slate-400">Model</div> <!></div> <p class="text-sm text-slate-400 dark:text-slate-600">Computing the embedding and 2D projection in browser may take a while. The model will be loaded with
|
| 1535 |
Transformers.js.</p>`,1),oze=G(`<div class="flex flex-col p-4 w-[40rem] border rounded-md bg-slate-50 border-slate-300 dark:bg-slate-900 dark:border-slate-700"><div class="flex flex-col gap-2 pb-4"><h2 class="text-slate-500 dark:text-slate-500">Search and Tooltip (optional)</h2> <p class="text-sm text-slate-400 dark:text-slate-600">The selected column, if any, will be used for full-text search and tooltips. Choose a column with freeform text,
|
data/metadata.json
CHANGED
|
@@ -152,6 +152,42 @@
|
|
| 152 |
"super_v3",
|
| 153 |
"nano_v3"
|
| 154 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 155 |
}
|
| 156 |
}
|
| 157 |
},
|
|
|
|
| 152 |
"super_v3",
|
| 153 |
"nano_v3"
|
| 154 |
]
|
| 155 |
+
},
|
| 156 |
+
"has_tools": {
|
| 157 |
+
"type": "count-plot",
|
| 158 |
+
"title": "has_tools",
|
| 159 |
+
"data": {
|
| 160 |
+
"field": "has_tools"
|
| 161 |
+
},
|
| 162 |
+
"limit": 20,
|
| 163 |
+
"labels": "#/#"
|
| 164 |
+
},
|
| 165 |
+
"num_turns": {
|
| 166 |
+
"type": "count-plot",
|
| 167 |
+
"title": "num_turns",
|
| 168 |
+
"data": {
|
| 169 |
+
"field": "num_turns"
|
| 170 |
+
},
|
| 171 |
+
"limit": 100,
|
| 172 |
+
"labels": "#/#"
|
| 173 |
+
},
|
| 174 |
+
"num_tool_calls": {
|
| 175 |
+
"type": "count-plot",
|
| 176 |
+
"title": "num_tool_calls",
|
| 177 |
+
"data": {
|
| 178 |
+
"field": "num_tool_calls"
|
| 179 |
+
},
|
| 180 |
+
"limit": 100,
|
| 181 |
+
"labels": "#/#"
|
| 182 |
+
},
|
| 183 |
+
"pass_rate": {
|
| 184 |
+
"type": "count-plot",
|
| 185 |
+
"title": "pass_rate",
|
| 186 |
+
"data": {
|
| 187 |
+
"field": "pass_rate"
|
| 188 |
+
},
|
| 189 |
+
"limit": 100,
|
| 190 |
+
"labels": "#/#"
|
| 191 |
}
|
| 192 |
}
|
| 193 |
},
|
index.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
| 10 |
overscroll-behavior-x: none;
|
| 11 |
}
|
| 12 |
</style>
|
| 13 |
-
<script type="module" crossorigin src="./assets/index-7BQiBOoY.js?v=
|
| 14 |
<link rel="stylesheet" crossorigin href="./assets/index-B4LpG193.css">
|
| 15 |
<link rel="stylesheet" href="./search-panel.css">
|
| 16 |
<link rel="stylesheet" href="./volume-bar.css">
|
|
|
|
| 10 |
overscroll-behavior-x: none;
|
| 11 |
}
|
| 12 |
</style>
|
| 13 |
+
<script type="module" crossorigin src="./assets/index-7BQiBOoY.js?v=sidebar-field-charts-2"></script>
|
| 14 |
<link rel="stylesheet" crossorigin href="./assets/index-B4LpG193.css">
|
| 15 |
<link rel="stylesheet" href="./search-panel.css">
|
| 16 |
<link rel="stylesheet" href="./volume-bar.css">
|