From f48332d49b182086a9333875759ad4657db8281b Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Fri, 28 Feb 2025 10:45:10 -0700 Subject: [PATCH 01/57] moving around some stuff --- docs/images/2AppRun.png | Bin 0 -> 15095 bytes docs/images/3AppRun.png | Bin 0 -> 11465 bytes docs/images/4AppRun.png | Bin 0 -> 24451 bytes docs/images/AppRun.png | Bin 0 -> 52187 bytes docs/images/ColorScale.png | Bin 0 -> 68103 bytes docs/images/DataType.png | Bin 0 -> 19218 bytes docs/images/Discrete.png | Bin 0 -> 15913 bytes docs/images/Export.png | Bin 0 -> 39362 bytes docs/images/FileMenu.png | Bin 0 -> 20442 bytes docs/images/Heatmap.png | Bin 0 -> 17177 bytes docs/images/HeatmapBar.png | Bin 0 -> 65285 bytes docs/images/HistoBar.png | Bin 0 -> 29005 bytes docs/images/Histogram.png | Bin 0 -> 29777 bytes docs/images/LoadMain.png | Bin 0 -> 52139 bytes docs/images/Tabs.png | Bin 0 -> 82865 bytes docs/images/Violin.png | Bin 0 -> 33161 bytes docs/images/ViolinBar.png | Bin 0 -> 35078 bytes docs/images/ViolinButtons.png | Bin 0 -> 9060 bytes docs/images/manual-01.jpg | Bin 48569 -> 0 bytes docs/images/manual-02.jpg | Bin 10395 -> 0 bytes docs/images/manual-06.jpg | Bin 7875 -> 0 bytes docs/images/manual-07.jpg | Bin 10420 -> 0 bytes docs/images/manual-08.gif | Bin 5713 -> 0 bytes docs/images/manual-09.jpg | Bin 81296 -> 0 bytes docs/images/manual-10.jpg | Bin 135166 -> 0 bytes docs/images/manual-11.jpg | Bin 119448 -> 0 bytes docs/images/manual-12.jpg | Bin 24439 -> 0 bytes docs/images/manual-14.gif | Bin 5734 -> 0 bytes docs/images/manual-16.jpg | Bin 24439 -> 0 bytes docs/images/manual-advanced.jpg | Bin 15981 -> 0 bytes docs/images/manual-export.jpg | Bin 20513 -> 0 bytes docs/images/manual-menu.jpg | Bin 7420 -> 0 bytes docs/images/manual-run.jpg | Bin 30266 -> 0 bytes docs/images/manual-run.png | Bin 21512 -> 0 bytes docs/manual.html | 603 +++++++++++++++--- frontend/src/components/D3CanvasHeatmap.tsx | 6 +- frontend/src/components/D3Heatmap.tsx | 5 +- frontend/src/components/HeatmapSidebar.tsx | 107 ++-- frontend/src/components/Histogram.tsx | 6 +- frontend/src/components/HistogramSidebar.tsx | 9 - frontend/src/components/Raincloud.tsx | 6 +- frontend/src/components/RaincloudSiderbar.tsx | 10 +- frontend/src/components/Violin.tsx | 3 - frontend/src/components/ViolinSidebar.tsx | 10 - frontend/src/distributionState.ts | 9 - 45 files changed, 563 insertions(+), 211 deletions(-) create mode 100644 docs/images/2AppRun.png create mode 100644 docs/images/3AppRun.png create mode 100644 docs/images/4AppRun.png create mode 100644 docs/images/AppRun.png create mode 100644 docs/images/ColorScale.png create mode 100644 docs/images/DataType.png create mode 100644 docs/images/Discrete.png create mode 100644 docs/images/Export.png create mode 100644 docs/images/FileMenu.png create mode 100644 docs/images/Heatmap.png create mode 100644 docs/images/HeatmapBar.png create mode 100644 docs/images/HistoBar.png create mode 100644 docs/images/Histogram.png create mode 100644 docs/images/LoadMain.png create mode 100644 docs/images/Tabs.png create mode 100644 docs/images/Violin.png create mode 100644 docs/images/ViolinBar.png create mode 100644 docs/images/ViolinButtons.png delete mode 100644 docs/images/manual-01.jpg delete mode 100644 docs/images/manual-02.jpg delete mode 100644 docs/images/manual-06.jpg delete mode 100644 docs/images/manual-07.jpg delete mode 100644 docs/images/manual-08.gif delete mode 100644 docs/images/manual-09.jpg delete mode 100644 docs/images/manual-10.jpg delete mode 100644 docs/images/manual-11.jpg delete mode 100644 docs/images/manual-12.jpg delete mode 100644 docs/images/manual-14.gif delete mode 100644 docs/images/manual-16.jpg delete mode 100644 docs/images/manual-advanced.jpg delete mode 100644 docs/images/manual-export.jpg delete mode 100644 docs/images/manual-menu.jpg delete mode 100644 docs/images/manual-run.jpg delete mode 100644 docs/images/manual-run.png diff --git a/docs/images/2AppRun.png b/docs/images/2AppRun.png new file mode 100644 index 0000000000000000000000000000000000000000..ea220b00dd4748bd757cd33f6c8793a7c312eaa0 GIT binary patch literal 15095 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 z zw}6`VyLl#kRj+4QzLO(m73Xz_KgoaY*w33YH?8XLWPIy?U%zl)raqhQS zS5&!^v#4lGLob0x>O$0xDaHo;7uMz+D}1~ct^se7=8shh-$vGN66o@b_29>jmv;c? z$<$eo`i*Z`dn9p^=}|arMNiQ+0n$y^%Xy&`8XxC3q5%yg6;~|kcd!iyLcR?)FyWy^qH-rvBytL(fEi4Z-jjs# zIzKpJiBd?g^U5#&@^pRh+TR=+AcYgs)K81nW1ly7|9X2Za|*1`mPpG;H2mao7sUPO zCRQy+nNF@z6bWE@8b`sS3H&as#5`6ZS@A5$u)X+LSa-{2erz#0Py03!$zlO9<_h?o zJ@i<*NKrW4*Ek%`W`3!cAViQzR)%lvD~TEzX0?FKQEvIEtn_}jYQOck(6SDNr!h=+ zEZ7EgWiwTRqq>*TTMTxQKqOKtUvhacU+uzQ*o4~$?AG9uHKsFiJ_&% z^_mMNhW1m6JY{x97DdpsWtrKw?R}Wo@MJ-#Amt}{_OQxqeB4RCgwkDtA@g0(k~ZwI zIG%7I8KAW-=iYHAy7RYY6o}~DOBx{&VBTF@014dsI9-eMd&^fJl1-Jc?n$Wd+7dZw z|FE$?KNrsi#{Ai>zXK&B6TSbDAKJqKQ-Lzd2@{4Sln>dx4~+%Q6Lw&)g5BFQ5F{#N z+84%d5VL3_BoKp%O^v!dY*K$Vz=*Eb6LJX5gyZw>y^D2R|MIQ~fgDzuzqE_W+6O-6xx8*&gHf;eRrIDY7Bb&`X27e&U3&4Zn> z;Qe%xp*mOBJJV;ID|bm6>tkpPDRjZ$uwwy;i{(H(d z-q>q*`&!gA;=dLUJz;5TFa>&JNd$864iLti`dq!;1J7ZyeGaqX1h~_z@t2DErG3f@ z+9JC%i8CX5MmA&J6PA2Gn2ZZWPzSJV4Xje_l+3WDQlORUJ9m`W9!|#lm)e z?86%z6X4QbH=`T5DnHhDF2GFAP7WhS;J#W^5}Bc1J*tcMYPdjft*G{9A59t2|VJa#r=Bj?l#d5BjbTf>lxtXS+r4?yK zH*ot85Ty>waNT#au;}aW7dm=YV9r>CbqZ+~E%`1<=FLFf9Y z>A4f%KSroZ*p^UHQy+$r`1ttv`ud7eVI3-~bx{+YdvM6!7*BW&MKof8f}r_>F(O=Goi-kB(*A=;C6?Fvi$p SfqBP|q2#2LC9A|u!~Pf3W^|SS literal 0 HcmV?d00001 diff --git a/docs/images/4AppRun.png b/docs/images/4AppRun.png new file mode 100644 index 0000000000000000000000000000000000000000..f69bd39ddb5fa073ef1e66d8db8fa087ace87565 GIT binary patch literal 24451 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 literal 0 HcmV?d00001 diff --git a/docs/images/AppRun.png b/docs/images/AppRun.png new file mode 100644 index 0000000000000000000000000000000000000000..f81973c30a906933bc415a1c18279078baee1f3b GIT binary patch literal 52187 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�LHaR>tfDP)K;K~dgxq?VwC9uCsV}|D)K($ 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%0DDR2-~rQXyp2U!yhvXaOuWVru?p}RDLWEq$6^6 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 literal 0 HcmV?d00001 diff --git a/docs/images/ColorScale.png b/docs/images/ColorScale.png new file mode 100644 index 0000000000000000000000000000000000000000..7ebadebbd8381975c2fe3de8ca6758ab14babd21 GIT binary patch literal 68103 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 I(B$Gj0g72m-v9sr literal 0 HcmV?d00001 diff --git a/docs/images/Discrete.png b/docs/images/Discrete.png new file mode 100644 index 0000000000000000000000000000000000000000..0f38a9deff2050110fded92e87128dd6f0fd3c9a GIT binary patch literal 15913 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 literal 0 HcmV?d00001 diff --git a/docs/images/Export.png b/docs/images/Export.png new file mode 100644 index 0000000000000000000000000000000000000000..28b2d4f38f2d10bf9bbd986ebcf017375c71f86d GIT binary patch literal 39362 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 literal 0 HcmV?d00001 diff --git a/docs/images/Heatmap.png b/docs/images/Heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb1ca21bae1cc07647bb7bc10a69c948bc0e382 GIT binary patch literal 17177 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 )$G2vsx1Q=3lJ5CyK?Jqkjg99)}2a?P1jL% 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

GwjQYKcgfxKcO0Gc_c+ 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 Bkg@;( literal 0 HcmV?d00001 diff --git a/docs/images/Violin.png b/docs/images/Violin.png new file mode 100644 index 0000000000000000000000000000000000000000..0056e454567dadb65c1207fd47c5dae7b17d2823 GIT binary patch literal 33161 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 RBjAHDEe*ZvMb{oY|6gC=+IIi| literal 0 HcmV?d00001 diff --git a/docs/images/ViolinBar.png b/docs/images/ViolinBar.png new file mode 100644 index 0000000000000000000000000000000000000000..72924c9c93d2e338a27b99792fb683015a5cc2b6 GIT binary patch literal 35078 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 literal 0 HcmV?d00001 diff --git a/docs/images/ViolinButtons.png b/docs/images/ViolinButtons.png new file mode 100644 index 0000000000000000000000000000000000000000..5b70531d2da6d38861753d8836086bf7e6a55930 GIT binary patch literal 9060 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 L9_ZkRU*rD`jQb`o diff --git a/docs/images/manual-02.jpg b/docs/images/manual-02.jpg deleted file mode 100644 index 5c4b3bc99ca278f3bbe904215120fd2e5f827e9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10395 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 Se3MiD9bNAK#Q%h_2mcH7$4f;3 diff --git a/docs/images/manual-06.jpg b/docs/images/manual-06.jpg deleted file mode 100644 index d16c0fbcecdecfe0138857d2296e480d043c51d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7875 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 diff --git a/docs/images/manual-07.jpg b/docs/images/manual-07.jpg deleted file mode 100644 index 9d7a0ac8f79a1f553686011f4a385bdea07eb553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10420 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 diff --git a/docs/images/manual-08.gif b/docs/images/manual-08.gif deleted file mode 100644 index 77c0df391d775f2459d20c32f3c0f26928de49bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5713 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 diff --git a/docs/images/manual-09.jpg b/docs/images/manual-09.jpg deleted file mode 100644 index f3449a0451b5ef5c71517e15481df45f5200c434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81296 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 Cw9vx< diff --git a/docs/images/manual-10.jpg b/docs/images/manual-10.jpg deleted file mode 100644 index b95c35f4d64be481003091fe3e83a825612f5c5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135166 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 z 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 cOGNz}{r<7m-|P2xtFQnQJPfx7CU}F)?4uX| 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%0AI!_2M69KNG zaZJ~*0=2X!8@Y@DPADgT)w;d+6=3KEN&sBJ9R!^fOoN&;u>Ldv?c)La57Hf( z`&1z69k$#8_B_|_WUI(JdQ@@+V+={MQhxZYR{`$Ix>u9>r_Z%zXsB#Cf`NeAzsmZN zL?!@9O0K_68O~cn%M~ z;y>mgS(gOlh{?D6t(&}Df#$5&i0|zy0?0qmGk`sa44eYhN-HE3>jQ@%{{%Pm?<0LE z4o&1!`gh>adOiH@SL@TO{Al{WPw}$h2U6|(|JwyAdBFRj*&~m{rgu2m;FN5W2(sBY z_${k6duX2UjVxbU)@Cf7`8_{DHwVMv!D2^J5=V{6wtY5_uf%l~D=4x&;=*l71!sO) zLt-uJ+cceIGAYwHtgoOHoHqnYc!x6R$7vJwa8v-=TW({9)s4Mh;a~OYl%0&PRps#M zCAy}+q@v3WtKYdwvK4K{@?11yL)*G_m($)IJSAEgdVIMgFes}>JJIZPVm`ch_tB0^ zHLimkcj2nvp4$EWsWBu*e&|%s_q9VveJU>cqVUuuaCWJIa_{F|%9(fv>U!^;kXpv~ zc|;-i5rkWM0VTQ~vqZ^$3@HM8dSVAL$3R@EWD7SGLwsAcJ| zKXdUFF8{QCUZO^<)VonY$HmDhyl+_E^-#VmF`D%PG2d~^>jz@K#czHE^92#B6*f6C z`jdjS=`^>5F#|-iMgRIffTec7(n+w${d}`xDTB<{1MS{cH|4>T>4BtbnRz~JlL-yQ5tvMSL09X zgrZjSTJhvX^IO1fHE$D7!JDq5`o4E2 zIq$Q^!yqi{#Erkl3s)JxD6yE|Zud)EK5*dmgU8?faosrMe;x1sjdg#9BN(m}eXI}< z{=5JF>Ha$QIlVBZuhKixRQrQ(y*mr?AwkyK(lBP+vMgwOaagBsj&(p z?%SE4(fJMJ`3cGF#<8hmIZN)_4sgFb!#kthrMz8AMdfK>w$IV~=5%i+8@9Gq*ul}z zN7+PJ=}Ge#p)jEP+3>)^+~Sr{+SCol!a8i-o@2F4a;$qjrEY}Ce^jx%q_CSLgIRoB zbRC1ZioxsPY%F$;H}-TCde=;*?aTA8&Qzce;?KUf-7yrx+Vc>yJ(5Z2_(;12&bcVf zBCN@7uquQ^^FiZtS8bAs=H9f2LAT!V6+Jm@=AG{ffn=RPt1&ugGFSpd1el=9M!TTT zsOzNmR&Y-2bZQWNH*0lDcES8jk8el)7RwJB3$HN+-Bn%AzTmi*X4ovPWT7t@p6f9{ zJNmcpRX5f558fDDR-ySASzvkfVQ9a-3nvcIPwzezFWO@qp3#|pKq>5|MzEE#yh~Nk zr_Mqtd591Y?cU6j;ykL-?^VJgn6gl5 zB=G}GYUJt%?i;Xau!ltG5KQfca&3v!Tx z+buarXKx^#!7!GT2{Ni{+sHyszO~FdWN#3Ol!yC3MV>g5LvpLzUIrS}$Vw}e<+a7F zKJ7I3$u)~cvhh{zmw=!48)wMBTS>rSCn5gy3nby|k*l3>#YcWnkZ<$jTLrixY*&zJ|oG3VnMOG0X2qET9PV)l^o;R=T zE)N9)CosB7Y`;!$sVvM`?Hh55`htCAmfQGb|L%Q(E(YkYhB`%IC~?CR6nPHkA3l*7 zpL>RPPfhJ0Q6FK2|F8mfS$&4s>bIWLkV}_Vf0&qN7652!YXZIO0z53ze%X&?Mvhh$ zv!Kb#+iQHi5N#4Ejx8v%*KD9DSs?qVtmQ55U7uhj_d)CI9Dmok)k6=Zn-;$kGYpf# z`_20j2dBU0s(-jgE0N3)Bol(uy0MO5h=<9RO`;M2)3zHoSoJ~DehYxwU z89~Su66#7i27o?T#2`9~_j>olW#SJT1M9K;DDP?^n=hnOrgiW8ryU7IeTTeX4+9}G z>tym(o&A+3f~KE;fn4e9<@%S}2Z94XiY}5YZuznUYp(RQ9e%C#S95ygcQZMd3(Juc zJ$U>WcwBGFFAYe$N_nhSkSm+>^!~xK$3DrOD#`g*%tt})n0)TmL&c>akE-QL(&%E6 z%a6YL0DuUq6^1IS9Ty$mxyk=7pYTfWHvh752PtSyS0{%SjfLvQC`!t^>| znA{i9{~HO0N$(t$`TApHgUOKtxw6;J1o1=}=o3w}*AQ#=mk8O-%dipzu@*kOdHBCa zwRP)b7Mup_j>*-toqBbeeKCUpdmhO|q9Z_G;UZI=6bi7?ZIi~98FnVlC+j(ncGvC~ zNHQEQi<@WoCAL2ZYHp-p`m1g?nXs!0~0A{EXRfugA-Z zcaI&D((Ow`aBUL3(pf{4q%WEr;1?db?K&y1&Fd@`f|25h9VkM z(T~!}4U7WULvG$M>oj}1b;D!RyoiNo9;J(V{CQZ^gB)R++UU{Rj8der8#cpi_qm<4 z!?~;$q9*nRgF^X#i~5+ITTs9w9?qNbkr<1S7MPnsXl^OIl$1<`fZu|TebMynu`C{Q znc15K8J@_j5+oK@u06bvlB~$`I0bzlU6u22a~}i#bfh^;M?mnk{Id@%YfkYerxeTA zVoEGRvMlpR3dP(#4V%R`6?AbdW;17uO+%%OU2;qI5N;#b>}m*y({T1h;^{RBoZ3wX zTFj`ET|Cp{4NKu&jQFcL7#H^er9)HFutZbsDi2{{0jRCn zg0Ez4$&GV?tg?@eUb@)SQBz@n!!Lwj50oUKClEAtTEc-aE@d>w7f4P|G`mwGZ_uJW zKJMMnv1+QVJfC)bEFgv<v5ii$XkEDxRb@ksOx@EaOu7PY*z~_Oy)B=- zt9xS5W%+o^ktc|(Eh(nxfbCq8T24yTK10~J^bE&XnteJRa=y_aJqMJ>ay~kxdj!vY z3MMAs>C`5fV+!Z;WRODTpOHuU!h4lMobqO2LFz8V_ZEy!x~-q3Z3nw|z%*N*H;Xmw z#u+L!M>n}NaFpj+YKQuE4w`}dSYSV)TX9=$g_$B=Lup6d@F0#!4NfygI)b3-oj~2X zzi7*C!kTpCOyo3sus`EbOYLn#vsdP;^0`m7Rf8OvjH; z#zMxhleEYoF?Z_@KBE&g38%O2qg{#i<>6H;p_mY2%I6a^sDT@ti=7Mh&j7M8m{C3_8i7!9Q``RcFPFXslVf5oX7h0_= zPc+m+7Y(B&($>+CSIX8xL~+y?D0WN>J)_TaIcvvsbd;6^08R+vc&6Cz$u> zNFobO&P5TE84WXAle+Xa^NHp=0+EVx3*H4NgQ<-1U}Sn#g9a+w;}OulGaZP3kgAvyVdM} zg`v7dC^OX*1f?fkq65c^`x`o^;i2a%V+QbJgC$K?OM5$$HxKXX*ZJw0#7cYZzZABiNY16P{LP=_!q)k#j0J7Ivs76K4&|~iy3Zc??j*4&Y+rO@QqH8JPz* z4fu8hjsxH?*x(X&5`#Ay?w9Q8(7n=IV;yaWEEnm*K`&vgTgwB_#e1vpD_b?O<_9s# z-exe^e|GoY3VWW!MyQdpMY&CG0awKJI9*)s$W=2|j(Ouyr2y83Ni)0W_jnHZFweXN zr|NCfZ+f)vb^1Vhv;Ia4cb%uL-mHflj+yIBbL%8t93N&! z{`OV1tyCFSqOg<5#dKhm;}#?#Kb$;RLW)6N@Lm=IYn>nqxrr#1G9*r*2su=%E2uL%%Y#cxvlD$w+Js?E zN^(*xDViyQp(hniCENYIHI~NuKzYSc%j(nAbpifq4=j>FfHc5snpAuZkmh`PPAe|2 z*mS)myHKgn(>%)bQHTb=_5STIsUiFjYH^34GQ^C~7-D{cjpTZW3iVqH=_x($7%$+S zRIxX+9x&6tlG7qBD2~l4%CCqkq#e4_c8Gavvk7A%Mi=Gjw`-wG#p#1jyAFxbl1TGu zahQHMZ;(Z}WhGNe;a~D=`nNecOwMr4PuBE!TO>2p|6C6>p8nYh#?x8@jWul!((rXl z$MY%Pw5Q_Ic?mrxc|xVREzgu606_eF`A8*xB+n4n1AkDbe^967Nai2Z>3?6;=`QU& zf+L7yzyWY&`NWZulzu_z73`u%k*-)ff0B_+XoyCm+`D~NuaC0Ry1nLgjy&deETmdm z|Lmt8A+!-v>LQ(5zZ=~du6|b&?pM8t58BftoW~c4Z{sJiu8zTY9BqtH#9gxlldclq zLv8WxbKNP2_sxoVC#gT^yGhT)7xGClEGF3C@=cdxuB_AjJ`RuXo0>Te(lhCqE;#rt zq$PO9M}6$=`e=Vspn^MS!OExd{lk59rR<)U%X4hFZve#A^Wr`tmi`NbBj$4+a*hqG zuq7aiGH4~p5*muOn1SEUYXvGP0F)`Q_!LPe!_w&_QHb3!r=6RUHtw>w;PIkLNo%Zc zY`B5@zU`YVqn{t%O-OzrCke6C&H39oWR~Q%h*&I#63qQp-cIlP+kM#5!{WK1)38hn z06=}9!Vp^^QwtJoXB<)Z0dA7SX$~t5zD^71s4!S^oz4N=&nRASgt&PMs0utn;Cdit zjaQJrYdwT0@phTjJHupo_@STvjnr|H=EB1ln+swWU9>0t>TZkRHSYzzi47vj@uQaK z?*qg_c*NTFIOimE_9}8|2^|cgiVJ1mYqbXgVLwIf0LfHDqn6mLz@K>oVtVGB3#VjE ztr)t;B{VP@w2Y5B4$X1+KXVbIqP1gvTe4q%kVm{~A=+3ucB`#$&`@^m;ag@sg?H{n zc2t?qH@5xmB@ax+vAjYJbR)cPX|&d+e1Y(yczp}_nb!6brH!A~{r1EJV*`oxVRBcg z7df$#6a5_@z;~seKa_0iiYEM_WZSwPBie6S@qSGmwt*}X_lJ^gJ;}QN(5^ohW&zpF z6k;eq9mx12`asro8}!v@pcm6bk6%EcPqQW_qdIL6vt!gmJRB2)7iu6m?*&K>Q$Rvt z^5+l#cNk|48d8%~3o`Xc1?V)ueYq>ey=5tRVU;PDDICmDdT8Sb2gocp6G5--vy*j- zolF`22&auBo?n@@>l0guMy}n1Jc*{t17|Vu2UN13_i)kPaOFgn!gniUH@?Z$ZmsI< z)jF7;C&6l>LF;$Wejn3$n!g!g!VbQ5u5ZlE6Y8Dpu_l9Wk*ulD+X-6q53sn6yD^_1pGB~!}_%o^f;zS7`m>^6J$Rl8Mf z-JKfS9%Fw!xy7Txdy3BF9a;)aoH}JHf2l>#DuTnid*bP>)X72PoB8?v@_Q7vD2Z}G zHU=tl3JK*3`~y<70LpAPQKq*wFE1acn_H!ApnZ6FdqLc1janY6K;}Zo#Z&xGaqgBZ zeO@F+*rp^gM%-h~#|j-H1(6(=_qv^QllnmYVg;*4fn54SQ2d9W_^T-Ny0z>p73 z)V3)|lE2ky?_95#{X3yB1+#`KrMvwhC@lYX+KP>a zH3h9=-C9rfSa|7-@&wRl@rWS*Hkl?Ip{D|Iw;*&Mff+Mt+Z6Hs!n3St00+wbkci zGh=AFl#tN(bQNCy(s7l{`h2`iy%&V#>!2X_wIG{ zWh-NIP*3UX9ux3O$oXirll{EMBuAI*Eq7hl!Kj?O=ZMKpG|4)+cgkmS5VVSDDT9)h zNrG$~?1o5JP2syp9_x>z!@CY`wB+G9vscC1bP0}u&FE*Ha`T$ac=!dvDMs(9-Sf$F z^TXF@qD@z)@Z-<{L6H3NG}HBpD>oV3?*5RDP7U)G#xleuh^xZdfXH%ar67N)w%@(% zVp=q@IJg?dV4QbZ(dJ+l{+vgY)RQZ3_C1^y=x2Ca#f#iul$(V(kdNjzn&kWfsc$2Y z2FEY(fBFJ>h|F=cYbZZ?V=8mApNBNJC8oE%itX}8R*^16-l;%-#mIQ^^VLgt97djL zs-pY4vP$(1nbta*@t3zb_&3G2WluscH{Q%cYG(a)Q|J8kFqauZkz{Xd;+ABkz{N4d z+iW1o6gs0kw@<3j0WtJW(1j5$q2D>0Axw-Y5tpc%eoz4QG5C<-bV_i*X(7+@p#+S>;3;%*0lonZbs&<`n*y1!w%0;9+ghH zV)(hc*yqgPi{=={Q*+09dC0|CS5h_SAR0(y>0=wILLS?ADKO3z~A zavX=yPc^AC6l^WeqY@Is+q(4*utc4IXao?#0s+aAOOMYP+&0}-Ro*Lv)N6nKp@^q{ z$-*qbU0l;*r|y}3ua9FTx66f}f9e}U^~&W^%rKA9XKCsIdna9Veh$Z@)c)7AQ-bkc zr2|@M#rgyO*haN0V=ObY zgmbudwD2}N+tV$RIWT%X zlanoXv`5?93mzQPVp(z;F%7hN6uR}wVSx(u(|o(Co95E^&VL|n94p~!OUoe&HS2_I zwN}z%ykgiLGk!hn0%Lwp{+1C+Ug$6HNnKDX_hb0vOglu$QV( z$we%UaTD=Sg1WNo{zo=m4yUFn zKr&ztl%5`3G{h$mlk+GFJRlsubWO-PvIEJQWC0aD#a%!}&u1A?415xbo4XHG@zfw@ zNRop*poRnQz#<3SawHb92o7*qb#Z1Y6^#`wy=tJPHyk!^@pBLV5Y}4}v!iT>C`A85g6lh36fYDEeK>ya%m(hkZl?Fb(V=I3Mgc{X_C|jpXmZYHU z)-|2429#8ltbzV&;86(_Aq(0Iom4AaW2GNld@XC=U7bk)Sl4ecU_>8L3lvx<)eBZ( z(ZBOAwE`_t?Qzg%-)C~p(B7mqGhy^B=@j1=h$Sjmd2PS`>|>W%fCww2d?bMcyv_=d zbD7c!&XaQuYr0FFxfU9>#lTMrN9|gvUm+{-5OY#>vUG- zKrT^{$Li0W`jdxUN(G9IU@{m1lR?bNWI!%3{B38283NJT03cdh2<`a?&yZNIMJzUu z+(2@RV%GS%C7YGhk)L0J<*g(CyYZJcY<~NksF@MA%9f=yZAiw(Dc4Sj zCrtg(5dW?>ymzSTG)O(z1|qE<7eJ)BAxLM_1HB+41in~!hhiGs4?F-9ob%IW)a0*C6A+nb6|N(;>&(9x?tD(1@dBM(Fb}Hx!djy;Zi~P>>0Pkimrr* z)`w!0Jbi8hWo+WJk10&7_D4~nu6MRgb=M0znGm1M!+m6qSxc{8#@X%6$MN}%9Z3KovS|e-!>g{IJ__eNP6uNdzE8D6Z)r@qG&OE{UwEVpHC2U1;a9jK5S6bT{Q)op@;_kFVE0hE4hbfrM*AsLzIID7%vj&KK11 z>g~czdkf4bG+*@P95R#6Ev3EATzdY-){Q6KAOc(W48}R{lU1LG<&94-c{(P=wUelq zct#q$;91+hKo|*TgX}V$hOu^VJ)9#zQruEBp+}lZbn*I2dK@S-+CWmQye zm^zT8`v}iUKt_aKv#uTXR@UW`-(2S~cNTqFAB)og+__ksaD{TrN2M22S(!zRpMu*y zwd|?lP1!FTy02z4a{*?n{xf>bXs_3bH9f8>vMhUlt|MIYx%NO$qVD}?yY%<$;d-Sy zmJ6L>EC6!K#}K2JFHyV0`Yq^;T*R^BA@0#Y=2CYgV$<@IE=?apHx6U%O*9PlIa_zj z&ou5Cd4GgcuK#%A0?ebpEH|j1C{y2jx(HKObjEG0;6Y=ZC3k&!cA&gK^5^nU!B58y zysEMk|FqomDFzLsW3?mW-3JA^m5Z>nIveAAaF-W|j8^wv8oc%zmkgADEb8tY8>{Gg zTdSDw&F&#kA0HP<=!%Qa6wOXtv^mb$QTaYlgk|PHK+m?|Bj=8tP;Gv0iIW$8G@2Og zb@mTs$REm();#<)n5A}yzgVr2`a>B)Q7-k3j^!7bD00n{G8rTLf1fgBnP0Smi?_Lm z16{1C*E%H|6&%-9Yj1n|O~4+NB->kb7a`KyW;3V>PC@12ZAkrO+{OwQhP>A2fg_5j z)`1*53l^sLN1Qx|jrPP}5qL`jS*(tGp92<|`y|*DXRb3K&}qFo@5S$h)5kiNAz7tG zqfM4&2hJT&OOQ>LkJDA&RqRExMLpJ2D|4QmYratjhmp*1#J$ScM0FOyRHC zoP1$old#x>!~Xt>u31r%>YJimnKX>oPW26Xd|0mF6x@KbYH9eV*KvKa2)cyCD<<4@ z^O2_o-*rXUb#L|0zWzcwg^{j;Kkrk|XXqA9IVhdg>ulPII@OE$#_2A72$O~8tF^rK zGw&J;_USf>`X9gNcC2!TN)cwnTbh4h((wu=C*3bi$FyNbMO{<|Lh!y0Y>yJ%T%hE^ zS(Zko;Uk3?m_qv8KjKW$Gz5AyhqKTW)?#}5B3md^1$QWWh<&f&*4GCvi9I;P`;02+ zB6LSFG-IN6XgCG7OhVN~$}+1cocTY56VEt=>oeR83d5a5S<02f;5SOl9*c-@b!=Ql z*5|`;a#k5jnENCgi`AHVn(e04$Q&2Ng;_oZ_zw3=>Nogn;0g(?>92GPx&Kmui-Iki zXdI&90rz5sgWsDDo?OgACbL3jWkKvcbvX#JMNKW?vbWz!?F9s8=cq>6K#YXk|CE2;kSIQe`s}OnW@&}wEaV?OL{d(1c8a?Y5yH)b*t@2 zCvIS5O8iF|?2_d(!{j`~ymy;trbQ985sDK3Z+k_P9TQXYXGEJ;#GE~jI-6B6z&+%C16ZBg4Il&}XQ z6ZsZe%N_J(ZOxd&&AQ$TMVJq%@;#v=?C7Sxs=@cb3P_1?Gs&>RCGMvaP9hZn$n7AKTV`FI-vfv`ZVO*Uc;4wST{PdG&clUhX*e>@=tuy$7PNFP_Bfvo~Br4nm>U`m9O^SIM;L{l_RW%BA;ccV zw5sGWJvw7;1yb)#w-LN<*!3$FCDlFb<@Yw8PppCv-Oy?OWhMz;`41&jETZs#7dmD871}(pZ-^&8cxv zKKu~n6HYTVUNUQej`Vf|aXyX}=1B7w06ntMhuaBwB_aQ{p9wo@chgsBpYNsz$=P?< z*xv%gcn9}8R{_;qa+7kO5zV_$&z_8%`4JwZqb7Xd%gj&03$ix4H$n{?wi{`mdK|GO zZs60yCgyuvu`WqFk0e8u_UEhVMKY+%U!!Je!|}Yek)is)Cf^)i6xC`jBy>J>QPA?3 zalHLgG2aj;u?HKufy>UB0}_|=b;}mLk#abtRFkg7djb~oF;YEsf^Q$|q#*WdnU&Ab+H;*s$qC=b z!H{h|dL-!1#d9H#8`@{3KsL+Y?dPn>|5EW(`a`%HAlL(ah?r=?15jp8`dM()_Cd~w z;tWZ}!l*eZ?IHf=Hw4jnA_LkG%E^sEOg3$s6Lv$)Y-~e)=I0}Mc@-@b)Al0?uJalA zZQy3n(TPRy7I|tgnPt{}}*gB|P(so`9&W*M@JcTbB-uMf_XGu13NsRUB3} zG(S{Vk|Ua^4}Jr7o>RMTQ=762`g5K>#=%1F*yusTNE+t!eclQ!F&h;_7|PQdk$@XK*UH-8Z9=oxjYldl^|g<+bu~vQF|ImY zN(nQSSI|=t61REY{aMncF5e;gTUomn5`B3#hr#eVw;_YlY796Fy%u3E`_!CMeVuGJ zKFh&%uLVUPbR`BHZ@qkGWMki+OVrV$UGpA~1bdxN_UoQb%X_bWEp||vQRaGsN`U5s zRGH14F%oCfq#;bm$n0<5=Dm~GTp0qYRJ6tZ6*e@gNYep9q2>DVsU2r~b#yeXqHg$` zc?L~yIhCoRn5bityR1C?tmdw%bm3r#Xz-0=GF#K7%8{Gq>Kw~&lB5c~cgRfM9}hPx zWbs;hGOTnBbGN;{W2oKO+H6Pon9Tx~_o%E;`D5{I$YhD;yUPEFZ4=|$3OFv z2opPB7EUR}RJ;A&t@NDHspdHFysrVFN?FBFFqZUhRZWcG^7^O*Q#mL~Rt@!})y zd#+4o|Ld$)X5Zbm1`Rie*F6Shu%XE8$VQyFMzV>ge_RfYh9a(@KSpX)nY)|Jd;y`M%l5 zq#1I0rZbE^_@YClNW}YBF~L`k)9I z4k}K#$d?-_xq_rez&6(&D!xKj)@#Us{HWk!JB8|%`AT+Ek62m^nuTLyeq21KLJdwq z7de*Fl+|||;?)eRgQg_d;p&S?PUQPQW~P5y(^GM8d7z#I@uywTIi>01$1aZWb5|oB z?6@DgprWM(Mh0U@^u&TQdhQq)>9j*T(cJ(rJ*#L&wL4?<K)52t6z05E`GbvSktF9KLOa3a&`pF00=x`DeQ=m-ekAHG;O_bH z7Ub7iqirYF@aYWRle%HNh>*}5_v20=RCf&lSVHK%+ z&+J=b^Ve*ixV!{1>oPMgrX;cTr0u|bo>mEU{!hj2o{5K5BAU$r&?I+E7g6CM47k^h zy+S-!UIat#6w`Tw9s*;o0pE7@9&JA9!|UM-fLiZkyY&c^fUjA~z_pVJu=lRvuM%AfA`P6IUC!V> zw5I2?o>9t#QM#5f^8NiqMtWqc{Sxde57nx9S1$lF+A2{Kg}2I@ih5r;?RIWPcyC5R z+X~Mg*}nFxmWBwE(UZ~dK?2f$iP5=Ykbk^)UKnta%ue%tLah+>kv9pHkFXSdS~bPX zebN>_P5+gI>W2jye_Q}=E{gSAe)X0rI`0QW@t*Yc#P;tjgzL6Wg5X?58bpXECCB^) z8s`HVR|y&inAcYC1U5|TznK6LH2hcKF4B z-ax@N9#>wk&z$t`1AV}xI|j0`AH7mB}Ydi1D*jNDN0+;U3^c`gIHr*l90h}>CJy$>~>rnD`=$01ir)`<95Beoww}3$FGo#dNkt%5IGnD7rH-kz$^w z7~c?qRWv~Be_8+McmGT5;-z??B?{a%HuuSHmDmM-+0@!|X8w18R#WmIHM zh=d9N7nn=9#{rhWg-hF?+$cwMrZEjA^J>`AaZhxYCclGCvjT?Dqeb9Ha?bsYRMrzyDKK@%=Iz{aYFu z4rx8Pn#kbZ6Y4{Hid{oK{e$&ZJ2)=mn-tzp zId=q2>jnKoZs)nwG6>uJ`-DH#Pn^IWD*#yrogV|)z878X`*abNuqAea=og4yXx}nt z+8vg$ei!y-(j!b3^06Ndx-hocf$c4HiE0AAz!LNYA}g!s_|uL}?H~7M7gqOXCMK(w zrVXduOn{)tJ_^j}3ySNnYA5@$RzY`aWMXuH3{?U@2ce$yZ|t?IYd`+GWVU~5F#ptG zeic{QK;Eh3h?8mmfu;#4qyGotlEe)w{=03}qbZ#GJGO$to&QzW{&j8ZIyIPRk|b_m z7M<`mg9DcZyJv1Or@MQK)XT@N5hxiJ%9CHszK|h<$@q-7j~gTH#vTmA@>B>8VA|TX zqY{!$7A4xWQ*Ws!xTl7zSnQS**jfHa|A0dMR$gltZ5IhbT1NjZ~a1)HeX_lCR|2*(4r$eT2rC;tZo-O0jIMzd)d7Lh@OaDrz^E-BA+P8`V5oCA^YZ+c5#|Ic_#+K0PeVOfinLeoVK z_@0AdB_26xUJIv-7v`1F(6%PHIMvZkeT)`P^5IRIVLSfOQUP`~ty43E}YOyv7#IO8CYSUMHm%C^|x5u+3~L zyBJYc;NF`ou5}>%(-_)LLbUph(vg~(Ju^z?)fL7#wn1n){brp0W$fnpG*AY#i?km; zYAXUaVJeAz*^nxp3Zqktjy-r@gMN>WM}SsD;zrw|zc#(%@w3Zs{PC@LTPH zORqXlHPy{rEoIr|?yk8hq^3bOeFV+tWzD?{x4ZpvYiw4;WxQ-_T6wtBjva;45{zg6 zGHFt`F?z41}zAZF3eyrd5LaGq19^K)uhnP43%L^|!W zX0^J7_(#Tyhaai*CgR6J9E6Y-*Au$V=jOdev7(-r8C;c4ZQKRbnkBda@<$qqR+X+7} z=z3AqXk^ByAMFVoU~~X180P+(FPxY_WR43Q-L7jv=hW0kaz^2s0JfAm4bh51QY%HoiC$`3`e9S4Dq=LU8P4Qz_*#FaT~!;i89b#aP_{&V_> zY!q%Du{`-T3ZgDX@jYB2?6N&|9aT@r)uH={UkKU`Jd`i4a#=M2ahjoZe4II&aHKp=hRqa>Z`)yx9;nT?!*Z-k)*RCzmuE%l&kGEfGPEQq1 z8!UKL;Q2g?M)Qs$$A;8YDK{E!U%M#}JpX98a;2|@?LZ%^X)o)CDV~BRC;k+8g%Hx1 z_xvt<27zXQ^M_@_wKfD(vv1@oOEmmE{(7%;=8LKq)|*_;x75WMXAW9NCIf~$Mi4Ni z?QyC_%ydtUbw59)j-2nCp6E*&I_dGb?D_ca)(PZJJ2!4xxXFF(B8-*l8?i#~xBK52 z+$uHP)|40!qjmmP=Yfk?I2`gm_o3@lq|fX((XK=$jhF0)GnXZ6!x%pr=S^6!GH=rt4MozwN|sJo_xZVmZPww9jH6gYj} z^OfWWv-+duIS!K&cy8E`^TT$(Wdjsie&IM0tbxb-7Kag~kv*>+5O0)b6rJ2hh}MV{ zPFV@cR;>B1KV5VL(f1eaJ^kXGVsKI4BIK4oR)u0dGFf>PNGVqm9EU9eCF%d znR)s7;hRDfZ+hy6g`MFIJf+Mbwwy7OH&hm*%e~Y$D^G>y?wl^|rLlNa^_Sz2%*n#= z>B}M)JZg-0rtos}RfpN{*;x1~putH)-{t+Xcv_{qWi;Rij^fB~&epM@*Hw=Dcseb) zUwG@Y|f(>un^Iw=(H4RL%b2eY_YBQQ8G9Gv(yaZWkMK+Tv#s-&-X{ zFSamaHv1guB#;`o>GXxz- z5THw$MzMgB&;m60xo#+FV**ZPZPT9z{If4?jt(L*6!Vep*}!phNHm}{BtP4g)eAr# z$&bHW(rgAODNcNzjLs3MZ-fTk+bH~G(v4bA?b7D)hLX0_A_=oJlddOyhRvx0vaRpC z*%!{c$=P&04|1i4Fln=F(0ZE)OVsW;$61%XP{aK4{fof!`g@PO!JOITw&So~eVK21 zM&?_vs?(6@>;flLysAJQ!Gm)2R}^f*P)pkwdOZcA8}K1)>~HU zPQ3Zp@Uc;^F>k=LRIhQmnWI}I-=s8knLUr3O1GXujOEfE%+wnKT4Z(sbB&37h*dQJ&Ri;d6-^xxBdcQhYlHH z8i)>X#HdY9wPwOSoZ-YWPiei&$rb&f?pT(ec0%@(KZQF~{Jua!T~IONH8vR}761U_ zX*{yt3YH3?k??}>7PcNrMt$4>Ti{C=umIF;2YdrJjm8w zC#ntQ#J!Si-I8MLzKeSlR4IF>XQ4yAts@<^T2tqho|!d9u^~1pfYP z#;No?@csl}hc6JKy*6UBW<2wXiIv(7+FoM!DE^fQp|nJ>#obga2Jw(z&uCsz)T0Rm zd%>hNk=?g^EV)N*?MDYm*rEdh4G-x5gq+6tVQarYE*P-=a*y^W{_-dO^8aA`g$@+tY4t< zn2f7JYJi9)+x$=HuB>du7^Mej$Zv^Tj*qvYGut&nt`zCwJ>lR1$W zEV6XEyO*Y~Z+juQyHb+=HOKIf&|o`DhUoy{bP$XR=25(H*Vz3}55*#Z(nJ1UlXZuwP+@P6a$es)ALpbVm&0W(1GL zVVKmUjOFVmAMNw2!bZ&d3ilY=UOahei>B*f0U$ZPr5SqIR@&A-DQxFK?9f3Pl{b@?lW(_d_T3k2d1nw=Y##6(O*vM_nbd*(_XG3 zrgq!*a3p>;ytG3OB*KdTywtQSR9SH}k%%Dj8#JUwTHna8y9a+XvX121sj$7KPpMyS z(_gv*JlSx?1aIcB?b@VXowRzo)2SK4M$v#^Yhw}L^@;Do_nl-9b^3fmg>!wLRS#5L z$nk94>;@`!&}XN9tJmuY-7qDy^VOqYRm{xH&Z|`MH8Jt=@Z!Qt)!7Dzd)6BkUvp8; zR8^JXZ>gfzZVlp)+R(Ila??ZU$|B<@&WuSC16&&(U5OpkXfYmYis;3Swz+%UORc*Q zEVbIy{~#m7>Vpi24)GbT$QGY-b{77{qQIE4bnj1Oz|M^jeLnejJJluvmoQB*zc5S- zq?t<)$XcGwS8%o8V2sqZ?U-YDfp4(wGAL^C3uquQr3Uq(a1Ag?Wi|lTwy9{MkkDO- zoHtF`lCGKwjbkXgd3@-4uGQ#XJNG|R1MIjJbgk%%7?oNYjA%E2#06bZ10VeuL1b!* z)Qcf6JraGrJt3JK2tS0ka6!EHbigtKfCB}anO{N|BZg?eHw3$ZehH+UWZ!s93TxxAkq}JOO+DMF$Ur zfJahVOFxdVOzpnf43ZC*$|dW#pjUgwlLT;ON9e~1vQVIaUmNF9r}AIlNi71&!T`4= z7&Q(sYV_}fkbnFVKN15d@;EDF^M=vTV?dq`V zX8!g@Zu`%h*v?%ctX2QxXk;#C)20C1RN4^7)%EF5GiAw@%xVTku8qPB2{M%BYmFzA zbZ{2##^>%mu}xGtw>G$8-E#|riw$2ogIS85pXOyfcu+2#v6f@i7BR!?1^q=w@?2{? zT~u4n3|^CbUUg-i>G4cM)S(6uzN2<*Rwt6*aJ=gbnw*wFJ;3eqpDk@O8wJf#UEn)5 z8x5Qc`v_SNy;N>|QMK-hn83sMgReJu3psOEGH!PfEg54$vpMN9Rb)TU2tH(<5!|5` zrSin5E41r^UNGmG&T=K6E{m=@QJ+$;*Db4clz>S#8!OcY)LkeKPc8Rj96HZ zsv^{C*lxnD%z7}yEm%b`KoPe7$x6jtkuK|=b?1wYqe~4u61uiYX@&!C+HLb1k@{S7T3-YaZH!P+~7CtKR*tz?O5k5ijRe|CQ!-pfO z>3jKiX}WcYD5)&pv+h*+%FrShOR)K?#M=z>$mg@j$t z7>J$RA5u`!25%St?wolUs#y)z`Ws500NxO_5vZ#zUt&so#-o9A!nC~nV2g}y9BC_j zvKT??)L;z%m8)W2zS`8gl*;wV_hCk1^#?{=OOwFgt9Ny{ab)|daTthl9Rj?tFb(L- zeI3qkFoGipr;NfuXx4=!o|f4eO(VR{Un)DBRlDId>df(b%hsLccui26Ra2e+=_eaD_2`lPB5WzQ0dV)hB!8%Y zsYfDT6Yr?Dn{@}Z&O1~C;W-Qf(;{1~1`nmc$7FFCcwcdD2dLsrNDP02O@9GvXskf` ziCoO>%N0_-(<1{IKjD)$TR@j$NJCHIYEZ*_%TL{f1T9px2h&8UGDvD3c$8wf(i+r+ z{d5^_^#6F*r1-PmW@q+y;2LfxFwJ&2&$m)_be7BlC9E!F}a&Zp`IwIk}jAOuKE3&wREo z=PVMv1#Vl!caPa$ZyInJ|JnDHI6v{Ub+evjrt+0+*~J#D?V>Sf8T}l@+S1_a3Rl7x zz7@8}_xT(!jI9dfX6vz-whE`s33}!+?N@!f8`V=wHAnp4VY*9>#DqdoaIiy%p`FH#CpO2p4{P}CZI&iaal0UgIKG`3|+!D)k(&b-E5^baOIyFJr0?HoU6mEhCh*gD!{Nzdn87;Dy+l9?pN5FW|h<+Vfg ze|+qjFw-b15gIrapB%pVS?bw4ri?DkxrlrrB<%|4sJ-)}K=*X5#1ON-!2oA%idRcV zm420x5T#pK_!AcdJ!$7Y^DN`S15*LlKrnt5%iGwQX`?_l zUtsI$I?NIqpHY(c_g47dwaaixqpeC{uKo15)}DU`g@jYi=r*3;ahK)p(X}#yfBt;> zyqI>*zT9U{hTK|rfw2gze+s{!;ftCuBvN-O!@Tw}b&_LA@pR)>|GT{hroWJUCC8BwO-#Bu>Pt9IZIc_OIfsU}Q|aPo(GBF6)ij zghzBG;IILExgZXM&q|KgvOPUAC%NymH%jO$RyAae1{{C;@^NVq%M&4DlNVVk!Aa?O zX5H0Cwl6*zF6Rw&Jz}qV;K1`e@6LqnDGgTP3r3Ym|N8-C%3J^`|2=?A+VyV#de#Q( z)PC)ppcOd9r=I%92#;B1JrdFm4#RWo@!0f^rfJg;pk(qNm8+7D?GYf~rGgz2qdG>} z(D-WYFjWkytm#4%r-0blhY{30j5@=3P1BT;=VS8K@34xp@KR`KvSo2UaxDBCOoRd{ zqJl?|WMNS2P>RvsN2l#c|Hj1m>n2Sgu0dM@=-Wg=pK*T&7q-{vBlJ~(nR;`&UuOWj zm3(&eMPJkxDW2fF|gkbgh2*TSllxS(wF45LPh;c|NMXH$Ow+(S>;^h9o=T>@_2U;sHFy*IuHFv*0 zFQxooYtu)MEgx*eHIvj`ox+I$aSk(iNzvC!cyMfXg2(riY4a%`I&Z(GMxqDEc6@_f zJSe+!xP#3>C0}LN?RK%cj8j_ta>lm_;$g&wj;ff!YnPAL zwSR6ler+o~^hKWa;(_v5kB`|0x1lngQ=X@dOp9(B^w>G>(C;vd8PS!x6)Z zh`ME@%D4$5!ls+rmo5c3ncmWPPugtx))r-M-tAW)Tg>d8ExQ76`LbItms_4zDwuSn zOuQ+LZ&wY;eV&2-Y8j|LEUI*yR~KLaLui_{LBwy z(hAY*k8O-of4Nyob4z`7Ey2z+(nONLv3)X9;BCz=xEIj{iX55f8#awXAGo`RV|VkYCUP_GNQyDvxk5+d*jxS;z6~D{ z=BUaGc$7mTKAyWxzW8uM<4ftVmOYy_O)?rkzW&0e5z3Oh#%s+a=j~+=LUPWM9f7(j zJRoAaw%$!YF8+pn$~0-$XHv8j`7z!*xO#1I3AQ-hJr2ymHTWb6k5OMd%SxER%M*Am?(kv zeA19HY^<)9+u>kpcTV(BdhsP8m*89IusUhM)OB|dUS3}Icg|Hqd1ngJ6ped?sqx0 z_LU;<)uJ9Dmm855rf#wJ?O0&cs;jvcwyf^%_}BRw*91 zWgGJtLD(7iH(1PBKUmBW{}+fllVkqK2@y-|%qDN(Ug$EJJcV3(U>|q=G%~2CAF-ZU ziSTSGm1a12>5(B^#|n2y@nQ(XiUB=U1CM3H|5{omb`5n*oh&?Y@TK}JSqTrC1>(e* zFa;OC!H`*4qKxo!JSbK0h5;%S*kL@4)DT%*q=`#yomL(+wit2R^e;- z?&-G~R}ZdU`6h)`u8IM1S_p|Z4nt4v9Y%*@KwgQte>>xa8j&BI$W(59YxogM(L;(d zo13giu^-OSai=j7fjtT_(ogYM3`-=H$SyV+c$Q$Y9>A%rdfX^38xlC_zE+Wn}}tN8~ew- ze;?N{)?%|V!%qLUXr5`|sTs|?ypB^(TYU3GSRCMcptm?P3XPkd4?L+aCQz7M`oDk? ztQZ8vDXzUcZ;H!qZJbD6R?+OrOdLBgMgXIK{VmyV21WId2aeiccJR6Au)lMXs%R_} zkDvTE%;h?iX~2S^^{fLrS>P+g zXJlW4gyu4h-}(LgOBEURq9HWro~vyJGes7;nXN4+&N-jmOk#qqDIdH)JC$Ugg$}lz z5ciZ4Z>v*Hu@o)H2$;M%(m@CnBQP)<7FmWdQpeuKqR>(y~@id(kuhm_=Y zS8#=!l_eE1@PP#CX>VPgAE>2Wq$-pL9?-no*-8Z*OWwM~#F2i(6sLHNW0lcGHaWZ! zyY&5ZuU(jj){^O3{MF=c{=-4f>3H+A5>5Y@(6<=;2(amR=l=l?`hfvZ)1Iqq|GR&8 z(@UsoC1oku#9njX5lE;~$rFAijVzPhiMPFiJ5pu<`RA*}IT`A_+?=!`%tPRjVoq+R zlf2O92kE?%`WFsZ>yqva$#GA#zv|R?lMuK))z!5oqnUh&i!-%DIfyT-ZD;{%YJv30Fe45*M}I)K~}IZM6&7OBuw9R!w* z_7t#=9vP$T4$Ch72Fu5cW2*&3z#ZO6fCAvelT}t;1)v`Esu28G^jfU8#28`a`)MR) zwO)$vH<)7*cn*2{Utnj6@SecF0MfsNEz&Q2r?_luuBlKW!%0_fE|EyX$Sk3}B<}}h zgt4Y6vsWSwbIr_CPhED&(=-!kFM)2#U&^TRxGy26n)od};Kkq)l`Y`MB5;U?LCw>|7Saf zt{SM5?{#dZ*kT{1U(4MqKvlN&^T_Ua*L1{$#~4>r>tQcjgP^X5;{ZoMC7wN{)0Q9@ zAxg2&0pQZgi@KN_*xncm?DQLuzR9t-22dHM13`loH`q1ZkX>kM5btNJ-#_OVKBAb_ zB-$T6v3`7v;^|Ed{;U_P_m~W3^*vi}=<6QDR9JVsVFg)pPW>)ZCK{B*=>+JKONQ*EGLqAVk`f&L3-%1%CE zu&e(f^>*~Xwlg6SLmd+mPJz^7<~i+D_hm~CScC1;Dezs%7HW?kwT)b96_7Va&yuGW zfI9vMHIwASV?ghZnK%n#oTCz7o2YCQIA{-J0)7tdE$Yj%L-MW4&ed*m2k(*vmT!nJN^a0vkhZvj*9c1lqPOTLtY zHD8M-=JrT$R(>u2#!=-vt`AQ(pEVV#V)E+ed=qGc(+NmOcCyvZsC76RgW6=M9OmM4 z!+i5c_9J}zvo|bzE#%VVHGo*{=FrXT*S-mdy?Yh25^pwH67-qLU$1!ffVy+K^Sulc zqjFWJ{KREDk$W-{T=-X)pRDK(?NHByunAF(Lx$sV!p) z!qMvf8u9Cb4Bo%JBP8U0%63_cXcR2rtYzXQ*!7B#FoZe4MIsL;6A z&)K8${p`I{Z&_d5UABhdARzqD7QtEY>I(QZ=8n$sDx%k|MYh+!6RSM_ZpIq6&uo8= z&GyJvr`hgD1tFOjbDJh?Zz|qI3I-IQS7yLRJAy=dA6JJX8(9tO01ES&Ftw94jr3-ot^6y>C0^jiJz-z?i zdUbemFcZsT=@ACn{vQ6NRp7kH;$m{oQsululE6HUBX6^<7j>hV0AJ+VCV_9T9Zkmn zy1OTBt>DD^>2nJ928c5Cb*Oe;_YD;q!G@iaO575Uajn(3ttak%7F!*E;n2G0dF(CC z43_2Ie$uF?PW+86?z)!u+thjuTbo%fYWCW*>jyL(T&q&FqPDK9A-#NL zDX%w0ceoq!N^{$vfWJjLIx0SL^rpVw5&d)#k*)pvD^^(4y}XWjwcN%yFlT)Nr>s={ z&W3!2@tZR%B6sBA*k0`X+*-Bb$u?l9D{e283!gc&{D|*ampO&|KY|+ngk%4NWB-I> z{|YEr5`Fy>jy0_BC%dQvc|IY~#||VvcF?F_5p*;#@Snf$==;$&zm^8C0=?h`%Fh47 z0@=<9U9WY~%bM%fpKHPqiLCAVmQS&tLho-{ojY&%^r_h53>Qas;X}=#4O@IL{@+|+e0;!nlB&= z+^8?yt?JLA;-z+0$=O-Focm(kz3dkJo;Zz=jFAoG*GmLxTDtYTb>btzqYd5b1-DOekyDo`+0g?|i z3H=5^-5L1x)!gMz%w2t|YYklgQ&#gH2@Z=G{q#m*z(g|D-NIwWY_$AxUcjMp;aIN= zIi9RYd-~Hz0p5>ry3>lK{|2FHwq;862masomA=Yfo=1J=_7PBd9L>72lAwCQnt_B( zvw!Jk@j)E#5S`@Qa&abnxBpiWwl(qny%yyjXFp#ZjB@JB6?9;1$e^%JsOqPhTw~=% zU0)FtvMDlE#)3idktqm;gfYY(4yxy_!;9X*EKhS82r~2st{fnyHX+uz?IX%2StmLv zY3JoOh}v8-3ut=7VpQtSUcxM5x;sjeiTgP$t20k|o4Sv*yi8v~Cz@OKMmLkYz$x_U z=lL1dVwSc$+DJM5Bx%E5i{|Lgr>^7HTTNqp4_?%K>|98pAqh zBH(@8HO-}Kge=`u+x|&nq%$YWlJ~_q*>zTL-Yi>N2P?8yGL9=ruZSbF29~n6MXFL+ zRSPigftjljFQ&C@1co0TmpxXuf26AI8%&Rybp*W&$kleM zR{`4l!mIe0dn^P|@D#Fos8ZS4^F>S%*n4hc%}~C3a-00TJo<-ay;w3?g&>O8tI@zY zB(LkI@;m0EiG;91KTISq0I3V~sKt&QM6JEHp1`{p*#$j5WmG~{m;gF0h^dFc4eMR0 zN44Dbfb287M_L#(4f#~l~^0LBWL%HPKfA3rewv>dzS0F_wN#kccc^>A&Q4F)o> zIDuYlm!>=u(66N)og|7P1ZPql7If5sL%_oIYt9eEoXe_8G$h8{QRx9G^n8(R5MB7B z<20r(An!n1VlR%5Mx0FVA)Vmi6rDwW01C$cy4wr6y2l)6QsBddm=adc3nUC864P~m zVfv<2xNQV2X<=&Q6WF~G*>Eo4wDL;E1Wq+aW5 zfdq=e6L55`6G1)GkiHs}A2Lu<1rhKe6UcGQ5qvE-e`HtPMMro`i5COaJzZv{i;iTbUW0LZ#3~Nuz64J^ z#W4|cdICxH;3J2Vh2P1p1K5*mDd1zjsrd#&=_NP4NBEjxCd~(!I}@m@p}~zpdqe>t z7A^4E;KZd;WA2(|6c$Qpn!@r`}S!Mu2PcJWuvI^TLx%|4d)s zF@G*X!cIoz5VW1p@dBV}B%NGZIP!#H{^Kz#8rU$t(#M%LBU+fjmh6BU-~#&+XnYDv zDTQWOAj(SAB?PI|!;G_LmJ2&G)+ev+&_P%>gqR)^px(5a)@*`$855xf4v!V9Fts6W5TVfmWFdPZ7XQZvqJ?Uua-wT2qZumr_eT zz9Z>$BZuU(An9AZCNPtOMD0RVpb}Gx2G5r#%?mtM48CyfF=vn?rzUOhJBD`?yJ@Oz}=VX$R3!mdRKd$jlR=d$Al{D>TgfA?~mgzyw zSTFp@3=lQ83ZEaun1wQWQsQ#DQ?o#hXa<5)``qQO2TpD80^io+59d}dve%5?nYr>a zOFnKYiS9H+5j}Mf5LpL|K<0(DMrq*{FwSP*;W;Pj3vM@s1AX6>e&AT>$cGv$WN9O+ zATA2@%?Zpk1Nm+V-~{QKR^=EMK77&F{98N5q7_roliI*J*-P@T=4f!I8+b3Ug#bMK zvuz*n%aC7~9eNr$nGYWJB6u$!o2;m#H?^O?n~QEM-KcwU0C{Kft^O$!4^8mEEa-92 zCVlMujY~>=vNq%x^}^hQp!!w3p+7GlnurV;SReU5_F8v@x+a))JR=11^31@H6UbTXOKe9LE!$M&o2bf!AI zUHtQ-P`f-MvYuNfQli#8y~k%)kr{qPa8K!E@GAF|tUrH;w0tLbUfLC{g3OGU^_w)b z_lSy`->STPV@)gPPKE6Zcaw%|q#X~t#|+L$HdZDltwV8YuMmVSE8=_X!Jj+|+^D)+ zL8Bn}>lb@18iYlgJMbGi$i^^>TK(2cW&$4c7!+Lt(fR=WDadh&>t3U~R4FU?B+eRe z0Y-pO%ZF9|?2+_??cd@}CL2PXMVDrH`QJ+7MwA6EL( zv(y)>LC4KwpTDRZj}8AKA0W4lGDneLh*<0Cb@}Bs=`E?h{ySmomA@0V&i-r0lF_H{ zz7|LR=VgLFL)$v+rIJAO#T{wFinQ<7zems(DR6Mo>LD{L4L%%mJ5_B+8nYz%>kKji1a(8u* zn3yTMaxjXRL-=M;ugoOoRMx1s_OH<#1P2zV{nIQ;Y` zrXf)DLXEJ9LZ|`TYlVYTZUX@3r~z^Lk^`;GR2=-F*8xg726%|vYuM%p99g_6t{~cY z5>fCY8iaq322srz@@^ucl3>I^Y7oVVz9R~#fP%D6IK@t#vI5MEMRi%XDGxUHGVa+O5e&8Sw6 z^y#52vxEuuFb`e8%~3yi*3}n=onPe_{mWj4Pw7FHj4?O`zb&Ee#9_TN_S#R{Hcz!F zX?ZdENNp9__<%>9AwYe3K$7Ez@FORL`D@A|WTU%fROPbjt@|1?KAp?Sf3CFZ3~#vO z{dY%JeZqf(U2V)<)T_0?6#g?i_{1DpcJA*|aOK}OKwN^8xN{&613(h)f}z|V15&mI z9Zb{-EQk#cK7Qp*_WMFT2n`9ZUZ)2Sw-Eatwh(yo0m`B-Kv}oEuz3mmc6;Kjea`#7&~T zykp6q^bE%#s$u~|%}+y2U6`&~^4@9erYtsAtP1O+H^*u^1qZpzpN0QxZv*O70+pSx zRX>45f;&nkHoTMx#LQSf@4!Cz#BOw&I)$H67_8tqZs%$(5fk!mhSP;qvsW#P z_8}){#|nf3p^_vGkX>=83_;<4umsfzH7H#54HoPZ1NKkhKnhIH<_Mm-5kWjHed!Se z2YJoWcI@b}jClGt0NAKXsrHbBDy2%WGn?T=RXY=ZlPkEF)T4#l00-?ExMV}$hqiDW zm~bZ)>t~XvYreq-S)~CL9Fu^MJ_28|*L*>)f_i1TA>tSFZ?Mdi22>xqOjM8Xa*AXK?2iBRB{E+}_ z+Oe4UrrRgOSuQde)P2`BqCL_C%52sFrfIT=xl-P|Xu1;~#TC^1r z2FQXW12p&a?>!}A_t82;wdq`H{t@nh8jYYr#1#8aDQDYhz=!@J)cYfgo|1yhGo-`SUbgGx`8n1{1;-+gp*eZB8PxcYo<-axuIGV>F>CPvq)yp!r zyYb)+VUJYZSEgU>>bi5axWj@YS)+8v8HCf;eX?eUMIZLL<)w7=2A%VdY_-DhMf8Y6 zUWLoYzrlRd$?9=V0xBQfR2=h0xXPk#KR14#H)iwDbY1gU$oqq&7kRC19v&c}t5K>Q zPERCGt)l5qz+lT~aeXK>>F^cUQvg&1VXWKg2%?tJRk% zeE*(rJoKLOsd2M)PX)^Wws!lGZk^l3o=C2WGdbhc=x%ktsyHi`wj_m!Mur%J%8lFV zlf_>sY~6ti>T}CEznXZhr)%t{2-%X^uYcU;p_JbaD4s?iLfUW zhhE1H_o%db^nq(bty6U>?w{YZM~Y{^rS8LF{qkkZyRnQG?S~uE)5OtRoy?V9;<)p* zOj;{k_bl(L?G@D3l_R`OI`~lDoP9dMOMGLO|Jsiyxjd;UGnbWGB~;$cvR?GN`1wXi zwe0n^Wp!l6&i9*2vJ6(CyS5#!IQBe8HP2YALt$grXQr^7eK;o8GrwfqhkReCVs-amzr!GJH0pA1DOIPll-)GfJP7~ZG_fPmskCe zB7&1AUV%(qA80xSg(W5fxh8Pqgwf=cU^SQ%Y(fyeTmkv{3!vDv%*r=~5>59DhzwBB zh|)vgnFQukpf)f4^`vt-s{XBO-aKZ%C{!}UEWT{7TVPMwtztbSH(9=`z`U4e-+1rG z4669Jx8F`z)d#%+)qEDQ`MoQgG}rD45(_iUEE0el>8^@7)bD=T@3?f*+j!G-x zwhtesCIR4o*Il|_g^HL9@M(|`jY}HdvEZ*LlQMshqFtO-rr!WI!ZY_ zb~c^M!8!U|B^}(08G8~oTtYOeyHoG{0uvU_x?JkOMN{YNTbe_ryzfYJch+oHN>)mD zI`&pSP&9z~kb6?jF+Ob?tN@^W*yKH7^Z`>i3z1uRTEHfz9DB|n^)izDQehqD^ z9&P)21zOgJ+Z*UBeK8uv^|+};?as@v@+O^zk?HlPs(SUMKlND@+V1)4-y_CaarM?g z%|Nqst=EMd!7A(R3T0TG49*8*qw>%aWE`mNJm-I^?{6+5;tiHmNzPhoxB)9eke z?Q*&$&ci+*Ce}xI6CYrQ^AW`Ts0iFu$4R%N<1K^Pl8xC2(|pR8hP;yx-bq{Q$)nw< zY|9!3h;2~?W;U0eTJmnFeUWd?9lIg9vPdjwKrW@Bds6MPIA_Gn8C{i3A4Tj;5*O3e z`-(d3z7snS-n~0+|4O>P@r7ahBa83||BOObYt3M@j3_M>t21JcnQr;{Ntq2Fl#y1j zX+PuBEiLkN7ip;SquBPa`cH4j0xt^>;3ElnZ6i3i%q_ab7ufS*1 zh69gH?_TZBYguUg+WkWLS$Xx>L|>)@`-@->d>@n3)8bl&Bdn{@t}Ib?eFxZ{2P=Nz zWelpjzDK%>E9FRX3d@t{ps2D8AMvDPf)kYX(lY#QeZ$v*9x8yerw9zMP?_prmXRRN@7J^Ttm|>2dA$sU0*gTu6%27=ful<3}Y?! zs}CN+oW=+S)s)uwzg><#P*S*}Gt{)|bX)H{rdi zSI6Q!@=~oNiPK-LWIsCjvA3#k9bIE~CN5w*djLy}Aj1t~5Vr7tpl)}n=^B0L)B@d+ z7I3voTw~o9++Ei<%6Uh*&0got`76)7N|YWif5>=T<`J?9IU!^J3vAUxbm;JP5WPLq z!jFzd8C2XVY)CyS(H`h*&HnnO*Tk8Tw9xn*&tP6oSgy?x-nBVxIVkesys)0G@UJy| zVOlM@pG$9Ui4c3oakQT8U`wg>S%!6wyS(HMEi1dSTjgqY50qy+oa`~ILYT9NLkyyi z|K7d$I=yBU&CAyLu_6QdLcv1tXvwZ*KZP=kV(`z2<#mqFo^V zVf#2V-1qn3Gxom?pZ(sN{L0zy&X=Qq(R1$Dv9kAKt;3U@fLIc2{}iebEKpl&o~2CR z$w~9tjalSL3{-(O5B$kjmmhRb+fo5Xz+gyaxWv)RdYx?)3i52i2FhrHkIJ zJK*G~wo2eAC60NI9tksm`kQKk_F_&LlTvE|B6~tx1$hcx|BHgqQZ+%UjNx4mqAi89 z!6tVfdUR^8qmb869MBU=p#UUNYx^HN(sNp?x!(0404E9hPDv^W2b81-&4>^Dq)#AZ z_ZdLFFNF$~KvP(+`zi*i!hz`|K+Y-Z1AVHq%y$pdx8NDJ7~Pd+#6Ne7=auT%$Gc6v z;B1q3xZ9N}~)IiT=}NF3fsYf2hiA4<=MkDz$0;C9`B9^ys*#8vXD;y7uo4vw4&iJwICP9 z$Mg2%CXTomMe8FaPf7uE&3lg$nPlX`^($I;@bC}n(N~XO$VDOKZ9yR>I7wbhgoF7k zsAj1ZsHvlHRib-)qTm~l;->{K+RARc2X*R9vW8=KnYDd+VT%bO?u`F(YE!O?V$_I| zlgP+5^Eeu)m-3FIM|e#nP`%_XC=m+8tmhI27vh2yD_e27w4(Y2_%vg#i-wd0dXL+fMj6_n^Br zaQ=Cs|IKw`30bKSh5HI$x>p++9G;0QE{6 z>IEGou)N;m0p)&^321;Hqw~GE75KBbHG=}QGLOIsS-q9iX;rf7q^!^4Uc#4C578u% z8VZm4^zJq&S7xYb;npH$;GS@lR*y$Cm@Pc_pd9R*_~fvc2QzQ4=0oh9SW9%bqS>h@ zzKdAkg3vk1@2QzdVh#dCF|oq5F}XjFln6~oJlW`E-+q!0V|8Q`siZw_e%L|No)G*H z07}}`-$UiJb>}+M0xcb!-Q>Z$)Nc7ntOFG{o8(3tM<6peukk^5cH%WNi8bKtY{Uvv z{_5-&xJwPEhs-5kGOW1OYooH*2fSWe7GN?p`RIsmFn=D}OBf3sbxB9r3=)GrD|+J;YV7-sSe{p~5 zdk&;&x5al0`W7$<)O2{!`@zxY-O+zbk3;` zR1_+@Ue-}%3qB+n@Ko6AAbF)K<+&}THITe21R!|{wQ}pIOZs2406^V` z)!>y=!KpgV<4wg1=9E?}c{wOe-I*H*fGGRckg}nlcovyY7i!A`ftX+gJ3;z>kRoWT3I)+NXQM3B z_)K^=)B9_0kAB=U{kEamA?dX_mr-^8HHaMs8Qm^DGr8wsYr|i;Co) zoE6-9*3P%n?Mgz+AP*mY&dYUuXlVAGi(X79r&7C8zgVlII@;?5VK7+d`2wD$0k!rh zBcO1c{3*Qt7|h+>kv2OiQT_L#&c)&ozYjUNXdx#M&RM9vrBun@jmYos zF(==0I|6h@&Vl$en|)vjEh#As_YKAdO+B?%w?cQ$sY}!h#P|}gOqM*y9{`OqW1Hqm z&o7J(B_G zvnWOKz0g?@SH*jSlR*I{RRH=Ve1h!*=o;HQ7e?=IiUlFq4^@-bZ=l|D;ODkN;_jP% zD|4jh>wa`ja^%kpzZzmT+24d0)Vpti=SCPQr?=#YAsCT%-pPICP)-9lTS$y6Hhs?C zM*~#;oe@);^pY0~Ot^yR(G#IWfD7OJ26Ks{?joR%47_!Q!vCt1r`TpCgHHBY5XOcf>eC+fwi7c&!{>;pEBvT%bz9G1)dgQKha3&bCuB5 zzcr(=vVsYL410kzz2Hp$qp@&auX&NJZTxpC%W5zT`gT;nhxwqp$haB&H=R*&1l{ZJ z1@Aw$S0{pf`ZqSebB4XP^Ne*`FXhkA`h73ukIK3kU2;p$bNG4wmwv0*0j!4qIJ$F@ z1pVKdm?h3zfA@VnNIxr23{!K;=Fq8Ai{Hv|X#-=*Ia1Mohsn3wAe`(z1SIBw265d( z)W8xfq!Evt4W)7rO252A^dd!ZC7@sB;a(a=NN z@vC_Pw3Ng8{)ZQ4-v1q=aE6*f38?ZFD93#|1*fbWu1=}-SaRTR_#iB`M)*y`6q4+M zrCbAHl%j-Tas>Um^t%G20>n6`vim)v0|)O3r{1p=`6Dwm{qUa&t&?`}v7otC=Menp zb-*_|NwI12j43GT*|2!0Pyonc)q0$5BZ&~vk1Bavc!(%kt<(%+{@1Zou<{Iw z7iYSy{|4K&34o;OdT=5vHMwD2ihN&hk8NB};PWJ0F;xH{G2w}9}%M1A-|Y-15*e2b^&mbx)8}Af3gHIAvy?}qROC9Cnw}= z64VN|m(#K}Vqie7B1So=kIX{%L6utaU=hy*B1jeL@yvv^7SPP*xr=!)Tw4z1)dO}< z=NH7pJ}~0}?@iVx(T0}z(y#{MGTA2)a~zUCDP5-YQw*t!n2lg|9R(W~JLZY-k|Sx) z0I6jo;ejdQvlZx#!#-S3-{zFkuoyKc09k7>8gTMLUqc08H)JK(#9XD{9+D$|+v-Fo zIz;CRud~JT7#24xK=LEE#M4+vKYIA(9jIwghdO1ocEkE6VkU4sKuqn>(wH+;Tp@`a zYNdcG_6L9Zd{#mN#?G{mqAuj|a^GdgX>IP&`Cvy;nQO!O^7G^N(WTz>lI7sPHQrNS zbWkS2MhLbu+UxJs++`XqfYN0<+X4DLB_tL|`9HX-3tLq@&5NNP)MKR3xIqN4r2s+A zf;arnPb;Che9+nK{a^vpW&Mjd+4BSP)4pS|#^B07kM061^ygx3UaPmNw+j#N55Cc$1FMRf}JNf;U%&spTTPYm< zykEid*jWoAe6XZNoLj;w)zw)HavSH2bt2Ay{X`k}!gjW7&H`bORi>OS@S_g`C)8v4 ze}%Cn{&vgkFSvD-6R`ZDAgDQ*35@(-Bp>f**X77;S?MIJFKqDRRyy#h} z4MU4F4U_j!mpbTrf76L=Pl9|r%xe$R?F|iT0@S0r$mue~)JEOm{@C%@5i2*_`rn&N zCf_Yy0FAY1y%ImPM|J=#Ko>if0NCSJv`!EZn1gtC`R|z!K+WVgvHZ^@Wno!X(`a9C z!};-P3k{Y@$+VXs1Nc)c|5M)dx4F$vak+W4SxbBGLeK16+Vk7o=I7^u8~xkd=0{fa zdl|*~@j&3GZc)mpAZ0RN0P8{gfW(tRz+vlOM)&*TJ->*9fB)O$Qh!0izB|GEBBO=< zMW__!2!b*g`+7PnByCzi08?AiaX=I)T(ol(a!|fNo>aR-SC|PLZ^@TI%w?uZQz6wM z(!o*%MtY^v{mt@Kk^oIWy1&7| z%>-R*J#+ydeemZjP#dyTfV6nE%K(h+{76)Zz4~5I9)?5YCNcs z2ARuFDjF1J^$2>=f01eMa8QPjGv8o9IQ8W_Y_Bmh$rDKXHpeYSoIVcTq8^KYQ#`>1 z#UGxsLw`?-oers!?}9)Vi0TH$SkcfIy2Jvfp2$Ck5&Y4Mny{n*Ik0x=k>Bbk{OFkb zm--2jbQ{7@d{^Rt2 zM`Z*00qnocXnua+pE8;sxzL|1n0^cin(T6v3LXNX2)a}agbfR|uU|%ZsfX8=sX4Ct zpGmS1(HglIH!y~>5I!UgQSLlh zZ*T&rMO8?P;!H~oynrjLs;1w`Iak=Srff;w%~>;bacxnReZgCHg+3J)yn5qB3YWD= z{<9TP*%j@Ajj0Yb8=M?VYD}$@heeM(YCF-Q`oOx&li`T73g5*~FBPBIYDjGg@lV)P z0<9dqYK%I@armoV6!-W@Ls?&7ywch8QM-5P1Kq316K|eBtxLYa#iRZFyqL`pVuPE! zt8Fw$wTty^rToNQQ(jq5tG?f5!g$lZr!u(x5HH^zGl_LCcJF0`>^AgAeK!uFxgbaM-9#jLMsj=ru ztspRu!hv?k^FY$7(xaJ?JR3+Qv9lM{3vXFv@w&Z#jCqVJn+}%{hq=FCCXB%;Gs69e zXCxXEk5(Rz90h$On12Ut{lO^vmuPDn`E10YeD$uh0F0mN*AZ~8+tTbEn#iEDB?w)D zm>vWKx9FCp9lvMym$*7ZeJAe|d9U0?yqG>kwlWC7B-LT);>^PNk?)Gyq=98|6TJ~Q^$-LNVOFyd zy>|Bn1XbEQM0^NQ;WCFa1{>oePV2pN9BP~~&SU4#yRl^P?7`xvA>zpQH^!Xmvo25EJDXbrSdF2QOG1DfD z!9N#M?b$0}n$lf-Y2*;F-}N!_|BJ5EKiK2iXMDHEMZ3 zW#=t?!=XYx{PC(~JiBX^nZZ)LX*HA!wP5z*#Jq6*zAu)6wA?S7a`>n=Ig>g-PN|9Y zN-@|vWNG`cx~=94dqBxKA<`DD5X-&J!EFNB!egIj5O{qP7BKZwjstM}E`qFM-@!R% zJtmG`uVO2$6+7fRRGV}5jkV3bquUgmr-`DUY-Ba5X?d<(!(=;9Y8~qWsDL9VJl1VV z;i~Ufe7b`_vSrXVBfq)X6Qjg_EX_dEF2gL-a_p3e>hpJ+3hYw}{Rzh7*DSi4^3@6& z4zNc_u^{?0LD)iH&zwRm>WA%*+5(p&bGPWFrb2D^-% zY86iwd+i{@5^`Mv#R?!)%!8p5XBSmJ3$~hn&zN{NXaOu?9b&F}KY++O3Rbcn;2d10 zVCTT32#XMNj3$+kihof64OSb&r}{z+%Su9 zf}9!_>3l7$k|t}C_d#q2Fp^HUEB<^q8g8J?LUHm57+$O*SRP zq|Gn1LV%h18)PF1<*>G;cwOzyjYn5{$EnU=Q4EcFq-{pK&affi(CRjTd#>ontefJn z7C<|n(W9c1RxsJ0OAp(^_svOtmDTU%Ty9a-?hQ78wc!gxp+JY6uM{4!JykbiGBiPL ztZR|Bjc^X#Xn$EurKtA?zENrM;`!1;462d^t1adcf+FObpZ69Bn!QO6-O?1I8LXSF zItEF6iop9GJfRV(eCUv5MzEnh5LBC$ap?eyuC5rf?^O-QS72h?MzkYFbORpt>}4=` z82vHxy(IOb@yNEc&-VL_ZUnPMi7EA)?D&G2Rr+GgSUk?rEy@7L34t1wlDv)~^Xc2p zpFl%YP}lBSyXRg|#*S&^OiCrcMoVMCJ!Z0+4GH>a7B|sEik(P~^Gq># zY_&Vi{TfglIVHTWxC>Q%D~`W=#Nz_SRz%SizIbG^7nc4>JzsVuugueI%v1WV&@5$Z!rJq5zzJ;+Q`@Yo^$1d>^Vv;?YHSl%-462F2E<-5u~r$TE@pNT=$9HF01|y zk!#hqPzbAE2nPfgezsm?1!7?v@@*etzk5sk?AVoA?^%CCx>WG@6ED_S9#A7Ac_jB$ zcMWBV($3zCu53^D{HCWzqx7#wh@IF6+c%Zsu#m(2{?p;KRX|~V{Z5sth=c;IWtm2 zDvsSvI9M#wM3}OzOt-q4q@AWI8H2enk{{e&gEjpa59ZJ&z7SRt(oGa4{a7IyT38&eN;P*Xrny0z2)!1 zA}Amo1q7)|mljd!0wPsfM5IOtNUsqTkS-vgAVsRwNS7LV5drDFgx*Pz5+I4+VrKS? z+u1Yop6hzg`QGn4`wyTEF#_`?;U{;Z~4$sY9-2==BQ1tHFHJ@$`j8PPsjC z{oe9O(Nwy(=8i*a_gyj%jSZHK#wHG_t%B!x0)?)sq+{fx1WK;!-bKDDrF8@mRf$*r zX4eqOTY7inxp>Johk+y4y6(DKNU6msYib_xlvg5?He3dB)oE^vuPU}}=1cm%G2J)q zh+m_BMA8@I0lE$-z`YLmsW+Yi5TyKT8R>uZ_5b3=Qx`K}8OEq$h}XS=T39Y174^%G z!yNQTFTkj<{?H6LVMJBJcR#-$WM8uYL}cK6z9N9q^$$=rI8MIq?M75|YD?ENP;iNP zfr1?!0$`P@6~Y5ShR(sgVLt~S`3e*a)WyA9J?M~8IzxUc$4@1Xlc|*fD6`{Vft4MD zf1;IDo9c&>olpaxn$tJSG9yT7sZdz0Csel)=J(fJ}iB)NYX7f-5x^19 zSOahwRw;%WBMEZg1VY?}iB9nfM%418w5QGjq?f)G+Vs*C>;O}Wr6Pf_w7#&tGsouZTab;O@2uhdWnD+0= zed0gS1$2KGU!D*F{tejX^ZzG-mbqUdxca&~Ksh^hedg$}6o~3S=69{v5TDHL%83Kw zt(v~Q)J0Iy3ltpp267yz0nE?*P~=xl4dBZ=+VCwpNkU{$C6K3*Eg{98Jwa~6_cu2niSDgO0O9nYR*;h*87K zpH3J}F-|D0W0Gp|Hv0@!bM-2BYjEy8Unb&{{kH^ zZtGLP&b2vL#s z5s3Fizuy+6BkY`Xy8&FU1c1~Ho(JRxftoA-`?a5IhO)^00AN(%EW#gh-bW#Q$~VlQ zf0ucpOXhVbLAS4ABcj}2CxEDt#2|LcZ)hA4wlI~^e9>@(h}fIZA~E!+)Tu73t|*V{ zj5btj>CioWTJljI)y8uWD0*{-u9gyDe8`{@LUEV(XEtUwr-YU@j;-UC4%wbQP1<)b z9i4jr#2QGchf+5N_GP+_;8>LdJhH*9{>;Qa%hR2^&6|+*o4v^dM7aHNyR0>jSWZ`c z{GN8|vJha=8v60WD7Xx65lD&cmn&f@<$mmhp-&#`ZHZJ7JOQrV%vu+dFpdhSRvSkaqszC18ek^F@lAk zbgoxLGFZTP4Jbctkr01>LZe-|5gu!cq!!4;xVC6xwHg`fDQpV`W#1Jkw$`4<=dyp5 zR~L@{EW{pvJn7sGjL+rPqMWu#FlsB#TubzeLe;4^TPvZrgXa4K@pXgR8M2WM?4r>$ zlN)Zu=Fi_g9v?0S>%S5zNJT7`rPA5}0O2J=wR)sx`M#n_p#NzD@T3ZFlr zM?w)y&9{eVw9DhREXg;5jCEgkol@bn4{wN#qc|UJCW-E9FuQ?KZrKhv((RhhpP|Om zY|Ho83!(dMX-18b7%D<9NXJx`#&p!6tW5LT!xxSXno`FMw6S{mHWF@r0{z)&hZmxq z=8x*>D@`?3dbar(x5s9@+M|P1GG1?*AWdd!dR@^oT3TTF;r@fw$EJt&`-O<28c%zd zy@~F(kn)694Oku%!()e&0}nav+Hx5;mr6LD3(_fL4_hVX;J zRInH)R1G^h)}R@{ZJ%P?O08YsjHJHg0hK?n1S1PI_D)-@ImH7NkRi>@)k`YO=wewJGxnjeai}h#M&3Lha=^n?8 zDFVSwY{COBtGn)r$LdTGg+uR)VlGV!OI)QuFqM>i-a5lEtlg&wmI2zrhi7`@e}JZt z4-R09u%=@lg4@b7jpN5g>-22I07|dZa5NGkj$nY>HlB`JR)C5p553?sx#QR`(K^29 z|ER_MEOQA_7Es-pP^e{gol_O^V}T|Z@dWO5nNph!*~0`wjXGr=MJ~--Q{SL;480vG zy<86SAlug~!@>)35`&wy%1*xEKyZb1UCi2`XJYwure4nbxJOr-gC2b_G=JXFc8^UA z{|0EO6hc?FY%&vQqe|dS&^co;jpxkRF`<3ooWjE9cjb3A8>!y>QKDPPwW}Aa5<~|O z2$6}xDu=xh#gW^_2VzF+2M@>b!hWW;NA@33spAh0468AOXgGS=Y(VxQidPW9d@FLP ze+fD&M0`le5+eL2^U%KPVbG+j_;S58zSK1d2KX*|2QlzjW$1kGsj)kr&Q{~e<$LcP zzee`;F15|d&j`L~-T5phaz=azXNZrvFc(yVVb_6Q^bID^u4}MO*+VqHfAB9mOu2tm zhnImy4FYZ5@u^~t^!Qqg4-X%=ZsqqiXrqvAzfreCXaf8Um9C)_rG?6nEw$<=Nbe_vcE@)^KFmw|+-^cxCsLin9P9+_y`{XG|YM|SiUc>dVG zq?&zoQ|{=Uv)m?!cPgMO@jksLpE9U5c!AX+s8I(Z*O%aU?!>yeTJo9p+%+VZZv`{H zCpZHL2NwPg$ox!F7Jp**r;4Qee}jr-=rlKgWq)r4Cc(24Via`OmP6nRJ{SYM9}vQ3 zzSfg2U_dkUet)tA)YM{jqX@CIly?ZS4)FCPIH#$5BzPei2L@s#fN61bNBo)eze$s3 z+u>}f0K}sfvbliVa>WDRo4w==kZZkz+kR0y{@#0%`yg|Gh>DJ&w*vn+9FSnZba^G< zktal;jqk#T40i}9_-ci%&d=OGm!tmz@}Bq;A?_b7H?=xz|M%zwIe`JbRw|IBjC7|G z;uOswW*-2;mg?R%-e(L*W_9%z_on=@%PUBoFFDc>=k2P74~LlSR_K!DMjZtx@Zo2$P|eYj?Jm`0Er{O&*=l^9(&rT9>8v6fa>hgDiC>QVus7$QCdTUdtEey zWeAS{2S`06^^Wg=BISXGFA;j(dDM>)fK#Q=Irsp3@UEJHy2(g0_>hMU0HZ!>)aD?C3lVb1`#z<;cCIyxtB-w&S$psEpDI3VBtCFhr{XcP6@Fzqi(sXtMi z*9G9~M=?ies6Gd(a6PVn_qf0f0yr_I zYMz3d3a`X1fcnnH@|WeFkLL zMhAq$U_f60(CE>H{BBPlK3Et}ihyswg=42c>WYd#Z?pgIt$%*_0Go7XgVM*G5qJ{(3H-8a%lL=dalASsQ!41dpvh{_J=HW zc#fHIFi1M9wK!5yf4t_6#PGNX6{)&Gv9_CRsMdxc530)}s%e^~8lAk{oO*$IO1ZgI zB<@p0x;C8R%2gX&c3G8e^!?3AU6kgnLJYHZY%6iQ*^Qths2rOwL=`Q|6j6}HBqy`^ zEjvr>*|pPhJ6ZzVjii1(h0&36$R+{{I^jj_4awl$ZV8M_*9%S)fI8(aG9~tcR(3#* zN!2u1-%Y?{>BBc4_Sq;3oNRDIJkvSqGwpW6kTC;#Nd_8O!Q?f<<6_^5B<>Kd7*%nv ztH}tc@4lK@NEQ^Dnc8DuUpew+vrwYi;b1GFs|QxgJqvjWXOtzgNBsZ=O9#KStV=Fi z5#Odz%r;s*I4)dzJ#MDFd@e-qt_H99+3_!#Ql#H^Sv_Gd{OGaN4b_ug^~sh+Q+C%g z6rmEOp1EuA#}S_x1p~V}I39pVlrEkJt$+Yo3IZ)ZcxwtEJ71i^DY6RU;gFFeQy6Uh z2v@JJ843jI|61$kj@U}UztajzqmXnC2PU(3cY03wsrRO_eu?O)wh45eNdsdZKa7=rlISmh=1h3z3X)BkVvkM(&z0S)P>uGm@Mb=-)}CZHbcO8?v!9kc&!!zc$)g>obSVP zqwsyW+}#fFU^`)jpnJ4$Q6jGdzaZ@K3pUB#l)7`@M-YfdfpXxgz|c0`tUf_bOYe|# z^V7_hiyS*4;mW`0D9q>7`BS{&zf-(IA0rG*JK_Uam!p6?iy_Z3kOc~nKa)BhA)nX7 zlXxV5fP4}%;k$2N+p%Njoq^7=i9@FKTBl#g!qJ1^`L<<3RppNOh{rrZbq0VAj<#U{ z=pt%xS_ZpIfE?*+!2rzC8L=vimlS>b*O|tD_AvilE$RR59%kZ@6Xi3mqXRQ>YEH9$Q zPp78e{0=)f0`vso?-J%x59wWDM|(iBdrN$G$fxU<9iCX^JT76W7bXPAk3!}X7Ek>K z76N_8Kf#zqI%OwDKZt!Vfqgp)PiklP(?3Cce{6UD!;HTZF)3q$JOI%;Arl9O{()mY zC;vk_$=?q5NA0$0Xa9+`fp9~d#RTKtfN9|)>ToU)?N@{2E&w|{kr*}wFlm5)6A3@McPf;($ob>Rt@-V*H@z75aE=nJ zRs{zIy#DkH05)F*fOPVxf72UdwCVB3pmiueh+@Dl19Qlrn z37Ln&q^}c9o&`kesh^7Zu&B_ZB$Y<_Z^^6w89^jV@im%CIOPY(`d$4Uc>AbKqmUh+PAD#;&{G}jo*T~QfA z6PvnEA>-70&*>o&w0ljK0drO?td3vd+tyaCpuOt?Rx<1`r^{qrlUd8hXv!LJq@|14okU0E>|^M(K++H zWk~)2Djn4# z$gUA6SSy!}ec6~j-r&zsp=0Z?(@GmjM}oLKE=BQ`Uy;q>$q{_N5^^YBf7kg7rJC^a z50Jmn43@ITYG7X@ba=i87CJ)<%Ock{elWDTO@2z@vh2Fm#CsvPc^M@y@*1F3zb$q5 zK`ju|z+HfR@(u!uxKNLU&GypzIF@RNHW_gjjs#D+b{p$g446mG8Fxzhrd;4PZLP=k z_V^i=zTUg$J-m(ggQSyPliIGB8Og^v2;)SV;C*TsBpyEi7%QsME%*~}=sRu;jKQ2P zO*f%pe8jLaVA|}uds94$nFI7Jhx0|WsX>qn)R$*J5aZp*Js7loYha7(SZ`s3$Z&Ex z;JnILPED!1O_7c_#n;57a=FF{75phK3xlQ=xLD;->ah?|12%5{5qLd28CaVxzuubl zY%IzG6@-3UKT>-w)1y*5Qo%N3bS?gd$zg(XNv2cLp3EJIsTLPKF8uhMtOh!%k?jK3 z8`XP83neGn#>Q=YZDTj-to?aJ(lu(QXAI2tbF|mpUK4$y)9Vu9WN@?hf}45!9?)+B zZXdC}BQQ<)@@eMEX>2Oy)YQCvr+D&Sa@j{mC4H4my#$Wej-DiuL8;JVVJ+)3k>K!D zI!5RBU5HjrKYJqabvEk0Eu0KWjzJAM$Tfs`TJWJFh46H{D*8OX${5$;E1uZtGFX9q zxjJ(g|Aa@;#ulfIRb?`9JKyzY{%f-VXGz$oY~FLaRpOO3%k^xX#WrUgDrBD$z8>(9 z;2vXBR2JYZYrvD6L10W@Cxo%LQsY<^fGf6VjOuOPJ~g#AeFI}39P9$2#9A5KmYuU6 z*nIp+byNFQ^=IpFVQLQE!W4Q?L&Q>%j}RJP`NB`kqg1)HUo4g4p=y@VgRdah^Gjt7p(~sXrwK%~>$yZXpvQ#K7hS*c0 ztA^ygwNz)j(UQEB)|?VXId}<)j;s(fWp8CNF}kvP;HGZP7xJ2sRinQ~<&ZZN6Btgh zEMVv>bEKoHCQGpQJBzEF_#nFz=2*WDsasttlU177Hwx+@2@(!5lREQ)*kzwWtLkbm z*HLU|F8J3ITbZE|^bwYPvBw{EY4yl23v~<(d|49I922^%7oqMjIva4SN2=TNbSj!m zbGZIOdv+KrbrZuh$MA=dg?FgyMml)j|E%9b7)oOnk-rE}qpUif7iP#Wcj_UW0U z%|mc=m59CB%*Y-A`k_j4Bh21$$9fLY@)7kWKBk}5>da=UocryHInk6uGw-Fce_BbK zu8T8lVi3wTCc4}~S^f{$gqD&12>v^!5Y3=%%a*D`q(=@-ntmJxcca|e0TSp5Pnfe= zzUK2_0RA2R3`YUMS^+U=dfYtx_!!{3?6B(B;o~mX>-M&?zmn*`{6)h8ZVlzb1dv1< z<%7J#fvPo)AESq8Gnfh|j(X*DEgf1t773--S{L%&#>dXi?^`W%}xaf_&yY*HL0$=Js&!5ndk1oW*Y{4fg@kfy9_0 zpD4~^e4P2Gh#@~7EWtgxvUbG1!kxC}5k*;yQK=+|N()5vO)u)#Gxw&?$QifWXP}qd z|1>>jqSU8l?{q2VrgjkHLzPAnM+L+?7>*MKg@JJDn95)=UvLwX>t2S9(Y+(NH~Mzy zf*Pi|+x~EOfn`!4y49im#Od@A3$t9tdm)E*1;0Efg_RKM7#1xmVPioO4+=3nZLKPe zr!{2AfTV9N5V;Wrvlr6>NY2J{dQHt=@0+flH@U+=VtFNIDq4la|M~T^#Gs*>=SSLT zM3gKvtvAzFo~0&qK(pGOrmN8O)P>L_TasMlTU9a!XfXC-f=8bY-9*< zT}a`v|8c=ah0ajPGS4GkF-ZhW)Ak9KZz_!F4wVNFm_t7nJhB8ahHg>vznWuNwoX(y znF-2}?7RxBvr#5!eopR^D3^LOvNS$`R#hg@@>i(2;j%ukG)9H}puJm@-DG9;evI za;uqrqNcU35c9ekRhH7i|$ zc}AKZ$dRugv*0KnmyGP)8Uz|&zblUAz*4FSY?U{?!DCiXI&*d)c>H>4;c)tLqz=~M z`CI|}SjysO@TGd5=n=x5`|uq(?|b3&5*F`?Qci35bVu{xhG$J zH~gxxxGB^O8RA8o6QUkl6c)%A}K}_&c}0OAY)W4|d=O z`Ty+)J;8Z>v&6W!$f%$5<++97H^e^M+A`&7)hZdfqmq|EzicsQX?giAf?U@@W2|5b zb_P+PcXcoE$*iB zJ4N5=XOLr9PD8Ne^6forpBB=chSO>8XCC=D+;a0u-?taTHG&i3Fck*ju(lgZXCjJ5KlY2!B z^NS4?SedzW822YzL5j1^7wkuOt}6;XyTP`^+@o~9QrzK2b}HX!`}p8T{Gput;Nq{2 z)nyE6Icgm;7dxjFks|q^AX@|c+JloIyUvb^3Umo$Kku;(WT<^&lvKm&zE>aavQjqm zS$=1_t9mLfJj5zS4sqcsqdwi&D)D|FvVq`WoHB-3k{5c)RL`P4C!|rA7 zHyg3=n|Y4OiuCcwrG$0746}fuouk7A=+d#|5nB+lRPM{iza(>HAj*?mE-xXqYHOE{dL!#a#Q5^YgY_e!k zuUcT|`YCI7#mhR6PbqO7xxE^A`5;D>RBg|COVb`9aa?}HcI}@RKN$6H%l!gio5SY( zysVE;P9h&tMxRKyGAK)yeg~RuS2|@^(uI$hBaRTgA1Pz|a6XB=-H}AZCz4obF2_Nc z5rqsIo}rV!h_z5XHj9QirD22bCmahK4;bhUjHSmf0SyuC5_0<(&org6ONIlBkm}11 zvbVPiWvguwb2b>mK-jeUw)c7t3U9dT0JdTd`)I_2?Zjy4RlnU^(MFy&c2r)zSBg)# zS{&YfVk-(Vx9|tAuDl`G6G`nCjm+9F)*Uo!h>fotnFU`IH8n~yr6QsXlQp1K+G%+1 zQ{2(%pk`ud`J>uNrey-D^{y^P>exh_Y) z8$Mc`2wc!#Yy%jTD1=-o#@z=bF9z9hQD)j`6s(s02k1;&B{XNXcxIiAX$T>PS66y8 zQoZ2MnaDGA5h3z%tugzwfx~@P#0r?$zBkZED{Vr=!`dvNmFe7C_nZc^1{8YeQxPoa z&fhDl$tAiVzu0`4+0jp1JA1L~3u2WZ2;R{*ZXHou%NXfCgeMB99$(FBZBKH-xX%TS zPO~(+A{50){X4GmJpa%L3P+F-59)3Ilg~Hx={mk`(~k{no4yvq3RWC8P((+Kb8C3+ zt7bEJewnsih7w(;k-)v(c|f7|S;|WpvVM0g@mUHGi#Jy!?5zM+68+T{FqQmmKR^cu zfCFEU&i6d#ZT4E_z~*4+d!CTq9rw$D+Fl(9&-Eyb3tb=%aC%K`7dB`8qLvlIsfvz| zCom6`N6}#O`gsQohg?Rvkre}dbj!(^mI6gI0oTYvtnL|9KOAp1hf1F-g`S`oZXcuSk zO@W@_z;_`FKuK8gmq@i*c%1JJfDOV;{Du6w1ScjQw(K~aQx$A+%F}#ygP8uD5S34b zkF&oScdo6ndLIskBKg#ZyZKQIVdK>L!FEP6xK!dR*K+~;5@+TRoyQB82G5G9w|EP4 zACw_=O|p2lRkyuyalI;^@$s|Ol`#PB;4!X}`5-de6ih-B0G{tj15Wr!v6~G+)W`5~ zGg%LYNez7U`CJ9qy2hm+j*{v_mTtN{EW^W~D@QuP15e#2ZmqNCKh=5@MAgvtHb(gn z9#ZEPq9oM4?tg+7@t&TG$*HjzdTP45?8JR{Hu?A_@cE|ZW1mNzWTRQ6j`q0LhEw-m(ShA#9=b3z z8>I#ku6XF0U>~4lp`LU3A>5d7XCschZN6D!9!@bP*E#4TojpO@(dSRGDD))q8p#u>@$SYq*GUj0AI|Z& zUSJxsxH>P9^nJ38y;QEF^Tf>tc!Dv11?Xf_#{#^6wkOfm%Rwgw#YDN;^vX!v3>r}e zp|^FK@laByblbkyzlY#k6O5j2sqn6Mk5q~rRyw2L^eLt=5(<>EtS8nBm1k!Hmupgt z6QFK}Iq$+`UxzT7KW>lzYEGqPvXnnM5LuhQ^&M)~dn=x=7QrAfl3$6t_>3N2vM_w( z?L4*%qxU9xrXEA`AhkPu=2rdww@{?@X=R_yo zRvhMj!~bb&gzT)&%cX%(B<}PNkX9?@V}6~0#U%Bi)jSAd)&-32W`OJ(5_sXWCul@o zG~vrLWj6=1Hdxr{d-3DbTuPeo(d(P-ayME5Q0mm~TQOdov-#752aRMQMRaUCYsR@M zI~-uKl2VxzuhI)-PDElnt@ymR=)Y zzA1Gi?m`B(re)kUJ}G@1*Y|be9DWd;X*fnp$LV%p#q56JMwZ6J zl<@>?-F{{XDxiM_yo14Scj0!|7X+6#iUs$3MS*z8b>h9J{FO+d`Wg<#)#;q5{U=pH zVv5*yj7r|~47aLtY;vlVo$^a{6`!di%vc6%HBd6@P*%C}e4BD++dWn~t_Z3u8^k+~ zui+mRP@y%Xj)8`#2+1=Kg-p*xc;#u@IS{IASW(R`^91|Zjq&?h zDWcTjcLS$Q6ht-k33}wtynREC9WN;^*|9pHo+x`@=k+5e$1t7Tb?eGLl!d#6*o6k0l zvaps0n#FZf-+14;%97&*$WoYnQTP|&YSVS+5IvoXg1jA>am#Zi>8?Om#+!gY%eao&UjU*NgZR)-6uI#3gmLXS}(n% zeZ82uMQd323_Wqt^$RUFx$VbSKsh^0RS~DYw=zJ=tOLX$7qJE=1FlJ%V7-ux#H}86 zeifn$zSjlrT5($Quk$)NRj8)YxZs+4O7E|{iBSVGH9G#`gqoWbbr0uKfBzJu`F%a$ z>r#S_nFpH|Q`8x(+B_;; zB85h2&|KJRm9F!xfV;Q7^=k&h`fsf>&`-CtZYk&aFb)hf$_owSxDw$(#!Rl+d9E;u z)$FcbTCtD$&kDu5xq`c_Xy2W6?0$Ww3$k}0f#i0kvPMGvuK5*mUg_P}U~>LYfo;S* zAW2 z0W+?5>%{XsmjXdge6D^iKAyXNY{|zGTU6s5#nYnQIx_NvSWadrDirw_9D;qN`W#mM zZuQ9CX;U5jVW7lN^ti1uIkxxIhtXWzx!lf+ zX>IYV+J(8^_5cnFj)q_~S-Q;ce@1=0R)R0vJIDlkUY*HXk zkjzi+%1-9Y*T^{X1=IKxKmlhsLL>i`l`&=5SbM-uvKD`eyDV07#Pyu2fc;zXtR#UA zpRfm@ue_J|77bo2wH$}7iK*SN+caB+C$iWLh8;W^O8NofIb>7*K##t$b7|@3+n$w6ujBl;&?^z@rGQkn&0T;I1#i5{>X?hIs`>y_%Veo_{gd9qbzK$ON$6AYK9TS>1bGF7;1ggV*PwtIg)o= z>C9PBF}YLBY46a~xg1<*#ShT_rGEJCJj|rBeN$rlA(jq9->g-hctlulu6{|sU(xrD zJ5i}3T94)y_uCi{ag2tgzNXkB?^dkjhf6&LoN`G9$8A{7xuC+iDvIiy=HByI8MWhU zHB3e2?pbA|9+#b9p8Ns2u`y|&94@DnFY_h?g>**V$A)?zpwFMY)4i0yoXH4wd16^j z5sKM<$#xaJQf_PrN10DfHfLGQjkNf&4?nIP53L!Z>@HF29la9sRRknE5^ZO8Y1oGc zEj)+DoDPHA<3G%HjqTFEQ!k3kKC^f&OJ(-)&BxOP3O64$D!_O+)3Y+JW&qu0F9>Gw zT7`&+Gu5>rTjLO4BtL%Br3PZUT7RX#JU^++7pzl?{9FR(TjPhmjGl#WeSV;pYH_a^ zP`8&37+RCIOBRw+ZR+MGDZ7NquCeX!LQ9{t}{!%*8n<-%v|q}_wc&+*sY zK2}N4ij<6>dN4hzvX<|7xADmgjmxPk?mlZq=QQ|6%wVKrSmj0|WYD&(OxCnQf%tT= z_-hrT*12P*uPgb_x}AWg%0xwZ&5fPRMeWZ(67C8a@vSX`cJVGoc;XjswL}GU2G?7lWK|W6g@Wwo9Gh1bKkS6({}AqwZ7(nl1&2> zGOXxw>Vtu@b*0)HtBXvk-zfaqmh`w5ECk5ppsjoC!JFBHj(X~W59r$T1FhiZgM)F) z`u9dFmxSystFMxpZu8!K6Gv_ud5h#d+xC9Iz?RR$V`*&l$eoh9l(}PNb6Z=|q_EVt zr}8)~CofUY@<)f$j92E8QrYCVB|-QF{T%jpufDI!y`9llpXz?N2G+u^a8^~7VR!;+ zm1nyK2ew>g3|)0Buh)f=>Rb=mbg;U$#_0EuoR&)I)??`@$vOH!-!u6_C_fEzunJq= znXd?t+d8IsHt~x1Tts*3P4w0~YZUWo2n&|;AqF&5%aggfPt%yz`w?YPeoZ_q4?rxf zVd7yIgj(evb@^>pe0P@VRi8+}EF*hWf@;5+9wK%YDwlqM3boRN2$wy)+S~TcXi{}6 z!&(^POU&+A^$?5MbmU;V!l^P(Dc><=^&orUBb@I6Zc9D$1S6m9{?X16D{s&AUAM9% z24jKjPI_!>p}*5eqY+|~7jtGR9&}V6JC79)>Z21g^%`6&o>U3iR*%1Izwr7@D(8V> z>CWlnSr+{r?a=9C0%aDKi||;ZN^HM>Ml1>EP_L|Q_ya@@BwOP1h+|4+pilQ$I-yy5 z*N^wx(>=q2?K13EtVj9arrG$Myh?N1tVoJ9Qy2=U-~`nI>Ad+zfPFP%egEND-@loW z^Ix5X)7&RZi9%9L+es#ZgLmurwjbCZ09wG>&D;Y|-hcU$R@HT*%X*vLXfplzb)4`l zgwlge<}L0fYLow#dOWrCs++d)Swm~m0NzO@EePS(z2;!`3$S3!|pqvDkI`(*(~UtGro%fCXoo(X60pE`3il*fB2J3rHK zz1qGlIrpJ4@V!l!mddI_EJO9=^rHPqylJ#oyr|xxl7%Qml?MvNk|jWQCETtHTyHze zwW$cAh|wa>&ELIGr1!L}MovOKr>rbsXe&!}QtSpFVLMsHqc!k!bNBe%6PiXSl(zMvnlxYD^NZBC_`XIL6qiT` zD_ycQf32`#J9vL@l0NC;<8Qm8VtRe^1Dh88`qU+b0Zr*dR8#eaQOs`k^A0y6`BDRM z7f>_AZSd|PL{T$X(?8p-zYHUyyIjktsoQ7df+LZoQ36Vu4b$BEm$2toshH6 zaCmI?0cy=+z`%G@{z>SE)YsHp-;G^>^m7s9C@bAFcWOpB#E zNHp>@on0s>Un0TM>7y~E%a){axC7Jp40A1>+qY)OnDPFE0f+0jD6nP}K_WI5p9AOO z#pADC%x{~ev*aW>?-g25Es>Ha)vw<+=2A>H7WgXACyK{mM%YSXbE0k1f<^BO?+&#n zdovr=H`xmo+zG)ha+0@7V(y4ethz-{DD~VT4NU`8fEd>s3PX9bNex|UWPEQg9r3GN zsjJde-Fm=HtCpMWpTzj6CJD3)6x%bXU$~ru&`x@UvQldRMv&%E)UMN(X{zHnh%SrR z>5|^;d!LN{3f@ejherp&We7T3XWPW#ch&{Ar54?#$Vyd|&v~TiGbvNd9AFFE{vuT%V_PrDw)n1iP3a^h5a z!dp+4>0tColRV>ak$41qQ?*cBzRBqekkQp|&9eTHOH)@qTEr0Dl#Mp!zNo#xX2lRH zONK(QC_AKZ0tcQWsd)TNDA$s%*6HZ@~mW!Mzu|4qe5t*3Se2~A`_C?Pz z)Bm}YR8eFoD4?xv;$CS$PtP>Jy1K_Oul?+;=(f=7d3h(7ia1M4@uI_N`ruhG1=d2h zey|KiwJNQd;iGOkZ8+LWF+x)O_=)R%lX$KjEgrFLYT!XlxloO)`nF3ctW-6~qUtG; zYRN+VtRaT!cIdhHr7Z99^Xn&%s-f8xG<%Sbsk^0X5!PLGxTrvL{b4!tr6RV;n6o!Z zbNQa-d9*968kcD=u_JYm0wweAcl5rwNQ#3rW9FQA;+#e_u z_dXZKd~67NTEuCSUGX_wmE~hIMM37H04a`P@ziD{xoti3XY^i9keIjWso7YGILeo* z&}&kiHUXPYXI)tXUBt8}DS%(#tcp%apnsQc>t-a8L}S64lIrmK_RAR6GtY@)RApVo zGl1_4WPgqmr4D6p$wf_Z%PP%7q30~l*O*s2P)xX|z9C)z_Bd<6hc(S+e27q-v*KkR zS@;p&zKAc+bn12PfqPzg-iwVj267KW!d0~2i+N+-4cwg%tJQm%&(6lo=#)h+i94R5 zplbxpMyJ#!j;24qfm5HwleKw0vn6o!iA}jR-6Y9{<{BwG(S9a5O+Nel7MJzpaKZJg zTGfjx#ciQ<+NV$XH-OwO9`O<}-npg^%Du#~D;|ZKA;rQQk6gz6UVN~v=6<ievPDlY-s&U@Y z@(^)*i$*`Tq4I|k3H9~;X^C#*Ad{NQ7SBN}Xi!l_s05L;BVS}ynr#Yi|MGx%vh;xd zfOSKB&k<=Nxn)8@;p87$^_a-SU0<7S-;CD(fP5_hEL6xxMIsMf<#nhsj`8Cky@b1>i` zW9;9t9QvXaOkFEDA73HQg&vNcBZk&=NN2q?kk{XE7^~BqoV8|k-;pEgBzI3+G6pI!z77 zl^lj;X+Eh(G&*WAwqFH&&3|@VCy!$)!oyn)qn{x0uFy8#t1U@Fc0%UZC554p#6g*a zbl1V_0} z0LD208aRMD^#LIIa|rB|3h2mX(} z>an^Tm!Nw>KH43k5F diff --git a/docs/images/manual-12.jpg b/docs/images/manual-12.jpg deleted file mode 100644 index 0227f205acde4859e1bb068f7b9d5cf628a664a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24439 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ᝊN@|&s{>7h94c&V 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 diff --git a/docs/images/manual-14.gif b/docs/images/manual-14.gif deleted file mode 100644 index 4f04efb016ecab857f187d0c42a87d0cd0bda1c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5734 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 BXq5l} diff --git a/docs/images/manual-16.jpg b/docs/images/manual-16.jpg deleted file mode 100644 index 0227f205acde4859e1bb068f7b9d5cf628a664a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24439 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ᝊN@|&s{>7h94c&V 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 diff --git a/docs/images/manual-advanced.jpg b/docs/images/manual-advanced.jpg deleted file mode 100644 index cc2496f018008796ffe52698b6f069e96c97623a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15981 zcmeIZ2~-o^wk}$9()WEElukiFQA7}k$Pb8!G%Brt3J4)W1nIjdi1Z*JARwUhh!E+e zOXv{+=|Kq)Lf?~sKp-J``QJYKod51O_IvN#v+sT5jd3bjqbgOEwbop<=9+VU^DD|v z${fITOW#l*prN4w9#TI51r6u|bhNa8eyJNh^~=D-z(7yWz{1FQiiwSdjg6Ism6e@? zhl`zqn}d~=OMr`;mye&HpN&&cNPtg>hmW7{&q`?MsQ;m7U}j)o=3{4N=lf4@lvaS7 z2_Vt*)6tv(Xt`#3P_F~@+zdRYFY27)HG9N(#*)$2&2f4VZa?#S$)6p~jDHjc`AGOeN(=(jDc#22I zjPa2t?-`YsOnf(zK329dOI z;I<@JI*XX^yA)vUzc2jvko=b?Ls4zULWa~67lUu22{*3}I zkfw14B)+VL$oNpLDUwto)+O>Y>E2Wpq~5Gou~#6+7NlW$)bPiBmv8Hg;(9=6+OV0h z_8@fm!ME@};}OI7vew1jJB$ks^r1iCwUM2P!lA=9`uX$OW=;eHyu^<67o1NZ154!KiMBn%_-4XFkbpv_+r0zEy zSi=Z(*JAsA?!zLhtWH;2k0C$TXX(|v$!_*g47=cYOF2`skIedOYo)(@d^t>HVLaghQYXA%fV!jv3gz2f_zS(7Yc6 zb@XKa_+_*R=(hSE8t_iyw8Ogt)f8&Gha)6~5{QUJ>|BVg<)qxOBmPuzAylw#O8VHY zOf0}laWwu=Q|v~DG+THWJI`ULqAGN|g}kBVJAA-IMEjyJ&`_xHzQOoq%l>)_P|uNp zuqQCyA;9L!UFMY#^8-SJ*iC`w=wB@f?<*Vwq#^H5ztN~->hSuezip`j{^HUF<0U;g z$#riwp5MA*XJVCZF(!G*7$(M1*>ml@tGViZhI=%ln$I)c6u+Bo!P|CGJxlqUCMs3w zL80er3Ceb6zm56KZhrXNs`}^3`d=tu!f_o12&Mq5ihA4>pl7_ExIzJR+?u&V^U$lvbnx6vV^ zOCp%bn+ogCSAUx_%HbW`8Y4TwuR~>V$kcKQ(5@cx*~<8l#Aik1kozAoX73GJ)VK;3 zmW8frl`S_R2(pPC1E6*!ivxqEHWz;7HSD}{de@rkA-In+#AsZjRel0 zd}biu2Y8GLDYXs-&NWSMk+7^oB_!@1d23(5Pm*{iZSiuE5)p*{Qh|;E%D67dV0D3XJ{fO4pjLh0}oq3g^|yg%&U8E*zvocD*Gst zn;}tsU~L0+-&tnQ5>N0#B)#kkktP%xC&dr~KT!UA`7eyCswCXd+O^4|EZS=0AQ16C=!SLPhZ^gCaZI_CV&NSqz zso7#yyeYut#J9D|KM|do5~UxZaE?%gfjI~6HtaPAru9SAPtRF{5*=Fk9u57G(${7Q zOix-_uJMd%1`ugLT>jyPc!8t^D1@XZ5iSw&$xY%aZV465PVRr(MC zfg`jzufl$>X&W;@mGt;7@mtK2gD^-{LS3+@r=4K z4vd2VcEj-F*wZOpg~z`%OFqIcX1u&FmDJXwok+YG%t!%VKOxV>r z=p*{Xm0M07XMKBx+n&blx31Y&>WK|pA!6{sgZMG^`^j6dHtSFk2C70l(&ICw`LC8g z;P`!a@(~3XvWbzRnu9Xf;UGC|jHdXn72kuQ7M3{=K}Y5G|DhQ#&iqYdj=t|5bXV7$ zl$|E%QUIpK_=3yP#YXd}+WE8l26fQ4)w>5?x81beDS-b1pQ2Mmwd|>{Qz%xFMR|e%3na^-0XB zxqclPeP|KBXX_Cz7F!>yta)i327+klH#x%&va-|*9uF1Gw5prlXfPK#eJyH{_8i2C zNS#>l6rGdMD_T!tb{#}RC%{ZdF$b;m=wQDhh+tIOh-x#s@6}iHA>>fOrleE7-h!tv zzj7i4a7%oJVJ(UQ@%eAu8Y#>iVI`zy7pS27yB?=rIX7ES=GD+j|DFSK6o6hqkAbmd zyTSW;%?oYt8ov%u)U48&rZP5HboF?);Su9hac%WiPGW`1ItB1)Po{e+2f2Fn(=6Lb zF_J%6cS6-pp(E$&NNv!Gim;N$nff=Rp`OE~s5kWAzAi1CXDkJvyPuU^EZjw)m#<| z;5x`avcXY+uzhxwlX7KEYlx>`@tR+h#mb3z*n@nUHzIOJwz)+RgV_gteRyL;o7$>+ zP{rUew77Kbx8)1c&69dEf3Rv+M{Gbv`KCs9t#;HNTFSjTnbyKDMM}moq{Me|shdW) zBDOQPw!UqLk?>|!WU`Z8>h}1=AyLD~Hq!aRK&>s0_}BPn8+(r!F%prxmalhtNjLbfv9rrs9C_N%AF4gaXx1$O3IL41$oXAl3u8P(-F zc%4ayyU~JLWT?2c8wQG+tclvU6)+lr6TcmVA%U+;PobcJBGL)J9zVRtaJu8D z#gEN>2OazMJrPVnOt7$FO)M)fo?Ci36i+?XNq}^W2g(HH{v6_kCNp9^91_ zQ;_AR;8(oRceH9e5}U4vz{0;BE5+;?D<8ZiIFtt)q_|!vs7|g0W+(TAp(O7w2LHOqUu)vmCz7=vQUFg1 zkU75o7suF@R-WoEpJ`0HsrV%Mtj+vAeW!?<4By1gO21%U>!n43oloLImDj-x`^tRA z^Fd9p7(s1mn1pipA2!czDn3_l$AIhHF}c$8LhtmMdu~szUOcTMJ;(COUW)DW^Dmoy zbZ_8d<~Bwdu+i^7$XNyZ$i5%jhYt|2L8DOP@@v%#plAmgvJ~MLQq2KPxc@P?E3^KU zD!cah&X%9blww0O{n6J`XA;zHCzLcP2-wWJDtB9J=3Dn;A1qwh@ zKmq1mi8d5qP$7|YDun_>mzB9yWx?GjKujhDKx42g{>6cA3Psmx9*Ou(@KLnwzTzk1W+L;k&T7*=k8MlrLwNM<(}3`_CF3@t7D3vj22`yO zFdf9Pu|@dxyz470pQ0XY0%soPv97{x|goS8#R4C=>(wgC>ld9q;4dFv!;0mf+n z1;3Qa4%Sd<|y819U-Pers>-l<84qr*_A=4RBfX?BAS_+V32_mq|Q2<_> zTON1cVx~|FE)<}Sd_ICNUkI*<;((D2$&9^Iva$Hw0~nsM(^#-Am(86lO$h3o+Q&rI zWLs#3PIYWvvU}LeF!uaWOn!x~L6f}aXVw-d*GV6 zS^RsELw9KK2h>^RYx|-pjmb0D$d};nG2aNpu3W}YMFMAME;rR>W%buk7GKM`gp2*q>#K?4v5NfU`bHRjZ+Ml8)~!5!)tqIEme-|=0n*A0l zV_Q+op-LD# z@<66UC9VR*VHJF_*;Q4`-6!^3+WbXVT=a)OLWp7!Pv}og_wByt(O&)^){^|cu8KLC zki5E_WG{O-r2GJ5XPDlc8H99)cP5A0pqGXSQdrJS#6m7J#$T?DEQLeG_ymF22p`sa z5uAck9Utip7c&*UmR}DFzXY2a<})?A;zU#JaEsgvV&6wapjbS9CvvSp3f)o&;TB^e zGRfyydsH{8{#eR?LjUf&k2)Q&AcT1Q&pVgtt^l{8LWa8v$F=WUR{Z`9Nh~RVGzBP| z4V35nr z!JteGi;_7706-_5d>vp*zRpME6|)G(LR@qAb`Wr^dI<%<$AJIgH?UDsVL%p0i>3hD z$A@IzOsd~5l>d(>K5#VtE2|n93f6rzZ+oS2bSXf}knK)YC$3jCj;A7l?pzxqJzba< z^wtZOzeH4KAX11e90~s|@PS?9?{M6o`@eV|{{YGHnO*0vRX#d31D}*5>(_1Ynp1!` z?wAuV_zC^Q(tpk+`bYQaZH?(Ei7W~riFP<%%>8DmiZ>$bLE%I;2>95uz9QZD&!&n` zyi88$|KZvPc8iCf46o898+#(T38QnIpbaX@^Ew#vVdJ>GF+FY2c4z8n{8q^y z-Y|>NJ_{)4jJ~j@=Dz0lJ*arb?4}_5^gS% zxi@CdO=_~@65BM~{9i!M&H2~*#C9}xiaa>Hbn-F($)%gRD(xRtVtiAs&N8)@RX3Rg zp>Zkju+ihkqn5+gC)<5^awEw9p1UW{?Kd@1)mP6arHQ^{b9y<=me_CEN9LGlzKgfK zk5h}#v|JD!IHQJ}`B5f=dF^vmD&)z$0!mVCs+@dxscWgJK<{2NDZZ?(q9Xhh0)IGH z@sZm97OE$7%iquDSDB6d`Dd7;OIFy7GupNu)4E%Lx=w2=O}84v+mED3xoX8B(l&A{u`y|A9)^29{vpJ^i3<@SY726Laj&+O{`dwT**JbP=H)CoOp~{ zFg3f*O97r*!3VccCnpa0eB$E{GMtJ@>`;U8cpW{!_nB3RT=nbzz1ECBr=);V8$tc2)OP%c;x^?CL;*{-Rl365f-(oWVzY=vL)@h;W6OG za+a2rX-YxV`_XHwG45@k!ePFQ9`|0U$4$1pu<7FJCskH2!`}cc6j4%9{t#K0HoGje zt+-^KtSA54;O-cg|CtvmzjRA2Xx_$g>FZSJwu4WR=%@jTWy5&z#koWdg5TW+^AvlC z%{_t9n+0L_v$=SfsbRN1)Q`-s{1UZ#n|d#qWsVwsoTUH}Msu)ZUQI9+-1rJ6#9Z;y z8R^zf$K|$ZD90)_n-vqlI+b|Ei3ROS_o5E*=_ce6mx$)~rDf$TPc_`}b_;JITNI+Q0dFtFshu$AfG9xQ0}x3MgewhZrvNux zA}IjQl92*%8x@9^_vi8i%i}ELY81qI9dHQ|<*pN=p}ocHB2O=&(e8F-OWoh^Uub^D zDCS+3j-Ovx*KrAx7!1D0rNcsPBv-el_j-m>o zxWo1d9;;q=Y`Mg&k!UHRTttECEqdCx=|`rD;9}Ata#=|6>*D*&p&^o1p}&I(kt4py zdhLq6Q%Xo?H~nj^?XH=+61wyK{U+vyaw)g}FJlVEniE9HuLe0Oz+43<`OKSd+Mo*| zjy)X3UfJ%zqoMis0h2`?kSVn4Q>J~2tEZ@IKp~2hErpGej$GVY1 z`j-a7PC@SXhODV_(9)~&0peW%WLQt?g5LQ~`2<5P20)Q7rtPiD`|xjP(q6DA@RE69 zRE2J*`fE(-2Lp*DYPj;4JVO4qH@O9N#w;Dp+CQ&`_cawkJrdG6CG%ps@P6^ZT666D z`*1$!l*{YiZ++qs`$6Bf9$Gj?+?9^w7BY8?W0pjge@PFfjp%bM zvWJIVXJq92w{*!98$!N5auV_Tn!8Q+g3Xr%^@`s=E6gg~lW!lnOF!Jc{`0Cd@XXW3 z`(HW{Ec>Wt!EE5hde4DNL*&+7t5wV6*$hX-bn6mZpi}+Ldf`XkOBwFv>Pvk@lqg*5 zv=<*C*?q*gHqK_dmq7%FFAG|zC7u5=AS@*RU7x8WxuvEh(|2`q$7S)rSr6R@zwZM@ zs5b6thu~dW6JKc4;UnAQZAL~734ZgUA@)~E>fqOsuP59s^y5nF-V{7_i5?=MTb_UQ zP(Q-7g84P|a4SZ2;T?hX2W}g=HFgKFpGsbq4knatooz305)pX({dm6>k<|m)hvkcH!;J- z`PpzZlpD?~Z1^=d%udC=vB663sde^gTrR~qoiHSkHc_NTNjHtlQ9Pt$1>Tg@aHrY~*XCiSS-&LiS6AWbkXx81_# zb!h-Lk!Kymw@FfPK|n?B$J*Ji`7z5*Hq=Gr@FzLE=1v_<({Nf@dvcPf%~RjeBGm@Q z#ofNlF0qBEX;p;|`#iej%iQi1fmjbTF0 za46c#nLHYoTyOr}X-_uP>Ga{5fvU&mr`unI z_ko&@bQF?}pO7vQYVpr?@Wq?MrG&(JDgPz|LTRCqZ2rfA{3*1a%bA}t?S^bgk}1A7 z*}uLqd<@Vt93#3MXoJ}oVEk^OQWG`cx(%D$$Rb?%%;3~YV*jX&*RJiB0gFm!_8g-y zHsT8CMGk#EEV5i8qPCfaJG=wFmXiDB^sDOz$Ah!vtsCS$zuWuE)v*wTo#W@mEm|_5 zroyCxk<_suFe;5XWF!`@UGLHnnA@`xuTi{-^21M|=Rd9SxM|CZcx!WsXeEWUqltgm zMw#o!eRp9gjP`0RQ~S;#6a**n?HNRNf~r{{ellsZ#Lh;&ng|Xdg&FzxL35KdREh{Y zUaeD^4{9j)3Mss5woaBzG;6?zCO$8b`B`H)a(8L10zvO*@h1XiIi7d9e|>b6@fJ zWFf_~%&g;6YKwywa&cltdtnbgZ<)}niwDn%!K;l=7B}V*r+PlY+Z}x~*rx20II~>N z4MLMA{I$Nf_(^~W0}C4=f(Jna2P|{5anafqj!HdLo7CnUtsxHFT0HV>6Eiwk=9YHV zUzTST|9+J|lXz!iPVEIk^Zo)Sj}i9gord`>RquF@{U@pRyThg*;;>(G&$T&C^|&o& z=L;dvound#{5v{Ad4~2mIc}!q@YdNX@&qZ~+Md|%rV&c)vwc@+9rMlzUE?E|pvPMH(y+lF73s+yN|;xvMB7q)dUr9Q49|-_+}!Y7D2JNk5HY6- z=^RPRdd^OWXMVj0?uPkh(vS-};UblZ&$aL26ILv7I|-_}XwilE+*e4+X@4bhU%QCv zSmS#U=i0GJ^B%T#)ki8-@;uh>A$fQsusaJ@;9#${xO@5F z%Q>qzuf1r1+;>2ax^!kn(fpWr_9FQ>xNLNG9BmXJ9Vt-pzOKr_=ML;dPH$!X*RDwi ze2R76Z;K`b2WmIg56{@To}vIX26S{xnb&VPih79xV%+;2mBce7 zxk*hytO?5?);IPR?o*X(BBa!=&F^6alTX5$46pmc0ETaxE?4=zhzFL0`z0i)T7sim z_~)Lma%bD9%Y>y=iF4rsyyw^F&6EuLvkt}Hr=-~Q7OP3uv~0~hFAZ+N`1TnzyuWK| z*y4_I`8GK?dswl*>W|nQEZhhb+{(wJZ%>l$XgZWwuQsy5rx5P^&AX=!Gydr1;*JKM z@_hObU+mh8_@Xd?`z)4ENKX-A1&%T`x^`i(PPBKm0t(?`C2 zxf#{HSNYd2Bl|63d$4`Z`g4BuSU%MCycqdg|4!NaD^~bFbNn>J7%#Ph$!1M#rW9%&Xa&h-iBF4y1uHQ_JJ zCv?CsEY9>zDwBA(&8D^|N>lX1db;P4rDdJK;U$AOcfWY+*ILn+X=?R?6LALflQGQ- zcxsl7d||vo6;4Zt?LIDw&Bxe%`{4~;E$p;-+J8qf`)c9`Yp!BajSVae3@OzX3+BaH zPpFErn{*msh__7XHu^x}s&0GcEebIC)?rEJ#Jp93 zjtr3Dusy3I(P%wKa->`W(@sXv6rlXBbU49Ru^L zy+JkUwzfaEWIPTV(WDM2rjTsWvNJUSA2k@dY?)zzUud7@YaG?o!gF?!*>Q+Ok1*KK znaSZFYhs^oD62nCHtrCTRqg#oOLc>wihky}l{VX^EjiQ1ksV9x;m3kk?p{`*Pq|-X zDCqU(8I}3s$EGtkx}NTvzVJw*L(d-(9jfNvZXDE|MrOh(CPsUsPF1yida$m6wlaS1 zxhT`o1`(=Db#jimNrp(MDiNQ*u=2{>*%B^TGg;t_5>d)1g<90XIjBiH0h5LagrB&-FM4fS!rS<>j-yeSM3+AlcwRS4X*lg`T z%YjRLNfLy9HUWoG+vl!biPki}3}y3LzQ~qxk^_12HWj4qkhOCD-V5P!ID+c%?D7y> zl+`Ruj)`DWCK&$-q@r2P%HsMZWNRaAAWwG` z3--!k?)YULS(Zg7E*@( z6gNF8;zrg44$>c%PX{W+)v3&M-?{D8x2(>D>8yM;cqet;th-XbB!-*s(S3bDBCH`B zJZ~AfFS-$=*U(UxiLJBEBC^Kb%Wh(twHkkr(`Go}!$-5EVX}Etp!~8q2y5)SL4+FN zpH#!k`s$QVZy|@U<7VL(F}(6s-!AB$m84aO7y>&Pp;$;4aRRZ93qr~y>p5cCMwYvu z?Qq0Q?fOig)S&nP;(cK_%pt?sf?ec`q_fEgpZTp`nGtG?M>8A>g4-sRlh8+0oWCNQ zQ)E<|9?J8J;J&}Z_j7jL#xgp+^R{=(scWppW%O^#KVLi__dUOV25Bhsbmcvl;EF@M z1pnj;4%KNAG0WA2uWc!+{M3ICDxB4p(kGVk-~n^?`~;tBl~r@X?w2>wd>-b#hYH)r z=gP&8;Y5Yq7zz+6XhOw3ArxS1kSw&hvD(e!Up_Yt=`t`fvQ^_nmh0kFpqjvS7cE+dIa{hDpu468ZBjmR%w)(LTl& z7~@^VMIzsqnk!#gogMieU!|oTx#pY^{dB&iJq9`hsYt6&&2*bdt{Q#lwpKiGxYx1+ zw?(ZOx#HuF?1QLDtN*Opy^`GBYFS^Gr&E^R*H-b}uYJ=MEI&TMr~9#yMYZ!w{OhSYo{Cg|VX1t;I(6$$^WdRGxZkwRJ3RP01h6WiEc(Lvr8`y<4vj=N+vkb52 z*=2t)>qHd{1t>44vu*qCWw)kDCqFk&U29kNFF}wPsF%YY2utJCA}C4ZRQ zo!^cELbhH4pm$nI+QluW;@a#Xl*RP@CAaRo=< ziNb<1Bh?acX)1j3f8Hr@u4HxUEj!G|{j{V8=mwL#0sRHZFdBMpd+5i|0pE$hl5)^HyIgm6TJ|iGd^2JBHb>H_s8f>$ zzB#XIw=Xw=TlT4Zgin(;RF;oaXL9iQlRWLSb%+w7W|;*OuJw^NnGPEMocxC+BNai+ z?sv%WmEqNsRFckfDm&=;f?6kr&(09yJ`dxBNXS`LAk7{XMf*tC-lpoFUf4NNaOaMF z@510OleS!L5@!X$)+*QHiU<-(K9dFwdYj;1A@=f&K33amMyLNbnS^@qk;XR%diI?DTgQX9_u#wt zeaXJJW~7!O+Sa#13YB1_oMSk;9!4Deb`*J_OX$UxCB|DE){)glRA+4Gx8f)2OI8mu z-}~`G{BXCZ+2mmbUST3zEcXv>DEO{}pQX&g;Ojt>PF4rbt^k>VxJ-^R=x4~G09&;5 zrR#V2JS;@Tg%=(rnEj;XVA_D%so%3S7A!VtBq5`Pq5X@;>nBt+Hn)t*eZTkiKg9|C zM*_tE&2Ro}gnw9HM_@n`GAWhyvuBTpuymR}){I-{e9sr!8fZLTR|e4uVw|20uDhnJ zxZq1H^Pg8foAUGB1lFK5*yl2^Pl!ny`NJoK&T8oC(!=NwxR@+p*gE?-wf|xADJK>c zJ)ixQdGvrrPlw3osjn8J3^lRO;(z>>*SUTz?Z?oyWX8bA)`Q83P-ff-vcziLbnO5? zBe1a?HKq-pv;M%EX%KZ8#T8ObR5q_3Lw0!`_&GRc%k0YChD9Hw)J{st2M90Tt+Den z#>?i^Pu=+l{bW_$41MmbG9c{amGJRxQmV7FRHZrR8Kg4d@geGzrX^l(zBX$>EkY^S zr)-U^QfY4Yu->{SsWk84f`EdOMrT*zMHUoJw@YKT7>B`v!-G}lsni5Sj4FcH?!m@X z@G}$7gCOWeG`$7c%TQpAEyhpf3O9&Onk#?j?ki%!iBbyj^A5oylR2pRZP1k#cb~%< zTl}x0kX*gslzGl*5VyAvp7Uk7CPcNnynwKwJ2Z#4`;qH5$z$yxZLaCnUHMt@@?(9` zR6Z_8ndk3O-3~&Uo;ZEXf_)N|^}w)`;1R4|;5wBSAM)8|D)yZdDl_PDf@A{I;vfEh zgr7E?zE^ia2ktrGezYbWYOYIsfau%y@^pyNuFgZc6F}5=RR-|4#MP`T@%x9bJZegv z8j<*k+yYxeXmBDZeNpt3aDpDhE1?+jM~9bQh>XQ}GW9jOADzWP5qxIm7ykO<(7*cl zQ)5xOOF3lkCkCw-;G(jX%=}j6!r`fMv+H8WT-;>GvCn?X6#BvRfCqZ3>*Sx&54tNKdW=K=n@$;{>DK|an=hql}sUHxCNJT(eYes#IuODjeQX7%eGu zS6m~wA9`i)#W;C{`V_V-lca!2dRn_r6iytO$1Rux{68@5D^I&2!eDW0s;yGA|f56OOZ$y zl-?xN1f`dR8X+WipKs=V*K_X7oSA#)Ki_wsJ0a_Nvi92Lec!eATYn46cgh@a+~lJ1 zMSzNm3b+CO0hCGLJV1Ty*dJf;Lj!(k8E9!~XlR+}>FF3)m{?etnV6Yb**K50vT?96 zGau(Y&cVga!^6YE&d1No&Ckir!~MrisHnkfXlNN}X&Jd$nOV92!yn3LfP;bRKGhgC zl>~5%gNmAiiqZ~10Dy`Xr1lSj|M^3845X2co`I2x89brpIB<-Ln)(=_P!*Ri7m0Fi4)OXyLIO#7mvN^&pIqiIps>uw6?W(bas8|?im^$866w{K7qmF=70QLSX^3OA#82$ z?C$Loe;xe67ZpJLPi*~9&i=v|2guhk8X9UE`ak%hIu-ynY7QD&@l$l1`d8?0`f^FA zK4IWKmzY!0!YFy#63=t%!5|Z_lp0o=@CR%EgR_4hV`2Y~IQyTB{a<`x02XR0aPp`* z02pv|^=+&i@L$}hQwWP~pHAawOREFAYwZK3l4aSr!&CZm=E&SORt5m~6|h~kO;uNH zmrpR31+GCb*4f*;>_;TXydJOH`(njd0i!!QVQl*O7E}h@zcoW{LLXy-!E@^HnkOB` zdbHeE{@i#hz3e(MdqQW+m2gcj?OOIhJtb%4Qfhe*Y@*TND5|WPb%~SYI9|gHi)N7_ z4@ENUTE-oYZxMc67^DEj6Z_`l=|^ryMLS;S+nuYN+ox4bD(Xje75dp{&U?AKGMlOm zsa@jX;O6{h4p1dKXCbT1J6L_@%3F}^MD2Fx3S@kfZHas9O=!7ngmCrYLI5OWq>d_V z>#+s>D4HMU_89qn9y{AAgl2=^Q7;eYyESZ@VdMGAdht^2?W;6-w#N5ex_^Cm@KGnx z4$X+XXWF0OEEFQk7{)fW~~QD={LlYdy1+ zNCD>4K2w0GY-SP{zTa_ZBSeh(;^@q#;R_7Wd(c+sYnHj9l%)by3+7xWoHn%*?cxIv zhxe`!^4lrElY_1(e=pM(E<=qfECmoepJ${bqr||@vR$-hgDGy)WO+tEV+VBNktFW8 zc}NE`;s70opv8;odd#+sbBR14>{{8oiCtjhmG-JMm6`t5LVZsNu3bFljh=fa%3OPt zxJK5X0Jj}=J4XBWt~m+XcBT7sylz=o@BBLfo@J`RNk4K>)(vuXRMYjo- zXYU>_+peV99*>*Hj@`erg;7!X(sE||9BuHc)s(|23;ISk3Q)J$j*fCVjd#rM@(CX# zGPjAUy}CJ6lObZ}&Dy9j{T6r9n13dtsv=Zs{fw9=!uhBX;fIA_?AwuaIvn^aG8gK& z{W5;aJyK|xFGI3RsLK2!ZGx2by^5Pj+_$~I5Mc3I`5iE#9B&0ayG3J`uE`$1(RO~s zWmLzY6rRIJkuIiGIp^ z@N+xEPxp0Cr5B@c{#RC+Yf)01r=8z5vyasDx_oZ1+K+kobU;Vn_jZ!=vhS4Qs^?jU zrdtNm4kx}$v9T%OW{D>>LrEU9oFTLb6FfTH-$%%u%r=UdzcRd|{U~dRT|sDy z2GjQ>dBVw9sWCoFTjjecX{u_c*sLx>ZhhhY!Y3XH-$F&eXrbcEvma#F#j&esDtOko z^C;q6)$+kLjBcx=lVS7JW~4;MJLi;o3q$&$1{5X$OOH~g07O~z+BUXVr3ET6(sVv= z%6)+X7*`Lurfv)mV;eOEWY1m9d!xD<50aKv9h7wYa+f=1-; z4;7`L5<+e%wCUW$?{|bK9_2L4UnhAJO$q05y&XTdyXNu+e|$u>?cr0Aa!rMbz8#{& zyhcjTpg*V6fdi9aGSeMwAo{j8D*iOwV}bRe$c3fwHlzp5Co(k+*BS+|`LL-}C3fso zR&(GyiYP|`I(@>))cB2h0{xt#9V3Bf1UX^jjOiKMwy)%sFmT-De#0&9!1}q4xh|Ut zPrv3$fOXB{%`^Sle2J#l1`+PL#Od8eU9Rgjk5BlB^A2{lo;vA(|8{Lhnt@(zcCvWh zrh`2WMinAzPi(`|<>80ThH4t!l$Cd1#dbf2i}@d8u;qDr^L)kKerY{fa0;f7)rRYF z<#2YKYZR25q=G+5j38*+R+0xFpD5=Y8*81ViAw3Cl2Q=nwV*rO4U7|24(~gzV$#}S zOb9FdwPt_-s=9}DWBwwlW6M6`4b?_%)z8n&pHbNQ8TE~A{tHBxJds`HHH}_32DM;Z z(0J?7W88k5m#I-?oAnSvMG;3HdWgF9rI`BNvyV(c5wMfDpmwXEUdxWqV8)>!M0AUD zmGpjF+?gHsog)b!q16D~rfmRINWXe%dy@Qx$w0(OVZgjMlo7#oh(z2c#$aDIOTu0E zLYz4fs!61YKrQ9cy-&A+LtD}d%PG;B>!R;edYyyZwL(X$8?}Fi;YJ)JRA%qo#-w^2nCM%i1 zr(YW=o_cOcKWXWN^)p(jgv%K6E!#tL?{hH)sZb1pp0Gyi;*8><%|LwzI6 zcQXAeAvKQBNM<@cPXVaivt)^8g$PliJ@%7s2#uq@wMV#qF zZmONGE)+%xxA$az)trtbPE;y@W0u#(_U7BQnj*W5p9w=w$OIQky_A&vM#B{*w38AL4vUFN92Q3u0mJ z*^I>eYeyC8?Zi_2HV)ao8Q!1Ynk6_$Vya`mowWWeglHgj^YW&qud>iamJN^1p8QcJ z$?q*(Wv>k1(cgA-_47K8*;uh!oAvSuYr1I>%)2WNMyFKEcAQV1q8D3yJwTrin&h(~ zXAl-6=({549SG%->e-x2L1rcUcGiu&Z~V=!I=wJcd3CI%K9A+8yz&OSH?1o%o6N*R z$iPCgbBVJ!*ERAC7tyuYS?PtPX)*1nQXTJt5kLKOjqtkLd>_4}SQc#0V+48{H0d9* zQBWQ@61)FQhl?QFrr~FNv(Wi^_r1Cq|F1f6?vh2Qvo4BsjA!Mq?R0%Zb2Zbfgyd9_NhZ3ntae8+tHbMW0(EC0-lr zlL$VJl8V|>DK{8kiG{0@EqG&3tP-a{uG{;BP8#?R%aRgF3w`<=x|*f`*G_+dN-38` z#mAcGmG1_t@7WZvFq|Q+1j$i%QGmND6R0+1W%-kGk`gx9&}wAON1ah!Hq9nU_Jz?> z>^1&Dx+$^sEOYg>zdGn(Uld6goiLk69%HlIRpl8vwNqe*BD<79vcHSRGQ%Ta(3%xE{ z6n0hLp2;Ji=j&QNskB1R5VPsSRGK)-oF~4o1bK(ke$#A_#k{iQ9RHDoJa*i_R6ez&jy35zvuQ9$HN8hKnpIv%QnEBYtx7S|N zOq`hCq@97ooT~;&D(_@U{Bv*0rY=dO+9;d%6nuqjWWbuvQuDuI&y_2uBR)QKL%@iM zI5TF$%4&j4s*e8M@gSMJ61O3Ytw*EFwp7B*-CvG_eu)Ef>q_?4=o;Cua)c26uzeuj zY-dw=MbdO|#BRa*^{g{|T zUog?l?I&^8O6VoarBmBoBmt+ua>*g2dv>&_GVv3rjab_V5UgQXX*D~yanAK+sASEH z70rsW-ZJ!Z#fGA@TdTi_wgvq}warrx=UQZ2uWYB^($#q1omDflho=2J9q)QD(q(V1 z%he>Uz6t(TbeSnkPfa}?||E?1erM&Ke`SUQbg z{kWmA&M)%83zI1_VSQ+c=go%7T*9q}yp{an8_MVD!>(UX z+HjC~`*!=|jSphuE_~~+=B^_k^Q-~ahe@W`7}5zZ){Vlqo(<gxkO#O zw^iaB#>UP~waINGjsJ=>DDO~VYp!$2T}@Zd#)vZ5I1guadOo#a$dp88^xT-R7UK&4 zTvi*(B=`0o*3Oj2Lzvf~>IiuP?8)xgA2rqEidh3w?WzM6Kc%Q8rLQZvG%GANmWLum zpo$oxc?+6H9Zg*x`cUZ5^so`lmN)64HBob8Kq^K)dXA;1Pj|t%k^)Sm5xUj7kzT&;?)Q(k zhp8q>zB)VAW0WgwXn)3DhSo0bHx{YWna z>)a<9k*k-z6fdi5FTbngxRBi0!znKKC4lGA%r#*a>>a$%S{eamSVJ_xX4=@|FU_zM z{ct(Om?_&&nAurO3zl+-JJ<#0`9x~9m^n}lwPC%q8`MHAj+~V4>``oM` z=`w*mwi?B@YU3n9aKLP&`S0EI)vabpd}{43Nh_?%6(PkE#`@Uj_s9L2`L6V?wK#(6 zd>dJo=;&HRv<=~bhj*CaPVC0K`$(Rsi!@DXNS(N`_3hHkE$r=WI_@83@KSSukT1<@ zBNBv=!nYm=!lDu|4y7i4?9!&_-CF-h2Hci%H0l8_6X^{C(X`t&N&zrnCg1`1LQ~~| zK8)M%lF)^e%QM9Pp8Qo{Qz9kfxw&Q`Tjcc_KIB!q18cZC?l?L@qTrl@B zVL_Kr`?F8$xc-jVPJw!`_2juBAAf}joeb?WqPW0QnH6tSU5J3&v1y(*mG-aW7Tt3` z9FOF2|KT_KVJM5G`oz&Y7y^yVIzFzSAYZ0$i)fE=!N=l#RW6yQe# zu;ErFMCP@k07nd25)=T937`PdVDgJuo&u1cnsXp$*R?4?(h_z3+mAj(TN?_nBLR;i zQvml_QrdqiZJO<0M=bk6_KOmXIj?Kb4>)p$gmUSL^zvLa8uhA~micN~ncP>^^h8-K znSWZS;0`QWqIBTTdC1>$lK=FZR`)6y{5G~xfLz`(t3P_l|7Y*F1m^$!!hh+;wAv8j zuMyZPsMZGE9X2~Cz%Qw0Fo*R)dY>E}v{ZteU$meAW#D^fkmrZy0|lH!oFsovn>`R; zqS{?BJ2ZrgfC+}RHvhtx2Ag{~$1cXhALaxs1cn%Y+G>iQBwyO>+)UH{SZ-FHut>~! zLp)~d)eM1eXs>qHj71{D$r5#uo|{_s=-JW+<;j;JcLT%gQ^n5mJL%DXPl>~#1>B*^ z8MaX-^_r?~`l*?$$ zlES=~%t{~oG55h0C)r`|W_IIwN!}cd@Pg^uG#A&s)3sAGMtuG`jf@|2`O}c8MnJ)L zA}SXlJpvUV`dt}R$r;t5dPiJn?+*5RxaI!nc$Gw-(xS@;dslChiumgvXl{g3?d-R+ zM+>U7L71nAQSDs)bgyUstXV%+;@cMsro8qs`$Bk1}xz z)E?aEz0D|}oi~$J@sTV1`#X!?zMVm_+x?goSPg>y)OUwCUzw`6N}s;z-)77-ne;3; z%bLK@Pgj6&8>#`{7dTTpJfqVtvI_fZcT#$MGigR!re;`m#(SZT>B1$lMPgO^oh{#V zV9%Tn-fx6gPGie0brdo+E?Zx-)E6>-^*-fR%>6f6jw7yb`YzKNMvhvx3anOPeU`hChHcbIU zo$qda7io4TxFXf4_CN99(VYs*Wl(9-1uz6A3*k3o);DvVnH@c~YId|zKGlb*NSJA0 zc%b)HH>WD-ln)bI_<2@D>66@sN*BD(Wz+29S6+rH7?7!KH3omZjkzyTFhRkvc znXu82(DxL;l)*u%Lyl8zJj`DM08D1t6#)|9Ld+zeoR*rD3LPo4#QA zEKaR)Mk_rJj+Z4VvC{-*PynnFo=kEH*n1(+^*+F+Xi!fSG;GXJAJ*9ZHu^4?4h3g&-ZSBqeiNv}94$Y7H$Ei545b zV!#djZF6!yG)G(-4Piw9g#P&IGo`MhJ7#A$)^nRL!fjgsdaFB9e&1tp2=~K#a20H6 zM_)$Sa}&x^_V6a0t355Kqc+zI z$4+PZewiJ|0xvdBZCls!5LO@2uBxZ%qG$i|%Z++UuACarzMePd3?UY`HH*fX60F0K zI0kR;olXK>jM6hrjSpQ5LN5}DZm$AqZXZN^>D{Cvk2lj0BXH{~=RedDXj7W2hh!qk zJc2HaVZ3Vxi%-WHf4}*~>aI}O29PqXCpv9_s6R9g8E94_J|+yeiqZ~{tmd3)mV;`e z0*V|woirmb98#8V6^&XKjx*EC(j;%CFKxg)M6|K9QHWD6IE7(?W~be!cMY-U@m)r# zTW3p#&an=?Nj0lbwlWo9TcCH-1?UI3ZNgWxYopqFH80`)7t%yO;pTCx3USkd<848g z>e4hNj=jB3%89hGoQkCO9-F$TpyG7Y6e0w7bwCgA3aRj%r+ZZ*!hCg*H!g%aM6eBT(WQ^5_1pPziRl(b-b&uZPush*OegC?x zKJ_}E3^Dnd+9`%B7_@}ejY`=l*aq0p|(C>H?JBK-k_IYBvx;5mpY-xv!}`GP#Inf z(j3wK!$VLD*?MO#6V?`le5ID#Qy(Uf8<55!Qjsh%S2iE|;B9mE$4svrcZjy(n{KJs z08FraZyCJ=0j)={A*fXb=)Yzu9;HIXJnY8e3gO5Ot$-+hR!uA-izUvoF8!vCV2oQ& zuc#yixTXQg7Vp$&PTvNTmN!ACEV!y2vl)l1AnCqyhJ%WwEj?yX-ORjQ@L5&8;i0WN zj`PyxPN?P9NuB^#$&LOxGYX)0h&o(>k(E)ucS2!jL%4}ic1LfZS_sHsnT|QOoNu{V z2)|ICKkES3=-YsO&{ukE|E@0ne(}%CKd64J)0$+}f8O;8MOGlAL-^puEmu5dAb63! zG_3LMhXh5Nh8G8!8>4rgjE&and&#i(wY(EKSJ3CVX8!wg|4f9APZzps9)7s@5}$_h zw>RUm#@8ldC#U6uVU}@yDP_{>n(;##&vGm{o=86tm=o+E#^4P*$%4f0Jj6w!0sYf< z0x^)J9`I&$Q$3~VoXqyyRJyu&yj6D(50LOwaDVgnM<>?E!~~eS>zqP;lH?W-?&D7f zer3#|*HGn%69k)9FB31<%Oh{`eVL_Y6%v7o)phAlyH6eJJT}@&2}iwpF)#c;FLz#L zLZyQ&j#p`Sz*t$rH{H6!L7 zs*nr`?9W0}Jjpx+rO4+9duX_H$*C0^Ys)G9+a-0@RsAfF=WNg4&@o8RnwO~$rr#4M z+=Ct`?!Rw@ySBv>*i9>IhwrVaY^uyxrgPt)L2P$QCHtu^T+UZ~^b82WybV3uA7w#| z9RGZvD5?-{R!d;fSmpTVEH=bXF?5aeL z!;w3;#uE`{gf!H9Fqc$*41U^nKnKRU7xB2nVP@4%5tGat`52z6c73CCFHA-%$$VPa zrfemfu#&wy13BWa`3d1byM9u@rFHhR!E@UWlp}B|tnNXq8?PT8*-bf|sZV_zV9X)F zG^c2JY=VA)pI#Oawa2kz8oPq%Vz4K?NZRk=C`)I)l@QVKTSN0Nl-6rraG5IZG4&Y* zSNyoxLB8X*&lOp2Ot4uOxPv`u94t3jmciMeZGXNJ84dKl^5Ixic~;bHi0 zRSMABOYlT`o~Hmz!%p~xoV>Q&GOXWwhnZgCG*R=fb=@+jCBhz*tpS*efR>r);ryo( zExza)T6|fJD^dr75#<=Zce}P>c>SjsZ|s5n+hiU6@RM%O&sZ~8&p~|3)0(av!icN5 zA0a#gWU(bAyN}p_vezt`EBZp3Ry+Q@ym9T!jOh)204y)$OyH&KEAfKQtp~6jmz9Z(LAXn2d?LDP_R){hsT65tEG?yz^e@5Ynxm znwZw^Br>FK4`Z`;oVvbz@IDua)wNT*Bos}h-SlZPO_6?j_lr{oZodUdhk)Y|S^R{) zD7wa6weI`kFDi8&i1##TJ^vCEcI{c@4Y-tz{t?OrES)lDp1xESZa!SH*88a@ulm-R zocOCAZ{_AdO`Mc^0RZ?g2#V;!Y{5Qg_(3M#7Q5Tt}8`RZSJ#xpg_Z(oe ze`G9QA&Et>e;)k$A0E7t*YeyvQ;c5wcIGrv!q=iL(+959fkE`**LG*(r4?rqN>9X}2h1|WwzZG>_~rL(T}B9rbhGW4 zOAWzazjAvMdMZCp-cB%@z8ya@N9tKAQDykDVdHq6EQlX*5~^#oYN#JkE|=BRv`LF#sp_t{>ifMYmm&I%eCV+Rgy$jyE^V5|OUTkWpK!|k9m@gpa9%JLnLk`dH6 z#-@u^EsxnU%iwnG3})}`FI7yoxG-y9xYfF0OBIqA{mW3~0aXNndM|k#Awqzvu(*?X zosUQ2d1m91#s;(31Nb+bWLan6h(5;N{#j*s2G-OeZK z_NbD}&@OYqMs@eGWGPMS_WRB$~ z)rQF8QWR9%@XigFB)MF-A7;6p;!Z#7xYCF5sI`nYOF?_ZrK@Clf+5O3Zk?8-s?uca zPi;z<^=p=sUp!8+{l}NX*I7qy)NQwpDs&#t!Jb0s)z*ERR5VdKcXDfskLn6*=9lpk zUECLpwe&es7N7ULDFQ;10&X?1!uEOyiwSD5$VX&O{G-?`d4f}Mv0EC)s-_Lc^){u~ z&>Qs$`uvGGzEQw?9NP@L`jQ5+qAVtl=-iV2D04nr;QK0+ZTsc`=~CLG(gJ(CFGcZp zJ4(M<>etvX5h{Kes*iyFSyf0(-U@_$SE!tWnCmz~67qW-=owtHa&E=5-aGeHkL%sb zp^y}ptTJ)UP9^ z+K3Mf0$oEx-tnO8E_ZBBl3(*IF;tf=rb znQ-~1lftSq3PP=h!ce#DIYCBugI&)he7#yXT3Ws%fQwvFh&Db|S)KSLmu7Ke@ky_* zlhDy?FDOf0EXm!)57+<9>1;EY>Zo!NRUEq!__LO^aV@dl2p1!efHMJsF~A_vx2^6Rp1&T6sj#Pe%A4lOc|$nc&-pSLj0~!#_tyw`uj*-UhV>@H zVrSDrXZtR{y+n_EM%scjV!OpV_ry;9F8*>eJhD{;(gG$gedkSuGM4?#`98f%!%rDS zGQ>AISqAEf-Awthad+{(mIZxxP}+J9f&H_f&r=d#;dM6+GISWBaI=`0isT6{g%0}4 zLw2rPj>%4(U@+CjUaQr}@?8S+xHT$Z@^D5O&lUyBy)|9>b(Rc1miT_T$=27GV>oQ8 z#IoI5T1i|$K9@P^JSRQWQX>9#!sxYooU6jcyXDM(GCz_dis6Kg*Wp z|3WqIA4mbhVRLUV<#C9>x81x^xu$cyE{^2(DDxW6@v(J_Z-dfn`Q3+SpH+sr*i03D z-jL#OLStvYkGGQf2zOF*Z{o7~WFy!7-POOsXu%Y}*x>rcR2A~{c?qtp6mi=#a+wqt6d}yl!IAq%RtrQ!>PbvC^=BBSx09O?e z#8rY}7X^q<4M>pq10YJ{>R^Rm>XIp;;mX%u^B{hi` zkTgehxMcE5%Tj`IezgX0vlE@ z^-w@@y>rIcN%jl5_p7;8a{ zVrIT43!6e7zH42H;AcT_jU>U!i1w{o_hz*4rJaq~z^rbo?P?R6T%7FflN({f%o_|>x0^2#)Q5x1B{8(eF=%+Pe!CswIfB{zd~o4FIg`s2lA^}hnt1w>PE*zTvm1q1lHlul5M`1Ev2Y&A zjbJ#+uGx&XSe}s>^Y0h3$1LxU?e9O@C^GnLTgH1@urczY<5RUe_l;z#LqtOcK)5nO z0dJ36OlZ2|1Nxp^23Ti42TaYUlH^yCHIY9p*SX|#zs71z3!J^hQ^%IF4&^#RHK|}B zY;YU>sP-(`<{=#=oB=^O-ZR*rI?kBeIPS&;v6rV6UUNFjZVvmaJSoPPx1zZ>5R&<; zA-WXcX^(r^PrTV)z8CHDthtnrZnqP;JB3f(Wn145xsnb{5uFK@o4D+be$k}{$I^FM zZ1`^)CuK^W^(u|75dt^DGaETIP_++sS8H&Pit^8K=!w}m++$b_!FkHoWJZo4lT%`QlsWzMe!rl+;w$|q+RNuQ zL{6Fk_p_^J*W>dMmj}oq6U1cW(Q2?HR`gl7IqxV@y*V)uUXhkQGh-u_YGtj1f0SAB zy)+)O*N4}r$9^phnKdC;49>r_wVSSuQJyy0`8E)zt*1KNTW>x^tJink>)su>^PUeu zIc5$rF@HYm(D*SrDxkt)rCfOE<)T$()-f@elh-#=%=@@PALH+Dpl@d%cOdtYS@8Gj z(l3!u;L92g)*EU@zdho+J#~4;v{$fXFf#UmW>Hef=|~YhT>+#=KV28r(cHSZYP|ZB z`Q;I%oeUJKle>3ALDNTIvh~BWC{^l|JGY)53t$oUgK@w-x^=X3;X>9Q@EbMny9(j8 zFm?~j<(jwsN4bI-fwvWCt|Uo4QV<2c*q?~zZ3m0Aej2VyK6dzZ!tqwNP72Vbwd05Y7 zWxA~K(rauwfG?0b$LwjC&{;s(52|)lDh>sjMw-;$J1vXK4*O3-Ohh6;76qm|+ ze?ZdobZQ!;!3rYRr|L#+Gfx55GxHJJ_G(07wm#Qx3 zg&@xKK`o3dTM`r|n|zDlMdK}AzH>*X%|}S*PsZOwU8{Ffx-}g?^u@~dmBpP}xvwq) z0$+YL;^^1L2~OKBFdnD~(QdO9hL3@FS$!Py+V!$t`KjV17|3Z`n$GSNW>LQ!OOZwgY3f*H=dzIp*s_+DM4?8*P1qBojBETG#h|qQxfU_7VhaC``p&X6U77o#fOf<&fweV&?SbH-& zsw&md#37>vk@0Hr*Oo&>2>OHI;#?Xwy>rw1R%n;>kH%=4ZUy$_GeX7|XQ6qTZMv4` z7?W8XLstKxAdIOw^2Q9fOJuwE`%8`K#z$WKeQS$#LE9)Ua&L&tSTipv2tUGyF>!|P z+hTh&zCqR2UsZXlnlJ$|35 zOY)$S1j7|Oc|7&xY`cJw=?MX9)gBZG9a8uGp5@8M%9S;HEF4ftUbwfKkgcz{Jh?! zj>d2972xZh`BUe4Xr%W?`g0E=>#TzVOp|&rd%Zk})wo9?6*)IEC+%s3IeOu>nTHaj z^GHVG=7m~OA-r-*Dg5&41yoy*O0>Grk<6k+8h_LAegh52udrVni;92;$IdL9I*X4!-%hcZ@gVpiLra#hW7 zro;a05(o1}jiU&dA5KZs-qg(F%uQ7RrHP7qJ^4v{mz1;A!lUMFji?mM}xIgGB1A0JQa|kgLA9C2%koNRFzN|P< zGhA(!Y4!ffc);;4AN7|vMMkTn6z`hPbiaIk(Vlr*`7)qux)(q!E+#o1Ws`L0GrpR7 z#yeZqWchmDVmW2ftr#8K_T5hZn@zw*?lG#`4NDRMuAg>)Y8Ge;lQ1SyzWZa~GT726KJuM6N! z`Zm-p@%jY|_of4>UU*)Yv^vM$#vTu4CO#>I$90W~Qje+YhFm?Wz$vhL?Ad=@A2}5^ zHa5LBC>g;Bks&47zN``i4m|z?2wf&jMB5~$sw?zo3YFxUsTRM3QFHluGIEguG`oP+ zN%>$GvQF30qc{q1Q7MqU-3!((h>Wg&Y{u6Wv}5sE!Q=i}Sjiw{`qUR7NE zDS+5`D6kN!>)ZpT;~uFeX@EZcbWbM|oWO;L5N>alH= z!4}EL!vz>w0`(`7J>-r-em@}h+nMj*hKm2z{r}^IRG52PCRI|UpK_A#l5Tv!l!C~K z;E)uh^_H5dtQ(sA^RCq6)auS4($hAW0yuV&<4i&-D1cbT>;YJ>K45&qM0V`{F?)$U zxKI?vQYvcIMWO)Uehvf}FSXmy<0ea;+mXlDnoi_<284)Kp)Lhq-qZ;}NW?A*bM(W8hY)(oprU8s3rP;!9G2;{y^C3VsvFw{`!$(K_VLK!r-T?QrNZ^mEYmX~8H z(x$?s9V$_P#e?~+KNL*v@0~ZaZ1gq!tSwm0Il=%kxs5zf7Mu*MStg3Nt~2d${m&x zp=Zzad)->(7M*ni-@iGQhZ^uN=wv)R#@(S-=Ct+Lv$3w(Z#6BF+`sDC*Hk65Gu zc#{}LfbjgZ!{VN7G;Aq&9E}(H1CVVpMy#g*5(wBH{}6I#-pg8!n*NZh9kK&moh7n@ zNN;J#_bf3GX}0eK7An0!=uM(RP%O|wZYR(mu{Z3KsX<(JjNxByI`cO4B(g$BAM}_u zK7rWAKS16RSB_$E><1A4O%ff580V}jc*6o&Ge3?TI4nobX=H-svlqx)@Nja}^kZ-z z0f;=mP`dK(pyn9?+*+bzQ$W(Iz{`fo4y%2-u)JOjLSRbW_7gGoX{RnEeopFYHWr2{ zVy#?UBEN92Yj%mM;GyBgb*P>2l4;u+1E2g^_~lkZ!G<2X*4pOVDC%O)@&#y1=;UWv zKm_#{=3swi%!XZMT^jos#?ET8*X2;z;CL6t-k;lj!|s52S#n!4Cih%R-3dzp<`Xj~ zgK(zi7?n0oxU0>m&%NDJiEWeSxJ&f|<@baR4c9FrPM%8?zbXD)D@CruNGj>%eJadf zM3VdG$$4;!JRnFDBHT1mzSH~I2wl?@W$s0{efegA?zcDmw-VG8D}Ct26JtY#6g6tk zPCwp@-p1mGmN5Q(X@yhp%C@$H&SV_(#n_cT?FiSt(cpI}Oje_r?7Bu`Kv2}*@ol}! zO%?vSWpJ(+iEcjf}gwvI$dwhjq??Pnt*Vd{97dvgV(at^XL}t>`We8z2<8OMqbED)BM4GYWEb=Z z1P*q8)M_~-wVwOhe5Q@#wYR^+{G@usUgmjnSQ=!1145RlX}StJlHh*ZGCXqWM@cN; zT)hI>;RfRb^!-1qe{jA91$dL!b#xd7TBvt#L;2RVqK;^lVVhGhk^#hh1h#Yn1ZRbS zkrnQQ+#A}%%Q+N4-xPJY&khFXh8TbL111OL>_;Rq) z>2ID~qQdDhE*LzPNyDd6d+X=4ljl3-qGLaN>yeq}K1IQ)W78X(;!RwpKb1O49!t>d z&@bHc>+~Cm1;+jjiaL@ztP}GZ6$7}0QvIK}pky3B87=0lnTsq_0DQ7taN=F&Qz>~{ zwB@OY*^?|OldB1S!@>)p>g0cwjf&d@tJn7>UvB7(WvngC_CP(lt3Oym!^0Ni#s+}O??QzB{%Ff9dd$BI5%uS}dtq_x z=ugv^`}^EUa|7rF^0~s|XXSlDJI{brJzF!r*^aAVug2aa+SC5P=|g zPlXLc67M0&=W^GYb-+c;7lp(>hJm)$g06!HwdX8~9AIuk6LqsG!1IE?lG9E+Y=NGr zA*@FwG_k1__c|&HnT$LP_E<2re>~~6U^L;HaKi3{i)rXJ|@9stRAD)vlXyd&l?RqM-*w*9YKEzrUfAz8}hW z^onHuJ|fi!p`A-dn90VKuN`S^;o#WXunCDI6%C`5cP}cFKSr>=&aCh74^bsTaJpAJ zW@JFrY2bV1cbKu1(j~lOw^*!UP3=iz)|PA1)Wu(@D0IqN zWe-|P0d&Aklz3?{aWf5^H!wRw6(jqFU?fH)S<~>pdfbmJHndUhqc$1m=2ga8+^A-w z%FQC++rl*4lM$RZ<0)uVk;QC(CNG(*gfs1E_G42oxdN{kqF@X{5cK$ zPf8DwE-SO!ouCFd<_y-Q2k5!{y$Y81$s$i^o3>jP-+D`1%`*Vq%v-g(R074GZ)Quv zEqd!mLWaiaSl54go%p#nU3c~~{iB&r#l_^VQS@SbHkk$u7Kw8YA=VTiO9M&d1hs;9 z=vgcL(c1XH?BxNeg{+_ccZRl4#v}T|g7YNW(YCkOdKclj7J@NoslG z#1`a2&r|ikRL*}p&o(-mphELHPyPrxqB*9Zt^Sih#}cCQrmpw;>2^mOtG=a)i37MR X`iz7#yXrjt%iw|k8hntNGVy-^#<(Ro diff --git a/docs/images/manual-menu.jpg b/docs/images/manual-menu.jpg deleted file mode 100644 index 4eb9afce463258c5780dbd28bf097d3a830afc35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7420 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 vd(BrVye5s^9s**N6@pZVPIX0VU9jfn$FIzsfgb diff --git a/docs/images/manual-run.jpg b/docs/images/manual-run.jpg deleted file mode 100644 index 95ba0b941a19ae9a09adf08ed58430f87c61ba35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30266 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 diff --git a/docs/manual.html b/docs/manual.html index feef3fe..4cd667b 100644 --- a/docs/manual.html +++ b/docs/manual.html @@ -1,132 +1,547 @@ - - - - Sequence Demarcation Tool 2.0.0 Beta2 - - -

-

Sequence Demarcation Tool2.0.0 Beta2

-

Description

-

- SDT 2.0.0 is a standalone application for Windows/Mac/Linux. It allows - analysis of FASTA files or SDT/SDT2 matrices using pairwise alignments - and computes pairwise identity scores. Clustering is available via - Neighbor-Joining or UPGMA. Results are visualized as a heatmap and a - distribution plot. -

-

Features

-

I. Main Loading Screen

- -

- Select a file via Select File. For FASTA, the - Run Options screen is loaded. For SDT/SDT2 matrices, the - Viewer screen is loaded. -

+ + + + Sequence Demarcation Tool 2.0.0 Beta 4 + + + + +
+

Sequence Demarcation Tool 2.0.0 Beta 4

+
+ +

Description

+

+ Sequence Demarcation Tool 2 (SDT 2) is a standalone application for Windows, Mac, and Linux, created as the modern + successor to the original SDT. Like its predecessor, SDT2 is designed to explore, visualize, and demarcate + biological sequences through lightning-fast global pairwise sequence alignments. + SDT2 employs the highly optimized Parasail library for Needleman-Wunsch global sequence alignments. Copmbined with + seamless multiprocessing + support, SDT2 is capable of handling large datasets and longer sequence lengths. + Alignments can be organized into easy-to-interpret clusters using Neighbor + Joining or UPGMA phylogenies. Additionally, SDT2 utilizes the powerful D3 graphing library to visualize pairwise + sequence identities in a highly customizable, interactive lower triangle heatmap, which can be exported as + high-resolution vector images. The tool also provides distribution statistics for pairwise sequence identity values, + sequence lengths, and GC content, which can be displayed in either histogram or violin plot formats. +

+ +

Getting Started

-

III. File Input

+

Main Loading Screen

+

+ When first launched SDT2, the loading interface provides two primary options for loading data: +

+
+ SDT2 Main Loading Screen +
+ +

I. File Selection

+

Click "Select FASTA or SDT Matrix file..." to choose from:

+
    +
  • FASTA files (`.fasta`, `.fas`, `.faa`, `.fnt`, `.fa`)
  • +
  • SDT Matrix files (`.csv`, `.txt`)
  • +
  • Previously saved SDT files (`.sdt`)
  • +
+ +

II. Recent Files

A section displaying recently used files for quick access + +
+
+
+

For FASTA files, the Runner Interface screen is loaded to prepare for sequence alignment and analysis.

+

For SDT/SDT2 matrices, theViewer screen is loaded, and the pre-run data is displayed as a heatmap.

+

Relocated files will still show in the Recent Files directory if you have moved them since the last they were used

+
+ +

Application Run Interface

+

+ Once a file is selected, the application interface displays several key components and controls. +

+ + + Application Run Interface + + +
+
+ Data File Section +
+
+

Data File Section

    -
  • FASTA or SDT Matrix File: Change the input file.
  • -
  • Select file...: Browse and select the file.
  • +
  • Data File: Displays the selected file name from the user's file selection
  • +
  • Select file... Button to change or browse for a different file
+
+
-

IV. Run Settings

+ +
+
+ Reorder By Section +
+
+

Reorder by

+

+ SDT2 offers sequence order rearrangement based on a phylogenetic tree to better organize the evolutionary relationships of the sequences: +

    -
  • - Clustering Method: Select clustering by Neighbor-Joining, - UPGMA, or None. +
  • Toggle switch to enable/disable phylogenetic reordering
  • +
  • If enabled, choose tree construction method: +
      +
    • Neighbor-Joining: Constructs a tree based on minimizing the total branch length
    • +
    • UPGMA: Creates a tree using average genetic distances
    • +
    • None: Sequences remain in the original order of the input data
    • +
  • -
  • Alignment Type: Choose local or global alignment.
+
+
-

V. Compute Performance

+ +
+
+ Performance Settings +
+
+

Performance Settings

    -
  • Performance Selection: Choose Best, Balanced, or Low.
  • -
  • Processing Cores: Specify the number of cores to use.
  • +
  • Cores: Slider to adjust computational cores used
  • +
  • Memory: Meter showing estimated memory usage
-

VI. Run Button

-

Run: Start the sequence comparison process.

+

Starting Analysis

+
    +
  • Start Analysis button becomes active when all requirements are met
  • +
  • Keyboard shortcut: Ctrl/Cmd/Alt + Enter
  • +
+
+
+ +

Performance

+

The core selection feature in SDT2 significantly increases both compute speed and memory usage during analysis. The + application leverages Python's Multiprocessing capabilities to dramatically increase processing speed through + parallelization. By distributing the computational workload across multiple CPU cores, analysis times can be reduced + by orders of magnitude. + However, users should be aware that increased parallelization comes with higher memory requirements. Each additional + core allocated to the analysis requires its own memory space, causing total memory usage to scale with the number of + cores selected. The application provides best-estimate memory usage indicators to help users understand these + increasing memory requirements and make appropriate selections based on their available system resources.

+
+

Note: Users on systems that can use hard disk space as a page file to increase available memory may be + able to align very long sequences (100-200kb) by setting cores to a minimal value. However, this approach may + cause system instability and should be used at your own risk. Even with additional virtual memory, the system + performance may degrade significantly when physical memory limits are exceeded.

+
-

VII. Advanced Settings

- -

Select Folder: Choose an output directory for alignments.

+

Menu and File Operations

+
+
+ File Menu Interface +
+
+

The application menu provides access to all core functions:

+
    +
  • New: Start a new SDT2 session
  • +
  • Open...: Select and open a file
  • +
  • Open Recent: Access a submenu of recently used files
  • +
  • Save: Save the current analysis
  • +
  • Save As...: Save the current analysis with a new name or location
  • +
  • Export...: Export the current visualization or data (see Export section)
  • +
  • Close: Close the current file
  • +
  • Manual: Access this user manual
  • +
  • About: View application information, version, and credits
  • +
  • Exit: Close the application
  • +
+
+
+ +

Loader Interface

+
+
+ Loader Interface +
+
+

During analysis:

+
    +
  • Progress bar showing current stage
  • +
  • Estimated time remaining
  • +
  • Option to cancel the run
  • +
+
+
-

Alignment Output Folder

-

Select...: Choose the folder for alignment output files.

+

Visualization Options

-

VIII. Menu

- +

Heatmap

+
+
+ Heatmap Visualization +
+

- Provides options to load a new file, export change settings, and view manual and - SDT2 project information. + The heatmap visualization in SDT2 provides a color-coded representation of pairwise sequence identity. + It displays sequence relationships in a triangular matrix format where each cell represents the percent + identity between two sequences.

+
+
-

IX. Export Data

- +
+
+ Heatmap Colorscale Options +
+
+

Colorscale

    -
  • Output Folder: Enter or select the path for saving data.
  • -
  • - Cluster By Percent Identity: Enable or disable clustering. -
  • -
  • Thresholds: Set threshold values for clustering.
  • -
  • Actions: Cancel or Export.
  • +
  • Colorscale Selection: Choose from various predefined color schemes (Portland, Viridis, Plasma, etc.)
  • +
  • Reverse: Toggle to invert the color scale direction
  • +
  • Cell Spacing: Adjust the gap between cells in the heatmap matrix
  • +
  • Discrete Cutoff Values (Discrete Colorscale Only): Set thresholds to create distinct color regions
-

X. Heatmap

- -

Heatmap Settings

+

Percent Identities

+

Toggle this option to show or hide percent pairwise identity values within each cell of the heatmap.

    -
  • Color Scale: - Choose the heatmap color scheme.
  • -
  • Cell Spacing: - Adjust the spacing between cells.
  • -
  • Percent Identities: - Set decimal precision and font size.
  • -
  • Axis Labels: - Set font size and rotation for X and Y labels.
  • -
  • Scale Bar: - Adjust height, width, padding, and min/max values.
  • +
  • Precision: Select the number of decimal places to display for percent identities (0, 1, or 2)
  • +
  • Font Size: Adjust the text size for the percentage values
- -

XI. Distribution Plot

- -

Layout options

+

Plot Titles

+

Toggle this option to show or hide plot titles on the heatmap.

+
    +
  • Font Type: Choose between Sans Serif or Monospace
  • +
  • Title and Subtitle: Enter the desired text to appear above the heatmap
  • +
+ +

Axis Labels

+

Toggle this option to show or hide sequence identifiers along the axes of the heatmap.

+
    +
  • Font Size: Adjust font size for X and Y axis labels
  • +
  • Rotation: Set rotation angle for X and Y labels
  • +
+ +

Scale Bar

+

Toggle to show or hide the color reference scale.

    -
  • Title Text: Set the plot title.
  • -
  • Grid: Toggle grid lines.
  • -
  • Tick Labels: Toggle tick labels.
  • -
  • Axis Lines: Toggle axis lines.
  • -
  • Axis Title: Toggle axis title.
  • +
  • Height: Adjust the height of the scale bar
  • +
  • Width: Adjust the width of the scale bar
  • +
  • Min: Adjust the minimum value represented in on the color scale
  • +
  • Max: Adjust the maximum value represented in on the colorscale
+
+
+
+

Note: Displaying percentage values in large datasets may significantly impact rendering performance.

+
+ + +

Distribution Plots

+

+ SDT2 provides visualization tools for examining the distribution of your sequence data: + Histogram and Violin plots. +

+ +

Histogram

-

Bar Plot

+ Histogram Example +

+ Histograms divide your data into bins and display the frequency of values within each bin as + bars. This helps identify patterns, peaks, and outliers in your sequence data. +

+
+
+ Histogram Controls +
+
+

Data Set Options

+

Choose which data to visualize:

+
    +
  • Scores: Pairwise sequence identity percentages
  • +
  • GC Content: Percentage of G and C nucleotides in each sequence
  • +
  • Length: Number of nucleotides in each sequence
  • +
    -
  • Color: Set bar colors.
  • -
  • Outline: Set bar outline color and width.
  • +
  • Toggle Buttons: Show or hide grid, axis lines, labels, and tick values
  • +
  • Orientation: Choose between Vertical or Horizontal display
+

Histogram Options

+
    +
  • Bin Color: Click the color box to select the fill color for the histogram bars
  • +
  • Bin Width: Adjust the width of values included in each bin
  • +
  • Outline Color: Click the color box select the color for bar outlines
  • +
  • Outline Width: Adjust the thickness of bar outlines
  • +
  • Bar Gap: Control the spacing between bars
  • +
  • Plot Titles: Configure title and axis labels
  • +
+
+
-

Line Plot

+

Violin Plot

+ Violin Plot Example +

+ Violin plots combine box plots with kernel density plots to show the distribution shape, + central tendency, and variability of your data. +

+
+
+ Violin buttons + Violin options bar +
+
+

Data Set Options

+

Choose which data to visualize:

+
    +
  • Scores: Pairwise sequence identity percentages
  • +
  • GC Content: Percentage of G and C nucleotides in each sequence
  • +
  • Length: Number of nucleotides in each sequence
  • +
    -
  • Shape: Set the shape of the line plot.
  • -
  • Color: Set the line color.
  • -
  • Width: Adjust the line width.
  • +
  • Toggle Buttons: Toggle the display of: grid, axis lines, tick values, and mean-line
  • +
  • Orientation: Choose between Vertical or Horizontal plot orientation
+

Violin Options

+
    +
  • Band Width: Control the smoothness of the violin curve
  • +
  • Fill Color: Click the color box to customize the fill color within the violin
  • +
  • Line Color: Click the color box to customize the line color of the violin
  • +
  • Line Width: Adjust the thickness of the violin outline
  • +
+

Box Options

+
    +
  • Box Width: Control the width of the box plot
  • +
  • Fill/Line Color: Customize the appearance of the box
  • +
  • Whiskers: Control the whisker lines extending from the box
  • +
+

Points Options

:(Examples in Vertical Orientation) +
    +
  • Size: Controls the diameter of each data point in pixels
  • +
  • Position:Determines the horizontal position offset of points from the central violin/box +
      + +
    • Negative values: Points appear to the left of the violin/box
    • +
    • Positive values: Points appear to the right of the violin/box
    • +
    • Zero: Points are centered on the violin/box
    • +
    • Range: Typically -2.0 to 2.0, where each unit represents a fraction of the violin/box width
    • +
    +
  • +
  • Jitter: Add random horizontal displacement to prevent point overlap +
      +
    • 0: No jittering, points with the same value will overlap precisely
    • +
    • 1: Maximum jittering, points are distributed across the full allowed width
    • +
    • This is especially useful for discrete or rounded data where many points might share the same value
    • +
    +
+
+
+

Note: For large sequence sets, consider hiding individual data points to improve performance.

+
-

Markers

+

Export Options

+
+
+ Export Interface +
+
+

+ The Export dialog provides options to save your visualizations and data for use in publications, presentations, or + further analysis: +

+

Export Dialog Options

    -
  • Symbol: Set marker symbols.
  • -
  • Color: Set marker color.
  • -
  • Size: Adjust marker size.
  • +
  • Output Folder: Specify where exported files will be saved
  • +
  • Image Format: Select the file format for visualization exports +
      +
    • SVG: Recommended for publications, maintains quality at any size
    • +
    • PNG: Good for presentations and web use
    • +
    • JPEG: Suitable for general purpose use, smaller file size
    • +
    +
  • +
  • Cancel/Export: Close dialog or save files with current settings
  • +

  • Cluster by Percent Identity: Toggle whether to cluster sequences in exported data
- - +
+ +

Best Practices

+
    +
  • Check recommended cores and memory before starting analysis
  • +
  • Use recent files for quick access to previous work
  • +
  • When using phylogenetic reordering: +
      +
    • Neighbor-Joining works best for more diverse sequence sets
    • +
    • UPGMA works well for more closely related sequences
    • +
    +
  • +
  • For distribution plots: +
      +
    • Use histograms to understand frequency patterns
    • +
    • Use violin plots to see distribution shape and statistics together
    • +
    • Use contrasting colors for better readability
    • +
    +
  • +
  • For exporting: +
      +
    • Use SVG format for publications
    • +
    • PNG or JPEG formats are good for presentations
    • +
    +
  • +
+ +

Troubleshooting

+

If "Start Analysis" is disabled, check:

+
    +
  1. File is selected
  2. +
  3. Alignment export path (if enabled)
  4. +
  5. No active runs in progress
  6. +
+ +

If performance is slow:

+
    +
  1. Reduce the number of computational cores used
  2. +
  3. For large datasets, disable percent identities display in heatmaps
  4. +
  5. For large datasets, hide individual data points in violin plots
  6. +
  7. Check available system memory before running large analyses
  8. +
+ +

System Requirements

+
    +
  • Multicore processor recommended
  • +
  • Sufficient RAM based on sequence file size
  • +
  • Graphics card supporting hardware acceleration
  • +
  • Tested compatible with Windows 10 and 11, macOS, and Linux
  • +
+ +
+

SDT2 Documentation © 2023-2025 | Version 2.0.0 Beta 4

+ + + + \ No newline at end of file diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 309b8d7..7c8f2ec 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -27,7 +27,6 @@ export const D3CanvasHeatmap = ({ showPercentIdentities, showTitles, title, - subtitle, axis_labels, showscale, margin, @@ -98,7 +97,7 @@ export const D3CanvasHeatmap = ({ let textFontSize = annotation_font_size; if (maxTextWidth > cellSize) { - textFontSize = annotation_font_size / (1 + 0.35 * roundTo); + textFontSize = annotation_font_size / (cellSize * roundTo); } // Draw cells @@ -135,8 +134,6 @@ export const D3CanvasHeatmap = ({ ctx.textBaseline = "top"; ctx.font = `Bold 20px ${titleFont.family}`; ctx.fillText(title, width / 2, margin.top - 20); - ctx.font = `20px ${titleFont.family}`; - ctx.fillText(subtitle, width / 2, margin.top); } const axisGap = 5; @@ -236,7 +233,6 @@ export const D3CanvasHeatmap = ({ roundTo, showTitles, title, - subtitle, annotation_font_size, axlabel_xfontsize, axlabel_yfontsize, diff --git a/frontend/src/components/D3Heatmap.tsx b/frontend/src/components/D3Heatmap.tsx index c72d037..dfcb093 100644 --- a/frontend/src/components/D3Heatmap.tsx +++ b/frontend/src/components/D3Heatmap.tsx @@ -28,7 +28,6 @@ export const D3Heatmap = ({ titleFont, showTitles, title, - subtitle, showscale, axis_labels, margin, @@ -140,8 +139,7 @@ export const D3Heatmap = ({ .attr("font-family", titleFont.family) .attr("font-size", "20px") .attr("x", (width - margin.left - margin.right) / 2) - .attr("y", margin.top - margin.bottom + 18) - .text(subtitle); + .attr("y", margin.top - margin.bottom + 18); } if (axis_labels) { @@ -252,7 +250,6 @@ export const D3Heatmap = ({ titleFont, showTitles, title, - subtitle, showscale, axis_labels, margin, diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index b5bb2fa..227540c 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -205,64 +205,6 @@ export const HeatmapSidebar = ({
-
- { - updateSettings({ - showTitles: value, - }); - }} - > - Plot Titles - -
-
- - -
- -
- updateSettings({ title: value })} - value={settings.title} - > - - - -
-
- updateSettings({ subtitle: value })} - value={settings.subtitle} - > - - - -
-
-
+
+ { + updateSettings({ + showTitles: value, + }); + }} + > + Plot Titles + +
+
+ + +
+ +
+ updateSettings({ title: value })} + value={settings.title} + > + + + +
+
+
diff --git a/frontend/src/components/Histogram.tsx b/frontend/src/components/Histogram.tsx index ad8cbf3..9c7e9cf 100644 --- a/frontend/src/components/Histogram.tsx +++ b/frontend/src/components/Histogram.tsx @@ -75,11 +75,7 @@ export const Histogram = ({ ...(settings.showTitles ? { title: { - text: - settings.title + - (settings.subtitle - ? `
${settings.subtitle}` - : ""), + text: settings.title, pad: { t: 100, r: 0, diff --git a/frontend/src/components/HistogramSidebar.tsx b/frontend/src/components/HistogramSidebar.tsx index b9278ca..a20d18f 100644 --- a/frontend/src/components/HistogramSidebar.tsx +++ b/frontend/src/components/HistogramSidebar.tsx @@ -265,15 +265,6 @@ export const HistogramSidebar = ({ -
- updateSettings({ subtitle: value })} - value={settings.subtitle} - > - - - -
updateSettings({ xtitle: value })} diff --git a/frontend/src/components/Raincloud.tsx b/frontend/src/components/Raincloud.tsx index 68b4485..0de0ee7 100644 --- a/frontend/src/components/Raincloud.tsx +++ b/frontend/src/components/Raincloud.tsx @@ -84,11 +84,7 @@ export const Raincloud = ({ ...(settings.showTitles ? { title: { - text: - settings.title + - (settings.subtitle - ? `
${settings.subtitle}` - : ""), + text: settings.title, pad: { t: 100, r: 0, diff --git a/frontend/src/components/RaincloudSiderbar.tsx b/frontend/src/components/RaincloudSiderbar.tsx index 01cd387..6179c72 100644 --- a/frontend/src/components/RaincloudSiderbar.tsx +++ b/frontend/src/components/RaincloudSiderbar.tsx @@ -301,15 +301,7 @@ export const RaincloudSidebar = ({
-
- updateSettings({ subtitle: value })} - value={settings.subtitle} - > - - - -
+
updateSettings({ xtitle: value })} diff --git a/frontend/src/components/Violin.tsx b/frontend/src/components/Violin.tsx index 3a96d5d..5ca2903 100644 --- a/frontend/src/components/Violin.tsx +++ b/frontend/src/components/Violin.tsx @@ -196,9 +196,6 @@ export const Violin = ({ b: 0, l: 0, }, - subtitle: { - text: settings.subtitle, - }, }, } : {}), diff --git a/frontend/src/components/ViolinSidebar.tsx b/frontend/src/components/ViolinSidebar.tsx index 5be9c8d..0af7ff5 100644 --- a/frontend/src/components/ViolinSidebar.tsx +++ b/frontend/src/components/ViolinSidebar.tsx @@ -445,16 +445,6 @@ export const ViolinSidebar = ({ -
- updateSettings({ subtitle: value })} - value={settings.subtitle} - > - - - -
-
updateSettings({ xtitle: value })} diff --git a/frontend/src/distributionState.ts b/frontend/src/distributionState.ts index 7ce7232..8f311a2 100644 --- a/frontend/src/distributionState.ts +++ b/frontend/src/distributionState.ts @@ -39,7 +39,6 @@ export type DistributionState = { dtickx: number; dticky: number; title: string; - subtitle: string; xtitle: string; ytitle: string; plotOrientation: "horizontal" | "vertical"; @@ -63,7 +62,6 @@ export type DistributionState = { editable: boolean; dticks: number; title: string; - subtitle: string; xtitle: string; ytitle: string; titleFont: "Monospace" | "Sans Serif"; @@ -90,7 +88,6 @@ export type DistributionState = { whiskerWidth: number; plotOrientation: "horizontal" | "vertical"; title: string; - subtitle: string; xtitle: string; ytitle: string; titleFont: "Monospace" | "Sans Serif"; @@ -123,7 +120,6 @@ export const DistributionStateSchema = z.object({ dtickx: z.number(), dticky: z.number(), title: z.string(), - subtitle: z.string(), xtitle: z.string(), ytitle: z.string(), plotOrientation: z.enum(["horizontal", "vertical"]), @@ -147,7 +143,6 @@ export const DistributionStateSchema = z.object({ editable: z.boolean(), dticks: z.number(), title: z.string(), - subtitle: z.string(), xtitle: z.string(), ytitle: z.string(), titleFont: z.enum(["Monospace", "Sans Serif"]), @@ -174,7 +169,6 @@ export const DistributionStateSchema = z.object({ whiskerWidth: z.number(), plotOrientation: z.enum(["horizontal", "vertical"]), title: z.string(), - subtitle: z.string(), xtitle: z.string(), ytitle: z.string(), titleFont: z.enum(["Monospace", "Sans Serif"]), @@ -207,7 +201,6 @@ export const initialDistributionState: DistributionState = { dtickx: 5, dticky: 1, showTitles: true, - subtitle: "Histogram", title: "Histogram", xtitle: "Percent Identity", ytitle: "Frequency", @@ -234,7 +227,6 @@ export const initialDistributionState: DistributionState = { makeEditable: true, dticks: 5, showTitles: true, - subtitle: "Raincloud Plot", title: "Raincloud Plot", xtitle: "Percent Identity", ytitle: "Genome", @@ -266,7 +258,6 @@ export const initialDistributionState: DistributionState = { showTitles: true, showTickLabels: true, title: "Violin Plot", - subtitle: "Violin Plot", xtitle: "", ytitle: "", titleFont: "Sans Serif", From 3e9bd61dedb088b4a91ccf487494d71285830e16 Mon Sep 17 00:00:00 2001 From: Michael Lund Date: Sat, 1 Mar 2025 16:13:26 -0700 Subject: [PATCH 02/57] handing off --- backend/src/app.py | 46 + docs/images/app.png | Bin 7402 -> 0 bytes frontend/src/components/ClusterControls.tsx | 0 package-lock.json | 5931 +++++++++++++++++++ 4 files changed, 5977 insertions(+) delete mode 100644 docs/images/app.png create mode 100644 frontend/src/components/ClusterControls.tsx create mode 100644 package-lock.json diff --git a/backend/src/app.py b/backend/src/app.py index e6c2065..781769f 100644 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -1,6 +1,9 @@ import os import sys +##test +import cluster + current_file_path = os.path.abspath(os.path.join(os.path.dirname(__file__))) sys.path.append(os.path.join(current_file_path, "../../")) sys.path.append(os.path.join(current_file_path, ".")) @@ -531,6 +534,49 @@ def get_data(self, doc_id: str): ) return json.dumps(data_to_dump) + ###cluster apio test + + def getClusterData(self, doc_id: str): + doc = get_document(doc_id) + if doc is None: + raise Exception(f"Could not find document: {doc_id}") + matrix_path = get_matrix_path(doc) + file_base = os.path.splitext(os.path.basename(matrix_path))[0].removesuffix("_mat") + cluster_file =os.path.join(doc.tempdir_path,f"{file_base}_cluster.csv") + if not os.path.exists(cluster_file): + return {"exists": False} + try: + df=read_csv(cluster_file) + return {"exists": True, + "data": df.to_dict(orient="records") + } + except Exception as e: + print(f"Error reading cluster file: {e}") + return {"exists": False, "error": str(e)} + + + + def generateClusterData(self, doc_id: str, threshold_one: float, threshold_two: float = 0): ## T2 set to zero for now to just get one working + doc = get_document(doc_id) + if doc is None: + raise Exception(f"Could not find document: {doc_id}") + matrix_path = get_matrix_path(doc) + try: + cluster.export(matrix_path, threshold_one, threshold_two) + file_base = os.path.splitext(os.path.basename(matrix_path))[0].removesuffix("_mat") + cluster_file = os.path.join(doc.tempdir_path, f"{file_base}_cluster.csv") + + # Check if the file was created + if os.path.exists(cluster_file): + return {"success": True, "path": cluster_file} + else: + return {"success": False, "error": "Cluster file not created"} + except Exception as e: + print(f"Error generating cluster data: {e}") + return {"success": False, "error": str(e)} + + + def new_doc(self): id = make_doc_id() new_document(id) diff --git a/docs/images/app.png b/docs/images/app.png deleted file mode 100644 index 92b0b99d2dea578ffde4c87ab72fa232dc0d9149..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7402 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.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk/node_modules/supports-color/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@choojs/findup": { + "version": "0.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "commander": "^2.15.1" + }, + "bin": { + "findup": "bin/findup.js" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.18.3", + "license": "MIT", + "dependencies": { + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.7.7", + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.3", + "@formatjs/icu-skeleton-parser": "1.8.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.1", + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.5.4", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@internationalized/date": { + "version": "3.6.0", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/message": { + "version": "3.1.6", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "intl-messageformat": "^10.1.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.0", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/string": { + "version": "3.2.5", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "license": "ISC", + "peer": true, + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/geojson-types": { + "version": "1.0.2", + "license": "ISC", + "peer": true + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/mapbox-gl-supported": { + "version": "1.5.0", + "license": "BSD-3-Clause", + "peer": true, + "peerDependencies": { + "mapbox-gl": ">=0.32.1 <2.0.0" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "license": "ISC", + "peer": true + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "1.2.5", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.0", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@plotly/d3": { + "version": "3.8.1", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@plotly/d3-sankey": { + "version": "0.7.2", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-array": "1", + "d3-collection": "1", + "d3-shape": "^1.2.0" + } + }, + "node_modules/@plotly/d3-sankey-circular": { + "version": "0.33.1", + "license": "MIT", + "peer": true, + "dependencies": { + "d3-array": "^1.2.1", + "d3-collection": "^1.0.4", + "d3-shape": "^1.2.0", + "elementary-circuits-directed-graph": "^1.0.4" + } + }, + "node_modules/@plotly/d3-sankey-circular/node_modules/d3-array": { + "version": "1.2.4", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@plotly/d3-sankey/node_modules/d3-array": { + "version": "1.2.4", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@plotly/mapbox-gl": { + "version": "1.13.4", + "license": "SEE LICENSE IN LICENSE.txt", + "peer": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.1.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/@plotly/point-cluster": { + "version": "3.1.9", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "binary-search-bounds": "^2.0.4", + "clamp": "^1.0.1", + "defined": "^1.0.0", + "dtype": "^2.0.0", + "flatten-vertex-data": "^1.0.2", + "is-obj": "^1.0.1", + "math-log2": "^1.0.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0" + } + }, + "node_modules/@react-aria/breadcrumbs": { + "version": "3.5.19", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/link": "^3.7.7", + "@react-aria/utils": "^3.26.0", + "@react-types/breadcrumbs": "^3.7.9", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/button": { + "version": "3.11.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/interactions": "^3.22.5", + "@react-aria/toolbar": "3.0.0-beta.11", + "@react-aria/utils": "^3.26.0", + "@react-stately/toggle": "^3.8.0", + "@react-types/button": "^3.10.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/calendar": { + "version": "3.6.0", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/utils": "^3.26.0", + "@react-stately/calendar": "^3.6.0", + "@react-types/button": "^3.10.1", + "@react-types/calendar": "^3.5.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/checkbox": { + "version": "3.15.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/form": "^3.0.11", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/toggle": "^3.10.10", + "@react-aria/utils": "^3.26.0", + "@react-stately/checkbox": "^3.6.10", + "@react-stately/form": "^3.1.0", + "@react-stately/toggle": "^3.8.0", + "@react-types/checkbox": "^3.9.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/collections": { + "version": "3.0.0-alpha.6", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/color": { + "version": "3.0.2", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/numberfield": "^3.11.9", + "@react-aria/slider": "^3.7.14", + "@react-aria/spinbutton": "^3.6.10", + "@react-aria/textfield": "^3.15.0", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-stately/color": "^3.8.1", + "@react-stately/form": "^3.1.0", + "@react-types/color": "^3.0.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/combobox": { + "version": "3.11.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/listbox": "^3.13.6", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/menu": "^3.16.0", + "@react-aria/overlays": "^3.24.0", + "@react-aria/selection": "^3.21.0", + "@react-aria/textfield": "^3.15.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/collections": "^3.12.0", + "@react-stately/combobox": "^3.10.1", + "@react-stately/form": "^3.1.0", + "@react-types/button": "^3.10.1", + "@react-types/combobox": "^3.13.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/datepicker": { + "version": "3.12.0", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@internationalized/number": "^3.6.0", + "@internationalized/string": "^3.2.5", + "@react-aria/focus": "^3.19.0", + "@react-aria/form": "^3.0.11", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/spinbutton": "^3.6.10", + "@react-aria/utils": "^3.26.0", + "@react-stately/datepicker": "^3.11.0", + "@react-stately/form": "^3.1.0", + "@react-types/button": "^3.10.1", + "@react-types/calendar": "^3.5.0", + "@react-types/datepicker": "^3.9.0", + "@react-types/dialog": "^3.5.14", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/dialog": { + "version": "3.5.20", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/overlays": "^3.24.0", + "@react-aria/utils": "^3.26.0", + "@react-types/dialog": "^3.5.14", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/disclosure": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.26.0", + "@react-stately/disclosure": "^3.0.0", + "@react-types/button": "^3.10.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/dnd": { + "version": "3.8.0", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/string": "^3.2.5", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/overlays": "^3.24.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/dnd": "^3.5.0", + "@react-types/button": "^3.10.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/focus": { + "version": "3.19.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/form": { + "version": "3.0.11", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-stately/form": "^3.1.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/grid": { + "version": "3.11.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/collections": "^3.12.0", + "@react-stately/grid": "^3.10.0", + "@react-stately/selection": "^3.18.0", + "@react-types/checkbox": "^3.9.0", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/gridlist": { + "version": "3.10.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/grid": "^3.11.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/collections": "^3.12.0", + "@react-stately/list": "^3.11.1", + "@react-stately/tree": "^3.8.6", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/i18n": { + "version": "3.12.4", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@internationalized/message": "^3.1.6", + "@internationalized/number": "^3.6.0", + "@internationalized/string": "^3.2.5", + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.22.5", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/label": { + "version": "3.7.13", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/link": { + "version": "3.7.7", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-types/link": "^3.5.9", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/listbox": { + "version": "3.13.6", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/collections": "^3.12.0", + "@react-stately/list": "^3.11.1", + "@react-types/listbox": "^3.5.3", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/live-announcer": { + "version": "3.4.1", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-aria/menu": { + "version": "3.16.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/overlays": "^3.24.0", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/collections": "^3.12.0", + "@react-stately/menu": "^3.9.0", + "@react-stately/selection": "^3.18.0", + "@react-stately/tree": "^3.8.6", + "@react-types/button": "^3.10.1", + "@react-types/menu": "^3.9.13", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/meter": { + "version": "3.4.18", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/progress": "^3.4.18", + "@react-types/meter": "^3.4.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/numberfield": { + "version": "3.11.9", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/spinbutton": "^3.6.10", + "@react-aria/textfield": "^3.15.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/form": "^3.1.0", + "@react-stately/numberfield": "^3.9.8", + "@react-types/button": "^3.10.1", + "@react-types/numberfield": "^3.8.7", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/overlays": { + "version": "3.24.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-stately/overlays": "^3.6.12", + "@react-types/button": "^3.10.1", + "@react-types/overlays": "^3.8.11", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/progress": { + "version": "3.4.18", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/label": "^3.7.13", + "@react-aria/utils": "^3.26.0", + "@react-types/progress": "^3.5.8", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/radio": { + "version": "3.10.10", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/form": "^3.0.11", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/utils": "^3.26.0", + "@react-stately/radio": "^3.10.9", + "@react-types/radio": "^3.8.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/searchfield": { + "version": "3.7.11", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/textfield": "^3.15.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/searchfield": "^3.5.8", + "@react-types/button": "^3.10.1", + "@react-types/searchfield": "^3.5.10", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/select": { + "version": "3.15.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/form": "^3.0.11", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/listbox": "^3.13.6", + "@react-aria/menu": "^3.16.0", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-stately/select": "^3.6.9", + "@react-types/button": "^3.10.1", + "@react-types/select": "^3.9.8", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/selection": { + "version": "3.21.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-stately/selection": "^3.18.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/separator": { + "version": "3.4.4", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/slider": { + "version": "3.7.14", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/utils": "^3.26.0", + "@react-stately/slider": "^3.6.0", + "@react-types/shared": "^3.26.0", + "@react-types/slider": "^3.7.7", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/spinbutton": { + "version": "3.6.10", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/utils": "^3.26.0", + "@react-types/button": "^3.10.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.7", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/switch": { + "version": "3.6.10", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/toggle": "^3.10.10", + "@react-stately/toggle": "^3.8.0", + "@react-types/shared": "^3.26.0", + "@react-types/switch": "^3.5.7", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/table": { + "version": "3.16.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/grid": "^3.11.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-stately/collections": "^3.12.0", + "@react-stately/flags": "^3.0.5", + "@react-stately/table": "^3.13.0", + "@react-types/checkbox": "^3.9.0", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@react-types/table": "^3.10.3", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/tabs": { + "version": "3.9.8", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/tabs": "^3.7.0", + "@react-types/shared": "^3.26.0", + "@react-types/tabs": "^3.3.11", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/tag": { + "version": "3.4.8", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/gridlist": "^3.10.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/list": "^3.11.1", + "@react-types/button": "^3.10.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/textfield": { + "version": "3.15.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/form": "^3.0.11", + "@react-aria/label": "^3.7.13", + "@react-aria/utils": "^3.26.0", + "@react-stately/form": "^3.1.0", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@react-types/textfield": "^3.10.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/toggle": { + "version": "3.10.10", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-stately/toggle": "^3.8.0", + "@react-types/checkbox": "^3.9.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/toolbar": { + "version": "3.0.0-beta.11", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/tooltip": { + "version": "3.7.10", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-stately/tooltip": "^3.5.0", + "@react-types/shared": "^3.26.0", + "@react-types/tooltip": "^3.4.13", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/tree": { + "version": "3.0.0-beta.2", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/gridlist": "^3.10.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/tree": "^3.8.6", + "@react-types/button": "^3.10.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.26.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.7", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/virtualizer": { + "version": "4.1.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-stately/virtualizer": "^4.2.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/visually-hidden": { + "version": "3.8.18", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/calendar": { + "version": "3.6.0", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@react-stately/utils": "^3.10.5", + "@react-types/calendar": "^3.5.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/checkbox": { + "version": "3.6.10", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/form": "^3.1.0", + "@react-stately/utils": "^3.10.5", + "@react-types/checkbox": "^3.9.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/collections": { + "version": "3.12.0", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/color": { + "version": "3.8.1", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/number": "^3.6.0", + "@internationalized/string": "^3.2.5", + "@react-aria/i18n": "^3.12.4", + "@react-stately/form": "^3.1.0", + "@react-stately/numberfield": "^3.9.8", + "@react-stately/slider": "^3.6.0", + "@react-stately/utils": "^3.10.5", + "@react-types/color": "^3.0.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/combobox": { + "version": "3.10.1", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/form": "^3.1.0", + "@react-stately/list": "^3.11.1", + "@react-stately/overlays": "^3.6.12", + "@react-stately/select": "^3.6.9", + "@react-stately/utils": "^3.10.5", + "@react-types/combobox": "^3.13.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/data": { + "version": "3.12.0", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/datepicker": { + "version": "3.11.0", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@internationalized/string": "^3.2.5", + "@react-stately/form": "^3.1.0", + "@react-stately/overlays": "^3.6.12", + "@react-stately/utils": "^3.10.5", + "@react-types/datepicker": "^3.9.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/disclosure": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/dnd": { + "version": "3.5.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/selection": "^3.18.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/flags": { + "version": "3.0.5", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-stately/form": { + "version": "3.1.0", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/grid": { + "version": "3.10.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/selection": "^3.18.0", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/layout": { + "version": "4.1.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/table": "^3.13.0", + "@react-stately/virtualizer": "^4.2.0", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@react-types/table": "^3.10.3", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/list": { + "version": "3.11.1", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/selection": "^3.18.0", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/menu": { + "version": "3.9.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/overlays": "^3.6.12", + "@react-types/menu": "^3.9.13", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/numberfield": { + "version": "3.9.8", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/number": "^3.6.0", + "@react-stately/form": "^3.1.0", + "@react-stately/utils": "^3.10.5", + "@react-types/numberfield": "^3.8.7", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/overlays": { + "version": "3.6.12", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.5", + "@react-types/overlays": "^3.8.11", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/radio": { + "version": "3.10.9", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/form": "^3.1.0", + "@react-stately/utils": "^3.10.5", + "@react-types/radio": "^3.8.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/searchfield": { + "version": "3.5.8", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.5", + "@react-types/searchfield": "^3.5.10", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/select": { + "version": "3.6.9", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/form": "^3.1.0", + "@react-stately/list": "^3.11.1", + "@react-stately/overlays": "^3.6.12", + "@react-types/select": "^3.9.8", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/selection": { + "version": "3.18.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/slider": { + "version": "3.6.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@react-types/slider": "^3.7.7", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/table": { + "version": "3.13.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/flags": "^3.0.5", + "@react-stately/grid": "^3.10.0", + "@react-stately/selection": "^3.18.0", + "@react-stately/utils": "^3.10.5", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@react-types/table": "^3.10.3", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/tabs": { + "version": "3.7.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/list": "^3.11.1", + "@react-types/shared": "^3.26.0", + "@react-types/tabs": "^3.3.11", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/toggle": { + "version": "3.8.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.5", + "@react-types/checkbox": "^3.9.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/tooltip": { + "version": "3.5.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/overlays": "^3.6.12", + "@react-types/tooltip": "^3.4.13", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/tree": { + "version": "3.8.6", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/selection": "^3.18.0", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.10.5", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/virtualizer": { + "version": "4.2.0", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/breadcrumbs": { + "version": "3.7.9", + "license": "Apache-2.0", + "dependencies": { + "@react-types/link": "^3.5.9", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/button": { + "version": "3.10.1", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/calendar": { + "version": "3.5.0", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/checkbox": { + "version": "3.9.0", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/color": { + "version": "3.0.1", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@react-types/slider": "^3.7.7" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/combobox": { + "version": "3.13.1", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/datepicker": { + "version": "3.9.0", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@react-types/calendar": "^3.5.0", + "@react-types/overlays": "^3.8.11", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/dialog": { + "version": "3.5.14", + "license": "Apache-2.0", + "dependencies": { + "@react-types/overlays": "^3.8.11", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/form": { + "version": "3.7.8", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/grid": { + "version": "3.2.10", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/link": { + "version": "3.5.9", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/listbox": { + "version": "3.5.3", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/menu": { + "version": "3.9.13", + "license": "Apache-2.0", + "dependencies": { + "@react-types/overlays": "^3.8.11", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/meter": { + "version": "3.4.5", + "license": "Apache-2.0", + "dependencies": { + "@react-types/progress": "^3.5.8" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/numberfield": { + "version": "3.8.7", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/overlays": { + "version": "3.8.11", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/progress": { + "version": "3.5.8", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/radio": { + "version": "3.8.5", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/searchfield": { + "version": "3.5.10", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@react-types/textfield": "^3.10.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/select": { + "version": "3.9.8", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.26.0", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/slider": { + "version": "3.7.7", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/switch": { + "version": "3.5.7", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/table": { + "version": "3.10.3", + "license": "Apache-2.0", + "dependencies": { + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/tabs": { + "version": "3.3.11", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/textfield": { + "version": "3.10.0", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/tooltip": { + "version": "3.4.13", + "license": "Apache-2.0", + "dependencies": { + "@react-types/overlays": "^3.8.11", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.20.0", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/helpers": { + "version": "0.5.11", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@turf/area": { + "version": "6.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/bbox": { + "version": "6.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/centroid": { + "version": "6.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/helpers": { + "version": "6.5.0", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/meta": { + "version": "6.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/bun": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "bun-types": "1.1.37" + } + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.12.14", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/plotly.js": { + "version": "2.29.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.38", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.17", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-plotly.js": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/plotly.js": "*", + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tinycolor2": { + "version": "1.4.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/abs-svg-path": { + "version": "0.1.1", + "license": "MIT", + "peer": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/almost-equal": { + "version": "1.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-bounds": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-normalize": { + "version": "1.1.4", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.0" + } + }, + "node_modules/array-range": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/array-rearrange": { + "version": "2.2.2", + "license": "MIT", + "peer": true + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/binary-search-bounds": { + "version": "2.0.5", + "license": "MIT", + "peer": true + }, + "node_modules/bit-twiddle": { + "version": "1.0.2", + "license": "MIT", + "peer": true + }, + "node_modules/bitmap-sdf": { + "version": "1.0.4", + "license": "MIT", + "peer": true + }, + "node_modules/bl": { + "version": "2.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/bun-types": { + "version": "1.1.37", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "~20.12.8", + "@types/ws": "~8.5.10" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001651", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canvas-fit": { + "version": "1.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "element-size": "^1.1.1" + } + }, + "node_modules/clamp": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/client-only": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-alpha": { + "version": "1.0.4", + "license": "MIT", + "peer": true, + "dependencies": { + "color-parse": "^1.3.8" + } + }, + "node_modules/color-id": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "clamp": "^1.0.1" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT", + "peer": true + }, + "node_modules/color-normalize": { + "version": "1.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "clamp": "^1.0.1", + "color-rgba": "^2.1.1", + "dtype": "^2.0.0" + } + }, + "node_modules/color-parse": { + "version": "1.3.8", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "^1.0.0", + "defined": "^1.0.0", + "is-plain-obj": "^1.1.0" + } + }, + "node_modules/color-rgba": { + "version": "2.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "clamp": "^1.0.1", + "color-parse": "^1.3.8", + "color-space": "^1.14.6" + } + }, + "node_modules/color-space": { + "version": "1.16.0", + "license": "MIT", + "peer": true, + "dependencies": { + "hsluv": "^0.0.3", + "mumath": "^3.3.4" + } + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "license": "MIT", + "peer": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concurrently": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/country-regex": { + "version": "1.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/css-font": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-global-keywords": "^1.0.1", + "css-system-font-keywords": "^1.0.0", + "pick-by-alias": "^1.2.0", + "string-split-by": "^1.0.0", + "unquote": "^1.1.0" + } + }, + "node_modules/css-font-size-keywords": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/css-font-stretch-keywords": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/css-font-style-keywords": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/css-font-weight-keywords": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/css-global-keywords": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/css-system-font-keywords": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/csscolorparser": { + "version": "1.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/csstype": { + "version": "3.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/d": { + "version": "1.0.2", + "license": "ISC", + "peer": true, + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/d3": { + "version": "7.9.0", + "license": "ISC", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "license": "ISC", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-collection": { + "version": "1.0.7", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-color": { + "version": "3.1.0", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "1.0.6", + "license": "BSD-3-Clause" + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "1.2.1", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "1.12.1", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/d3-geo-projection": { + "version": "2.9.0", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "commander": "2", + "d3-array": "1", + "d3-geo": "^1.12.0", + "resolve": "^1.1.10" + }, + "bin": { + "geo2svg": "bin/geo2svg", + "geograticule": "bin/geograticule", + "geoproject": "bin/geoproject", + "geoquantize": "bin/geoquantize", + "geostitch": "bin/geostitch" + } + }, + "node_modules/d3-geo-projection/node_modules/d3-array": { + "version": "1.2.4", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-geo/node_modules/d3-array": { + "version": "1.2.4", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-hierarchy": { + "version": "1.1.9", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "1.0.9", + "license": "BSD-3-Clause" + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "1.0.7", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-random": { + "version": "3.0.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale/node_modules/d3-time": { + "version": "3.1.0", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "1.3.7", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "1.1.0", + "license": "BSD-3-Clause" + }, + "node_modules/d3-time-format": { + "version": "2.3.0", + "license": "BSD-3-Clause", + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/d3-timer": { + "version": "1.0.10", + "license": "BSD-3-Clause" + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-dispatch": { + "version": "3.0.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-force": { + "version": "3.0.0", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-geo": { + "version": "3.1.1", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-hierarchy": { + "version": "3.1.2", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-path": { + "version": "3.1.0", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-quadtree": { + "version": "3.0.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-shape": { + "version": "3.2.0", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-time": { + "version": "3.1.0", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-time-format": { + "version": "4.1.0", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-timer": { + "version": "3.0.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "license": "MIT", + "peer": true + }, + "node_modules/defined": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delaunator": { + "version": "5.0.1", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/detect-kerning": { + "version": "2.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/draw-svg-path": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "abs-svg-path": "~0.1.1", + "normalize-svg-path": "~0.1.0" + } + }, + "node_modules/dtype": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/dup": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "license": "MIT", + "peer": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "license": "ISC", + "peer": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.6", + "license": "ISC" + }, + "node_modules/element-size": { + "version": "1.1.1", + "license": "MIT", + "peer": true + }, + "node_modules/elementary-circuits-directed-graph": { + "version": "1.3.1", + "license": "MIT", + "peer": true, + "dependencies": { + "strongly-connected-components": "^1.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "peer": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "hasInstallScript": true, + "license": "ISC", + "peer": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "license": "MIT", + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "license": "ISC", + "peer": true, + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "license": "ISC", + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "license": "ISC", + "peer": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "license": "MIT", + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "license": "ISC", + "peer": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/falafel": { + "version": "2.2.5", + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fast-isnumeric": { + "version": "1.1.4", + "license": "MIT", + "peer": true, + "dependencies": { + "is-string-blank": "^1.0.1" + } + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/flatten-vertex-data": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "dtype": "^2.0.0" + } + }, + "node_modules/font-atlas": { + "version": "2.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "css-font": "^1.0.0" + } + }, + "node_modules/font-measure": { + "version": "1.2.2", + "license": "MIT", + "peer": true, + "dependencies": { + "css-font": "^1.2.0" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/geojson-vt": { + "version": "3.2.1", + "license": "ISC", + "peer": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-canvas-context": { + "version": "1.0.2", + "license": "MIT", + "peer": true + }, + "node_modules/get-stream": { + "version": "6.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gl-mat4": { + "version": "1.2.0", + "license": "Zlib", + "peer": true + }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "license": "MIT", + "peer": true + }, + "node_modules/gl-text": { + "version": "1.3.1", + "license": "MIT", + "peer": true, + "dependencies": { + "bit-twiddle": "^1.0.2", + "color-normalize": "^1.5.0", + "css-font": "^1.2.0", + "detect-kerning": "^2.1.2", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "font-atlas": "^2.1.0", + "font-measure": "^1.2.2", + "gl-util": "^3.1.2", + "is-plain-obj": "^1.1.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "parse-unit": "^1.0.1", + "pick-by-alias": "^1.2.0", + "regl": "^2.0.0", + "to-px": "^1.0.1", + "typedarray-pool": "^1.1.0" + } + }, + "node_modules/gl-text/node_modules/regl": { + "name": "@plotly/regl", + "version": "2.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/gl-util": { + "version": "3.1.3", + "license": "MIT", + "peer": true, + "dependencies": { + "is-browser": "^2.0.1", + "is-firefox": "^1.0.3", + "is-plain-obj": "^1.1.0", + "number-is-integer": "^1.0.1", + "object-assign": "^4.1.0", + "pick-by-alias": "^1.2.0", + "weak-map": "^1.0.5" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/glsl-inject-defines": { + "version": "1.0.3", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-token-inject-block": "^1.0.0", + "glsl-token-string": "^1.0.1", + "glsl-tokenizer": "^2.0.2" + } + }, + "node_modules/glsl-resolve": { + "version": "0.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "resolve": "^0.6.1", + "xtend": "^2.1.2" + } + }, + "node_modules/glsl-resolve/node_modules/resolve": { + "version": "0.6.3", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-resolve/node_modules/xtend": { + "version": "2.2.0", + "peer": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/glsl-token-assignments": { + "version": "2.0.2", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-defines": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-tokenizer": "^2.0.0" + } + }, + "node_modules/glsl-token-depth": { + "version": "1.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-descope": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-token-assignments": "^2.0.0", + "glsl-token-depth": "^1.1.0", + "glsl-token-properties": "^1.0.0", + "glsl-token-scope": "^1.1.0" + } + }, + "node_modules/glsl-token-inject-block": { + "version": "1.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-properties": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-scope": { + "version": "1.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-string": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-whitespace-trim": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-tokenizer": { + "version": "2.1.5", + "license": "MIT", + "peer": true, + "dependencies": { + "through2": "^0.6.3" + } + }, + "node_modules/glsl-tokenizer/node_modules/through2": { + "version": "0.6.5", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/glsl-tokenizer/node_modules/through2/node_modules/readable-stream": { + "version": "1.0.34", + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/glsl-tokenizer/node_modules/through2/node_modules/readable-stream/node_modules/isarray": { + "version": "0.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-tokenizer/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder": { + "version": "0.10.31", + "license": "MIT", + "peer": true + }, + "node_modules/glslify": { + "version": "7.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "bl": "^2.2.1", + "concat-stream": "^1.5.2", + "duplexify": "^3.4.5", + "falafel": "^2.1.0", + "from2": "^2.3.0", + "glsl-resolve": "0.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glslify-bundle": "^5.0.0", + "glslify-deps": "^1.2.5", + "minimist": "^1.2.5", + "resolve": "^1.1.5", + "stack-trace": "0.0.9", + "static-eval": "^2.0.5", + "through2": "^2.0.1", + "xtend": "^4.0.0" + }, + "bin": { + "glslify": "bin.js" + } + }, + "node_modules/glslify-bundle": { + "version": "5.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-inject-defines": "^1.0.1", + "glsl-token-defines": "^1.0.0", + "glsl-token-depth": "^1.1.1", + "glsl-token-descope": "^1.0.2", + "glsl-token-scope": "^1.1.1", + "glsl-token-string": "^1.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glsl-tokenizer": "^2.0.2", + "murmurhash-js": "^1.0.0", + "shallow-copy": "0.0.1" + } + }, + "node_modules/glslify-deps": { + "version": "1.3.2", + "license": "ISC", + "peer": true, + "dependencies": { + "@choojs/findup": "^0.2.0", + "events": "^3.2.0", + "glsl-resolve": "0.0.1", + "glsl-tokenizer": "^2.0.0", + "graceful-fs": "^4.1.2", + "inherits": "^2.0.1", + "map-limit": "0.0.1", + "resolve": "^1.0.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC", + "peer": true + }, + "node_modules/grid-index": { + "version": "1.1.0", + "license": "ISC", + "peer": true + }, + "node_modules/has-hover": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "is-browser": "^2.0.1" + } + }, + "node_modules/has-passive-events": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "is-browser": "^2.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hsluv": { + "version": "0.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/immutable": { + "version": "4.3.4", + "devOptional": true, + "license": "MIT" + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC", + "peer": true + }, + "node_modules/internmap": { + "version": "2.0.3", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/intl-messageformat": { + "version": "10.5.13", + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.3", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.7", + "tslib": "^2.4.0" + } + }, + "node_modules/is-browser": { + "version": "2.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "license": "MIT", + "peer": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-firefox": { + "version": "1.0.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-iexplorer": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-mobile": { + "version": "4.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/is-obj": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string-blank": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/is-svg-path": { + "version": "1.0.2", + "license": "MIT", + "peer": true + }, + "node_modules/isarray": { + "version": "2.0.5", + "license": "MIT", + "peer": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kdbush": { + "version": "3.0.0", + "license": "ISC", + "peer": true + }, + "node_modules/levn": { + "version": "0.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "license": "MIT", + "peer": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/map-limit": { + "version": "0.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "once": "~1.3.0" + } + }, + "node_modules/map-limit/node_modules/once": { + "version": "1.3.3", + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/mapbox-gl": { + "version": "1.13.3", + "license": "SEE LICENSE IN LICENSE.txt", + "peer": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.1.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/math-log2": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mouse-change": { + "version": "1.4.0", + "license": "MIT", + "peer": true, + "dependencies": { + "mouse-event": "^1.0.0" + } + }, + "node_modules/mouse-event": { + "version": "1.0.5", + "license": "MIT", + "peer": true + }, + "node_modules/mouse-event-offset": { + "version": "3.0.2", + "license": "MIT", + "peer": true + }, + "node_modules/mouse-wheel": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "right-now": "^1.0.0", + "signum": "^1.0.0", + "to-px": "^1.0.1" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/mumath": { + "version": "3.3.4", + "license": "Unlicense", + "peer": true, + "dependencies": { + "almost-equal": "^1.1.0" + } + }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/native-promise-only": { + "version": "0.8.1", + "license": "MIT", + "peer": true + }, + "node_modules/needle": { + "version": "2.9.1", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "license": "ISC", + "peer": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-svg-path": { + "version": "0.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/number-is-integer": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "is-finite": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "license": "MIT", + "peer": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/parenthesis": { + "version": "3.1.8", + "license": "MIT", + "peer": true + }, + "node_modules/parse-rect": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "pick-by-alias": "^1.2.0" + } + }, + "node_modules/parse-svg-path": { + "version": "0.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/parse-unit": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT", + "peer": true + }, + "node_modules/pbf": { + "version": "3.2.1", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/pick-by-alias": { + "version": "1.2.0", + "license": "MIT", + "peer": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/plotly.js": { + "version": "2.30.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@plotly/d3": "3.8.1", + "@plotly/d3-sankey": "0.7.2", + "@plotly/d3-sankey-circular": "0.33.1", + "@plotly/mapbox-gl": "v1.13.4", + "@turf/area": "^6.4.0", + "@turf/bbox": "^6.4.0", + "@turf/centroid": "^6.0.2", + "base64-arraybuffer": "^1.0.2", + "canvas-fit": "^1.5.0", + "color-alpha": "1.0.4", + "color-normalize": "1.5.0", + "color-parse": "1.3.8", + "color-rgba": "2.1.1", + "country-regex": "^1.1.0", + "d3-force": "^1.2.1", + "d3-format": "^1.4.5", + "d3-geo": "^1.12.1", + "d3-geo-projection": "^2.9.0", + "d3-hierarchy": "^1.1.9", + "d3-interpolate": "^3.0.1", + "d3-time": "^1.1.0", + "d3-time-format": "^2.2.3", + "fast-isnumeric": "^1.1.4", + "gl-mat4": "^1.2.0", + "gl-text": "^1.3.1", + "has-hover": "^1.0.1", + "has-passive-events": "^1.0.0", + "is-mobile": "^4.0.0", + "mouse-change": "^1.4.0", + "mouse-event-offset": "^3.0.2", + "mouse-wheel": "^1.2.0", + "native-promise-only": "^0.8.1", + "parse-svg-path": "^0.1.2", + "point-in-polygon": "^1.1.0", + "polybooljs": "^1.2.0", + "probe-image-size": "^7.2.3", + "regl": "npm:@plotly/regl@^2.1.2", + "regl-error2d": "^2.0.12", + "regl-line2d": "^3.1.3", + "regl-scatter2d": "^3.3.1", + "regl-splom": "^1.0.14", + "strongly-connected-components": "^1.0.1", + "superscript-text": "^1.0.0", + "svg-path-sdf": "^1.1.3", + "tinycolor2": "^1.4.2", + "to-px": "1.0.1", + "topojson-client": "^3.1.0", + "webgl-context": "^2.2.0", + "world-calendars": "^1.0.3" + } + }, + "node_modules/plotly.js-cartesian-dist-min": { + "version": "2.35.3", + "license": "MIT" + }, + "node_modules/plotly.js/node_modules/d3-format": { + "version": "1.4.5", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/plotly.js/node_modules/regl": { + "name": "@plotly/regl", + "version": "2.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/point-in-polygon": { + "version": "1.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/polybooljs": { + "version": "1.2.0", + "license": "MIT", + "peer": true + }, + "node_modules/postcss": { + "version": "8.4.41", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss/node_modules/source-map-js": { + "version": "1.2.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/potpack": { + "version": "1.0.2", + "license": "ISC", + "peer": true + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", + "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/probe-image-size": { + "version": "7.2.3", + "license": "MIT", + "peer": true, + "dependencies": { + "lodash.merge": "^4.6.2", + "needle": "^2.5.2", + "stream-parser": "~0.3.1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "license": "MIT", + "peer": true + }, + "node_modules/quickselect": { + "version": "2.0.0", + "license": "ISC", + "peer": true + }, + "node_modules/raf": { + "version": "3.4.1", + "license": "MIT", + "peer": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-aria": { + "version": "3.36.0", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/string": "^3.2.5", + "@react-aria/breadcrumbs": "^3.5.19", + "@react-aria/button": "^3.11.0", + "@react-aria/calendar": "^3.6.0", + "@react-aria/checkbox": "^3.15.0", + "@react-aria/color": "^3.0.2", + "@react-aria/combobox": "^3.11.0", + "@react-aria/datepicker": "^3.12.0", + "@react-aria/dialog": "^3.5.20", + "@react-aria/disclosure": "^3.0.0", + "@react-aria/dnd": "^3.8.0", + "@react-aria/focus": "^3.19.0", + "@react-aria/gridlist": "^3.10.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/link": "^3.7.7", + "@react-aria/listbox": "^3.13.6", + "@react-aria/menu": "^3.16.0", + "@react-aria/meter": "^3.4.18", + "@react-aria/numberfield": "^3.11.9", + "@react-aria/overlays": "^3.24.0", + "@react-aria/progress": "^3.4.18", + "@react-aria/radio": "^3.10.10", + "@react-aria/searchfield": "^3.7.11", + "@react-aria/select": "^3.15.0", + "@react-aria/selection": "^3.21.0", + "@react-aria/separator": "^3.4.4", + "@react-aria/slider": "^3.7.14", + "@react-aria/ssr": "^3.9.7", + "@react-aria/switch": "^3.6.10", + "@react-aria/table": "^3.16.0", + "@react-aria/tabs": "^3.9.8", + "@react-aria/tag": "^3.4.8", + "@react-aria/textfield": "^3.15.0", + "@react-aria/tooltip": "^3.7.10", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-aria-components": { + "version": "1.5.0", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@internationalized/string": "^3.2.5", + "@react-aria/collections": "3.0.0-alpha.6", + "@react-aria/color": "^3.0.2", + "@react-aria/disclosure": "^3.0.0", + "@react-aria/dnd": "^3.8.0", + "@react-aria/focus": "^3.19.0", + "@react-aria/interactions": "^3.22.5", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/menu": "^3.16.0", + "@react-aria/toolbar": "3.0.0-beta.11", + "@react-aria/tree": "3.0.0-beta.2", + "@react-aria/utils": "^3.26.0", + "@react-aria/virtualizer": "^4.1.0", + "@react-stately/color": "^3.8.1", + "@react-stately/disclosure": "^3.0.0", + "@react-stately/layout": "^4.1.0", + "@react-stately/menu": "^3.9.0", + "@react-stately/selection": "^3.18.0", + "@react-stately/table": "^3.13.0", + "@react-stately/utils": "^3.10.5", + "@react-stately/virtualizer": "^4.2.0", + "@react-types/color": "^3.0.1", + "@react-types/form": "^3.7.8", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@react-types/table": "^3.10.3", + "@swc/helpers": "^0.5.0", + "client-only": "^0.0.1", + "react-aria": "^3.36.0", + "react-stately": "^3.34.0", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/react-plotly.js": { + "version": "2.6.0", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "plotly.js": ">1.34.0", + "react": ">0.13.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-stately": { + "version": "3.34.0", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/calendar": "^3.6.0", + "@react-stately/checkbox": "^3.6.10", + "@react-stately/collections": "^3.12.0", + "@react-stately/color": "^3.8.1", + "@react-stately/combobox": "^3.10.1", + "@react-stately/data": "^3.12.0", + "@react-stately/datepicker": "^3.11.0", + "@react-stately/disclosure": "^3.0.0", + "@react-stately/dnd": "^3.5.0", + "@react-stately/form": "^3.1.0", + "@react-stately/list": "^3.11.1", + "@react-stately/menu": "^3.9.0", + "@react-stately/numberfield": "^3.9.8", + "@react-stately/overlays": "^3.6.12", + "@react-stately/radio": "^3.10.9", + "@react-stately/searchfield": "^3.5.8", + "@react-stately/select": "^3.6.9", + "@react-stately/selection": "^3.18.0", + "@react-stately/slider": "^3.6.0", + "@react-stately/table": "^3.13.0", + "@react-stately/tabs": "^3.7.0", + "@react-stately/toggle": "^3.8.0", + "@react-stately/tooltip": "^3.5.0", + "@react-stately/tree": "^3.8.6", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/regl-error2d": { + "version": "2.0.12", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "color-normalize": "^1.5.0", + "flatten-vertex-data": "^1.0.2", + "object-assign": "^4.1.1", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "node_modules/regl-line2d": { + "version": "3.1.3", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "array-find-index": "^1.0.2", + "array-normalize": "^1.1.4", + "color-normalize": "^1.5.0", + "earcut": "^2.1.5", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0" + } + }, + "node_modules/regl-scatter2d": { + "version": "3.3.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@plotly/point-cluster": "^3.1.9", + "array-range": "^1.0.1", + "array-rearrange": "^2.2.2", + "clamp": "^1.0.1", + "color-id": "^1.1.0", + "color-normalize": "^1.5.0", + "color-rgba": "^2.1.1", + "flatten-vertex-data": "^1.0.2", + "glslify": "^7.0.0", + "is-iexplorer": "^1.0.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "node_modules/regl-splom": { + "version": "1.0.14", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "array-range": "^1.0.1", + "color-alpha": "^1.0.4", + "flatten-vertex-data": "^1.0.2", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "raf": "^3.4.1", + "regl-scatter2d": "^3.2.3" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "license": "MIT", + "peer": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/right-now": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "license": "Unlicense" + }, + "node_modules/rollup": { + "version": "4.20.0", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.20.0", + "@rollup/rollup-android-arm64": "4.20.0", + "@rollup/rollup-darwin-arm64": "4.20.0", + "@rollup/rollup-darwin-x64": "4.20.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", + "@rollup/rollup-linux-arm-musleabihf": "4.20.0", + "@rollup/rollup-linux-arm64-gnu": "4.20.0", + "@rollup/rollup-linux-arm64-musl": "4.20.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", + "@rollup/rollup-linux-riscv64-gnu": "4.20.0", + "@rollup/rollup-linux-s390x-gnu": "4.20.0", + "@rollup/rollup-linux-x64-gnu": "4.20.0", + "@rollup/rollup-linux-x64-musl": "4.20.0", + "@rollup/rollup-win32-arm64-msvc": "4.20.0", + "@rollup/rollup-win32-ia32-msvc": "4.20.0", + "@rollup/rollup-win32-x64-msvc": "4.20.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-script-os": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "bin": { + "run-os": "index.js", + "run-script-os": "index.js" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "license": "BSD-3-Clause" + }, + "node_modules/rxjs": { + "version": "7.8.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.69.5", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass/node_modules/anymatch": { + "version": "3.1.3", + "devOptional": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sass/node_modules/binary-extensions": { + "version": "2.2.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sass/node_modules/braces": { + "version": "3.0.3", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "3.5.3", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/sass/node_modules/fill-range": { + "version": "7.1.1", + "devOptional": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass/node_modules/glob-parent": { + "version": "5.1.2", + "devOptional": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sass/node_modules/is-binary-path": { + "version": "2.1.0", + "devOptional": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass/node_modules/is-number": { + "version": "7.0.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "3.6.0", + "devOptional": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/sass/node_modules/to-regex-range": { + "version": "5.0.1", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "license": "ISC", + "peer": true + }, + "node_modules/scheduler": { + "version": "0.23.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signum": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.9", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/static-eval": { + "version": "2.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "escodegen": "^1.11.1" + } + }, + "node_modules/stream-parser": { + "version": "0.3.1", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/string-split-by": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "parenthesis": "^3.1.5" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strongly-connected-components": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/supercluster": { + "version": "7.1.5", + "license": "ISC", + "peer": true, + "dependencies": { + "kdbush": "^3.0.0" + } + }, + "node_modules/superscript-text": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-arc-to-cubic-bezier": { + "version": "3.2.0", + "license": "ISC", + "peer": true + }, + "node_modules/svg-path-bounds": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "abs-svg-path": "^0.1.1", + "is-svg-path": "^1.0.1", + "normalize-svg-path": "^1.0.0", + "parse-svg-path": "^0.1.2" + } + }, + "node_modules/svg-path-bounds/node_modules/normalize-svg-path": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "svg-arc-to-cubic-bezier": "^3.0.0" + } + }, + "node_modules/svg-path-sdf": { + "version": "1.1.3", + "license": "MIT", + "peer": true, + "dependencies": { + "bitmap-sdf": "^1.0.0", + "draw-svg-path": "^1.0.0", + "is-svg-path": "^1.0.1", + "parse-svg-path": "^0.1.2", + "svg-path-bounds": "^1.0.1" + } + }, + "node_modules/through2": { + "version": "2.0.5", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "license": "MIT" + }, + "node_modules/tinyqueue": { + "version": "2.0.3", + "license": "ISC", + "peer": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-float32": { + "version": "1.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/to-px": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "parse-unit": "^1.0.1" + } + }, + "node_modules/topojson-client": { + "version": "3.1.0", + "license": "ISC", + "peer": true, + "dependencies": { + "commander": "2" + }, + "bin": { + "topo2geo": "bin/topo2geo", + "topomerge": "bin/topomerge", + "topoquantize": "bin/topoquantize" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" + }, + "node_modules/type": { + "version": "2.7.2", + "license": "ISC", + "peer": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/typedarray-pool": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "bit-twiddle": "^1.0.0", + "dup": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "devOptional": true, + "license": "MIT" + }, + "node_modules/unquote": { + "version": "1.1.1", + "license": "MIT", + "peer": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-diff": { + "version": "1.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT", + "peer": true + }, + "node_modules/vite": { + "version": "5.4.0", + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.40", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "node_modules/weak-map": { + "version": "1.0.8", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/webgl-context": { + "version": "2.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "get-canvas-context": "^1.0.1" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/world-calendars": { + "version": "1.0.3", + "license": "MIT", + "peer": true, + "dependencies": { + "object-assign": "^4.1.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC", + "peer": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/zod": { + "version": "3.23.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} From 4ec7bad30d0dddd9bf087f449d18fc7d89f94e76 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 1 Mar 2025 18:10:11 -0800 Subject: [PATCH 03/57] partially broken clustermap --- backend/src/app.py | 47 ++---------- backend/src/cluster.py | 14 ++-- frontend/src/colorScales.ts | 2 +- frontend/src/colors.ts | 5 ++ frontend/src/components/Clustermap.tsx | 85 +++++++++++++++++++++ frontend/src/components/D3CanvasHeatmap.tsx | 70 +++++++++++++---- frontend/src/components/Heatmap.tsx | 62 ++------------- frontend/src/components/Viewer.tsx | 30 ++++++++ frontend/src/hooks/map.ts | 74 ++++++++++++++++++ frontend/src/types/index.d.ts | 5 ++ 10 files changed, 278 insertions(+), 116 deletions(-) create mode 100644 frontend/src/components/Clustermap.tsx create mode 100644 frontend/src/hooks/map.ts diff --git a/backend/src/app.py b/backend/src/app.py index 781769f..f7354a4 100644 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -1,9 +1,6 @@ import os import sys -##test -import cluster - current_file_path = os.path.abspath(os.path.join(os.path.dirname(__file__))) sys.path.append(os.path.join(current_file_path, "../../")) sys.path.append(os.path.join(current_file_path, ".")) @@ -19,6 +16,7 @@ from save_document import pack_document, unpack_document from app_state import create_app_state from validations import validate_fasta +import cluster import platform from Bio import SeqIO import psutil @@ -534,48 +532,17 @@ def get_data(self, doc_id: str): ) return json.dumps(data_to_dump) - ###cluster apio test - - def getClusterData(self, doc_id: str): + def generate_cluster_data(self, doc_id: str, threshold_one: int, threshold_two: int = 0): ## T2 set to zero for now to just get one working doc = get_document(doc_id) if doc is None: raise Exception(f"Could not find document: {doc_id}") matrix_path = get_matrix_path(doc) - file_base = os.path.splitext(os.path.basename(matrix_path))[0].removesuffix("_mat") - cluster_file =os.path.join(doc.tempdir_path,f"{file_base}_cluster.csv") - if not os.path.exists(cluster_file): - return {"exists": False} - try: - df=read_csv(cluster_file) - return {"exists": True, - "data": df.to_dict(orient="records") - } - except Exception as e: - print(f"Error reading cluster file: {e}") - return {"exists": False, "error": str(e)} - - - - def generateClusterData(self, doc_id: str, threshold_one: float, threshold_two: float = 0): ## T2 set to zero for now to just get one working - doc = get_document(doc_id) - if doc is None: - raise Exception(f"Could not find document: {doc_id}") - matrix_path = get_matrix_path(doc) - try: - cluster.export(matrix_path, threshold_one, threshold_two) - file_base = os.path.splitext(os.path.basename(matrix_path))[0].removesuffix("_mat") - cluster_file = os.path.join(doc.tempdir_path, f"{file_base}_cluster.csv") - - # Check if the file was created - if os.path.exists(cluster_file): - return {"success": True, "path": cluster_file} - else: - return {"success": False, "error": "Cluster file not created"} - except Exception as e: - print(f"Error generating cluster data: {e}") - return {"success": False, "error": str(e)} - + df = cluster.export(matrix_path, threshold_one, threshold_two, False) + df = df.rename(columns={str(df.columns[0]): 'id', str(df.columns[1]): 'group'}) + if len(df.columns) > 2 and df.columns[2] is not None: + df = df.rename(columns={str(df.columns[2]): 'subgroup'}) + return df.to_dict(orient="records") def new_doc(self): id = make_doc_id() diff --git a/backend/src/cluster.py b/backend/src/cluster.py index 7341993..5df99f4 100644 --- a/backend/src/cluster.py +++ b/backend/src/cluster.py @@ -51,7 +51,7 @@ def cluster_by_identity(clusters, nodes): return output -def export(matrix_path, threshold_1=79, threshold_2=0): +def export(matrix_path, threshold_1=79, threshold_2=0, save_csv=True): output_dir = os.path.dirname(matrix_path) file_name = os.path.basename(matrix_path) file_base, _ = os.path.splitext(file_name) @@ -83,7 +83,7 @@ def export(matrix_path, threshold_1=79, threshold_2=0): (item, key + 1) for key, sublist in output.items() for item in sublist ] df = pd.DataFrame(flattened_output) - df.columns = ["ID", "Group 1 - Theshold: " + str(threshold_1)] + df.columns = ["SeqID", "Group - Theshold: " + str(threshold_1)] else: clusters = process_groups(threshold_1, data, index) @@ -92,7 +92,11 @@ def export(matrix_path, threshold_1=79, threshold_2=0): df = pd.DataFrame(output) df.columns = [ "ID", - "Group 1 - Theshold: " + str(threshold_1), - "Group 2 - Theshold: " + str(threshold_2), + "Group - Theshold: " + str(threshold_1), + "Subgroup - Theshold: " + str(threshold_2), ] - df.to_csv(output_file, index=False) + + if save_csv: + df.to_csv(output_file, index=False) + + return df diff --git a/frontend/src/colorScales.ts b/frontend/src/colorScales.ts index eb5409b..b29de7f 100644 --- a/frontend/src/colorScales.ts +++ b/frontend/src/colorScales.ts @@ -29,7 +29,7 @@ export const colorScales: { } = { Greys: [ [0, "rgb(0,0,0)"], - [1, "rgb(255,255,255)"], + [1, "rgb(235,235,235)"], ], Yellow_Green_Blue: [ diff --git a/frontend/src/colors.ts b/frontend/src/colors.ts index 7401c16..c7241ca 100644 --- a/frontend/src/colors.ts +++ b/frontend/src/colors.ts @@ -99,6 +99,11 @@ export function createD3ColorScale( .clamp(true); } +export const distinctColor = (value: number) => { + const hue = value * 137.508; // use golden angle approximation + return `hsl(${hue},50%,75%)`; +}; + type ColorName = | "White" | "Black" diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx new file mode 100644 index 0000000..afb5b97 --- /dev/null +++ b/frontend/src/components/Clustermap.tsx @@ -0,0 +1,85 @@ +import React from "react"; +import type { DocState } from "../appState"; +import type { ColorScaleArray } from "../colorScales"; +import { plotFontMonospace } from "../constants"; +import { useHeatmapData, useMetrics, useSize } from "../hooks/map"; +import type { HeatmapData } from "../plotTypes"; +import { D3CanvasHeatmap } from "./D3CanvasHeatmap"; + +export const Clustermap = ({ + data, + docState, + tickText, + leftSidebarCollapsed, +}: { + data: HeatmapData; + docState: DocState; + tickText: string[]; + leftSidebarCollapsed: boolean; +}) => { + const [clusterData, setClusterData] = + React.useState< + { + id: string; + group: number; + }[] + >(); + + React.useEffect(() => { + window.pywebview.api + .generate_cluster_data(docState.id, 75, 0) + .then((clusterData) => { + setClusterData(clusterData); + }) + .catch((e) => { + alert(e); + throw e; + }); + }, [docState.id]); + + const elementRef = React.useRef(null); + const size = useSize(elementRef, leftSidebarCollapsed); + // TODO: make this cluster settings + const { heatmap: settings } = docState; + const { cbar_aspect, cbar_shrink, margin } = useMetrics(settings, tickText); + + const colorScale: ColorScaleArray = [ + [0, "rgb(0,0,0)"], + [1, "rgb(235,235,235)"], + ]; + + const d3HeatmapData = useHeatmapData(data); + + return data && clusterData ? ( +
+ +
+ ) : null; +}; diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 7c8f2ec..56e54be 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -8,6 +8,7 @@ import type { HeatmapRenderProps } from "./Heatmap"; export const D3CanvasHeatmap = ({ data, + clusterData, tickText, colorScale, minVal, @@ -31,14 +32,14 @@ export const D3CanvasHeatmap = ({ showscale, margin, settings, -}: HeatmapRenderProps) => { +}: HeatmapRenderProps & { clusterData?: { id: string; group: number }[] }) => { const canvasRef = useHeatmapRef() as React.MutableRefObject; const [transform, setTransform] = React.useState(d3.zoomIdentity); const [tooltipData, setTooltipData] = React.useState<{ x: number; y: number; - value: number; + value: number | null; xLabel?: string; yLabel?: string; } | null>(null); @@ -106,7 +107,38 @@ export const D3CanvasHeatmap = ({ const y = rows.indexOf(d.y) * cellSize + cellSpace / 2; const rectSize = cellSize - cellSpace; - ctx.fillStyle = colorFn(d.value); + const clusterGroup = clusterData + ? clusterData.find( + (i) => i.id === tickText[d.x] && i.id === tickText[d.y], + )?.group + : null; + + const TEMP_clusterGroupColors = [ + "red", + "red", + "#222", + "#333", + "#444", + "#555", + "#666", + "#777", + "#888", + "#999", + "#aaa", + "#bbb", + "#aaa", + "#bbb", + "#ccc", + "#ddd", + "#eee", + "#fff", + "pink", + "blue", + ]; + + ctx.fillStyle = clusterGroup + ? TEMP_clusterGroupColors[clusterGroup] + : colorFn(d.value); ctx.fillRect(x, y, rectSize, rectSize); if (showPercentIdentities) { @@ -280,16 +312,7 @@ export const D3CanvasHeatmap = ({ d3.select(canvas).on(".zoom", null); }; }, [canvasRef, width, height, margin]); - console.log( - margin.left, - "left", - margin.right, - "right", - margin.top, - "top", - margin.bottom, - "bottom", - ); + const handleMouseMove = (event: React.MouseEvent) => { const canvas = canvasRef.current; if (!canvas) return; @@ -307,11 +330,16 @@ export const D3CanvasHeatmap = ({ const cell = filteredData.find((d) => d.x === dataX && d.y === dataY); + const clusterGroup = + clusterData && cell + ? clusterData.find((i) => i.id === tickText[cell.x])?.group + : null; + if (cell) { setTooltipData({ x, y, - value: cell.value, + value: clusterData ? (clusterGroup ?? null) : cell.value, xLabel: tickText[cell.x] || "", yLabel: tickText[cell.y] || "", }); @@ -347,8 +375,18 @@ export const D3CanvasHeatmap = ({
{tooltipData.yLabel}
-
Percent ID:
-
{tooltipData.value.toFixed(2)}%
+
+ {clusterData + ? tooltipData.value + ? "Group:" + : "" + : "Percent ID:"} +
+
+ {clusterData + ? tooltipData.value || "" + : `${tooltipData?.value?.toFixed(2)}%`} +
)} diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index 41eddb3..116c15f 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -9,6 +9,7 @@ import { colorScales as defaultColorScales, } from "../colorScales"; import { plotFontMonospace, plotFontSansSerif } from "../constants"; +import { useHeatmapData, useMetrics, useSize } from "../hooks/map"; import type { HeatmapData, HeatmapSettings, MetaData } from "../plotTypes"; import { D3CanvasHeatmap } from "./D3CanvasHeatmap"; import { D3Heatmap } from "./D3Heatmap"; @@ -17,7 +18,6 @@ import { HeatmapSidebar } from "./HeatmapSidebar"; export type HeatmapRenderProps = { // TODO: just use settings data: { x: number; y: number; value: number }[]; - metaData: MetaData; settings: HeatmapSettings; tickText: string[]; colorScale: ColorScaleArray; @@ -73,6 +73,9 @@ export const Heatmap = ({ [setDocState], ); + console.log(data); + console.log(tickText); + const discreteColorScale: ColorScaleArray = React.useMemo(() => { const scales = [ [metaData.minVal, "#CDF0FF"], @@ -96,48 +99,12 @@ export const Heatmap = ({ [discreteColorScale], ); - const d3HeatmapData = React.useMemo( - () => - data.flatMap((row, y) => - row.map((value, x) => ({ - x, - y, - value: Number(value), - })), - ), - [data], - ); - - const elementRef = React.useRef(null); - const [size, setSize] = React.useState<{ width: number; height: number }>({ - width: 0, - height: 0, - }); - - const updateSize = React.useCallback(() => { - if (elementRef.current) { - const { offsetWidth, offsetHeight } = elementRef.current; - setSize({ width: offsetWidth, height: offsetHeight }); - } - }, []); - - // biome-ignore lint/correctness/useExhaustiveDependencies(leftSidebarCollapsed): trigger updateSize - React.useEffect(() => { - updateSize(); - - const handleResize = () => { - updateSize(); - }; + const d3HeatmapData = useHeatmapData(data); - window.addEventListener("resize", handleResize); + const { cbar_shrink, cbar_aspect, margin } = useMetrics(settings, tickText); - return () => { - window.removeEventListener("resize", handleResize); - }; - }, [updateSize, leftSidebarCollapsed]); - - const cbar_shrink = settings.cbar_shrink * 60; - const cbar_aspect = settings.cbar_aspect * 10; + const elementRef = React.useRef(null); + const size = useSize(elementRef, leftSidebarCollapsed); let colorScale = colorScales[settings.colorScaleKey]; @@ -153,17 +120,6 @@ export const Heatmap = ({ const titleFont = settings.titleFont === "Monospace" ? plotFontMonospace : plotFontSansSerif; - const longestTickWidth = - Math.max(...tickText.map((tick) => tick.length)) * - settings.axlabel_yfontsize; - console.log("longestTickWidth", longestTickWidth); - const margin = { - top: 60, - right: 60, - bottom: settings.axis_labels ? Math.max(longestTickWidth, 60) : 60, - left: settings.axis_labels ? Math.max(longestTickWidth, 60) : 60, - }; - return ( <> {data ? ( @@ -176,7 +132,6 @@ export const Heatmap = ({ {appState.showExportModal && appState.saveFormat === "svg" ? ( Heatmap
+ +
+ + + + + + + Clustermap +
+
) : null} + + {!loading && heatmapData ? ( + + ) : null} + {distributionData && metaData ? ( , + leftSidebarCollapsed: boolean, +) => { + const [size, setSize] = React.useState<{ width: number; height: number }>({ + width: 0, + height: 0, + }); + + const updateSize = React.useCallback(() => { + if (elementRef.current) { + const { offsetWidth, offsetHeight } = elementRef.current; + setSize({ width: offsetWidth, height: offsetHeight }); + } + }, [elementRef.current]); + + // TODO: Do this the right way + // biome-ignore lint/correctness/useExhaustiveDependencies(leftSidebarCollapsed): trigger updateSize + React.useEffect(() => { + updateSize(); + + const handleResize = () => { + updateSize(); + }; + + window.addEventListener("resize", handleResize); + + return () => { + window.removeEventListener("resize", handleResize); + }; + }, [updateSize, leftSidebarCollapsed]); + + return size; +}; + +export const useMetrics = (settings: HeatmapSettings, tickText: string[]) => { + const cbar_shrink = settings.cbar_shrink * 60; + const cbar_aspect = settings.cbar_aspect * 10; + + const longestTickWidth = React.useMemo( + () => + Math.max(...tickText.map((tick) => tick.length)) * + settings.axlabel_yfontsize, + [tickText, settings.axlabel_yfontsize], + ); + + const margin = React.useMemo( + () => ({ + top: 60, + right: 60, + bottom: settings.axis_labels ? Math.max(longestTickWidth, 60) : 60, + left: settings.axis_labels ? Math.max(longestTickWidth, 60) : 60, + }), + [longestTickWidth, settings.axis_labels], + ); + + return { cbar_shrink, cbar_aspect, margin }; +}; + +export const useHeatmapData = (data: string[][]) => + React.useMemo( + () => + data.flatMap((row, y) => + row.map((value, x) => ({ + x, + y, + value: Number(value), + })), + ), + [data], + ); diff --git a/frontend/src/types/index.d.ts b/frontend/src/types/index.d.ts index 4c12190..d689330 100644 --- a/frontend/src/types/index.d.ts +++ b/frontend/src/types/index.d.ts @@ -39,6 +39,11 @@ declare global { defaultDirectory?: string, ) => Promise; select_path_dialog: (defaultDirectory?: string) => Promise; + generate_cluster_data: ( + doc_id: string, + threshold_one: number, + threshold_two: number, + ) => Promise<{ id: string; group: number }[]>; export_data: (args: { doc_id: string; export_path: string; From 24dc169bfb03bc2b8239d0a4d2e40a2f67914bca Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 1 Mar 2025 18:11:55 -0800 Subject: [PATCH 04/57] fix type --- frontend/src/components/D3CanvasHeatmap.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 56e54be..6b2dc95 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -285,6 +285,7 @@ export const D3CanvasHeatmap = ({ minVal, maxVal, settings?.colorScaleKey, + clusterData, ]); React.useEffect(() => { From fac3441aa824499c759bf10bece98c00ebb2baa5 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 1 Mar 2025 19:18:42 -0800 Subject: [PATCH 05/57] fixed another type --- frontend/src/components/D3CanvasHeatmap.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 6b2dc95..e75b16a 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -137,7 +137,7 @@ export const D3CanvasHeatmap = ({ ]; ctx.fillStyle = clusterGroup - ? TEMP_clusterGroupColors[clusterGroup] + ? TEMP_clusterGroupColors[clusterGroup] || "red" : colorFn(d.value); ctx.fillRect(x, y, rectSize, rectSize); From 1e68a707d6100321b95c22f0f78b633196481e13 Mon Sep 17 00:00:00 2001 From: Michael Lund Date: Sun, 2 Mar 2025 15:18:41 -0700 Subject: [PATCH 06/57] distinct colors (hardcode) for clustermap working, also changed zoom limits --- frontend/src/components/Clustermap.tsx | 2 +- frontend/src/components/D3CanvasHeatmap.tsx | 64 +++++++++++++-------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index afb5b97..9e85828 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -27,7 +27,7 @@ export const Clustermap = ({ React.useEffect(() => { window.pywebview.api - .generate_cluster_data(docState.id, 75, 0) + .generate_cluster_data(docState.id, 85, 0) .then((clusterData) => { setClusterData(clusterData); }) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index e75b16a..7955335 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -107,37 +107,53 @@ export const D3CanvasHeatmap = ({ const y = rows.indexOf(d.y) * cellSize + cellSpace / 2; const rectSize = cellSize - cellSpace; - const clusterGroup = clusterData - ? clusterData.find( - (i) => i.id === tickText[d.x] && i.id === tickText[d.y], - )?.group - : null; + // Get X-Y cluster data + const clusterX = clusterData?.find((i) => i.id === tickText[d.x])?.group; + const clusterY = clusterData?.find((i) => i.id === tickText[d.y])?.group; + + //check for group match + const clusterGroup = + clusterX !== undefined && + clusterY !== undefined && + clusterX === clusterY; + + const clusterMatch = clusterGroup ? clusterX : null; const TEMP_clusterGroupColors = [ "red", - "red", - "#222", - "#333", - "#444", - "#555", - "#666", - "#777", - "#888", - "#999", - "#aaa", - "#bbb", - "#aaa", - "#bbb", - "#ccc", - "#ddd", - "#eee", - "#fff", "pink", "blue", + "green", + "purple", + "orange", + "lime", + "teal", + "navy", + "yellow", + "aqua", + "fuchsia", + "gold", + "chocolate", + "tomato", + "salmon", + "magenta", + "hotpink", + "cornflowerblue", + "darkgreen", + "darkslategray", + "coral", + "orchid", + "turquoise", + "silver", + "maroon", + "olive", + "black", + "white", + "gray", ]; - ctx.fillStyle = clusterGroup - ? TEMP_clusterGroupColors[clusterGroup] || "red" + ctx.fillStyle = clusterMatch + ? TEMP_clusterGroupColors[clusterMatch] || "red" : colorFn(d.value); ctx.fillRect(x, y, rectSize, rectSize); From ff6790b9ba38ad5d6119ec4a3317ea2c2501bb50 Mon Sep 17 00:00:00 2001 From: Michael Lund Date: Sun, 2 Mar 2025 15:36:52 -0700 Subject: [PATCH 07/57] reupoloading clusetmap and zoom changes, forgot to save --- backend/src/cluster.py | 10 ++++---- frontend/src/components/D3CanvasHeatmap.tsx | 26 ++++++++++----------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/backend/src/cluster.py b/backend/src/cluster.py index 5df99f4..0150ae6 100644 --- a/backend/src/cluster.py +++ b/backend/src/cluster.py @@ -51,7 +51,7 @@ def cluster_by_identity(clusters, nodes): return output -def export(matrix_path, threshold_1=79, threshold_2=0, save_csv=True): +def export(matrix_path, threshold_1=79, threshold_2=0,save_csv=True): output_dir = os.path.dirname(matrix_path) file_name = os.path.basename(matrix_path) file_base, _ = os.path.splitext(file_name) @@ -83,7 +83,7 @@ def export(matrix_path, threshold_1=79, threshold_2=0, save_csv=True): (item, key + 1) for key, sublist in output.items() for item in sublist ] df = pd.DataFrame(flattened_output) - df.columns = ["SeqID", "Group - Theshold: " + str(threshold_1)] + df.columns = ["ID", "Group 1 - Theshold: " + str(threshold_1)] else: clusters = process_groups(threshold_1, data, index) @@ -92,11 +92,9 @@ def export(matrix_path, threshold_1=79, threshold_2=0, save_csv=True): df = pd.DataFrame(output) df.columns = [ "ID", - "Group - Theshold: " + str(threshold_1), - "Subgroup - Theshold: " + str(threshold_2), + "Group 1 - Theshold: " + str(threshold_1), + "Group 2 - Theshold: " + str(threshold_2), ] - if save_csv: df.to_csv(output_file, index=False) - return df diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 7955335..8302596 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -107,18 +107,6 @@ export const D3CanvasHeatmap = ({ const y = rows.indexOf(d.y) * cellSize + cellSpace / 2; const rectSize = cellSize - cellSpace; - // Get X-Y cluster data - const clusterX = clusterData?.find((i) => i.id === tickText[d.x])?.group; - const clusterY = clusterData?.find((i) => i.id === tickText[d.y])?.group; - - //check for group match - const clusterGroup = - clusterX !== undefined && - clusterY !== undefined && - clusterX === clusterY; - - const clusterMatch = clusterGroup ? clusterX : null; - const TEMP_clusterGroupColors = [ "red", "pink", @@ -152,8 +140,18 @@ export const D3CanvasHeatmap = ({ "gray", ]; - ctx.fillStyle = clusterMatch - ? TEMP_clusterGroupColors[clusterMatch] || "red" + const clusterX = clusterData?.find((i) => i.id === tickText[d.x])?.group; + const clusterY = clusterData?.find((i) => i.id === tickText[d.y])?.group; + + const clusterMatch = + clusterX !== undefined && + clusterY !== undefined && + clusterX === clusterY; + + const clusterGroup = clusterMatch ? clusterX : null; + + ctx.fillStyle = clusterGroup + ? TEMP_clusterGroupColors[clusterGroup] || "red" : colorFn(d.value); ctx.fillRect(x, y, rectSize, rectSize); From fff74954e511e179bbc4b4c42a2dad0467f4e846 Mon Sep 17 00:00:00 2001 From: Michael Lund Date: Sun, 2 Mar 2025 17:12:51 -0700 Subject: [PATCH 08/57] switched from scipuy to newtworkx to try to avoid intel max compiling issues and future clustering possibilities --- backend/src/cluster.py | 156 ++++++++++++++++++++++++++++------------- 1 file changed, 107 insertions(+), 49 deletions(-) diff --git a/backend/src/cluster.py b/backend/src/cluster.py index 0150ae6..ad3a8df 100644 --- a/backend/src/cluster.py +++ b/backend/src/cluster.py @@ -1,100 +1,158 @@ import os import numpy as np -from scipy.sparse import csr_matrix -from scipy.sparse.csgraph import connected_components import pandas as pd from collections import defaultdict +import networkx as nx - -def process_groups(threshold, data, index): - # create adjacensy matrix to id which cells are related by the threshold marking as binary with (1) for related or (0) for not meeting the threshold - adjacency_matrix = (data >= threshold).astype(int) - # create sparse matrix(absent 0s) for memeory efficiancy - sparse_matrix = csr_matrix(adjacency_matrix) - # identify connected components - _, labels = connected_components( - csgraph=sparse_matrix, directed=False, return_labels=True - ) - groups_dict = defaultdict(list) - for i, label in enumerate(labels): - groups_dict[label].append(index[i]) - groups = {} - for indx, clade in enumerate(labels): - groups.update({indx: clade}) - return groups_dict - +## switching from scipy to networkx. takes two threshold inputs now +def process_groups(data, index, threshold_1, threshold_2=0): + # check for a threshold 2 + if threshold_2 is None or threshold_2 == 0: + # set all values in the matrix that meet threshold 1 to 1 and all lower or NaN values to 0 + adjacency_matrix = (~np.isnan(data) & (data >= threshold_1)).astype(int) + # Create a graph from the adjacency matrix + G1 = nx.from_numpy_array(adjacency_matrix, parallel_edges=False, create_using=None) + + # empty dict to store the groups + groups_dict = defaultdict(list) + + # look for connected components in graph G1 + for i, component in enumerate(nx.connected_components(G1)): + for node_idx in component: + groups_dict[i].append(index[node_idx]) + + return groups_dict + else: + # create two adjacency matrices, one for each threshold + adjacency_1 = (~np.isnan(data) & (data >= threshold_1)).astype(int) + adjacency_2 = (~np.isnan(data) & (data >= threshold_2)).astype(int) + + # convert adjacency matrices to networkx graphs + G1 = nx.from_numpy_array(adjacency_1) + G2 = nx.from_numpy_array(adjacency_2) + + # find primary clusters with threshold_1 + groups_dict_1 = defaultdict(list) + for i, component in enumerate(nx.connected_components(G1)): + for node_idx in component: + groups_dict_1[i].append(index[node_idx]) + + # find subclusters with threshold_2 (higher threshold) + groups_dict_2 = defaultdict(list) + for i, component in enumerate(nx.connected_components(G2)): + for node_idx in component: + groups_dict_2[i].append(index[node_idx]) + + # return both cluster sets + return groups_dict_1, groups_dict_2 def cluster_by_identity(clusters, nodes): output = [] reverse_clusters = {} - - # Create reverse lookup dictionary were values in value list are extracted to key and groups are assigned to value + + # create lookup table from sequence ID to primary cluster ID for group, values in clusters.items(): for value in values: reverse_clusters[value] = group - - # Initialize subgroup counters + + # initialize counters for subgroups within each primary cluster subgroup_counters = {group: 1 for group in clusters.keys()} - - # Iterate through nodes to determine the subgroup_number within each group_number + + # assign subgroups within each primary cluster for _, node_list in nodes.items(): if node_list: + # get first node to determine which primary cluster this belongs to first_value = node_list[0] if first_value in reverse_clusters: + # get primary cluster ID (add 1 for 1-based indexing) group_number = reverse_clusters[first_value] + 1 + # get next available subgroup number for this primary cluster subgroup_number = subgroup_counters[reverse_clusters[first_value]] + + # process all nodes in this subcluster for value in node_list: + # only include if node belongs to the same primary cluster if value in reverse_clusters: output.append((value, group_number, subgroup_number)) + + # increment subgroup counter for this primary cluster subgroup_counters[reverse_clusters[first_value]] += 1 - + return output -def export(matrix_path, threshold_1=79, threshold_2=0,save_csv=True): +def export(matrix_path, threshold_1=79, threshold_2=0, save_csv=True): output_dir = os.path.dirname(matrix_path) file_name = os.path.basename(matrix_path) file_base, _ = os.path.splitext(file_name) file_name = file_base.replace("_mat", "") output_file = os.path.join(output_dir, file_name + "_cluster.csv") - - # https://stackoverflow.com/a/57824142 - # SDT1 matrix CSVs do not have padding for columns + with open(matrix_path, "r") as temp_f: col_count = [len(l.split(",")) for l in temp_f.readlines()] column_names = [i for i in range(0, max(col_count))] - + df = pd.read_csv( matrix_path, delimiter=",", index_col=0, header=None, names=column_names ) - # extract index + index = df.index.tolist() - # convert df to np array data = df.to_numpy() - # format values data = np.round(data, 2) - # maintain order of threshold processing + if threshold_2 != 0 and threshold_1 >= threshold_2: threshold_1, threshold_2 = threshold_2, threshold_1 - # handle instances of no threshold_2 + if threshold_2 is None or threshold_2 == 0: - output = process_groups(threshold_1, data, index) + output = process_groups(data, index, threshold_1) flattened_output = [ (item, key + 1) for key, sublist in output.items() for item in sublist ] - df = pd.DataFrame(flattened_output) - df.columns = ["ID", "Group 1 - Theshold: " + str(threshold_1)] - + df_result = pd.DataFrame(flattened_output) + df_result.columns = ["SeqID", "Group - Threshold: " + str(threshold_1)] else: - clusters = process_groups(threshold_1, data, index) - nodes = process_groups(threshold_2, data, index) + clusters, nodes = process_groups(data, index, threshold_1, threshold_2) output = cluster_by_identity(clusters, nodes) - df = pd.DataFrame(output) - df.columns = [ + df_result = pd.DataFrame(output) + df_result.columns = [ "ID", - "Group 1 - Theshold: " + str(threshold_1), - "Group 2 - Theshold: " + str(threshold_2), + "Group - Threshold: " + str(threshold_1), + "Subgroup - Threshold: " + str(threshold_2), ] + if save_csv: - df.to_csv(output_file, index=False) - return df + df_result.to_csv(output_file, index=False) + + return df_result + +def main(): + import argparse + + parser = argparse.ArgumentParser(description='Sequence clustering with two thresholds') + parser.add_argument('matrix_file', type=str, help='Path to the similarity matrix CSV file') + parser.add_argument('--threshold1', type=float, default=79, help='Primary clustering threshold (default: 79)') + parser.add_argument('--threshold2', type=float, default=0, help='Secondary clustering threshold (default: 0)') + parser.add_argument('--no-save-csv', action='store_false', dest='save_csv', help='Do not save CSV results') + + args = parser.parse_args() + + df_results = export( + args.matrix_file, + threshold_1=args.threshold1, + threshold_2=args.threshold2, + save_csv=args.save_csv + ) + + if args.threshold2 is None or args.threshold2 == 0: + num_groups = df_results["Group - Threshold: " + str(args.threshold1)].nunique() + print(f"Found {num_groups} groups using threshold {args.threshold1}") + else: + num_groups = df_results["Group - Threshold: " + str(args.threshold1)].nunique() + num_subgroups = df_results.groupby("Group - Threshold: " + str(args.threshold1))["Subgroup - Threshold: " + str(args.threshold2)].nunique().sum() + print(f"Found {num_groups} primary groups using threshold {args.threshold1}") + print(f"Found {num_subgroups} total subgroups using threshold {args.threshold2}") + + print(f"Results saved for {len(df_results)} sequences") + +if __name__ == "__main__": + main() \ No newline at end of file From 8373fdf15649c9682bb6f0a069c5521fffbda8ea Mon Sep 17 00:00:00 2001 From: Michael Lund Date: Sun, 2 Mar 2025 17:13:22 -0700 Subject: [PATCH 09/57] switched from scipuy to newtworkx to try to avoid intel max compiling issues and future clustering possibilities --- backend/src/cluster.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/cluster.py b/backend/src/cluster.py index ad3a8df..f422c44 100644 --- a/backend/src/cluster.py +++ b/backend/src/cluster.py @@ -23,7 +23,7 @@ def process_groups(data, index, threshold_1, threshold_2=0): return groups_dict else: - # create two adjacency matrices, one for each threshold + # Create two adjacency matrices, one for each threshold ~ is the bitwise 'not' operator adjacency_1 = (~np.isnan(data) & (data >= threshold_1)).astype(int) adjacency_2 = (~np.isnan(data) & (data >= threshold_2)).astype(int) @@ -37,7 +37,7 @@ def process_groups(data, index, threshold_1, threshold_2=0): for node_idx in component: groups_dict_1[i].append(index[node_idx]) - # find subclusters with threshold_2 (higher threshold) + # find subclusters with threshold_2 groups_dict_2 = defaultdict(list) for i, component in enumerate(nx.connected_components(G2)): for node_idx in component: From 7972d875491adb47bfdfb8bd2987eb197120dd18 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Mon, 3 Mar 2025 16:45:38 -0800 Subject: [PATCH 10/57] remove package-lock again --- package-lock.json | 5931 --------------------------------------------- 1 file changed, 5931 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index e385d87..0000000 --- a/package-lock.json +++ /dev/null @@ -1,5931 +0,0 @@ -{ - "name": "SDT", - "version": "2.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "SDT", - "version": "2.0.0", - "dependencies": { - "@vitejs/plugin-react": "^4.3.1", - "colorjs.io": "^0.5.2", - "d3": "^7.9.0", - "plotly.js-cartesian-dist-min": "^2.35.3", - "react": "^18.2.0", - "react-aria-components": "^1.5.0", - "react-dom": "^18.2.0", - "react-plotly.js": "^2.6.0", - "tinycolor2": "^1.6.0", - "zod": "^3.23.8" - }, - "devDependencies": { - "@biomejs/biome": "^1.9.4", - "@types/bun": "^1.1.14", - "@types/d3": "^7.4.3", - "@types/react": "^18.2.38", - "@types/react-dom": "^18.2.17", - "@types/react-plotly.js": "^2.6.3", - "@types/tinycolor2": "^1.4.6", - "concurrently": "^9.1.0", - "prettier": "^3.5.2", - "run-script-os": "^1.1.6", - "sass": "^1.63.6", - "typescript": "^5.7.2", - "vite": "^5.4.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.2", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.25.2", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.25.0", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.0", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk/node_modules/supports-color/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.3", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.2" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.7", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.7", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.0", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.3", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.25.2", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@biomejs/biome": { - "version": "1.9.4", - "dev": true, - "hasInstallScript": true, - "license": "MIT OR Apache-2.0", - "bin": { - "biome": "bin/biome" - }, - "engines": { - "node": ">=14.21.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/biome" - }, - "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "1.9.4", - "@biomejs/cli-darwin-x64": "1.9.4", - "@biomejs/cli-linux-arm64": "1.9.4", - "@biomejs/cli-linux-arm64-musl": "1.9.4", - "@biomejs/cli-linux-x64": "1.9.4", - "@biomejs/cli-linux-x64-musl": "1.9.4", - "@biomejs/cli-win32-arm64": "1.9.4", - "@biomejs/cli-win32-x64": "1.9.4" - } - }, - "node_modules/@biomejs/cli-win32-x64": { - "version": "1.9.4", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@choojs/findup": { - "version": "0.2.1", - "license": "MIT", - "peer": true, - "dependencies": { - "commander": "^2.15.1" - }, - "bin": { - "findup": "bin/findup.js" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@formatjs/ecma402-abstract": { - "version": "1.18.3", - "license": "MIT", - "dependencies": { - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/fast-memoize": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.7.7", - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.3", - "@formatjs/icu-skeleton-parser": "1.8.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.1", - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.3", - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/intl-localematcher": { - "version": "0.5.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@internationalized/date": { - "version": "3.6.0", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@internationalized/message": { - "version": "3.1.6", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "intl-messageformat": "^10.1.0" - } - }, - "node_modules/@internationalized/number": { - "version": "3.6.0", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@internationalized/string": { - "version": "3.2.5", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@mapbox/geojson-rewind": { - "version": "0.5.2", - "license": "ISC", - "peer": true, - "dependencies": { - "get-stream": "^6.0.1", - "minimist": "^1.2.6" - }, - "bin": { - "geojson-rewind": "geojson-rewind" - } - }, - "node_modules/@mapbox/geojson-types": { - "version": "1.0.2", - "license": "ISC", - "peer": true - }, - "node_modules/@mapbox/jsonlint-lines-primitives": { - "version": "2.0.2", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@mapbox/mapbox-gl-supported": { - "version": "1.5.0", - "license": "BSD-3-Clause", - "peer": true, - "peerDependencies": { - "mapbox-gl": ">=0.32.1 <2.0.0" - } - }, - "node_modules/@mapbox/point-geometry": { - "version": "0.1.0", - "license": "ISC", - "peer": true - }, - "node_modules/@mapbox/tiny-sdf": { - "version": "1.2.5", - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/@mapbox/unitbezier": { - "version": "0.0.0", - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/@mapbox/vector-tile": { - "version": "1.3.1", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "@mapbox/point-geometry": "~0.1.0" - } - }, - "node_modules/@mapbox/whoots-js": { - "version": "3.1.0", - "license": "ISC", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@plotly/d3": { - "version": "3.8.1", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@plotly/d3-sankey": { - "version": "0.7.2", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "d3-array": "1", - "d3-collection": "1", - "d3-shape": "^1.2.0" - } - }, - "node_modules/@plotly/d3-sankey-circular": { - "version": "0.33.1", - "license": "MIT", - "peer": true, - "dependencies": { - "d3-array": "^1.2.1", - "d3-collection": "^1.0.4", - "d3-shape": "^1.2.0", - "elementary-circuits-directed-graph": "^1.0.4" - } - }, - "node_modules/@plotly/d3-sankey-circular/node_modules/d3-array": { - "version": "1.2.4", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@plotly/d3-sankey/node_modules/d3-array": { - "version": "1.2.4", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@plotly/mapbox-gl": { - "version": "1.13.4", - "license": "SEE LICENSE IN LICENSE.txt", - "peer": true, - "dependencies": { - "@mapbox/geojson-rewind": "^0.5.2", - "@mapbox/geojson-types": "^1.0.2", - "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/mapbox-gl-supported": "^1.5.0", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^1.1.1", - "@mapbox/unitbezier": "^0.0.0", - "@mapbox/vector-tile": "^1.3.1", - "@mapbox/whoots-js": "^3.1.0", - "csscolorparser": "~1.0.3", - "earcut": "^2.2.2", - "geojson-vt": "^3.2.1", - "gl-matrix": "^3.2.1", - "grid-index": "^1.1.0", - "murmurhash-js": "^1.0.0", - "pbf": "^3.2.1", - "potpack": "^1.0.1", - "quickselect": "^2.0.0", - "rw": "^1.3.3", - "supercluster": "^7.1.0", - "tinyqueue": "^2.0.3", - "vt-pbf": "^3.1.1" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/@plotly/point-cluster": { - "version": "3.1.9", - "license": "MIT", - "peer": true, - "dependencies": { - "array-bounds": "^1.0.1", - "binary-search-bounds": "^2.0.4", - "clamp": "^1.0.1", - "defined": "^1.0.0", - "dtype": "^2.0.0", - "flatten-vertex-data": "^1.0.2", - "is-obj": "^1.0.1", - "math-log2": "^1.0.1", - "parse-rect": "^1.2.0", - "pick-by-alias": "^1.2.0" - } - }, - "node_modules/@react-aria/breadcrumbs": { - "version": "3.5.19", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.4", - "@react-aria/link": "^3.7.7", - "@react-aria/utils": "^3.26.0", - "@react-types/breadcrumbs": "^3.7.9", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/button": { - "version": "3.11.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/interactions": "^3.22.5", - "@react-aria/toolbar": "3.0.0-beta.11", - "@react-aria/utils": "^3.26.0", - "@react-stately/toggle": "^3.8.0", - "@react-types/button": "^3.10.1", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/calendar": { - "version": "3.6.0", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.6.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/live-announcer": "^3.4.1", - "@react-aria/utils": "^3.26.0", - "@react-stately/calendar": "^3.6.0", - "@react-types/button": "^3.10.1", - "@react-types/calendar": "^3.5.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/checkbox": { - "version": "3.15.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/form": "^3.0.11", - "@react-aria/interactions": "^3.22.5", - "@react-aria/label": "^3.7.13", - "@react-aria/toggle": "^3.10.10", - "@react-aria/utils": "^3.26.0", - "@react-stately/checkbox": "^3.6.10", - "@react-stately/form": "^3.1.0", - "@react-stately/toggle": "^3.8.0", - "@react-types/checkbox": "^3.9.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/collections": { - "version": "3.0.0-alpha.6", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0", - "use-sync-external-store": "^1.2.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/color": { - "version": "3.0.2", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/numberfield": "^3.11.9", - "@react-aria/slider": "^3.7.14", - "@react-aria/spinbutton": "^3.6.10", - "@react-aria/textfield": "^3.15.0", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-stately/color": "^3.8.1", - "@react-stately/form": "^3.1.0", - "@react-types/color": "^3.0.1", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/combobox": { - "version": "3.11.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.4", - "@react-aria/listbox": "^3.13.6", - "@react-aria/live-announcer": "^3.4.1", - "@react-aria/menu": "^3.16.0", - "@react-aria/overlays": "^3.24.0", - "@react-aria/selection": "^3.21.0", - "@react-aria/textfield": "^3.15.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/collections": "^3.12.0", - "@react-stately/combobox": "^3.10.1", - "@react-stately/form": "^3.1.0", - "@react-types/button": "^3.10.1", - "@react-types/combobox": "^3.13.1", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/datepicker": { - "version": "3.12.0", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.6.0", - "@internationalized/number": "^3.6.0", - "@internationalized/string": "^3.2.5", - "@react-aria/focus": "^3.19.0", - "@react-aria/form": "^3.0.11", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/label": "^3.7.13", - "@react-aria/spinbutton": "^3.6.10", - "@react-aria/utils": "^3.26.0", - "@react-stately/datepicker": "^3.11.0", - "@react-stately/form": "^3.1.0", - "@react-types/button": "^3.10.1", - "@react-types/calendar": "^3.5.0", - "@react-types/datepicker": "^3.9.0", - "@react-types/dialog": "^3.5.14", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/dialog": { - "version": "3.5.20", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/overlays": "^3.24.0", - "@react-aria/utils": "^3.26.0", - "@react-types/dialog": "^3.5.14", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/disclosure": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-stately/disclosure": "^3.0.0", - "@react-types/button": "^3.10.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/dnd": { - "version": "3.8.0", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/live-announcer": "^3.4.1", - "@react-aria/overlays": "^3.24.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/dnd": "^3.5.0", - "@react-types/button": "^3.10.1", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/focus": { - "version": "3.19.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.22.5", - "@react-aria/utils": "^3.26.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/form": { - "version": "3.0.11", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.22.5", - "@react-aria/utils": "^3.26.0", - "@react-stately/form": "^3.1.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/grid": { - "version": "3.11.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/live-announcer": "^3.4.1", - "@react-aria/selection": "^3.21.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/collections": "^3.12.0", - "@react-stately/grid": "^3.10.0", - "@react-stately/selection": "^3.18.0", - "@react-types/checkbox": "^3.9.0", - "@react-types/grid": "^3.2.10", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/gridlist": { - "version": "3.10.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/grid": "^3.11.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/selection": "^3.21.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/collections": "^3.12.0", - "@react-stately/list": "^3.11.1", - "@react-stately/tree": "^3.8.6", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/i18n": { - "version": "3.12.4", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.6.0", - "@internationalized/message": "^3.1.6", - "@internationalized/number": "^3.6.0", - "@internationalized/string": "^3.2.5", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/interactions": { - "version": "3.22.5", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/label": { - "version": "3.7.13", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/utils": "^3.26.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/link": { - "version": "3.7.7", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/interactions": "^3.22.5", - "@react-aria/utils": "^3.26.0", - "@react-types/link": "^3.5.9", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/listbox": { - "version": "3.13.6", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.22.5", - "@react-aria/label": "^3.7.13", - "@react-aria/selection": "^3.21.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/collections": "^3.12.0", - "@react-stately/list": "^3.11.1", - "@react-types/listbox": "^3.5.3", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/live-announcer": { - "version": "3.4.1", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@react-aria/menu": { - "version": "3.16.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/overlays": "^3.24.0", - "@react-aria/selection": "^3.21.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/collections": "^3.12.0", - "@react-stately/menu": "^3.9.0", - "@react-stately/selection": "^3.18.0", - "@react-stately/tree": "^3.8.6", - "@react-types/button": "^3.10.1", - "@react-types/menu": "^3.9.13", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/meter": { - "version": "3.4.18", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/progress": "^3.4.18", - "@react-types/meter": "^3.4.5", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/numberfield": { - "version": "3.11.9", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/spinbutton": "^3.6.10", - "@react-aria/textfield": "^3.15.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/form": "^3.1.0", - "@react-stately/numberfield": "^3.9.8", - "@react-types/button": "^3.10.1", - "@react-types/numberfield": "^3.8.7", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/overlays": { - "version": "3.24.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-stately/overlays": "^3.6.12", - "@react-types/button": "^3.10.1", - "@react-types/overlays": "^3.8.11", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/progress": { - "version": "3.4.18", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.4", - "@react-aria/label": "^3.7.13", - "@react-aria/utils": "^3.26.0", - "@react-types/progress": "^3.5.8", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/radio": { - "version": "3.10.10", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/form": "^3.0.11", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/label": "^3.7.13", - "@react-aria/utils": "^3.26.0", - "@react-stately/radio": "^3.10.9", - "@react-types/radio": "^3.8.5", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/searchfield": { - "version": "3.7.11", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.4", - "@react-aria/textfield": "^3.15.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/searchfield": "^3.5.8", - "@react-types/button": "^3.10.1", - "@react-types/searchfield": "^3.5.10", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/select": { - "version": "3.15.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/form": "^3.0.11", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/label": "^3.7.13", - "@react-aria/listbox": "^3.13.6", - "@react-aria/menu": "^3.16.0", - "@react-aria/selection": "^3.21.0", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-stately/select": "^3.6.9", - "@react-types/button": "^3.10.1", - "@react-types/select": "^3.9.8", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/selection": { - "version": "3.21.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/utils": "^3.26.0", - "@react-stately/selection": "^3.18.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/separator": { - "version": "3.4.4", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/utils": "^3.26.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/slider": { - "version": "3.7.14", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/label": "^3.7.13", - "@react-aria/utils": "^3.26.0", - "@react-stately/slider": "^3.6.0", - "@react-types/shared": "^3.26.0", - "@react-types/slider": "^3.7.7", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/spinbutton": { - "version": "3.6.10", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.4", - "@react-aria/live-announcer": "^3.4.1", - "@react-aria/utils": "^3.26.0", - "@react-types/button": "^3.10.1", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/ssr": { - "version": "3.9.7", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/switch": { - "version": "3.6.10", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/toggle": "^3.10.10", - "@react-stately/toggle": "^3.8.0", - "@react-types/shared": "^3.26.0", - "@react-types/switch": "^3.5.7", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/table": { - "version": "3.16.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/grid": "^3.11.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/live-announcer": "^3.4.1", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/flags": "^3.0.5", - "@react-stately/table": "^3.13.0", - "@react-types/checkbox": "^3.9.0", - "@react-types/grid": "^3.2.10", - "@react-types/shared": "^3.26.0", - "@react-types/table": "^3.10.3", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/tabs": { - "version": "3.9.8", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/selection": "^3.21.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/tabs": "^3.7.0", - "@react-types/shared": "^3.26.0", - "@react-types/tabs": "^3.3.11", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/tag": { - "version": "3.4.8", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/gridlist": "^3.10.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/label": "^3.7.13", - "@react-aria/selection": "^3.21.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/list": "^3.11.1", - "@react-types/button": "^3.10.1", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/textfield": { - "version": "3.15.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/form": "^3.0.11", - "@react-aria/label": "^3.7.13", - "@react-aria/utils": "^3.26.0", - "@react-stately/form": "^3.1.0", - "@react-stately/utils": "^3.10.5", - "@react-types/shared": "^3.26.0", - "@react-types/textfield": "^3.10.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/toggle": { - "version": "3.10.10", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/interactions": "^3.22.5", - "@react-aria/utils": "^3.26.0", - "@react-stately/toggle": "^3.8.0", - "@react-types/checkbox": "^3.9.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/toolbar": { - "version": "3.0.0-beta.11", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/utils": "^3.26.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/tooltip": { - "version": "3.7.10", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.19.0", - "@react-aria/interactions": "^3.22.5", - "@react-aria/utils": "^3.26.0", - "@react-stately/tooltip": "^3.5.0", - "@react-types/shared": "^3.26.0", - "@react-types/tooltip": "^3.4.13", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/tree": { - "version": "3.0.0-beta.2", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/gridlist": "^3.10.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/selection": "^3.21.0", - "@react-aria/utils": "^3.26.0", - "@react-stately/tree": "^3.8.6", - "@react-types/button": "^3.10.1", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/utils": { - "version": "3.26.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.7", - "@react-stately/utils": "^3.10.5", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/virtualizer": { - "version": "4.1.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/utils": "^3.26.0", - "@react-stately/virtualizer": "^4.2.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/visually-hidden": { - "version": "3.8.18", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.22.5", - "@react-aria/utils": "^3.26.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/calendar": { - "version": "3.6.0", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.6.0", - "@react-stately/utils": "^3.10.5", - "@react-types/calendar": "^3.5.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/checkbox": { - "version": "3.6.10", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/form": "^3.1.0", - "@react-stately/utils": "^3.10.5", - "@react-types/checkbox": "^3.9.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/collections": { - "version": "3.12.0", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/color": { - "version": "3.8.1", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/number": "^3.6.0", - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-stately/form": "^3.1.0", - "@react-stately/numberfield": "^3.9.8", - "@react-stately/slider": "^3.6.0", - "@react-stately/utils": "^3.10.5", - "@react-types/color": "^3.0.1", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/combobox": { - "version": "3.10.1", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.0", - "@react-stately/form": "^3.1.0", - "@react-stately/list": "^3.11.1", - "@react-stately/overlays": "^3.6.12", - "@react-stately/select": "^3.6.9", - "@react-stately/utils": "^3.10.5", - "@react-types/combobox": "^3.13.1", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/data": { - "version": "3.12.0", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/datepicker": { - "version": "3.11.0", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.6.0", - "@internationalized/string": "^3.2.5", - "@react-stately/form": "^3.1.0", - "@react-stately/overlays": "^3.6.12", - "@react-stately/utils": "^3.10.5", - "@react-types/datepicker": "^3.9.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/disclosure": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/utils": "^3.10.5", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/dnd": { - "version": "3.5.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/selection": "^3.18.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/flags": { - "version": "3.0.5", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@react-stately/form": { - "version": "3.1.0", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/grid": { - "version": "3.10.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.0", - "@react-stately/selection": "^3.18.0", - "@react-types/grid": "^3.2.10", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/layout": { - "version": "4.1.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.0", - "@react-stately/table": "^3.13.0", - "@react-stately/virtualizer": "^4.2.0", - "@react-types/grid": "^3.2.10", - "@react-types/shared": "^3.26.0", - "@react-types/table": "^3.10.3", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/list": { - "version": "3.11.1", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.0", - "@react-stately/selection": "^3.18.0", - "@react-stately/utils": "^3.10.5", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/menu": { - "version": "3.9.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/overlays": "^3.6.12", - "@react-types/menu": "^3.9.13", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/numberfield": { - "version": "3.9.8", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/number": "^3.6.0", - "@react-stately/form": "^3.1.0", - "@react-stately/utils": "^3.10.5", - "@react-types/numberfield": "^3.8.7", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/overlays": { - "version": "3.6.12", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/utils": "^3.10.5", - "@react-types/overlays": "^3.8.11", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/radio": { - "version": "3.10.9", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/form": "^3.1.0", - "@react-stately/utils": "^3.10.5", - "@react-types/radio": "^3.8.5", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/searchfield": { - "version": "3.5.8", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/utils": "^3.10.5", - "@react-types/searchfield": "^3.5.10", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/select": { - "version": "3.6.9", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/form": "^3.1.0", - "@react-stately/list": "^3.11.1", - "@react-stately/overlays": "^3.6.12", - "@react-types/select": "^3.9.8", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/selection": { - "version": "3.18.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.0", - "@react-stately/utils": "^3.10.5", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/slider": { - "version": "3.6.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/utils": "^3.10.5", - "@react-types/shared": "^3.26.0", - "@react-types/slider": "^3.7.7", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/table": { - "version": "3.13.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.0", - "@react-stately/flags": "^3.0.5", - "@react-stately/grid": "^3.10.0", - "@react-stately/selection": "^3.18.0", - "@react-stately/utils": "^3.10.5", - "@react-types/grid": "^3.2.10", - "@react-types/shared": "^3.26.0", - "@react-types/table": "^3.10.3", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/tabs": { - "version": "3.7.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/list": "^3.11.1", - "@react-types/shared": "^3.26.0", - "@react-types/tabs": "^3.3.11", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/toggle": { - "version": "3.8.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/utils": "^3.10.5", - "@react-types/checkbox": "^3.9.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/tooltip": { - "version": "3.5.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/overlays": "^3.6.12", - "@react-types/tooltip": "^3.4.13", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/tree": { - "version": "3.8.6", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.0", - "@react-stately/selection": "^3.18.0", - "@react-stately/utils": "^3.10.5", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/utils": { - "version": "3.10.5", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/virtualizer": { - "version": "4.2.0", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/utils": "^3.26.0", - "@react-types/shared": "^3.26.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/breadcrumbs": { - "version": "3.7.9", - "license": "Apache-2.0", - "dependencies": { - "@react-types/link": "^3.5.9", - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/button": { - "version": "3.10.1", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/calendar": { - "version": "3.5.0", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.6.0", - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/checkbox": { - "version": "3.9.0", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/color": { - "version": "3.0.1", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0", - "@react-types/slider": "^3.7.7" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/combobox": { - "version": "3.13.1", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/datepicker": { - "version": "3.9.0", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.6.0", - "@react-types/calendar": "^3.5.0", - "@react-types/overlays": "^3.8.11", - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/dialog": { - "version": "3.5.14", - "license": "Apache-2.0", - "dependencies": { - "@react-types/overlays": "^3.8.11", - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/form": { - "version": "3.7.8", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/grid": { - "version": "3.2.10", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/link": { - "version": "3.5.9", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/listbox": { - "version": "3.5.3", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/menu": { - "version": "3.9.13", - "license": "Apache-2.0", - "dependencies": { - "@react-types/overlays": "^3.8.11", - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/meter": { - "version": "3.4.5", - "license": "Apache-2.0", - "dependencies": { - "@react-types/progress": "^3.5.8" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/numberfield": { - "version": "3.8.7", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/overlays": { - "version": "3.8.11", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/progress": { - "version": "3.5.8", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/radio": { - "version": "3.8.5", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/searchfield": { - "version": "3.5.10", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0", - "@react-types/textfield": "^3.10.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/select": { - "version": "3.9.8", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/shared": { - "version": "3.26.0", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/slider": { - "version": "3.7.7", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/switch": { - "version": "3.5.7", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/table": { - "version": "3.10.3", - "license": "Apache-2.0", - "dependencies": { - "@react-types/grid": "^3.2.10", - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/tabs": { - "version": "3.3.11", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/textfield": { - "version": "3.10.0", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/tooltip": { - "version": "3.4.13", - "license": "Apache-2.0", - "dependencies": { - "@react-types/overlays": "^3.8.11", - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.20.0", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@swc/helpers": { - "version": "0.5.11", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@turf/area": { - "version": "6.5.0", - "license": "MIT", - "peer": true, - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox": { - "version": "6.5.0", - "license": "MIT", - "peer": true, - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/centroid": { - "version": "6.5.0", - "license": "MIT", - "peer": true, - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/helpers": { - "version": "6.5.0", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/meta": { - "version": "6.5.0", - "license": "MIT", - "peer": true, - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/bun": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "dependencies": { - "bun-types": "1.1.37" - } - }, - "node_modules/@types/d3": { - "version": "7.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-array": "*", - "@types/d3-axis": "*", - "@types/d3-brush": "*", - "@types/d3-chord": "*", - "@types/d3-color": "*", - "@types/d3-contour": "*", - "@types/d3-delaunay": "*", - "@types/d3-dispatch": "*", - "@types/d3-drag": "*", - "@types/d3-dsv": "*", - "@types/d3-ease": "*", - "@types/d3-fetch": "*", - "@types/d3-force": "*", - "@types/d3-format": "*", - "@types/d3-geo": "*", - "@types/d3-hierarchy": "*", - "@types/d3-interpolate": "*", - "@types/d3-path": "*", - "@types/d3-polygon": "*", - "@types/d3-quadtree": "*", - "@types/d3-random": "*", - "@types/d3-scale": "*", - "@types/d3-scale-chromatic": "*", - "@types/d3-selection": "*", - "@types/d3-shape": "*", - "@types/d3-time": "*", - "@types/d3-time-format": "*", - "@types/d3-timer": "*", - "@types/d3-transition": "*", - "@types/d3-zoom": "*" - } - }, - "node_modules/@types/d3-array": { - "version": "3.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-axis": { - "version": "3.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-brush": { - "version": "3.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-chord": { - "version": "3.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-color": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-contour": { - "version": "3.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-array": "*", - "@types/geojson": "*" - } - }, - "node_modules/@types/d3-delaunay": { - "version": "6.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-dispatch": { - "version": "3.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-drag": { - "version": "3.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-dsv": { - "version": "3.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-ease": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-fetch": { - "version": "3.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-dsv": "*" - } - }, - "node_modules/@types/d3-force": { - "version": "3.0.10", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-format": { - "version": "3.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-geo": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/geojson": "*" - } - }, - "node_modules/@types/d3-hierarchy": { - "version": "3.1.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-color": "*" - } - }, - "node_modules/@types/d3-path": { - "version": "3.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-polygon": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-quadtree": { - "version": "3.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-random": { - "version": "3.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-selection": { - "version": "3.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-shape": { - "version": "3.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-path": "*" - } - }, - "node_modules/@types/d3-time": { - "version": "3.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-time-format": { - "version": "4.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-timer": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-transition": { - "version": "3.0.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-zoom": { - "version": "3.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-interpolate": "*", - "@types/d3-selection": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/@types/geojson": { - "version": "7946.0.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.12.14", - "devOptional": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/plotly.js": { - "version": "2.29.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.2.38", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-plotly.js": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/plotly.js": "*", - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/tinycolor2": { - "version": "1.4.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.3.1", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.24.5", - "@babel/plugin-transform-react-jsx-self": "^7.24.5", - "@babel/plugin-transform-react-jsx-source": "^7.24.1", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0" - } - }, - "node_modules/abs-svg-path": { - "version": "0.1.1", - "license": "MIT", - "peer": true - }, - "node_modules/acorn": { - "version": "7.4.1", - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/almost-equal": { - "version": "1.1.0", - "license": "MIT", - "peer": true - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-bounds": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-normalize": { - "version": "1.1.4", - "license": "MIT", - "peer": true, - "dependencies": { - "array-bounds": "^1.0.0" - } - }, - "node_modules/array-range": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/array-rearrange": { - "version": "2.2.2", - "license": "MIT", - "peer": true - }, - "node_modules/base64-arraybuffer": { - "version": "1.0.2", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/binary-search-bounds": { - "version": "2.0.5", - "license": "MIT", - "peer": true - }, - "node_modules/bit-twiddle": { - "version": "1.0.2", - "license": "MIT", - "peer": true - }, - "node_modules/bitmap-sdf": { - "version": "1.0.4", - "license": "MIT", - "peer": true - }, - "node_modules/bl": { - "version": "2.2.1", - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/browserslist": { - "version": "4.23.3", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT", - "peer": true - }, - "node_modules/bun-types": { - "version": "1.1.37", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "~20.12.8", - "@types/ws": "~8.5.10" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001651", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/canvas-fit": { - "version": "1.5.0", - "license": "MIT", - "peer": true, - "dependencies": { - "element-size": "^1.1.1" - } - }, - "node_modules/clamp": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/client-only": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/color-alpha": { - "version": "1.0.4", - "license": "MIT", - "peer": true, - "dependencies": { - "color-parse": "^1.3.8" - } - }, - "node_modules/color-id": { - "version": "1.1.0", - "license": "MIT", - "peer": true, - "dependencies": { - "clamp": "^1.0.1" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT", - "peer": true - }, - "node_modules/color-normalize": { - "version": "1.5.0", - "license": "MIT", - "peer": true, - "dependencies": { - "clamp": "^1.0.1", - "color-rgba": "^2.1.1", - "dtype": "^2.0.0" - } - }, - "node_modules/color-parse": { - "version": "1.3.8", - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "^1.0.0", - "defined": "^1.0.0", - "is-plain-obj": "^1.1.0" - } - }, - "node_modules/color-rgba": { - "version": "2.1.1", - "license": "MIT", - "peer": true, - "dependencies": { - "clamp": "^1.0.1", - "color-parse": "^1.3.8", - "color-space": "^1.14.6" - } - }, - "node_modules/color-space": { - "version": "1.16.0", - "license": "MIT", - "peer": true, - "dependencies": { - "hsluv": "^0.0.3", - "mumath": "^3.3.4" - } - }, - "node_modules/colorjs.io": { - "version": "0.5.2", - "license": "MIT" - }, - "node_modules/commander": { - "version": "2.20.3", - "license": "MIT", - "peer": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concurrently": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/concurrently/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/concurrently/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/concurrently/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "license": "MIT", - "peer": true - }, - "node_modules/country-regex": { - "version": "1.1.0", - "license": "MIT", - "peer": true - }, - "node_modules/css-font": { - "version": "1.2.0", - "license": "MIT", - "peer": true, - "dependencies": { - "css-font-size-keywords": "^1.0.0", - "css-font-stretch-keywords": "^1.0.1", - "css-font-style-keywords": "^1.0.1", - "css-font-weight-keywords": "^1.0.0", - "css-global-keywords": "^1.0.1", - "css-system-font-keywords": "^1.0.0", - "pick-by-alias": "^1.2.0", - "string-split-by": "^1.0.0", - "unquote": "^1.1.0" - } - }, - "node_modules/css-font-size-keywords": { - "version": "1.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/css-font-stretch-keywords": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/css-font-style-keywords": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/css-font-weight-keywords": { - "version": "1.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/css-global-keywords": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/css-system-font-keywords": { - "version": "1.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/csscolorparser": { - "version": "1.0.3", - "license": "MIT", - "peer": true - }, - "node_modules/csstype": { - "version": "3.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/d": { - "version": "1.0.2", - "license": "ISC", - "peer": true, - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/d3": { - "version": "7.9.0", - "license": "ISC", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-array": { - "version": "3.2.4", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-axis": { - "version": "3.0.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-collection": { - "version": "1.0.7", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/d3-color": { - "version": "3.1.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-contour": { - "version": "4.0.2", - "license": "ISC", - "dependencies": { - "d3-array": "^3.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.4", - "license": "ISC", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "1.0.6", - "license": "BSD-3-Clause" - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "d3-dsv": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force": { - "version": "1.2.1", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "1.12.1", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "d3-array": "1" - } - }, - "node_modules/d3-geo-projection": { - "version": "2.9.0", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "commander": "2", - "d3-array": "1", - "d3-geo": "^1.12.0", - "resolve": "^1.1.10" - }, - "bin": { - "geo2svg": "bin/geo2svg", - "geograticule": "bin/geograticule", - "geoproject": "bin/geoproject", - "geoquantize": "bin/geoquantize", - "geostitch": "bin/geostitch" - } - }, - "node_modules/d3-geo-projection/node_modules/d3-array": { - "version": "1.2.4", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/d3-geo/node_modules/d3-array": { - "version": "1.2.4", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/d3-hierarchy": { - "version": "1.1.9", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "1.0.9", - "license": "BSD-3-Clause" - }, - "node_modules/d3-polygon": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "1.0.7", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/d3-random": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "license": "ISC", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "3.1.0", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale/node_modules/d3-time": { - "version": "3.1.0", - "license": "ISC", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "1.3.7", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "d3-path": "1" - } - }, - "node_modules/d3-time": { - "version": "1.1.0", - "license": "BSD-3-Clause" - }, - "node_modules/d3-time-format": { - "version": "2.3.0", - "license": "BSD-3-Clause", - "dependencies": { - "d3-time": "1" - } - }, - "node_modules/d3-timer": { - "version": "1.0.10", - "license": "BSD-3-Clause" - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-dispatch": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-force": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-geo": { - "version": "3.1.1", - "license": "ISC", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-hierarchy": { - "version": "3.1.2", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-path": { - "version": "3.1.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-quadtree": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-shape": { - "version": "3.2.0", - "license": "ISC", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-time": { - "version": "3.1.0", - "license": "ISC", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-time-format": { - "version": "4.1.0", - "license": "ISC", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-timer": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/debug": { - "version": "4.3.6", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "license": "MIT", - "peer": true - }, - "node_modules/defined": { - "version": "1.0.1", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delaunator": { - "version": "5.0.1", - "license": "ISC", - "dependencies": { - "robust-predicates": "^3.0.2" - } - }, - "node_modules/detect-kerning": { - "version": "2.1.2", - "license": "MIT", - "peer": true - }, - "node_modules/draw-svg-path": { - "version": "1.0.0", - "license": "MIT", - "peer": true, - "dependencies": { - "abs-svg-path": "~0.1.1", - "normalize-svg-path": "~0.1.0" - } - }, - "node_modules/dtype": { - "version": "2.0.0", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/dup": { - "version": "1.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "license": "MIT", - "peer": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/earcut": { - "version": "2.2.4", - "license": "ISC", - "peer": true - }, - "node_modules/electron-to-chromium": { - "version": "1.5.6", - "license": "ISC" - }, - "node_modules/element-size": { - "version": "1.1.1", - "license": "MIT", - "peer": true - }, - "node_modules/elementary-circuits-directed-graph": { - "version": "1.3.1", - "license": "MIT", - "peer": true, - "dependencies": { - "strongly-connected-components": "^1.0.1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "peer": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/es5-ext": { - "version": "0.10.64", - "hasInstallScript": true, - "license": "ISC", - "peer": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "license": "MIT", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "license": "ISC", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esniff": { - "version": "2.0.1", - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "license": "MIT", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/events": { - "version": "3.3.0", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "license": "ISC", - "peer": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/falafel": { - "version": "2.2.5", - "license": "MIT", - "peer": true, - "dependencies": { - "acorn": "^7.1.1", - "isarray": "^2.0.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fast-isnumeric": { - "version": "1.1.4", - "license": "MIT", - "peer": true, - "dependencies": { - "is-string-blank": "^1.0.1" - } - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "license": "MIT", - "peer": true - }, - "node_modules/flatten-vertex-data": { - "version": "1.0.2", - "license": "MIT", - "peer": true, - "dependencies": { - "dtype": "^2.0.0" - } - }, - "node_modules/font-atlas": { - "version": "2.1.0", - "license": "MIT", - "peer": true, - "dependencies": { - "css-font": "^1.0.0" - } - }, - "node_modules/font-measure": { - "version": "1.2.2", - "license": "MIT", - "peer": true, - "dependencies": { - "css-font": "^1.2.0" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/geojson-vt": { - "version": "3.2.1", - "license": "ISC", - "peer": true - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-canvas-context": { - "version": "1.0.2", - "license": "MIT", - "peer": true - }, - "node_modules/get-stream": { - "version": "6.0.1", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gl-mat4": { - "version": "1.2.0", - "license": "Zlib", - "peer": true - }, - "node_modules/gl-matrix": { - "version": "3.4.3", - "license": "MIT", - "peer": true - }, - "node_modules/gl-text": { - "version": "1.3.1", - "license": "MIT", - "peer": true, - "dependencies": { - "bit-twiddle": "^1.0.2", - "color-normalize": "^1.5.0", - "css-font": "^1.2.0", - "detect-kerning": "^2.1.2", - "es6-weak-map": "^2.0.3", - "flatten-vertex-data": "^1.0.2", - "font-atlas": "^2.1.0", - "font-measure": "^1.2.2", - "gl-util": "^3.1.2", - "is-plain-obj": "^1.1.0", - "object-assign": "^4.1.1", - "parse-rect": "^1.2.0", - "parse-unit": "^1.0.1", - "pick-by-alias": "^1.2.0", - "regl": "^2.0.0", - "to-px": "^1.0.1", - "typedarray-pool": "^1.1.0" - } - }, - "node_modules/gl-text/node_modules/regl": { - "name": "@plotly/regl", - "version": "2.1.2", - "license": "MIT", - "peer": true - }, - "node_modules/gl-util": { - "version": "3.1.3", - "license": "MIT", - "peer": true, - "dependencies": { - "is-browser": "^2.0.1", - "is-firefox": "^1.0.3", - "is-plain-obj": "^1.1.0", - "number-is-integer": "^1.0.1", - "object-assign": "^4.1.0", - "pick-by-alias": "^1.2.0", - "weak-map": "^1.0.5" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/glsl-inject-defines": { - "version": "1.0.3", - "license": "MIT", - "peer": true, - "dependencies": { - "glsl-token-inject-block": "^1.0.0", - "glsl-token-string": "^1.0.1", - "glsl-tokenizer": "^2.0.2" - } - }, - "node_modules/glsl-resolve": { - "version": "0.0.1", - "license": "MIT", - "peer": true, - "dependencies": { - "resolve": "^0.6.1", - "xtend": "^2.1.2" - } - }, - "node_modules/glsl-resolve/node_modules/resolve": { - "version": "0.6.3", - "license": "MIT", - "peer": true - }, - "node_modules/glsl-resolve/node_modules/xtend": { - "version": "2.2.0", - "peer": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/glsl-token-assignments": { - "version": "2.0.2", - "license": "MIT", - "peer": true - }, - "node_modules/glsl-token-defines": { - "version": "1.0.0", - "license": "MIT", - "peer": true, - "dependencies": { - "glsl-tokenizer": "^2.0.0" - } - }, - "node_modules/glsl-token-depth": { - "version": "1.1.2", - "license": "MIT", - "peer": true - }, - "node_modules/glsl-token-descope": { - "version": "1.0.2", - "license": "MIT", - "peer": true, - "dependencies": { - "glsl-token-assignments": "^2.0.0", - "glsl-token-depth": "^1.1.0", - "glsl-token-properties": "^1.0.0", - "glsl-token-scope": "^1.1.0" - } - }, - "node_modules/glsl-token-inject-block": { - "version": "1.1.0", - "license": "MIT", - "peer": true - }, - "node_modules/glsl-token-properties": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/glsl-token-scope": { - "version": "1.1.2", - "license": "MIT", - "peer": true - }, - "node_modules/glsl-token-string": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/glsl-token-whitespace-trim": { - "version": "1.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/glsl-tokenizer": { - "version": "2.1.5", - "license": "MIT", - "peer": true, - "dependencies": { - "through2": "^0.6.3" - } - }, - "node_modules/glsl-tokenizer/node_modules/through2": { - "version": "0.6.5", - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/glsl-tokenizer/node_modules/through2/node_modules/readable-stream": { - "version": "1.0.34", - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/glsl-tokenizer/node_modules/through2/node_modules/readable-stream/node_modules/isarray": { - "version": "0.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/glsl-tokenizer/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder": { - "version": "0.10.31", - "license": "MIT", - "peer": true - }, - "node_modules/glslify": { - "version": "7.1.1", - "license": "MIT", - "peer": true, - "dependencies": { - "bl": "^2.2.1", - "concat-stream": "^1.5.2", - "duplexify": "^3.4.5", - "falafel": "^2.1.0", - "from2": "^2.3.0", - "glsl-resolve": "0.0.1", - "glsl-token-whitespace-trim": "^1.0.0", - "glslify-bundle": "^5.0.0", - "glslify-deps": "^1.2.5", - "minimist": "^1.2.5", - "resolve": "^1.1.5", - "stack-trace": "0.0.9", - "static-eval": "^2.0.5", - "through2": "^2.0.1", - "xtend": "^4.0.0" - }, - "bin": { - "glslify": "bin.js" - } - }, - "node_modules/glslify-bundle": { - "version": "5.1.1", - "license": "MIT", - "peer": true, - "dependencies": { - "glsl-inject-defines": "^1.0.1", - "glsl-token-defines": "^1.0.0", - "glsl-token-depth": "^1.1.1", - "glsl-token-descope": "^1.0.2", - "glsl-token-scope": "^1.1.1", - "glsl-token-string": "^1.0.1", - "glsl-token-whitespace-trim": "^1.0.0", - "glsl-tokenizer": "^2.0.2", - "murmurhash-js": "^1.0.0", - "shallow-copy": "0.0.1" - } - }, - "node_modules/glslify-deps": { - "version": "1.3.2", - "license": "ISC", - "peer": true, - "dependencies": { - "@choojs/findup": "^0.2.0", - "events": "^3.2.0", - "glsl-resolve": "0.0.1", - "glsl-tokenizer": "^2.0.0", - "graceful-fs": "^4.1.2", - "inherits": "^2.0.1", - "map-limit": "0.0.1", - "resolve": "^1.0.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC", - "peer": true - }, - "node_modules/grid-index": { - "version": "1.1.0", - "license": "ISC", - "peer": true - }, - "node_modules/has-hover": { - "version": "1.0.1", - "license": "MIT", - "peer": true, - "dependencies": { - "is-browser": "^2.0.1" - } - }, - "node_modules/has-passive-events": { - "version": "1.0.0", - "license": "MIT", - "peer": true, - "dependencies": { - "is-browser": "^2.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "license": "MIT", - "peer": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hsluv": { - "version": "0.0.3", - "license": "MIT", - "peer": true - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/immutable": { - "version": "4.3.4", - "devOptional": true, - "license": "MIT" - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC", - "peer": true - }, - "node_modules/internmap": { - "version": "2.0.3", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/intl-messageformat": { - "version": "10.5.13", - "license": "BSD-3-Clause", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.3", - "@formatjs/fast-memoize": "2.2.0", - "@formatjs/icu-messageformat-parser": "2.7.7", - "tslib": "^2.4.0" - } - }, - "node_modules/is-browser": { - "version": "2.1.0", - "license": "MIT", - "peer": true - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "license": "MIT", - "peer": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.1.0", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-firefox": { - "version": "1.0.3", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-iexplorer": { - "version": "1.0.0", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-mobile": { - "version": "4.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/is-obj": { - "version": "1.0.1", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string-blank": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/is-svg-path": { - "version": "1.0.2", - "license": "MIT", - "peer": true - }, - "node_modules/isarray": { - "version": "2.0.5", - "license": "MIT", - "peer": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kdbush": { - "version": "3.0.0", - "license": "ISC", - "peer": true - }, - "node_modules/levn": { - "version": "0.3.0", - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "license": "MIT", - "peer": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/map-limit": { - "version": "0.0.1", - "license": "MIT", - "peer": true, - "dependencies": { - "once": "~1.3.0" - } - }, - "node_modules/map-limit/node_modules/once": { - "version": "1.3.3", - "license": "ISC", - "peer": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/mapbox-gl": { - "version": "1.13.3", - "license": "SEE LICENSE IN LICENSE.txt", - "peer": true, - "dependencies": { - "@mapbox/geojson-rewind": "^0.5.2", - "@mapbox/geojson-types": "^1.0.2", - "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/mapbox-gl-supported": "^1.5.0", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^1.1.1", - "@mapbox/unitbezier": "^0.0.0", - "@mapbox/vector-tile": "^1.3.1", - "@mapbox/whoots-js": "^3.1.0", - "csscolorparser": "~1.0.3", - "earcut": "^2.2.2", - "geojson-vt": "^3.2.1", - "gl-matrix": "^3.2.1", - "grid-index": "^1.1.0", - "murmurhash-js": "^1.0.0", - "pbf": "^3.2.1", - "potpack": "^1.0.1", - "quickselect": "^2.0.0", - "rw": "^1.3.3", - "supercluster": "^7.1.0", - "tinyqueue": "^2.0.3", - "vt-pbf": "^3.1.1" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/math-log2": { - "version": "1.0.1", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mouse-change": { - "version": "1.4.0", - "license": "MIT", - "peer": true, - "dependencies": { - "mouse-event": "^1.0.0" - } - }, - "node_modules/mouse-event": { - "version": "1.0.5", - "license": "MIT", - "peer": true - }, - "node_modules/mouse-event-offset": { - "version": "3.0.2", - "license": "MIT", - "peer": true - }, - "node_modules/mouse-wheel": { - "version": "1.2.0", - "license": "MIT", - "peer": true, - "dependencies": { - "right-now": "^1.0.0", - "signum": "^1.0.0", - "to-px": "^1.0.1" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/mumath": { - "version": "3.3.4", - "license": "Unlicense", - "peer": true, - "dependencies": { - "almost-equal": "^1.1.0" - } - }, - "node_modules/murmurhash-js": { - "version": "1.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/native-promise-only": { - "version": "0.8.1", - "license": "MIT", - "peer": true - }, - "node_modules/needle": { - "version": "2.9.1", - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT", - "peer": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "license": "ISC", - "peer": true - }, - "node_modules/node-releases": { - "version": "2.0.18", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-svg-path": { - "version": "0.1.0", - "license": "MIT", - "peer": true - }, - "node_modules/number-is-integer": { - "version": "1.0.1", - "license": "MIT", - "peer": true, - "dependencies": { - "is-finite": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "peer": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "license": "MIT", - "peer": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/parenthesis": { - "version": "3.1.8", - "license": "MIT", - "peer": true - }, - "node_modules/parse-rect": { - "version": "1.2.0", - "license": "MIT", - "peer": true, - "dependencies": { - "pick-by-alias": "^1.2.0" - } - }, - "node_modules/parse-svg-path": { - "version": "0.1.2", - "license": "MIT", - "peer": true - }, - "node_modules/parse-unit": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT", - "peer": true - }, - "node_modules/pbf": { - "version": "3.2.1", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "ieee754": "^1.1.12", - "resolve-protobuf-schema": "^2.1.0" - }, - "bin": { - "pbf": "bin/pbf" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "license": "MIT", - "peer": true - }, - "node_modules/pick-by-alias": { - "version": "1.2.0", - "license": "MIT", - "peer": true - }, - "node_modules/picocolors": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/plotly.js": { - "version": "2.30.0", - "license": "MIT", - "peer": true, - "dependencies": { - "@plotly/d3": "3.8.1", - "@plotly/d3-sankey": "0.7.2", - "@plotly/d3-sankey-circular": "0.33.1", - "@plotly/mapbox-gl": "v1.13.4", - "@turf/area": "^6.4.0", - "@turf/bbox": "^6.4.0", - "@turf/centroid": "^6.0.2", - "base64-arraybuffer": "^1.0.2", - "canvas-fit": "^1.5.0", - "color-alpha": "1.0.4", - "color-normalize": "1.5.0", - "color-parse": "1.3.8", - "color-rgba": "2.1.1", - "country-regex": "^1.1.0", - "d3-force": "^1.2.1", - "d3-format": "^1.4.5", - "d3-geo": "^1.12.1", - "d3-geo-projection": "^2.9.0", - "d3-hierarchy": "^1.1.9", - "d3-interpolate": "^3.0.1", - "d3-time": "^1.1.0", - "d3-time-format": "^2.2.3", - "fast-isnumeric": "^1.1.4", - "gl-mat4": "^1.2.0", - "gl-text": "^1.3.1", - "has-hover": "^1.0.1", - "has-passive-events": "^1.0.0", - "is-mobile": "^4.0.0", - "mouse-change": "^1.4.0", - "mouse-event-offset": "^3.0.2", - "mouse-wheel": "^1.2.0", - "native-promise-only": "^0.8.1", - "parse-svg-path": "^0.1.2", - "point-in-polygon": "^1.1.0", - "polybooljs": "^1.2.0", - "probe-image-size": "^7.2.3", - "regl": "npm:@plotly/regl@^2.1.2", - "regl-error2d": "^2.0.12", - "regl-line2d": "^3.1.3", - "regl-scatter2d": "^3.3.1", - "regl-splom": "^1.0.14", - "strongly-connected-components": "^1.0.1", - "superscript-text": "^1.0.0", - "svg-path-sdf": "^1.1.3", - "tinycolor2": "^1.4.2", - "to-px": "1.0.1", - "topojson-client": "^3.1.0", - "webgl-context": "^2.2.0", - "world-calendars": "^1.0.3" - } - }, - "node_modules/plotly.js-cartesian-dist-min": { - "version": "2.35.3", - "license": "MIT" - }, - "node_modules/plotly.js/node_modules/d3-format": { - "version": "1.4.5", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/plotly.js/node_modules/regl": { - "name": "@plotly/regl", - "version": "2.1.2", - "license": "MIT", - "peer": true - }, - "node_modules/point-in-polygon": { - "version": "1.1.0", - "license": "MIT", - "peer": true - }, - "node_modules/polybooljs": { - "version": "1.2.0", - "license": "MIT", - "peer": true - }, - "node_modules/postcss": { - "version": "8.4.41", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss/node_modules/source-map-js": { - "version": "1.2.0", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/potpack": { - "version": "1.0.2", - "license": "ISC", - "peer": true - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", - "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/probe-image-size": { - "version": "7.2.3", - "license": "MIT", - "peer": true, - "dependencies": { - "lodash.merge": "^4.6.2", - "needle": "^2.5.2", - "stream-parser": "~0.3.1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/prop-types": { - "version": "15.8.1", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/protocol-buffers-schema": { - "version": "3.6.0", - "license": "MIT", - "peer": true - }, - "node_modules/quickselect": { - "version": "2.0.0", - "license": "ISC", - "peer": true - }, - "node_modules/raf": { - "version": "3.4.1", - "license": "MIT", - "peer": true, - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/react": { - "version": "18.2.0", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-aria": { - "version": "3.36.0", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/breadcrumbs": "^3.5.19", - "@react-aria/button": "^3.11.0", - "@react-aria/calendar": "^3.6.0", - "@react-aria/checkbox": "^3.15.0", - "@react-aria/color": "^3.0.2", - "@react-aria/combobox": "^3.11.0", - "@react-aria/datepicker": "^3.12.0", - "@react-aria/dialog": "^3.5.20", - "@react-aria/disclosure": "^3.0.0", - "@react-aria/dnd": "^3.8.0", - "@react-aria/focus": "^3.19.0", - "@react-aria/gridlist": "^3.10.0", - "@react-aria/i18n": "^3.12.4", - "@react-aria/interactions": "^3.22.5", - "@react-aria/label": "^3.7.13", - "@react-aria/link": "^3.7.7", - "@react-aria/listbox": "^3.13.6", - "@react-aria/menu": "^3.16.0", - "@react-aria/meter": "^3.4.18", - "@react-aria/numberfield": "^3.11.9", - "@react-aria/overlays": "^3.24.0", - "@react-aria/progress": "^3.4.18", - "@react-aria/radio": "^3.10.10", - "@react-aria/searchfield": "^3.7.11", - "@react-aria/select": "^3.15.0", - "@react-aria/selection": "^3.21.0", - "@react-aria/separator": "^3.4.4", - "@react-aria/slider": "^3.7.14", - "@react-aria/ssr": "^3.9.7", - "@react-aria/switch": "^3.6.10", - "@react-aria/table": "^3.16.0", - "@react-aria/tabs": "^3.9.8", - "@react-aria/tag": "^3.4.8", - "@react-aria/textfield": "^3.15.0", - "@react-aria/tooltip": "^3.7.10", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/react-aria-components": { - "version": "1.5.0", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.6.0", - "@internationalized/string": "^3.2.5", - "@react-aria/collections": "3.0.0-alpha.6", - "@react-aria/color": "^3.0.2", - "@react-aria/disclosure": "^3.0.0", - "@react-aria/dnd": "^3.8.0", - "@react-aria/focus": "^3.19.0", - "@react-aria/interactions": "^3.22.5", - "@react-aria/live-announcer": "^3.4.1", - "@react-aria/menu": "^3.16.0", - "@react-aria/toolbar": "3.0.0-beta.11", - "@react-aria/tree": "3.0.0-beta.2", - "@react-aria/utils": "^3.26.0", - "@react-aria/virtualizer": "^4.1.0", - "@react-stately/color": "^3.8.1", - "@react-stately/disclosure": "^3.0.0", - "@react-stately/layout": "^4.1.0", - "@react-stately/menu": "^3.9.0", - "@react-stately/selection": "^3.18.0", - "@react-stately/table": "^3.13.0", - "@react-stately/utils": "^3.10.5", - "@react-stately/virtualizer": "^4.2.0", - "@react-types/color": "^3.0.1", - "@react-types/form": "^3.7.8", - "@react-types/grid": "^3.2.10", - "@react-types/shared": "^3.26.0", - "@react-types/table": "^3.10.3", - "@swc/helpers": "^0.5.0", - "client-only": "^0.0.1", - "react-aria": "^3.36.0", - "react-stately": "^3.34.0", - "use-sync-external-store": "^1.2.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "node_modules/react-plotly.js": { - "version": "2.6.0", - "license": "MIT", - "dependencies": { - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "plotly.js": ">1.34.0", - "react": ">0.13.0" - } - }, - "node_modules/react-refresh": { - "version": "0.14.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-stately": { - "version": "3.34.0", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/calendar": "^3.6.0", - "@react-stately/checkbox": "^3.6.10", - "@react-stately/collections": "^3.12.0", - "@react-stately/color": "^3.8.1", - "@react-stately/combobox": "^3.10.1", - "@react-stately/data": "^3.12.0", - "@react-stately/datepicker": "^3.11.0", - "@react-stately/disclosure": "^3.0.0", - "@react-stately/dnd": "^3.5.0", - "@react-stately/form": "^3.1.0", - "@react-stately/list": "^3.11.1", - "@react-stately/menu": "^3.9.0", - "@react-stately/numberfield": "^3.9.8", - "@react-stately/overlays": "^3.6.12", - "@react-stately/radio": "^3.10.9", - "@react-stately/searchfield": "^3.5.8", - "@react-stately/select": "^3.6.9", - "@react-stately/selection": "^3.18.0", - "@react-stately/slider": "^3.6.0", - "@react-stately/table": "^3.13.0", - "@react-stately/tabs": "^3.7.0", - "@react-stately/toggle": "^3.8.0", - "@react-stately/tooltip": "^3.5.0", - "@react-stately/tree": "^3.8.6", - "@react-types/shared": "^3.26.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT", - "peer": true - }, - "node_modules/regl-error2d": { - "version": "2.0.12", - "license": "MIT", - "peer": true, - "dependencies": { - "array-bounds": "^1.0.1", - "color-normalize": "^1.5.0", - "flatten-vertex-data": "^1.0.2", - "object-assign": "^4.1.1", - "pick-by-alias": "^1.2.0", - "to-float32": "^1.1.0", - "update-diff": "^1.1.0" - } - }, - "node_modules/regl-line2d": { - "version": "3.1.3", - "license": "MIT", - "peer": true, - "dependencies": { - "array-bounds": "^1.0.1", - "array-find-index": "^1.0.2", - "array-normalize": "^1.1.4", - "color-normalize": "^1.5.0", - "earcut": "^2.1.5", - "es6-weak-map": "^2.0.3", - "flatten-vertex-data": "^1.0.2", - "object-assign": "^4.1.1", - "parse-rect": "^1.2.0", - "pick-by-alias": "^1.2.0", - "to-float32": "^1.1.0" - } - }, - "node_modules/regl-scatter2d": { - "version": "3.3.1", - "license": "MIT", - "peer": true, - "dependencies": { - "@plotly/point-cluster": "^3.1.9", - "array-range": "^1.0.1", - "array-rearrange": "^2.2.2", - "clamp": "^1.0.1", - "color-id": "^1.1.0", - "color-normalize": "^1.5.0", - "color-rgba": "^2.1.1", - "flatten-vertex-data": "^1.0.2", - "glslify": "^7.0.0", - "is-iexplorer": "^1.0.0", - "object-assign": "^4.1.1", - "parse-rect": "^1.2.0", - "pick-by-alias": "^1.2.0", - "to-float32": "^1.1.0", - "update-diff": "^1.1.0" - } - }, - "node_modules/regl-splom": { - "version": "1.0.14", - "license": "MIT", - "peer": true, - "dependencies": { - "array-bounds": "^1.0.1", - "array-range": "^1.0.1", - "color-alpha": "^1.0.4", - "flatten-vertex-data": "^1.0.2", - "parse-rect": "^1.2.0", - "pick-by-alias": "^1.2.0", - "raf": "^3.4.1", - "regl-scatter2d": "^3.2.3" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "license": "MIT", - "peer": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "license": "MIT", - "peer": true, - "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } - }, - "node_modules/right-now": { - "version": "1.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/robust-predicates": { - "version": "3.0.2", - "license": "Unlicense" - }, - "node_modules/rollup": { - "version": "4.20.0", - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.20.0", - "@rollup/rollup-android-arm64": "4.20.0", - "@rollup/rollup-darwin-arm64": "4.20.0", - "@rollup/rollup-darwin-x64": "4.20.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", - "@rollup/rollup-linux-arm-musleabihf": "4.20.0", - "@rollup/rollup-linux-arm64-gnu": "4.20.0", - "@rollup/rollup-linux-arm64-musl": "4.20.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", - "@rollup/rollup-linux-riscv64-gnu": "4.20.0", - "@rollup/rollup-linux-s390x-gnu": "4.20.0", - "@rollup/rollup-linux-x64-gnu": "4.20.0", - "@rollup/rollup-linux-x64-musl": "4.20.0", - "@rollup/rollup-win32-arm64-msvc": "4.20.0", - "@rollup/rollup-win32-ia32-msvc": "4.20.0", - "@rollup/rollup-win32-x64-msvc": "4.20.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-script-os": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "bin": { - "run-os": "index.js", - "run-script-os": "index.js" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "license": "BSD-3-Clause" - }, - "node_modules/rxjs": { - "version": "7.8.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.69.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass/node_modules/anymatch": { - "version": "3.1.3", - "devOptional": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/sass/node_modules/binary-extensions": { - "version": "2.2.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sass/node_modules/braces": { - "version": "3.0.3", - "devOptional": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sass/node_modules/chokidar": { - "version": "3.5.3", - "devOptional": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/sass/node_modules/fill-range": { - "version": "7.1.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sass/node_modules/glob-parent": { - "version": "5.1.2", - "devOptional": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sass/node_modules/is-binary-path": { - "version": "2.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sass/node_modules/is-number": { - "version": "7.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/sass/node_modules/readdirp": { - "version": "3.6.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/sass/node_modules/to-regex-range": { - "version": "5.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "license": "ISC", - "peer": true - }, - "node_modules/scheduler": { - "version": "0.23.0", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shallow-copy": { - "version": "0.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signum": { - "version": "1.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "devOptional": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-trace": { - "version": "0.0.9", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/static-eval": { - "version": "2.1.0", - "license": "MIT", - "peer": true, - "dependencies": { - "escodegen": "^1.11.1" - } - }, - "node_modules/stream-parser": { - "version": "0.3.1", - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2" - } - }, - "node_modules/stream-parser/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/stream-parser/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/stream-shift": { - "version": "1.0.3", - "license": "MIT", - "peer": true - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT", - "peer": true - }, - "node_modules/string-split-by": { - "version": "1.0.0", - "license": "MIT", - "peer": true, - "dependencies": { - "parenthesis": "^3.1.5" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strongly-connected-components": { - "version": "1.0.1", - "license": "MIT", - "peer": true - }, - "node_modules/supercluster": { - "version": "7.1.5", - "license": "ISC", - "peer": true, - "dependencies": { - "kdbush": "^3.0.0" - } - }, - "node_modules/superscript-text": { - "version": "1.0.0", - "license": "MIT", - "peer": true - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-arc-to-cubic-bezier": { - "version": "3.2.0", - "license": "ISC", - "peer": true - }, - "node_modules/svg-path-bounds": { - "version": "1.0.2", - "license": "MIT", - "peer": true, - "dependencies": { - "abs-svg-path": "^0.1.1", - "is-svg-path": "^1.0.1", - "normalize-svg-path": "^1.0.0", - "parse-svg-path": "^0.1.2" - } - }, - "node_modules/svg-path-bounds/node_modules/normalize-svg-path": { - "version": "1.1.0", - "license": "MIT", - "peer": true, - "dependencies": { - "svg-arc-to-cubic-bezier": "^3.0.0" - } - }, - "node_modules/svg-path-sdf": { - "version": "1.1.3", - "license": "MIT", - "peer": true, - "dependencies": { - "bitmap-sdf": "^1.0.0", - "draw-svg-path": "^1.0.0", - "is-svg-path": "^1.0.1", - "parse-svg-path": "^0.1.2", - "svg-path-bounds": "^1.0.1" - } - }, - "node_modules/through2": { - "version": "2.0.5", - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "license": "MIT" - }, - "node_modules/tinyqueue": { - "version": "2.0.3", - "license": "ISC", - "peer": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-float32": { - "version": "1.1.0", - "license": "MIT", - "peer": true - }, - "node_modules/to-px": { - "version": "1.0.1", - "license": "MIT", - "peer": true, - "dependencies": { - "parse-unit": "^1.0.1" - } - }, - "node_modules/topojson-client": { - "version": "3.1.0", - "license": "ISC", - "peer": true, - "dependencies": { - "commander": "2" - }, - "bin": { - "topo2geo": "bin/topo2geo", - "topomerge": "bin/topomerge", - "topoquantize": "bin/topoquantize" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "license": "0BSD" - }, - "node_modules/type": { - "version": "2.7.2", - "license": "ISC", - "peer": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "license": "MIT", - "peer": true - }, - "node_modules/typedarray-pool": { - "version": "1.2.0", - "license": "MIT", - "peer": true, - "dependencies": { - "bit-twiddle": "^1.0.0", - "dup": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.7.2", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "devOptional": true, - "license": "MIT" - }, - "node_modules/unquote": { - "version": "1.1.1", - "license": "MIT", - "peer": true - }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-diff": { - "version": "1.1.0", - "license": "MIT", - "peer": true - }, - "node_modules/use-sync-external-store": { - "version": "1.2.2", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT", - "peer": true - }, - "node_modules/vite": { - "version": "5.4.0", - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.40", - "rollup": "^4.13.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vt-pbf": { - "version": "3.1.3", - "license": "MIT", - "peer": true, - "dependencies": { - "@mapbox/point-geometry": "0.1.0", - "@mapbox/vector-tile": "^1.3.1", - "pbf": "^3.2.1" - } - }, - "node_modules/weak-map": { - "version": "1.0.8", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/webgl-context": { - "version": "2.2.0", - "license": "MIT", - "peer": true, - "dependencies": { - "get-canvas-context": "^1.0.1" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/world-calendars": { - "version": "1.0.3", - "license": "MIT", - "peer": true, - "dependencies": { - "object-assign": "^4.1.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC", - "peer": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/zod": { - "version": "3.23.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} From 5755e5ffb6dd27d501af8320962340079bce289f Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Mon, 3 Mar 2025 21:11:40 -0800 Subject: [PATCH 11/57] clustermap settings and bug fixes --- backend/src/app.py | 3 +- backend/src/document_state.py | 24 ++ frontend/src/appState.ts | 28 ++- frontend/src/colors.ts | 33 +++ frontend/src/components/ClusterControls.tsx | 0 frontend/src/components/Clustermap.tsx | 133 ++++++---- frontend/src/components/ClustermapSidebar.tsx | 232 ++++++++++++++++++ frontend/src/components/D3CanvasHeatmap.tsx | 54 ++-- frontend/src/components/Heatmap.tsx | 11 +- frontend/src/components/Viewer.tsx | 10 +- frontend/src/hooks/map.ts | 20 +- frontend/src/parseDocState.ts | 4 + frontend/src/plotTypes.ts | 40 +++ 13 files changed, 491 insertions(+), 101 deletions(-) delete mode 100644 frontend/src/components/ClusterControls.tsx create mode 100644 frontend/src/components/ClustermapSidebar.tsx diff --git a/backend/src/app.py b/backend/src/app.py index f7354a4..b5b3537 100644 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -532,7 +532,7 @@ def get_data(self, doc_id: str): ) return json.dumps(data_to_dump) - def generate_cluster_data(self, doc_id: str, threshold_one: int, threshold_two: int = 0): ## T2 set to zero for now to just get one working + def generate_cluster_data(self, doc_id: str, threshold_one: int, threshold_two: int = 0): doc = get_document(doc_id) if doc is None: raise Exception(f"Could not find document: {doc_id}") @@ -583,6 +583,7 @@ def save_doc_settings(self, args: dict): args["id"], dataView=args["dataView"], heatmap=args["heatmap"], + clustermap=args["clustermap"], distribution=args["distribution"], ) doc = get_document(args["id"]) diff --git a/backend/src/document_state.py b/backend/src/document_state.py index a949533..a2ac833 100644 --- a/backend/src/document_state.py +++ b/backend/src/document_state.py @@ -23,6 +23,7 @@ "validation_error_id", "compute_stats", "heatmap", + "clustermap", "distribution" ], ) @@ -56,6 +57,26 @@ cutoff_2=75 ) +default_clustermap_state = dict( + threshold_one=85, + threshold_two=0, + annotation=False, + annotation_font_size=10, + annotation_rounding=0, + annotation_alpha="0", + titleFont="Sans Serif", + showTitles=False, + title="", + subtitle="", + xtitle="", + ytitle="", + axis_labels=False, + axlabel_xrotation=270, + axlabel_xfontsize=12, + axlabel_yrotation=360, + axlabel_yfontsize=12, +) + visualization_defaults = dict( plotTitle="Distribution of Percent Identities", lineColor="hsl(9, 100%, 64%)", @@ -163,6 +184,7 @@ def create_document_state( validation_error_id=None, compute_stats=None, heatmap=default_heatmap_state, + clustermap=default_clustermap_state, distribution=default_distribution_state ): if filetype == "application/vnd.sdt" and tempdir_path: @@ -191,6 +213,7 @@ def create_document_state( validation_error_id=validation_error_id, compute_stats=compute_stats, heatmap=heatmap, + clustermap=clustermap, distribution=distribution ) @@ -210,6 +233,7 @@ def save_doc_settings(doc_state: DocState): settings = { "dataView": doc_state.dataView, "heatmap": doc_state.heatmap, + "clustermap": doc_state.clustermap, "distribution": doc_state.distribution } json.dump(settings, f, indent=2) diff --git a/frontend/src/appState.ts b/frontend/src/appState.ts index 5528091..684bf87 100644 --- a/frontend/src/appState.ts +++ b/frontend/src/appState.ts @@ -6,7 +6,12 @@ import { initialDistributionState, } from "./distributionState"; import type messages from "./messages"; -import { type HeatmapSettings, HeatmapSettingsSchema } from "./plotTypes"; +import { + type ClustermapSettings, + ClustermapSettingsSchema, + type HeatmapSettings, + HeatmapSettingsSchema, +} from "./plotTypes"; export const clusterMethods = ["Neighbor-Joining", "UPGMA"] as const; export const clusterMethodDescriptions = [ @@ -50,6 +55,7 @@ export type DocState = { | "distribution_raincloud"; distribution: DistributionState; heatmap: HeatmapSettings; + clustermap: ClustermapSettings; }; export type AppState = { @@ -123,6 +129,7 @@ export const docStateSchema = z.object({ ]), distribution: DistributionStateSchema, heatmap: HeatmapSettingsSchema, + clustermap: ClustermapSettingsSchema, }); export const initialDocState: DocState = { @@ -170,6 +177,25 @@ export const initialDocState: DocState = { cutoff_1: 95, cutoff_2: 75, }, + clustermap: { + threshold_one: 85, + threshold_two: 0, + annotation: false, + annotation_font_size: 10, + annotation_rounding: 0, + annotation_alpha: "0", + titleFont: "Sans Serif", + showTitles: false, + title: "", + subtitle: "", + xtitle: "", + ytitle: "", + axis_labels: false, + axlabel_xrotation: 270, + axlabel_xfontsize: 12, + axlabel_yrotation: 360, + axlabel_yfontsize: 12, + }, }; export const initialAppState: AppState = { diff --git a/frontend/src/colors.ts b/frontend/src/colors.ts index c7241ca..d1103c6 100644 --- a/frontend/src/colors.ts +++ b/frontend/src/colors.ts @@ -200,3 +200,36 @@ export const Colors: Record = { MediumOrchid: "hsl(288, 59%, 58%)", None: "hsla(0, 0%, 0%, 0)", } as const; + +export const clusterGroupColors = [ + "red", + "pink", + "blue", + "green", + "purple", + "orange", + "lime", + "teal", + "navy", + "yellow", + "aqua", + "fuchsia", + "gold", + "chocolate", + "tomato", + "salmon", + "magenta", + "hotpink", + "cornflowerblue", + "darkgreen", + "darkslategray", + "coral", + "orchid", + "turquoise", + "silver", + "maroon", + "olive", + "black", + "white", + "gray", +]; diff --git a/frontend/src/components/ClusterControls.tsx b/frontend/src/components/ClusterControls.tsx deleted file mode 100644 index e69de29..0000000 diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index 9e85828..abf3ea0 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -1,19 +1,48 @@ import React from "react"; -import type { DocState } from "../appState"; +import type { DocState, SetDocState } from "../appState"; import type { ColorScaleArray } from "../colorScales"; -import { plotFontMonospace } from "../constants"; +import { plotFontMonospace, type plotFontSansSerif } from "../constants"; import { useHeatmapData, useMetrics, useSize } from "../hooks/map"; -import type { HeatmapData } from "../plotTypes"; +import type { ClustermapSettings, HeatmapData } from "../plotTypes"; +import { ClustermapSidebar } from "./ClustermapSidebar"; import { D3CanvasHeatmap } from "./D3CanvasHeatmap"; +export type ClustermapRenderProps = { + data: { x: number; y: number; value: number }[]; + settings: ClustermapSettings; + tickText: string[]; + width: number; + height: number; + roundTo: number; + axlabel_xfontsize: number; + axlabel_yfontsize: number; + axlabel_xrotation: number; + axlabel_yrotation: number; + showPercentIdentities: boolean; + showTitles: boolean; + title: string; + subtitle: string; + showscale: boolean; + axis_labels: boolean; + titleFont: typeof plotFontMonospace | typeof plotFontSansSerif; + margin: { top: number; bottom: number; left: number; right: number }; +} & Pick & { + clusterData?: { + id: string; + group: number; + }[]; + }; + export const Clustermap = ({ data, docState, + setDocState, tickText, leftSidebarCollapsed, }: { data: HeatmapData; docState: DocState; + setDocState: SetDocState; tickText: string[]; leftSidebarCollapsed: boolean; }) => { @@ -26,22 +55,33 @@ export const Clustermap = ({ >(); React.useEffect(() => { + console.log("fetching...", docState.clustermap); window.pywebview.api - .generate_cluster_data(docState.id, 85, 0) + .generate_cluster_data( + docState.id, + docState.clustermap.threshold_one, + docState.clustermap.threshold_two, + ) .then((clusterData) => { setClusterData(clusterData); - }) - .catch((e) => { - alert(e); - throw e; }); - }, [docState.id]); + }, [docState.id, docState.clustermap]); const elementRef = React.useRef(null); const size = useSize(elementRef, leftSidebarCollapsed); - // TODO: make this cluster settings - const { heatmap: settings } = docState; - const { cbar_aspect, cbar_shrink, margin } = useMetrics(settings, tickText); + const { clustermap: settings } = docState; + const { margin } = useMetrics(settings, tickText); + const updateSettings = React.useCallback( + (values: Partial) => + setDocState((prev) => ({ + ...prev, + clustermap: { + ...prev.clustermap, + ...values, + }, + })), + [setDocState], + ); const colorScale: ColorScaleArray = [ [0, "rgb(0,0,0)"], @@ -50,36 +90,45 @@ export const Clustermap = ({ const d3HeatmapData = useHeatmapData(data); - return data && clusterData ? ( -
- +
+ {data && clusterData ? ( + + ) : null} +
+ -
- ) : null; + + ); }; diff --git a/frontend/src/components/ClustermapSidebar.tsx b/frontend/src/components/ClustermapSidebar.tsx new file mode 100644 index 0000000..f42da1d --- /dev/null +++ b/frontend/src/components/ClustermapSidebar.tsx @@ -0,0 +1,232 @@ +import React from "react"; +import { Input, Label, TextField } from "react-aria-components"; +import type { DocState } from "../appState"; +import type { HeatmapSettings } from "../plotTypes"; +import { NumberInput } from "./NumberInput"; +import { Select, SelectItem } from "./Select"; +import { Switch } from "./Switch"; + +export const ClustermapSidebar = ({ + settings, + updateSettings, + sequences_count, +}: { + settings: DocState["clustermap"]; + updateSettings: (values: Partial) => void; + sequences_count: number; +}) => { + const maybeWarnPerformance = React.useCallback( + (enabled: boolean, fn: () => void) => { + if ( + enabled && + sequences_count > 99 && + !confirm( + "Warning: Enabling this setting may significantly impact render performance.", + ) + ) { + return; + } + fn(); + }, + [sequences_count], + ); + + return ( +
+
+
+
+ +
+
+
+ +
+
+ +
+
+
+
+
+ + maybeWarnPerformance(value, () => + updateSettings({ + annotation: value, + }), + ) + } + > + Percent Identities + +
+
+
+ + +
+ +
+
+
+
+ + maybeWarnPerformance(value, () => + updateSettings({ + axis_labels: value, + }), + ) + } + > + Axis Labels + +
+
+ + + + +
+
+
+ +
+ { + updateSettings({ + showTitles: value, + }); + }} + > + Plot Titles + +
+
+ + +
+ +
+ updateSettings({ title: value })} + value={settings.title} + > + + + +
+
+
+
+
+
+ ); +}; diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 8302596..091ebf8 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -1,7 +1,7 @@ import * as d3 from "d3"; import React from "react"; import tinycolor from "tinycolor2"; -import { createD3ColorScale } from "../colors"; +import { clusterGroupColors, createD3ColorScale } from "../colors"; import { plotFontMonospace } from "../constants"; import { useHeatmapRef } from "../hooks/useHeatmapRef"; import type { HeatmapRenderProps } from "./Heatmap"; @@ -71,10 +71,16 @@ export const D3CanvasHeatmap = ({ const drawCanvas = React.useCallback(() => { const canvas = canvasRef.current; - if (!canvas) return; + if (!canvas) { + console.warn("Failed to find canvas"); + return; + } const ctx = canvas.getContext("2d"); - if (!ctx) return; + if (!ctx) { + console.warn("Failed to get 2d context"); + return; + } const pixelRatio = window.devicePixelRatio || 1; canvas.width = width * pixelRatio; @@ -107,39 +113,6 @@ export const D3CanvasHeatmap = ({ const y = rows.indexOf(d.y) * cellSize + cellSpace / 2; const rectSize = cellSize - cellSpace; - const TEMP_clusterGroupColors = [ - "red", - "pink", - "blue", - "green", - "purple", - "orange", - "lime", - "teal", - "navy", - "yellow", - "aqua", - "fuchsia", - "gold", - "chocolate", - "tomato", - "salmon", - "magenta", - "hotpink", - "cornflowerblue", - "darkgreen", - "darkslategray", - "coral", - "orchid", - "turquoise", - "silver", - "maroon", - "olive", - "black", - "white", - "gray", - ]; - const clusterX = clusterData?.find((i) => i.id === tickText[d.x])?.group; const clusterY = clusterData?.find((i) => i.id === tickText[d.y])?.group; @@ -151,14 +124,15 @@ export const D3CanvasHeatmap = ({ const clusterGroup = clusterMatch ? clusterX : null; ctx.fillStyle = clusterGroup - ? TEMP_clusterGroupColors[clusterGroup] || "red" + ? clusterGroupColors[clusterGroup] || "red" : colorFn(d.value); ctx.fillRect(x, y, rectSize, rectSize); if (showPercentIdentities) { - const textColor = tinycolor(colorFn(d.value)).isLight() - ? "#000" - : "#fff"; + const rectColor = clusterGroup + ? clusterGroupColors[clusterGroup] + : colorFn(d.value); + const textColor = tinycolor(rectColor).isLight() ? "#000" : "#fff"; ctx.fillStyle = textColor; ctx.textAlign = "center"; ctx.textBaseline = "middle"; diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index 116c15f..8ed0694 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -73,9 +73,6 @@ export const Heatmap = ({ [setDocState], ); - console.log(data); - console.log(tickText); - const discreteColorScale: ColorScaleArray = React.useMemo(() => { const scales = [ [metaData.minVal, "#CDF0FF"], @@ -142,8 +139,8 @@ export const Heatmap = ({ cellSpace={settings.cellspace} showPercentIdentities={settings.annotation} roundTo={settings.annotation_rounding} - cbarHeight={cbar_shrink} - cbarWidth={cbar_aspect} + cbarHeight={cbar_shrink ?? settings.cbar_shrink} + cbarWidth={cbar_aspect ?? settings.cbar_aspect} annotation_font_size={settings.annotation_font_size} axlabel_xrotation={settings.axlabel_xrotation} axlabel_xfontsize={settings.axlabel_xfontsize} @@ -170,8 +167,8 @@ export const Heatmap = ({ cellSpace={settings.cellspace} roundTo={settings.annotation_rounding} showscale={settings.showscale} - cbarHeight={cbar_shrink} - cbarWidth={cbar_aspect} + cbarHeight={cbar_shrink ?? settings.cbar_shrink} + cbarWidth={cbar_aspect ?? settings.cbar_aspect} annotation_font_size={settings.annotation_font_size} axlabel_xrotation={settings.axlabel_xrotation} axlabel_xfontsize={settings.axlabel_xfontsize} diff --git a/frontend/src/components/Viewer.tsx b/frontend/src/components/Viewer.tsx index 174f262..6150814 100644 --- a/frontend/src/components/Viewer.tsx +++ b/frontend/src/components/Viewer.tsx @@ -84,10 +84,11 @@ export const Viewer = ({ aria-hidden={true} color="currentcolor" > - - - - + + + + + Clustermap
@@ -170,6 +171,7 @@ export const Viewer = ({ diff --git a/frontend/src/hooks/map.ts b/frontend/src/hooks/map.ts index 68fe69f..1deb5d0 100644 --- a/frontend/src/hooks/map.ts +++ b/frontend/src/hooks/map.ts @@ -1,5 +1,5 @@ import React from "react"; -import type { HeatmapSettings } from "../plotTypes"; +import type { ClustermapSettings, HeatmapSettings } from "../plotTypes"; export const useSize = ( elementRef: React.MutableRefObject, @@ -36,10 +36,10 @@ export const useSize = ( return size; }; -export const useMetrics = (settings: HeatmapSettings, tickText: string[]) => { - const cbar_shrink = settings.cbar_shrink * 60; - const cbar_aspect = settings.cbar_aspect * 10; - +export const useMetrics = ( + settings: HeatmapSettings | ClustermapSettings, + tickText: string[], +) => { const longestTickWidth = React.useMemo( () => Math.max(...tickText.map((tick) => tick.length)) * @@ -57,7 +57,15 @@ export const useMetrics = (settings: HeatmapSettings, tickText: string[]) => { [longestTickWidth, settings.axis_labels], ); - return { cbar_shrink, cbar_aspect, margin }; + return { + ...("cbar_shrink" in settings && { + cbar_shrink: settings.cbar_shrink * 60, + }), + ...("cbar_aspect" in settings && { + cbar_aspect: settings.cbar_aspect * 10, + }), + margin, + }; }; export const useHeatmapData = (data: string[][]) => diff --git a/frontend/src/parseDocState.ts b/frontend/src/parseDocState.ts index 40e7088..2778bcd 100644 --- a/frontend/src/parseDocState.ts +++ b/frontend/src/parseDocState.ts @@ -31,6 +31,10 @@ export const parseDocState = (state: DocState) => { ...initialDocState.heatmap, ...validData.heatmap, }, + clustermap: { + ...initialDocState.clustermap, + ...validData.clustermap, + }, parsed: true, }; diff --git a/frontend/src/plotTypes.ts b/frontend/src/plotTypes.ts index 091af05..618988c 100644 --- a/frontend/src/plotTypes.ts +++ b/frontend/src/plotTypes.ts @@ -105,3 +105,43 @@ export type DistributionData = Omit< gc_stats: number[]; length_stats: number[]; }; + +export interface ClustermapSettings { + threshold_one: number; + threshold_two: number; + annotation: boolean; + annotation_font_size: number; + annotation_rounding: 0 | 1 | 2; + annotation_alpha: string; + titleFont: "Sans Serif" | "Monospace"; + showTitles: boolean; + title: string; + subtitle: string; + xtitle: string; + ytitle: string; + axis_labels: boolean; + axlabel_xrotation: number; + axlabel_xfontsize: number; + axlabel_yrotation: number; + axlabel_yfontsize: number; +} + +export const ClustermapSettingsSchema = z.object({ + threshold_one: z.number(), + threshold_two: z.number(), + annotation: z.boolean(), + annotation_font_size: z.number(), + annotation_rounding: z.union([z.literal(0), z.literal(1), z.literal(2)]), + annotation_alpha: z.string(), + showTitles: z.boolean(), + titleFont: z.enum(["Sans Serif", "Monospace"]), + title: z.string(), + subtitle: z.string(), + xtitle: z.string(), + ytitle: z.string(), + axis_labels: z.boolean(), + axlabel_xrotation: z.number(), + axlabel_xfontsize: z.number(), + axlabel_yrotation: z.number(), + axlabel_yfontsize: z.number(), +}); From afb89d2dde177937297c1f32a220f27ebe131043 Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Tue, 4 Mar 2025 11:21:44 -0700 Subject: [PATCH 12/57] fixed manual paths, switched to non gradient color for non clustered cells --- docs/manual.html | 30 +++++++++++++------------- frontend/src/components/Clustermap.tsx | 4 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/manual.html b/docs/manual.html index 4cd667b..c5897fe 100644 --- a/docs/manual.html +++ b/docs/manual.html @@ -160,7 +160,7 @@

Main Loading Screen

When first launched SDT2, the loading interface provides two primary options for loading data:

- SDT2 Main Loading Screen + SDT2 Main Loading Screen

I. File Selection

@@ -187,12 +187,12 @@

Application Run Interface

- Application Run Interface + Application Run Interface
- Data File Section + Data File Section

Data File Section

@@ -206,7 +206,7 @@

Data File Section

- Reorder By Section + Reorder By Section

Reorder by

@@ -229,7 +229,7 @@

Reorder by

- Performance Settings + Performance Settings

Performance Settings

@@ -265,7 +265,7 @@

Performance

Menu and File Operations

- File Menu Interface + File Menu Interface

The application menu provides access to all core functions:

@@ -287,7 +287,7 @@

Menu and File Operations

Loader Interface

- Loader Interface + Loader Interface

During analysis:

@@ -304,7 +304,7 @@

Visualization Options

Heatmap

- Heatmap Visualization + Heatmap Visualization

@@ -317,7 +317,7 @@

Heatmap

- Heatmap Colorscale Options + Heatmap Colorscale Options

Colorscale

@@ -371,14 +371,14 @@

Distribution Plots

Histogram

- Histogram Example + Histogram Example

Histograms divide your data into bins and display the frequency of values within each bin as bars. This helps identify patterns, peaks, and outliers in your sequence data.

- Histogram Controls + Histogram Controls

Data Set Options

@@ -405,15 +405,15 @@

Histogram Options

Violin Plot

- Violin Plot Example + Violin Plot Example

Violin plots combine box plots with kernel density plots to show the distribution shape, central tendency, and variability of your data.

- Violin buttons - Violin options bar + Violin buttons + Violin options bar

Data Set Options

@@ -467,7 +467,7 @@

Points Options

:(Examples in Vertical Orientation)

Export Options

- Export Interface + Export Interface

diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index abf3ea0..0141b76 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -84,8 +84,8 @@ export const Clustermap = ({ ); const colorScale: ColorScaleArray = [ - [0, "rgb(0,0,0)"], - [1, "rgb(235,235,235)"], + [0, "rgb(245,245,245)"], + [1, "rgb(245,245,245)"], ]; const d3HeatmapData = useHeatmapData(data); From 753e9e3b19a35d68259e41a7ce463a61dcfef000 Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Tue, 4 Mar 2025 12:38:57 -0700 Subject: [PATCH 13/57] updated dynamic font sizing for d3 canvas and changed zoom to .5 and 10 --- frontend/src/components/D3CanvasHeatmap.tsx | 55 ++++++++++++++------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 091ebf8..8e949f3 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -95,23 +95,24 @@ export const D3CanvasHeatmap = ({ ctx.save(); ctx.translate(transform.x + margin.left, transform.y + margin.top); ctx.scale(transform.k, transform.k); - //indexz data + //index data const rows = [...new Set(filteredData.map((d) => d.x))]; const cols = [...new Set(filteredData.map((d) => d.y))]; - ctx.font = `${annotation_font_size}px ${plotFontMonospace.family}`; - const maxTextWidth = ctx.measureText("100.00").width; - let textFontSize = annotation_font_size; - - if (maxTextWidth > cellSize) { - textFontSize = annotation_font_size / (cellSize * roundTo); - } + // Calculate cell size accounting for cellspace parameter + const rectSize = cellSize - cellSpace; + // calculate the miminimum font size based netween 20% of the calculated rectsize but will never be smaller than 1 + //prevents 0s and negatives + const minFontSize = Math.max(1, Math.floor(0.2 * rectSize)); + //max is set to 70% of rectsize + const maxFontSize = Math.floor(0.7 * rectSize); + // set font size to the smaller of the two + const fontSize = Math.min(maxFontSize, annotation_font_size); // Draw cells for (const d of filteredData) { const x = cols.indexOf(d.x) * cellSize + cellSpace / 2; const y = rows.indexOf(d.y) * cellSize + cellSpace / 2; - const rectSize = cellSize - cellSpace; const clusterX = clusterData?.find((i) => i.id === tickText[d.x])?.group; const clusterY = clusterData?.find((i) => i.id === tickText[d.y])?.group; @@ -129,25 +130,45 @@ export const D3CanvasHeatmap = ({ ctx.fillRect(x, y, rectSize, rectSize); if (showPercentIdentities) { + // set text to current percision value + const formattedText = d.value.toFixed(roundTo); + + // Gonnjaprobably get rid of user input. not very helpful and will be overriden with any large or zoomed graphs + ctx.font = `${fontSize}px ${plotFontMonospace.family}`; + + // Measure text width of user setting/default + const textWidth = ctx.measureText(formattedText).width; + + //calculate 80% of cell width + const availableWidth = rectSize * 0.8; // 80% of cell width + + // Calculate the final font size for this cell's text, let allows for dynamic change + let textFontSize = fontSize; + // If text is too wide make the font smaller if small make it the minimum + if (textWidth > availableWidth) { + textFontSize = Math.max( + minFontSize, + Math.floor((availableWidth / textWidth) * fontSize), + ); + } + + // set text color dynamically based on background const rectColor = clusterGroup ? clusterGroupColors[clusterGroup] : colorFn(d.value); const textColor = tinycolor(rectColor).isLight() ? "#000" : "#fff"; + + // Render text ctx.fillStyle = textColor; ctx.textAlign = "center"; ctx.textBaseline = "middle"; - ctx.font = `${textFontSize}px ${plotFontMonospace.family}`; - ctx.fillText( - d.value.toFixed(roundTo), - x + rectSize / 2, - y + rectSize / 2, - ); + ctx.fillText(formattedText, x + rectSize / 2, y + rectSize / 2); } } ctx.restore(); - // Titles + // Rest of your drawing code (titles, axes, colorbar) if (showTitles) { ctx.fillStyle = "black"; ctx.textAlign = "center"; @@ -286,7 +307,7 @@ export const D3CanvasHeatmap = ({ const zoom = d3 .zoom() - .scaleExtent([1, 5]) + .scaleExtent([0.5, 10]) .translateExtent([ [-margin.left, -margin.top], [width, height], From bd3b389c4e4c288118509c56f6017c87300e5b56 Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Tue, 4 Mar 2025 15:58:02 -0700 Subject: [PATCH 14/57] changed display values for axes label roation to 0 while internal rotations maintain same degrees, added common sense 90,-90 stops for label rotation --- backend/src/document_state.py | 8 ++++---- docs/images/Clustermap.png | Bin 0 -> 26078 bytes docs/images/LeftSidebar.png | Bin 0 -> 9459 bytes docs/images/Loader.png | Bin 0 -> 8355 bytes docs/manual.html | 14 +++++++------- frontend/src/appState.ts | 8 ++++---- frontend/src/components/ClustermapSidebar.tsx | 8 ++++---- frontend/src/components/D3CanvasHeatmap.tsx | 4 ++-- frontend/src/components/D3Heatmap.tsx | 4 ++-- frontend/src/components/HeatmapSidebar.tsx | 8 ++++---- 10 files changed, 27 insertions(+), 27 deletions(-) create mode 100644 docs/images/Clustermap.png create mode 100644 docs/images/LeftSidebar.png create mode 100644 docs/images/Loader.png diff --git a/backend/src/document_state.py b/backend/src/document_state.py index a2ac833..1c83a0c 100644 --- a/backend/src/document_state.py +++ b/backend/src/document_state.py @@ -49,9 +49,9 @@ cbar_aspect=2.5, cbar_pad=10, axis_labels=False, - axlabel_xrotation=270, + axlabel_xrotation=0, axlabel_xfontsize=12, - axlabel_yrotation=360, + axlabel_yrotation=0, axlabel_yfontsize=12, cutoff_1=95, cutoff_2=75 @@ -71,9 +71,9 @@ xtitle="", ytitle="", axis_labels=False, - axlabel_xrotation=270, + axlabel_xrotation=0, axlabel_xfontsize=12, - axlabel_yrotation=360, + axlabel_yrotation=0, axlabel_yfontsize=12, ) diff --git a/docs/images/Clustermap.png b/docs/images/Clustermap.png new file mode 100644 index 0000000000000000000000000000000000000000..9f5f39abb47cb620cbbc7315e96d4a8db4cc9a57 GIT binary patch literal 26078 zcmd?RcUV*D+AoaaC^HI*s328k6qP1YrNs(LRS}RH1!+P+AcBMv9Sb5&M2cV%mEJ`{ z=%CV6nj}CVlqf9(2uMjF354@3oSD7%_rBkEo%j54u50h_kAxtZ$;w*KdhTDl?}&?L zhJwF||HjA1CwSrf*~@%<{Py5sC$Jg(i`6%52>7wV|FYp}zQT4%I{0Oi+bPpie0;^R zTUW0C0)GGX)_EI$K0cv(=&_;MC;J8;pNs#6v!|}yabyhsnrv^0(d3c(L}}bP_f7uzP4}qku{YB?2O@t{7Cx{q=7+W9*&Fe3p?fvX z^nNtk`EIU=dco2wr4o}~WhR#sqOVIX49=ZIPA(P%cPwH3i=<||e+S26TL@p313wiH z-P*v%x9hO0Xu3KF)72~F-F4inb~r=0rN^3&@9sm>+uu;GA)ybY?cCJwZRO+J z6o$=q`2C(Yc;=TlpQiNL8IvzYRDho7AI4EGG*54@`!02dhw2TZl5O2m&uvt)-9~s zT5jj#JL#jo-CjzHxg~VAWBaNiBXB;DI1!6Js;J==hw`}n*T-12@so8^T$g&%Bj|;O z(nc`Ycdkc$H#tAaD#_ZzQV$$_jf#2ZE)CU?-nWb2OUb5OuM!8_khpWCR1xY0dF3*D zTVJ|MN@DZW8Tw{_@*@-ZTA9Q6_I$28*r$H=#ta*DAP^ z-@f$_FV8f2aT$HqXK{+G96Bb?Kk2#H6r+==hC+sd^Rj10!aYw4-h-)*y7~3hsS~#_ z=&+i*(p5YZxL@!766^U-XAAtlw6(P-W5M~G$jQ8y*B8ANd`7a)zvDd(-Mfo)63JM( z=6O@B49xSzvFoQ%vo%Ze3l>>srpmR;PAR%UevUXy88u9YEXoYnGaFk;!()HxJl>Ly zZxUxFR3geuJ*c4;6!$dLDTlvq$E~R`w&gEgcx%5n?qZapfv^oNcu9t%^)RT(9C|6) zv1Lk_@G&FFG39>G{&2}>R*peqi(k)d&zKEcs`6--3T*8N+%5AxO11sG<{;9-7DdnS z4;6L1bKTaraW`o&kcx>pF`kU?vGvT5!-X7QZAPycQjjFmsaXY2aQ*1=@V!slVReod zPj15UZ#VHMX}eq?cv<`VgBN3>@Rvl<+8u}#;&5aZa{luXOrYcX-A%G1!*RrkPUdbt zzN;r&Ny3E(6R*DMxdc0bx!q$E)ORzlfaqPtNPM(y@3X?HnMyo^(4T3nRPj3|fZ{

2$<+&wz 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 literal 0 HcmV?d00001 diff --git a/docs/images/Loader.png b/docs/images/Loader.png new file mode 100644 index 0000000000000000000000000000000000000000..e19d0bd0fd73d36e4ae5e18a2060ece797de4b7c GIT binary patch literal 8355 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 literal 0 HcmV?d00001 diff --git a/docs/manual.html b/docs/manual.html index c5897fe..1e80532 100644 --- a/docs/manual.html +++ b/docs/manual.html @@ -186,10 +186,10 @@

Application Run Interface

Once a file is selected, the application interface displays several key components and controls.

- + Application Run Interface - +
Data File Section @@ -203,7 +203,7 @@

Data File Section

- +
Reorder By Section @@ -226,7 +226,7 @@

Reorder by

- +
Performance Settings @@ -292,9 +292,9 @@

Loader Interface

During analysis:

    -
  • Progress bar showing current stage
  • -
  • Estimated time remaining
  • -
  • Option to cancel the run
  • +
  • Progress bar Shows current percentage of analysis complete
  • +
  • Estimated time remainingCalculates estimated runtimebased on current performance
  • +
  • Cancel Run Clicl and confirm to cancel a run
diff --git a/frontend/src/appState.ts b/frontend/src/appState.ts index 684bf87..d0e57d9 100644 --- a/frontend/src/appState.ts +++ b/frontend/src/appState.ts @@ -170,9 +170,9 @@ export const initialDocState: DocState = { cbar_aspect: 2.5, cbar_pad: 10, axis_labels: false, - axlabel_xrotation: 270, + axlabel_xrotation: 0, axlabel_xfontsize: 12, - axlabel_yrotation: 360, + axlabel_yrotation: 0, axlabel_yfontsize: 12, cutoff_1: 95, cutoff_2: 75, @@ -191,9 +191,9 @@ export const initialDocState: DocState = { xtitle: "", ytitle: "", axis_labels: false, - axlabel_xrotation: 270, + axlabel_xrotation: 0, axlabel_xfontsize: 12, - axlabel_yrotation: 360, + axlabel_yrotation: 0, axlabel_yfontsize: 12, }, }; diff --git a/frontend/src/components/ClustermapSidebar.tsx b/frontend/src/components/ClustermapSidebar.tsx index f42da1d..184a7ec 100644 --- a/frontend/src/components/ClustermapSidebar.tsx +++ b/frontend/src/components/ClustermapSidebar.tsx @@ -150,8 +150,8 @@ export const ClustermapSidebar = ({ field="axlabel_xrotation" value={settings.axlabel_xrotation} updateValue={updateSettings} - min={0} - max={360} + min={-90} + max={90} step={10} />
diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 8e949f3..50d6ad2 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -191,7 +191,7 @@ export const D3CanvasHeatmap = ({ transform.x, // X pan offset for cell transform.y + margin.top + plotSize * transform.k + axisGap, ); - ctx.rotate((axlabel_xrotation * Math.PI) / 180); + ctx.rotate(((axlabel_xrotation + 270) * Math.PI) / 180); ctx.fillStyle = "black"; ctx.textAlign = "right"; ctx.textBaseline = "middle"; @@ -214,7 +214,7 @@ export const D3CanvasHeatmap = ({ (cellSize * transform.k) / 2 + // Center vertically within cell transform.y, // Y pan offset ); - ctx.rotate((axlabel_yrotation * Math.PI) / 180); + ctx.rotate(((axlabel_yrotation + 360) * Math.PI) / 180); ctx.fillStyle = "black"; ctx.textAlign = "right"; ctx.textBaseline = "middle"; diff --git a/frontend/src/components/D3Heatmap.tsx b/frontend/src/components/D3Heatmap.tsx index dfcb093..84a3b58 100644 --- a/frontend/src/components/D3Heatmap.tsx +++ b/frontend/src/components/D3Heatmap.tsx @@ -159,7 +159,7 @@ export const D3Heatmap = ({ .attr( "transform", (_, i) => - `rotate(${axlabel_xrotation}, ${i * cellW + cellW / 2}, ${axisGap})`, + `rotate(${360 - axlabel_xrotation}, ${i * cellW + cellW / 2}, ${axisGap})`, ); // y-axis labels @@ -177,7 +177,7 @@ export const D3Heatmap = ({ .attr( "transform", (_, i) => - `rotate(${axlabel_yrotation}, ${-axisGap}, ${i * cellH + cellH / 2})`, + `rotate(${270 - axlabel_yrotation}, ${-axisGap}, ${i * cellH + cellH / 2})`, ); } diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index 227540c..d34a40f 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -238,8 +238,8 @@ export const HeatmapSidebar = ({ field="axlabel_xrotation" value={settings.axlabel_xrotation} updateValue={updateSettings} - min={0} - max={360} + min={-90} + max={90} step={10} />
From ec48697a35c8a2343cccaa26f1b50b8e4bc2cdb6 Mon Sep 17 00:00:00 2001 From: Michael Lund Date: Wed, 5 Mar 2025 10:30:58 -0700 Subject: [PATCH 15/57] forgot to remove argparse from testing new cluster script --- backend/src/cluster.py | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/backend/src/cluster.py b/backend/src/cluster.py index f422c44..f8c9116 100644 --- a/backend/src/cluster.py +++ b/backend/src/cluster.py @@ -125,34 +125,3 @@ def export(matrix_path, threshold_1=79, threshold_2=0, save_csv=True): return df_result -def main(): - import argparse - - parser = argparse.ArgumentParser(description='Sequence clustering with two thresholds') - parser.add_argument('matrix_file', type=str, help='Path to the similarity matrix CSV file') - parser.add_argument('--threshold1', type=float, default=79, help='Primary clustering threshold (default: 79)') - parser.add_argument('--threshold2', type=float, default=0, help='Secondary clustering threshold (default: 0)') - parser.add_argument('--no-save-csv', action='store_false', dest='save_csv', help='Do not save CSV results') - - args = parser.parse_args() - - df_results = export( - args.matrix_file, - threshold_1=args.threshold1, - threshold_2=args.threshold2, - save_csv=args.save_csv - ) - - if args.threshold2 is None or args.threshold2 == 0: - num_groups = df_results["Group - Threshold: " + str(args.threshold1)].nunique() - print(f"Found {num_groups} groups using threshold {args.threshold1}") - else: - num_groups = df_results["Group - Threshold: " + str(args.threshold1)].nunique() - num_subgroups = df_results.groupby("Group - Threshold: " + str(args.threshold1))["Subgroup - Threshold: " + str(args.threshold2)].nunique().sum() - print(f"Found {num_groups} primary groups using threshold {args.threshold1}") - print(f"Found {num_subgroups} total subgroups using threshold {args.threshold2}") - - print(f"Results saved for {len(df_results)} sequences") - -if __name__ == "__main__": - main() \ No newline at end of file From b0d5ab5411ce063eec4844d684cbe1790b99587a Mon Sep 17 00:00:00 2001 From: Michael Lund Date: Wed, 5 Mar 2025 12:39:18 -0700 Subject: [PATCH 16/57] added cellspace to clustermap, removed subtitle props --- backend/src/document_state.py | 1 + frontend/src/appState.ts | 3 +-- frontend/src/components/Clustermap.tsx | 4 +--- frontend/src/components/ClustermapSidebar.tsx | 12 ++++++++++++ frontend/src/components/Heatmap.tsx | 3 --- frontend/src/plotTypes.ts | 6 ++---- 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/backend/src/document_state.py b/backend/src/document_state.py index 1c83a0c..547e48a 100644 --- a/backend/src/document_state.py +++ b/backend/src/document_state.py @@ -75,6 +75,7 @@ axlabel_xfontsize=12, axlabel_yrotation=0, axlabel_yfontsize=12, + cellspace=1, ) visualization_defaults = dict( diff --git a/frontend/src/appState.ts b/frontend/src/appState.ts index d0e57d9..8ea2bce 100644 --- a/frontend/src/appState.ts +++ b/frontend/src/appState.ts @@ -163,7 +163,6 @@ export const initialDocState: DocState = { titleFont: "Sans Serif", showTitles: false, title: "", - subtitle: "", xtitle: "", ytitle: "", cbar_shrink: 5, @@ -187,7 +186,6 @@ export const initialDocState: DocState = { titleFont: "Sans Serif", showTitles: false, title: "", - subtitle: "", xtitle: "", ytitle: "", axis_labels: false, @@ -195,6 +193,7 @@ export const initialDocState: DocState = { axlabel_xfontsize: 12, axlabel_yrotation: 0, axlabel_yfontsize: 12, + cellspace: 1, }, }; diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index 0141b76..fb62185 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -21,7 +21,6 @@ export type ClustermapRenderProps = { showPercentIdentities: boolean; showTitles: boolean; title: string; - subtitle: string; showscale: boolean; axis_labels: boolean; titleFont: typeof plotFontMonospace | typeof plotFontSansSerif; @@ -106,7 +105,6 @@ export const Clustermap = ({ maxVal={100} width={size.width} height={size.height} - cellSpace={1} roundTo={settings.annotation_rounding} showscale={false} annotation_font_size={settings.annotation_font_size} @@ -118,9 +116,9 @@ export const Clustermap = ({ showPercentIdentities={settings.annotation} showTitles={settings.showTitles} title={settings.title} - subtitle={settings.subtitle} axis_labels={settings.axis_labels} margin={margin} + cellSpace={settings.cellspace} /> ) : null}
diff --git a/frontend/src/components/ClustermapSidebar.tsx b/frontend/src/components/ClustermapSidebar.tsx index 184a7ec..ce7fefb 100644 --- a/frontend/src/components/ClustermapSidebar.tsx +++ b/frontend/src/components/ClustermapSidebar.tsx @@ -4,6 +4,7 @@ import type { DocState } from "../appState"; import type { HeatmapSettings } from "../plotTypes"; import { NumberInput } from "./NumberInput"; import { Select, SelectItem } from "./Select"; +import { Slider } from "./Slider"; import { Switch } from "./Switch"; export const ClustermapSidebar = ({ @@ -64,6 +65,17 @@ export const ClustermapSidebar = ({ />
+
+ updateSettings({ cellspace: value })} + minValue={0} + maxValue={20} + value={settings.cellspace} + /> +
diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index 8ed0694..9bab797 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -36,7 +36,6 @@ export type HeatmapRenderProps = { showPercentIdentities: boolean; showTitles: boolean; title: string; - subtitle: string; showscale: boolean; axis_labels: boolean; titleFont: typeof plotFontMonospace | typeof plotFontSansSerif; @@ -149,7 +148,6 @@ export const Heatmap = ({ titleFont={titleFont} showTitles={settings.showTitles} title={settings.title} - subtitle={settings.subtitle} axis_labels={settings.axis_labels} showscale={settings.showscale} margin={margin} @@ -178,7 +176,6 @@ export const Heatmap = ({ showPercentIdentities={settings.annotation} showTitles={settings.showTitles} title={settings.title} - subtitle={settings.subtitle} axis_labels={settings.axis_labels} margin={margin} /> diff --git a/frontend/src/plotTypes.ts b/frontend/src/plotTypes.ts index 618988c..6823277 100644 --- a/frontend/src/plotTypes.ts +++ b/frontend/src/plotTypes.ts @@ -17,7 +17,6 @@ export interface HeatmapSettings { titleFont: "Sans Serif" | "Monospace"; showTitles: boolean; title: string; - subtitle: string; xtitle: string; ytitle: string; cbar_shrink: number; @@ -66,7 +65,6 @@ export const HeatmapSettingsSchema = z.object({ showTitles: z.boolean(), titleFont: z.enum(["Sans Serif", "Monospace"]), title: z.string(), - subtitle: z.string(), xtitle: z.string(), ytitle: z.string(), cbar_shrink: z.number(), @@ -116,7 +114,6 @@ export interface ClustermapSettings { titleFont: "Sans Serif" | "Monospace"; showTitles: boolean; title: string; - subtitle: string; xtitle: string; ytitle: string; axis_labels: boolean; @@ -124,6 +121,7 @@ export interface ClustermapSettings { axlabel_xfontsize: number; axlabel_yrotation: number; axlabel_yfontsize: number; + cellspace: number; } export const ClustermapSettingsSchema = z.object({ @@ -136,7 +134,6 @@ export const ClustermapSettingsSchema = z.object({ showTitles: z.boolean(), titleFont: z.enum(["Sans Serif", "Monospace"]), title: z.string(), - subtitle: z.string(), xtitle: z.string(), ytitle: z.string(), axis_labels: z.boolean(), @@ -144,4 +141,5 @@ export const ClustermapSettingsSchema = z.object({ axlabel_xfontsize: z.number(), axlabel_yrotation: z.number(), axlabel_yfontsize: z.number(), + cellspace: z.number(), }); From ae7e2770e5e13d667b47e813dfc4b6e492df46e6 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Wed, 5 Mar 2025 18:59:17 -0800 Subject: [PATCH 17/57] remove unused setting and hook --- backend/src/document_state.py | 2 -- frontend/src/appState.ts | 2 -- frontend/src/hooks/useSaveState.ts | 13 ------------- frontend/src/plotTypes.ts | 4 ---- 4 files changed, 21 deletions(-) delete mode 100644 frontend/src/hooks/useSaveState.ts diff --git a/backend/src/document_state.py b/backend/src/document_state.py index 547e48a..17eebd9 100644 --- a/backend/src/document_state.py +++ b/backend/src/document_state.py @@ -37,7 +37,6 @@ annotation=False, annotation_font_size=10, annotation_rounding=0, - annotation_alpha="0", showscale=True, titleFont="Sans Serif", showTitles=False, @@ -63,7 +62,6 @@ annotation=False, annotation_font_size=10, annotation_rounding=0, - annotation_alpha="0", titleFont="Sans Serif", showTitles=False, title="", diff --git a/frontend/src/appState.ts b/frontend/src/appState.ts index 8ea2bce..59a4d2d 100644 --- a/frontend/src/appState.ts +++ b/frontend/src/appState.ts @@ -158,7 +158,6 @@ export const initialDocState: DocState = { annotation: false, annotation_font_size: 10, annotation_rounding: 0, - annotation_alpha: "0", showscale: true, titleFont: "Sans Serif", showTitles: false, @@ -182,7 +181,6 @@ export const initialDocState: DocState = { annotation: false, annotation_font_size: 10, annotation_rounding: 0, - annotation_alpha: "0", titleFont: "Sans Serif", showTitles: false, title: "", diff --git a/frontend/src/hooks/useSaveState.ts b/frontend/src/hooks/useSaveState.ts deleted file mode 100644 index d58dbc8..0000000 --- a/frontend/src/hooks/useSaveState.ts +++ /dev/null @@ -1,13 +0,0 @@ -import React from "react"; -import { type AppState, clientStateKey } from "../appState"; - -export const useSaveState = (initialized: boolean, appState: AppState) => - React.useEffect(() => { - if (!initialized) { - return; - } - localStorage.setItem(clientStateKey, JSON.stringify(appState)); - if (appState.debug) { - window.APP_STATE = appState; - } - }, [initialized, appState]); diff --git a/frontend/src/plotTypes.ts b/frontend/src/plotTypes.ts index 6823277..eb9f472 100644 --- a/frontend/src/plotTypes.ts +++ b/frontend/src/plotTypes.ts @@ -12,7 +12,6 @@ export interface HeatmapSettings { annotation: boolean; annotation_font_size: number; annotation_rounding: 0 | 1 | 2; - annotation_alpha: string; showscale: boolean; titleFont: "Sans Serif" | "Monospace"; showTitles: boolean; @@ -60,7 +59,6 @@ export const HeatmapSettingsSchema = z.object({ annotation: z.boolean(), annotation_font_size: z.number(), annotation_rounding: z.union([z.literal(0), z.literal(1), z.literal(2)]), - annotation_alpha: z.string(), showscale: z.boolean(), showTitles: z.boolean(), titleFont: z.enum(["Sans Serif", "Monospace"]), @@ -110,7 +108,6 @@ export interface ClustermapSettings { annotation: boolean; annotation_font_size: number; annotation_rounding: 0 | 1 | 2; - annotation_alpha: string; titleFont: "Sans Serif" | "Monospace"; showTitles: boolean; title: string; @@ -130,7 +127,6 @@ export const ClustermapSettingsSchema = z.object({ annotation: z.boolean(), annotation_font_size: z.number(), annotation_rounding: z.union([z.literal(0), z.literal(1), z.literal(2)]), - annotation_alpha: z.string(), showTitles: z.boolean(), titleFont: z.enum(["Sans Serif", "Monospace"]), title: z.string(), From 1afd7e4228939d90f43c9887cd9c5c7db1389dac Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Wed, 5 Mar 2025 19:27:25 -0800 Subject: [PATCH 18/57] make sure clustermap tab can be set, generalize settings title --- frontend/src/appState.ts | 2 ++ frontend/src/components/Clustermap.tsx | 1 - frontend/src/components/ClustermapSidebar.tsx | 5 +++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/appState.ts b/frontend/src/appState.ts index 59a4d2d..ded22f9 100644 --- a/frontend/src/appState.ts +++ b/frontend/src/appState.ts @@ -50,6 +50,7 @@ export type DocState = { }; dataView: | "heatmap" + | "clustermap" | "distribution_histogram" | "distribution_violin" | "distribution_raincloud"; @@ -123,6 +124,7 @@ export const docStateSchema = z.object({ ]), dataView: z.enum([ "heatmap", + "clustermap", "distribution_histogram", "distribution_violin", "distribution_raincloud", diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index fb62185..9928d5f 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -54,7 +54,6 @@ export const Clustermap = ({ >(); React.useEffect(() => { - console.log("fetching...", docState.clustermap); window.pywebview.api .generate_cluster_data( docState.id, diff --git a/frontend/src/components/ClustermapSidebar.tsx b/frontend/src/components/ClustermapSidebar.tsx index ce7fefb..7bcf46b 100644 --- a/frontend/src/components/ClustermapSidebar.tsx +++ b/frontend/src/components/ClustermapSidebar.tsx @@ -38,7 +38,7 @@ export const ClustermapSidebar = ({
@@ -65,7 +65,8 @@ export const ClustermapSidebar = ({ />
-
+
+
Date: Wed, 5 Mar 2025 20:18:28 -0800 Subject: [PATCH 19/57] clustermap png export --- backend/src/export_data.py | 9 +++---- frontend/src/components/Clustermap.tsx | 8 +++++-- frontend/src/components/ExportModal.tsx | 32 ++++++++++++++++++------- frontend/src/components/Viewer.tsx | 4 ++-- frontend/src/hooks/useSyncState.ts | 4 ++++ frontend/src/types/index.d.ts | 1 + 6 files changed, 42 insertions(+), 16 deletions(-) diff --git a/backend/src/export_data.py b/backend/src/export_data.py index 66a8eb8..e749720 100644 --- a/backend/src/export_data.py +++ b/backend/src/export_data.py @@ -6,7 +6,7 @@ import cluster from constants import data_file_suffixes -image_types = ["heatmap", "histogram", "violin"] +image_types = ["heatmap", "clustermap", "histogram", "violin"] def find_source_files(state: DocState, prefix, suffixes): with os.scandir(state.tempdir_path) as entries: @@ -44,7 +44,6 @@ def prepare_export_data(export_path: str, matrix_path: str, doc: DocState, args: if args["output_cluster"] == True: suffixes.append("_cluster") - # TODO: it's not intuitive that an export happens in here, move it outside? cluster.export( matrix_path, args["cluster_threshold_one"], @@ -62,7 +61,8 @@ def prepare_export_data(export_path: str, matrix_path: str, doc: DocState, args: ) image_filenames = { - img_type: f"{base_filename}_{img_type}.{image_format}" + img_type: f"{base_filename}_{img_type}." + + ("png" if img_type == "clustermap" else image_format) # TODO: remove when clustermap supports SVG for img_type in image_types } @@ -87,8 +87,9 @@ def do_export_data(export_path, image_destinations, image_format, doc, prefix, s os.replace(temp_destination_path, destination_path) for img_type in image_types: + format = "png" if img_type == "clustermap" else image_format save_image_from_api( data=args[f"{img_type}_image_data"], - format=image_format, + format=format, destination=image_destinations[img_type], ) diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index 9928d5f..8ef75c7 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -1,7 +1,7 @@ import React from "react"; import type { DocState, SetDocState } from "../appState"; import type { ColorScaleArray } from "../colorScales"; -import { plotFontMonospace, type plotFontSansSerif } from "../constants"; +import { plotFontMonospace, plotFontSansSerif } from "../constants"; import { useHeatmapData, useMetrics, useSize } from "../hooks/map"; import type { ClustermapSettings, HeatmapData } from "../plotTypes"; import { ClustermapSidebar } from "./ClustermapSidebar"; @@ -111,7 +111,11 @@ export const Clustermap = ({ axlabel_xfontsize={settings.axlabel_xfontsize} axlabel_yrotation={settings.axlabel_yrotation} axlabel_yfontsize={settings.axlabel_yfontsize} - titleFont={plotFontMonospace} + titleFont={ + settings.titleFont === "Monospace" + ? plotFontMonospace + : plotFontSansSerif + } showPercentIdentities={settings.annotation} showTitles={settings.showTitles} title={settings.title} diff --git a/frontend/src/components/ExportModal.tsx b/frontend/src/components/ExportModal.tsx index 6405b76..0b81adc 100644 --- a/frontend/src/components/ExportModal.tsx +++ b/frontend/src/components/ExportModal.tsx @@ -123,6 +123,28 @@ export const ExportModal = () => { await new Promise((r) => setTimeout(r, renderTimeout)); + swapDataView("clustermap"); + await new Promise((r) => setTimeout(r, renderTimeout)); + + const clustermapImage: string = await new Promise((resolve) => { + // clustermap uses the heatmap component + ref + if (!heatmapRef.current) { + throw new Error("Expected heatmapRef to have a current value"); + } + + (heatmapRef.current as HTMLCanvasElement).toBlob(async (blob) => { + if (blob) { + const arrayBuffer = await blob.arrayBuffer(); + const binary = Array.from(new Uint8Array(arrayBuffer)) + .map((byte) => String.fromCharCode(byte)) + .join(""); + resolve(`data:image/png;base64,${btoa(binary)}`); + } else { + resolve(""); + } + }, "image/png"); + }); + // Plotly exports swapDataView("distribution_histogram"); @@ -142,15 +164,8 @@ export const ExportModal = () => { await Plotly.toImage(element, config); const violinImage = await Plotly.toImage(element, config); - // swapDataView("distribution_raincloud"); - - // await new Promise((r) => setTimeout(r, renderTimeout)); - // element = getPlotlyElement(); - // await Plotly.toImage(element, config); - // const raincloudImage = await Plotly.toImage(element, config); - swapDataView(previousDataView); - return { heatmapImage, histogramImage, violinImage }; + return { heatmapImage, clustermapImage, histogramImage, violinImage }; }, [heatmapRef, appState, docState.dataView, swapDataView]); const doExport = React.useCallback(() => { @@ -164,6 +179,7 @@ export const ExportModal = () => { cluster_threshold_one: thresholds.one, cluster_threshold_two: thresholds.two, heatmap_image_data: images.heatmapImage, + clustermap_image_data: images.clustermapImage, histogram_image_data: images.histogramImage, violin_image_data: images.violinImage, image_format: appState.saveFormat, diff --git a/frontend/src/components/Viewer.tsx b/frontend/src/components/Viewer.tsx index 6150814..8b2c36f 100644 --- a/frontend/src/components/Viewer.tsx +++ b/frontend/src/components/Viewer.tsx @@ -73,7 +73,7 @@ export const Viewer = ({ Heatmap
- +
@@ -166,7 +166,7 @@ export const Viewer = ({ /> ) : null} - + {!loading && heatmapData ? ( { ...beDoc.heatmap, ...feDoc?.heatmap, }, + clustermap: { + ...beDoc.clustermap, + ...feDoc?.clustermap, + }, distribution: { ...beDoc.distribution, ...feDoc?.distribution, diff --git a/frontend/src/types/index.d.ts b/frontend/src/types/index.d.ts index d689330..62a565e 100644 --- a/frontend/src/types/index.d.ts +++ b/frontend/src/types/index.d.ts @@ -51,6 +51,7 @@ declare global { cluster_threshold_one: number; cluster_threshold_two: number; heatmap_image_data: string; + clustermap_image_data: string; histogram_image_data: string; violin_image_data: string; image_format: SaveableImageFormat; From 407dbc35ec8a2d732c1a78142e5f6574aa0cb883 Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Thu, 6 Mar 2025 10:03:40 -0700 Subject: [PATCH 20/57] added vmin as bottom for cuttof 2 to prevent crash when going below --- frontend/src/components/HeatmapSidebar.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index d34a40f..0a72ac9 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -125,7 +125,6 @@ export const HeatmapSidebar = ({ value={settings.cellspace} />
- {settings.colorScaleKey === "Discrete" ? (
@@ -145,7 +144,7 @@ export const HeatmapSidebar = ({ field="cutoff_2" value={settings.cutoff_2} updateValue={updateSettings} - min={0} + min={settings.vmin + 1} max={settings.cutoff_1 - 1} step={1} /> From 4b64879e64fd38112c583c1742cd14484d5839ce Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Thu, 6 Mar 2025 16:18:11 -0800 Subject: [PATCH 21/57] clustermap legend, add svg switch, allow vmix to equal vmax --- frontend/src/components/D3CanvasHeatmap.tsx | 25 +++++++++++++++++++++ frontend/src/components/Heatmap.tsx | 20 ++++++++++++++++- frontend/src/components/HeatmapSidebar.tsx | 4 ++-- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 50d6ad2..f55a8e2 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -262,6 +262,31 @@ export const D3CanvasHeatmap = ({ ctx.stroke(); } } + + if (clusterData) { + const legendWidth = 80; + const cellSize = 10; + const lineGap = 20; + const labelGap = 5; + const positionX = width - legendWidth - margin.right; + + [...new Set(clusterData.map((i) => i.group))].map((cluster, index) => { + const positionY = margin.top + lineGap * index; + + ctx.fillStyle = clusterGroupColors[index] || "red"; + ctx.fillRect(positionX, positionY, cellSize, cellSize); + + ctx.fillStyle = "black"; + ctx.textAlign = "left"; + ctx.textBaseline = "middle"; + ctx.font = "10px 'Roboto Mono'"; + ctx.fillText( + `Cluster ${cluster.toString()}`, + positionX + cellSize + labelGap, + positionY + cellSize / 2, + ); + }); + } }, [ transform, filteredData, diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index 9bab797..920b4ed 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -116,6 +116,23 @@ export const Heatmap = ({ const titleFont = settings.titleFont === "Monospace" ? plotFontMonospace : plotFontSansSerif; + const [forced3SvgRender, setForceD3SvgRender] = React.useState(false); + + React.useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + if ((event.metaKey || event.altKey) && event.key === "1") { + setForceD3SvgRender(true); + } else if ((event.metaKey || event.altKey) && event.key === "2") { + setForceD3SvgRender(false); + } + + event.preventDefault(); + }; + + document.addEventListener("keydown", handleKeyDown); + return () => document.removeEventListener("keydown", handleKeyDown); + }, []); + return ( <> {data ? ( @@ -125,7 +142,8 @@ export const Heatmap = ({ ref={elementRef} style={{ background: "#fff" }} > - {appState.showExportModal && appState.saveFormat === "svg" ? ( + {forced3SvgRender || + (appState.showExportModal && appState.saveFormat === "svg") ? ( @@ -313,7 +313,7 @@ export const HeatmapSidebar = ({ field="vmax" value={settings.vmax} updateValue={updateSettings} - min={settings.vmin + 1} + min={settings.vmin} max={100} step={1} isDisabled={settings.colorScaleKey === "Discrete"} From 3709741a3733d2637587d113ec8fb913045c14d2 Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Fri, 7 Mar 2025 11:47:29 -0700 Subject: [PATCH 22/57] fixed svg axis label rotation --- frontend/src/components/D3Heatmap.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/D3Heatmap.tsx b/frontend/src/components/D3Heatmap.tsx index 84a3b58..861b191 100644 --- a/frontend/src/components/D3Heatmap.tsx +++ b/frontend/src/components/D3Heatmap.tsx @@ -159,7 +159,7 @@ export const D3Heatmap = ({ .attr( "transform", (_, i) => - `rotate(${360 - axlabel_xrotation}, ${i * cellW + cellW / 2}, ${axisGap})`, + `rotate(${270 + axlabel_xrotation}, ${i * cellW + cellW / 2}, ${axisGap})`, ); // y-axis labels @@ -177,7 +177,7 @@ export const D3Heatmap = ({ .attr( "transform", (_, i) => - `rotate(${270 - axlabel_yrotation}, ${-axisGap}, ${i * cellH + cellH / 2})`, + `rotate(${360 + axlabel_yrotation}, ${-axisGap}, ${i * cellH + cellH / 2})`, ); } From 6a9a93a25009fc9c7ad2dc4da39afba71d491b07 Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Fri, 7 Mar 2025 12:53:50 -0700 Subject: [PATCH 23/57] removed x/y font size and just made one fontsize, still need slider --- backend/src/cluster.py | 2 +- backend/src/document_state.py | 2 - frontend/src/appState.ts | 2 - frontend/src/components/Clustermap.tsx | 2 - frontend/src/components/ClustermapSidebar.tsx | 11 +----- frontend/src/components/D3CanvasHeatmap.tsx | 37 +++++++++++++------ frontend/src/components/D3Heatmap.tsx | 4 +- frontend/src/components/Heatmap.tsx | 3 -- frontend/src/components/HeatmapSidebar.tsx | 11 +----- frontend/src/hooks/map.ts | 4 +- frontend/src/plotTypes.ts | 4 -- 11 files changed, 31 insertions(+), 51 deletions(-) diff --git a/backend/src/cluster.py b/backend/src/cluster.py index f8c9116..0e9de5b 100644 --- a/backend/src/cluster.py +++ b/backend/src/cluster.py @@ -64,7 +64,7 @@ def cluster_by_identity(clusters, nodes): # get first node to determine which primary cluster this belongs to first_value = node_list[0] if first_value in reverse_clusters: - # get primary cluster ID (add 1 for 1-based indexing) + # get primary cluster ID (add 1 for human-readable indexing) group_number = reverse_clusters[first_value] + 1 # get next available subgroup number for this primary cluster subgroup_number = subgroup_counters[reverse_clusters[first_value]] diff --git a/backend/src/document_state.py b/backend/src/document_state.py index 17eebd9..c424562 100644 --- a/backend/src/document_state.py +++ b/backend/src/document_state.py @@ -51,7 +51,6 @@ axlabel_xrotation=0, axlabel_xfontsize=12, axlabel_yrotation=0, - axlabel_yfontsize=12, cutoff_1=95, cutoff_2=75 ) @@ -72,7 +71,6 @@ axlabel_xrotation=0, axlabel_xfontsize=12, axlabel_yrotation=0, - axlabel_yfontsize=12, cellspace=1, ) diff --git a/frontend/src/appState.ts b/frontend/src/appState.ts index ded22f9..39e2574 100644 --- a/frontend/src/appState.ts +++ b/frontend/src/appState.ts @@ -173,7 +173,6 @@ export const initialDocState: DocState = { axlabel_xrotation: 0, axlabel_xfontsize: 12, axlabel_yrotation: 0, - axlabel_yfontsize: 12, cutoff_1: 95, cutoff_2: 75, }, @@ -192,7 +191,6 @@ export const initialDocState: DocState = { axlabel_xrotation: 0, axlabel_xfontsize: 12, axlabel_yrotation: 0, - axlabel_yfontsize: 12, cellspace: 1, }, }; diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index 8ef75c7..e072e9b 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -15,7 +15,6 @@ export type ClustermapRenderProps = { height: number; roundTo: number; axlabel_xfontsize: number; - axlabel_yfontsize: number; axlabel_xrotation: number; axlabel_yrotation: number; showPercentIdentities: boolean; @@ -110,7 +109,6 @@ export const Clustermap = ({ axlabel_xrotation={settings.axlabel_xrotation} axlabel_xfontsize={settings.axlabel_xfontsize} axlabel_yrotation={settings.axlabel_yrotation} - axlabel_yfontsize={settings.axlabel_yfontsize} titleFont={ settings.titleFont === "Monospace" ? plotFontMonospace diff --git a/frontend/src/components/ClustermapSidebar.tsx b/frontend/src/components/ClustermapSidebar.tsx index 7bcf46b..c6ec274 100644 --- a/frontend/src/components/ClustermapSidebar.tsx +++ b/frontend/src/components/ClustermapSidebar.tsx @@ -150,7 +150,7 @@ export const ClustermapSidebar = ({ >
- i.group)), + ].slice(0, 50); + + uniqueClusters.forEach((cluster, index) => { + // Determine column (0 for left, 1 for right) + const column = index % 2; + + // Calculate row position (every two items share the same row) + const row = Math.floor(index / 2); - [...new Set(clusterData.map((i) => i.group))].map((cluster, index) => { - const positionY = margin.top + lineGap * index; + // Calculate position based on column and row + const itemX = positionX + column * (legendWidth + columnGap); + const itemY = margin.top + lineGap * row; + // Draw colored square ctx.fillStyle = clusterGroupColors[index] || "red"; - ctx.fillRect(positionX, positionY, cellSize, cellSize); + ctx.fillRect(itemX, itemY, cellSize, cellSize); + // Draw text ctx.fillStyle = "black"; ctx.textAlign = "left"; ctx.textBaseline = "middle"; - ctx.font = "10px 'Roboto Mono'"; + ctx.font = `${10}px 'Roboto Mono'`; ctx.fillText( `Cluster ${cluster.toString()}`, - positionX + cellSize + labelGap, - positionY + cellSize / 2, + itemX + cellSize + labelGap, + itemY + cellSize / 2, ); }); } @@ -301,7 +315,6 @@ export const D3CanvasHeatmap = ({ title, annotation_font_size, axlabel_xfontsize, - axlabel_yfontsize, axlabel_xrotation, axlabel_yrotation, titleFont, diff --git a/frontend/src/components/D3Heatmap.tsx b/frontend/src/components/D3Heatmap.tsx index 861b191..1667204 100644 --- a/frontend/src/components/D3Heatmap.tsx +++ b/frontend/src/components/D3Heatmap.tsx @@ -22,7 +22,6 @@ export const D3Heatmap = ({ cbarHeight, annotation_font_size, axlabel_xfontsize, - axlabel_yfontsize, axlabel_xrotation, axlabel_yrotation, titleFont, @@ -172,7 +171,7 @@ export const D3Heatmap = ({ .attr("dominant-baseline", "central") .attr("text-anchor", "end") .attr("font-family", plotFontMonospace.family) - .attr("font-size", `${axlabel_yfontsize}px`) + .attr("font-size", `${axlabel_xfontsize}px`) .text((txt) => txt) .attr( "transform", @@ -244,7 +243,6 @@ export const D3Heatmap = ({ showPercentIdentities, annotation_font_size, axlabel_xfontsize, - axlabel_yfontsize, axlabel_xrotation, axlabel_yrotation, titleFont, diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index 920b4ed..ee47140 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -30,7 +30,6 @@ export type HeatmapRenderProps = { cbarWidth: number; cbarHeight: number; axlabel_xfontsize: number; - axlabel_yfontsize: number; axlabel_xrotation: number; axlabel_yrotation: number; showPercentIdentities: boolean; @@ -162,7 +161,6 @@ export const Heatmap = ({ axlabel_xrotation={settings.axlabel_xrotation} axlabel_xfontsize={settings.axlabel_xfontsize} axlabel_yrotation={settings.axlabel_yrotation} - axlabel_yfontsize={settings.axlabel_yfontsize} titleFont={titleFont} showTitles={settings.showTitles} title={settings.title} @@ -189,7 +187,6 @@ export const Heatmap = ({ axlabel_xrotation={settings.axlabel_xrotation} axlabel_xfontsize={settings.axlabel_xfontsize} axlabel_yrotation={settings.axlabel_yrotation} - axlabel_yfontsize={settings.axlabel_yfontsize} titleFont={titleFont} showPercentIdentities={settings.annotation} showTitles={settings.showTitles} diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index 163dcbf..9326af2 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -224,7 +224,7 @@ export const HeatmapSidebar = ({ >
- Math.max(...tickText.map((tick) => tick.length)) * - settings.axlabel_yfontsize, - [tickText, settings.axlabel_yfontsize], + settings.axlabel_xfontsize, + [tickText, settings.axlabel_xfontsize], ); const margin = React.useMemo( diff --git a/frontend/src/plotTypes.ts b/frontend/src/plotTypes.ts index eb9f472..9c93ce6 100644 --- a/frontend/src/plotTypes.ts +++ b/frontend/src/plotTypes.ts @@ -25,7 +25,6 @@ export interface HeatmapSettings { axlabel_xrotation: number; axlabel_xfontsize: number; axlabel_yrotation: number; - axlabel_yfontsize: number; cutoff_1: number; cutoff_2: number; } @@ -72,7 +71,6 @@ export const HeatmapSettingsSchema = z.object({ axlabel_xrotation: z.number(), axlabel_xfontsize: z.number(), axlabel_yrotation: z.number(), - axlabel_yfontsize: z.number(), cutoff_1: z.number(), cutoff_2: z.number(), }); @@ -117,7 +115,6 @@ export interface ClustermapSettings { axlabel_xrotation: number; axlabel_xfontsize: number; axlabel_yrotation: number; - axlabel_yfontsize: number; cellspace: number; } @@ -136,6 +133,5 @@ export const ClustermapSettingsSchema = z.object({ axlabel_xrotation: z.number(), axlabel_xfontsize: z.number(), axlabel_yrotation: z.number(), - axlabel_yfontsize: z.number(), cellspace: z.number(), }); From f5046f9bd7ffd618a1dc16a09fa298748b5b98ba Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Fri, 7 Mar 2025 13:00:54 -0700 Subject: [PATCH 24/57] added some slidrs, no css, all jackedup --- frontend/src/components/HeatmapSidebar.tsx | 38 +++++++++++++--------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index 9326af2..8e4c1fa 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -223,31 +223,37 @@ export const HeatmapSidebar = ({ aria-hidden={!settings.axis_labels} >
- + updateSettings({ axlabel_xfontsize: value }) + } value={settings.axlabel_xfontsize} - updateValue={updateSettings} - min={1} - max={40} + minValue={1} + maxValue={40} step={1} /> - + updateSettings({ axlabel_xrotation: value }) + } value={settings.axlabel_xrotation} - updateValue={updateSettings} - min={-90} - max={90} + minValue={-90} + maxValue={90} step={10} /> - + updateSettings({ axlabel_yrotation: value }) + } value={settings.axlabel_yrotation} - updateValue={updateSettings} - min={-90} - max={90} + minValue={-90} + maxValue={90} step={10} />
From 0560e571ab4725574b50cff944ff3670ec0d9163 Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Fri, 7 Mar 2025 13:52:04 -0700 Subject: [PATCH 25/57] 100 values no longer show 100.00 --- frontend/src/components/D3CanvasHeatmap.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index a4aaaf9..4930bb8 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -16,7 +16,6 @@ export const D3CanvasHeatmap = ({ width, height, cellSpace, - roundTo, cbarHeight, cbarWidth, annotation_font_size, @@ -130,8 +129,8 @@ export const D3CanvasHeatmap = ({ if (showPercentIdentities) { // set text to current percision value - const formattedText = d.value.toFixed(roundTo); + const formattedText = d.value === 100 ? "100" : d.value.toFixed(2); // Gonnjaprobably get rid of user input. not very helpful and will be overriden with any large or zoomed graphs ctx.font = `${10}px ${plotFontMonospace.family}`; @@ -310,7 +309,7 @@ export const D3CanvasHeatmap = ({ cellSize, cellSpace, showPercentIdentities, - roundTo, + showTitles, title, annotation_font_size, From 9708d2ecb1052e1a0a86f67e60dd984b8bd4c313 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Fri, 7 Mar 2025 16:59:59 -0800 Subject: [PATCH 26/57] remove unused functions and tests --- frontend/src/colors.ts | 88 ----------------------- frontend/src/hooks/useAnnotations.ts | 87 ---------------------- frontend/src/restoreClientState.ts | 49 ------------- frontend/tests/colors.test.ts | 73 ------------------- frontend/tests/restoreClientState.test.ts | 80 --------------------- 5 files changed, 377 deletions(-) delete mode 100644 frontend/src/hooks/useAnnotations.ts delete mode 100644 frontend/src/restoreClientState.ts delete mode 100644 frontend/tests/colors.test.ts delete mode 100644 frontend/tests/restoreClientState.test.ts diff --git a/frontend/src/colors.ts b/frontend/src/colors.ts index d1103c6..d6db6d7 100644 --- a/frontend/src/colors.ts +++ b/frontend/src/colors.ts @@ -1,4 +1,3 @@ -import Color from "colorjs.io"; import * as d3 from "d3"; import tinycolor from "tinycolor2"; import { z } from "zod"; @@ -18,16 +17,6 @@ export const ColorStringSchema = z }, ); -export const findScaleLower = (colorScale: ColorScaleArray, value: number) => - colorScale - .filter((curr) => curr[0] <= value) - .reduce((prev, curr) => (curr[0] > prev[0] ? curr : prev), colorScale[0]); - -export const findScaleUpper = (colorScale: ColorScaleArray, value: number) => - colorScale - .filter((curr) => curr[0] >= value) - .reduce((prev, curr) => (curr[0] < prev[0] ? curr : prev), colorScale[0]); - export const originalRgbFormat = { name: "rgb", commas: true, @@ -35,50 +24,6 @@ export const originalRgbFormat = { coords: ["[0, 255]", "[0, 255]", "[0, 255]"], }; -export const interpolateColor = ( - colorScale: ColorScaleArray, - value: number, - format?: { - name: string; - commas: boolean; - noAlpha: boolean; - coords: string[]; - }, -): { - value: ColorScaleArray[number]; - upper: ColorScaleArray[number]; - lower: ColorScaleArray[number]; -} => { - const lower = findScaleLower(colorScale, value); - const upper = findScaleUpper(colorScale, value); - - const ratio = - lower[0] === upper[0] ? 0 : (value - lower[0]) / (upper[0] - lower[0]); - const lowerColor = new Color(lower[1]); - const upperColor = new Color(upper[1]); - const interpolator = lowerColor.range(upperColor, { - space: "srgb", - outputSpace: "srgb", - }); - const interpolatedColor = - ratio === 0 - ? value === lower[0] - ? lower[1] - : upper[1] - : interpolator(ratio).toString({ format, precision: 0 }); - - return { - value: [ratio, interpolatedColor], - lower, - upper, - }; -}; - -export const makeLinearGradient = (scale: ColorScaleArray) => { - const values = Array.from({ length: 10 }, (_, i) => i / 10); - return values.map((v) => interpolateColor(scale, v).value); -}; - export function createD3ColorScale( colorArray: ColorScaleArray, discrete: boolean, @@ -200,36 +145,3 @@ export const Colors: Record = { MediumOrchid: "hsl(288, 59%, 58%)", None: "hsla(0, 0%, 0%, 0)", } as const; - -export const clusterGroupColors = [ - "red", - "pink", - "blue", - "green", - "purple", - "orange", - "lime", - "teal", - "navy", - "yellow", - "aqua", - "fuchsia", - "gold", - "chocolate", - "tomato", - "salmon", - "magenta", - "hotpink", - "cornflowerblue", - "darkgreen", - "darkslategray", - "coral", - "orchid", - "turquoise", - "silver", - "maroon", - "olive", - "black", - "white", - "gray", -]; diff --git a/frontend/src/hooks/useAnnotations.ts b/frontend/src/hooks/useAnnotations.ts deleted file mode 100644 index 0124557..0000000 --- a/frontend/src/hooks/useAnnotations.ts +++ /dev/null @@ -1,87 +0,0 @@ -import React from "react"; -import tinycolor from "tinycolor2"; -import type { DocState } from "../appState"; -import type { ColorScaleArray } from "../colorScales"; -import { interpolateColor, originalRgbFormat } from "../colors"; -import type { HeatmapData } from "../plotTypes"; - -export const useAnnotations = ( - enabled: boolean, - data: HeatmapData, - vmin: number, - vmax: number, - _colorScale: ColorScaleArray, - reverse: boolean, - roundTo: DocState["heatmap"]["annotation_rounding"], -) => - React.useMemo(() => { - if (!enabled) { - return { - x: [], - y: [], - text: [], - textColors: [], - }; - } - - const x: number[] = []; - const y: number[] = []; - const text: string[] = []; - const textColors: (string | null)[] = []; - let colorScale = _colorScale; - - if (reverse) { - colorScale = [..._colorScale] - .reverse() - .map((data, i) => [ - (_colorScale[i] ?? _colorScale[0])[0], - data[1], - ]) as ColorScaleArray; - } - - const dataMin = vmin; - const dataMax = vmax; - const dataDiff = dataMax - dataMin; - - data.forEach((row, rowIndex) => { - row.forEach((datum, columnIndex) => { - x.push(columnIndex); - y.push(rowIndex); - - if (datum === null) { - text.push(""); - } else { - text.push(Number.parseFloat(datum).toFixed(roundTo)); - } - - const parsedDatum = Number.parseFloat(datum); - const normalizedDatum = Math.max(0, (parsedDatum - dataMin) / dataDiff); - - if (datum === null) { - textColors.push(null); - } else { - const interpolated = interpolateColor( - colorScale, - normalizedDatum, - originalRgbFormat, - ); - const textColor = tinycolor - .mostReadable(interpolated.value[1], ["#fff", "#000"], { - includeFallbackColors: false, - level: "AAA", - size: "small", - }) - .toHexString(); - - textColors.push(textColor); - } - }); - }); - - return { - x, - y, - text, - textColors, - }; - }, [enabled, data, vmin, vmax, _colorScale, reverse, roundTo]); diff --git a/frontend/src/restoreClientState.ts b/frontend/src/restoreClientState.ts deleted file mode 100644 index 3778fd2..0000000 --- a/frontend/src/restoreClientState.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { - type AppState, - // clientStateKey, - // clientStateSchema, - initialAppState, -} from "./appState"; -// import { partialSafeParse } from "./zodUtils"; - -export const restoreClientState = (baseClientState: AppState) => { - try { - return baseClientState || initialAppState; - // const state = localStorage.getItem(clientStateKey); - // if (state) { - // const parsedState = JSON.parse(state); - // parsedState.error = null; - // parsedState.errorInfo = null; - // const parsedClient = partialSafeParse(clientStateSchema, parsedState); - // const validData = parsedClient.validData; - // const merged: AppState = { - // ...baseClientState, - // ...parsedClient.validData, - // distribution: { - // ...baseClientState.distribution, - // ...validData.distribution, - // histogram: { - // ...baseClientState.distribution.histogram, - // ...validData.distribution?.histogram, - // }, - // violin: { - // ...baseClientState.distribution.violin, - // ...validData.distribution?.violin, - // }, - // raincloud: { - // ...baseClientState.distribution.raincloud, - // ...validData.distribution?.raincloud, - // }, - // }, - // heatmap: { - // ...baseClientState.heatmap, - // ...validData.heatmap, - // }, - // }; - // return merged; - // } - } catch (e) { - return initialAppState; - } - // return initialAppState;s -}; diff --git a/frontend/tests/colors.test.ts b/frontend/tests/colors.test.ts deleted file mode 100644 index 7cb9b65..0000000 --- a/frontend/tests/colors.test.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { describe, expect, test } from "bun:test"; -import { type ColorScaleArray, colorScales } from "../src/colorScales"; -import { - findScaleLower, - findScaleUpper, - interpolateColor, - originalRgbFormat, -} from "../src/colors"; - -const testScale: ColorScaleArray = [ - [0, "rgb(8,29,88)"], - [0.125, "rgb(37,52,148)"], - [0.25, "rgb(34,94,168)"], - [0.375, "rgb(29,145,192)"], - [0.5, "rgb(65,182,196)"], - [0.625, "rgb(127,205,187)"], - [0.75, "rgb(199,233,180)"], - [0.875, "rgb(237,248,217)"], - [1, "rgb(255,255,217)"], -]; - -test("findScaleLower works", () => { - expect(findScaleLower(testScale, 0.25)).toEqual([0.25, "rgb(34,94,168)"]); -}); -test("findScaleUpper works", () => { - expect(findScaleUpper(testScale, 0.9)).toEqual([1, "rgb(255,255,217)"]); -}); - -describe("interpolateColor", () => { - test("works with a small dataset", () => { - const interpolatedColor = interpolateColor( - [ - [0, "rgb(0, 0, 0)"], - [1, "rgb(255, 255, 255)"], - ], - 0.5, - originalRgbFormat, - ); - expect(interpolatedColor).toEqual({ - value: [0.5, "rgb(128, 128, 128)"], - lower: [0, "rgb(0, 0, 0)"], - upper: [1, "rgb(255, 255, 255)"], - }); - }); - - describe("with a real dataset", () => { - test("works with normal ratio", () => { - const interpolatedColor = interpolateColor( - colorScales.Yellow_Green_Blue, - 0.57, - originalRgbFormat, - ); - expect(interpolatedColor).toEqual({ - value: [0.5599999999999996, "rgb(100, 195, 191)"], - lower: [0.5, "rgb(65,182,196)"], - upper: [0.625, "rgb(127,205,187)"], - }); - }); - - test("works with zero ratio", () => { - const interpolatedColor = interpolateColor( - colorScales.Yellow_Green_Blue, - 0.5, - originalRgbFormat, - ); - expect(interpolatedColor).toEqual({ - value: [0, "rgb(65,182,196)"], - lower: [0.5, "rgb(65,182,196)"], - upper: [0.5, "rgb(65,182,196)"], - }); - }); - }); -}); diff --git a/frontend/tests/restoreClientState.test.ts b/frontend/tests/restoreClientState.test.ts deleted file mode 100644 index b96da28..0000000 --- a/frontend/tests/restoreClientState.test.ts +++ /dev/null @@ -1,80 +0,0 @@ -// import { beforeEach, expect, test } from "bun:test"; -// import { -// type AppState, -// clientStateKey, -// initialAppState, -// } from "../src/appState"; -// import { restoreClientState } from "../src/restoreClientState"; - -// // Adapted from https://stackoverflow.com/a/26177872 -// const storageMock = () => { -// let storage: { [key: string]: string } = {}; - -// return { -// setItem: (key: string, value: string) => { -// storage[key] = value || ""; -// }, -// getItem: (key: string) => (key in storage ? storage[key] || null : null), -// removeItem: (key: string) => { -// delete storage[key]; -// }, -// get length() { -// return Object.keys(storage).length; -// }, -// key: (i: number) => { -// const keys = Object.keys(storage); -// return keys[i] || null; -// }, -// clear: () => { -// storage = {}; -// }, -// }; -// }; - -// beforeEach(() => { -// if (storageMock().getItem(clientStateKey)) { -// throw new Error("should not be here"); -// } -// global.localStorage = storageMock(); -// }); - -// test("it returns default state when localStorage key is missing", () => { -// const restored = restoreClientState(initialAppState.client); -// expect(restored).toEqual(initialAppState.client); -// }); - -// test("it returns default state if invalid state in localStorage", () => { -// localStorage.setItem(clientStateKey, "{ invalid: true"); -// const restored = restoreClientState(initialAppState.client); -// expect(restored).toEqual(initialAppState.client); -// }); - -// test("doesn't import invalid state", () => { -// const updatedComputeCores = initialAppState.client.compute_cores + 1; -// const state: AppState["client"] & { test: true } = { -// ...initialAppState.client, -// // biome-ignore lint/suspicious/noExplicitAny: test bad values -// dataView: "badvalue" as any, -// compute_cores: updatedComputeCores, -// test: true, -// }; -// localStorage.setItem(clientStateKey, JSON.stringify(state)); -// const restored = restoreClientState(initialAppState.client); -// expect(restored.compute_cores).toEqual(updatedComputeCores); -// // biome-ignore lint/suspicious/noExplicitAny: test bad values -// expect((restored as any)?.test).toBeUndefined(); -// }); - -// test("restores valid state", () => { -// const state = { -// ...initialAppState.client, -// client: { ...initialAppState.client, dataView: "" }, -// }; -// localStorage.setItem(clientStateKey, JSON.stringify(state)); -// const restored = restoreClientState(initialAppState.client); -// expect(restored).toEqual({ -// ...initialAppState.client, -// error: null, -// errorInfo: null, -// }); -// }); From 112e01f921504dd10698a0318d573a89ab62c54f Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Fri, 7 Mar 2025 19:42:48 -0800 Subject: [PATCH 27/57] distinct colors in the clustermap --- frontend/src/colors.ts | 9 ++++++--- frontend/src/components/D3CanvasHeatmap.tsx | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/frontend/src/colors.ts b/frontend/src/colors.ts index d6db6d7..ff317cc 100644 --- a/frontend/src/colors.ts +++ b/frontend/src/colors.ts @@ -44,9 +44,12 @@ export function createD3ColorScale( .clamp(true); } -export const distinctColor = (value: number) => { - const hue = value * 137.508; // use golden angle approximation - return `hsl(${hue},50%,75%)`; +export const distinctColor = (index: number) => { + if (!index) { + return "hsl(245, 245, 245)"; + } + const hue = (index * 137.5) % 360; + return `hsl(${hue}, 85%, 50%)`; }; type ColorName = diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 4930bb8..8591bf0 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -123,7 +123,7 @@ export const D3CanvasHeatmap = ({ const clusterGroup = clusterMatch ? clusterX : null; ctx.fillStyle = clusterGroup - ? clusterGroupColors[clusterGroup] || "red" + ? distinctColor(clusterGroup) : colorFn(d.value); ctx.fillRect(x, y, rectSize, rectSize); @@ -152,7 +152,7 @@ export const D3CanvasHeatmap = ({ // set text color dynamically based on background const rectColor = clusterGroup - ? clusterGroupColors[clusterGroup] + ? distinctColor(clusterGroup) : colorFn(d.value); const textColor = tinycolor(rectColor).isLight() ? "#000" : "#fff"; @@ -285,7 +285,7 @@ export const D3CanvasHeatmap = ({ const itemY = margin.top + lineGap * row; // Draw colored square - ctx.fillStyle = clusterGroupColors[index] || "red"; + ctx.fillStyle = distinctColor(index + 1); ctx.fillRect(itemX, itemY, cellSize, cellSize); // Draw text From a344adb94053fbcacc558204a4fb36609e5821dd Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Fri, 7 Mar 2025 19:43:29 -0800 Subject: [PATCH 28/57] replace annotation font size setting with auto scaling --- backend/src/document_state.py | 2 - frontend/src/appState.ts | 2 - frontend/src/components/Clustermap.tsx | 3 +- frontend/src/components/ClustermapSidebar.tsx | 10 ---- frontend/src/components/D3CanvasHeatmap.tsx | 48 ++++++------------- frontend/src/components/D3Heatmap.tsx | 10 ++-- frontend/src/components/Heatmap.tsx | 4 +- frontend/src/components/HeatmapSidebar.tsx | 10 ---- frontend/src/heatmapUtils.ts | 15 ++++++ frontend/src/hooks/useGetData.ts | 9 ++-- frontend/src/plotTypes.ts | 4 -- frontend/tests/heatmapUtils.test.ts | 12 +++++ 12 files changed, 55 insertions(+), 74 deletions(-) create mode 100644 frontend/src/heatmapUtils.ts create mode 100644 frontend/tests/heatmapUtils.test.ts diff --git a/backend/src/document_state.py b/backend/src/document_state.py index c424562..a517258 100644 --- a/backend/src/document_state.py +++ b/backend/src/document_state.py @@ -35,7 +35,6 @@ vmin=65, cellspace=1, annotation=False, - annotation_font_size=10, annotation_rounding=0, showscale=True, titleFont="Sans Serif", @@ -59,7 +58,6 @@ threshold_one=85, threshold_two=0, annotation=False, - annotation_font_size=10, annotation_rounding=0, titleFont="Sans Serif", showTitles=False, diff --git a/frontend/src/appState.ts b/frontend/src/appState.ts index 39e2574..0530c92 100644 --- a/frontend/src/appState.ts +++ b/frontend/src/appState.ts @@ -158,7 +158,6 @@ export const initialDocState: DocState = { vmin: 65, cellspace: 1, annotation: false, - annotation_font_size: 10, annotation_rounding: 0, showscale: true, titleFont: "Sans Serif", @@ -180,7 +179,6 @@ export const initialDocState: DocState = { threshold_one: 85, threshold_two: 0, annotation: false, - annotation_font_size: 10, annotation_rounding: 0, titleFont: "Sans Serif", showTitles: false, diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index e072e9b..9b0be1c 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -24,7 +24,7 @@ export type ClustermapRenderProps = { axis_labels: boolean; titleFont: typeof plotFontMonospace | typeof plotFontSansSerif; margin: { top: number; bottom: number; left: number; right: number }; -} & Pick & { +} & Pick & { clusterData?: { id: string; group: number; @@ -105,7 +105,6 @@ export const Clustermap = ({ height={size.height} roundTo={settings.annotation_rounding} showscale={false} - annotation_font_size={settings.annotation_font_size} axlabel_xrotation={settings.axlabel_xrotation} axlabel_xfontsize={settings.axlabel_xfontsize} axlabel_yrotation={settings.axlabel_yrotation} diff --git a/frontend/src/components/ClustermapSidebar.tsx b/frontend/src/components/ClustermapSidebar.tsx index c6ec274..323cd2d 100644 --- a/frontend/src/components/ClustermapSidebar.tsx +++ b/frontend/src/components/ClustermapSidebar.tsx @@ -117,16 +117,6 @@ export const ClustermapSidebar = ({
-
diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 8591bf0..e6dcc0c 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -1,8 +1,9 @@ import * as d3 from "d3"; import React from "react"; import tinycolor from "tinycolor2"; -import { clusterGroupColors, createD3ColorScale } from "../colors"; +import { createD3ColorScale, distinctColor } from "../colors"; import { plotFontMonospace } from "../constants"; +import { getFontSizeForCell } from "../heatmapUtils"; import { useHeatmapRef } from "../hooks/useHeatmapRef"; import type { HeatmapRenderProps } from "./Heatmap"; @@ -16,9 +17,9 @@ export const D3CanvasHeatmap = ({ width, height, cellSpace, + roundTo, cbarHeight, cbarWidth, - annotation_font_size, axlabel_xfontsize, axlabel_xrotation, axlabel_yrotation, @@ -89,6 +90,8 @@ export const D3CanvasHeatmap = ({ ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.scale(pixelRatio, pixelRatio); + ctx.textRendering = "optimizeSpeed"; + // set zoom transform ctx.save(); ctx.translate(transform.x + margin.left, transform.y + margin.top); @@ -99,13 +102,10 @@ export const D3CanvasHeatmap = ({ // Calculate cell size accounting for cellspace parameter const rectSize = cellSize - cellSpace; - // calculate the miminimum font size based netween 20% of the calculated rectsize but will never be smaller than 1 - //prevents 0s and negatives - const minFontSize = Math.max(1, Math.floor(0.2 * rectSize)); - //max is set to 70% of rectsize - const maxFontSize = Math.floor(0.7 * rectSize); - // set font size to the smaller of the two - const fontSize = Math.min(maxFontSize, annotation_font_size); + const fontSize = getFontSizeForCell( + rectSize, + settings.annotation_rounding + 3, + ); // Draw cells for (const d of filteredData) { @@ -129,26 +129,8 @@ export const D3CanvasHeatmap = ({ if (showPercentIdentities) { // set text to current percision value - - const formattedText = d.value === 100 ? "100" : d.value.toFixed(2); - // Gonnjaprobably get rid of user input. not very helpful and will be overriden with any large or zoomed graphs - ctx.font = `${10}px ${plotFontMonospace.family}`; - - // Measure text width of user setting/default - const textWidth = ctx.measureText(formattedText).width; - - //calculate 80% of cell width - const availableWidth = rectSize * 0.8; // 80% of cell width - - // Calculate the final font size for this cell's text, let allows for dynamic change - let textFontSize = fontSize; - // If text is too wide make the font smaller if small make it the minimum - if (textWidth > availableWidth) { - textFontSize = Math.max( - minFontSize, - Math.floor((availableWidth / textWidth) * fontSize), - ); - } + const roundedValue = d.value.toFixed(roundTo); + const formattedText = d.value === 100 ? "100" : roundedValue; // set text color dynamically based on background const rectColor = clusterGroup @@ -160,7 +142,7 @@ export const D3CanvasHeatmap = ({ ctx.fillStyle = textColor; ctx.textAlign = "center"; ctx.textBaseline = "middle"; - ctx.font = `${textFontSize}px ${plotFontMonospace.family}`; + ctx.font = `${fontSize}px ${plotFontMonospace.family}`; ctx.fillText(formattedText, x + rectSize / 2, y + rectSize / 2); } } @@ -309,13 +291,13 @@ export const D3CanvasHeatmap = ({ cellSize, cellSpace, showPercentIdentities, - + roundTo, showTitles, title, - annotation_font_size, axlabel_xfontsize, axlabel_xrotation, axlabel_yrotation, + settings.annotation_rounding, titleFont, tickText, cbarWidth, @@ -356,7 +338,7 @@ export const D3CanvasHeatmap = ({ ); return () => { - d3.select(canvas).on(".zoom", null); + d3.select(canvas).on("zoom", null); }; }, [canvasRef, width, height, margin]); diff --git a/frontend/src/components/D3Heatmap.tsx b/frontend/src/components/D3Heatmap.tsx index 1667204..41db6ef 100644 --- a/frontend/src/components/D3Heatmap.tsx +++ b/frontend/src/components/D3Heatmap.tsx @@ -3,6 +3,7 @@ import React from "react"; import tinycolor from "tinycolor2"; import { createD3ColorScale } from "../colors"; import { plotFontMonospace } from "../constants"; +import { getFontSizeForCell } from "../heatmapUtils"; import { useHeatmapRef } from "../hooks/useHeatmapRef"; import type { HeatmapRenderProps } from "./Heatmap"; @@ -20,7 +21,6 @@ export const D3Heatmap = ({ showPercentIdentities, cbarWidth, cbarHeight, - annotation_font_size, axlabel_xfontsize, axlabel_xrotation, axlabel_yrotation, @@ -74,6 +74,10 @@ export const D3Heatmap = ({ const cellH = h / n; const cellOffset = cellSpace > 0 ? cellSpace / 2 : 0; const axisGap = 5; + const fontSize = getFontSizeForCell( + cellW, + settings.annotation_rounding + 3, + ); const groups = g .selectAll("g") @@ -97,7 +101,7 @@ export const D3Heatmap = ({ .attr("dy", ".35em") .attr("text-anchor", "middle") .attr("font-family", "Roboto Mono") - .attr("font-size", `${annotation_font_size}px`) + .attr("font-size", `${fontSize}px`) .text((d) => d.value.toFixed(roundTo)) .attr("fill", (d) => tinycolor(colorFn(d.value)).isLight() ? "#000" : "#fff", @@ -236,12 +240,12 @@ export const D3Heatmap = ({ settings.colorScaleKey, settings.vmin, settings.vmax, + settings.annotation_rounding, width, height, cellSpace, roundTo, showPercentIdentities, - annotation_font_size, axlabel_xfontsize, axlabel_xrotation, axlabel_yrotation, diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index ee47140..58fe390 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -39,7 +39,7 @@ export type HeatmapRenderProps = { axis_labels: boolean; titleFont: typeof plotFontMonospace | typeof plotFontSansSerif; margin: { top: number; bottom: number; left: number; right: number }; -} & Pick; +} & Pick; export const Heatmap = ({ data, @@ -157,7 +157,6 @@ export const Heatmap = ({ roundTo={settings.annotation_rounding} cbarHeight={cbar_shrink ?? settings.cbar_shrink} cbarWidth={cbar_aspect ?? settings.cbar_aspect} - annotation_font_size={settings.annotation_font_size} axlabel_xrotation={settings.axlabel_xrotation} axlabel_xfontsize={settings.axlabel_xfontsize} axlabel_yrotation={settings.axlabel_yrotation} @@ -183,7 +182,6 @@ export const Heatmap = ({ showscale={settings.showscale} cbarHeight={cbar_shrink ?? settings.cbar_shrink} cbarWidth={cbar_aspect ?? settings.cbar_aspect} - annotation_font_size={settings.annotation_font_size} axlabel_xrotation={settings.axlabel_xrotation} axlabel_xfontsize={settings.axlabel_xfontsize} axlabel_yrotation={settings.axlabel_yrotation} diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index 8e4c1fa..42f9979 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -191,16 +191,6 @@ export const HeatmapSidebar = ({
-
diff --git a/frontend/src/heatmapUtils.ts b/frontend/src/heatmapUtils.ts new file mode 100644 index 0000000..810394c --- /dev/null +++ b/frontend/src/heatmapUtils.ts @@ -0,0 +1,15 @@ +export const getFontSizeForCell = ( + cellWidth: number, + characterCount: number, +) => { + const characterWidth = 0.6; // Approximate width for Roboto Mono + const availableWidth = cellWidth * 0.8; + + return Math.min( + 20, + Math.max( + 0.25, + Math.floor(availableWidth / (characterCount * characterWidth)), + ), + ); +}; diff --git a/frontend/src/hooks/useGetData.ts b/frontend/src/hooks/useGetData.ts index 008d588..a1c8bfa 100644 --- a/frontend/src/hooks/useGetData.ts +++ b/frontend/src/hooks/useGetData.ts @@ -45,8 +45,8 @@ export const useGetData = (docState: DocState, setDocState: SetDocState) => { }); const state = await getDocument(docState.id); - const scaledFontSize = getScaledFontSize( - initialDocState.heatmap.annotation_font_size, + const scaledAxisLabelFontSize = getScaledFontSize( + initialDocState.heatmap.axlabel_xfontsize, parsedData.map(Boolean).length, ); @@ -68,9 +68,8 @@ export const useGetData = (docState: DocState, setDocState: SetDocState) => { ...(docState.filetype === "application/vnd.sdt" ? null : { - annotation_font_size: scaledFontSize, - axlabel_xfontsize: scaledFontSize, - axlabel_yfontsize: scaledFontSize, + axlabel_xfontsize: scaledAxisLabelFontSize, + axlabel_yfontsize: scaledAxisLabelFontSize, }), }, }), diff --git a/frontend/src/plotTypes.ts b/frontend/src/plotTypes.ts index 9c93ce6..b48b3fe 100644 --- a/frontend/src/plotTypes.ts +++ b/frontend/src/plotTypes.ts @@ -10,7 +10,6 @@ export interface HeatmapSettings { vmin: number; cellspace: number; annotation: boolean; - annotation_font_size: number; annotation_rounding: 0 | 1 | 2; showscale: boolean; titleFont: "Sans Serif" | "Monospace"; @@ -56,7 +55,6 @@ export const HeatmapSettingsSchema = z.object({ vmin: z.number(), cellspace: z.number(), annotation: z.boolean(), - annotation_font_size: z.number(), annotation_rounding: z.union([z.literal(0), z.literal(1), z.literal(2)]), showscale: z.boolean(), showTitles: z.boolean(), @@ -104,7 +102,6 @@ export interface ClustermapSettings { threshold_one: number; threshold_two: number; annotation: boolean; - annotation_font_size: number; annotation_rounding: 0 | 1 | 2; titleFont: "Sans Serif" | "Monospace"; showTitles: boolean; @@ -122,7 +119,6 @@ export const ClustermapSettingsSchema = z.object({ threshold_one: z.number(), threshold_two: z.number(), annotation: z.boolean(), - annotation_font_size: z.number(), annotation_rounding: z.union([z.literal(0), z.literal(1), z.literal(2)]), showTitles: z.boolean(), titleFont: z.enum(["Sans Serif", "Monospace"]), diff --git a/frontend/tests/heatmapUtils.test.ts b/frontend/tests/heatmapUtils.test.ts new file mode 100644 index 0000000..1c3ff24 --- /dev/null +++ b/frontend/tests/heatmapUtils.test.ts @@ -0,0 +1,12 @@ +import { describe, expect, it } from "bun:test"; +import { getFontSizeForCell } from "../src/heatmapUtils"; + +describe("getFontSizeForCell", () => { + it("should return the correct font size for a cell", () => { + expect(getFontSizeForCell(100, 5)).toBe(26); + expect(getFontSizeForCell(50, 5)).toBe(13); + expect(getFontSizeForCell(25, 3)).toBe(11); + expect(getFontSizeForCell(1, 3)).toBe(1); + expect(getFontSizeForCell(0, 1)).toBe(1); + }); +}); From 3942c764f858951c928749addd5560c7d7a98b08 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Fri, 7 Mar 2025 19:45:55 -0800 Subject: [PATCH 29/57] fix tests --- frontend/tests/heatmapUtils.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/tests/heatmapUtils.test.ts b/frontend/tests/heatmapUtils.test.ts index 1c3ff24..a6101bd 100644 --- a/frontend/tests/heatmapUtils.test.ts +++ b/frontend/tests/heatmapUtils.test.ts @@ -3,10 +3,10 @@ import { getFontSizeForCell } from "../src/heatmapUtils"; describe("getFontSizeForCell", () => { it("should return the correct font size for a cell", () => { - expect(getFontSizeForCell(100, 5)).toBe(26); + expect(getFontSizeForCell(100, 5)).toBe(20); expect(getFontSizeForCell(50, 5)).toBe(13); expect(getFontSizeForCell(25, 3)).toBe(11); - expect(getFontSizeForCell(1, 3)).toBe(1); - expect(getFontSizeForCell(0, 1)).toBe(1); + expect(getFontSizeForCell(1, 3)).toBe(0.25); + expect(getFontSizeForCell(0, 1)).toBe(0.25); }); }); From 44d6c34832addcb94421756d6651ab566c4049e1 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Fri, 7 Mar 2025 20:47:57 -0800 Subject: [PATCH 30/57] keep minimum cell size positive --- frontend/src/components/D3CanvasHeatmap.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index e6dcc0c..5087bc5 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -100,8 +100,8 @@ export const D3CanvasHeatmap = ({ const rows = [...new Set(filteredData.map((d) => d.x))]; const cols = [...new Set(filteredData.map((d) => d.y))]; - // Calculate cell size accounting for cellspace parameter - const rectSize = cellSize - cellSpace; + // Calculate cell size accounting for cellspace parameter; + const rectSize = Math.max(1, cellSize - cellSpace); const fontSize = getFontSizeForCell( rectSize, settings.annotation_rounding + 3, From 74934bdebd577eac0694ee9d64460bfd11ae85f1 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 07:02:17 -0800 Subject: [PATCH 31/57] always show max precision in clustermap --- backend/src/document_state.py | 1 - frontend/src/appState.ts | 1 - frontend/src/components/Clustermap.tsx | 2 +- frontend/src/components/ClustermapSidebar.tsx | 27 ------------------- frontend/src/components/D3CanvasHeatmap.tsx | 1 - frontend/src/plotTypes.ts | 2 -- 6 files changed, 1 insertion(+), 33 deletions(-) diff --git a/backend/src/document_state.py b/backend/src/document_state.py index a517258..2be66e8 100644 --- a/backend/src/document_state.py +++ b/backend/src/document_state.py @@ -58,7 +58,6 @@ threshold_one=85, threshold_two=0, annotation=False, - annotation_rounding=0, titleFont="Sans Serif", showTitles=False, title="", diff --git a/frontend/src/appState.ts b/frontend/src/appState.ts index 0530c92..053b71d 100644 --- a/frontend/src/appState.ts +++ b/frontend/src/appState.ts @@ -179,7 +179,6 @@ export const initialDocState: DocState = { threshold_one: 85, threshold_two: 0, annotation: false, - annotation_rounding: 0, titleFont: "Sans Serif", showTitles: false, title: "", diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index 9b0be1c..73ed5b3 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -103,7 +103,7 @@ export const Clustermap = ({ maxVal={100} width={size.width} height={size.height} - roundTo={settings.annotation_rounding} + roundTo={2} showscale={false} axlabel_xrotation={settings.axlabel_xrotation} axlabel_xfontsize={settings.axlabel_xfontsize} diff --git a/frontend/src/components/ClustermapSidebar.tsx b/frontend/src/components/ClustermapSidebar.tsx index 323cd2d..0d4b137 100644 --- a/frontend/src/components/ClustermapSidebar.tsx +++ b/frontend/src/components/ClustermapSidebar.tsx @@ -92,33 +92,6 @@ export const ClustermapSidebar = ({ > Percent Identities -
-
-
- - -
-
-
Date: Sat, 8 Mar 2025 08:28:09 -0800 Subject: [PATCH 32/57] scale cellspace, expand metrics used, fix bugs --- frontend/src/components/D3CanvasHeatmap.tsx | 31 +++++++------- frontend/src/components/D3Heatmap.tsx | 46 ++++++++++----------- frontend/src/heatmapUtils.ts | 37 +++++++++++++---- frontend/tests/heatmapUtils.test.ts | 26 ++++++++---- 4 files changed, 86 insertions(+), 54 deletions(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index f14e0c3..a3c74f7 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -3,7 +3,7 @@ import React from "react"; import tinycolor from "tinycolor2"; import { createD3ColorScale, distinctColor } from "../colors"; import { plotFontMonospace } from "../constants"; -import { getFontSizeForCell } from "../heatmapUtils"; +import { getCellMetrics, getFontSizeForCell } from "../heatmapUtils"; import { useHeatmapRef } from "../hooks/useHeatmapRef"; import type { HeatmapRenderProps } from "./Heatmap"; @@ -48,11 +48,8 @@ export const D3CanvasHeatmap = ({ [data], ); - const size = Math.min(width, height); - const plotSize = size - margin.left - margin.right; - - const n = tickText.length; - const cellSize = plotSize / n; + const plotSize = Math.min(width, height) - margin.left - margin.right; + const cellSize = plotSize / tickText.length; const colorFn = createD3ColorScale( colorScale, @@ -96,21 +93,21 @@ export const D3CanvasHeatmap = ({ ctx.save(); ctx.translate(transform.x + margin.left, transform.y + margin.top); ctx.scale(transform.k, transform.k); + //index data const rows = [...new Set(filteredData.map((d) => d.x))]; const cols = [...new Set(filteredData.map((d) => d.y))]; - // Calculate cell size accounting for cellspace parameter; - const rectSize = Math.max(1, cellSize - cellSpace); - const fontSize = getFontSizeForCell( - rectSize, + const cellMetrics = getCellMetrics( + cellSize, + cellSpace, settings.annotation_rounding + 3, ); // Draw cells for (const d of filteredData) { - const x = cols.indexOf(d.x) * cellSize + cellSpace / 2; - const y = rows.indexOf(d.y) * cellSize + cellSpace / 2; + const x = cols.indexOf(d.x) * cellSize + cellMetrics.cellOffset; + const y = rows.indexOf(d.y) * cellSize + cellMetrics.cellOffset; const clusterX = clusterData?.find((i) => i.id === tickText[d.x])?.group; const clusterY = clusterData?.find((i) => i.id === tickText[d.y])?.group; @@ -125,7 +122,7 @@ export const D3CanvasHeatmap = ({ ctx.fillStyle = clusterGroup ? distinctColor(clusterGroup) : colorFn(d.value); - ctx.fillRect(x, y, rectSize, rectSize); + ctx.fillRect(x, y, cellMetrics.cellSize, cellMetrics.cellSize); if (showPercentIdentities) { const roundedValue = d.value.toFixed(roundTo); @@ -141,8 +138,12 @@ export const D3CanvasHeatmap = ({ ctx.fillStyle = textColor; ctx.textAlign = "center"; ctx.textBaseline = "middle"; - ctx.font = `${fontSize}px ${plotFontMonospace.family}`; - ctx.fillText(formattedText, x + rectSize / 2, y + rectSize / 2); + ctx.font = `${cellMetrics.fontSize}px ${plotFontMonospace.family}`; + ctx.fillText( + formattedText, + x + cellMetrics.textOffset, + y + cellMetrics.textOffset, + ); } } ctx.restore(); diff --git a/frontend/src/components/D3Heatmap.tsx b/frontend/src/components/D3Heatmap.tsx index 41db6ef..3d7f3f3 100644 --- a/frontend/src/components/D3Heatmap.tsx +++ b/frontend/src/components/D3Heatmap.tsx @@ -3,7 +3,7 @@ import React from "react"; import tinycolor from "tinycolor2"; import { createD3ColorScale } from "../colors"; import { plotFontMonospace } from "../constants"; -import { getFontSizeForCell } from "../heatmapUtils"; +import { getCellMetrics, getFontSizeForCell } from "../heatmapUtils"; import { useHeatmapRef } from "../hooks/useHeatmapRef"; import type { HeatmapRenderProps } from "./Heatmap"; @@ -52,11 +52,15 @@ export const D3Heatmap = ({ const d3Svg = d3.select(svgRef.current as Element); d3Svg.selectAll("*").remove(); - const size = Math.min(width, height); - const w = size - margin.left - margin.right; - const h = size - margin.top - margin.bottom; - - const n = tickText.length; + const plotSize = Math.min(width, height); + const plotWidth = plotSize - margin.left - margin.right; + const plotHeight = plotSize - margin.top - margin.bottom; + const cellSize = plotWidth / tickText.length; + const cellMetrics = getCellMetrics( + cellSize, + cellSpace, + settings.annotation_rounding + 3, + ); const colorFn = createD3ColorScale( colorScale, @@ -70,39 +74,35 @@ export const D3Heatmap = ({ .append("g") .attr("transform", `translate(${margin.left}, ${margin.top})`); - const cellW = w / n; - const cellH = h / n; - const cellOffset = cellSpace > 0 ? cellSpace / 2 : 0; const axisGap = 5; - const fontSize = getFontSizeForCell( - cellW, - settings.annotation_rounding + 3, - ); const groups = g .selectAll("g") .data(data.filter((d) => Number(d.value))) .join("g") - .attr("transform", (d) => `translate(${d.x * cellW}, ${d.y * cellH})`); + .attr( + "transform", + (d) => `translate(${d.x * cellSize}, ${d.y * cellSize})`, + ); groups .append("rect") - .attr("width", Math.max(cellW - cellSpace, 1)) - .attr("height", Math.max(cellH - cellSpace, 1)) - .attr("x", cellOffset) - .attr("y", cellOffset) + .attr("width", Math.max(cellMetrics.cellSize, 1)) + .attr("height", Math.max(cellMetrics.cellSize, 1)) + .attr("x", cellMetrics.cellOffset) + .attr("y", cellMetrics.cellOffset) .attr("fill", (d) => colorFn(d.value)); if (showPercentIdentities) { groups .append("text") - .attr("x", cellW / 2) - .attr("y", cellH / 2) + .attr("x", cellSize / 2) + .attr("y", cellSize / 2) .attr("dy", ".35em") .attr("text-anchor", "middle") .attr("font-family", "Roboto Mono") - .attr("font-size", `${fontSize}px`) - .text((d) => d.value.toFixed(roundTo)) + .attr("font-size", `${cellMetrics.fontSize}px`) + .text((d) => (d.value === 100 ? "100" : d.value.toFixed(roundTo))) .attr("fill", (d) => tinycolor(colorFn(d.value)).isLight() ? "#000" : "#fff", ); @@ -148,7 +148,7 @@ export const D3Heatmap = ({ if (axis_labels) { // x-axis labels g.append("g") - .attr("transform", `translate(0, ${h})`) + .attr("transform", `translate(0, ${plotHeight})`) .selectAll("text") .data(tickText) .join("text") diff --git a/frontend/src/heatmapUtils.ts b/frontend/src/heatmapUtils.ts index 810394c..86ad776 100644 --- a/frontend/src/heatmapUtils.ts +++ b/frontend/src/heatmapUtils.ts @@ -1,15 +1,36 @@ -export const getFontSizeForCell = ( - cellWidth: number, +export const getPlotMetrics = (width: number, height: number) => { + // WIP + return {}; +}; + +export const getCellMetrics = ( + cellSize: number, + cellSpace: number, characterCount: number, ) => { - const characterWidth = 0.6; // Approximate width for Roboto Mono - const availableWidth = cellWidth * 0.8; + if (characterCount <= 0) throw new Error("characterCount must be > 0"); - return Math.min( - 20, + const CHARACTER_WIDTH = 0.6; // Approximate width for Roboto Mono @ 10px + const USABLE_SPACE_RATIO = 0.8; + const MIN_FONT_SIZE = 0.25; + const MAX_FONT_SIZE = 20; + + const scaledCellSpace = cellSpace * (cellSize / (cellSize + 20)); + const spacedCellSize = Math.max(1, cellSize - scaledCellSpace); + const scaledFontSize = Math.min( + MAX_FONT_SIZE, Math.max( - 0.25, - Math.floor(availableWidth / (characterCount * characterWidth)), + MIN_FONT_SIZE, + (spacedCellSize * USABLE_SPACE_RATIO) / + (characterCount * CHARACTER_WIDTH), ), ); + + return { + cellSize: spacedCellSize, + cellSpace: scaledCellSpace, + cellOffset: scaledCellSpace / 2, + fontSize: scaledFontSize, + textOffset: spacedCellSize / 2, + }; }; diff --git a/frontend/tests/heatmapUtils.test.ts b/frontend/tests/heatmapUtils.test.ts index a6101bd..f6c5d3e 100644 --- a/frontend/tests/heatmapUtils.test.ts +++ b/frontend/tests/heatmapUtils.test.ts @@ -1,12 +1,22 @@ import { describe, expect, it } from "bun:test"; -import { getFontSizeForCell } from "../src/heatmapUtils"; +import { getCellMetrics } from "../src/heatmapUtils"; -describe("getFontSizeForCell", () => { - it("should return the correct font size for a cell", () => { - expect(getFontSizeForCell(100, 5)).toBe(20); - expect(getFontSizeForCell(50, 5)).toBe(13); - expect(getFontSizeForCell(25, 3)).toBe(11); - expect(getFontSizeForCell(1, 3)).toBe(0.25); - expect(getFontSizeForCell(0, 1)).toBe(0.25); +describe("getCellMetrics", () => { + it("should return the correct metrics", () => { + expect(getCellMetrics(20, 1, 5)).toEqual({ + cellSize: 19.5, + cellSpace: 0.5, + cellOffset: 0.25, + fontSize: 5.2, + textOffset: 9.75, + }); + }); + it("should throw an error if characterCount is less than or equal to 0", () => { + expect(() => getCellMetrics(10, 2, 0)).toThrowError( + "characterCount must be > 0", + ); + expect(() => getCellMetrics(10, 2, -1)).toThrowError( + "characterCount must be > 0", + ); }); }); From da8d1178c7d47f6a3a0a957be6edab0eb457e6c6 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 08:52:53 -0800 Subject: [PATCH 33/57] oops --- frontend/src/components/ClustermapSidebar.tsx | 1 - frontend/src/components/D3CanvasHeatmap.tsx | 2 +- frontend/src/components/D3Heatmap.tsx | 10 +++++----- frontend/src/heatmapUtils.ts | 5 ++++- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/frontend/src/components/ClustermapSidebar.tsx b/frontend/src/components/ClustermapSidebar.tsx index 0d4b137..bfb9775 100644 --- a/frontend/src/components/ClustermapSidebar.tsx +++ b/frontend/src/components/ClustermapSidebar.tsx @@ -1,7 +1,6 @@ import React from "react"; import { Input, Label, TextField } from "react-aria-components"; import type { DocState } from "../appState"; -import type { HeatmapSettings } from "../plotTypes"; import { NumberInput } from "./NumberInput"; import { Select, SelectItem } from "./Select"; import { Slider } from "./Slider"; diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index a3c74f7..4329fa3 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -3,7 +3,7 @@ import React from "react"; import tinycolor from "tinycolor2"; import { createD3ColorScale, distinctColor } from "../colors"; import { plotFontMonospace } from "../constants"; -import { getCellMetrics, getFontSizeForCell } from "../heatmapUtils"; +import { getCellMetrics } from "../heatmapUtils"; import { useHeatmapRef } from "../hooks/useHeatmapRef"; import type { HeatmapRenderProps } from "./Heatmap"; diff --git a/frontend/src/components/D3Heatmap.tsx b/frontend/src/components/D3Heatmap.tsx index 3d7f3f3..0cdfb7d 100644 --- a/frontend/src/components/D3Heatmap.tsx +++ b/frontend/src/components/D3Heatmap.tsx @@ -3,7 +3,7 @@ import React from "react"; import tinycolor from "tinycolor2"; import { createD3ColorScale } from "../colors"; import { plotFontMonospace } from "../constants"; -import { getCellMetrics, getFontSizeForCell } from "../heatmapUtils"; +import { getCellMetrics } from "../heatmapUtils"; import { useHeatmapRef } from "../hooks/useHeatmapRef"; import type { HeatmapRenderProps } from "./Heatmap"; @@ -152,7 +152,7 @@ export const D3Heatmap = ({ .selectAll("text") .data(tickText) .join("text") - .attr("x", (_, i) => i * cellW + cellW / 2) + .attr("x", (_, i) => i * cellSize + cellSize / 2) .attr("y", axisGap) .attr("dominant-baseline", "middle") .attr("text-anchor", "end") @@ -162,7 +162,7 @@ export const D3Heatmap = ({ .attr( "transform", (_, i) => - `rotate(${270 + axlabel_xrotation}, ${i * cellW + cellW / 2}, ${axisGap})`, + `rotate(${270 + axlabel_xrotation}, ${i * cellSize + cellSize / 2}, ${axisGap})`, ); // y-axis labels @@ -171,7 +171,7 @@ export const D3Heatmap = ({ .data(tickText) .join("text") .attr("x", -axisGap) - .attr("y", (_, i) => i * cellH + cellH / 2) + .attr("y", (_, i) => i * cellSize + cellSize / 2) .attr("dominant-baseline", "central") .attr("text-anchor", "end") .attr("font-family", plotFontMonospace.family) @@ -180,7 +180,7 @@ export const D3Heatmap = ({ .attr( "transform", (_, i) => - `rotate(${360 + axlabel_yrotation}, ${-axisGap}, ${i * cellH + cellH / 2})`, + `rotate(${360 + axlabel_yrotation}, ${-axisGap}, ${i * cellSize + cellSize / 2})`, ); } diff --git a/frontend/src/heatmapUtils.ts b/frontend/src/heatmapUtils.ts index 86ad776..7802d66 100644 --- a/frontend/src/heatmapUtils.ts +++ b/frontend/src/heatmapUtils.ts @@ -1,6 +1,9 @@ export const getPlotMetrics = (width: number, height: number) => { // WIP - return {}; + return { + width: width, + height: height, + }; }; export const getCellMetrics = ( From d416404799c37fabe26fcffec71df4662436b38a Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 09:03:20 -0800 Subject: [PATCH 34/57] full width sliders for axis label settings --- frontend/src/components/HeatmapSidebar.tsx | 68 +++++++++++----------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index 42f9979..94b223a 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -212,41 +212,39 @@ export const HeatmapSidebar = ({ data-hidden={!settings.axis_labels} aria-hidden={!settings.axis_labels} > -
- - updateSettings({ axlabel_xfontsize: value }) - } - value={settings.axlabel_xfontsize} - minValue={1} - maxValue={40} - step={1} - /> - - updateSettings({ axlabel_xrotation: value }) - } - value={settings.axlabel_xrotation} - minValue={-90} - maxValue={90} - step={10} - /> - - updateSettings({ axlabel_yrotation: value }) - } - value={settings.axlabel_yrotation} - minValue={-90} - maxValue={90} - step={10} - /> -
+ + updateSettings({ axlabel_xfontsize: value }) + } + value={settings.axlabel_xfontsize} + minValue={1} + maxValue={40} + step={1} + /> + + updateSettings({ axlabel_xrotation: value }) + } + value={settings.axlabel_xrotation} + minValue={-90} + maxValue={90} + step={10} + /> + + updateSettings({ axlabel_yrotation: value }) + } + value={settings.axlabel_yrotation} + minValue={-90} + maxValue={90} + step={10} + />
From ed3697ae8f719fa2afaa4e81b2e69d546d2e05c5 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 09:04:26 -0800 Subject: [PATCH 35/57] use roundTo prop so the clustermap metrics are right --- frontend/src/components/D3CanvasHeatmap.tsx | 7 +------ frontend/src/components/D3Heatmap.tsx | 6 +----- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 4329fa3..81d9e88 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -98,11 +98,7 @@ export const D3CanvasHeatmap = ({ const rows = [...new Set(filteredData.map((d) => d.x))]; const cols = [...new Set(filteredData.map((d) => d.y))]; - const cellMetrics = getCellMetrics( - cellSize, - cellSpace, - settings.annotation_rounding + 3, - ); + const cellMetrics = getCellMetrics(cellSize, cellSpace, roundTo + 3); // Draw cells for (const d of filteredData) { @@ -297,7 +293,6 @@ export const D3CanvasHeatmap = ({ axlabel_xfontsize, axlabel_xrotation, axlabel_yrotation, - settings.annotation_rounding, titleFont, tickText, cbarWidth, diff --git a/frontend/src/components/D3Heatmap.tsx b/frontend/src/components/D3Heatmap.tsx index 0cdfb7d..176a5fc 100644 --- a/frontend/src/components/D3Heatmap.tsx +++ b/frontend/src/components/D3Heatmap.tsx @@ -56,11 +56,7 @@ export const D3Heatmap = ({ const plotWidth = plotSize - margin.left - margin.right; const plotHeight = plotSize - margin.top - margin.bottom; const cellSize = plotWidth / tickText.length; - const cellMetrics = getCellMetrics( - cellSize, - cellSpace, - settings.annotation_rounding + 3, - ); + const cellMetrics = getCellMetrics(cellSize, cellSpace, roundTo + 3); const colorFn = createD3ColorScale( colorScale, From 73e5ad77a0af246389ba774cd0f4bac58a5c6f2d Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 09:09:00 -0800 Subject: [PATCH 36/57] rename all xfontsize references with just fontsize --- backend/src/document_state.py | 4 ++-- frontend/src/appState.ts | 4 ++-- frontend/src/components/Clustermap.tsx | 4 ++-- frontend/src/components/ClustermapSidebar.tsx | 4 ++-- frontend/src/components/D3CanvasHeatmap.tsx | 12 ++++++------ frontend/src/components/D3Heatmap.tsx | 9 ++++----- frontend/src/components/Heatmap.tsx | 6 +++--- frontend/src/components/HeatmapSidebar.tsx | 4 ++-- frontend/src/hooks/map.ts | 4 ++-- frontend/src/hooks/useGetData.ts | 4 ++-- frontend/src/plotTypes.ts | 8 ++++---- 11 files changed, 31 insertions(+), 32 deletions(-) diff --git a/backend/src/document_state.py b/backend/src/document_state.py index 2be66e8..73472a2 100644 --- a/backend/src/document_state.py +++ b/backend/src/document_state.py @@ -48,7 +48,7 @@ cbar_pad=10, axis_labels=False, axlabel_xrotation=0, - axlabel_xfontsize=12, + axlabel_fontsize=12, axlabel_yrotation=0, cutoff_1=95, cutoff_2=75 @@ -66,7 +66,7 @@ ytitle="", axis_labels=False, axlabel_xrotation=0, - axlabel_xfontsize=12, + axlabel_fontsize=12, axlabel_yrotation=0, cellspace=1, ) diff --git a/frontend/src/appState.ts b/frontend/src/appState.ts index 053b71d..a8d92b6 100644 --- a/frontend/src/appState.ts +++ b/frontend/src/appState.ts @@ -170,7 +170,7 @@ export const initialDocState: DocState = { cbar_pad: 10, axis_labels: false, axlabel_xrotation: 0, - axlabel_xfontsize: 12, + axlabel_fontsize: 12, axlabel_yrotation: 0, cutoff_1: 95, cutoff_2: 75, @@ -186,7 +186,7 @@ export const initialDocState: DocState = { ytitle: "", axis_labels: false, axlabel_xrotation: 0, - axlabel_xfontsize: 12, + axlabel_fontsize: 12, axlabel_yrotation: 0, cellspace: 1, }, diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index 73ed5b3..737f2fd 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -14,7 +14,7 @@ export type ClustermapRenderProps = { width: number; height: number; roundTo: number; - axlabel_xfontsize: number; + axlabel_fontsize: number; axlabel_xrotation: number; axlabel_yrotation: number; showPercentIdentities: boolean; @@ -106,7 +106,7 @@ export const Clustermap = ({ roundTo={2} showscale={false} axlabel_xrotation={settings.axlabel_xrotation} - axlabel_xfontsize={settings.axlabel_xfontsize} + axlabel_fontsize={settings.axlabel_fontsize} axlabel_yrotation={settings.axlabel_yrotation} titleFont={ settings.titleFont === "Monospace" diff --git a/frontend/src/components/ClustermapSidebar.tsx b/frontend/src/components/ClustermapSidebar.tsx index bfb9775..2c492e4 100644 --- a/frontend/src/components/ClustermapSidebar.tsx +++ b/frontend/src/components/ClustermapSidebar.tsx @@ -113,8 +113,8 @@ export const ClustermapSidebar = ({
txt) .attr( "transform", @@ -171,7 +171,7 @@ export const D3Heatmap = ({ .attr("dominant-baseline", "central") .attr("text-anchor", "end") .attr("font-family", plotFontMonospace.family) - .attr("font-size", `${axlabel_xfontsize}px`) + .attr("font-size", `${axlabel_fontsize}px`) .text((txt) => txt) .attr( "transform", @@ -236,13 +236,12 @@ export const D3Heatmap = ({ settings.colorScaleKey, settings.vmin, settings.vmax, - settings.annotation_rounding, width, height, cellSpace, roundTo, showPercentIdentities, - axlabel_xfontsize, + axlabel_fontsize, axlabel_xrotation, axlabel_yrotation, titleFont, diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index 58fe390..6eac136 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -29,7 +29,7 @@ export type HeatmapRenderProps = { roundTo: number; cbarWidth: number; cbarHeight: number; - axlabel_xfontsize: number; + axlabel_fontsize: number; axlabel_xrotation: number; axlabel_yrotation: number; showPercentIdentities: boolean; @@ -158,7 +158,7 @@ export const Heatmap = ({ cbarHeight={cbar_shrink ?? settings.cbar_shrink} cbarWidth={cbar_aspect ?? settings.cbar_aspect} axlabel_xrotation={settings.axlabel_xrotation} - axlabel_xfontsize={settings.axlabel_xfontsize} + axlabel_fontsize={settings.axlabel_fontsize} axlabel_yrotation={settings.axlabel_yrotation} titleFont={titleFont} showTitles={settings.showTitles} @@ -183,7 +183,7 @@ export const Heatmap = ({ cbarHeight={cbar_shrink ?? settings.cbar_shrink} cbarWidth={cbar_aspect ?? settings.cbar_aspect} axlabel_xrotation={settings.axlabel_xrotation} - axlabel_xfontsize={settings.axlabel_xfontsize} + axlabel_fontsize={settings.axlabel_fontsize} axlabel_yrotation={settings.axlabel_yrotation} titleFont={titleFont} showPercentIdentities={settings.annotation} diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index 94b223a..1e566c8 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -216,9 +216,9 @@ export const HeatmapSidebar = ({ label="Font Size" labelClassName="sublabel" onChange={(value) => - updateSettings({ axlabel_xfontsize: value }) + updateSettings({ axlabel_fontsize: value }) } - value={settings.axlabel_xfontsize} + value={settings.axlabel_fontsize} minValue={1} maxValue={40} step={1} diff --git a/frontend/src/hooks/map.ts b/frontend/src/hooks/map.ts index 177859f..3f977c5 100644 --- a/frontend/src/hooks/map.ts +++ b/frontend/src/hooks/map.ts @@ -43,8 +43,8 @@ export const useMetrics = ( const longestTickWidth = React.useMemo( () => Math.max(...tickText.map((tick) => tick.length)) * - settings.axlabel_xfontsize, - [tickText, settings.axlabel_xfontsize], + settings.axlabel_fontsize, + [tickText, settings.axlabel_fontsize], ); const margin = React.useMemo( diff --git a/frontend/src/hooks/useGetData.ts b/frontend/src/hooks/useGetData.ts index a1c8bfa..57cd650 100644 --- a/frontend/src/hooks/useGetData.ts +++ b/frontend/src/hooks/useGetData.ts @@ -46,7 +46,7 @@ export const useGetData = (docState: DocState, setDocState: SetDocState) => { const state = await getDocument(docState.id); const scaledAxisLabelFontSize = getScaledFontSize( - initialDocState.heatmap.axlabel_xfontsize, + initialDocState.heatmap.axlabel_fontsize, parsedData.map(Boolean).length, ); @@ -68,7 +68,7 @@ export const useGetData = (docState: DocState, setDocState: SetDocState) => { ...(docState.filetype === "application/vnd.sdt" ? null : { - axlabel_xfontsize: scaledAxisLabelFontSize, + axlabel_fontsize: scaledAxisLabelFontSize, axlabel_yfontsize: scaledAxisLabelFontSize, }), }, diff --git a/frontend/src/plotTypes.ts b/frontend/src/plotTypes.ts index 94a965e..811643f 100644 --- a/frontend/src/plotTypes.ts +++ b/frontend/src/plotTypes.ts @@ -22,7 +22,7 @@ export interface HeatmapSettings { cbar_aspect: number; axis_labels: boolean; axlabel_xrotation: number; - axlabel_xfontsize: number; + axlabel_fontsize: number; axlabel_yrotation: number; cutoff_1: number; cutoff_2: number; @@ -67,7 +67,7 @@ export const HeatmapSettingsSchema = z.object({ cbar_aspect: z.number(), axis_labels: z.boolean(), axlabel_xrotation: z.number(), - axlabel_xfontsize: z.number(), + axlabel_fontsize: z.number(), axlabel_yrotation: z.number(), cutoff_1: z.number(), cutoff_2: z.number(), @@ -109,7 +109,7 @@ export interface ClustermapSettings { ytitle: string; axis_labels: boolean; axlabel_xrotation: number; - axlabel_xfontsize: number; + axlabel_fontsize: number; axlabel_yrotation: number; cellspace: number; } @@ -125,7 +125,7 @@ export const ClustermapSettingsSchema = z.object({ ytitle: z.string(), axis_labels: z.boolean(), axlabel_xrotation: z.number(), - axlabel_xfontsize: z.number(), + axlabel_fontsize: z.number(), axlabel_yrotation: z.number(), cellspace: z.number(), }); From 269305341d8b0a2099959780699a73b5b2a09253 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 09:26:09 -0800 Subject: [PATCH 37/57] make precision a toggle button group --- frontend/src/components/HeatmapSidebar.tsx | 41 +++++++++++++--------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index 1e566c8..339b4d2 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -1,5 +1,11 @@ import React from "react"; -import { Input, Label, TextField, ToggleButton } from "react-aria-components"; +import { + Input, + Label, + TextField, + ToggleButton, + ToggleButtonGroup, +} from "react-aria-components"; import type { DocState } from "../appState"; import type { ColorScaleArray } from "../colorScales"; import { formatTitle } from "../helpers"; @@ -171,26 +177,27 @@ export const HeatmapSidebar = ({ data-hidden={!settings.annotation} aria-hidden={!settings.annotation} > -
-
- - -
+ 0 + 1 + 2 + +
From 84228f334196e632b1330bcfaf204ab59d780502 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 09:33:25 -0800 Subject: [PATCH 38/57] fix typo --- frontend/src/components/Heatmap.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index 6eac136..e7e0071 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -115,14 +115,14 @@ export const Heatmap = ({ const titleFont = settings.titleFont === "Monospace" ? plotFontMonospace : plotFontSansSerif; - const [forced3SvgRender, setForceD3SvgRender] = React.useState(false); + const [forceSvgRender, setForceSvgRender] = React.useState(false); React.useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { if ((event.metaKey || event.altKey) && event.key === "1") { - setForceD3SvgRender(true); + setForceSvgRender(true); } else if ((event.metaKey || event.altKey) && event.key === "2") { - setForceD3SvgRender(false); + setForceSvgRender(false); } event.preventDefault(); @@ -141,7 +141,7 @@ export const Heatmap = ({ ref={elementRef} style={{ background: "#fff" }} > - {forced3SvgRender || + {forceSvgRender || (appState.showExportModal && appState.saveFormat === "svg") ? ( Date: Sat, 8 Mar 2025 09:44:21 -0800 Subject: [PATCH 39/57] fix some heatmap sidebar bugs --- frontend/src/components/HeatmapSidebar.tsx | 92 +++++++++++----------- frontend/src/styles/app.scss | 1 + 2 files changed, 47 insertions(+), 46 deletions(-) diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index 339b4d2..fef257f 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -312,53 +312,53 @@ export const HeatmapSidebar = ({ />
-
- { - updateSettings({ - showTitles: value, - }); - }} - > - Plot Titles - -
-
- - -
+
+
+ { + updateSettings({ + showTitles: value, + }); + }} + > + Plot Titles + +
+
+ + +
-
- updateSettings({ title: value })} - value={settings.title} - > - - - -
+
+ updateSettings({ title: value })} + value={settings.title} + > + + +
diff --git a/frontend/src/styles/app.scss b/frontend/src/styles/app.scss index d67ebe2..337ab5f 100644 --- a/frontend/src/styles/app.scss +++ b/frontend/src/styles/app.scss @@ -140,6 +140,7 @@ body { overflow: auto; border-radius: 0.6rem; box-shadow: 0 0 0 0.1rem var(--border-color); + z-index: 1; } .app-sidebar { From 3bf76da41973ec81eb2196015def88fc56d01529 Mon Sep 17 00:00:00 2001 From: Michael Lund Date: Sat, 8 Mar 2025 12:26:13 -0700 Subject: [PATCH 40/57] brought style axis labels sliders to clustermap --- frontend/src/components/ClustermapSidebar.tsx | 63 ++++++++++--------- frontend/src/components/HeatmapSidebar.tsx | 2 +- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/frontend/src/components/ClustermapSidebar.tsx b/frontend/src/components/ClustermapSidebar.tsx index 2c492e4..7187073 100644 --- a/frontend/src/components/ClustermapSidebar.tsx +++ b/frontend/src/components/ClustermapSidebar.tsx @@ -110,38 +110,41 @@ export const ClustermapSidebar = ({ data-hidden={!settings.axis_labels} aria-hidden={!settings.axis_labels} > -
- - - -
+ + updateSettings({ axlabel_fontsize: value }) + } + value={settings.axlabel_fontsize} + minValue={1} + maxValue={20} + step={1} + /> + + updateSettings({ axlabel_xrotation: value }) + } + value={settings.axlabel_xrotation} + minValue={-90} + maxValue={90} + step={10} + /> + + updateSettings({ axlabel_yrotation: value }) + } + value={settings.axlabel_yrotation} + minValue={-90} + maxValue={90} + step={10} + />
-
Date: Sat, 8 Mar 2025 13:21:21 -0800 Subject: [PATCH 41/57] optimize rendering by precomputing cell data --- backend/src/app.py | 1 + frontend/src/colors.ts | 7 - frontend/src/components/Clustermap.tsx | 10 +- frontend/src/components/D3CanvasHeatmap.tsx | 55 +----- frontend/src/components/D3Heatmap.tsx | 20 +- frontend/src/components/Heatmap.tsx | 28 +-- frontend/src/heatmapUtils.ts | 75 ++++++++ frontend/src/hooks/{map.ts => heatmap.ts} | 13 -- frontend/src/hooks/useGetData.ts | 2 + frontend/src/plotTypes.ts | 4 +- frontend/src/types/index.d.ts | 2 +- .../__snapshots__/heatmapUtils.test.ts.snap | 171 ++++++++++++++++++ frontend/tests/heatmapUtils.test.ts | 56 +++++- 13 files changed, 341 insertions(+), 103 deletions(-) rename frontend/src/hooks/{map.ts => heatmap.ts} (88%) create mode 100644 frontend/tests/__snapshots__/heatmapUtils.test.ts.snap diff --git a/backend/src/app.py b/backend/src/app.py index b5b3537..be8061f 100644 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -527,6 +527,7 @@ def get_data(self, doc_id: str): data_to_dump = dict( metadata=dict(minVal=min_val, maxVal=max_val), data=([tick_text] + parsedData), + # TODO: return indexes to strings not the strings themselves identity_scores=identity_scores, full_stats=stats_df.values.tolist() ) diff --git a/frontend/src/colors.ts b/frontend/src/colors.ts index ff317cc..8457859 100644 --- a/frontend/src/colors.ts +++ b/frontend/src/colors.ts @@ -17,13 +17,6 @@ export const ColorStringSchema = z }, ); -export const originalRgbFormat = { - name: "rgb", - commas: true, - noAlpha: true, - coords: ["[0, 255]", "[0, 255]", "[0, 255]"], -}; - export function createD3ColorScale( colorArray: ColorScaleArray, discrete: boolean, diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index 737f2fd..b57358b 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -2,7 +2,8 @@ import React from "react"; import type { DocState, SetDocState } from "../appState"; import type { ColorScaleArray } from "../colorScales"; import { plotFontMonospace, plotFontSansSerif } from "../constants"; -import { useHeatmapData, useMetrics, useSize } from "../hooks/map"; +import { formatClustermapData } from "../heatmapUtils"; +import { useMetrics, useSize } from "../hooks/heatmap"; import type { ClustermapSettings, HeatmapData } from "../plotTypes"; import { ClustermapSidebar } from "./ClustermapSidebar"; import { D3CanvasHeatmap } from "./D3CanvasHeatmap"; @@ -85,14 +86,17 @@ export const Clustermap = ({ [1, "rgb(245,245,245)"], ]; - const d3HeatmapData = useHeatmapData(data); + const clustermapData = React.useMemo( + () => formatClustermapData(data, tickText, clusterData), + [data, clusterData, tickText], + ); return ( <>
{data && clusterData ? ( (null); - const filteredData = React.useMemo( - () => data.filter((d) => Number(d.value)), - [data], - ); - const plotSize = Math.min(width, height) - margin.left - margin.right; const cellSize = plotSize / tickText.length; - const colorFn = createD3ColorScale( - colorScale, - settings.colorScaleKey === "Discrete", - settings.vmax, - settings.vmin, - ); - const scale = React.useMemo( () => d3.scaleLinear().domain([maxVal, minVal]).range([0, cbarHeight]), [minVal, maxVal, cbarHeight], @@ -95,43 +82,24 @@ export const D3CanvasHeatmap = ({ ctx.scale(transform.k, transform.k); //index data - const rows = [...new Set(filteredData.map((d) => d.x))]; - const cols = [...new Set(filteredData.map((d) => d.y))]; + const rows = [...new Set(data.map((d) => d.x))]; + const cols = [...new Set(data.map((d) => d.y))]; const cellMetrics = getCellMetrics(cellSize, cellSpace, roundTo + 3); // Draw cells - for (const d of filteredData) { + for (const d of data) { const x = cols.indexOf(d.x) * cellSize + cellMetrics.cellOffset; const y = rows.indexOf(d.y) * cellSize + cellMetrics.cellOffset; - const clusterX = clusterData?.find((i) => i.id === tickText[d.x])?.group; - const clusterY = clusterData?.find((i) => i.id === tickText[d.y])?.group; - - const clusterMatch = - clusterX !== undefined && - clusterY !== undefined && - clusterX === clusterY; - - const clusterGroup = clusterMatch ? clusterX : null; - - ctx.fillStyle = clusterGroup - ? distinctColor(clusterGroup) - : colorFn(d.value); + ctx.fillStyle = d.backgroundColor; ctx.fillRect(x, y, cellMetrics.cellSize, cellMetrics.cellSize); if (showPercentIdentities) { const roundedValue = d.value.toFixed(roundTo); const formattedText = d.value === 100 ? "100" : roundedValue; - // set text color dynamically based on background - const rectColor = clusterGroup - ? distinctColor(clusterGroup) - : colorFn(d.value); - const textColor = tinycolor(rectColor).isLight() ? "#000" : "#fff"; - - // Render text - ctx.fillStyle = textColor; + ctx.fillStyle = d.foregroundColor; ctx.textAlign = "center"; ctx.textBaseline = "middle"; ctx.font = `${cellMetrics.fontSize}px ${plotFontMonospace.family}`; @@ -144,7 +112,6 @@ export const D3CanvasHeatmap = ({ } ctx.restore(); - // Rest of your drawing code (titles, axes, colorbar) if (showTitles) { ctx.fillStyle = "black"; ctx.textAlign = "center"; @@ -153,9 +120,9 @@ export const D3CanvasHeatmap = ({ ctx.fillText(title, width / 2, margin.top - 20); } - const axisGap = 5; - if (axis_labels) { + const axisGap = 5; + // X-axis labels for (const [i, txt] of tickText.entries()) { if (txt === undefined) continue; @@ -203,7 +170,6 @@ export const D3CanvasHeatmap = ({ } } - // Colorbar gradient if (showscale) { const positionX = width - cbarWidth - margin.right; const gradient = ctx.createLinearGradient( @@ -280,8 +246,7 @@ export const D3CanvasHeatmap = ({ } }, [ transform, - filteredData, - colorFn, + data, scale, tickValues, cellSize, @@ -352,7 +317,7 @@ export const D3CanvasHeatmap = ({ (y - margin.top - transform.y) / (cellSize * transform.k), ); - const cell = filteredData.find((d) => d.x === dataX && d.y === dataY); + const cell = data.find((d) => d.x === dataX && d.y === dataY); const clusterGroup = clusterData && cell diff --git a/frontend/src/components/D3Heatmap.tsx b/frontend/src/components/D3Heatmap.tsx index 3276dab..4256a8c 100644 --- a/frontend/src/components/D3Heatmap.tsx +++ b/frontend/src/components/D3Heatmap.tsx @@ -1,7 +1,5 @@ import * as d3 from "d3"; import React from "react"; -import tinycolor from "tinycolor2"; -import { createD3ColorScale } from "../colors"; import { plotFontMonospace } from "../constants"; import { getCellMetrics } from "../heatmapUtils"; import { useHeatmapRef } from "../hooks/useHeatmapRef"; @@ -9,7 +7,6 @@ import type { HeatmapRenderProps } from "./Heatmap"; export const D3Heatmap = ({ data, - settings, tickText, colorScale, minVal, @@ -58,13 +55,6 @@ export const D3Heatmap = ({ const cellSize = plotWidth / tickText.length; const cellMetrics = getCellMetrics(cellSize, cellSpace, roundTo + 3); - const colorFn = createD3ColorScale( - colorScale, - settings.colorScaleKey === "Discrete", - settings.vmax, - settings.vmin, - ); - const g = d3 .select(svgRef.current) .append("g") @@ -87,7 +77,7 @@ export const D3Heatmap = ({ .attr("height", Math.max(cellMetrics.cellSize, 1)) .attr("x", cellMetrics.cellOffset) .attr("y", cellMetrics.cellOffset) - .attr("fill", (d) => colorFn(d.value)); + .attr("fill", (d) => d.backgroundColor); if (showPercentIdentities) { groups @@ -99,9 +89,7 @@ export const D3Heatmap = ({ .attr("font-family", "Roboto Mono") .attr("font-size", `${cellMetrics.fontSize}px`) .text((d) => (d.value === 100 ? "100" : d.value.toFixed(roundTo))) - .attr("fill", (d) => - tinycolor(colorFn(d.value)).isLight() ? "#000" : "#fff", - ); + .attr("fill", (d) => d.foregroundColor); } d3Svg.call( @@ -232,10 +220,6 @@ export const D3Heatmap = ({ svgRef.current, data, tickText, - colorScale, - settings.colorScaleKey, - settings.vmin, - settings.vmax, width, height, cellSpace, diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index e7e0071..d9c8893 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -9,7 +9,8 @@ import { colorScales as defaultColorScales, } from "../colorScales"; import { plotFontMonospace, plotFontSansSerif } from "../constants"; -import { useHeatmapData, useMetrics, useSize } from "../hooks/map"; +import { formatHeatmapData } from "../heatmapUtils"; +import { useMetrics, useSize } from "../hooks/heatmap"; import type { HeatmapData, HeatmapSettings, MetaData } from "../plotTypes"; import { D3CanvasHeatmap } from "./D3CanvasHeatmap"; import { D3Heatmap } from "./D3Heatmap"; @@ -17,7 +18,7 @@ import { HeatmapSidebar } from "./HeatmapSidebar"; export type HeatmapRenderProps = { // TODO: just use settings - data: { x: number; y: number; value: number }[]; + data: ReturnType; settings: HeatmapSettings; tickText: string[]; colorScale: ColorScaleArray; @@ -93,16 +94,7 @@ export const Heatmap = ({ }), [discreteColorScale], ); - - const d3HeatmapData = useHeatmapData(data); - - const { cbar_shrink, cbar_aspect, margin } = useMetrics(settings, tickText); - - const elementRef = React.useRef(null); - const size = useSize(elementRef, leftSidebarCollapsed); - let colorScale = colorScales[settings.colorScaleKey]; - if (settings.reverse) { colorScale = [...colorScale] .reverse() @@ -112,6 +104,16 @@ export const Heatmap = ({ ]) as ColorScaleArray; } + const heatmapData = React.useMemo( + () => formatHeatmapData(data, settings, colorScale), + [data, settings, colorScale], + ); + + const { cbar_shrink, cbar_aspect, margin } = useMetrics(settings, tickText); + + const elementRef = React.useRef(null); + const size = useSize(elementRef, leftSidebarCollapsed); + const titleFont = settings.titleFont === "Monospace" ? plotFontMonospace : plotFontSansSerif; @@ -144,7 +146,7 @@ export const Heatmap = ({ {forceSvgRender || (appState.showExportModal && appState.saveFormat === "svg") ? ( ) : ( { // WIP return { @@ -37,3 +42,73 @@ export const getCellMetrics = ( textOffset: spacedCellSize / 2, }; }; + +export const formatHeatmapData = ( + data: HeatmapData, + settings: HeatmapSettings, + colorScale: ColorScaleArray, +) => { + const colorFn = createD3ColorScale( + colorScale, + settings.colorScaleKey === "Discrete", + settings.vmax, + settings.vmin, + ); + + return data.flatMap((row, y) => + row.filter(Number).map((value, x) => { + const backgroundColor = colorFn(Number(value)); + const foregroundColor = tinycolor(backgroundColor).isLight() + ? "#000" + : "#fff"; + const roundedValue = Number( + Number(value).toFixed(settings.annotation_rounding), + ); + + return { + x, + y, + value: roundedValue, + displayValue: roundedValue === 100 ? "100" : roundedValue, + backgroundColor, + foregroundColor, + }; + }), + ); +}; + +export const formatClustermapData = ( + data: HeatmapData, + tickText: string[], + clusterData?: { id: string; group: number }[], +) => + data.flatMap((row, y) => + row.filter(Number).map((value, x) => { + const clusterX = clusterData?.find((i) => i.id === tickText[x])?.group; + const clusterY = clusterData?.find((i) => i.id === tickText[y])?.group; + + const clusterMatch = + clusterX !== undefined && + clusterY !== undefined && + clusterX === clusterY; + + const clusterGroup = clusterMatch ? clusterX : null; + + const backgroundColor = clusterGroup + ? distinctColor(clusterGroup) + : "rgb(245, 245, 245)"; + const foregroundColor = tinycolor(backgroundColor).isLight() + ? "#000" + : "#fff"; + const roundedValue = Number(Number(value).toFixed(2)); + + return { + x, + y, + value: roundedValue, + displayValue: roundedValue === 100 ? "100" : roundedValue, + backgroundColor, + foregroundColor, + }; + }), + ); diff --git a/frontend/src/hooks/map.ts b/frontend/src/hooks/heatmap.ts similarity index 88% rename from frontend/src/hooks/map.ts rename to frontend/src/hooks/heatmap.ts index 3f977c5..1619c9e 100644 --- a/frontend/src/hooks/map.ts +++ b/frontend/src/hooks/heatmap.ts @@ -67,16 +67,3 @@ export const useMetrics = ( margin, }; }; - -export const useHeatmapData = (data: string[][]) => - React.useMemo( - () => - data.flatMap((row, y) => - row.map((value, x) => ({ - x, - y, - value: Number(value), - })), - ), - [data], - ); diff --git a/frontend/src/hooks/useGetData.ts b/frontend/src/hooks/useGetData.ts index 57cd650..8afcf51 100644 --- a/frontend/src/hooks/useGetData.ts +++ b/frontend/src/hooks/useGetData.ts @@ -30,6 +30,7 @@ export const useGetData = (docState: DocState, setDocState: SetDocState) => { const parsedResponse: GetDataResponse = JSON.parse( rawData.replace(/\bNaN\b/g, "null"), ); + const { data, metadata, identity_scores, full_stats } = parsedResponse; const [tickText, ...parsedData] = data; @@ -41,6 +42,7 @@ export const useGetData = (docState: DocState, setDocState: SetDocState) => { gc_stats: full_stats.map((row) => row[1]), length_stats: full_stats.map((row) => row[2]), raw_mat: identity_scores.map((i) => i[2]), + // TODO: this could be an index that points to the strings, not the strings themselves to prevent large memory allocations identity_combos: identity_scores.map((i) => [i[0], i[1]]), }); diff --git a/frontend/src/plotTypes.ts b/frontend/src/plotTypes.ts index 811643f..2d27e13 100644 --- a/frontend/src/plotTypes.ts +++ b/frontend/src/plotTypes.ts @@ -73,11 +73,11 @@ export const HeatmapSettingsSchema = z.object({ cutoff_2: z.number(), }); -export type HeatmapData = GetDataResponse["data"]; +export type HeatmapData = Array>; export type MetaData = GetDataResponse["metadata"]; export type GetDataResponse = { - data: string[][]; + data: HeatmapData & string[][]; metadata: { minVal: number; maxVal: number; diff --git a/frontend/src/types/index.d.ts b/frontend/src/types/index.d.ts index 62a565e..d8941d2 100644 --- a/frontend/src/types/index.d.ts +++ b/frontend/src/types/index.d.ts @@ -6,7 +6,7 @@ import type { } from "../appState"; import type { RunProcessDataArgs } from "../components/Runner"; import { DistributionState } from "../distributionState"; -import { HeatmapSettings } from "../plotTypes"; +import { type GetDataResponse, HeatmapSettings } from "../plotTypes"; import type { AppState } from "../src/appState"; declare global { diff --git a/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap b/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap new file mode 100644 index 0000000..a8e54ff --- /dev/null +++ b/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap @@ -0,0 +1,171 @@ +// Bun Snapshot v1, https://goo.gl/fbAQLP + +exports[`formatHeatmapData should return formatted data 1`] = ` +[ + { + "backgroundColor": "rgb(255, 255, 255)", + "displayValue": "100", + "foregroundColor": "#000", + "value": 100, + "x": 0, + "y": 0, + }, + { + "backgroundColor": "rgb(179, 179, 179)", + "displayValue": 73, + "foregroundColor": "#000", + "value": 73, + "x": 0, + "y": 1, + }, + { + "backgroundColor": "rgb(255, 255, 255)", + "displayValue": "100", + "foregroundColor": "#000", + "value": 100, + "x": 1, + "y": 1, + }, + { + "backgroundColor": "rgb(179, 179, 179)", + "displayValue": 73, + "foregroundColor": "#000", + "value": 73, + "x": 0, + "y": 2, + }, + { + "backgroundColor": "rgb(248, 248, 248)", + "displayValue": 98, + "foregroundColor": "#000", + "value": 98, + "x": 1, + "y": 2, + }, + { + "backgroundColor": "rgb(255, 255, 255)", + "displayValue": "100", + "foregroundColor": "#000", + "value": 100, + "x": 2, + "y": 2, + }, + { + "backgroundColor": "rgb(0, 0, 0)", + "displayValue": 8, + "foregroundColor": "#fff", + "value": 8, + "x": 0, + "y": 3, + }, + { + "backgroundColor": "rgb(163, 163, 163)", + "displayValue": 67, + "foregroundColor": "#000", + "value": 67, + "x": 1, + "y": 3, + }, + { + "backgroundColor": "rgb(163, 163, 163)", + "displayValue": 67, + "foregroundColor": "#000", + "value": 67, + "x": 2, + "y": 3, + }, + { + "backgroundColor": "rgb(255, 255, 255)", + "displayValue": "100", + "foregroundColor": "#000", + "value": 100, + "x": 3, + "y": 3, + }, +] +`; + +exports[`formatClustermapData should return formatted data 1`] = ` +[ + { + "backgroundColor": "hsl(137.5, 85%, 50%)", + "displayValue": "100", + "foregroundColor": "#000", + "value": 100, + "x": 0, + "y": 0, + }, + { + "backgroundColor": "rgb(245, 245, 245)", + "displayValue": 72.6, + "foregroundColor": "#000", + "value": 72.6, + "x": 0, + "y": 1, + }, + { + "backgroundColor": "hsl(275, 85%, 50%)", + "displayValue": "100", + "foregroundColor": "#fff", + "value": 100, + "x": 1, + "y": 1, + }, + { + "backgroundColor": "rgb(245, 245, 245)", + "displayValue": 72.62, + "foregroundColor": "#000", + "value": 72.62, + "x": 0, + "y": 2, + }, + { + "backgroundColor": "hsl(275, 85%, 50%)", + "displayValue": 97.61, + "foregroundColor": "#fff", + "value": 97.61, + "x": 1, + "y": 2, + }, + { + "backgroundColor": "hsl(275, 85%, 50%)", + "displayValue": "100", + "foregroundColor": "#fff", + "value": 100, + "x": 2, + "y": 2, + }, + { + "backgroundColor": "rgb(245, 245, 245)", + "displayValue": 8.2, + "foregroundColor": "#000", + "value": 8.2, + "x": 0, + "y": 3, + }, + { + "backgroundColor": "rgb(245, 245, 245)", + "displayValue": 66.99, + "foregroundColor": "#000", + "value": 66.99, + "x": 1, + "y": 3, + }, + { + "backgroundColor": "rgb(245, 245, 245)", + "displayValue": 66.88, + "foregroundColor": "#000", + "value": 66.88, + "x": 2, + "y": 3, + }, + { + "backgroundColor": "hsl(52.5, 85%, 50%)", + "displayValue": "100", + "foregroundColor": "#000", + "value": 100, + "x": 3, + "y": 3, + }, +] +`; diff --git a/frontend/tests/heatmapUtils.test.ts b/frontend/tests/heatmapUtils.test.ts index f6c5d3e..2ee92f6 100644 --- a/frontend/tests/heatmapUtils.test.ts +++ b/frontend/tests/heatmapUtils.test.ts @@ -1,5 +1,11 @@ import { describe, expect, it } from "bun:test"; -import { getCellMetrics } from "../src/heatmapUtils"; +import type { ColorScaleArray } from "../src/colorScales"; +import { + formatClustermapData, + formatHeatmapData, + getCellMetrics, +} from "../src/heatmapUtils"; +import type { HeatmapSettings } from "../src/plotTypes"; describe("getCellMetrics", () => { it("should return the correct metrics", () => { @@ -20,3 +26,51 @@ describe("getCellMetrics", () => { ); }); }); + +describe("formatHeatmapData", () => { + it("should return formatted data", () => { + const data = [ + [100, null, null, null], + [72.6, 100, null, null], + [72.62, 97.61, 100, null], + [8.2, 66.99, 66.88, 100], + ]; + + const settings = { + colorScaleKey: "Test", + vmax: 100, + vmin: 8.2, + }; + + const colorScale: ColorScaleArray = [ + [0, "rgb(0, 0, 0)"], + [1, "rgb(255, 255, 255)"], + ]; + + expect( + formatHeatmapData(data, settings as HeatmapSettings, colorScale), + ).toMatchSnapshot(); + }); +}); + +describe("formatClustermapData", () => { + it("should return formatted data", () => { + const data = [ + [100, null, null, null], + [72.6, 100, null, null], + [72.62, 97.61, 100, null], + [8.2, 66.99, 66.88, 100], + ]; + + const tickText = ["A", "B", "C", "D"]; + + const clusterData = [ + { id: "A", group: 1 }, + { id: "B", group: 2 }, + { id: "C", group: 2 }, + { id: "D", group: 3 }, + ]; + + expect(formatClustermapData(data, tickText, clusterData)).toMatchSnapshot(); + }); +}); From 254c115b3e644d03b202d086e43a11a9947c79dd Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 13:26:06 -0800 Subject: [PATCH 42/57] d3heatmap -> d3svgheatmap to make it easier to tell which is which --- frontend/src/components/{D3Heatmap.tsx => D3SvgHeatmap.tsx} | 2 +- frontend/src/components/Heatmap.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename frontend/src/components/{D3Heatmap.tsx => D3SvgHeatmap.tsx} (99%) diff --git a/frontend/src/components/D3Heatmap.tsx b/frontend/src/components/D3SvgHeatmap.tsx similarity index 99% rename from frontend/src/components/D3Heatmap.tsx rename to frontend/src/components/D3SvgHeatmap.tsx index 4256a8c..789b098 100644 --- a/frontend/src/components/D3Heatmap.tsx +++ b/frontend/src/components/D3SvgHeatmap.tsx @@ -5,7 +5,7 @@ import { getCellMetrics } from "../heatmapUtils"; import { useHeatmapRef } from "../hooks/useHeatmapRef"; import type { HeatmapRenderProps } from "./Heatmap"; -export const D3Heatmap = ({ +export const D3SvgHeatmap = ({ data, tickText, colorScale, diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index d9c8893..7ce5f45 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -13,7 +13,7 @@ import { formatHeatmapData } from "../heatmapUtils"; import { useMetrics, useSize } from "../hooks/heatmap"; import type { HeatmapData, HeatmapSettings, MetaData } from "../plotTypes"; import { D3CanvasHeatmap } from "./D3CanvasHeatmap"; -import { D3Heatmap } from "./D3Heatmap"; +import { D3SvgHeatmap } from "./D3SvgHeatmap"; import { HeatmapSidebar } from "./HeatmapSidebar"; export type HeatmapRenderProps = { @@ -145,7 +145,7 @@ export const Heatmap = ({ > {forceSvgRender || (appState.showExportModal && appState.saveFormat === "svg") ? ( - Date: Sat, 8 Mar 2025 14:18:32 -0800 Subject: [PATCH 43/57] reduce memory use of large id sets by not sending duplicate ids --- backend/src/app.py | 22 ++++++++++++++++++---- frontend/src/components/Raincloud.tsx | 5 +++-- frontend/src/components/Violin.tsx | 4 ++-- frontend/src/hooks/useGetData.ts | 5 +++-- frontend/src/plotTypes.ts | 6 ++++-- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/backend/src/app.py b/backend/src/app.py index be8061f..7e9c077 100644 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -498,8 +498,22 @@ def load_data_and_stats(self, doc_id: str): cols_path = os.path.join(cols_dir, f"{cols_file_base}_cols.csv") if os.path.exists(cols_path): - identity_scores = read_csv(cols_path, skiprows=1).values.tolist() + cols_data = read_csv(cols_path, skiprows=1).values.tolist() + + id_map = {} + identity_scores = [] + + for row in cols_data: + a, b = row[:2] + if a not in id_map: + id_map[a] = len(id_map) + if b not in id_map: + id_map[b] = len(id_map) + identity_scores.append([id_map[a], id_map[b]] + list(row[2:])) + + ids = list(id_map.keys()) else: + ids = [] identity_scores = [] df = read_csv( @@ -515,10 +529,10 @@ def load_data_and_stats(self, doc_id: str): max_val = int(nanmax(data_no_diag)) # TODO might be able to make one tick text object for both to use? - return data, tick_text, min_val, max_val, identity_scores, stats_df + return data, tick_text, min_val, max_val, ids, identity_scores, stats_df def get_data(self, doc_id: str): - data, tick_text, min_val, max_val, identity_scores, stats_df = ( + data, tick_text, min_val, max_val, ids, identity_scores, stats_df = ( self.load_data_and_stats(doc_id) ) heat_data = DataFrame(data, index=tick_text) @@ -527,7 +541,7 @@ def get_data(self, doc_id: str): data_to_dump = dict( metadata=dict(minVal=min_val, maxVal=max_val), data=([tick_text] + parsedData), - # TODO: return indexes to strings not the strings themselves + ids=ids, identity_scores=identity_scores, full_stats=stats_df.values.tolist() ) diff --git a/frontend/src/components/Raincloud.tsx b/frontend/src/components/Raincloud.tsx index 0de0ee7..5b5bbcd 100644 --- a/frontend/src/components/Raincloud.tsx +++ b/frontend/src/components/Raincloud.tsx @@ -70,10 +70,11 @@ export const Raincloud = ({ hoveron: "points", hovertemplate: "%{text}

Percent Identity: %{x}", text: data.identity_combos.map( - (ids) => `Seq 1: ${ids[0]}
Seq 2: ${ids[1]}`, + (idIndexes) => + `Seq 1: ${data.ids[idIndexes[0]]}
Seq 2: ${data.ids[idIndexes[1]]}`, ), }) as Partial, - [data.identity_combos, dataSet, settings], + [data.identity_combos, data.ids, dataSet, settings], ); return ( <> diff --git a/frontend/src/components/Violin.tsx b/frontend/src/components/Violin.tsx index 5ca2903..48bc6e4 100644 --- a/frontend/src/components/Violin.tsx +++ b/frontend/src/components/Violin.tsx @@ -99,8 +99,8 @@ export const Violin = ({ }; const scoresText = data.identity_combos.map( - (ids) => - `Seq 1: ${ids[0]}
Seq 2: ${ids[1]}

${hoverData.scores.title}: `, + (idIndexes) => + `Seq 1: ${data.ids[idIndexes[0]]}
Seq 2: ${data.ids[idIndexes[1]]}

${hoverData.scores.title}: `, ); const { index, suffix, title } = hoverData[dataSetKey]; diff --git a/frontend/src/hooks/useGetData.ts b/frontend/src/hooks/useGetData.ts index 8afcf51..89add2c 100644 --- a/frontend/src/hooks/useGetData.ts +++ b/frontend/src/hooks/useGetData.ts @@ -31,7 +31,8 @@ export const useGetData = (docState: DocState, setDocState: SetDocState) => { rawData.replace(/\bNaN\b/g, "null"), ); - const { data, metadata, identity_scores, full_stats } = parsedResponse; + const { data, metadata, ids, identity_scores, full_stats } = + parsedResponse; const [tickText, ...parsedData] = data; setMetaData(metadata); @@ -42,7 +43,7 @@ export const useGetData = (docState: DocState, setDocState: SetDocState) => { gc_stats: full_stats.map((row) => row[1]), length_stats: full_stats.map((row) => row[2]), raw_mat: identity_scores.map((i) => i[2]), - // TODO: this could be an index that points to the strings, not the strings themselves to prevent large memory allocations + ids, identity_combos: identity_scores.map((i) => [i[0], i[1]]), }); diff --git a/frontend/src/plotTypes.ts b/frontend/src/plotTypes.ts index 2d27e13..3383612 100644 --- a/frontend/src/plotTypes.ts +++ b/frontend/src/plotTypes.ts @@ -82,7 +82,8 @@ export type GetDataResponse = { minVal: number; maxVal: number; }; - identity_scores: [string, string, number][]; + ids: string[]; + identity_scores: [number, number, number][]; stat_ids: string[]; full_stats: [string, number, number][]; }; @@ -93,7 +94,8 @@ export type DistributionData = Omit< "data" | "identity_scores" | "metadata" | "stat_ids" > & { raw_mat: number[]; - identity_combos: [string, string][]; + ids: string[]; + identity_combos: [number, number][]; gc_stats: number[]; length_stats: number[]; }; From 072403b107b69e2e1dc1d05172e7bee479a7ee2e Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 14:42:16 -0800 Subject: [PATCH 44/57] very unoptimized way of not showing group in tooltip unless matching --- frontend/src/components/D3CanvasHeatmap.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index e024a90..2fd7593 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -320,7 +320,10 @@ export const D3CanvasHeatmap = ({ const cell = data.find((d) => d.x === dataX && d.y === dataY); const clusterGroup = - clusterData && cell + clusterData && + cell && + clusterData.find((i) => i.id === tickText[cell.x])?.group === + clusterData.find((i) => i.id === tickText[cell.y])?.group ? clusterData.find((i) => i.id === tickText[cell.x])?.group : null; From 3dd682b819b266a4a25ef55651ba79078f8145c8 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 15:26:15 -0800 Subject: [PATCH 45/57] display value wasn't being used --- frontend/src/heatmapUtils.ts | 2 -- .../__snapshots__/heatmapUtils.test.ts.snap | 20 ------------------- 2 files changed, 22 deletions(-) diff --git a/frontend/src/heatmapUtils.ts b/frontend/src/heatmapUtils.ts index b8c3fe5..bfdee42 100644 --- a/frontend/src/heatmapUtils.ts +++ b/frontend/src/heatmapUtils.ts @@ -69,7 +69,6 @@ export const formatHeatmapData = ( x, y, value: roundedValue, - displayValue: roundedValue === 100 ? "100" : roundedValue, backgroundColor, foregroundColor, }; @@ -106,7 +105,6 @@ export const formatClustermapData = ( x, y, value: roundedValue, - displayValue: roundedValue === 100 ? "100" : roundedValue, backgroundColor, foregroundColor, }; diff --git a/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap b/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap index a8e54ff..971484b 100644 --- a/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap +++ b/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap @@ -4,7 +4,6 @@ exports[`formatHeatmapData should return formatted data 1`] = ` [ { "backgroundColor": "rgb(255, 255, 255)", - "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 0, @@ -12,7 +11,6 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(179, 179, 179)", - "displayValue": 73, "foregroundColor": "#000", "value": 73, "x": 0, @@ -20,7 +18,6 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(255, 255, 255)", - "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 1, @@ -28,7 +25,6 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(179, 179, 179)", - "displayValue": 73, "foregroundColor": "#000", "value": 73, "x": 0, @@ -36,7 +32,6 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(248, 248, 248)", - "displayValue": 98, "foregroundColor": "#000", "value": 98, "x": 1, @@ -44,7 +39,6 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(255, 255, 255)", - "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 2, @@ -52,7 +46,6 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(0, 0, 0)", - "displayValue": 8, "foregroundColor": "#fff", "value": 8, "x": 0, @@ -60,7 +53,6 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(163, 163, 163)", - "displayValue": 67, "foregroundColor": "#000", "value": 67, "x": 1, @@ -68,7 +60,6 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(163, 163, 163)", - "displayValue": 67, "foregroundColor": "#000", "value": 67, "x": 2, @@ -76,7 +67,6 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(255, 255, 255)", - "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 3, @@ -89,7 +79,6 @@ exports[`formatClustermapData should return formatted data 1`] = ` [ { "backgroundColor": "hsl(137.5, 85%, 50%)", - "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 0, @@ -97,7 +86,6 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(245, 245, 245)", - "displayValue": 72.6, "foregroundColor": "#000", "value": 72.6, "x": 0, @@ -105,7 +93,6 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "hsl(275, 85%, 50%)", - "displayValue": "100", "foregroundColor": "#fff", "value": 100, "x": 1, @@ -113,7 +100,6 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(245, 245, 245)", - "displayValue": 72.62, "foregroundColor": "#000", "value": 72.62, "x": 0, @@ -121,7 +107,6 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "hsl(275, 85%, 50%)", - "displayValue": 97.61, "foregroundColor": "#fff", "value": 97.61, "x": 1, @@ -129,7 +114,6 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "hsl(275, 85%, 50%)", - "displayValue": "100", "foregroundColor": "#fff", "value": 100, "x": 2, @@ -137,7 +121,6 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(245, 245, 245)", - "displayValue": 8.2, "foregroundColor": "#000", "value": 8.2, "x": 0, @@ -145,7 +128,6 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(245, 245, 245)", - "displayValue": 66.99, "foregroundColor": "#000", "value": 66.99, "x": 1, @@ -153,7 +135,6 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(245, 245, 245)", - "displayValue": 66.88, "foregroundColor": "#000", "value": 66.88, "x": 2, @@ -161,7 +142,6 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "hsl(52.5, 85%, 50%)", - "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 3, From 5595c1f1b34c18fc3e128d4af2356d9f04a3dbfe Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 8 Mar 2025 15:26:52 -0800 Subject: [PATCH 46/57] optimize row and column lookups - map lookup is O(1) --- frontend/src/components/D3CanvasHeatmap.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 2fd7593..14abead 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -82,15 +82,22 @@ export const D3CanvasHeatmap = ({ ctx.scale(transform.k, transform.k); //index data - const rows = [...new Set(data.map((d) => d.x))]; - const cols = [...new Set(data.map((d) => d.y))]; + const rows = new Map(); + const cols = new Map(); + let rowIndex = 0; + let colIndex = 0; + + for (const { x, y } of data) { + if (!rows.has(x)) rows.set(x, rowIndex++); + if (!cols.has(y)) cols.set(y, colIndex++); + } const cellMetrics = getCellMetrics(cellSize, cellSpace, roundTo + 3); // Draw cells for (const d of data) { - const x = cols.indexOf(d.x) * cellSize + cellMetrics.cellOffset; - const y = rows.indexOf(d.y) * cellSize + cellMetrics.cellOffset; + const x = rows.get(d.x) * cellSize + cellMetrics.cellOffset; + const y = cols.get(d.y) * cellSize + cellMetrics.cellOffset; ctx.fillStyle = d.backgroundColor; ctx.fillRect(x, y, cellMetrics.cellSize, cellMetrics.cellSize); From ca3517a85c83935666fc02c0bc40c4aa428d1a03 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sun, 9 Mar 2025 18:03:21 -0700 Subject: [PATCH 47/57] micro-optimization to precompute the display value --- frontend/src/components/D3CanvasHeatmap.tsx | 5 +---- frontend/src/heatmapUtils.ts | 2 ++ .../__snapshots__/heatmapUtils.test.ts.snap | 20 +++++++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index 14abead..c87727b 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -103,15 +103,12 @@ export const D3CanvasHeatmap = ({ ctx.fillRect(x, y, cellMetrics.cellSize, cellMetrics.cellSize); if (showPercentIdentities) { - const roundedValue = d.value.toFixed(roundTo); - const formattedText = d.value === 100 ? "100" : roundedValue; - ctx.fillStyle = d.foregroundColor; ctx.textAlign = "center"; ctx.textBaseline = "middle"; ctx.font = `${cellMetrics.fontSize}px ${plotFontMonospace.family}`; ctx.fillText( - formattedText, + d.displayValue, x + cellMetrics.textOffset, y + cellMetrics.textOffset, ); diff --git a/frontend/src/heatmapUtils.ts b/frontend/src/heatmapUtils.ts index bfdee42..d70a6ab 100644 --- a/frontend/src/heatmapUtils.ts +++ b/frontend/src/heatmapUtils.ts @@ -69,6 +69,7 @@ export const formatHeatmapData = ( x, y, value: roundedValue, + displayValue: roundedValue.toString(), backgroundColor, foregroundColor, }; @@ -105,6 +106,7 @@ export const formatClustermapData = ( x, y, value: roundedValue, + displayValue: roundedValue.toString(), backgroundColor, foregroundColor, }; diff --git a/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap b/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap index 971484b..ce35ae2 100644 --- a/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap +++ b/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap @@ -4,6 +4,7 @@ exports[`formatHeatmapData should return formatted data 1`] = ` [ { "backgroundColor": "rgb(255, 255, 255)", + "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 0, @@ -11,6 +12,7 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(179, 179, 179)", + "displayValue": "73", "foregroundColor": "#000", "value": 73, "x": 0, @@ -18,6 +20,7 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(255, 255, 255)", + "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 1, @@ -25,6 +28,7 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(179, 179, 179)", + "displayValue": "73", "foregroundColor": "#000", "value": 73, "x": 0, @@ -32,6 +36,7 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(248, 248, 248)", + "displayValue": "98", "foregroundColor": "#000", "value": 98, "x": 1, @@ -39,6 +44,7 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(255, 255, 255)", + "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 2, @@ -46,6 +52,7 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(0, 0, 0)", + "displayValue": "8", "foregroundColor": "#fff", "value": 8, "x": 0, @@ -53,6 +60,7 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(163, 163, 163)", + "displayValue": "67", "foregroundColor": "#000", "value": 67, "x": 1, @@ -60,6 +68,7 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(163, 163, 163)", + "displayValue": "67", "foregroundColor": "#000", "value": 67, "x": 2, @@ -67,6 +76,7 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(255, 255, 255)", + "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 3, @@ -79,6 +89,7 @@ exports[`formatClustermapData should return formatted data 1`] = ` [ { "backgroundColor": "hsl(137.5, 85%, 50%)", + "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 0, @@ -86,6 +97,7 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(245, 245, 245)", + "displayValue": "72.6", "foregroundColor": "#000", "value": 72.6, "x": 0, @@ -93,6 +105,7 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "hsl(275, 85%, 50%)", + "displayValue": "100", "foregroundColor": "#fff", "value": 100, "x": 1, @@ -100,6 +113,7 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(245, 245, 245)", + "displayValue": "72.62", "foregroundColor": "#000", "value": 72.62, "x": 0, @@ -107,6 +121,7 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "hsl(275, 85%, 50%)", + "displayValue": "97.61", "foregroundColor": "#fff", "value": 97.61, "x": 1, @@ -114,6 +129,7 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "hsl(275, 85%, 50%)", + "displayValue": "100", "foregroundColor": "#fff", "value": 100, "x": 2, @@ -121,6 +137,7 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(245, 245, 245)", + "displayValue": "8.2", "foregroundColor": "#000", "value": 8.2, "x": 0, @@ -128,6 +145,7 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(245, 245, 245)", + "displayValue": "66.99", "foregroundColor": "#000", "value": 66.99, "x": 1, @@ -135,6 +153,7 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(245, 245, 245)", + "displayValue": "66.88", "foregroundColor": "#000", "value": 66.88, "x": 2, @@ -142,6 +161,7 @@ exports[`formatClustermapData should return formatted data 1`] = ` }, { "backgroundColor": "hsl(52.5, 85%, 50%)", + "displayValue": "100", "foregroundColor": "#000", "value": 100, "x": 3, From c88065657597c970e8d7617c82e6d59385cefad5 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sun, 9 Mar 2025 19:37:31 -0700 Subject: [PATCH 48/57] restore precision handling, tiny optimization for setting context --- frontend/src/components/D3CanvasHeatmap.tsx | 10 +++++----- frontend/src/heatmapUtils.ts | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/frontend/src/components/D3CanvasHeatmap.tsx b/frontend/src/components/D3CanvasHeatmap.tsx index c87727b..d3550a1 100644 --- a/frontend/src/components/D3CanvasHeatmap.tsx +++ b/frontend/src/components/D3CanvasHeatmap.tsx @@ -81,6 +81,11 @@ export const D3CanvasHeatmap = ({ ctx.translate(transform.x + margin.left, transform.y + margin.top); ctx.scale(transform.k, transform.k); + const cellMetrics = getCellMetrics(cellSize, cellSpace, roundTo + 3); + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.font = `${cellMetrics.fontSize}px ${plotFontMonospace.family}`; + //index data const rows = new Map(); const cols = new Map(); @@ -92,8 +97,6 @@ export const D3CanvasHeatmap = ({ if (!cols.has(y)) cols.set(y, colIndex++); } - const cellMetrics = getCellMetrics(cellSize, cellSpace, roundTo + 3); - // Draw cells for (const d of data) { const x = rows.get(d.x) * cellSize + cellMetrics.cellOffset; @@ -104,9 +107,6 @@ export const D3CanvasHeatmap = ({ if (showPercentIdentities) { ctx.fillStyle = d.foregroundColor; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.font = `${cellMetrics.fontSize}px ${plotFontMonospace.family}`; ctx.fillText( d.displayValue, x + cellMetrics.textOffset, diff --git a/frontend/src/heatmapUtils.ts b/frontend/src/heatmapUtils.ts index d70a6ab..9c4ca1a 100644 --- a/frontend/src/heatmapUtils.ts +++ b/frontend/src/heatmapUtils.ts @@ -61,15 +61,15 @@ export const formatHeatmapData = ( const foregroundColor = tinycolor(backgroundColor).isLight() ? "#000" : "#fff"; - const roundedValue = Number( - Number(value).toFixed(settings.annotation_rounding), + const roundedValue = (value as number).toFixed( + settings.annotation_rounding, ); return { x, y, - value: roundedValue, - displayValue: roundedValue.toString(), + value: value as number, + displayValue: value === 100 ? "100" : roundedValue.toString(), backgroundColor, foregroundColor, }; From c2a1ac3dedcb01fd8c630ba2d36da5d5302c3004 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sun, 9 Mar 2025 19:41:27 -0700 Subject: [PATCH 49/57] fix tests --- .../__snapshots__/heatmapUtils.test.ts.snap | 24 +++++++++---------- frontend/tests/heatmapUtils.test.ts | 1 + 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap b/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap index ce35ae2..f116a79 100644 --- a/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap +++ b/frontend/tests/__snapshots__/heatmapUtils.test.ts.snap @@ -12,9 +12,9 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(179, 179, 179)", - "displayValue": "73", + "displayValue": "72.60", "foregroundColor": "#000", - "value": 73, + "value": 72.6, "x": 0, "y": 1, }, @@ -28,17 +28,17 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(179, 179, 179)", - "displayValue": "73", + "displayValue": "72.62", "foregroundColor": "#000", - "value": 73, + "value": 72.62, "x": 0, "y": 2, }, { "backgroundColor": "rgb(248, 248, 248)", - "displayValue": "98", + "displayValue": "97.61", "foregroundColor": "#000", - "value": 98, + "value": 97.61, "x": 1, "y": 2, }, @@ -52,25 +52,25 @@ exports[`formatHeatmapData should return formatted data 1`] = ` }, { "backgroundColor": "rgb(0, 0, 0)", - "displayValue": "8", + "displayValue": "8.20", "foregroundColor": "#fff", - "value": 8, + "value": 8.2, "x": 0, "y": 3, }, { "backgroundColor": "rgb(163, 163, 163)", - "displayValue": "67", + "displayValue": "66.99", "foregroundColor": "#000", - "value": 67, + "value": 66.99, "x": 1, "y": 3, }, { "backgroundColor": "rgb(163, 163, 163)", - "displayValue": "67", + "displayValue": "66.88", "foregroundColor": "#000", - "value": 67, + "value": 66.88, "x": 2, "y": 3, }, diff --git a/frontend/tests/heatmapUtils.test.ts b/frontend/tests/heatmapUtils.test.ts index 2ee92f6..46d578f 100644 --- a/frontend/tests/heatmapUtils.test.ts +++ b/frontend/tests/heatmapUtils.test.ts @@ -40,6 +40,7 @@ describe("formatHeatmapData", () => { colorScaleKey: "Test", vmax: 100, vmin: 8.2, + annotation_rounding: 2, }; const colorScale: ColorScaleArray = [ From cb92724207898a0099cba816c381c79b1df383ac Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sun, 9 Mar 2025 19:49:20 -0700 Subject: [PATCH 50/57] fix and expand format tests --- frontend/src/heatmapUtils.ts | 5 ++- frontend/tests/heatmapUtils.test.ts | 70 ++++++++++++++++++++--------- 2 files changed, 54 insertions(+), 21 deletions(-) diff --git a/frontend/src/heatmapUtils.ts b/frontend/src/heatmapUtils.ts index 9c4ca1a..bd8258f 100644 --- a/frontend/src/heatmapUtils.ts +++ b/frontend/src/heatmapUtils.ts @@ -45,7 +45,10 @@ export const getCellMetrics = ( export const formatHeatmapData = ( data: HeatmapData, - settings: HeatmapSettings, + settings: Pick< + HeatmapSettings, + "colorScaleKey" | "vmax" | "vmin" | "annotation_rounding" + >, colorScale: ColorScaleArray, ) => { const colorFn = createD3ColorScale( diff --git a/frontend/tests/heatmapUtils.test.ts b/frontend/tests/heatmapUtils.test.ts index 46d578f..4972554 100644 --- a/frontend/tests/heatmapUtils.test.ts +++ b/frontend/tests/heatmapUtils.test.ts @@ -5,7 +5,7 @@ import { formatHeatmapData, getCellMetrics, } from "../src/heatmapUtils"; -import type { HeatmapSettings } from "../src/plotTypes"; +import type { ColorScaleKey, HeatmapSettings } from "../src/plotTypes"; describe("getCellMetrics", () => { it("should return the correct metrics", () => { @@ -28,29 +28,59 @@ describe("getCellMetrics", () => { }); describe("formatHeatmapData", () => { - it("should return formatted data", () => { - const data = [ - [100, null, null, null], - [72.6, 100, null, null], - [72.62, 97.61, 100, null], - [8.2, 66.99, 66.88, 100], - ]; + const data = [ + [100, null, null, null], + [72.6, 100, null, null], + [72.62, 97.61, 100, null], + [8.2, 66.99, 66.88, 100], + ]; - const settings = { - colorScaleKey: "Test", - vmax: 100, - vmin: 8.2, - annotation_rounding: 2, - }; + const settings: Pick< + HeatmapSettings, + "colorScaleKey" | "vmax" | "vmin" | "annotation_rounding" + > = { + colorScaleKey: "Test" as ColorScaleKey, + vmax: 100, + vmin: 8.2, + annotation_rounding: 2, + }; - const colorScale: ColorScaleArray = [ - [0, "rgb(0, 0, 0)"], - [1, "rgb(255, 255, 255)"], - ]; + const colorScale: ColorScaleArray = [ + [0, "rgb(0, 0, 0)"], + [1, "rgb(255, 255, 255)"], + ]; + + it("should return formatted data", () => { + expect(formatHeatmapData(data, settings, colorScale)).toMatchSnapshot(); + }); + + it("should round values", () => { + expect( + formatHeatmapData( + data, + { ...settings, annotation_rounding: 1 }, + colorScale, + ).map((i) => i.displayValue), + ).toEqual([ + "100", + "72.6", + "100", + "72.6", + "97.6", + "100", + "8.2", + "67.0", + "66.9", + "100", + ]); expect( - formatHeatmapData(data, settings as HeatmapSettings, colorScale), - ).toMatchSnapshot(); + formatHeatmapData( + data, + { ...settings, annotation_rounding: 0 }, + colorScale, + ).map((i) => i.displayValue), + ).toEqual(["100", "73", "100", "73", "98", "100", "8", "67", "67", "100"]); }); }); From e51251d836e6a75132112e58417ba3b47347c8c9 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sun, 9 Mar 2025 20:05:21 -0700 Subject: [PATCH 51/57] fix keyboard event not bubbling --- frontend/src/components/Heatmap.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index 7ce5f45..6406f28 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -123,11 +123,11 @@ export const Heatmap = ({ const handleKeyDown = (event: KeyboardEvent) => { if ((event.metaKey || event.altKey) && event.key === "1") { setForceSvgRender(true); + event.preventDefault(); } else if ((event.metaKey || event.altKey) && event.key === "2") { setForceSvgRender(false); + event.preventDefault(); } - - event.preventDefault(); }; document.addEventListener("keydown", handleKeyDown); From e6571055ab85efbba2412cc27c2c1cdde2a8442d Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Wed, 12 Mar 2025 13:35:13 -0700 Subject: [PATCH 52/57] fixed hover displays for violin boxpoints --- frontend/src/components/Violin.tsx | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/Violin.tsx b/frontend/src/components/Violin.tsx index 48bc6e4..133f6a2 100644 --- a/frontend/src/components/Violin.tsx +++ b/frontend/src/components/Violin.tsx @@ -124,6 +124,8 @@ export const Violin = ({ fillcolor: settings.fillColor, meanline: { visible: settings.showMeanline, + width: settings.showBox ? settings.boxlineWidth : settings.lineWidth, + color: settings.lineColor, }, points: settings.showPoints && @@ -140,7 +142,10 @@ export const Violin = ({ hoveron: "points", scalemode: "width", // we are going to rip this nonsense out for D3 ASAP - hovertemplate: `%{text}${dataSetKey === "scores" && `%{${settings.plotOrientation === "vertical" ? "y" : "x"}}${hoverData.scores.suffix}`}`, + hovertemplate: + dataSetKey === "scores" + ? `%{text}%{${settings.plotOrientation === "vertical" ? "y" : "x"}}${hoverData.scores.suffix}` + : "%{text}", text: hoverText, }) as Partial, [dataSet, dataSetKey, settings, hoverText], @@ -165,16 +170,21 @@ export const Violin = ({ }, whiskerwidth: settings.whiskerWidth, marker: { - visible: settings.showBox, + visible: settings.showPoints, color: settings.markerColor, size: settings.markerSize, }, fillcolor: settings.boxfillColor, - hovermode: "closest", boxgap: 1 - settings.boxWidth, - hoverinfo: "skip", + hoverinfo: "text", + hovertemplate: + dataSetKey === "scores" + ? `%{text}%{${settings.plotOrientation === "vertical" ? "y" : "x"}}${hoverData.scores.suffix}` + : "%{text}", + text: hoverText, + hoveron: "points", }) as Partial, - [dataSet, settings], + [dataSet, dataSetKey, settings, hoverText], ); return ( @@ -309,4 +319,4 @@ export const Violin = ({ /> ); -}; +}; \ No newline at end of file From 81c6fdb8474779c0b0a40e3c9c4f75d910a09e09 Mon Sep 17 00:00:00 2001 From: "Michael Lund (Student)" Date: Wed, 12 Mar 2025 15:12:23 -0700 Subject: [PATCH 53/57] added field for Title entry on ViolinSidebar --- frontend/src/components/ViolinSidebar.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/frontend/src/components/ViolinSidebar.tsx b/frontend/src/components/ViolinSidebar.tsx index 0af7ff5..7bf4121 100644 --- a/frontend/src/components/ViolinSidebar.tsx +++ b/frontend/src/components/ViolinSidebar.tsx @@ -436,15 +436,15 @@ export const ViolinSidebar = ({ )}
- - updateSettings({ title: value })} - value={settings.title} - > - - - - +
+ updateSettings({ title: value })} + value={settings.title} + > + + + +
updateSettings({ xtitle: value })} From 503fc30af2f4f2e4926ee7c6665038b94be7a550 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 15 Mar 2025 10:34:02 -0700 Subject: [PATCH 54/57] only show the sidebar button when in the viewer view --- frontend/src/components/App.tsx | 36 +++++++++++++++++---------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/frontend/src/components/App.tsx b/frontend/src/components/App.tsx index 758ce20..6863a29 100644 --- a/frontend/src/components/App.tsx +++ b/frontend/src/components/App.tsx @@ -175,24 +175,26 @@ export const App = () => {
- + + {leftSidebarCollapsed + ? "Expand sidebar" + : "Collapse sidebar"} + + + + ) : null}
{tabView === "tabs" ? ( From fedd6d30fa68d1ff9237c689e6b953538474b36c Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 15 Mar 2025 14:01:58 -0700 Subject: [PATCH 55/57] support exporting the clustermap as svg and the normal formats --- backend/src/export_data.py | 14 +-- frontend/src/components/Clustermap.tsx | 130 +++++++++++--------- frontend/src/components/D3CanvasHeatmap.tsx | 4 +- frontend/src/components/D3SvgHeatmap.tsx | 54 +++++++- frontend/src/components/ExportModal.tsx | 37 +++--- frontend/src/components/Heatmap.tsx | 32 ++--- frontend/src/components/Violin.tsx | 2 +- frontend/src/heatmapUtils.ts | 6 +- frontend/src/styles/app.scss | 21 ++++ 9 files changed, 186 insertions(+), 114 deletions(-) diff --git a/backend/src/export_data.py b/backend/src/export_data.py index e749720..1029d43 100644 --- a/backend/src/export_data.py +++ b/backend/src/export_data.py @@ -61,9 +61,8 @@ def prepare_export_data(export_path: str, matrix_path: str, doc: DocState, args: ) image_filenames = { - img_type: f"{base_filename}_{img_type}." - + ("png" if img_type == "clustermap" else image_format) # TODO: remove when clustermap supports SVG - for img_type in image_types + image_type: f"{base_filename}_{image_type}.{image_format}" + for image_type in image_types } image_destinations = { @@ -86,10 +85,9 @@ def do_export_data(export_path, image_destinations, image_format, doc, prefix, s shutil.copy2(entry.path, temp_destination_path) os.replace(temp_destination_path, destination_path) - for img_type in image_types: - format = "png" if img_type == "clustermap" else image_format + for image_type in image_types: save_image_from_api( - data=args[f"{img_type}_image_data"], - format=format, - destination=image_destinations[img_type], + data=args[f"{image_type}_image_data"], + format=image_format, + destination=image_destinations[image_type], ) diff --git a/frontend/src/components/Clustermap.tsx b/frontend/src/components/Clustermap.tsx index b57358b..9a7c65d 100644 --- a/frontend/src/components/Clustermap.tsx +++ b/frontend/src/components/Clustermap.tsx @@ -1,36 +1,14 @@ import React from "react"; -import type { DocState, SetDocState } from "../appState"; +import { type DocState, type SetDocState, useAppState } from "../appState"; import type { ColorScaleArray } from "../colorScales"; import { plotFontMonospace, plotFontSansSerif } from "../constants"; import { formatClustermapData } from "../heatmapUtils"; import { useMetrics, useSize } from "../hooks/heatmap"; -import type { ClustermapSettings, HeatmapData } from "../plotTypes"; +import { useHeatmapRenderToggle } from "../hooks/useHeatmapRenderToggle"; +import type { HeatmapData } from "../plotTypes"; import { ClustermapSidebar } from "./ClustermapSidebar"; import { D3CanvasHeatmap } from "./D3CanvasHeatmap"; - -export type ClustermapRenderProps = { - data: { x: number; y: number; value: number }[]; - settings: ClustermapSettings; - tickText: string[]; - width: number; - height: number; - roundTo: number; - axlabel_fontsize: number; - axlabel_xrotation: number; - axlabel_yrotation: number; - showPercentIdentities: boolean; - showTitles: boolean; - title: string; - showscale: boolean; - axis_labels: boolean; - titleFont: typeof plotFontMonospace | typeof plotFontSansSerif; - margin: { top: number; bottom: number; left: number; right: number }; -} & Pick & { - clusterData?: { - id: string; - group: number; - }[]; - }; +import { D3SvgHeatmap } from "./D3SvgHeatmap"; export const Clustermap = ({ data, @@ -60,11 +38,10 @@ export const Clustermap = ({ docState.clustermap.threshold_one, docState.clustermap.threshold_two, ) - .then((clusterData) => { - setClusterData(clusterData); - }); + .then(setClusterData); }, [docState.id, docState.clustermap]); + const { appState } = useAppState(); const elementRef = React.useRef(null); const size = useSize(elementRef, leftSidebarCollapsed); const { clustermap: settings } = docState; @@ -91,39 +68,72 @@ export const Clustermap = ({ [data, clusterData, tickText], ); + const forceSvgRender = useHeatmapRenderToggle(); + + const titleFont = + settings.titleFont === "Monospace" ? plotFontMonospace : plotFontSansSerif; + return ( <> -
- {data && clusterData ? ( - +
+ {clusterData && forceSvgRender ? ( +
SVG
+ ) : null} + {clusterData ? ( + forceSvgRender || + (appState.showExportModal && appState.saveFormat === "svg") ? ( + + ) : ( + + ) ) : null}
{ +}: HeatmapRenderProps) => { const canvasRef = useHeatmapRef() as React.MutableRefObject; const [transform, setTransform] = React.useState(d3.zoomIdentity); @@ -240,7 +240,7 @@ export const D3CanvasHeatmap = ({ ctx.fillStyle = "black"; ctx.textAlign = "left"; ctx.textBaseline = "middle"; - ctx.font = `${10}px 'Roboto Mono'`; + ctx.font = `10px 'Roboto Mono'`; ctx.fillText( `Cluster ${cluster.toString()}`, itemX + cellSize + labelGap, diff --git a/frontend/src/components/D3SvgHeatmap.tsx b/frontend/src/components/D3SvgHeatmap.tsx index 789b098..88c1516 100644 --- a/frontend/src/components/D3SvgHeatmap.tsx +++ b/frontend/src/components/D3SvgHeatmap.tsx @@ -1,5 +1,6 @@ import * as d3 from "d3"; import React from "react"; +import { distinctColor } from "../colors"; import { plotFontMonospace } from "../constants"; import { getCellMetrics } from "../heatmapUtils"; import { useHeatmapRef } from "../hooks/useHeatmapRef"; @@ -27,6 +28,7 @@ export const D3SvgHeatmap = ({ showscale, axis_labels, margin, + clusterData, }: HeatmapRenderProps) => { const svgRef = useHeatmapRef() as React.MutableRefObject; const [_, setSvgTransform] = React.useState({}); @@ -64,7 +66,7 @@ export const D3SvgHeatmap = ({ const groups = g .selectAll("g") - .data(data.filter((d) => Number(d.value))) + .data(data) .join("g") .attr( "transform", @@ -88,7 +90,7 @@ export const D3SvgHeatmap = ({ .attr("text-anchor", "middle") .attr("font-family", "Roboto Mono") .attr("font-size", `${cellMetrics.fontSize}px`) - .text((d) => (d.value === 100 ? "100" : d.value.toFixed(roundTo))) + .text((d) => d.displayValue) .attr("fill", (d) => d.foregroundColor); } @@ -116,7 +118,6 @@ export const D3SvgHeatmap = ({ .attr("font-family", titleFont.family) .attr("font-size", "20px") .attr("font-weight", "bold") - // .attr("text-align", "center") .attr("x", (width - margin.left - margin.right) / 2) .attr("y", margin.top - margin.bottom - 2) .text(title); @@ -211,6 +212,52 @@ export const D3SvgHeatmap = ({ .attr("font-family", "Roboto Mono"), ); } + + if (clusterData) { + const legendWidth = 80; + const cellSize = 10; + const lineGap = 20; + const labelGap = 5; + const columnGap = 20; + const positionX = width - legendWidth * 2 - columnGap - margin.right; + + const uniqueClusters = [ + ...new Set(clusterData.map((i) => i.group)), + ].slice(0, 50); + + const legends = g + .append("g") + .attr("transform", () => `translate(-${margin.right}, 0)`) + .selectAll("g") + .data(uniqueClusters) + .join("g") + .attr("transform", (d) => { + const index = d - 1; // data from d3 is 1-indexed + const column = index % 2; + const row = Math.floor(index / 2); + const itemX = positionX + column * (legendWidth + columnGap); + const itemY = lineGap * row; + return `translate(${itemX}, ${itemY})`; + }); + + legends + .append("rect") + .attr("width", cellSize) + .attr("height", cellSize) + .attr("x", 0) + .attr("y", 0) + .attr("fill", (d) => distinctColor(d)); + + legends + .append("text") + .attr("x", cellSize + labelGap) + .attr("y", cellSize / 2) + .attr("dy", ".35em") + .attr("font-family", "Roboto Mono") + .attr("font-size", "10px") + .text((d) => `Cluster ${d}`) + .attr("fill", "black"); + } }, [ tickValues, scale, @@ -234,6 +281,7 @@ export const D3SvgHeatmap = ({ showscale, axis_labels, margin, + clusterData, ]); return ( diff --git a/frontend/src/components/ExportModal.tsx b/frontend/src/components/ExportModal.tsx index 0b81adc..dfd17f5 100644 --- a/frontend/src/components/ExportModal.tsx +++ b/frontend/src/components/ExportModal.tsx @@ -125,25 +125,34 @@ export const ExportModal = () => { swapDataView("clustermap"); await new Promise((r) => setTimeout(r, renderTimeout)); + let clustermapImage = ""; - const clustermapImage: string = await new Promise((resolve) => { - // clustermap uses the heatmap component + ref + // Clustermap reuses the heatmap component + if (config.format === "svg") { if (!heatmapRef.current) { throw new Error("Expected heatmapRef to have a current value"); } - - (heatmapRef.current as HTMLCanvasElement).toBlob(async (blob) => { - if (blob) { - const arrayBuffer = await blob.arrayBuffer(); - const binary = Array.from(new Uint8Array(arrayBuffer)) - .map((byte) => String.fromCharCode(byte)) - .join(""); - resolve(`data:image/png;base64,${btoa(binary)}`); - } else { - resolve(""); + const encoded64Svg = encodeURIComponent(heatmapRef.current.outerHTML); + clustermapImage = `data:image/svg+xml;base64,${encoded64Svg}`; + } else { + clustermapImage = await new Promise((resolve) => { + if (!heatmapRef.current) { + throw new Error("Expected heatmapRef to have a current value"); } - }, "image/png"); - }); + + (heatmapRef.current as HTMLCanvasElement).toBlob(async (blob) => { + if (blob) { + const arrayBuffer = await blob.arrayBuffer(); + const binary = Array.from(new Uint8Array(arrayBuffer)) + .map((byte) => String.fromCharCode(byte)) + .join(""); + resolve(`data:image/${config.format};base64,${btoa(binary)}`); + } else { + resolve(""); + } + }, `image/${config.format}`); + }); + } // Plotly exports diff --git a/frontend/src/components/Heatmap.tsx b/frontend/src/components/Heatmap.tsx index 6406f28..4ba157c 100644 --- a/frontend/src/components/Heatmap.tsx +++ b/frontend/src/components/Heatmap.tsx @@ -9,8 +9,9 @@ import { colorScales as defaultColorScales, } from "../colorScales"; import { plotFontMonospace, plotFontSansSerif } from "../constants"; -import { formatHeatmapData } from "../heatmapUtils"; +import { type formatClustermapData, formatHeatmapData } from "../heatmapUtils"; import { useMetrics, useSize } from "../hooks/heatmap"; +import { useHeatmapRenderToggle } from "../hooks/useHeatmapRenderToggle"; import type { HeatmapData, HeatmapSettings, MetaData } from "../plotTypes"; import { D3CanvasHeatmap } from "./D3CanvasHeatmap"; import { D3SvgHeatmap } from "./D3SvgHeatmap"; @@ -18,7 +19,9 @@ import { HeatmapSidebar } from "./HeatmapSidebar"; export type HeatmapRenderProps = { // TODO: just use settings - data: ReturnType; + data: + | ReturnType + | ReturnType; settings: HeatmapSettings; tickText: string[]; colorScale: ColorScaleArray; @@ -40,6 +43,7 @@ export type HeatmapRenderProps = { axis_labels: boolean; titleFont: typeof plotFontMonospace | typeof plotFontSansSerif; margin: { top: number; bottom: number; left: number; right: number }; + clusterData?: { id: string; group: number }[]; } & Pick; export const Heatmap = ({ @@ -117,32 +121,14 @@ export const Heatmap = ({ const titleFont = settings.titleFont === "Monospace" ? plotFontMonospace : plotFontSansSerif; - const [forceSvgRender, setForceSvgRender] = React.useState(false); - - React.useEffect(() => { - const handleKeyDown = (event: KeyboardEvent) => { - if ((event.metaKey || event.altKey) && event.key === "1") { - setForceSvgRender(true); - event.preventDefault(); - } else if ((event.metaKey || event.altKey) && event.key === "2") { - setForceSvgRender(false); - event.preventDefault(); - } - }; - - document.addEventListener("keydown", handleKeyDown); - return () => document.removeEventListener("keydown", handleKeyDown); - }, []); + const forceSvgRender = useHeatmapRenderToggle(); return ( <> {data ? ( <> -
+
+ {forceSvgRender ?
SVG
: null} {forceSvgRender || (appState.showExportModal && appState.saveFormat === "svg") ? ( ); -}; \ No newline at end of file +}; diff --git a/frontend/src/heatmapUtils.ts b/frontend/src/heatmapUtils.ts index bd8258f..8e615cf 100644 --- a/frontend/src/heatmapUtils.ts +++ b/frontend/src/heatmapUtils.ts @@ -103,13 +103,13 @@ export const formatClustermapData = ( const foregroundColor = tinycolor(backgroundColor).isLight() ? "#000" : "#fff"; - const roundedValue = Number(Number(value).toFixed(2)); + const roundedValue = (value as number).toFixed(2); return { x, y, - value: roundedValue, - displayValue: roundedValue.toString(), + value: value as number, + displayValue: value === 100 ? "100" : roundedValue.toString(), backgroundColor, foregroundColor, }; diff --git a/frontend/src/styles/app.scss b/frontend/src/styles/app.scss index 337ab5f..fee445f 100644 --- a/frontend/src/styles/app.scss +++ b/frontend/src/styles/app.scss @@ -233,6 +233,15 @@ body { margin: 0.2rem 0 0; border-radius: 0; } + + &.loader { + clip-path: inset(-1rem 0 0 0); + } + + &.viewer { + background: #fff; + position: relative; + } } .app-footer { @@ -1445,3 +1454,15 @@ body.blur { // --button-shadow-bottom-color: transparent; // } } + +.debug-toast { + background: #000; + color: #fff; + padding: 0.6rem 0.8rem; + font-size: 1rem; + font-weight: 700; + position: absolute; + top: 0.8rem; + left: 0.8rem; + border-radius: 0.4rem; +} From aecd1260fb1c6c07dcf01e25cfbff04959dc7851 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Sat, 15 Mar 2025 17:10:42 -0700 Subject: [PATCH 56/57] forgot to add this --- frontend/src/hooks/useHeatmapRenderToggle.ts | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 frontend/src/hooks/useHeatmapRenderToggle.ts diff --git a/frontend/src/hooks/useHeatmapRenderToggle.ts b/frontend/src/hooks/useHeatmapRenderToggle.ts new file mode 100644 index 0000000..97d12cc --- /dev/null +++ b/frontend/src/hooks/useHeatmapRenderToggle.ts @@ -0,0 +1,22 @@ +import React from "react"; + +export const useHeatmapRenderToggle = () => { + const [forceSvgRender, setForceSvgRender] = React.useState(false); + + React.useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + if ((event.metaKey || event.altKey) && event.key === "1") { + setForceSvgRender(true); + event.preventDefault(); + } else if ((event.metaKey || event.altKey) && event.key === "2") { + setForceSvgRender(false); + event.preventDefault(); + } + }; + + document.addEventListener("keydown", handleKeyDown); + return () => document.removeEventListener("keydown", handleKeyDown); + }, []); + + return forceSvgRender; +}; From 096b7936bc682fc8ff87d81b02aebbc4b351b0e7 Mon Sep 17 00:00:00 2001 From: Josiah Ivey Date: Mon, 17 Mar 2025 17:10:14 -0700 Subject: [PATCH 57/57] switch to tabler icons via react-icons --- bun.lock | 3 + frontend/src/components/App.tsx | 57 ++++--------- frontend/src/components/HeatmapSidebar.tsx | 21 +---- frontend/src/components/HistogramSidebar.tsx | 86 +++---------------- frontend/src/components/Icons.tsx | 18 ---- frontend/src/components/Menu.tsx | 32 +------ frontend/src/components/Runner.tsx | 22 +---- frontend/src/components/Viewer.tsx | 5 +- frontend/src/components/ViolinSidebar.tsx | 87 +++----------------- frontend/src/styles/app.scss | 2 +- frontend/src/styles/runner.scss | 2 +- package.json | 1 + 12 files changed, 51 insertions(+), 285 deletions(-) delete mode 100644 frontend/src/components/Icons.tsx diff --git a/bun.lock b/bun.lock index b58ff1e..46c42c6 100644 --- a/bun.lock +++ b/bun.lock @@ -11,6 +11,7 @@ "react": "^18.2.0", "react-aria-components": "^1.5.0", "react-dom": "^18.2.0", + "react-icons": "^5.5.0", "react-plotly.js": "^2.6.0", "tinycolor2": "^1.6.0", "zod": "^3.23.8", @@ -1020,6 +1021,8 @@ "react-dom": ["react-dom@18.2.0", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" }, "peerDependencies": { "react": "^18.2.0" } }, "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g=="], + "react-icons": ["react-icons@5.5.0", "", { "peerDependencies": { "react": "*" } }, "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw=="], + "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], "react-plotly.js": ["react-plotly.js@2.6.0", "", { "dependencies": { "prop-types": "^15.8.1" }, "peerDependencies": { "plotly.js": ">1.34.0", "react": ">0.13.0" } }, "sha512-g93xcyhAVCSt9kV1svqG1clAEdL6k3U+jjuSzfTV7owaSU9Go6Ph8bl25J+jKfKvIGAEYpe4qj++WHJuc9IaeA=="], diff --git a/frontend/src/components/App.tsx b/frontend/src/components/App.tsx index 6863a29..89c5c84 100644 --- a/frontend/src/components/App.tsx +++ b/frontend/src/components/App.tsx @@ -1,5 +1,12 @@ import React from "react"; import { Button, type Key, Tab, TabList, Tabs } from "react-aria-components"; +import { + TbFile, + TbFolderShare, + TbLayoutSidebarLeftCollapse, + TbLayoutSidebarLeftExpand, + TbPlus, +} from "react-icons/tb"; import { type AppState, AppStateContext, @@ -16,7 +23,6 @@ import { Document } from "./Document"; import { ErrorBoundary } from "./ErrorBoundary"; import { ExportModal } from "./ExportModal"; import { HeatmapRefProvider } from "./HeatmapRefProvider"; -import Icons from "./Icons"; import { MainMenu } from "./Menu"; import { Select, SelectItem } from "./Select"; @@ -184,15 +190,11 @@ export const App = () => { ? "Expand sidebar" : "Collapse sidebar"} - + {leftSidebarCollapsed ? ( + + ) : ( + + )} ) : null}
@@ -254,11 +256,12 @@ export const App = () => { )} - + ))} ) : ( @@ -309,25 +302,7 @@ export const App = () => { })) } > - + Export
diff --git a/frontend/src/components/HeatmapSidebar.tsx b/frontend/src/components/HeatmapSidebar.tsx index 33a1e58..47ab736 100644 --- a/frontend/src/components/HeatmapSidebar.tsx +++ b/frontend/src/components/HeatmapSidebar.tsx @@ -6,6 +6,7 @@ import { ToggleButton, ToggleButtonGroup, } from "react-aria-components"; +import { TbRepeat } from "react-icons/tb"; import type { DocState } from "../appState"; import type { ColorScaleArray } from "../colorScales"; import { formatTitle } from "../helpers"; @@ -96,25 +97,7 @@ export const HeatmapSidebar = ({ }); }} > - +
diff --git a/frontend/src/components/HistogramSidebar.tsx b/frontend/src/components/HistogramSidebar.tsx index a20d18f..c8b0c2c 100644 --- a/frontend/src/components/HistogramSidebar.tsx +++ b/frontend/src/components/HistogramSidebar.tsx @@ -5,6 +5,12 @@ import { ToggleButton, ToggleButtonGroup, } from "react-aria-components"; +import { + TbGrid4X4, + TbLetterA, + TbNumber10, + TbTableDashed, +} from "react-icons/tb"; import type { ColorString } from "../colors"; import type { DistributionState } from "../distributionState"; import { ColorPicker } from "./ColorPicker"; @@ -54,24 +60,7 @@ export const HistogramSidebar = ({ > - + @@ -79,26 +68,7 @@ export const HistogramSidebar = ({ id="showAxisLines" aria-label="Toggle axis lines" > - + @@ -106,25 +76,7 @@ export const HistogramSidebar = ({ id="showAxisLabels" aria-label="Toggle axis labels" > - + @@ -132,25 +84,7 @@ export const HistogramSidebar = ({ id="showTickLabels" aria-label="Toggle axis tick values" > - + diff --git a/frontend/src/components/Icons.tsx b/frontend/src/components/Icons.tsx deleted file mode 100644 index 26a5f05..0000000 --- a/frontend/src/components/Icons.tsx +++ /dev/null @@ -1,18 +0,0 @@ -const DocumentIcon = () => ( - -); - -const Icons = { - Document: DocumentIcon, -}; - -export default Icons; diff --git a/frontend/src/components/Menu.tsx b/frontend/src/components/Menu.tsx index 1164d4c..1e14612 100644 --- a/frontend/src/components/Menu.tsx +++ b/frontend/src/components/Menu.tsx @@ -12,6 +12,7 @@ import { Separator, SubmenuTrigger, } from "react-aria-components"; +import { TbMenu2 } from "react-icons/tb"; import { type AppState, findDoc, useAppState } from "../appState"; import { isSDTFile } from "../helpers"; import { useCloseDocument } from "../hooks/useCloseDocument"; @@ -27,7 +28,6 @@ interface MyMenuButtonProps } const AppMenuButton = ({ - label, children, ...props }: MyMenuButtonProps) => { @@ -37,33 +37,7 @@ const AppMenuButton = ({ className="react-aria-Button main-menu-button" aria-label="Application Menu" > - + {children} @@ -153,7 +127,7 @@ export const MainMenu = createHideableComponent(() => { }, []); return ( - + New Open... diff --git a/frontend/src/components/Runner.tsx b/frontend/src/components/Runner.tsx index 4b3226f..d230282 100644 --- a/frontend/src/components/Runner.tsx +++ b/frontend/src/components/Runner.tsx @@ -10,6 +10,7 @@ import { SliderTrack, TabPanel, } from "react-aria-components"; +import { TbAlertTriangleFilled, TbFile } from "react-icons/tb"; import useAppState, { type AppState, type DocState, @@ -22,7 +23,6 @@ import useOpenFileDialog from "../hooks/useOpenFileDialog"; import { useStartRun } from "../hooks/useStartRun"; import messages from "../messages"; import { openFile } from "../services/files"; -import Icons from "./Icons"; import { Select, SelectItem } from "./Select"; import { Switch } from "./Switch"; @@ -32,22 +32,6 @@ export type RunProcessDataArgs = Pick & { export_alignments: "True" | "False"; }; -const WarningIcon = () => ( - -); - const RunnerSettings = ({ docState, setDocState, @@ -295,7 +279,7 @@ const RunnerSettings = ({ (docState.compute_stats.recommended_cores === 0 || appState.compute_cores > docState.compute_stats.recommended_cores) ? ( - + ) : null} {state.getThumbValueLabel(0)} /{" "} {appState.platform.cores} @@ -433,7 +417,7 @@ const RunnerSettings = ({ key={file} onPress={() => openFile(file, docState.id)} > - +

{splitFilePath(file).name}

diff --git a/frontend/src/components/Viewer.tsx b/frontend/src/components/Viewer.tsx index 8b2c36f..28ca5f7 100644 --- a/frontend/src/components/Viewer.tsx +++ b/frontend/src/components/Viewer.tsx @@ -137,10 +137,7 @@ export const Viewer = ({ aria-hidden={true} color="currentcolor" > - + diff --git a/frontend/src/components/ViolinSidebar.tsx b/frontend/src/components/ViolinSidebar.tsx index 7bf4121..b62dd3a 100644 --- a/frontend/src/components/ViolinSidebar.tsx +++ b/frontend/src/components/ViolinSidebar.tsx @@ -5,6 +5,12 @@ import { ToggleButton, ToggleButtonGroup, } from "react-aria-components"; +import { + TbGrid4X4, + TbLineDashed, + TbNumber10, + TbTableDashed, +} from "react-icons/tb"; import type { ColorString } from "../colors"; import type { DistributionState } from "../distributionState"; import { ColorPicker } from "./ColorPicker"; @@ -52,95 +58,22 @@ export const ViolinSidebar = ({ > - + - + - + - + diff --git a/frontend/src/styles/app.scss b/frontend/src/styles/app.scss index fee445f..73dd417 100644 --- a/frontend/src/styles/app.scss +++ b/frontend/src/styles/app.scss @@ -274,6 +274,7 @@ body { .react-aria-Button.new-document { width: 3rem; + padding: 0; position: fixed; top: .8rem; left: 0; @@ -351,7 +352,6 @@ body { } > svg { - width: 1rem; position: absolute; left: 0.8rem; color: #777; diff --git a/frontend/src/styles/runner.scss b/frontend/src/styles/runner.scss index 25c36af..99a05db 100644 --- a/frontend/src/styles/runner.scss +++ b/frontend/src/styles/runner.scss @@ -215,7 +215,7 @@ border: 0.1rem solid #e5e5e5; font-size: 1.2rem; display: grid; - grid-template-columns: 1.4rem 1fr; + grid-template-columns: 1.6rem 1fr; gap: 0.8rem; * { diff --git a/package.json b/package.json index 3e3f9f5..58bc4f0 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "react": "^18.2.0", "react-aria-components": "^1.5.0", "react-dom": "^18.2.0", + "react-icons": "^5.5.0", "react-plotly.js": "^2.6.0", "tinycolor2": "^1.6.0", "zod": "^3.23.8"

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 NQtyLXPDkJ1ufJPl7X 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%0Drr`*%fVkG7?z2JuLd9wm5kMVME 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 Pv_QI=h8o3c_F?}986dnM literal 0 HcmV?d00001 diff --git a/docs/images/LoadMain.png b/docs/images/LoadMain.png new file mode 100644 index 0000000000000000000000000000000000000000..53ab5aa0e097c083549fd1aea96d32d7b60c6eaf GIT binary patch literal 52139 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 r);%^9>HAi_S?zY8^^hy zm43)l+XOk>M2$XIFyZA;YM|Xck>F$okJ3uPFI~whv#lXd>Y9{Yy;>nIGgBNzpL(n^ z;Y)LC4wWC(x*$!l(`RF1mid^VY9z273vs|aP~j#bVmK&a8vGcAN&6=<4G=%y-@fU> zzz%rDk3k1j=v-igbT(^|DBp~dT8kCT7b<z1o&LuJ8uj+}=0SM+!gB;KiKp-sGg;6a!NALfP&)k6r_Q}S zqXMlTxGJ^4N9Ytl+$M)yjFi6)95*2$0TmThJ!YXQFaQ1RY?+~$p3C*dTmvIuP89+Y zuRiF;gojW0G}uy!y3t|xlqLI#E%K6IpnGFt)H(GIUui9|d(EF(c13SvYS*qrC0uj< z!0zO{K*mT&I=i{~X?n}ZPcDoA3whHb>Uv`&Dtb>yEJ%aZ`J=hRleGKs5)I3km|=k* z(F9u%bXQaCgJfH(9}-0-CjCIv%`bGsjDc-m@axp&N4HB*h{`hj1I7VdJx0XpXrhR! zed`YblfnH9?xn@AgUgpP9XvN1kU!q_y?VzCQ!S4)yuN8M9M~D{UsY&lF7cIW9IS_; z;SVSm>hUpx?pLHcW_EeJO$VRukEnR>gW4|c5#ERFoqD##3-hMmYjSsXHH3L`E~`~{2QvmYEb=$bozE{Awp@m>kElrf z#G|m&dfPSCkm3ufSE&{LBb9pVh#t9ix-Xt_G+PFnI7-^iEwZs?5gkOvb#g<7^D{hk zn<(a5?$JN*i>5fW6K(D?aae5pr^F!Dw@!c+AYB(EK?VB6J;Oj%n>R9E=_|FslM>~ZW zUT5R~ME(%O#0!4>;8~b!_uN3c1ugNb6{m!2WF$0u-Z*7x6P?$)e0#`IZn%Cf{BoF0Qr|XV>jGI%_2bv#-!B!LgC$#yo?;(sB}vGygDpL#Y#6C-kMRv z^AE$mCpxTCX^nL2$$phg>HQoLNFd6##BZu5y_NdebQ$)Xw(iftT5R2l1- z%<{G>_+_C4ysau`xRW9tW-pT_I#%)79AtT;(9tAw*!9f4?*u9od(w*$iG?jWs5Hkw zA;jA+XzHaNUfvgDnbfi&%CL|YnMau(h-1Y*#s5W7Fg)EbF}%)~F(VbP%uqD_?jOol zTU==@&Y$nz?4uIr=-=3Qk<_i8lx>}3^!)7aih;>Y5(8pIb(EjWc0eFC-4aqyeKQqT zuI2uX9y}9+nE2O0Ym7F$pd{iTc-~4aOl>>FZ?x*zX%{J(dAWxy&-l<^2xPz!UHujI zH;|g|-vO(|r$Fj*&gSX$ry|TgQU?3QNAz_J)B_EdtkV|DAJWn9dQ*^Q_7>1#uYBFz zj~KsGR`6k|5;F{e{1{dBD+^|W7E!)}_=cf8QHKrK_