1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DataExplorerTab-DfANn7Ex.js","assets/index-CB1LRsvg.js","assets/index-Clqe0o2k.css","assets/IconSearch-CqQSV7iv.js","assets/IconTable-uuuZ8vFo.js","assets/IconDatabase-BZlekyNS.js","assets/IconChevronRight-BKY96mDx.js","assets/IconArrowLeft-Ds_130vQ.js","assets/IconEye-CL2S3lqC.js","assets/use-clipboard-Dyb8n21I.js","assets/IconFilter-HeDMfmcN.js","assets/IconPencil-oMykwAVz.js","assets/IconTrash-B56plgcD.js","assets/StatusText-gwUfW1V-.js","assets/Table-D4aHVX52.js","assets/IconEye-S3kMCBRY.css","assets/Badge-CvorhVBt.js","assets/formatAbbreviate-BjreiDFX.js","assets/Skeleton-DixNWO5N.js","assets/SimpleGrid-C5deGO61.js","assets/Card-DwzWyE8m.js","assets/papaparse.min-BAKOmby7.js","assets/SqlEditor-CSeRtODA.js","assets/IconChevronUp-6rSXQcvc.js","assets/IconPlayerPlay-PRc304Xn.js","assets/index-CPX41pWP.js","assets/index-Vcq4gwWv.js","assets/index-B9chgqgf.js","assets/Code-C0lwIupQ.js"])))=>i.map(i=>d[i]); 2import{aB as Di,r as s,az as Zt,j as n,aF as ha,p as Fn,S as ue,A as Lt,G as Y,T as O,B as ke,w as va,e as pt,E as je,i as Ai,h as $t,H as Ln,av as Jt,M as Pt,aw as Ei,q as qi,K as jo,a9 as Ut,z as Gt,b as Jn,g as Et,a0 as ba,a1 as cn,aG as $n,x as Ve,aA as ko,a2 as lt,b1 as La,C as qt,_ as Mn,bv as Mt,ag as Co,aQ as So,ab as ya,aq as zo,aa as Ti,ac as Ri,bi as _o,bw as Do,ad as Ao,an as Eo,bg as qo,bx as To,by as Ro,bz as Io,o as Ot,a7 as Oo,R as Po,v as Fo,V as Lo,c as ra,ah as $o,f as Mo,k as No,a as Bo,N as $a}from"./index-CB1LRsvg.js";import{E as Ho}from"./EditorHeader-e9HD8M3q.js";import{s as Wo,m as Ko}from"./editSeed-YpqaCgHu.js";import{s as Ma}from"./useVisualization-C3neUNqV.js";import{c as Uo}from"./useDecks-Re5MFzij.js";import{u as Ii,a as Oi,I as Vt}from"./IconTable-uuuZ8vFo.js";import{g as Go,b as Qo,c as Jo,d as dt,M as Vo,h as Yo,i as Pi,j as yt,k as wa,l as pn,s as Xo,f as ht,u as la,D as Fi,n as _n,o as xt,p as Wt,q as Vn,r as Na,t as xn,v as Ba,w as Ha,x as Wa,y as Zo,z as es,a as ts,C as ns,A as as,I as Ka,B as is,H as Li,E as os}from"./IconEye-CL2S3lqC.js";import{I as ja}from"./IconChevronRight-BKY96mDx.js";import{I as Ft}from"./IconDatabase-BZlekyNS.js";import{I as Dn,T as ss}from"./IconCode-0PJYF6Gd.js";import{C as Qt,a as rs,s as ls,I as An}from"./connectors-B-P5Haek.js";import{I as cs}from"./IconInfoCircle-CGxJ5qpI.js";import{a as ps,I as us,S as ds,u as Ua}from"./useDatasources-BylBfLsa.js";import{B as un}from"./Badge-CvorhVBt.js";import{S as $i}from"./SegmentedControl-B2vw4mHc.js";import{I as ms}from"./IconSearch-CqQSV7iv.js";import{A as ka}from"./AddDatasourceButton-BLNHQZxN.js";import{I as fs}from"./IconAlertCircle-BJepXZla.js";import{I as gs}from"./IconChevronUp-6rSXQcvc.js";import{T as Yt}from"./ThemeIcon-DUJfKgY0.js";import{E as xs}from"./EmptyState-DqWHbZL6.js";import{C as Ca}from"./Card-DwzWyE8m.js";import{B as hs}from"./Breadcrumbs-Jo-mBNaQ.js";import{I as vs}from"./IconPhoto-DUZWNaK7.js";import{I as ca}from"./IconRocket-HoF6n8CV.js";import{I as bs}from"./IconUpload-A3Bp_SVN.js";import{f as ys}from"./formatAbbreviate-BjreiDFX.js";import{a as Mi}from"./layout-2mrj5SBU.js";import{S as ws}from"./SimpleGrid-C5deGO61.js";import{I as js}from"./IconTrash-B56plgcD.js";import{u as ks}from"./usePageTitle-PP7G01cs.js";import"./IconArrowLeft-Ds_130vQ.js";import"./use-clipboard-Dyb8n21I.js";import"./IconFilter-HeDMfmcN.js";import"./IconPencil-oMykwAVz.js";import"./StatusText-gwUfW1V-.js";import"./Table-D4aHVX52.js";import"./zoom-6xNB1pn5.js";import"./index-DkGvVJj5.js";import"./color-CArKP79_.js";function Ga(e){return typeof e!="string"?"":e.charAt(0).toUpperCase()+e.slice(1)}var Yn={exports:{}},Xn,Qa;function Cs(){if(Qa)return Xn;Qa=1;var e="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";return Xn=e,Xn}var Zn,Ja;function Ss(){if(Ja)return Zn;Ja=1;var e=Cs();function t(){}function a(){}return a.resetWarningCache=t,Zn=function(){function i(l,c,u,m,p,d){if(d!==e){var v=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw v.name="Invariant Violation",v}}i.isRequired=i;function o(){return i}var r={array:i,bigint:i,bool:i,func:i,number:i,object:i,string:i,symbol:i,any:i,arrayOf:o,element:i,elementType:i,instanceOf:o,node:i,objectOf:o,oneOf:o,oneOfType:o,shape:o,exact:o,checkPropTypes:a,resetWarningCache:t};return r.PropTypes=r,r},Zn}var Va;function zs(){return Va||(Va=1,Yn.exports=Ss()()),Yn.exports}var _s=zs();const Pe=Di(_s),pa="datasource_schema_cache",Ds=60*1e3;function As(e){try{const t=localStorage.getItem(`${pa}_${e}`);if(!t)return null;const a=JSON.parse(t);return Date.now()-a.timestamp>Ds?(localStorage.removeItem(`${pa}_${e}`),null):a}catch{return null}}function Ya(e,t,a){try{localStorage.setItem(`${pa}_${e}`,JSON.stringify({timestamp:Date.now(),data:t,relationships:a}))}catch{}}function Es(e){const t=e.tables;return t!==void 0&&typeof t=="object"&&!Array.isArray(t)&&!("columns"in t)}function qs(e){return Es(e)?{tables:e.tables,relationships:e.relationships??[]}:{tables:e,relationships:[]}}function En(e){const[t,a]=s.useState(null),[i,o]=s.useState([]),[r,l]=s.useState(null),[c,u]=s.useState(!1),{callTool:m,state:p}=Zt(),d=s.useCallback(async C=>
2{if(e){if(!C){const k=As(e);if(k){a(k.data),o(k.relationships),l(new Date(k.timestamp));return}}if(p==="ready"){u(!0);try{const k=await m("introspect_datasource",{database_id:e,force:C}),{tables:E,relationships:q}=qs(k.structuredContent);a(E),o(q),l(new Date),Ya(e,E,q)}finally{u(!1)}}}},[m,e,p]);s.useEffect(()=>{a(null),o([]),l(null),e&&d(!1)},[e,d]);const v=s.useCallback(()=>d(!0),[d]),f=s.useCallback((C,k)=>{k.length&&a(E=>{const q=E==null?void 0:E[C];if(!q||q.columns.length)return E;const _={...E,[C]:{...q,columns:k}};return e&&Ya(e,_,i),_})},[e,i]);return{schema:t,relationships:i,loadedAt:r,loading:c,refresh:v,patchTableColumns:f}}const Ni=s.createContext(null);function Ts({value:e,children:t}){return n.jsx(Ni.Provider,{value:e,children:t})}function Sa(){const e=ha("(max-width: 600px)")??!1,t=s.useContext(Ni);return t?t.narrow:e}function Rs(e){const t=Math.floor((Date.now()-e.getTime())/1e3);if(t<60)return"just now";const a=Math.floor(t/60);if(a<60)return`${a}m ago`;const i=Math.floor(a/60);return i<24?`${i}h ago`:`${Math.floor(i/24)}d ago`}function Is({datasource:e,apiBase:t,schema:a,relationships:i,schemaLoadedAt:o,schemaLoading:r,onRefreshSchema:l,collapsed:c,onToggleCollapsed:u,navigation:m}){var Q;const p=c!==void 0,d=ha("(max-width: 1280px)"),v=Sa(),f=typeof window<"u"&&window.innerWidth<=1280,[C,k]=s.useState(f),E=s.useRef(!1);s.useEffect(()=>{p||d!==void 0&&(E.current||k(d))},[p,d]);const q=c??C,_=s.useCallback(L=>{E.current=!0,u?u(L):k(L)},[u]),[T,g]=s.useState(!1),{workspace:M}=Fn(),h=Ii(M??e.workspace_id??null),j=typeof((Q=e.connection)==null?void 0:Q.summary)=="string"?e.connection.summary:"",{summary:U}=ps(e.id,t,j),F=s.useMemo(()=>Qt[e.type],[e.type]),{tableCount:H,columnCount:de}=s.useMemo(()=>{if(!a)return{tableCount:0,columnCount:0};const L=Object.keys(a),y=L.reduce((D,w)=>{var R,P;return D+(((P=(R=a[w])==null?void 0:R.columns)==null?void 0:P.length)??0)},0);return{tableCount:L.length,columnCount:y}},[a]),re=F!=null&&F.icon?F.icon:null;return q?n.jsx(ue,{w:36,miw:36,h:"100%",align:"center",py:"xs",style:{borderLeft:"1px solid var(--mantine-color-default-border)"},children:n.jsx(Lt,{variant:"subtle",onClick:()=>_(!1),"aria-label":"Show datasource details","aria-expanded":!1,children:n.jsx(cs,{size:16,"aria-hidden":!0})})}):n.jsxs(ue,{w:300,miw:v?void 0:300,maw:v?"100%":void 0,h:"100%",gap:"md",p:"md",bg:"var(--mantine-color-body)",style:{borderLeft:"1px solid var(--mantine-color-default-border)",overflowY:"auto",...v?{position:"absolute",top:0,right:0,bottom:0,zIndex:5,boxShadow:"-4px 0 12px rgba(0, 0, 0, 0.12)"}:{}},children:[n.jsxs(Y,{justify:"space-between",wrap:"nowrap",gap:"xs",children:[n.jsx(Lt,{variant:"subtle",onClick:()=>_(!0),"aria-label":"Collapse datasource details","aria-expanded":!0,children:n.jsx(ja,{size:16,"aria-hidden":!0})}),n.jsxs(ue,{gap:2,miw:0,style:{flex:1,textAlign:"right"},children:[n.jsx(O,{fw:700,size:"md",truncate:!0,children:e.name??"Untitled datasource"}),F&&n.jsx(Y,{gap:4,justify:"flex-end",wrap:"nowrap",children:n.jsx(un,{color:F.color,variant:"light",size:"sm",leftSection:re?n.jsx(re,{size:12}):null,children:F.label})})]})]}),m,n.jsxs(ue,{gap:4,children:[n.jsxs(Y,{gap:"xs",wrap:"nowrap",children:[n.jsx(ke,{size:"xs",variant:"light",color:"blue",leftSection:n.jsx(Oi,{size:14,"aria-hidden":!0}),onClick:l,loading:r,children:"Refresh"}),n.jsx(ke,{size:"xs",variant:"light",color:"blue",leftSection:n.jsx(us,{size:14,"aria-hidden":!0}),onClick:()=>g(!0),disabled:!a,children:"Schema"})]}),a&&n.jsxs(O,{size:"xs",c:"dimmed",children:[H," table",H===1?"":"s"," · ",de," ","column",de===1?"":"s"]}),o&&n.jsxs(O,{size:"xs",c:"dimmed",children:["Schema introspected ",Rs(o)]})]}),h&&n.jsxs(ue,{gap:4,children:[n.jsx(O,{className:"app-type-section-label",c:"dimmed",children:"Overview"}),U?n.jsx(O,{size:"sm",style:{whiteSpace:"pre-wrap"},children:U}):n.jsx(O,{size:"sm",c:"dimmed",children:"No overview available for this datasource."})]}),n.jsx(va,{size:"auto",opened:T,onClose:()=>g(!1),title:"Schema Diagram",children:a&&n.jsx(ds,{schema:a,relationships:i})})]})}const Xa="Choose which datasource to show";function Os({options:e,value:t,onChange:a,narrow:i}){return n.jsxs(Y,{px:"lg",pt:"md",gap:"xs",align:"center",wrap:i?"wrap":"nowrap",children:[n.jsx(O,{size:"xs",c:"dimmed",children:"Showing"}),i?n.jsx(pt,{size:"xs",flex:1,miw:0,maw:"100%","aria-label":Xa,comboboxProps:{withinPortal:!0},allowDeselect:!1,value:t,onChange:o=>o!==null&&a(o),data:e}):n.jsx(je,{miw:0,maw:"100%",style:{overflowX:"auto"},children:n.jsx($i,{size:"xs","aria-label":Xa,value:t,onChange:a,data:e})})]})}const Ps=300,Fs=36,Ls=600,$s=1280;function Ms({present:e,collapsed:t}){return e?t?Fs:Ps:0}function Ns(e,t){return Math.max(0,e-Ms(t))}function Bs(e,t){return Ns(e,t)<=Ls}function Za(e){return e<=$s}function Hs(e){const[t,a]=s.useState(()=>typeof window<"u"&&Za(window.innerWidth)),i=s.useRef(!1),o=s.useCallback(r=>
2{i.current=!0,a(r)},[]);return s.useEffect(()=>{e!==void 0&&(i.current||a(Za(e)))},[e]),{collapsed:t,toggle:o}}function ei(){const e=s.useRef(null),[t,a]=s.useState({width:void 0,height:void 0});return s.useLayoutEffect(()=>{const i=e.current;if(!i)return;const o=(l,c)=>{a(u=>u.width===l&&u.height===c?u:{width:l,height:c})};if(o(Math.round(i.clientWidth),Math.round(i.clientHeight)),typeof ResizeObserver>"u")return;const r=new ResizeObserver(l=>{var u;const c=(u=l[0])==null?void 0:u.contentRect;o(Math.round((c==null?void 0:c.width)??i.clientWidth),Math.round((c==null?void 0:c.height)??i.clientHeight))});return r.observe(i),()=>r.disconnect()},[]),{ref:e,width:t.width,height:t.height}}function za(e){if(e<6e4)return`${(e/1e3).toFixed(1)}s`;const t=Math.floor(e/6e4),a=Math.floor(e%6e4/1e3);return`${t}m ${a}s`}function Bi({steps:e,status:t,onCancel:a,title:i="Running query"}){const o=s.useRef({}),r=s.useRef({}),[l,c]=s.useState(()=>Date.now());return s.useEffect(()=>{for(const{key:u}of e){const m=t[u];m==="running"?o.current[u]===void 0&&(o.current[u]=Date.now(),delete r.current[u]):m==="done"?o.current[u]!==void 0&&r.current[u]===void 0&&(r.current[u]=Date.now()):(delete o.current[u],delete r.current[u])}},[t,e]),s.useEffect(()=>{if(!e.some(({key:p})=>t[p]==="running"))return;c(Date.now());const m=window.setInterval(()=>c(Date.now()),250);return()=>window.clearInterval(m)},[t,e]),n.jsx(va,{size:"auto",opened:!0,onClose:a,closeOnClickOutside:!1,closeOnEscape:!1,title:i,children:e.map(({key:u,label:m})=>{const p=t[u],d=o.current[u],v=r.current[u],f=d!==void 0?(v??l)-d:null;return n.jsxs(je,{style:{display:"flex",alignItems:"center",gap:8},w:"100%",children:[n.jsx(je,{w:16,h:16,style:{display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:p==="done"?n.jsx(Ai,{size:16,color:"var(--mantine-color-teal-6)","aria-hidden":!0}):p==="running"?n.jsx($t,{size:14,color:"blue"}):n.jsx(Go,{size:16,color:"var(--sd-color-text-muted)","aria-hidden":!0})}),n.jsx(O,{size:"sm",c:p==="pending"?"dimmed":p==="done"?"teal":"blue",flex:"1 1 auto",children:m}),n.jsx(O,{size:"xs",c:"dimmed",ff:"monospace",ml:"xs",w:40,ta:"right",children:f!==null?za(f):""})]},u)})})}/** 3 * @license @tabler/icons-react v3.41.1 - MIT 4 * 5 * This source code is licensed under the MIT license. 6 * See the LICENSE file in the root directory of this source tree. 7 */const Ws=[["path",{d:"M8 9h8",key:"svg-0"}],["path",{d:"M8 13h6",key:"svg-1"}],["path",{d:"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12",key:"svg-2"}]],Ks=Ln("outline","message","Message",Ws);/** 8 * @license @tabler/icons-react v3.41.1 - MIT 9 * 10 * This source code is licensed under the MIT license. 11 * See the LICENSE file in the root directory of this source tree. 12 */const Us=[["path",{d:"M8.56 3.69a9 9 0 0 0 -2.92 1.95",key:"svg-0"}],["path",{d:"M3.69 8.56a9 9 0 0 0 -.69 3.44",key:"svg-1"}],["path",{d:"M3.69 15.44a9 9 0 0 0 1.95 2.92",key:"svg-2"}],["path",{d:"M8.56 20.31a9 9 0 0 0 3.44 .69",key:"svg-3"}],["path",{d:"M15.44 20.31a9 9 0 0 0 2.92 -1.95",key:"svg-4"}],["path",{d:"M20.31 15.44a9 9 0 0 0 .69 -3.44",key:"svg-5"}],["path",{d:"M20.31 8.56a9 9 0 0 0 -1.95 -2.92",key:"svg-6"}],["path",{d:"M15.44 3.69a9 9 0 0 0 -3.44 -.69",key:"svg-7"}]],Gs=Ln("outline","circle-dashed","CircleDashed",Us),Qs=1e3;function Js({status:e}){return e==="done"?n.jsx(Ai,{size:14,color:"var(--mantine-color-teal-6)","aria-hidden":!0}):e==="running"?n.jsx($t,{size:12,color:"blue"}):e==="failed"?n.jsx(fs,{size:14,color:"var(--mantine-color-red-6)","aria-hidden":!0}):n.jsx(Gs,{size:14,color:"var(--sd-color-text-muted)",style:{opacity:e==="skipped"?.5:1},"aria-hidden":!0})}function ti({steps:e,startedAt:t,finishedAt:a,onCancel:i,defaultExpanded:o,error:r,onRetry:l}){const c=!a,u=o??(c||!!r),[m,p]=s.useState(u),[d,v]=s.useState(()=>Date.now());s.useEffect(()=>{if(!c)return;v(Date.now());const j=window.setInterval(()=>v(Date.now()),250);return()=>window.clearInterval(j)},[c]),s.useEffect(()=>{p(u)},[u]);const f=(a??d)-t,C=Math.max(1,Math.round(f/1e3)),k=e.filter(j=>j.status!=="skipped"),E=e.find(j=>j.status==="running"),q=e.find(j=>j.status==="failed"),_=c?`${(E==null?void 0:E.label)??"Working"}â¦`:r?`Stopped after ${C} ${C===1?"second":"seconds"}${q?` while ${q.label.charAt(0).toLowerCase()}${q.label.slice(1)}`:""}`:`Thought for ${C} ${C===1?"second":"seconds"} · ${k.length} ${k.length===1?"step":"steps"}`,T=c?E?`${E.label}â¦`:"":q&&r?`${q.label} failed. ${r}`:_,[g,M]=s.useState(T),h=s.useRef(0);return s.useEffect(()=>{if(T===g)return;const j=Math.max(0,Qs-(Date.now()-h.current)),U=window.setTimeout(()=>{h.current=Date.now(),M(T)},j);return()=>window.clearTimeout(U)},[T,g]),n.jsxs(ue,{gap:4,role:"group","aria-label":"AI agent trace","data-testid":"agent-trace",children:[n.jsx("div",{className:"sr-only",role:"status","aria-live":"polite",children:g}),n.jsxs(Y,{gap:"xs",wrap:"nowrap",align:"center",children:[n.jsxs(Jt,{onClick:()=>p(j=>!j),"aria-expanded":m,style:{display:"flex",alignItems:"center",gap:6,minWidth:0},children:[n.jsx(Pt,{size:14,color:"var(--mantine-color-blue-6)","aria-hidden":!0}),n.jsx(O,{size:"sm",fw:500,c:c?"blue":r?"red":"dimmed",truncate:!0,children:_}),m?n.jsx(gs,{size:14,color:"var(--sd-color-text-muted)","aria-hidden":!0}):n.jsx(Ei,{size:14,color:"var(--sd-color-text-muted)","aria-hidden":!0})]}),c&&n.jsx(O,{size:"xs",c:"dimmed",ff:"monospace","aria-hidden":!0,
12children:za(f)}),c&&i&&n.jsx(ke,{variant:"subtle",color:"gray",size:"compact-xs",ml:"auto",onClick:i,children:"Cancel"})]}),m&&n.jsxs(ue,{gap:2,pl:20,role:"log","aria-label":"Agent steps",children:[k.map(j=>n.jsxs(Y,{gap:8,wrap:"nowrap",align:"center",children:[n.jsx(je,{w:14,h:14,style:{display:"flex",alignItems:"center",flexShrink:0},children:n.jsx(Js,{status:j.status})}),n.jsx(O,{size:"sm",c:j.status==="pending"?"dimmed":j.status==="running"?"blue":j.status==="failed"?"red":void 0,children:j.label}),j.detail&&n.jsx(O,{size:"xs",c:"dimmed",truncate:!0,style:{minWidth:0},children:j.detail})]},j.key)),r&&n.jsxs(Y,{gap:"sm",mt:4,align:"center",wrap:"nowrap",children:[n.jsx(O,{size:"sm",c:"red",role:"alert",style:{minWidth:0},children:r}),l&&n.jsx(ke,{variant:"light",color:"blue",size:"compact-xs",onClick:l,style:{flexShrink:0},children:"Try again"})]})]})]})}const Vs=/int|numeric|decimal|float|double|real|money|number|bigint|smallint/i,Ys=/date|time|timestamp/i,Xs=/char|text|string|varchar|enum|bool/i,ni=/(^|_)(id|uuid|key|hash|code)$/i;function Sn(e){return e.replace(/[_.-]+/g," ").replace(/\s+/g," ").trim().toLowerCase()}function Zs(e){const t=e.split(".").pop()??e;return Sn(t)}function er(e){const t=e.filter(o=>Vs.test(o.data_type)&&!ni.test(o.column_name)&&!o.is_foreign_key),a=e.filter(o=>Ys.test(o.data_type)),i=e.filter(o=>Xs.test(o.data_type)&&!ni.test(o.column_name)&&!o.is_foreign_key);return{measures:t,dates:a,categories:i}}function tr(e,t=3){if(!e)return[];const a=[],i=Object.entries(e).sort(([,o],[,r])=>(r.approximate_row_count??0)-(o.approximate_row_count??0));for(const[o,r]of i){const{measures:l,dates:c,categories:u}=er(r.columns??[]),m=Zs(o),p=l[0]?Sn(l[0].column_name):null,d=u[0]?Sn(u[0].column_name):null,v=c[0]?Sn(c[0].column_name):null;if(p&&d&&a.push(`Total ${p} by ${d}`),p&&v&&a.push(`${p[0].toUpperCase()}${p.slice(1)} over time by ${v}`),p&&d?a.push(`Top 10 ${d} by ${p}`):d?a.push(`How many ${m} per ${d}`):p&&a.push(`Total ${p} in ${m}`),a.length>=t)break}return Array.from(new Set(a)).slice(0,t)}const ai=8;function nr(e){return e.split(".").pop()??e}function ar(e){return e==null?"":e>=1e6?`${(e/1e6).toFixed(1)}M rows`:e>=1e3?`${Math.round(e/1e3)}K rows`:`${e} rows`}function ir({datasource:e,onAsk:t,onBrowse:a}){const{schema:i,loading:o}=En((e==null?void 0:e.id)??null),r=s.useMemo(()=>tr(i),[i]),l=s.useMemo(()=>Object.entries(i??{}).sort(([,u],[,m])=>(m.approximate_row_count??0)-(u.approximate_row_count??0)).slice(0,ai),[i]);if(!e)return null;if(o&&!i)return n.jsxs(Y,{gap:"xs",justify:"center",role:"status","aria-live":"polite",children:[n.jsx($t,{size:12,"aria-hidden":!0}),n.jsxs(O,{size:"xs",c:"dimmed",children:["Reading what's in ",e.name??"this datasource","â¦"]})]});if(!i||l.length===0)return null;const c=Object.keys(i).length;return n.jsxs(ue,{gap:"sm",w:"100%","data-testid":"start-glance",children:[r.length>0&&n.jsxs(ue,{gap:6,children:[n.jsx(O,{size:"xs",fw:600,c:"dimmed",children:"Try asking"}),n.jsx(Y,{gap:6,children:r.map(u=>n.jsx(ke,{variant:"light",color:"blue",size:"xs",radius:"xl",onClick:()=>t(u),children:u},u))})]}),n.jsxs(ue,{gap:6,children:[n.jsxs(Y,{justify:"space-between",align:"baseline",children:[n.jsxs(O,{size:"xs",fw:600,c:"dimmed",children:["In ",e.name??"this datasource"]}),a&&n.jsx(Jt,{onClick:a,children:n.jsx(O,{size:"xs",c:"blue",children:c>ai?`All ${c} tables in Data Explorer`:"Open in Data Explorer"})})]}),n.jsx(Y,{gap:6,children:l.map(([u,m])=>{var p;return n.jsxs(Jt,{onClick:a,title:`${((p=m.columns)==null?void 0:p.length)??0} columns`,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"4px 10px",borderRadius:999,border:"1px solid var(--mantine-color-default-border)"},children:[n.jsx(Vt,{size:14,color:"var(--sd-color-text-muted)","aria-hidden":!0}),n.jsx(O,{size:"xs",fw:500,children:nr(u)}),m.approximate_row_count!=null&&n.jsx(O,{size:"xs",c:"dimmed",children:ar(m.approximate_row_count)})]},u)})})]})]})}function or({reason:e,workspaceId:t,alternative:a,compact:i}){const{capability:o}=qi(t??void 0),r=o==="manage",{user:l}=jo(),c=(l==null?void 0:l.active_team_role)==="admin"||(l==null?void 0:l.active_team_role)==="owner";let u;return e==="server"?u=n.jsx(n.Fragment,{children:"AI is not configured on this server, so AI-backed features are off for everyone. An administrator can enable it in the server configuration."}):e==="user"?u=n.jsxs(n.Fragment,{children:["You turned AI features off."," ",n.jsx(Gt,{component:Jn,to:"/profile",size:"sm",children:"Turn them back on in your profile"})," ","to use the AI agent."]}):e==="team"?u=c?n.jsxs(n.Fragment,{children:["AI is turned off for your team."," ",n.jsx(Gt,{component:Jn,to:"/settings/overview",size:"sm",children:"Turn it on in Team Settings"}),"."]}):n.jsx(n.Fragment,{children:"AI is turned off for your team. Ask a team admin to enable it in Team Settings."}):u=r?n.jsxs(n.Fragment,{children:["AI is turned off for this workspace."," ",n.jsx(Gt,{component:Jn,to:`/${t}/settings/general`,size:"sm",children:"Turn it on in Workspace Settings"}),"."]}):n.jsx(n.Fragment,{children:"AI is turned off for this workspace. Ask a workspace admin to enable it in Workspace Settings."}),n.jsx(Ut,{withBorder:!0,radius:"md",p:i?"xs":"md",role:"status","data-testid":"ai-unavailable","data-reason":e,style:{borderStyle:"dashed"},children:n.jsxs(Y,{gap:"sm",wrap:"nowrap",align:"flex-start",children:[n.jsx(Yt,{variant:"light",color:"gray",radius:"xl",size:i?26:32,children:n.jsx(Pt,{size:i?14:16,"aria-hidden":!0})}),n.jsxs(ue,{gap:2,style:{minWidth:0},children:[n.jsx(O,{size:"sm",fw:600,children:"AI features are off"}),n.jsxs(O,{size:"sm",c:"dimmed",children:[u,a?` ${a}`:null]})]})]})})}function sr({question:e,options:t,originalPrompt:a,onAnswer:i}){const[o,r]=s.useState(!1),[l,c]=s.useState(""),u=()=>{const m=l.trim();m&&i(`${a} â ${m}`)};return n.jsx(Ut,{withBorder:!0,p:"md",radius:"md",style:{borderColor:"var(--mantine-color-blue-4)"},children:n.jsxs(ue,{gap:"sm",children:[n.jsxs(Y,{gap:"xs",children:[n.jsx(Pt,{size:14,color:"var(--mantine-color-blue-5)","aria-hidden":!0}),n.jsx(O,{size:"xs",c:"blue",fw:600,children:"Follow-up question"})]}),n.jsx(O,{size:"sm",fw:500,children:e}),n.jsxs(ue,{gap:"xs",children:[t.map(m=>n.jsx(ke,{variant:"light",color:"blue",size:"sm",justify:"left",fullWidth:!0,title:m.combined_prompt,onClick:()=>i(m.combined_prompt),styles:{root:{height:"auto",minHeight:"var(--button-height, 2.25rem)"},label:{whiteSpace:"normal",textAlign:"left",paddingBlock:"0.375rem"}},children:m.combined_prompt},m.label)),o?n.jsxs(Y,{gap:"xs",wrap:"nowrap",children:[n.jsx(Et,{"aria-label":"Add detail to your query",flex:1,size:"sm",placeholder:"Add detail to your query...",value:l,onCh
12ange:m=>c(m.currentTarget.value),onKeyDown:m=>{m.key==="Enter"&&u()}}),n.jsx(ke,{size:"sm",variant:"light",color:"blue",disabled:!l.trim(),rightSection:n.jsx(ba,{size:16,"aria-hidden":!0}),onClick:u,children:"Submit"})]}):n.jsx(ke,{variant:"subtle",color:"blue",size:"sm",justify:"left",fullWidth:!0,onClick:()=>r(!0),children:"Something else..."})]})]})})}function ii(e){switch(e){case"no_rows":return"That query still returned no results â can you add more context about what you're looking for?";case"no_join_key":return"I still couldn't find a way to connect those datasets â can you tell me how they relate, or if I should just focus on one of them?";case"too_much_data":return"That query still exceeded the memory limit â can you narrow the scope further?";case"manual_refine":return"That didn't quite work â can you tell me more about the change you want?"}}function rr({datasource:e,errorType:t,originalPrompt:a,otherDatasourceName:i,otherDatabaseIds:o,onTrySql:r,onDismiss:l,onClose:c,notice:u}){const{callTool:m}=Zt(),[p,d]=s.useState([]),[v,f]=s.useState(""),[C,k]=s.useState(!1),[E,q]=s.useState("Thinking..."),_=s.useRef(null),T=s.useRef(!1),g=s.useRef(!0);s.useEffect(()=>(g.current=!0,()=>{g.current=!1}),[]),s.useEffect(()=>{const j=_.current;j&&j.scrollTo({top:j.scrollHeight,behavior:"smooth"})},[p]);const M=s.useRef(u==null?void 0:u.nonce);s.useEffect(()=>{!u||u.nonce===M.current||(M.current=u.nonce,d(j=>[...j,{role:"assistant",content:u.text}]))},[u]),s.useEffect(()=>{if(T.current)return;T.current=!0,(async()=>{k(!0);try{const U=await m("refine_sql",{database_id:e.id,error_type:t,original_prompt:a,c
12onversation:[],other_datasource_name:i??null,other_database_ids:o??null});if(!g.current)return;const{reply:F,sql:H,summary:de,refined_prompt:re,filters:Q,sort:L,error:y}=U.structuredContent,D=F??y??"Something went wrong. Please try rephrasing your query.";if(H||re||Q!=null&&Q.length||L){const w=await r(H??"",de??re??a,re??void 0,Q??void 0,L??void 0);if(!g.current)return;w||d([{role:"assistant",content:D},{role:"assistant",content:ii(t)}])}else d([{role:"assistant",content:D}])}catch{g.current&&d([{role:"assistant",content:"Something went wrong â please try again."}])}finally{g.current&&k(!1)}})()},[m,e.id,t,r,a,i,o]);const h=s.useCallback(async()=>{const j=v.trim();if(!j||C)return;const U=[...p,{role:"user",content:j}];d(U),f(""),q("Thinking..."),k(!0);const F=U.map(H=>({role:H.role,content:H.content}));try{let H,de,re,Q,L,y;try{const w=(await m("refine_sql",{database_id:e.id,error_type:t,original_prompt:a,conversation:F,other_datasource_name:i??null,other_database_ids:o??null})).structuredContent;if(w.error||!w.reply){d(R=>[...R,{role:"assistant",content:"Something went wrong â please try again."}]);return}H=w.reply,de=w.sql,re=w.summary,Q=w.refined_prompt,L=w.filters,y=w.sort}catch{d(D=>[...D,{role:"assistant",content:"Something went wrong â please try again."}]);return}if(de||Q||L!=null&&L.length||y){if(q("Running query..."),!await r(de??"",re??Q??a,Q??void 0,L??void 0,y??void 0)){q("Thinking...");const w=[...F,{role:"assistant",content:"I attempted a query based on your input."},{role:"user",content:"That query still didn't work. Can you help me refine it further?"}];try{const R=await m("refine_sql",{database_id:e.id,error_type:t,original_prompt:a,other_datasource_name:i??null,other_database_ids:o??null,conversation:w}),{reply:P,error:$}=R.structuredContent;d(J=>[...J,{role:"assistant",content:P??$??ii(t)}])}catch{d(R=>[...R,{role:"assistant",content:"Something went wrong â please try again."}])}}}else H&&d(D=>[...D,{role:"assistant",content:H}])}finally{g.current&&k(!1)}},[m,e.id,t,v,C,p,r,a,i,o]);
12return n.jsx(Ut,{withBorder:!0,p:"sm",radius:"md",children:n.jsxs(ue,{gap:"sm",children:[n.jsxs(Y,{justify:"space-between",children:[n.jsxs("div",{children:[n.jsx(O,{size:"xs",c:"dimmed",fw:500,children:"AI Query Assistant"}),n.jsx(O,{size:"xs",c:"dimmed",children:'Refine your current query, or hit "Try a different query" to start fresh.'})]}),n.jsxs(Y,{gap:"xs",wrap:"nowrap",children:[n.jsx(ke,{size:"xs",variant:"subtle",color:"gray",onClick:l,children:"Try a different query"}),c&&n.jsx(Lt,{size:"sm",variant:"subtle",color:"gray","aria-label":"Close chat",onClick:c,children:n.jsx(cn,{size:16,"aria-hidden":!0})})]})]}),n.jsx($n,{h:200,type:"auto",viewportRef:_,children:n.jsxs(ue,{gap:"xs",pr:"xs",children:[p.map((j,U)=>n.jsx(Y,{justify:j.role==="user"?"flex-end":"flex-start",children:n.jsx(Ut,{p:"xs",radius:"md",bg:j.role==="user"?"blue.6":"var(--sd-color-surface-subtle)",maw:"80%",children:n.jsx(O,{size:"sm",c:j.role==="user"?"white":void 0,children:j.content})})},U)),C&&n.jsxs(Y,{justify:"flex-start",children:[n.jsx("style",{children:` 13 @keyframes thinking-pulse { 14 0%, 100% { opacity: 1; } 15 50% { opacity: 0.35; } 16 } 17 .thinking-bubble { animation: thinking-pulse 1.5s ease-in-out infinite; } 18 `}),n.jsx(Ut,{p:"xs",radius:"md",bg:"var(--sd-color-surface-subtle)",className:"thinking-bubble",children:n.jsx(O,{size:"sm",c:"dimmed",children:E})})]})]})}),n.jsxs(Y,{gap:"xs",wrap:"nowrap",style:{visibility:p.length>0?"visible":"hidden"},children:[n.jsx(Et,{"aria-label":"Describe what you're looking for",flex:1,placeholder:"Describe what you're looking for and I'll try a new query",value:v,disabled:C,onChange:j=>f(j.currentTarget.value),onKeyDown:j=>{j.key==="Enter"&&h()},size:"sm"}),n.jsx(ke,{size:"sm",variant:"light",disabled:C||!v.trim().length,loading:C,onClick:h,rightSection:n.jsx(ba,{size:16,"aria-hidden":!0}),children:"Send"})]})]})})}const At=100,lr=[{key:"query_datasource_sql",label:"Querying Database"},{key:"parse_data",label:"Parsing Results"}];function cr({callTool:e,datasourceId:t,datasourceType:a,shared:i,mcpState:o,schema:r}){const[l,c]=s.useState(!1),u=rs(a),m=ls(a)??Vo,[p,d]=s.useState(!1),[v,f]=s.useState(null),[C,k]=s.useState(!1),[E,q]=s.useState(null),[_,T]=s.useState(null),g=s.useRef(null),M=s.useRef(null),h=s.useRef(""),j=s.useRef(0),U=s.useRef([]);U.current=i.rows;const F=s.useCallback(()=>{g.current=Date.now(),q(null),T(null)},[]),H=s.useCallback(async(D,w,R,P)=>{var $;try{const J=w??r,Ce=await e("parse_data",{rawData:D,db_schema:J?{tables:J,relationships:[]}:null,skip_geography_detection:(P==null?void 0:P.skipGeographyDetection)??!1},P==null?void 0:P.signal),{data:ye,columns:le}=Ce.structuredContent;return P!=null&&P.append?i.setRows([...U.current,...ye]):(i.setRows(ye),i.setColumns(le),i.setAggregations(Qo(R)),i.setGroupBys(Jo(R)),h.current=R,j.current=0,g.current!==null&&(q(Date.now()-g.current),g.current=null),typeof(P==null?void 0:P.total)=="number"?T(P.total):D.length<At?T(ye.length):T(null)),k(!u&&D.length>=At),!0}catch(J){return($=P==null?void 0:P.signal)!=null&&$.aborted||(console.error(J),Ve.show({title:"Parse Error",message:J instanceof Error?J.message:"Failed to parse query results.",color:"red",autoClose:!1})),!1}},[e,r,i,u]),de=s.useCallback(async(D,w)=>{var J;const R=D.trim();if(!R||o!=="ready")return!1;F(),c(!0);const P=!!(w!=null&&w.showProgress),$=P?new AbortController:null;$&&(M.current=$),P&&f({query_datasource_sql:"running",parse_data:"pending"});try{const Ce=dt(R,At,0),ye=await e("query_datasource_sql",{database_id:t,sql:Ce},$==null?void 0:$.signal);if($!=null&&$.signal.aborted)return!1;const le=ye.structuredContent;return le.error?(Ve.show({title:"Query Error",message:le.error,color:"red",autoClose:!1}),!1):(J=le.rows)!=null&&J.length?(P&&f({query_datasource_sql:"done",parse_data:"running"}),h.current=R,await H(le.rows,le.schema,le.sql||R,{skipGeographyDetection:w==null?void 0:w.skipGeographyDetection,total:le.total??null,signal:$==null?void 0:$.signal})):(i.setRows([]),h.current=R,j.current=0,k(!1),T(typeof le.total=="number"?le.total:0),w!=null&&w.silentEmpty||Ve.show({title:"No Results",message:"The query returned no data.",color:"yellow"}),!1)}catch(Ce){return $!=null&&$.signal.aborted||(console.error(Ce),Ve.show({title:"Query Error",message:Ce instanceof Error?Ce.message:"Failed to run the query.",color:"red",autoClose:!1})),!1}finally{c(!1),P&&f(null),$&&M.current===$&&(M.current=null)}},[H,e,t,o,i,F]),re=s.useCallback(async()=>
18{if(u||l||!C||o!=="ready")return!1;const D=h.current;if(!D)return!1;c(!0),d(!0);try{const w=j.current+At,R=dt(D,At,w),$=(await e("query_datasource_sql",{database_id:t,sql:R})).structuredContent;if($.error)return Ve.show({title:"Query Error",message:$.error,color:"red",autoClose:!1}),!1;j.current=w;const J=$.rows??[];return J.length===0?(k(!1),!0):await H(J,$.schema,D,{append:!0})}catch(w){return console.error(w),Ve.show({title:"Query Error",message:w instanceof Error?w.message:"Failed to load more rows.",color:"red",autoClose:!1}),!1}finally{c(!1),d(!1)}},[H,e,t,C,l,o,u]),Q=s.useCallback(async()=>{const D=h.current;if(!D||o!=="ready")return null;try{const w=dt(D,m,0),P=(await e("query_datasource_sql",{database_id:t,sql:w})).structuredContent;if(P.error)return Ve.show({title:"Query Error",message:P.error,color:"red",autoClose:!1}),null;const $=P.rows??[];if(!$.length)return[];const J=P.schema??r,Ce=await e("parse_data",{rawData:$,db_schema:J?{tables:J,relationships:[]}:null,skip_geography_detection:!1}),{data:ye}=Ce.structuredContent;return ye}catch(w){return console.error(w),Ve.show({title:"Query Error",message:w instanceof Error?w.message:"Failed to fetch the full dataset.",color:"red",autoClose:!1}),null}},[e,t,r,m,o]),L=s.useCallback(D=>{h.current=D},[]),y=s.useCallback(()=>{var D;(D=M.current)==null||D.abort(),M.current=null,f(null)},[]);return s.useEffect(()=>()=>{var D;return(D=M.current)==null?void 0:D.abort()},[]),{runQuery:de,applyQueryResult:H,loadMore:re,fetchAllRows:Q,hasMore:C,loading:l,loadingMore:p,runProgress:v,cancelRun:y,setExecutedSql:L,startQueryTimer:F,lastQueryMs:E,lastQueryTotalRows:_}}const qn=new Set(["row_count","count","cnt","num_rows","n","total","total_count","record_count","records","num"]);function pr(e,t){if(!e.length||!t.length)return null;const a=new Set(Object.keys(e[0]).map(r=>r.toLowerCase())),i=new Set(Object.keys(t[0]).map(r=>r.toLowerCase())),o=[...a].filter(r=>i.has(r)&&!qn.has(r));return o.length===0?null:o.find(r=>r.endsWith("_id")||r==="id")??o[0]}function ln(e,t,a,i,o="left",r="right",l="inner"){const c=e.length>0?Object.keys(e[0]):[],u=t.length>0?Object.keys(t[0]):[],m=new Set(c),p=a===i,d=new Set(u.filter(_=>_!==i&&_!==a&&m.has(_))),v=new Map;for(const _ of t)v.set(_[i],_);const f=new Set;if(d.size>0)for(const _ of e){if(f.size===d.size)break;const T=v.get(_[a]);if(T)for(const g of d)!f.has(g)&&_[g]!==T[g]&&f.add(g)}const C=_=>{if(f.size===0)return{..._};const T={};for(const[g,M]of Object.entries(_))T[f.has(g)?`${g}_${o}`:g]=M;return T},k=(_,T)=>{for(const g of u)g===i&&!p||(d.has(g)?f.has(g)&&(_[`${g}_${r}`]=T?T[g]:null):_[g]=T?T[g]:null)},E=new Set,q=[];for(const _ of e){const T=v.get(_[a]);if(!T&&l==="inner")continue;const g=C(_);T&&E.add(_[a]),k(g,T??null),q.push(g)}if(l==="outer")for(const _ of t){if(E.has(_[i]))continue;const T={};for(const g of c)T[f.has(g)?`${g}_${o}`:g]=null;for(const g of u){if(g===i&&!p){T[a]=_[i];continue}d.has(g)?T[f.has(g)?`${g}_${r}`:g]=_[g]:T[g]=_[g]}q.push(T)}return q}async function Hi(e,t,a,i){const o=i?i==="a":e.rows.length<=t.rows.length,r=o?e:t,l=o?t:e,c=Yo(l.sql,l.key,r.rows.map(m=>m[r.key]));if(!c)return{a:e.rows,b:t.rows};const u=await a(l.dsId,c);return u!=null&&u.length?o?{a:e.rows,b:u}:{a:u,b:t.rows}:{a:e.rows,b:t.rows}}function ur(e,t,a){var l;const i=((l=t[0])==null?void 0:l.ds.id)??"",o={};t.forEach(c=>{o[c.ds.id]=c.sql});const r=a.map((c,u)=>{var m;return{leftDatasourceId:i,rightDatasourceId:((m=t[u+1])==null?void 0:m.ds.id)??"",leftKey:c.key1,rightKey:c.key2,mode:"merge",source:c.source,confidence:c.confidence}});return{prompt:e,datasources:t.map(c=>c.ds.id),sqlByDatasource:o,joinSteps:r}}function ea(e,t){return e.datasources.map(a=>{const i=t.get(a),o=e.sqlByDatasource[a];return i&&typeof o=="string"?{ds:i,sql:o}:null}).filter(a=>a!==null)}function dr(e){const t=new Map;for(const[a,i]of Object.entries(e))for(const o of i){const r=o.toLowerCase();t.set(r,t.has(r)?null:a)}return t}function oi(e){const t=new Map,a=new Set;for(const[i,o]of Object.entries(e))for(const r of o){const l=r.toLowerCase();t.has(l)?a.add(l):t.set(l,i)}return{ownerOf:i=>t.get(i.toLowerCase())??null,ambiguousColumns:a}}function mr(e,t){const a=new Set(t.map(i=>i.toLowerCase()));return[...new Set(e.map(i=>i.toLowerCase()))].filter(i=>a.has(i)&&!qn.has(i))}function fr(e,t,a){const i={};let o=!0;for(const l of t){const c=a(l.column);if(!c||e.sqlByDatasource[c]===void 0){o=!1;continue}(i[c]??(i[c]=[])).push(l)}const r={};for(const l of e.datasources){const c=e.sqlByDatasource[l]??"",u=i[l];r[l]=u!=null&&u.length?Pi(c,u):c}return{plan:{...e,sqlByDatasource:r},pushedAll:o}}function gr(e,t,a){if(!t)return{plan:e,driverId:null};const i=a(t.column);if(!i||e.sqlByDatasource[i]===void 0)return{plan:e,driverId:null};const o=yt(e.sqlByDatasource[i],t);return{plan:{...e,sqlByDatasource:{...e.sqlByDatasource,[i]:o}},driverId:i}}function si(e,t,a){const i=e.datasources;if(!i.includes(a))return null;const o=zn(e),r=dr(t),l=f=>r.get(f.toLowerCase())??null,c=new Map,u=(f,C,k,E)=>{c.has(f)||c.set(f,[]),c.has(C)||c.set(C,[]),c.get(f).push({to:C,keyFrom:k,keyTo:E}),c.get(C).push({to:f,keyFrom:E,keyTo:k})};for(let f=0;f<o.length;f++){const{key1:C,key2:k}=o[f],E=i[f+1];if(!C||!k||!E)return null;let q=l(C);(!q||!i.slice(0,f+1).includes(q))&&(q=i[0]),u(q,E,C,k)}const m=new Set([a]),p=[a],d=[],v=[a];for(;v.length;){const f=v.shift();for(const{to:C,keyFrom:k,keyTo:E}of c.get(f)??[])m.has(C)||(m.add(C),p.push(C),d.push({dsId:C,keyAccumulated:k,keyNew:E}),v.push(C))}return p.length!==i.length?null:{order:p,steps:d}}function ri(e,t,a,i){let o=e[t[0]]??[],r=i(t[0]);for(const l of a)o=ln(o,e[l.dsId]??[],l.keyAccumulated,l.keyNew,r,i(l.dsId)),r="combined";return o}function zn(e){return e.joinSteps.map(t=>({key1:t.leftKey??"",key2:t.rightKey??""}))}const rt=At;function xr(e,t){const a=new Set(t.map(i=>i.column));return[...e.filter(i=>!a.has(i.column)),...t]}const hr=3e4;function li(e){return Promise.race([e,new Promise(t=>setTimeout(()=>t(!1),hr))])}function vr(e,t){const a=typeof e=="number"?e:Number(e),i=typeof t=="number"?t:Number(t);return!Number.isNaN(a)&&!Number.isNaN(i)?a-i:String(e).localeCompare(String(t))}function br(e,t){if(!e.length)return null;const a=Object.keys(e[0]);return a.includes(t)?t:a.find(i=>i.startsWith(`${t}_`))??null}function yr(e,t){return e.find(a=>wa(a.sql)&&pn(a.sql)!==null)??t}function ci(e,t){const a=wa(t.sql),i=pn(t.sql);let o=e;
18if(a&&e.length){const r=br(e,a.column);if(r){const l=a.direction==="desc"?-1:1;o=[...e].sort((c,u)=>{const m=c[r],p=u[r],d=m==null||m==="",v=p==null||p==="";return d&&v?0:d?1:v?-1:vr(m,p)*l})}}return i!==null&&i>=0&&(o=o.slice(0,i)),o}const wr=[{key:"select_datasources",label:"Choosing datasources"},{key:"generate_sql",label:"Writing SQL"},{key:"query_datasource_sql",label:"Running queries"},{key:"parse_data",label:"Combining results"}],pi=({"aria-checked":e,...t})=>n.jsx("button",{type:"button",...t,role:"menuitemcheckbox","aria-checked":e}),jr=5;function kr({datasources:e,shared:t,baseSqlRef:a,applyQueryResult:i,startQueryTimer:o,queryLoading:r,onDatasourcesSelected:l,onQueryComplete:c,selectedBadges:u,onSelectedBadgesChange:m,onBrowseDatasources:p,onQueryStart:d,joinControls:v,onResetAll:f,chatNotice:C,isMultiDatasource:k,onRefineMultiSql:E,onApplyMultiFilters:q,initialPrompt:_,initialDatasourceIds:T,askRequest:g,autoRunInitialPrompt:M=!0}){var fn;const{callTool:h,state:j}=Zt(),U=Sa(),[F,H]=s.useState(null),[de,re]=s.useState({}),[Q,L]=s.useState(null),[y,D]=s.useState(null),w=s.useRef(null),R=s.useRef(null),P=window.location.pathname.split("/")[1],$=ko(P),[J,Ce]=s.useState(()=>{const b=(T??[]).filter(I=>e.some(N=>N.id===I));return b.length?b:null}),[ye,le]=s.useState(""),K=s.useMemo(()=>{const b=ye.trim().toLowerCase();return b?e.filter(I=>(I.name??I.id).toLowerCase().includes(b)):e},[e,ye]),W=s.useMemo(()=>J?e.filter(b=>J.includes(b.id)):e,[e,J]),te=s.useRef(null);s.useEffect(()=>{if(!g)return;e.some(I=>I.id===g.datasourceId)&&Ce([g.datasourceId]);const b=requestAnimationFrame(()=>{var I;return(I=te.current)==null?void 0:I.focus()});return()=>cancelAnimationFrame(b)},[g==null?void 0:g.nonce]);const ge=b=>Ce(I=>{const N=I?[...I]:[],ee=N.indexOf(b);return ee>=0?N.splice(ee,1):N.push(b),N.length?N:null}),oe=J?J.length===1?((fn=e.find(b=>b.id===J[0]))==null?void 0:fn.name)??"1 datasource":`${J.length} datasources`:"Any datasource",xe=s.useRef(!1),[ve,V]=s.useState(null),[Z,ze]=s.useState(null),A=s.useRef(null),he=s.useRef([]),Ie=s.useCallback(()=>{if(he.current.length)return he.current;const b=new Map(e.map(N=>[N.id,N])),I=u.map(N=>b.get(N.id)).filter(N=>!!N);return I.length&&(he.current=I,A.current=I[0]),I},[e,u]),[We,Ue]=s.useState(t.prompt),qe=s.useRef(t.prompt);s.useEffect(()=>{t.prompt!==qe.current&&(qe.current=t.prompt,Ue(t.prompt))},[t.prompt]);const at=(b,I,N)=>{H(ee=>ee&&{...ee,[b]:I}),N!==void 0&&re(ee=>({...ee,[b]:N}))},fe=s.useCallback((b,I)=>{var N;return h(b,I,(N=R.current)==null?void 0:N.signal)},[h]),pe=(b,I)=>wr.map(N=>({key:N.key,label:N.label,status:b[N.key],detail:I[N.key]??null})),Ne=s.useCallback((b,I,N,ee)=>{b&&N&&D({steps:pe(b,I),startedAt:N,finishedAt:Date.now(),error:ee??null}),w.current=null,H(null),L(null)},[]),S=s.useCallback(()=>{var b;(b=R.current)==null||b.abort(),R.current=null,H(null),L(null),D(null),w.current=null},[]),B=s.useCallback(b=>{const I=w.current;if(I){const N=Object.keys(I.status).find(ee=>I.status[ee]==="running");N&&(I.status[N]="failed"),Ne(I.status,I.detail,I.startedAt,b);return}H(null),Ve.show({title:"AI Agent Error",message:b,color:"red",autoClose:!1})},[Ne]),Te=s.useCallback(async b=>{if(W.length===1)return[W[0]];const I=await fe("select_datasources",{prompt:b,datasource_ids:W.map(ne=>ne.id)}),{selected_ids:N,error:ee}=I.structuredContent;if(ee||!(N!=null&&N.length))return B(ee??"The AI agent could not identify a relevant datasource."),null;const _e=N.map(ne=>W.find(Le=>Le.id===ne)).filter(ne=>!!ne);return _e.length?_e:(B("The AI selected an unrecognised datasource."),null)},[fe,W,B]),Fe=s.useCallback(async(b,I,N)=>{const ee=[];let _e;for(const ne of I){const Le=I.filter(Ee=>Ee.id!==ne.id).map(Ee=>Ee.name??Ee.id).join(", "),De=Le?`${b} 19 20Note: This SQL is for ${ne.name??ne.id} only. The following datasource(s) are being queried separately and will handle their own portions of the request: ${Le}. Do not ask for clarification about data that may exist in those other datasources â only generate SQL for what ${ne.name??ne.id} can answer from its own schema.`+(ne.id!==N.id?` Select only the shared name/identifier column used to combine the data plus the specific attribute(s) this request explicitly asks ${ne.name??ne.id} for â do not add any other columns.`:" In addition to the columns this request asks for, always include the shared name/identifier column(s) that can be used to combine this data with the other datasource(s), so the results can be joined."):b,Ae=await fe("generate_sql",{database_id:ne.id,prompt:De}),{sql:Be,error:Ye,clarification:et}
20=Ae.structuredContent;if(et&&ne.id===N.id)return H(null),V(et),null;if(Ye||!Be){if(Ye&&(_e=Ye),Le&&ne.id!==N.id){const Ee=`${b} 21 22Generate SQL for ${ne.name??ne.id} using ONLY its own schema â include its row identifier / name column plus whatever attributes from this request it actually has, and use only columns that exist in this datasource. Do not ask for clarification: make a reasonable choice and always return a SELECT.`,be=await fe("generate_sql",{database_id:ne.id,prompt:Ee}),{sql:ae}=be.structuredContent;if(ae){ee.push({ds:ne,sql:ae});continue}}continue}ee.push({ds:ne,sql:Be})}return ee.length?ee:(B(_e??"The AI agent could not generate SQL for any of the selected datasources."),null)},[fe,B]),Ke=s.useCallback(async(b,I,N)=>{const ee=[];for(const{ds:_e,sql:ne}of b){const Le=dt(ne,rt,0),De=await fe("query_datasource_sql",{database_id:_e.id,sql:Le}),{rows:Ae,schema:Be,total:Ye,error:et}=De.structuredContent;if(et){if(/memory limit/i.test(et))return H(null),ze({errorType:"too_much_data",originalPrompt:N,primaryDatasource:I,otherDatabaseIds:he.current.filter(Ee=>Ee.id!==I.id).map(Ee=>Ee.id)}),null;Ve.show({title:"Query Error",message:et,color:"red",autoClose:!1});continue}if(!(Ae!=null&&Ae.length)&&_e.id===I.id)return qe.current="",t.resetResults(),H(null),ze({errorType:"no_rows",originalPrompt:N,primaryDatasource:I,otherDatabaseIds:he.current.filter(Ee=>Ee.id!==I.id).map(Ee=>Ee.id)}),null;Ae!=null&&Ae.length&&ee.push({ds:_e,sql:ne,rows:Ae,schema:Be??null,total:Ye??null})}return ee.length?ee:(H(null),null)},[fe,t]),nt=s.useCallback(async(b,I,N,ee,_e)=>{if(b.length===1){const be=b[0],ae=ci(be.rows,{ds:be.ds,sql:be.sql});return{rows:ae,schema:be.schema,sql:be.sql,total:ae.length}}let ne=b[0].rows,Le=b[0].ds.name??b[0].ds.id;const De=[];for(let be=1;be<b.length;be++){let ae=b[be].rows;const He=b[be].ds.name??b[be].ds.id;let Xe=pr(ne,ae),it=Xe,ot="exact",nn=null;if(!Xe){const ct=await fe("detect_join_key",{columns1:Object.keys(ne[0]??{}).filter(_t=>!qn.has(_t.toLowerCase())),columns2:Object.keys(ae[0]??{}).filter(_t=>!qn.has(_t.toLowerCase()))}),{key1:an,key2:zt,confidence:on}=ct.structuredContent;Xe=an??null,it=zt??null,ot="ai",nn=on??null}if(console.log(`[multi] join step ${be}, key1: ${Xe}, key2: ${it}`),b.length===2&&Xe&&it){const ct=async(on,_t)=>{const Nn=await fe("query_datasource_sql",{database_id:on,sql:dt(_t,rt,0)}),{rows:Bn,error:Hn}=Nn.structuredContent;return Hn?null:Bn??null},{a:an,b:zt}=await Hi({rows:ne,key:Xe,sql:b[0].sql,dsId:b[0].ds.id},{rows:ae,key:it,sql:b[be].sql,dsId:b[be].ds.id},ct);ne=an,ae=zt}if(!Xe||!it){H(null),ze({errorType:"no_join_key",originalPrompt:ee,primaryDatasource:_e,otherDatasourceName:He,otherDatabaseIds:he.current.filter(ct=>ct.id!==_e.id).map(ct=>ct.id)}),De.push({key1:null,key2:null,source:ot,confidence:nn});break}if(ne=ln(ne,ae,Xe,it,Le,He),ne.length===0)return H(null),ze({errorType:"no_rows",originalPrompt:ee,primaryDatasource:_e,otherDatasourceName:He,otherDatabaseIds:he.current.filter(ct=>ct.id!==_e.id).map(ct=>ct.id)}),null;Le="combined",De.push({key1:Xe,key2:it,source:ot,confidence:nn})}const Ae=b.reduce((be,ae)=>ae.schema?{...be??{},...ae.schema}:be,null),Be={},Ye={};b.forEach(be=>{Be[be.ds.id]=be.rows.length,Ye[be.ds.id]=Object.keys(be.rows[0]??{})}),c==null||c(I,Be,De,Ye);const et=yr(I,N),Ee=ci(ne,et);return{rows:Ee,schema:Ae,sql:N.sql,total:Ee.length}},[fe,c]),Qe=s.useCallback(async b=>{var Le;const I=(b??We).trim();if(!I||j!=="ready")return;d==null||d(),qe.current=I,t.setPrompt(I),(Le=R.current)==null||Le.abort(),R.current=new AbortController;const N=Date.now();L(N),D(null),re({});const ee={select_datasources:"running",generate_sql:"pending",query_datasource_sql:"pending",parse_data:"pending"},_e={};
22w.current={status:ee,detail:_e,startedAt:N};const ne=(De,Ae,Be)=>{ee[De]=Ae,Be!==void 0&&(_e[De]=Be),at(De,Ae,Be)};H({...ee}),t.setRows([]),t.setColumns([]),t.setGroupBys([]),t.setAggregations({}),t.setHiddenColumns([]),t.setFilters([]),o();try{const De=await Te(I);if(!De)return;const Ae=De[0];A.current=Ae,he.current=De,m(De.map(He=>({id:He.id,name:He.name??He.id}))),l(Ae,De),ne("select_datasources","done",(J?"you chose ":"")+De.map(He=>He.name??He.id).join(", ")),ne("generate_sql","running");const Be=await Fe(I,De,Ae);if(!Be)return;const Ye=Be.find(He=>He.ds.id===Ae.id)??Be[0];if(wa(Ye.sql)!==null&&pn(Ye.sql)!==null)for(const He of Be)He.ds.id!==Ae.id&&(He.sql=Xo(He.sql));a.current=Ye.sql,t.setSql(ht(Ye.sql)),ne("generate_sql","done",`${Be.length} ${Be.length===1?"query":"queries"} · shown in the SQL Query tab`),ne("query_datasource_sql","running");const Ee=await Ke(Be,Ae,I);if(!Ee)return;const be=Ee.reduce((He,Xe)=>{var it;return He+(((it=Xe.rows)==null?void 0:it.length)??0)},0);ne("query_datasource_sql","done",`${be.toLocaleString()} rows from ${Ee.length} ${Ee.length===1?"source":"sources"}`),ne("parse_data","running");const ae=await nt(Ee,Be,Ye,I,Ae);if(!ae)return;if(ae.rows.length===0){Ne(ee,_e,N),Ve.show({title:"No combined results",message:"The selected datasources didn't return any rows that could be combined. Try rephrasing your question or selecting fewer sources.",color:"yellow",autoClose:!1});return}await i(ae.rows,ae.schema,ae.sql,{total:ae.total}),ne("parse_data","done",Ee.length>1?`${ae.rows.length.toLocaleString()} rows after combining ${Ee.length} sources`:`${ae.rows.length.toLocaleString()} rows`),Ne(ee,_e,N)}catch(De){if(R.current===null)return;console.error(De),B(De instanceof Error?De.message:"An unexpected error occurred.")}finally{R.current=null,L(null)}},[i,a,Ne,Fe,We,J,B,nt,l,d,Ke,Te,m,t,o,j]),jt=s.useCallback(async(b,I,N,ee,_e)=>{if(k&&(ee!=null&&ee.length||_e)&&q){const Le=xr(t.filters,ee??[]),De=await li(q(Le,_e??void 0));if(De){ze(null);const Ae=_e?I:la(t.prompt,Le);qe.current=Ae,t.setPrompt(Ae),Ue(Ae)}return De}if(k&&E){const Le=await li(E(N??I,I));return Le&&(ze(null),qe.current=I,t.setPrompt(I),Ue(I)),Le}const ne=A.current;if(!ne)return!1;try{const Le=pn(b),De=Le!==null&&Le<At?Le:At,Ae=dt(b,De,0),Be=new Promise(He=>setTimeout(()=>He(null),3e4)),Ye=await Promise.race([h("query_datasource_sql",{database_id:ne.id,sql:Ae}),Be]);if(!Ye)return!1;const{rows:et,schema:Ee,total:be,error:ae}=Ye.structuredContent;return ae||!(et!=null&&et.length)?!1:(a.current=b,t.setSql(ht(b)),await i(et,Ee,b,{total:be??null}),qe.current=I,t.setPrompt(I),Ue(I),ze(null),!0)}catch{return!1}},[i,a,h,t,k,E,q]),kt=s.useCallback(b=>{Ue(b),V(null),Qe(b)},[Qe]),wt=!!F||!!ve||!!Z||r||j!=="ready",mt=t.rows.length>0||t.columns.length>0;s.useEffect(()=>{!_||!M||xe.current||j!=="ready"||e.length===0||!$.enabled||(xe.current=!0,Ue(_),Qe(_))},[_,M,j,e.length,$.enabled,Qe]);const Ct=!mt&&!F&&!ve&&!Z&&!y,St=F&&Q?n.jsx(ti,{steps:pe(F,de),startedAt:Q,onCancel:S}):null,Rt=!F&&y?n.jsx(ti,{steps:y.steps,startedAt:y.startedAt,finishedAt:y.finishedAt,error:y.error,onRetry:y.error?()=>void Qe():void 0}):null,vt=!$.enabled&&$.reason?n.jsx(or,{reason:$.reason,workspaceId:P,alternative:"You can still write SQL in the SQL Query tab or browse tables in Data Explorer."}):null,en=t.rows.length>0,tn=n.jsxs(Y,{wrap:U?"wrap":"nowrap",gap:"xs",w:"100%",children:[n.jsx(Et,{ref:te,flex:U?void 0:1,w:U?"100%":void 0,"aria-label":"Ask a question across all your datasources",placeholder:"Ask a question across all your datasources...",value:We,disabled:!!F||!!ve||r||j!=="ready",readOnly:!!Z,styles:Z?{input:{opacity:.6,cursor:"default"}}:void 0,onChange:b=>Ue(b.currentTarget.value),onKeyDown:b=>{b.key==="Enter"&&Qe()},size:"sm"}),e.length>1&&n.jsxs(lt,{closeOnItemClick:!1,position:"bottom-start",shadow:"md",withinPortal:!0,onClose:()=>le(""),children:[n.jsx(lt.Target,{children:n.jsx(ke,{variant:"default",size:"sm",w:U?"100%":void 0,leftSection:n.jsx(Ft,{size:16,"aria-hidden":!0}),rightSection:n.jsx(Ei,{size:16,"aria-hidden":!0}),"aria-label":`Ask against: ${oe}`,disabled:!!F||r,children:oe})}),n.jsxs(lt.Dropdown,{children:[n.jsx(lt.Label,{children:"Ask against"}),n.jsx(lt.Item,{renderRoot:pi,"aria-checked":J===null,onClick:()=>Ce(null),leftSection:n.jsx(La,{readOnly:!0,checked:J===null,size:"xs","aria-hidden":!0,tabIndex:-1}),children:"Let the AI choose"}),n.jsx(lt.Divider,{}),e.length>jr&&n.jsx(je,{px:4,pb:4,children:n.jsx(Et,{size:"xs","aria-label":"Filter datasources",placeholder:"Filter datasources...",leftSection:n.jsx(ms,{size:12,"aria-hidden":!0}),value:ye,onChange:b=>le(b.currentTarget.value),onKeyDown:b=>b.stopPropagation(),"data-autofocus":!0})}),n.jsx($n.Autosize,{mah:280,type:"auto",children:K.length===0?n.jsxs(O,{size:"xs",c:"dimmed",px:"sm",py:6,children:["No datasources match â",ye,"â."]}):K.map(b=>n.jsx(lt.Item,{renderRoot:pi,"aria-checked":!!(J!=null&&J.includes(b.id)),onClick:()=>ge(b.id),leftSection:n.jsx(La,{readOnly:!0,checked:!!(J!=null&&J.includes(b.id)),size:"xs","aria-hidden":!0,tabIndex:-1}),children:b.name??b.id},b.id))})]})]}),n.jsx(ke,{loading:!!F||r,disabled:wt||!We.trim(),variant:"light",color:"blue",size:"sm",w:U?"100%":void 0,onClick:()=>Qe(),rightSection:n.jsx(ba,{size:16,"aria-hidden":!0}),children:"Ask"})]});if(e.length===0){const b=window.location.pathname.split("/")[1];return n.jsxs(ue,{h:"100%",miw:0,justify:"center",align:"center",gap:"lg",py:"xl","data-testid":"ai-agent-no-datasources",children:[n.jsxs(ue,{align:"center",gap:6,maw:520,children:[n.jsx(Yt,{size:54,radius:"xl",variant:"light",color:"gray",children:n.jsx(Pt,{size:24,"aria-hidden":!0})}),n.jsx(O,{fw:600,size:"xl",ta:"center",children:"Connect a datasource to get started"}),n.jsx(O,{c:"dimmed",size:"sm",ta:"center",children:"The AI agent answers questions about your data. This workspace has no datasources yet â connect a database, or upload a CSV from the Upload Table tab, and come back to ask a question."})]}),n.jsxs(Y,{gap:"sm",justify:"center",children:[n.jsx(ka,{workspaceId:b,variant:"primary"}),p&&n.jsx(ke,{variant:"light",onClick:p,children:"Open Data Explorer"})]})]})}return Ct&&vt?n.jsxs(ue,{h:"100%",miw:0,justify:"center",align:"center",gap:"lg",py:"xl",children:[n.jsx(je,{w:"100%",maw:560,children:vt}),n.jsx(Y,{gap:"sm",justify:"center",children:p&&n.jsx(ke,{variant:"light",onClick:p,children:"Open Data Explorer"})})]}):Ct?n.jsxs(ue,{h:"100%",miw:0,justify:"center",align:"center",gap:"lg",py:"xl",children:[n.jsxs(ue,{align:"center",gap:6,maw:520,children:[n.jsx(Yt,{size:54,radius:"xl",variant:"light",color:"blue",children:n.jsx(Pt,{size:24,"aria-hidden":!0})}),n.jsx(O,{fw:600,size:"xl",ta:"center",children:"What can I help you find?"}),n.jsx(O,{c:"dimmed",size:"sm",ta:"center",children:e.length>1?"Pick a datasource to see what's in it, or let the AI choose.":"Ask in plain language, or start from what's in your data."})]}),n.jsx(je,{w:"100%",maw:560,children:tn}),n.jsx(O,{size:"xs",c:"dimmed",ta:"center",maw:560,children:"The AI writes SQL you can read and edit in the SQL Query tab, and shows every step as it runs."}),n.jsx(je,{w:"100%",maw:560,children:n.jsx(ir,{datasource:W.length===1?W[0]:null,onAsk:b=>{Ue(b),Qe(b)},onBrowse:p})}),n.jsxs(O,{size:"sm",c:"dimmed",ta:"center",children:["Not sure what to ask?"," ",p?n.jsx(Gt,{component:"button",type:"button",size:"sm",c:"blue",onClick:p,children:"Browse your tables in Data
22Explorer"}):"Browse your tables in Data Explorer"]})]}):n.jsxs(ue,{gap:"sm",miw:0,children:[vt??tn,St,Rt,u.length>0&&n.jsxs(Y,{gap:"xs",align:"center",wrap:"wrap",role:"group","aria-label":"AI-selected datasources",children:[n.jsx(O,{size:"sm",c:"dimmed",fw:500,children:"AI selected:"}),u.map(b=>n.jsx(un,{size:"sm",variant:"light",color:"blue",leftSection:n.jsx(Pt,{size:12,"aria-hidden":!0}),"aria-label":`AI-selected datasource: ${b.name}`,children:b.name},b.id))]}),v&&(!Z||Z.errorType==="no_join_key")&&v,ve&&n.jsx(sr,{question:ve.question,options:ve.options,originalPrompt:We,onAnswer:kt}),en&&!Z&&!ve&&!F&&n.jsx(ke,{variant:"subtle",color:"blue",size:"xs",leftSection:n.jsx(Ks,{size:14,"aria-hidden":!0}),style:{alignSelf:"flex-start"},onClick:()=>{const b=Ie(),I=b[0];I&&ze({errorType:"manual_refine",originalPrompt:t.prompt,primaryDatasource:I,otherDatabaseIds:b.filter(N=>N.id!==I.id).map(N=>N.id)})},children:"Ask AI to refine"}),Z&&n.jsx(rr,{datasource:Z.primaryDatasource,errorType:Z.errorType,originalPrompt:Z.originalPrompt,otherDatasourceName:Z.otherDatasourceName,otherDatabaseIds:Z.otherDatabaseIds,notice:C,onTrySql:jt,onClose:()=>ze(null),onDismiss:()=>{ze(null),qe.current="",Ue(""),t.setPrompt(""),f==null||f()}})]})}function Wi({minHeight:e=200,label:t="Loading"}){return n.jsx(qt,{mih:e,w:"100%",role:"status","aria-live":"polite",children:n.jsx($t,{type:"dots",color:"blue.4","aria-label":t})})}const Cr=s.lazy(()=>Mn(()=>import("./DataExplorerTab-DfANn7Ex.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])));function Sr({datasource:e,shared:t,baseSqlRef:a,runQuery:i,isActive:o,onBack:r,onOpenTable:l,ignoreInboundSql:c,onTableOpenChange:u,onAsk:m}){var g;const{schema:p}=En(e.id),d=Qt[e.type],v=(d==null?void 0:d.icon)??Ft,[f,C]=s.useState(null),[k,E]=s.useState(0),q=s.useCallback((M,h)=>{C(M?h??null:null),u==null||u(M)},[u]),_=f?((g=p==null?void 0:p[f])==null?void 0:g.name)??f:null,T=n.jsxs(Y,{gap:6,wrap:"nowrap",miw:0,children:[n.jsx(je,{c:"blue.6",style:{lineHeight:0,flexShrink:0},children:n.jsx(v,{size:14})}),n.jsx(O,{size:"xs",fw:600,c:f?"blue":void 0,truncate:!0,children:e.name})]});return n.jsxs(ue,{gap:"sm",h:"100%",style:{minHeight:0},children:[n.jsxs(Y,{justify:"space-between",wrap:"nowrap",style:{flexShrink:0},children:[n.jsxs(hs,{separator:"âº",separatorMargin:6,"aria-label":"Explorer breadcrumb",style:{flexShrink:0},styles:{root:{flexWrap:"wrap",rowGap:2}},children:[n.jsx(Gt,{component:"button",type:"button",size:"xs",c:"dimmed",onClick:r,style:{whiteSpace:"nowrap"},children:"All datasources"}),f?n.jsx(Gt,{component:"button",type:"button",size:"xs",onClick:()=>E(M=>M+1),"aria-label":`Back to tables in ${e.name}`,style:{minWidth:0},children:T}):T,_&&n.jsx(O,{size:"xs",fw:600,truncate:!0,style:{maxWidth:240},children:_})]}),m&&n.jsx(ke,{size:"compact-xs",variant:"light",color:"blue",leftSection:n.jsx(Pt,{size:14,"aria-hidden":!0}),onClick:()=>m(e),title:`Ask a question about ${e.name}`,style:{flexShrink:0},children:"Ask about this data"})]}),n.jsx(je,{flex:1,mih:0,children:n.jsx(s.Suspense,{fallback:n.jsx(Wi,{minHeight:36}),children:n.jsx(Cr,{schema:p,shared:t,baseSqlRef:a,runQuery:i,isActive:o,dialect:e.type,onOpenTable:l,ignoreInboundSql:c,onTableOpenChange:q,closeTableRequest:k})})})]})}function zr({selectedDatasources:e,shared:t,baseSqlRef:a,runQuery:i,isActive:o,onDatasourceEntered:r,onDatasourceLeft:l,onOpenTable:c,onPreviewDatasource:u,ignoreInboundSql:m,onTableOpenChange:p,onAsk:d}){const[v,f]=s.useState(null),{workspace:C}=Fn(),k=s.useRef(!1),E=s.useCallback((g,M)=>(k.current=!0,u==null||u((v==null?void 0:v.id)??null),i(g,M)),[i,u,v]),q=s.useCallback(g=>{k.current=!1,f(g),r(g)},[r]),_=s.useCallback(()=>{k.current&&(t.resetResults(),k.current=!1),f(null),l(),u==null||u(null)},[l,t,u]);if(v)return n.jsx(Sr,{datasource:v,shared:t,baseSqlRef:a,runQuery:E,isActive:o,onBack:_,onOpenTable:c,ignoreInboundSql:m,onTableOpenChange:p,onAsk:d});const T=g=>C&&n.jsx(ka,{workspaceId:C,flex:"none",size:g?"sm":"xs",variant:g?"primary":"default"});return e.length===0?n.jsx(qt,{h:"100%",w:"100%",children:n.jsx(xs,{icon:n.jsx(Ft,{size:20,"aria-hidden":!0}),title:"No datasources yet",description:"Connect a database to browse its tables here, or upload a CSV from the Upload Table tab.",action:T(!0)})}):n.jsxs(ue,{gap:"md",w:"100%",h:"100%",style:{minHeight:0},children:[n.jsxs(Y,{justify:"space-between",align:"flex-end",wrap:"nowrap",gap:"md",children:[n.jsxs(ue,{gap:4,miw:0,children:[n.jsx(O,{fw:600,size:"lg",children:"Choose a datasource to explore"}),n.jsx(O,{c:"dimmed",size:"sm",children:"Browse tables and start exploring data visually."})]}),T(!1)]}),n.jsx(je,{flex:1,mih:0,children:n.jsx($n,{h:"100%",type:"auto",children:n.jsx(ue,{gap:"sm",children:e.map(g=>{const M=Qt[g.type],h=(M==null?void 0:M.icon)??Ft;return n.jsx(Jt,{onClick:()=>q(g),className:"focus-ring",style:{borderRadius:"var(--mantine-radius-sm)"},children:n.jsx(Ca,{withBorder:!0,shadow:"xs",padding:"sm",radiu
22s:"sm",style:{transition:"border-color 120ms ease"},styles:{root:{cursor:"pointer"}},children:n.jsxs(Y,{justify:"space-between",wrap:"nowrap",children:[n.jsxs(Y,{gap:"xs",wrap:"nowrap",miw:0,children:[n.jsx(je,{c:"blue.6",style:{lineHeight:0,flexShrink:0},children:n.jsx(h,{size:18,"aria-hidden":!0})}),n.jsx(O,{fw:600,size:"sm",truncate:!0,children:g.name}),g.type&&n.jsx(un,{size:"sm",variant:"light",color:"gray",style:{flexShrink:0},children:g.type})]}),n.jsx(je,{c:"dimmed",style:{lineHeight:0,flexShrink:0},children:n.jsx(ja,{size:16,"aria-hidden":!0})})]})})},g.id)})})})})]})}/** 23 * @license @tabler/icons-react v3.41.1 - MIT 24 * 25 * This source code is licensed under the MIT license. 26 * See the LICENSE file in the root directory of this source tree. 27 */const _r=[["path",{d:"M12 18.004h-5.343c-2.572 -.004 -4.657 -2.011 -4.657 -4.487c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.38 0 2.573 .813 3.13 1.99",key:"svg-0"}],["path",{d:"M19 16v6",key:"svg-1"}],["path",{d:"M22 19l-3 3l-3 -3",key:"svg-2"}]],Dr=Ln("outline","cloud-down","CloudDown",_r),Ar
vendor: 41,168 bytes, line 27
27=new Map([["1km","application/vnd.1000minds.decision-model+xml"],["3dml","text/vnd.in3d.3dml"],["3ds","image/x-3ds"],["3g2","video/3gpp2"],["3gp","video/3gp"],["3gpp","video/3gpp"],["3mf","model/3mf"],["7z","application/x-7z-compressed"],["7zip","application/x-7z-compressed"],["123","application/vnd.lotus-1-2-3"],["aab","application/x-authorware-bin"],["aac","audio/x-acc"],["aam","application/x-authorware-map"],["aas","application/x-authorware-seg"],["abw","application/x-abiword"],["ac","application/vnd.nokia.n-gage.ac+xml"],["ac3","audio/ac3"],["acc","application/vnd.americandynamics.acc"],["ace","application/x-ace-compressed"],["acu","application/vnd.acucobol"],["acutc","application/vnd.acucorp"],["adp","audio/adpcm"],["aep","application/vnd.audiograph"],["afm","application/x-font-type1"],["afp","application/vnd.ibm.modcap"],["ahead","application/vnd.ahead.space"],["ai","application/pdf"],["aif","audio/x-aiff"],["aifc","audio/x-aiff"],["aiff","audio/x-aiff"],["air","application/vnd.adobe.air-application-installer-package+zip"],["ait","application/vnd.dvb.ait"],["ami","application/vnd.amiga.ami"],["amr","audio/amr"],["apk","application/vnd.android.package-archive"],["apng","image/apng"],["appcache","text/cache-manifest"],["application","application/x-ms-application"],["apr","application/vnd.lotus-approach"],["arc","application/x-freearc"],["arj","application/x-arj"],["asc","application/pgp-signature"],["asf","video/x-ms-asf"],["asm","text/x-asm"],["aso","application/vnd.accpac.simply.aso"],["asx","video/x-ms-asf"],["atc","application/vnd.acucorp"],["atom","application/atom+xml"],["atomcat","application/atomcat+xml"],["atomdeleted","application/atomdeleted+xml"],["atomsvc","application/atomsvc+xml"],["atx","application/vnd.antix.game-component"],["au","audio/x-au"],["avi","video/x-msvideo"],["avif","image/avif"],["aw","application/applixware"],["azf","application/vnd.airzip.filesecure.azf"],["azs","application/vnd.airzip.filesecure.azs"],["azv","image/vnd.airzip.accelerator.azv"],["azw","application/vnd.amazon.ebook"],["b16","image/vnd.pco.b16"],["bat","application/x-msdownload"],["bcpio","application/x-bcpio"],["bdf","application/x-font-bdf"],["bdm","application/vnd.syncml.dm+wbxml"],["bdoc","application/x-bdoc"],["bed","application/vnd.realvnc.bed"],["bh2","application/vnd.fujitsu.oasysprs"],["bin","application/octet-stream"],["blb","application/x-blorb"],["blorb","application/x-blorb"],["bmi","application/vnd.bmi"],["bmml","application/vnd.balsamiq.bmml+xml"],["bmp","image/bmp"],["book","application/vnd.framemaker"],["box","application/vnd.previewsystems.box"],["boz","application/x-bzip2"],["bpk","application/octet-stream"],["bpmn","application/octet-stream"],["bsp","model/vnd.valve.source.compiled-map"],["btif","image/prs.btif"],["buffer","application/octet-stream"],["bz","application/x-bzip"],["bz2","application/x-bzip2"],["c","text/x-c"],["c4d","application/vnd.clonk.c4group"],["c4f","application/vnd.clonk.c4group"],["c4g","application/vnd.clonk.c4group"],["c4p","application/vnd.clonk.c4group"],["c4u","application/vnd.clonk.c4group"],["c11amc","application/vnd.cluetrust.cartomobile-config"],["c11amz","application/vnd.cluetrust.cartomobile-config-pkg"],["cab","application/vnd.ms-cab-compressed"],["caf","audio/x-caf"],["cap","application/vnd.tcpdump.pcap"],["car","application/vnd.curl.car"],["cat","application/vnd.ms-pki.seccat"],["cb7","application/x-cbr"],["cba","application/x-cbr"],["cbr","application/x-cbr"],["cbt","application/x-cbr"],["cbz","application/x-cbr"],["cc","text/x-c"],["cco","application/x-cocoa"],["cct","application/x-director"],["ccxml","application/ccxml+xml"],["cdbcmsg","application/vnd.contact.cmsg"],["cda","application/x-cdf"],["cdf","application/x-netcdf"],["cdfx","application/cdfx+xml"],["cdkey","application/vnd.mediastation.cdkey"],["cdmia","application/cdmi-capability"],["cdmic","application/cdmi-container"],["cdmid","application/cdmi-domain"],["cdmio","application/cdmi-object"],["cdmiq","application/cdmi-queue"],["cdr","application/cdr"],["cdx","chemical/x-cdx"],["cdxml","application/vnd.chemdraw+xml"],["cdy","application/vnd.cinderella"],["cer","application/pkix-cert"],["cfs","application/x-cfs-compressed"],["cgm","image/cgm"],["chat","application/x-chat"],["chm","application/vnd.ms-htmlhelp"],["chrt","application/vnd.kde.kchart"],["cif","chemical/x-cif"],["cii","application/vnd.anser-web-certificate-issue-initiation"],["cil","application/vnd.ms-artgalry"],["cjs","application/node"],["cla","application/vnd.claymore"],["class","application/octet-stream"],["clkk","application/vnd.crick.clicker.keyboard"],["clkp","application/vnd.crick.clicker.palette"],["clkt","application/vnd.crick.clicker.template"],["clkw","application/vnd.crick.clicker.wordbank"],["clkx","application/vnd.crick.clicker"],["clp","application/x-msclip"],["cmc","application/vnd.cosmocaller"],["cmdf","chemical/x-cmdf"],["cml","chemical/x-cml"],["cmp","application/vnd.yellowriver-custom-menu"],["cmx","image/x-cmx"],["cod","application/vnd.rim.cod"],["coffee","text/coffeescript"],["com","application/x-msdownload"],["conf","text/plain"],["cpio","application/x-cpio"],["cpp","text/x-c"],["cpt","application/mac-compactpro"],["crd","application/x-mscardfile"],["crl","application/pkix-crl"],["crt","application/x-x509-ca-cert"],["crx","application/x-chrome-extension"],["cryptonote","application/vnd.rig.cryptonote"],["csh","application/x-csh"],["csl","application/vnd.citationstyles.style+xml"],["csml","chemical/x-csml"],["csp","application/vnd.commonspace"],["csr","application/octet-stream"],["css","text/css"],["cst","application/x-director"],["csv","text/csv"],["cu","application/cu-seeme"],["curl","text/vnd.curl"],["cww","application/prs.cww"],["cxt","application/x-director"],["cxx","text/x-c"],["dae","model/vnd.collada+xml"],["daf","application/vnd.mobius.daf"],["dart","application/vnd.dart"],["dataless","application/vnd.fdsn.seed"],["davmount","application/davmount+xml"],["dbf","application/vnd.dbf"],["dbk","application/docbook+xml"],["dcr","application/x-director"],["dcurl","text/vnd.curl.dcurl"],["dd2","application/vnd.oma.dd2+xml"],["ddd","application/vnd.fujixerox.ddd"],["ddf","application/vnd.syncml.dmddf+xml"],["dds","image/vnd.ms-dds"],["deb","application/x-debian-package"],["def","text/plain"],["deploy","application/octet-stream"],["der","application/x-x509-ca-cert"],["dfac","application/vnd.dreamfactory"],["dgc","application/x-dgc-compressed"],["dic","text/x-c"],["dir","application/x-director"],["dis","application/vnd.mobius.dis"],["disposition-notification","message/disposition-notification"],["dist","application/octet-stream"],["distz","application/octet-stream"],["djv","image/vnd.djvu"],["djvu","image/vnd.djvu"],["dll","application/octet-stream"],["dmg","application/x-apple-diskimage"],["dmn","application/octet-stream"],["dmp","application/vnd.tcpdump.pcap"],["dms","application/octet-stream"],["dna","application/vnd.dna"],["doc","application/msword"],["docm","application/vnd.ms-word.template.macroEnabled.12"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],["dot","application/msword"],["dotm","application/vnd.ms-word.template.macroEnabled.12"],["dotx","application/vnd.openxmlformats-officedocument.wordprocessingml.template"],["dp","application/vnd.osgi.dp"],["dpg","application/vnd.dpgraph"],["dra","audio/vnd.dra"],["drle","image/dicom-rle"],["dsc","text/prs.lines.tag"],["dssc","application/dssc+der"],["dtb","application/x-dtbook+xml"],["dtd","application/xml-dtd"],["dts","audio/vnd.dts"],["dtshd","audio/vnd.dts.hd"],["dump","application/octet-stream"],["dvb","video/vnd.dvb.file"],["dvi","application/x-dvi"],["dwd","application/atsc-dwd+xml"],["dwf","model/vnd.dwf"],["dwg","image/vnd.dwg"],["dxf","image/vnd.dxf"],["dxp","application/vnd.spotfire.dxp"],["dxr","application/x-director"],["ear","application/java-archive"],["ecelp4800","audio/vnd.nuera.ecelp4800"],["ecelp7470","audio/vnd.nuera.ecelp7470"],["ecelp9600","audio/vnd.nuera.ecelp9600"],["ecma","application/ecmascript"],["edm","application/vnd.novadigm.edm"],["edx","application/vnd.novadigm.edx"],["efif","application/vnd.picsel"],["ei6","application/vnd.pg.osasli"],["elc","application/octet-stream"],["emf","image/emf"],["eml","message/rfc822"],["emma","application/emma+xml"],["emotionml","application/emotionml+xml"],["emz","application/x-msmetafile"],["eol","audio/vnd.digital-winds"],["eot","application/vnd.ms-fontobject"],["eps","application/postscript"],["epub","application/epub+zip"],["es","application/ecmascript"],["es3","application/vnd.eszigno3+xml"],["esa","application/vnd.osgi.subsystem"],["esf","application/vnd.epson.esf"],["et3","application/vnd.eszigno3+xml"],["etx","text/x-setext"],["eva","application/x-eva"],["evy","application/x-envoy"],["exe","application/octet-stream"],["exi","application/exi"],["exp","application/express"],["exr","image/aces"],["ext","application/vnd.novadigm.ext"],["ez","application/andrew-inset"],["ez2","application/vnd.ezpix-album"],["ez3","application/vnd.ezpix-package"],["f","text/x-fortran"],["f4v","video/mp4"],["f77","text/x-fortran"],["f90","text/x-fortran"],["fbs","image/vnd.fastbidsheet"],["fcdt","application/vnd.adobe.formscentral.fcdt"],["fcs","application/vnd.isac.fcs"],["fdf","application/vnd.fdf"],["fdt","application/fdt+xml"],["fe_launch","application/vnd.denovo.fcselayout-link"],["fg5","application/vnd.fujitsu.oasysgp"],["fgd","application/x-director"],["fh","image/x-freehand"],["fh4","image/x-freehand"],["fh5","image/x-freehand"],["fh7","image/x-freehand"],["fhc","image/x-freehand"],["fig","application/x-xfig"],["fits","image/fits"],["flac","audio/x-flac"],["fli","video/x-fli"],["flo","application/vnd.micrografx.flo"],["flv","video/x-flv"],["flw","application/vnd.kde.kivio"],["flx","text/vnd.fmi.flexstor"],["fly","text/vnd.fly"],["fm","application/vnd.framemaker"],["fnc","application/vnd.frogans.fnc"],["fo","application/vnd.software602.filler.form+xml"],["for","text/x-fortran"],["fpx","image/vnd.fpx"],["frame","application/vnd.framemaker"],["fsc","application/vnd.fsc.weblaunch"],["fst","image/vnd.fst"],["ftc","application/vnd.fluxtime.clip"],["fti","application/vnd.anser-web-funds-transfer-initiation"],["fvt","video/vnd.fvt"],["fxp","application/vnd.adobe.fxp"],["fxpl","application/vnd.adobe.fxp"],["fzs","application/vnd.fuzzysheet"],["g2w","application/vnd.geoplan"],["g3","image/g3fax"],["g3w","application/vnd.geospace"],["gac","application/vnd.groove-account"],["gam","application/x-tads"],["gbr","application/rpki-ghostbusters"],["gca","application/x-gca-compressed"],["gdl","model/vnd.gdl"],["gdoc","application/vnd.google-apps.document"],["geo","application/vnd.dynageo"],["geojson","application/geo+json"],["gex","application/vnd.geometry-explorer"],["ggb","application/vnd.geogebra.file"],["ggt","application/vnd.geogebra.tool"],["ghf","application/vnd.groove-help"],["gif","image/gif"],["gim","application/vnd.groove-identity-message"],["glb","model/gltf-binary"],["gltf","model/gltf+json"],["gml","application/gml+xml"],["gmx","application/vnd.gmx"],["gnumeric","application/x-gnumeric"],["gpg","application/gpg-keys"],["gph","application/vnd.flographit"],["gpx","application/gpx+xml"],["gqf","application/vnd.grafeq"],["gqs","application/vnd.grafeq"],["gram","application/srgs"],["gramps","application/x-gramps-xml"],["gre","application/vnd.geometry-explorer"],["grv","application/vnd.groove-injector"],["grxml","application/srgs+xml"],["gsf","application/x-font-ghostscript"],["gsheet","application/vnd.google-apps.spreadsheet"],["gslides","application/vnd.google-apps.presentation"],["gtar","application/x-gtar"],["gtm","application/vnd.groove-tool-message"],["gtw","model/vnd.gtw"],["gv","text/vnd.graphviz"],["gxf","application/gxf"],["gxt","application/vnd.geonext"],["gz","application/gzip"],["gzip","application/gzip"],["h","text/x-c"],["h261","video/h261"],["h263","video/h263"],["h264","video/h264"],["hal","application/vnd.hal+xml"],["hbci","application/vnd.hbci"],["hbs","text/x-handlebars-template"],["hdd","application/x-virtualbox-hdd"],["hdf","application/x-hdf"],["heic","image/heic"],["heics","image/heic-sequence"],["heif","image/heif"],["heifs","image/heif-sequence"],["hej2","image/hej2k"],["held","application/atsc-held+xml"],["hh","text/x-c"],["hjson","application/hjson"],["hlp","application/winhlp"],["hpgl","application/vnd.hp-hpgl"],["hpid","application/vnd.hp-hpid"],["hps","application/vnd.hp-hps"],["hqx","application/mac-binhex40"],["hsj2","image/hsj2"],["htc","text/x-component"],["htke","application/vnd.kenameaapp"],["htm","text/html"],["html","text/html"],["hvd","application/vnd.yamaha.hv-dic"],["hvp","application/vnd.yamaha.hv-voice"],["hvs","application/vnd.yamaha.hv-script"],["i2g","application/vnd.intergeo"],["icc","application/vnd.iccprofile"],["ice","x-conference/x-cooltalk"],["icm","application/vnd.iccprofile"],["ico","image/x-icon"],["ics","text/calendar"],["ief","image/ief"],["ifb","text/calendar"],["ifm","application/vnd.shana.informed.formdata"],["iges","model/iges"],["igl","application/vnd.igloader"],["igm","application/vnd.insors.igm"],["igs","model/iges"],["igx","application/vnd.micrografx.igx"],["iif","application/vnd.shana.informed.interchange"],["img","application/octet-stream"],["imp","application/vnd.accpac.simply.imp"],["ims","application/vnd.ms-ims"],["in","text/plain"],["ini","text/plain"],["ink","application/inkml+xml"],["inkml","application/inkml+xml"],["install","application/x-install-instructions"],["iota","application/vnd.astraea-software.iota"],["ipfix","application/ipfix"],["ipk","application/vnd.shana.informed.package"],["irm","application/vnd.ibm.rights-management"],["irp","application/vnd.irepository.package+xml"],["iso","application/x-iso9660-image"],["itp","application/vnd.shana.informed.formtemplate"],["its","application/its+xml"],["ivp","application/vnd.immervision-ivp"],["ivu","application/vnd.immervision-ivu"],["jad","text/vnd.sun.j2me.app-descriptor"],["jade","text/jade"],["jam","application/vnd.jam"],["jar","application/java-archive"],["jardiff","application/x-java-archive-diff"],["java","text/x-java-source"],["jhc","image/jphc"],["jisp","application/vnd.jisp"],["jls","image/jls"],["jlt","application/vnd.hp-jlyt"],["jng","image/x-jng"],["jnlp","application/x-java-jnlp-file"],["joda","application/vnd.joost.joda-archive"],["jp2","image/jp2"],["jpe","image/jpeg"],["jpeg","image/jpeg"],["jpf","image/jpx"],["jpg","image/jpeg"],["jpg2","image/jp2"],["jpgm","video/jpm"],["jpgv","video/jpeg"],["jph","image/jph"],["jpm","video/jpm"],["jpx","image/jpx"],["js","application/javascript"],["json","application/json"],["json5","application/json5"],["jsonld","application/ld+json"],["jsonl","application/jsonl"],["jsonml","application/jsonml+json"],["jsx","text/jsx"],["jxr","image/jxr"],["jxra","image/jxra"],["jxrs","image/jxrs"],["jxs","image/jxs"],["jxsc","image/jxsc"],["jxsi","image/jxsi"],["jxss","image/jxss"],["kar","audio/midi"],["karbon","application/vnd.kde.karbon"],["kdb","application/octet-stream"],["kdbx","application/x-keepass2"],["key","application/x-iwork-keynote-sffkey"],["kfo","application/vnd.kde.kformula"],["kia","application/vnd.kidspiration"],["kml","application/vnd.google-earth.kml+xml"],["kmz","application/vnd.google-earth.kmz"],["kne","application/vnd.kinar"],["knp","application/vnd.kinar"],["kon","application/vnd.kde.kontour"],["kpr","application/vnd.kde.kpresenter"],["kpt","application/vnd.kde.kpresenter"],["kpxx","application/vnd.ds-keypoint"],["ksp","application/vnd.kde.kspread"],["ktr","application/vnd.kahootz"],["ktx","image/ktx"],["ktx2","image/ktx2"],["ktz","application/vnd.kahootz"],["kwd","application/vnd.kde.kword"],["kwt","application/vnd.kde.kword"],["lasxml","application/vnd.las.las+xml"],["latex","application/x-latex"],["lbd","application/vnd.llamagraphics.life-balance.desktop"],["lbe","application/vnd.llamagraphics.life-balance.exchange+xml"],["les","application/vnd.hhe.lesson-player"],["less","text/less"],["lgr","application/lgr+xml"],["lha","application/octet-stream"],["link66","application/vnd.route66.link66+xml"],["list","text/plain"],["list3820","application/vnd.ibm.modcap"],["listafp","application/vnd.ibm.modcap"],["litcoffee","text/coffeescript"],["lnk","application/x-ms-shortcut"],["log","text/plain"],["lostxml","application/lost+xml"],["lrf","application/octet-stream"],["lrm","application/vnd.ms-lrm"],["ltf","application/vnd.frogans.ltf"],["lua","text/x-lua"],["luac","application/x-lua-bytecode"],["lvp","audio/vnd.lucent.voice"],["lwp","application/vnd.lotus-wordpro"],["lzh","application/octet-stream"],["m1v","video/mpeg"],["m2a","audio/mpeg"],["m2v","video/mpeg"],["m3a","audio/mpeg"],["m3u","text/plain"],["m3u8","application/vnd.apple.mpegurl"],["m4a","audio/x-m4a"],["m4p","application/mp4"],["m4s","video/iso.segment"],["m4u","application/vnd.mpegurl"],["m4v","video/x-m4v"],["m13","application/x-msmediaview"],["m14","application/x-msmediaview"],["m21","application/mp21"],["ma","application/mathematica"],["mads","application/mads+xml"],["maei","application/mmt-aei+xml"],["mag","application/vnd.ecowin.chart"],["maker","application/vnd.framemaker"],["man","text/troff"],["manifest","text/cache-manifest"],["map","application/json"],["mar","application/octet-stream"],["markdown","text/markdown"],["mathml","application/mathml+xml"],["mb","application/mathematica"],["mbk","application/vnd.mobius.mbk"],["mbox","application/mbox"],["mc1","application/vnd.medcalcdata"],["mcd","application/vnd.mcd"],["mcurl","text/vnd.curl.mcurl"],["md","text/markdown"],["mdb","application/x-msaccess"],["mdi","image/vnd.ms-modi"],["mdx","text/mdx"],["me","text/troff"],["mesh","model/mesh"],["meta4","application/metalink4+xml"],["metalink","application/metalink+xml"],["mets","application/mets+xml"],["mfm","application/vnd.mfmp"],["mft","application/rpki-manifest"],["mgp","application/vnd.osgeo.mapguide.package"],["mgz","application/vnd.proteus.magazine"],["mid","audio/midi"],["midi","audio/midi"],["mie","application/x-mie"],["mif","application/vnd.mif"],["mime","message/rfc822"],["mj2","video/mj2"],["mjp2","video/mj2"],["mjs","application/javascript"],["mk3d","video/x-matroska"],["mka","audio/x-matroska"],["mkd","text/x-markdown"],["mks","video/x-matroska"],["mkv","video/x-matroska"],["mlp","application/vnd.dolby.mlp"],["mmd","application/vnd.chipnuts.karaoke-mmd"],["mmf","application/vnd.smaf"],["mml","text/mathml"],["mmr","image/vnd.fujixerox.edmics-mmr"],["mng","video/x-mng"],["mny","application/x-msmoney"],["mobi","application/x-mobipocket-ebook"],["mods","application/mods+xml"],["mov","video/quicktime"],["movie","video/x-sgi-movie"],["mp2","audio/mpeg"],["mp2a","audio/mpeg"],["mp3","audio/mpeg"],["mp4","video/mp4"],["mp4a","audio/mp4"],["mp4s","application/mp4"],["mp4v","video/mp4"],["mp21","application/mp21"],["mpc","application/vnd.mophun.certificate"],["mpd","application/dash+xml"],["mpe","video/mpeg"],["mpeg","video/mpeg"],["mpg","video/mpeg"],["mpg4","video/mp4"],["mpga","audio/mpeg"],["mpkg","application/vnd.apple.installer+xml"],["mpm","application/vnd.blueice.multipass"],["mpn","application/vnd.mophun.application"],["mpp","application/vnd.ms-project"],["mpt","application/vnd.ms-project"],["mpy","application/vnd.ibm.minipay"],["mqy","application/vnd.mobius.mqy"],["mrc","application/marc"],["mrcx","application/marcxml+xml"],["ms","text/troff"],["mscml","application/mediaservercontrol+xml"],["mseed","application/vnd.fdsn.mseed"],["mseq","application/vnd.mseq"],["msf","application/vnd.epson.msf"],["msg","application/vnd.ms-outlook"],["msh","model/mesh"],["msi","application/x-msdownload"],["msl","application/vnd.mobius.msl"],["msm","application/octet-stream"],["msp","application/octet-stream"],["msty","application/vnd.muvee.style"],["mtl","model/mtl"],["mts","model/vnd.mts"],["mus","application/vnd.musician"],["musd","application/mmt-usd+xml"],["musicxml","application/vnd.recordare.musicxml+xml"],["mvb","application/x-msmediaview"],["mvt","application/vnd.mapbox-vector-tile"],["mwf","application/vnd.mfer"],["mxf","application/mxf"],["mxl","application/vnd.recordare.musicxml"],["mxmf","audio/mobile-xmf"],["mxml","application/xv+xml"],["mxs","application/vnd.triscape.mxs"],["mxu","video/vnd.mpegurl"],["n-gage","application/vnd.nokia.n-gage.symbian.install"],["n3","text/n3"],["nb","application/mathematica"],["nbp","application/vnd.wolfram.player"],["nc","application/x-netcdf"],["ncx","application/x-dtbncx+xml"],["nfo","text/x-nfo"],["ngdat","application/vnd.nokia.n-gage.data"],["nitf","application/vnd.nitf"],["nlu","application/vnd.neurolanguage.nlu"],["nml","application/vnd.enliven"],["nnd","application/vnd.noblenet-directory"],["nns","application/vnd.noblenet-sealer"],["nnw","application/vnd.noblenet-web"],["npx","image/vnd.net-fpx"],["nq","application/n-quads"],["nsc","application/x-conference"],["nsf","application/vnd.lotus-notes"],["nt","application/n-triples"],["ntf","application/vnd.nitf"],["numbers","application/x-iwork-numbers-sffnumbers"],["nzb","application/x-nzb"],["oa2","application/vnd.fujitsu.oasys2"],["oa3","application/vnd.fujitsu.oasys3"],["oas","application/vnd.fujitsu.oasys"],["obd","application/x-msbinder"],["obgx","application/vnd.openblox.game+xml"],["obj","model/obj"],["oda","application/oda"],["odb","application/vnd.oasis.opendocument.database"],["odc","application/vnd.oasis.opendocument.chart"],["odf","application/vnd.oasis.opendocument.formula"],["odft","application/vnd.oasis.opendocument.formula-template"],["odg","application/vnd.oasis.opendocument.graphics"],["odi","application/vnd.oasis.opendocument.image"],["odm","application/vnd.oasis.opendocument.text-master"],["odp","application/vnd.oasis.opendocument.presentation"],["ods","application/vnd.oasis.opendocument.spreadsheet"],["odt","application/vnd.oasis.opendocument.text"],["oga","audio/ogg"],["ogex","model/vnd.opengex"],["ogg","audio/ogg"],["ogv","video/ogg"],["ogx","application/ogg"],["omdoc","application/omdoc+xml"],["onepkg","application/onenote"],["onetmp","application/onenote"],["onetoc","application/onenote"],["onetoc2","application/onenote"],["opf","application/oebps-package+xml"],["opml","text/x-opml"],["oprc","application/vnd.palm"],["opus","audio/ogg"],["org","text/x-org"],["osf","application/vnd.yamaha.openscoreformat"],["osfpvg","application/vnd.yamaha.openscoreformat.osfpvg+xml"],["osm","application/vnd.openstreetmap.data+xml"],["otc","application/vnd.oasis.opendocument.chart-template"],["otf","font/otf"],["otg","application/vnd.oasis.opendocument.graphics-template"],["oth","application/vnd.oasis.opendocument.text-web"],["oti","application/vnd.oasis.opendocument.image-template"],["otp","application/vnd.oasis.opendocument.presentation-template"],["ots","application/vnd.oasis.opendocument.spreadsheet-template"],["ott","application/vnd.oasis.opendocument.text-template"],["ova","application/x-virtualbox-ova"],["ovf","application/x-virtualbox-ovf"],["owl","application/rdf+xml"],["oxps","application/oxps"],["oxt","application/vnd.openofficeorg.extension"],["p","text/x-pascal"],["p7a","application/x-pkcs7-signature"],["p7b","application/x-pkcs7-certificates"],["p7c","application/pkcs7-mime"],["p7m","application/pkcs7-mime"],["p7r","application/x-pkcs7-certreqresp"],["p7s","application/pkcs7-signature"],["p8","application/pkcs8"],["p10","application/x-pkcs10"],["p12","application/x-pkcs12"],["pac","application/x-ns-proxy-autoconfig"],["pages","application/x-iwork-pages-sffpages"],["pas","text/x-pascal"],["paw","application/vnd.pawaafile"],["pbd","application/vnd.powerbuilder6"],["pbm","image/x-portable-bitmap"],["pcap","application/vnd.tcpdump.pcap"],["pcf","application/x-font-pcf"],["pcl","application/vnd.hp-pcl"],["pclxl","application/vnd.hp-pclxl"],["pct","image/x-pict"],["pcurl","application/vnd.curl.pcurl"],["pcx","image/x-pcx"],["pdb","application/x-pilot"],["pde","text/x-processing"],["pdf","application/pdf"],["pem","application/x-x509-user-cert"],["pfa","application/x-font-type1"],["pfb","application/x-font-type1"],["pfm","application/x-font-type1"],["pfr","application/font-tdpfr"],["pfx","application/x-pkcs12"],["pgm","image/x-portable-graymap"],["pgn","application/x-chess-pgn"],["pgp","application/pgp"],["php","application/x-httpd-php"],["php3","application/x-httpd-php"],["php4","application/x-httpd-php"],["phps","application/x-httpd-php-source"],["phtml","application/x-httpd-php"],["pic","image/x-pict"],["pkg","application/octet-stream"],["pki","application/pkixcmp"],["pkipath","application/pkix-pkipath"],["pkpass","application/vnd.apple.pkpass"],["pl","application/x-perl"],["plb","application/vnd.3gpp.pic-bw-large"],["plc","application/vnd.mobius.plc"],["plf","application/vnd.pocketlearn"],["pls","application/pls+xml"],["pm","application/x-perl"],["pml","application/vnd.ctc-posml"],["png","image/png"],["pnm","image/x-portable-anymap"],["portpkg","application/vnd.macports.portpkg"],["pot","application/vnd.ms-powerpoint"],["potm","application/vnd.ms-powerpoint.presentation.macroEnabled.12"],["potx","application/vnd.openxmlformats-officedocument.presentationml.template"],["ppa","application/vnd.ms-powerpoint"],["ppam","application/vnd.ms-powerpoint.addin.macroEnabled.12"],["ppd","application/vnd.cups-ppd"],["ppm","image/x-portable-pixmap"],["pps","application/vnd.ms-powerpoint"],["ppsm","application/vnd.ms-powerpoint.slideshow.macroEnabled.12"],["ppsx","application/vnd.openxmlformats-officedocument.presentationml.slideshow"],["ppt","application/powerpoint"],["pptm","application/vnd.ms-powerpoint.presentation.macroEnabled.12"],["pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],["pqa","application/vnd.palm"],["prc","application/x-pilot"],["pre","application/vnd.lotus-freelance"],["prf","application/pics-rules"],["provx","application/provenance+xml"],["ps","application/postscript"],["psb","application/vnd.3gpp.pic-bw-small"],["psd","application/x-photoshop"],["psf","application/x-font-linux-psf"],["pskcxml","application/pskc+xml"],["pti","image/prs.pti"],["ptid","application/vnd.pvi.ptid1"],["pub","application/x-mspublisher"],["pvb","application/vnd.3gpp.pic-bw-var"],["pwn","application/vnd.3m.post-it-notes"],["pya","audio/vnd.ms-playready.media.pya"],["pyv","video/vnd.ms-playready.media.pyv"],["qam","application/vnd.epson.quickanime"],["qbo","application/vnd.intu.qbo"],["qfx","application/vnd.intu.qfx"],["qps","application/vnd.publishare-delta-tree"],["qt","video/quicktime"],["qwd","application/vnd.quark.quarkxpress"],["qwt","application/vnd.quark.quarkxpress"],["qxb","application/vnd.quark.quarkxpress"],["qxd","application/vnd.quark.quarkxpress"],["qxl","application/vnd.quark.quarkxpress"],["qxt","application/vnd.quark.quarkxpress"],["ra","audio/x-realaudio"],["ram","audio/x-pn-realaudio"],["raml","application/raml+yaml"],["rapd","application/route-apd+xml"],["rar","application/x-rar"],["ras","image/x-cmu-raster"],["rcprofile","application/vnd.ipunplugged.rcprofile"],["rdf","application/rdf+xml"],["rdz","application/vnd.data-vision.rdz"],["relo","application/p2p-overlay+xml"],["rep","application/vnd.businessobjects"],["res","application/x-dtbresource+xml"],["rgb","image/x-rgb"],["rif","application/reginfo+xml"],["rip","audio/vnd.rip"],["ris","application/x-research-info-systems"],["rl","application/resource-lists+xml"],["rlc","image/vnd.fujixerox.edmics-rlc"],["rld","application/resource-lists-diff+xml"],["rm","audio/x-pn-realaudio"],["rmi","audio/midi"],["rmp","audio/x-pn-realaudio-plugin"],["rms","application/vnd.jcp.javame.midlet-rms"],["rmvb","application/vnd.rn-realmedia-vbr"],["rnc","application/relax-ng-compact-syntax"],["rng","application/xml"],["roa","application/rpki-roa"],["roff","text/troff"],["rp9","application/vnd.cloanto.rp9"],["rpm","audio/x-pn-realaudio-plugin"],["rpss","application/vnd.nokia.radio-presets"],["rpst","application/vnd.nokia.radio-preset"],["rq","application/sparql-query"],["rs","application/rls-services+xml"],["rsa","application/x-pkcs7"],["rsat","application/atsc-rsat+xml"],["rsd","application/rsd+xml"],["rsheet","application/urc-ressheet+xml"],["rss","application/rss+xml"],["rtf","text/rtf"],["rtx","text/richtext"],["run","application/x-makeself"],["rusd","application/route-usd+xml"],["rv","video/vnd.rn-realvideo"],["s","text/x-asm"],["s3m","audio/s3m"],["saf","application/vnd.yamaha.smaf-audio"],["sass","text/x-sass"],["sbml","application/sbml+xml"],["sc","application/vnd.ibm.secure-container"],["scd","application/x-msschedule"],["scm","application/vnd.lotus-screencam"],["scq","application/scvp-cv-request"],["scs","application/scvp-cv-response"],["scss","text/x-scss"],["scurl","text/vnd.curl.scurl"],["sda","application/vnd.stardivision.draw"],["sdc","application/vnd.stardivision.calc"],["sdd","application/vnd.stardivision.impress"],["sdkd","application/vnd.solent.sdkm+xml"],["sdkm","application/vnd.solent.sdkm+xml"],["sdp","application/sdp"],["sdw","application/vnd.stardivision.writer"],["sea","application/octet-stream"],["see","application/vnd.seemail"],["seed","application/vnd.fdsn.seed"],["sema","application/vnd.sema"],["semd","application/vnd.semd"],["semf","application/vnd.semf"],["senmlx","application/senml+xml"],["sensmlx","application/sensml+xml"],["ser","application/java-serialized-object"],["setpay","application/set-payment-initiation"],["setreg","application/set-registration-initiation"],["sfd-hdstx","application/vnd.hydrostatix.sof-data"],["sfs","application/vnd.spotfire.sfs"],["sfv","text/x-sfv"],["sgi","image/sgi"],["sgl","application/vnd.stardivision.writer-global"],["sgm","text/sgml"],["sgml","text/sgml"],["sh","application/x-sh"],["shar","application/x-shar"],["shex","text/shex"],["shf","application/shf+xml"],["shtml","text/html"],["sid","image/x-mrsid-image"],["sieve","application/sieve"],["sig","application/pgp-signature"],["sil","audio/silk"],["silo","model/mesh"],["sis","application/vnd.symbian.install"],["sisx","application/vnd.symbian.install"],["sit","application/x-stuffit"],["sitx","application/x-stuffitx"],["siv","application/sieve"],["skd","application/vnd.koan"],["skm","application/vnd.koan"],["skp","application/vnd.koan"],["skt","application/vnd.koan"],["sldm","application/vnd.ms-powerpoint.slide.macroenabled.12"],["sldx","application/vnd.openxmlformats-officedocument.presentationml.slide"],["slim","text/slim"],["slm","text/slim"],["sls","application/route-s-tsid+xml"],["slt","application/vnd.epson.salt"],["sm","application/vnd.stepmania.stepchart"],["smf","application/vnd.stardivision.math"],["smi","application/smil"],["smil","application/smil"],["smv","video/x-smv"],["smzip","application/vnd.stepmania.package"],["snd","audio/basic"],["snf","application/x-font-snf"],["so","application/octet-stream"],["spc","application/x-pkcs7-certificates"],["spdx","text/spdx"],["spf","application/vnd.yamaha.smaf-phrase"],["spl","application/x-futuresplash"],["spot","text/vnd.in3d.spot"],["spp","application/scvp-vp-response"],["spq","application/scvp-vp-request"],["spx","audio/ogg"],["sql","application/x-sql"],["src","application/x-wais-source"],["srt","application/x-subrip"],["sru","application/sru+xml"],["srx","application/sparql-results+xml"],["ssdl","application/ssdl+xml"],["sse","application/vnd.kodak-descriptor"],["ssf","application/vnd.epson.ssf"],["ssml","application/ssml+xml"],["sst","application/octet-stream"],["st","application/vnd.sailingtracker.track"],["stc","application/vnd.sun.xml.calc.template"],["std","application/vnd.sun.xml.draw.template"],["stf","application/vnd.wt.stf"],["sti","application/vnd.sun.xml.impress.template"],["stk","application/hyperstudio"],["stl","model/stl"],["stpx","model/step+xml"],["stpxz","model/step-xml+zip"],["stpz","model/step+zip"],["str","application/vnd.pg.format"],["stw","application/vnd.sun.xml.writer.template"],["styl","text/stylus"],["stylus","text/stylus"],["sub","text/vnd.dvb.subtitle"],["sus","application/vnd.sus-calendar"],["susp","application/vnd.sus-calendar"],["sv4cpio","application/x-sv4cpio"],["sv4crc","application/x-sv4crc"],["svc","application/vnd.dvb.service"],["svd","application/vnd.svd"],["svg","image/svg+xml"],["svgz","image/svg+xml"],["swa","application/x-director"],["swf","application/x-shockwave-flash"],["swi","application/vnd.aristanetworks.swi"],["swidtag","application/swid+xml"],["sxc","application/vnd.sun.xml.calc"],["sxd","application/vnd.sun.xml.draw"],["sxg","application/vnd.sun.xml.writer.global"],["sxi","application/vnd.sun.xml.impress"],["sxm","application/vnd.sun.xml.math"],["sxw","application/vnd.sun.xml.writer"],["t","text/troff"],["t3","application/x-t3vm-image"],["t38","image/t38"],["taglet","application/vnd.mynfc"],["tao","application/vnd.tao.intent-module-archive"],["tap","image/vnd.tencent.tap"],["tar","application/x-tar"],["tcap","application/vnd.3gpp2.tcap"],["tcl","application/x-tcl"],["td","application/urc-targetdesc+xml"],["teacher","application/vnd.smart.teacher"],["tei","application/tei+xml"],["teicorpus","application/tei+xml"],["tex","application/x-tex"],["texi","application/x-texinfo"],["texinfo","application/x-texinfo"],["text","text/plain"],["tfi","application/thraud+xml"],["tfm","application/x-tex-tfm"],["tfx","image/tiff-fx"],["tga","image/x-tga"],["tgz","application/x-tar"],["thmx","application/vnd.ms-officetheme"],["tif","image/tiff"],["tiff","image/tiff"],["tk","application/x-tcl"],["tmo","application/vnd.tmobile-livetv"],["toml","application/toml"],["torrent","application/x-bittorrent"],["tpl","application/vnd.groove-tool-template"],["tpt","application/vnd.trid.tpt"],["tr","text/troff"],["tra","application/vnd.trueapp"],["trig","application/trig"],["trm","application/x-msterminal"],["ts","video/mp2t"],["tsd","application/timestamped-data"],["tsv","text/tab-separated-values"],["ttc","font/collection"],["ttf","font/ttf"],["ttl","text/turtle"],["ttml","application/ttml+xml"],["twd","application/vnd.simtech-mindmapper"],["twds","application/vnd.simtech-mindmapper"],["txd","application/vnd.genomatix.tuxedo"],["txf","application/vnd.mobius.txf"],["txt","text/plain"],["u8dsn","message/global-delivery-status"],["u8hdr","message/global-headers"],["u8mdn","message/global-disposition-notification"],["u8msg","message/global"],["u32","application/x-authorware-bin"],["ubj","application/ubjson"],["udeb","application/x-debian-package"],["ufd","application/vnd.ufdl"],["ufdl","application/vnd.ufdl"],["ulx","application/x-glulx"],["umj","application/vnd.umajin"],["unityweb","application/vnd.unity"],["uoml","application/vnd.uoml+xml"],["uri","text/uri-list"],["uris","text/uri-list"],["urls","text/uri-list"],["usdz","model/vnd.usdz+zip"],["ustar","application/x-ustar"],["utz","application/vnd.uiq.theme"],["uu","text/x-uuencode"],["uva","audio/vnd.dece.audio"],["uvd","application/vnd.dece.data"],["uvf","application/vnd.dece.data"],["uvg","image/vnd.dece.graphic"],["uvh","video/vnd.dece.hd"],["uvi","image/vnd.dece.graphic"],["uvm","video/vnd.dece.mobile"],["uvp","video/vnd.dece.pd"],["uvs","video/vnd.dece.sd"],["uvt","application/vnd.dece.ttml+xml"],["uvu","video/vnd.uvvu.mp4"],["uvv","video/vnd.dece.video"],["uvva","audio/vnd.dece.audio"],["uvvd","application/vnd.dece.data"],["uvvf","application/vnd.dece.data"],["uvvg","image/vnd.dece.graphic"],["uvvh","video/vnd.dece.hd"],["uvvi","image/vnd.dece.graphic"],["uvvm","video/vnd.dece.mobile"],["uvvp","video/vnd.dece.pd"],["uvvs","video/vnd.dece.sd"],["uvvt","application/vnd.dece.ttml+xml"],["uvvu","video/vnd.uvvu.mp4"],["uvvv","video/vnd.dece.video"],["uvvx","application/vnd.dece.unspecified"],["uvvz","application/vnd.dece.zip"],["uvx","application/vnd.dece.unspecified"],["uvz","application/vnd.dece.zip"],["vbox","application/x-virtualbox-vbox"],["vbox-extpack","application/x-virtualbox-vbox-extpack"],["vcard","text/vcard"],["vcd","application/x-cdlink"],["vcf","text/x-vcard"],["vcg","application/vnd.groove-vcard"],["vcs","text/x-vcalendar"],["vcx","application/vnd.vcx"],["vdi","application/x-virtualbox-vdi"],["vds","model/vnd.sap.vds"],["vhd","application/x-virtualbox-vhd"],["vis","application/vnd.visionary"],["viv","video/vnd.vivo"],["vlc","application/videolan"],["vmdk","application/x-virtualbox-vmdk"],["vob","video/x-ms-vob"],["vor","application/vnd.stardivision.writer"],["vox","application/x-authorware-bin"],["vrml","model/vrml"],["vsd","application/vnd.visio"],["vsf","application/vnd.vsf"],["vss","application/vnd.visio"],["vst","application/vnd.visio"],["vsw","application/vnd.visio"],["vtf","image/vnd.valve.source.texture"],["vtt","text/vtt"],["vtu","model/vnd.vtu"],["vxml","application/voicexml+xml"],["w3d","application/x-director"],["wad","application/x-doom"],["wadl","application/vnd.sun.wadl+xml"],["war","application/java-archive"],["wasm","application/wasm"],["wav","audio/x-wav"],["wax","audio/x-ms-wax"],["wbmp","image/vnd.wap.wbmp"],["wbs","application/vnd.criticaltools.wbs+xml"],["wbxml","application/wbxml"],["wcm","application/vnd.ms-works"],["wdb","application/vnd.ms-works"],["wdp","image/vnd.ms-photo"],["weba","audio/webm"],["webapp","application/x-web-app-manifest+json"],["webm","video/webm"],["webmanifest","application/manifest+json"],["webp","image/webp"],["wg","application/vnd.pmi.widget"],["wgt","application/widget"],["wks","application/vnd.ms-works"],["wm","video/x-ms-wm"],["wma","audio/x-ms-wma"],["wmd","application/x-ms-wmd"],["wmf","image/wmf"],["wml","text/vnd.wap.wml"],["wmlc","application/wmlc"],["wmls","text/vnd.wap.wmlscript"],["wmlsc","application/vnd.wap.wmlscriptc"],["wmv","video/x-ms-wmv"],["wmx","video/x-ms-wmx"],["wmz","application/x-msmetafile"],["woff","font/woff"],["woff2","font/woff2"],["word","application/msword"],["wpd","application/vnd.wordperfect"],["wpl","application/vnd.ms-wpl"],["wps","application/vnd.ms-works"],["wqd","application/vnd.wqd"],["wri","application/x-mswrite"],["wrl","model/vrml"],["wsc","message/vnd.wfa.wsc"],["wsdl","application/wsdl+xml"],["wspolicy","application/wspolicy+xml"],["wtb","application/vnd.webturbo"],["wvx","video/x-ms-wvx"],["x3d","model/x3d+xml"],["x3db","model/x3d+fastinfoset"],["x3dbz","model/x3d+binary"],["x3dv","model/x3d-vrml"],["x3dvz","model/x3d+vrml"],["x3dz","model/x3d+xml"],["x32","application/x-authorware-bin"],["x_b","model/vnd.parasolid.transmit.binary"],["x_t","model/vnd.parasolid.transmit.text"],["xaml","application/xaml+xml"],["xap","application/x-silverlight-app"],["xar","application/vnd.xara"],["xav","application/xcap-att+xml"],["xbap","application/x-ms-xbap"],["xbd","application/vnd.fujixerox.docuworks.binder"],["xbm","image/x-xbitmap"],["xca","application/xcap-caps+xml"],["xcs","application/calendar+xml"],["xdf","application/xcap-diff+xml"],["xdm","application/vnd.syncml.dm+xml"],["xdp","application/vnd.adobe.xdp+xml"],["xdssc","application/dssc+xml"],["xdw","application/vnd.fujixerox.docuworks"],["xel","application/xcap-el+xml"],["xenc","application/xenc+xml"],["xer","application/patch-ops-error+xml"],["xfdf","application/vnd.adobe.xfdf"],["xfdl","application/vnd.xfdl"],["xht","application/xhtml+xml"],["xhtml","application/xhtml+xml"],["xhvml","application/xv+xml"],["xif","image/vnd.xiff"],["xl","application/excel"],["xla","application/vnd.ms-excel"],["xlam","application/vnd.ms-excel.addin.macroEnabled.12"],["xlc","application/vnd.ms-excel"],["xlf","application/xliff+xml"],["xlm","application/vnd.ms-excel"],["xls","application/vnd.ms-excel"],["xlsb","application/vnd.ms-excel.sheet.binary.macroEnabled.12"],["xlsm","application/vnd.ms-excel.sheet.macroEnabled.12"],["xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],["xlt","application/vnd.ms-excel"],["xltm","application/vnd.ms-excel.template.macroEnabled.12"],["xltx","application/vnd.openxmlformats-officedocument.spreadsheetml.template"],["xlw","application/vnd.ms-excel"],["xm","audio/xm"],["xml","application/xml"],["xns","application/xcap-ns+xml"],["xo","application/vnd.olpc-sugar"],["xop","application/xop+xml"],["xpi","application/x-xpinstall"],["xpl","application/xproc+xml"],["xpm","image/x-xpixmap"],["xpr","application/vnd.is-xpr"],["xps","application/vnd.ms-xpsdocument"],["xpw","application/vnd.intercon.formnet"],["xpx","application/vnd.intercon.formnet"],["xsd","application/xml"],["xsl","application/xml"],["xslt","application/xslt+xml"],["xsm","application/vnd.syncml+xml"],["xspf","application/xspf+xml"],["xul","application/vnd.mozilla.xul+xml"],["xvm","application/xv+xml"],["xvml","application/xv+xml"],["xwd","image/x-xwindowdump"],["xyz","chemical/x-xyz"],["xz","application/x-xz"],["yaml","text/yaml"],["yang","application/yang"],["yin","application/yin+xml"],["yml","text/yaml"],["ymp","text/x-suse-ymp"],["z","application/x-compress"],["z1","application/x-zmachine"],["z2","application/x-zmachine"],["z3","application/x-zmachine"],["z4","application/x-zmachine"],["z5","application/x-zmachine"],["z6","application/x-zmachine"],["z7","application/x-zmachine"],["z8","application/x-zmachine"],["zaz","application/vnd.zzazz.deck+xml"],["zip","application/zip"],["zir","application/vnd.zul"],["zirz","application/vnd.zul"],["zmm","application/vnd.handheld-entertainment+xml"],["zsh","text/x-scriptzsh"]]);function
vendor: 15,517 bytes, lines 27-31
27Xt(e,t,a){const i=Er(e),{webkitRelativePath:o}=e,r=typeof t=="string"?t:typeof o=="string"&&o.length>0?o:`./${e.name}`;return typeof i.path!="string"&&ui(i,"path",r),ui(i,"relativePath",r),i}function Er(e){const{name:t}=e;if(t&&t.lastIndexOf(".")!==-1&&!e.type){const i=t.split(".").pop().toLowerCase(),o=Ar.get(i);o&&Object.defineProperty(e,"type",{value:o,writable:!1,configurable:!1,enumerable:!0})}return e}function ui(e,t,a){Object.defineProperty(e,t,{value:a,writable:!1,configurable:!1,enumerable:!0})}const qr=[".DS_Store","Thumbs.db"];function Tr(e){return Mt(this,void 0,void 0,function*(){return Tn(e)&&Rr(e.dataTransfer)?Fr(e.dataTransfer,e.type):Ir(e)?Or(e):Array.isArray(e)&&e.every(t=>"getFile"in t&&typeof t.getFile=="function")?Pr(e):[]})}function Rr(e){return Tn(e)}function Ir(e){return Tn(e)&&Tn(e.target)}function Tn(e){return typeof e=="object"&&e!==null}function Or(e){return ua(e.target.files).map(t=>Xt(t))}function Pr(e){return Mt(this,void 0,void 0,function*(){return(yield Promise.all(e.map(a=>a.getFile()))).map(a=>Xt(a))})}function Fr(e,t){return Mt(this,void 0,void 0,function*(){if(e.items){const a=ua(e.items).filter(o=>o.kind==="file");if(t!=="drop")return a;const i=yield Promise.all(a.map(Lr));return di(Ki(i))}return di(ua(e.files).map(a=>Xt(a)))})}function di(e){return e.filter(t=>qr.indexOf(t.name)===-1)}function ua(e){if(e===null)return[];const t=[];for(let a=0;a<e.length;a++){const i=e[a];t.push(i)}return t}function Lr(e){if(typeof e.webkitGetAsEntry!="function")return mi(e);const t=e.webkitGetAsEntry();return t&&t.isDirectory?Ui(t):mi(e,t)}function Ki(e){return e.reduce((t,a)=>[...t,...Array.isArray(a)?Ki(a):[a]],[])}function mi(e,t){return Mt(this,void 0,void 0,function*(){var a;if(globalThis.isSecureContext&&typeof e.getAsFileSystemHandle=="function"){const r=yield e.getAsFileSystemHandle();if(r===null)throw new Error(`${e} is not a File`);if(r!==void 0){const l=yield r.getFile();return l.handle=r,Xt(l)}}const i=e.getAsFile();if(!i)throw new Error(`${e} is not a File`);return Xt(i,(a=t==null?void 0:t.fullPath)!==null&&a!==void 0?a:void 0)})}function $r(e){return Mt(this,void 0,void 0,function*(){return e.isDirectory?Ui(e):Mr(e)})}function Ui(e){const t=e.createReader();return new Promise((a,i)=>{const o=[];function r(){t.readEntries(l=>Mt(this,void 0,void 0,function*(){if(l.length){const c=Promise.all(l.map($r));o.push(c),r()}else try{const c=yield Promise.all(o);a(c)}catch(c){i(c)}}),l=>{i(l)})}r()})}function Mr(e){return Mt(this,void 0,void 0,function*(){return new Promise((t,a)=>{e.file(i=>{const o=Xt(i,e.fullPath);t(o)},i=>{a(i)})})})}var hn={},fi;function Nr(){return fi||(fi=1,hn.__esModule=!0,hn.default=function(e,t){if(e&&t){var a=Array.isArray(t)?t:t.split(",");if(a.length===0)return!0;var i=e.name||"",o=(e.type||"").toLowerCase(),r=o.replace(/\/.*$/,"");return a.some(function(l){var c=l.trim().toLowerCase();return c.charAt(0)==="."?i.toLowerCase().endsWith(c):c.endsWith("/*")?r===c.replace(/\/.*$/,""):o===c})}return!0}),hn}var Br=Nr();const ta=Di(Br);function gi(e){return Kr(e)||Wr(e)||Qi(e)||Hr()}function Hr(){throw new TypeError(`Invalid attempt to spread non-iterable instance. 28In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Wr(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Kr(e){if(Array.isArray(e))return da(e)}function xi(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),a.push.apply(a,i)}return a}function hi(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?xi(Object(a),!0).forEach(function(i){Gi(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):xi(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Gi(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function dn(e,t){return Qr(e)||Gr(e,t)||Qi(e,t)||Ur()}function Ur(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. 29In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Qi(e,t){if(e){if(typeof e=="string")return da(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return da(e,t)}}function da(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function Gr(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i=[],o=!0,r=!1,l,c;try{for(a=a.call(e);!(o=(l=a.next()).done)&&(i.push(l.value),!(t&&i.length===t));o=!0);}catch(u){r=!0,c=u}finally{try{!o&&a.return!=null&&a.return()}finally{if(r)throw c}}return i}}function Qr(e){if(Array.isArray(e))return e}var Jr=typeof ta=="function"?ta:ta.default,Vr="file-invalid-type",Yr="file-too-large",Xr="file-too-small",Zr="too-many-files",el=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",a=t.split(","),i=a.length>1?"one of ".concat(a.join(", ")):a[0];return{code:Vr,message:"File type must be ".concat(i)}},vi=function(t){return{code:Yr,message:"File is larger than ".concat(t," ").concat(t===1?"byte":"bytes")}},bi=function(t){return{code:Xr,message:"File is smaller than ".concat(t," ").concat(t===1?"byte":"bytes")}},tl={code:Zr,message:"Too many files"};function nl(e){return e.type===""&&typeof e.getAsFile=="function"}function Ji(e,t){var a=e.type==="application/x-moz-file"||Jr(e,t)||nl(e);return[a,a?null:el(t)]}function Vi(e,t,a){if(It(e.size))if(It(t)&&It(a)){if(e.size>a)return[!1,vi(a)];if(e.size<t)return[!1,bi(t)]}else{if(It(t)&&e.size<t)return[!1,bi(t)];if(It(a)&&e.size>a)return[!1,vi(a)]}return[!0,null]}function It(e){return e!=null}function al(e){var t=e.files,a=e.accept,i=e.minSize,o=e.maxSize,r=e.multiple,l=e.maxFiles,c=e.validator;return!r&&t.length>1||r&&l>=1&&t.length>l?!1:t.every(function(u){var m=Ji(u,a),p=dn(m,1),d=p[0],v=Vi(u,i,o),f=dn(v,1),C=f[0],k=c?c(u):null;return d&&C&&!k})}function Rn(e){return typeof e.isPropagationStopped=="function"?e.isPropagationStopped():typeof e.cancelBubble<"u"?e.cancelBubble:!1}function rn(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(t){return t==="Files"||t==="application/x-moz-file"}):!!e.target&&!!e.target.files}function yi(e){e.preventDefault()}function il(e){return e.indexOf("MSIE")!==-1||e.indexOf("Trident/")!==-1}function ol(e){return e.indexOf("Edge/")!==-1}function sl(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:window.navigator.userAgent;return il(e)||ol(e)}function bt(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return function(i){for(var o=arguments.length,r=new Array(o>1?o-1:0),l=1;l<o;l++)r[l-1]=arguments[l];return t.some(function(c){return!Rn(i)&&c&&c.apply(void 0,[i].concat(r)),Rn(i)})}}function rl(){return"showOpenFilePicker"in window}function ll(e){if(It(e)){var t=Object.entries(e).filter(function(a){var i=dn(a,2),o=i[0],r=i[1],l=!0;return Yi(o)||(console.warn('Skipped "'.concat(o,'" because it is not a valid MIME type. Check https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types for a list of valid MIME types.')),l=!1),(!Array.isArray(r)||!r.every(Xi))&&(console.warn('Skipped "'.concat(o,'" because an invalid file extension was provided.')),l=!1),l}).reduce(function(a,i){var o=dn(i,2),r=o[0],l=o[1];return hi(hi({},a),{},Gi({},r,l))},{});return[{description:"Files",accept:t}]}return e}function cl(e){if(It(e))return Object.entries(e).reduce(function(t,a){var i=dn(a,2),o=i[0],r=i[1];return[].concat(gi(t),[o],gi(r))},[]).filter(function(t){return Yi(t)||Xi(t)}).join(",")}function pl(e){return e instanceof DOMException&&(e.name==="AbortError"||e.code===e.ABORT_ERR)}function ul(e){return e instanceof DOMException&&(e.name==="SecurityError"||e.code===e.SECURITY_ERR)}function Yi(e){return e==="audio/*"||e==="video/*"||e==="image/*"||e==="text/*"||e==="application/*"||/\w+\/[-+.\w]+/g.test(e)}function Xi(e){return/^.*\.[\w]+$/.test(e)}var dl=["children"],ml=["open"],fl=["refKey","role","onKeyDown","onFocus","onBlur","onClick","onDragEnter","onDragOver","onDragLeave","onDrop"],gl=["refKey","onChange","onClick"];function wi(e){return vl(e)||hl(e)||Zi(e)||xl()}function xl(){throw new TypeError(`Invalid attempt to spread non-iterable instance. 30In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function hl(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function vl(e){if(Array.isArray(e))return ma(e)}function na(e,t){return wl(e)||yl(e,t)||Zi(e,t)||bl()}function bl(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. 31In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Zi(e,t){if(e){if(typeof e=="string")return ma(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return ma(e,t)}}function ma(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function yl(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i=[],o=!0,r=!1,l,c;try{for(a=a.call(e);!(o=(l=a.next()).done)&&(i.push(l.value),!(t&&i.length===t));o=!0);}catch(u){r=!0,c=u}finally{try{!o&&a.return!=null&&a.return()}finally{if(r)throw c}}return i}}function wl(e){if(Array.isArray(e))return e}function ji(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),a.push.apply(a,i)}return a}function Me(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?ji(Object(a),!0).forEach(function(i){fa(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):ji(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function fa(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function In(e,t){if(e==null)return{};var a=jl(e,t),i,o;if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)i=r[o],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function jl(e,t){if(e==null)return{};var a={},i=Object.keys(e),o,r;for(r=0;r<i.length;r++)o=i[r],!(t.indexOf(o)>=0)&&(a[o]=e[o]);return a}var _a=s.forwardRef(function(e,t){var a=e.children,i=In(e,dl),o=to(i),r=o.open,l=In(o,ml);return s.useImperativeHandle(t,function(){return{open:r}},[r]),Co.createElement(s.Fragment,null,a(Me(Me({},l),{},{open:r})))});_a.displayName="Dropzone";var eo={disabled:!1,getFilesFromEvent:Tr,maxSize:1/0,minSize:0,multiple:!0,maxFiles:0,preventDropOnDocument:!0,noClick:!1,noKeyboard:!1,noDrag:!1,noDragEventsBubbling:!1,validator:null,useFsAccessApi:!1,autoFocus:!1};_a.defaultProps=eo;_a.propTypes={children:Pe.func,accept:Pe.objectOf(Pe.arrayOf(Pe.string)),multiple:Pe.bool,preventDropOnDocument:Pe.bool,noClick:Pe.bool,noKeyboard:Pe.bool,noDrag:Pe.bool,noDragEventsBubbling:Pe.bool,minSize:Pe.number,maxSize:Pe.number,maxFiles:Pe.number,disabled:Pe.bool,getFilesFromEvent:Pe.func,onFileDialogCancel:Pe.func,onFileDialogOpen:Pe.func,useFsAccessApi:Pe.bool,autoFocus:Pe.bool,onDragEnter:Pe.func,onDragLeave:Pe.func,onDragOver:Pe.func,onDrop:Pe.func,onDropAccepted:Pe.func,onDropRejected:Pe.func,onError:Pe.func,validator:Pe.func};var ga={isFocused:!1,isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,isDragGlobal:!1,acceptedFiles:[],fileRejections:[]};function to(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=Me(Me({},eo),e),a=t.accept,i=t.disabled,o=t.getFilesFromEvent,r=t.maxSize,l=t.minSize,c=t.multiple,u=t.maxFiles,m=t.onDragEnter,p=t.onDragLeave,d=t.onDragOver,v=t.onDrop,f=t.onDropAccepted,C=t.onDropRejected,k=t.onFileDialogCancel,E=t.onFileDialogOpen,q=t.useFsAccessApi,_=t.autoFocus,T=t.preventDropOnDocument,g=t.noClick,M=t.noKeyboard,h=t.noDrag,j=t.noDragEventsBubbling,U=t.onError,F=t.validator,H=s.useMemo(function(){return cl(a)},[a]),de=s.useMemo(function(){return ll(a)},[a]),re=s.useMemo(function(){return typeof E=="function"?E:ki},[E]),Q=s.useMemo(function(){return typeof k=="function"?k:ki},[k]),L=s.useRef(null),y=s.useRef(null),D=s.useReducer(kl,ga),w=na(D,2),R=w[0],P=w[1],$=R.isFocused,J=R.isFileDialogActive,Ce=s.useRef(typeof window<"u"&&window.isSecureContext&&q&&rl()),ye=function(){!Ce.current&&J&&setTimeout(function(){if(y.current){var B=y.current.files;B.length||(P({type:"closeDialog"}),Q())}},300)};s.useEffect(function(){return window.addEventListener("focus",ye,!1),function(){window.removeEventListener("focus",ye,!1)}},[y,J,Q,Ce]);var le=s.useRef([]),K=s.useRef([]),W=function(B){L.current&&L.current.contains(B.target)||(B.preventDefault(),le.current=[])};s.useEffect(function(){return T&&(document.addEventListener("dragover",yi,!1),document.addEventListener("drop",W,!1)),function(){T&&(document.removeEventListener("dragover",yi),document.removeEventListener("drop",W))}},[L,T]),s.useEffect(function(){var S=function(nt){K.current=[].concat(wi(K.current),[nt.target]),rn(nt)&&P({isDragGlobal:!0,type:"setDragGlobal"})},B=function(nt){K.current=K.current.filter(function(Qe){return Qe!==nt.target&&Qe!==null}),!(K.current.length>0)&&P({isDragGlobal:!1,type:"setDragGlobal"})},Te=function(){K.current=[],P({isDragGlobal:!1,type:"setDragGlobal"})},Fe=function(){K.current=[],P({isDragGlobal:!1,type:"setDragGlobal"})};return document.addEventListener("dragenter",S,!1),document.addEventListener("dragleave",B,!1),document.addEventListener("dragend",Te,!1),document.addEventListener("drop",Fe,!1),function(){document.removeEventListener("dragenter",S),document.removeEventListener("dragleave",B),document.removeEventListener("dragend",Te),document.removeEventListener("drop",Fe)}},[L]),s.useEffect(function(){return!i&&_&&L.current&&L.current.focus(),function(){}},[L,_,i]);var te=s.useCallback(function(S){U?U(S):console.error(S)},[U]),ge=s.useCallback(function(S){S.preventDefault(),S.persist(),at(S),le.current=[].concat(wi(le.current),[S.target]),rn(S)&&Promise.resolve(o(S)).then(function(B){if(!(Rn(S)&&!j)){var Te=B.length,Fe=Te>0&&al({files:B,accept:H,minSize:l,maxSize:r,multiple:c,maxFiles:u,validator:F}),Ke=Te>0&&!Fe;P({isDragAccept:Fe,isDragReject:Ke,isDragActive:!0,type:"setDraggedFiles"}),m&&m(S)}}).catch(function(B){return te(B)})},[o,m,te,j,H,l,r,c,u,F]),oe=s.useCallback(function(S){S.preventDefault(),S.persist(),at(S);var B=rn(S);if(B&&S.dataTransfer)try{S.dataTransfer.dropEffect="copy"}catch{}return B&&d&&d(S),!1},[d,j]),xe=s.useCallback(function(S){S.preventDefault(),S.persist(),at(S);var B=le.current.filter(function(Fe){return L.current&&L.current.contains(Fe)}),Te=B.indexOf(S.target);Te!==-1&&B.splice(Te,1),le.current=B,!(B.length>0)&&(P({type:"setDraggedFiles",isDragActive:!1,isDragAccept:!1,isDragReject:!1}),rn(S)&&p&&p(S))}
31,[L,p,j]),ve=s.useCallback(function(S,B){var Te=[],Fe=[];S.forEach(function(Ke){var nt=Ji(Ke,H),Qe=na(nt,2),jt=Qe[0],kt=Qe[1],wt=Vi(Ke,l,r),mt=na(wt,2),Ct=mt[0],St=mt[1],Rt=F?F(Ke):null;if(jt&&Ct&&!Rt)Te.push(Ke);else{var vt=[kt,St];Rt&&(vt=vt.concat(Rt)),Fe.push({file:Ke,errors:vt.filter(function(en){return en})})}}),(!c&&Te.length>1||c&&u>=1&&Te.length>u)&&(Te.forEach(function(Ke){Fe.push({file:Ke,errors:[tl]})}),Te.splice(0)),P({acceptedFiles:Te,fileRejections:Fe,type:"setFiles"}),v&&v(Te,Fe,B),Fe.length>0&&C&&C(Fe,B),Te.length>0&&f&&f(Te,B)},[P,c,H,l,r,u,v,f,C,F]),V=s.useCallback(function(S){S.preventDefault(),S.persist(),at(S),le.current=[],rn(S)&&Promise.resolve(o(S)).then(function(B){Rn(S)&&!j||ve(B,S)}).catch(function(B){return te(B)}),P({type:"reset"})},[o,ve,te,j]),Z=s.useCallback(function(){if(Ce.current){P({type:"openDialog"}),re();var S={multiple:c,types:de};window.showOpenFilePicker(S).then(function(B){return o(B)}).then(function(B){ve(B,null),P({type:"closeDialog"})}).catch(function(B){pl(B)?(Q(B),P({type:"closeDialog"})):ul(B)?(Ce.current=!1,y.current?(y.current.value=null,y.current.click()):te(new Error("Cannot open the file picker because the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API is not supported and no <input> was provided."))):te(B)});return}y.current&&(P({type:"openDialog"}),re(),y.current.value=null,y.current.click())},[P,re,Q,q,ve,te,de,c]),ze=s.useCallback(function(S){!L.current||!L.current.isEqualNode(S.target)||(S.key===" "||S.key==="Enter"||S.keyCode===32||S.keyCode===13)&&(S.preventDefault(),Z())},[L,Z]),A=s.useCallback(function(){P({type:"focus"})},[]),he=s.useCallback(function(){P({type:"blur"})},[]),Ie=s.useCallback(function(){g||(sl()?setTimeout(Z,0):Z())},[g,Z]),We=function(B){return i?null:B},Ue=function(B){return M?null:We(B)},qe=function(B){return h?null:We(B)},at=function(B){j&&B.stopPropagation()},fe=s.useMemo(function(){return function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},B=S.refKey,Te=B===void 0?"ref":B,Fe=S.role,Ke=S.onKeyDown,nt=S.onFocus,Qe=S.onBlur,jt=S.onClick,kt=S.onDragEnter,wt=S.onDragOver,mt=S.onDragLeave,Ct=S.onDrop,St=In(S,fl);return Me(Me(fa({onKeyDown:Ue(bt(Ke,ze)),onFocus:Ue(bt(nt,A)),onBlur:Ue(bt(Qe,he)),onClick:We(bt(jt,Ie)),onDragEnter:qe(bt(kt,ge)),onDragOver:qe(bt(wt,oe)),onDragLeave:qe(bt(mt,xe)),onDrop:qe(bt(Ct,V)),role:typeof Fe=="string"&&Fe!==""?Fe:"presentation"},Te,L),!i&&!M?{tabIndex:0}:{}),St)}},[L,ze,A,he,Ie,ge,oe,xe,V,M,h,i]),pe=s.useCallback(function(S){S.stopPropagation()},[]),Ne=s.useMemo(function(){return function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},B=S.refKey,Te=B===void 0?"ref":B,Fe=S.onChange,Ke=S.onClick,nt=In(S,gl),Qe=fa({accept:H,multiple:c,type:"file",style:{border:0,clip:"rect(0, 0, 0, 0)",clipPath:"inset(50%)",height:"1px",margin:"0 -1px -1px 0",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"},onChange:We(bt(Fe,V)),onClick:We(bt(Ke,pe)),tabIndex:-1},Te,y);return Me(Me({},Qe),nt)}},[y,a,c,V,i]);return Me(Me({},R),{},{isFocused:$&&!i,getRootProps:fe,getInputProps:Ne,rootRef:L,inputRef:y,open:We(Z)})}function kl(e,t){switch(t.type){case"focus":return Me(Me({},e),{},{isFocused:!0});case"blur":return Me(Me({},e),{},{isFocused:!1});case"openDialog":return Me(Me({},ga),{},{isFileDialogActive:!0});case"closeDialog":return Me(Me({},e),{},{isFileDialogActive:!1});case"setDraggedFiles":return Me(Me({},e),{},{isDragActive:t.isDragActive,isDragAccept:t.isDragAccept,isDragReject:t.isDragReject});case"setFiles":return Me(Me({},e),{},{acceptedFiles:t.acceptedFiles,fileRejections:t.fileRejections,isDragReject:!1});case"setDragGlobal":return Me(Me({},e),{},{isDragGlobal:t.isDragGlobal});case"reset":return Me({},ga);default:return e}}function ki(){}const[Cl,Sl]=So("Dropzone component was not found in tree");var mn={root:"m_d46a4834",inner:"m_b85f7144",fullScreen:"m_96f6e9ad",dropzone:"m_7946116d"};function Da(e){const t=a=>{const{children:i,...o}=ya(`Dropzone${Ga(e)}`,{},a),r=Sl(),l=zo(i)?i:n.jsx("span",{children:i});return r[e]?s.cloneElement(l,o):null};return t.displayName=`@mantine/dropzone/${Ga(e)}`,t}const zl=Da("accept"),_l=Da("reject"),Dl=Da("idle"),Al={multiple:!0,maxSize:1/0,activateOnClick:!0,activateOnDrag:!0,dragEventsBubbling:!0,activateOnKeyboard:!0,useFsAccessApi:!0,variant:"light",rejectColor:"red"},El=Ao((e,{radius:t,variant:a,acceptColor:i,rejectColor:o})=>{const r=e.variantColorResolver({color:i||e.primaryColor,theme:e,variant:a}),l=e.variantColorResolver({color:o||"red",theme:e,variant:a});return{root:{"--dropzone-radius":Eo(t),"--dropzone-accept-color":r.color,"--dropzone-accept-bg":r.background,"--dropzone-reject-color":l.color,"--dropzone-reject-bg":l.background}}}),Tt=Ti((e,t)=>{const a=ya("Dropzone",Al,e),{classNames:i,className:o,style:r,styles:l,unstyled:c,vars:u,radiu
31s:m,disabled:p,loading:d,multiple:v,maxSize:f,accept:C,children:k,onDropAny:E,onDrop:q,onReject:_,openRef:T,name:g,maxFiles:M,autoFocus:h,activateOnClick:j,activateOnDrag:U,dragEventsBubbling:F,activateOnKeyboard:H,onDragEnter:de,onDragLeave:re,onDragOver:Q,onFileDialogCancel:L,onFileDialogOpen:y,preventDropOnDocument:D,useFsAccessApi:w,getFilesFromEvent:R,validator:P,rejectColor:$,acceptColor:J,enablePointerEvents:Ce,loaderProps:ye,inputProps:le,mod:K,attributes:W,...te}=a,ge=Ri({name:"Dropzone",classes:mn,props:a,className:o,style:r,classNames:i,styles:l,unstyled:c,attributes:W,vars:u,varsResolver:El}),{getRootProps:oe,getInputProps:xe,isDragAccept:ve,isDragReject:V,isDragActive:Z,open:ze}=to({onDrop:E,onDropAccepted:q,onDropRejected:_,disabled:p||d,accept:Array.isArray(C)?C.reduce((We,Ue)=>({...We,[Ue]:[]}),{}):C,multiple:v,maxSize:f,maxFiles:M,autoFocus:h,noClick:!j,noDrag:!U,noDragEventsBubbling:!F,noKeyboard:!H,onDragEnter:de,onDragLeave:re,onDragOver:Q,onFileDialogCancel:L,onFileDialogOpen:y,preventDropOnDocument:D,useFsAccessApi:w,validator:P,...R?{getFilesFromEvent:R}:null});_o(T,ze);const A=Z&&ve,he=Z&&V,Ie=!A&&!he;return n.jsx(Cl,{value:{accept:A,reject:he,idle:Ie},children:n.jsxs(je,{...oe(),...ge("root",{focusable:!0}),...te,mod:[{accept:A,reject:he,idle:Ie,disabled:p,loading:d,"activate-on-click":j},K],children:[n.jsx(Do,{visible:d,overlayProps:{radius:m},unstyled:c,loaderProps:ye}),n.jsx("input",{...xe(le),name:g}),n.jsx("div",{...ge("inner"),ref:t,"data-enable-pointer-events":Ce||void 0,children:k})]})})});Tt.classes=mn;Tt.displayName="@mantine/dropzone/Dropzone";Tt.Accept=zl;Tt.Idle=Dl;Tt.Reject=_l;const ql={maxSize:1/0,activateOnDrag:!0,dragEventsBubbling:!0,activateOnKeyboard:!0,active:!0,zIndex:Io("max"),withinPortal:!0},Aa=Ti((e,t)=>{const a=ya("DropzoneFullScreen",ql,e),{classNames:i,className:o,style:r,styles:l,unstyled:c,vars:u,active:m,onDrop:p,onReject:d,zIndex:v,withinPortal:f,portalProps:C,attributes:k,...E}=a,q=Ri({name:"DropzoneFullScreen",classes:mn,props:a,className:o,style:r,classNames:i,styles:l,unstyled:c,attributes:k,rootSelector:"fullScreen"}),{resolvedClassNames:_,resolvedStyles:T}=qo({classNames:i,styles:l,props:a}),[g,M]=s.useState(0),[h,{open:j,close:U}]=To(!1),F=de=>{var re;(re=de.dataTransfer)!=null&&re.types.includes("Files")&&(M(Q=>Q+1),j())},H=()=>{M(de=>de-1)};return s.useEffect(()=>{g===0&&U()},[g]),s.useEffect(()=>{if(m)return document.addEventListener("dragenter",F,!1),document.addEventListener("dragleave",H,!1),()=>{document.removeEventListener("dragenter",F,!1),document.removeEventListener("dragleave",H,!1)}},[m]),n.jsx(Ro,{...C,withinPortal:f,children:n.jsx(je,{ref:t,...q("fullScreen",{style:{opacity:h?1:0,pointerEvents:h?"all":"none",zIndex:v}}),children:n.jsx(Tt,{activateOnClick:!1,...E,classNames:_,styles:T,unstyled:c,className:mn.dropzone,onDrop:de=>{p==null||p(de),U(),M(0)},onReject:de=>{d==null||d(de),U(),M(0)}})})})});Aa.classes=mn;Aa.displayName="@mantine/dropzone/DropzoneFullScreen";const vn={csv:"text/csv",xls:"application/vnd.ms-excel",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"};Tt.FullScreen=Aa;const bn=Tt;async function Tl(){return(await Mn(async()=>{const{default:e}=await import("./xlsx-DSE4xlO-.js");return{default:e}},[])).default}async function no(){return(await Mn(async()=>{const{default:e}=await import("./papaparse.min-BAKOmby7.js").then(t=>t.p);return{default:e}},__vite__mapDeps([21,1,2]))).default}async function Rl(){const e=await fetch("/sample-sales.csv");if(!e.ok)throw new Error(`sample data: HTTP ${e.status}`);return(await e.text()).trimEnd()}function Il(e){try{const t=new URL(e),a=t.pathname.match(/^\/file\/d\/([^/]+)/);if(t.hostname==="drive.google.com"&&a)return`https://drive.google.com/uc?export=download&id=${a[1]}`;if(t.hostname==="drive.google.com"&&t.pathname==="/open"){const o=t.searchParams.get("id");if(o)return`https://drive.google.com/uc?export=download&id=${o}`}if(t.hostname==="drive.google.com"&&t.pathname==="/uc"&&!t.searchParams.get("export")){const o=t.searchParams.get("id");if(o)return`https://drive.google.com/uc?export=download&id=${o}`}const i=t.pathname.match(/^\/spreadsheets\/d\/([^/]+)/);if(t.hostname==="docs.google.com"&&i){const o=t.searchParams.get("gid")||new URLSearchParams(t.hash.replace(/^#/,"")).get("gid"),r=`https://docs.google.com/spreadsheets/d/${i[1]}/export?format=csv`;return o?`${r}&gid=${o}`:r}}catch{}return e}function xa(e){const t=e.trimStart()[0];return t==="["||t==="{"}function Ol(e,t){const a=[];let i="",o=!1;for(const r of e){if(r==='"')o=!o;else if(r===t&&!o){a.push(i),i="";continue}i+=r}return a.push(i),a}function Pl(e){const t=e.split(` 32`).filter(a=>a.trim()).slice(0,5);return t.length<2?!1:[","," ",";","|"].some(a=>{const i=t.map(o=>Ol(o,a).length);return i[0]>1&&i.every(o=>o===i[0])})}function Fl(e,t,a){const i=(e||"").toLowerCase();return i.includes("json")?"json":i.includes("csv")?"csv":t.endsWith(".json")?"json":t.endsWith(".csv")?"csv":i.includes("html")?"unsupported":xa(a)?"json":Pl(a)?"csv":"unsupported"}function Ll(e){const t=e.split(` 33`).filter(i=>i.trim()).slice(0,5);if(t.length<2)return!1;const a=t.map(i=>i.trim().split(/\s{2,}/).length);return a[0]>1&&a.every(i=>i===a[0])}async function aa(e){var r;const t=await no(),{meta:a,data:i}=t.parse(e,{preview:2});return(((r=i[0])==null?void 0:r.length)??1)>1?a.delimiter:Ll(e)?" ":a.delimiter}function ia(e){return e.split(` 34`).map(t=>t.trim().replace(/\s+/g," ")).join(` 35`)}function $l(e,t){const a=e.split(` 36`);if(a.length<2)return!1;const i=a[0].split(t),o=a[1].split(t),r=i.filter(c=>isNaN(Number(c.trim()))).length,l=o.filter(c=>isNaN(Number(c.trim()))).length;return r>l}function yn(e){const t=e.slice(0,10).map(({line:i,expected:o,got:r})=>{const l=i!==null?`Row ${i}`:"A row";return o!==null&&r!==null?`${l}: expected ${o} columns, got ${r}`:`${l}: column count mismatch`}),a=e.length>t.length?` 37â¦and ${e.length-t.length} more row(s).`:"";return`${e.length} row(s) have the wrong number of columns: 38${t.join(` 39`)}${a}`}function Ml(e,t){if(typeof e!="object"||e===null)return t;const a=e.detail;
39if(typeof a=="string")return a;if(Array.isArray(a)&&a.length){const i=a[0],o=i&&typeof i=="object"?i.msg:void 0;if(typeof o=="string")return o}return t}function wn(e){if(!e.length)return e;const t=Object.keys(e[0]),a=[];return t.forEach(i=>{Array.from(new Set(e.map(r=>r[i]))).some(r=>typeof r=="object")&&a.push(i)}),a.length&&e.forEach(i=>{a.forEach(o=>{delete i[o]})}),e}function Nl({onLoad:e,onLoadAsTable:t}){const{callTool:a}=Zt(),[i,o]=s.useState("url"),r=ha("(max-width: 48em)")??!1,[l,c]=s.useState(null),u=s.useRef(0),m=s.useRef(!0);s.useEffect(()=>(m.current=!0,()=>{m.current=!1}),[]);const p=s.useCallback(K=>K!==u.current||!m.current,[]),[d,v]=s.useState(""),[f,C]=s.useState(""),[k,E]=s.useState("auto"),[q,_]=s.useState("auto"),[T,g]=s.useState(null),[M,h]=s.useState(!1),[j,U]=s.useState([]),[F,H]=s.useState([]),[de,re]=s.useState(0),Q=s.useCallback((K,W="Parsing Error")=>{c(null),Ve.show({title:W,message:n.jsx("div",{style:{whiteSpace:"pre-line"},children:K}),color:"red"})},[]),L=s.useCallback(async(K,W,te,ge)=>{const oe=(V,Z)=>{p(ge)||Q(V,Z)},xe=[];K.split(` 40`).forEach((V,Z)=>{V.trim()&&xe.push(Z+1)});const ve=await no();return new Promise(V=>{ve.parse(K,{dynamicTyping:!0,header:W,skipEmptyLines:!0,worker:!0,...te&&{delimiter:te},complete:Z=>{var Ie,We,Ue;const ze=Z.errors.filter(qe=>qe.code==="TooManyFields"||qe.code==="TooFewFields");if(ze.length){const qe=((Ie=Z.meta.fields)==null?void 0:Ie.length)??null,at=ze.map(fe=>{var Ne;const pe=(Ne=fe.message.match(/parsed (\d+)/))==null?void 0:Ne[1];return{line:typeof fe.row=="number"?xe[fe.row+1]??null:null,expected:qe,got:pe!==void 0?Number(pe):null}});oe(yn(at),"Inconsistent Columns"),V(null);return}if((We=Z.meta.fields)!=null&&We.some(qe=>!qe.trim())){oe("CSV has a blank column header â check for trailing delimiters.","Inconsistent Columns"),V(null);return}let{data:A}=Z,{fields:he}=Z.meta;if(!he){const qe=A,at=((Ue=qe[0])==null?void 0:Ue.length)??0,fe=qe.map((pe,Ne)=>({line:xe[Ne]??Ne+1,expected:at,got:pe.length})).filter(pe=>pe.got!==pe.expected);if(fe.length){oe(yn(fe),"Inconsistent Columns"),V(null);return}he=Array.from({length:at},(pe,Ne)=>`Column ${Ne+1}`),A=qe.map(pe=>pe.reduce((Ne,S,B)=>(Ne[`Column ${B+1}`]=S,Ne),{}))}V(A)},error:()=>{oe("Failed to parse CSV. Check for formatting issues."),V(null)}})})},[Q,p]),y=s.useCallback(async(K,W)=>{if(!p(W)){if(K.length<2){Ve.show({title:"Parsing Error",message:"More than 1 row of data is required.",color:"red"}),c(null);return}if(Object.keys(K[0]||{}).length<2){Ve.show({title:"Parsing Error",message:"More than 1 column of data is required.",color:"red"}),c(null);return}try{const te=await a("parse_data",{rawData:K});if(p(W))return;const{data:ge,columns:oe}=te.structuredContent;U(ge),H(oe),re(xe=>xe+1)}catch(te){if(p(W))return;console.error(te),Ve.show({title:"Parsing Error",message:"Failed to parse data.",color:"red"})}finally{p(W)||c(null)}}},[a,p]),D=s.useCallback(async(K,W)=>{if(p(W))return!1;if(!(Array.isArray(K)&&K.every(oe=>oe!==null&&typeof oe=="object"&&!Array.isArray(oe))))return Q('JSON must be an array of row objects, e.g. [{"id": 1}, {"id": 2}].',"Unsupported JSON"),!1;const ge=K;if(ge.length){const oe=Object.keys(ge[0]),xe=[...oe].sort().join("\0"),ve=ge.map((V,Z)=>({line:Z+1,expected:oe.length,got:Object.keys(V).length,keySet:Object.keys(V).sort().join("\0")})).filter(V=>V.keySet!==xe).map(({line:V,expected:Z,got:ze})=>({line:V,expected:Z,got:ze}));if(ve.length)return Q(yn(ve),"Inconsistent Columns"),!1}return await y(wn(ge),W),!0},[Q,p,y]),w=async K=>{const W=++u.current;c("url");try{const te=Il(K),ge=await fetch("/v2/fetch-url",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:te})});if(!ge.ok){const V=await ge.json().catch(()=>({}));throw new Error(Ml(V,`Fetch error: ${ge.status}`))}const{content:oe,content_type:xe}=await ge.json(),ve=Fl(xe,K,oe);if(ve==="json")await D(JSON.parse(oe),W);else if(ve==="csv"){const V=await aa(oe),Z=V===" "?ia(oe):oe,ze=await L(Z,!0,V,W);ze&&await y(wn(ze),W)}else{if(p(W))return;Ve.show({title:"Parsing Error",message:"Unsupported file type. Please use .csv or .json",color:"red"}),c(null)}}catch(te){if(p(W))return;console.error(te),Q(te instanceof Error?te.message:"Failed to load data")}},R=K=>{const W=++u.current;c("file");const te=K[0],ge=te.type===vn.csv||te.name.toLowerCase().endsWith(".csv"),oe=new FileReader;oe.onload=async xe=>{var V;const ve=(V=xe.target)==null?void 0:V.result;if(ve==null){p(W)||Q("Failed to read file.");return}try{if(ge){const fe=ve,pe=await aa(fe),Ne=pe===" "?ia(fe):fe,S=await L(Ne,!0,pe,W);S&&await y(wn(S),W);return}const Z=await Tl(),ze=Z.read(ve,{raw:!0,type:"array"}),A=ze.SheetNames[0],he=ze.Sheets[A],Ie=Z.utils.sheet_to_json(he,{header:1,defval:""}),We=(Ie[0]??[]).map(fe=>String(fe));if(We.some(fe=>!fe.trim())){p(W)||Q("File has a blank column header â check for empty header cells.","Inconsistent Columns");return}const Ue=We.length,qe=Ie.map((fe,pe)=>({line:pe+1,expected:Ue,got:fe.length})).filter(fe=>fe.got!==fe.expected);if(qe.length){p(W)||Q(yn(qe),"Inconsistent Columns");return}const at=Ie.slice(1).map(fe=>We.reduce((pe,Ne,S)=>(pe[Ne]=fe[S],pe),{}));await y(wn(at),W)}catch(Z){if(p(W))return;console.error(Z),Ve.show({title:"Parsing Error",message:"Failed to read file. Please check for formatting errors.",color:"red"}),c(null)}},oe.onerror=()=>{p(W)||Q("Failed to read file.")},oe.onabort=()=>{p(W)||c(null)},ge?oe.readAsText(te):oe.readAsArrayBuffer(te)},P=async()=>
40{if(!f){Ve.show({title:"Parsing Error",message:"Please paste at least 2 rows of data.",color:"red"});return}const K=++u.current;c("paste");try{if(xa(f)){let xe;try{xe=JSON.parse(f.trim())}catch{xe=void 0}if(xe!==void 0){await D(xe,K);return}}const W=q==="auto"?await aa(f):q??",",te=W===" "?ia(f):f,ge=k==="auto"?$l(te,W):k==="true",oe=await L(te,ge,W,K);oe&&await y(oe,K)}catch(W){if(p(K))return;console.error(W),Q(W instanceof Error?W.message:"Failed to parse data")}},$=()=>{j.length&&e(j,F)},J=()=>{!j.length||!t||t(j,F)},Ce=f.split(` 41`).filter(Boolean).length,ye=s.useMemo(()=>{if(!xa(f))return!1;try{return JSON.parse(f.trim()),!0}catch{return!1}},[f]),le=j.length>0;return n.jsxs(ue,{h:"100%",gap:"md",mih:0,children:[n.jsx(je,{flex:"0 0 auto",children:n.jsxs(ue,{gap:"md",children:[n.jsxs(Y,{gap:"sm",align:"center",children:[n.jsx(Yt,{size:32,radius:"md",variant:"light",color:"blue",children:n.jsx(An,{size:20,"aria-hidden":!0})}),n.jsxs(ue,{gap:0,children:[n.jsx(O,{fw:600,size:"lg",children:"Upload a table"}),n.jsx(O,{c:"dimmed",size:"sm",children:"Import data from a web URL, a file, or by pasting it in."})]})]}),n.jsx(pt,{label:"Import method",w:200,value:i,onChange:K=>K&&o(K),allowDeselect:!1,data:[{value:"url",label:"Web URL"},{value:"file",label:"File Upload"},{value:"paste",label:"Paste Data"}]}),i==="url"&&n.jsx(qt,{children:n.jsx(Et,{w:"100%",maw:700,placeholder:"https://",value:d,onChange:K=>v(K.currentTarget.value),size:"sm",label:"Web URL (CSV or JSON)",rightSectionPointerEvents:"all",rightSection:n.jsx(Ot,{label:"Fetch",withArrow:!0,children:n.jsx(Lt,{"aria-label":"Fetch",variant:"subtle",color:"blue",onClick:()=>w(d),loading:l==="url",children:n.jsx(Dr,{size:16,"aria-hidden":!0})})})})}),i==="file"&&n.jsxs(je,{maw:700,mx:"auto",w:"100%",children:[n.jsx(O,{size:"sm",mb:5,children:"Upload File"}),n.jsx(bn,{disabled:l==="file",loading:l==="file",loaderProps:{type:"dots",color:"blue.4"},mih:140,maxFiles:1,onDrop:R,onReject:K=>console.log("rejected files",K),maxSize:5*1024**2,accept:[vn.csv,vn.xls,vn.xlsx],styles:{inner:{minHeight:140,display:"flex",alignItems:"center",justifyContent:"center"},root:{paddingBottom:0}},children:n.jsxs(Oo,{direction:{base:"column",sm:"row"},align:"center",justify:"center",w:"100%",gap:{base:"sm",sm:"xl"},pb:"lg",style:{pointerEvents:"none"},children:[n.jsx(bn.Accept,{children:n.jsx(bs,{size:r?36:52,color:"var(--mantine-color-blue-6)","aria-hidden":!0})}),n.jsx(bn.Reject,{children:n.jsx(cn,{size:r?36:52,color:"var(--mantine-color-red-6)","aria-hidden":!0})}),n.jsx(bn.Idle,{children:n.jsx(vs,{size:r?36:52,color:"var(--mantine-color-dimmed)","aria-hidden":!0})}),n.jsxs(je,{w:{base:"100%",sm:"auto"},ta:"center",style:{minWidth:0},children:[n.jsx(O,{fz:{base:"md",sm:"xl"},children:"Drag or click here to upload a XLS, XLSX, or CSV file."}),n.jsx(O,{fz:{base:"xs",sm:"sm"},c:"dimmed",mt:7,children:"Files should contain more than 1 row, 1 column, and not exceed 5mb."})]})]})})]}),i==="paste"&&n.jsxs(ue,{gap:"xs",maw:700,mx:"auto",w:"100%",children:[n.jsx(Po,{disabled:l==="paste",label:"Raw Data",description:"Paste data from Excel, Google Sheets, JSON, or a CSV string.",placeholder:`id,name,value 421,dave,10 431,jonathan,12`,value:f,onChange:K=>C(K.target.value),rows:4}),n.jsxs(Y,{justify:"space-between",align:"flex-end",children:[n.jsxs(Y,{align:"flex-end",children:[n.jsx(pt,{size:"xs",label:"Header Row:",w:100,disabled:ye,onChange:E,value:k,data:[{label:"Auto",value:"auto"},{label:"Yes",value:"true"},{label:"No",value:"false"}]}),n.jsx(pt,{size:"xs",label:"Delimiter:",w:110,disabled:ye,onChange:_,value:q,data:[{label:"Auto",value:"auto"},{label:"Comma",value:","},{label:"Tab",value:" "},{label:"Semicolon",value:";"},{label:"Pipe",value:"|"},{label:"Space",value:" "}]}),n.jsx(ke,{variant:"light",size:"xs",disabled:T!==null&&f===T,loading:M,onClick:()=>{(async()=>{h(!0);try{const K=T??await Rl();g(K),C(K),E("auto"),_("auto")}catch{Ve.show({title:"Could not load sample data",message:"Check your connection and try again.",color:"red"})}finally{h(!1)}})()},children:"Use Sample Data"})]}),n.jsxs(Y,{children:[n.jsx(O,{size:"sm",children:ye?"JSON detected":`${ys(Ce)} Rows Detected`}),n.jsx(ke,{disabled:!ye&&Ce<2,loading:l==="paste",leftSection:n.jsx(An,{size:16,"aria-hidden":!0}),onClick:P,children:"Parse Data"})]})]})]})]})}),n.jsx(je,{flex:1,mih:0,pb:"md",px:"md",children:n.jsx(Fi,{data:j,columns:F,resizeScopeKey:["table-upload",de,F.map(K=>K.rawKey).join("\0")].join("�"),onColumnsChange:H})}),le&&n.jsxs(Y,{justify:"flex-end",gap:"xs",children:[n.jsx(ke,{variant:"subtle",color:"red",size:"sm",leftSection:n.jsx(cn,{size:16,"aria-hidden":!0}),onClick:()=>{U([]),H([]),re(K=>K+1)},children:"Clear Data"}),t&&n.jsx(ke,{variant:"light",leftSection:n.jsx(Vt,{size:16,"aria-hidden":!0}),onClick:J,children:"Use as Table"}),n.jsx(ke,{color:"blue",leftSection:n.jsx(ca,{size:16,"aria-hidden":!0}),onClick:$,children:"Visualize"})]})]})}function Bl({workspace:e,aiEnabled:t,hasDatasources:a,onAsk:i,onPick:o}){const[r,l]=s.useState(""),c=t&&a,u=()=>{const m=r.trim();m&&i(m)};return n.jsx(qt,{h:"100%",px:"lg",py:"xl",children:n.jsxs(ue,{gap:"lg",w:"100%",maw:760,children:[n.jsx(Fo,{order:2,ta:"center",children:"What do you want to chart?"}),c&&n.jsxs(n.Fragment,{children:[n.jsxs(Y,{gap:"sm",wrap:"nowrap",children:[n.jsx(Et,{flex:1,size:"md","aria-label":"Ask a question about your data",placeholder:"Ask a question about your dataâ¦",value:r,onChange:m=>l(m.currentTarget.value),onKeyDown:m=>{m.key==="Enter"&&u()}}),n.jsx(ke,{variant:"primary",size:"md",onClick:u,disabled:!r.trim(),children:"Ask"})]}),n.jsx(O,{size:"sm",c:"dimmed",ta:"center",children:"or start from"})]}),n.jsxs(ws,{cols:{base:1,sm:3},spacing:Mi.gridGap,children:[n.jsx(oa,{icon:n.jsx(Vt,{size:20,"aria-hidden":!0}),title:"Browse tables",description:"Pick a table from a datasource and preview its rows.",disabled:!a,onClick:()=>o("explore")}),n.jsx(oa,{icon:n.jsx(Dn,{size:20,"aria-hidden":!0}),title:"Write SQL",description:"Query a datasource directly and chart the result.",disabled:!a,onClick:()=>o("sql")}),n.jsx(oa,{icon:n.jsx(An,{size:20,"aria-hidden":!0}),title:"Upload a file",description:"A CSV or Excel file, a web URL, or pasted data.",onClick:()=>o("upload")})]}
43),!a&&n.jsxs(Y,{gap:"sm",justify:"center",children:[n.jsx(O,{size:"sm",c:"dimmed",children:"Browsing and SQL need a datasource."}),e&&n.jsx(ka,{workspaceId:e,size:"xs"})]})]})})}function oa({icon:e,title:t,description:a,disabled:i=!1,onClick:o}){return n.jsx(Jt,{className:"focus-ring",onClick:o,disabled:i,style:{borderRadius:"var(--sd-radius-md)",opacity:i?.5:void 0,cursor:i?"not-allowed":void 0},children:n.jsxs(Ca,{withBorder:!0,h:"100%",padding:Mi.cardPadding,className:i?void 0:"link-card",children:[n.jsx(Yt,{variant:"light",color:"blue",size:"lg",radius:"md",mb:"sm",children:e}),n.jsx(O,{fw:600,mb:4,children:t}),n.jsx(O,{size:"sm",c:"dimmed",children:a})]})})}/** 44 * @license @tabler/icons-react v3.41.1 - MIT 45 * 46 * This source code is licensed under the MIT license. 47 * See the LICENSE file in the root directory of this source tree. 48 */const Hl=[["path",{d:"M3 20l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c3.255 2.777 3.695 7.266 1.029 10.501c-2.666 3.235 -7.615 4.215 -11.574 2.293l-4.7 1",key:"svg-0"}]],Wl=Ln("outline","message-circle","MessageCircle",Hl),Kl=[{value:"ai",label:"Ask",Icon:Wl},{value:"explore",label:"Browse",Icon:Vt},{value:"sql",label:"SQL",Icon:Dn},{value:"upload",label:"Upload",Icon:An}];function Ul({value:e,onChange:t,aiEnabled:a,compact:i=!1}){return n.jsx($i,{size:"xs","aria-label":"How to get the data",value:e,onChange:t,data:Kl.filter(o=>a||o.value!=="ai").map(({value:o,label:r,Icon:l})=>({value:o,label:i?n.jsx(Ot,{label:r,withArrow:!0,children:n.jsxs(qt,{children:[n.jsx(l,{size:16,"aria-hidden":!0}),n.jsx(Lo,{children:r})]})}):n.jsxs(qt,{style:{gap:6},children:[n.jsx(l,{size:14,"aria-hidden":!0}),n.jsx("span",{children:r})]})}))})}const On=e=>{if(typeof e=="number")return Number.isNaN(e)?null:e;if(typeof e=="string"&&e.trim()!==""){const t=Number(e);return Number.isNaN(t)?null:t}return null},Pn=e=>e==null||e==="",jn=(e,t)=>{const a=On(e),i=On(t);return a!==null&&i!==null?a===i:String(e??"").toLowerCase()===String(t??"").toLowerCase()},Gl=(e,t)=>{if(Pn(e)||Pn(t))return null;const a=On(e),i=On(t);if(a!==null&&i!==null)return a-i;const o=String(e),r=String(t);return o<r?-1:o>r?1:0},Kt=(e,t,a)=>{const i=Gl(e,t);return i!==null&&a(i)},Ci=(e,t)=>String(e??"").toLowerCase().includes(String(t??"").toLowerCase()),Si=e=>Array.isArray(e)?e:[e],Ql={"IS NULL":e=>Pn(e),"IS NOT NULL":e=>!Pn(e),"=":(e,t)=>jn(e,t),"!=":(e,t)=>!jn(e,t),">":(e,t)=>Kt(e,t,a=>a>0),"<":(e,t)=>Kt(e,t,a=>a<0),">=":(e,t)=>Kt(e,t,a=>a>=0),"<=":(e,t)=>Kt(e,t,a=>a<=0),INCLUDES:Ci,EXCLUDES:(e,t)=>!Ci(e,t),IN:(e,t)=>Si(t).some(a=>jn(e,a)),"NOT IN":(e,t)=>!Si(t).some(a=>jn(e,a)),BETWEEN:(e,t)=>{const[a,i]=Array.isArray(t)?t:[];return Kt(e,a,o=>o>=0)&&Kt(e,i,o=>o<=0)}};function Jl(e,t){const a=Ql[t.operator];return a?a(e,t.value):!0}function Vl(e,t){return t.every(a=>Jl(e[a.column],a))}function Yl({shared:e,baseSqlRef:t,runQuery:a,setExecutedSql:i}){const o=s.useCallback(async p=>{e.setFilters(p),e.setPrompt(la(e.prompt,p,e.hiddenColumns));const d=t.current;if(!d)return;const v=p.length===0?d:Pi(d,p);e.setSql(ht(v)),await a(v)},[t,a,e]),r=s.useCallback(async p=>{if(!e.sql)return;const d=yt(e.sql,p);d!==e.sql&&(t.current=yt(t.current,p),e.setSql(ht(d)),await a(d))},[t,a,e]),l=s.useCallback(p=>{if(!e.sql)return;const d=e.columns.map(g=>
48g.rawKey);let v=_n(e.sql,p,d);if(v===e.sql)return;let f=_n(t.current,p,d);e.groupBys.some(g=>xt(g,p))&&(v=Wt(v,p,"remove"),f=Wt(f,p,"remove"));const k=Vn(v);k&&xt(k,p)&&(v=yt(v,null),f=yt(f,null));const E=[...e.hiddenColumns,p],q=e.groupBys.filter(g=>!xt(g,p)),_={...e.aggregations};delete _[p];const T=e.filters.filter(g=>!xt(g.column,p));t.current=f,e.setHiddenColumns(E),e.setGroupBys(q),e.setAggregations(_),e.setFilters(T),e.setColumns(e.columns.filter(g=>g.rawKey!==p)),e.setSql(ht(v)),e.setPrompt(la(e.prompt,T,E)),i(v)},[t,i,e]),c=s.useCallback(async p=>{if(!e.sql||p.length===0)return;let d=e.sql,v=t.current;for(const f of p)d=Na(d,f),v=Na(v,f);t.current=v,e.setHiddenColumns(e.hiddenColumns.filter(f=>!p.includes(f))),e.setSql(ht(d)),await a(d)},[t,a,e]),u=s.useCallback(async(p,d)=>{if(!e.sql)return;const v=e.columns.map(M=>M.rawKey);let f=xn(e.sql,p,d,v);if(f===e.sql)return;let C=xn(t.current,p,d,v),k=e.groupBys;d!==null&&e.groupBys.some(M=>xt(M,p))&&(f=Wt(f,p,"remove"),C=Wt(C,p,"remove"),k=e.groupBys.filter(M=>!xt(M,p)));const E=Ba(e.sql,p),q=M=>xt(M,p)||E!==null&&xt(M,E),_=e.filters.filter(M=>!q(M.column)),T=Vn(f);T&&q(T)&&(f=yt(f,null),C=yt(C,null));const g={...e.aggregations};d?g[p]=d:delete g[p],t.current=C,e.setAggregations(g),e.setGroupBys(k),e.setFilters(_),e.setSql(ht(f)),await a(f)},[t,a,e]),m=s.useCallback(async(p,d)=>{if(!e.sql)return;if(d==="add"&&e.columns.length===0){Ve.show({title:"Cannot group yet",message:"Wait for the query results to load before grouping a column.",color:"yellow"});return}let v=e.sql,f=t.current,C=p,k=null,E=null;if(d==="add"&&e.aggregations[p]){const h=e.columns.map(F=>F.rawKey),j=Ba(v,p);j&&(C=j),v=xn(v,p,null,h),f=xn(f,p,null,h),k={...e.aggregations},delete k[p],E=e.filters.filter(F=>!xt(F.column,p));const U=Vn(v);U&&xt(U,p)&&(v=yt(v,null),f=yt(f,null))}const q=d==="add"?[...e.groupBys,C]:e.groupBys.filter(M=>M!==C),_=d==="add"?Ha(v,e.columns,q):v,T=d==="add"?Ha(f,e.columns,q):f,g=Wt(_,C,d);g!==e.sql&&(t.current=Wt(T,C,d),e.setGroupBys(q),k&&e.setAggregations(k),E&&e.setFilters(E),e.setSql(ht(g)),await a(g))},[t,a,e]);return{onFiltersChange:o,onSortChange:r,onHideColumn:l,onShowColumns:c,onAggregateChange:u,onGroupByChange:m}}const Xl=new Set(["mysql","bigquery","mssql","synapse"]);function Zl(e,t){const a=t!=null&&Xl.has(t),i=e.map(o=>o.kind==="column"?o.value:`'${o.value.replace(/'/g,"''")}'`);return a?`CONCAT(${i.join(", ")})`:i.join(" || ")}function ec(e,t){if(e.type==="concat")return Zl(e.parts,t);if(e.type==="arithmetic"){const[a,i,o]=e.parts;return`${a} ${i} ${o}`}return""}function tc(e){return{key:e.name,rawKey:e.name,count:0,selectedType:e.type==="arithmetic"?"number":"string",rawType:e.type==="arithmetic"?"number":"string"}}function nc({shared:e,baseSqlRef:t,runQuery:a,dialect:i}){const o=s.useCallback(async l=>{const c=ec(l,i);if(!c||!e.sql)return!1;const u=e.sql,m=t.current,p=Wa(e.sql,c,l.name),d=Wa(t.current,c,l.name);return t.current=d,e.setSql(ht(p)),await a(p)?(e.setComputedColumns([...e.computedColumns,l]),!0):(t.current=m,e.setSql(ht(u)),!1)},[e,t,a,i]),r=s.useCallback(async l=>{if(!e.sql)return;const c=e.columns.map(p=>p.rawKey),u=_n(e.sql,l,c),m=_n(t.current,l,c);t.current=m,e.setSql(ht(u)),e.setComputedColumns(e.computedColumns.filter(p=>p.name!==l)),await a(u)},[e,t,a]);return{addComputedColumn:o,removeComputedColumn:r,buildColumnDescriptor:tc}}const ac=/^[A-Za-z_][A-Za-z0-9_]*$/;function ic({opened:e,onClose:t,columns:a,onAdd:i,existingNames:o}){const[r,l]=s.useState(""),[c,u]=s.useState("concat"),[m,p]=s.useState([{kind:"column",value:""}]),[d,v]=s.useState(""),[f,C]=s.useState("+"),[k,E]=s.useState(""),[q,_]=s.useState(!1),[T,g]=s.useState(null),M=a.map(y=>({value:y.rawKey,label:y.rawKey})),h=a.filter(y=>y.selectedType==="number").map(y=>({value:y.rawKey,label:y.rawKey})),j=r.trim(),U=j?o.some(y=>xt(y,j))?"A column with this name already exists":ac.test(j)?null:"Name must start with a letter or underscore and contain only letters, numbers, and underscores":null;function F(){q||(l(""),u("concat"),p([{kind:"column",value:""}]),v(""),C("+"),E(""),g(null),t())}async function H(){const y=r.trim();if(!y||U||q)return;let D;if(c==="concat"){if(m.some(R=>!R.value))return;D={name:y,type:"concat",parts:m}}
48else{if(!d||!k)return;D={name:y,type:"arithmetic",parts:[d,f,k]}}_(!0),g(null);const w=await i(D);_(!1),w?F():g("Couldn't add this column â check that the expression is valid for this datasource.")}function de(y,D){p(w=>w.map((R,P)=>P===y?{...R,...D}:R))}function re(){p(y=>[...y,{kind:"text",value:""}])}function Q(y){p(D=>D.filter((w,R)=>R!==y))}const L=!q&&r.trim()&&!U&&(c==="concat"?m.length>0&&m.every(y=>y.value):d&&k);return n.jsx(va,{opened:e,onClose:F,title:"Add Computed Column",size:"md",children:n.jsxs(ue,{gap:"md",children:[n.jsx(Et,{label:"Column Name",description:"The name that will appear as the column header",placeholder:"e.g. location or per_capita",value:r,onChange:y=>l(y.currentTarget.value),error:U}),n.jsx(pt,{label:"Type",description:"How the new column's value is calculated",value:c,onChange:y=>u(y),data:[{value:"concat",label:"Combine text (Concat)"},{value:"arithmetic",label:"Calculate a number (Arithmetic)"}]}),c==="concat"&&n.jsxs(ue,{gap:"xs",children:[n.jsx(O,{size:"sm",fw:500,children:"Parts"}),n.jsx(O,{size:"xs",c:"dimmed",children:'Build the value by chaining columns and static text together. For example: city â ", " â state produces "Boston, MA".'}),m.map((y,D)=>n.jsxs(Y,{gap:"xs",align:"flex-end",children:[n.jsx(pt,{"aria-label":"Part type",style:{width:100},value:y.kind,onChange:w=>de(D,{kind:w,value:""}),data:[{value:"column",label:"Column"},{value:"text",label:"Text"}]}),y.kind==="column"?n.jsx(pt,{"aria-label":"Column",style:{flex:1},placeholder:"Pick a column",value:y.value||null,onChange:w=>de(D,{value:w??""}),data:M}):n.jsx(Et,{"aria-label":"Static text",style:{flex:1},placeholder:'e.g. ", "',value:y.value,onChange:w=>de(D,{value:w.currentTarget.value})}),n.jsx(Lt,{"aria-label":"Remove part",color:"red",variant:"subtle",onClick:()=>Q(D),disabled:m.length===1,children:n.jsx(js,{size:16,"aria-hidden":!0})})]},D)),n.jsx(ke,{variant:"subtle",size:"xs",leftSection:n.jsx(ra,{size:14,"aria-hidden":!0}),onClick:re,children:"Add Part"})]}),c==="arithmetic"&&n.jsxs(ue,{gap:"xs",children:[n.jsx(O,{size:"sm",fw:500,children:"Expression"}),n.jsx(O,{size:"xs",c:"dimmed",children:"Pick two numeric columns and an operator. For example: revenue ÷ population = per capita."}),n.jsxs(Y,{gap:"xs",align:"flex-end",children:[n.jsx(pt,{style:{flex:1},label:"Left column",placeholder:"Pick a column",value:d||null,onChange:y=>v(y??""),data:h}),n.jsx(pt,{style:{width:80},label:"Op",value:f,onChange:y=>C(y??"+"),data:[{value:"+",label:"+"},{value:"-",label:"â"},{value:"*",label:"Ã"},{value:"/",label:"÷"}]}),n.jsx(pt,{style:{flex:1},label:"Right column",placeholder:"Pick a column",value:k||null,onChange:y=>E(y??""),data:h})]})]}),T&&n.jsx(O,{size:"sm",c:"red",role:"alert",children:T}),n.jsxs(Y,{justify:"flex-end",mt:"sm",children:[n.jsx(ke,{variant:"subtle",onClick:F,disabled:q,children:"Cancel"}),n.jsx(ke,{onClick:H,disabled:!L,loading:q,children:"Add Column"})]})]})})}function oc(e,t,a){const i=t??null,o=i??e,r=i===null&&a?"+":"";return`${o.toLocaleString()}${r} row${o===1?"":"s"}`}function sc({datasource:e,shared:t,baseSqlRef:a,runQuery:i,isMultiDatasource:o,staticView:r,onMultiFiltersChange:l,onMultiSortChange:c,loadMore:u,fetchAllRows:m,hasMore:p,loading:d,loadingMore:v,lastQueryMs:f,lastQueryTotalRows:C,setExecutedSql:k,onLoad:E,onLoadAsTable:q,visualizeLabel:_="Visualize"}){const{onFiltersChange:T,onSortChange:g,onHideColumn:M,onShowColumns:h,onAggregateChange:j,onGroupByChange:U}=Yl({shared:t,baseSqlRef:a,runQuery:i,setExecutedSql:k}),F=s.useMemo(()=>o&&!r?t.columns.filter(A=>!t.hiddenColumns.includes(A.rawKey)):t.columns,[o,r,t.columns,t.hiddenColumns]),H=s.useMemo(()=>{if(r||!o||t.filters.length===0)return t.rows;const A=new Map(t.columns.map(Ie=>[Ie.rawKey,Ie.key])),he=t.filters.map(Ie=>({...Ie,column:A.get(Ie.column)??Ie.column}));return t.rows.filter(Ie=>Vl(Ie,he))},[r,o,t.rows,t.filters,t.columns]),de=!!o&&!!l,re=s.useCallback(A=>{l?l(A):t.setFilters(A)},[l,t]),Q=s.useCallback(A=>{t.hiddenColumns.includes(A)||(t.setHiddenColumns([...t.hiddenColumns,A]),t.setFilters(t.filters.filter(he=>he.column!==A)))},[t]),L=s.useMemo(()=>t.hiddenColumns.map(A=>{var he;return{rawKey:A,label:((he=t.columns.find(Ie=>Ie.rawKey===A))==null?void 0:he.key)??A}}),[t.hiddenColumns,t.columns]),y=s.useCallback(A=>{o?t.setHiddenColumns(t.hiddenColumns.filter(he=>!A.includes(he))):h(A)},[o,h,t]),{addComputedColumn:D}=nc({shared:t,baseSqlRef:a,runQuery:i,dialect:e.type}),[w,R]=s.useState(!1),P=()=>[e.id,yt(a.current||t.sql,null),t.columns.map(A=>A.rawKey).join("\0")].join("�"),$=Sa(),[J,Ce]=s.useState(P),ye=s.useRef(t.rows),le=s.useRef(t.columns);if(ye.current!==t.rows||le.current!==t.columns){ye.current=t.rows,le.current=t.columns;const A=P();J!==A&&Ce(A)}const K=o&&!r&&t.filters.length>0,W=o?H:t.rows,te=o?F:t.columns,ge=p&&!o&&!r,oe=o?H.length:t.rows.length,xe=o?null:C,ve=o?de?p:p&&!K:p,V=s.useMemo(()=>{const A=t.prompt||void 0;if(!r)return A;const he=e.name??e.id;return A?`${A} (${he} only)`:`${he} data`},[r,e.name,e.id,t.prompt]),Z=s.useCallback(()=>{W.length&&E(W,te,V,t.sql,e.id,ge?m:void 0,t.computedColumns.length?t.computedColumns:void 0,xe)},[te,e.id,m,ge,xe,E,W,t,V]),ze=s.useCallback(()=>{!W.length||!q||q(W,te,V,t.sql,e.id,ge?m:void 0,t.computedColumns.length?t.computedColumns:void 0,xe)},[te,e.id,m,ge,xe,q,W,t,V]);return n.jsxs(ue,{h:"100%",gap:"xs",style:{minHeight:0},children:[L.length>0&&n.jsx(Y,{gap:6,align:"center",children:n.jsxs(lt,{shadow:"md",position:"bottom-start",withinPortal:!0,children:[n.jsx(lt.Target,{children:n.jsxs(ke,{size:"compact-xs",variant:"default",leftSection:n.jsx(Zo,{size:12,"aria-hidden":!0}),children:[L.length," hidden column",L.length===1?"":"s"]})}),n.jsxs(lt.Dropdown,{children:[n.jsx(lt.Label,{children:"Restore hidden columns"}),L.map(A=>n.jsx(lt.Item,{leftSection:n.jsx(es,{size:16,"aria-hidden":!0}),onClick:()=>y([A.rawKey]),children:A.label}
48,A.rawKey)),L.length>1&&n.jsxs(n.Fragment,{children:[n.jsx(lt.Divider,{}),n.jsx(lt.Item,{onClick:()=>y(L.map(A=>A.rawKey)),children:"Restore all"})]})]})]})}),n.jsx(je,{flex:1,mih:0,children:n.jsx(Fi,{data:o?H:t.rows,columns:o?F:t.columns,resizeScopeKey:J,filters:r?[]:t.filters,onFiltersChange:r?void 0:o?re:T,onColumnsChange:t.setColumns,onSortChange:r?void 0:o?c:g,onHideColumn:r?void 0:o?Q:M,aggregations:t.aggregations,groupBys:t.groupBys,onAggregateChange:r||o?void 0:j,onGroupByChange:r||o?void 0:U,onLoadMore:u,hasMore:p,loading:d,loadingMore:v})}),o&&!r&&n.jsxs(O,{size:"xs",c:"dimmed",children:[de?"Filtering and sorting run against the full dataset.":"Filtering, sorting, and hiding apply to the loaded rows."," ","Aggregation and grouping aren't available for combined results yet."]}),n.jsxs(Y,{justify:"space-between",gap:"xs",wrap:"nowrap",align:"center",children:[n.jsx(je,{style:{minWidth:0},children:!d&&t.rows.length>0&&n.jsxs(n.Fragment,{children:[f!=null&&n.jsxs(O,{size:"xs",c:"dimmed",lh:1.3,children:["Query took ",za(f)]}),n.jsx(O,{size:"xs",c:"dimmed",lh:1.3,children:oc(oe,xe,ve)})]})}),n.jsxs(Y,{gap:"xs",wrap:"nowrap",children:[n.jsx(Ot,{label:"Clear Data",withArrow:!0,disabled:!$,children:n.jsx(ke,{variant:"subtle",color:"red",size:"sm",leftSection:$?void 0:n.jsx(cn,{size:16,"aria-hidden":!0}),px:$?8:void 0,"aria-label":"Clear Data",onClick:t.resetResults,children:$?n.jsx(cn,{size:16,"aria-hidden":!0}):"Clear Data"})}),t.rows.length>0&&n.jsx(Ot,{label:"Add Column",withArrow:!0,disabled:!$,children:n.jsx(ke,{variant:"light",color:"teal",size:"sm",leftSection:$?void 0:n.jsx(ra,{size:16,"aria-hidden":!0}),px:$?8:void 0,"aria-label":"Add Column",onClick:()=>R(!0),children:$?n.jsx(ra,{size:16,"aria-hidden":!0}):"Add Column"})}),q&&n.jsx(Ot,{label:"Use as Table",withArrow:!0,disabled:!$,children:n.jsx(ke,{variant:"light",leftSection:$?void 0:n.jsx(Vt,{size:16,"aria-hidden":!0}),px:$?8:void 0,"aria-label":"Use as Table",onClick:ze,children:$?n.jsx(Vt,{size:16,"aria-hidden":!0}):"Use as Table"})}),n.jsx(Ot,{label:_,withArrow:!0,disabled:!$,children:n.jsx(ke,{color:"blue",leftSection:$?void 0:n.jsx(ca,{size:16,"aria-hidden":!0}),px:$?8:void 0,"aria-label":_,onClick:Z,children:$?n.jsx(ca,{size:16,"aria-hidden":!0}):_})})]})]}),n.jsx(ic,{opened:w,onClose:()=>R(!1),columns:t.columns,onAdd:A=>D(A),existingNames:[...t.columns.map(A=>A.rawKey),...t.computedColumns.map(A=>A.name)]})]})}const rc=s.lazy(()=>Mn(()=>import("./SqlEditor-CSeRtODA.js"),__vite__mapDeps([22,1,2,23,11,24,25,26,27,8,9,10,12,13,14,15,28])));function ao(e){if(!e)return null;for(const t of Object.values(e.sqlByDatasource)){const a=pn(t);if(a!==null&&a<=rt)return a}return null}function kn(e){return ao(e)!==null}function sa(e,t){const a=e.find(i=>i.ds.id===t);return!!a&&a.rows.length>=rt}Li.registerLanguage("sql",os);const lc=is(Li);function cc({datasources:e,onLoad:t,onLoadAsTable:a,initialPrompt:i,modeSlot:o,initialDatasourceIds:r,seed:l}){var Pa,Fa;const c=(l==null?void 0:l.datasourceId)&&e.find(x=>x.id===l.datasourceId)||null,[u,m]=s.useState(c),[p,d]=s.useState(c?[c]:[]),[v,f]=s.useState(0),{ref:C,width:k}=ei(),{ref:E,height:q}=ei(),{collapsed:_,toggle:T}=Hs(k),g=s.useRef({}),M=s.useRef(""),[h,j]=s.useState(null),U=s.useRef(null),F=s.useRef(null),H=s.useRef(null),[de,re]=s.useState(!1),[Q,L]=s.useState(!1),[y,D]=s.useState({}),[w,R]=s.useState(null),[P,$]=s.useState(null),[J,Ce]=s.useState(!1),[ye,le]=s.useState({}),[K,W]=s.useState({}),[te,ge]=s.useState(0),[oe,xe]=s.useState(null);s.useEffect(()=>{f(0)},[p]);const ve=(u==null?void 0:u.id)??((Pa=e[0])==null?void 0:Pa.id)??"",V=p[v]??u,Z=(V==null?void 0:V.id)??ve,ze=V!=null&&V.workspace_id?`/v2/workspaces/${V.workspace_id}/datasources`:"/v2/datasources",A=Bs(k??window.innerWidth,{present:!!V,collapsed:_}),{schema:he,patchTableColumns:Ie}=En(ve),{schema:We,relationships:Ue,loadedAt:qe,loading:at,refresh:fe}=En(Z),{callTool:pe,state:Ne}=Zt(),S=s.useCallback(async x=>{var z;if(u)try{const me=(z=(await pe("backfill_table_columns",{database_id:u.id,table_key:x})).structuredContent)==null?void 0:z.columns;me!=null&&me.length&&Ie(x,me)}catch{}},[pe,u,Ie]),[B,Te]=s.useState((l==null?void 0:l.prompt)??""),[Fe,Ke]=s.useState((l==null?void 0:l.sql)??""),[nt,Qe]=s.useState((l==null?void 0:l.rows)??[]),[jt,kt]=s.useState((l==null?void 0:l.columns)??[]),[wt,mt]=s.useState([]),[Ct,St]=s.useState([]),[Rt,vt]=s.useState({}),[en,tn]=s.useState([]),[fn,b]=s.useState((l==null?void 0:l.computedColumns)??[]),{workspace:I}=Fn(),N=Ii(I),[ee,_e]=s.useState(l?N&&l.prompt?"ai":"sql":i?N?"ai":"explore":"start"),[ne,Le]=s.useState();s.useEffect(()=>{!N&&ee==="ai"&&_e("explore")},[N,ee]);const[De,Ae]=s.useState(null),Be=s.useCallback(x=>{Ae(z=>({datasourceId:x.id,nonce:((z==null?void 0:z.nonce)??0)+1})),_e("ai")},[]),[Ye,et]=s.useState([]),[Ee,be]=s.useState([]),ae=s.useRef((l==null?void 0:l.sql)??""),He=s.useCallback(()=>{Te(""),Ke(""),Qe([]),kt([]),mt([]),St([]),vt({}),tn([]),b([]),ae.current=""},[]),Xe={prompt:B,setPrompt:Te,sql:Fe,setSql:Ke,rows:nt,setRows:Qe,columns:jt,setColumns:kt,filters:wt,setFilters:mt,hiddenColumns:Ct,setHiddenColumns:St,aggregations:Rt,setAggregations:vt,groupBys:en,setGroupBys:tn,computedColumns:fn,setComputedColumns:b,resetResults:He},{runQuery:it,applyQueryResult:ot,loadMore:nn,fetchAllRows:ct,hasMore:an,loading:zt,loadingMore:on,runProgress:_t,setExecutedSql:Nn,startQueryTimer:Bn,lastQueryMs:Hn,lastQueryTotalRows:io}=cr({callTool:pe,datasourceId:ve,datasourceType:(u==null?void 0:u.type)??((Fa=e[0])==null?void 0:Fa.type)??"",shared:Xe,mcpState:Ne,schema:he}),ft=nt.length>0||jt.length>0||zt,gt=((h==null?void 0:h.datasources.length)??0)>1,oo=s.useCallback((x,z)=>{m(x),d(z)},[]),so=s.useCallback(()=>{m(null),$(null)},[]),ro=s.useCallback((x,z,se,me)=>{var Se;const G=ur(B,x,se);j(G),U.current=G,F.current=null,H.current=null,D(me),le({}),W({}),be(x.length>1?x:[]);const we={};x.forEach(ie=>{we[ie.ds.id]=z[ie.ds.id]??rt}),g.current=we;const Oe=G.joinSteps.some(ie=>!ie.leftKey||!ie.rightKey);R(Oe?((Se=x[0])==null?void 0:Se.ds.id)??null:null),re(Oe||kn(G)?!1:x.some(ie=>(z[ie.ds.id]??0)>=rt))},[B]),lo=s.useCallback(()=>{be([]),j(null),U.current=null,F.current=null,H.current=null,$(null)},[]),Ea=s.useCallback(()=>{He(),be([]),j(null),U.current=null,F.current=null,H.current=null,re(!1),R(null),$(null),le({}),W({}),m(null),d([]),et([])},[He]),co=s.useCallback(async()=>
48{if(!h)return;if(kn(h)){re(!1);return}const x=new Map(p.map(me=>[me.id,me])),z=ea(h,x),se=zn(h);if(!(!z.length||Q)){L(!0);try{const G=(await Promise.all(z.map(async({ds:Re,sql:ce})=>{const $e=g.current[Re.id]??0,tt=dt(ce,rt,$e),st=await pe("query_datasource_sql",{database_id:Re.id,sql:tt}),{rows:Je,error:Dt}=st.structuredContent;return Dt||!(Je!=null&&Je.length)?null:(g.current[Re.id]=$e+Je.length,{ds:Re,rows:Je})}))).filter(Re=>Re!==null);if(!G.length){re(!1);return}const we={};G.forEach(({ds:Re,rows:ce})=>{we[Re.id]=ce});const Oe=Re=>{var ce;return((ce=x.get(Re))==null?void 0:ce.name)??Re},Se=si(h,y,H.current??h.datasources[0]);let ie;if(Se)ie=ri(we,Se.order,Se.steps,Oe);else{ie=G[0].rows;let Re=G[0].ds.name??G[0].ds.id;for(let ce=1;ce<G.length;ce++){const $e=se[ce-1];if(!$e){console.error("[multi] loadMore: no resolved join key for pair",ce);continue}ie=ln(ie,G[ce].rows,$e.key1,$e.key2,Re,G[ce].ds.name??G[ce].ds.id),Re="combined"}}await ot(ie,null,ae.current,{append:!0}),re(sa(G,H.current??h.datasources[0]))}catch(me){console.error("[multi] loadMore error",me)}finally{L(!1)}}},[ot,ae,pe,Q,h,p,y]),qa=s.useCallback(async(x,z)=>{const se=await pe("query_datasource_sql",{database_id:x,sql:dt(z,rt,0)}),{rows:me,error:G}=se.structuredContent;return G?null:me??null},[pe]),Nt=s.useCallback(async(x,z)=>{var we,Oe;const se=new Map(p.map(Se=>[Se.id,Se])),me=ea(x,se),G=zn(x);if(!me.length)return!1;H.current=z??null,L(!0);try{const ie=(await Promise.all(me.map(async({ds:Ze,sql:X})=>{const Ge=dt(X,rt,0),Qn=await pe("query_datasource_sql",{database_id:Ze.id,sql:Ge}),{rows:Bt,error:Ht}=Qn.structuredContent;return Ht||!(Bt!=null&&Bt.length)?null:{ds:Ze,rows:Bt}}))).filter(Ze=>Ze!==null);if(!ie.length)return!1;const Re={};ie.forEach(({ds:Ze,rows:X})=>{Re[Ze.id]=X});const ce=x.datasources[0],$e=x.datasources[1];if(ie.length===2&&((we=G[0])!=null&&we.key1)&&((Oe=G[0])!=null&&Oe.key2)&&Re[ce]&&Re[$e]){const Ze=z?z===ce?"a":"b":void 0,{a:X,b:Ge}=await Hi({rows:Re[ce],key:G[0].key1,sql:x.sqlByDatasource[ce]??"",dsId:ce},{rows:Re[$e],key:G[0].key2,sql:x.sqlByDatasource[$e]??"",dsId:$e},qa,Ze);Re[ce]=X,Re[$e]=Ge}const tt=Ze=>{var X;return((X=se.get(Ze))==null?void 0:X.name)??Ze},st=si(x,y,z??x.datasources[0]);let Je;if(st)Je=ri(Re,st.order,st.steps,tt);else{Je=ie[0].rows;let Ze=ie[0].ds.name??ie[0].ds.id;for(let X=1;X<ie.length;X++){const Ge=G[X-1];Ge&&(Je=ln(Je,ie[X].rows,Ge.key1,Ge.key2,Ze,ie[X].ds.name??ie[X].ds.id),Ze="combined")}}const Dt=ao(x),ut=Dt!==null?Je.slice(0,Dt):Je;if(ut.length===0)return!1;await ot(ut,null,ae.current,{append:!1});const sn={};return ie.forEach(({ds:Ze,rows:X})=>{sn[Ze.id]=X.length}),g.current=sn,re(kn(x)?!1:sa(ie,z??x.datasources[0])),Je.length>0}catch(Se){return console.error("[multi] rerunWithPlan error",Se),!1}finally{L(!1)}},[ot,ae,pe,p,qa,y]),gn=s.useCallback(async(x,z)=>{const se=U.current;if(!se)return!1;const{ownerOf:me}=oi(y),G=fr(se,x,me).plan,{plan:we,driverId:Oe}=gr(G,z,me);return j(we),Nt(we,Oe??void 0)},[y,Nt]),Ta=s.useCallback(async(x,z)=>{mt(x);const se=z!==void 0?z:F.current;return F.current=se,gn(x,se)},[gn]),po=s.useCallback(async x=>{if(F.current=x,!U.current)return;const{ownerOf:se}=oi(y);x&&!se(x.column)||await gn(wt,x)},[y,wt,gn]),uo=s.useCallback(async(x,z)=>{if(!h)return!1;const se=new Map(p.map(G=>[G.id,G])),me=h.datasources.map(G=>se.get(G)).filter(G=>!!G);if(!me.length)return!1;L(!0);try{const G=await Promise.all(me.map(async ce=>{const $e=me.filter(ut=>ut.id!==ce.id).map(ut=>ut.name??ut.id).join(", "),tt=$e?`${x} 49 50Note: This SQL is for ${ce.name??ce.id} only. The following datasource(s) are being queried separately and will handle their own portions of the request: ${$e}. Do not ask for clarification about data that may exist in those other datasources â only generate SQL for what ${ce.name??ce.id} can answer from its own schema.`:x,st=await pe("generate_sql",{database_id:ce.id,prompt:tt}),{sql:Je,error:Dt}=st.structuredContent;return{id:ce.id,sql:Je&&!Dt?Je:null}})),we={};if(G.forEach(ce=>{ce.sql&&(we[ce.id]=ce.sql)}),!Object.keys(we).length)return!1;const Oe={...h,prompt:z,sqlByDatasource:{...h.sqlByDatasource,...we}},Se=h.datasources[0],ie=ae.current;return we[Se]&&(ae.current=we[Se]),await Nt(Oe)?(j(Oe),F.current=null,H.current=null,U.current=Oe,mt([]),R(null),be(ce=>ce.length>1?ce.map($e=>we[$e.ds.id]?{...$e,sql:we[$e.ds.id]}:$e):ce),!0):(ae.current=ie,!1)}catch(G){return console.error("[multi] refineMultiSql error",G),!1}finally{L(!1)}},[h,p,pe,Nt,ae]),mo=s.useCallback(async(x,z,se)=>{var we,Oe;if(!h)return;const me=new Map(p.map(Se=>[Se.id,Se])),G=ea(h,me);
50if(!(G.length<2)){L(!0);try{const ie=(await Promise.all(G.map(async({ds:X,sql:Ge})=>{const Qn=dt(Ge,rt,0),Bt=await pe("query_datasource_sql",{database_id:X.id,sql:Qn}),{rows:Ht,error:wo}=Bt.structuredContent;return wo||!(Ht!=null&&Ht.length)?null:{ds:X,rows:Ht}}))).filter(X=>X!==null);if(ie.length<2)return;const Re=((we=ie[x])==null?void 0:we.rows)??[],ce=((Oe=ie[x+1])==null?void 0:Oe.rows)??[],$e=new Set(ce.map(X=>X[se]));if(!Re.some(X=>X[z]!=null&&$e.has(X[z]))){W(X=>({...X,[x]:!0})),xe(X=>({text:`"${z}" and "${se}" don't share any matching values, so I didn't combine the tables. Try different columns, or keep the datasets separate.`,nonce:((X==null?void 0:X.nonce)??0)+1}));return}const st=h.joinSteps.map((X,Ge)=>Ge===x?{...X,leftKey:z,rightKey:se,source:"user",confidence:null}:X),Je={...h,joinSteps:st};j(Je),U.current&&(U.current={...U.current,joinSteps:st}),W(X=>({...X,[x]:!1})),R(null);const Dt=zn(Je);let ut=ie[0].rows,sn=ie[0].ds.name??ie[0].ds.id;for(let X=1;X<ie.length;X++){const Ge=Dt[X-1];!(Ge!=null&&Ge.key1)||!(Ge!=null&&Ge.key2)||(ut=ln(ut,ie[X].rows,Ge.key1,Ge.key2,sn,ie[X].ds.name??ie[X].ds.id),sn="combined")}await ot(ut,null,ae.current,{append:!1});const Ze={};ie.forEach(({ds:X,rows:Ge})=>{Ze[X.id]=Ge.length}),g.current=Ze,re(kn(h)?!1:sa(ie,ie[0].ds.id)),xe(X=>({text:`Combined on "${z}" = "${se}" â ${ut.length} rows.`,nonce:((X==null?void 0:X.nonce)??0)+1}))}catch(Se){console.error("[multi] updateJoinKey error",Se)}finally{L(!1)}}},[h,p,pe,ot,ae]),fo=s.useCallback(async x=>{const z=U.current??h;if(!z)return;const se=z.sqlByDatasource[x];if(!se)return;const me=ts(se),G=me?`SELECT * FROM ${me}`:se;L(!0);try{const we=dt(G,rt,0),Oe=await pe("query_datasource_sql",{database_id:x,sql:we}),{rows:Se,error:ie}=Oe.structuredContent;if(ie||!Se)return;await ot(Se,null,ae.current,{append:!1}),M.current=G,g.current={[x]:Se.length},R(x),$(null),re(Se.length>=rt)}catch(we){console.error("[multi] viewDatasource error",we)}finally{L(!1)}},[h,pe,ot,ae]),go=s.useCallback(async()=>{const x=w;if(!(!x||!M.current||Q)){L(!0);try{const z=g.current[x]??0,se=dt(M.current,rt,z),me=await pe("query_datasource_sql",{database_id:x,sql:se}),{rows:G,error:we}=me.structuredContent;if(we||!(G!=null&&G.length)){re(!1);return}await ot(G,null,ae.current,{append:!0}),g.current[x]=z+G.length,re(G.length>=rt)}catch(z){console.error("[multi] soloLoadMore error",z)}finally{L(!1)}}},[w,Q,pe,ot,ae]),Wn=s.useCallback(()=>{h&&(R(null),$(null),Nt(h))},[h,Nt]),xo=s.useCallback(x=>{$(x&&(h!=null&&h.datasources.includes(x))?x:null)},[h]),ho=s.useCallback(x=>{x&&(_e(x),x==="ai"&>&&(w||P)&&Wn())},[gt,w,P,Wn]),Ra=x=>{const z=h==null?void 0:h.joinSteps[x];if(!z)return{label:"",color:"gray",tip:"",attention:!1};const se=!z.leftKey||!z.rightKey,me=z.source==="ai"&&z.confidence!=null&&z.confidence<.4;if(K[x])return{label:"no match",color:"red",tip:"Those columns don't share any matching values, so the tables weren't combined. Try different columns, or keep the datasets separate below.",attention:!0};if(se)return{label:"needs columns",color:"red",tip:"These datasets had no obvious column in common. Pick which columns to combine them on, or use the options below to keep them separate.",attention:!0};if(z.source==="user")return{label:"custom",color:"blue",tip:"You picked these columns to combine the data on.",attention:!1};if(z.source==="ai")return me?{label:"AI unsure",color:"orange",tip:"The AI wasn't confident about which columns to combine on â worth double-checking. Pick different columns to override it.",attention:!0}:{label:"AI guess",color:"yellow",tip:"The AI guessed which columns to combine the data on. Pick different columns to override it.",attention:!1};const G=h==null?void 0:h.datasources[x+1],we=((h==null?void 0:h.datasources)??[]).slice(0,x+1).flatMap(Se=>y[Se]??[]),Oe=G?mr(we,y[G]??[]):[];return Oe.length>1?{label:"ambiguous",color:"yellow",tip:`More than one shared column could combine these datasets (${Oe.join(", ")}). We picked "${z.leftKey}" â double-check it, or pick a different column.`,attention:!0}:{label:"auto-matched",color:"gray",tip:"Matched automatically because both sources share this column name.",attention:!1}},Kn=x=>{var z;return((z=e.find(se=>se.id===x))==null?void 0:z.name)??x},Ia=x=>{var ce,$e;if(!h)return null;const z=h.joinSteps[x];if(!z)return null;const se=Array.from(new Set(h.datasources.slice(0,x+1).flatMap(tt=>y[tt]??[]))),me=h.datasources[x+1],G=y[me]??[],we=Kn(me),Oe=Ra(x),Se=((ce=ye[x])==null?void 0:ce.left)??z.leftKey,ie=(($e=ye[x])==null?void 0:$e.right)??z.rightKey,Re=(tt,st)=>{le(Je=>({...Je,[x]:{left:tt,right:st}})),tt&&st&&(tt!==z.leftKey||st!==z.rightKey)&&mo(x,tt,st)};return n.jsxs(Y,{gap:8,wrap:A?"wrap":"nowrap",align:"center",children:[n.jsx(O,{size:"xs",c:"dimmed",children:"Combined on"}),n.jsx(pt,{size:"xs",w:A?"100%":150,searchable:!0,placeholder:"pick column","aria-label":"Left-side column to combine the data on",comboboxProps:{withinPortal:!0},value:Se,data:se,disabled:Q,onChange:tt=>Re(tt,ie)}),n.jsx(O,{size:"xs",c:"dimmed",children:"="}),n.jsx(pt,{size:"xs",w:A?"100%":150,searchable:!0,placeholder:"pick column","aria-label":`Column from ${we} to combine the data on`,comboboxProps:{withinPortal:!0},value:ie,data:G,disabled:Q,onChange:tt=>Re(Se,tt)}),Q?n.jsx($t,{size:"xs"}):n.jsx(Ot,{label:Oe.tip,withArrow:!0,multiline:!0,w:220,children:n.jsx(un,{size:"sm",variant:"light",color:Oe.color,style:{cursor:"help"},"aria-label":`Combine status: ${Oe.label}. ${Oe.tip}`,children:Oe.label})})]})},Un=gt&&h?h.joinSteps.length:0,Oa=Math.min(te,Math.max(Un-1,0)),vo=Un===0?null:Un===1?Ia(0):n.jsxs(Y,{gap:8,align:"center",wrap:A?"wrap":"nowrap",children:[n.jsx(pt,{size:"xs",w:A?"100%":190,"aria-label":"Which merge to edit",comboboxProps:{withinPortal:!0},value:String(Oa),data:((h==null?void 0:h.joinSteps)??[]).map((x,z)=>{const se=z===0?Kn(h.datasources[0]):"Combined",me=Kn(h.datasources[z+1]),G=Ra(z).attention?" â ":"";return{value:String(z),label:`${z+1}. ${se} + ${me}${G}`}}),onChange:x=>x!=null&&ge(Number(x))}),Ia(Oa)]}
50),Gn=w??P??"combined",bo=[{label:"Combined",value:"combined",disabled:((h==null?void 0:h.joinSteps.some(x=>!x.leftKey||!x.rightKey))??!1)||J&&Gn!=="combined"},...((h==null?void 0:h.datasources)??[]).map(x=>{var z;return{label:((z=e.find(se=>se.id===x))==null?void 0:z.name)??x,value:x,disabled:J&&Gn!==x}})],yo=x=>{x==="combined"?Wn():fo(x)};return n.jsxs(ns,{adapter:lc,children:[_t&&n.jsx(Bi,{steps:[...lr],status:_t}),n.jsx(Y,{ref:C,wrap:"nowrap",h:"100%",gap:0,align:"stretch",w:"100%",pos:"relative",children:n.jsxs(Ts,{value:{narrow:A},children:[n.jsxs(je,{ref:E,flex:1,miw:0,style:{display:"flex",flexDirection:"column",minHeight:0,overflowY:"auto"},children:[ee==="start"&&n.jsx(Bl,{workspace:I,aiEnabled:N,hasDatasources:e.length>0,onAsk:x=>{Le(x),_e("ai")},onPick:_e}),o&&ee!=="start"&&$o.createPortal(n.jsx(Ul,{value:ee,onChange:ho,aiEnabled:N,compact:A}),o),n.jsxs(je,{flex:ft?"0 0 auto":1,mih:0,style:{display:"flex",flexDirection:"column",minHeight:0},children:[N&&n.jsx(Cn,{active:ee,value:"ai",px:"lg",py:"md",flex:ft?void 0:1,mah:A?void 0:ft?"40vh":void 0,mih:0,style:{overflow:A?"visible":"auto"},children:n.jsx(kr,{datasources:e,autoRunInitialPrompt:!l,shared:Xe,runQuery:it,applyQueryResult:ot,startQueryTimer:Bn,baseSqlRef:ae,queryLoading:zt,onDatasourcesSelected:oo,onQueryComplete:ro,onQueryStart:lo,selectedBadges:Ye,onSelectedBadgesChange:et,onBrowseDatasources:()=>_e("explore"),joinControls:vo,onResetAll:Ea,chatNotice:oe,isMultiDatasource:gt,onRefineMultiSql:uo,onApplyMultiFilters:Ta,initialPrompt:ne??i,initialDatasourceIds:r,askRequest:De})}),n.jsx(Cn,{active:ee,value:"explore",px:"lg",py:"md",flex:ft?void 0:1,mah:A?void 0:ft?"40vh":void 0,mih:0,style:{overflow:A?"visible":"auto"},children:n.jsx(zr,{selectedDatasources:p.length>0?p:e,shared:Xe,baseSqlRef:ae,runQuery:it,isActive:ee==="explore",onDatasourceEntered:m,onDatasourceLeft:so,onOpenTable:S,onPreviewDatasource:xo,ignoreInboundSql:gt,onTableOpenChange:Ce,onAsk:N?Be:void 0})}),n.jsx(Cn,{active:ee,value:"sql",px:"lg",py:"md",flex:ft?void 0:1,mah:A?void 0:ft?"40vh":void 0,mih:0,style:{overflow:A?"visible":"auto"},children:Ee.length>1?n.jsxs(ue,{gap:"sm",children:[n.jsxs(Y,{justify:"space-between",align:"center",wrap:"nowrap",children:[n.jsx(O,{size:"xs",c:"dimmed",children:"Combined result â each datasource's query is shown read-only."}),n.jsx(ke,{size:"xs",variant:"light",color:"blue",leftSection:n.jsx(Oi,{size:14,"aria-hidden":!0}),onClick:Ea,style:{flexShrink:0},children:"New query"})]}),Ee.map(x=>{var se;const z=((se=Qt[x.ds.type])==null?void 0:se.icon)??Ft;return n.jsxs(Ut,{withBorder:!0,radius:"md",p:"sm",children:[n.jsxs(Y,{gap:6,mb:"xs",wrap:"nowrap",children:[n.jsx(je,{c:"blue.6",style:{lineHeight:0},children:n.jsx(z,{size:14,"aria-hidden":!0})}),n.jsx(O,{size:"xs",fw:600,truncate:!0,children:x.ds.name??x.ds.id})]}),n.jsx(as,{code:x.sql,language:"sql"})]},x.ds.id)})]}):u?n.jsxs(ue,{gap:"sm",h:"100%",mih:0,children:[n.jsxs(Y,{gap:6,wrap:"nowrap",children:[n.jsx(ke,{size:"compact-xs",variant:"subtle",color:"gray",leftSection:n.jsx(Ka,{size:14,"aria-hidden":!0}),onClick:()=>{m(null),Xe.setSql(""),ae.current=""},children:"Datasources"}),n.jsx(O,{size:"xs",c:"dimmed",children:"/"}),n.jsxs(Y,{gap:6,wrap:"nowrap",miw:0,children:[(()=>{var z;const x=((z=Qt[u.type])==null?void 0:z.icon)??Ft;return n.jsx(je,{c:"blue.6",style:{lineHeight:0},children:n.jsx(x,{size:14,"aria-hidden":!0})})})(),n.jsx(O,{size:"xs",fw:600,c:"blue",truncate:!0,children:u.name??u.id})]})]}),n.jsx(s.Suspense,{fallback:n.jsx(Wi,{minHeight:36}),children:n.jsx(rc,{datasource:u,schema:he,shared:Xe,runQuery:it,baseSqlRef:ae,queryLoading:zt})})]}):n.jsxs(ue,{gap:"md",w:"100%",h:"100%",mih:0,children:[n.jsxs(Y,{gap:"sm",align:"center",children:[n.jsx(Yt,{size:32,radius:"md",variant:"light",color:"blue",children:n.jsx(Dn,{size:20,"aria-hidden":!0})}),n.jsxs(ue,{gap:0,children:[n.jsx(O,{fw:600,size:"lg",children:"Choose a datasource to query"}),n.jsx(O,{c:"dimmed",size:"sm",children:"Write and run your own SQL against it."})]})]}),n.jsx(je,{flex:1,mih:0,children:n.jsx($n,{h:"100%",type:"auto",children:n.jsx(ue,{gap:"sm",children:(p.length>0?p:e).map(x=>{var se;
50const z=((se=Qt[x.type])==null?void 0:se.icon)??Ft;return n.jsx(Jt,{onClick:()=>{m(x),Xe.setSql(""),ae.current=""},className:"focus-ring",style:{borderRadius:"var(--mantine-radius-sm)"},children:n.jsx(Ca,{withBorder:!0,shadow:"xs",padding:"sm",radius:"sm",styles:{root:{cursor:"pointer",borderLeft:"3px solid var(--mantine-color-blue-5)"}},children:n.jsxs(Y,{justify:"space-between",wrap:"nowrap",children:[n.jsxs(Y,{gap:"xs",wrap:"nowrap",miw:0,children:[n.jsx(je,{c:"blue.6",style:{lineHeight:0,flexShrink:0},children:n.jsx(z,{size:18,"aria-hidden":!0})}),n.jsx(O,{fw:600,size:"sm",truncate:!0,children:x.name}),x.type&&n.jsx(un,{size:"sm",variant:"light",color:"gray",style:{flexShrink:0},children:x.type})]}),n.jsxs(Y,{gap:4,wrap:"nowrap",c:"blue.6",style:{flexShrink:0},children:[n.jsx(Dn,{size:14,"aria-hidden":!0}),n.jsx(O,{size:"xs",fw:500,children:"Write SQL"})]})]})})},x.id)})})})})]})}),n.jsx(Cn,{active:ee,value:"upload",px:"lg",py:"md",flex:ft?void 0:1,mah:A?void 0:ft?"40vh":void 0,mih:0,style:{overflow:A?"visible":"auto"},children:n.jsx(Nl,{onLoad:t,onLoadAsTable:a})})]}),ft&>&&h&&n.jsx(Os,{options:bo,value:Gn,onChange:yo,narrow:A}),ft&&n.jsx(je,{flex:A?"0 0 auto":1,mih:A?void 0:420,h:A?Math.min(480,Math.max(220,Math.round((q??600)*.55))):void 0,px:"lg",py:"md",style:{borderTop:"1px solid var(--mantine-color-default-border)"},children:n.jsx(sc,{datasource:(w?p.find(x=>x.id===w):u)??u??e[0],shared:Xe,baseSqlRef:ae,runQuery:it,isMultiDatasource:gt,staticView:gt&&!!w,onMultiFiltersChange:Ta,onMultiSortChange:po,loadMore:gt?w?go:co:nn,fetchAllRows:ct,hasMore:gt?de:an,loading:zt,loadingMore:gt?Q:on,lastQueryMs:Hn,lastQueryTotalRows:io,setExecutedSql:Nn,onLoad:t,onLoadAsTable:a,visualizeLabel:l?"Update chart":void 0})})]}),V&&n.jsx(Is,{datasource:V,apiBase:ze,schema:We,relationships:Ue,schemaLoadedAt:qe,schemaLoading:at,onRefreshSchema:()=>void fe(),collapsed:_,onToggleCollapsed:T,navigation:p.length>1?n.jsxs(Y,{justify:"center",align:"center",gap:"xs",py:6,style:{borderTop:"1px solid var(--mantine-color-default-border)",borderBottom:"1px solid var(--mantine-color-default-border)"},children:[n.jsx(Lt,{variant:"subtle",size:"sm","aria-label":"Previous datasource",disabled:v===0,onClick:()=>f(x=>x-1),children:n.jsx(Ka,{size:14,"aria-hidden":!0})}),n.jsxs(O,{size:"xs",c:"dimmed",children:[v+1," of ",p.length]}),n.jsx(Lt,{variant:"subtle",size:"sm","aria-label":"Next datasource",disabled:v===p.length-1,onClick:()=>f(x=>x+1),children:n.jsx(ja,{size:14,"aria-hidden":!0})})]}):void 0},V.id)]})})]})}function Cn({value:e,active:t,children:a,...i}){return e!==t?null:n.jsx(je,{...i,children:a})}const zi=(e,t)=>(e.name||"").localeCompare(t.name||"",void 0,{sensitivity:"base"});function pc({datasources:e,publicDatasources:t=[],datasourcesLoading:a=!1,publicLoading:i=!1,onLoad:o,onLoadAsTable:r,initialPrompt:l,initialDatasourceIds:c,modeSlot:u,seed:m}){const p=s.useMemo(()=>e.filter(f=>f.is_active!==!1).sort(zi),[e]),d=s.useMemo(()=>t.filter(f=>f.is_active!==!1).sort(zi),[t]),v=s.useMemo(()=>[...p,...d],[p,d]);return a||i?n.jsx(qt,{h:"100%",w:"100%",role:"status","aria-live":"polite",children:n.jsx($t,{type:"dots",size:"sm",color:"blue.4","aria-label":"Loading datasources"})}):n.jsx(cc,{datasources:v,onLoad:o,onLoadAsTable:r,initialPrompt:l,modeSlot:u,initialDatasourceIds:c,seed:m})}const uc=e=>`${e}`.toLowerCase().replace(/[_\s]{1}id$/g,""),_i=e=>Object.values(e).map(uc).join("-"),dc=[{key:"load_data",label:"Loading All Rows"},{key:"determine_build",label:"Determining Visualizations"},{key:"save",label:"Saving Visualization"}],mc=[{key:"load_data",label:"Loading All Rows"},{key:"save",label:"Saving Table"}],fc=e=>e.map(t=>t.key==="save"?{...t,label:"Saving changes"}:t),gc={load_data:"pending",determine_build:"pending",save:"pending"},xc={load_data:"pending",save:"pending"};function hc({workspace:e,deckId:t,pageId:a,initialPrompt:i,initialDatasourceIds:o,editVisualizationId:r}){const l=Mo(),[c,u]=s.useState(null),[m,p]=s.useState(null),[d,v]=s.useState(null);s.useEffect(()=>{if(!r)return;let D=!1;return(async()=>{try{const w=await fetch(`/v2/visualizations/${r}`,{credentials:"include"});if(!w.ok)throw new Error(`HTTP ${w.status}`);const R=await w.json();if(typeof R.content=="string"&&(R.content=JSON.parse(R.content)),D)return;if(R.locked){p("This chart is locked, so its query can't be changed. Unlock it from the chart'
50s footer first.");return}u(Wo(R))}catch(w){console.error(w),D||p("Couldn't load this visualization. Go back and retry.")}})(),()=>{D=!0}},[r]);const f=!!r,C=c?`/${e}/visualization/${c.visualization.id}`:null,{callTool:k,state:E}=Zt(),{loading:q,datasources:_}=Ua(e),{loading:T,datasources:g}=Ua(null),[M,h]=s.useState(null),[j,U]=s.useState("chart"),F=(D,w)=>h(R=>R&&{...R,[D]:w}),H=s.useCallback(async D=>{if(F("save","running"),c){const R=await Ma({...c.visualization,content:Ko(c.visualization.content,D)});F("save","done"),l(`/${e}/visualization/${R.id}`);return}const w=await Ma({content:D,workspace_id:e});F("save","done"),t?(await Uo(t,w.id||"",{pageId:a}),l(`/${e}/decks/${t}${a?`?page=${a}`:""}`)):l(`/${e}/visualization/${w.id}`)},[t,a,l,e,c]),de=s.useCallback(async(D,w,R,P,$,J,Ce,ye)=>{if(!(!k||E!=="ready"||!w)){U("chart"),h({...gc,load_data:"running"});try{let le=D;if(J){const oe=await J();oe&&(le=oe)}F("load_data","done"),F("determine_build","running");const K=await k("determine_build",{columns:w,prompt:R});F("determine_build","done");const{visualizations:W}=K.structuredContent,te=W.filter((oe,xe,ve)=>{const V=_i(oe.config);return oe.relevance>.5&&ve.findIndex(Z=>_i(Z.config)===V)===xe}),ge={parsedData:le,rowTotal:ye??null,columns:w,prompt:R,sql:P,datasource_id:$,builds:te,build:te[0],computedColumns:Ce};await H(ge)}catch(le){console.error(le),h(null)}}},[k,H,E]),re=s.useCallback(async(D,w,R,P,$,J,Ce,ye)=>{if(!(!k||E!=="ready"||!w)){U("table"),h({...xc,load_data:"running"});try{let le=D;if(J){const te=await J();te&&(le=te)}F("load_data","done");const K={config:{title:"",type:ss},description:"Table view (no chart)",relevance:1};await H({parsedData:le,rowTotal:ye??null,columns:w,prompt:R,sql:P,datasource_id:$,builds:[K],build:K,computedColumns:Ce})}catch(le){console.error(le),h(null)}}},[k,H,E]),Q=j==="table"?mc:dc,L=f?fc(Q):Q,y=t?`/${e}/decks/${t}${a?`?page=${a}`:""}`:`/${e}`;return f&&!c?n.jsx(qt,{h:"100%",w:"100%",children:m?n.jsx(O,{c:"dimmed",size:"sm",children:m}):n.jsx($t,{type:"dots",size:"sm"})}):n.jsxs(je,{h:"100%",style:{display:"flex",flexDirection:"column",minHeight:0},children:[n.jsx(Ho,{backTo:c&&C?C:y,title:f?"Edit query":"New visualization",description:f?"Change the data behind this chart, then save it back.":"Start from a question, a table, a SQL query or an uploaded file.",actions:n.jsx(je,{ref:v})}),M&&n.jsx(Bi,{title:f?"Updating chart":"Creating visualization",steps:[...L],status:M}),n.jsx(je,{flex:1,mih:0,children:n.jsx(pc,{initialPrompt:c?c.prompt||void 0:i,modeSlot:d,initialDatasourceIds:c?c.datasourceId?[c.datasourceId]:void 0:o,seed:c??void 0,datasources:(_??[]).filter(D=>!(g??[]).some(w=>w.id===D.id)),publicDatasources:g??[],datasourcesLoading:q&&_==null,publicLoading:T&&g==null,onLoad:de,onLoadAsTable:re})})]})}function op(){var d;const{workspace:e}=Fn(),[t]=No(),a=t.get("deck")||void 0,i=t.get("page")||void 0,o=t.get("prompt")||void 0,r=((d=t.get("datasource"))==null?void 0:d.split(",").filter(Boolean))||void 0,l=t.get("edit")||void 0,{canCreateContent:c,loading:u}=Bo(),{capability:m,loading:p}=qi(e);return ks(l?"Edit query":"New Visualization"),u||p?null:c?!m||m==="read"?n.jsx($a,{to:`/${e}`,replace:!0}):n.jsx(hc,{workspace:e,deckId:a,pageId:i,initialPrompt:o,initialDatasourceIds:r,editVisualizationId:l}):n.jsx($a,{to:`/${e}`,replace:!0})}export{op as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.