From 73e5845182c8490e3008641e52ade343d48ae0a6 Mon Sep 17 00:00:00 2001 From: Jeff Muizelaar Date: Wed, 21 Oct 2026 20:07:57 -0400 Subject: [PATCH 1/9] Add a Stormbox-React experimental workload A React clone of the Stormbox webmail front end with a generated mailbox; nine steps cover folders, scrolling, reading, tagging, bulk actions, filtering, deleting, composing and theme switching. --- suites-experimental/stormbox-react/README.md | 28 +++ .../dist/assets/Inter-Bold-CuhepTt8.woff2 | Bin 0 -> 106140 bytes .../dist/assets/Inter-Medium-P1cOs5ep.woff2 | Bin 0 -> 105924 bytes .../dist/assets/Inter-Regular-CKDp9E3C.woff2 | Bin 0 -> 98868 bytes .../dist/assets/Inter-SemiBold-Ctx7G98q.woff2 | Bin 0 -> 105804 bytes .../assets/Metropolis-Bold-BZLKi5Gb.woff2 | Bin 0 -> 26428 bytes .../assets/Metropolis-Light-zcEanPsD.woff2 | Bin 0 -> 25912 bytes .../assets/Metropolis-Regular-DKepXnDq.woff2 | Bin 0 -> 24152 bytes .../assets/Metropolis-SemiBold-D_dLm6Ff.woff2 | Bin 0 -> 26564 bytes .../dist/assets/index-AWVjlOug.css | 1 + .../dist/assets/index-DIr-gxPn.js | 234 ++++++++++++++++++ .../dist/assets/index-DIr-gxPn.js.map | 1 + .../stormbox-react/dist/favicon-32.png | Bin 0 -> 2671 bytes .../stormbox-react/dist/index.html | 14 ++ .../stormbox-react/dist/resources.txt | 13 + suites-experimental/suites.mjs | 208 ++++++++++++++++ 16 files changed, 499 insertions(+) create mode 100644 suites-experimental/stormbox-react/README.md create mode 100644 suites-experimental/stormbox-react/dist/assets/Inter-Bold-CuhepTt8.woff2 create mode 100644 suites-experimental/stormbox-react/dist/assets/Inter-Medium-P1cOs5ep.woff2 create mode 100644 suites-experimental/stormbox-react/dist/assets/Inter-Regular-CKDp9E3C.woff2 create mode 100644 suites-experimental/stormbox-react/dist/assets/Inter-SemiBold-Ctx7G98q.woff2 create mode 100644 suites-experimental/stormbox-react/dist/assets/Metropolis-Bold-BZLKi5Gb.woff2 create mode 100644 suites-experimental/stormbox-react/dist/assets/Metropolis-Light-zcEanPsD.woff2 create mode 100644 suites-experimental/stormbox-react/dist/assets/Metropolis-Regular-DKepXnDq.woff2 create mode 100644 suites-experimental/stormbox-react/dist/assets/Metropolis-SemiBold-D_dLm6Ff.woff2 create mode 100644 suites-experimental/stormbox-react/dist/assets/index-AWVjlOug.css create mode 100644 suites-experimental/stormbox-react/dist/assets/index-DIr-gxPn.js create mode 100644 suites-experimental/stormbox-react/dist/assets/index-DIr-gxPn.js.map create mode 100644 suites-experimental/stormbox-react/dist/favicon-32.png create mode 100644 suites-experimental/stormbox-react/dist/index.html create mode 100644 suites-experimental/stormbox-react/dist/resources.txt diff --git a/suites-experimental/stormbox-react/README.md b/suites-experimental/stormbox-react/README.md new file mode 100644 index 000000000..88dae5701 --- /dev/null +++ b/suites-experimental/stormbox-react/README.md @@ -0,0 +1,28 @@ +# Stormbox-React + +A React clone of the Stormbox webmail front end (Vue 3, Thunderbird) with a +generated, deterministic mailbox and no server. `dist/` is built from the +`stormbox-react` project, whose README lists what matches Stormbox and what +does not; `npm run speedometer` there rebuilds and copies it here, including +`resources.txt`. + +The suite loads `dist/index.html?animations=off`, which removes CSS +transitions and the reading pane's 310ms wait for the folder list, so the +800px viewport's responsive layout (opening a message hides the folder list) +happens within the interaction that triggers it. + +Steps, each interaction followed by a task yield and a forced layout: + +- `SwitchFolders`: large folders, nested subfolders and the Starred tag view. +- `ScrollMessageList`: the virtualized Inbox, a viewport at a time, then in + strides. +- `ReadMessages`: opens a message, then the next 15 with J. HTML bodies go + through DOMPurify, dark-mode adaptation and a sandboxed srcdoc iframe. +- `StarAndTagMessages`: the row overlay's star, and its tag popover. +- `BulkActions`: select all 1,200 Inbox messages, mark read, star, tag. +- `QuickFilter`: types and erases a filter over the Inbox. +- `ArchiveAndDelete`: checkbox selections archived and deleted, then Trash + emptied. +- `ComposeAndSend`: replies (Squire with the quoted message) and new + messages with a recipient pill, all sent. +- `ToggleTheme`: light and dark with an HTML newsletter open. diff --git a/suites-experimental/stormbox-react/dist/assets/Inter-Bold-CuhepTt8.woff2 b/suites-experimental/stormbox-react/dist/assets/Inter-Bold-CuhepTt8.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2846f29cc8af8cef50f51381940bac8845c38f59 GIT binary patch literal 106140 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
)V`qXZDL!rw2D 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

B1ttL7O_Gw{HhNLeIl%?EWPJgN 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 literal 0 HcmV?d00001 diff --git a/suites-experimental/stormbox-react/dist/assets/Inter-Medium-P1cOs5ep.woff2 b/suites-experimental/stormbox-react/dist/assets/Inter-Medium-P1cOs5ep.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f92498a2ecf4d95ddd85c8b18f7b9ebc15e11658 GIT binary patch literal 105924 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 RS-;sm8d61l{^uOb{{jFVK@0!@ literal 0 HcmV?d00001 diff --git a/suites-experimental/stormbox-react/dist/assets/Inter-Regular-CKDp9E3C.woff2 b/suites-experimental/stormbox-react/dist/assets/Inter-Regular-CKDp9E3C.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6c2b6893d593201d7c94e52687f78b2ef28b357e GIT binary patch literal 98868 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%0D(-D;tD2U3Vy$! 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 literal 0 HcmV?d00001 diff --git a/suites-experimental/stormbox-react/dist/assets/Inter-SemiBold-Ctx7G98q.woff2 b/suites-experimental/stormbox-react/dist/assets/Inter-SemiBold-Ctx7G98q.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..611e90c958f1b784ada6be1c603b923d57ca88b9 GIT binary patch literal 105804 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 `>0IwGJyHK~ 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 z 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ⅇ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 bZx%ZKeHzj!)S;q23_(pFU+pZ9FUss98zZ?I literal 0 HcmV?d00001 diff --git a/suites-experimental/stormbox-react/dist/assets/Metropolis-Light-zcEanPsD.woff2 b/suites-experimental/stormbox-react/dist/assets/Metropolis-Light-zcEanPsD.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f0ff6f346097bcbc3e091b1ae873042655cfcac8 GIT binary patch literal 25912 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 fQv7Ym`!MwuQ)}v1VB`bBCctxordwW!`c3 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 literal 0 HcmV?d00001 diff --git a/suites-experimental/stormbox-react/dist/assets/Metropolis-SemiBold-D_dLm6Ff.woff2 b/suites-experimental/stormbox-react/dist/assets/Metropolis-SemiBold-D_dLm6Ff.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..fad6dfdece70a4c62d0b8c54037dcbbddc46d9aa GIT binary patch literal 26564 zcmV({K+?Z=Pew9NR8&s@0B6Ji3;+NC0Ognf0B3Rl3jhEB00000000000000000000 z0000Dfs!g3fiN3_oFE(u24Db(QUNvsBm;?f1O^3$5eFa}zT_7~H%#pu`0LFoGP>RW zqbeFvyB$ds{9JGr0viVi0{P9!{{KHCsf)!b@E(7U7VmXE2b_G}Z+*SmQb!5d%ZC)Q)*&4$7Y+p$Bel~nLf>KK*f z#zq}WbLWyV*S$pljvf@ zM)+ckP(c<(E|Gt8F!<@+4NYcJ2=g2$k+^ZLysxtAFh`>pXk-Kx8?Q1_dg>*{t_LAy z_S8#7p0}A;LA=HRwC8#L_xs<^waLkmn`$yNyIlwz9|vNJy4r}bgTc@>+Jibl$lp* z*;2~1t-79BrpZ`G*D}i3Kt(K|h=PSusz4G#2@pa^ASRlhxcBkr`A__Q`pbT&VnKqH@~~r-XJnUOvES`4G+}X?_oRpZ}tnm zu!zbf@acp?$%GnA7w4RC1x!jXGJeL-{Tzv7|5Ke+y~MiLuS}k{cY+dO5RKFjmH>

wE*il~-hF7MRDVNJVoedHi8Dk@5&hPdt7T0Vn z@VF&-HyA?qc)zy?>6hRYAG8ZY5FmJb>oXbS_VC6zJ|l%HMauqtCgZaZCyP577b-{; zrJ7VVSAa_4e`l(-*_(fp_l?)Uy|=z9N>H_V2phCJjr z8_KVcNKh1RQviig+2|0Zq)>~7s2ZmDtCi>~VgaOjz!U%zqA`u4jn1LC%P>Tg0$@fa z+$aa+GBPxSM$m+dBYhwYw3`frptPnt2J&`~PAS9KtYgE=(1pd6D5Ei#|7x@eO!O(H zFU*p*H^P>oH`<~)MA*WZV9b*`{$~0AISOVo16M>O1PLMd%CD=sD%EGh`pnZkt`Ev! zB^^X;ut9=I5D8*kDsC^=`+MBu2qGeb3_*hQB(w(Nw~D_4g`yQTlhy$m))#e- znsFz~Z!Ocwdncdw$48=UJ>Mt)pZz@d?Rfd|{_?W*`j@xo{p;f#_k@FHM*r`j!U@P| zm^g&-OOR%g9K~wP(W%E$EA@HT7P}mD)+N`yZ^&1E@Vn8TH4(3Doh{K)Ec0@%h!wL^ zWt*W$xmpccbz7`gpLcDw+aV_my5g3P4ExHD?tAp^@rK}osW1);k)y?eml%>rXEKGn z!c5wj&msnRn<Q*_Rcq2|xG5HTHh=UU2yf_#LU5>h4WTIb zfKaVqK*^qlf942WE()SFXWpovj_~w1YcOG7kFoDk9%FQI*)akRP07+S@&HxuJT5wKQP;t` zu{_JSl8pghtzM^PRvH1d&5k;!+!5Xfb7`Q31*~VfRWDsdiyjAoe-9W=d_jo{bsBZ) z(Pxa=PPM>NE3LQPNPtG`wz;WWSW_0U(C{$yTX;NYF%5gk;x{XYHQPNXQug=SZ>wT*V@Up zW30k_;yLlW_+Jqw>WZeKt>`8Oh#_Kxm>?3wbTLP~FXoBQ#h2n+@tasCR*Cgui^vc= z#Sw8zToyOP9q~Yvhzcx-J)>Io|JeVwU$P_YI(8Ggh27EaX%Dc6+9U08_AB-z`)zxQ zJ=0FM=hbsL3^=2(BxB?bSyxhZ*U_+p01itGU;=EmvxB+JW{ai(F5_?n%8`~m>h8Y2 zcJtZOtJ9k_={ccU>VDIU6f;P)I{*VT-VGQf6U`*2V*m5tAtlmzYr0OOJZ*3g%8{=Q zbWDw4bv>qV7<(Qw1?uy8j&>iR?X9gPnbikt;r+FX!T1QKH}2V;28>9Zy)d)(8paJ~ z@OL&dF17<&kYlZ}U~29TNBT2~`DXE+ExTa)j}^rQh2`0Kc{}zOlG*c_chejdPMDKr zZD8xWTc(^564LyUUDqY#a3s8(-&B&W?P^5czd<>BWT3qqEv+8sOC(@KIJ(8a`;R|# zUU~7Pb58wwgQkrMIOfOdcWNDm*IX_S82w-*CaVL67@|r$o21F{F?osbbBySs9SJjb z%NiM28)-X59j!~E)?8Uj5HL@URQO032ZMex{cT**>bEFYB_yJE)L1rfKfxG4;%$MQ zCczpkvCCWD(VgVML&pLEe!?p!?Tz)Mqhu4v0vc=$I9=@QH~QMALzdKyVtxE5p45Tl zY`(SGNBU|y^y6e++E z1Jw6dkT7iU{dgD*XkN-k`i8LMd+pJ;8Ip_*~~OXIfSB879tAf^i)m55TxUI+OYw0>nd}yZ{v)p2uhm;=rI(RK|ZGP zZEs2-!)osmQoscdsf2t)A_6(&InPR#C))2RLWiVEOG6Hp<>vjKl811RaC5ZBltXAk z|5ql0+CZ=RlT<}tAeGe}IMZgIbP#L;y>y&TvULV)V|odLoWwnliJ| zUACI_&1oo8-Sh=e1=C%p-DxX+N>+Xrr0Yk7J!eM?M+fMwH^o^F1q-qNv9ajaff8J% z(}vA)Z4s1c`je8KVmbw0KJT>Na(jT_mt&n4a|L;(Sd^LhW%l|v{dmFT0`}w#iH~eb z`&8b&<9bW^blk3s1&k1k0n%pZ3NkIgY{yjCyxC*wc0;aSB@_%KvA&;OKLstHOF|1q z^pk>HpWe^A5LLIgbG-&9I+p~<450~_cbhTHq4losPjk*ssjhFc^wVb7)PkgJ7tewO zt^5rUSojz$dTWMJ$*$-g3KGi0Hmp#C>8q8!UCMuZM@p8;00^E`M6yoP@KN5C=jN)C z?lviBrY!)QW_!C_?V<-vl|^s5OC%kUwlg*^QacY)=w?Zw%RwiQz3-7}3I?n?!c+5B zJ;Be{N~jg5Jv1Xp#F43$!E2RFo{{nvPad2Cv~z zClDWJ$<<)o)lkY=@2#$Kh@&xa!UggIoKiOSTN0g0rD($(ic;`~#UkOrtK$C7%xn+^ zVE2&<0kp@MeZ<_V0GZvIz)>N;OlndDg{~3vzn`PvP)-eV4(@fxVMq4wbJQ`tbo2)f zI?iCjn}-<<9CE_Rlizmg$XiF5n2#N2VRhOWXHPg+_BI>)DUR}UR&jEjK6BQf5a(TR z(WUbhR(sDHZkvS)yKwOmPo>LM!Y^Opb%l$Y=jyc^)gnaJT)$Pz$M42XH*brobE{sW z+y-}qgzwz-p{Nl7JsR)%*pIEe-y+4yCZ9?+x4GNe-r=YEbawfz6%# zHSE`Y{l-i(cwle{_ac3RCx#1PhnH!x}0jYyVOmcdAg4wA*DBKS{xa(w}AXQno!#p0k?!yA#D^1I z-HY#~_NMh}d)s?Oy(hh@KEmKIH2vs)T7O2ruD`#3t6$b1qhVU~|I~~+QxbhhpVJcB zOZiklm#Nf+3=x)3L^w1LGluQMg~K(&hEdokWAy#_#j$K`97m5^$8S&m%_*47e?n=K zj7k3F>V&7^#AYIz$fCV;5B-_GU>fc`w#F{9YwTn8Gkeadyt%v#{sx!wK7Nc};a>|T zxrJOWHi%u~s`y_T`3`<0KUcmgFUy;9ld=k?s-$KKkLnwGwSHHh(m&}3deqQG2hEZh zw2*j{*e_19&sd4=vjg@+`x4BOO!xyl4&AUB_QNmm7X*(S_P_gtAsPmTv0=J_Zx9)z zhMxI(~HBK!~7Kf(MfPPDOB9|8!N)2azI<6Vc)|}2gl^4P?3>mq3x#!gk zckNrBOsre77^qo|%IJ0Rw1#yn?YhoI>YoN}oWY}-hn_9Kkm&rkPsh8+FUGTfovlJ* zzd7z&U<-S~0^Re@+rAV_$awp5Oob3JFQRSX3-P{T%D1VfEv#e^(dRllT=|xSM6WyU znr{nJ|LLmXAFPXJ|9VJ{+v^zDjItl-x(+2f!<7i>2jr?+gsSWFm2d)@x77&n22K*qRp&{-9d+bR30iWT1h}W}&r4^l-h?hS5WK z=fP^^!@&bX{L+$3$AOU&jn8Zk^n9ig8Q$&;q#od_;0dkD5_b25CQ?1Zk*X85r7@m# ze=WN`%MCTF!BttS|AAg8^EreT-V`c}g>79U2j<WEZvq4#)-;7O?7U1x za!QtBG2slpq>+yj`=IMA*^V|RW8IW8O0HOpr@7tQH160hUXl2tk!4RB}(?Mh{JPms8q?9BfYVHbP#y1C=^RL|;+}vJ| z+Cr32W)o?5)?qnLz&gA_`uhYn_QGLpY#l1T4&|TCP%DSun26NS2c`j5j}c_SDWE&< zo;Zlc7Ql}M?)>ckzz>OQAC198G}VLp9ZZM3qXN0{k;V^9=gTTtkRHK-4Pdvg(ub z-W$DN2c6}0Y0+Dr*$RWb_wJz17HH$eu_R#1Q&@RiVk}`?{lF!9USKW0Ae>o=nLm}Z1h_37$B-OKl92w& z26KG5%O2vtaEQ4|RG!0Md=7*q(D5TYc1XgJ{4)c&yiE`WJDR678d+%N((KD%j!~{nrkCDLRt9|3peru4JxKWIHeRo-yCs zSQaUa7^Uh{+`8n2qjuFHutT&@B46Aqp`Coef>ZE$!^d7+v)Cc{3jb>1SLWKzsvQXE zT34C4N;viG75z4WKAp10_SU$cm z!+I$msoypk7*dkII1e0HtYAw zRWZdb*~9RLMObbmE(WF`TkeylOrXPyK&OeYys~2BnXtLji{Op`&s^a+*|kGJFB!jZ z)?qX3hv1h!sBqc@>*3h~G`HO4u==+I+}6eh+bBU|Rj_f0?{1z(PBmwU#aqI81_v5n< zk#@Ko1$C@%6Li0fmNfYpb01&%De&xPYTQ_D-9e;9)ujkUS%0Vjkmo@6Ut^KLIQo@W zOnkWpq!K!2EiUnoo0+VX(m3vW- z9haiWQd`$P_q-)AgYp_L)2FtScmlUe`f(#&m4@Bzk@c>YvD#rq;uzW;; zW;HX{yH>VOl)nQO`m?LDf@|?mH*zl*o~i1@D*55S<3$S&St={D{q&8y96!&Fg01EF z4>EJ*q`}p`o$q$AX1yUS&4A9IGDtUN4dsS2D-#iR@qmkbu{hu8F!YL7hLcL3Vw?d*dy+tdSa(cL}^{e2v00*Y-Dhe*yq z-jB!_d8CrJw7oO7yEVjR&*UFaq{~4V4eHB$xb4-n_QU!Pk+W9-dq%E(ub&gEqxP*+ zG4c>FTf9~I&wMM4xJOWpK$_M*f^EI9bx5m4tek<{503p~@iljuJZA531eKu`nlM)t z`{_p}Z_ZR{UqhNmw$XNn8^U~lJPu~#1gHWPIDpNkuo{oY0F!WhG~s#e7qmluYshGfl|1{xdqT&?SQ3*s3CbI29thST4|ML=Y7nRjZfNE( zaeai?_;q1HvoQ3gY6yy~B^#EYAS*S_&oCYGvhlvvzF!TPcu=ePR|>8J(R!y^ZG0Pn z=Pf0Ed4!z`Z}c{Eli6%>r5Y!y0v4$p5X`Cl0cdU5GB^VA>OQDY+XT90U`TO1_s_ek zRaW#Il=o&M4#QJB)9_6*&GhuHCOUH69N-k|M6xOZb1g=@V4Ap5jB3u{6`YP07PqMJ z20!E~_?HEf8W~uDbY5YRSsfsS$mkHf9-1nNf0PWh6b_Vz+f z2nWgO^mJlVHsI@N)DL3AMgbi#yBj&<$ZaEW&eDD`0;(Htpqvwwk3}BGnUiqt1g((k z?K)64_ULR-t7By@aARp#WQmEu%DUrcUnOofCdH#OFx^Z7wj67r5Bz%l5^B@~(?!~DOrV_IeS+mWFZX!khY!G(P2LhrI zFS+6Z2M}11HA(I$9AZ2*tinb%c}9UY{{l_*^+%P(%f?G^P!us)Hx3Y z;f}6eXKOrmqVRG{sSp^zVw2`HUXK+O+P1sC{J>{s=n9+CKtZ0GpYvAZ=t^qmrzX zVT(;o`ADHXo78wB3g&Q5qL5KqwYM*=K+QQtfi7O}Z1ZyaNL5Lx!ygY3_svr-|o1bHj4 zr5Z381ACO-8aRR%fm?=Gs%3MXFicskeZ%J>i_VAS14TNDjjN}nA(O03jycLtI5#9_@6T{S;x-zP#g-^S+k^_DLe;WE~1Iv_I&@KIp}!eH8~aLJRP1 zAHjuyVRm?U6{mRyED9279pg=Na`cg%Ut@Z3t7tZGRM4j4CsNs$T?a7Ifwg)n_h;ZS ztaS*4kv#DPF15~{fjj#Tc`f0r)khxgi|ehGLHv&3Tnyo{UdkYZex&jvX}mrLh-b}- zf%t0}AzlfK^HivM#bv#Ayg{Kg; z2dOj{1pdjWjk=9;f07s2%hu)~Q)atV{;Yml5C3#|iD@yG$uZwF*WoT~1)t=C<@FZ8 z(l(7Q)Z|y@9`4j_6+cF4D6q%vxRm>xmjC2JeyTMbH%yftw?;*K z80Wv*9aqn8%!`-Yb%l~~;i5{5hV_tzGz*NM-DWbAMc0DP9{%2b;^lzZhG~wj^8*)# zi>&EEIM9%-OgBr5?_4cdJYC>-5Wx5QujP-+r0;CdN4Ibg`HAI7_s#A&JdbkANIbA~ z1s0gy+65yO6Fr=YpO+p3*0dX$X)fF7PGJ-2Wui7Gbwt7?|?bRninfSXp_Y> zdLV1|;nZu!TEe~buwZZvvnA?mZGM5x_g&~MGDw8U?At&$Q@Wrn*f0nt zSvzZD3Yecn3bK!6m4`0`8%^M&UukWMz@~`LB-W;Q+(;}8udEqP7@NvN26S^GXjYZ) z5ozozwAr=x^SbgAXUbS z`6+W9x&4-iU7C{VTC!Mlo1prvR)({gs)zzpQk5gwiAy+HM3#Cl{N{?%SrmaP9lB;h z+Y5ch#{ZoWcqK2j;xi>fUPp5CC|!8OfuqqPmE$!lCHzoOK*yUZ*r9^FkF?=h8aD@<{r0XHye{BmG zqxNmW>HL5zf?IIBhyScqB5inq`6voi|S8A?uM3 zq!og>%JZzAHc!Pg9>S)+o38pW)bhZBEPfM1bC9*tc{)~)2CXl%*9N7zs>Ao-HJgXD zHf1o_7ZeQwS8Hc;IA@C5ljH$l#yF%1YZC&GWK8!|%~S8$ml68oo*J6crRSO(nAR7Ua79Z`5Y9TQeAkl>e}e6)H}Y zlpn$RQs`@cJA4j`?l!ywT6Q43o5lDbpg7`BzsH*7{LvKgy)=!|e$4N@QKPJBgc4NN zoGa?`vcmG#2t30Z)y0Efv+5Y^KAjG=F>*BPEmYmL!GaVjtYl5A&be3LVXBR z0rTT=#fzYjlA0kaNuRQooS`q`k-Qe#2tSouzVsqKFOsB`#@+0X}tN@yOanj>S5%Uf5t%-d<4a;JIaNgHiepnZ|QbQjkd9Z4>?jo1;#;2wQ52@L-!9*Gf zU^dUORh3@@wXJJ(b#_Pl-jTx5C(T^`()$tF*xi*4!%CEISLHy;sPyUnX*T=K@i5NC zW@KZX#S*~`4rd0!EtU#ob06pOCJPb)5((gOg5~_^B7xJC5)BS{Q>j?-GgVJm4;P=5 z{2wEN=tHc?3RQU;Wf0u@%~RlP}YHSZ+CwKjTB*nqYh<#d0ZgD37N)$<}36Nv+O znOXhlsvd{atd+33f`#n6F~HlrA6JbGG=;cZ*m65eM|s6aWQKRMMxifOH=YKTF3+5X z?KQ@j={?Ml#Fx|i!<#t!G)_MxqYpt2Lv=%SECmAw8Y#Hfnad{jR%r;~?1V%$F~Cyh zpj@_On4)8;5+)6hEc>wi;SZ#z0n(e4WOdcnWkOEiBu6Nh+ZH3s4V0d5agE6C*qjI}i}ERHJVZ1Dr_m!eN~4T6Q?pWVJNy+rO;d>grX>|` z^XCX>CykHxo~*k6r2T^cn>T@Ee1Q%@oM`9-4eW!HNX>ZPO4fsqGCSq+Ro5YU5WfpKU1jaMAVS~pnEl(u7s_Y*G1SUGzdT-RaV0ZG3&ZPKWoBKL8r zqQ zX;s4;Ou^ zh(P+?ska|s&h~71faE@4c8-{D9uvW-Ot6dVxbQj~kq z4IKWn(R~q~&&`ZklpHlK;50whILS=2#1Cp1Gy=!WZ`OTp31b+gI+Id<1ku#mo(duV3J#@o7R_Lt0q63Noc3!1>QTX&ruzFFXv`>J2@9CjhZ&vr#$KBe zsVbtTdPR*3SAUJ;V042eQav&u)rNgJ*WSrx@AqB5(Ig%jHCGwE79Uo(34LkW7rsmbalWtYyLFPobT6&b1>7vuS2fkL9eWhyw5QaZ|0IuyjGs z!Sy2suRQ4zl0i<^_yfmv#Susa0T=2}*a}9@4=m>Y1YHId-#S;{@#t|NZrCq@p|Odw z`OxuPXJyt;Ak+^@itZI~{_A>zzTL$|=lTiLwHYr!zE7j2s<`!!m1w(-%}aGs$*-RksmSy$TCj;jr$k zJdXtAG^v?D6x=KUdKf(Q2-DH5f!-CBJB#kW7EIet}(4MR*3B0R+;7^C|9=0p4bWvI6LWasAj~utOD+L8bRP zcWXwQ2nMs9J2VSt=vG^ZO3qiEZ^7N3Sg*dBu8o1cRs?Drulc|9rKvI+WzhTfLzlrt znclM2>h)@@Qiu3YKQ?CJ2pj##f?t2x4+>xU;CH^j4?wW|-;{J`B{Y-& zlWHYZ5OX3euFuTBzZgcvz8Bo7w{mY~LA&V*^Tb3m13;V=$}w%sO7+iP+1_^cs!x<>^NZ`;Yy+F z>j~8sXBaIis70DYB75d3-kuIQa7cHD)%SclZfXNFv}UT{zm0?(JvzyDyBVbfF_WOv zZ!@*Tc0^l^#YCPalde)DX>Bp5nN^0p!U25d>Q}?E3*# z1VQA0I~J>IbYMFthjY>;cHlW0=@2m}1jk=yr9$=e8#s^@j^qxivyGx0;KDo|2m2Xf zdpO%haj1r-5$T+kkUjF_>9}7nE@Bw^b>`ul+#-mr+?gAa58*w(opN??pF?7uNk2j< zzediF@qvBs&rS|e!kK3em|>iaJKF^-mMkJn+6*5Y4gdQbK^i##X9WIV4mMCY9HgDU z;?xyfWcQqL`Wykz24&dZknfks`JF9L-b*i-$$iceYw&VKT``W0&sIiqi&$)Romm)y z-g{JcFF)>&cU1A^kVLBjymK{76?1qnPPj_p^c{h*!7jX8_lXK2i+4Tv?*@Ofn(wv+ zjjA{R!e#sknk%6!Z1-n1!%?G4AUY_MW4Gbka~vI#X)aE_DL8rNOhXfAcqX6_2^|VQont3&iUrY{Qq;3ju%AS0`HD%qCBTaRf^n)?;OWMSUh*Vwc@< ztZJ0GTt;<(q~c%8t%6&0B8lUBkSZ%!9}MWhfcZROjca2lt5+yXsN{{%R#`Pc+A8^H zF#Bn(FqB<@J)`Svr!|h0Ls$aHZ}u6X=1fdth^sQQ7BV>-5J+a@!Wg8eWeSUML}$7V zJHR)S0btHCwJ6stLI6Rz+Y=U~i6QFT8DbW(Q1o0^WF8?zEV7(dSD`ytehoSwT823O zyqUBd@M88btYhofz68#6#FYo}a_G7wyNCvO{CzcXsco*AjlR>S(trAzU}C7X9@(D7 z*0J$o+|55vTG8;JZTvOCUsQe(bYn%WvUq?usc$=6iVK+_|0r!ZIxtS@DlX`}^})xx zNdH63Yaf*r=Ry_dCv6!PG0;DA+`PcidCazN_Z>VA)z=%{ajg*!$D2oAx8Nw-s8n3q zHR{_!rBw#=D#!DzJA$3qW3?0xCVvUkulsi)HM*)JkLWUNo$EEOlc6`Se+aDB?%xF# zEd`Ew|4Wc{okm>0gw!}23o$+QQpnRD3fccsh?!QJ*AQWkPu>3XZr;V{=-%V%*E`we zNx?jg3k5&)k3*j zW4BjZn$4XN*}*`@Ic@`_n`B+8j-4~diySoVvkGRiA3G2Ic{n6 zh;Swzc7^cLaZ`OOzR=!MMcim!2)3_LWu|I#rzVJ#FP56^+^!9lDjch9)au@Vk={$S zCReM4Y?)A#aJk2GswjSvxF8EUKbVKtc{p>IvhMnEW{lu&PzhF*a(B0lhXjk7v}YF6 z@3x0N;9wEcwp>31u5aNT+47jOP2biorkH6OjsLiW{%8X`bKJ;H=!-Tm3I)z>3T&yy zh3tWa1;~eE6xNwmJ{K^!%YiSi3$7H{8|%n?w{`cYcV1q<{Uk8^zq7^|f~?Kdd};69 zHa9PK^V54Tp5AeH!R=s#o{z3E%(9CGg(;9@jR24#4?@WUUO_dcHo6BYu={@%)O(E? zV`}4cY5*ei>AZ2<=VHEY!{v*wY+*;6TGvF65^L+PCmod>2bK%6McU8HN=nO?<&%+W z=MfI#a>t9IP#1$pCaPE^le*Y5iqU-eVyL&{C4p*gcBi|=RaRev+EQ8U*3K`tw%f4M zQpqEsv|0;?-!!gsP@nVVU!d{}epKsr=;GXt$B!d(TDKnLHMULe;Nrl!YLlj#yIA$W|uo%_06NuLO4}ka~~=n$3p3k{zJZ8Up|gbCP0L8*jiVm zG2qQw#rY#O!~;2e*!&2tZ|!k#znSZJ^Y1~n86!8)U3AmX!EPL zYrg=N>dzr+Q+hMgM@;Tg-wmh&!(xaXF9L~en&?}1u?uvZpf{}EbNCn`RVKVf20E{> z65h>MOSs;}q6?8u%8$SMf25&5KHL+=4L^oQrnUK}D?RmjDrJD#x%$5C`aGClFY5Yl zbNa=gSMO5S;))G`#Yi*c(tt#<1$s|4Kt8tadl??uakF?4OSarA(-ir(Hi{f^(q(^o zRvw;%HKdZwH0r2lE{li#JLl3>72Ym*d16BHo1`z=hV2;!n7m-z>I?9b&&Y+7X`<#p0o;#Hy&(?B~31WvKoC zc9h-JZfUo*W9;7cAbYqy#-3nLwBNAf?P>OG`@@>@PnYxrY~%)jRckF-T%BR&1suJ8 zr5a3It?KO(RHA|8<7G)w*OGFSL}a{@Utb1$Eva{|Xi;aS`y-uWF22k>!8%XKHY2oH zAkgG(P8KuM-pyUAhslxK_vDfpL#%h#1ebZB)6%6my2$IU;c5{FtlM^AWrdpz(TwlYSSk1<(R5)pgciOPq-A#?Qg#`j3$TEfyK?&@b2JuPfR`0Mrj&3m08}GP zEO5E81{A&zc4HtDGYy%XY@5R>C#i;^Jo85ngP zOk?~L=X7I&3eEuqeX4Jdj^G0Jb2#S)dZ-333Q8(Z7hEDZz=JlmaKWn_hgn45$hI!& za;(cZ{7$ZNW#RfiK!>4au}50CT|50(E??1)?ua~jmpRg_-6n=2*ifehvsm!tRcPZy z%3ELgC~adL=8AG4&39Y%h%LZ15S&>Wdf1viU0$MsZ}}cLZ6rfyF>#sAd50pX4H z?cBzVN2{uv3KDAZ&MVBO;j>Q8hD__&w{N4<2|%UBx$fo7bQMzIT?vs6S;DR**j*gZBhhVf0c;CCYsV85a;pl z_!V&uaeOPcwOfnz)MTS<2a^vqzl~4X z#hT$3l2|Kv27ka)@qxuALAqGnt)-L;))LwY6?kiSpjtRVL=%49Ja-U2xnRk7@gcYBFs~ zr-qnK4Qz8O z0E&=7)lT~7X4D1kE`LDf6yfjI9I=^AeA0+O8COL~ojIiE6!y|BDqcq$(d1y=p~m~j zNie|4Ec)m%%(sX}$U?stQm}i7S`m$6?@rIn&MK2?6Bf0H&=YjEp}P>5^RP(p=Y1SB|tleAFJ@E^-Zvn|(hWdWv`;?Hp1Cl;b*4DK#Ik zdBgRRa^3QUN$jOrmqO{BlxX&$o@XrL!-84~?qeGO9h~X%pjmzbx4{n9t)>FPpKw!7=^R-abrFvY<|DSSb^U0w%!s zAtjDT{VDxsn*Eg5tA71~Q`xz53s&Sqdgmkb0S`_l^L;9yA#;-8XBg2J$hQk9(t!Gj zH=wh~D3WX`_tT;jxM{}gs+IwxH7;HSljbhd*{Agl<`2nm`>00bBcSo8@@Vp#WZJSTjOAVO+bT6)XKVYzuMuYi@R z$SP58RqC+j>arH;wN_bUtWL8RXCO0mbNc+ zGP?VE3H_=8%zQX39KAd$9F6_kIB=pEOP%=_5ftl4ke)O1g2tCWc|XAcyFWfKIF5daE6Lk+f)I?}eo8Ug^+tLtm=bQ1JL z1_EObm=vSDyj7J$vyes&#b@>D!Qf1U1b?MAzD4E%Kbc2Rz5m#ocNHLMN=VXlTjf)c ziPE!iY|i<*4lgSCio1Nkq%j38p981UWz28)G;1SjhoUKp-)2QLc~pPSg<0(`b${&TE+lv543UpK%BXGZ8oOOd_|3#NnVgG&_Da zNhT>~a#m3OM!5RhY$critFLmO_ei0~Myk{m3}!rA(4XG*%#UKdc@BDEsAob=R1wGm zLB5SWNyT2PZ%n(Rq6Sl<$9`cD_G31 z6(sL(19@&%1GYYGGyNq3V)^p59-f{euCQ@cxiKSsG+a)$lyk z1PRb7WKe~22=U%*+W$lvkOsU;?Nw?3h}X;Ha{5iLJyOM@MZ*?Twv;HmW)=q1?JY@t z>X{%l$$O9Mmef!yx`5vN1CVr=oHeaLfMA^Mq-^Rusk!S+l21%3Fm~IPllpt zAO@P)fGD8XlWt)!Ue%|dgI5WEKPXxit)XU61}-7emo>%>VnI4mulU@E18xV z2(JktVF-i=0)aq8q#=RyVuL^+5C~{MT(YpR3>NaPXrWL#>jH+W%A76R&?&m0R!}Gn zOI0ygX0VK5#4uWmHLf-97E4osLOG#OC{)ZEEiJUqvF(D2(b673>)fl$eXH6Jmioom zeVUYNvp9DZx;=7^Vc0LWQfujmf9?y!g>u5G5LiF9Xo7^%k{s%tzZd3RE#AgL25#u(LL+DK#~M^hcS)3pkQ zCNS30d`XbzyRF2s%_o@H@lf)8|#1h7k(CWN=jnMRj zwvx6|Usvv06-Im7OFb!6n?UWRS4-i#G4ovikOBdLQ6?^FXmtDe*34V-r1@^)l{eE! zNvi*R88R4oQi{%${+}vMjpnu5Xt^a%|9oaJ$msm0q|6a4RIJWzgR#?ac!u-*BeVQp zD{gxkdZV^Vf1~6#OxG}@SZ_&Sf)5CPH^Ca^CB4wk{%4q zi-9@wKL1pxXObubQHZW1kyiMvWPj#xA|m5L34B;TI?<6e>lFBi{ZWCAsH4O;idP5Ex~O z%x+L9loBeHN=V|nt?+7UD6mxpX%q^CLZMI!NE8Z%LZMJwloWdaRb&xLSWy&8e3we7 zst8Flk}5e7iq^{cqfGz-Bn~);gSjLWA(t5>P*f7$EqtPD#VM1u1QZnbs`IO{G=Z#; zqx=3^y)1(!W4D=vm}eGs)->DG{dQcHU%(k4<()pR055tao{*aSY3Vby*uMtGUesOd zBGT*vY41HKZ`ocfne0-1X233Er)EI)`F5e@00C{p*Kh6e=_|h|JAEA<@f;edYS(DH z3G3Aei$g3Hi)}0-iw^CbXWER2ov=Js*obnZESFZa)~KykA-Ya9jy+YmYA`uNHzHWH z6!*z&^c(Tqt=&G#G~e^w>`lA93+Y=}KS~dYv;P$Z5z5c!7mc_W`2c{4gngfeJGrTm zD2Vv@%2MPZHC7W8r|Lb7L9r=L^keSrUvW#4B|ObzrTh~5o|by48MiFN7|ssYugS#a zsR#JTs%*!;5nPM=r+9)>#9N87;dn?)2Cja>S>_$fq?VRe+{G-sg#U;Gb3hsP`Ihba zspTS7W@$kpQJP2$afz1}QB+iFTafS&FJZGeB-YGjfI|C#fp$M*5iPb!ceh#Uaf@rV z()wuR16^%R-1!SQ3w+DMH=E0S9)Un4P}p9{Kh)F28R@x z;e)Ru-i?OCUB6k-wTygE!98O*qygV~3jFnWR2R^Uq3g%kL(DL-pD|OlheU+i(*s9C zyzIzisWfO$_IwU{ry87NZ1vmsvl7^t*bQ*F3ck{n@t>{r=YF04V>L;9M;m=?mOrrC z3x`fK?nYRwn6AIq7SN4x_LQ!_P37rdj!$)c7s}4$?C00!^pgH`npma-gmM)J4}8-O zT8mB!!KCfWfj1 zve}SDqJY5Zf*%rgY+&GVxL;le-`4Mj)7d!SM^Kq}jvdFFV*rrA?uo7D@$)Z4xvrkE zjG<7A^)CR*fkt&HoJo^efRzs)FI?i4F^3S`&oPVzjrF%e&y`BPNwhme=#G1vX{Vx% ziDkq~m@!$}*^itr{ITGOjH_3m~W;(DhuJ%a_s_B?zKiLCmLJptzs z1me9pL@P{ZfnJJ9W>x(Og8l#8N-UI5Nu8S6|EAh z;}i)Pg62an=@%{B7vHy@(tBB1CPYf zgmPp{orDwN=UgMOtI1=!eIZjVZ-k`7^fY;#tF66biQ{f(6w9XgFr&F?;k0%6h~u1^ z@eL*yJFIXS#>Gw_!1^3nR}(SSH;7*3y`xCgLI@(=Brk%uB9&FQA;m(8WhR*+WqMgL zEj(&_YNTUh-{dWwv6>Q*;uXg~AMHl81cks+>Di2g4-^X!Zn=|)#o7fEw$9*d%Ao`? zab#pMPzD<`v8~RjnXTZ{$2OqngcMLO2c{DO&}{)Q*C{zkl7O2ytx;5A8hGJAfnCck zsK;6kuqG#x!0RvO1wVcp!3Z;pXz_(6YCOCSB6}LDQ~<@&7H+wA_#>?_ZY3R^gf@?n z4q#rrIA&Yw206c-f?Pof?b`!z09PR;QAW{8Z}1M7XU>kO7I9WobDKKqcc5z)#y5V*y0UNTcL2j&t$7Hp-M-7Q2!!kB3}LASLB02fBSe*msNc zmboJ;3x47OHk`C6AlnkA$h*m;hF+a3nu~0C?Yl*3+OR36*3o3N32kVhJm_k9e#cl% z*?^UU|B@$18njZpma+(GZr6`eg(uBF(*EgF$`c~~f$MH^c9WyPWv z(R?uwgbH=U@UFeKoC`)lA1l4bg0iva$Q!Maj044JrL=Lb-cr$CltukoYKYaf8j&GR zRy#yNlx+JfQ~1zdiHC*0Ea4YA{M%e(*n14SI-EMr`rbn4QzDlTSqw=e6X&xRX*=|* ziB`sY$Mu5ocYBYkzBC^4ziYZ~^n1NC&gu7)#1H($qc$o+Wo!UiCAFkNcT6ZR$%!r1 z_IsCj5-Ak@X`soepg(Zq*UDQUUQ$)BTAu$|S=Q|7TU~;jea))8#uV+i0BOC1> zmy*Vzk^W-wvP;RU=L{`5>`Qb0$~1Fq00nAq?<4S07e9r0~`XV^o5jy!jh^+z*$ws>b=!;!jo0^ zdL8%d%APZlXH7O&W_5pe6Z97SkR5meYiZzjS$$Zqs zo)%$K6D zzVJ4~h)Ak)1k4MHE|M{+lMX?WKR^kR?uguzJZ~MVftBvCT+q$t-qWkcLVcaEkldk~ z3OW6xjX16f>Ij#k2{?{M(#56flBZM1|8inv`QXX&B{@Fd85rs}lbE;4!PHgbqtBsK zA3|U!o)NgZ7a}T@`hMF!U>_yPo+!eX7kn847Nk99noBPT-c`WlFhseFz(slGBIc&i z+~8h!mkniEZV=4kq9kXH87Z36q)i^^yYiWeiGxX`0$kWNSWu#lS+VK3iF|zt9WRqg zJQnvqe;OhO)kmpNvUDsWPj|G^uq#WxGuZgz5JM?d1b}LYCRO|<$?Emvsx-N2 z&0LeTFpg6{BV}Eayt}%q9gVYpNpN^-X$t?GMW^AxXk5@AAFgDeip@%?NOo%ee!HQ= zmnxg4(^U1CzbZVNj$$vJXQcoQz_q}V{<;goCz_HFW>XQd=Wtq^9!&fhJh$Q^LL&7d zbX?eS1C%H7b|a>DgG?u9YYLL}nvN}SL*&vf;WyJz9D+?4>LCu#jmP(V)2i*ayA%+7D&eh=s?8K@+19Y~rJGHA~jn1d^nK=l$UFc!l}`KW+~Kod^?6=zKGO}VmsDvt*1G*rTvH!8*ex_76G z37Oe1Cx_~o7}O&k!nie<8;4eeg=;iWt~l-(-?L3+g_t8l zbT}0#jhn8FE3K0eA&JE^St<~`a5o%9)o1<8@G8Q!CE?>I-qu;9gkGwO?~|N%^M)_z_r=oXZ2TJ|L7*epw%X|5On8fvb_e z$3Zg|>g6LsV=&t20#lVdx%6th?2+M{@GCLSyt{LGTYS^R7dbBF>LcW@KX1VD#6Hep zy4o$1mRi%H=d>vvlANxWfncq+o;IlJ9KWBH?(-SUfaKV!NiA=zm6F1A)wWBCX*n93 z<=WIG8F(4M+EUXXs9}L8B#nP`#r@qM4e-lj2Ey^KymY9bNU{z86O|I?AsJq%D9A*i@p#$MQHBVbx$x=Zw{4 z5v+@`?PnA#i1Vm_V?lVm*}YqCp|_w%JzZ1~VU9OgCs}8^p=SBQ&&7njTrMZH zf)}!VOPam?Vx-=Jp9m%PO^CPTar=cXcw^uF9$@yc*^9+NrLNottk&r4en) z5c6a3@D;4Pb~LMKN>Ej~L8HDzTea}}3v;nu?R;uGo6$^u5O}d!mbN+D(QUQa)>?0; zDCTZ9IYG|WT4Zan<#w37-HNB$36Jc+LYxs_R-C=%rrR;5Xx}Dv11R=Vt36ZeNGb$E z>Kia3m3m1hM;J;Lsb~8ZJQ@&5Y$@Qe*FE$MZ*xUtF%a|ZIG@_WW;BsZJ_5lOa2rph zp(qb6J}sz1Nyt8kfN*D8rQTT>&dxJe_Qhk-a7Y?`dl_{f7eZ$H%YFuFpo8AZ4dI9(Wic8#&EbrJLgdH5E~lm+S6?6O@w^wt)3gIgRT^t(LEJ zdn!@ZKV2KdXPj`9EaF-b`hfxvYn^e|YR~r0e`5Z<6u>fL{1c~7kE)7q-t$Z0dt z4grNr7eIpc0sR3*(V;3vXoFI1-Zuk~1$L%K!+U0oX)J)^K9P$fP4oLu&O9kOG$K;` zq}oQYF-J-W*PYCT_B+Afzj~=(U=_9?=I=RllzXm-;|@L-&)I9w{*&n!uJ-0Cw>h<)HdRG% zyle=GkUg8G{f|wZRM&JIT)?P64mO3Oh>^$Q5jNsFQ_mW;F^8Ru%6uko28Rh|y7gFR z%|+bh7zVPT32*5r;Si0a_syt8x@VHYkOk3nYo7;&mdR_ht&>Mc zq;V%?;-DwGc~MCsTDm6QT4rc9?Lo0~H*s^9s|T|(_B;pWUV%KbQgu=C3|L&{owu~Y zuL^;~_~n*BNPy68g~*|<0w>*@R4UG@bqqPOAyHH{QBhA;;Ip9|;^a(3g)98f|79gMBOYNxO)GhI= z*{g5U#Kaw!z<-`*EbS(&Tjwk*>N!b?DP-CXwq^`R*Vi-+zjnnu%LnNzj%Cf}Dxnq7s1$=Nh?X z6Xu3EV?v?`5gz5i1@Z_WRjZiLklJ9SsT88I*w}Gd%YcHNX(gxP_Tsu>2n}2%GIq?*n{LSLP|8u!c4^R3)9^7^<=z$M2l83P zGgUFP8L71KjZkcT3c(5blSxG!O;f$+B}$xdJ0dAzk{5Ei2t}foLBP{n&^;OI)SPvO zahrMy6rHCP46ZDoSB?Han;ydEKV3*F_R8F_>-_v{|ZmOzq`3!H|1 z1wL!(TfRi0kgqFjL`-9Ffjo#vqoK!9HAXZ2VBCu{3xrqY&9vV4bm9y)hicg{PsI31 z_EdNB0Oe?Ib$P=K#Zb8A{U$yQvFtSq{i?!2QuRJU)W;+yGPJ^Vb~! z$Su*csRTr+Uz1*lB1In8<%X5CloQ3El9k*SftBP4AIJgnmTi1fEeyefhsZNAQ`PSK zHA5`W0;lyrF(PQYakq1|B~vdgK50=++fvpV0}aODuufS&ioZ}+m25|Uk6uB?%MYG= z`Oow<+7qOZJR}+fo3?l#|Tc-)zaf$*4>% zI3uK<&H#f5um)>PQIY(%k+V!{%>RT6lWB*s1+JcMF$by_0LsWcVY$FLfWVx3?{|9V z$D=(tDW}fpXexv=oaV9E(7uYBU!mQgdmO! zPNd1)y+vSSG_;F2;;WSuAX(;k4NCU3uti5eV2n3>f{JL`W8n-@%b@V`;}OJ&iV21p zyvZ)Y`8GUI_6eC35Q)h0nD90lM%gcQ8f|WprCP;*Sd^fX)7mn{ww9H63ch9yeOQe z{yTh{2t1N${d`yC!y*g@%n4W&N}Mu%)_LO7TrA92fgjIN`LE_*ABBhOV7}Jt ztqeE5d09wawRf*|YQ9aVceOX!VISb97{S2~9B;Dzlm_{S?%F*q94h4Q?O;0(*pUHQWe6bO1{X^(r6`?`O=dKdP9@n zkk`vmvY)buoJHA?-)eqqMZH*5AA{U4_jd)+y}AV3C%+wzhJFkK#c6UJrFohCY@WTK z7}PM3enW1gMo-21cC63=jRDjN znx`e^?>zck2gn|3MYp3_XC)MJD7h(x6Z0ON{UD=MrC~vYiz5R3!fe-Uw}YKM2!ZhN z?MC8hC%a$cOIHBaVP4@w?^Ih7e_NQFlj5Wsds8ZWDqz5BA9n8kI~c`?e*=C&Kq88h z77R9=00*_Q1)f{4AMn9XoZ4%^W&;BLWg2$S+V_hii7YxW0T>f7#>2qZ-{lZeBWUT# z7&$1pc^G*GSbzBkk+MxwW0rPvy=IxWY__Kz1k2~$i2}q3JuxDMRBaSju&L$eSRmLMml2<&-qqi zE)?!!xm*e!Po5IIILzbX0WA60pV4Aeh8aix&$A!FgFQgri}RVIpzyc{qd-ilE>mCq*X_ zC6tkkmXbj<5it?>WV;X)kuWff9s)(h<9fai%&1;Fkq(YHL>Ph!69Y_4PD6r2O-q0d zMZ@nXmlfa9hy#UV;X#n7q=ckohumLVn*@xdXO(jsFXi zWCNIG1_vXI%~S{{ISqpn#i+CtAd_XGV}U7g5G;i3B=ECcDm)ZoRwyYGokC>MdY*`Y znw}ZnZe(C80#lXf#>LWzGajUa?F)Wkmx%Kl8VLazArTybM8ON|w8M*S#IX(e#)F%eRF16UTv^1946#ak@`f4&@Opg;xZ3LbGQQ@`-6? z$TP_l(?upZlPF9<-cYPa&cI|lN9WElO?j>`Rf#CCh-MS5RLq01WshH3%QZr01^)ga zvdc>D-!dC5$fII;Ts%*TB3Kq<#rL#?o|VaXrFmXVFG}QP>eBK!kQod}j{>BI0FqDu z4hHC>0@Tm|X>@>y@qmo^!y5;nhz+oV1KKzMHv(NEvJ<0Df-Gr>f0dhBlOr(&ft1jr zA}KZbX#@RrZ_0@tcnlaaqRB*7X5zD8%t}T!RM}DH*r1PKfH1$Nq?ddsTIr3gfCE>V z%lLT#I^g~LW^n3vSsU@xA098`eTjfe)Q;bWN#&hvv z9L<<|mRhP-sxcib<)6j*nNvpi;RBGnbss?jX+LJK8%TfsW}g8kop#nGmtA$;UHANH?A_0_ z5&&fmxjl=Dv6zds*nzUCcmb9mWn6no&n%lnIR8 z^3)R2&@wP`7P7;J^NNxzbtbY*F(L*IfRi zXMQw4b=+MvEf9_9T5-%nn2)cAz(PtZ$SkGuI9PSw2tOgeLkU>QA_GA1U>|SA0lr8MR)uh7%fYgdrmc9b!Nzl<6Kk2JvGA0S3V0 zZ>@WrME|x>ng;;iUtH|S8~9W1ETuPh0S!34!XQU{&DOUyk?EbuKl(pDwRhx^lDI(A z2kOUTejdsll)kg9%fJWH4+93-w4^YqE!L&EtG{N&@?Z4C!TgD)S$#@T2^*R`9mU?0 zj<#9$Du$baDo^mHoq;uB<-oj09KB7_5j!)aT{(F9R=RB$GQ4`9i+*cgkiIn9`TOD( ze@*%FE4W^5E$L&vO(g3OGaSg5>`tmpquler1;7|Ch$@pXra5G*r^0^I#P~}{i*J6t zFI|&rnlA58sL{nc&`Hc9kLK6@zGabK7vBP}S_OHcfg1DgZwN0jUqVQiZ3!QJxu1!@ z$I?W%h;;PBCJ8Ptniw4wKfXf0BaNP>PMi3drMQBc6YYa z)bABiEyp4_ukIYP18lBo4CIkv+Ht8xGt=&lN}2cV=rev#XW$+H`4#YYAkzV#fE)tK z6-nDC=4^D0#|4hZzihs>%ijC$yDX7gE_aip($z)wrMRB(UWthJ{>BL0nzQKxN%Sf)Lhzk`Ffq&h3z8=0-{Eh+QU{6CZ+0~JGzU_coGv}7B~vp0hreZHA(CN|=<^HqyM-0h?9w@QNs)79Bv$&Md7k+z+i3u|~>~ z?N(GxwpNU>zFnAdD`%mVz#sc#xOmh2v3H?2`k#f@6;(r4>;CbH1^+y}5obWj1ULU( zR^4Aw!QW>3#dEqtd{GT|1wuXH3+5STxYHXR?(;hR?Y)$0W#@lfwNLfZ5BuqV<2?O9 zCL76`RtoOe&w`PyTALP4=4euHrdDdxRckPlTB6~at4vd^R=axTTDaA8er^0jN6C>X z&m>Wf<~odbQtso`qSZ`I8mW<4r%9ViGj+TNa3?p=*F}T!{}}*_{nn^9SG5!>g_HLy zSIJibKX{!s!Z|nhb7}2bGqtJHu7cA8(ZKcJJ8IcY4L(zYHF#IubwokEz@C%$ H_y7O^K:not(summary){display:none}.contact-editor__add{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;justify-self:start;align-items:center;gap:5px;padding:4px 6px;font-size:12px;font-weight:600;display:inline-flex}.app-icon-button.contact-editor__remove{border-radius:6px}.contact-editor__add:hover,.contact-editor__add:focus-visible{background:var(--rowHover,#f0f1f6);outline:none}:root{--app-viewport-height:100vh}@supports (height:100dvh){:root{--app-viewport-height:100dvh}}html,body{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;height:100%}body{background:var(--panel);color:var(--text);font:14px/1.4 var(--font-sans);height:var(--app-viewport-height);margin:0;transition:background-color .18s,color .18s;overflow:hidden}html .dp--theme-light,html .dp--theme-dark{--dp-font-family:var(--font-sans);--dp-font-size:13px;--dp-border-radius:6px;--dp-cell-border-radius:4px;--dp-background-color:var(--panel);--dp-text-color:var(--text);--dp-hover-color:var(--rowHover);--dp-hover-text-color:var(--text);--dp-hover-icon-color:var(--text);--dp-primary-color:var(--accent);--dp-primary-disabled-color:color-mix(in srgb, var(--accent) 48%, transparent);--dp-primary-text-color:#fff;--dp-secondary-color:var(--muted);--dp-border-color:var(--border);--dp-menu-border-color:var(--border);--dp-border-color-hover:var(--accent);--dp-border-color-focus:var(--accent);--dp-disabled-color:color-mix(in srgb, var(--panel) 82%, var(--muted));--dp-disabled-color-text:var(--muted);--dp-scroll-bar-background:var(--panel2);--dp-scroll-bar-color:var(--muted);--dp-icon-color:var(--muted);--dp-danger-color:var(--error-fg);--dp-marker-color:var(--error-fg);--dp-tooltip-color:var(--panel2);--dp-highlight-color:color-mix(in srgb, var(--accent) 16%, transparent)}#app{height:var(--app-viewport-height);min-height:0}.theme-toggle{border:1px solid var(--border);width:34px;height:34px;color:var(--text);background:0 0;border-radius:.6rem;justify-content:center;align-items:center;display:inline-flex}.theme-toggle:hover{background:var(--control-hover-bg)}button{cursor:pointer}button:disabled{opacity:.6;cursor:not-allowed}[role=dialog][aria-modal=true]:focus,[role=alertdialog][aria-modal=true]:focus{outline:none}input,select{font-family:inherit;font-size:inherit}.meta{color:var(--muted);text-align:center;margin-top:6px;font-size:12px}.err{color:#ff6b6b;white-space:pre-wrap;text-align:center;margin-top:6px;font-size:13px}.row{grid-template-columns:80px minmax(0,1fr);align-items:center;gap:8px;margin-bottom:8px;display:grid}.row label{color:var(--muted);font-size:12px}.row input,.row select{border:1px solid var(--control-border);background:var(--panel2);width:100%;color:var(--text);border-radius:.5rem;outline:none;padding:.5rem .65rem}.row input::placeholder{color:#9aa3b2}.row input:-webkit-autofill{-webkit-box-shadow:0 0 0px 1000px var(--panel2) inset;-webkit-text-fill-color:var(--text)}:root{--surface:var(--panel);--fg:var(--text);--spaces-bar-height:calc(56px + env(safe-area-inset-bottom));--border-soft:color-mix(in srgb, var(--border) 55%, transparent);--accent-bg:color-mix(in srgb, var(--accent) 22%, var(--panel2));--accent-fg:var(--accent);--space-rail-bg:var(--colour-neutral-raised);--space-rail-fg:var(--muted);--folder-list-bg:var(--colour-neutral-base);--top-nav-height:56px;--top-nav-bg:var(--space-rail-bg);--modal-bg:var(--colour-neutral-base);--modal-surface:var(--modal-bg);--modal-border:var(--control-border);--modal-shadow:0 28px 80px #00000075, inset 0 1px 0 #ffffff14;--modal-scrim:#000000a3;--modal-scrim-blur:blur(12px);--top-nav-wordmark:var(--accent);--top-nav-input-bg:var(--surface);--top-nav-popover-bg:var(--colour-neutral-base)}html.light,.light{--space-rail-bg:var(--colour-neutral-subtle);--folder-list-bg:var(--colour-neutral-lower);--top-nav-wordmark:var(--accent)}.shell{--folder-resizer-width:var(--column-resizer-width,6px);grid-template-columns:56px auto var(--folder-resizer-width) minmax(var(--message-list-min-width,280px), var(--message-columns-width,360px)) minmax(var(--message-view-min-width,320px), 1fr);height:var(--app-viewport-height);background:var(--panel);color:var(--text);grid-template-rows:auto minmax(0,1fr);display:grid;position:relative;overflow:hidden}.shell--message-view-hidden{grid-template-columns:56px auto var(--folder-resizer-width) minmax(var(--message-list-min-width,280px), 1fr) 0px}.shell--message-list-hidden{grid-template-columns:56px auto var(--folder-resizer-width) 0px minmax(0, 1fr)}.shell--folder-list-hidden{--folder-resizer-width:0px}.shell--contacts{grid-template-columns:56px auto var(--folder-resizer-width) minmax(0, 1fr)}.shell.shell--spotlighting .compose-dialog{--spotlight-caption-space:112px;padding-top:var(--spotlight-caption-space);box-sizing:border-box;background:0 0;align-items:start}.shell.shell--spotlighting .compose-dialog__card{height:min(640px, calc(100vh - var(--spotlight-caption-space) - 24px))}.shell.shell--spotlighting .compose-dock{bottom:14px}.shell.shell--spotlighting .compose-dock__item{border-bottom:2px solid var(--compose-dock-outline);border-radius:10px}body.spotlighting .folder-subs{background:0 0}.shell>*{min-width:0;min-height:0}.shell>.msg-columns{grid-column:4}.shell>.message-view{grid-column:5}.shell--message-view-maximized>.message-view{z-index:45;width:100%;height:var(--app-viewport-height);position:fixed;inset:0}.shell--message-view-maximized>:is(.quick-filter,.app-spaces,.sidebar-slot,.column-resizer,.msg-columns){visibility:hidden}.shell--message-list-hidden>.message-view,.shell>.contacts{grid-column:4/-1}.quick-filter{height:var(--top-nav-height);background:var(--top-nav-bg);grid-column:1/-1;align-items:center;column-gap:16px;padding:0 16px 0 14px;display:flex;position:relative}.quick-filter__brand{-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:6px;height:36px;display:inline-flex}.quick-filter__glyph{width:24px;height:24px;color:var(--accent);display:inline-flex}.quick-filter__glyph svg{width:100%;height:100%;display:block}.quick-filter__wordmark{font-family:var(--font-display);letter-spacing:-.01em;color:var(--top-nav-wordmark);font-size:20px;font-weight:700;line-height:1}.quick-filter__menu{display:none}.quick-filter__actions{flex-shrink:0;align-items:center;gap:2px;display:inline-flex}.quick-filter__actions>.account-menu{margin-left:2px}.quick-filter__actions>.beacon-menu{margin:0 4px}.quick-filter__action,.quick-filter__action.theme-toggle{width:36px;height:36px;color:var(--text);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;padding:0;text-decoration:none;display:inline-flex}.quick-filter__action:hover,.quick-filter__action:focus-visible,.quick-filter__action.theme-toggle:hover,.quick-filter__action.theme-toggle:focus-visible{background:var(--control-hover-bg);border-color:var(--control-hover-border)}.quick-filter__action:focus-visible,.quick-filter__action.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.quick-filter__search{flex:0 360px;min-width:160px;margin:0 auto;position:relative}.quick-filter__input{border:1px solid var(--control-border);background:var(--top-nav-input-bg);width:100%;height:36px;color:var(--text);font:inherit;border-radius:8px;outline:none;padding:0 40px 0 14px;font-size:14px}.quick-filter__input--empty{padding-right:70px}.quick-filter__input::-webkit-search-cancel-button{appearance:none}.quick-filter__input::-webkit-search-decoration{appearance:none}.quick-filter__input::placeholder{color:var(--muted)}.quick-filter__input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent)}.quick-filter__shortcut{border:1px solid var(--border);background:color-mix(in srgb, var(--surface) 88%, var(--rowHover));color:var(--muted);pointer-events:none;border-radius:4px;padding:2px 6px;font-family:inherit;font-size:11px;line-height:1.2;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.quick-filter__clear{width:24px;height:24px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.quick-filter__clear svg{display:block}.quick-filter__clear:hover,.quick-filter__clear:focus-visible{background:var(--control-hover-bg);border-color:var(--control-hover-border);color:var(--text)}.quick-filter__clear:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (width<=639px){.shell{--folder-resizer-width:0px}.shell .sidebar-slot{z-index:40;top:var(--top-nav-height);width:min(var(--folder-list-width,240px), calc(100vw - 56px));max-width:calc(100vw - 56px);height:auto;transition:transform var(--folder-list-transition-ms,.36s) ease, box-shadow var(--folder-list-transition-ms,.36s) ease;position:absolute;bottom:0;left:56px;transform:translate(0);box-shadow:18px 0 34px #00000047}.shell .sidebar-slot--hidden{width:min(var(--folder-list-width,240px), calc(100vw - 56px));box-shadow:none;pointer-events:none;transform:translate(-100%)}.shell .sidebar{width:100%;transform:none}.shell .column-resizer--folder-list{display:none}.shell--message-view-hidden>.msg-columns,.shell--message-list-hidden>.message-view{grid-column:2/-1}.quick-filter{column-gap:8px;padding:0 8px}.quick-filter__wordmark{display:none}.quick-filter__search{flex:auto;min-width:0;margin:0}.quick-filter__menu{display:block}.quick-filter__actions>:not(.account-menu,.beacon-menu,.quick-filter__menu){display:none}.quick-filter__actions>.account-menu{margin-left:0}.shell,.shell--message-view-hidden,.shell--message-list-hidden{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0, 1fr) var(--spaces-bar-height)}.quick-filter{grid-area:1/1}.shell>.app-spaces{grid-area:3/1}.shell .sidebar-slot{top:var(--top-nav-height);bottom:var(--spaces-bar-height);width:min(var(--folder-list-width,240px), 100vw);max-width:100vw;left:0}.shell .sidebar-slot--hidden{width:min(var(--folder-list-width,240px), 100vw)}.shell>.msg-columns,.shell>.message-view,.shell>.contacts,.shell--message-view-hidden>.msg-columns,.shell--message-list-hidden>.message-view{grid-area:2/1}}.sidebar-slot{width:var(--folder-list-width,240px);min-width:0;height:100%;min-height:0;transition:width var(--folder-list-transition-ms,.36s) ease;overflow:hidden}.shell--column-resizing .sidebar-slot,.shell--column-resizing .sidebar{transition:none}.sidebar-slot--hidden{width:0}.sidebar{background:var(--folder-list-bg);width:var(--folder-list-width,240px);min-width:0;height:100%;min-height:0;transition:transform var(--folder-list-transition-ms,.36s) ease;grid-template-rows:auto auto 1fr auto;display:grid;overflow:hidden;transform:translate(0)}.sidebar-slot--hidden .sidebar{transform:translate(-100%)}.sidebar--contacts{grid-template-rows:minmax(0,1fr)}.sidebar>*{min-width:0}.sidebar>:nth-child(3){min-height:0;overflow-y:auto}.sidebar__header{min-width:0;padding:12px 12px 10px}.sidebar__compose{width:100%;max-width:100%}.sidebar__account{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);align-items:center;gap:6px;padding:10px 14px 4px;font-size:11px;display:flex}.sidebar__account-name{text-overflow:ellipsis;white-space:nowrap;text-transform:none;letter-spacing:normal;min-width:0;color:var(--text);flex:1;font-size:13px;font-weight:500;overflow:hidden}.sidebar__footer{border-top:1px solid var(--border-soft);flex-direction:column;gap:4px;margin-top:auto;padding:8px;display:flex}.column-resizer{background:var(--folder-list-bg);cursor:col-resize;touch-action:none;outline:none;position:relative}.column-resizer--hidden{cursor:default;pointer-events:none}.column-resizer:before{content:"";inset-block:0;background:var(--border);width:1px;transition:background-color .12s,box-shadow .12s;position:absolute;left:calc(50% - .5px)}.column-resizer:hover:before,.column-resizer:focus-visible:before,.column-resizer.is-active:before{background:var(--accent);box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 24%, transparent)}body.is-column-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}body.is-column-resizing iframe{pointer-events:none}@media (prefers-reduced-motion:reduce){.sidebar-slot,.sidebar{transition:none}}.base.app-button:is([class],:not([class])){border-radius:4px;align-items:center;gap:6px}.base.app-button.outline:is([class],:not([class])){box-sizing:border-box;border:1px solid var(--colour-primary-default);box-shadow:none;background:padding-box padding-box}.base.app-button.outline:is([class],:not([class])):before{display:none}.base.app-button.outline:hover:not(:disabled):is([class],:not([class])){border-color:var(--colour-primary-hover);background:color-mix(in srgb, var(--colour-primary-default), transparent 84%);box-shadow:none}.base.app-button.outline:active:not(:disabled):is([class],:not([class])){border-color:var(--colour-primary-pressed);background:color-mix(in srgb, var(--colour-accent-blue), transparent 74%);box-shadow:none}.base.app-button.outline:disabled:is([class],:not([class])){border-color:var(--colour-neutral-border);box-shadow:none;background:0 0}.base.app-button:focus:not(:focus-visible):is([class],:not([class])){outline:none}.base.app-button:is([class],:not([class])) .text{font-weight:600}.base.app-button:is([class],:not([class])) .icon{flex:0 0 16px;justify-content:center;align-items:center;width:16px;height:16px;line-height:1;display:inline-flex;transform:none}.base.app-button:is([class],:not([class])) .icon>svg{display:block;transform:none}.base.app-button--compact:is([class],:not([class])){height:34px}.app-icon-button:is([class],:not([class])){width:34px;height:34px;color:var(--muted);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:8px;flex:0 0 34px;place-items:center;padding:0;display:inline-grid}.app-icon-button:hover:where(:not(:disabled)):is([class],:not([class])){background:var(--control-hover-bg);color:var(--text)}.app-icon-button--danger:hover:where(:not(:disabled)):is([class],:not([class])){background:var(--error-bg);color:var(--error-fg)}.app-icon-button:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.app-icon-button:disabled:is([class],:not([class])),.app-icon-button:disabled:hover:is([class],:not([class])){color:var(--muted);opacity:.35;cursor:default;background:0 0}.app-icon-button:is([class],:not([class])) svg{display:block}.app-toggle-button:is([class],:not([class])){width:40px;height:40px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:10px;place-items:center;transition:background .12s,color .12s;display:grid;position:relative}.app-toggle-button:hover:where(:not(.is-active):not(:disabled)):is([class],:not([class])){background:var(--control-hover-bg);color:var(--text)}.app-toggle-button:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.app-toggle-button.is-active:is([class],:not([class])){background:var(--accent);color:#fff}.app-dropdown{position:relative}.app-dropdown--disabled>summary{cursor:default;opacity:.55}.app-dropdown__summary{cursor:pointer;list-style:none}.app-dropdown__summary::-webkit-details-marker{display:none}.app-dropdown__summary:after{content:"▾";opacity:.7;margin-left:6px;font-size:10px}.app-dropdown__summary--control{border:1px solid var(--control-border,#d6d9e2);background:var(--panel,#fff);min-height:34px;color:var(--text,#1a1d24);font:inherit;border-radius:6px;justify-content:space-between;align-items:center;padding:6px 9px;font-size:13px;display:inline-flex}.app-dropdown__summary--control:focus-visible{border-color:var(--accent);outline:none}.app-dropdown__menu{z-index:3;border:1px solid var(--border,#d6d9e2);background:var(--surface,#fff);border-radius:8px;gap:2px;min-width:190px;max-height:min(46vh,340px);padding:6px;display:grid;position:absolute;top:calc(100% + 6px);left:0;overflow-y:auto;box-shadow:0 14px 34px #00000038}.app-dropdown__item{min-height:32px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;grid-template-columns:24px 1fr;align-items:center;gap:8px;padding:6px 8px;font-size:13px;display:grid}.app-dropdown__item:hover{background:#7f7f7f2e}.app-dropdown__item[aria-checked=true]{font-weight:600}.app-dropdown__heading{letter-spacing:.04em;text-transform:uppercase;color:var(--muted,#6b7388);padding:4px 8px 0;font-size:10px;font-weight:600}.app-spaces:is([class],:not([class])){padding:14px 0 max(14px, env(safe-area-inset-bottom));background:var(--space-rail-bg,var(--panel2));color:var(--muted);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;align-items:center;gap:6px;width:56px;height:100%;display:flex}.app-spaces__bottom-actions:is([class],:not([class])){flex-direction:column;align-items:center;gap:6px;margin-top:auto;display:flex}.app-spaces__folder-toggle-icon:is([class],:not([class])){border:1.5px solid;border-radius:3px;width:20px;height:16px;display:block;position:relative}.app-spaces__folder-toggle-icon:is([class],:not([class])):before{content:"";inset-block:0;background:currentColor;width:1.5px;position:absolute;left:6px}.app-spaces__folder-toggle-icon:is([class],:not([class])):after,.app-spaces__folder-toggle-icon span:is([class],:not([class])){content:"";background:currentColor;border-radius:999px;height:1.5px;position:absolute;left:9px;right:3px}.app-spaces__folder-toggle-icon:is([class],:not([class])):after{top:5px}.app-spaces__folder-toggle-icon span:is([class],:not([class])){top:9px}.app-spaces__folder-toggle-icon.is-hidden:is([class],:not([class])):before,.app-spaces__folder-toggle-icon.is-hidden:is([class],:not([class])):after,.app-spaces__folder-toggle-icon.is-hidden span:is([class],:not([class])){opacity:.38}.app-spaces__badge:is([class],:not([class])){color:#fff;letter-spacing:-.2px;text-align:center;pointer-events:none;background:#c93838;border-radius:8px;min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:600;line-height:16px;position:absolute;top:2px;right:2px}@media (width<=639px){.app-spaces:is([class],:not([class])){width:100%;height:var(--spaces-bar-height,56px);padding:8px max(56px, env(safe-area-inset-right)) calc(8px + env(safe-area-inset-bottom)) max(56px, env(safe-area-inset-left));border-right:0;border-top:1px solid var(--border);flex-direction:row;justify-content:center;gap:8px;position:relative}.app-spaces__bottom-actions:is([class],:not([class])){top:8px;left:max(8px, env(safe-area-inset-left));flex-direction:row;margin-top:0;position:absolute}.app-spaces__settings:is([class],:not([class])){display:none}}.storage-usage:is([class],:not([class])){padding:0 6px 4px}.storage-usage__track:is([class],:not([class])){background:color-mix(in srgb, var(--muted) 28%, transparent);border-radius:999px;height:3px;overflow:hidden}.storage-usage__fill:is([class],:not([class])){border-radius:inherit;background:color-mix(in srgb, var(--text) 72%, var(--muted));height:100%;transition:width .2s}.storage-usage__label:is([class],:not([class])){color:var(--muted);margin:6px 0 0;font-size:11px;line-height:1.3}.account-menu:is([class],:not([class])){position:relative}.account-menu__button:is([class],:not([class])){cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:0;border-radius:999px;justify-content:center;align-items:center;width:36px;height:36px;padding:0;list-style:none;display:inline-flex}.account-menu__button:is([class],:not([class]))::-webkit-details-marker{display:none}.account-menu__button:hover .account-menu__avatar:is([class],:not([class])),.account-menu__button:focus-visible .account-menu__avatar:is([class],:not([class])),.account-menu[open] .account-menu__avatar:is([class],:not([class])){box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 24%, transparent)}.account-menu__button:focus-visible:is([class],:not([class])){outline:none}.account-menu__avatar:is([class],:not([class])){border:1px solid var(--accent);background:var(--accent);color:#fff;letter-spacing:.02em;text-transform:uppercase;border-radius:999px;justify-content:center;align-items:center;width:36px;height:36px;font-size:14px;font-weight:700;display:inline-flex}.account-menu__avatar--large:is([class],:not([class])){width:40px;height:40px;font-size:14px}.account-menu__popover:is([class],:not([class])){z-index:30;border:1px solid var(--border);background:var(--panel);border-radius:12px;min-width:240px;padding:6px;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 16px 32px #00000052}.account-menu__identity:is([class],:not([class])){border-bottom:1px solid var(--border-soft);align-items:center;gap:10px;margin-bottom:4px;padding:10px 10px 12px;display:flex}.account-menu__email:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text);flex:1;font-size:13px;font-weight:500;overflow:hidden}.account-menu__item:is([class],:not([class])){width:100%;min-height:38px;color:var(--text);cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;gap:10px;padding:8px 10px;font-size:13px;font-weight:500;text-decoration:none;display:flex}.account-menu__item:hover:is([class],:not([class])),.account-menu__item:focus-visible:is([class],:not([class])){background:var(--rowHover);outline:none}.account-menu__item svg:is([class],:not([class])){color:var(--muted);flex-shrink:0}.account-menu__support-icon:is([class],:not([class])){width:16px;height:16px;color:var(--muted);flex-shrink:0;display:inline-flex}.account-menu__support-icon:is([class],:not([class])) svg{width:100%;height:100%}.app-drawer:is([class],:not([class])){position:relative}.app-drawer__button:is([class],:not([class])){-webkit-user-select:none;user-select:none;list-style:none}.app-drawer__button:is([class],:not([class]))::-webkit-details-marker{display:none}.app-drawer[open] .app-drawer__button:is([class],:not([class])){background:var(--control-hover-bg);border-color:var(--control-hover-border)}.app-drawer__popover:is([class],:not([class])){z-index:30;border:1px solid var(--border);background:var(--top-nav-popover-bg,var(--panel));border-radius:14px;grid-template-columns:repeat(3,84px);gap:4px;padding:8px;display:grid;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 16px 32px #00000052}.app-drawer__tile:is([class],:not([class])){--tile-top:var(--lightningcss-light,var(--colour-neutral-raised))var(--lightningcss-dark,var(--colour-neutral-deep));--tile-foot:var(--lightningcss-light,var(--colour-neutral-subtle))var(--lightningcss-dark,var(--colour-neutral-lower));--tile-foot-lit:var(--lightningcss-light,color-mix(in srgb, var(--accent) 14%, var(--colour-neutral-raised)))var(--lightningcss-dark,var(--colour-neutral-lower));color:var(--muted);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:10px;flex-direction:column;align-items:center;gap:4px;padding:8px 6px;font-size:12px;font-weight:600;text-decoration:none;display:flex}.app-drawer__tile:focus-visible:is([class],:not([class])){outline:none}.app-drawer__icon:is([class],:not([class])){box-sizing:border-box;border:1px solid var(--border);background:linear-gradient(to bottom, var(--tile-top), var(--tile-foot));width:44px;height:44px;color:var(--muted);border-radius:8px;place-items:center;padding:7.5px;transition:border-color .12s,color .12s;display:grid;box-shadow:0 3px 6px -2px #00000026}.app-drawer__icon:is([class],:not([class])) svg{width:100%;height:100%;display:block}.app-drawer__tile:hover .app-drawer__icon:is([class],:not([class])),.app-drawer__tile:focus-visible .app-drawer__icon:is([class],:not([class])),.app-drawer__tile--current .app-drawer__icon:is([class],:not([class])){background:linear-gradient(to bottom, var(--tile-top), var(--tile-foot-lit));color:var(--accent)}.app-drawer__tile:focus-visible .app-drawer__icon:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.app-drawer__tile--current .app-drawer__icon:is([class],:not([class])){border-color:var(--accent)}.app-drawer__tile--current:is([class],:not([class])){color:var(--accent);font-weight:700}.folder-tree:is([class],:not([class])){flex-direction:column;gap:1px;min-height:0;padding:4px 6px;display:flex}.folder-tree__heading-row:is([class],:not([class])){justify-content:space-between;align-items:center;margin:14px 10px 4px;display:flex}.folder-tree__heading:is([class],:not([class])){color:var(--muted);margin:14px 10px 4px;font-size:12px;font-weight:600}.folder-tree__heading-row .folder-tree__heading:is([class],:not([class])){margin:0}.folder-tree__heading-actions:is([class],:not([class])){align-items:center;gap:2px;margin:-4px -6px -4px 0;display:inline-flex}.folder-tree__heading--shared:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.folder-tree__manage:is([class],:not([class])){width:24px;height:24px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex}.folder-tree__manage:hover:is([class],:not([class])),.folder-tree__manage:focus-visible:is([class],:not([class])){background:var(--rowHover);color:var(--text);outline:none}.folder-node:is([class],:not([class])){border-radius:8px;align-items:center;gap:2px;padding:0 10px 0 0;display:flex}.folder-node:hover:is([class],:not([class])){background:var(--rowHover)}.folder-node.is-current:is([class],:not([class])){background:var(--rowActive)}.folder-node.is-drop-valid:is([class],:not([class])){background:color-mix(in srgb, var(--accent) 14%, var(--panel));box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--accent) 55%, transparent)}.folder-node.is-drop-copy:is([class],:not([class])){background:color-mix(in srgb, #188038 14%, var(--panel));box-shadow:inset 0 0 0 1px #18803899}.folder-node.is-drop-invalid:is([class],:not([class])){background:color-mix(in srgb, #d93025 12%, var(--panel));cursor:not-allowed;box-shadow:inset 0 0 0 1px #d930258c}.folder-node__toggle:is([class],:not([class])){width:18px;height:18px;color:var(--muted);cursor:pointer;appearance:none;background:0 0;border:0;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;margin:4px 0;padding:0;display:flex}.folder-node__toggle:hover:is([class],:not([class])){background:color-mix(in srgb, var(--text) 10%, transparent)}.folder-node__toggle:focus-visible:is([class],:not([class])){box-shadow:0 0 0 2px var(--accent);outline:0}.folder-node__toggle svg:is([class],:not([class])){transition:transform .12s;transform:rotate(90deg)}.folder-node__toggle.is-collapsed svg:is([class],:not([class])){transform:rotate(0)}.folder-node__toggle--spacer:is([class],:not([class])){cursor:default;background:0 0}.folder-node__button:is([class],:not([class])){box-shadow:none;appearance:none;text-align:left;cursor:pointer;font:inherit;color:var(--text);background:0 0;border:0;outline:0;flex:1;align-items:center;gap:10px;min-width:0;padding:4px 0;display:flex}.folder-node__button:focus-visible:is([class],:not([class])){box-shadow:0 0 0 2px var(--accent);border-radius:6px}.folder-node.is-current .folder-node__button:is([class],:not([class])){font-weight:500}.folder-node__icon-wrap:is([class],:not([class])){flex-shrink:0;width:18px;height:18px;display:block;position:relative}.folder-node__icon:is([class],:not([class])){width:18px;height:18px;color:var(--muted);display:block}.folder-node__icon:is([class],:not([class])) svg{width:100%;height:100%;display:block}.folder-node__icon:is([class],:not([class])) [fill=context-fill]{fill:color-mix(in srgb, currentColor 20%, transparent)}.folder-node__icon:is([class],:not([class])) [fill=context-stroke]{fill:currentColor}.folder-node.has-tone .folder-node__icon:is([class],:not([class])),.folder-node.has-tone.is-current .folder-node__icon:is([class],:not([class])){color:var(--folder-tone)}.folder-node.is-current:not(.has-tone) .folder-node__icon:is([class],:not([class])){color:var(--accent)}.folder-node__name:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.folder-node__star:is([class],:not([class])){color:var(--folder-icon-color);fill:#facc15;filter:drop-shadow(0 0 1.5px var(--panel));position:absolute;bottom:-3px;left:-4px}.folder-node__count:is([class],:not([class])){color:var(--muted);font-variant-numeric:tabular-nums;background:color-mix(in srgb, var(--text) 8%, transparent);border-radius:999px;flex-shrink:0;margin-left:auto;padding:2px 8px;font-size:11px}.folder-node__index:is([class],:not([class])){color:var(--muted);font-variant-numeric:tabular-nums;background:color-mix(in srgb, var(--accent) 10%, transparent);border-radius:999px;flex-shrink:0;padding:1px 5px;font-size:10px}.folder-node.is-current .folder-node__count:is([class],:not([class])){color:var(--accent);background:color-mix(in srgb, var(--accent) 18%, transparent);font-weight:600}.tag-view-node:is([class],:not([class])){--tag-color:var(--muted);border-radius:8px;align-items:center;padding:0 10px 0 28px;display:flex}.tag-view-node:hover:is([class],:not([class])){background:var(--rowHover)}.tag-view-node.is-current:is([class],:not([class])){background:var(--rowActive)}.tag-view-node.is-drop-valid:is([class],:not([class])){background:color-mix(in srgb, var(--tag-color) 16%, var(--panel));box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--tag-color) 60%, transparent)}.tag-view-node__button:is([class],:not([class])){min-width:0;color:var(--text);font:inherit;text-align:left;cursor:pointer;appearance:none;background:0 0;border:0;flex:1;align-items:center;gap:10px;padding:4px 0;display:flex}.tag-view-node__button:focus-visible:is([class],:not([class])){box-shadow:0 0 0 2px var(--accent);border-radius:6px;outline:0}.tag-view-node.is-current .tag-view-node__button:is([class],:not([class])){font-weight:500}.tag-view-node__icon-wrap:is([class],:not([class])){flex-shrink:0;place-items:center;width:18px;height:18px;display:grid}.tag-view-node__dot:is([class],:not([class])){background:var(--tag-color);width:10px;height:10px;box-shadow:0 0 0 1px color-mix(in srgb, var(--text) 15%, transparent);border-radius:50%}.tag-view-node__star:is([class],:not([class])){color:var(--folder-icon-color);fill:#facc15}.tag-view-node__name:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.tag-view-node__count:is([class],:not([class])){background:color-mix(in srgb, var(--text) 8%, transparent);color:var(--muted);font-variant-numeric:tabular-nums;border-radius:999px;flex-shrink:0;margin-left:auto;padding:2px 8px;font-size:11px}.tag-view-node.is-current .tag-view-node__count:is([class],:not([class])){color:var(--accent);background:color-mix(in srgb, var(--accent) 18%, transparent);font-weight:600}.msg-columns:is([class],:not([class])){align-items:stretch;min-width:0;height:100%;min-height:0;display:flex;overflow:auto hidden}.msg-columns>.msg-columns__column:is([class],:not([class])){flex:0 1 var(--message-column-width,360px);min-width:var(--message-column-min-width,280px);border-right:0;height:100%}.msg-columns>.msg-columns__column--last:is([class],:not([class])){flex-grow:1}.msg-columns__resizer:is([class],:not([class])){flex:0 0 var(--message-column-resizer-width,6px)}@media (width<=639px){.msg-columns:is([class],:not([class])){scroll-snap-type:x mandatory;scrollbar-width:none}.msg-columns:is([class],:not([class]))::-webkit-scrollbar{display:none}.msg-columns>.msg-columns__column:is([class],:not([class])),.msg-columns>.msg-columns__column--last:is([class],:not([class])){scroll-snap-align:start;flex:0 0 100%;min-width:0}.msg-columns__resizer:is([class],:not([class])){display:none}}.msg-list:is([class],:not([class])){border-right:1px solid var(--border);background:var(--panel);grid-template-rows:auto auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);min-width:0;height:100%;min-height:0;display:grid}.msg-list.is-drop-valid:is([class],:not([class])){box-shadow:inset 0 0 0 2px color-mix(in srgb, var(--accent) 55%, transparent)}.msg-list.is-drop-copy:is([class],:not([class])){box-shadow:inset 0 0 0 2px #18803899}.msg-list.is-drop-invalid:is([class],:not([class])){box-shadow:inset 0 0 0 2px #d930258c}.msg-list__header:is([class],:not([class])){flex-wrap:nowrap;min-width:0}.msg-list__header:is([class],:not([class])) .selectable-list-header__normal-actions{gap:10px}.msg-list__column-control:is([class],:not([class])){width:32px;height:32px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:8px;flex:none;place-items:center;padding:0;display:inline-grid}.msg-list__column-control:hover:is([class],:not([class])),.msg-list__column-control:focus-visible:is([class],:not([class])){background:var(--control-hover-bg);color:var(--text)}.msg-list__column-control:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.msg-list__column-control:disabled:is([class],:not([class])){cursor:default;opacity:.45}.msg-list__column-control:disabled:hover:is([class],:not([class])){color:var(--muted);background:0 0}.msg-list__filters:is([class],:not([class])){flex:none;align-items:center;gap:4px;display:flex}.msg-list__filters--lead:is([class],:not([class])){flex:1 1 0;min-width:0}.msg-list__filters--icons .msg-list__filter:is([class],:not([class])){place-items:center;width:34px;padding:0;display:inline-grid}.msg-list__filter:is([class],:not([class])){border:1px solid var(--border);color:var(--muted);min-height:34px;font:inherit;cursor:pointer;white-space:nowrap;box-shadow:none;background:0 0;border-radius:6px;padding:0 12px;font-size:14px;font-weight:600;line-height:1}.msg-list__filter:hover:where(:not(:disabled)):is([class],:not([class])){background:var(--control-hover-bg);color:var(--text);border-color:color-mix(in srgb, var(--border) 70%, var(--text))}.msg-list__filter.is-active:is([class],:not([class])){background:var(--accent);color:#fff;border-color:color-mix(in srgb, var(--accent) 80%, #000);box-shadow:0 1px 2px #00000029}.msg-list__filter:disabled:is([class],:not([class])),.msg-list__refresh:disabled:is([class],:not([class])){cursor:default;opacity:.5}.msg-list__refresh:is([class],:not([class])){color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:8px;flex-shrink:0;place-items:center;width:34px;height:34px;display:grid}.msg-list__refresh:hover:where(:not(:disabled)):is([class],:not([class])){background:var(--control-hover-bg);color:var(--text)}.msg-list__filter:focus-visible:is([class],:not([class])),.msg-list__refresh:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.is-spinning:is([class],:not([class])){animation:1.2s linear infinite msg-spin}@keyframes msg-spin{to{transform:rotate(360deg)}}.msg-list__scroller:is([class],:not([class])){contain:strict;will-change:scroll-position;outline:none;min-height:0;position:relative;overflow:hidden auto}.msg-list__scroller:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:-2px}.msg-list__loader:is([class],:not([class])){z-index:2;background:var(--panel);color:var(--muted);flex-direction:column;justify-content:center;align-items:center;gap:10px;font-size:13px;display:flex;position:absolute;inset:0}.msg-list__loader p:is([class],:not([class])){margin:0}.msg-list__items:is([class],:not([class])){width:100%;margin:0;padding:0;list-style:none;position:relative}.msg-list__item--placeholder:is([class],:not([class])){border-bottom:1px solid var(--border-soft);padding:10px 14px 10px 22px}.msg-list__skeleton:is([class],:not([class])){flex-direction:column;justify-content:center;gap:6px;height:100%;display:flex}.msg-list__skel-line:is([class],:not([class])){background:linear-gradient(90deg, color-mix(in srgb, var(--text) 6%, transparent) 0%, color-mix(in srgb, var(--text) 12%, transparent) 50%, color-mix(in srgb, var(--text) 6%, transparent) 100%);background-size:200% 100%;border-radius:4px;height:10px;animation:1.4s linear infinite skel-shimmer}.msg-list__skel-line--from:is([class],:not([class])){width:35%}.msg-list__skel-line--subject:is([class],:not([class])){width:75%}.msg-list__skel-line--preview:is([class],:not([class])){width:90%;height:8px}@keyframes skel-shimmer{to{background-position:-200% 0}}.msg-list__coverage:is([class],:not([class])){border-bottom:1px solid var(--border-soft);color:var(--muted);margin:0;padding:6px 14px;font-size:12px}.msg-list__coverage.is-idle:is([class],:not([class])){border:0;height:0;padding:0;overflow:hidden}.msg-list__placeholder:is([class],:not([class])){color:var(--muted);text-align:center;flex-direction:column;align-items:center;gap:10px;margin:0;padding:32px 24px;font-size:13px;display:flex}.msg-list__placeholder p:is([class],:not([class])){margin:0}.selectable-list-header:is([class],:not([class])){min-height:var(--selectable-list-header-min-height,57px);padding:var(--selectable-list-header-padding,11px 12px);border-bottom:1px solid var(--border,#e3e6ee);align-items:center;gap:10px;display:flex}.selectable-list-header__select-all:is([class],:not([class])){cursor:pointer;flex:0 0 34px;place-items:center;width:34px;height:34px;display:grid}.selectable-list-header__select-all.is-disabled:is([class],:not([class])){cursor:default;opacity:.72}.selectable-list-header__select-all input:is([class],:not([class])){width:14px;height:14px;accent-color:var(--accent);cursor:pointer;margin:0}.selectable-list-header__select-all input:disabled:is([class],:not([class])){cursor:default}.selectable-list-header__selection-actions:is([class],:not([class])),.selectable-list-header__normal-actions:is([class],:not([class])){flex:auto;align-items:center;min-width:0;display:flex}.selectable-list-header__selection-actions:is([class],:not([class])){gap:4px;margin-inline-start:8px}.selectable-list-header__count:is([class],:not([class])){color:var(--muted,#6b7388);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-size:11px}.selectable-list-header__clear:is([class],:not([class])){width:34px;height:34px;color:var(--muted,#6b7388);cursor:pointer;background:0 0;border:0;border-radius:8px;place-items:center;padding:0;display:inline-grid}.selectable-list-header__clear:hover:is([class],:not([class])),.selectable-list-header__clear:focus-visible:is([class],:not([class])){background:var(--control-hover-bg);color:var(--text,#1a1d24)}.selectable-list-header__clear:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.msg-list__bulk-action:is([class],:not([class])){color:var(--muted);cursor:pointer;width:34px;height:34px;font:inherit;background:0 0;border:0;border-radius:8px;flex-shrink:0;place-items:center;padding:0;display:inline-grid}.msg-list__bulk-action:hover:where(:not(:disabled)):is([class],:not([class])){background:var(--control-hover-bg);color:var(--text)}.msg-list__bulk-action:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.msg-list__bulk-action>svg:is([class],:not([class])){fill:none;stroke:currentColor}.msg-list__bulk-action--danger:hover:where(:not(:disabled)):is([class],:not([class])){background:var(--error-bg);color:var(--error-fg)}.msg-list__bulk-action--starred:is([class],:not([class])),.msg-list__bulk-action--starred:hover:is([class],:not([class])){color:var(--folder-icon-color)}.msg-list__bulk-action--starred>svg:is([class],:not([class])){fill:#facc15}.msg-list__bulk-action--whitelist:is([class],:not([class])){background:var(--accent);color:#fff;border:1px solid color-mix(in srgb, var(--accent) 80%, #000);white-space:nowrap;border-radius:6px;justify-content:center;align-items:center;width:auto;margin-inline-end:6px;padding:0 12px;font-size:14px;font-weight:600;line-height:1.25;transition:filter .12s,box-shadow .12s;display:inline-flex;box-shadow:0 1px 2px #00000029}.msg-list__bulk-action--whitelist:hover:is([class],:not([class])){background:var(--accent);color:#fff;filter:brightness(1.04);box-shadow:0 2px 5px #0000002e}.msg-list__bulk-action--whitelist:disabled:is([class],:not([class])),.msg-list__bulk-action--whitelist:disabled:hover:is([class],:not([class])){opacity:.5;filter:none;background:var(--accent);color:#fff}.msg-list__bulk-icon--folder:is([class],:not([class])){width:20px;height:20px;display:block}.msg-list__bulk-icon--folder:is([class],:not([class])) svg{width:100%;height:100%;display:block}.msg-list__bulk-icon--folder:is([class],:not([class])) [fill=context-fill]{fill:color-mix(in srgb, currentColor 20%, transparent)}.msg-list__bulk-icon--folder:is([class],:not([class])) [fill=context-stroke]{fill:currentColor}.msg-list__more:is([class],:not([class])){flex:none}.msg-list__more-trigger:is([class],:not([class])){width:32px;height:32px;color:var(--muted);border-radius:8px;place-items:center;display:inline-grid}.msg-list__more-trigger:is([class],:not([class])):after{content:none}.msg-list__more-trigger:hover:is([class],:not([class])),.msg-list__more-trigger:focus-visible:is([class],:not([class])),.msg-list__more[open]>.msg-list__more-trigger:is([class],:not([class])){background:var(--control-hover-bg);color:var(--text)}.msg-list__more-trigger:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.msg-list__more-menu:is([class],:not([class])){min-width:200px;left:auto;right:0}.msg-list__more-separator:is([class],:not([class])){background:var(--border-soft);height:1px;margin:4px 2px}.msg-list__more-heading:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.msg-list__more-item:is([class],:not([class])){width:100%}.msg-list__more-item:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:-2px}.msg-list__more-item[aria-disabled=true]:is([class],:not([class])){opacity:.5;cursor:default}.msg-list__more-item--danger:is([class],:not([class])){color:#ff6b6b}.msg-list__more-icon:is([class],:not([class])){width:20px;height:20px;color:var(--muted);place-items:center;display:grid}.msg-list__more-item--danger .msg-list__more-icon:is([class],:not([class])){color:inherit}.msg-list__more-icon-raw:is([class],:not([class])){width:20px;height:20px;display:block}.msg-list__more-icon-raw:is([class],:not([class])) svg{width:100%;height:100%;display:block}.msg-list__more-icon-raw:is([class],:not([class])) [fill=context-fill]{fill:color-mix(in srgb, currentColor 20%, transparent)}.msg-list__more-icon-raw:is([class],:not([class])) [fill=context-stroke]{fill:currentColor}.msg-list__more-label:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.msg-list__items li.is-focused .msg-list__item:is([class],:not([class])){background:var(--rowActive)}.msg-list__items li.is-selected .msg-list__item:is([class],:not([class])){background:color-mix(in srgb, var(--accent) 6%, var(--panel))}.msg-list__items li.is-selected.is-focused .msg-list__item:is([class],:not([class])){background:var(--rowActive)}.msg-list__items li.is-dragging .msg-list__item:is([class],:not([class])){opacity:.55}.msg-list__items li.is-unread .msg-list__from:is([class],:not([class])),.msg-list__items li.is-unread .msg-list__subject:is([class],:not([class])){color:var(--text);font-weight:600}.msg-list__item:is([class],:not([class])){text-align:left;cursor:pointer;border:0;border-bottom:1px solid var(--border-soft);width:100%;height:100%;font:inherit;color:inherit;-webkit-user-select:none;user-select:none;background:0 0;grid-template-columns:34px 34px minmax(0,1fr);align-items:center;column-gap:10px;padding:7px 14px 7px 12px;transition:background 60ms;display:grid;position:relative}.msg-list__item:hover:is([class],:not([class])),.msg-list__item:focus-within:is([class],:not([class])),.msg-list__item.has-tag-menu:is([class],:not([class])){background:var(--rowHover)}.msg-list__scroller:focus-visible .is-cursor .msg-list__item:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:-2px}.msg-list__open:is([class],:not([class])){cursor:pointer;background:0 0;border:0;border-radius:0;width:100%;height:100%;padding:0;position:absolute;inset:0}.msg-list__state:is([class],:not([class])),.msg-list__avatar:is([class],:not([class])),.msg-list__content:is([class],:not([class])){pointer-events:none}.msg-list__check:is([class],:not([class])),.msg-list__content [data-row-tags]:is([class],:not([class])){pointer-events:auto}.msg-list__content:is([class],:not([class])){min-width:0}.msg-list__open:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:-2px}.msg-list__action:focus-visible:is([class],:not([class])),.msg-list__check input:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.msg-list__item.has-tag-menu .msg-list__action--tag:is([class],:not([class])),.msg-list__item:focus-within .msg-list__action--tag:is([class],:not([class])){visibility:visible}.msg-list__item:focus-within .msg-list__check:is([class],:not([class])){opacity:1}.msg-list__item:focus-within .msg-list__unread-dot:is([class],:not([class])){opacity:0}.msg-list__actions:is([class],:not([class])){inset-inline-end:0;pointer-events:none;align-items:center;gap:2px;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.msg-list__action:is([class],:not([class])){width:34px;height:28px;color:var(--muted);cursor:pointer;font:inherit;visibility:hidden;pointer-events:auto;background:0 0;border:0;border-radius:6px;flex-shrink:0;place-items:center;padding:0;display:inline-grid;position:relative}.msg-list__action--starred:is([class],:not([class])),.msg-list__action--tag.is-tagged:is([class],:not([class])){visibility:visible}.msg-list__action--tag:is([class],:not([class])){width:auto;min-width:34px;padding:0 6px}@media (width>=640px){.msg-list__item--hover-actions.has-tag-menu .msg-list__content:is([class],:not([class])),.msg-list__item--hover-actions.has-tag-menu .msg-list__summary:is([class],:not([class])),.msg-list__item--hover-actions.has-tag-menu .msg-list__actions:is([class],:not([class])),.msg-list__item--hover-actions:focus-within .msg-list__content:is([class],:not([class])),.msg-list__item--hover-actions:focus-within .msg-list__summary:is([class],:not([class])),.msg-list__item--hover-actions:focus-within .msg-list__actions:is([class],:not([class])),.msg-list__item--hover-actions:hover .msg-list__content:is([class],:not([class])),.msg-list__item--hover-actions:hover .msg-list__summary:is([class],:not([class])),.msg-list__item--hover-actions:hover .msg-list__actions:is([class],:not([class])){background:inherit}.msg-list__item--hover-actions:focus-within .msg-list__action:is([class],:not([class])),.msg-list__item--hover-actions:hover .msg-list__action:is([class],:not([class])){visibility:visible}}@media (width<=639px){.msg-list__actions:is([class],:not([class])){inset-inline-end:72px}.msg-list__action--star:is([class],:not([class])){visibility:visible}.msg-list__action:not(.msg-list__action--star,.msg-list__action--tag):is([class],:not([class])){display:none}}.msg-list__action:hover:where(:not(:disabled)):is([class],:not([class])){background:var(--control-hover-bg);color:var(--text)}.msg-list__action--starred:is([class],:not([class])),.msg-list__action--starred:hover:is([class],:not([class])){color:var(--folder-icon-color)}.msg-list__action--danger:hover:where(:not(:disabled)):is([class],:not([class])){background:var(--error-bg);color:var(--error-fg)}.msg-list__action-icon--folder:is([class],:not([class])){width:20px;height:20px;display:block}.msg-list__action-icon--folder:is([class],:not([class])) svg{width:100%;height:100%;display:block}.msg-list__action-icon--folder:is([class],:not([class])) [fill=context-fill]{fill:color-mix(in srgb, currentColor 20%, transparent)}.msg-list__action-icon--folder:is([class],:not([class])) [fill=context-stroke]{fill:currentColor}.msg-list__state:is([class],:not([class])){place-items:center;width:34px;height:34px;display:grid;position:relative}.msg-list__check:is([class],:not([class])){cursor:pointer;opacity:0;border-radius:6px;place-items:center;transition:opacity 80ms;display:grid;position:absolute;inset:0}.msg-list__check input:is([class],:not([class])){cursor:pointer;width:14px;height:14px;accent-color:var(--accent);margin:0}.msg-list__unread-dot:is([class],:not([class])){background:var(--accent);pointer-events:none;border-radius:50%;width:7px;height:7px;transition:opacity 80ms;display:block}.msg-list__item:hover .msg-list__check:is([class],:not([class])),.msg-list__items li.is-selected .msg-list__check:is([class],:not([class])){opacity:1}.msg-list__item:hover .msg-list__unread-dot:is([class],:not([class])),.msg-list__items li.is-selected .msg-list__unread-dot:is([class],:not([class])){opacity:0}.msg-list__items li.is-unselectable .msg-list__item:hover .msg-list__unread-dot:is([class],:not([class])){opacity:1}.msg-list__avatar:is([class],:not([class])){color:#fff;letter-spacing:.02em;border-radius:999px;place-items:center;width:34px;height:34px;font-size:11px;font-weight:700;display:grid;position:relative;overflow:hidden;box-shadow:inset 0 0 0 1px #ffffff38}.msg-list__avatar-image:is([class],:not([class])){object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.msg-list__summary:is([class],:not([class])){grid-template-columns:clamp(86px,28%,200px) minmax(0,1fr) auto auto;grid-template-areas:"from subject icons date";align-items:baseline;column-gap:8px;display:grid}.msg-list__item--hover-actions .msg-list__summary:is([class],:not([class])){grid-template-columns:clamp(86px,28%,200px) minmax(0,1fr) auto 56px 34px 64px;grid-template-areas:"from subject icons tag star date";position:relative}.msg-list__item--hover-actions .msg-list__date:is([class],:not([class])){text-align:end}.msg-list__from:is([class],:not([class])){min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;grid-area:from;font-size:13px;overflow:hidden}.msg-list__date:is([class],:not([class])){color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;grid-area:date;font-size:11px}.msg-list__subject:is([class],:not([class])){min-width:0;color:var(--text);text-align:left;text-overflow:ellipsis;white-space:nowrap;grid-area:subject;font-size:13px;overflow:hidden}.msg-list__icons:is([class],:not([class])){color:var(--muted);grid-area:icons;align-items:center;gap:4px;min-width:0;display:inline-flex}.msg-list__star:is([class],:not([class])){color:var(--folder-icon-color);fill:#facc15}.msg-list__preview:is([class],:not([class])){color:var(--muted);-webkit-line-clamp:1;-webkit-box-orient:vertical;margin:4px 0 0;font-size:12px;line-height:1.35;display:-webkit-box;overflow:hidden}.msg-list--card .msg-list__item:is([class],:not([class])){grid-template-columns:24px 34px minmax(0,1fr);align-items:start;column-gap:9px;padding:10px 12px}.msg-list--card .msg-list__state:is([class],:not([class])){width:24px}.msg-list--card .msg-list__summary:is([class],:not([class])){grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:"from icons date""subject subject subject";row-gap:2px}.msg-list--card .msg-list__item--hover-actions .msg-list__summary:is([class],:not([class])){grid-template-columns:minmax(0,1fr) auto 56px 34px 64px;grid-template-areas:"from icons tag star date""subject subject subject subject subject"}.msg-list--card .msg-list__actions:is([class],:not([class])){top:9px}.msg-list--card .msg-list__action:focus-visible:is([class],:not([class])){outline:none}.msg-list--card .msg-list__action:focus-visible:is([class],:not([class])):after{content:"";border:2px solid var(--accent);pointer-events:none;border-radius:4px;position:absolute;inset:4px 0}.msg-list--card .msg-list__from:is([class],:not([class])),.msg-list--card .msg-list__subject:is([class],:not([class])){font-size:13px}.msg-list--card .msg-list__subject:is([class],:not([class])){-webkit-line-clamp:2;white-space:normal;overflow-wrap:anywhere;-webkit-box-orient:vertical;line-height:1.3;display:-webkit-box}.msg-list--card .msg-list__preview:is([class],:not([class])){-webkit-line-clamp:1;margin-top:3px}@media (width<=639px){.msg-list__check:is([class],:not([class])){opacity:1}.msg-list__unread-dot:is([class],:not([class])){opacity:0}}.tag-stack:is([class],:not([class])){--tag-stack-base:var(--lightningcss-light,#fff)var(--lightningcss-dark,#000);align-items:center;gap:3px;line-height:1;display:inline-flex}html.dark .tag-stack{--tag-stack-base:black}html.light .tag-stack{--tag-stack-base:white}.tag-stack__icon:is([class],:not([class])){flex:none;display:block;position:relative}.tag-stack__icon+.tag-stack__icon:is([class],:not([class])){margin-inline-start:-14px}.tag-stack__body:is([class],:not([class])){fill:color-mix(in srgb, var(--tag-stack-base) 50%, var(--tag-color,currentColor))}.tag-stack__icon--empty .tag-stack__body:is([class],:not([class])){fill:none}.tag-stack__outline:is([class],:not([class])){fill:var(--tag-color,currentColor)}.tag-stack__more:is([class],:not([class])){color:var(--text);font-size:11px;font-weight:700}.tag-chip:is([class],:not([class])){--tag-color:var(--muted,#6b7388);border:1px solid color-mix(in srgb, var(--tag-color) 45%, transparent);background:color-mix(in srgb, var(--tag-color) 14%, transparent);min-width:0;max-width:100%;height:18px;color:var(--text);white-space:nowrap;vertical-align:middle;border-radius:999px;align-items:center;font-size:11px;line-height:1;display:inline-flex}.tag-chip--undefined:is([class],:not([class])){border-style:dashed}.tag-chip__body:is([class],:not([class])){border-radius:inherit;min-width:0;height:100%;color:inherit;font:inherit;background:0 0;border:0;align-items:center;gap:5px;padding:0 7px 0 6px;display:inline-flex}.tag-chip__dot:is([class],:not([class])){background:var(--tag-color);border-radius:50%;flex:none;width:7px;height:7px}.tag-chip__name:is([class],:not([class])){text-overflow:ellipsis;min-width:0;overflow:hidden}.tag-chip--removable .tag-chip__body:is([class],:not([class])){padding-inline-end:3px}.tag-chip__remove:is([class],:not([class])){width:16px;height:16px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:50%;place-items:center;margin-inline-end:1px;padding:0;display:inline-grid}.tag-chip__remove:hover:is([class],:not([class])){background:color-mix(in srgb, var(--text) 12%, transparent);color:var(--text)}.tag-chip__remove:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:0}.tag-picker:is([class],:not([class])){min-width:220px;max-height:inherit;gap:2px;display:grid;overflow-y:auto}.tag-picker__item:is([class],:not([class])){--tag-color:var(--muted);grid-template-columns:20px 10px 1fr auto;column-gap:8px;width:100%}.tag-picker__item:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:-2px}.tag-picker__item[aria-checked=true]:is([class],:not([class])){font-weight:500}.tag-picker__check:is([class],:not([class])){width:20px;height:20px;color:var(--accent);place-items:center;display:grid}.tag-picker__manage .tag-picker__check:is([class],:not([class])){color:var(--muted)}.tag-picker__manage:is([class],:not([class])){grid-template-columns:20px 1fr}.tag-picker__clear:is([class],:not([class])){grid-template-columns:20px 1fr auto}.tag-picker__clear .tag-picker__check:is([class],:not([class])){color:var(--muted)}.tag-picker__dot:is([class],:not([class])){background:var(--tag-color);border-radius:50%;width:10px;height:10px}.tag-picker__item--undefined .tag-picker__dot:is([class],:not([class])){border:1.5px dashed var(--muted);background:0 0}.tag-picker__name:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.tag-picker__digit:is([class],:not([class])){box-sizing:border-box;border:1px solid var(--border);background:color-mix(in srgb, var(--text) 6%, transparent);min-width:20px;height:20px;font:inherit;font-variant-numeric:tabular-nums;color:var(--text);border-radius:4px;place-items:center;padding:0 5px;font-size:12px;font-weight:600;line-height:1;display:inline-grid}.tag-picker__separator:is([class],:not([class])){background:var(--border-soft);height:1px;margin:2px}.tag-picker__heading:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tag-picker__empty:is([class],:not([class])){color:var(--muted);margin:0;padding:8px;font-size:12px}.tag-picker-dropdown:is([class],:not([class])){flex:none}.tag-picker-dropdown__trigger:is([class],:not([class])):after{content:none}.tag-picker-dropdown__trigger:is([class],:not([class])){width:34px;height:34px;color:var(--muted);border-radius:8px;place-items:center;display:inline-grid}.tag-picker-dropdown:not(.app-dropdown--disabled)>.tag-picker-dropdown__trigger:hover:is([class],:not([class])),.tag-picker-dropdown[open]>.tag-picker-dropdown__trigger:is([class],:not([class])){background:var(--control-hover-bg);color:var(--text)}.tag-picker-dropdown__trigger:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.tag-picker-dropdown__menu:is([class],:not([class])){flex-direction:column;min-width:240px;max-height:calc(100vh - 140px);display:flex;overflow:hidden}.tag-picker-dropdown__menu>:is([class],:not([class])) .tag-picker{min-height:0}.tag-picker-dropdown__menu--end:is([class],:not([class])){left:auto;right:0}.tag-picker-popover:is([class],:not([class])){z-index:40;flex-direction:column;display:flex;overflow:hidden}.tag-picker-popover>:is([class],:not([class])) .tag-picker{min-height:0}.message-view:is([class],:not([class])){background:var(--panel);grid-template-rows:1fr;min-width:0;height:100%;min-height:0;display:grid}.message-view__article:is([class],:not([class])){--message-content-inset:20px;--message-content-trailing-inset:16px;--message-html-edge-inset:8px;--message-toolbar-edge-inset:12px;--message-header-label-width:56px;flex-direction:column;width:100%;min-width:0;min-height:0;display:flex;overflow:hidden}.message-view__empty:is([class],:not([class])){height:100%;min-height:0;color:var(--muted);flex:auto;place-items:center;display:grid}.message-view__header:is([class],:not([class])){min-width:0;min-height:57px;padding:11px var(--message-toolbar-edge-inset);border-bottom:1px solid var(--border);flex-wrap:wrap;flex:none;justify-content:flex-start;align-items:center;gap:6px;display:flex;overflow:hidden;container-type:inline-size}@container (width<=279px){.message-view__header .message-view__action:is([class],:not([class])){flex-basis:28px;width:28px;margin-left:-4px;margin-right:-4px}}.message-view__details:is([class],:not([class])){min-width:0;padding:12px var(--message-content-trailing-inset) 12px var(--message-content-inset);border-bottom:1px solid var(--border-soft);background:color-mix(in srgb, var(--panel) 92%, var(--panel2));flex:none}.message-view__details-toggle:is([class],:not([class])){top:4px;right:var(--message-content-trailing-inset);position:absolute}.message-view__details-toggle[aria-expanded=true]:is([class],:not([class])) svg{transform:rotate(180deg)}.message-view__scheduled:is([class],:not([class])){min-width:0;padding:10px var(--message-content-trailing-inset) 10px var(--message-content-inset);border-bottom:1px solid var(--border-soft);background:color-mix(in srgb, var(--accent) 12%, var(--panel));color:var(--text);flex:none;align-items:center;gap:10px;font-size:13px;display:flex}.message-view__scheduled-text:is([class],:not([class])){flex:auto;min-width:0}.message-view__scheduled-cancel:is([class],:not([class])){border:1px solid color-mix(in srgb, var(--accent) 55%, var(--border));background:var(--panel);color:var(--text);white-space:nowrap;cursor:pointer;border-radius:6px;flex:none;padding:5px 12px;font-size:13px;font-weight:600;transition:background .12s}.message-view__scheduled-cancel:hover:is([class],:not([class])){background:var(--rowHover)}.message-view__scheduled-cancel:disabled:is([class],:not([class])){opacity:.5;cursor:default}.message-view__metadata:is([class],:not([class])){grid-template-columns:var(--message-header-label-width) minmax(0, 1fr);gap:7px 12px;min-width:0;margin:0;font-size:13px;display:grid}.message-view__metadata-row:is([class],:not([class])){display:contents}.message-view__metadata dt:is([class],:not([class])){color:var(--muted);text-align:left;font-weight:600}.message-view__metadata dd:is([class],:not([class])){min-width:0;color:var(--text);overflow-wrap:anywhere;white-space:normal;margin:0}.message-view__title h2:is([class],:not([class])){overflow-wrap:anywhere;white-space:normal;margin:0;font-size:14px;font-weight:600}.message-view__date:is([class],:not([class])){font-variant-numeric:tabular-nums}.message-view__tags:is([class],:not([class])){flex-wrap:wrap;align-items:center;gap:4px 6px;display:flex}.message-view__header .message-view__action--tags:is([class],:not([class])){flex:none;width:auto;min-width:34px;padding:0 6px}.message-view__action--whitelist:is([class],:not([class])){background:var(--accent);color:#fff;border:1px solid color-mix(in srgb, var(--accent) 80%, #000);white-space:nowrap;border-radius:6px;justify-content:center;align-items:center;width:auto;margin-inline-end:10px;padding:0 12px;font-size:14px;font-weight:600;line-height:1.25;transition:filter .12s,box-shadow .12s;display:inline-flex;box-shadow:0 1px 2px #00000029}.message-view__action--whitelist:hover:is([class],:not([class])){background:var(--accent);color:#fff;filter:brightness(1.04);box-shadow:0 2px 5px #0000002e}.message-view__action--whitelist:disabled:is([class],:not([class])),.message-view__action--whitelist:disabled:hover:is([class],:not([class])){opacity:.5;filter:none;background:var(--accent);color:#fff}.message-view__action--back:is([class],:not([class])){margin-right:12px}.message-view__view-actions:is([class],:not([class])){gap:6px;margin-left:auto;display:flex}.message-view__action--view-mode[aria-pressed=true]:is([class],:not([class])){background:var(--control-hover-bg);color:var(--text);box-shadow:inset 0 0 0 1px var(--control-hover-border)}.message-view__toolbar-icon:is([class],:not([class])){fill:none;stroke:currentColor;shape-rendering:geometricprecision;width:18px;height:18px;display:block}.message-view__toolbar-icon--shape:is([class],:not([class])){fill:currentColor;stroke:none;width:20px;height:20px}.message-view__toolbar-icon--shape:is([class],:not([class])) svg{width:100%;height:100%;display:block}.message-view__toolbar-icon--shape:is([class],:not([class])) [fill=context-fill]{fill:#0000}.message-view__toolbar-icon--shape:is([class],:not([class])) [fill=context-stroke]{fill:currentColor}.message-view__toolbar-icon--folder:is([class],:not([class])){fill:none;stroke:none;width:20px;height:20px}.message-view__toolbar-icon--folder:is([class],:not([class])) svg{width:100%;height:100%;display:block}.message-view__toolbar-icon--folder:is([class],:not([class])) [fill=context-fill]{fill:color-mix(in srgb, currentColor 20%, transparent)}.message-view__toolbar-icon--folder:is([class],:not([class])) [fill=context-stroke]{fill:currentColor}.message-view__body:is([class],:not([class])){flex:0 auto;min-width:0;min-height:0;padding:18px 0 0;overflow:hidden auto}.message-view__html-shell:is([class],:not([class])){margin-left:var(--message-html-edge-inset);margin-right:var(--message-html-edge-inset)}.message-view__html-frame:is([class],:not([class])){background:var(--panel);border:0;width:100%;min-height:120px;display:block}.message-view__text:is([class],:not([class])){padding:0 22px 18px var(--message-content-inset);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text);margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;line-height:1.55}.message-view__text:is([class],:not([class])) a{color:var(--accent)}.message-view__text:is([class],:not([class])) blockquote.pt-quote{border-inline-start:2px solid #729fcf;margin:1ex 0;padding:.4ex 1ex}.message-view__text:is([class],:not([class])) blockquote.pt-quote--l2{border-inline-start-color:#ad7fa8}.message-view__text:is([class],:not([class])) blockquote.pt-quote--l3{border-inline-start-color:#8ae234}.message-view__text:is([class],:not([class])) blockquote.pt-quote--l4{border-inline-start-color:#fcaf3e}.message-view__text:is([class],:not([class])) blockquote.pt-quote--l5{border-inline-start-color:#e9b96e}.message-view__placeholder:is([class],:not([class])){color:var(--muted);margin:0;padding:0 22px 18px}@media (width<=639px){.message-view__article:is([class],:not([class])){--message-content-inset:5px;--message-content-trailing-inset:5px;--message-html-edge-inset:5px;--message-toolbar-edge-inset:5px;--message-body-min-height:min(48px, calc(var(--message-view-height,var(--app-viewport-height,100vh)) * .15))}.message-view__details:is([class],:not([class])){--message-details-height:calc(var(--message-view-height,var(--app-viewport-height,100vh)) - var(--message-toolbar-height,0px) - var(--message-banner-height,0px) - var(--message-attachment-bar-height,0px) - var(--message-body-min-height));min-height:42px;max-height:max(42px, var(--message-details-height));padding-block:6px;padding-right:calc(var(--message-content-trailing-inset) + 38px);flex:none;display:flex;position:relative}.message-view__details--expanded:is([class],:not([class])){max-height:max(42px, min(calc(var(--message-view-height,var(--app-viewport-height,100vh)) * .25), var(--message-details-height)))}.message-view__metadata:is([class],:not([class])){flex:auto;min-height:0;overflow-y:auto}.message-view__metadata:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:-2px}.message-view__body:is([class],:not([class])){min-height:var(--message-body-min-height)}}.message-attachment-bar:is([class],:not([class])){--attachment-list-padding:8px;min-width:0;max-height:max(calc(var(--message-view-height,var(--app-viewport-height)) * .2), calc(var(--attachment-heading-height) + var(--attachment-first-row-height) + var(--attachment-list-padding) + 1px));border-top:1px solid var(--border-soft);background:color-mix(in srgb, var(--panel) 96%, var(--panel2));flex-direction:column;flex:none;display:flex;overflow:hidden;container:message-attachments/inline-size}.message-attachment-bar:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:-2px}.message-attachment-bar__heading:is([class],:not([class])){padding-right:var(--message-content-trailing-inset);flex:none;align-items:center;gap:4px;display:flex}.message-attachment-bar h3:is([class],:not([class])){min-width:0;padding:9px 0 5px var(--message-content-inset);color:var(--muted);flex:auto;margin:0;font-size:12px;font-weight:600}.message-attachment-bar__toggle:is([class],:not([class])){height:24px;color:var(--muted);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:4px;flex:none;align-items:center;gap:4px;padding:0 4px;font-size:12px;display:inline-flex}.message-attachment-bar__toggle:hover:is([class],:not([class])){background:var(--control-hover-bg);color:var(--text)}.message-attachment-bar__toggle:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:1px}.message-attachment-bar__list:is([class],:not([class])){min-height:0;padding:0 8px var(--attachment-list-padding);flex:0 auto;margin:0;list-style:none;overflow-y:auto}.message-attachment-bar--collapsed .message-attachment-bar__list:is([class],:not([class])){max-height:calc(var(--attachment-first-row-height) + var(--attachment-list-padding));overflow-y:hidden}.message-attachment-row--collapsed:is([class],:not([class])){visibility:hidden}.message-attachment-row:is([class],:not([class])){border-radius:6px;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;min-width:0;padding:5px 8px;display:grid}.message-attachment-row:hover:is([class],:not([class])){background:var(--rowHover)}.message-attachment-row__icon:is([class],:not([class])){color:var(--muted)}.message-attachment-row__pdf-link:is([class],:not([class])){height:30px;color:var(--muted);white-space:nowrap;border-radius:8px;flex:none;align-items:center;gap:4px;padding:0 6px;font-size:12px;text-decoration:none;display:inline-flex}.message-attachment-row__pdf-link:hover:is([class],:not([class])){background:var(--control-hover-bg);color:var(--text)}.message-attachment-row__pdf-link:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.message-attachment-row__pdf-link--disabled:is([class],:not([class])),.message-attachment-row__pdf-link--disabled:hover:is([class],:not([class])){color:var(--muted);opacity:.35;pointer-events:none;background:0 0}.message-attachment-row__description:is([class],:not([class])){flex-wrap:wrap;gap:2px 8px;min-width:0;display:flex}.message-attachment-row__name:is([class],:not([class])){min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;overflow:hidden}.message-attachment-row__metadata:is([class],:not([class])),.message-attachment-row__status:is([class],:not([class])),.message-attachment-row__error:is([class],:not([class])){color:var(--muted);font-size:12px}.message-attachment-row__status:is([class],:not([class])),.message-attachment-row__error:is([class],:not([class])){flex-basis:100%}.message-attachment-row__error:is([class],:not([class])){color:#d95757}.message-attachment-row__actions:is([class],:not([class])){align-items:center;display:flex}.message-attachment-row__actions:is([class],:not([class])) .app-icon-button{flex-basis:30px;width:30px;height:30px}.message-attachment-row__actions:is([class],:not([class])) .message-attachment-row__preview-action{white-space:nowrap;flex-basis:auto;align-items:center;gap:4px;width:auto;padding:0 6px;font-size:12px;display:inline-flex}@container message-attachments (width<=419px){.message-attachment-row:has(.message-attachment-row__preview-action,.message-attachment-row__pdf-link):is([class],:not([class])){grid-template-columns:auto minmax(0,1fr);row-gap:4px}.message-attachment-row:has(.message-attachment-row__preview-action,.message-attachment-row__pdf-link)>.message-attachment-row__actions:is([class],:not([class])){flex-wrap:wrap;grid-column:2}}.message-attachment-row__spinner:is([class],:not([class])){animation:.9s linear infinite message-attachment-spin}@keyframes message-attachment-spin{to{transform:rotate(360deg)}}.compose-dock:is([class],:not([class])){z-index:51;flex-direction:row-reverse;align-items:flex-end;gap:8px;max-width:calc(100vw - 32px);display:flex;position:fixed;bottom:0;right:16px;overflow-x:auto}.compose-dock__item:is([class],:not([class])){border:2px solid var(--compose-dock-outline);background:var(--surface,#fff);--compose-dock-outline:color-mix(in srgb, var(--accent,#1373d9) 75%, var(--surface,#fff));border-bottom:0;border-radius:10px 10px 0 0;align-items:center;width:min(260px,100vw - 32px);min-height:40px;display:flex;box-shadow:0 -6px 22px #00000047}.compose-dock__restore:is([class],:not([class])),.compose-dock__close:is([class],:not([class])){color:inherit;font:inherit;cursor:pointer;background:0 0;border:0}.compose-dock__restore:is([class],:not([class])){text-align:left;flex:1;align-items:center;gap:8px;min-width:0;padding:10px 12px;display:flex}.compose-dock__text:is([class],:not([class])){flex-direction:column;flex:1;min-width:0;line-height:1.25;display:flex}.compose-dock__title:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.compose-dock__status:is([class],:not([class])){color:var(--muted,#6b7280);font-size:12px}.compose-dock__status--failed:is([class],:not([class])),.compose-dock__error:is([class],:not([class])){color:var(--colour-ti-critical,#b3261e)}.compose-dock__error:is([class],:not([class])){font-weight:700}.compose-dock__close:is([class],:not([class])){align-self:stretch;padding:0 12px;font-size:20px}.compose-dock__restore:hover:is([class],:not([class])),.compose-dock__close:hover:is([class],:not([class])){background:#7f7f7f24}.compose-dock__close:disabled:is([class],:not([class])){cursor:not-allowed;opacity:.45}.compose-dock-flight:is([class],:not([class])){z-index:52;box-sizing:border-box;border:2px solid color-mix(in srgb, var(--accent,#1373d9) 75%, var(--surface,#fff));background:color-mix(in srgb, var(--accent,#1373d9) 12%, transparent);opacity:.9;pointer-events:none;border-radius:10px;transition-property:top,left,width,height,opacity;transition-timing-function:cubic-bezier(.2,.7,.2,1);position:fixed}.compose-dock-flight--landing:is([class],:not([class])){opacity:0}.compose-dialog:is([class],:not([class])){z-index:50;background:#0d162a66;grid-template-columns:minmax(0,1fr);place-items:center;display:grid;position:fixed;inset:0}.compose-dialog__card:is([class],:not([class])){border:1px solid var(--modal-border);background:var(--modal-surface);width:min(960px,96vw);height:min(640px,90vh);box-shadow:var(--modal-shadow);border-radius:12px;flex-direction:column;gap:8px;padding:16px;display:flex;position:relative}.compose-dialog--maximized .compose-dialog__card:is([class],:not([class])){box-sizing:border-box;border-radius:0;width:100%;height:100%;min-height:0}.compose-dialog__card header:is([class],:not([class])){justify-content:space-between;align-items:center;gap:8px;display:flex}.compose-dialog__body:is([class],:not([class])){display:contents}.compose-dialog__card header h2:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:0;font-size:16px;overflow:hidden}.compose-dialog__window-actions:is([class],:not([class])){flex-shrink:0;align-items:center;gap:4px;display:flex}.compose-dialog__window-actions .app-icon-button:is([class],:not([class])),.compose-close-menu__trigger:is([class],:not([class])){width:28px;height:28px;color:inherit;flex:0 0 28px}.compose-close-menu__trigger:is([class],:not([class])){cursor:pointer;font:inherit;background:0 0;border:0;border-radius:8px;place-items:center;padding:0;list-style:none;display:inline-grid}.compose-close-menu__trigger:hover:not([aria-disabled=true]):is([class],:not([class])){background:var(--control-hover-bg)}.compose-close-menu__trigger:focus-visible:is([class],:not([class])){outline:2px solid var(--accent);outline-offset:2px}.compose-close-menu__trigger:is([class],:not([class]))::-webkit-details-marker{display:none}.compose-close-menu__menu:is([class],:not([class])){min-width:160px;line-height:normal;top:calc(100% + 1px);left:auto;right:0}.compose-close-menu__menu .app-dropdown__item:disabled:is([class],:not([class])){cursor:not-allowed;opacity:.55}.compose-close-menu__discard:hover:not(:disabled):is([class],:not([class])),.compose-close-menu__discard:focus-visible:is([class],:not([class])){color:#ff6b6b}.compose-dialog__card .row:is([class],:not([class])){font-size:var(--txt-default,.875rem);grid-template-columns:70px 1fr;align-items:center;gap:8px;display:grid}.compose-dialog__card .row label:is([class],:not([class])){color:var(--colour-ti-secondary,var(--text,#111827));font-size:inherit}.compose-dialog__card .row>input:is([class],:not([class])){border:1px solid var(--control-border,#d6d9e2);min-width:0;font:inherit;border-radius:8px;padding:7px 10px}.from-picker:is([class],:not([class])){min-width:0}.from-picker__summary:is([class],:not([class])){border:1px solid var(--control-border,#d6d9e2);background:var(--panel,transparent);border-radius:8px;align-items:center;gap:8px;min-width:0;padding:5px 10px;display:flex}.from-picker__summary:is([class],:not([class])):after{margin-left:auto}.from-picker__summary-text:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.from-picker__menu:is([class],:not([class])){right:0}.from-picker__option:is([class],:not([class])){grid-template-columns:24px 1fr auto}.from-picker__avatar:is([class],:not([class])){color:#fff;border-radius:999px;flex:none;place-items:center;width:24px;height:24px;font-size:10px;font-weight:700;display:grid}.from-picker__summary .from-picker__avatar:is([class],:not([class])){width:20px;height:20px;font-size:9px}.from-picker__lines:is([class],:not([class])){flex-direction:column;min-width:0;display:flex}.from-picker__name:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;font-weight:600;line-height:1.3;overflow:hidden}.from-picker__email:is([class],:not([class])){color:var(--muted,#6b7280);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1.3;overflow:hidden}.from-picker__email--primary:is([class],:not([class])){font-size:inherit;color:inherit;font-weight:600}.from-picker__check:is([class],:not([class])){color:var(--accent,#0060df);flex:none}.compose-dialog__card .row--to:is([class],:not([class])){grid-template-columns:70px 1fr auto}.recipient-cc-toggles:is([class],:not([class])){gap:4px;display:flex}.recipient-toggle:is([class],:not([class])){border:1px solid var(--control-border,#d6d9e2);color:var(--colour-ti-secondary,var(--text,#111827));font:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:4px 8px}.recipient-toggle:hover:is([class],:not([class])){color:var(--text,inherit);border-color:var(--accent,#0060df)}.compose-attachments:is([class],:not([class])){border:1px solid var(--control-border,#d6d9e2);border-radius:8px;max-height:150px;display:grid;overflow-y:auto}.compose-attachment:is([class],:not([class])){justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:8px 10px;display:flex}.compose-attachment+.compose-attachment:is([class],:not([class])){border-top:1px solid var(--border,#d6d9e2)}.compose-attachment__details:is([class],:not([class])){gap:2px;min-width:0;display:grid}.compose-attachment__name:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;font-size:var(--txt-default,.875rem);overflow:hidden}.compose-attachment__meta:is([class],:not([class])),.compose-attachment__error:is([class],:not([class])),.compose-attachment__progress:is([class],:not([class])){font-size:var(--txt-small,.75rem)}.compose-attachment__meta:is([class],:not([class])){color:var(--colour-ti-secondary,var(--muted,#6b7280))}.compose-attachment__error:is([class],:not([class])){color:var(--colour-ti-warning,#8a4b00)}.compose-attachment__progress:is([class],:not([class])){align-items:center;gap:8px;display:flex}.compose-attachment__progress progress:is([class],:not([class])){width:min(220px,40vw)}.compose-attachment__actions:is([class],:not([class])){flex:none;gap:4px;display:flex}.compose-attachment__action:is([class],:not([class])){border:1px solid var(--control-border,#d6d9e2);width:32px;height:32px;color:inherit;border-radius:7px;flex-basis:32px}.compose-attachment__action:hover:is([class],:not([class])){border-color:var(--accent,#0060df)}.compose-dialog__card footer:is([class],:not([class])){justify-content:flex-end;align-items:center;gap:8px;display:flex}.compose-send-split:is([class],:not([class])){align-items:stretch;gap:0;display:inline-flex;position:relative}.compose-send-split .compose-schedule-menu:is([class],:not([class])){position:static}.compose-schedule-menu__trigger:is([class],:not([class])){z-index:1;background:var(--colour-primary-default,var(--accent,#0060df));width:34px;height:34px;color:var(--colour-ti-on-primary,#fff);cursor:pointer;border:0;border-left:1px solid #ffffff6b;border-radius:0 4px 4px 0;justify-content:center;align-items:center;padding:0;list-style:none;display:inline-flex;position:relative}.compose-schedule-menu__trigger--selected:is([class],:not([class])){gap:4px;width:auto;min-width:34px;padding:0 8px 0 10px}.compose-schedule-menu__selection:is([class],:not([class])){max-width:112px;font-size:var(--txt-small,.75rem);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.compose-schedule-menu__trigger:is([class],:not([class]))::-webkit-details-marker{display:none}.compose-schedule-menu__trigger:hover:not([aria-disabled=true]):is([class],:not([class])){background:var(--colour-primary-hover,#0250bb)}.compose-schedule-menu__trigger:active:not([aria-disabled=true]):is([class],:not([class])){background:var(--colour-primary-pressed,#054096)}.compose-schedule-menu__trigger:focus:not(:focus-visible):is([class],:not([class])){outline:none}.compose-schedule-menu__trigger:focus-visible:is([class],:not([class])){z-index:2;outline:2px solid var(--accent,#0060df);outline-offset:2px}.compose-schedule-menu__trigger[aria-disabled=true]:is([class],:not([class])){cursor:not-allowed;opacity:.55}.compose-send-split .base.app-button.compose-send:is([class],:not([class])){border-radius:4px 0 0 4px}.compose-schedule-menu__menu:is([class],:not([class])){width:min(340px,100vw - 32px);min-width:290px;inset:auto 0 calc(100% + 6px) auto}.compose-schedule-menu__item:is([class],:not([class])){grid-template-columns:1fr;gap:1px}.compose-schedule-menu__item:disabled:is([class],:not([class])){cursor:not-allowed;opacity:.58}.compose-schedule-menu__label:is([class],:not([class])){font-weight:600}.compose-schedule-menu__secondary:is([class],:not([class])){color:var(--muted,#6b7280);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:400;overflow:hidden}.compose-schedule-menu__separator:is([class],:not([class])){background:var(--border,#d6d9e2);height:1px;margin:4px 6px}.compose-schedule-menu__description:is([class],:not([class])){clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.base.app-button.compose-send:disabled:is([class],:not([class])){background:var(--colour-neutral-border,var(--border,#d6d9e2));color:var(--colour-ti-secondary,var(--muted,#6b7280));cursor:not-allowed;opacity:1}.compose-error:is([class],:not([class])){color:#b3261e;font-size:13px}.compose-save-error:is([class],:not([class])){color:var(--colour-ti-warning,#8a4b00);font-size:var(--txt-small,.8125rem);margin:0}.compose-confirm-backdrop:is([class],:not([class])){z-index:4;border-radius:inherit;background:#0d162a7a;place-items:center;padding:16px;display:grid;position:absolute;inset:0}.compose-confirm:is([class],:not([class])){border:1px solid var(--modal-border);background:var(--modal-surface);width:min(420px,100%);box-shadow:var(--modal-shadow);border-radius:12px;padding:20px}.compose-confirm h3:is([class],:not([class])){font-size:var(--txt-large,1rem);margin:0 0 8px}.compose-confirm h3:focus:is([class],:not([class])){outline:none}.compose-confirm p:is([class],:not([class])){color:var(--colour-ti-secondary,var(--text,#111827));margin:0 0 20px}.compose-confirm__actions:is([class],:not([class])){justify-content:flex-end;gap:8px;display:flex}.recipient-input:is([class],:not([class])){flex:1;min-width:0;position:relative}.recipient-input__field:is([class],:not([class])){border:1px solid var(--control-border,#cfcfcf);background:var(--panel2,#fff);cursor:text;border-radius:4px;flex-wrap:wrap;align-items:center;gap:4px;padding:2px 4px;display:flex}.recipient-input__field:focus-within:is([class],:not([class])){border-color:var(--accent,#0060df);outline:2px solid color-mix(in srgb, var(--accent,#0060df) 35%, transparent);outline-offset:-1px}.pills:is([class],:not([class])){margin:0;padding:0;list-style:none;display:contents}.pill:is([class],:not([class])){background:color-mix(in srgb, var(--text,#111827) 9%, transparent);border-radius:999px;align-items:center;max-width:100%;font-size:.85rem;line-height:1.4;display:inline-flex}.pill__label:is([class],:not([class])),.pill__remove:is([class],:not([class])){font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:999px;padding:1px 4px 1px 8px}.pill__remove:is([class],:not([class])){opacity:.6;padding:1px 7px 1px 4px}.pill__remove:hover:is([class],:not([class])){opacity:1}.pill__label:is([class],:not([class])){align-items:center;gap:4px;display:inline-flex;overflow:hidden}.pill__text:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pill--invalid:is([class],:not([class])){background:var(--error-bg,#c81e1e1a);color:var(--error-fg,#a4000f)}.pill--invalid .pill__text:is([class],:not([class])){text-underline-offset:2px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.pill__warning:is([class],:not([class])){font-size:.9em}.pill__avatar:is([class],:not([class])){color:#fff;border-radius:999px;flex:none;place-items:center;width:16px;height:16px;font-size:8px;font-weight:700;display:grid}.recipient-input__text:is([class],:not([class])){min-width:8ch;font:inherit;color:inherit;background:0 0;border:0;flex:1;padding:3px 2px}.recipient-input__text:focus:is([class],:not([class])){outline:none}.autocomplete:is([class],:not([class])){z-index:10;background:var(--panel,#fff);border:1px solid var(--border,#cfcfcf);border-radius:4px;margin:2px 0 0;position:absolute;left:0;right:0;box-shadow:0 8px 24px #0000004d}.autocomplete__options:is([class],:not([class])){max-height:19rem;margin:0;padding:0;list-style:none;overflow-y:auto}.autocomplete__option:is([class],:not([class])){cursor:pointer;align-items:center;gap:10px;padding:6px 10px;display:flex}.autocomplete__option:hover:is([class],:not([class])){background:var(--rowHover,#0060df14)}.autocomplete__option--active:is([class],:not([class])){background:var(--rowActive,#0060df1f)}.ac-avatar:is([class],:not([class])){color:#fff;border-radius:999px;flex:none;place-items:center;width:24px;height:24px;font-size:10px;font-weight:700;display:grid}.ac-lines:is([class],:not([class])){flex-direction:column;flex:1;min-width:0;display:flex}.ac-name:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;font-weight:600;line-height:1.3;overflow:hidden}.ac-email:is([class],:not([class])){color:var(--muted,#6b7280);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1.3;overflow:hidden}.ac-context:is([class],:not([class])){color:var(--muted,#6b7280);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:1.3;overflow:hidden}.ac-email--primary:is([class],:not([class])){font-size:inherit;color:inherit;font-weight:600}.ac-match:is([class],:not([class])){color:var(--accent,#0060df)}.ac-meta:is([class],:not([class])){color:var(--muted,#6b7280);flex:none;font-size:11px}.autocomplete__browse:is([class],:not([class])){border-top:1px solid var(--border,#cfcfcf);margin:0}.autocomplete__browse button:is([class],:not([class])){text-align:left;width:100%;font:inherit;color:var(--accent,#0060df);cursor:pointer;background:0 0;border:0;padding:6px 10px}.autocomplete__empty:is([class],:not([class])){color:var(--muted,#6b7280);align-items:center;gap:12px;padding:10px 12px;font-size:12px;display:flex}.autocomplete__empty-text:is([class],:not([class])){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.autocomplete__keys:is([class],:not([class])){border-top:1px solid var(--border,#cfcfcf);color:var(--muted,#6b7280);align-items:center;gap:14px;padding:5px 10px;font-size:11px;display:flex}.autocomplete__count:is([class],:not([class])){margin-left:auto}.ac-key-hint:is([class],:not([class])){flex:none;align-items:center;gap:5px;display:inline-flex}.ac-key-hint kbd:is([class],:not([class])){font:inherit;border:1px solid var(--border,#cfcfcf);color:var(--text,#111827);border-radius:4px;padding:0 5px;font-size:10px;line-height:16px}.sr-only:is([class],:not([class])){clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.rich-text-editor:is([class],:not([class])){flex-direction:column;flex:1;gap:8px;min-width:0;min-height:0;display:flex}.editor-image-error:is([class],:not([class])){color:var(--error-fg,#c93838);margin:0;font-size:12px}.editor-link-form:is([class],:not([class])){border:1px solid var(--control-border,#d6d9e2);background:var(--panel2,#f5f6f8);border-radius:6px;gap:8px;padding:10px;display:grid}.editor-link-form__field:is([class],:not([class])){gap:5px;display:grid}.editor-link-form__field>span:is([class],:not([class])){color:var(--muted,#6b7388);letter-spacing:.03em;text-transform:uppercase;font-size:11px;font-weight:700}.editor-link-form__field input:is([class],:not([class])){border:1px solid var(--control-border,#d6d9e2);background:var(--panel,#fff);min-width:0;color:var(--text,#1a1d24);font:inherit;border-radius:4px;padding:7px 9px}.editor-link-form__field input:focus-visible:is([class],:not([class])){border-color:var(--accent);outline:none}.editor-link-form__error:is([class],:not([class])){color:var(--error-fg,#c93838);margin:0;font-size:12px}.editor-link-form__actions:is([class],:not([class])){flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.compose-toolbar:is([class],:not([class])){border:1px solid var(--control-border,#d6d9e2);background:#0000000a;border-radius:8px;flex-wrap:nowrap;align-items:center;gap:4px;padding:6px;display:flex;overflow:visible}.toolbar-group:is([class],:not([class])){border-right:1px solid var(--border,#d6d9e2);flex:none;align-items:center;gap:2px;margin-right:4px;padding-right:6px;display:inline-flex}.toolbar-group:last-child:is([class],:not([class])){border-right:0;margin-right:0;padding-right:0}.toolbar-button:is([class],:not([class])),.toolbar-color:is([class],:not([class])){height:28px;color:inherit;font:inherit;background:0 0;border:0;border-radius:6px}.toolbar-button:is([class],:not([class])){cursor:pointer;justify-content:center;align-items:center;min-width:28px;padding:0 7px;font-size:12px;display:inline-flex}.toolbar-button svg:is([class],:not([class])),.toolbar-color svg:is([class],:not([class])){pointer-events:none}.toolbar-button:hover:is([class],:not([class])),.toolbar-button.active:is([class],:not([class])),.toolbar-color:hover:is([class],:not([class])){background:#7f7f7f2e}.toolbar-button:disabled:is([class],:not([class])){cursor:not-allowed;opacity:.45}.toolbar-color:is([class],:not([class])){cursor:pointer;justify-content:center;align-items:center;min-width:28px;padding:0 5px;font-size:12px;display:inline-flex;position:relative}.toolbar-color input:is([class],:not([class])){opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.toolbar-more:is([class],:not([class])),.toolbar-dropdown:is([class],:not([class])){flex:none;position:relative}.toolbar-dropdown .toolbar-more__menu:is([class],:not([class])){min-width:130px;left:0;right:auto}.toolbar-dropdown[open] .toolbar-more__summary:is([class],:not([class])){background:#7f7f7f2e}.toolbar-more__summary:is([class],:not([class])):after{margin-left:5px}.toolbar-more[open] .toolbar-more__summary:is([class],:not([class])){background:#7f7f7f2e}.toolbar-more__menu:is([class],:not([class])){left:auto;right:0}.toolbar-menu-section:is([class],:not([class])){gap:2px;padding:4px 0;display:grid}.toolbar-menu-section+.toolbar-menu-section:is([class],:not([class])){border-top:1px solid var(--border,#d6d9e2)}.toolbar-menu-button:is([class],:not([class])){font-size:12px}.toolbar-menu-button:disabled:is([class],:not([class])){cursor:not-allowed;opacity:.45}.toolbar-menu-field:is([class],:not([class])){grid-template-columns:72px 1fr;align-items:center;gap:8px;min-height:32px;padding:4px 8px;font-size:12px;display:grid}.toolbar-menu-field select:is([class],:not([class])),.toolbar-menu-field input:is([class],:not([class])){min-width:0}.editor-wrap:is([class],:not([class])){border:1px solid var(--control-border,#d6d9e2);border-radius:8px;flex:1;min-height:0;padding:8px;overflow-y:auto}.editor:is([class],:not([class])){outline:none;min-height:100%;font-size:14px;position:relative}.editor:is([class],:not([class])) img{max-width:100%;height:auto}.editor:is([class],:not([class])) blockquote{border-inline-start:2px solid #729fcf;margin:1ex 0;padding:.4ex 1ex}.editor:is([class],:not([class])) [data-stormbox-quoted-content]{display:contents}.editor:is([class],:not([class])) [data-stormbox-origin]{display:block}.icon-mirrored:is([class],:not([class])){transform:scaleX(-1)}.store-error-toast:is([class],:not([class])){z-index:80;inset-inline:0;pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;bottom:16px}.store-error-toast__item:is([class],:not([class])){pointer-events:auto;background:var(--toast-bg,#c93838);color:#fff;border:1px solid #0000;border-radius:10px;align-items:center;gap:12px;max-width:min(560px,100vw - 32px);padding:10px 12px 10px 14px;font-size:13px;line-height:1.4;transition:background-color .2s,color .2s,border-color .2s;display:inline-flex;position:relative;overflow:hidden;box-shadow:0 12px 28px #00000059}.store-error-toast__item--success:is([class],:not([class])){background:var(--toast-success-bg,#2e9e63)}.store-error-toast__item--progress:is([class],:not([class])){background:var(--panel,#fff);color:var(--text,#111827);border-color:var(--border,#d9d9de)}.store-error-toast__message:is([class],:not([class])){white-space:pre-wrap;overflow-wrap:anywhere;flex:1;min-width:0}.store-error-toast__action:is([class],:not([class])){color:inherit;font:inherit;cursor:pointer;background:#ffffff1f;border:1px solid #ffffff8c;border-radius:6px;flex:none;padding:2px 10px;font-weight:600;line-height:1.4}.store-error-toast__action:hover:is([class],:not([class])),.store-error-toast__action:focus-visible:is([class],:not([class])){background:#ffffff3d;outline:none}.store-error-toast__dismiss:is([class],:not([class])){width:22px;height:22px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:999px;justify-content:center;align-items:center;padding:0;display:inline-flex}.store-error-toast__dismiss:hover:is([class],:not([class])),.store-error-toast__dismiss:focus-visible:is([class],:not([class])){background:#ffffff26;outline:none}.store-error-toast__progress:is([class],:not([class])){background:color-mix(in srgb, var(--accent,#1373d9) 25%, transparent);height:2px;position:absolute;inset:0 0 auto}.store-error-toast__progress:is([class],:not([class])):after{content:"";background:var(--accent,#1373d9);width:38%;animation:1.4s ease-in-out infinite store-error-toast-sweep;position:absolute;inset:0 auto 0 0}@keyframes store-error-toast-sweep{0%{transform:translate(-100%)}to{transform:translate(270%)}}@media (prefers-reduced-motion:reduce){.store-error-toast__item:is([class],:not([class])){transition:none}.store-error-toast__progress:is([class],:not([class])):after{width:100%;animation:none}}.contacts--placeholder{color:var(--muted);background:var(--panel);place-items:center;display:grid}html.no-motion *,html.no-motion :before,html.no-motion :after{transition:none!important;animation:none!important} diff --git a/suites-experimental/stormbox-react/dist/assets/index-DIr-gxPn.js b/suites-experimental/stormbox-react/dist/assets/index-DIr-gxPn.js new file mode 100644 index 000000000..cea264909 --- /dev/null +++ b/suites-experimental/stormbox-react/dist/assets/index-DIr-gxPn.js @@ -0,0 +1,234 @@ +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),l=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,ee());else{var t=n(l);t!==null&&te(x,t.startTime-e)}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&te(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?ee():S=!1}}}var ee;if(typeof y==`function`)ee=function(){y(D)};else if(typeof MessageChannel<`u`){var O=new MessageChannel,k=O.port2;O.port1.onmessage=D,ee=function(){k.postMessage(null)}}else ee=function(){_(D,0)};function te(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,te(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,ee()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),u=o(((e,t)=>{t.exports=l()})),d=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function x(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var S=x.prototype=new b;S.constructor=x,_(S,y.prototype),S.isPureReactComponent=!0;var C=Array.isArray;function w(){}var T={H:null,A:null,T:null,S:null},E=Object.prototype.hasOwnProperty;function D(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ee(e,t){return D(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var te=/\/+/g;function A(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function ne(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(w,w):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function re(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,re(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+A(e,0):a,C(o)?(i=``,c!=null&&(i=c.replace(te,`$&/`)+`/`),re(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=ee(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(te,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(C(e))for(var u=0;u{t.exports=d()})),p=o((e=>{var t=f();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=p()})),h=o((e=>{var t=u(),n=f(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1be||(e.current=ye[be],ye[be]=null,be--)}function F(e,t){be++,ye[be]=e.current,e.current=t}var Ce=xe(null),we=xe(null),Te=xe(null),Ee=xe(null);function De(e,t){switch(F(Te,t),F(we,e),F(Ce,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?up(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=up(t),e=dp(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}Se(Ce),F(Ce,e)}function Oe(){Se(Ce),Se(we),Se(Te)}function ke(e){var t=e.memoizedState;t!==null&&(sh._currentValue=t.memoizedState,F(Ee,e)),t=Ce.current;var n=dp(t,e.type);t!==n&&(F(we,e),F(Ce,n))}function Ae(e){we.current===e&&(Se(Ce),Se(we)),Ee.current===e&&(Se(Ee),sh._currentValue=ve)}var je,Me;function Ne(e){if(je===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);je=t&&t[1]||``,Me=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Pe=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Ne(n):``}function Ie(e,t){switch(e.tag){case 26:case 27:case 5:return Ne(e.type);case 16:return Ne(`Lazy`);case 13:return e.child!==t&&t!==null?Ne(`Suspense Fallback`):Ne(`Suspense`);case 19:return Ne(`SuspenseList`);case 0:case 15:return Fe(e.type,!1);case 11:return Fe(e.type.render,!1);case 1:return Fe(e.type,!0);case 31:return Ne(`Activity`);case 30:return Ne(`ViewTransition`);default:return``}}function Le(e){try{var t=``,n=null;do t+=Ie(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var Re=Object.prototype.hasOwnProperty,ze=t.unstable_scheduleCallback,Be=t.unstable_cancelCallback,Ve=t.unstable_shouldYield,He=t.unstable_requestPaint,Ue=t.unstable_now,We=t.unstable_getCurrentPriorityLevel,Ge=t.unstable_ImmediatePriority,Ke=t.unstable_UserBlockingPriority,qe=t.unstable_NormalPriority,Je=t.unstable_LowPriority,Ye=t.unstable_IdlePriority,Xe=t.log,Ze=t.unstable_setDisableYieldValue,Qe=null,$e=null;function et(e){if(typeof Xe==`function`&&Ze(e),$e&&typeof $e.setStrictMode==`function`)try{$e.setStrictMode(Qe,e)}catch{}}var I=Math.clz32?Math.clz32:nt,L=Math.log,tt=Math.LN2;function nt(e){return e>>>=0,e===0?32:31-(L(e)/tt|0)|0}var rt=256,it=262144,at=4194304;function ot(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function st(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=ot(n))):i=ot(o):i=ot(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=ot(n))):i=ot(o)):i=ot(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function ct(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function lt(e,t){t&8&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0n;n++)t.push(e);return t}function pt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function mt(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),On=!1;if(Dn)try{var kn={};Object.defineProperty(kn,"passive",{get:function(){On=!0}}),window.addEventListener(`test`,kn,kn),window.removeEventListener(`test`,kn,kn)}catch{On=!1}var An=null,jn=null,Mn=null;function Nn(){if(Mn)return Mn;var e,t=jn,n=t.length,r,i=`value`in An?An.value:An.textContent,a=i.length;for(e=0;e=fr),hr=` `,gr=!1;function _r(e,t){switch(e){case`keyup`:return ur.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function vr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var yr=!1;function br(e,t){switch(e){case`compositionend`:return vr(t);case`keypress`:return t.which===32?(gr=!0,hr):null;case`textInput`:return e=t.data,e===hr&&gr?null:e;default:return null}}function xr(e,t){if(yr)return e===`compositionend`||!dr&&_r(e,t)?(e=Nn(),Mn=jn=An=null,yr=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Ur(n)}}function Gr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Gr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Kr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Hr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Hr(e.document)}return t}function qr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Jr=Dn&&`documentMode`in document&&11>=document.documentMode,Yr=null,Xr=null,Zr=null,Qr=!1;function $r(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Qr||Yr==null||Yr!==Hr(r)||(r=Yr,`selectionStart`in r&&qr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Zr&&Vr(Zr,r)||(Zr=r,r=qf(Xr,`onSelect`),0>=o,i-=o,Yi=1<<32-I(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),V&&Zi(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),V&&Zi(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return V&&Zi(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&(_=v.alternate,_!==null&&h.delete(_.key===null?g:_.key)),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),V&&Zi(a,g),u}function _(e,r,o,c){if(typeof o==`object`&&o&&o.type===te&&o.key===null&&o.props.ref===void 0&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case O:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===te){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),so(c,o),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===ce&&eo(l)===r.type){n(e,r.sibling),c=a(r,o.props),so(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===te?(c=Ii(o.props.children,e.mode,c,o.key),so(c,o),c.return=e,e=c):(c=Fi(o.type,o.key,o.props,null,e.mode,c),so(c,o),c.return=e,e=c)}return s(e);case k:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=zi(o,e.mode,c),c.return=e,e=c}return s(e);case ce:return o=eo(o),_(e,r,o,c)}if(_e(o))return h(e,r,o,c);if(me(o)){if(l=me(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return _(e,r,oo(o),c);if(o.$$typeof===ie)return _(e,r,Ta(e,o),c);co(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=Li(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{ao=0;var i=_(e,t,n,r);return io=null,i}catch(t){if(t===Ja||t===Xa)throw t;var a=ji(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var uo=lo(!0),fo=lo(!1),po=!1;function mo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function ho(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function go(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function _o(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Zu&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=Oi(e),Di(e,null,n),t}return wi(e,r,t,n),Oi(e)}function vo(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,gt(e,n)}}function yo(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var bo=!1;function xo(){if(bo){var e=za;if(e!==null)throw e}}function So(e,t,n,r){bo=!1;var i=e.updateQueue;po=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(X&f)===f:(r&f)===f){f!==0&&f===Ra&&(bo=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,h=s;f=t;var g=n;switch(h.tag){case 1:if(m=h.payload,typeof m==`function`){d=m.call(g,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=h.payload,f=typeof m==`function`?m.call(g,d,f):m,f==null)break a;d=D({},d,f);break a;case 2:po=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),ad|=o,e.lanes=o,e.memoizedState=d}}function Co(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function wo(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=N.T,s={};s.types=o===null?null:o.types,N.T=s,lc(e,!1,t,n);try{var c=i(),l=N.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?cc(e,t,Ha(c,r),kd(e)):cc(e,t,r,kd(e))}catch(n){cc(e,t,{then:function(){},status:`rejected`,reason:n},kd())}finally{P.p=a,o!==null&&s.types!==null&&(o.types=s.types),N.T=o}}function Qs(){}function $s(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=ec(e).queue;Zs(e,a,t,ve,n===null?Qs:function(){return tc(e),n(r)})}function ec(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ve,baseState:ve,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:us,lastRenderedState:ve},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:us,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function tc(e){var t=ec(e);t.next===null&&(t=e.alternate.memoizedState),cc(e,t.next.queue,{},kd())}function nc(){return wa(sh)}function rc(){return as().memoizedState}function ic(){return as().memoizedState}function ac(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=kd();e=go(n);var r=_o(t,e,n);r!==null&&(Md(r,t,n),vo(r,t,n)),t={cache:ja()},e.payload=t;return}t=t.return}}function oc(e,t,n){var r=kd();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},uc(e)?dc(t,n):(n=Ti(e,t,n,r),n!==null&&(Md(n,e,r),fc(n,t,r)))}function sc(e,t,n){cc(e,t,n,kd())}function cc(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(uc(e))dc(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Br(s,o))return wi(e,t,i,0),Qu===null&&Ci(),!1}catch{}if(n=Ti(e,t,i,r),n!==null)return Md(n,e,r),fc(n,t,r),!0}return!1}function lc(e,t,n,r){if(r={lane:2,revertLane:Nf(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},uc(e)){if(t)throw Error(i(479))}else t=Ti(e,n,r,2),t!==null&&Md(t,e,2)}function uc(e){var t=e.alternate;return e===U||t!==null&&t===U}function dc(e,t){Uo=Ho=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function fc(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,gt(e,n)}}var pc={readContext:wa,use:cs,useCallback:Yo,useContext:Yo,useEffect:Yo,useImperativeHandle:Yo,useLayoutEffect:Yo,useInsertionEffect:Yo,useMemo:Yo,useReducer:Yo,useRef:Yo,useState:Yo,useDebugValue:Yo,useDeferredValue:Yo,useTransition:Yo,useSyncExternalStore:Yo,useId:Yo,useHostTransitionStatus:Yo,useFormState:Yo,useActionState:Yo,useOptimistic:Yo,useMemoCache:Yo,useCacheRefresh:Yo,useEffectEvent:Yo},mc={readContext:wa,use:cs,useCallback:function(e,t){return is().memoizedState=[e,t===void 0?null:t],e},useContext:wa,useEffect:Rs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),Is(4194308,4,Ws.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Is(4194308,4,e,t)},useInsertionEffect:function(e,t){Is(4,2,e,t)},useMemo:function(e,t){var n=is();t=t===void 0?null:t;var r=e();if(Wo){et(!0);try{e()}finally{et(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=is();if(n!==void 0){var i=n(t);if(Wo){et(!0);try{n(t)}finally{et(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=oc.bind(null,U,e),[r.memoizedState,e]},useRef:function(e){var t=is();return e={current:e},t.memoizedState=e},useState:function(e){e=bs(e);var t=e.queue,n=sc.bind(null,U,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ks,useDeferredValue:function(e,t){return Ys(is(),e,t)},useTransition:function(){var e=bs(!1);return e=Zs.bind(null,U,e.queue,!0,!1),is().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=U,a=is();if(V){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Qu===null)throw Error(i(349));X&127||hs(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,Rs(_s.bind(null,r,o,e),[e]),r.flags|=2048,Ps(9,{destroy:void 0},gs.bind(null,r,o,n,t),null),n},useId:function(){var e=is(),t=Qu.identifierPrefix;if(V){var n=Xi,r=Yi;n=(r&~(1<<32-I(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=Go++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[Ct]=t,o[wt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(np(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&ul(t)}}return hl(t),t.subtreeFlags&=-33554433,dl(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&ul(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=Te.current,ua(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=na,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[Ct]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||$f(e.nodeValue,n)),e||sa(t,!0)}else e=lp(e).createTextNode(r),e[Ct]=t,t.stateNode=e}return hl(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=ua(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[Ct]=t}else da(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;hl(t),e=!1}else n=fa(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Fo(t),t):(Fo(t),null);if(t.flags&128)throw Error(i(558))}return hl(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=ua(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[Ct]=t}else da(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;hl(t),a=!1}else a=fa(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(Fo(t),t):(Fo(t),null)}return Fo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),pl(t,t.updateQueue),hl(t),null);case 4:return Oe(),e===null&&Uf(t.stateNode.containerInfo),t.flags|=67108864,hl(t),null;case 10:return va(t.type),hl(t),null;case 19:if(Ro(t),r=t.memoizedState,r===null)return hl(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)ml(r,!1);else{if(Z!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=zo(e),o!==null){for(t.flags|=128,ml(r,!1),e=o.updateQueue,t.updateQueue=e,pl(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Pi(n,e),n=n.sibling;return Lo(t,Io.current&1|2),V&&Zi(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ue()>md&&(t.flags|=128,a=!0,ml(r,!1),t.lanes=4194304)}else{if(!a)if(e=zo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,pl(t,e),ml(r,!0),r.tail===null&&r.tailMode!==`collapsed`&&r.tailMode!==`visible`&&!o.alternate&&!V)return hl(t),null}else 2*Ue()-r.renderingStartTime>md&&n!==536870912&&(t.flags|=128,a=!0,ml(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}if(r.tail!==null){e=r.tail;a:{for(n=e;n!==null;){if(n.alternate!==null){n=!1;break a}n=n.sibling}n=!0}return r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ue(),e.sibling=null,o=Io.current,o=a?o&1|2:o&1,r.tailMode===`visible`||r.tailMode===`collapsed`||!n||V?Lo(t,o):(n=o,F(ko,t),F(Io,n),Ao===null&&(Ao=t)),V&&Zi(t,r.treeForkCount),e}return hl(t),null;case 22:case 23:return Fo(t),Oo(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(hl(t),t.subtreeFlags&6&&(t.flags|=8192)):hl(t),n=t.updateQueue,n!==null&&pl(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&Se(Wa),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),va(Aa),hl(t),null;case 25:return null;case 30:return t.flags|=33554432,hl(t),null}throw Error(i(156,t.tag))}function _l(e,t){switch(ea(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return va(Aa),Oe(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Ae(t),null;case 31:if(t.memoizedState!==null){if(Fo(t),t.alternate===null)throw Error(i(340));da()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Fo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));da()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ro(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return Oe(),null;case 10:return va(t.type),null;case 22:case 23:return Fo(t),Oo(),e!==null&&Se(Wa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return va(Aa),null;case 25:return null;default:return null}}function vl(e,t){switch(ea(t),t.tag){case 3:va(Aa),Oe();break;case 26:case 27:case 5:Ae(t);break;case 4:Oe();break;case 31:t.memoizedState!==null&&Fo(t);break;case 13:Fo(t);break;case 19:Ro(t);break;case 10:va(t.type);break;case 22:case 23:Fo(t),Oo(),e!==null&&Se(Wa);break;case 24:va(Aa)}}function yl(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){ff(t,t.return,e)}}function bl(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){ff(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){ff(t,t.return,e)}}function xl(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{wo(t,n)}catch(t){ff(e,e.return,t)}}}function Sl(e,t,n){n.props=xc(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){ff(e,t,n)}}function Cl(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:var i=e.stateNode,a=gi(e.memoizedProps,i);(i.ref===null||i.ref.name!==a)&&(i.ref=Pp(a)),r=i.ref;break;case 7:if(e.stateNode===null){var o=new Fp(e);h(e.child,!1,Qp,o,void 0,void 0),e.stateNode=o}r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){ff(e,t,n)}}function wl(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){ff(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){ff(e,t,n)}else n.current=null}function Tl(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var n=0;n title`))),np(r,t,n),r[Ct]=e,Lt(r),t=r;break a;case`link`:if(o=Gm(`link`,`href`,a).get(t+(n.href||``))){for(s=0;sg&&(o=g,g=h,h=o);var _=Wr(s,h),v=Wr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,N.T=null,n=Sd,Sd=null;var o=vd,s=bd;if(_d=0,yd=vd=null,bd=0,Zu&6)throw Error(i(331));var c=Zu;if(Zu|=4,Ku(o.current),Ru(o,o.current,s,n),Zu=c,Ef(0,!1),$e&&typeof $e.onPostCommitFiberRoot==`function`)try{$e.onPostCommitFiberRoot(Qe,o)}catch{}return!0}finally{P.p=a,N.T=r,cf(e,t)}}function df(e,t,n){t=Vi(n,t),t=G(e.stateNode,t,2),e=_o(e,t,2),e!==null&&(pt(e,2),Tf(e))}function ff(e,t,n){if(e.tag===3)df(e,e,n);else for(;t!==null;){if(t.tag===3){df(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(gd===null||!gd.has(r))){e=Vi(n,e),n=Dc(2),r=_o(t,n,2),r!==null&&(Oc(n,r,t,e),pt(r,2),Tf(r));break}}t=t.return}}function pf(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Xu;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(rd=!0,i.add(n),e=mf.bind(null,e,t,n),t.then(e,e))}function mf(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Qu===e&&(X&n)===n&&(Z===4||Z===3&&(X&62914560)===X&&300>Ue()-fd?Zu&2?Q|=n:zd(e,0):Q|=n,cd===X&&(cd=0)),Tf(e)}function hf(e,t){t===0&&(t=dt()),e=Ei(e,t),e!==null&&(pt(e,t),Tf(e))}function gf(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),hf(e,n)}function _f(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),hf(e,n)}function vf(e,t){return ze(e,t)}var yf=null,bf=null,xf=!1,Sf=!1,Cf=!1,wf=0;function Tf(e){e!==bf&&e.next===null&&(bf===null?yf=bf=e:bf=bf.next=e),Sf=!0,xf||(xf=!0,Mf())}function Ef(e,t){if(!Cf&&Sf){Cf=!0;do for(var n=!1,r=yf;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-I(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,jf(r,a))}else a=X,a=st(r,r===Qu?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||ct(r,a)||(n=!0,jf(r,a));r=r.next}while(n);Cf=!1}}function Df(){Of()}function Of(){Sf=xf=!1;var e=0;wf!==0&&hp()&&(e=wf);for(var t=Ue(),n=null,r=yf;r!==null;){var i=r.next,a=kf(r,t);a===0?(r.next=null,n===null?yf=i:n.next=i,i===null&&(bf=n)):(n=r,(e!==0||a&3)&&(Sf=!0)),r=i}_d!==0&&_d!==5||Ef(e,!1),wf!==0&&(wf=0)}function kf(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&ap(d)&&(c=c.responseEnd,o+=u*(c$m){s.length=o;break}f=new Promise(jp.bind(f)),s.push(f)}}}if(0`u`?null:document;function Tm(e,t,n){var r=wm;if(r&&typeof t==`string`&&t){var i=rn(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),ym.has(i)||(ym.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),np(t,`link`,e),Lt(t),r.head.appendChild(t)))}}function Em(e){xm.D(e),Tm(`dns-prefetch`,e,null)}function Dm(e,t){xm.C(e,t),Tm(`preconnect`,e,t)}function Om(e,t,n){xm.L(e,t,n);var r=wm;if(r&&e&&t){var i=`link[rel="preload"][as="`+rn(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+rn(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+rn(n.imageSizes)+`"]`)):i+=`[href="`+rn(e)+`"]`;var a=i;switch(t){case`style`:a=Pm(e);break;case`script`:a=Rm(e)}if(!(vm.has(a)||(e=D({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Fm(a))||t===`script`&&r.querySelector(zm(a))))){var o=r.createElement(`link`);np(o,`link`,e),t===`style`&&(o[jt]=!0,o.onload=o.onerror=function(){Rt(o)}),Lt(o),r.head.appendChild(o)}}}function km(e,t){xm.m(e,t);var n=wm;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+rn(r)+`"][href="`+rn(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rm(e)}if(!vm.has(a)&&(e=D({rel:`modulepreload`,href:e},t),vm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zm(a)))return}r=n.createElement(`link`),np(r,`link`,e),Lt(r),n.head.appendChild(r)}}}function Am(e,t,n){xm.S(e,t,n);var r=wm;if(r&&e){var i=It(r).hoistableStyles,a=Pm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Fm(a)))s.loading=5;else{e=D({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vm.get(a))&&Hm(e,n);var c=o=r.createElement(`link`);Lt(c),np(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jm(e,t){xm.X(e,t);var n=wm;if(n&&e){var r=It(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=D({src:e,async:!0},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Lt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mm(e,t){xm.M(e,t);var n=wm;if(n&&e){var r=It(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=D({src:e,async:!0,type:`module`},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Lt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nm(e,t,n,r){var a=(a=Te.current)?bm(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Pm(n.href),t=It(a).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pm(n.href);var o=It(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Fm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=vm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vm.set(e,o)),Lm(a,e,o,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Rm(n),t=It(a).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Pm(e){return`href="`+rn(e)+`"`}function Fm(e){return`link[rel="stylesheet"][`+e+`]`}function Im(e){return D({},e,{"data-precedence":e.precedence,precedence:null})}function Lm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[jt]){r.loading=1;return}}else t=e.createElement(`link`),t[jt]=!0,t.onload=t.onerror=Rt.bind(null,t),np(t,`link`,n),Lt(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Rm(e){return`[src="`+rn(e)+`"]`}function zm(e){return`script[async]`+e}function Bm(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+rn(n.href)+`"]`);if(r)return t.instance=r,Lt(r),r;var a=D({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Lt(r),np(r,`style`,a),Vm(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Pm(n.href);var o=e.querySelector(Fm(a));if(o)return t.state.loading|=4,t.instance=o,Lt(o),o;r=Im(n),(a=vm.get(a))&&Hm(r,a),o=(e.ownerDocument||e).createElement(`link`),Lt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),np(o,`link`,r),t.state.loading|=4,Vm(o,n.precedence,e),t.instance=o;case`script`:return o=Rm(n.src),(a=e.querySelector(zm(o)))?(t.instance=a,Lt(a),a):(r=n,(a=vm.get(o))&&(r=D({},n),Um(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),Lt(a),np(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vm(r,n.precedence,e));return t.instance}function Vm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function qm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Ym(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Xm(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function Zm(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=Xm(t),e.suspenseyImages.push(t)),e=rh.bind(e),t.decode().then(e,e))}function Qm(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pm(r.href),a=t.querySelector(Fm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=nh.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Lt(a);return}a=t.ownerDocument||t,r=Im(r),(i=vm.get(i))&&Hm(r,i),a=a.createElement(`link`),Lt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),np(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=nh.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var $m=0;function eh(e,t){return e.stylesheets&&e.count===0&&ah(e,e.stylesheets),0$m?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function th(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ah(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function nh(){this.count--,th(this)}function rh(){this.imgCount--,th(this)}var ih=null;function ah(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ih=new Map,t.forEach(oh,e),ih=null,nh.call(e))}function oh(e,t){if(!(t.state.loading&4)){var n=ih.get(e);if(n)var r=n.get(null);else{n=new Map,ih.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=h()})),_=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),v=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),y=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),b=e=>{let t=y(e);return t.charAt(0).toUpperCase()+t.slice(1)},x={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},S=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},C=c(f(),1),w=(0,C.createContext)({}),T=()=>(0,C.useContext)(w),E=(0,C.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=T()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,C.createElement)(`svg`,{ref:c,...x,width:t??l??x.width,height:t??l??x.height,stroke:e??f,strokeWidth:m,className:_(`lucide`,p,i),...!a&&!S(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,C.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),D=(e,t)=>{let n=(0,C.forwardRef)(({className:n,...r},i)=>(0,C.createElement)(E,{ref:i,iconNode:t,className:_(`lucide-${v(b(e))}`,`lucide-${e}`,n),...r}));return n.displayName=b(e),n},ee=D(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),O=D(`bold`,[[`path`,{d:`M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8`,key:`mg9rjx`}]]),k=D(`bug`,[[`path`,{d:`M12 20v-9`,key:`1qisl0`}],[`path`,{d:`M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z`,key:`uouzyp`}],[`path`,{d:`M14.12 3.88 16 2`,key:`qol33r`}],[`path`,{d:`M21 21a4 4 0 0 0-3.81-4`,key:`1b0z45`}],[`path`,{d:`M21 5a4 4 0 0 1-3.55 3.97`,key:`5cxbf6`}],[`path`,{d:`M22 13h-4`,key:`1jl80f`}],[`path`,{d:`M3 21a4 4 0 0 1 3.81-4`,key:`1fjd4g`}],[`path`,{d:`M3 5a4 4 0 0 0 3.55 3.97`,key:`1d7oge`}],[`path`,{d:`M6 13H2`,key:`82j7cp`}],[`path`,{d:`m8 2 1.88 1.88`,key:`fmnt4t`}],[`path`,{d:`M9 7.13V6a3 3 0 1 1 6 0v1.13`,key:`1vgav8`}]]),te=D(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),A=D(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),ne=D(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),re=D(`circle-user-round`,[[`path`,{d:`M17.925 20.056a6 6 0 0 0-11.851.001`,key:`z69sun`}],[`circle`,{cx:`12`,cy:`11`,r:`4`,key:`1gt34v`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),ie=D(`circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),ae=D(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]),oe=D(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),se=D(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),j=D(`expand`,[[`path`,{d:`m15 15 6 6`,key:`1s409w`}],[`path`,{d:`m15 9 6-6`,key:`ko1vev`}],[`path`,{d:`M21 16v5h-5`,key:`1ck2sf`}],[`path`,{d:`M21 8V3h-5`,key:`1qoq8a`}],[`path`,{d:`M3 16v5h5`,key:`1t08am`}],[`path`,{d:`m3 21 6-6`,key:`wwnumi`}],[`path`,{d:`M3 8V3h5`,key:`1ln10m`}],[`path`,{d:`M9 9 3 3`,key:`v551iv`}]]),ce=D(`grip`,[[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`19`,cy:`5`,r:`1`,key:`w8mnmm`}],[`circle`,{cx:`5`,cy:`5`,r:`1`,key:`lttvr7`}],[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}],[`circle`,{cx:`19`,cy:`19`,r:`1`,key:`shf9b7`}],[`circle`,{cx:`5`,cy:`19`,r:`1`,key:`bfqh0e`}]]),M=D(`highlighter`,[[`path`,{d:`m9 11-6 6v3h9l3-3`,key:`1a3l36`}],[`path`,{d:`m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4`,key:`14a9rk`}]]),le=D(`image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),ue=D(`italic`,[[`line`,{x1:`19`,x2:`10`,y1:`4`,y2:`4`,key:`15jd3p`}],[`line`,{x1:`14`,x2:`5`,y1:`20`,y2:`20`,key:`bu0au3`}],[`line`,{x1:`15`,x2:`9`,y1:`4`,y2:`20`,key:`uljnxc`}]]),de=D(`lightbulb`,[[`path`,{d:`M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5`,key:`1gvzjb`}],[`path`,{d:`M9 18h6`,key:`x1upvd`}],[`path`,{d:`M10 22h4`,key:`ceow96`}]]),fe=D(`link`,[[`path`,{d:`M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71`,key:`1cjeqo`}],[`path`,{d:`M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71`,key:`19qd67`}]]),pe=D(`list-ordered`,[[`path`,{d:`M11 5h10`,key:`1cz7ny`}],[`path`,{d:`M11 12h10`,key:`1438ji`}],[`path`,{d:`M11 19h10`,key:`11t30w`}],[`path`,{d:`M4 4h1v5`,key:`10yrso`}],[`path`,{d:`M4 9h2`,key:`r1h2o0`}],[`path`,{d:`M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02`,key:`xtkcd5`}]]),me=D(`list`,[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]),he=D(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),ge=D(`mail-open`,[[`path`,{d:`M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z`,key:`1jhwl8`}],[`path`,{d:`m22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10`,key:`1qfld7`}]]),_e=D(`mail`,[[`path`,{d:`m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7`,key:`132q7q`}],[`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`,key:`izxlao`}]]),N=D(`minus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}]]),P=D(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),ve=D(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),ye=D(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),be=D(`quote`,[[`path`,{d:`M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z`,key:`rib7q0`}],[`path`,{d:`M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z`,key:`1ymkrd`}]]),xe=D(`redo-2`,[[`path`,{d:`m15 14 5-5-5-5`,key:`12vg1m`}],[`path`,{d:`M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13`,key:`6uklza`}]]),Se=D(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),F=D(`remove-formatting`,[[`path`,{d:`M4 7V4h16v3`,key:`9msm58`}],[`path`,{d:`M5 20h6`,key:`1h6pxn`}],[`path`,{d:`M13 4 8 20`,key:`kqq6aj`}],[`path`,{d:`m15 15 5 5`,key:`me55sn`}],[`path`,{d:`m20 15-5 5`,key:`11p7ol`}]]),Ce=D(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),we=D(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),Te=D(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),Ee=D(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),De=D(`shrink`,[[`path`,{d:`m15 15 6 6m-6-6v4.8m0-4.8h4.8`,key:`17vawe`}],[`path`,{d:`M9 19.8V15m0 0H4.2M9 15l-6 6`,key:`chjx8e`}],[`path`,{d:`M15 4.2V9m0 0h4.8M15 9l6-6`,key:`lav6yq`}],[`path`,{d:`M9 4.2V9m0 0H4.2M9 9 3 3`,key:`1pxi2q`}]]),Oe=D(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),ke=D(`strikethrough`,[[`path`,{d:`M16 4H9a3 3 0 0 0-2.83 4`,key:`43sutm`}],[`path`,{d:`M14 12a4 4 0 0 1 0 8H6`,key:`nlfj13`}],[`line`,{x1:`4`,x2:`20`,y1:`12`,y2:`12`,key:`1e0a9i`}]]),Ae=D(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),je=D(`tag`,[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`,key:`vktsd0`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`kqv944`}]]),Me=D(`text-align-end`,[[`path`,{d:`M21 5H3`,key:`1fi0y6`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M21 19H7`,key:`4cu937`}]]),Ne=D(`text-align-center`,[[`path`,{d:`M21 5H3`,key:`1fi0y6`}],[`path`,{d:`M17 12H7`,key:`16if0g`}],[`path`,{d:`M19 19H5`,key:`vjpgq2`}]]),Pe=D(`text-align-justify`,[[`path`,{d:`M3 5h18`,key:`1u36vt`}],[`path`,{d:`M3 12h18`,key:`1i2n21`}],[`path`,{d:`M3 19h18`,key:`awlh7x`}]]),Fe=D(`text-align-start`,[[`path`,{d:`M21 5H3`,key:`1fi0y6`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M17 19H3`,key:`z6ezky`}]]),Ie=D(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),Le=D(`underline`,[[`path`,{d:`M6 4v6a6 6 0 0 0 12 0V4`,key:`9kb039`}],[`line`,{x1:`4`,x2:`20`,y1:`20`,y2:`20`,key:`nun2al`}]]),Re=D(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]),ze=D(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),Be=D(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),Ve=g(),He=` + + + + + + +`,Ue=`Aisha.Ben.Carmen.Daniel.Elena.Farid.Grace.Hiro.Ines.Jonas.Kavya.Liam.Maya.Noah.Olga.Pablo.Quinn.Rosa.Samir.Tara.Umar.Vera.Wei.Ximena.Yusuf.Zoe.Amara.Bruno.Chloe.Dmitri.Esther.Felix.Gabriela.Hassan.Isla.Jakub.Keiko.Lucas.Mei.Nadia.Oscar.Priya.Rafael.Sofia.Tomas.Uma.Viktor.Wanjiru.Yara.Zain.Anders.Beatriz.Cyrus.Delia.Emeka.Freya.Gustavo.Helga.Ivan.Julia.Kofi.Leila.Marco.Nina.Omar.Paula.Ravi.Selin.Theo.Valentina`.split(`.`),We=`Abara.Bergström.Castillo.Dubois.Eriksen.Fischer.García.Haddad.Ito.Jansen.Kowalski.Lindqvist.Moreau.Nakamura.Okafor.Petrov.Quintero.Rossi.Schmidt.Tanaka.Usman.Varga.Wójcik.Xu.Yilmaz.Zhang.Andersson.Bianchi.Chen.Da Silva.Eze.Fontaine.Gupta.Horvath.Ivanova.Jensen.Kim.Laurent.Müller.Novak.O'Brien.Patel.Reyes.Sato.Torres.Uddin.Volkov.Weber.Yamamoto.Zielinski.Achebe.Brennan.Costa.Delgado.Engel.Ferreira.Grünewald.Huang.Iyer.Kaur`.split(`.`),Ge=[{name:`Northwind`,domain:`northwind.example`},{name:`Contoso`,domain:`contoso.example`},{name:`Fabrikam`,domain:`fabrikam.example`},{name:`Tailspin Labs`,domain:`tailspin.example`},{name:`Wingtip`,domain:`wingtip.example`},{name:`Lakeshore Health`,domain:`lakeshore.example`},{name:`Adatum`,domain:`adatum.example`},{name:`Litware`,domain:`litware.example`},{name:`Proseware`,domain:`proseware.example`},{name:`Coho Vineyard`,domain:`cohovineyard.example`},{name:`Blue Yonder Air`,domain:`blueyonder.example`},{name:`Trey Research`,domain:`treyresearch.example`},{name:`Woodgrove Bank`,domain:`woodgrove.example`},{name:`Alpine Ski House`,domain:`alpineskihouse.example`},{name:`Graphic Design Institute`,domain:`gdi.example`},{name:`Humongous Insurance`,domain:`humongous.example`},{name:`Margie Travel`,domain:`margietravel.example`},{name:`Relecloud`,domain:`relecloud.example`},{name:`Southridge Video`,domain:`southridge.example`},{name:`Wide World Importers`,domain:`wideworld.example`}],Ke=[`mail.example`,`post.example`,`inbox.example`,`fastpost.example`],qe=[{name:`Web Platform Weekly`,email:`digest@webplatform.example`,color:`#1f6feb`},{name:`The Render Loop`,email:`hello@renderloop.example`,color:`#d1495b`},{name:`Systems Digest`,email:`news@systemsdigest.example`,color:`#2a9d8f`},{name:`Contoso Cloud`,email:`updates@contoso.example`,color:`#5a4fcf`},{name:`Blue Yonder Air`,email:`offers@blueyonder.example`,color:`#0077b6`},{name:`Margie Travel`,email:`deals@margietravel.example`,color:`#f4a261`},{name:`Wide World Importers`,email:`shop@wideworld.example`,color:`#e76f51`},{name:`Coho Vineyard`,email:`club@cohovineyard.example`,color:`#7b2d26`},{name:`Open Source Monthly`,email:`editors@osmonthly.example`,color:`#264653`},{name:`Alpine Ski House`,email:`news@alpineskihouse.example`,color:`#118ab2`},{name:`Graphic Design Institute`,email:`courses@gdi.example`,color:`#ef476f`},{name:`Relecloud Status`,email:`status@relecloud.example`,color:`#3d405b`}],Je=[{name:`Forge`,email:`notifications@forge.example`},{name:`Bugtrack`,email:`bugmail@bugtrack.example`},{name:`CI Bot`,email:`ci@builds.example`},{name:`Calendar`,email:`calendar-noreply@calendar.example`},{name:`Woodgrove Bank`,email:`alerts@woodgrove.example`},{name:`Shipping Updates`,email:`track@parcels.example`}],Ye=`the.a.we.our.team.should.could.will.can.need.to.review.update.plan.release.branch.schedule.meeting.notes.draft.proposal.budget.design.feedback.deadline.next.week.today.tomorrow.quarter.roadmap.migration.cache.layout.performance.regression.benchmark.profile.latency.memory.renderer.thread.worker.queue.sync.server.client.account.folder.message.invoice.contract.launch.customer.support.ticket.issue.patch.test.suite.flaky.green.merge.conflict.document.spreadsheet.slides.agenda.minutes.follow-up.question.answer.idea.option.tradeoff.risk.estimate.scope.priority.milestone.owner.status.blocked.unblocked.shipped.landed.backed.out.again.still.already.probably.definitely.maybe.quickly.carefully.before.after.during.around.about.with.without.for.from.into.over.under.between.because.although.while.and.but.or.so.then.that.this.these.those.it.they.you.everyone.nobody.small.large.new.old.final.early.late.simple.complex.stable.nightly.beta.staging.production.mobile.desktop.tablet.screen.scroll.click.frame.paint.style.script.parser.compiler.garbage.collector.heap.graph.chart`.split(`.`),Xe=`Q3 roadmap review,offsite planning,hiring loop for the platform role,budget for next quarter,renderer performance numbers,sync worker crash on reconnect,design review: folder manager,release notes for 2.4,on-call handover,customer escalation from Contoso,contract renewal,migration to the new cache schema,accessibility audit findings,dark mode contrast issues,flaky integration tests,conference talk proposal,team lunch on Thursday,travel reimbursement,security review checklist,API deprecation timeline,onboarding plan for new hires,quarterly business review,retro notes,benchmark methodology,memory regression in nightly,layout thrashing in the message list,IndexedDB quota errors,invoice #48213,weekend plans,photos from the trip,birthday dinner,apartment viewing,book club pick,garden project`.split(`,`),Ze=[e=>`[atlas] PR #${e}: Fix race between sync worker and cache writer`,e=>`[atlas] PR #${e}: Virtualize the folder manager tree`,e=>`[borealis] Issue #${e}: Message list jumps when new mail arrives`,e=>`Bug ${e} - Crash in layout when resizing the reading pane`,e=>`Bug ${e} - Intermittent timeout in compose send test`,e=>`Build #${e} failed on main`,e=>`Build #${e} fixed on main`,e=>`Invitation: Weekly sync @ Tue ${e%12+1}:00`,e=>`Your statement for account ending ${String(e).slice(-4)} is ready`,e=>`Your package ${e}-QX has shipped`],Qe=[`Shipping faster layouts with containment`,`A field guide to long tasks`,`What changed in the cascade`,`Five ways to cut bundle size this week`,`Inside a modern garbage collector`,`Scheduling work off the main thread`,`Fall fares are here: save up to 30%`,`Members-only tasting this Saturday`,`New arrivals for the season`,`Your weekly status summary`,`Course spotlight: typography for interfaces`,`Ski passes on sale now`,`Understanding interaction to next paint`,`How we rebuilt our storage layer`,`Release candidate is out`],$e=[[`roadmap-q3.pdf`,`application/pdf`],[`budget-2027.xlsx`,`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`],[`meeting-notes.docx`,`application/vnd.openxmlformats-officedocument.wordprocessingml.document`],[`screenshot.png`,`image/png`],[`profile-trace.json`,`application/json`],[`invoice-48213.pdf`,`application/pdf`],[`photo-001.jpg`,`image/jpeg`],[`slides-final-v3.pptx`,`application/vnd.openxmlformats-officedocument.presentationml.presentation`],[`contract-signed.pdf`,`application/pdf`],[`logs.zip`,`application/zip`]];function et(e){let t=e>>>0;return()=>{t=t+1831565813>>>0;let e=t;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}}function I(e,t,n){return t+Math.floor(e()*(n-t+1))}function L(e,t){return t[Math.floor(e()*t.length)]}function tt(e,t){return e()>>0;return t}var rt={verb:[`review`,`ship`,`finalize`,`revisit`,`split up`,`land`,`profile`,`simplify`,`document`,`test`,`merge`,`roll back`,`prototype`,`estimate`],past:[`reviewed`,`updated`,`rebased`,`profiled`,`rewrote`,`merged`,`tested`,`cleaned up`,`measured`,`drafted`],noun:[`proposal`,`patch`,`migration plan`,`release notes`,`budget`,`design doc`,`test plan`,`benchmark results`,`contract`,`onboarding guide`,`roadmap`,`cache schema`,`invoice`,`dashboard`,`slide deck`,`checklist`,`meeting notes`,`API change`,`crash report`,`trace`],adj:[`much better`,`mostly fine`,`a bit rough`,`promising`,`stable`,`slower than expected`,`ready`,`surprisingly fast`,`close`,`blocked`],when:[`Friday`,`the end of the week`,`Tuesday’s sync`,`next sprint`,`the offsite`,`tomorrow morning`,`the release cut`,`Monday`,`the planning meeting`,`month end`],project:[`Atlas`,`Borealis`,`the sync worker`,`the message list`,`the reading pane`,`search`,`the compose dialog`,`the mobile layout`,`billing`,`the importer`],status:[`on track`,`slipping a little`,`waiting on review`,`nearly done`,`blocked on infra`,`in QA`,`behind schedule`,`ahead of plan`],problem:[`the intermittent timeout`,`a layout jump`,`the memory spike`,`slow first paint`,`duplicate notifications`,`the flaky test`,`stale results`,`a rendering glitch`],platform:[`Firefox Nightly`,`older Android tablets`,`Safari`,`the staging cluster`,`Windows laptops`,`the CI runners`,`large mailboxes`,`slow networks`],condition:[`the window is resized`,`the cache is cold`,`two tabs are open`,`the folder has a few thousand messages`,`the user switches folders quickly`,`the device wakes from sleep`],meeting:[`standup`,`Thursday’s review`,`the weekly sync`,`office hours`,`the retro`,`our 1:1`],decision:[`the rollout plan`,`which option to keep`,`the final scope`,`the deadline`,`who owns the follow-up`],doc:[`spreadsheet`,`summary`,`report`,`draft`,`write-up`,`export`],thing:[`photos`,`tickets`,`recipe`,`itinerary`,`receipts`,`book list`,`playlist`,`notes`]},it=[`Can we {verb} the {noun} before {when}?`,`I {past} the {noun} and it looks {adj} now.`,`The {noun} for {project} is {status}, so we should {verb} it by {when}.`,`{name}, could you take a look at the {noun} when you get a chance?`,`Thanks for sending the {noun}; I left a few comments inline.`,`We are still seeing {problem} on {platform}, mostly when {condition}.`,`Let’s {verb} this in {meeting} and decide on {decision}.`,`Attached is the {doc} with the latest numbers for {project}.`,`Quick update: {project} is {status} and the {noun} is {adj}.`,`I think we can {verb} the {noun} without touching {project}.`,`Does anyone remember why we decided to {verb} the {noun} last quarter?`,`{name} mentioned that {problem} only shows up on {platform}.`,`If nobody objects, I will {verb} the {noun} on {when}.`,`The numbers from {platform} look {adj} after the last change.`,`Sharing the {thing} from the weekend, more to follow.`,`Happy to pair on the {noun} if that helps move {project} along.`,`Before we {verb} anything, we should agree on {decision}.`,`I moved the {noun} into the shared folder so everyone can find it.`];function at(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ot(e){let t=I(e,7,16),n=[];for(let r=0;rn===`name`?L(e,Ue):L(e,rt[n]))}function ct(e,t=2,n=5){let r=I(e,t,n),i=[];for(let t=0;t180?`${e.slice(0,177)}...`:e}var dt=Date.UTC(2026,9,21,15,30),ft=`en-US`,pt={name:`Alex Morgan`,email:`alex.morgan@example.org`},mt=[{id:1,name:`Alex Morgan`,email:`alex.morgan@example.org`},{id:2,name:`Alex Morgan`,email:`alex@morgan.example`},{id:3,name:``,email:`support@northwind.example`}],ht=[{id:1,name:`Inbox`,role:`inbox`,count:1200,kind:`inbox`,span:540},{id:2,name:`Drafts`,role:`drafts`,count:6,kind:`draft`,span:30},{id:3,name:`Scheduled`,role:`scheduled`,count:2,kind:`scheduled`,span:0},{id:4,name:`Sent`,role:`sent`,count:350,kind:`sent`,span:700},{id:5,name:`Archive`,role:`archive`,count:2500,kind:`mixed`,span:1500},{id:6,name:`Junk`,role:`junk`,count:45,kind:`junk`,span:30},{id:7,name:`Trash`,role:`trash`,count:120,kind:`mixed`,span:30},{id:10,name:`Projects`,role:null,count:40,kind:`work`,span:900},{id:11,name:`Atlas`,role:null,parent:10,count:220,kind:`notification`,span:400},{id:12,name:`Borealis`,role:null,parent:10,count:140,kind:`work`,span:600},{id:13,name:`Design reviews`,role:null,parent:11,count:60,kind:`work`,span:300},{id:20,name:`Newsletters`,role:null,count:400,kind:`newsletter`,span:400},{id:21,name:`Feeds`,role:null,count:300,kind:`feed`,span:200},{id:22,name:`Receipts`,role:null,count:160,kind:`receipt`,span:800},{id:23,name:`Travel`,role:null,starred:!0,count:70,kind:`personal`,span:900},{id:24,name:`Family`,role:null,starred:!0,count:110,kind:`personal`,span:1200},{id:25,name:`Conferences`,role:null,count:50,kind:`work`,span:700},{id:26,name:`Open source`,role:null,count:30,kind:`notification`,span:500},{id:27,name:`mozilla-central`,role:null,parent:26,count:500,kind:`notification`,span:300},{id:28,name:`servo`,role:null,parent:26,count:250,kind:`notification`,span:300}],gt=[`$label1`,`$label2`,`$label3`,`$label4`,`$label5`],_t=864e5;function vt(e){return e.name?`${e.name} <${e.email}>`:e.email}function yt(e){return e.toLowerCase().normalize(`NFD`).replace(/[^a-z]/g,``)}function bt(e){let t=[],n=new Set;for(;t.length<400;){let r=L(e,Ue),i=L(e,We),a=tt(e,.7)?L(e,Ge):null,o=a?a.domain:L(e,Ke),s=`${tt(e,.5)?`${yt(r)}.${yt(i)}`:`${yt(r).charAt(0)}${yt(i)}`}@${o}`;n.has(s)||(n.add(s),t.push({name:`${r} ${i}`,email:s,organization:a?.name,send_count:0,last_sent_at:0}))}return t}function xt(e,t,n){let r=[],i=Math.max(t.span,1)*_t;for(let t=0;tt-e),r}function St(e){let t={};return tt(e,.11)&&(t[L(e,gt)]=!0,tt(e,.3)&&(t[L(e,gt)]=!0)),JSON.stringify(t)}function Ct(e,t){let n=L(t,e);return{name:n.name,email:n.email}}function wt(e){let t=L(e,Xe),n=e();return n<.35?`Re: ${t}`:n<.42?`Fwd: ${t}`:n<.5?`Re: Re: ${t}`:t.charAt(0).toUpperCase()+t.slice(1)}function Tt(e,t,n){let r={name:pt.name,email:pt.email},i=()=>{let e=[],r=tt(t,.35)?I(t,1,4):0;for(let i=0;i({id:e.id,name:e.name,role:e.role,parent_id:e.parent??null,is_starred:+!!e.starred})),i=[],a=1;for(let r of ht){let o=r.kind===`draft`||r.kind===`scheduled`?r.count:Math.max(1,Math.round(r.count*e)),s=xt(t,r,o);for(let e=0;et.email===e.email);t&&(t.send_count+=1,t.last_sent_at=Math.max(t.last_sent_at,p))}}}return{folders:r,messages:i,contacts:n}}var Dt=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},Ot=(e=>e?Dt(e):Dt),kt=e=>e;function At(e,t=kt){let n=C.useSyncExternalStore(e.subscribe,C.useCallback(()=>t(e.getState()),[e,t]),C.useCallback(()=>t(e.getInitialState()),[e,t]));return C.useDebugValue(n),n}var jt=e=>{let t=Ot(e),n=e=>At(t,e);return Object.assign(n,t),n},Mt=(e=>e?jt(e):jt),Nt=new Set([`$seen`,`$flagged`,`$mailflagbit0`,`$mailflagbit1`,`$mailflagbit2`,`$draft`,`$answered`,`$forwarded`,`$junk`,`$notjunk`,`$recent`,`$deleted`]),Pt=new Set([...Nt,`$mdnsent`,`$submitpending`,`$submitted`,`$phishing`,`$important`,`$autosent`,`$canunsubscribe`,`$followed`,`$hasattachment`,`$hasmemo`,`$hasnoattachment`,`$imported`,`$istrusted`,`$maskedemail`,`$memo`,`$muted`,`$new`,`$notify`,`$unsubscribed`,`junk`,`nonjunk`,`notjunk`,`nojunk`,`junkrecorded`,`$notphishing`,`$has_cal`,`$has_note`,`$attachment`,`$encrypted`,`$error`,`$ignored`,`$invitation`,`$queued`,`$replied`,`$sent`,`$signed`,`$todo`,`$watched`,`$pinned`,`$readreceipt`,`$notdelivered`,`$restored`,`$snoozed`,`$sievefailed`]),Ft=[{keyword:`$label1`,name:`Important`,color:`#FF0000`,order:0},{keyword:`$label2`,name:`Work`,color:`#FF9900`,order:1},{keyword:`$label3`,name:`Personal`,color:`#009900`,order:2},{keyword:`$label4`,name:`To Do`,color:`#3333FF`,order:3},{keyword:`$label5`,name:`Later`,color:`#993399`,order:4}];function It(e){return e.toLowerCase()}function Lt(e){let t=new Set(e.map(e=>It(e.keyword)));return e=>!Pt.has(e)||t.has(e)&&!Nt.has(e)}function Rt(e,t=[]){return Lt(t)(It(e))}function zt(e,t=[]){if(!e)return[];let n;try{n=JSON.parse(e)}catch{return[]}if(!n||typeof n!=`object`||Array.isArray(n))return[];let r=Lt(t),i=[],a=new Set;for(let[e,t]of Object.entries(n)){if(t!==!0)continue;let n=It(e);!r(n)||a.has(n)||(a.add(n),i.push(n))}return i}function Bt(e){return[...e].sort((e,t)=>e.order-t.order||e.name.localeCompare(t.name)||e.keyword.localeCompare(t.keyword))}function Vt(e,t){let n=new Set(zt(e,t));if(n.size===0)return[];let r=[];for(let e of Bt(t)){let t=It(e.keyword);n.has(t)&&(n.delete(t),r.push({keyword:t,name:e.name,color:e.color,defined:!0}))}for(let e of n)r.push({keyword:e,name:e,color:null,defined:!1});return r}function Ht(e,t){return t===0?`none`:t===e?`all`:`some`}function Ut(e,t=[]){let n=new Map,r=0;for(let i of e)if(i!=null){r+=1;for(let e of zt(i.keywords_json,t))n.set(e,(n.get(e)??0)+1)}return{inspected:r,keywords:[...n.keys()],presence:e=>Ht(r,n.get(It(e))??0)}}var Wt=`$flagged`,Gt=new Set([6,7]);function Kt(e){return typeof e==`string`}function R(e){return e.slice(4)}function qt(e){return`tag:${It(e)}`}function Jt(e,t){if(t===`$flagged`)return e.is_flagged===1;if(!e.keywords_json||e.keywords_json===`{}`)return!1;try{let n=JSON.parse(e.keywords_json);return Object.keys(n).some(e=>n[e]===!0&&It(e)===t)}catch{return!1}}var Yt=e=>(t,n)=>e.get(n).received_at-e.get(t).received_at||n-t,Xt={messages:null,folderIds:null,rows:new Map};function Zt(e,t){if(t==null)return[];(Xt.messages!==e.messages||Xt.folderIds!==e.folderIds)&&(Xt={messages:e.messages,folderIds:e.folderIds,rows:new Map});let n=Xt.rows.get(t);if(n)return n;let r;if(Kt(t)){let n=R(t);r=[];for(let t of e.messages.values())Gt.has(t.folder_id)||Jt(t,n)&&r.push(t);r.sort((e,t)=>t.received_at-e.received_at||t.id-e.id)}else r=(e.folderIds.get(t)??[]).map(t=>e.messages.get(t));return Xt.rows.set(t,r),r}var Qt={messages:null,counts:{unread:new Map,total:new Map,tags:new Map}};function $t(e){if(Qt.messages===e.messages)return Qt.counts;let t=new Map,n=new Map,r=new Map;for(let i of e.messages.values())if(n.set(i.folder_id,(n.get(i.folder_id)??0)+1),i.is_seen===0&&t.set(i.folder_id,(t.get(i.folder_id)??0)+1),!Gt.has(i.folder_id)&&(i.is_flagged===1&&r.set(Wt,(r.get(`$flagged`)??0)+1),i.keywords_json&&i.keywords_json!==`{}`)){let e=JSON.parse(i.keywords_json);for(let t of Object.keys(e)){if(e[t]!==!0)continue;let n=It(t);r.set(n,(r.get(n)??0)+1)}}return Qt={messages:e.messages,counts:{unread:t,total:n,tags:r}},Qt.counts}function en(e,t,n){let r=null;for(let i of t){let t=e.get(i);if(!t)continue;let a=n(t);!a||a===t||(r??=new Map(e),r.set(i,a))}return r??e}function tn(e,t){let n={};try{n=JSON.parse(e.keywords_json||`{}`)}catch{n={}}let r=JSON.stringify(n);t(n);let i=JSON.stringify(n);return r===i?e:{...e,keywords_json:i}}function nn(){let e=typeof location>`u`?null:new URLSearchParams(location.search),t=Et(Math.max(.01,Number(e?.get(`scale`)??1)||1)),n=new Map,r=new Map;for(let e of t.folders)r.set(e.id,[]);for(let e of t.messages)n.set(e.id,e),r.get(e.folder_id).push(e.id);let i=Yt(n);for(let e of r.values())e.sort(i);return{folders:t.folders,messages:n,folderIds:r,contacts:t.contacts}}var rn=0,z=Mt((e,t)=>{function n(e,t){let n={};return e.open.id!=null&&e.open.viewId===t&&(n.open={id:null,viewId:null}),e.focused.viewId===t&&(n.focused={id:null,viewId:null}),e.selection.ids.size>0&&e.selection.viewId===t&&(n.selection={viewId:null,ids:new Set}),n}function r(e,t){let n=e.open.id!=null&&t.has(e.open.id),r=!1;if(e.open.id==null&&e.selection.ids.size>0){for(let n of e.selection.ids)if(t.has(n)){r=!0;break}}if(!n&&!r)return;let i=(n?e.open.viewId:e.selection.viewId)??e.currentViewId,a=Zt(e,i),o=a.findIndex(e=>t.has(e.id));if(o<0)return{id:null,viewId:i};for(let e=o+1;e=0;--e)if(!t.has(a[e].id))return{id:a[e].id,viewId:i};return{id:null,viewId:i}}function i(e,t){let n={};if(e.open.id!=null&&t.has(e.open.id)&&(n.open={id:null,viewId:null}),e.focused.id!=null&&t.has(e.focused.id)&&(n.focused={id:null,viewId:null}),e.selection.ids.size>0){let r=new Set(e.selection.ids),i=!1;for(let e of t)r.delete(e)&&(i=!0);i&&(n.selection={viewId:r.size>0?e.selection.viewId:null,ids:r})}return n}function a(n,a){let o=t(),s=new Set(n.filter(e=>o.messages.has(e)));if(s.size===0)return;let c=r(o,s),l=new Map(o.messages),u=new Map(o.folderIds),d=new Set;for(let e of s){let t=l.get(e);d.add(t.folder_id),a==null?l.delete(e):l.set(e,{...t,folder_id:a})}for(let e of d)u.set(e,u.get(e).filter(e=>!s.has(e)));if(a!=null){let e=[...u.get(a).filter(e=>!s.has(e)),...s];e.sort(Yt(l)),u.set(a,e)}e({messages:l,folderIds:u,...i(o,s)}),c!==void 0&&t().selectMessage(c.id,c.id==null?void 0:c.viewId)}return{...nn(),currentViewId:1,folderPickCount:0,selection:{viewId:null,ids:new Set},focused:{id:null,viewId:null},open:{id:null,viewId:null},toasts:[],selectFolder(r){let i=t(),a=i.currentViewId;e({currentViewId:r,folderPickCount:i.folderPickCount+1,...n(i,a),...a===r?{}:n(i,r)})},selectMessage(n,r){let i=t(),a=n==null?null:r??i.currentViewId,o={open:{id:n,viewId:a},focused:{id:n,viewId:a}};if(n!=null){let e=i.messages.get(n);e&&e.is_seen===0&&(o.messages=en(i.messages,[n],e=>({...e,is_seen:1})))}e(o)},setFocusedMessage(t,n){e({focused:{id:t,viewId:t==null?null:n}})},setSelection(t,n){e({selection:{viewId:n.size>0?t:null,ids:n}})},clearSelection(){t().selection.ids.size!==0&&e({selection:{viewId:null,ids:new Set}})},markManySeen(n,r){let i=+!!r;e({messages:en(t().messages,n,e=>e.is_seen===i?e:{...e,is_seen:i})})},toggleManySeen(e){let{messages:n}=t(),r=e.some(e=>n.get(e)?.is_seen===0);t().markManySeen(e,r)},markManyFlagged(n,r){let i=+!!r;e({messages:en(t().messages,n,e=>e.is_flagged===i?e:{...e,is_flagged:i})})},toggleManyFlagged(e){let{messages:n}=t(),r=e.some(e=>n.get(e)?.is_flagged===1);t().markManyFlagged(e,!r)},setTagsMany(n,{add:r=[],remove:i=[]}){e({messages:en(t().messages,n,e=>tn(e,e=>{for(let t of i)for(let n of Object.keys(e))It(n)===It(t)&&delete e[n];for(let t of r)e[It(t)]=!0}))})},clearTagsMany(n){e({messages:en(t().messages,n,e=>tn(e,e=>{for(let t of Object.keys(e))Rt(t)&&delete e[t]}))})},moveMessages(e,n){let{messages:r}=t();a(e.filter(e=>r.get(e)?.folder_id!==n),n)},archiveMessages(e){t().moveMessages(e,5)},junkMessages(e){t().moveMessages(e,6)},notJunk(e){t().moveMessages(e,1)},destroyMessages(e){let{messages:n}=t(),r=e.filter(e=>n.get(e)?.folder_id===7),i=e.filter(e=>n.has(e)&&n.get(e).folder_id!==7);i.length>0&&a(i,7),r.length>0&&a(r,null)},cancelScheduledSend(n){let r=t();r.messages.get(n)&&(r.selectMessage(null),e({messages:en(t().messages,[n],e=>({...e,scheduled_undo_status:null,is_draft:1}))}),t().moveMessages([n],2),t().showToast(`Sending was canceled; the message is back in Drafts.`))},addMessage(n){let r=t(),i=0;for(let e of r.messages.keys())e>i&&(i=e);i+=1;let a={...n,id:i},o=new Map(r.messages);o.set(i,a);let s=new Map(r.folderIds),c=[i,...s.get(a.folder_id)];return c.sort(Yt(o)),s.set(a.folder_id,c),e({messages:o,folderIds:s}),i},removeMessage(e){a([e],null)},showToast(n){rn+=1;let r={id:rn,text:n};e({toasts:[...t().toasts.slice(-2),r]})},dismissToast(n){e({toasts:t().toasts.filter(e=>e.id!==n)})}}});function an(e,t){return t==null||Kt(t)?null:e.folders.find(e=>e.id===t)??null}var on=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/,sn=`3`;function cn(e,t){let n=un(e);return{domain:n,imageUrl:ln(n,t),initials:mn(e),style:hn(e)}}function ln(e,t){let n=dn(e),r=t.trim().replace(/\/+$/,``);return!r||!n?``:`${r}/${encodeURIComponent(n)}?v=${sn}`}function un(e){let t=fn(e);if(!t)return``;let n=t.lastIndexOf(`@`);return n<0?``:dn(t.slice(n+1))}function dn(e){let t=String(e??``).trim().toLowerCase().replace(/\.+$/,``);if(!t||t.length>253||/[\s/:?#@\\[\]]/.test(t))return``;let n;try{n=new URL(`https://${t}`).hostname.toLowerCase().replace(/\.+$/,``)}catch{return``}return!n||n!==t&&t.startsWith(`xn--`)||n===`localhost`||!n.includes(`.`)||gn(n)||n.split(`.`).some(e=>!on.test(e))?``:n}function fn(e){let t=String(e??``).trim();if(!t)return``;let n=t.match(/<([^<>@\s]+@[^<>@\s]+)>/)?.[1],r=t.match(/([^<>\s,;]+@[^<>\s,;]+)/)?.[1];return String(n??r??``).trim().toLowerCase()}function pn(e){if(!e)return`(no sender)`;let t=String(e).match(/^(.+?)\s*<.+>$/);return t?t[1].replace(/^"|"$/g,``):String(e)}function mn(e){let t=e?pn(e):``;return t&&(t.match(/(^\S\S?|\s\S)?/g)?.map(e=>e.trim()).join(``))?.match(/(^\S|\S$)?/g)?.join(``).toLocaleUpperCase()||`?`}function hn(e){return{background:`hsl(${_n(fn(e)||pn(e))%360} 42% 42%)`}}function gn(e){let t=e.split(`.`);return t.length===4?t.every(e=>/^\d+$/.test(e)&&Number(e)>=0&&Number(e)<=255):!1}function _n(e){let t=0;for(let n=0;n>>0;return t}function vn(e){return e.replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`)}function yn(e,t){let n=`> `.repeat(t);return e.split(` +`).map(e=>`${n}${e}`.trimEnd()).join(` +`)}function bn(e,t=72){let n=e.split(` `),r=[],i=``;for(let e of n)i&&i.length+e.length+1>t?(r.push(i),i=e):i=i?`${i} ${e}`:e;return i&&r.push(i),r.join(` +`)}function xn(e){return new Date(e).toLocaleString(`en-US`,{dateStyle:`medium`,timeStyle:`short`,timeZone:`UTC`})}function Sn(e,t){if(e.has_attachment!==1)return[];let n=I(t,1,3),r=[];for(let e=0;e=1;--i){let n=`On ${xn(e.received_at-i*I(t,2,30)*36e5)}, ${i===1?`Alex Morgan `:e.from_text} wrote:\n${bn(ct(t,2,4))}\n\n${bn(ct(t,1,3))}`;r=r?`${n}\n\n${yn(r,1)}`:n}a+=`\n\n${yn(r,1)}`}return`${a}\n\n-- \n${n}\n${L(t,[`Senior Engineer`,`Product Manager`,`Design Lead`,`Director of Operations`,`Support`])}`}function wn(e,t){let n=vn(pn(e.from_text)),r=[lt(e.body_seed)],i=I(t,1,3);for(let e=0;e{let r=vn(e);return n===1&&tt(t,.5)?`

${r.replace(/^(\S+ \S+ \S+)/,`$1`)}

`:`

${r}

`});if(tt(t,.4)){let e=I(t,2,5),n=[];for(let r=0;r${vn(st(t))}`);a.splice(1,0,`
    ${n.join(``)}
`)}tt(t,.35)&&a.push(`

See the shared document for the full write-up.

`);let o=/^(re|fwd):/i.test(e.subject)?`
On ${vn(xn(e.received_at-72e5))}, Alex Morgan wrote:

${vn(ct(t,2,4))}

`:``;return`

Hi Alex,

${a.join(``)}

Best,
${n}

${n} · ${vn(L(t,[`Northwind`,`Contoso`,`Fabrikam`,`Adatum`]))}
${o}
`}function Tn(e,t){let n=e.to_text?pn(e.to_text.split(`,`)[0]).split(` `)[0]:``,r=[n?`Hi ${n},`:`Hi,`,``,lt(e.body_seed)],i=I(t,0,2);for(let e=0;ee?`
${vn(e)}
`:`

`).join(``)}function En(e,t){let n=qe.find(t=>e.from_text.includes(t.email))??L(t,qe),r=n.color,i=I(t,3,6),a=[];for(let e=0;e
 

${e}

${vn(ct(t,2,3))}

Continue reading →
`)}let o=`https://${n.email.split(`@`)[1]}/unsubscribe?u=${e.id}`;return` +`}function Dn(e,t){let n=[],r=e.subject.match(/\d+/)?.[0]??String(e.id);if(n.push(`

${vn(lt(e.body_seed))}

`),tt(t,.6)){let e=[],r=I(t,4,12);for(let n=0;n${e.join(` +`)}`)}return n.push(`

${vn(ct(t,1,3))}

`),n.push(`

Reply to this email directly, view it on Forge, or unsubscribe.

`),n.join(` +`)}function On(e,t){return`

${vn(e.subject)}

${vn(lt(e.body_seed))}

CLAIM NOW

${vn(ct(t,3,5))}

`}var kn=new Map;function An(e){if(e.body)return e.body;let t=kn.get(e.id);if(t)return t;let n=et(nt(e.body_seed,2)),r;switch(e.body_kind){case`text`:r={text:Cn(e,n),attachments:[]};break;case`html`:r={html:wn(e,n),attachments:[]};break;case`newsletter`:r={html:En(e,n),attachments:[]};break;case`notification`:r={html:Dn(e,n),attachments:[]};break;case`junk`:r={html:On(e,n),attachments:[]};break;case`draft`:r={html:Tn(e,n),attachments:[]};break;default:r={text:``,attachments:[]}}return r.attachments=Sn(e,n),kn.set(e.id,r),r}function jn(e){let t=String(e??``).trim().normalize(`NFC`);if(!t)return``;let n=t.lastIndexOf(`@`);return n<=0||n===t.length-1?t.toLowerCase():`${t.slice(0,n).toLowerCase()}@${Mn(t.slice(n+1))}`}function Mn(e){let t=e.trim().toLowerCase();if(!t||t.startsWith(`[`)||/[/?#:@\\]/.test(t))return t;try{let{hostname:e}=new URL(`https://${t}`);return e||t}catch{return t}}function Nn(e){return e===` `||e===` `||e===`\r`||e===` +`}function Pn(e){return e===void 0?!1:e.codePointAt(0)>127?!0:/[A-Za-z0-9!#$%&'*+\-/=?^_`{|}~]/.test(e)}function Fn(e){for(;;){for(;Nn(e.src[e.i]);)e.i+=1;if(e.src[e.i]!==`(`)return!0;let t=0;do{let n=e.src[e.i];if(n===void 0)return!1;if(n===`\\`){e.i+=2;continue}n===`(`?t+=1:n===`)`&&--t,e.i+=1}while(t>0)}}function In(e,t){let n=e.charCodeAt(t);if(n<32)return n===9;if(n===127)return!1;if(n>=55296&&n<=56319){let n=e.charCodeAt(t+1);return n>=56320&&n<=57343}if(n>=56320&&n<=57343){let n=e.charCodeAt(t-1);return n>=55296&&n<=56319}return!0}function Ln(e){let t=e.i;e.i+=1;let n=``;for(;;){let r=e.src[e.i];if(r===void 0)return e.i=t,null;if(r===`\\`){let r=e.src[e.i+1];if(r===void 0||!In(e.src,e.i+1))return e.i=t,null;n+=r,e.i+=2;continue}if(r===`"`)return e.i+=1,{value:n,raw:e.src.slice(t,e.i)};if(!In(e.src,e.i))return e.i=t,null;n+=r,e.i+=1}}function Rn(e){let t=e.i;for(;Pn(e.src[e.i]);)e.i+=1;return e.src.slice(t,e.i)}function zn(e){let t=e.i;if(!Pn(e.src[e.i]))return``;for(;;){if(Rn(e),e.src[e.i]===`.`&&Pn(e.src[e.i+1])){e.i+=1;continue}return e.src.slice(t,e.i)}}function Bn(e){let t={src:e.src,i:e.i};for(;t.in||t.length===0,i=e.src[e.i];if(i===`"`){let n=Ln(e);if(!n)return null;t.push({text:n.value,spaced:r});continue}if(i===`.`){e.i+=1,t.push({text:`.`,spaced:r});continue}if(Pn(i)){t.push({text:Rn(e),spaced:r});continue}return t}}function Un(e){return e.map((e,t)=>t>0&&e.spaced?` ${e.text}`:e.text).join(``).trim().normalize(`NFC`)}function Wn(e){if(!Fn(e))return null;let t;if(e.src[e.i]===`"`){let n=Ln(e);if(!n)return null;t=n.raw}else t=zn(e);if(!t||!Fn(e)||e.src[e.i]!==`@`||(e.i+=1,!Fn(e)))return null;let n;if(e.src[e.i]===`[`){let t=Vn(e);if(t.kind!==`valid`)return null;n=t.value}else n=zn(e);return n?`${t}@${n}`.normalize(`NFC`):null}function Gn(e,t){if(e.lastAngle===void 0&&(e.lastAngle=e.src.lastIndexOf(`>`)),e.lastAngle<=e.i)return-1;let n={src:e.src,i:e.i+1};for(;n.i`)return n.i;if(e===`,`&&!t)return-1;if(e===`"`){if(!Ln(n))return-1;continue}if(e===`(`&&!t){if(!Fn(n))return-1;continue}if(e===`[`&&!t){if(Vn(n).kind===`unterminated`)return-1;continue}n.i+=1}return-1}function Kn(e,t){let n=-1;for(;;){let r=e.src[e.i];if(r===void 0){t&&(e.noGroupTerminator=!0,n>=0&&(e.i=n));return}if(r===`,`){if(!t||e.noGroupTerminator)return;n<0&&(n=e.i)}if(r===`;`){t&&(e.i+=1);return}if(r===`"`){if(!Ln(e)){e.i=e.src.length;return}continue}if(r===`(`){if(!Fn(e))return;continue}if(r===`[`){if(Vn(e).kind===`unterminated`){e.i=e.src.length;return}continue}if(r===`<`){let n=Gn(e,t);if(n>=0){e.i=n+1;continue}}e.i+=1}}var qn={addresses:null,wasGroup:!1},Jn={addresses:null,wasGroup:!0};function Yn(e){return{addresses:e,wasGroup:!1}}function Xn(e,t){let n=e.i,r=Hn(e);if(r===null||!Fn(e))return qn;let i=e.src[e.i];if(i===`<`){e.i+=1;let t=Wn(e);if(t===null||!Fn(e)||e.src[e.i]!==`>`||(e.i+=1,!Fn(e)))return qn;let n=Un(r);return Yn([{...n?{name:n}:{},email:t}])}if(i===`:`&&t===0){e.i+=1;let t=Zn(e);return t===null?Jn:{addresses:t,wasGroup:!0}}if(r.length===0)return qn;e.i=n;let a=Wn(e);return a===null||!Fn(e)?qn:Yn([{email:a}])}function Zn(e){let t=[];for(;;){if(!Fn(e))return null;let n=e.src[e.i];if(n===void 0)return null;if(n===`;`)return e.i+=1,Fn(e)?t:null;if(n===`,`){e.i+=1;continue}let r=Xn(e,1);if(r.addresses===null||!Fn(e))return null;let i=e.src[e.i];if(i!==`,`&&i!==`;`)return null;t.push(...r.addresses)}}function Qn(e){let t=[];if(!e)return t;let n={src:e,i:0};for(;n.ie.length===2?e:` `).replace(/[\u0000-\u0008\u000A-\u001F\u007F]/g,` `).trim();return t?`${/[",;:<>()[\]\\@]|\s\s|[^\S ]/.test(t)?`"${t.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`)}"`:t} <${e.email}>`:e.email}function tr(e){return e.map(er).join(`, `)}function nr(e){let t={src:e,i:0};for(;t.i`)return!0}return!1}function ir(e){let t=(e??``).trim();return/^re:/i.test(t)?t:t?`Re: ${t}`:`Re: (no subject)`}function ar(e){let t=(e??``).trim();return/^fwd:/i.test(t)?t:t?`Fwd: ${t}`:`Fwd: (no subject)`}function or({from:e,date:t,subject:n}){let r=t?new Date(Number(t)).toLocaleString(ft,{timeZone:`UTC`}):``;return[e?`From: ${e}`:null,r?`Date: ${r}`:null,n?`Subject: ${n}`:null].filter(Boolean).join(` +`)}function sr({from:e,date:t,subject:n,html:r,text:i}){let a=or({from:e,date:t,subject:n}),o=(r??``).trim()||cr(i??``).replace(/\n/g,`
`);return!a&&!o?``:`

${a.split(` +`).map(e=>cr(e)).join(`
`)}
${o}
`}function cr(e){return e.replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`)}var lr=[`to`,`cc`,`bcc`],ur=0,dr=dt;function fr(){return dr+=6e4,dr}function pr(e){return!(`invalid`in e)}function mr(e){let t=e.draft.subject.trim();if(t)return t;let n=[...e.draft.to,...e.draft.cc,...e.draft.bcc].find(pr);return n?.name?.trim()||n?.email||`New message`}function hr(e){let{draft:t}=e;return t.to.length+t.cc.length+t.bcc.length>0||t.subject.trim()!==``||t.text.replace(/\u00a0/g,` `).trim()!==``}function gr(e){return e.replace(/&/g,`&`).replace(//g,`>`).replace(/\n/g,`
`)}function _r(e){return $n(e).addresses}function vr(){return{fromIdx:0,to:[],cc:[],bcc:[],subject:``,html:``,text:``}}function yr(e,t,n,r={}){let i=t[e.fromIdx]??t[0],a=i.name?{name:i.name,email:i.email}:{email:i.email},o=e.to.filter(pr),s=e.cc.filter(pr),c=fr();return{folder_id:n,from_text:er(a),to_text:o.map(er).join(`, `),cc:s,subject:e.subject,preview:e.text.replace(/\s+/g,` `).trim().slice(0,180),received_at:c,sent_at:c,is_seen:1,is_flagged:0,is_draft:+(n===2),has_attachment:0,keywords_json:`{}`,scheduled_undo_status:null,body_kind:`html`,body_seed:0,body:{html:e.html||`


`,text:e.text,attachments:[]},...r}}var br=Mt((e,t)=>{function n(n,r){e({sessions:t().sessions.map(e=>e.id===n?r(e):e)})}function r(n){e({sessions:t().sessions.filter(e=>e.id!==n)})}function i(e){return t().sessions.find(t=>t.id===e)}function a(e){let n=z.getState();e.sourceDraftId!=null&&n.removeMessage(e.sourceDraftId),n.addMessage(yr(e.draft,t().identities,2))}return{sessions:[],identities:mt,open(n={}){ur+=1;let r=`compose-${ur}`,i={id:r,presentation:`expanded`,draft:{...vr(),to:n.to??[],cc:n.cc??[],subject:n.subject??``,html:n.html??``},draftEpoch:1,editorHtmlBody:n.html??``,closePromptOpen:!1,sourceDraftId:n.sourceDraftId??null};return e({sessions:[...t().sessions.map(e=>e.presentation===`expanded`?{...e,presentation:`minimized`}:e),i]}),r},minimize(e){n(e,e=>({...e,presentation:`minimized`,closePromptOpen:!1}))},restore(n){e({sessions:t().sessions.map(e=>e.id===n?{...e,presentation:`expanded`}:e.presentation===`expanded`?{...e,presentation:`minimized`}:e)})},close(e){r(e)},requestClose(e){let a=i(e);if(a){if(!hr(a)){r(e);return}t().restore(e),n(e,e=>({...e,closePromptOpen:!0}))}},cancelClose(e){n(e,e=>({...e,closePromptOpen:!1}))},closeWithoutSaving(e){r(e)},saveAndClose(e){let t=i(e);t&&(a(t),r(e),z.getState().showToast(`Draft saved.`))},discardDraft(e){let t=i(e);t&&(t.sourceDraftId!=null&&z.getState().removeMessage(t.sourceDraftId),r(e))},updateDraft(e,t){n(e,e=>({...e,draft:{...e.draft,...t}}))},send(e,n=null){let a=i(e);if(!a)return;let o=z.getState(),s=[...a.draft.to,...a.draft.cc,...a.draft.bcc];if(s.length===0||s.some(e=>!pr(e))){o.showToast(s.length===0?`Add at least one recipient before sending.`:`Fix the invalid recipients before sending.`);return}a.sourceDraftId!=null&&o.removeMessage(a.sourceDraftId),n?(o.addMessage(yr(a.draft,t().identities,3,{sent_at:n.targetAt,scheduled_undo_status:`pending`})),o.showToast(`Message scheduled for ${n.label}.`)):(o.addMessage(yr(a.draft,t().identities,4)),o.showToast(`Message sent.`)),r(e)},prepareReply(e,n){let r=new Set(t().identities.map(e=>jn(e.email))),i=e=>e.filter(e=>!r.has(jn(e.email))),a=_r(e.from_text),o=a.length>0&&a.every(e=>r.has(jn(e.email))),s=_r(e.to_text),c=i(o?s:a);c.length===0&&(c=a);let l=new Set(c.map(e=>jn(e.email))),u=[];if(n)for(let t of i([...s,...e.cc])){let e=jn(t.email);l.has(e)||(l.add(e),u.push(t))}let d=An(e),f=sr({from:e.from_text,date:e.received_at,subject:e.subject,html:d.html,text:d.text});t().open({to:c,cc:u,subject:ir(e.subject),html:`


${f}`})},prepareForward(e){let n=An(e),r=[`Subject: ${e.subject}`,`Date: ${new Date(e.received_at).toUTCString()}`,`From: ${e.from_text}`,`To: ${e.to_text}`].map(e=>e.replace(/&/g,`&`).replace(//g,`>`)).join(`
`),i=n.html??gr(n.text??``);t().open({subject:ar(e.subject),html:`


-------- Forwarded Message --------
${r}

${i}
`})},openDraft(e){let n=An(e);t().open({to:_r(e.to_text),cc:e.cc,subject:e.subject,html:n.html??gr(n.text??``),sourceDraftId:e.id})}}}),xr=1920;function Sr(){return typeof location>`u`?`dark`:new URLSearchParams(location.search).get(`theme`)===`light`?`light`:`dark`}var Cr=Mt((e,t)=>({theme:Sr(),space:`mail`,quickFilter:``,folderListWidth:240,messageColumnWidth:360,quickFilterFocusRequest:0,setTheme:t=>e({theme:t}),toggleTheme:()=>e({theme:t().theme===`dark`?`light`:`dark`}),setSpace:t=>e({space:t,quickFilter:``}),setQuickFilter:t=>e({quickFilter:t}),setFolderListWidth:t=>e({folderListWidth:t}),setMessageColumnWidth:t=>e({messageColumnWidth:t}),requestQuickFilterFocus:()=>e({quickFilterFocusRequest:t().quickFilterFocusRequest+1})}));function wr(e,t,n){return Math.max(t,Math.min(e,Math.max(t,n)))}function Tr(e){let[t,n]=(0,C.useState)(!1),r=(0,C.useRef)(e);r.current=e;let i=(0,C.useRef)(null),a=(0,C.useCallback)(e=>{let t=i.current;if(!t)return;let n=r.current;n.set(wr(t.startWidth+e.clientX-t.startX,n.min(),n.max()))},[]),o=(0,C.useCallback)(()=>{i.current&&(i.current=null,n(!1),document.body.classList.remove(`is-column-resizing`),window.removeEventListener(`pointermove`,a),window.removeEventListener(`pointerup`,o),window.removeEventListener(`pointercancel`,o))},[a]),s=(0,C.useCallback)(e=>{e.button===0&&(e.preventDefault(),i.current={startX:e.clientX,startWidth:r.current.get()},n(!0),document.body.classList.add(`is-column-resizing`),window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,o,{once:!0}),window.addEventListener(`pointercancel`,o,{once:!0}))},[a,o]),c=(0,C.useCallback)(e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault();let t=r.current,n=e.shiftKey?40:10,i=e.key===`ArrowRight`?1:-1;t.set(wr(t.get()+i*n,t.min(),t.max()))},[]);return(0,C.useEffect)(()=>o,[o]),{active:t,onPointerDown:s,onKeyDown:c}}function Er(){return typeof navigator>`u`?!1:/Mac|iPhone|iPad|iPod/.test(navigator.platform)}function Dr(){return Er()?`⌘`:`Ctrl`}function Or(){return Er()?`Meta`:`Control`}function kr(e){return Er()?e.metaKey:e.ctrlKey}function Ar(e){return e.isComposing||e.keyCode===229}function jr(e){if(!(e instanceof Element)||e.closest(`iframe`))return!1;let t=e.closest(`input, textarea, select, [contenteditable="true"]`);return!(!t||t instanceof HTMLInputElement&&t.type===`checkbox`)}function Mr(e,t){let n=t.key.length===1?t.key.toLowerCase():t.key;return!((e.key.length===1?e.key.toLowerCase():e.key)!==n||!!t.mod!==kr(e)||!!t.shift!==e.shiftKey||!!t.alt!==e.altKey)}var Nr=null;function Pr(e){return Nr=e,()=>{Nr===e&&(Nr=null)}}function Fr(){let{selection:e,open:t}=z.getState();return e.ids.size>0?[...e.ids]:t.id==null?[]:[t.id]}var Ir={j:`next`,k:`previous`,n:`nextUnread`,p:`previousUnread`};function Lr({enabled:e}){let t=(0,C.useRef)(e);t.current=e,(0,C.useEffect)(()=>{function e(e){if(!t.current||e.defaultPrevented||Ar(e))return;let n=br.getState(),r=n.sessions.find(e=>e.presentation===`expanded`);if(r){if(e.key!==`Escape`||document.activeElement?.matches?.(`.compose-dialog [role="combobox"][aria-expanded="true"]`)||document.querySelector(`.compose-dialog--expanded details[data-dropdown-group][open]`))return;e.preventDefault(),n.requestClose(r.id);return}if(e.target instanceof Element&&e.target.closest(`[data-message-control]`)&&[`Enter`,` `,`Escape`,`F2`,`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key))return;let i=Er()?e.metaKey:e.ctrlKey,a=jr(e.target),o=e.key.length===1?e.key.toLowerCase():e.key;if(o===`/`&&!i&&!a||o===`k`&&i){e.preventDefault(),Cr.getState().requestQuickFilterFocus();return}if(Cr.getState().space!==`mail`||a||e.target instanceof Element&&e.target.closest(`[data-tag-picker-popover], details.tag-picker-dropdown[open]`)||e.altKey||i&&o!==`a`)return;let s=z.getState();if(o===`a`&&i){if(!Nr)return;e.preventDefault(),Nr.selectAll();return}if(e.shiftKey&&o!==`r`&&o!==`Delete`&&o!==`Backspace`)return;switch(o){case`c`:e.preventDefault(),n.open();return;case`r`:case`f`:{let{open:t,messages:r}=s,i=t.id==null?null:r.get(t.id);if(!i||i.scheduled_undo_status===`pending`||s.selection.ids.size>0)return;e.preventDefault(),o===`f`?n.prepareForward(i):n.prepareReply(i,e.shiftKey);return}case`a`:case`m`:case`s`:case`Delete`:case`Backspace`:{if(o===`Backspace`&&!Er())return;let t=Fr();if(t.length===0)return;e.preventDefault(),o===`a`?s.archiveMessages(t):o===`m`?s.toggleManySeen(t):o===`s`?s.toggleManyFlagged(t):s.destroyMessages(t);return}case`t`:if(Fr().length===0||!Nr)return;e.preventDefault(),Nr.openTagMenu();return;case`Escape`:if(s.selection.ids.size===0||document.querySelector(`details.app-dropdown[open]`))return;e.preventDefault(),s.clearSelection();return;default:}if(/^[0-9]$/.test(o)){let t=Fr();if(t.length===0)return;if(e.preventDefault(),o===`0`){s.clearTagsMany(t);return}let n=Ft[Number(o)-1];if(!n)return;let r=n.keyword.toLowerCase(),i=t.every(e=>{let t=s.messages.get(e)?.keywords_json??`{}`;return!!JSON.parse(t)[r]});s.setTagsMany(t,i?{remove:[r]}:{add:[r]});return}let c=Ir[o];c&&Nr&&(e.preventDefault(),Nr.navigate(c))}return document.addEventListener(`keydown`,e,!0),()=>document.removeEventListener(`keydown`,e,!0)},[])}var Rr=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),B=o(((e,t)=>{t.exports=Rr()}))();function zr({svg:e,className:t}){return(0,B.jsx)(`span`,{className:t,"aria-hidden":`true`,dangerouslySetInnerHTML:{__html:e}})}function Br({size:e=`compact`,variant:t=`filled`,formAction:n=`none`,iconLeft:r,iconRight:i,className:a,children:o,...s}){let c=[`base`,`primary`,t,`app-button`,e===`compact`?`app-button--compact`:``,a??``].filter(Boolean).join(` `);return(0,B.jsxs)(`button`,{...s,className:c,type:n===`none`?`button`:n,"data-testid":`button`,children:[r?(0,B.jsx)(`span`,{className:`icon`,children:r}):null,(0,B.jsx)(`span`,{className:`text`,children:o}),i?(0,B.jsx)(`span`,{className:`icon`,children:i}):null]})}var Vr=(0,C.forwardRef)(({danger:e=!1,className:t,children:n,...r},i)=>(0,B.jsx)(`button`,{...r,ref:i,type:`button`,className:[`app-icon-button`,e?`app-icon-button--danger`:``,t??``].filter(Boolean).join(` `),children:n}));function Hr({active:e=!1,className:t,children:n,...r}){return(0,B.jsx)(`button`,{...r,type:`button`,className:[`app-toggle-button`,e?`is-active`:``,t??``].filter(Boolean).join(` `),"aria-pressed":e,children:n})}function Ur({maximized:e,surface:t,onToggle:n,className:r}){let i=`${e?`Restore`:`Maximize`} ${t}`;return(0,B.jsx)(Vr,{className:r,"aria-label":i,title:i,onMouseDown:e=>e.preventDefault(),onClick:n,children:e?(0,B.jsx)(De,{size:18,strokeWidth:1.65,"aria-hidden":`true`}):(0,B.jsx)(j,{size:18,strokeWidth:1.65,"aria-hidden":`true`})})}function Wr(e){let t=e instanceof Element?e:e?.currentTarget;if(!(t instanceof Element))return;let n=t.closest(`details`);n instanceof HTMLDetailsElement&&(n.open=!1)}function Gr({group:e=`app`,disabled:t=!1,className:n,onToggle:r,children:i,...a}){let o=(0,C.useRef)(null),s=(0,C.useCallback)(e=>{let t=o.current;t?.open&&(e.target instanceof Node&&t.contains(e.target)||(t.open=!1))},[]),c=(0,C.useCallback)(e=>{let t=o.current;!t?.open||e.key!==`Escape`||(e.preventDefault(),e.stopPropagation(),t.open=!1,t.contains(document.activeElement)&&t.querySelector(`summary`)?.focus())},[]),l=(0,C.useCallback)(()=>{document.removeEventListener(`pointerdown`,s,!0),document.removeEventListener(`keydown`,c,!0)},[s,c]);(0,C.useEffect)(()=>l,[l]);function u(t){let n=o.current;n&&(n.open?(document.addEventListener(`pointerdown`,s,!0),document.addEventListener(`keydown`,c,!0),document.querySelectorAll(`details[data-dropdown-group="${e}"]`).forEach(e=>{e!==n&&e.open&&(e.open=!1)})):l()),r?.(t)}function d(e){t&&(e.preventDefault(),e.stopPropagation())}return(0,B.jsx)(`details`,{...a,ref:o,className:[`app-dropdown`,t?`app-dropdown--disabled`:``,n??``].filter(Boolean).join(` `),"data-dropdown-group":e,onToggle:u,onClickCapture:d,children:i})}function Kr(e,t,n){if(n.key===`Tab`){let t=e?.closest(`details`);t instanceof HTMLDetailsElement&&t.open&&(t.open=!1,t.querySelector(`summary`)?.focus());return}if(![`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(n.key))return;let r=Array.from(e?.querySelectorAll(t)??[]);if(r.length===0)return;n.preventDefault();let i=r.indexOf(document.activeElement),a;switch(n.key){case`ArrowDown`:a=i<0?0:Math.min(r.length-1,i+1);break;case`ArrowUp`:a=i<0?r.length-1:Math.max(0,i-1);break;case`Home`:a=0;break;default:a=r.length-1}r[a]?.focus()}var qr=` + + + +`,Jr=` + + + +`,Yr=` + + + +`,Xr=` + + + + +`;function Zr(e){if(e==null||Number.isNaN(e))return null;if(e<=0)return`0 B`;for(let t of[{threshold:1024**3,label:`GB`,divisor:1024**3},{threshold:1024**2,label:`MB`,divisor:1024**2},{threshold:1024,label:`KB`,divisor:1024}])if(e>=t.threshold)return`${Math.floor(e/t.divisor)} ${t.label}`;return`${e} B`}function Qr({active:e,unreadCount:t,folderListHidden:n,sidebarLabel:r,onChange:i,onToggleFolderList:a,inert:o}){let s=`${n?`Show`:`Hide`} ${r}`;return(0,B.jsxs)(`nav`,{className:`app-spaces`,"aria-label":`Spaces`,inert:o,"aria-hidden":o||void 0,children:[(0,B.jsxs)(Hr,{className:`app-spaces__item`,active:e===`mail`,onClick:()=>i(`mail`),"aria-label":`Mail`,title:`Mail`,children:[(0,B.jsx)(_e,{size:20,strokeWidth:1.75}),t>0?(0,B.jsx)(`span`,{className:`app-spaces__badge`,"aria-hidden":`true`,children:t>9999?`9999+`:t}):null]}),(0,B.jsx)(Hr,{className:`app-spaces__item`,active:e===`contacts`,onClick:()=>i(`contacts`),"aria-label":`Contacts`,title:`Contacts`,children:(0,B.jsx)(ze,{size:20,strokeWidth:1.75})}),(0,B.jsxs)(`div`,{className:`app-spaces__bottom-actions`,children:[(0,B.jsx)(Hr,{className:`app-spaces__item app-spaces__settings`,"aria-label":`Settings`,title:`Settings`,"data-settings-gear":!0,children:(0,B.jsx)(Ee,{size:20,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(Hr,{className:`app-spaces__item`,active:!n,"aria-label":s,title:s,"data-folder-list-toggle":!0,onClick:a,children:(0,B.jsx)(`span`,{className:`app-spaces__folder-toggle-icon${n?` is-hidden`:``}`,"aria-hidden":`true`,children:(0,B.jsx)(`span`,{})})})]})]})}function $r(e){(0,C.useEffect)(()=>{function t(t){let n=e.current;n?.open&&t.target instanceof Node&&!n.contains(t.target)&&(n.open=!1)}return document.addEventListener(`pointerdown`,t),()=>document.removeEventListener(`pointerdown`,t)},[e])}function ei(){let e=(0,C.useRef)(null);$r(e);let t=pt.email,n=mn(t),r=hn(t),i=()=>{e.current&&(e.current.open=!1)};return(0,B.jsxs)(`details`,{ref:e,className:`account-menu`,children:[(0,B.jsx)(`summary`,{className:`account-menu__button`,"aria-label":`Open account menu`,children:(0,B.jsx)(`span`,{className:`account-menu__avatar`,style:r,"aria-hidden":`true`,children:n})}),(0,B.jsxs)(`div`,{className:`account-menu__popover`,role:`menu`,children:[(0,B.jsxs)(`div`,{className:`account-menu__identity`,children:[(0,B.jsx)(`span`,{className:`account-menu__avatar account-menu__avatar--large`,style:r,"aria-hidden":`true`,children:n}),(0,B.jsx)(`span`,{className:`account-menu__email`,children:t})]}),(0,B.jsxs)(`button`,{className:`account-menu__item`,type:`button`,role:`menuitem`,onClick:i,children:[(0,B.jsx)(Ee,{size:16,strokeWidth:1.75,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Settings`})]}),(0,B.jsxs)(`a`,{className:`account-menu__item`,href:`#account`,role:`menuitem`,onClick:i,children:[(0,B.jsx)(re,{size:16,strokeWidth:1.75,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Account Settings`})]}),(0,B.jsxs)(`a`,{className:`account-menu__item`,href:`#support`,role:`menuitem`,onClick:i,children:[(0,B.jsx)(zr,{className:`account-menu__support-icon`,svg:Xr}),(0,B.jsx)(`span`,{children:`Contact Support`})]}),(0,B.jsxs)(`button`,{className:`account-menu__item`,type:`button`,role:`menuitem`,onClick:i,children:[(0,B.jsx)(he,{size:16,strokeWidth:1.75,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Log Out`})]})]})]})}var ti=[{id:`appointment`,name:`Appointment`,glyph:qr},{id:`send`,name:`Send`,glyph:Yr}];function ni(){let e=(0,C.useRef)(null);$r(e);let t=()=>{e.current?.open&&(e.current.open=!1)};return(0,B.jsxs)(`details`,{ref:e,className:`app-drawer`,onKeyDown:e=>{e.key===`Escape`&&t()},children:[(0,B.jsx)(`summary`,{className:`quick-filter__action app-drawer__button`,"aria-label":`Open app drawer`,title:`Apps`,children:(0,B.jsx)(ce,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsxs)(`div`,{className:`app-drawer__popover`,role:`menu`,"aria-label":`Thunderbird Pro apps`,children:[(0,B.jsxs)(`button`,{className:`app-drawer__tile app-drawer__tile--current`,type:`button`,role:`menuitem`,"aria-current":`page`,onClick:t,children:[(0,B.jsx)(zr,{className:`app-drawer__icon`,svg:Jr}),(0,B.jsx)(`span`,{className:`app-drawer__label`,children:`Mail`})]}),ti.map(e=>(0,B.jsxs)(`a`,{className:`app-drawer__tile`,href:`#${e.id}`,role:`menuitem`,onClick:t,children:[(0,B.jsx)(zr,{className:`app-drawer__icon`,svg:e.glyph}),(0,B.jsx)(`span`,{className:`app-drawer__label`,children:e.name})]},e.id))]})]})}var ri=30*1024**3,ii=Math.round(ri*.37);function ai(){let e=Math.round(ii/ri*100),t=`${e}% of ${Zr(ri)}`;return(0,B.jsxs)(`div`,{className:`storage-usage`,role:`status`,"aria-label":t,children:[(0,B.jsx)(`div`,{className:`storage-usage__track`,"aria-hidden":`true`,children:(0,B.jsx)(`div`,{className:`storage-usage__fill`,style:{width:`${e}%`}})}),(0,B.jsx)(`p`,{className:`storage-usage__label`,children:t})]})}var oi=` + + + + +`,si=` + + + + +`,ci=` + + + + +`,li=` + + + + +`,ui=` + + + + +`,di=` + + + +`,fi=` + + + + +`,pi=` + + + + +`,mi={inbox:ci,sent:fi,drafts:si,scheduled:di,archive:oi,trash:` + + + + +`,junk:pi},hi={inbox:`#1a73e8`,sent:`#188038`,drafts:`#7e22ce`,scheduled:`#0e7490`,archive:`#8b5a2b`,trash:`#5f6368`,junk:`#d93025`,important:`#f9ab00`,flagged:`#c5221f`,all:`#5f6368`},gi={newsletters:{icon:li,color:`#7378a6`},feeds:{icon:ui,color:`#f97316`}};function _i(e){return String(e??``).trim().toLowerCase()}function vi(e){let t=e.role??null,n=gi[_i(e.name)];return{icon:(t&&mi[t])??n?.icon??` + + + + +`,color:(t&&hi[t])??n?.color??`var(--folder-icon-color)`}}function yi(e){let t=e.role===`scheduled`?e.total_emails:e.unread_emails;return Math.max(0,Number(t)||0)}function bi(e){switch(e.role){case`inbox`:return 0;case`drafts`:return 1;case`scheduled`:return 2;case`sent`:return 3;case`archive`:return 4;case`junk`:return 5;case`trash`:return 6;default:return 100}}function xi(e){return e.role!=null&&mi[e.role]!=null}function Si(e,t){return bi(e)-bi(t)||Number(t.is_starred??0)-Number(e.is_starred??0)||String(e.name??``).localeCompare(String(t.name??``))}var Ci=`application/x-stormbox-message-ids`,wi=Mt(e=>({dragging:!1,draggedIds:[],sourceViewId:null,startDrag(t,{messageId:n,selectedIds:r,sourceViewId:i}){let a=r.has(n)?[...r]:[n];t.dataTransfer.effectAllowed=`copyMove`,t.dataTransfer.setData(Ci,JSON.stringify({ids:a,sourceViewId:i})),t.dataTransfer.setData(`text/plain`,a.length===1?`1 message`:`${a.length} messages`),e({dragging:!0,draggedIds:a,sourceViewId:i})},endDrag(){e({dragging:!1,draggedIds:[],sourceViewId:null})}}));function Ti(e){let t=e.dataTransfer.getData(Ci);if(t)try{let e=JSON.parse(t);if(Array.isArray(e.ids))return{ids:e.ids.map(Number),sourceViewId:e.sourceViewId??null}}catch{return null}let n=wi.getState();return n.dragging?{ids:n.draggedIds,sourceViewId:n.sourceViewId}:null}function Ei(e,t,n){let r=new Map(e.map(e=>[e.id,e])),i=new Map;for(let t of e){let e=t.parent_id==null?null:r.get(t.parent_id),n=t.is_starred===1&&e!=null,a=e!=null&&!n?t.parent_id:`ROOT`;i.has(a)||i.set(a,[]),i.get(a).push(t)}for(let e of i.values())e.sort(Si);function a(e,r){let o=vi(e),s=t.get(e.id)??0,c=n.get(e.id)??0,l=(i.get(e.id)??[]).map(e=>a(e,r+1)),u=yi({role:e.role,unread_emails:s,total_emails:c});return{...e,depth:r,icon:o.icon,tone:o.color,children:l,unread_emails:s,total_emails:c,subtree_unread:l.reduce((e,t)=>e+t.subtree_unread,u)}}return(i.get(`ROOT`)??[]).map(e=>a(e,0))}var Di=(0,C.memo)(function e({folder:t,current:n,expanded:r,dragOverId:i,dragging:a,dragSourceId:o,onPick:s,onToggle:c,onDragTarget:l,onDropOn:u}){let d=t.children.length>0,f=d&&!r.has(t.id),p=f?t.subtree_unread:yi({role:t.role,unread_emails:t.unread_emails,total_emails:t.total_emails}),m=a&&i===t.id?o===t.id?`invalid`:`move`:null,h={paddingLeft:`${10+t.depth*16}px`,"--folder-tone":t.tone};return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{className:[`folder-node`,n===t.id?`is-current`:``,t.tone?`has-tone`:``,m===`move`?`is-drop-valid`:``,m===`invalid`?`is-drop-invalid`:``].filter(Boolean).join(` `),style:h,"data-folder-id":t.id,onDragEnter:e=>{e.preventDefault(),l(t.id)},onDragOver:e=>{e.preventDefault(),e.dataTransfer.dropEffect=o===t.id?`none`:`move`},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||i===t.id&&l(null)},onDrop:e=>u(t.id,e),children:[d?(0,B.jsx)(`button`,{type:`button`,className:`folder-node__toggle${f?` is-collapsed`:``}`,"aria-expanded":!f,"aria-label":f?`Expand folder`:`Collapse folder`,onClick:()=>c(t.id),children:(0,B.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`12`,height:`12`,"aria-hidden":`true`,children:(0,B.jsx)(`path`,{d:`M6 4l4 4-4 4`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`})})}):(0,B.jsx)(`span`,{className:`folder-node__toggle folder-node__toggle--spacer`,"aria-hidden":`true`}),(0,B.jsxs)(`button`,{type:`button`,className:`folder-node__button`,onClick:()=>s(t.id),children:[(0,B.jsxs)(`span`,{className:`folder-node__icon-wrap`,children:[(0,B.jsx)(`span`,{className:`folder-node__icon`,"aria-hidden":`true`,dangerouslySetInnerHTML:{__html:t.icon}}),t.is_starred===1?(0,B.jsx)(Oe,{className:`folder-node__star`,size:10,strokeWidth:2,"aria-label":`Starred folder`}):null]}),(0,B.jsx)(`span`,{className:`folder-node__name`,children:t.name||`(unnamed)`}),p>0?(0,B.jsx)(`span`,{className:`folder-node__count`,children:p>99999?`99999+`:p}):null]})]}),d&&!f?t.children.map(t=>(0,B.jsx)(e,{folder:t,current:n,expanded:r,dragOverId:i,dragging:a,dragSourceId:o,onPick:s,onToggle:c,onDragTarget:l,onDropOn:u},t.id)):null]})});function Oi({keyword:e,name:t,color:n,count:r,current:i,dropActive:a,onPick:o,onDragTarget:s,onDropOn:c}){return(0,B.jsx)(`div`,{className:[`tag-view-node`,i?`is-current`:``,a?`is-drop-valid`:``].filter(Boolean).join(` `),style:n?{"--tag-color":n}:void 0,"data-tag-view":e,onDragEnter:t=>{t.preventDefault(),s(e)},onDragOver:e=>{e.preventDefault(),e.dataTransfer.dropEffect=`copy`},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||s(null)},onDrop:t=>c(e,t),children:(0,B.jsxs)(`button`,{type:`button`,className:`tag-view-node__button`,"aria-current":i?`page`:void 0,onClick:()=>o(e),children:[(0,B.jsx)(`span`,{className:`tag-view-node__icon-wrap`,"aria-hidden":`true`,children:n===null?(0,B.jsx)(Oe,{className:`tag-view-node__star`,size:14,strokeWidth:2}):(0,B.jsx)(`span`,{className:`tag-view-node__dot`})}),(0,B.jsx)(`span`,{className:`tag-view-node__name`,children:t}),r>0?(0,B.jsx)(`span`,{className:`tag-view-node__count`,children:r>99999?`99999+`:r}):null]})})}function ki(){let e=z(e=>e.folders),t=z(e=>e.messages),n=z(e=>e.currentViewId),r=z(e=>e.selectFolder),{dragging:i,sourceViewId:a,endDrag:o}=wi(),[s,c]=(0,C.useState)(()=>new Set),[l,u]=(0,C.useState)(null),[d,f]=(0,C.useState)(null),p=$t({messages:t}),m=(0,C.useMemo)(()=>Ei(e,p.unread,p.total),[e,p]),h=m.filter(xi),g=m.filter(e=>!xi(e)),_=g.filter(e=>e.is_starred===1),v=g.filter(e=>e.is_starred!==1),y=(0,C.useCallback)(e=>{c(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),b=(0,C.useCallback)((e,t)=>{t.preventDefault(),u(null);let n=Ti(t);n&&n.ids.length>0&&n.sourceViewId!==e&&z.getState().moveMessages(n.ids,e),o()},[o]),x=(0,C.useCallback)((e,t)=>{t.preventDefault(),f(null);let n=Ti(t);if(n&&n.ids.length>0){let t=z.getState();e===`$flagged`?t.markManyFlagged(n.ids,!0):t.setTagsMany(n.ids,{add:[e]})}o()},[o]),S=(0,C.useCallback)(e=>r(qt(e)),[r]),w=[{keyword:Wt,name:`Starred`,color:null},...Ft.map(e=>({keyword:e.keyword.toLowerCase(),name:e.name,color:e.color}))],T=Kt(n)?R(n):null,E={current:n,expanded:s,dragOverId:l,dragging:i,dragSourceId:a,onPick:r,onToggle:y,onDragTarget:u,onDropOn:b};return(0,B.jsxs)(`nav`,{className:`folder-tree`,"aria-label":`Mailboxes`,children:[h.map(e=>(0,B.jsx)(Di,{folder:e,...E},e.id)),(0,B.jsxs)(`div`,{className:`folder-tree__heading-row`,children:[(0,B.jsx)(`h3`,{className:`folder-tree__heading`,children:`Folders`}),(0,B.jsx)(`span`,{className:`folder-tree__heading-actions`,children:(0,B.jsx)(`button`,{type:`button`,className:`folder-tree__manage`,"data-manage-folders":!0,title:`Manage Folders`,"aria-label":`Manage Folders`,children:(0,B.jsx)(Te,{size:16,strokeWidth:1.75,"aria-hidden":`true`})})})]}),_.map(e=>(0,B.jsx)(Di,{folder:e,...E},e.id)),v.map(e=>(0,B.jsx)(Di,{folder:e,...E},e.id)),(0,B.jsxs)(`div`,{className:`folder-tree__heading-row`,"data-tag-views":!0,children:[(0,B.jsx)(`h3`,{className:`folder-tree__heading`,children:`Tags`}),(0,B.jsx)(`span`,{className:`folder-tree__heading-actions`,children:(0,B.jsx)(`button`,{type:`button`,className:`folder-tree__manage`,"data-manage-tags":!0,title:`Manage Tags`,"aria-label":`Manage Tags`,children:(0,B.jsx)(Te,{size:16,strokeWidth:1.75,"aria-hidden":`true`})})})]}),w.map(e=>(0,B.jsx)(Oi,{keyword:e.keyword,name:e.name,color:e.color,count:p.tags.get(e.keyword)??0,current:T===e.keyword,dropActive:i&&d===e.keyword,onPick:S,onDragTarget:f,onDropOn:x},e.keyword))]})}var Ai=m();function ji(e,t,n){let r=Array(e);return new Proxy(r,{get(r,i,a){if(typeof i==`string`){let a=i.charCodeAt(0);if(a>=48&&a<=57){let a=+i;if(Number.isInteger(a)&&a>=0&&ar[t]!==e)?(r=o,i=t(...o),n?.onChange&&!(a&&n.skipInitialOnChange)&&n.onChange(i),a=!1,i):i}return o.updateDeps=e=>{r=e},o}function Ni(e,t){if(e===void 0)throw Error(`Unexpected undefined${t?`: ${t}`:``}`);return e}var Pi=(e,t)=>Math.abs(e-t)<1.01,Fi=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},Ii,Li=()=>{if(Ii!==void 0)return Ii;if(typeof navigator>`u`)return Ii=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return Ii=!0;let e=navigator.maxTouchPoints;return Ii=navigator.platform===`MacIntel`&&e!==void 0&&e>0},Ri=e=>{let{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},zi=e=>e,Bi=e=>{let t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1)-t+1,r=Array(n);for(let e=0;e{let n=e.scrollElement;if(!n)return;let r=e.targetWindow;if(!r)return;let i=e=>{let{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(i(Ri(n)),!r.ResizeObserver)return()=>{};let a=new r.ResizeObserver(t=>{let r=()=>{let e=t[0];if(e?.borderBoxSize){let t=e.borderBoxSize[0];if(t){i({width:t.inlineSize,height:t.blockSize});return}}i(Ri(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return a.observe(n,{box:`border-box`}),()=>{a.unobserve(n)}},Hi={passive:!0},Ui=typeof window>`u`?!0:`onscrollend`in window,Wi=(e,t,n)=>{let r=e.scrollElement;if(!r)return;let i=e.targetWindow;if(!i)return;let a=e.options.useScrollendEvent&&Ui,o=0,s=a?null:Fi(i,()=>t(o,!1),e.options.isScrollingResetDelay),c=e=>()=>{o=n(r),s?.(),t(o,e)},l=c(!0),u=c(!1);return r.addEventListener(`scroll`,l,Hi),a&&r.addEventListener(`scrollend`,u,Hi),()=>{r.removeEventListener(`scroll`,l),a&&r.removeEventListener(`scrollend`,u)}},Gi=(e,t)=>Wi(e,t,t=>{let{horizontal:n,isRtl:r}=e.options;return n?t.scrollLeft*(r&&-1||1):t.scrollTop}),Ki=(e,t,n)=>{if(t?.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?`inlineSize`:`blockSize`])}return e[n.options.horizontal?`offsetWidth`:`offsetHeight`]},qi=(e,{adjustments:t=0,behavior:n},r)=>{var i,a;(a=(i=r.scrollElement)?.scrollTo)==null||a.call(i,{[r.options.horizontal?`left`:`top`]:e+t,behavior:n})},Ji=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var e;return((e=this.targetWindow?.performance)?.now)?.call(e)??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,n=this.indexFromElement(t);if(!t.isConnected){this.observer.unobserve(t);for(let[e,n]of this.elementsCache)if(n===t){this.elementsCache.delete(e);break}return}this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}));return{disconnect:()=>{var n;(n=t())==null||n.disconnect(),e=null},observe:e=>t()?.observe(e,{box:`border-box`}),unobserve:e=>t()?.unobserve(e)}})(),this.range=null,this.setOptions=e=>{let t={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:zi,rangeExtractor:Bi,onChange:()=>{},measureElement:Ki,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:`data-index`,initialMeasurementsCache:[],lanes:1,anchorTo:`start`,followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:`estimate`};for(let n in e){let r=e[n];r!==void 0&&(t[n]=r)}let n=this.options,r=null,i=null;if(n!==void 0&&n.enabled&&t.enabled&&t.anchorTo===`end`&&this.scrollElement!==null){let e=n.count,a=t.count,o=this.getMeasurements(),s=e>0?o[0]?.key??n.getItemKey(0):null,c=e>0?o[e-1]?.key??n.getItemKey(e-1):null;if(a!==e||e>0&&a>0&&(t.getItemKey(0)!==s||t.getItemKey(a-1)!==c)){let s=e>0?this.getVirtualItemForOffset(this.getScrollOffset())??o[0]:null;s&&(r=[s.key,this.getScrollOffset()-s.start]);let l=t.followOnAppend===!0?`auto`:t.followOnAppend||null;l&&a>e&&this.isAtEnd(n.scrollEndThreshold)&&(e===0||t.getItemKey(a-1)!==c)&&(i=l)}}this.options=t,(r||i)&&(this.pendingScrollAnchor=[r?.[0]??null,r?.[1]??0,i])},this.notify=e=>{var t,n;(n=(t=this.options).onChange)==null||n.call(t,this,e)},this.maybeNotify=Mi(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{let e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&`ownerDocument`in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=this.scrollElement?.window??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{this._intendedScrollOffset!==null&&Math.abs(e-this._intendedScrollOffset)<1.5&&(e=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0,this.scrollDirection=t?this.getScrollOffset(){this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!Li()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};e.addEventListener(`touchstart`,t,Hi),e.addEventListener(`touchend`,n,Hi),this.unsubs.push(()=>{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchend`,n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}let t=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,t&&this.scrollElement&&this.options.enabled){let[e,n,r]=t;if(e!==null){let{count:t,getItemKey:r}=this.options,i=0;for(;i{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;let e=this.getScrollOffset(),t=this.getMaxScrollOffset();if(e<0||e>t)return;let n=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(e,{adjustments:this.scrollAdjustments+=n,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?`width`:`height`]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset==`function`?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{let n=new Map,r=new Map;for(let i=t-1;i>=0;i--){let t=e[i];if(n.has(t.lane))continue;let a=r.get(t.lane);if(a==null||t.end>a.end?r.set(t.lane,t):t.ende.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=Mi(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,t,n,r,i,a,o)=>(this.prevLanes!==void 0&&this.prevLanes!==a&&(this.lanesChangedFlag=!0),this.prevLanes=a,this.pendingMin=null,{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o}),{key:!1}),this.getMeasurements=Mi(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o},s)=>{let c=this.itemSizeCache;if(!i)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let l=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1),a===1){let i=this.options.gap,a=e*2,o=this._flatMeasurements;if(!o||o.length0&&e.set(o.subarray(0,l*2)),o=e,this._flatMeasurements=o}let s;if(l===0)s=t+n;else{let e=l-1;s=o[e*2]+o[e*2+1]+i}for(let t=l;t1){s=a;let e=d[s],r=e===void 0?void 0:u[e];l=r?r.end+this.options.gap:t+n}else{let e=this.options.lanes===1?u[i-1]:this.getFurthestMeasurement(u,i);l=e?e.end+this.options.gap:t+n,s=e?e.lane:i%this.options.lanes,this.options.lanes>1&&f&&this.laneAssignments.set(i,s)}let p=c.get(e),m=typeof p==`number`?p:this.options.estimateSize(i),h=l+m;u[i]={index:i,start:l,size:m,end:h,key:e,lane:s},d[s]=i}return this.measurementsCache=u,u},{key:!1,debug:()=>this.options.debug}),this.calculateRange=Mi(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,r)=>this.range=e.length>0&&t>0?Xi({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:r===1&&this._flatMeasurements!=null?this._flatMeasurements:null}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=Mi(()=>{let e=null,t=null,n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,r,i)=>r===null||i===null?[]:e({startIndex:r,endIndex:i,overscan:t,count:n}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{if(!this.scrollState||this.scrollState.behavior!==`smooth`)return!0;let t=this.scrollState.index??this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index;if(t!==void 0&&this.range){let n=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),r=Math.max(0,t-n),i=Math.min(this.options.count-1,t+n);return e>=r&&e<=i}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});return}let t=this.indexFromElement(e),n=this.options.getItemKey(t),r=this.elementsCache.get(n);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(n,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{if(e<0||e>=this.options.count)return;let n,r,i,a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)i=this.options.getItemKey(e),r=a[e*2],n=a[e*2+1];else{let t=this.measurementsCache[e];if(!t)return;i=t.key,r=t.start,n=t.size}let o=t-(this.itemSizeCache.get(i)??n);if(o!==0){let a=this.options.anchorTo===`end`&&this.scrollState?.behavior!==`smooth`&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,s=a?this.getTotalSize():0,c=this.scrollState?.behavior!==`smooth`&&(this.shouldAdjustScrollPositionOnItemSizeChange===void 0?r[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let n=[];for(let r=0,i=e.length;rthis.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(t.length===0)return;let n=this._flatMeasurements,r=this.options.lanes===1&&n!=null;return Ni(t[Yi(0,t.length-1,r?e=>n[e*2]:e=>Ni(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if(`scrollHeight`in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(e=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=e,this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;let r=this.getSize(),i=this.getScrollOffset();t===`auto`&&(t=e>=i+r?`end`:`start`),t===`center`?e+=(n-r)/2:t===`end`&&(e-=r);let a=this.getMaxScrollOffset();return Math.max(Math.min(a,e),0)},this.getOffsetForIndex=(e,t=`auto`)=>{e=Math.max(0,Math.min(e,this.options.count-1));let n=this.getSize(),r=this.getScrollOffset(),i=this.measurementsCache[e];if(!i)return;if(t===`auto`)if(i.end>=r+n-this.options.scrollPaddingEnd)t=`end`;else if(i.start<=r+this.options.scrollPaddingStart)t=`start`;else return[r,t];if(t===`end`&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let a=t===`end`?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(a,t,i.size),t]},this.scrollToOffset=(e,{align:t=`start`,behavior:n=`auto`}={})=>{let r=this.getOffsetForAlignment(e,t),i=this.now();this.scrollState={index:null,align:t,behavior:n,startedAt:i,lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t=`auto`,behavior:n=`auto`}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));let r=this.getOffsetForIndex(e,t);if(!r)return;let[i,a]=r,o=this.now();this.scrollState={index:e,align:a,behavior:n,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t=`auto`}={})=>{let n=this.getScrollOffset()+e,r=this.now();this.scrollState={index:null,align:`start`,behavior:t,startedAt:r,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:e=`auto`}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:`end`,behavior:e});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:e})},this.getTotalSize=()=>{let e=this.getMeasurements(),t;if(e.length===0)t=this.options.paddingStart;else if(this.options.lanes===1){let n=e.length-1,r=this._flatMeasurements;t=r==null?e[n]?.end??0:r[n*2]+r[n*2+1]}else{let n=Array(this.options.lanes).fill(null),r=e.length-1;for(;r>=0&&n.some(e=>e===null);){let t=e[r];n[t.lane]===null&&(n[t.lane]=t.end),r--}t=Math.max(...n.filter(e=>e!==null))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{let e=[];if(this.itemSizeCache.size===0)return e;let t=this.getMeasurements();for(let n of t)n&&this.itemSizeCache.has(n.key)&&e.push({index:n.index,key:n.key,start:n.start,size:n.size,end:n.end,lane:n.lane});return e},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this._intendedScrollOffset=e+(t??0),this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(e)}applyScrollAdjustment(e,t){e!==0&&(Li()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=e:this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=e,behavior:t}))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId??=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()})}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=this.scrollState.index==null?void 0:this.getOffsetForIndex(this.scrollState.index,this.scrollState.align),t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&Pi(t,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.getScrollOffset()!==t&&this._scrollToOffset(t,{adjustments:void 0,behavior:`auto`}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,n){let e=this.getSize()||600,n=Math.abs(t-this.getScrollOffset()),r=this.scrollState.behavior===`smooth`&&n>e;this.scrollState.lastTargetOffset=t,r||(this.scrollState.behavior=`auto`),this._scrollToOffset(t,{adjustments:void 0,behavior:r?`smooth`:`auto`})}this.scheduleScrollReconcile()}},Yi=(e,t,n,r)=>{for(;e<=t;){let i=(e+t)/2|0,a=n(i);if(ar)t=i-1;else return i}return e>0?e-1:0};function Xi({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:i}){let a=e.length-1,o=i?e=>i[e*2]:t=>e[t].start,s=i?e=>i[e*2]+i[e*2+1]:t=>e[t].end;if(e.length<=r)return{startIndex:0,endIndex:a};let c=Yi(0,a,o,n),l=c;if(r===1)for(;l1){let i=Array(r).fill(0);for(;le=0&&o.some(e=>e>=n);){let t=e[c];o[t.lane]=t.start,c--}c=Math.max(0,c-c%r),l=Math.min(a,l+(r-1-l%r))}return{startIndex:c,endIndex:l}}var Zi=typeof document<`u`?C.useLayoutEffect:C.useEffect;function Qi({useFlushSync:e=!0,...t}){let n=C.useReducer(e=>e+1,0)[1],r={...t,onChange:(r,i)=>{var a;e&&i?(0,Ai.flushSync)(n):n(),(a=t.onChange)==null||a.call(t,r,i)}},[i]=C.useState(()=>new Ji(r));return i.setOptions(r),Zi(()=>i._didMount(),[]),Zi(()=>i._willUpdate()),i}function $i(e){return Qi({observeElementRect:Vi,observeElementOffset:Gi,scrollToFn:qi,...e})}function ea(e){let t=e?.role;return t===`sent`||t===`drafts`}function ta(e,t){return t?e?.to_text:e?.from_text}function na(e,t){let n=ta(e,t);return n?pn(n):t?`(no recipient)`:`(no sender)`}function ra(e,t){return t===`received`?e.received_at:e.sent_at??e.received_at}function V(e){if(!e)return``;let t=new Date(Number(e));if(Number.isNaN(t.valueOf()))return``;let n=new Date(dt);if(t.getUTCFullYear()===n.getUTCFullYear()&&t.getUTCMonth()===n.getUTCMonth()&&t.getUTCDate()===n.getUTCDate())return t.toLocaleTimeString(ft,{hour:`2-digit`,minute:`2-digit`,timeZone:`UTC`});let r=t.getUTCFullYear()===n.getUTCFullYear();return t.toLocaleDateString(ft,r?{month:`short`,day:`numeric`,timeZone:`UTC`}:{year:`numeric`,month:`short`,day:`numeric`,timeZone:`UTC`})}function ia(e){return String(e??``).trim().toLowerCase()}function aa(e,t){return t?[e?.from_text,e?.to_text,e?.subject].some(e=>ia(e).includes(t)):!0}var oa=3,sa=`M6 .496A.691.691 0 0 0 5.51.7L.699 5.51a.692.692 0 0 0 0 .981l4.81 4.811c.272.271.71.271.981 0l4.81-4.81c.23-.205.203-.491.2-.682V1.192A.69.69 0 0 0 10.808.5C9.553.501 7.237.501 6 .496Z`,ca=`M6-.004a1.2 1.2 0 0 0-.844.35l-4.81 4.81a1.202 1.202 0 0 0 0 1.688l4.81 4.81a1.202 1.202 0 0 0 1.688 0l4.789-4.79c.416-.372.37-.911.367-1.063V1.19A1.2 1.2 0 0 0 10.808 0 1272.319 1272.319 0 0 1 6-.005zm-.002 1H6c1.238.005 3.553.005 4.808.004.116 0 .192.076.192.192v4.624c.003.231.01.264-.032.301a.53.53 0 0 0-.021.02l-4.81 4.81c-.082.082-.21.097-.274 0l-4.81-4.81a.184.184 0 0 1 0-.274l4.81-4.81a.216.216 0 0 1 .135-.057zM9 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z`;function la({tags:e,title:t,...n}){let r=e.slice(0,oa),i=e.length-r.length;return(0,B.jsx)(`span`,{className:`tag-stack`,"aria-hidden":`true`,title:t,...n,children:r.length>0?(0,B.jsxs)(B.Fragment,{children:[r.map(e=>(0,B.jsxs)(`svg`,{className:`tag-stack__icon`,style:e.color?{"--tag-color":e.color}:void 0,"data-tag-keyword":e.keyword,viewBox:`0 0 12 12`,width:`16`,height:`16`,children:[(0,B.jsx)(`path`,{className:`tag-stack__body`,d:sa}),(0,B.jsx)(`path`,{className:`tag-stack__outline`,d:ca})]},e.keyword)),i>0?(0,B.jsxs)(`span`,{className:`tag-stack__more`,children:[`+`,i]}):null]}):(0,B.jsxs)(`svg`,{className:`tag-stack__icon tag-stack__icon--empty`,viewBox:`0 0 12 12`,width:`16`,height:`16`,children:[(0,B.jsx)(`path`,{className:`tag-stack__body`,d:sa}),(0,B.jsx)(`path`,{className:`tag-stack__outline`,d:ca})]})})}function ua({tag:e,removable:t=!1,onRemove:n}){let r=e.defined?e.name:`${e.name} (keyword without a tag definition)`;return(0,B.jsxs)(`span`,{className:[`tag-chip`,e.defined?``:`tag-chip--undefined`,t?`tag-chip--removable`:``].filter(Boolean).join(` `),style:e.color?{"--tag-color":e.color}:void 0,"data-tag-keyword":e.keyword,children:[(0,B.jsxs)(`span`,{className:`tag-chip__body`,title:r,children:[(0,B.jsx)(`span`,{className:`tag-chip__dot`,"aria-hidden":`true`}),(0,B.jsx)(`span`,{className:`tag-chip__name`,children:e.name})]}),t?(0,B.jsx)(`button`,{className:`tag-chip__remove`,type:`button`,title:`Remove tag ${e.name}`,"aria-label":`Remove tag ${e.name}`,onClick:t=>{t.stopPropagation(),n?.(e)},children:(0,B.jsx)(Be,{size:11,strokeWidth:2.25,"aria-hidden":`true`})}):null]})}var da=`[role="menuitemcheckbox"], [role="menuitem"]`,fa=(0,C.forwardRef)(function({targets:e,definitions:t,label:n=`Tags`,onToggle:r,onClear:i,onManage:a,onClose:o},s){let c=(0,C.useRef)(null),l=(0,C.useMemo)(()=>Ut(e,t),[e,t]),u=t.map((e,t)=>{let n=It(e.keyword);return{keyword:n,name:e.name,color:e.color,presence:l.presence(n),digit:t<9?t+1:null}}),d=new Set(t.map(e=>It(e.keyword))),f=l.keywords.filter(e=>!d.has(e)).map(e=>({keyword:e,name:e,color:null,presence:l.presence(e),digit:null})),p=l.keywords.length>0,m=e=>r(e.keyword,e.presence!==`all`);(0,C.useImperativeHandle)(s,()=>({focusFirst:()=>c.current?.querySelector(da)?.focus()}),[]);function h(e){let t=!e.ctrlKey&&!e.metaKey&&!e.altKey;if(t&&(e.key===`t`||e.key===`T`)){e.preventDefault(),e.stopPropagation(),o?.();return}if(t&&/^[0-9]$/.test(e.key)){e.preventDefault(),e.stopPropagation();let t=Number(e.key);if(t===0){p&&i();return}let n=u[t-1];n&&m(n);return}Kr(c.current,da,e)}let g=e=>e===`all`?(0,B.jsx)(te,{size:14,strokeWidth:2.5}):e===`some`?(0,B.jsx)(N,{size:14,strokeWidth:2.5}):null,_=e=>e===`all`?`true`:e===`some`?`mixed`:`false`;return(0,B.jsxs)(`div`,{ref:c,className:`tag-picker`,role:`menu`,"aria-label":n,onKeyDown:h,children:[p?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`button`,{className:`app-dropdown__item tag-picker__item tag-picker__clear`,type:`button`,role:`menuitem`,tabIndex:-1,"aria-keyshortcuts":`0`,"data-tag-picker-clear":!0,onClick:i,children:[(0,B.jsx)(`span`,{className:`tag-picker__check`,"aria-hidden":`true`,children:(0,B.jsx)(Be,{size:14,strokeWidth:2})}),(0,B.jsx)(`span`,{className:`tag-picker__name`,children:`Remove All Tags`}),(0,B.jsx)(`kbd`,{className:`tag-picker__digit`,"aria-hidden":`true`,children:`0`})]}),(0,B.jsx)(`div`,{className:`tag-picker__separator`,role:`separator`})]}):null,u.length>0?(0,B.jsx)(`div`,{role:`group`,"aria-label":`Tags`,children:u.map(e=>(0,B.jsxs)(`button`,{className:`app-dropdown__item tag-picker__item`,type:`button`,role:`menuitemcheckbox`,tabIndex:-1,"aria-checked":_(e.presence),"aria-keyshortcuts":e.digit===null?void 0:String(e.digit),"data-tag-keyword":e.keyword,style:e.color?{"--tag-color":e.color}:void 0,onClick:()=>m(e),children:[(0,B.jsx)(`span`,{className:`tag-picker__check`,"aria-hidden":`true`,children:g(e.presence)}),(0,B.jsx)(`span`,{className:`tag-picker__dot`,"aria-hidden":`true`}),(0,B.jsx)(`span`,{className:`tag-picker__name`,children:e.name}),e.digit===null?null:(0,B.jsx)(`kbd`,{className:`tag-picker__digit`,"aria-hidden":`true`,children:e.digit})]},e.keyword))}):null,f.length>0?(0,B.jsxs)(B.Fragment,{children:[u.length>0?(0,B.jsx)(`div`,{className:`tag-picker__separator`,role:`separator`}):null,(0,B.jsxs)(`div`,{role:`group`,"aria-label":`Other keywords`,children:[(0,B.jsx)(`div`,{className:`app-dropdown__heading tag-picker__heading`,"aria-hidden":`true`,children:`Other keywords`}),f.map(e=>(0,B.jsxs)(`button`,{className:`app-dropdown__item tag-picker__item tag-picker__item--undefined`,type:`button`,role:`menuitemcheckbox`,tabIndex:-1,"aria-checked":_(e.presence),"data-tag-keyword":e.keyword,title:`${e.keyword} has no tag definition`,onClick:()=>m(e),children:[(0,B.jsx)(`span`,{className:`tag-picker__check`,"aria-hidden":`true`,children:g(e.presence)}),(0,B.jsx)(`span`,{className:`tag-picker__dot`,"aria-hidden":`true`}),(0,B.jsx)(`span`,{className:`tag-picker__name`,children:e.name})]},e.keyword))]})]}):null,u.length===0&&f.length===0?(0,B.jsx)(`p`,{className:`tag-picker__empty`,role:`none`,children:`No tags defined yet.`}):null,(0,B.jsx)(`div`,{className:`tag-picker__separator`,role:`separator`}),(0,B.jsxs)(`button`,{className:`app-dropdown__item tag-picker__item tag-picker__manage`,type:`button`,role:`menuitem`,tabIndex:-1,"data-tag-picker-manage":!0,onClick:a,children:[(0,B.jsx)(`span`,{className:`tag-picker__check`,"aria-hidden":`true`,children:(0,B.jsx)(Te,{size:14,strokeWidth:1.75})}),(0,B.jsx)(`span`,{className:`tag-picker__name`,children:`Manage Tags…`})]})]})});function pa({targets:e,definitions:t,label:n=`Tag`,title:r,triggerClass:i=``,onToggle:a,onClear:o,onManage:s,trigger:c}){let l=(0,C.useRef)(null),u=(0,C.useRef)(null);return(0,B.jsxs)(Gr,{className:`tag-picker-dropdown`,onToggle:e=>{e.currentTarget.open&&requestAnimationFrame(()=>u.current?.focusFirst())},children:[(0,B.jsx)(`summary`,{ref:l,className:`app-dropdown__summary tag-picker-dropdown__trigger ${i}`,"aria-haspopup":`menu`,"aria-label":n,title:r??n,"data-tag-picker-trigger":!0,children:c??(0,B.jsx)(je,{size:16,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(`div`,{className:`app-dropdown__menu tag-picker-dropdown__menu`,children:(0,B.jsx)(fa,{ref:u,targets:e,definitions:t,onToggle:a,onClear:o,onManage:e=>{Wr(e),s(e)},onClose:()=>{let e=l.current?.closest(`details`);e instanceof HTMLDetailsElement&&(e.open=!1),l.current?.focus()}})})]})}var ma=260,ha=6,ga=8;function _a({anchor:e,targets:t,definitions:n,label:r=`Tags`,trigger:i=null,returnFocus:a=null,onClose:o,onToggle:s,onClear:c,onManage:l}){let u=(0,C.useRef)(null),d=(0,C.useRef)(null),[f,p]=(0,C.useState)(0),m=(0,C.useRef)(null),h=(0,C.useRef)(o);h.current=o;let g=(0,C.useRef)(i);g.current=i;let _=e!=null,v=(0,C.useCallback)(()=>{let e=u.current,t=e?.querySelector(`.tag-picker`);!e||!t||p(t.scrollHeight+e.offsetHeight-t.clientHeight)},[]);if((0,C.useLayoutEffect)(()=>{_&&v()},[_,t,n,v]),(0,C.useEffect)(()=>{if(!_)return;let e=document.activeElement;m.current=a??g.current??(e instanceof HTMLElement&&e!==document.body?e:null),d.current?.focusFirst();let t=e=>{let t=u.current;!t||!(e.target instanceof Node)||t.contains(e.target)||g.current?.contains(e.target)||h.current()},n=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),h.current())},r=e=>{e.target instanceof Node&&u.current?.contains(e.target)||h.current()};return document.addEventListener(`pointerdown`,t,!0),document.addEventListener(`keydown`,n,!0),document.addEventListener(`scroll`,r,{capture:!0,passive:!0}),window.addEventListener(`resize`,r,{passive:!0}),()=>{document.removeEventListener(`pointerdown`,t,!0),document.removeEventListener(`keydown`,n,!0),document.removeEventListener(`scroll`,r,!0),window.removeEventListener(`resize`,r),p(0);let e=m.current;m.current=null,e?.isConnected&&e.focus()}},[_]),!e)return null;let y=window.innerWidth,b=window.innerHeight,x=e.left+e.width-ma;x=Math.max(ga,Math.min(x,y-ma-ga));let S=e.top+e.height+ha,w=b-ga-S,T=e.top-ha-ga,E=S,D=w;return f>w&&(f<=T||T>w)&&(D=T,E=e.top-ha-Math.min(f,T)),(0,Ai.createPortal)((0,B.jsx)(`div`,{ref:u,className:`app-dropdown__menu tag-picker-popover`,style:{position:`fixed`,top:`${Math.max(ga,E)}px`,left:`${x}px`,width:`${ma}px`,maxHeight:`${Math.max(0,D)}px`},role:`dialog`,"aria-label":r,"data-tag-picker-popover":!0,onKeyDown:e=>{e.key===`Tab`&&(e.preventDefault(),o())},children:(0,B.jsx)(fa,{ref:d,targets:t,definitions:n,label:r,onToggle:s,onClear:c,onManage:l,onClose:o})}),document.body)}var va=(0,C.memo)(function({message:e,index:t,start:n,size:r,domIdPrefix:i,focused:a,cursor:o,selected:s,dragging:c,showsRecipients:l,sort:u,hoverActions:d,archiveAction:f,deleteAction:p,draggable:m,tagMenuOpen:h,tagDefinitions:g,handlers:_}){let v=e.is_seen===0,y=e.is_flagged===1,b=(0,C.useMemo)(()=>Vt(e.keywords_json,g),[e.keywords_json,g]),x=b.length===0?`Tag`:`Tags: ${b.map(e=>e.name).join(`, `)}`,S=ta(e,l),w=(0,C.useMemo)(()=>cn(S,``),[S]),T=na(e,l),E=V(ra(e,u)),D=e.subject||`(no subject)`,ee=[T,D,E,v?`Unread`:``,y?`Starred`:``,e.has_attachment===1?`Has attachments`:``,b.length>0?x:``].filter(Boolean).join(`, `),O=e.scheduled_undo_status===`pending`,k=[a?`is-focused`:``,o?`is-cursor`:``,s?`is-selected`:``,c?`is-dragging`:``,v?`is-unread`:``].filter(Boolean).join(` `);return(0,B.jsx)(`li`,{id:`${i}${e.id}`,"data-index":t,"data-message-id":e.id,role:`row`,"aria-rowindex":t+1,"aria-label":ee,"aria-selected":s,className:k||void 0,style:{position:`absolute`,top:`0px`,left:`0px`,right:`0px`,transform:`translateY(${n}px)`,height:`${r}px`},children:(0,B.jsxs)(`div`,{className:[`msg-list__item`,d?`msg-list__item--hover-actions`:``,h?`has-tag-menu`:``].filter(Boolean).join(` `),role:`gridcell`,draggable:m&&!O,onClick:e=>_.rowClick(t,e),onDragStart:t=>_.dragStart(e,t),onDragEnd:_.dragEnd,children:[(0,B.jsx)(`button`,{type:`button`,className:`msg-list__open`,"data-message-control":!0,tabIndex:-1,"aria-label":`Open message: ${D}, ${T}`}),(0,B.jsxs)(`div`,{className:`msg-list__state`,children:[(0,B.jsx)(`label`,{className:`msg-list__check`,draggable:!1,onClick:e=>e.stopPropagation(),children:(0,B.jsx)(`input`,{type:`checkbox`,"data-message-control":!0,tabIndex:-1,"aria-label":`Select message: ${D}, ${T}`,checked:s,onChange:()=>{},onClick:e=>_.checkboxClick(t,e)})}),v?(0,B.jsx)(`span`,{className:`msg-list__unread-dot`,"aria-hidden":`true`}):null]}),(0,B.jsx)(`div`,{className:`msg-list__avatar`,style:w.style,"aria-hidden":`true`,children:(0,B.jsx)(`span`,{children:w.initials})}),(0,B.jsxs)(`div`,{className:`msg-list__content`,children:[(0,B.jsxs)(`div`,{className:`msg-list__summary`,children:[(0,B.jsx)(`span`,{className:`msg-list__from`,children:T}),(0,B.jsx)(`span`,{className:`msg-list__subject`,children:D}),(0,B.jsxs)(`span`,{className:`msg-list__icons`,children:[y&&!d?(0,B.jsx)(Oe,{size:13,strokeWidth:2,className:`msg-list__star`}):null,e.has_attachment===1?(0,B.jsx)(ve,{size:13,strokeWidth:1.75,className:`msg-list__attach`}):null,!d&&b.length>0?(0,B.jsx)(la,{tags:b,title:x,"data-row-tags":!0}):null]}),(0,B.jsx)(`span`,{className:`msg-list__date`,children:E}),d?(0,B.jsxs)(`div`,{className:`msg-list__actions`,draggable:!1,onClick:e=>e.stopPropagation(),children:[(0,B.jsx)(`button`,{type:`button`,className:`msg-list__action msg-list__action--tag${b.length>0?` is-tagged`:``}`,tabIndex:-1,"data-message-control":!0,title:x,"aria-label":x,"aria-haspopup":`dialog`,"aria-expanded":h,"data-row-tags":!0,onClick:t=>_.tag(e,t),children:(0,B.jsx)(la,{tags:b})}),(0,B.jsx)(`button`,{type:`button`,className:`msg-list__action msg-list__action--star${y?` msg-list__action--starred`:``}`,tabIndex:-1,"data-message-control":!0,title:y?`Unstar`:`Star`,"aria-label":y?`Unstar`:`Star`,"aria-pressed":y,onClick:()=>_.star(e),children:(0,B.jsx)(Oe,{size:17,strokeWidth:1.75,fill:y?`#facc15`:`none`})}),f?(0,B.jsx)(`button`,{type:`button`,className:`msg-list__action`,tabIndex:-1,"data-message-control":!0,title:`Archive`,"aria-label":`Archive`,onClick:()=>_.archive(e.id),children:(0,B.jsx)(`span`,{className:`msg-list__action-icon--folder`,"aria-hidden":`true`,dangerouslySetInnerHTML:{__html:oi}})}):null,p?(0,B.jsx)(`button`,{type:`button`,className:`msg-list__action msg-list__action--danger`,tabIndex:-1,"data-message-control":!0,title:`Delete`,"aria-label":`Delete`,onClick:()=>_.remove(e.id),children:(0,B.jsx)(Ie,{size:18,strokeWidth:1.65})}):null]}):null]}),e.preview?(0,B.jsx)(`p`,{className:`msg-list__preview`,children:e.preview}):null]})]})})});function ya({folder:e,anyStarred:t,anyScheduled:n,handlers:r}){let i=e?.role,a=[];return i===`junk`&&a.push({id:`whitelist`,label:`Not junk`,title:`Whitelist senders and move to Inbox`,ariaLabel:`Not junk — whitelist senders and move the selected messages to Inbox`,icon:null,variant:`whitelist`,slots:3,overflowRank:6,run:r.whitelist}),!n&&i!==`archive`&&a.push({id:`archive`,label:`Archive`,title:`Archive`,ariaLabel:`Archive`,icon:null,rawIcon:oi,variant:`default`,slots:1,overflowRank:5,run:r.archive}),!n&&i!==`junk`&&a.push({id:`junk`,label:`Mark as junk`,title:`Junk`,ariaLabel:`Mark as junk`,icon:null,rawIcon:pi,variant:`default`,slots:1,overflowRank:2,run:r.junk}),n?a.push({id:`cancel-send`,label:`Cancel send`,title:`Cancel send`,ariaLabel:`Cancel send — return the selected messages to Drafts`,icon:Ie,variant:`danger`,slots:1,overflowRank:null,run:r.cancelSend}):(a.push({id:`delete`,label:`Delete`,title:`Delete`,ariaLabel:`Delete`,icon:Ie,variant:`danger`,slots:1,overflowRank:null,run:r.delete}),a.push({id:`toggle-star`,label:t?`Unstar`:`Star`,title:t?`Unstar`:`Star`,ariaLabel:t?`Unstar`:`Star`,icon:Oe,variant:`star`,pressed:t,slots:1,overflowRank:4,run:r.toggleStar}),a.push({id:`tag`,label:`Tag…`,title:`Tag`,ariaLabel:`Tag selected messages`,icon:je,variant:`tag`,slots:1,overflowRank:3,run:r.tag})),a.push({id:`mark-read`,label:`Mark as read`,title:`Mark as read`,ariaLabel:`Mark as read`,icon:ge,variant:`default`,slots:1,overflowRank:1,run:r.markRead}),a.push({id:`mark-unread`,label:`Mark as unread`,title:`Mark as unread`,ariaLabel:`Mark as unread`,icon:_e,variant:`default`,slots:1,overflowRank:0,run:r.markUnread}),a}function ba(e,t){if(t==null)return{inline:[...e],overflow:[]};let n=new Set,r=0;for(let t of e)t.overflowRank===null&&(n.add(t),r+=t.slots);let i=e.filter(e=>e.overflowRank!==null).sort((e,t)=>(t.overflowRank??0)-(e.overflowRank??0));for(let e of i)r+e.slots>t||(n.add(e),r+=e.slots);return{inline:e.filter(e=>n.has(e)),overflow:e.filter(e=>!n.has(e))}}function xa({items:e,renderTag:t}){return(0,B.jsx)(B.Fragment,{children:e.map(e=>{if(e.variant===`tag`)return(0,B.jsx)(`span`,{style:{display:`contents`},children:t(e)},e.id);let n=e.icon;return(0,B.jsxs)(`button`,{className:[`msg-list__bulk-action`,e.variant===`danger`?`msg-list__bulk-action--danger`:``,e.variant===`star`?`msg-list__bulk-action--star`:``,e.variant===`star`&&e.pressed?`msg-list__bulk-action--starred`:``,e.variant===`whitelist`?`msg-list__bulk-action--whitelist`:``].filter(Boolean).join(` `),type:`button`,disabled:e.disabled,title:e.title,"aria-label":e.ariaLabel,"aria-pressed":e.variant===`star`?e.pressed:void 0,"data-bulk-action":e.id,onClick:()=>e.run(),children:[e.variant===`whitelist`?e.label:null,e.variant!==`whitelist`&&e.rawIcon?(0,B.jsx)(`span`,{className:`msg-list__bulk-icon msg-list__bulk-icon--folder`,"aria-hidden":`true`,dangerouslySetInnerHTML:{__html:e.rawIcon}}):null,e.variant!==`whitelist`&&!e.rawIcon&&n?(0,B.jsx)(n,{size:e.variant===`star`?17:e.variant===`danger`?18:16,strokeWidth:e.variant===`danger`?1.65:1.75,fill:e.variant===`star`?e.pressed?`currentColor`:`none`:void 0}):null]},e.id)})})}var Sa=`[role="menuitem"]:not([aria-disabled="true"])`;function Ca({groups:e,label:t=`More actions`}){let n=(0,C.useRef)(null),r=(0,C.useRef)(null);return(0,B.jsxs)(Gr,{className:`msg-list__more`,onToggle:e=>{e.currentTarget.open&&requestAnimationFrame(()=>r.current?.querySelector(Sa)?.focus())},children:[(0,B.jsx)(`summary`,{ref:n,className:`app-dropdown__summary msg-list__more-trigger`,"aria-haspopup":`menu`,"aria-label":t,title:t,"data-more-menu":!0,children:(0,B.jsx)(se,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(`div`,{ref:r,className:`app-dropdown__menu msg-list__more-menu`,role:`menu`,"aria-label":t,onKeyDown:e=>Kr(r.current,Sa,e),children:e.map((e,t)=>(0,B.jsxs)(`div`,{style:{display:`contents`},children:[t>0?(0,B.jsx)(`div`,{className:`msg-list__more-separator`,role:`separator`}):null,(0,B.jsxs)(`div`,{role:`group`,"aria-label":e.label,children:[e.label?(0,B.jsx)(`div`,{className:`app-dropdown__heading msg-list__more-heading`,title:e.label,"aria-hidden":`true`,children:e.label}):null,e.items.map(e=>{let t=e.icon;return(0,B.jsxs)(`button`,{className:`app-dropdown__item msg-list__more-item${e.danger?` msg-list__more-item--danger`:``}`,type:`button`,tabIndex:-1,role:`menuitem`,"aria-disabled":e.disabled?`true`:void 0,"data-more-item":e.id,onClick:t=>{e.disabled||(Wr(t),n.current?.focus(),e.run())},children:[(0,B.jsx)(`span`,{className:`msg-list__more-icon`,"aria-hidden":`true`,children:e.rawIcon?(0,B.jsx)(`span`,{className:`msg-list__more-icon-raw`,dangerouslySetInnerHTML:{__html:e.rawIcon}}):t?(0,B.jsx)(t,{size:16,strokeWidth:1.75}):null}),(0,B.jsx)(`span`,{className:`msg-list__more-label`,children:e.label})]},e.id)})]})]},e.id))})]})}function wa({className:e,allSelected:t,disabled:n,itemLabel:r,singularItemLabel:i,selectedCount:a,showTotalCount:o,totalCount:s,headerTier:c,onClearSelection:l,onToggleAll:u,selectionActions:d,normalActions:f,trailing:p}){let m=(0,C.useRef)(null),h=a>0&&!t;(0,C.useEffect)(()=>{m.current&&(m.current.indeterminate=h)},[h]);let g=n||s===0;return(0,B.jsxs)(`header`,{className:`selectable-list-header ${e??``}`,"data-header-tier":c,children:[(0,B.jsx)(`label`,{className:`selectable-list-header__select-all msg-list__select-all${g?` is-disabled`:``}`,title:g?`No ${r} to select`:t?`Deselect all ${r}`:`Select all ${r}`,children:(0,B.jsx)(`input`,{ref:m,type:`checkbox`,checked:t,disabled:g,onChange:u,"aria-label":`Select all messages`})}),a>0?(0,B.jsxs)(`div`,{className:`selectable-list-header__selection-actions msg-list__bulk-actions`,role:`group`,"aria-label":`Selection actions`,children:[d,(0,B.jsx)(`button`,{className:`selectable-list-header__clear msg-list__bulk-action msg-list__bulk-action--ghost`,type:`button`,title:`Clear selection`,"aria-label":`Clear selection`,onClick:l,children:(0,B.jsx)(Be,{size:16,strokeWidth:1.75,"aria-hidden":`true`})})]}):(0,B.jsx)(`div`,{className:`selectable-list-header__normal-actions`,children:f}),(0,B.jsx)(`span`,{className:`selectable-list-header__count${a===0?` selectable-list-header__count--total`:``} msg-list__count`,"aria-live":`polite`,children:a>0?`${a} selected`:o&&s>0?`${s} ${s===1?i:r}`:null}),p]})}var Ta=480,Ea=64,Da=96,Oa=520,ka=440,Aa=340,ja=232,Ma=38,Na=`msg-row-`,Pa=`msg-listbox`,Fa=new Set,Ia=Ft,La=new Map;function Ra(e){return e===`sent`||e===`drafts`||e===`scheduled`?`sent`:`received`}function za(e){if(!e||e.getClientRects().length===0)return null;let t=e.getBoundingClientRect();return{top:t.top,left:t.left,width:t.width,height:t.height}}function Ba({quickFilterQuery:e}){let t=z(e=>e.currentViewId),n=z(e=>e.folders),r=z(e=>e.messages),i=z(e=>e.folderIds),a=z(e=>e.selection),o=z(e=>e.focused),s=z(e=>e.open),c=z(e=>e.folderPickCount),l=wi(e=>e.draggedIds),u=an({folders:n},t),d=Kt(t),f=d?Ia.find(e=>e.keyword===R(t))?.name??`Starred`:u?.name??`Mail`,p=`${f} messages, column 1`,m=Zt({messages:r,folderIds:i},t),h=a.viewId===t?a.ids:Fa,g=o.viewId===t?o.id:null,_=s.viewId===t?s.id:null,[v,y]=(0,C.useState)(!1),[b,x]=(0,C.useState)(!1),S=ia(e),w=S.length>0,T=v||b||w,E=(0,C.useCallback)((e,t)=>t&&(e.id===_||h.has(e.id))?!0:!(v&&e.is_seen!==0||b&&e.is_flagged!==1||w&&!aa(e,S)),[_,h,v,b,w,S]),D=(0,C.useMemo)(()=>T?m.filter(e=>E(e,!0)):m,[m,T,E]),ee=(0,C.useMemo)(()=>T?m.filter(e=>E(e,!1)):m,[m,T,E]),O=D.length;function k(e){if(_==null)return;let t=m.find(e=>e.id===_);t&&!(e.unread&&t.is_seen!==0)&&!(e.flagged&&t.is_flagged!==1)&&!(e.needle&&!aa(t,e.needle))||z.getState().selectMessage(null)}let te=(0,C.useRef)(S);(0,C.useEffect)(()=>{te.current!==S&&(te.current=S,k({unread:v,flagged:b,needle:S}))},[S]);let A=(0,C.useRef)(-1),ne=h.size,re=ne>0,ae=(0,C.useCallback)(e=>{z.getState().setSelection(t,e)},[t]),oe=(0,C.useCallback)(e=>{let n=D[e];return n?(z.getState().setFocusedMessage(n.id,t),n.id):null},[D,t]),se=(0,C.useCallback)(e=>{let t=D[e];if(!t)return;let n=new Set(h);n.has(t.id)?n.delete(t.id):n.add(t.id),A.current=e,ae(n)},[D,h,ae]),j=(0,C.useCallback)((e,t=e)=>{if(e<0||e>=D.length)return;let n=A.current>=0,r=n?A.current:Math.max(0,Math.min(D.length-1,t)),i=Math.min(e,r),a=Math.max(e,r),o=new Set;for(let e=i;e<=a;e+=1)o.add(D[e].id);ae(o),n||(A.current=r)},[D,ae]),ce=(0,C.useCallback)(()=>{h.size>0&&ae(new Set),A.current=-1},[h,ae]),M=(0,C.useCallback)(e=>{z.getState().selectMessage(e,e==null?void 0:t)},[t]),le=(0,C.useCallback)(()=>{let e=new Set;for(let t of ee)e.add(t.id);ae(e),e.size>0&&(A.current=0)},[ee,ae]),ue=ee.length>0&&ee.every(e=>h.has(e.id)),de=(0,C.useRef)(null),fe=(0,C.useRef)(null),[pe,me]=(0,C.useState)(0),he=pe>0&&pe{let e=de.current;if(!e)return;me(e.clientWidth);let t=new ResizeObserver(([e])=>me(e.contentRect.width));return t.observe(e),()=>t.disconnect()},[]);let ge=$i({count:O,getScrollElement:()=>fe.current,estimateSize:()=>he?Da:Ea,overscan:8,getItemKey:e=>D[e]?.id??`_ph_${e}`});(0,C.useLayoutEffect)(()=>{ge.measure()},[he,ge]);let _e=(0,C.useRef)(!1),N=(0,C.useCallback)(()=>{_e.current||(_e.current=!0,requestAnimationFrame(()=>{_e.current=!1,fe.current&&La.set(t,fe.current.scrollTop)}))},[t]),P=(0,C.useRef)(null);(0,C.useLayoutEffect)(()=>{let e=P.current;if(P.current={viewId:t,pick:c},e&&e.viewId===t&&e.pick===c)return;ge.measure();let n=fe.current;if(e&&e.viewId===t){La.set(t,0),n&&(n.scrollTop=0);return}n&&(n.scrollTop=La.get(t)??0)},[t,c,ge]),(0,C.useEffect)(()=>{if(g==null||!fe.current)return;let e=D.findIndex(e=>e.id===g);e>=0&&ge.scrollToIndex(e,{align:`auto`})},[g]);let ve=ge.getVirtualItems(),ye=()=>ve[0]?.index??0,be=pe>0,xe=!be||pe>=Oa,F=!be||pe>=ka,Ce=!re&&(!be||pe>=Aa),we=!Ce&&!re?`compact`:F?xe?`full`:`no-count`:`icon-filters`,Te=be?Math.max(1,Math.floor((pe-ja)/Ma)):null,Ee=z.getState,De=(0,C.useMemo)(()=>m.filter(e=>h.has(e.id)),[m,h]),ke=De.some(e=>e.is_flagged===1),Ae=De.some(e=>e.scheduled_undo_status===`pending`),je=()=>[...h],[Me,Ne]=(0,C.useState)(null),Pe=(0,C.useCallback)(()=>{Ne(null)},[]),Fe=(0,C.useCallback)(()=>{let e=de.current?.querySelector(`[data-more-menu]`)??de.current?.querySelector(`.msg-list__header`)??null,t=za(e);t&&Ne({ids:[...h],targets:De,anchor:t,trigger:e,returnFocus:e})},[h,De]),Ie=ba(ya({folder:u,anyStarred:ke,anyScheduled:Ae,handlers:{archive:()=>Ee().archiveMessages(je()),junk:()=>Ee().junkMessages(je()),delete:()=>Ee().destroyMessages(je()),cancelSend:()=>De.filter(e=>e.scheduled_undo_status===`pending`).forEach(e=>Ee().cancelScheduledSend(e.id)),toggleStar:()=>Ee().toggleManyFlagged(je()),tag:Fe,markRead:()=>Ee().markManySeen(je(),!0),markUnread:()=>Ee().markManySeen(je(),!1),whitelist:()=>Ee().notJunk(je())}}),Te),Le=(0,C.useCallback)(()=>{},[]),Re=[];re&&Ie.overflow.length>0&&Re.push({id:`selection`,items:Ie.overflow.map(e=>({id:e.id,label:e.label,icon:e.icon,rawIcon:e.rawIcon,disabled:e.disabled,danger:e.variant===`danger`,run:e.run}))}),Ce||Re.push({id:`column`,label:re?f:void 0,items:[{id:`refresh`,label:`Refresh`,icon:Se,run:Le}]});let ze=(0,C.useCallback)(e=>{let t=D;if(t.length===0)return;if(e===`first`){M(t[0].id);return}if(e===`last`){M(t[t.length-1].id);return}let n=e===`next`||e===`nextUnread`?1:-1,r=e===`nextUnread`||e===`previousUnread`,i=g==null?-1:t.findIndex(e=>e.id===g);i<0&&(i=n>0?-1:t.length);for(let e=i+n;e>=0&&e{if(h.size>0){let e=(de.current?.querySelector(`[data-tag-picker-trigger]`))?.closest(`details`);if(e){e.open=!0;return}Fe();return}if(_==null)return;let e=m.find(e=>e.id===_);if(!e||e.scheduled_undo_status===`pending`)return;let t=document.getElementById(`${Na}${_}`)?.querySelector(`.msg-list__action--tag`)??null,n=za(t)??za(de.current?.querySelector(`.msg-list__header`));n&&Ne({ids:[_],targets:[e],anchor:n,trigger:t,returnFocus:fe.current})},[h,_,m,Fe]);(0,C.useEffect)(()=>Pr({navigate:ze,selectAll:le,openTagMenu:Be,containsFocus:()=>de.current?.contains(document.activeElement)===!0}),[ze,le,Be]);function Ve(e){return[...e.querySelectorAll(`[data-message-control]`)].filter(e=>getComputedStyle(e).display!==`none`&&getComputedStyle(e).visibility!==`hidden`).sort((e,t)=>Number(t.matches(`input`))-Number(e.matches(`input`)))}function He(e){if(e.defaultPrevented)return;if((e.metaKey||e.ctrlKey)&&(e.key===`a`||e.key===`A`)){e.preventDefault(),le();return}if(e.altKey||e.metaKey||e.ctrlKey)return;let n=(e.target instanceof Element?e.target:null)?.closest(`[data-message-control]`)??null,r=n?.closest(`[role="row"]`)??null;if(n&&r){if(e.key===`Tab`){fe.current?.focus({preventScroll:!0});return}if(e.key===`Escape`||e.key===`F2`){e.preventDefault(),oe(Number(r.dataset.index)),fe.current?.focus({preventScroll:!0});return}if([`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key)){e.preventDefault();let t=Ve(r),i=t.indexOf(n),a=e.key===`Home`?0:e.key===`End`?t.length-1:i+(e.key===`ArrowRight`?1:-1);t[Math.max(0,Math.min(t.length-1,a))]?.focus({preventScroll:!0});return}if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`)return;oe(Number(r.dataset.index)),fe.current?.focus({preventScroll:!0})}else if(e.key===`F2`||e.key===`ArrowRight`||e.key===`Enter`){let t=Array.from(fe.current?.querySelectorAll(`[role="row"]`)??[]),n=fe.current?.getBoundingClientRect(),r=e=>{let t=e.getBoundingClientRect();return n!=null&&t.bottom>n.top&&t.tope.id===g);t>=0&&(e.preventDefault(),se(t));return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){let n=D.length;if(!n)return;e.preventDefault();let r=e.key===`ArrowDown`?1:-1,i=g==null?-1:D.findIndex(e=>e.id===g),a;a=i>=0?i:A.current>=0?A.current:r>0?-1:n;let o=Math.max(0,Math.min(n-1,a+r));e.shiftKey?(j(o),z.getState().setFocusedMessage(D[o].id,t)):M(D[o].id)}}function Ue(e){(e.type===`contextmenu`?e.button===2:e.detail>0)&&e.target instanceof Element&&e.target.closest(`[data-message-control], .msg-list__check`)&&fe.current?.focus({preventScroll:!0})}let We=(0,C.useRef)(null);We.current={rowClick(e,t){if(fe.current?.focus({preventScroll:!0}),t.shiftKey||t.ctrlKey||t.metaKey){t.preventDefault(),t.shiftKey?j(e,ye()):se(e);return}let n=re,r=oe(e);if(r!=null){if(n&&ce(),!n&&r===_){M(null);return}M(r)}},checkboxClick(e,t){t.stopPropagation(),t.shiftKey?j(e,ye()):se(e)},dragStart(e,n){fe.current?.focus({preventScroll:!0}),wi.getState().startDrag(n,{messageId:e.id,selectedIds:h,sourceViewId:t})},dragEnd(){wi.getState().endDrag()},star(e){Ee().markManyFlagged([e.id],e.is_flagged!==1)},tag(e,t){let n=t.currentTarget instanceof HTMLElement?t.currentTarget:null;if(Me&&Me.ids.length===1&&Me.ids[0]===e.id){Pe();return}let r=za(n);r&&Ne({ids:[e.id],targets:[e],anchor:r,trigger:n,returnFocus:t.detail===0?n:fe.current})},archive(e){Ee().archiveMessages([e])},remove(e){Ee().destroyMessages([e])}};let Ge=(0,C.useMemo)(()=>({rowClick:(e,t)=>We.current.rowClick(e,t),checkboxClick:(e,t)=>We.current.checkboxClick(e,t),dragStart:(e,t)=>We.current.dragStart(e,t),dragEnd:()=>We.current.dragEnd(),star:e=>We.current.star(e),tag:(e,t)=>We.current.tag(e,t),archive:e=>We.current.archive(e),remove:e=>We.current.remove(e)}),[]),Ke=Me&&Me.ids.length===1&&Me.trigger?.classList.contains(`msg-list__action--tag`)?Me.ids[0]:null,qe=(0,C.useMemo)(()=>Me?Me.ids.map(e=>r.get(e)??Me.targets.find(t=>t.id===e)):[],[Me,r]),Je=wi(e=>e.sourceViewId),Ye=wi(e=>e.dragging),[Xe,Ze]=(0,C.useState)(!1),Qe=Ye&&Xe&&Je!==t&&!d?`move`:null;function $e(e){if(Ze(!1),d||typeof t!=`number`)return;let n=Ti(e);!n||n.sourceViewId===t||(e.preventDefault(),Ee().moveMessages(n.ids,t),wi.getState().endDrag())}let et=ea(u),I=Ra(u?.role),L=u?.role===`archive`,tt=`No ${[v?`unread`:null,b?`starred`:null].filter(Boolean).join(` `)}${v||b?` `:``}messages in ${f}.`,nt=(0,C.useMemo)(()=>new Set(l),[l]);return(0,B.jsxs)(`section`,{ref:de,className:[`msg-list`,`msg-columns__column`,`msg-columns__column--last`,he?`msg-list--card`:``,`msg-list--primary`,Qe===`move`?`is-drop-valid`:``].filter(Boolean).join(` `),role:`region`,"aria-label":p,onDragEnter:()=>Ze(!0),onDragOver:e=>{Je!==t&&!d&&e.preventDefault()},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||Ze(!1)},onDrop:$e,children:[(0,B.jsx)(wa,{className:`msg-list__header`,headerTier:we,allSelected:ue,disabled:!1,itemLabel:`messages`,singularItemLabel:`message`,selectedCount:ne,showTotalCount:xe,totalCount:O,onClearSelection:ce,onToggleAll:()=>re?ce():le(),selectionActions:(0,B.jsx)(xa,{items:Ie.inline,renderTag:e=>(0,B.jsx)(pa,{targets:De,definitions:Ia,label:e.ariaLabel,title:e.title,triggerClass:`msg-list__bulk-action msg-list__bulk-action--tag`,onToggle:(e,t)=>Ee().setTagsMany([...h],t?{add:[e]}:{remove:[e]}),onClear:()=>Ee().clearTagsMany([...h]),onManage:()=>{}})}),normalActions:(0,B.jsxs)(`div`,{className:[`msg-list__filters`,F?``:`msg-list__filters--icons`,`msg-list__filters--lead`].filter(Boolean).join(` `),role:`group`,"aria-label":`Message filters`,children:[(0,B.jsx)(`button`,{className:`msg-list__filter${v?` is-active`:``}`,type:`button`,"aria-pressed":v,"aria-label":`Unread`,title:`Unread`,onClick:()=>{let e=!v;y(e),k({unread:e,flagged:b,needle:S})},children:F?`Unread`:(0,B.jsx)(ie,{size:10,strokeWidth:2,fill:`currentColor`,"aria-hidden":`true`})}),(0,B.jsx)(`button`,{className:`msg-list__filter msg-list__filter--starred${b?` is-active`:``}`,type:`button`,"aria-pressed":b,"aria-label":`Starred`,title:`Starred`,onClick:()=>{let e=!b;x(e),k({unread:v,flagged:e,needle:S})},children:F?`Starred`:(0,B.jsx)(Oe,{size:16,strokeWidth:1.75,"aria-hidden":`true`})})]}),trailing:(0,B.jsxs)(B.Fragment,{children:[Ce?(0,B.jsx)(`button`,{className:`msg-list__refresh`,type:`button`,"aria-label":`Refresh`,title:`Refresh`,onClick:Le,children:(0,B.jsx)(Se,{size:16,strokeWidth:1.75,"aria-hidden":`true`})}):null,Re.length>0?(0,B.jsx)(Ca,{groups:Re,label:`More actions for column 1`}):null]})}),(0,B.jsx)(`p`,{className:`msg-list__coverage is-idle`,role:`status`,"aria-hidden":`true`,"data-tag-view-coverage":!0}),(0,B.jsx)(`span`,{id:`${Pa}-instructions`,hidden:!0,children:`Use Up and Down arrows to navigate messages, Space to select, and Enter to toggle the message preview. Press Right Arrow or F2 for message controls, then Left and Right arrows to move between them. Escape returns to message navigation. Tab leaves the message list.`}),O>0?(0,B.jsx)(`div`,{id:Pa,ref:fe,className:`msg-list__scroller`,tabIndex:0,role:`grid`,"aria-multiselectable":`true`,"aria-rowcount":O,"aria-colcount":1,"aria-describedby":`${Pa}-instructions`,"aria-label":`Messages`,"aria-activedescendant":g!=null&&ve.some(e=>D[e.index]?.id===g)?`${Na}${g}`:void 0,onScroll:N,onKeyDown:He,onClickCapture:Ue,onContextMenuCapture:Ue,children:(0,B.jsx)(`ol`,{className:`msg-list__items`,role:`presentation`,style:{height:`${ge.getTotalSize()}px`},children:ve.map(e=>{let t=D[e.index];return t?(0,B.jsx)(va,{message:t,index:e.index,start:e.start,size:e.size,domIdPrefix:Na,focused:_===t.id,cursor:g===t.id,selected:h.has(t.id),dragging:nt.has(t.id),showsRecipients:et,sort:I,hoverActions:t.scheduled_undo_status!==`pending`,archiveAction:!L,deleteAction:!0,draggable:!d,tagMenuOpen:Ke===t.id,tagDefinitions:Ia,handlers:Ge},e.key):null})})}):w?(0,B.jsx)(`div`,{className:`msg-list__placeholder`,children:(0,B.jsxs)(`p`,{children:[`No messages matching "`,e.trim(),`" in `,f,`.`]})}):v||b?(0,B.jsx)(`div`,{className:`msg-list__placeholder`,children:(0,B.jsx)(`p`,{children:tt})}):d?(0,B.jsx)(`div`,{className:`msg-list__placeholder`,children:(0,B.jsxs)(`p`,{children:[`No messages are tagged `,f,`.`]})}):(0,B.jsx)(`div`,{className:`msg-list__placeholder`,children:(0,B.jsxs)(`p`,{children:[f,` is empty.`]})}),(0,B.jsx)(_a,{anchor:Me?.anchor??null,targets:qe,definitions:Ia,trigger:Me?.trigger??null,returnFocus:Me?.returnFocus??null,onClose:Pe,onToggle:(e,t)=>Ee().setTagsMany(Me?.ids??[],t?{add:[e]}:{remove:[e]}),onClear:()=>Ee().clearTagsMany(Me?.ids??[]),onManage:Pe})]})}function Va(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n`u`?null:To(BigInt.prototype.toString),bo=typeof Symbol>`u`?null:To(Symbol.prototype.toString),xo=To(Object.prototype.hasOwnProperty),So=To(Object.prototype.toString),Co=To(RegExp.prototype.test),wo=Eo(TypeError);function To(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return no(e,t,n)}}function Eo(e){return function(){return ro(e,[...arguments])}}function H(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:uo;if(Ja&&Ja(e,null),!lo(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(Ya(t)||(t[r]=e),i=e)}e[i]=!0}return e}function Do(e){for(let t=0;t/g),Uo=$a(/\${[\w\W]*/g),Wo=$a(/^data-[\-\w.\u00B7-\uFFFF]+$/),Go=$a(/^aria-[\-\w]+$/),Ko=$a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),qo=$a(/^(?:\w+script|data):/i),Jo=$a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Yo=$a(/^html$/i),Xo=$a(/^[a-z][.\w]*(-[.\w]+)+$/i),Zo={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Qo=function(){return typeof window>`u`?null:window},$o=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},es=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function ts(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Qo(),t=e=>ts(e);if(t.version=`3.4.7`,t.removed=[],!e||!e.document||e.document.nodeType!==Zo.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,s=e.Element,c=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let l=e.DOMParser,u=e.trustedTypes,d=s.prototype,f=Ao(d,`cloneNode`),p=Ao(d,`remove`),m=Ao(d,`nextSibling`),h=Ao(d,`childNodes`),g=Ao(d,`parentNode`),_=Ao(d,`shadowRoot`),v=Ao(d,`attributes`),y=o&&o.prototype?Ao(o.prototype,`nodeType`):null,b=o&&o.prototype?Ao(o.prototype,`nodeName`):null;if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let x,S=``,C=n,w=C.implementation,T=C.createNodeIterator,E=C.createDocumentFragment,D=C.getElementsByTagName,ee=r.importNode,O=es();t.isSupported=typeof qa==`function`&&typeof g==`function`&&w&&w.createHTMLDocument!==void 0;let k=Vo,te=Ho,A=Uo,ne=Wo,re=Go,ie=qo,ae=Jo,oe=Xo,se=Ko,j=null,ce=H({},[...Mo,...No,...Po,...Io,...Ro]),M=null,le=H({},[...zo,...Bo,...U,...W]),ue=Object.seal(eo(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),de=null,fe=null,pe=Object.seal(eo(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),me=!0,he=!0,ge=!1,_e=!0,N=!1,P=!0,ve=!1,ye=!1,be=!1,xe=!1,Se=!1,F=!1,Ce=!0,we=!1,Te=`user-content-`,Ee=!0,De=!1,Oe={},ke=null,Ae=H({},[`annotation-xml`,`audio`,`colgroup`,`desc`,`foreignobject`,`head`,`iframe`,`math`,`mi`,`mn`,`mo`,`ms`,`mtext`,`noembed`,`noframes`,`noscript`,`plaintext`,`script`,`style`,`svg`,`template`,`thead`,`title`,`video`,`xmp`]),je=null,Me=H({},[`audio`,`video`,`img`,`source`,`image`,`track`]),Ne=null,Pe=H({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),Fe=`http://www.w3.org/1998/Math/MathML`,Ie=`http://www.w3.org/2000/svg`,Le=`http://www.w3.org/1999/xhtml`,Re=Le,ze=!1,Be=null,Ve=H({},[Fe,Ie,Le],fo),He=H({},[`mi`,`mo`,`mn`,`ms`,`mtext`]),Ue=H({},[`annotation-xml`]),We=H({},[`title`,`style`,`font`,`a`,`script`]),Ge=null,Ke=[`application/xhtml+xml`,`text/html`],qe=null,Je=null,Ye=n.createElement(`form`),Xe=function(e){return e instanceof RegExp||e instanceof Function},Ze=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Je&&Je===e)return;(!e||typeof e!=`object`)&&(e={}),e=Oo(e),Ge=Ke.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,qe=Ge===`application/xhtml+xml`?fo:uo,j=xo(e,`ALLOWED_TAGS`)&&lo(e.ALLOWED_TAGS)?H({},e.ALLOWED_TAGS,qe):ce,M=xo(e,`ALLOWED_ATTR`)&&lo(e.ALLOWED_ATTR)?H({},e.ALLOWED_ATTR,qe):le,Be=xo(e,`ALLOWED_NAMESPACES`)&&lo(e.ALLOWED_NAMESPACES)?H({},e.ALLOWED_NAMESPACES,fo):Ve,Ne=xo(e,`ADD_URI_SAFE_ATTR`)&&lo(e.ADD_URI_SAFE_ATTR)?H(Oo(Pe),e.ADD_URI_SAFE_ATTR,qe):Pe,je=xo(e,`ADD_DATA_URI_TAGS`)&&lo(e.ADD_DATA_URI_TAGS)?H(Oo(Me),e.ADD_DATA_URI_TAGS,qe):Me,ke=xo(e,`FORBID_CONTENTS`)&&lo(e.FORBID_CONTENTS)?H({},e.FORBID_CONTENTS,qe):Ae,de=xo(e,`FORBID_TAGS`)&&lo(e.FORBID_TAGS)?H({},e.FORBID_TAGS,qe):Oo({}),fe=xo(e,`FORBID_ATTR`)&&lo(e.FORBID_ATTR)?H({},e.FORBID_ATTR,qe):Oo({}),Oe=xo(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?Oo(e.USE_PROFILES):e.USE_PROFILES:!1,me=e.ALLOW_ARIA_ATTR!==!1,he=e.ALLOW_DATA_ATTR!==!1,ge=e.ALLOW_UNKNOWN_PROTOCOLS||!1,_e=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,N=e.SAFE_FOR_TEMPLATES||!1,P=e.SAFE_FOR_XML!==!1,ve=e.WHOLE_DOCUMENT||!1,xe=e.RETURN_DOM||!1,Se=e.RETURN_DOM_FRAGMENT||!1,F=e.RETURN_TRUSTED_TYPE||!1,be=e.FORCE_BODY||!1,Ce=e.SANITIZE_DOM!==!1,we=e.SANITIZE_NAMED_PROPS||!1,Ee=e.KEEP_CONTENT!==!1,De=e.IN_PLACE||!1,se=jo(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Ko,Re=typeof e.NAMESPACE==`string`?e.NAMESPACE:Le,He=xo(e,`MATHML_TEXT_INTEGRATION_POINTS`)&&e.MATHML_TEXT_INTEGRATION_POINTS&&typeof e.MATHML_TEXT_INTEGRATION_POINTS==`object`?Oo(e.MATHML_TEXT_INTEGRATION_POINTS):H({},[`mi`,`mo`,`mn`,`ms`,`mtext`]),Ue=xo(e,`HTML_INTEGRATION_POINTS`)&&e.HTML_INTEGRATION_POINTS&&typeof e.HTML_INTEGRATION_POINTS==`object`?Oo(e.HTML_INTEGRATION_POINTS):H({},[`annotation-xml`]);let t=xo(e,`CUSTOM_ELEMENT_HANDLING`)&&e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING==`object`?Oo(e.CUSTOM_ELEMENT_HANDLING):eo(null);if(ue=eo(null),xo(t,`tagNameCheck`)&&Xe(t.tagNameCheck)&&(ue.tagNameCheck=t.tagNameCheck),xo(t,`attributeNameCheck`)&&Xe(t.attributeNameCheck)&&(ue.attributeNameCheck=t.attributeNameCheck),xo(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(ue.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),N&&(he=!1),Se&&(xe=!0),Oe&&(j=H({},Ro),M=eo(null),Oe.html===!0&&(H(j,Mo),H(M,zo)),Oe.svg===!0&&(H(j,No),H(M,Bo),H(M,W)),Oe.svgFilters===!0&&(H(j,Po),H(M,Bo),H(M,W)),Oe.mathMl===!0&&(H(j,Io),H(M,U),H(M,W))),pe.tagCheck=null,pe.attributeCheck=null,xo(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?pe.tagCheck=e.ADD_TAGS:lo(e.ADD_TAGS)&&(j===ce&&(j=Oo(j)),H(j,e.ADD_TAGS,qe))),xo(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?pe.attributeCheck=e.ADD_ATTR:lo(e.ADD_ATTR)&&(M===le&&(M=Oo(M)),H(M,e.ADD_ATTR,qe))),xo(e,`ADD_URI_SAFE_ATTR`)&&lo(e.ADD_URI_SAFE_ATTR)&&H(Ne,e.ADD_URI_SAFE_ATTR,qe),xo(e,`FORBID_CONTENTS`)&&lo(e.FORBID_CONTENTS)&&(ke===Ae&&(ke=Oo(ke)),H(ke,e.FORBID_CONTENTS,qe)),xo(e,`ADD_FORBID_CONTENTS`)&&lo(e.ADD_FORBID_CONTENTS)&&(ke===Ae&&(ke=Oo(ke)),H(ke,e.ADD_FORBID_CONTENTS,qe)),Ee&&(j[`#text`]=!0),ve&&H(j,[`html`,`head`,`body`]),j.table&&(H(j,[`tbody`]),delete de.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw wo(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw wo(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);x=e.TRUSTED_TYPES_POLICY,S=x.createHTML(``)}else x===void 0&&(x=$o(u,i)),x!==null&&typeof S==`string`&&(S=x.createHTML(``));(O.uponSanitizeElement.length>0||O.uponSanitizeAttribute.length>0)&&j===ce&&(j=Oo(j)),O.uponSanitizeAttribute.length>0&&M===le&&(M=Oo(M)),Qa&&Qa(e),Je=e},Qe=H({},[...No,...Po,...Fo]),$e=H({},[...Io,...Lo]),et=function(e){let t=g(e);(!t||!t.tagName)&&(t={namespaceURI:Re,tagName:`template`});let n=uo(e.tagName),r=uo(t.tagName);return Be[e.namespaceURI]?e.namespaceURI===Ie?t.namespaceURI===Le?n===`svg`:t.namespaceURI===Fe?n===`svg`&&(r===`annotation-xml`||He[r]):!!Qe[n]:e.namespaceURI===Fe?t.namespaceURI===Le?n===`math`:t.namespaceURI===Ie?n===`math`&&Ue[r]:!!$e[n]:e.namespaceURI===Le?t.namespaceURI===Ie&&!Ue[r]||t.namespaceURI===Fe&&!He[r]?!1:!$e[n]&&(We[n]||!Qe[n]):!!(Ge===`application/xhtml+xml`&&Be[e.namespaceURI]):!1},I=function(e){so(t.removed,{element:e});try{g(e).removeChild(e)}catch{p(e)}},L=function(e,n){try{so(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{so(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e===`is`)if(xe||Se)try{I(n)}catch{}else try{n.setAttribute(e,``)}catch{}},tt=function(e){let t=null,r=null;if(be)e=``+e;else{let t=po(e,/^[\r\n\t ]+/);r=t&&t[0]}Ge===`application/xhtml+xml`&&Re===Le&&(e=``+e+``);let i=x?x.createHTML(e):e;if(Re===Le)try{t=new l().parseFromString(i,Ge)}catch{}if(!t||!t.documentElement){t=w.createDocument(Re,`template`,null);try{t.documentElement.innerHTML=ze?S:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),Re===Le?D.call(t,ve?`html`:`body`)[0]:ve?t.documentElement:a},nt=function(e){return T.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},rt=function(e){e.normalize();let t=T.call(e.ownerDocument||e,e,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),n=t.nextNode();for(;n;){let e=n.data;io([k,te,A],t=>{e=mo(e,t,` `)}),n.data=e,n=t.nextNode()}},it=function(e){let t=b?b(e):null;return typeof t!=`string`||qe(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==v(e)||typeof e.removeAttribute!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==y(e)||e.childNodes!==h(e)},at=function(e){if(!y||typeof e!=`object`||!e)return!1;try{return y(e)===Zo.documentFragment}catch{return!1}},ot=function(e){if(!y||typeof e!=`object`||!e)return!1;try{return typeof y(e)==`number`}catch{return!1}};function st(e,n,r){io(e,e=>{e.call(t,n,r,Je)})}let ct=function(e){let n=null;if(st(O.beforeSanitizeElements,e,null),it(e))return I(e),!0;let r=qe(e.nodeName);if(st(O.uponSanitizeElement,e,{tagName:r,allowedTags:j}),P&&e.hasChildNodes()&&!ot(e.firstElementChild)&&Co(/<[/\w!]/g,e.innerHTML)&&Co(/<[/\w!]/g,e.textContent)||P&&e.namespaceURI===Le&&r===`style`&&ot(e.firstElementChild)||e.nodeType===Zo.progressingInstruction||P&&e.nodeType===Zo.comment&&Co(/<[/\w]/g,e.data))return I(e),!0;if(de[r]||!(pe.tagCheck instanceof Function&&pe.tagCheck(r))&&!j[r]){if(!de[r]&&dt(r)&&(ue.tagNameCheck instanceof RegExp&&Co(ue.tagNameCheck,r)||ue.tagNameCheck instanceof Function&&ue.tagNameCheck(r)))return!1;if(Ee&&!ke[r]){let t=g(e),n=h(e);if(n&&t){let r=n.length;for(let i=r-1;i>=0;--i){let r=f(n[i],!0);t.insertBefore(r,m(e))}}}return I(e),!0}return(y?y(e):e.nodeType)===Zo.element&&!et(e)||(r===`noscript`||r===`noembed`||r===`noframes`)&&Co(/<\/no(script|embed|frames)/i,e.innerHTML)?(I(e),!0):(N&&e.nodeType===Zo.text&&(n=e.textContent,io([k,te,A],e=>{n=mo(n,e,` `)}),e.textContent!==n&&(so(t.removed,{element:e.cloneNode()}),e.textContent=n)),st(O.afterSanitizeElements,e,null),!1)},lt=function(e,t,r){if(fe[t]||Ce&&(t===`id`||t===`name`)&&(r in n||r in Ye))return!1;let i=M[t]||pe.attributeCheck instanceof Function&&pe.attributeCheck(t,e);if(!(he&&!fe[t]&&Co(ne,t))&&!(me&&Co(re,t))){if(!i||fe[t]){if(!(dt(e)&&(ue.tagNameCheck instanceof RegExp&&Co(ue.tagNameCheck,e)||ue.tagNameCheck instanceof Function&&ue.tagNameCheck(e))&&(ue.attributeNameCheck instanceof RegExp&&Co(ue.attributeNameCheck,t)||ue.attributeNameCheck instanceof Function&&ue.attributeNameCheck(t,e))||t===`is`&&ue.allowCustomizedBuiltInElements&&(ue.tagNameCheck instanceof RegExp&&Co(ue.tagNameCheck,r)||ue.tagNameCheck instanceof Function&&ue.tagNameCheck(r))))return!1}else if(!Ne[t]&&!Co(se,mo(r,ae,``))&&!((t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&ho(r,`data:`)===0&&je[e])&&!(ge&&!Co(ie,mo(r,ae,``)))&&r)return!1}return!0},ut=H({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),dt=function(e){return!ut[uo(e)]&&Co(oe,e)},ft=function(e){st(O.beforeSanitizeAttributes,e,null);let n=e.attributes;if(!n||it(e))return;let r={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:M,forceKeepAttr:void 0},i=n.length;for(;i--;){let a=n[i],o=a.name,s=a.namespaceURI,c=a.value,l=qe(o),d=c,f=o===`value`?d:go(d);if(r.attrName=l,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,st(O.uponSanitizeAttribute,e,r),f=r.attrValue,we&&(l===`id`||l===`name`)&&ho(f,Te)!==0&&(L(o,e),f=Te+f),P&&Co(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,f)){L(o,e);continue}if(l===`attributename`&&po(f,`href`)){L(o,e);continue}if(r.forceKeepAttr)continue;if(!r.keepAttr){L(o,e);continue}if(!_e&&Co(/\/>/i,f)){L(o,e);continue}N&&io([k,te,A],e=>{f=mo(f,e,` `)});let p=qe(e.nodeName);if(!lt(p,l,f)){L(o,e);continue}if(x&&typeof u==`object`&&typeof u.getAttributeType==`function`&&!s)switch(u.getAttributeType(p,l)){case`TrustedHTML`:f=x.createHTML(f);break;case`TrustedScriptURL`:f=x.createScriptURL(f);break}if(f!==d)try{s?e.setAttributeNS(s,o,f):e.setAttribute(o,f),it(e)?I(e):oo(t.removed)}catch{L(o,e)}}st(O.afterSanitizeAttributes,e,null)},pt=function(e){let t=null,n=nt(e);for(st(O.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if(st(O.uponSanitizeShadowNode,t,null),ct(t),ft(t),at(t.content)&&pt(t.content),(y?y(t):t.nodeType)===Zo.element){let e=_?_(t):t.shadowRoot;at(e)&&(mt(e),pt(e))}st(O.afterSanitizeShadowDOM,e,null)},mt=function(e){let t=y?y(e):e.nodeType;if(t===Zo.element){let t=_?_(e):e.shadowRoot;at(t)&&(mt(t),pt(t))}let n=h?h(e):e.childNodes;if(!n)return;let r=[];io(n,e=>{so(r,e)});for(let e of r)mt(e);if(t===Zo.element){let t=b?b(e):null;if(typeof t==`string`&&qe(t)===`template`){let t=e.content;at(t)&&mt(t)}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(ze=!e,ze&&(e=``),typeof e!=`string`&&!ot(e)&&(e=ko(e),typeof e!=`string`))throw wo(`dirty is not a string, aborting`);if(!t.isSupported)return e;if(ye||Ze(n),t.removed=[],typeof e==`string`&&(De=!1),De){let t=b?b(e):e.nodeName;if(typeof t==`string`){let e=qe(t);if(!j[e]||de[e])throw wo(`root node is forbidden and cannot be sanitized in-place`)}if(it(e))throw wo(`root node is clobbered and cannot be sanitized in-place`);mt(e)}else if(ot(e))i=tt(``),a=i.ownerDocument.importNode(e,!0),a.nodeType===Zo.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),mt(a);else{if(!xe&&!N&&!ve&&e.indexOf(`<`)===-1)return x&&F?x.createHTML(e):e;if(i=tt(e),!i)return xe?null:F?S:``}i&&be&&I(i.firstChild);let c=nt(De?e:i);for(;o=c.nextNode();)ct(o),ft(o),at(o.content)&&pt(o.content);if(De)return N&&rt(e),e;if(xe){if(N&&rt(i),Se)for(s=E.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(M.shadowroot||M.shadowrootmode)&&(s=ee.call(r,s,!0)),s}let l=ve?i.outerHTML:i.innerHTML;return ve&&j[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&Co(Yo,i.ownerDocument.doctype.name)&&(l=` +`+l),N&&io([k,te,A],e=>{l=mo(l,e,` `)}),x&&F?x.createHTML(l):l},t.setConfig=function(){Ze(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}),ye=!0},t.clearConfig=function(){Je=null,ye=!1},t.isValidAttribute=function(e,t,n){return Je||Ze({}),lt(qe(e),qe(t),n)},t.addHook=function(e,t){typeof t==`function`&&so(O[e],t)},t.removeHook=function(e,t){if(t!==void 0){let n=ao(O[e],t);return n===-1?void 0:co(O[e],n,1)[0]}return oo(O[e])},t.removeHooks=function(e){O[e]=[]},t.removeAllHooks=function(){O=es()},t}var ns=ts(),rs=` + + + + +`,is=` + + + + +`,as=` + + + + +`;function os(e){return(0,C.useSyncExternalStore)(t=>{let n=window.matchMedia(e);return n.addEventListener(`change`,t),()=>n.removeEventListener(`change`,t)},()=>window.matchMedia(e).matches)}var ss=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/gif`,`image/webp`,`image/bmp`,`image/avif`,`image/x-icon`,`image/vnd.microsoft.icon`]);function cs(e){return!!e&&ss.has(e.trim().toLowerCase())}var ls=/^(?:(?:https?|mailto|tel|cid):|[^a-z]|[a-z+.-]+(?:[^a-z+.\-:]|$))/i,us=new Set([`text`,`link`,`vlink`,`alink`]);function ds(e){return e.trim().replace(/^<\s*/,``).replace(/\s*>$/,``).trim()}function fs(e){try{return decodeURIComponent(e)}catch{return e}}function ps(e){return e==null?``:ds(fs(ds(String(e).trim().replace(/^cid:/i,``)))).toLowerCase()}function ms(e){let t=String(e??``).trim();return/^cid:/i.test(t)?ps(t.slice(4)):``}var hs=[`src`,`poster`,`xlink:href`];function gs(e){return(/^data:([^;,]*)/i.exec(e.trim())?.[1]??``).trim().toLowerCase()}function _s(e,t=null){return e?vs(e,t,!0):``}function vs(e,t,n){let r=t;ns.addHook(`afterSanitizeAttributes`,e=>{if(!(!e||e.nodeType!==1||typeof e.getAttribute!=`function`)){if(e.nodeName===`IMG`&&r&&r.size>0){let t=e.getAttribute(`src`);if(t){let n=ms(t),i=r.get(n);i&&e.setAttribute(`src`,i)}}for(let t of hs){let n=e.getAttribute(t);if(!n)continue;let r=n.trim();/^data:/i.test(r)&&!cs(gs(r))&&e.removeAttribute(t)}}});try{return ns.sanitize(e,{ALLOWED_URI_REGEXP:ls,...n?{WHOLE_DOCUMENT:!0,FORBID_TAGS:[`base`,`link`,`meta`],ADD_ATTR:(e,t)=>t.toLowerCase()===`body`&&us.has(e.toLowerCase())}:{}})}finally{ns.removeHook(`afterSanitizeAttributes`)}}var ys=[`default-src 'none'`,`img-src data: blob: http: https: cid:`,`style-src 'unsafe-inline'`,`font-src data: http: https:`,`media-src data: blob: http: https:`,`base-uri 'none'`,`form-action 'none'`,`frame-src 'none'`].join(`; `),bs={light:{background:`#fcfcfd`,color:`#111827`},dark:{background:`#111113`,color:`#e6e8ef`}};function xs(e=`light`){return` + html { + margin: 0; + padding: 0; + background: transparent; + color: ${(Object.prototype.hasOwnProperty.call(bs,e)?bs[e]:bs.light).color}; + /* The host (.message-view__body) is the sole scroll container for + * the open message. The iframe document must never grow its own + * scrollbars: we already size the iframe element to the document's + * scroll height (post-zoom) from MessageView.vue, so any residual + * iframe-level scrollbar would be visual noise stacked beside the + * host's scrollbar, not a navigation affordance. */ + overflow: hidden; + } + body { + margin: 0; + padding: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + overflow-wrap: anywhere; + overflow: hidden; + } + img, video, canvas, svg { + max-width: 100%; + height: auto; + } + table { + max-width: 100%; + } + div, section, article, main, header, footer, aside, table, tbody, thead, tfoot, tr, td, th { + max-width: 100%; + } +`}function Ss(e,t={}){let n=t.colorScheme===`dark`?`dark`:`light`,r=e||``,i=xs(n);if(/^\s*)/i.test(r)&&typeof DOMParser==`function`){let e=new DOMParser().parseFromString(r,`text/html`),t=e.head,a=e.createElement(`meta`);a.setAttribute(`charset`,`utf-8`);let o=e.createElement(`meta`);o.setAttribute(`name`,`viewport`),o.setAttribute(`content`,`width=device-width, initial-scale=1`);let s=e.createElement(`meta`);s.setAttribute(`http-equiv`,`Content-Security-Policy`),s.setAttribute(`content`,ys);let c=e.createElement(`style`);c.textContent=i;let l=e.createDocumentFragment();return l.append(a,o,s,c),t.insertBefore(l,t.firstChild),e.documentElement.style.colorScheme=n,`\n${e.documentElement.outerHTML}`}return` + + + + + + + +${r} +`}var Cs=`allow-same-origin allow-popups allow-popups-to-escape-sandbox`,ws={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ts=.2125,Es=.7154,Ds=.0721;function Os(e){return Number.isNaN(e)?0:Math.max(0,Math.min(255,Math.round(e)))}function ks(e){return Number.isNaN(e)?1:Math.max(0,Math.min(1,e))}function As(e){let t=e.slice(1);return/^[0-9a-f]+$/i.test(t)?t.length===3||t.length===4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?parseInt(t[3]+t[3],16)/255:1}:t.length===6||t.length===8?{r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16),a:t.length===8?parseInt(t.slice(6,8),16)/255:1}:null:null}function js(e){let t=e.trim();return t.endsWith(`%`)?Os(parseFloat(t)/100*255):Os(parseFloat(t))}function Ms(e){if(e==null)return 1;let t=e.trim();return t===``?1:t.endsWith(`%`)?ks(parseFloat(t)/100):ks(parseFloat(t))}function Ns(e){let t=e.indexOf(`(`);if(t<0||!e.endsWith(`)`))return null;let n=e.slice(t+1,-1).trim(),[r,i]=n.includes(`/`)?Ps(n,`/`):[n,void 0],a=r.includes(`,`)?r.split(`,`):r.split(/\s+/).filter(Boolean),o=i??(r.includes(`,`)&&a.length===4?a[3]:void 0),s=a.slice(0,3);return s.length<3?null:{r:js(s[0]),g:js(s[1]),b:js(s[2]),a:Ms(o)}}function Ps(e,t){let n=e.indexOf(t);return[e.slice(0,n),e.slice(n+1)]}function Fs(e,t,n){let r=n;return r<0&&(r+=1),r>1&&--r,r<1/6?e+(t-e)*6*r:r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function Is(e){let t=e.indexOf(`(`);if(t<0||!e.endsWith(`)`))return null;let n=e.slice(t+1,-1).trim(),[r,i]=n.includes(`/`)?Ps(n,`/`):[n,void 0],a=r.includes(`,`)?r.split(`,`):r.split(/\s+/).filter(Boolean);if(a.length<3)return null;let o=(parseFloat(a[0])%360+360)%360/360,s=Math.max(0,Math.min(1,parseFloat(a[1])/100)),c=Math.max(0,Math.min(1,parseFloat(a[2])/100)),l=i??(r.includes(`,`)?a[3]:void 0),u=Ls(o,s,c);return{r:u.r,g:u.g,b:u.b,a:Ms(l)}}function Ls(e,t,n){let r,i,a;if(t===0)r=i=a=n;else{let o=n<.5?n*(1+t):n+t-n*t,s=2*n-o;r=Fs(s,o,e+1/3),i=Fs(s,o,e),a=Fs(s,o,e-1/3)}return{r:Os(r*255),g:Os(i*255),b:Os(a*255)}}function Rs({r:e,g:t,b:n}){let r=e/255,i=t/255,a=n/255,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(o+s)/2,l=o-s;if(l===0)return{h:0,s:0,l:c};let u=c>.5?l/(2-o-s):l/(o+s),d;return d=o===r?(i-a)/l+(i=n)return Bs(r);let{h:i,s:a,l:o}=Rs(r),s=o,c=.97,l=Ls(i,a,c);for(let e=0;e<24;e+=1){let e=(s+c)/2,r=Ls(i,a,e);Us(Bs(r),t)>=n?(l=r,c=e):s=e}return Bs(l)}var Js=200,Ys=3.5,Xs=bs.dark.background,Zs=32,Qs=[`:not(button)[style]`,`:not(button)[bgcolor]`,`:not(button)[color]`].join(`,`);function $s(e){return e.includes(`gradient`)}function ec(e){let t=e.getPropertyValue(`color`),n=e.getPropertyValue(`background`),r=e.getPropertyValue(`background-color`),i=e.getPropertyValue(`background-image`);if(!t&&!n&&!r&&!i)return!1;let a=!1,o=t=>{e.getPropertyValue(t)&&(e.removeProperty(t),a=!0)},s=()=>{if(!t||Hs(t)>Js)return;if(Ks(t)Hs(e)>Js||!!t&&Us(t,e)`${e.cssText}\n`).join(``)}function rc(e){if(!e.trim()||typeof CSSStyleSheet>`u`)return e;let t;try{t=new CSSStyleSheet,t.replaceSync(e)}catch{return e}return tc(t.cssRules)?nc(t):e}var ic=/prefers-color-scheme\s*:\s*dark/i,ac=/filter\s*:[^;"']*invert\s*\(/i,oc=/color-scheme\s*:[^;]*dark/i;function sc(){return typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}function cc(e,t){if(ic.test(t)&&sc())return!0;for(let t of e.querySelectorAll(`meta[name]`))if((t.getAttribute(`name`)??``).toLowerCase()===`color-scheme`&&(t.getAttribute(`content`)??``).toLowerCase().includes(`dark`))return!0;let n=e.nodeType===9?e:null,r=n?[n.documentElement,n.body,...Array.from(n.body.children)]:Array.from(e.children);for(let e of r){if(!e)continue;let t=e.getAttribute(`style`)??``;if(oc.test(t)||ac.test(t))return!0}return!1}function lc(e,t,n=null){if(cc(e,t))return!1;if(n)for(let e of[`background`,`bgcolor`,`text`,`link`,`vlink`,`alink`])n.removeAttribute(e);for(let t of e.querySelectorAll(Qs))t.removeAttribute(`bgcolor`),t.removeAttribute(`color`),t.hasAttribute(`style`)&&ec(t.style);for(let t of e.querySelectorAll(`text[fill]`)){let e=t.getAttribute(`fill`);Gs(e)&&Hs(e)<=Js&&t.setAttribute(`fill`,`currentColor`)}for(let t of e.querySelectorAll(`style`)){let e=t.textContent??``,n=rc(e);n!==e&&(t.textContent=n)}return!0}function uc(e){if(!e||typeof document>`u`)return e;try{if(/^\s*)/i.test(e)&&typeof DOMParser==`function`){let t=new DOMParser().parseFromString(e,`text/html`);return lc(t,e,t.body)?t.documentElement.outerHTML:e}let t=document.createElement(`template`);t.innerHTML=e;let n=t.content;return lc(n,e)?t.innerHTML:e}catch{return e}}var dc=`aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2`,fc=`ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2`,pc=`numeric`,mc=`ascii`,hc=`alpha`,gc=`asciinumeric`,_c=`alphanumeric`,vc=`domain`,yc=`emoji`,bc=`scheme`,xc=`slashscheme`,Sc=`whitespace`;function Cc(e,t){return e in t||(t[e]=[]),t[e]}function wc(e,t,n){t[pc]&&(t[gc]=!0,t[_c]=!0),t[mc]&&(t[gc]=!0,t[hc]=!0),t[gc]&&(t[_c]=!0),t[hc]&&(t[_c]=!0),t[_c]&&(t[vc]=!0),t[yc]&&(t[vc]=!0);for(let r in t){let t=Cc(r,n);t.indexOf(e)<0&&t.push(e)}}function Tc(e,t){let n={};for(let r in t)t[r].indexOf(e)>=0&&(n[r]=!0);return n}function Ec(e=null){this.j={},this.jr=[],this.jd=null,this.t=e}Ec.groups={},Ec.prototype={accepts(){return!!this.t},go(e){let t=this,n=t.j[e];if(n)return n;for(let n=0;ne.ta(t,n,r,i),Dc=(e,t,n,r,i)=>e.tr(t,n,r,i),Oc=(e,t,n,r,i)=>e.ts(t,n,r,i),K=(e,t,n,r,i)=>e.tt(t,n,r,i),kc=`WORD`,Ac=`UWORD`,jc=`ASCIINUMERICAL`,Mc=`ALPHANUMERICAL`,Nc=`LOCALHOST`,Pc=`TLD`,Fc=`UTLD`,Ic=`SCHEME`,Lc=`SLASH_SCHEME`,Rc=`NUM`,zc=`WS`,Bc=`NL`,Vc=`OPENBRACE`,Hc=`CLOSEBRACE`,Uc=`OPENBRACKET`,Wc=`CLOSEBRACKET`,Gc=`OPENPAREN`,Kc=`CLOSEPAREN`,qc=`OPENANGLEBRACKET`,Jc=`CLOSEANGLEBRACKET`,Yc=`FULLWIDTHLEFTPAREN`,Xc=`FULLWIDTHRIGHTPAREN`,Zc=`LEFTCORNERBRACKET`,Qc=`RIGHTCORNERBRACKET`,$c=`LEFTWHITECORNERBRACKET`,el=`RIGHTWHITECORNERBRACKET`,tl=`FULLWIDTHLESSTHAN`,nl=`FULLWIDTHGREATERTHAN`,rl=`AMPERSAND`,il=`APOSTROPHE`,al=`ASTERISK`,ol=`AT`,sl=`BACKSLASH`,cl=`BACKTICK`,ll=`CARET`,ul=`COLON`,dl=`COMMA`,fl=`DOLLAR`,pl=`DOT`,ml=`EQUALS`,hl=`EXCLAMATION`,gl=`HYPHEN`,_l=`PERCENT`,vl=`PIPE`,yl=`PLUS`,bl=`POUND`,xl=`QUERY`,Sl=`QUOTE`,Cl=`FULLWIDTHMIDDLEDOT`,wl=`SEMI`,Tl=`SLASH`,El=`TILDE`,Dl=`UNDERSCORE`,Ol=`EMOJI`,kl=`SYM`,Al=Object.freeze({__proto__:null,ALPHANUMERICAL:Mc,AMPERSAND:rl,APOSTROPHE:il,ASCIINUMERICAL:jc,ASTERISK:al,AT:ol,BACKSLASH:sl,BACKTICK:cl,CARET:ll,CLOSEANGLEBRACKET:Jc,CLOSEBRACE:Hc,CLOSEBRACKET:Wc,CLOSEPAREN:Kc,COLON:ul,COMMA:dl,DOLLAR:fl,DOT:pl,EMOJI:Ol,EQUALS:ml,EXCLAMATION:hl,FULLWIDTHGREATERTHAN:nl,FULLWIDTHLEFTPAREN:Yc,FULLWIDTHLESSTHAN:tl,FULLWIDTHMIDDLEDOT:Cl,FULLWIDTHRIGHTPAREN:Xc,HYPHEN:gl,LEFTCORNERBRACKET:Zc,LEFTWHITECORNERBRACKET:$c,LOCALHOST:Nc,NL:Bc,NUM:Rc,OPENANGLEBRACKET:qc,OPENBRACE:Vc,OPENBRACKET:Uc,OPENPAREN:Gc,PERCENT:_l,PIPE:vl,PLUS:yl,POUND:bl,QUERY:xl,QUOTE:Sl,RIGHTCORNERBRACKET:Qc,RIGHTWHITECORNERBRACKET:el,SCHEME:Ic,SEMI:wl,SLASH:Tl,SLASH_SCHEME:Lc,SYM:kl,TILDE:El,TLD:Pc,UNDERSCORE:Dl,UTLD:Fc,UWORD:Ac,WORD:kc,WS:zc}),jl=/[a-z]/,Ml=/\p{L}/u,Nl=/\p{Emoji}/u,Pl=/\d/,Fl=/\s/,Il=`\r`,Ll=` +`,Rl=`️`,zl=`‍`,Bl=``,Vl=null,Hl=null;function Ul(e=[]){let t={};Ec.groups=t;let n=new Ec;Vl??=ql(dc),Hl??=ql(fc),K(n,`'`,il),K(n,`{`,Vc),K(n,`}`,Hc),K(n,`[`,Uc),K(n,`]`,Wc),K(n,`(`,Gc),K(n,`)`,Kc),K(n,`<`,qc),K(n,`>`,Jc),K(n,`(`,Yc),K(n,`)`,Xc),K(n,`「`,Zc),K(n,`」`,Qc),K(n,`『`,$c),K(n,`』`,el),K(n,`<`,tl),K(n,`>`,nl),K(n,`&`,rl),K(n,`*`,al),K(n,`@`,ol),K(n,"`",cl),K(n,`^`,ll),K(n,`:`,ul),K(n,`,`,dl),K(n,`$`,fl),K(n,`.`,pl),K(n,`=`,ml),K(n,`!`,hl),K(n,`-`,gl),K(n,`%`,_l),K(n,`|`,vl),K(n,`+`,yl),K(n,`#`,bl),K(n,`?`,xl),K(n,`"`,Sl),K(n,`/`,Tl),K(n,`;`,wl),K(n,`~`,El),K(n,`_`,Dl),K(n,`\\`,sl),K(n,`・`,Cl);let r=Dc(n,Pl,Rc,{[pc]:!0});Dc(r,Pl,r);let i=Dc(r,jl,jc,{[gc]:!0}),a=Dc(r,Ml,Mc,{[_c]:!0}),o=Dc(n,jl,kc,{[mc]:!0});Dc(o,Pl,i),Dc(o,jl,o),Dc(i,Pl,i),Dc(i,jl,i);let s=Dc(n,Ml,Ac,{[hc]:!0});Dc(s,jl),Dc(s,Pl,a),Dc(s,Ml,s),Dc(a,Pl,a),Dc(a,jl),Dc(a,Ml,a);let c=K(n,Ll,Bc,{[Sc]:!0}),l=K(n,Il,zc,{[Sc]:!0}),u=Dc(n,Fl,zc,{[Sc]:!0});K(n,Bl,u),K(l,Ll,c),K(l,Bl,u),Dc(l,Fl,u),K(u,Il),K(u,Ll),Dc(u,Fl,u),K(u,Bl,u);let d=Dc(n,Nl,Ol,{[yc]:!0});K(d,`#`),Dc(d,Nl,d),K(d,Rl,d);let f=K(d,zl);K(f,`#`),Dc(f,Nl,d);let p=[[jl,o],[Pl,i]],m=[[jl,null],[Ml,s],[Pl,a]];for(let e=0;ee[0]>t[0]?1:-1);for(let t=0;t=0?i[vc]=!0:jl.test(r)?Pl.test(r)?i[gc]=!0:i[mc]=!0:i[pc]=!0,Oc(n,r,r,i)}return Oc(n,`localhost`,Nc,{ascii:!0}),n.jd=new Ec(kl),{start:n,tokens:Object.assign({groups:t},Al)}}function Wl(e,t){let n=Gl(t.replace(/[A-Z]/g,e=>e.toLowerCase())),r=n.length,i=[],a=0,o=0;for(;o=0&&(d+=n[o].length,f++),l+=n[o].length,a+=n[o].length,o++;a-=d,o-=f,l-=d,i.push({t:u.t,v:t.slice(a-l,a),s:a-l,e:a})}return i}function Gl(e){let t=[],n=e.length,r=0;for(;r56319||r+1===n||(a=e.charCodeAt(r+1))<56320||a>57343?e[r]:e.slice(r,r+2);t.push(o),r+=o.length}return t}function Kl(e,t,n,r,i){let a,o=t.length;for(let n=0;n=0;)i++;if(i>0){t.push(n.join(``));for(let t=parseInt(e.substring(r,r+i),10);t>0;t--)n.pop();r+=i}else n.push(e[r]),r++}return t}var Jl={defaultProtocol:`http`,events:null,format:Xl,formatHref:Xl,nl2br:!1,tagName:`a`,target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function Yl(e,t=null){let n=Object.assign({},Jl);e&&(n=Object.assign(n,e instanceof Yl?e.o:e));let r=n.ignoreTags,i=[];for(let e=0;en?r.substring(0,n)+`…`:r},toFormattedHref(e){return e.get(`formatHref`,this.toHref(e.get(`defaultProtocol`)),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(e=Jl.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(e),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(e){return{type:this.t,value:this.toFormattedString(e),isLink:this.isLink,href:this.toFormattedHref(e),start:this.startIndex(),end:this.endIndex()}},validate(e){return e.get(`validate`,this.toString(),this)},render(e){let t=this,n=this.toHref(e.get(`defaultProtocol`)),r=e.get(`formatHref`,n,this),i=e.get(`tagName`,n,t),a=this.toFormattedString(e),o={},s=e.get(`className`,n,t),c=e.get(`target`,n,t),l=e.get(`rel`,n,t),u=e.getObj(`attributes`,n,t),d=e.getObj(`events`,n,t);return o.href=r,s&&(o.class=s),c&&(o.target=c),l&&(o.rel=l),u&&Object.assign(o,u),{tagName:i,attributes:o,content:a,eventListeners:d}}};function Ql(e,t){class n extends Zl{constructor(t,n){super(t,n),this.t=e}}for(let e in t)n.prototype[e]=t[e];return n.t=e,n}var $l=Ql(`email`,{isLink:!0,toHref(){return`mailto:`+this.toString()}}),eu=Ql(`text`),tu=Ql(`nl`),nu=Ql(`url`,{isLink:!0,toHref(e=Jl.defaultProtocol){return this.hasProtocol()?this.v:`${e}://${this.v}`},hasProtocol(){let e=this.tk;return e.length>=2&&e[0].t!==Nc&&e[1].t===ul}}),q=e=>new Ec(e);function ru({groups:e}){let t=e.domain.concat([rl,al,ol,sl,cl,ll,fl,ml,gl,Rc,_l,vl,yl,bl,Tl,kl,El,Dl]),n=[il,ul,dl,pl,hl,_l,xl,Sl,wl,qc,Jc,Vc,Hc,Wc,Uc,Gc,Kc,Yc,Xc,Zc,Qc,$c,el,tl,nl],r=[rl,il,al,sl,cl,ll,fl,ml,gl,Vc,Hc,_l,vl,yl,bl,xl,Tl,kl,El,Dl],i=q(),a=K(i,El);G(a,r,a),G(a,e.domain,a);let o=q(),s=q(),c=q();G(i,e.domain,o),G(i,e.scheme,s),G(i,e.slashscheme,c),G(o,r,a),G(o,e.domain,o);let l=K(o,ol);K(a,ol,l),K(s,ol,l),K(c,ol,l);let u=K(a,pl);G(u,r,a),G(u,e.domain,a);let d=q();G(l,e.domain,d),G(d,e.domain,d);let f=K(d,pl);G(f,e.domain,d);let p=q($l);G(f,e.tld,p),G(f,e.utld,p),K(l,Nc,p);let m=K(d,gl);K(m,gl,m),G(m,e.domain,d),G(p,e.domain,d),K(p,pl,f),K(p,gl,m);let h=K(o,gl),g=K(o,pl);K(h,gl,h),G(h,e.domain,o),G(g,r,a),G(g,e.domain,o);let _=q(nu);G(g,e.tld,_),G(g,e.utld,_),G(_,e.domain,o),G(_,r,a),K(_,pl,g),K(_,gl,h),K(_,ol,l);let v=K(_,ul),y=q(nu);G(v,e.numeric,y);let b=q(nu),x=q();G(b,t,b),G(b,n,x),G(x,t,b),G(x,n,x),K(_,Tl,b),K(y,Tl,b);let S=K(s,ul),C=K(K(K(c,ul),Tl),Tl);G(s,e.domain,o),K(s,pl,g),K(s,gl,h),G(c,e.domain,o),K(c,pl,g),K(c,gl,h),G(S,e.domain,b),K(S,Tl,b),K(S,xl,b),G(C,e.domain,b),G(C,t,b),K(C,Tl,b);let w=[[Vc,Hc],[Uc,Wc],[Gc,Kc],[qc,Jc],[Yc,Xc],[Zc,Qc],[$c,el],[tl,nl]];for(let e=0;e=0&&f++,i++,u++;if(f<0)i-=u,i0&&(a.push(au(eu,t,o)),o=[]),i-=f,u-=f;let e=d.t,r=n.slice(i-u,i);a.push(au(e,t,r))}}return o.length>0&&a.push(au(eu,t,o)),a}function au(e,t,n){let r=n[0].s,i=n[n.length-1].e;return new e(t.slice(r,i),n)}var J={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function ou(){J.scanner=Ul(J.customSchemes);for(let e=0;e/g,`>`)}function lu(e){return e.replace(/"/g,`"`)}function uu(e){let t=[];for(let n in e){let r=e[n]+``;t.push(`${n}="${lu(r)}"`)}return t.join(` `)}function du({tagName:e,attributes:t,content:n}){return`<${e} ${uu(t)}>${cu(n)}`}function fu(e,t={}){t=new Yl(t,du);let n=su(e),r=[];for(let e=0;e +`):!i.isLink||!t.check(i)?r.push(cu(i.toString())):r.push(t.render(i))}return r.join(``)}String.prototype.linkify||Object.defineProperty(String.prototype,"linkify",{writable:!1,value:function(e){return fu(this,e)}});var pu={defaultProtocol:`https`,target:`_blank`,rel:`noopener noreferrer`,nl2br:!1},mu=/^[ \t]*>[ \t]?/;function hu(e){let t=0,n=e,r=mu.exec(n);for(;r!==null;)t+=1,n=n.slice(r[0].length),r=mu.exec(n);return{depth:t,content:n}}function gu(e){return`pt-quote pt-quote--l${(e-1)%5+1}`}function _u(e,t,n){let r=``,i=[],a=t,o=()=>{i.length&&(r+=i.join(` +`),i=[])};for(;a${t}`,a=i}}return o(),[r,a]}function vu(e){return e?_u(String(e).replace(/\r\n?/g,` +`).split(` +`).map(hu),0,0)[0]:``}var yu=400,bu=120;function xu(e){if(!e)return``;let t=new Date(Number(e));return Number.isNaN(t.valueOf())?``:t.toLocaleString(ft,{timeZone:`UTC`})}function Su(e){let t=e-dt,n=new Intl.RelativeTimeFormat(ft,{numeric:`auto`}),r=Math.round(t/6e4);if(Math.abs(r)<60)return n.format(r,`minute`);let i=Math.round(t/36e5);return Math.abs(i)<48?n.format(i,`hour`):n.format(Math.round(t/864e5),`day`)}function Cu(){let[e,t]=(0,C.useState)(0),n=(0,C.useRef)(null);return[(0,C.useCallback)(e=>{if(n.current?.disconnect(),n.current=null,!e){t(0);return}let r=new ResizeObserver(([n])=>{let r=n.borderBoxSize?.[0];t(r?r.blockSize:e.offsetHeight)});r.observe(e),n.current=r},[]),e]}function wu({attachments:e,contextKey:t}){let[n,r]=(0,C.useState)(!0),[i,a]=(0,C.useState)(!1),o=(0,C.useRef)(null),s=(0,C.useRef)(null),c=(0,C.useRef)(null),[l,u]=(0,C.useState)({heading:0,firstRow:0});return(0,C.useLayoutEffect)(()=>{r(!0),s.current&&(s.current.scrollTop=0)},[t]),(0,C.useLayoutEffect)(()=>{let t=o.current,n=s.current;if(!t||!n)return;let i=c.current?.offsetHeight??0,l=n.firstElementChild?.offsetHeight??0;u(e=>e.heading===i&&e.firstRow===l?e:{heading:i,firstRow:l});let d=t.clientHeight-i,f=e.length>1&&n.scrollHeight>d+1;a(f),f||r(!0)},[e,t]),e.length===0?null:(0,B.jsxs)(`section`,{ref:o,className:`message-attachment-bar${n?``:` message-attachment-bar--collapsed`}`,style:{"--attachment-heading-height":`${l.heading}px`,"--attachment-first-row-height":`${l.firstRow}px`},"aria-label":`Attachments`,tabIndex:-1,children:[(0,B.jsxs)(`div`,{ref:c,className:`message-attachment-bar__heading`,children:[(0,B.jsxs)(`h3`,{children:[`Attachments `,(0,B.jsxs)(`span`,{"aria-hidden":`true`,children:[`(`,e.length,`)`]})]}),(0,B.jsxs)(`button`,{className:`message-attachment-bar__toggle`,style:i?void 0:{display:`none`},type:`button`,"aria-expanded":n,"aria-label":`${n?`Collapse`:`Expand`} attachment list`,onClick:()=>r(e=>!e),children:[n?(0,B.jsx)(ne,{size:14,strokeWidth:1.75,"aria-hidden":`true`}):(0,B.jsx)(A,{size:14,strokeWidth:1.75,"aria-hidden":`true`}),n?`Collapse`:`Expand`]})]}),(0,B.jsx)(`ul`,{ref:s,className:`message-attachment-bar__list`,children:e.map((e,t)=>{let r=!n&&t>0;return(0,B.jsxs)(`li`,{className:`message-attachment-row${r?` message-attachment-row--collapsed`:``}`,inert:r,"aria-hidden":r||void 0,children:[(0,B.jsx)(ve,{size:15,strokeWidth:1.75,className:`message-attachment-row__icon`,"aria-hidden":`true`}),(0,B.jsxs)(`div`,{className:`message-attachment-row__description`,children:[(0,B.jsx)(`span`,{className:`message-attachment-row__name`,title:e.name,children:e.name}),(0,B.jsx)(`span`,{className:`message-attachment-row__metadata`,children:`${e.mime_type} · ${Zr(e.size)}`})]}),(0,B.jsx)(`div`,{className:`message-attachment-row__actions`,children:(0,B.jsx)(Vr,{title:`Download ${e.name}`,"aria-label":`Download ${e.name}`,children:(0,B.jsx)(oe,{size:16,strokeWidth:1.75})})})]},`${e.name}-${t}`)})})]})}function Tu({maximized:e,onToggleMaximized:t}){let n=z(e=>e.open),r=z(e=>e.open.id==null?null:e.messages.get(e.open.id)??null),i=z(e=>e.folders),a=Cr(e=>e.theme),o=os(`(max-width: 639px)`),s=(0,C.useRef)(null),[c,l]=Cu(),[u,d]=Cu(),[f,p]=Cu(),m=(0,C.useRef)(null),h=(0,C.useRef)(null),g=(0,C.useRef)(null),_=(0,C.useRef)(null),v=(0,C.useRef)(null),[y,b]=(0,C.useState)(bu),[x,S]=(0,C.useState)(!1),[w,T]=(0,C.useState)(!1),[E,D]=(0,C.useState)(null),O=(0,C.useRef)(null),k=(0,C.useId)(),te=(0,C.useRef)(null);(0,C.useEffect)(()=>{S(!1),T(!1),D(null),te.current&&(te.current.scrollTop=0)},[r?.id??null]),(0,C.useEffect)(()=>{if(!r||r.is_draft!==1)return;br.getState().openDraft(r);let e=z.getState();e.selectMessage(null),e.clearSelection()},[r]);let ne=r?An(r):null,re=a,ie=re===`dark`&&x?`light`:re,oe=bs[ie].background,se=(0,C.useMemo)(()=>!ne?.text||ne.html?``:ns.sanitize(vu(ne.text),{ALLOWED_URI_REGEXP:ls,ADD_ATTR:[`target`]}),[ne]),j=(0,C.useMemo)(()=>{if(!ne?.html)return``;let e=_s(ne.html,null);return Ss(ie===`dark`?uc(e):e,{colorScheme:ie})},[ne,ie]),ce=(0,C.useCallback)(()=>{_.current=null,v.current?.(),v.current=null},[]);(0,C.useLayoutEffect)(()=>{ce(),b(bu)},[j,ce]),(0,C.useEffect)(()=>ce,[ce]);let M=(0,C.useCallback)(()=>{ce();let e=g.current,t=e?.contentDocument;if(!e||!t?.body)return;t.querySelectorAll(`a[href]`).forEach(e=>{e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`)});let n=!0,r=!1,i=t.documentElement,a=t.body,o=()=>{if(!n)return;let e=h.current?.clientWidth??0;if(e<=0)return;i.style.zoom=``;let r=Math.max(i.scrollWidth,a.scrollWidth,1),o=t.defaultView,s=o?.getComputedStyle(a),c=o?.getComputedStyle(i),l=[s?.marginBottom,c?.paddingBottom,c?.borderBottomWidth,c?.marginBottom].reduce((e,t)=>e+Math.max(0,Number.parseFloat(t??``)||0),0),u=Math.max(0,a.getBoundingClientRect().top+(o?.scrollY??0)),d=Math.max(u+Math.max(a.offsetHeight,a.scrollHeight)+l,bu),f=Math.max(r,yu),p=f>e?e/f:1;i.style.zoom=p===1?``:String(p),b(Math.max(bu,Math.ceil(d*p)))};_.current=o;let s=()=>{r||(r=!0,requestAnimationFrame(()=>{r=!1,o()}))};o();let c=[],l=requestAnimationFrame(o);c.push(()=>cancelAnimationFrame(l));for(let e of[150,600]){let t=window.setTimeout(o,e);c.push(()=>clearTimeout(t))}t.fonts?.ready.then(o).catch(()=>{});let u=null;h.current&&(u=new ResizeObserver(s),u.observe(h.current)),v.current=()=>{n=!1,u?.disconnect();for(let e of c)e()}},[ce]),le=z.getState,ue=br.getState,de=an({folders:i},typeof n.viewId==`number`?n.viewId:r?.folder_id??null),fe=de?.role===`junk`,pe=de?.role===`archive`,me=r?.scheduled_undo_status===`pending`,he=(0,C.useMemo)(()=>r?Vt(r.keywords_json,Ft):[],[r]),ge=he.length===0?`Tag`:`Tags: ${he.map(e=>e.name).join(`, `)}`,_e=(0,C.useMemo)(()=>r?[r]:[],[r]);function N(n){!e||n.key!==`Escape`||n.defaultPrevented||E||s.current?.querySelector(`[role="dialog"], details[open]`)||(n.preventDefault(),t())}let ve=(0,C.useCallback)(e=>{s.current=e,c(e)},[c]),ye={"--message-view-height":l>0?`${l}px`:void 0,"--message-toolbar-height":`${d}px`,"--message-banner-height":`${p}px`,"--message-attachment-bar-height":`0px`};if(!r)return(0,B.jsx)(`section`,{ref:ve,className:`message-view`,style:ye,"aria-label":`Message detail`,tabIndex:-1,children:(0,B.jsx)(`div`,{className:`message-view__empty`,children:(0,B.jsx)(`p`,{children:`Select a message to read it.`})})});let be=!o||w,xe=be?r.from_text||`(no sender)`:pn(r.from_text),Se=tr(r.cc),F=[r.id],Ce=w?`Hide message details`:`Show message details`;return(0,B.jsx)(`section`,{ref:ve,className:`message-view`,style:ye,"aria-label":`Message detail`,tabIndex:-1,onKeyDown:N,children:(0,B.jsxs)(`article`,{className:`message-view__article`,children:[(0,B.jsxs)(`header`,{ref:u,className:`message-view__header`,children:[(0,B.jsx)(Vr,{className:`message-view__action message-view__action--back`,title:`Back`,"aria-label":`Back`,onClick:()=>{le().selectMessage(null),le().clearSelection()},children:(0,B.jsx)(ee,{className:`message-view__toolbar-icon`,size:18,strokeWidth:1.65})}),fe?(0,B.jsx)(`button`,{className:`message-view__action message-view__action--whitelist`,type:`button`,title:`Whitelist sender and move to Inbox`,"aria-label":`Not junk — whitelist sender and move to Inbox`,onClick:()=>le().notJunk(F),children:(0,B.jsx)(`span`,{className:`message-view__whitelist-label`,children:`Not junk`})}):null,me?null:(0,B.jsxs)(B.Fragment,{children:[pe?null:(0,B.jsx)(Vr,{className:`message-view__action`,title:`Archive (A)`,"aria-label":`Archive`,onClick:()=>le().archiveMessages(F),children:(0,B.jsx)(zr,{className:`message-view__toolbar-icon message-view__toolbar-icon--folder`,svg:oi})}),fe?null:(0,B.jsx)(Vr,{className:`message-view__action`,title:`Junk`,"aria-label":`Mark as junk`,onClick:()=>le().junkMessages(F),children:(0,B.jsx)(zr,{className:`message-view__toolbar-icon message-view__toolbar-icon--folder`,svg:pi})}),(0,B.jsx)(Vr,{className:`message-view__action`,danger:!0,title:`Delete (Delete)`,"aria-label":`Delete`,onClick:()=>le().destroyMessages(F),children:(0,B.jsx)(Ie,{className:`message-view__toolbar-icon`,size:18,strokeWidth:1.65})}),(0,B.jsx)(Vr,{className:`message-view__action`,title:`Reply (R)`,"aria-label":`Reply`,onClick:()=>ue().prepareReply(r,!1),children:(0,B.jsx)(zr,{className:`message-view__toolbar-icon message-view__toolbar-icon--shape`,svg:is})}),(0,B.jsx)(Vr,{className:`message-view__action`,title:`Reply All (Shift+R)`,"aria-label":`Reply All`,onClick:()=>ue().prepareReply(r,!0),children:(0,B.jsx)(zr,{className:`message-view__toolbar-icon message-view__toolbar-icon--shape`,svg:as})}),(0,B.jsx)(Vr,{className:`message-view__action`,title:`Forward (F)`,"aria-label":`Forward`,onClick:()=>ue().prepareForward(r),children:(0,B.jsx)(zr,{className:`message-view__toolbar-icon message-view__toolbar-icon--shape`,svg:rs})}),(0,B.jsx)(Vr,{ref:O,className:`message-view__action message-view__action--tags`,title:`${ge} (T)`,"aria-label":ge,"aria-haspopup":`dialog`,"aria-expanded":E!==null,"data-tag-picker-trigger":!0,onClick:()=>{if(E){D(null);return}let e=O.current?.getBoundingClientRect();e&&D({top:e.top,left:e.left,width:e.width,height:e.height})},children:(0,B.jsx)(la,{tags:he})})]}),(0,B.jsx)(_a,{anchor:E,targets:_e,definitions:Ft,trigger:O.current,label:`Tags`,onClose:()=>D(null),onToggle:(e,t)=>le().setTagsMany(F,t?{add:[e]}:{remove:[e]}),onClear:()=>le().clearTagsMany(F),onManage:()=>D(null)}),(0,B.jsxs)(`div`,{className:`message-view__view-actions`,children:[re===`dark`&&j?(0,B.jsx)(Vr,{className:`message-view__action message-view__action--view-mode`,"aria-pressed":x,title:x?`View this message in dark mode`:`View this message in light mode`,"aria-label":x?`View this message in dark mode`:`View this message in light mode`,onClick:()=>S(e=>!e),children:x?(0,B.jsx)(P,{size:16,strokeWidth:1.75}):(0,B.jsx)(Ae,{size:16,strokeWidth:1.75})}):null,(0,B.jsx)(Ur,{className:`message-view__action message-view__action--maximize`,maximized:e,surface:`message view`,onToggle:t})]})]}),me?(0,B.jsxs)(`div`,{ref:f,className:`message-view__scheduled`,role:`status`,children:[(0,B.jsx)(ae,{size:16,strokeWidth:1.75,"aria-hidden":`true`}),(0,B.jsx)(`span`,{className:`message-view__scheduled-text`,children:`Scheduled to send ${xu(r.sent_at)} (${Su(r.sent_at)}).`}),(0,B.jsx)(`button`,{className:`message-view__scheduled-cancel`,type:`button`,onClick:()=>le().cancelScheduledSend(r.id),children:`Cancel send`})]}):null,(0,B.jsxs)(`section`,{className:`message-view__details${w?` message-view__details--expanded`:``}`,"aria-label":`Message header`,children:[(0,B.jsx)(Vr,{className:`message-view__details-toggle`,style:o?void 0:{display:`none`},"aria-expanded":w,"aria-controls":k,"aria-label":Ce,title:Ce,onClick:()=>{T(e=>!e),te.current&&(te.current.scrollTop=0)},children:(0,B.jsx)(A,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsxs)(`dl`,{id:k,ref:te,className:`message-view__metadata`,tabIndex:o?0:void 0,"aria-label":o?`Message details`:void 0,children:[(0,B.jsxs)(`div`,{className:`message-view__metadata-row`,children:[(0,B.jsx)(`dt`,{children:`From`}),(0,B.jsx)(`dd`,{children:xe})]}),r.to_text?(0,B.jsxs)(`div`,{className:`message-view__metadata-row`,style:be?void 0:{display:`none`},children:[(0,B.jsx)(`dt`,{children:`To`}),(0,B.jsx)(`dd`,{children:r.to_text})]}):null,Se?(0,B.jsxs)(`div`,{className:`message-view__metadata-row`,style:be?void 0:{display:`none`},children:[(0,B.jsx)(`dt`,{children:`Cc`}),(0,B.jsx)(`dd`,{children:Se})]}):null,(0,B.jsxs)(`div`,{className:`message-view__metadata-row message-view__title`,children:[(0,B.jsx)(`dt`,{children:`Subject`}),(0,B.jsx)(`dd`,{children:(0,B.jsx)(`h2`,{children:r.subject||`(no subject)`})})]}),(0,B.jsxs)(`div`,{className:`message-view__metadata-row`,style:be?void 0:{display:`none`},children:[(0,B.jsx)(`dt`,{children:me?`Send at`:`Date`}),(0,B.jsx)(`dd`,{className:`message-view__date`,children:xu(me?r.sent_at:r.received_at)})]}),he.length>0?(0,B.jsxs)(`div`,{className:`message-view__metadata-row message-view__tags-row`,style:be?void 0:{display:`none`},children:[(0,B.jsx)(`dt`,{children:`Tags`}),(0,B.jsx)(`dd`,{className:`message-view__tags`,"data-message-tags":!0,children:he.map(e=>(0,B.jsx)(ua,{tag:e,removable:!me,onRemove:()=>le().setTagsMany(F,{remove:[e.keyword]})},e.keyword))})]}):null]})]}),(0,B.jsx)(`div`,{ref:m,className:`message-view__body`,tabIndex:0,"aria-label":`Message body`,children:j?(0,B.jsx)(`div`,{ref:h,className:`message-view__html-shell`,children:(0,B.jsx)(`iframe`,{ref:g,className:`message-view__html-frame`,srcDoc:j,sandbox:Cs,style:{height:`${y}px`,backgroundColor:oe},title:`Message body`,onLoad:M})}):se?(0,B.jsx)(`div`,{className:`message-view__text`,dangerouslySetInnerHTML:{__html:se}}):(0,B.jsx)(`p`,{className:`message-view__placeholder`,children:`This message has no content.`})}),(0,B.jsx)(wu,{attachments:ne?.attachments??[],contextKey:r.id})]})})}function Eu(e){return{name:e.name,email:e.email,organization:e.organization??null,source:`contact`,last_sent_at:e.last_sent_at,send_count:e.send_count}}function Du(e,t){if(e.email.toLowerCase().startsWith(t))return!0;for(let n of e.name.toLowerCase().split(/\s+/))if(n.startsWith(t))return!0;return!!e.organization?.toLowerCase().split(/\s+/).some(e=>e.startsWith(t))}async function Ou(e,t,n){let r=e.trim().toLowerCase(),i=new Set(n.map(e=>jn(e))),{contacts:a}=z.getState();return a.filter(e=>!i.has(jn(e.email))&&Du(e,r)).sort((e,t)=>t.send_count-e.send_count||t.last_sent_at-e.last_sent_at||e.name.localeCompare(t.name)).slice(0,t).map(Eu)}async function ku(){let{contacts:e}=z.getState();return[...e].sort((e,t)=>e.name.localeCompare(t.name)).map(Eu)}var Au=10,ju=120;function Mu(e){return`invalid`in e?e.text:er(e)}function Nu(e){return`invalid`in e?e.text:e.name?.trim()||e.email}function Pu(e){if(`invalid`in e)return`${e.text} — not a valid address`;let t=e.name?.trim();return t?`${t} <${e.email}>`:e.email}function Fu(e){let t=[],n=Number(e.last_sent_at);if(Number.isFinite(n)&&n>0){let e=Math.floor((dt-n)/864e5);e<1?t.push(`today`):e<7?t.push(`${e}d ago`):e<30?t.push(`${Math.floor(e/7)}w ago`):e<365?t.push(`${Math.floor(e/30)}mo ago`):t.push(`${Math.floor(e/365)}y ago`)}let r=Number(e.send_count);return Number.isFinite(r)&&r>1&&t.push(`${r} sends`),t.length>0?t.join(` · `):null}function Iu({text:e,typed:t}){let n=t.trim().toLowerCase(),r=n?e.toLowerCase().indexOf(n):-1;return r<0?(0,B.jsx)(B.Fragment,{children:e}):(0,B.jsxs)(B.Fragment,{children:[e.slice(0,r),(0,B.jsx)(`span`,{className:`ac-match`,children:e.slice(r,r+n.length)}),e.slice(r+n.length)]})}function Lu({label:e,inputId:t,entries:n,taken:r,query:i,browseAll:a,onEntriesChange:o}){let[s,c]=(0,C.useState)(``),[l,u]=(0,C.useState)([]),[d,f]=(0,C.useState)(-1),[p,m]=(0,C.useState)(!1),[h,g]=(0,C.useState)(!1),[_,v]=(0,C.useState)(null),[y,b]=(0,C.useState)(null),x=(0,C.useRef)(null),S=(0,C.useRef)(null),w=(0,C.useRef)(null),T=(0,C.useRef)(0),E=(0,C.useRef)(s);E.current=s;let D=(0,C.useRef)(n);D.current=n;let ee=(0,C.useRef)(null),O=(0,C.useMemo)(()=>new Set([...n.filter(e=>!(`invalid`in e)).map(e=>jn(e.email)),...r.map(e=>jn(e))]),[n,r]),k=(0,C.useRef)(O);k.current=O;let te=p&&l.length>0,A=te||_!==null,ne=`${t}-listbox`,re=e=>`${t}-option-${e}`,ie=h?l.length===1?`1 contact`:`${l.length} contacts`:l.length===1?`1 suggestion`:`${l.length} suggestions`,ae=te?h?`Showing ${l.length} contacts`:l.length===1?`1 suggestion available`:`${l.length} suggestions available`:y??``;(0,C.useEffect)(()=>()=>{w.current&&clearTimeout(w.current)},[]),(0,C.useEffect)(()=>{if(ee.current==null)return;let e=ee.current;ee.current=null;let t=S.current?.querySelectorAll(`.pill__remove`),n=t?.[Math.min(e,(t?.length??0)-1)];n?n.focus():x.current?.focus()},[n]);let oe=(0,C.useCallback)(()=>{w.current&&clearTimeout(w.current),w.current=null,T.current+=1,m(!1),f(-1),u([]),g(!1),b(null),v(null)},[]),se=e=>e.filter(e=>!k.current.has(jn(e.email))),j=(0,C.useCallback)(async e=>{let t=T.current+=1,n=[],r=!0;try{n=await i(e,Au,[...k.current])}catch{r=!1}if(t!==T.current)return;let a=se(n).slice(0,Au);u(a),f(a.length>0?0:-1),g(!1),v(a.length===0&&r?e:null),m(a.length>0),b(a.length>0?null:r?`No suggestions for ${e}`:`Suggestions are unavailable`)},[i]),ce=(0,C.useCallback)(async()=>{w.current&&clearTimeout(w.current);let e=T.current+=1,t=[],n=!0;try{t=await a()}catch{n=!1}if(e!==T.current)return!1;let r=se(t);return u(r),f(r.length>0?0:-1),g(!0),v(null),b(r.length>0?null:n?`No contacts to show`:`Contacts are unavailable`),m(r.length>0),!0},[a]),M=(0,C.useCallback)(e=>{w.current&&clearTimeout(w.current);let t=e.trim();if(t.length<1){oe();return}w.current=setTimeout(()=>{w.current=null,j(t)},ju)},[oe,j]),le=(0,C.useCallback)((e=E.current)=>{let t=e.trim();if(!t)return!1;let n=D.current,r=Qn(t);if(r.length===0)return c(``),/^[\s,;]+$/.test(t)?!1:(oe(),o([...n,{text:t,invalid:!0}]),!0);let i=[...n];for(let e of r){if(`rejected`in e){i.push({text:e.rejected,invalid:!0});continue}let t=jn(e.address.email);k.current.has(t)||i.some(e=>!(`invalid`in e)&&jn(e.email)===t)||i.push(e.address)}return c(``),oe(),o(i),!0},[oe,o]);function ue(e){let t=e.name?.trim();le(er({...t?{name:t}:{},email:e.email})),x.current?.focus()}function de(e){let t=n[e];if(!t)return;let r=Mu(t),i=s.trim(),a=i?`${r}, ${i}`:r;c(a),o(n.filter((t,n)=>n!==e)),x.current?.focus(),M(a)}function fe(e){ee.current=e,o(n.filter((t,n)=>n!==e))}function pe(e){requestAnimationFrame(()=>document.getElementById(re(e))?.scrollIntoView({block:`nearest`}))}function me(e){e!==E.current&&(E.current=e,c(e),M(e))}function he(e){if(!Ar(e.nativeEvent))switch(e.key){case`ArrowDown`:case`ArrowUp`:{if(l.length===0){if(e.key!==`ArrowDown`)return;e.preventDefault();let t=s.trim();t.length>=1?j(t):ce().then(e=>{e&&x.current?.focus()});return}e.preventDefault(),m(!0);let t=e.key===`ArrowDown`?1:-1,n=l.length,r=d<0?t===1?0:n-1:(d+t+n)%n;f(r),pe(r);return}case`Enter`:{if(e.ctrlKey||e.metaKey)return;e.preventDefault();let t=l[d]??l[0];t?ue(t):le();return}case`Tab`:{let e=l[d]??l[0];e?ue(e):le();return}case`,`:case`;`:{let t=x.current?.selectionStart;if(nr(typeof t==`number`?s.slice(0,t):s))return;e.preventDefault(),le();return}case`Escape`:A&&(e.stopPropagation(),e.preventDefault(),oe());return;case`Backspace`:if(s.length>0||n.length===0)return;e.preventDefault(),de(n.length-1);return;default:}}function ge(e){let t=e.clipboardData?.getData(`text/plain`);t&&(e.preventDefault(),le((s.trim()?`${s.trim()}, ${t}`:t).replace(/[\r\n]+/g,`, `)))}return(0,B.jsxs)(`div`,{className:`recipient-input${A?` recipient-input--focused`:``}`,children:[(0,B.jsxs)(`div`,{ref:S,className:`recipient-input__field`,onClick:()=>x.current?.focus(),children:[n.length>0?(0,B.jsx)(`ul`,{className:`pills`,role:`list`,children:n.map((e,t)=>{let n=`invalid`in e;return(0,B.jsxs)(`li`,{className:`pill${n?` pill--invalid`:``}`,role:`listitem`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`pill__label`,"aria-invalid":n?`true`:void 0,"aria-label":`${Pu(e)}. Activate to edit.`,title:Pu(e),onClick:e=>{e.stopPropagation(),de(t)},children:[n?(0,B.jsx)(`span`,{className:`pill__warning`,"aria-hidden":`true`,children:`⚠`}):(0,B.jsx)(`span`,{className:`pill__avatar`,"aria-hidden":`true`,style:hn(e.email),children:mn(e.name?.trim()||e.email)}),(0,B.jsx)(`span`,{className:`pill__text`,children:Nu(e)})]}),(0,B.jsx)(`button`,{type:`button`,className:`pill__remove`,"aria-label":`Remove ${Pu(e)}`,onClick:e=>{e.stopPropagation(),fe(t)},children:`×`})]},`${Mu(e)}-${t}`)})}):null,(0,B.jsx)(`input`,{id:t,ref:x,value:s,type:`text`,className:`recipient-input__text`,role:`combobox`,autoComplete:`off`,"aria-autocomplete":`list`,"aria-expanded":A,"aria-controls":ne,"aria-activedescendant":d>=0?re(d):void 0,onInput:e=>me(e.currentTarget.value),onChange:e=>me(e.target.value),onKeyDown:he,onBlur:()=>{le(),oe()},onPaste:ge})]}),(0,B.jsxs)(`div`,{className:`autocomplete`,style:A?void 0:{display:`none`},children:[(0,B.jsx)(`ul`,{id:ne,className:`autocomplete__options`,role:`listbox`,"aria-label":`${e} suggestions`,children:l.map((e,t)=>{let n=e.name?.trim(),r=Fu(e);return(0,B.jsxs)(`li`,{id:re(t),className:`autocomplete__option${t===d?` autocomplete__option--active`:``}`,role:`option`,"aria-selected":t===d,"aria-label":n?`${n} <${e.email}>`:e.email,onMouseDown:e=>e.preventDefault(),onClick:()=>ue(e),children:[(0,B.jsx)(`span`,{className:`ac-avatar`,"aria-hidden":`true`,style:hn(e.email),children:mn(n||e.email)}),(0,B.jsxs)(`span`,{className:`ac-lines`,children:[n?(0,B.jsx)(`span`,{className:`ac-name`,children:(0,B.jsx)(Iu,{text:n,typed:s})}):null,(0,B.jsx)(`span`,{className:`ac-email${n?``:` ac-email--primary`}`,children:(0,B.jsx)(Iu,{text:e.email,typed:s})})]}),r?(0,B.jsx)(`span`,{className:`ac-meta`,"aria-hidden":`true`,children:r}):null]},`${e.email}-${e.source}`)})}),_===null?null:(0,B.jsxs)(`div`,{className:`autocomplete__empty`,"aria-hidden":`true`,children:[(0,B.jsxs)(`span`,{className:`autocomplete__empty-text`,children:[`No matches for “`,_,`”`]}),(0,B.jsxs)(`span`,{className:`ac-key-hint`,children:[(0,B.jsx)(`kbd`,{children:`↵`}),` add it as typed`]})]}),h?null:(0,B.jsx)(`p`,{className:`autocomplete__browse`,children:(0,B.jsx)(`button`,{type:`button`,onMouseDown:e=>e.preventDefault(),onClick:()=>{ce().then(e=>{e&&x.current?.focus()})},children:`Browse all contacts`})}),l.length>0?(0,B.jsxs)(`div`,{className:`autocomplete__keys`,"aria-hidden":`true`,children:[(0,B.jsxs)(`span`,{className:`ac-key-hint`,children:[(0,B.jsx)(`kbd`,{children:`↑↓`}),` navigate`]}),(0,B.jsxs)(`span`,{className:`ac-key-hint`,children:[(0,B.jsx)(`kbd`,{children:`↵`}),` add`]}),(0,B.jsx)(`span`,{className:`autocomplete__count`,children:ie})]}):null]}),(0,B.jsx)(`p`,{id:`${t}-status`,className:`sr-only`,role:`status`,children:ae})]})}var Ru=()=>!0,zu=class{constructor(e,t,n){this.root=e,this.currentNode=e,this.nodeType=t,this.filter=n||Ru}isAcceptableNode(e){let t=e.nodeType;return!!((t===Node.ELEMENT_NODE?1:t===Node.TEXT_NODE?4:0)&this.nodeType)&&this.filter(e)}nextNode(){let e=this.root,t=this.currentNode,n;for(;;){for(n=t.firstChild;!n&&t&&t!==e;)n=t.nextSibling,n||(t=t.parentNode);if(!n)return null;if(this.isAcceptableNode(n))return this.currentNode=n,n;t=n}}previousNode(){let e=this.root,t=this.currentNode,n;for(;;){if(t===e)return null;if(n=t.previousSibling,n)for(;t=n.lastChild;)n=t;else n=t.parentNode;if(!n)return null;if(this.isAcceptableNode(n))return this.currentNode=n,n;t=n}}previousPONode(){let e=this.root,t=this.currentNode,n;for(;;){for(n=t.lastChild;!n&&t&&t!==e;)n=t.previousSibling,n||(t=t.parentNode);if(!n)return null;if(this.isAcceptableNode(n))return this.currentNode=n,n;t=n}}},Bu=navigator.userAgent,Vu=/Mac OS X/.test(Bu),Hu=/Windows NT/.test(Bu),Uu=/iP(?:ad|hone|od)/.test(Bu)||Vu&&!!navigator.maxTouchPoints;/Android/.test(Bu);var Wu=/Gecko\//.test(Bu),Gu=/Edge\//.test(Bu),Ku=!Gu&&/WebKit\//.test(Bu),qu=Vu||Uu?`Meta-`:`Ctrl-`,Ju=Ku,Yu=`onbeforeinput`in document&&`inputType`in new InputEvent(`input`),Xu=/[^ \t\r\n\u200B]/,Zu=/^(?:#text|A(?:BBR|CRONYM)?|B(?:R|D[IO])?|C(?:ITE|ODE)|D(?:ATA|EL|FN)|EM|FONT|HR|I(?:FRAME|MG|NPUT|NS)?|KBD|Q|R(?:P|T|UBY)|S(?:AMP|MALL|PAN|TR(?:IKE|ONG)|U[BP])?|TIME|U|VAR|WBR)$/,Qu=new Set([`BR`,`HR`,`IFRAME`,`IMG`,`INPUT`]),Y=0,X=1,$u=2,ed=3,td=new WeakMap,nd=()=>{td=new WeakMap},rd=e=>Qu.has(e.nodeName),id=e=>{switch(e.nodeType){case 3:return X;case 1:case 11:if(td.has(e))return td.get(e);break;default:return Y}let t;return t=Array.from(e.childNodes).every(Z)?Zu.test(e.nodeName)?X:$u:ed,td.set(e,t),t},Z=e=>id(e)===X,ad=e=>id(e)===$u,od=e=>id(e)===ed,Q=(e,t,n)=>{let r=document.createElement(e);if(t instanceof Array&&(n=t,t=null),t)for(let e in t){let n=t[e];n!==void 0&&r.setAttribute(e,n)}return n&&n.forEach(e=>r.appendChild(e)),r},sd=(e,t)=>rd(e)||e.nodeType!==t.nodeType||e.nodeName!==t.nodeName?!1:e instanceof HTMLElement&&t instanceof HTMLElement?e.nodeName!==`A`&&e.className===t.className&&e.style.cssText===t.style.cssText:!0,cd=(e,t,n)=>{if(e.nodeName!==t)return!1;for(let t in n)if(!(`getAttribute`in e)||e.getAttribute(t)!==n[t])return!1;return!0},ld=(e,t,n,r)=>{for(;e&&e!==t;){if(cd(e,n,r))return e;e=e.parentNode}return null},ud=(e,t)=>{let n=e.childNodes;for(;t&&e instanceof Element;)e=n[t-1],n=e.childNodes,t=n.length;return e},dd=(e,t)=>{let n=e;if(n instanceof Element){let e=n.childNodes;if(te instanceof Element||e instanceof DocumentFragment?e.childNodes.length:e instanceof CharacterData?e.length:0,pd=e=>{let t=document.createDocumentFragment(),n=e.firstChild;for(;n;)t.appendChild(n),n=e.firstChild;return t},md=e=>{let t=e.parentNode;return t&&t.removeChild(e),e},hd=(e,t)=>{let n=e.parentNode;n&&n.replaceChild(t,e)},gd=e=>e instanceof Element?e.nodeName===`BR`:Xu.test(e.data),_d=(e,t)=>{let n=e.parentNode;for(;Z(n);)n=n.parentNode;let r=new zu(n,5,gd);return r.currentNode=e,!!r.nextNode()||t&&!r.previousNode()},vd=(e,t)=>{let n=new zu(e,4),r,i;for(;r=n.nextNode();)for(;(i=r.data.indexOf(`​`))>-1&&(!t||r.parentNode!==t);)if(r.length===1){let e=r,t=e.parentNode;for(;t&&(t.removeChild(e),n.currentNode=t,!(!Z(t)||fd(t)));)e=t,t=e.parentNode;break}else r.deleteData(i,1)},yd=0,bd=1,xd=2,Sd=3,Cd=(e,t,n)=>{let r=document.createRange();if(r.selectNode(t),n){let t=e.compareBoundaryPoints(Sd,r)>-1,n=e.compareBoundaryPoints(bd,r)<1;return!t&&!n}else{let t=e.compareBoundaryPoints(yd,r)<1,n=e.compareBoundaryPoints(xd,r)>-1;return t&&n}},wd=e=>{let{startContainer:t,startOffset:n,endContainer:r,endOffset:i}=e;for(;!(t instanceof Text);){let e=t.childNodes[n];if(!e||rd(e)){if(n&&(e=t.childNodes[n-1],e instanceof Text)){let r=e,i;for(;!r.length&&(i=r.previousSibling)&&i instanceof Text;)r.remove(),r=i;t=r,n=r.data.length}break}t=e,n=0}if(i)for(;!(r instanceof Text);){let e=r.childNodes[i-1];if(!e||rd(e)){if(e&&e.nodeName===`BR`&&!_d(e,!1)){--i;continue}break}r=e,i=fd(r)}else for(;!(r instanceof Text);){let e=r.firstChild;if(!e||rd(e))break;r=e}e.setStart(t,n),e.setEnd(r,i)},Td=(e,t,n,r)=>{let i=e.startContainer,a=e.startOffset,o=e.endContainer,s=e.endOffset,c;for(t||=e.commonAncestorContainer,n||=t;!a&&i!==t&&i!==r;)c=i.parentNode,a=Array.from(c.childNodes).indexOf(i),i=c;for(;!(o===n||o===r||(o.nodeType!==3&&o.childNodes[s]&&o.childNodes[s].nodeName===`BR`&&!_d(o.childNodes[s],!1)&&(s+=1),s!==fd(o)));)c=o.parentNode,s=Array.from(c.childNodes).indexOf(o)+1,o=c;e.setStart(i,a),e.setEnd(o,s)},Ed=(e,t,n)=>{let r=ld(e.endContainer,n,t);if(r&&=r.parentNode){let t=e.cloneRange();Td(t,r,r,n),t.endContainer===r&&(e.setStart(t.endContainer,t.endOffset),e.setEnd(t.endContainer,t.endOffset))}return e},Dd=e=>{let t=null;if(e instanceof Text)return e;if(Z(e)){let n=e.firstChild;if(Ju)for(;n&&n instanceof Text&&!n.data;)e.removeChild(n),n=e.firstChild;n||(t=Ju?document.createTextNode(`​`):document.createTextNode(``))}else if((e instanceof Element||e instanceof DocumentFragment)&&!e.querySelector(`BR`)&&!Xu.test(e.textContent||``)){t=Q(`BR`);let n=e,r;for(;(r=n.lastElementChild)&&!Z(r);)n=r;e=n,e instanceof HTMLElement&&e.contentEditable===`true`&&(e=Q(`DIV`),n.appendChild(e))}if(t)try{e.appendChild(t)}catch{}return e},Od=(e,t)=>{let n=null;return/^(?:TABLE|TBODY|TR|TH|TD|P)/.test(e.nodeName)||(Array.from(e.childNodes).forEach(r=>{let i=r.nodeName===`BR`;!i&&Z(r)?(n||=Q(`DIV`),n.appendChild(r)):(i||n)&&(n||=Q(`DIV`),Dd(n),i?e.replaceChild(n,r):e.insertBefore(n,r),n=null),od(r)&&Od(r,t)}),n&&e.appendChild(Dd(n))),e},kd=(e,t,n,r)=>{if(!n.contains(e))throw Error(`split: stopNode does not contain node`);if(e instanceof Text&&e!==n){if(typeof t!=`number`)throw Error(`Offset must be a number to split text node!`);if(!e.parentNode)throw Error(`Cannot split text node with no parent!`);return kd(e.parentNode,e.splitText(t),n,r)}let i=typeof t==`number`?t{let n=e.childNodes,r=n.length,i=[];for(;r--;){let a=n[r],o=r?n[r-1]:null;if(o&&Z(a)&&sd(a,o))t.startContainer===a&&(t.startContainer=o,t.startOffset+=fd(o)),t.endContainer===a&&(t.endContainer=o,t.endOffset+=fd(o)),t.startContainer===e&&(t.startOffset>r?--t.startOffset:t.startOffset===r&&(t.startContainer=o,t.startOffset=fd(o))),t.endContainer===e&&(t.endOffset>r?--t.endOffset:t.endOffset===r&&(t.endContainer=o,t.endOffset=fd(o))),md(a),a instanceof Text?o.appendData(a.data):i.push(pd(a));else if(a instanceof Element){let e;for(;e=i.pop();)a.appendChild(e);Ad(a,t)}}},jd=(e,t)=>{let n=e instanceof Text?e.parentNode:e;if(n instanceof Element){let e={startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset};Ad(n,e),t.setStart(e.startContainer,e.startOffset),t.setEnd(e.endContainer,e.endOffset)}},Md=(e,t,n,r)=>{let i=t,a,o;for(;(a=i.parentNode)&&a!==r&&a instanceof Element&&a.childNodes.length===1;)i=a;md(i),o=e.childNodes.length;let s=e.lastChild;s&&s.nodeName===`BR`&&(e.removeChild(s),--o),e.appendChild(pd(t)),n.setStart(e,o),n.collapse(!0),jd(e,n)},Nd=(e,t)=>{let n=e.previousSibling,r=e.firstChild,i=e.nodeName===`LI`;if(!(i&&(!r||!/^[OU]L$/.test(r.nodeName)))){if(n&&sd(n,e)){if(!od(n))if(i){let e=Q(`DIV`);e.appendChild(pd(n)),n.appendChild(e)}else return;md(e);let a=!od(e);n.appendChild(pd(e)),a&&Od(n,t),r&&Nd(r,t)}else if(i){let t=Q(`DIV`);e.insertBefore(t,r),Dd(t)}}},Pd={"font-weight":{regexp:/^bold|^700/i,replace(){return Q(`B`)}},"font-style":{regexp:/^italic/i,replace(){return Q(`I`)}},"font-family":{regexp:Xu,replace(e,t){let n=Q(`SPAN`,{class:e.fontFamily});return n.style.fontFamily=t,n}},"font-size":{regexp:Xu,replace(e,t){let n=Q(`SPAN`,{class:e.fontSize});return n.style.fontSize=t,n}},"text-decoration":{regexp:/^underline/i,replace(){return Q(`U`)}}},Fd=(e,t,n)=>{let r=e.style,i,a;for(let t in Pd){let o=Pd[t],s=r.getPropertyValue(t);if(s&&o.regexp.test(s)){let r=o.replace(n.classNames,s);if(r.nodeName===e.nodeName&&r.className===e.className)continue;a||=r,i&&i.appendChild(r),i=r,e.style.removeProperty(t)}}return a&&i&&(i.appendChild(pd(e)),e.style.cssText?e.appendChild(a):hd(e,a)),i||e},Id=e=>(t,n)=>{let r=Q(e),i=t.attributes;for(let e=0,t=i.length;e{let r=e,i=r.face,a=r.size,o=r.color,s=n.classNames,c,l,u,d,f;return i&&(c=Q(`SPAN`,{class:s.fontFamily}),c.style.fontFamily=i,f=c,d=c),a&&(l=Q(`SPAN`,{class:s.fontSize}),l.style.fontSize=Ld[a]+`px`,f||=l,d&&d.appendChild(l),d=l),o&&/^#?([\dA-F]{3}){1,2}$/i.test(o)&&(o.charAt(0)!==`#`&&(o=`#`+o),u=Q(`SPAN`,{class:s.color}),u.style.color=o,f||=u,d&&d.appendChild(u),d=u),(!f||!d)&&(f=d=Q(`SPAN`)),t.replaceChild(f,r),d.appendChild(pd(r)),d},TT:(e,t,n)=>{let r=Q(`SPAN`,{class:n.classNames.fontFamily,style:`font-family:menlo,consolas,"courier new",monospace`});return t.replaceChild(r,e),r.appendChild(pd(e)),r}},zd=/^(?:A(?:DDRESS|RTICLE|SIDE|UDIO)|BLOCKQUOTE|CAPTION|D(?:[DLT]|IV)|F(?:IGURE|IGCAPTION|OOTER)|H[1-6]|HEADER|L(?:ABEL|EGEND|I)|O(?:L|UTPUT)|P(?:RE)?|SECTION|T(?:ABLE|BODY|D|FOOT|H|HEAD|R)|COL(?:GROUP)?|UL)$/,Bd=/^(?:HEAD|META|STYLE)/,Vd=(e,t,n)=>{let r=e.childNodes,i=e;for(;Z(i);)i=i.parentNode;let a=new zu(i,5);for(let i=0,o=r.length;i{let t=e.childNodes,n=t.length;for(;n--;){let r=t[n];r instanceof Element&&!rd(r)?(Hd(r),Z(r)&&!r.firstChild&&e.removeChild(r)):r instanceof Text&&!r.data&&e.removeChild(r)}},Ud=(e,t,n)=>{let r=e.querySelectorAll(`BR`),i=[],a=r.length;for(let e=0;ee.split(`&`).join(`&`).split(`<`).join(`<`).split(`>`).join(`>`).split(`"`).join(`"`),Gd=(e,t)=>{let n=new zu(t,1,ad);return n.currentNode=e,n},Kd=(e,t)=>{let n=Gd(e,t).previousNode();return n===t?null:n},qd=(e,t)=>{let n=Gd(e,t).nextNode();return n===t?null:n},Jd=e=>!e.textContent&&!e.querySelector(`IMG`),Yd=(e,t)=>{let n=e.startContainer,r;return r=Z(n)?Kd(n,t):n!==t&&n instanceof HTMLElement&&ad(n)?n:qd(ud(n,e.startOffset),t),r&&Cd(e,r,!0)?r:null},Xd=(e,t)=>{let n=e.endContainer,r;if(Z(n))r=Kd(n,t);else if(n!==t&&n instanceof HTMLElement&&ad(n))r=n;else{let i=dd(n,e.endOffset);if(!i||!t.contains(i)){i=t;let e;for(;e=i.lastChild;)i=e}r=Kd(i,t)}return r&&Cd(e,r,!0)?r:null},Zd=e=>e instanceof Text?Xu.test(e.data):e.nodeName===`IMG`,Qd=(e,t)=>{let n=e.startContainer,r=e.startOffset,i;if(n instanceof Text){let e=n.data;for(let t=r;t>0;--t)if(e.charAt(t-1)!==`​`)return!1;i=n}else if(i=dd(n,r),i&&!t.contains(i)&&(i=null),!i&&(i=ud(n,r),i instanceof Text&&i.length))return!1;let a=Yd(e,t);if(!a)return!1;let o=new zu(a,5,Zd);return o.currentNode=i,!o.previousNode()},$d=(e,t)=>{let n=e.endContainer,r=e.endOffset,i;if(n instanceof Text){let e=n.data,t=e.length;for(let n=r;n{let n=Yd(e,t),r=Xd(e,t),i;n&&r&&(i=n.parentNode,e.setStart(i,Array.from(i.childNodes).indexOf(n)),i=r.parentNode,e.setEnd(i,Array.from(i.childNodes).indexOf(r)+1))};function tf(e,t,n,r){let i=document.createRange();return i.setStart(e,t),n&&typeof r==`number`?i.setEnd(n,r):i.setEnd(e,t),i}var nf=(e,t)=>{let{startContainer:n,startOffset:r,endContainer:i,endOffset:a}=e,o;if(n instanceof Text){let t=n.parentNode;if(o=t.childNodes,r===n.length)r=Array.from(o).indexOf(n)+1,e.collapsed&&(i=t,a=r);else{if(r){let e=n.splitText(r);i===n?(a-=r,i=e):i===t&&(a+=1),n=e}r=Array.from(o).indexOf(n)}n=t}else o=n.childNodes;let s=o.length;r===s?n.appendChild(t):n.insertBefore(t,o[r]),n===i&&(a+=o.length-s),e.setStart(n,r),e.setEnd(i,a)},rf=(e,t,n)=>{let r=document.createDocumentFragment();if(e.collapsed)return r;t||=e.commonAncestorContainer,t instanceof Text&&(t=t.parentNode);let i=e.startContainer,a=e.startOffset,o=kd(e.endContainer,e.endOffset,t,n),s=0,c=kd(i,a,t,n);for(;c&&c!==o;){let e=c.nextSibling;r.appendChild(c),c=e}return c=o&&o.previousSibling,c&&c instanceof Text&&o instanceof Text&&(s=c.length,c.appendData(o.data),md(o),o=c),e.setStart(i,a),o?e.setEnd(o,s):e.setEnd(t,t.childNodes.length),Dd(t),r},af=(e,t,n)=>{e.currentNode=n;let r;for(;r=e[t]();){if(r instanceof Text||rd(r))return r;if(!Z(r))return null}return null},of=(e,t)=>{let n=Yd(e,t),r=Xd(e,t),i=n!==r;n&&r&&(wd(e),Td(e,n,r,t));let a=rf(e,null,t);wd(e),i&&(r=Xd(e,t),n&&r&&n!==r&&Md(n,r,e,t)),n&&Dd(n);let o=t.firstChild;(!o||o.nodeName===`BR`)&&(Dd(t),t.firstChild&&e.selectNodeContents(t.firstChild)),e.collapse(!0);let s=e.startContainer,c=e.startOffset,l=new zu(t,5),u=s,d=c;(!(u instanceof Text)||d===u.data.length)&&(u=af(l,`nextNode`,u),d=0);let f=s,p=c-1;(!(f instanceof Text)||p===-1)&&(f=af(l,`previousPONode`,u||(s instanceof Text?s:s.childNodes[c]||s)),f instanceof Text&&(p=f.data.length));let m=null,h=0;return u instanceof Text&&u.data.charAt(d)===` `&&Qd(e,t)?(m=u,h=d):f instanceof Text&&f.data.charAt(p)===` `&&(u instanceof Text&&u.data.charAt(d)===` `||$d(e,t))&&(m=f,h=p),m&&m.replaceData(h,1,`\xA0`),e.setStart(s,c),e.collapse(!0),a},sf=(e,t,n)=>{let r=t.firstChild&&Z(t.firstChild),i;for(Od(t,n),i=t;i=qd(i,n);)Dd(i);e.collapsed||of(e,n),wd(e),e.collapse(!1);let a=ld(e.endContainer,n,`BLOCKQUOTE`)||n,o=Yd(e,n),s=null,c=qd(t,t),l=!r&&!!o&&Jd(o);if(o&&c&&!l&&!ld(c,t,`PRE`)&&!ld(c,t,`TABLE`)){Td(e,o,o,n),e.collapse(!0);let t=e.endContainer,r=e.endOffset;if(Ud(o,n,!1),Z(t)){let e=kd(t,r,Kd(t,n)||n,n);t=e.parentNode,r=Array.from(t.childNodes).indexOf(e)}if(r!==fd(t))for(s=document.createDocumentFragment();i=t.childNodes[r];)s.appendChild(i);Md(t,c,e,n),t===n?e.setEnd(n,fd(n)):(r=Array.from(t.parentNode.childNodes).indexOf(t)+1,t=t.parentNode,e.setEnd(t,r))}if(fd(t)){l&&o&&(e.setEndBefore(o),e.collapse(!1),md(o)),a.contains(e.endContainer)||(n.contains(e.endContainer)||(e.setEnd(n,fd(n)),e.collapse(!1)),a=ld(e.endContainer,n,`BLOCKQUOTE`)||n),Td(e,a,a,n);let r=kd(e.endContainer,e.endOffset,a,n),i=r?r.previousSibling:a.lastChild;a.insertBefore(t,r),r?e.setEndBefore(r):e.setEnd(a,fd(a)),o=Xd(e,n),wd(e);let s=e.endContainer,c=e.endOffset;r&&od(r)&&Nd(r,n),r=i&&i.nextSibling,r&&od(r)&&Nd(r,n),e.setEnd(s,c)}if(s&&o){let t=e.cloneRange();Dd(s),Md(o,s,t,n),e.setEnd(t.endContainer,t.endOffset)}wd(e)},cf=e=>{if(e.collapsed)return``;let t=e.startContainer,n=e.endContainer,r=new zu(e.commonAncestorContainer,5,t=>Cd(e,t,!0));r.currentNode=t;let i=t,a=``,o=!1,s;for((!(i instanceof Element)&&!(i instanceof Text)||!r.filter(i))&&(i=r.nextNode());i;)i instanceof Text?(s=i.data,s&&/\S/.test(s)&&(i===n&&(s=s.slice(0,e.endOffset)),i===t&&(s=s.slice(e.startOffset)),a+=s,o=!0)):(i.nodeName===`BR`||o&&!Z(i))&&(a+=` +`,o=!1),i=r.nextNode();return a=a.replace(/ /g,` `),a},lf=Array.prototype.indexOf,uf=(e,t,n,r,i,a,o)=>{let s=e.clipboardData;if(Gu||!s)return!1;let c=a?``:cf(t),l=Yd(t,n),u=Xd(t,n),d=n;l===u&&l?.contains(t.commonAncestorContainer)&&(d=l);let f;f=r?of(t,n):t.cloneContents();let p=t.commonAncestorContainer;for(p instanceof Text&&(p=p.parentNode);p&&p!==d;){let e=p.cloneNode(!1);e.appendChild(f),f=e,p=p.parentNode}let m;if(f.childNodes.length===1&&f.childNodes[0]instanceof Text)c=f.childNodes[0].data.replace(/ /g,` `),o=!0;else{let e=Q(`DIV`);e.appendChild(f),m=e.innerHTML,i&&(m=i(m))}return a&&m!==void 0&&(c=a(m)),Hu&&(c=c.replace(/\r?\n/g,`\r +`)),!o&&m&&c!==m&&(m=``+m,s.setData(`text/html`,m)),s.setData(`text/plain`,c),e.preventDefault(),!0},df=function(e){let t=this.getSelection(),n=this._root;if(t.collapsed){e.preventDefault();return}this.saveUndoState(t),uf(e,t,n,!0,this._config.willCutCopy,this._config.toPlainText,!1)||setTimeout(()=>{try{this._ensureBottomLine()}catch(e){this._config.didError(e)}},0),this.setSelection(t)},ff=function(e){uf(e,this.getSelection(),this._root,!1,this._config.willCutCopy,this._config.toPlainText,!1)},pf=function(e){this._isShiftDown=e.shiftKey},mf=function(e){let t=e.clipboardData,n=t?.items,r=this._isShiftDown,i=!1,a=!1,o=null,s=null;if(n){let c=n.length;for(;c--;){let e=n[c],t=e.type;t===`text/html`?s=e:t===`text/plain`||t===`text/uri-list`?o=e:t===`text/rtf`?i=!0:/^image\/.*/.test(t)&&(a=!0)}if(a&&!(i&&s)&&!o){e.preventDefault(),this.fireEvent(`pasteImage`,{clipboardData:t});return}if(!Gu){e.preventDefault(),s&&(!r||!o)?s.getAsString(e=>{this.insertHTML(e,!0)}):o&&o.getAsString(e=>{let t=this.getSelection();if(!t.collapsed&&Xu.test(t.toString())){let t=this.linkRegExp.exec(e);if(t&&t[0].length===e.length){let e=t[1]?/^(?:ht|f)tps?:/i.test(t[1])?t[1]:`http://`+t[1]:`mailto:`+t[0];this.makeLink(e);return}}this.insertPlainText(e,!0)});return}}let c=t?.types;if(!Gu&&c&&(lf.call(c,`text/html`)>-1||!Wu&&lf.call(c,`text/plain`)>-1&&lf.call(c,`text/rtf`)<0)){e.preventDefault();let n;!r&&(n=t.getData(`text/html`))?this.insertHTML(n,!0):((n=t.getData(`text/plain`))||(n=t.getData(`text/uri-list`)))&&this.insertPlainText(n,!0);return}let l=document.body,u=this.getSelection(),d=u.startContainer,f=u.startOffset,p=u.endContainer,m=u.endOffset,h=Q(`DIV`,{contenteditable:`true`,style:`position:fixed; overflow:hidden; top:0; right:100%; width:1px; height:1px;`});l.appendChild(h),u.selectNodeContents(h),this.setSelection(u),setTimeout(()=>{try{let e=``,t=h,n;for(;h=t;)t=h.nextSibling,md(h),n=h.firstChild,n&&n===h.lastChild&&n instanceof HTMLDivElement&&(h=n),e+=h.innerHTML;this.setSelection(tf(d,f,p,m)),e&&this.insertHTML(e,!0)}catch(e){this._config.didError(e)}},0)},hf=function(e){if(!e.dataTransfer)return;let t=e.dataTransfer.types,n=t.length,r=!1,i=!1;for(;n--;)switch(t[n]){case`text/plain`:r=!0;break;case`text/html`:i=!0;break;default:return}(i||r&&this.saveUndoState)&&this.saveUndoState()},gf=(e,t,n)=>{t.preventDefault(),e.splitBlock(t.shiftKey,n)},_f=(e,t)=>{try{t||=e.getSelection();let n=t.startContainer;n instanceof Text&&(n=n.parentNode);let r=n;for(;Z(r)&&(!r.textContent||r.textContent===`​`);)n=r,r=n.parentNode;n!==r&&(t.setStart(r,Array.from(r.childNodes).indexOf(n)),t.collapse(!0),r.removeChild(n),ad(r)||(r=Kd(r,e._root)||e._root),Dd(r),wd(t)),n===e._root&&(n=n.firstChild)&&n.nodeName===`BR`&&md(n),e._ensureBottomLine(),e.setSelection(t),e._updatePath(t,!0)}catch(t){e._config.didError(t)}},vf=(e,t)=>{let n;for(;(n=e.parentNode)&&!(n===t||n.isContentEditable);)e=n;md(e)},yf=(e,t,n)=>{if(ld(t,e._root,`A`))return;let r=t.data||``,i=Math.max(r.lastIndexOf(` `,n-1),r.lastIndexOf(`\xA0`,n-1))+1,a=r.slice(i,n),o=e.linkRegExp.exec(a);if(o){let n=e.getSelection();e._docWasChanged(),e._recordUndoState(n),e._getRangeAndRemoveBookmark(n);let a=i+o.index,s=a+o[0].length,c=n.startContainer===t,l=n.startOffset-s;a&&(t=t.splitText(a));let u=e._config.tagAttributes.a,d=Q(`A`,Object.assign({href:o[1]?/^(?:ht|f)tps?:/i.test(o[1])?o[1]:`http://`+o[1]:`mailto:`+o[0]},u));d.textContent=r.slice(a,s),t.parentNode.insertBefore(d,t),t.data=r.slice(s),c&&(n.setStart(t,l),n.setEnd(t,l)),e.setSelection(n)}},bf=(e,t,n)=>{let r=e._root;if(e._removeZWS(),e.saveUndoState(n),!n.collapsed)t.preventDefault(),of(n,r),_f(e,n);else if(Qd(n,r)){t.preventDefault();let i=Yd(n,r);if(!i)return;let a=i;Od(a.parentNode,r);let o=Kd(a,r);if(o){if(!o.isContentEditable){vf(o,r);return}for(Md(o,a,n,r),a=o.parentNode;a!==r&&!a.nextSibling;)a=a.parentNode;a!==r&&(a=a.nextSibling)&&Nd(a,r),e.setSelection(n)}else if(a){if(ld(a,r,`UL`)||ld(a,r,`OL`)){e.decreaseListLevel(n);return}else if(ld(a,r,`BLOCKQUOTE`)){e.removeQuote(n);return}e.setSelection(n),e._updatePath(n,!0)}}else{wd(n);let r=n.startContainer,i=n.startOffset,a=r.parentNode;r instanceof Text&&a instanceof HTMLAnchorElement&&i&&a.href.includes(r.data)?(r.deleteData(i-1,1),e.setSelection(n),e.removeLink(),t.preventDefault()):(e.setSelection(n),setTimeout(()=>{_f(e)},0))}},xf=(e,t,n)=>{let r=e._root,i,a,o,s,c,l;if(e._removeZWS(),e.saveUndoState(n),!n.collapsed)t.preventDefault(),of(n,r),_f(e,n);else if($d(n,r)){if(t.preventDefault(),i=Yd(n,r),!i)return;if(Od(i.parentNode,r),a=qd(i,r),a){if(!a.isContentEditable){vf(a,r);return}for(Md(i,a,n,r),a=i.parentNode;a!==r&&!a.nextSibling;)a=a.parentNode;a!==r&&(a=a.nextSibling)&&Nd(a,r),e.setSelection(n),e._updatePath(n,!0)}}else{if(o=n.cloneRange(),Td(n,r,r,r),s=n.endContainer,c=n.endOffset,s instanceof Element&&(l=s.childNodes[c],l&&l.nodeName===`IMG`)){t.preventDefault(),md(l),wd(n),_f(e,n);return}e.setSelection(o),setTimeout(()=>{_f(e)},0)}},Sf=(e,t,n)=>{let r=e._root;if(e._removeZWS(),n.collapsed&&Qd(n,r)){let i=Yd(n,r),a;for(;a=i.parentNode;){if(a.nodeName===`UL`||a.nodeName===`OL`){t.preventDefault(),e.increaseListLevel(n);break}i=a}}},Cf=(e,t,n)=>{let r=e._root;if(e._removeZWS(),n.collapsed&&Qd(n,r)){let i=n.startContainer;(ld(i,r,`UL`)||ld(i,r,`OL`))&&(t.preventDefault(),e.decreaseListLevel(n))}},wf=(e,t,n)=>{let r,i=e._root;if(e._recordUndoState(n),e._getRangeAndRemoveBookmark(n),!n.collapsed)of(n,i),e._ensureBottomLine(),e.setSelection(n),e._updatePath(n,!0);else if($d(n,i)){let r=Yd(n,i);if(r&&r.nodeName!==`PRE`){let i=r.textContent?.trimEnd().replace(`​`,``);if(i===`*`||i===`1.`){t.preventDefault(),e.insertPlainText(` `,!1),e._docWasChanged(),e.saveUndoState(n);let a=new zu(r,4),o;for(;o=a.nextNode();)md(o);i===`*`?e.makeUnorderedList():e.makeOrderedList();return}}}if(r=n.endContainer,n.endOffset===fd(r))do if(r.nodeName===`A`){n.setStartAfter(r);break}while(!r.nextSibling&&(r=r.parentNode)&&r!==i);if(e._config.addLinks){let t=n.cloneRange();wd(t);let r=t.startContainer,i=t.startOffset;setTimeout(()=>{yf(e,r,i)},0)}e.setSelection(n)},Tf=function(e){if(e.defaultPrevented||e.isComposing)return;let t=e.key,n=``,r=e.code;/^Digit\d$/.test(r)&&(t=r.slice(-1)),t!==`Backspace`&&t!==`Delete`&&(e.altKey&&(n+=`Alt-`),e.ctrlKey&&(n+=`Ctrl-`),e.metaKey&&(n+=`Meta-`),e.shiftKey&&(n+=`Shift-`)),Hu&&e.shiftKey&&t===`Delete`&&(n+=`Shift-`),t=n+t;let i=this.getSelection(),a=this._keyHandlers[t];a?a(this,e,i):!i.collapsed&&!e.ctrlKey&&!e.metaKey&&t.length===1&&(this.saveUndoState(i),of(i,this._root),this._ensureBottomLine(),this.setSelection(i),this._updatePath(i,!0))},Ef={Backspace:bf,Delete:xf,Tab:Sf,"Shift-Tab":Cf," ":wf,ArrowLeft(e){e._removeZWS()},ArrowRight(e,t,n){e._removeZWS();let r=e.getRoot();if($d(n,r)){wd(n);let i=n.endContainer;do if(i.nodeName===`CODE`){let r=i.nextSibling;if(!(r instanceof Text)||r.length===0){let e=document.createTextNode(`\xA0`);i.parentNode.insertBefore(e,r),r=e}n.setStart(r,1),e.setSelection(n),t.preventDefault();break}while(!i.nextSibling&&(i=i.parentNode)&&i!==r)}}};Yu||(Ef.Enter=gf,Ef[`Shift-Enter`]=gf),!Vu&&!Uu&&(Ef.PageUp=e=>{e.moveCursorToStart()},Ef.PageDown=e=>{e.moveCursorToEnd()});var Df=(e,t)=>(t||=null,(n,r)=>{r.preventDefault();let i=n.getSelection();n.hasFormat(e,null,i)?n.changeFormat(null,{tag:e},i):n.changeFormat({tag:e},t,i)});Ef[qu+`b`]=Df(`B`),Ef[qu+`i`]=Df(`I`),Ef[qu+`u`]=Df(`U`),Ef[qu+`Shift-7`]=Df(`S`),Ef[qu+`Shift-5`]=Df(`SUB`,{tag:`SUP`}),Ef[qu+`Shift-6`]=Df(`SUP`,{tag:`SUB`}),Ef[qu+`Shift-8`]=(e,t)=>{t.preventDefault();let n=e.getPath();/(?:^|>)UL/.test(n)?e.removeList():e.makeUnorderedList()},Ef[qu+`Shift-9`]=(e,t)=>{t.preventDefault();let n=e.getPath();/(?:^|>)OL/.test(n)?e.removeList():e.makeOrderedList()},Ef[qu+`[`]=(e,t)=>{t.preventDefault();let n=e.getPath();/(?:^|>)BLOCKQUOTE/.test(n)||!/(?:^|>)[OU]L/.test(n)?e.decreaseQuoteLevel():e.decreaseListLevel()},Ef[qu+`]`]=(e,t)=>{t.preventDefault();let n=e.getPath();/(?:^|>)BLOCKQUOTE/.test(n)||!/(?:^|>)[OU]L/.test(n)?e.increaseQuoteLevel():e.increaseListLevel()},Ef[qu+`d`]=(e,t)=>{t.preventDefault(),e.toggleCode()},Ef[qu+`z`]=(e,t)=>{t.preventDefault(),e.undo()},Ef[qu+`y`]=Ef[qu+`Shift-z`]=Ef[qu+`Shift-Z`]=(e,t)=>{t.preventDefault(),e.redo()};var Of=8,kf=40,Af=1200,jf=[{pos:`nw`,cursor:`nwse-resize`},{pos:`n`,cursor:`ns-resize`},{pos:`ne`,cursor:`nesw-resize`},{pos:`e`,cursor:`ew-resize`},{pos:`se`,cursor:`nwse-resize`},{pos:`s`,cursor:`ns-resize`},{pos:`sw`,cursor:`nesw-resize`},{pos:`w`,cursor:`ew-resize`}],Mf={ArrowUp:(e,t,n)=>{let r=Yd(t,n);if(r){let i=Kd(r,n);i&&(t.selectNodeContents(i),t.collapse(!1),e.setSelection(t).focus())}},ArrowDown:(e,t,n)=>{let r=Yd(t,n);if(r){let i=qd(r,n);i&&(t.selectNodeContents(i),t.collapse(!0),e.setSelection(t).focus())}},Delete:(e,t)=>{e.replaceWithBlankLine(t)},Backspace:(e,t)=>{e.replaceWithBlankLine(t)}},Nf=class{constructor(e,t){this._currentImage=null,this._resizeContainer=null,this._handles=null,this._currentHandle=null,this._startX=0,this._startY=0,this._startWidth=0,this._startHeight=0,this._maxWidth=Af,this._originalRatio=1,this._editor=t,this._root=e,document.addEventListener(`click`,this),t.addEventListener(`drop`,this)}destroy(){this._deselectImage(),this._editor.removeEventListener(`drop`,this),document.removeEventListener(`click`,this)}handleEvent(e){switch(e.type){case`click`:this._onClick(e);break;case`pointerdown`:this._onPointerDown(e);break;case`pointermove`:this._onPointerMove(e);break;case`pointercancel`:case`pointerup`:this._onPointerUp(e);break;case`keydown`:this._onKeyDown(e);break;case`drop`:this._deselectImage();break}}_onClick(e){let t=e.target;t.nodeName===`IMG`&&this._root.contains(t)?(e.stopPropagation(),this._selectImage(t)):this._currentImage&&this._handles&&!this._handles.some(e=>e.element===t)&&this._deselectImage()}_deselectImage(){this._currentImage&&=(document.removeEventListener(`keydown`,this,!0),this._currentHandle&&this._onPointerUp({preventDefault(){},target:this._currentHandle.element}),this._handles&&this._handles.forEach(({element:e})=>e.removeEventListener(`pointerdown`,this)),this._resizeContainer&&this._resizeContainer.remove(),this._currentImage.removeAttribute(`tabindex`),this._handles=null,this._resizeContainer=null,null)}_selectImage(e){if(this._currentImage===e)return;this._deselectImage(),this._root.blur();let t=jf.map(({pos:e,cursor:t})=>{let n=Of/2,r=``;switch(e){case`nw`:r=`left: -${n}px; top: -${n}px;`;break;case`n`:r=`left: calc(50% - ${n}px); top: -${n}px;`;break;case`ne`:r=`right: -${n}px; top: -${n}px;`;break;case`e`:r=`right: -${n}px; top: calc(50% - ${n}px);`;break;case`se`:r=`right: -${n}px; bottom: -${n}px;`;break;case`s`:r=`left: calc(50% - ${n}px); bottom: -${n}px;`;break;case`sw`:r=`left: -${n}px; bottom: -${n}px;`;break;case`w`:r=`left: -${n}px; top: calc(50% - ${n}px);`;break}let i=Q(`div`,{class:`squire-resize-handle squire-resize-handle-${e}`,style:` + position: absolute; + width: ${Of}px; + height: ${Of}px; + background: #0067b9; + border: 1px solid #fff; + cursor: ${t}; + pointer-events: auto; + touch-action: none; + box-shadow: 0 1px 3px rgba(0,0,0,0.3); + ${r} + `});return i.addEventListener(`pointerdown`,this),{element:i,cursor:t,position:e}}),n=Q(`div`,{class:`squire-image-resize-container`,style:`position: absolute; pointer-events: none; z-index: 1000;`},t.map(e=>e.element));this._currentImage=e,this._resizeContainer=n,this._handles=t,this._root.appendChild(this._resizeContainer);let r=e.naturalWidth;this._originalRatio=r/e.naturalHeight,this._maxWidth=Math.min(r*2,e.parentElement?e.parentElement.offsetWidth:Af,Af),this._positionResizeContainer(),e.tabIndex=-1,e.focus(),document.addEventListener(`keydown`,this,!0)}_positionResizeContainer(){let e=this._resizeContainer,t=this._root,n=this._currentImage;if(!e||!n)return;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=i.top-r.top+t.scrollTop,o=i.left-r.left+t.scrollLeft,s=i.width,c=i.height;e.style.top=a+`px`,e.style.left=o+`px`,e.style.width=s+`px`,e.style.height=c+`px`}_onPointerDown(e){if(this._currentHandle||!this._handles)return;let t=e.target,n=this._handles.find(e=>e.element===t)||null;if(!n)return;let r=this._currentImage;if(!r)return;e.preventDefault(),e.stopPropagation(),t.addEventListener(`pointermove`,this),t.addEventListener(`pointerup`,this),t.addEventListener(`pointercancel`,this),t.setPointerCapture(e.pointerId),this._currentHandle=n,this._startX=e.clientX,this._startY=e.clientY;let i=getComputedStyle(r);this._startWidth=parseFloat(i.width),this._startHeight=parseFloat(i.height),document.body.style.cursor=n.cursor}_onPointerMove(e){e.preventDefault();let t=this._currentHandle,n=this._currentImage;if(!t||!n)return;let r=e.clientX-this._startX,i=e.clientY-this._startY,a=this._maxWidth,o=this._originalRatio,s=this._startWidth,c=this._startHeight;switch(t.position){case`sw`:case`nw`:case`w`:s-=2*r;break;case`se`:case`ne`:case`e`:s+=2*r;break;case`n`:c-=i,s=c*o;break;case`s`:c+=i,s=c*o;break}sa&&(s=a);let l=n.style;l.width=s+`px`,l.height=`auto`,this._positionResizeContainer()}_onPointerUp(e){e.preventDefault();let t=e.target;t&&(t.removeEventListener(`pointermove`,this),t.removeEventListener(`pointerup`,this),t.removeEventListener(`pointercancel`,this)),this._currentHandle=null,document.body.style.cursor=``}_onKeyDown(e){e.preventDefault(),e.stopPropagation();let t=Mf[e.key];if(!t)return;let n=this._currentImage;if(!n)return;let r=this._editor,i=this._root;this._deselectImage();let a=r.getSelection();a.selectNode(n),t(r,a,i)}},Pf=class{constructor(e,t){this.customEvents=new Set([`pathChange`,`select`,`input`,`pasteImage`,`undoStateChange`]),this.startSelectionId=`squire-selection-start`,this.endSelectionId=`squire-selection-end`,this.linkRegExp=/\b(?:((?:(?:ht|f)tps?:\/\/|www\d{0,3}[.]|[a-z0-9][a-z0-9.\-]*[.][a-z]{2,}\/)(?:[^\s()<>]+|\([^\s()<>]+\))+(?:[^\s?&`!()\[\]{};:'".,<>«»“”‘’]|\([^\s()<>]+\)))|([\w\-.%+]+@(?:[\w\-]+\.)+[a-z]{2,}\b(?:[?][^&?\s]+=[^\s?&`!()\[\]{};:'".,<>«»“”‘’]+(?:&[^&?\s]+=[^\s?&`!()\[\]{};:'".,<>«»“”‘’]+)*)?))/i,this.tagAfterSplit={DT:`DD`,DD:`DT`,LI:`LI`,PRE:`PRE`},this._root=e,this._config=this._makeConfig(t),this._isFocused=!1,this._lastSelection=tf(e,0),this._willRestoreSelection=!1,this._mayHaveZWS=!1,this._lastAnchorNode=null,this._lastFocusNode=null,this._path=``,this._events=new Map,this._undoIndex=-1,this._undoStack=[],this._undoStackLength=0,this._isInUndoState=!1,this._ignoreChange=!1,this._ignoreAllChanges=!1,this.addEventListener(`selectionchange`,this._updatePathOnEvent),this.addEventListener(`blur`,this._enableRestoreSelection),this.addEventListener(`mousedown`,this._disableRestoreSelection),this.addEventListener(`touchstart`,this._disableRestoreSelection),this.addEventListener(`focus`,this._restoreSelection),this.addEventListener(`blur`,this._removeZWS),this._isShiftDown=!1,this.addEventListener(`cut`,df),this.addEventListener(`copy`,ff),this.addEventListener(`paste`,mf),this.addEventListener(`drop`,hf),this.addEventListener(`keydown`,pf),this.addEventListener(`keyup`,pf),this.addEventListener(`keydown`,Tf),this._keyHandlers=Object.create(Ef);let n=new MutationObserver(()=>this._docWasChanged());n.observe(e,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),this._mutation=n,e.setAttribute(`contenteditable`,`true`),this.addEventListener(`beforeinput`,this._beforeInput),this._imageResizer=new Nf(e,this),this.setHTML(``)}destroy(){this._events.forEach((e,t)=>{this.removeEventListener(t)}),this._mutation.disconnect(),this._imageResizer.destroy(),this._undoIndex=-1,this._undoStack=[],this._undoStackLength=0}_makeConfig(e){let t={blockTag:`DIV`,blockAttributes:null,tagAttributes:{},classNames:{color:`color`,fontFamily:`font`,fontSize:`size`,highlight:`highlight`},undo:{documentSizeThreshold:-1,undoLimit:-1},addLinks:!0,willCutCopy:null,toPlainText:null,sanitizeToDOMFragment:e=>{let t=DOMPurify.sanitize(e,{ALLOW_UNKNOWN_PROTOCOLS:!0,WHOLE_DOCUMENT:!1,RETURN_DOM:!0,RETURN_DOM_FRAGMENT:!0,FORCE_BODY:!1});return t?document.importNode(t,!0):document.createDocumentFragment()},didError:e=>console.log(e)};return e&&(Object.assign(t,e),t.blockTag=t.blockTag.toUpperCase()),t}setKeyHandler(e,t){return this._keyHandlers[e]=t,this}_beforeInput(e){switch(e.inputType){case`insertLineBreak`:e.preventDefault(),this.splitBlock(!0);break;case`insertParagraph`:e.preventDefault(),this.splitBlock(!1);break;case`insertOrderedList`:e.preventDefault(),this.makeOrderedList();break;case`insertUnoderedList`:e.preventDefault(),this.makeUnorderedList();break;case`historyUndo`:e.preventDefault(),this.undo();break;case`historyRedo`:e.preventDefault(),this.redo();break;case`formatBold`:e.preventDefault(),this.bold();break;case`formatItalic`:e.preventDefault(),this.italic();break;case`formatUnderline`:e.preventDefault(),this.underline();break;case`formatStrikeThrough`:e.preventDefault(),this.strikethrough();break;case`formatSuperscript`:e.preventDefault(),this.superscript();break;case`formatSubscript`:e.preventDefault(),this.subscript();break;case`formatJustifyFull`:case`formatJustifyCenter`:case`formatJustifyRight`:case`formatJustifyLeft`:{e.preventDefault();let t=e.inputType.slice(13).toLowerCase();t===`full`&&(t=`justify`),this.setTextAlignment(t);break}case`formatRemove`:e.preventDefault(),this.removeAllFormatting();break;case`formatSetBlockTextDirection`:{e.preventDefault();let t=e.data;t===`null`&&(t=null),this.setTextDirection(t);break}case`formatBackColor`:e.preventDefault(),this.setHighlightColor(e.data);break;case`formatFontColor`:e.preventDefault(),this.setTextColor(e.data);break;case`formatFontName`:e.preventDefault(),this.setFontFace(e.data);break}}handleEvent(e){this.fireEvent(e.type,e)}fireEvent(e,t){let n=this._events.get(e);if(/^(?:focus|blur)/.test(e)){let t=this._root===document.activeElement;if(e===`focus`){if(!t||this._isFocused)return this;this._isFocused=!0}else{if(t||!this._isFocused)return this;this._isFocused=!1}}if(n){let r=t instanceof Event?t:new CustomEvent(e,{detail:t});n=n.slice();for(let e of n)try{`handleEvent`in e?e.handleEvent(r):e.call(this,r)}catch(e){this._config.didError(e)}}return this}addEventListener(e,t){let n=this._events.get(e),r=this._root;return n||(n=[],this._events.set(e,n),this.customEvents.has(e)||(e===`selectionchange`&&(r=document),r.addEventListener(e,this,!0))),n.push(t),this}removeEventListener(e,t){let n=this._events.get(e),r=this._root;if(n){if(t){let e=n.length;for(;e--;)n[e]===t&&n.splice(e,1)}else n.length=0;n.length||(this._events.delete(e),this.customEvents.has(e)||(e===`selectionchange`&&(r=document),r.removeEventListener(e,this,!0)))}return this}focus(){return this._root.focus({preventScroll:!0}),this}blur(){return this._root.blur(),this}_enableRestoreSelection(){this._willRestoreSelection=!0}_disableRestoreSelection(){this._willRestoreSelection=!1}_restoreSelection(){this._willRestoreSelection&&this.setSelection(this._lastSelection)}_removeZWS(){this._mayHaveZWS&&=(vd(this._root),!1)}_saveRangeToBookmark(e){let t=Q(`INPUT`,{id:this.startSelectionId,type:`hidden`}),n=Q(`INPUT`,{id:this.endSelectionId,type:`hidden`}),r;nf(e,t),e.collapse(!1),nf(e,n),t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING&&(t.id=this.endSelectionId,n.id=this.startSelectionId,r=t,t=n,n=r),e.setStartAfter(t),e.setEndBefore(n)}_getRangeAndRemoveBookmark(e){let t=this._root,n=t.querySelectorAll(`#`+this.startSelectionId),r=t.querySelectorAll(`#`+this.endSelectionId),i=n[0],a=r[0];if(i&&a&&i.compareDocumentPosition(a)&Node.DOCUMENT_POSITION_FOLLOWING){let t=i.parentNode,n=a.parentNode,r=Array.from(t.childNodes).indexOf(i),o=Array.from(n.childNodes).indexOf(a);t===n&&--o,i.remove(),a.remove(),e||=document.createRange(),e.setStart(t,r),e.setEnd(n,o),jd(t,e),t!==n&&jd(n,e),e.collapsed&&(t=e.startContainer,t instanceof Text&&(n=t.childNodes[e.startOffset],(!n||!(n instanceof Text))&&(n=t.childNodes[e.startOffset-1]),n&&n instanceof Text&&(e.setStart(n,0),e.collapse(!0))))}for(let e=0;e`:``)+e.nodeName,t&&(r+=`#`+t),a.length&&(r+=`.`,r+=a.join(`.`)),o&&(r+=`[dir=`+o+`]`),i.contains(s.highlight)&&(r+=`[backgroundColor=`+e.style.backgroundColor.replace(/ /g,``)+`]`),i.contains(s.color)&&(r+=`[color=`+e.style.color.replace(/ /g,``)+`]`),i.contains(s.fontFamily)&&(r+=`[fontFamily=`+e.style.fontFamily.replace(/ /g,``)+`]`),i.contains(s.fontSize)&&(r+=`[fontSize=`+e.style.fontSize+`]`)}}return r}modifyDocument(e){let t=this._mutation;return t&&(t.takeRecords().length&&this._docWasChanged(),t.disconnect()),this._ignoreAllChanges=!0,e(),this._ignoreAllChanges=!1,t&&(t.observe(this._root,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),this._ignoreChange=!1),this}_docWasChanged(){if(nd(),this._mayHaveZWS=!0,!this._ignoreAllChanges){if(this._ignoreChange){this._ignoreChange=!1;return}this._isInUndoState&&(this._isInUndoState=!1,this.fireEvent(`undoStateChange`,{canUndo:!0,canRedo:!1})),this.fireEvent(`input`)}}_recordUndoState(e,t){let n=this._isInUndoState;if(!n||t){let r=this._undoIndex+1,i=this._undoStack,a=this._config.undo,o=a.documentSizeThreshold,s=a.undoLimit;if(r-1&&c.length*2>o&&s>-1&&r>s&&(i.splice(0,r-s),r=s,this._undoStackLength=s),i[r]=c,this._undoIndex=r,this._undoStackLength+=1,this._isInUndoState=!0}return this}saveUndoState(e){let t=!1;return e||(e=this.getSelection(),t=!0),this._recordUndoState(e,this._isInUndoState),this._getRangeAndRemoveBookmark(e),t&&this.setSelection(e),this}undo(){if(this._undoIndex!==0||!this._isInUndoState){this._recordUndoState(this.getSelection(),!1),--this._undoIndex,this._setRawHTML(this._undoStack[this._undoIndex]);let e=this._getRangeAndRemoveBookmark();e&&this.setSelection(e),this._isInUndoState=!0,this.fireEvent(`undoStateChange`,{canUndo:this._undoIndex!==0,canRedo:!0}),this.fireEvent(`input`)}return this.focus()}redo(){let e=this._undoIndex,t=this._undoStackLength;if(e+1{e&&(t=this.getSelection(),this._saveRangeToBookmark(t));let r=this._root.querySelector(`.squire-image-resize-container`);r&&r.remove(),n=this._getRawHTML().replace(/\u200B/g,``),r&&this._root.appendChild(r),e&&this._getRangeAndRemoveBookmark(t)}),n}setHTML(e){let t=this._config.sanitizeToDOMFragment(e,this),n=this._root;Vd(t,this._config),Ud(t,n,!1),Od(t,n);let r=t,i=r.firstChild;if(!i||i.nodeName===`BR`){let e=this.createDefaultBlock();i?r.replaceChild(e,i):r.appendChild(e)}else for(;r=qd(r,n);)Dd(r);for(this._ignoreChange=!0;i=n.lastChild;)n.removeChild(i);n.appendChild(t),this._undoIndex=-1,this._undoStack.length=0,this._undoStackLength=0,this._isInUndoState=!1;let a=this._getRangeAndRemoveBookmark()||tf(n.firstElementChild||n,0);return this.saveUndoState(a),this.setSelection(a),this._updatePath(a,!0),this}insertHTML(e,t){let n=this._config,r=n.sanitizeToDOMFragment(e,this),i=this.getSelection();this.saveUndoState(i);try{let a=this._root;n.addLinks&&this.addDetectedLinks(r,r),Vd(r,this._config),Ud(r,a,!1),Hd(r),r.normalize();let o=r;for(;o=qd(o,r);)Dd(o);let s=!0;if(t){let t=new CustomEvent(`willPaste`,{cancelable:!0,detail:{html:e,fragment:r}});this.fireEvent(`willPaste`,t),r=t.detail.fragment,s=!t.defaultPrevented}s&&(sf(i,r,a),i.collapse(!1),Ed(i,`A`,a),this._ensureBottomLine()),this.setSelection(i),this._updatePath(i,!0),t&&this.focus()}catch(e){this._config.didError(e)}return this}insertElement(e,t){if(t||=this.getSelection(),t.collapse(!0),Z(e))nf(t,e),t.setStartAfter(e);else{let n=this._root,r=Yd(t,n),i=r||n,a=null;for(;i!==n&&!i.nextSibling;)i=i.parentNode;if(i!==n){let e=i.parentNode;a=kd(e,i.nextSibling,n,n)}r&&Jd(r)&&md(r),n.insertBefore(e,a);let o=this.createDefaultBlock();n.insertBefore(o,a),t.setStart(o,0),t.setEnd(o,0),wd(t)}return this.focus(),this.setSelection(t),this._updatePath(t),this}insertImage(e,t){let n=Q(`IMG`,Object.assign({src:e},t));return this.insertElement(n),n}insertPlainText(e,t){let n=this.getSelection();if(n.collapsed&&ld(n.startContainer,this._root,`PRE`)){let r=n.startContainer,i=n.startOffset,a;if(!r||!(r instanceof Text)){let e=document.createTextNode(``);r.insertBefore(e,r.childNodes[i]),a=e,i=0}else a=r;let o=!0;if(t){let t=new CustomEvent(`willPaste`,{cancelable:!0,detail:{text:e}});this.fireEvent(`willPaste`,t),e=t.detail.text,o=!t.defaultPrevented}return o&&(a.insertData(i,e),n.setStart(a,i+e.length),n.collapse(!0)),this.setSelection(n),this}let r=e.split(` +`),i=this._config,a=i.blockTag,o=i.blockAttributes,s=``,c=`<`+a;for(let e in o)c+=` `+e+`="`+Wd(o[e])+`"`;c+=`>`;for(let e=0,t=r.length;e`)+s),r[e]=t}return this.insertHTML(r.join(``),t)}getSelectedText(e){return cf(e||this.getSelection())}getFontInfo(e){let t={color:void 0,backgroundColor:void 0,fontFamily:void 0,fontSize:void 0};e||=this.getSelection(),wd(e);let n=0,r=e.commonAncestorContainer;if(e.collapsed||r instanceof Text)for(r instanceof Text&&(r=r.parentNode);n<4&&r;){let e=r.style;if(e){let r=e.color;!t.color&&r&&(t.color=r,n+=1);let i=e.backgroundColor;!t.backgroundColor&&i&&(t.backgroundColor=i,n+=1);let a=e.fontFamily;!t.fontFamily&&a&&(t.fontFamily=a,n+=1);let o=e.fontSize;!t.fontSize&&o&&(t.fontSize=o,n+=1)}r=r.parentNode}return t}hasFormat(e,t,n){e=e.toUpperCase(),t||={},n||=this.getSelection(),!n.collapsed&&n.startContainer instanceof Text&&n.startOffset===n.startContainer.length&&n.startContainer.nextSibling&&n.setStartBefore(n.startContainer.nextSibling),!n.collapsed&&n.endContainer instanceof Text&&n.endOffset===0&&n.endContainer.previousSibling&&n.setEndAfter(n.endContainer.previousSibling);let r=this._root,i=n.commonAncestorContainer;if(ld(i,r,e,t))return!0;if(i instanceof Text)return!1;let a=new zu(i,4,e=>Cd(n,e,!0)),o=!1,s;for(;s=a.nextNode();){if(!ld(s,r,e,t))return!1;o=!0}return o}changeFormat(e,t,n,r){return n||=this.getSelection(),this.saveUndoState(n),t&&(n=this._removeFormat(t.tag.toUpperCase(),t.attributes||{},n,r)),e&&(n=this._addFormat(e.tag.toUpperCase(),e.attributes||{},n)),this.setSelection(n),this._updatePath(n,!0),this.focus()}_addFormat(e,t,n){let r=this._root;if(n.collapsed){let r=Dd(Q(e,t));nf(n,r);let i=r.firstChild||r,a=i instanceof Text?i.length:0;n.setStart(i,a),n.collapse(!0);let o=r;for(;Z(o);)o=o.parentNode;vd(o,r)}else{let i=new zu(n.commonAncestorContainer,5,e=>(e instanceof Text||e.nodeName===`BR`||e.nodeName===`IMG`)&&Cd(n,e,!0)),{startContainer:a,startOffset:o,endContainer:s,endOffset:c}=n;if(i.currentNode=a,!(a instanceof Element)&&!(a instanceof Text)||!i.filter(a)){let e=i.nextNode();if(!e)return n;a=e,o=0}do{let n=i.currentNode;if(!ld(n,r,e,t)){n===s&&n.length>c&&n.splitText(c),n===a&&o&&(n=n.splitText(o),s===a?(s=n,c-=o):s===a.parentNode&&(c+=1),a=n,o=0);let r=Q(e,t);hd(n,r),r.appendChild(n)}}while(i.nextNode());n=tf(a,o,s,c)}return n}_removeFormat(e,t,n,r){this._saveRangeToBookmark(n);let i;n.collapsed&&(i=Ju?document.createTextNode(`​`):document.createTextNode(``),nf(n,i));let a=n.commonAncestorContainer;for(;Z(a);)a=a.parentNode;let o=n.startContainer,s=n.startOffset,c=n.endContainer,l=n.endOffset,u=[],d=(e,t)=>{if(Cd(n,e,!1))return;let r,i;if(!Cd(n,e,!0)){!(e instanceof HTMLInputElement)&&(!(e instanceof Text)||e.data)&&u.push([t,e]);return}if(e instanceof Text)e===c&&l!==e.length&&u.push([t,e.splitText(l)]),e===o&&s&&(e.splitText(s),u.push([t,e]));else for(r=e.firstChild;r;r=i)i=r.nextSibling,d(r,t)},f=Array.from(a.getElementsByTagName(e)).filter(r=>Cd(n,r,!0)&&cd(r,e,t));if(r||f.forEach(e=>{d(e,e)}),u.forEach(([e,t])=>{e=e.cloneNode(!1),hd(t,e),e.appendChild(t)}),f.forEach(e=>{hd(e,pd(e))}),Ju&&i){i=i.parentNode;let e=i;for(;e&&Z(e);)e=e.parentNode;e&&vd(e,i)}return this._getRangeAndRemoveBookmark(n),i&&n.collapse(!1),jd(a,n),n}bold(){return this.changeFormat({tag:`B`})}removeBold(){return this.changeFormat(null,{tag:`B`})}italic(){return this.changeFormat({tag:`I`})}removeItalic(){return this.changeFormat(null,{tag:`I`})}underline(){return this.changeFormat({tag:`U`})}removeUnderline(){return this.changeFormat(null,{tag:`U`})}strikethrough(){return this.changeFormat({tag:`S`})}removeStrikethrough(){return this.changeFormat(null,{tag:`S`})}subscript(){return this.changeFormat({tag:`SUB`},{tag:`SUP`})}removeSubscript(){return this.changeFormat(null,{tag:`SUB`})}superscript(){return this.changeFormat({tag:`SUP`},{tag:`SUB`})}removeSuperscript(){return this.changeFormat(null,{tag:`SUP`})}makeLink(e,t){let n=this.getSelection();if(n.collapsed){let t=e.indexOf(`:`)+1;if(t)for(;e[t]===`/`;)t+=1;nf(n,document.createTextNode(e.slice(t)))}return t=Object.assign({href:e},this._config.tagAttributes.a,t),this.changeFormat({tag:`A`,attributes:t},{tag:`A`},n)}removeLink(){return this.changeFormat(null,{tag:`A`},this.getSelection(),!0)}addDetectedLinks(e,t){let n=new zu(e,4,e=>!ld(e,t||this._root,`A`)),r=this.linkRegExp,i=this._config.tagAttributes.a,a;for(;a=n.nextNode();){let e=a.parentNode,t=a.data,n;for(;n=r.exec(t);){let r=n.index,o=r+n[0].length;r&&e.insertBefore(document.createTextNode(t.slice(0,r)),a);let s=Q(`A`,Object.assign({href:n[1]?/^(?:ht|f)tps?:/i.test(n[1])?n[1]:`http://`+n[1]:`mailto:`+n[0]},i));s.textContent=t.slice(r,o),e.insertBefore(s,a),a.data=t=t.slice(o)}}return this}setFontFace(e){let t=this._config.classNames.fontFamily;return this.changeFormat(e?{tag:`SPAN`,attributes:{class:t,style:`font-family: `+e+`, sans-serif;`}}:null,{tag:`SPAN`,attributes:{class:t}})}setFontSize(e){let t=this._config.classNames.fontSize;return this.changeFormat(e?{tag:`SPAN`,attributes:{class:t,style:`font-size: `+(typeof e==`number`?e+`px`:e)}}:null,{tag:`SPAN`,attributes:{class:t}})}setTextColor(e){let t=this._config.classNames.color;return this.changeFormat(e?{tag:`SPAN`,attributes:{class:t,style:`color:`+e}}:null,{tag:`SPAN`,attributes:{class:t}})}setHighlightColor(e){let t=this._config.classNames.highlight;return this.changeFormat(e?{tag:`SPAN`,attributes:{class:t,style:`background-color:`+e}}:null,{tag:`SPAN`,attributes:{class:t}})}_ensureBottomLine(){let e=this._root,t=e.lastElementChild;(!t||t.nodeName!==this._config.blockTag||!ad(t))&&e.appendChild(this.createDefaultBlock())}createDefaultBlock(e){let t=this._config;return Dd(Q(t.blockTag,t.blockAttributes,e))}splitBlock(e,t){t||=this.getSelection();let n=this._root,r,i,a,o;if(this._recordUndoState(t),this._removeZWS(),this._getRangeAndRemoveBookmark(t),t.collapsed||of(t,n),this._config.addLinks){wd(t);let e=t.startContainer,n=t.startOffset;setTimeout(()=>{yf(this,e,n)},0)}if(r=Yd(t,n),r&&(i=ld(r,n,`PRE`))){wd(t),a=t.startContainer;let r=t.startOffset;return a instanceof Text||(a=document.createTextNode(``),i.insertBefore(a,i.firstChild),r=0),!e&&a instanceof Text&&(a.data.charAt(r-1)===` +`||Qd(t,n))&&(a.data.charAt(r)===` +`||$d(t,n))?(a.deleteData(r&&r-1,r?2:1),o=kd(a,r&&r-1,n,n),a=o.previousSibling,a.textContent||md(a),a=this.createDefaultBlock(),o.parentNode.insertBefore(a,o),o.textContent||md(o),t.setStart(a,0)):(a.insertData(r,` +`),a.nextSibling||i.appendChild(Q(`BR`)),a.length===r+1?t.setStartAfter(a):t.setStart(a,r+1)),t.collapse(!0),this.setSelection(t),this._updatePath(t,!0),this._docWasChanged(),this}if(!r||e||/^T[HD]$/.test(r.nodeName))return Ed(t,`A`,n),nf(t,Q(`BR`)),t.collapse(!1),this.setSelection(t),this._updatePath(t,!0),this;if((i=ld(r,n,`LI`))&&(r=i),Jd(r)){if(ld(r,n,`UL`)||ld(r,n,`OL`))return this.decreaseListLevel(t),this;if(ld(r,n,`BLOCKQUOTE`))return this.replaceWithBlankLine(t),this}a=t.startContainer;let s=t.startOffset,c=this.tagAfterSplit[r.nodeName];o=kd(a,s,r.parentNode,this._root);let l=this._config,u=null;for(c||(c=l.blockTag,u=l.blockAttributes),cd(o,c,u)||(r=Q(c,u),o.dir&&(r.dir=o.dir),hd(o,r),r.appendChild(pd(o)),o=r),vd(r),Hd(r),Dd(r);o instanceof Element;){let e=o.firstChild,t;if(o.nodeName===`A`&&(!o.textContent||o.textContent===`​`)){e=document.createTextNode(``),hd(o,e),o=e;break}for(;e&&e instanceof Text&&!e.data&&(t=e.nextSibling,!(!t||t.nodeName===`BR`));)md(e),e=t;if(!e||e.nodeName===`BR`||e instanceof Text)break;o=e}return t=tf(o,0),this.setSelection(t),this._updatePath(t,!0),this}forEachBlock(e,t,n){n||=this.getSelection(),t&&this.saveUndoState(n);let r=this._root,i=Yd(n,r),a=Xd(n,r);if(i&&a)do if(e(i)||i===a)break;while(i=qd(i,r));return t&&(this.setSelection(n),this._updatePath(n,!0)),this}modifyBlocks(e,t){t||=this.getSelection(),this._recordUndoState(t,this._isInUndoState);let n=this._root;ef(t,n),Td(t,n,n,n);let r=rf(t,n,n);if(!t.collapsed){let e=t.endContainer;if(e===n)t.collapse(!1);else{for(;e.parentNode!==n;)e=e.parentNode;t.setStartBefore(e),t.collapse(!0)}}return nf(t,e.call(this,r)),t.endOffset{let n=t.className.split(/\s+/).filter(e=>!!e&&!/^align/.test(e)).join(` `);e?(t.className=n+` align-`+e,t.style.textAlign=e):(t.className=n,t.style.textAlign=``)},!0),this.focus()}setTextDirection(e){return this.forEachBlock(t=>{e?t.dir=e:t.removeAttribute(`dir`)},!0),this.focus()}_getListSelection(e,t){let n=e.commonAncestorContainer,r=e.startContainer,i=e.endContainer;for(;n&&n!==t&&!/^[OU]L$/.test(n.nodeName);)n=n.parentNode;if(!n||n===t)return null;for(r===n&&(r=r.childNodes[e.startOffset]),i===n&&(i=i.childNodes[e.endOffset]);r&&r.parentNode!==n;)r=r.parentNode;for(;i&&i.parentNode!==n;)i=i.parentNode;return[n,r,i]}increaseListLevel(e){e||=this.getSelection();let t=this._root,n=this._getListSelection(e,t);if(!n)return this.focus();let[r,i,a]=n;if(!i||i===r.firstChild)return this.focus();this._recordUndoState(e,this._isInUndoState);let o=r.nodeName,s=i.previousSibling,c,l;s.nodeName!==o&&(c=this._config.tagAttributes[o.toLowerCase()],s=Q(o,c),r.insertBefore(s,i));do l=i===a?null:i.nextSibling,s.appendChild(i);while(i=l);return l=s.nextSibling,l&&Nd(l,t),this._getRangeAndRemoveBookmark(e),this.setSelection(e),this._updatePath(e,!0),this.focus()}decreaseListLevel(e){e||=this.getSelection();let t=this._root,n=this._getListSelection(e,t);if(!n)return this.focus();let[r,i,a]=n;i||=r.firstChild,a||=r.lastChild,this._recordUndoState(e,this._isInUndoState);let o,s=null;if(i){let e=r.parentNode;if(s=a.nextSibling?kd(r,a.nextSibling,e,t):r.nextSibling,e!==t&&e.nodeName===`LI`){for(e=e.parentNode;s;)o=s.nextSibling,a.appendChild(s),s=o;s=r.parentNode.nextSibling}let n=!/^[OU]L$/.test(e.nodeName);do o=i===a?null:i.nextSibling,r.removeChild(i),n&&i.nodeName===`LI`&&(i=this.createDefaultBlock([pd(i)])),e.insertBefore(i,s);while(i=o)}return r.firstChild||md(r),s&&Nd(s,t),this._getRangeAndRemoveBookmark(e),this.setSelection(e),this._updatePath(e,!0),this.focus()}_makeList(e,t){let n=Gd(e,this._root),r=this._config.tagAttributes,i=r[t.toLowerCase()],a=r.li,o;for(;o=n.nextNode();)if(o.parentNode instanceof HTMLLIElement&&(o=o.parentNode,n.currentNode=o.lastChild),o instanceof HTMLLIElement){o=o.parentNode;let e=o.nodeName;e!==t&&/^[OU]L$/.test(e)&&hd(o,Q(t,i,[pd(o)]))}else{let e=Q(`LI`,a);o.dir&&(e.dir=o.dir);let r=o.previousSibling;r&&r.nodeName===t?(r.appendChild(e),md(o)):hd(o,Q(t,i,[e])),e.appendChild(pd(o)),n.currentNode=e}return e}makeUnorderedList(){return this.modifyBlocks(e=>this._makeList(e,`UL`)),this.focus()}makeOrderedList(){return this.modifyBlocks(e=>this._makeList(e,`OL`)),this.focus()}removeList(){return this.modifyBlocks(e=>{let t=e.querySelectorAll(`UL, OL`),n=e.querySelectorAll(`LI`),r=this._root;for(let e=0,n=t.length;eQ(`BLOCKQUOTE`,this._config.tagAttributes.blockquote,[e]),e),this.focus()}decreaseQuoteLevel(e){return this.modifyBlocks(e=>(Array.from(e.querySelectorAll(`blockquote`)).filter(t=>!ld(t.parentNode,e,`BLOCKQUOTE`)).forEach(e=>{hd(e,pd(e))}),e),e),this.focus()}removeQuote(e){return this.modifyBlocks(e=>(Array.from(e.querySelectorAll(`blockquote`)).forEach(e=>{hd(e,pd(e))}),e),e),this.focus()}replaceWithBlankLine(e){return this.modifyBlocks(()=>this.createDefaultBlock([Q(`INPUT`,{id:this.startSelectionId,type:`hidden`}),Q(`INPUT`,{id:this.endSelectionId,type:`hidden`})]),e),this.focus()}code(){let e=this.getSelection();return e.collapsed||od(e.commonAncestorContainer)?(this.modifyBlocks(e=>{let t=this._root,n=document.createDocumentFragment(),r=Gd(e,t),i;for(;i=r.nextNode();){let e=i.querySelectorAll(`BR`),t=[],r=e.length;for(let n=0;n{let t=this._root,n=e.querySelectorAll(`PRE`),r=n.length;for(;r--;){let e=n[r],i=new zu(e,4),a;for(;a=i.nextNode();){let e=a.data;e=e.replace(/ (?= )/g,`\xA0`);let t=document.createDocumentFragment(),n;for(;(n=e.indexOf(` +`))>-1;)t.appendChild(document.createTextNode(e.slice(0,n))),t.appendChild(Q(`BR`)),e=e.slice(n+1);a.parentNode.insertBefore(t,a),a.data=e}Od(e,t),hd(e,pd(e))}return e},e),this.focus()):this.changeFormat(null,{tag:`CODE`},e),this}toggleCode(){return this.hasFormat(`PRE`)||this.hasFormat(`CODE`)?this.removeCode():this.code(),this}_removeFormatting(e,t){for(let n=e.firstChild,r;n;n=r){if(r=n.nextSibling,Z(n)){if(n instanceof Text||n.nodeName===`BR`||n.nodeName===`IMG`){t.appendChild(n);continue}}else if(ad(n)){t.appendChild(this.createDefaultBlock([this._removeFormatting(n,document.createDocumentFragment())]));continue}this._removeFormatting(n,t)}return t}removeAllFormatting(e){if(e||=this.getSelection(),e.collapsed)return this.focus();let t=this._root,n=e.commonAncestorContainer;for(;n&&!ad(n);)n=n.parentNode;if(n||=(ef(e,t),t),n instanceof Text)return this.focus();this.saveUndoState(e),Td(e,n,n,t);let r=e.startContainer,i=e.startOffset,a=e.endContainer,o=e.endOffset,s=document.createDocumentFragment(),c=document.createDocumentFragment(),l=kd(a,o,n,t),u=kd(r,i,n,t),d;for(;u!==l;)d=u.nextSibling,s.appendChild(u),u=d;if(this._removeFormatting(s,c),c.normalize(),u=c.firstChild,d=c.lastChild,u){n.insertBefore(c,l);let e=Array.from(n.childNodes);i=e.indexOf(u),o=d?e.indexOf(d)+1:0}else l&&(i=Array.from(n.childNodes).indexOf(l),o=i);return e.setStart(n,i),e.setEnd(n,o),jd(n,e),wd(e),this.setSelection(e),this._updatePath(e,!0),this.focus()}},Ff={ADD_DATA_URI_TAGS:[`img`],ALLOW_UNKNOWN_PROTOCOLS:!0,FORCE_BODY:!1,RETURN_DOM:!0,RETURN_DOM_FRAGMENT:!0,WHOLE_DOCUMENT:!1};function If(e){let t=ns.sanitize(e,Ff);return t?document.importNode(t,!0):document.createDocumentFragment()}var Lf=new Set(`ADDRESS.ARTICLE.ASIDE.BLOCKQUOTE.DD.DIV.DL.DT.FIGCAPTION.FIGURE.FOOTER.H1.H2.H3.H4.H5.H6.HEADER.LI.OL.P.PRE.SECTION.TABLE.TBODY.TD.TFOOT.TH.THEAD.TR.UL`.split(`.`));function Rf(e){let t=``,n=()=>{t&&!t.endsWith(` +`)&&(t+=` +`)},r=e=>{if(e.nodeType===Node.TEXT_NODE){t+=e.nodeValue??``;return}if(e.nodeType!==Node.ELEMENT_NODE&&e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE)return;if(e.nodeName===`BR`){t+=` +`;return}let i=e.nodeType===Node.ELEMENT_NODE&&Lf.has(e.nodeName);i&&n(),e.childNodes.forEach(r),i&&n()};return e.childNodes.forEach(r),t.replace(/\n+$/u,``)}var zf=`14px`,Bf=`#e5e7eb`,$=`#fef3c7`,Vf=[`style`,`font`,`insert`,`lists`,`alignment`],Hf=new Set(`ADDRESS.ARTICLE.ASIDE.BLOCKQUOTE.DD.DIV.DL.DT.FIGURE.FIGCAPTION.FOOTER.H1.H2.H3.H4.H5.H6.HEADER.LI.OL.P.PRE.SECTION.TABLE.TBODY.TD.TFOOT.TH.THEAD.TR.UL`.split(`.`)),Uf=[{label:`Sans`,value:`Arial, sans-serif`},{label:`Serif`,value:`Georgia, serif`},{label:`Mono`,value:`"Courier New", monospace`},{label:`Verdana`,value:`Verdana, sans-serif`},{label:`Times`,value:`"Times New Roman", serif`}],Wf=[{label:`Small`,value:`12px`},{label:`Normal`,value:zf},{label:`Large`,value:`18px`},{label:`Huge`,value:`24px`}],Gf=[{label:`Default`,value:``},...Uf],Kf=[{label:`Align left`,value:`left`,icon:Fe},{label:`Align center`,value:`center`,icon:Ne},{label:`Align right`,value:`right`,icon:Me},{label:`Align justify`,value:`justify`,icon:Pe}],qf=`button, summary, input, select`,Jf={bold:!1,italic:!1,underline:!1,strikethrough:!1,subscript:!1,superscript:!1,code:!1,link:!1,unorderedList:!1,orderedList:!1,quote:!1,canUndo:!1,canRedo:!1,fontFamily:``,fontSize:zf,textColor:Bf,highlightColor:$,alignment:`left`,direction:`ltr`};function Yf(e,t){if(/^#[0-9a-f]{6}$/i.test(e||``))return e;let n=(e||``).match(/^rgb\(\s*(\d+),\s*(\d+),\s*(\d+)\s*\)$/i);return n?`#${n.slice(1).map(e=>Number(e).toString(16).padStart(2,`0`)).join(``)}`:t}function Xf(e){let t=(e||``).split(`,`)[0].replace(/["']/g,``).trim().toLowerCase();return Uf.find(e=>e.value.split(`,`)[0].replace(/["']/g,``).trim().toLowerCase()===t)?.value||``}function Zf(e){if(!e)return null;let t=e=>{let t=e instanceof Element?e:e.parentElement;return t&&getComputedStyle(t).fontSize||zf},n=e.commonAncestorContainer;if(e.collapsed||n instanceof Text)return t(e.startContainer);let r=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT),i=null,a;for(;a=r.nextNode();){if(!(a instanceof Text)&&a.nodeName!==`BR`&&a.nodeName!==`IMG`||!e.intersectsNode(a)||a instanceof Text&&(!a.length||a===e.startContainer&&e.startOffset===a.length||a===e.endContainer&&e.endOffset===0))continue;let n=t(a);if(i!==null&&i!==n)return null;i=n}return i}function Qf(e,t){return RegExp(`(?:^|>)${t}(?:$|[.#\\[])`).test(e)||RegExp(`(?:^|>)${t}(?:>|$)`).test(e)}function $f(e){if(!e)return 0;let t=window.getComputedStyle(e);return(e.getBoundingClientRect().width||(e instanceof HTMLElement?e.offsetWidth:0))+Number.parseFloat(t.marginLeft||`0`)+Number.parseFloat(t.marginRight||`0`)}var ep=(0,C.forwardRef)(function({contentKey:e,initialHtml:t,accessibleLabel:n=`Rich text editor`,onUpdate:r},i){let a=(0,C.useRef)(null),o=(0,C.useRef)(null),s=(0,C.useRef)(null),c=(0,C.useRef)(null),l=(0,C.useRef)(null),u=(0,C.useRef)(new Map),d=(0,C.useRef)(null),f=(0,C.useRef)(r);f.current=r;let[p,m]=(0,C.useState)(Jf),h=(0,C.useRef)(p);h.current=p;let[g,_]=(0,C.useState)([...Vf]),[v,y]=(0,C.useState)({open:!1,hasLink:!1,url:``,error:null}),b=Dr(),x=Or(),S=(0,C.useCallback)(()=>{let e=c.current,t=a.current;return!e||!t?{html:``,text:``}:{html:e.getHTML(),text:Rf(t).replace(/​/gu,``).replace(/\n+$/u,``)}},[]),w=(0,C.useCallback)(()=>{try{l.current=c.current?.getSelection().cloneRange()??null}catch{l.current=null}},[]),T=(0,C.useCallback)(()=>{let e=c.current;if(!(!e||!l.current))try{e.setSelection(l.current)}catch{l.current=null}},[]),E=(0,C.useCallback)((e=null)=>{let t=c.current;if(!t)return;let n=null;try{n=t.getSelection()}catch{n=null}let r=e??t.getPath(),i=e=>r&&r!==`(selection)`?Qf(r,e):!!n&&!!t.hasFormat(e,null,n),a=n?t.getFontInfo(n):{},o=null,s=null,l=!1;n&&t.forEachBlock(e=>{let t=getComputedStyle(e),n=t.direction===`rtl`?`rtl`:`ltr`,r=t.textAlign.replace(/^-(?:moz|webkit)-/,``),i=r;return!r||r===`start`||r===`auto`?i=n===`rtl`?`right`:`left`:r===`end`&&(i=n===`rtl`?`left`:`right`),o=!l||o===i?i:null,s=!l||s===n?n:null,l=!0,o===null&&s===null},!1,n);let u=h.current;m({...u,bold:i(`B`),italic:i(`I`),underline:i(`U`),strikethrough:i(`S`),subscript:i(`SUB`),superscript:i(`SUP`),code:i(`CODE`)||i(`PRE`),link:i(`A`),unorderedList:i(`UL`),orderedList:i(`OL`),quote:/(?:^|>)BLOCKQUOTE/.test(r),fontFamily:Xf(a.fontFamily),fontSize:Zf(n),textColor:Yf(a.color,u.textColor||Bf),highlightColor:Yf(a.backgroundColor,u.highlightColor||$),alignment:o,direction:s})},[]),D=(0,C.useCallback)(()=>{f.current(S())},[S]),ee=(0,C.useCallback)(()=>{let e=c.current;if(!e)return;let t=e.getRoot(),n=null;Array.from(t.childNodes).forEach(e=>{if(!(!(e.nodeType===Node.ELEMENT_NODE&&Hf.has(e.nodeName))&&(e.nodeType===Node.TEXT_NODE?e.data.length>0:e.nodeType===Node.ELEMENT_NODE))){n=null;return}n||(n=document.createElement(`div`),t.insertBefore(n,e)),n.appendChild(e)})},[]),k=(0,C.useCallback)((e,{restore:t=!0}={})=>{let n=c.current;n&&(t&&(n.focus(),T()),ee(),e(n),D(),w(),E(),t&&n.focus())},[ee,w,T,D,E]),A=(0,C.useCallback)((e,t,n=null,r=e.getSelection())=>{ee(),e.hasFormat(t,null,r)?e.changeFormat(null,{tag:t},r):e.changeFormat({tag:t},n,r)},[ee]),ne=(e,t=null)=>{k(n=>A(n,e,t,n.getSelection()))},re=e=>{k(t=>{t.hasFormat(e)?t.removeList():e===`UL`?t.makeUnorderedList():t.makeOrderedList()})},ie=e=>{k(t=>e>0?t.increaseQuoteLevel():t.decreaseQuoteLevel())},ae=(0,C.useCallback)(e=>{let t=c.current;if(!t)return;w(),e&&Wr(e);let n=(l.current??t.getSelection()).startContainer,r=(n.nodeType===Node.ELEMENT_NODE?n:n.parentElement)?.closest(`a`),i=t.getSelectedText().trim();y({open:!0,hasLink:r!==null,url:r?.getAttribute(`href`)??(/^https?:\/\//i.test(i)||/^mailto:/i.test(i)?i:``),error:null}),requestAnimationFrame(()=>{s.current?.focus(),s.current?.select()})},[w]);(0,C.useLayoutEffect)(()=>{let e=a.current;if(!e)return;let n=new Pf(e,{sanitizeToDOMFragment:If});c.current=n,n.setHTML(t||`


`);let r=()=>{D(),w(),E()},i=e=>{w(),E(e.detail?.path??null)},o=()=>{w(),E()};n.addEventListener(`input`,r),n.addEventListener(`pathChange`,i),n.addEventListener(`select`,o),n.addEventListener(`cursor`,o),n.addEventListener(`undoStateChange`,e=>{let t=e.detail;m(e=>({...e,canUndo:!!t?.canUndo,canRedo:!!t?.canRedo}))});let s=(e,t)=>{n.setKeyHandler(e,(e,n,r)=>{n.preventDefault(),t(e,r),ee(),D(),l.current=r.cloneRange(),E()})};return[`Ctrl-b`,`Ctrl-B`,`Meta-b`,`Meta-B`].forEach(e=>s(e,(e,t)=>A(e,`B`,null,t))),[`Ctrl-i`,`Ctrl-I`,`Meta-i`,`Meta-I`].forEach(e=>s(e,(e,t)=>A(e,`I`,null,t))),[`Ctrl-u`,`Ctrl-U`,`Meta-u`,`Meta-U`].forEach(e=>s(e,(e,t)=>A(e,`U`,null,t))),[`Ctrl-z`,`Meta-z`].forEach(e=>s(e,e=>e.undo())),[`Ctrl-y`,`Meta-y`,`Ctrl-Shift-z`,`Ctrl-Shift-Z`,`Meta-Shift-z`,`Meta-Shift-Z`].forEach(e=>s(e,e=>e.redo())),[`Ctrl-k`,`Meta-k`].forEach(e=>{n.setKeyHandler(e,(e,t,n)=>{t.preventDefault(),l.current=n.cloneRange(),ae()})}),D(),E(),()=>{n.destroy(),c.current=null,l.current=null}},[e]),(0,C.useImperativeHandle)(i,()=>({focus:()=>c.current?.focus(),getContent:S}),[S]);let oe=(0,C.useCallback)(()=>{let e=o.current;if(!e)return;e.querySelectorAll(`[data-toolbar-group]`).forEach(e=>{let t=e.dataset.toolbarGroup,n=$f(e);t&&n>0&&u.current.set(t,n)});let t=e.clientWidth||e.getBoundingClientRect().width;if(!t)return;let n=$f(e.querySelector(`.toolbar-more`))||70,r=[...Vf],i=()=>n+r.length*4+r.reduce((e,t)=>e+(u.current.get(t)??0),0);for(;r.length>1&&i()>t;)r.pop();_(e=>e.join(`|`)===r.join(`|`)?e:r)},[]);(0,C.useLayoutEffect)(()=>{oe();let e=o.current;if(!e)return;let t=new ResizeObserver(()=>oe());return t.observe(e),window.addEventListener(`resize`,oe),()=>{t.disconnect(),window.removeEventListener(`resize`,oe)}},[oe]);let se=(0,C.useCallback)(()=>{let e=o.current;return e?[...e.querySelectorAll(qf)].filter(e=>!e.closest(`.app-dropdown__menu`)):[]},[]),j=(0,C.useCallback)(()=>{let e=se();(!d.current||!e.includes(d.current))&&(d.current=e[0]??null),e.forEach(e=>{let t=e===d.current?0:-1;e.tabIndex!==t&&(e.tabIndex=t)})},[se]);(0,C.useLayoutEffect)(()=>{j()});function ce(e){let t=e.target;!(t instanceof HTMLElement)||!se().includes(t)||(d.current=t,j())}function de(e){let t=se(),n=t.indexOf(e.target);if(n===-1)return;let r;switch(e.key){case`ArrowRight`:r=(n+1)%t.length;break;case`ArrowLeft`:r=(n-1+t.length)%t.length;break;case`Home`:r=0;break;case`End`:r=t.length-1;break;default:return}e.preventDefault(),t[r].focus()}(0,C.useEffect)(()=>{y({open:!1,hasLink:!1,url:``,error:null})},[e]);function he(e){e.preventDefault();let t=v.url.trim(),n=!1;try{let e=new URL(t).protocol.toLowerCase();n=e===`http:`||e===`https:`||e===`mailto:`}catch{n=!1}if(!n){y(e=>({...e,error:`Enter an HTTP, HTTPS, or mailto URL.`})),s.current?.focus();return}k(e=>e.makeLink(t)),y(e=>({...e,open:!1,error:null}))}function ge(){y(e=>({...e,open:!1,error:null})),c.current?.focus(),T()}let _e=e=>g.includes(e),N=e=>e.preventDefault(),P=Uf.find(e=>e.value===p.fontFamily)?.label??`Font`,ve=Wf.find(e=>e.value===p.fontSize)?.label??`Size`,ye=e=>e?(0,B.jsx)(te,{size:15,"aria-hidden":`true`}):(0,B.jsx)(`span`,{"aria-hidden":`true`});return(0,B.jsxs)(`div`,{className:`rich-text-editor`,children:[(0,B.jsxs)(`div`,{ref:o,className:`compose-toolbar`,role:`toolbar`,"aria-label":`Rich text formatting`,onPointerDownCapture:w,onFocus:ce,onKeyDown:de,children:[_e(`style`)?(0,B.jsxs)(`div`,{className:`toolbar-group`,"data-toolbar-group":`style`,children:[(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.bold?` active`:``}`,"aria-label":`Bold`,"aria-keyshortcuts":`${x}+B`,title:`Bold (${b}+B)`,onMouseDown:N,onClick:()=>ne(`B`),children:(0,B.jsx)(O,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.italic?` active`:``}`,"aria-label":`Italic`,"aria-keyshortcuts":`${x}+I`,title:`Italic (${b}+I)`,onMouseDown:N,onClick:()=>ne(`I`),children:(0,B.jsx)(ue,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.underline?` active`:``}`,"aria-label":`Underline`,"aria-keyshortcuts":`${x}+U`,title:`Underline (${b}+U)`,onMouseDown:N,onClick:()=>ne(`U`),children:(0,B.jsx)(Le,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.strikethrough?` active`:``}`,"aria-label":`Strikethrough`,title:`Strikethrough`,onMouseDown:N,onClick:()=>ne(`S`),children:(0,B.jsx)(ke,{size:15})})]}):null,_e(`font`)?(0,B.jsxs)(`div`,{className:`toolbar-group`,"data-toolbar-group":`font`,children:[(0,B.jsxs)(Gr,{className:`toolbar-dropdown`,children:[(0,B.jsx)(`summary`,{className:`app-dropdown__summary toolbar-button toolbar-more__summary`,"aria-label":`Font family`,title:`Font family`,onMouseDown:N,children:P}),(0,B.jsx)(`div`,{className:`app-dropdown__menu toolbar-more__menu`,role:`menu`,"aria-label":`Font family`,children:Gf.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.fontFamily===e.value,onMouseDown:N,onClick:t=>{Wr(t),k(t=>t.setFontFace(e.value||null))},children:[ye(p.fontFamily===e.value),(0,B.jsx)(`span`,{style:e.value?{fontFamily:e.value}:void 0,children:e.label})]},e.value))})]}),(0,B.jsxs)(Gr,{className:`toolbar-dropdown`,children:[(0,B.jsx)(`summary`,{className:`app-dropdown__summary toolbar-button toolbar-more__summary`,"aria-label":`Font size`,title:`Font size`,onMouseDown:N,children:ve}),(0,B.jsx)(`div`,{className:`app-dropdown__menu toolbar-more__menu`,role:`menu`,"aria-label":`Font size`,children:Wf.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.fontSize===e.value,onMouseDown:N,onClick:t=>{Wr(t),k(t=>t.setFontSize(e.value||null))},children:[ye(p.fontSize===e.value),(0,B.jsx)(`span`,{children:e.label})]},e.value))})]}),(0,B.jsxs)(`label`,{className:`toolbar-color`,title:`Text color`,children:[(0,B.jsx)(`span`,{children:`A`}),(0,B.jsx)(`input`,{type:`color`,value:p.textColor,"aria-label":`Text color`,onMouseDown:w,onChange:e=>k(t=>t.setTextColor(e.target.value||null))})]}),(0,B.jsxs)(`label`,{className:`toolbar-color`,title:`Highlight color`,children:[(0,B.jsx)(M,{size:15}),(0,B.jsx)(`input`,{type:`color`,value:p.highlightColor,"aria-label":`Highlight color`,onMouseDown:w,onChange:e=>k(t=>t.setHighlightColor(e.target.value||null))})]})]}):null,_e(`insert`)?(0,B.jsxs)(`div`,{className:`toolbar-group`,"data-toolbar-group":`insert`,children:[(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button`,"aria-label":`Insert image`,title:`Insert image`,onMouseDown:N,children:(0,B.jsx)(le,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.link?` active`:``}`,"aria-label":`Insert or remove link`,"aria-keyshortcuts":`${x}+K`,title:`Insert or remove link (${b}+K)`,onMouseDown:N,onClick:()=>ae(),children:(0,B.jsx)(fe,{size:15})})]}):null,_e(`lists`)?(0,B.jsxs)(`div`,{className:`toolbar-group`,"data-toolbar-group":`lists`,children:[(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.unorderedList?` active`:``}`,"aria-label":`Bulleted list`,title:`Bulleted list`,onMouseDown:N,onClick:()=>re(`UL`),children:(0,B.jsx)(me,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.orderedList?` active`:``}`,"aria-label":`Numbered list`,title:`Numbered list`,onMouseDown:N,onClick:()=>re(`OL`),children:(0,B.jsx)(pe,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.quote?` active`:``}`,"aria-label":`Quote`,title:`Quote`,onMouseDown:N,onClick:()=>ie(1),children:(0,B.jsx)(be,{size:15,className:`icon-mirrored`})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button`,"aria-label":`Unquote`,title:`Unquote`,onMouseDown:N,onClick:()=>ie(-1),children:(0,B.jsx)(be,{size:15})})]}):null,_e(`alignment`)?(0,B.jsx)(`div`,{className:`toolbar-group`,"data-toolbar-group":`alignment`,children:Kf.map(e=>{let t=e.icon;return(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button`,"aria-label":e.label,title:e.label,onMouseDown:N,onClick:()=>k(t=>t.setTextAlignment(e.value)),children:(0,B.jsx)(t,{size:15})},e.value)})}):null,(0,B.jsxs)(Gr,{className:`toolbar-more`,children:[(0,B.jsx)(`summary`,{className:`app-dropdown__summary toolbar-button toolbar-more__summary`,onMouseDown:N,children:`More`}),(0,B.jsxs)(`div`,{className:`app-dropdown__menu toolbar-more__menu`,role:`menu`,"aria-label":`More formatting options`,children:[_e(`font`)?null:(0,B.jsxs)(`div`,{className:`toolbar-menu-section`,role:`group`,"aria-label":`Font formatting`,children:[(0,B.jsx)(`span`,{className:`app-dropdown__heading toolbar-menu-heading`,"aria-hidden":`true`,children:`Font`}),Gf.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.fontFamily===e.value,"aria-label":`Font: ${e.label}`,onMouseDown:N,onClick:()=>k(t=>t.setFontFace(e.value||null)),children:[ye(p.fontFamily===e.value),(0,B.jsx)(`span`,{style:e.value?{fontFamily:e.value}:void 0,children:e.label})]},`font-${e.value}`)),(0,B.jsx)(`span`,{className:`app-dropdown__heading toolbar-menu-heading`,"aria-hidden":`true`,children:`Size`}),Wf.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.fontSize===e.value,"aria-label":`Size: ${e.label}`,onMouseDown:N,onClick:()=>k(t=>t.setFontSize(e.value||null)),children:[ye(p.fontSize===e.value),(0,B.jsx)(`span`,{children:e.label})]},`size-${e.value}`)),(0,B.jsxs)(`label`,{className:`toolbar-menu-field`,children:[(0,B.jsx)(`span`,{children:`Text color`}),(0,B.jsx)(`input`,{type:`color`,value:p.textColor,"aria-label":`Text color`,onMouseDown:w,onChange:e=>k(t=>t.setTextColor(e.target.value||null))})]}),(0,B.jsxs)(`label`,{className:`toolbar-menu-field`,children:[(0,B.jsx)(`span`,{children:`Highlight`}),(0,B.jsx)(`input`,{type:`color`,value:p.highlightColor,"aria-label":`Highlight color`,onMouseDown:w,onChange:e=>k(t=>t.setHighlightColor(e.target.value||null))})]})]}),_e(`insert`)?null:(0,B.jsxs)(`div`,{className:`toolbar-menu-section`,role:`group`,"aria-label":`Insert`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitem`,onMouseDown:N,children:[(0,B.jsx)(le,{size:15}),(0,B.jsx)(`span`,{children:`Insert image`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitem`,"aria-label":`Insert or remove link`,onMouseDown:N,onClick:e=>ae(e),children:[(0,B.jsx)(fe,{size:15}),(0,B.jsx)(`span`,{children:`Link`})]})]}),_e(`lists`)?null:(0,B.jsxs)(`div`,{className:`toolbar-menu-section`,role:`group`,"aria-label":`Lists and quoting`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemcheckbox`,"aria-checked":p.unorderedList,onMouseDown:N,onClick:()=>re(`UL`),children:[ye(p.unorderedList),(0,B.jsx)(`span`,{children:`Bulleted list`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemcheckbox`,"aria-checked":p.orderedList,onMouseDown:N,onClick:()=>re(`OL`),children:[ye(p.orderedList),(0,B.jsx)(`span`,{children:`Numbered list`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitem`,onMouseDown:N,onClick:()=>ie(1),children:[(0,B.jsx)(be,{size:15,className:`icon-mirrored`}),(0,B.jsx)(`span`,{children:`Quote`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitem`,onMouseDown:N,onClick:()=>ie(-1),children:[(0,B.jsx)(be,{size:15}),(0,B.jsx)(`span`,{children:`Unquote`})]})]}),_e(`alignment`)?null:(0,B.jsx)(`div`,{className:`toolbar-menu-section`,role:`group`,"aria-label":`Alignment`,children:Kf.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.alignment===e.value,onMouseDown:N,onClick:()=>k(t=>t.setTextAlignment(e.value)),children:[ye(p.alignment===e.value),(0,B.jsx)(`span`,{children:e.label})]},e.value))}),(0,B.jsxs)(`div`,{className:`toolbar-menu-section`,role:`group`,"aria-label":`More formatting`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.direction===`ltr`,onMouseDown:N,onClick:()=>k(e=>e.setTextDirection(`ltr`)),children:[ye(p.direction===`ltr`),(0,B.jsx)(`span`,{children:`Left-to-right`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.direction===`rtl`,onMouseDown:N,onClick:()=>k(e=>e.setTextDirection(`rtl`)),children:[ye(p.direction===`rtl`),(0,B.jsx)(`span`,{children:`Right-to-left`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemcheckbox`,"aria-checked":p.subscript,onMouseDown:N,onClick:()=>ne(`SUB`,{tag:`SUP`}),children:[ye(p.subscript),(0,B.jsx)(`span`,{children:`Subscript`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemcheckbox`,"aria-checked":p.superscript,onMouseDown:N,onClick:()=>ne(`SUP`,{tag:`SUB`}),children:[ye(p.superscript),(0,B.jsx)(`span`,{children:`Superscript`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemcheckbox`,"aria-checked":p.code,onMouseDown:N,onClick:()=>k(e=>e.toggleCode()),children:[ye(p.code),(0,B.jsx)(`span`,{children:`Code`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitem`,onMouseDown:N,onClick:()=>k(e=>e.removeAllFormatting()),children:[(0,B.jsx)(F,{size:15}),(0,B.jsx)(`span`,{children:`Clear formatting`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,disabled:!p.canUndo,role:`menuitem`,"aria-label":`Undo`,onMouseDown:N,onClick:()=>k(e=>e.undo()),children:[(0,B.jsx)(Re,{size:15}),(0,B.jsx)(`span`,{children:`Undo`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,disabled:!p.canRedo,role:`menuitem`,"aria-label":`Redo`,onMouseDown:N,onClick:()=>k(e=>e.redo()),children:[(0,B.jsx)(xe,{size:15}),(0,B.jsx)(`span`,{children:`Redo`})]})]})]})]})]}),v.open?(0,B.jsxs)(`form`,{className:`editor-link-form`,onSubmit:he,onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),ge())},children:[(0,B.jsxs)(`label`,{className:`editor-link-form__field`,children:[(0,B.jsx)(`span`,{children:`Link URL`}),(0,B.jsx)(`input`,{ref:s,value:v.url,onChange:e=>y(t=>({...t,url:e.target.value})),type:`url`,inputMode:`url`,autoComplete:`url`,placeholder:`https://example.com`,"aria-invalid":v.error?`true`:void 0})]}),v.error?(0,B.jsx)(`p`,{className:`editor-link-form__error`,role:`alert`,children:v.error}):null,(0,B.jsxs)(`div`,{className:`editor-link-form__actions`,children:[(0,B.jsx)(Br,{variant:`outline`,onClick:ge,children:`Cancel`}),v.hasLink?(0,B.jsx)(Br,{variant:`outline`,onClick:()=>{k(e=>e.removeLink()),y(e=>({...e,open:!1}))},children:`Remove link`}):null,(0,B.jsx)(Br,{formAction:`submit`,children:`Apply link`})]})]}):null,(0,B.jsx)(`div`,{className:`editor-wrap`,tabIndex:-1,children:(0,B.jsx)(`div`,{ref:a,className:`editor`,contentEditable:!0,suppressContentEditableWarning:!0,role:`textbox`,"aria-label":n,"aria-multiline":`true`})})]})}),tp={to:`To`,cc:`Cc`,bcc:`Bcc`};function np(){let e=864e5,t=Math.floor(dt/e)*e,n=(8-new Date(dt).getUTCDay())%7||7;return[{id:`later-today`,label:`Later today`,targetAt:dt+3*36e5},{id:`tomorrow-morning`,label:`Tomorrow morning`,targetAt:t+e+8*36e5},{id:`tomorrow-afternoon`,label:`Tomorrow afternoon`,targetAt:t+e+13*36e5},{id:`monday-morning`,label:`Monday morning`,targetAt:t+n*e+8*36e5}]}function rp(e){return new Date(e).toLocaleString(ft,{weekday:`short`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,timeZone:`UTC`})}function ip(e){return e?e.name?`${e.name} <${e.email}>`:e.email:``}function ap({session:e}){let t=br.getState,n=br(e=>e.identities),r=e.presentation===`expanded`,[i,a]=(0,C.useState)(!1),[o,s]=(0,C.useState)(e.draft.cc.length>0),[c,l]=(0,C.useState)(e.draft.bcc.length>0),[u,d]=(0,C.useState)(null),f=(0,C.useRef)(null),p=(0,C.useRef)(null),m=(0,C.useRef)(null),{draft:h}=e,g=(0,C.useMemo)(np,[]),_=t=>r?`compose-${t}`:`compose-${e.id}-${t}`,v=r?`compose-title`:`compose-${e.id}-title`,y=r?`compose-from-label`:`compose-${e.id}-from-label`,b=r?`compose-subject`:`compose-${e.id}-subject`,x=hr(e),S=x?`Close options`:`Close`,w=n[h.fromIdx];(0,C.useEffect)(()=>{r&&requestAnimationFrame(()=>{e.draft.to.length===0?document.getElementById(_(`to`))?.focus():f.current?.focus()})},[r,e.id,e.draftEpoch]);let T=(0,C.useCallback)(n=>{t().updateDraft(e.id,{html:n.html,text:n.text})},[t,e.id]),E=(0,C.useCallback)((n,r)=>{t().updateDraft(e.id,{[n]:r})},[t,e.id]);function D(e){return lr.filter(t=>t!==e).flatMap(e=>h[e].filter(pr).map(e=>e.email))}function ee(e){e===`cc`?s(!0):l(!0),requestAnimationFrame(()=>document.getElementById(_(e))?.focus())}function O(t,n){if(t===`to`)return;let r=n.currentTarget,i=n.relatedTarget;i&&r.contains(i)||setTimeout(()=>{let n=br.getState().sessions.find(t=>t.id===e.id);!n||n.draft[t].length>0||(t===`cc`?s(!1):l(!1))})}function k(){t().send(e.id,u?{targetAt:u.targetAt,label:rp(u.targetAt)}:null)}function ne(t){t.defaultPrevented||Ar(t.nativeEvent)||Mr(t.nativeEvent,{key:`Enter`,mod:!0})&&(t.preventDefault(),!e.closePromptOpen&&k())}let re=[`to`,...o?[`cc`]:[],...c?[`bcc`]:[]];return(0,B.jsx)(`div`,{ref:p,className:`compose-dialog${r?` compose-dialog--expanded`:``}${i?` compose-dialog--maximized`:``}`,style:r?void 0:{display:`none`},role:`dialog`,"aria-modal":`true`,"aria-labelledby":v,tabIndex:-1,onKeyDown:ne,children:(0,B.jsxs)(`div`,{className:`compose-dialog__card`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`h2`,{id:v,title:h.subject||`New Message`,children:h.subject||`New Message`}),(0,B.jsxs)(`div`,{className:`compose-dialog__window-actions`,children:[(0,B.jsx)(Vr,{className:`icon--minimize`,title:`Minimize`,"aria-label":`Minimize`,onClick:()=>t().minimize(e.id),children:(0,B.jsx)(N,{size:18,strokeWidth:1.65,"aria-hidden":`true`})}),(0,B.jsx)(Ur,{maximized:i,surface:`composer`,onToggle:()=>a(e=>!e)}),(0,B.jsxs)(Gr,{className:`compose-close-menu`,children:[(0,B.jsx)(`summary`,{ref:m,className:`compose-close-menu__trigger`,role:`button`,"aria-haspopup":`menu`,title:S,"aria-label":S,onClick:n=>{x||(n.preventDefault(),t().close(e.id))},children:(0,B.jsx)(Be,{size:18,strokeWidth:1.65,"aria-hidden":`true`})}),(0,B.jsxs)(`div`,{className:`app-dropdown__menu compose-close-menu__menu`,role:`menu`,"aria-label":`Close options`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item compose-close-menu__discard`,role:`menuitem`,onClick:n=>{Wr(n),t().discardDraft(e.id)},children:[(0,B.jsx)(Ie,{size:15,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Discard`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item`,role:`menuitem`,onClick:n=>{Wr(n),t().saveAndClose(e.id)},children:[(0,B.jsx)(Ce,{size:15,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Save Draft`})]})]})]})]})]}),(0,B.jsxs)(`div`,{className:`compose-dialog__body`,children:[(0,B.jsxs)(`div`,{className:`row`,children:[(0,B.jsx)(`label`,{id:y,children:`From`}),(0,B.jsxs)(Gr,{className:`from-picker`,"data-compose-from":!0,children:[(0,B.jsxs)(`summary`,{className:`app-dropdown__summary from-picker__summary`,"aria-labelledby":y,children:[w?(0,B.jsx)(`span`,{className:`from-picker__avatar`,"aria-hidden":`true`,style:hn(w.email),children:mn(w.name?.trim()||w.email)}):null,(0,B.jsx)(`span`,{className:`from-picker__summary-text`,children:ip(w)})]}),(0,B.jsx)(`div`,{className:`app-dropdown__menu from-picker__menu`,role:`menu`,"aria-label":`From identity`,children:n.map((n,r)=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item from-picker__option`,role:`menuitemradio`,"aria-checked":r===h.fromIdx,onClick:n=>{Wr(n),t().updateDraft(e.id,{fromIdx:r})},children:[(0,B.jsx)(`span`,{className:`from-picker__avatar`,"aria-hidden":`true`,style:hn(n.email),children:mn(n.name?.trim()||n.email)}),(0,B.jsxs)(`span`,{className:`from-picker__lines`,children:[n.name?(0,B.jsx)(`span`,{className:`from-picker__name`,children:n.name}):null,(0,B.jsx)(`span`,{className:`from-picker__email${n.name?``:` from-picker__email--primary`}`,children:n.email})]}),r===h.fromIdx?(0,B.jsx)(te,{size:15,className:`from-picker__check`}):null]},n.id))})]})]}),re.map(t=>(0,B.jsxs)(`div`,{className:`row row--recipient${t===`to`?` row--to`:``}`,onBlur:e=>O(t,e),children:[(0,B.jsx)(`label`,{htmlFor:_(t),children:tp[t]}),(0,B.jsx)(Lu,{inputId:_(t),label:tp[t],entries:h[t],taken:D(t),query:Ou,browseAll:ku,onEntriesChange:e=>E(t,e)},`${e.id}-${t}-${e.draftEpoch}`),t===`to`?(0,B.jsxs)(`div`,{className:`recipient-cc-toggles`,children:[o?null:(0,B.jsx)(`button`,{type:`button`,className:`recipient-toggle`,onClick:()=>ee(`cc`),children:`Cc`}),c?null:(0,B.jsx)(`button`,{type:`button`,className:`recipient-toggle`,onClick:()=>ee(`bcc`),children:`Bcc`})]}):null]},t)),(0,B.jsxs)(`div`,{className:`row`,children:[(0,B.jsx)(`label`,{htmlFor:b,children:`Subject`}),(0,B.jsx)(`input`,{id:b,type:`text`,value:h.subject,onInput:n=>t().updateDraft(e.id,{subject:n.currentTarget.value}),onChange:n=>t().updateDraft(e.id,{subject:n.target.value})})]}),(0,B.jsx)(ep,{ref:f,contentKey:e.id,initialHtml:e.editorHtmlBody,accessibleLabel:`Message body`,onUpdate:T}),(0,B.jsxs)(`footer`,{children:[(0,B.jsx)(Br,{variant:`outline`,"aria-label":`Attach files`,title:`Attach files`,iconLeft:(0,B.jsx)(ve,{size:17,"aria-hidden":`true`}),children:`Attach`}),(0,B.jsxs)(`div`,{className:`compose-send-split`,children:[(0,B.jsx)(Br,{className:`compose-send`,disabled:e.closePromptOpen,onClick:k,iconLeft:(0,B.jsx)(we,{size:16,strokeWidth:2,"aria-hidden":`true`}),children:`Send`}),(0,B.jsxs)(Gr,{className:`compose-schedule-menu`,children:[(0,B.jsxs)(`summary`,{className:`compose-schedule-menu__trigger${u?` compose-schedule-menu__trigger--selected`:``}`,role:`button`,"aria-haspopup":`menu`,"aria-label":u?`Schedule send: ${u.label}`:`Schedule send`,title:u?`${u.label} — ${rp(u.targetAt)}`:`Schedule send`,children:[u?(0,B.jsx)(`span`,{className:`compose-schedule-menu__selection`,children:u.label}):null,(0,B.jsx)(A,{size:16,strokeWidth:2,"aria-hidden":`true`})]}),(0,B.jsxs)(`div`,{className:`app-dropdown__menu compose-schedule-menu__menu`,role:`menu`,"aria-label":`Schedule send`,children:[u?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item compose-schedule-menu__item`,role:`menuitem`,onClick:e=>{Wr(e),d(null)},children:[(0,B.jsx)(`span`,{className:`compose-schedule-menu__label`,children:`Send now`}),(0,B.jsx)(`span`,{className:`compose-schedule-menu__secondary`,children:`Immediately`})]}),(0,B.jsx)(`div`,{className:`compose-schedule-menu__separator`,role:`separator`})]}):null,g.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item compose-schedule-menu__item`,role:`menuitem`,title:rp(e.targetAt),onClick:t=>{Wr(t),d(e)},children:[(0,B.jsx)(`span`,{className:`compose-schedule-menu__label`,children:e.label}),(0,B.jsx)(`span`,{className:`compose-schedule-menu__secondary`,children:rp(e.targetAt)})]},e.id))]})]})]})]})]}),e.closePromptOpen?(0,B.jsx)(`div`,{className:`compose-confirm-backdrop`,children:(0,B.jsxs)(`section`,{className:`compose-confirm`,role:`alertdialog`,"aria-modal":`true`,"aria-labelledby":`compose-close-title`,"aria-describedby":`compose-close-description`,tabIndex:-1,children:[(0,B.jsx)(`h3`,{id:`compose-close-title`,children:`Save this draft?`}),(0,B.jsx)(`p`,{id:`compose-close-description`,children:`Save your latest changes before closing this compose window.`}),(0,B.jsxs)(`div`,{className:`compose-confirm__actions`,children:[(0,B.jsx)(Br,{variant:`outline`,onClick:()=>t().cancelClose(e.id),children:`Cancel`}),(0,B.jsx)(Br,{variant:`outline`,onClick:()=>t().closeWithoutSaving(e.id),children:`Don't Save`}),(0,B.jsx)(Br,{onClick:()=>t().saveAndClose(e.id),children:`Save draft`})]})]})}):null]})})}function op(){let e=br(e=>e.sessions),t=e.filter(e=>e.presentation===`minimized`),n=br.getState;return(0,B.jsxs)(B.Fragment,{children:[e.map(e=>(0,B.jsx)(ap,{session:e},e.id)),t.length>0?(0,B.jsx)(`div`,{className:`compose-dock`,"aria-label":`Minimized compose windows`,children:t.map(e=>(0,B.jsxs)(`div`,{className:`compose-dock__item`,"data-session-id":e.id,children:[(0,B.jsx)(`button`,{type:`button`,className:`compose-dock__restore`,"aria-label":`Restore ${mr(e)}`,onClick:()=>n().restore(e.id),children:(0,B.jsx)(`span`,{className:`compose-dock__text`,children:(0,B.jsx)(`span`,{className:`compose-dock__title`,children:mr(e)})})}),(0,B.jsx)(`button`,{type:`button`,className:`compose-dock__close`,"aria-label":`Close ${mr(e)}`,onClick:()=>n().requestClose(e.id),children:`×`})]},e.id))}):null]})}var sp=4e3;function cp(){let e=z(e=>e.toasts),t=z(e=>e.dismissToast);return(0,C.useEffect)(()=>{if(e.length===0)return;let n=e[0],r=window.setTimeout(()=>t(n.id),sp);return()=>clearTimeout(r)},[e,t]),e.length===0?null:(0,B.jsx)(`div`,{className:`store-error-toast`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:e.map(e=>(0,B.jsxs)(`div`,{className:`store-error-toast__item store-error-toast__item--success`,children:[(0,B.jsx)(`span`,{className:`store-error-toast__message`,children:e.text}),(0,B.jsx)(`button`,{className:`store-error-toast__dismiss`,type:`button`,"aria-label":`Dismiss notification`,title:`Dismiss`,onClick:()=>t(e.id),children:(0,B.jsx)(Be,{size:14,strokeWidth:2,"aria-hidden":`true`})})]},e.id))})}var lp=typeof location<`u`&&new URLSearchParams(location.search).get(`animations`)===`off`,up=56,dp=6,fp=1024,pp=640,mp=lp?0:360,hp=50,gp=180,_p=420,vp=240;function yp(){let[e,t]=(0,C.useState)(()=>window.innerWidth);return(0,C.useEffect)(()=>{let e=()=>t(window.innerWidth);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),e}function bp(){let e=Cr(e=>e.theme),t=Cr(e=>e.space),n=Cr(e=>e.quickFilter),r=Cr(e=>e.folderListWidth),i=Cr(e=>e.messageColumnWidth),a=Cr(e=>e.quickFilterFocusRequest),o=z(e=>e.open.id),s=z(e=>e.selection.ids.size),c=z(e=>e.messages),l=br(e=>e.sessions.some(e=>e.presentation===`expanded`)),u=yp(),d=(0,C.useRef)(null),f=(0,C.useRef)(null),[p,m]=(0,C.useState)(!1),h=(0,C.useRef)(!1),[g,_]=(0,C.useState)(!1),v=o!=null&&s===0,y=u{let t=document.documentElement;t.classList.toggle(`dark`,e===`dark`),t.classList.toggle(`light`,e===`light`),t.style.colorScheme=e},[e]),(0,C.useEffect)(()=>{a!==0&&(f.current?.focus(),f.current?.select())},[a]),(0,C.useEffect)(()=>{_(!1)},[o]),(0,C.useEffect)(()=>{S||_(!1)},[S]),(0,C.useLayoutEffect)(()=>{let e=y||u{T.current=null,w(!0)},Math.max(0,mp-hp))},[v,u,t]),(0,C.useEffect)(()=>()=>{T.current!=null&&clearTimeout(T.current)},[]);let D=(0,C.useCallback)(()=>{m(e=>!e),h.current=!1},[]),ee=i+!!S*6;function O(){let e=d.current?.clientWidth||window.innerWidth,t=Math.max(0,e-up-(p?0:dp)),n=S?286+vp:280;return Math.min(_p,t-n)}let te=Tr({get:()=>Cr.getState().folderListWidth,set:e=>Cr.getState().setFolderListWidth(e),min:()=>gp,max:O}),A=Tr({get:()=>Cr.getState().messageColumnWidth,set:e=>Cr.getState().setMessageColumnWidth(e),min:()=>280,max:()=>xr}),ne={"--folder-list-width":`${r}px`,"--message-columns-width":`${ee}px`,"--message-list-min-width":`280px`,"--message-view-min-width":`${vp}px`,"--column-resizer-width":`${dp}px`,"--folder-list-transition-ms":`${mp}ms`},re=[`shell`,t===`mail`&&!S?`shell--message-view-hidden`:``,t===`mail`&&!x?`shell--message-list-hidden`:``,g?`shell--message-view-maximized`:``,p?`shell--folder-list-hidden`:``,t===`contacts`?`shell--contacts`:``,te.active||A.active?`shell--column-resizing`:``].filter(Boolean).join(` `),ie=t===`contacts`?`address book list`:`folder list`,ae=t===`contacts`?`Filter contacts or identities`:`Filter messages`,oe=e===`dark`?`Switch to light mode`:`Switch to dark mode`;function se(e){e!==Cr.getState().quickFilter&&(t===`mail`&&z.getState().open.id!=null&&z.getState().selectMessage(null),Cr.getState().setQuickFilter(e))}return(0,B.jsxs)(`div`,{ref:d,className:re,style:ne,children:[(0,B.jsxs)(`header`,{className:`quick-filter`,inert:g,"aria-hidden":g||void 0,children:[(0,B.jsxs)(`div`,{className:`quick-filter__brand`,children:[(0,B.jsx)(zr,{className:`quick-filter__glyph`,svg:He}),(0,B.jsx)(`span`,{className:`quick-filter__wordmark`,children:`Mail`})]}),(0,B.jsxs)(`div`,{className:`quick-filter__search`,role:`search`,children:[(0,B.jsx)(`input`,{ref:f,className:`quick-filter__input${n.length===0?` quick-filter__input--empty`:``}`,type:`search`,value:n,"aria-label":t===`contacts`?`Filter contacts or identities by name or email address`:`Quick Filter messages by from, to, or subject`,"aria-keyshortcuts":`/ Control+K`,placeholder:ae,autoComplete:`off`,spellCheck:!1,onInput:e=>se(e.currentTarget.value),onChange:e=>se(e.target.value)}),n.length===0?(0,B.jsx)(`kbd`,{className:`quick-filter__shortcut`,"aria-hidden":`true`,children:`/`}):(0,B.jsx)(`button`,{className:`quick-filter__clear`,type:`button`,"aria-label":`Clear Quick Filter`,title:`Clear Quick Filter`,onClick:()=>se(``),children:(0,B.jsx)(Be,{size:17,strokeWidth:2.25,"aria-hidden":`true`})})]}),(0,B.jsxs)(`div`,{className:`quick-filter__actions`,children:[(0,B.jsx)(`a`,{className:`quick-filter__action`,href:`#report-bug`,"aria-label":`Report a bug`,title:`Report a bug`,children:(0,B.jsx)(k,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(`a`,{className:`quick-filter__action`,href:`#feedback`,"aria-label":`Give feedback`,title:`Give feedback`,children:(0,B.jsx)(de,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(`button`,{className:`quick-filter__action theme-toggle`,type:`button`,"aria-label":oe,title:oe,onClick:()=>Cr.getState().toggleTheme(),children:e===`dark`?(0,B.jsx)(Ae,{size:18,strokeWidth:1.75,"aria-hidden":`true`}):(0,B.jsx)(P,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(ni,{}),(0,B.jsx)(ei,{})]})]}),(0,B.jsx)(Qr,{inert:g,active:t,unreadCount:E,folderListHidden:p,sidebarLabel:ie,onChange:e=>Cr.getState().setSpace(e),onToggleFolderList:D}),(0,B.jsx)(`div`,{className:`sidebar-slot${p?` sidebar-slot--hidden`:``}`,"aria-hidden":p||g||void 0,inert:p||g,children:t===`mail`?(0,B.jsxs)(`aside`,{className:`sidebar`,children:[(0,B.jsx)(`header`,{className:`sidebar__header`,children:(0,B.jsx)(Br,{className:`sidebar__compose`,onClick:()=>br.getState().open(),iconLeft:(0,B.jsx)(ye,{size:16,strokeWidth:2}),children:`New Message`})}),(0,B.jsx)(`div`,{className:`sidebar__account`,children:(0,B.jsx)(`span`,{className:`sidebar__account-name`,children:pt.email})}),(0,B.jsx)(ki,{}),(0,B.jsx)(`footer`,{className:`sidebar__footer`,children:(0,B.jsx)(ai,{})})]}):(0,B.jsx)(`div`,{className:`sidebar sidebar--contacts`})}),(0,B.jsx)(`div`,{className:`column-resizer column-resizer--folder-list${te.active?` is-active`:``}${p?` column-resizer--hidden`:``}`,role:`separator`,"aria-label":`Resize ${ie}`,"aria-orientation":`vertical`,"aria-valuemin":gp,"aria-valuenow":r,"aria-hidden":p||g||void 0,inert:g,tabIndex:p||g?-1:0,onPointerDown:te.onPointerDown,onKeyDown:te.onKeyDown}),t===`mail`?(0,B.jsxs)(B.Fragment,{children:[x?(0,B.jsxs)(`div`,{className:`msg-columns${A.active?` msg-columns--resizing`:``}`,inert:g,"aria-hidden":g||void 0,style:{"--message-column-resizer-width":`6px`,"--message-column-min-width":`280px`,"--message-column-width":`${i}px`},children:[(0,B.jsx)(Ba,{quickFilterQuery:n}),S?(0,B.jsx)(`div`,{className:`column-resizer msg-columns__resizer${A.active?` is-active`:``}`,role:`separator`,"aria-label":`Resize message list`,"aria-orientation":`vertical`,"aria-valuemin":280,"aria-valuemax":xr,"aria-valuenow":i,tabIndex:0,onPointerDown:A.onPointerDown,onKeyDown:A.onKeyDown}):null]}):null,S?(0,B.jsx)(Tu,{maximized:g,onToggleMaximized:()=>_(e=>!e)}):null]}):(0,B.jsx)(`section`,{className:`contacts contacts--placeholder`,"aria-label":`Contacts`,children:(0,B.jsx)(`p`,{children:`Contacts are not part of this clone.`})}),(0,B.jsx)(op,{}),(0,B.jsx)(cp,{})]})}lp&&document.documentElement.classList.add(`no-motion`),(0,Ve.createRoot)(document.getElementById(`app`)).render((0,B.jsx)(bp,{})); +//# sourceMappingURL=index-DIr-gxPn.js.map \ No newline at end of file diff --git a/suites-experimental/stormbox-react/dist/assets/index-DIr-gxPn.js.map b/suites-experimental/stormbox-react/dist/assets/index-DIr-gxPn.js.map new file mode 100644 index 000000000..48652638c --- /dev/null +++ b/suites-experimental/stormbox-react/dist/assets/index-DIr-gxPn.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index-DIr-gxPn.js","names":["__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","X","create","memo","memo","tt","Text"],"sources":["../../node_modules/scheduler/cjs/scheduler.production.js","../../node_modules/scheduler/index.js","../../node_modules/react/cjs/react.production.js","../../node_modules/react/index.js","../../node_modules/react-dom/cjs/react-dom.production.js","../../node_modules/react-dom/index.js","../../node_modules/react-dom/cjs/react-dom-client.production.js","../../node_modules/react-dom/client.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../../node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../../node_modules/lucide-react/dist/esm/context.mjs","../../node_modules/lucide-react/dist/esm/Icon.mjs","../../node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../../node_modules/lucide-react/dist/esm/icons/arrow-left.mjs","../../node_modules/lucide-react/dist/esm/icons/bold.mjs","../../node_modules/lucide-react/dist/esm/icons/bug.mjs","../../node_modules/lucide-react/dist/esm/icons/check.mjs","../../node_modules/lucide-react/dist/esm/icons/chevron-down.mjs","../../node_modules/lucide-react/dist/esm/icons/chevron-up.mjs","../../node_modules/lucide-react/dist/esm/icons/circle-user-round.mjs","../../node_modules/lucide-react/dist/esm/icons/circle.mjs","../../node_modules/lucide-react/dist/esm/icons/clock.mjs","../../node_modules/lucide-react/dist/esm/icons/download.mjs","../../node_modules/lucide-react/dist/esm/icons/ellipsis.mjs","../../node_modules/lucide-react/dist/esm/icons/expand.mjs","../../node_modules/lucide-react/dist/esm/icons/grip.mjs","../../node_modules/lucide-react/dist/esm/icons/highlighter.mjs","../../node_modules/lucide-react/dist/esm/icons/image.mjs","../../node_modules/lucide-react/dist/esm/icons/italic.mjs","../../node_modules/lucide-react/dist/esm/icons/lightbulb.mjs","../../node_modules/lucide-react/dist/esm/icons/link.mjs","../../node_modules/lucide-react/dist/esm/icons/list-ordered.mjs","../../node_modules/lucide-react/dist/esm/icons/list.mjs","../../node_modules/lucide-react/dist/esm/icons/log-out.mjs","../../node_modules/lucide-react/dist/esm/icons/mail-open.mjs","../../node_modules/lucide-react/dist/esm/icons/mail.mjs","../../node_modules/lucide-react/dist/esm/icons/minus.mjs","../../node_modules/lucide-react/dist/esm/icons/moon.mjs","../../node_modules/lucide-react/dist/esm/icons/paperclip.mjs","../../node_modules/lucide-react/dist/esm/icons/plus.mjs","../../node_modules/lucide-react/dist/esm/icons/quote.mjs","../../node_modules/lucide-react/dist/esm/icons/redo-2.mjs","../../node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs","../../node_modules/lucide-react/dist/esm/icons/remove-formatting.mjs","../../node_modules/lucide-react/dist/esm/icons/save.mjs","../../node_modules/lucide-react/dist/esm/icons/send.mjs","../../node_modules/lucide-react/dist/esm/icons/settings-2.mjs","../../node_modules/lucide-react/dist/esm/icons/settings.mjs","../../node_modules/lucide-react/dist/esm/icons/shrink.mjs","../../node_modules/lucide-react/dist/esm/icons/star.mjs","../../node_modules/lucide-react/dist/esm/icons/strikethrough.mjs","../../node_modules/lucide-react/dist/esm/icons/sun.mjs","../../node_modules/lucide-react/dist/esm/icons/tag.mjs","../../node_modules/lucide-react/dist/esm/icons/text-align-end.mjs","../../node_modules/lucide-react/dist/esm/icons/text-align-center.mjs","../../node_modules/lucide-react/dist/esm/icons/text-align-justify.mjs","../../node_modules/lucide-react/dist/esm/icons/text-align-start.mjs","../../node_modules/lucide-react/dist/esm/icons/trash-2.mjs","../../node_modules/lucide-react/dist/esm/icons/underline.mjs","../../node_modules/lucide-react/dist/esm/icons/undo-2.mjs","../../node_modules/lucide-react/dist/esm/icons/users.mjs","../../node_modules/lucide-react/dist/esm/icons/x.mjs","../../src/data/corpus.ts","../../src/data/random.ts","../../src/data/text.ts","../../src/clock.ts","../../src/data/mailbox.ts","../../node_modules/zustand/esm/vanilla.mjs","../../node_modules/zustand/esm/react.mjs","../../src/utils/message-tags.ts","../../src/store/mail-store.ts","../../src/utils/sender-avatar.ts","../../src/data/bodies.ts","../../src/utils/address-key.ts","../../src/utils/address-parse.ts","../../src/utils/compose-quote.ts","../../src/store/compose-store.ts","../../src/store/ui-store.ts","../../src/hooks/useColumnResize.ts","../../src/utils/keyboard.ts","../../src/hooks/useShortcuts.ts","../../node_modules/react/cjs/react-jsx-runtime.production.js","../../node_modules/react/jsx-runtime.js","../../src/components/base.tsx","../../src/utils/format-bytes.ts","../../src/components/Shell.tsx","../../src/utils/folder-presentation.ts","../../src/hooks/useMessageDrag.ts","../../src/components/FolderTree.tsx","../../node_modules/@tanstack/virtual-core/dist/esm/lazy-measurements.js","../../node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../node_modules/@tanstack/virtual-core/dist/esm/index.js","../../node_modules/@tanstack/react-virtual/dist/esm/index.js","../../src/utils/message-row-presentation.ts","../../src/utils/quick-filter.ts","../../src/components/Tags.tsx","../../src/components/MessageListRow.tsx","../../src/components/ListHeader.tsx","../../src/components/MessageList.tsx","../../node_modules/dompurify/dist/purify.es.mjs","../../src/hooks/useMediaQuery.ts","../../src/utils/raster-images.ts","../../src/utils/message-html.ts","../../src/utils/color.ts","../../src/utils/dark-email.ts","../../node_modules/linkifyjs/dist/linkify.mjs","../../node_modules/linkify-string/dist/linkify-string.mjs","../../src/utils/plaintext-html.ts","../../src/components/MessageView.tsx","../../src/store/contacts.ts","../../src/components/RecipientInput.tsx","../../node_modules/squire-rte/dist/squire.mjs","../../src/utils/rich-text.ts","../../src/components/RichTextEditor.tsx","../../src/components/Compose.tsx","../../src/components/Toasts.tsx","../../src/motion.ts","../../src/App.tsx","../../src/main.tsx"],"sourcesContent":["/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n else break a;\n }\n}\nfunction peek(heap) {\n return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n else break a;\n }\n }\n return first;\n}\nfunction compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n}\nvar taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n}\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n}\nvar isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\nfunction shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n}\nfunction performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime && shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\nelse if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_requestPaint = function () {\n needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result,\n thenable = ctor();\n thenable.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1),\n (payload._result = moduleObject),\n void 0 === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = moduleObject));\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2),\n (payload._result = error),\n void 0 === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = thenable));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n };\nfunction startTransition(scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition.types =\n null !== prevTransition ? prevTransition.types : null;\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction addTransitionType(type) {\n var transition = ReactSharedInternals.T;\n if (null !== transition) {\n var transitionTypes = transition.types;\n null === transitionTypes\n ? (transition.types = [type])\n : -1 === transitionTypes.indexOf(type) && transitionTypes.push(type);\n } else startTransition(addTransitionType.bind(null, type));\n}\nvar Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n};\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.ViewTransition = REACT_VIEW_TRANSITION_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.addTransitionType = addTransitionType;\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = startTransition;\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction noop() {}\nvar Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(formatProdErrorMessage(522));\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_RECOVERABLE_TYPE = Symbol.for(\"react.recoverable\"),\n REACT_OPTIMISTIC_KEY = Symbol.for(\"react.optimistic_key\");\nfunction createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key:\n null == key\n ? null\n : key === REACT_OPTIMISTIC_KEY\n ? REACT_OPTIMISTIC_KEY\n : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nvar ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\nexports.browser = function (reason) {\n return { $$typeof: REACT_RECOVERABLE_TYPE, _reason: reason };\n};\nexports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(formatProdErrorMessage(299));\n return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f();\n }\n};\nexports.preconnect = function (href, options) {\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence ? options.precedence : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n};\nexports.preinitModule = function (href, options) {\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as) {\n var crossOrigin = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n );\n Internals.d.M(href, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0\n });\n }\n } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n Internals.d.L(href, as, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n};\nexports.preloadModule = function (href, options) {\n if (\"string\" === typeof href)\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0\n });\n } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.3.1\";\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n React = require(\"react\"),\n ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n}\nfunction getNearestMountedFiber(fiber) {\n for (var node = fiber, nextNode = node; nextNode && !nextNode.alternate; )\n (node = nextNode),\n 0 !== (node.flags & 4098) && (fiber = node.return),\n (nextNode = node.return);\n for (; node.return; ) node = node.return;\n return 3 === node.tag ? fiber : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n if (31 === fiber.tag) {\n var activityState = fiber.memoizedState;\n null === activityState &&\n ((fiber = fiber.alternate),\n null !== fiber && (activityState = fiber.memoizedState));\n if (null !== activityState) return activityState.dehydrated;\n }\n return null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate) throw Error(formatProdErrorMessage(188));\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(formatProdErrorMessage(188));\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) {\n for (child$0 = parentB.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) throw Error(formatProdErrorMessage(189));\n }\n }\n if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n }\n if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n}\nfunction traverseVisibleInstancesAndTextInstances(\n child,\n searchWithinHosts,\n fn,\n a,\n b,\n c\n) {\n for (; null !== child; ) {\n if (\n ((5 === child.tag || 27 === child.tag || 6 === child.tag) &&\n fn(child, a, b, c)) ||\n ((22 !== child.tag || null === child.memoizedState) &&\n (searchWithinHosts || (5 !== child.tag && 27 !== child.tag)) &&\n traverseVisibleInstancesAndTextInstances(\n child.child,\n searchWithinHosts,\n fn,\n a,\n b,\n c\n ))\n )\n return !0;\n child = child.sibling;\n }\n return !1;\n}\nfunction getFragmentParentInstanceOrContainerFiber(fiber) {\n for (fiber = fiber.return; null !== fiber; ) {\n if (3 === fiber.tag || 5 === fiber.tag || 27 === fiber.tag) return fiber;\n fiber = fiber.return;\n }\n return null;\n}\nfunction fiberIsPortaledIntoHost(fiber) {\n var foundPortalParent = !1;\n for (fiber = fiber.return; null !== fiber; ) {\n 4 === fiber.tag && (foundPortalParent = !0);\n if (3 === fiber.tag || 5 === fiber.tag || 27 === fiber.tag) break;\n fiber = fiber.return;\n }\n return foundPortalParent;\n}\nfunction getFragmentInstanceOrTextInstanceSiblings(fiber) {\n var result = [null, null],\n parentHostFiber = getFragmentParentInstanceOrContainerFiber(fiber);\n if (null === parentHostFiber) return result;\n findFragmentInstanceOrTextInstanceSiblings(\n result,\n fiber,\n parentHostFiber.child,\n { foundSelf: !1 }\n );\n return result;\n}\nfunction findFragmentInstanceOrTextInstanceSiblings(\n result,\n self,\n child,\n state\n) {\n for (; null !== child; ) {\n if (child === self) state.foundSelf = !0;\n else if (5 === child.tag || 27 === child.tag || 6 === child.tag) {\n if (state.foundSelf) return (result[1] = child), !0;\n result[0] = child;\n } else if (\n (22 !== child.tag || null === child.memoizedState) &&\n findFragmentInstanceOrTextInstanceSiblings(\n result,\n self,\n child.child,\n state\n )\n )\n return !0;\n child = child.sibling;\n }\n return !1;\n}\nfunction getInstanceFromHostFiber(fiber) {\n switch (fiber.tag) {\n case 5:\n case 27:\n case 6:\n return fiber.stateNode;\n case 3:\n return fiber.stateNode.containerInfo;\n default:\n throw Error(formatProdErrorMessage(559));\n }\n}\nvar searchTarget = null,\n searchBoundary = null;\nfunction isFiberPrecedingCheck(child, target, boundary) {\n return child === boundary\n ? !0\n : child === target\n ? ((searchTarget = child), !0)\n : !1;\n}\nfunction isFiberFollowingCheck(child, target, boundary) {\n return child === boundary\n ? ((searchBoundary = child), !1)\n : child === target\n ? (null !== searchBoundary && (searchTarget = child), !0)\n : !1;\n}\nfunction getParentForFragmentAncestors(inst) {\n if (null === inst) return null;\n do inst = null === inst ? null : inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag && 3 !== inst.tag);\n return inst ? inst : null;\n}\nfunction getLowestCommonAncestor(instA, instB, getParent) {\n for (var depthA = 0, tempA = instA; tempA; tempA = getParent(tempA)) depthA++;\n tempA = 0;\n for (var tempB = instB; tempB; tempB = getParent(tempB)) tempA++;\n for (; 0 < depthA - tempA; ) (instA = getParent(instA)), depthA--;\n for (; 0 < tempA - depthA; ) (instB = getParent(instB)), tempA--;\n for (; depthA--; ) {\n if (instA === instB || (null !== instB && instA === instB.alternate))\n return instA;\n instA = getParent(instA);\n instB = getParent(instB);\n }\n return null;\n}\nvar assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_LEGACY_HIDDEN_TYPE = Symbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_RECOVERABLE_TYPE = Symbol.for(\"react.recoverable\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n case REACT_VIEW_TRANSITION_TYPE:\n return \"ViewTransition\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nvar isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n sharedNotPendingObject = {\n pending: !1,\n data: null,\n method: null,\n action: null\n },\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor, null);\n switch (nextRootInstance.nodeType) {\n case 9:\n case 11:\n fiber = (fiber = nextRootInstance.documentElement)\n ? (fiber = fiber.namespaceURI)\n ? getOwnHostContext(fiber)\n : 0\n : 0;\n break;\n default:\n if (\n ((fiber = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (fiber = getChildHostContextProd(nextRootInstance, fiber));\n else\n switch (fiber) {\n case \"svg\":\n fiber = 1;\n break;\n case \"math\":\n fiber = 2;\n break;\n default:\n fiber = 0;\n }\n }\n pop(contextStackCursor);\n push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n pop(contextStackCursor);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n var stateHook = fiber.memoizedState;\n null !== stateHook &&\n ((HostTransitionContext._currentValue = stateHook.memoizedState),\n push(hostTransitionProviderCursor, fiber));\n stateHook = contextStackCursor.current;\n var JSCompiler_inline_result = getChildHostContextProd(stateHook, fiber.type);\n stateHook !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor), pop(contextFiberStackCursor));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor),\n (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" ()\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n reentry = !0;\n var previousPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$1) {\n control = x$1;\n }\n Fake = !1;\n try {\n var prevProps = Object.getOwnPropertyDescriptor(\n fn.prototype,\n \"props\"\n );\n Object.defineProperty(fn.prototype, \"props\", {\n configurable: !0,\n set: function () {\n throw Error();\n }\n });\n Fake = !0;\n new fn();\n } finally {\n Fake &&\n (void 0 !== prevProps\n ? Object.defineProperty(fn.prototype, \"props\", prevProps)\n : delete fn.prototype.props);\n }\n }\n } else {\n try {\n throw Error();\n } catch (x$2) {\n control = x$2;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n namePropDescriptor = RunInRootFrame = 0;\n RunInRootFrame < sampleLines.length &&\n !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n )\n RunInRootFrame++;\n for (\n ;\n namePropDescriptor < controlLines.length &&\n !controlLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n if (\n RunInRootFrame === sampleLines.length ||\n namePropDescriptor === controlLines.length\n )\n for (\n RunInRootFrame = sampleLines.length - 1,\n namePropDescriptor = controlLines.length - 1;\n 1 <= RunInRootFrame &&\n 0 <= namePropDescriptor &&\n sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n )\n namePropDescriptor--;\n for (\n ;\n 1 <= RunInRootFrame && 0 <= namePropDescriptor;\n RunInRootFrame--, namePropDescriptor--\n )\n if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n do\n if (\n (RunInRootFrame--,\n namePropDescriptor--,\n 0 > namePropDescriptor ||\n sampleLines[RunInRootFrame] !==\n controlLines[namePropDescriptor])\n ) {\n var frame =\n \"\\n\" +\n sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n fn.displayName &&\n frame.includes(\"\") &&\n (frame = frame.replace(\"\", fn.displayName));\n return frame;\n }\n while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n }\n break;\n }\n }\n } finally {\n (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n }\n return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return fiber.child !== childFiber && null !== childFiber\n ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n : describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n case 30:\n return describeBuiltInComponentFrame(\"ViewTransition\");\n default:\n return \"\";\n }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\",\n previous = null;\n do\n (info += describeFiber(workInProgress, previous)),\n (previous = workInProgress),\n (workInProgress = workInProgress.return);\n while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n nextTransitionDeferredLane = 262144,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return lanes & -lanes;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n}\nfunction getEntangledLanes(root, renderLanes) {\n 0 !== (renderLanes & 8) && (renderLanes |= renderLanes & 32);\n var allEntangledLanes = root.entangledLanes;\n if (0 !== allEntangledLanes)\n for (\n root = root.entanglements, allEntangledLanes &= renderLanes;\n 0 < allEntangledLanes;\n\n ) {\n var index$4 = 31 - clz32(allEntangledLanes),\n lane = 1 << index$4;\n renderLanes |= root[index$4];\n allEntangledLanes &= ~lane;\n }\n return renderLanes;\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index$7 = 31 - clz32(remainingLanes),\n lane = 1 << index$7;\n entanglements[index$7] = 0;\n expirationTimes[index$7] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index$7];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index$7] = null, index$7 = 0;\n index$7 < hiddenUpdatesForLane.length;\n index$7++\n ) {\n var update = hiddenUpdatesForLane[index$7];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$8 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$8;\n (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n (root[index$8] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = renderLanes & -renderLanes;\n renderLane =\n 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n ? 0\n : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n}\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 2 < lanes\n ? 8 < lanes\n ? 0 !== (lanes & 134217727)\n ? 32\n : 268435456\n : 8\n : 2;\n}\nfunction resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey,\n internalLoadPendingKey = \"__reactLoad$\" + randomKey;\nfunction detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst;\n if ((targetInst = targetNode[internalInstanceKey])) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentHydrationBoundary(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n targetNode = getParentHydrationBoundary(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n}\nfunction getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 31 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n}\nfunction getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n}\nfunction markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n}\nfunction clearPendingLoadOnNode(node) {\n node[internalLoadPendingKey] = void 0;\n}\nvar allNativeEvents = new Set(),\n registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] = dependencies;\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n return !1;\n}\nvar viewTransitionMutationContext = !1;\nfunction pushMutationContext() {\n var prev = viewTransitionMutationContext;\n viewTransitionMutationContext = !1;\n return prev;\n}\nfunction setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix$10 = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n node.removeAttribute(name);\n return;\n }\n }\n node.setAttribute(name, value);\n }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttribute(name, value);\n }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttributeNS(namespace, name, value);\n }\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return value;\n default:\n return \"\";\n }\n}\nfunction isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n var descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n}\nfunction track(node) {\n if (!node._valueTracker) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\";\n node._valueTracker = trackValueOnNode(\n node,\n valueField,\n \"\" + node[valueField]\n );\n }\n}\nfunction updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n}\nfunction updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (element.type = type)\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n null != value\n ? \"number\" === type && element.value == value\n ? setDefaultValue(element, getToStringValue(element.value))\n : setDefaultValue(element, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (element.name = \"\" + getToStringValue(name))\n : element.removeAttribute(\"name\");\n}\nfunction initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (element.type = type);\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n ) {\n track(element);\n return;\n }\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (element.name = name);\n track(element);\n}\nfunction setDefaultValue(node, value) {\n node.defaultValue !== \"\" + value && (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n}\nfunction updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n if (isArrayImpl(children)) {\n if (1 < children.length) throw Error(formatProdErrorMessage(93));\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n track(element);\n}\nfunction setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n);\nfunction setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (style[styleName] = (\"\" + value).trim())\n : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(formatProdErrorMessage(62));\n node = node.style;\n if (null != prevStyles) {\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"),\n (viewTransitionMutationContext = !0));\n for (var styleName$16 in styles)\n (styleName = styles[styleName$16]),\n styles.hasOwnProperty(styleName$16) &&\n prevStyles[styleName$16] !== styleName &&\n (setValueForStyle(node, styleName$16, styleName),\n (viewTransitionMutationContext = !0));\n } else\n for (var styleName$17 in styles)\n styles.hasOwnProperty(styleName$17) &&\n setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n}\nvar aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"maskType\", \"mask-type\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps) throw Error(formatProdErrorMessage(90));\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form && updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n}\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n formatProdErrorMessage(231, registrationName, typeof stateNode)\n );\n return stateNode;\n}\nvar canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n try {\n var options = {};\n Object.defineProperty(options, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\nvar root = null,\n startText = null,\n fallbackText = null;\nfunction getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n };\nfunction modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n}\nfunction getEventModifierState() {\n return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n SubmitEventInterface = assign({}, EventInterface, { submitter: 0 }),\n SyntheticSubmitEvent = createSyntheticEvent(SubmitEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0,\n source: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\ncanUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CHAR = String.fromCharCode(32),\n hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return 229 !== nativeEvent.keyCode;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (32 !== nativeEvent.which) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n );\n default:\n return null;\n }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n}\nvar supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n};\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n}\nfunction createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n var JSCompiler_inline_result$jscomp$318;\n if (canUseDOM) {\n var isSupported$jscomp$inline_474 = \"oninput\" in document;\n if (!isSupported$jscomp$inline_474) {\n var element$jscomp$inline_475 = document.createElement(\"div\");\n element$jscomp$inline_475.setAttribute(\"oninput\", \"return;\");\n isSupported$jscomp$inline_474 =\n \"function\" === typeof element$jscomp$inline_475.oninput;\n }\n JSCompiler_inline_result$jscomp$318 = isSupported$jscomp$inline_474;\n } else JSCompiler_inline_result$jscomp$318 = !1;\n isInputEventSupported =\n JSCompiler_inline_result$jscomp$318 &&\n (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n}\nfunction getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e$20) {\n return doc.body;\n }\n}\nfunction getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n}\nfunction containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n}\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n}\nvar skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n}\nvar vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\ncanUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error fullscreenChange fullscreenError gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n \" \"\n );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar globalClientIdCounter$1 = 0;\nfunction getViewTransitionName(props, instance) {\n if (null != props.name && \"auto\" !== props.name) return props.name;\n if (null !== instance.autoName) return instance.autoName;\n props = pendingEffectsRoot.identifierPrefix;\n var globalClientId = globalClientIdCounter$1++;\n props = \"_\" + props + \"t_\" + globalClientId.toString(32) + \"_\";\n return (instance.autoName = props);\n}\nfunction getClassNameByType(classByType) {\n if (null == classByType || \"string\" === typeof classByType)\n return classByType;\n var className = null,\n activeTypes = pendingTransitionTypes;\n if (null !== activeTypes)\n for (var i = 0; i < activeTypes.length; i++) {\n var match = classByType[activeTypes[i]];\n if (null != match) {\n if (\"none\" === match) return \"none\";\n className = null == className ? match : className + (\" \" + match);\n }\n }\n return null == className ? classByType.default : className;\n}\nfunction getViewTransitionClassName(defaultClass, eventClass) {\n defaultClass = getClassNameByType(defaultClass);\n eventClass = getClassNameByType(eventClass);\n return null == eventClass\n ? \"auto\" === defaultClass\n ? null\n : defaultClass\n : \"auto\" === eventClass\n ? null\n : eventClass;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n if (50 < nestedUpdateCount)\n throw (\n ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(formatProdErrorMessage(185)))\n );\n for (var parent = sourceFiber.return; null !== parent; )\n (sourceFiber = parent), (parent = sourceFiber.return);\n return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiberImplClass(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 1206910976;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 1206910978;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext\n }));\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 0;\n owner = type;\n if (\"function\" === typeof owner) shouldConstruct(owner) && (fiberTag = 1);\n else if (\"string\" === typeof owner)\n fiberTag = isHostHoistableType(\n type,\n pendingProps,\n contextStackCursor.current\n )\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5;\n else\n a: switch (owner) {\n case REACT_ACTIVITY_TYPE:\n return (\n (type = createFiberImplClass(31, pendingProps, key, mode)),\n (type.elementType = REACT_ACTIVITY_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 24;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiberImplClass(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiberImplClass(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_LEGACY_HIDDEN_TYPE:\n case REACT_VIEW_TRANSITION_TYPE:\n return (\n (type = mode | 32),\n (type = createFiberImplClass(30, pendingProps, key, type)),\n (type.elementType = REACT_VIEW_TRANSITION_TYPE),\n (type.lanes = lanes),\n (type.stateNode = {\n autoName: null,\n paired: null,\n clones: null,\n ref: null\n }),\n type\n );\n default:\n if (\"object\" === typeof owner && null !== owner)\n switch (owner.$$typeof) {\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n fiberTag = 29;\n pendingProps = Error(\n formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n );\n owner = null;\n }\n key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiberImplClass(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiberImplClass(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiberImplClass(18, null, null, 0);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiberImplClass(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\nvar forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n var error = Error(\n formatProdErrorMessage(\n 418,\n 1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n ? \"text\"\n : \"HTML\",\n \"\"\n )\n );\n queueHydrationError(createCapturedValueAtFiber(error, fiber));\n throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n var instance = fiber.stateNode,\n type = fiber.type,\n props = fiber.memoizedProps;\n instance[internalInstanceKey] = fiber;\n instance[internalPropsKey] = props;\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", instance);\n listenToNonDelegatedEvent(\"close\", instance);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", instance);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", instance);\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", instance);\n break;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n initInput(\n instance,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n break;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n break;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", instance),\n initTextarea(instance, props.value, props.defaultValue, props.children);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n instance.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(instance.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n listenToNonDelegatedEvent(\"toggle\", instance)),\n null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", instance),\n null != props.onClick && (instance.onclick = noop$1),\n (instance = !0))\n : (instance = !1);\n instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 31:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n}\nfunction popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else if (31 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n}\nfunction resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n}\nfunction queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber$1 = null,\n lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue);\n context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n context._currentValue = valueCursor.current;\n pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n}\nfunction propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n nextFiber = null;\n } else\n 13 === fiber.tag &&\n null !== fiber.memoizedState &&\n null === fiber.memoizedState.dehydrated\n ? ((fiber.lanes |= renderLanes),\n (nextFiber = fiber.alternate),\n null !== nextFiber && (nextFiber.lanes |= renderLanes),\n scheduleContextWorkOnParentPath(\n fiber.return,\n renderLanes,\n workInProgress\n ),\n (nextFiber = fiber.child),\n (nextFiber = null !== nextFiber ? nextFiber.sibling : null))\n : (nextFiber = fiber.child);\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n}\nfunction propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current ? current.push(context) : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n return null !== current;\n}\nfunction checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer) throw Error(formatProdErrorMessage(308));\n lastContextDependency = context;\n consumer.dependencies = { lanes: 0, firstContext: context };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0\n };\nfunction createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n}\nfunction releaseCache(cache) {\n cache.refCount--;\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n}\nfunction queueTransitionTypes(root, transitionTypes) {\n if (0 !== (root.pendingLanes & 4194048)) {\n var queued = root.transitionTypes;\n null === queued && (queued = root.transitionTypes = []);\n for (root = 0; root < transitionTypes.length; root++) {\n var transitionType = transitionTypes[root];\n -1 === queued.indexOf(transitionType) && queued.push(transitionType);\n }\n }\n}\nvar entangledTransitionTypes = null;\nfunction claimQueuedTransitionTypes(root) {\n var claimed = root.transitionTypes;\n root.transitionTypes = null;\n return claimed;\n}\nvar currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n}\nfunction pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n ((entangledTransitionTypes = null), null !== currentEntangledListeners)\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n}\nfunction chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n globalMostRecentTransitionTime = now();\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n if (null !== entangledTransitionTypes)\n for (var root$28 = firstScheduledRoot; null !== root$28; )\n queueTransitionTypes(root$28, entangledTransitionTypes),\n (root$28 = root$28.next);\n root$28 = transition.types;\n if (null !== root$28) {\n for (var root$29 = firstScheduledRoot; null !== root$29; )\n queueTransitionTypes(root$29, root$28), (root$29 = root$29.next);\n if (0 !== currentEntangledLane) {\n root$29 = entangledTransitionTypes;\n null === root$29 && (root$29 = entangledTransitionTypes = []);\n for (var i = 0; i < root$28.length; i++) {\n var transitionType = root$28[i];\n -1 === root$29.indexOf(transitionType) && root$29.push(transitionType);\n }\n }\n }\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current)\n : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n SuspenseActionException = Error(formatProdErrorMessage(542)),\n noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n index = thenableState[index];\n void 0 === index\n ? thenableState.push(thenable)\n : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n thenableState = thenable.reason;\n checkIfUseWrappedInAsyncCatch(thenableState);\n if (void 0 === thenableState && !(\"reason\" in thenable))\n throw Error(formatProdErrorMessage(600));\n throw thenableState;\n default:\n if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n else {\n thenableState = workInProgressRoot;\n if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n throw Error(formatProdErrorMessage(482));\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n throw SuspenseException;\n }\n}\nfunction resolveLazy(lazyType) {\n try {\n var init = lazyType._init;\n return init(lazyType._payload);\n } catch (x) {\n if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n throw ((suspendedThenable = x), SuspenseException);\n throw x;\n }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n var thenable = suspendedThenable;\n suspendedThenable = null;\n return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = []);\n return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(formatProdErrorMessage(525));\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n formatProdErrorMessage(\n 31,\n \"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber\n )\n );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null === currentFirstChild.key\n ? existingChildren.set(currentFirstChild.index, currentFirstChild)\n : existingChildren.set(currentFirstChild.key, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 2), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 134217730;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 134217730);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return (\n (returnFiber = updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n )),\n coerceRef(returnFiber, element),\n returnFiber\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n current\n );\n current = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n coerceRef(current, element);\n current.return = returnFiber;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n createChild(returnFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"function\" === typeof newChild.then)\n return createChild(returnFiber, unwrapThenable(newChild), lanes);\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateSlot(returnFiber, oldFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n if (\"function\" === typeof newChild.then)\n return updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n if (\"function\" === typeof newChild.then)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n ((newFiber = nextOldFiber.alternate),\n null !== newFiber &&\n oldFiber.delete(null === newFiber.key ? newIdx : newFiber.key)),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren) throw Error(formatProdErrorMessage(151));\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n ((nextOldFiber = step.alternate),\n null !== nextOldFiber &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n )),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n void 0 === newChild.props.ref &&\n (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.children || []);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild)) {\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n newChild = key.call(newChild);\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n }\n if (\"function\" === typeof newChild.then)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n ? ((newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (lanes = useFiber(currentFirstChild, newChild)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n (lanes.return = returnFiber),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber))\n : deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n return fiber;\n } finally {\n }\n };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n}\nfunction createUpdate(lane) {\n return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (0 !== (executionContext & 2)) {\n var pending = updateQueue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n updateQueue.pending = update;\n update = getRootForUpdatedFiber(fiber);\n markUpdateLaneFromFiberToRoot(fiber, null, lane);\n return update;\n }\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance$jscomp$0,\n renderLanes\n) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n var instance = instance$jscomp$0;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(instance, newState, updateLane);\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -65537) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(instance, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress$jscomp$0.flags |= 64),\n isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(formatProdErrorMessage(191, callback));\n callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n fiber = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, fiber);\n push(currentTreeHiddenStackCursor, context);\n entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor);\n pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n push(suspenseHandlerStackCursor, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, fiber);\n null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n 22 === fiber.tag\n ? (push(suspenseStackCursor, suspenseStackCursor.current),\n push(suspenseHandlerStackCursor, fiber),\n null === shellBoundary && (shellBoundary = fiber))\n : reuseSuspenseHandlerOnStack();\n}\nfunction reuseSuspenseHandlerOnStack() {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction pushSuspenseListContext(fiber, newContext) {\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n push(suspenseStackCursor, newContext);\n}\nfunction popSuspenseListContext(fiber) {\n pop(suspenseStackCursor);\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n}\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n isSuspenseInstancePending(state) ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n \"independent\" !== node.memoizedProps.revealOrder\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n nextRenderLanes = Component(props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (nextRenderLanes = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n finishRenderingHooks(current);\n return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n numberOfReRenders += 1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n ReactSharedInternals.H = HooksDispatcherOnRerender;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n}\nfunction TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags &= -2053;\n current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(formatProdErrorMessage(467));\n throw Error(formatProdErrorMessage(310));\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = []);\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null === index || null === index.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate));\n return thenable;\n}\nfunction use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_RECOVERABLE_TYPE) return;\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n memoCache.index++;\n return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction$64 = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$64 = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$64 = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n gesture: update.gesture,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction$64 &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else getServerSnapshot = getSnapshot();\n var snapshotChanged = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n );\n snapshotChanged &&\n ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n hook = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n subscribe\n ]);\n subscribe =\n hook.getSnapshot !== getSnapshot ||\n snapshotChanged ||\n (null !== workInProgressHook &&\n 0 !== (workInProgressHook.memoizedState.tag & 1));\n pushSimpleEffect(\n subscribe ? 9 : 8,\n { destroy: void 0 },\n updateStoreInstance.bind(null, fiber, hook, getServerSnapshot, getSnapshot),\n null\n );\n if (subscribe) {\n fiber.flags |= 2048;\n if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n}\nfunction dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n) {\n if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n}\nfunction runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition.types =\n null !== prevTransition ? prevTransition.types : null;\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n } else\n try {\n (prevTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, prevTransition);\n } catch (error$70) {\n onActionError(actionQueue, node, error$70);\n }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n )\n : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var JSCompiler_inline_result = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n if (null === JSCompiler_inline_result$jscomp$0) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n }\n inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n JSCompiler_inline_result$jscomp$0 =\n \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n ? JSCompiler_inline_result$jscomp$0\n : null;\n }\n if (JSCompiler_inline_result$jscomp$0) {\n nextHydratableInstance = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n JSCompiler_inline_result =\n \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n break a;\n }\n }\n throwOnHydrationMismatch(JSCompiler_inline_result);\n }\n JSCompiler_inline_result = !1;\n }\n JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n JSCompiler_inline_result = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = JSCompiler_inline_result;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result\n );\n JSCompiler_inline_result.dispatch = ssrFormState;\n JSCompiler_inline_result = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n JSCompiler_inline_result.queue\n );\n JSCompiler_inline_result = mountWorkInProgressHook();\n JSCompiler_inline_result$jscomp$0 = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result$jscomp$0,\n inRootOrSingleton,\n ssrFormState\n );\n JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n JSCompiler_inline_result.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((deps = create.next),\n (create.next = tag),\n (tag.next = deps),\n (inst.lastEffect = tag));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n { destroy: void 0 },\n create,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n inst,\n create,\n deps\n )));\n}\nfunction mountEffect(create, deps) {\n mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n currentlyRenderingFiber.flags |= 4;\n var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n if (null === componentUpdateQueue)\n (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n (componentUpdateQueue.events = [payload]);\n else {\n var events = componentUpdateQueue.events;\n null === events\n ? (componentUpdateQueue.events = [payload])\n : events.push(payload);\n }\n}\nfunction updateEvent(callback) {\n var ref = updateWorkInProgressHook().memoizedState;\n useEffectEventImpl({ ref: ref, nextImpl: callback });\n return function () {\n if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n}\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n if (\n void 0 === initialValue ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (\n 0 === (renderLanes & 106) ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition.types =\n null !== prevTransition ? prevTransition.types : null;\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane()\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n sharedNotPendingObject,\n null === action\n ? noop\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: sharedNotPendingObject,\n baseState: sharedNotPendingObject,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: sharedNotPendingObject\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n var stateHook = ensureFormComponentIsStateful(formFiber);\n null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n dispatchSetStateInternal(\n formFiber,\n stateHook.next.queue,\n {},\n requestUpdateLane()\n );\n}\nfunction useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n}\nfunction updateId() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane();\n fiber = createUpdate(lane);\n var root$73 = enqueueUpdate(provider, fiber, lane);\n null !== root$73 &&\n (scheduleUpdateOnFiber(root$73, provider, lane),\n entangleTransitions(root$73, provider, lane));\n provider = { cache: createCache() };\n fiber.payload = provider;\n return;\n }\n provider = provider.return;\n }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n var lane = requestUpdateLane();\n action = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, action)\n : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n null !== action &&\n (scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n var lane = requestUpdateLane();\n dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError,\n useEffectEvent: throwInvalidHookError\n },\n HooksDispatcherOnMount = {\n readContext: readContext,\n use: use,\n useCallback: function (callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function (ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n mountEffectImpl(\n 4194308,\n 4,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function (create, deps) {\n return mountEffectImpl(4194308, 4, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function (nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n },\n useReducer: function (reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function (initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: function (initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n },\n useTransition: function () {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else {\n getServerSnapshot = getSnapshot();\n if (null === workInProgressRoot)\n throw Error(formatProdErrorMessage(349));\n 0 !== (workInProgressRootRenderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n hook.memoizedState = getServerSnapshot;\n var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n hook.queue = inst;\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n subscribe\n ]);\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n inst,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n return getServerSnapshot;\n },\n useId: function () {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var JSCompiler_inline_result = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n JSCompiler_inline_result =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + JSCompiler_inline_result;\n identifierPrefix =\n \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n JSCompiler_inline_result = localIdCounter++;\n 0 < JSCompiler_inline_result &&\n (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n identifierPrefix += \"_\";\n } else\n (JSCompiler_inline_result = globalClientIdCounter++),\n (identifierPrefix =\n \"_\" +\n identifierPrefix +\n \"r_\" +\n JSCompiler_inline_result.toString(32) +\n \"_\");\n return (hook.memoizedState = identifierPrefix);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: mountActionState,\n useActionState: mountActionState,\n useOptimistic: function (passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n },\n useEffectEvent: function (callback) {\n var hook = mountWorkInProgressHook(),\n ref = { impl: callback };\n hook.memoizedState = ref;\n return function () {\n if (0 !== (executionContext & 2))\n throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n }\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function () {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: updateActionState,\n useActionState: updateActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh,\n useEffectEvent: updateEvent\n },\n HooksDispatcherOnRerender = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function () {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: rerenderActionState,\n useActionState: rerenderActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh,\n useEffectEvent: updateEvent\n };\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var propName$77 in Component)\n void 0 === newProps[propName$77] &&\n (newProps[propName$77] = Component[propName$77]);\n }\n return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n try {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n } catch (e$78) {\n setTimeout(function () {\n throw e$78;\n });\n }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n try {\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$79) {\n setTimeout(function () {\n throw e$79;\n });\n }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n lane.payload = { element: null };\n lane.callback = function () {\n logUncaughtError(root, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n}\nfunction throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n) {\n sourceFiber.flags |= 32768;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 31:\n case 13:\n case 19:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n ((root = Error(formatProdErrorMessage(422), { cause: value })),\n queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n : (value !== HydrationMismatchException &&\n ((returnFiber = Error(formatProdErrorMessage(423), {\n cause: value\n })),\n queueHydrationError(\n createCapturedValueAtFiber(returnFiber, sourceFiber)\n )),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n 4 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2)),\n !1\n );\n var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [wrapperError])\n : workInProgressRootConcurrentErrors.push(wrapperError);\n 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n returnFiber = sourceFiber.type;\n wrapperError = sourceFiber.stateNode;\n if (\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== wrapperError &&\n \"function\" === typeof wrapperError.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n break;\n case 22:\n if (null !== sourceFiber.memoizedState)\n return (sourceFiber.flags |= 65536), !1;\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n nextProps\n) {\n var nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n null === current &&\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n prevState =\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n if (null !== current) {\n nextProps = workInProgress.child = current.child;\n for (nextChildren = 0; null !== nextProps; )\n (nextChildren =\n nextChildren | nextProps.lanes | nextProps.childLanes),\n (nextProps = nextProps.sibling);\n nextProps = nextChildren & ~prevState;\n } else (nextProps = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n prevState,\n renderLanes,\n nextProps\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (nextProps = workInProgress.lanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n renderLanes,\n nextProps\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(),\n reuseSuspenseHandlerOnStack());\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n (null !== current && 22 === current.tag) ||\n null !== workInProgress.stateNode ||\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes,\n remainingChildLanes\n) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack();\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n workInProgress.childLanes = remainingChildLanes;\n return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: nextProps.mode, children: nextProps.children },\n workInProgress.mode\n );\n nextProps.ref = workInProgress.ref;\n workInProgress.child = nextProps;\n nextProps.return = workInProgress;\n return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n current.flags |= 2;\n popSuspenseHandler(workInProgress);\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n didSuspend = 0 !== (workInProgress.flags & 128);\n workInProgress.flags &= -129;\n if (null === current) {\n if (isHydrating) {\n if (\"hidden\" === nextProps.mode)\n return (\n (current = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.lanes = 536870912),\n (current.memoizedState = { baseLanes: 0, cachePool: null }),\n bailoutOffscreenComponent(null, current)\n );\n pushDehydratedActivitySuspenseHandler(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" === current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n workInProgress.lanes = 536870912;\n return null;\n }\n return mountActivityChildren(workInProgress, nextProps);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated = prevState.dehydrated;\n pushDehydratedActivitySuspenseHandler(workInProgress);\n if (didSuspend)\n if (workInProgress.flags & 256)\n (workInProgress.flags &= -257),\n (workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ));\n else if (null !== workInProgress.memoizedState)\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null);\n else throw Error(formatProdErrorMessage(558));\n else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (didSuspend = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || didSuspend)\n ) {\n if (null === currentTreeHiddenStackCursor.current) {\n nextProps = workInProgressRoot;\n if (\n null !== nextProps &&\n ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n 0 !== dehydrated && dehydrated !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = dehydrated),\n enqueueConcurrentRenderForLane(current, dehydrated),\n scheduleUpdateOnFiber(nextProps, current, dehydrated),\n SelectiveHydrationException)\n );\n renderDidSuspendDelayIfPossible();\n }\n workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n (current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.flags |= 134221824);\n return workInProgress;\n }\n current = createWorkInProgress(current.child, {\n mode: nextProps.mode,\n children: nextProps.children\n });\n current.ref = workInProgress.ref;\n workInProgress.child = current;\n current.return = workInProgress;\n return current;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(formatProdErrorMessage(284));\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current);\n Component = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n var context = emptyContextObject,\n contextType = Component.contextType;\n \"object\" === typeof contextType &&\n null !== contextType &&\n (context = readContext(contextType));\n context = new Component(nextProps, context);\n workInProgress.memoizedState =\n null !== context.state && void 0 !== context.state ? context.state : null;\n context.updater = classComponentUpdater;\n workInProgress.stateNode = context;\n context._reactInternals = workInProgress;\n context = workInProgress.stateNode;\n context.props = nextProps;\n context.state = workInProgress.memoizedState;\n context.refs = {};\n initializeUpdateQueue(workInProgress);\n contextType = Component.contextType;\n context.context =\n \"object\" === typeof contextType && null !== contextType\n ? readContext(contextType)\n : emptyContextObject;\n context.state = workInProgress.memoizedState;\n contextType = Component.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n contextType,\n nextProps\n ),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n ((contextType = context.state),\n \"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount(),\n contextType !== context.state &&\n classComponentUpdater.enqueueReplaceState(context, context.state, null),\n processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308);\n nextProps = !0;\n } else if (null === current) {\n context = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps,\n oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n context.props = oldProps;\n var oldContext = context.context,\n contextType$jscomp$0 = Component.contextType;\n contextType = emptyContextObject;\n \"object\" === typeof contextType$jscomp$0 &&\n null !== contextType$jscomp$0 &&\n (contextType = readContext(contextType$jscomp$0));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n contextType$jscomp$0 =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n (\"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount()),\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (context.props = nextProps),\n (context.state = oldContext),\n (context.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (nextProps = !1));\n } else {\n context = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n contextType = workInProgress.memoizedProps;\n contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n context.props = contextType$jscomp$0;\n getDerivedStateFromProps = workInProgress.pendingProps;\n oldState = context.context;\n oldContext = Component.contextType;\n oldProps = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (oldProps = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n oldProps\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n contextType !== getDerivedStateFromProps ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType$jscomp$0 =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType$jscomp$0,\n nextProps,\n oldState,\n newState,\n oldProps\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof context.componentWillUpdate) ||\n (\"function\" === typeof context.componentWillUpdate &&\n context.componentWillUpdate(nextProps, newState, oldProps),\n \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n context.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldProps\n )),\n \"function\" === typeof context.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof context.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (context.props = nextProps),\n (context.state = newState),\n (context.context = oldProps),\n (nextProps = contextType$jscomp$0))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (nextProps = !1));\n }\n context = nextProps;\n markRef(current, workInProgress);\n nextProps = 0 !== (workInProgress.flags & 128);\n context || nextProps\n ? ((context = workInProgress.stateNode),\n (Component =\n nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : context.render()),\n (workInProgress.flags |= 1),\n null !== current && nextProps\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes),\n (workInProgress.memoizedState = context.state),\n (current = workInProgress.child))\n : (current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ));\n return current;\n}\nfunction mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n showFallback = !1,\n didSuspend = 0 !== (workInProgress.flags & 128),\n JSCompiler_temp;\n (JSCompiler_temp = didSuspend) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & 2));\n JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n showFallback\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack();\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" !== current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n isSuspenseInstanceFallback(current)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912);\n return null;\n }\n didSuspend = nextProps.children;\n nextProps = nextProps.fallback;\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(),\n (showFallback = workInProgress.mode),\n (didSuspend = mountWorkInProgressOffscreenFiber(\n { mode: \"hidden\", children: didSuspend },\n showFallback\n )),\n (nextProps = createFiberFromFragment(\n nextProps,\n showFallback,\n renderLanes,\n null\n )),\n (didSuspend.return = workInProgress),\n (nextProps.return = workInProgress),\n (didSuspend.sibling = nextProps),\n (workInProgress.child = didSuspend),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(null, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(workInProgress, didSuspend);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated$96 = prevState.dehydrated;\n if (null !== dehydrated$96)\n return updateDehydratedSuspenseComponent(\n current,\n workInProgress,\n didSuspend,\n JSCompiler_temp,\n nextProps,\n dehydrated$96,\n prevState,\n renderLanes\n );\n }\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(),\n (showFallback = nextProps.fallback),\n (didSuspend = workInProgress.mode),\n (prevState = current.child),\n (dehydrated$96 = prevState.sibling),\n (nextProps = createWorkInProgress(prevState, {\n mode: \"hidden\",\n children: nextProps.children\n })),\n (nextProps.subtreeFlags = prevState.subtreeFlags & 1206910976),\n null !== dehydrated$96\n ? (showFallback = createWorkInProgress(dehydrated$96, showFallback))\n : ((showFallback = createFiberFromFragment(\n showFallback,\n didSuspend,\n renderLanes,\n null\n )),\n (showFallback.flags |= 2)),\n (showFallback.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextProps.sibling = showFallback),\n (workInProgress.child = nextProps),\n bailoutOffscreenComponent(null, nextProps),\n (nextProps = workInProgress.child),\n (showFallback = current.child.memoizedState),\n null === showFallback\n ? (showFallback = mountSuspenseOffscreenState(renderLanes))\n : ((didSuspend = showFallback.cachePool),\n null !== didSuspend\n ? ((prevState = CacheContext._currentValue),\n (didSuspend =\n didSuspend.parent !== prevState\n ? { parent: prevState, pool: prevState }\n : didSuspend))\n : (didSuspend = getSuspendedCache()),\n (showFallback = {\n baseLanes: showFallback.baseLanes | renderLanes,\n cachePool: didSuspend\n })),\n (nextProps.memoizedState = showFallback),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(current.child, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: nextProps.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_temp = workInProgress.deletions),\n null === JSCompiler_temp\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : JSCompiler_temp.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateDehydratedSuspenseComponent(\n current,\n workInProgress,\n didSuspend,\n didPrimaryChildrenDefer,\n nextProps,\n suspenseInstance,\n suspenseState,\n renderLanes\n) {\n if (didSuspend) {\n if (workInProgress.flags & 256)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )\n );\n if (null !== workInProgress.memoizedState)\n return (\n reuseSuspenseHandlerOnStack(),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n null\n );\n reuseSuspenseHandlerOnStack();\n suspenseInstance = nextProps.fallback;\n suspenseState = workInProgress.mode;\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: nextProps.children },\n suspenseState\n );\n suspenseInstance = createFiberFromFragment(\n suspenseInstance,\n suspenseState,\n renderLanes,\n null\n );\n suspenseInstance.flags |= 2;\n nextProps.return = workInProgress;\n suspenseInstance.return = workInProgress;\n nextProps.sibling = suspenseInstance;\n workInProgress.child = nextProps;\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n nextProps = workInProgress.child;\n nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes);\n nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n didPrimaryChildrenDefer,\n renderLanes\n );\n workInProgress.memoizedState = SUSPENDED_MARKER;\n return bailoutOffscreenComponent(null, nextProps);\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n if (isSuspenseInstanceFallback(suspenseInstance)) {\n didPrimaryChildrenDefer =\n suspenseInstance.nextSibling && suspenseInstance.nextSibling.dataset;\n if (didPrimaryChildrenDefer) var digest = didPrimaryChildrenDefer.dgst;\n didPrimaryChildrenDefer = digest;\n \"\" !== didPrimaryChildrenDefer &&\n ((nextProps = Error(formatProdErrorMessage(419))),\n (nextProps.stack = \"\"),\n (nextProps.digest = didPrimaryChildrenDefer),\n queueHydrationError({ value: nextProps, source: null, stack: null }));\n return retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n }\n didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1);\n didPrimaryChildrenDefer = 0 !== (renderLanes & current.childLanes);\n if (didReceiveUpdate || didPrimaryChildrenDefer) {\n if (null !== currentTreeHiddenStackCursor.current)\n return retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n didPrimaryChildrenDefer = workInProgressRoot;\n if (\n null !== didPrimaryChildrenDefer &&\n ((nextProps = getBumpedLaneForHydration(\n didPrimaryChildrenDefer,\n renderLanes\n )),\n 0 !== nextProps && nextProps !== suspenseState.retryLane)\n )\n throw (\n ((suspenseState.retryLane = nextProps),\n enqueueConcurrentRenderForLane(current, nextProps),\n scheduleUpdateOnFiber(didPrimaryChildrenDefer, current, nextProps),\n SelectiveHydrationException)\n );\n isSuspenseInstancePending(suspenseInstance) ||\n renderDidSuspendDelayIfPossible();\n return retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n }\n if (isSuspenseInstancePending(suspenseInstance))\n return (\n (workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n null\n );\n current = suspenseState.treeContext;\n nextHydratableInstance = getNextHydratable(suspenseInstance.nextSibling);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !1;\n null !== current && restoreSuspendedTreeContext(workInProgress, current);\n workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n nextProps.children\n );\n workInProgress.flags |= 134221824;\n return workInProgress;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction findLastContentRow(firstChild) {\n for (var lastContentRow = null; null !== firstChild; ) {\n var currentRow = firstChild.alternate;\n null !== currentRow &&\n null === findFirstSuspended(currentRow) &&\n (lastContentRow = firstChild);\n firstChild = firstChild.sibling;\n }\n return lastContentRow;\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode,\n treeForkCount\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode,\n treeForkCount: treeForkCount\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode),\n (renderState.treeForkCount = treeForkCount));\n}\nfunction reverseChildren(fiber) {\n var row = fiber.child;\n for (fiber.child = null; null !== row; ) {\n var nextRow = row.sibling;\n row.sibling = fiber.child;\n fiber.child = row;\n row = nextRow;\n }\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n var suspenseContext = suspenseStackCursor.current;\n if (workInProgress.flags & 128)\n return pushSuspenseListContext(workInProgress, suspenseContext), null;\n var shouldForceFallback = 0 !== (suspenseContext & 2);\n shouldForceFallback\n ? ((suspenseContext = (suspenseContext & 1) | 2),\n (workInProgress.flags |= 128))\n : (suspenseContext &= 1);\n pushSuspenseListContext(workInProgress, suspenseContext);\n \"backwards\" === revealOrder && null !== current\n ? (reverseChildren(current),\n reconcileChildren(current, workInProgress, nextProps, renderLanes),\n reverseChildren(current))\n : reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = isHydrating ? treeForkCount : 0;\n if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n switch (revealOrder) {\n case \"backwards\":\n renderLanes = findLastContentRow(workInProgress.child);\n null === renderLanes\n ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling),\n (renderLanes.sibling = null),\n reverseChildren(workInProgress));\n initSuspenseListRenderState(\n workInProgress,\n !0,\n revealOrder,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"unstable_legacy-backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"together\":\n initSuspenseListRenderState(\n workInProgress,\n !1,\n null,\n null,\n void 0,\n nextProps\n );\n break;\n case \"independent\":\n workInProgress.memoizedState = null;\n break;\n default:\n (renderLanes = findLastContentRow(workInProgress.child)),\n null === renderLanes\n ? ((revealOrder = workInProgress.child),\n (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null)),\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode,\n nextProps\n );\n }\n return workInProgress.child;\n}\nfunction updateContextProvider(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n pushProvider(workInProgress, workInProgress.type, newProps.value);\n reconcileChildren(current, workInProgress, newProps.children, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(formatProdErrorMessage(153));\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 31:\n if (null !== workInProgress.memoizedState)\n return (\n (workInProgress.flags |= 128),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n null\n );\n break;\n case 13:\n var state$108 = workInProgress.memoizedState;\n if (null !== state$108) {\n if (null !== state$108.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n state$108 = propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n );\n var primaryChildLanes = workInProgress.child.childLanes;\n if (state$108 || 0 !== (renderLanes & primaryChildLanes))\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n if (workInProgress.flags & 128)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n primaryChildLanes = 0 !== (current.flags & 128);\n state$108 = 0 !== (renderLanes & workInProgress.childLanes);\n state$108 ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (state$108 = 0 !== (renderLanes & workInProgress.childLanes)));\n if (primaryChildLanes) {\n if (state$108)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n primaryChildLanes = workInProgress.memoizedState;\n null !== primaryChildLanes &&\n ((primaryChildLanes.rendering = null),\n (primaryChildLanes.tail = null),\n (primaryChildLanes.lastEffect = null));\n pushSuspenseListContext(workInProgress, suspenseStackCursor.current);\n if (state$108) break;\n else return null;\n case 22:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n )\n );\n case 24:\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n if (null !== current)\n if (current.memoizedProps !== workInProgress.pendingProps)\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else\n (didReceiveUpdate = !1),\n isHydrating &&\n 0 !== (workInProgress.flags & 1048576) &&\n pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: {\n var props = workInProgress.pendingProps;\n current = resolveLazy(workInProgress.elementType);\n workInProgress.type = current;\n if (\"function\" === typeof current)\n shouldConstruct(current)\n ? ((props = resolveClassComponentProps(current, props)),\n (workInProgress.tag = 1),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current) {\n var $$typeof = current.$$typeof;\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n workInProgress.tag = 11;\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_CONTEXT_TYPE) {\n workInProgress.tag = 10;\n workInProgress.type = current;\n workInProgress = updateContextProvider(\n null,\n workInProgress,\n renderLanes\n );\n break a;\n }\n }\n workInProgress = getComponentNameFromType(current) || current;\n throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n }\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (props = workInProgress.type),\n ($$typeof = resolveClassComponentProps(\n props,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n props,\n $$typeof,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current) throw Error(formatProdErrorMessage(387));\n props = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n $$typeof = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, props, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n props = nextState.cache;\n pushProvider(workInProgress, CacheContext, props);\n props !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n props = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: props,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else if (props !== $$typeof) {\n $$typeof = createCapturedValueAtFiber(\n Error(formatProdErrorMessage(424)),\n workInProgress\n );\n queueHydrationError($$typeof);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !0;\n renderLanes = mountChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n );\n for (workInProgress.child = renderLanes; renderLanes; )\n (renderLanes.flags = (renderLanes.flags & -3) | 134221824),\n (renderLanes = renderLanes.sibling);\n }\n else {\n resetHydrationState();\n if (props === $$typeof) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(current, workInProgress, props, renderLanes);\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (renderLanes = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = renderLanes)\n : isHydrating ||\n (workInProgress.stateNode = createHoistableInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current,\n workInProgress\n ))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((props = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current\n )),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n ($$typeof = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n (nextHydratableInstance = getNextHydratable(props.firstChild)))\n : (nextHydratableInstance = $$typeof)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n if (null === current && isHydrating) {\n if (($$typeof = props = nextHydratableInstance))\n (props = canHydrateInstance(\n props,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== props\n ? ((workInProgress.stateNode = props),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(props.firstChild)),\n (rootOrSingletonContext = !1),\n ($$typeof = !0))\n : ($$typeof = !1);\n $$typeof || throwOnHydrationMismatch(workInProgress);\n }\n pushHostContext(workInProgress);\n $$typeof = workInProgress.type;\n prevState = workInProgress.pendingProps;\n nextState = null !== current ? current.memoizedProps : null;\n props = prevState.children;\n shouldSetTextContent($$typeof, prevState)\n ? (props = null)\n : null !== nextState &&\n shouldSetTextContent($$typeof, nextState) &&\n (workInProgress.flags |= 32);\n null !== workInProgress.memoizedState &&\n (($$typeof = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = $$typeof));\n markRef(current, workInProgress);\n reconcileChildren(current, workInProgress, props, renderLanes);\n return workInProgress.child;\n case 6:\n if (null === current && isHydrating) {\n if ((current = renderLanes = nextHydratableInstance))\n (renderLanes = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== renderLanes\n ? ((workInProgress.stateNode = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (current = !0))\n : (current = !1);\n current || throwOnHydrationMismatch(workInProgress);\n }\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (props = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n ))\n : reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n (props = workInProgress.pendingProps),\n markRef(current, workInProgress),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return updateContextProvider(current, workInProgress, renderLanes);\n case 9:\n return (\n ($$typeof = workInProgress.type._context),\n (props = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress),\n ($$typeof = readContext($$typeof)),\n (props = props($$typeof)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 31:\n return updateActivityComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n );\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (props = readContext(CacheContext)),\n null === current\n ? (($$typeof = peekCacheFromPool()),\n null === $$typeof &&\n (($$typeof = workInProgressRoot),\n (prevState = createCache()),\n ($$typeof.pooledCache = prevState),\n prevState.refCount++,\n null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n ($$typeof = prevState)),\n (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, $$typeof))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n ($$typeof = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n $$typeof.parent !== props\n ? (($$typeof = { parent: props, cache: props }),\n (workInProgress.memoizedState = $$typeof),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n $$typeof),\n pushProvider(workInProgress, CacheContext, props))\n : ((props = prevState.cache),\n pushProvider(workInProgress, CacheContext, props),\n props !== $$typeof.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 30:\n return (\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n autoName: null,\n paired: null,\n clones: null,\n ref: null\n }),\n (props = workInProgress.pendingProps),\n null != props.name && \"auto\" !== props.name\n ? (workInProgress.flags |= null === current ? 18882560 : 18874368)\n : isHydrating && pushMaterializedTreeId(workInProgress),\n null !== current && current.memoizedProps.name !== props.name\n ? (workInProgress.flags |= 4194816)\n : markRef(current, workInProgress),\n reconcileChildren(current, workInProgress, props.children, renderLanes),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n oldProps,\n newProps,\n renderLanes\n) {\n var JSCompiler_temp;\n if ((JSCompiler_temp = 0 !== (workInProgress.mode & 32)))\n JSCompiler_temp =\n null === oldProps\n ? maySuspendCommit(type, newProps)\n : maySuspendCommit(type, newProps) &&\n (newProps.src !== oldProps.src ||\n newProps.srcSet !== oldProps.srcSet);\n if (JSCompiler_temp) {\n if (\n ((workInProgress.flags |= 16777216),\n (renderLanes & 335544128) === renderLanes)\n )\n if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n workInProgress.flags &= -16777217;\n else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"visible\":\n break;\n case \"collapsed\":\n for (\n var tailNode = renderState.tail, lastTailNode = null;\n null !== tailNode;\n\n )\n null !== tailNode.alternate && (lastTailNode = tailNode),\n (tailNode = tailNode.sibling);\n null === lastTailNode\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode.sibling = null);\n break;\n default:\n hasRenderedATailFallback = renderState.tail;\n for (tailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (tailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === tailNode\n ? (renderState.tail = null)\n : (tailNode.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$113 = completedWork.child; null !== child$113; )\n (newChildLanes |= child$113.lanes | child$113.childLanes),\n (subtreeFlags |= child$113.subtreeFlags & 1206910976),\n (subtreeFlags |= child$113.flags & 1206910976),\n (child$113.return = completedWork),\n (child$113 = child$113.sibling);\n else\n for (child$113 = completedWork.child; null !== child$113; )\n (newChildLanes |= child$113.lanes | child$113.childLanes),\n (subtreeFlags |= child$113.subtreeFlags),\n (subtreeFlags |= child$113.flags),\n (child$113.return = completedWork),\n (child$113 = child$113.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext);\n popHostContainer();\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? markUpdate(workInProgress)\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n var type = workInProgress.type,\n nextResource = workInProgress.memoizedState;\n null === current\n ? (markUpdate(workInProgress),\n null !== nextResource\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n null,\n newProps,\n renderLanes\n )))\n : nextResource\n ? nextResource !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : ((current = current.memoizedProps),\n current !== newProps && markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n current,\n newProps,\n renderLanes\n ));\n return null;\n case 27:\n popHostContext(workInProgress);\n renderLanes = rootInstanceStackCursor.current;\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n workInProgress.subtreeFlags &= -33554433;\n return null;\n }\n current = contextStackCursor.current;\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n workInProgress.subtreeFlags &= -33554433;\n return null;\n case 5:\n popHostContext(workInProgress);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n workInProgress.subtreeFlags &= -33554433;\n return null;\n }\n nextResource = contextStackCursor.current;\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, nextResource);\n else {\n var ownerDocument = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n );\n switch (nextResource) {\n case 1:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case 2:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n default:\n switch (type) {\n case \"svg\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case \"math\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n case \"script\":\n nextResource = ownerDocument.createElement(\"div\");\n nextResource.innerHTML = \" + + + +
+ + diff --git a/suites-experimental/stormbox-react/dist/resources.txt b/suites-experimental/stormbox-react/dist/resources.txt new file mode 100644 index 000000000..b3976c30a --- /dev/null +++ b/suites-experimental/stormbox-react/dist/resources.txt @@ -0,0 +1,13 @@ +assets/Inter-Bold-CuhepTt8.woff2 +assets/Inter-Medium-P1cOs5ep.woff2 +assets/Inter-Regular-CKDp9E3C.woff2 +assets/Inter-SemiBold-Ctx7G98q.woff2 +assets/Metropolis-Bold-BZLKi5Gb.woff2 +assets/Metropolis-Light-zcEanPsD.woff2 +assets/Metropolis-Regular-DKepXnDq.woff2 +assets/Metropolis-SemiBold-D_dLm6Ff.woff2 +assets/index-AWVjlOug.css +assets/index-DIr-gxPn.js +assets/index-DIr-gxPn.js.map +favicon-32.png +index.html diff --git a/suites-experimental/suites.mjs b/suites-experimental/suites.mjs index d6f03984a..53a2281ee 100644 --- a/suites-experimental/suites.mjs +++ b/suites-experimental/suites.mjs @@ -34,6 +34,19 @@ function yieldTask() { }); } +// Lets React commit an interaction, then forces layout, so each Stormbox +// step measures the update it triggered. +async function stormboxSettle(page) { + await yieldTask(); + page.layout(); +} + +// The message list is virtualized: only rendered rows can be targeted, and +// the rendered window depends on where earlier steps left the scroll. +function stormboxRow(page, n) { + return page.querySelectorAll(".msg-list__items li")[n]; +} + export const ExperimentalSuites = freezeSuites([ { name: "TodoMVC-LocalStorage", @@ -478,4 +491,199 @@ export const ExperimentalSuites = freezeSuites([ }), ], }, + { + name: "Stormbox-React", + // animations=off drops CSS transitions and the reading pane's wait for + // the folder list to slide away (both 360ms), so they cannot spill into + // a later measurement. Layout still follows the 800px viewport: opening + // a message hides the folder list, closing it brings it back. + url: "suites-experimental/stormbox-react/dist/index.html?animations=off", + resources: "suites-experimental/stormbox-react/dist/resources.txt", + tags: ["experimental", "react", "webmail"], + type: "async", + async prepare(page) { + await page.waitForElement(".msg-list__items li"); + }, + tests: [ + new BenchmarkTestStep("SwitchFolders", async (page) => { + const folder = (id) => page.querySelector(`.folder-node[data-folder-id="${id}"] .folder-node__button`); + const toggle = (id) => page.querySelector(`.folder-node[data-folder-id="${id}"] .folder-node__toggle`); + // Archive and Newsletters are the large folders; Projects and + // Open source expand to reach their subfolders; Starred is a tag + // view built by scanning every message. + const clicks = [ + () => folder(5), + () => folder(20), + () => folder(4), + () => toggle(10), + () => folder(11), + () => toggle(26), + () => folder(27), + () => toggle(26), + () => toggle(10), + () => page.querySelector('[data-tag-view="$flagged"] button'), + () => folder(21), + () => folder(1), + ]; + for (const target of clicks) { + target().click(); + await stormboxSettle(page); + } + }), + // The list is virtualized at a fixed row height, so every offset + // replaces the rendered rows. The scroll event is dispatched by hand, + // as in ChatRoom-React, to keep a frame out of the measured window. + new BenchmarkTestStep("ScrollMessageList", async (page) => { + const scroller = page.querySelector(".msg-list__scroller"); + const viewportHeight = scroller.clientHeight; + const scrollTo = async (offset) => { + scroller.scrollTop = offset; + scroller.dispatchEvent("scroll"); + await stormboxSettle(page); + }; + for (let i = 1; i <= 10; i++) + await scrollTo(i * viewportHeight); + const strides = 10; + for (let i = 1; i <= strides; i++) + await scrollTo(((scroller.scrollHeight - viewportHeight) * i) / strides); + await scrollTo(0); + }), + // The first message is opened by click, the rest with J (next + // message). Plain text renders inline; HTML goes through DOMPurify, + // dark-mode adaptation and a sandboxed srcdoc iframe. + new BenchmarkTestStep("ReadMessages", async (page) => { + const J_KEY = 74; + stormboxRow(page, 0).querySelector(".msg-list__open").click(); + await stormboxSettle(page); + for (let i = 0; i < 15; i++) { + page.querySelector(".msg-list__scroller").dispatchKeyEvent("keydown", J_KEY, "j"); + await stormboxSettle(page); + } + page.querySelector(".message-view__action--back").click(); + await stormboxSettle(page); + }), + // The row overlay's star and tag buttons; the tag button opens the + // tag menu as a popover, toggles Work, and closes it again. Starts + // from the top of the list so every browser acts on the same rows. + new BenchmarkTestStep("StarAndTagMessages", async (page) => { + const scroller = page.querySelector(".msg-list__scroller"); + scroller.scrollTop = 0; + scroller.dispatchEvent("scroll"); + await stormboxSettle(page); + const row = (index) => page.querySelector(`.msg-list__items li[data-index="${index}"]`); + for (let i = 0; i < 10; i++) { + row(i).querySelector(".msg-list__action--star").click(); + await stormboxSettle(page); + } + for (let i = 0; i < 5; i++) { + row(i).querySelector(".msg-list__action--tag").click(); + await stormboxSettle(page); + page.querySelector('[data-tag-picker-popover] [data-tag-keyword="$label2"]').click(); + await stormboxSettle(page); + row(i).querySelector(".msg-list__action--tag").click(); + await stormboxSettle(page); + } + }), + // Select all checks every Inbox message, so each bulk action + // rewrites the whole folder. + new BenchmarkTestStep("BulkActions", async (page) => { + const clicks = [ + ".msg-list__select-all input", + '[data-bulk-action="mark-read"]', + '[data-bulk-action="toggle-star"]', + '[data-bulk-action="toggle-star"]', + ".msg-list__bulk-action--tag", + '.tag-picker-dropdown__menu [data-tag-keyword="$label4"]', + ".msg-list__bulk-action--tag", + ".selectable-list-header__clear", + ]; + for (const selector of clicks) { + page.querySelector(selector).click(); + await stormboxSettle(page); + } + }), + new BenchmarkTestStep("QuickFilter", async (page) => { + const input = page.querySelector(".quick-filter__input"); + const query = "renderer"; + for (let i = 1; i <= query.length; i++) { + input.setValue(query.slice(0, i)); + input.dispatchEvent("input"); + await stormboxSettle(page); + } + for (let i = query.length - 1; i >= 0; i--) { + input.setValue(query.slice(0, i)); + input.dispatchEvent("input"); + await stormboxSettle(page); + } + }), + // Removing checked rows opens their neighbour, as Stormbox does, + // and the next checkbox closes it again. + new BenchmarkTestStep("ArchiveAndDelete", async (page) => { + const selectRows = async (count) => { + for (let i = 0; i < count; i++) { + stormboxRow(page, i).querySelector(".msg-list__check input").click(); + await stormboxSettle(page); + } + }; + const clicks = async (...selectors) => { + for (const selector of selectors) { + page.querySelector(selector).click(); + await stormboxSettle(page); + } + }; + await selectRows(10); + await clicks('[data-bulk-action="archive"]'); + await selectRows(10); + await clicks('[data-bulk-action="delete"]', ".message-view__action--back"); + // Trash now holds the deleted rows; emptying it removes them for good. + await clicks('.folder-node[data-folder-id="7"] .folder-node__button', ".msg-list__select-all input", '[data-bulk-action="delete"]'); + await clicks('.folder-node[data-folder-id="1"] .folder-node__button'); + }), + // Reply loads the quoted message into the Squire editor; a new + // message (the C shortcut: the open message hides the sidebar) + // commits a typed recipient as a pill. Both are sent. + new BenchmarkTestStep("ComposeAndSend", async (page) => { + const ENTER_KEY = 13; + const C_KEY = 67; + for (let i = 0; i < 3; i++) { + stormboxRow(page, i).querySelector(".msg-list__open").click(); + await stormboxSettle(page); + page.querySelector('.message-view__action[aria-label="Reply"]').click(); + await stormboxSettle(page); + page.querySelector(".compose-dialog--expanded .compose-send").click(); + await stormboxSettle(page); + + page.querySelector(".msg-list__scroller").dispatchKeyEvent("keydown", C_KEY, "c"); + await stormboxSettle(page); + const to = page.querySelector("#compose-to"); + to.setValue(`Priya García `); + to.dispatchEvent("input"); + to.dispatchKeyEvent("keydown", ENTER_KEY, "Enter"); + await stormboxSettle(page); + const subject = page.querySelector("#compose-subject"); + subject.setValue(`Quarterly numbers, part ${i + 1}`); + subject.dispatchEvent("input"); + await stormboxSettle(page); + page.querySelector(".compose-dialog--expanded .compose-send").click(); + await stormboxSettle(page); + } + page.querySelector(".message-view__action--back").click(); + await stormboxSettle(page); + }), + // Each theme switch restyles the page and re-adapts the open HTML + // newsletter for the new color scheme. + new BenchmarkTestStep("ToggleTheme", async (page) => { + page.querySelector('.folder-node[data-folder-id="20"] .folder-node__button').click(); + await stormboxSettle(page); + stormboxRow(page, 0).querySelector(".msg-list__open").click(); + await stormboxSettle(page); + for (let i = 0; i < 4; i++) { + page.querySelector(".theme-toggle").click(); + await stormboxSettle(page); + } + page.querySelector(".message-view__action--back").click(); + await stormboxSettle(page); + }), + ], + }, ]); From 5011e70b325024b203734291a45fa187b890a701 Mon Sep 17 00:00:00 2001 From: Jeff Muizelaar Date: Wed, 21 Oct 2026 20:36:31 -0400 Subject: [PATCH 2/9] End Stormbox-React's ReadMessages step at the first message so the list is at the top for the next step The virtualizer re-applies its last scrollToIndex target on later frames; leaving it on row 0 keeps that from scrolling the list, and closing the tag popover, during StarAndTagMessages. --- suites-experimental/suites.mjs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/suites-experimental/suites.mjs b/suites-experimental/suites.mjs index 53a2281ee..ebb281f07 100644 --- a/suites-experimental/suites.mjs +++ b/suites-experimental/suites.mjs @@ -548,28 +548,33 @@ export const ExperimentalSuites = freezeSuites([ await scrollTo(((scroller.scrollHeight - viewportHeight) * i) / strides); await scrollTo(0); }), - // The first message is opened by click, the rest with J (next + // The first message is opened by click, the next 15 with J (next // message). Plain text renders inline; HTML goes through DOMPurify, // dark-mode adaptation and a sandboxed srcdoc iframe. + // + // The cursor follow (TanStack Virtual's scrollToIndex) re-applies its + // target on later frames until it settles, even across other + // scrolls; Back changes the row heights and so the target. Home makes + // row 0 the last target, whose offset stays 0, so the list is at the + // top for the next step and a late re-application changes nothing. new BenchmarkTestStep("ReadMessages", async (page) => { const J_KEY = 74; + const HOME_KEY = 36; stormboxRow(page, 0).querySelector(".msg-list__open").click(); await stormboxSettle(page); + const scroller = page.querySelector(".msg-list__scroller"); for (let i = 0; i < 15; i++) { - page.querySelector(".msg-list__scroller").dispatchKeyEvent("keydown", J_KEY, "j"); + scroller.dispatchKeyEvent("keydown", J_KEY, "j"); await stormboxSettle(page); } + scroller.dispatchKeyEvent("keydown", HOME_KEY, "Home"); + await stormboxSettle(page); page.querySelector(".message-view__action--back").click(); await stormboxSettle(page); }), // The row overlay's star and tag buttons; the tag button opens the - // tag menu as a popover, toggles Work, and closes it again. Starts - // from the top of the list so every browser acts on the same rows. + // tag menu as a popover, toggles Work, and closes it again. new BenchmarkTestStep("StarAndTagMessages", async (page) => { - const scroller = page.querySelector(".msg-list__scroller"); - scroller.scrollTop = 0; - scroller.dispatchEvent("scroll"); - await stormboxSettle(page); const row = (index) => page.querySelector(`.msg-list__items li[data-index="${index}"]`); for (let i = 0; i < 10; i++) { row(i).querySelector(".msg-list__action--star").click(); From 4e20a8854445bfe9082faff2f4b3b73a83204aec Mon Sep 17 00:00:00 2001 From: Jeff Muizelaar Date: Mon, 9 Nov 2026 14:16:12 -0500 Subject: [PATCH 3/9] Don't force a layout --- suites-experimental/stormbox-react/README.md | 2 +- suites-experimental/suites.mjs | 74 ++++++++++---------- 2 files changed, 37 insertions(+), 39 deletions(-) diff --git a/suites-experimental/stormbox-react/README.md b/suites-experimental/stormbox-react/README.md index 88dae5701..353a7d922 100644 --- a/suites-experimental/stormbox-react/README.md +++ b/suites-experimental/stormbox-react/README.md @@ -11,7 +11,7 @@ transitions and the reading pane's 310ms wait for the folder list, so the 800px viewport's responsive layout (opening a message hides the folder list) happens within the interaction that triggers it. -Steps, each interaction followed by a task yield and a forced layout: +Steps, each interaction followed by a task yield: - `SwitchFolders`: large folders, nested subfolders and the Starred tag view. - `ScrollMessageList`: the virtualized Inbox, a viewport at a time, then in diff --git a/suites-experimental/suites.mjs b/suites-experimental/suites.mjs index ebb281f07..7785b72ba 100644 --- a/suites-experimental/suites.mjs +++ b/suites-experimental/suites.mjs @@ -34,11 +34,9 @@ function yieldTask() { }); } -// Lets React commit an interaction, then forces layout, so each Stormbox -// step measures the update it triggered. -async function stormboxSettle(page) { +// Lets React commit an interaction before the next one. +async function stormboxSettle() { await yieldTask(); - page.layout(); } // The message list is virtualized: only rendered rows can be targeted, and @@ -527,7 +525,7 @@ export const ExperimentalSuites = freezeSuites([ ]; for (const target of clicks) { target().click(); - await stormboxSettle(page); + await stormboxSettle(); } }), // The list is virtualized at a fixed row height, so every offset @@ -539,7 +537,7 @@ export const ExperimentalSuites = freezeSuites([ const scrollTo = async (offset) => { scroller.scrollTop = offset; scroller.dispatchEvent("scroll"); - await stormboxSettle(page); + await stormboxSettle(); }; for (let i = 1; i <= 10; i++) await scrollTo(i * viewportHeight); @@ -561,32 +559,32 @@ export const ExperimentalSuites = freezeSuites([ const J_KEY = 74; const HOME_KEY = 36; stormboxRow(page, 0).querySelector(".msg-list__open").click(); - await stormboxSettle(page); + await stormboxSettle(); const scroller = page.querySelector(".msg-list__scroller"); - for (let i = 0; i < 15; i++) { + for (let i = 0; i < 5; i++) { scroller.dispatchKeyEvent("keydown", J_KEY, "j"); - await stormboxSettle(page); + await stormboxSettle(); } scroller.dispatchKeyEvent("keydown", HOME_KEY, "Home"); - await stormboxSettle(page); + await stormboxSettle(); page.querySelector(".message-view__action--back").click(); - await stormboxSettle(page); + await stormboxSettle(); }), // The row overlay's star and tag buttons; the tag button opens the // tag menu as a popover, toggles Work, and closes it again. new BenchmarkTestStep("StarAndTagMessages", async (page) => { const row = (index) => page.querySelector(`.msg-list__items li[data-index="${index}"]`); - for (let i = 0; i < 10; i++) { + for (let i = 0; i < 5; i++) { row(i).querySelector(".msg-list__action--star").click(); - await stormboxSettle(page); + await stormboxSettle(); } - for (let i = 0; i < 5; i++) { + for (let i = 0; i < 3; i++) { row(i).querySelector(".msg-list__action--tag").click(); - await stormboxSettle(page); + await stormboxSettle(); page.querySelector('[data-tag-picker-popover] [data-tag-keyword="$label2"]').click(); - await stormboxSettle(page); + await stormboxSettle(); row(i).querySelector(".msg-list__action--tag").click(); - await stormboxSettle(page); + await stormboxSettle(); } }), // Select all checks every Inbox message, so each bulk action @@ -604,7 +602,7 @@ export const ExperimentalSuites = freezeSuites([ ]; for (const selector of clicks) { page.querySelector(selector).click(); - await stormboxSettle(page); + await stormboxSettle(); } }), new BenchmarkTestStep("QuickFilter", async (page) => { @@ -613,12 +611,12 @@ export const ExperimentalSuites = freezeSuites([ for (let i = 1; i <= query.length; i++) { input.setValue(query.slice(0, i)); input.dispatchEvent("input"); - await stormboxSettle(page); + await stormboxSettle(); } for (let i = query.length - 1; i >= 0; i--) { input.setValue(query.slice(0, i)); input.dispatchEvent("input"); - await stormboxSettle(page); + await stormboxSettle(); } }), // Removing checked rows opens their neighbour, as Stormbox does, @@ -627,18 +625,18 @@ export const ExperimentalSuites = freezeSuites([ const selectRows = async (count) => { for (let i = 0; i < count; i++) { stormboxRow(page, i).querySelector(".msg-list__check input").click(); - await stormboxSettle(page); + await stormboxSettle(); } }; const clicks = async (...selectors) => { for (const selector of selectors) { page.querySelector(selector).click(); - await stormboxSettle(page); + await stormboxSettle(); } }; - await selectRows(10); + await selectRows(5); await clicks('[data-bulk-action="archive"]'); - await selectRows(10); + await selectRows(5); await clicks('[data-bulk-action="delete"]', ".message-view__action--back"); // Trash now holds the deleted rows; emptying it removes them for good. await clicks('.folder-node[data-folder-id="7"] .folder-node__button', ".msg-list__select-all input", '[data-bulk-action="delete"]'); @@ -650,44 +648,44 @@ export const ExperimentalSuites = freezeSuites([ new BenchmarkTestStep("ComposeAndSend", async (page) => { const ENTER_KEY = 13; const C_KEY = 67; - for (let i = 0; i < 3; i++) { + for (let i = 0; i < 2; i++) { stormboxRow(page, i).querySelector(".msg-list__open").click(); - await stormboxSettle(page); + await stormboxSettle(); page.querySelector('.message-view__action[aria-label="Reply"]').click(); - await stormboxSettle(page); + await stormboxSettle(); page.querySelector(".compose-dialog--expanded .compose-send").click(); - await stormboxSettle(page); + await stormboxSettle(); page.querySelector(".msg-list__scroller").dispatchKeyEvent("keydown", C_KEY, "c"); - await stormboxSettle(page); + await stormboxSettle(); const to = page.querySelector("#compose-to"); to.setValue(`Priya García `); to.dispatchEvent("input"); to.dispatchKeyEvent("keydown", ENTER_KEY, "Enter"); - await stormboxSettle(page); + await stormboxSettle(); const subject = page.querySelector("#compose-subject"); subject.setValue(`Quarterly numbers, part ${i + 1}`); subject.dispatchEvent("input"); - await stormboxSettle(page); + await stormboxSettle(); page.querySelector(".compose-dialog--expanded .compose-send").click(); - await stormboxSettle(page); + await stormboxSettle(); } page.querySelector(".message-view__action--back").click(); - await stormboxSettle(page); + await stormboxSettle(); }), // Each theme switch restyles the page and re-adapts the open HTML // newsletter for the new color scheme. new BenchmarkTestStep("ToggleTheme", async (page) => { page.querySelector('.folder-node[data-folder-id="20"] .folder-node__button').click(); - await stormboxSettle(page); + await stormboxSettle(); stormboxRow(page, 0).querySelector(".msg-list__open").click(); - await stormboxSettle(page); - for (let i = 0; i < 4; i++) { + await stormboxSettle(); + for (let i = 0; i < 2; i++) { page.querySelector(".theme-toggle").click(); - await stormboxSettle(page); + await stormboxSettle(); } page.querySelector(".message-view__action--back").click(); - await stormboxSettle(page); + await stormboxSettle(); }), ], }, From cd01ab96869cd82c900d37ec21350ef525544590 Mon Sep 17 00:00:00 2001 From: Jeff Muizelaar Date: Tue, 10 Nov 2026 13:07:28 -0500 Subject: [PATCH 4/9] Add stormbox-react source --- .eslintignore | 1 + .prettierignore | 1 + suites-experimental/stormbox-react/.gitignore | 1 + suites-experimental/stormbox-react/LICENSE | 373 ++ suites-experimental/stormbox-react/README.md | 91 +- suites-experimental/stormbox-react/index.html | 13 + .../stormbox-react/package-lock.json | 1120 +++++ .../stormbox-react/package.json | 31 + .../stormbox-react/public/favicon-32.png | Bin 0 -> 2671 bytes .../scripts/generate-resources.mjs | 5 + .../scripts/port-vue-styles.mjs | 147 + .../stormbox-react/src/App.tsx | 342 ++ .../src/assets/fonts/Inter/Inter-Bold.woff2 | Bin 0 -> 106140 bytes .../src/assets/fonts/Inter/Inter-Medium.woff2 | Bin 0 -> 105924 bytes .../assets/fonts/Inter/Inter-Regular.woff2 | Bin 0 -> 98868 bytes .../assets/fonts/Inter/Inter-SemiBold.woff2 | Bin 0 -> 105804 bytes .../fonts/Metropolis/Metropolis-Bold.woff2 | Bin 0 -> 26428 bytes .../fonts/Metropolis/Metropolis-Light.woff2 | Bin 0 -> 25912 bytes .../fonts/Metropolis/Metropolis-Regular.woff2 | Bin 0 -> 24152 bytes .../Metropolis/Metropolis-SemiBold.woff2 | Bin 0 -> 26564 bytes .../src/assets/icons/app-tile-appointment.svg | 4 + .../src/assets/icons/app-tile-mail.svg | 4 + .../src/assets/icons/app-tile-send.svg | 4 + .../src/assets/icons/tb-folder-archive.svg | 7 + .../src/assets/icons/tb-folder-draft.svg | 7 + .../src/assets/icons/tb-folder-inbox.svg | 7 + .../src/assets/icons/tb-folder-newsletter.svg | 7 + .../src/assets/icons/tb-folder-rss.svg | 7 + .../src/assets/icons/tb-folder-scheduled.svg | 4 + .../src/assets/icons/tb-folder-sent.svg | 7 + .../src/assets/icons/tb-folder-spam.svg | 7 + .../src/assets/icons/tb-folder-trash.svg | 7 + .../src/assets/icons/tb-folder.svg | 7 + .../src/assets/icons/tb-forward.svg | 7 + .../src/assets/icons/tb-mail-glyph.svg | 7 + .../src/assets/icons/tb-reply-all.svg | 7 + .../src/assets/icons/tb-reply.svg | 7 + .../src/assets/icons/tb-support.svg | 7 + .../stormbox-react/src/clock.ts | 4 + .../stormbox-react/src/components/Compose.tsx | 349 ++ .../src/components/FolderTree.tsx | 291 ++ .../src/components/ListHeader.tsx | 302 ++ .../src/components/MessageList.tsx | 734 ++++ .../src/components/MessageListRow.tsx | 185 + .../src/components/MessageView.tsx | 523 +++ .../src/components/RecipientInput.tsx | 439 ++ .../src/components/RichTextEditor.tsx | 774 ++++ .../stormbox-react/src/components/Shell.tsx | 158 + .../stormbox-react/src/components/Tags.tsx | 416 ++ .../stormbox-react/src/components/Toasts.tsx | 31 + .../stormbox-react/src/components/base.tsx | 194 + .../stormbox-react/src/data/bodies.ts | 230 + .../stormbox-react/src/data/corpus.ts | 134 + .../stormbox-react/src/data/mailbox.ts | 348 ++ .../stormbox-react/src/data/random.ts | 34 + .../stormbox-react/src/data/text.ts | 74 + .../src/hooks/useColumnResize.ts | 65 + .../stormbox-react/src/hooks/useMediaQuery.ts | 12 + .../src/hooks/useMessageDrag.ts | 48 + .../stormbox-react/src/hooks/useShortcuts.ts | 151 + .../stormbox-react/src/main.tsx | 13 + .../stormbox-react/src/motion.ts | 7 + .../stormbox-react/src/store/compose-store.ts | 337 ++ .../stormbox-react/src/store/contacts.ts | 47 + .../stormbox-react/src/store/mail-store.ts | 465 +++ .../stormbox-react/src/store/ui-store.ts | 48 + .../stormbox-react/src/styles/app.css | 530 +++ .../stormbox-react/src/styles/components.css | 3716 +++++++++++++++++ .../stormbox-react/src/styles/local.css | 15 + .../stormbox-react/src/styles/services-ui.css | 68 + .../stormbox-react/src/styles/styles.css | 483 +++ .../stormbox-react/src/types.ts | 66 + .../stormbox-react/src/utils/address-key.ts | 80 + .../stormbox-react/src/utils/address-parse.ts | 721 ++++ .../stormbox-react/src/utils/color.ts | 312 ++ .../stormbox-react/src/utils/compose-quote.ts | 90 + .../stormbox-react/src/utils/dark-email.ts | 295 ++ .../src/utils/folder-presentation.ts | 183 + .../stormbox-react/src/utils/format-bytes.ts | 26 + .../stormbox-react/src/utils/keyboard.ts | 68 + .../stormbox-react/src/utils/message-html.ts | 466 +++ .../src/utils/message-row-presentation.ts | 81 + .../stormbox-react/src/utils/message-tags.ts | 428 ++ .../src/utils/plaintext-html.ts | 113 + .../stormbox-react/src/utils/quick-filter.ts | 17 + .../stormbox-react/src/utils/raster-images.ts | 17 + .../stormbox-react/src/utils/rich-text.ts | 105 + .../stormbox-react/src/utils/sender-avatar.ts | 107 + .../stormbox-react/src/vite-env.d.ts | 1 + .../stormbox-react/tsconfig.json | 16 + .../stormbox-react/vite.config.ts | 12 + 91 files changed, 16663 insertions(+), 5 deletions(-) create mode 100644 suites-experimental/stormbox-react/.gitignore create mode 100644 suites-experimental/stormbox-react/LICENSE create mode 100644 suites-experimental/stormbox-react/index.html create mode 100644 suites-experimental/stormbox-react/package-lock.json create mode 100644 suites-experimental/stormbox-react/package.json create mode 100644 suites-experimental/stormbox-react/public/favicon-32.png create mode 100644 suites-experimental/stormbox-react/scripts/generate-resources.mjs create mode 100644 suites-experimental/stormbox-react/scripts/port-vue-styles.mjs create mode 100644 suites-experimental/stormbox-react/src/App.tsx create mode 100644 suites-experimental/stormbox-react/src/assets/fonts/Inter/Inter-Bold.woff2 create mode 100644 suites-experimental/stormbox-react/src/assets/fonts/Inter/Inter-Medium.woff2 create mode 100644 suites-experimental/stormbox-react/src/assets/fonts/Inter/Inter-Regular.woff2 create mode 100644 suites-experimental/stormbox-react/src/assets/fonts/Inter/Inter-SemiBold.woff2 create mode 100644 suites-experimental/stormbox-react/src/assets/fonts/Metropolis/Metropolis-Bold.woff2 create mode 100644 suites-experimental/stormbox-react/src/assets/fonts/Metropolis/Metropolis-Light.woff2 create mode 100644 suites-experimental/stormbox-react/src/assets/fonts/Metropolis/Metropolis-Regular.woff2 create mode 100644 suites-experimental/stormbox-react/src/assets/fonts/Metropolis/Metropolis-SemiBold.woff2 create mode 100644 suites-experimental/stormbox-react/src/assets/icons/app-tile-appointment.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/app-tile-mail.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/app-tile-send.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-folder-archive.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-folder-draft.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-folder-inbox.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-folder-newsletter.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-folder-rss.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-folder-scheduled.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-folder-sent.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-folder-spam.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-folder-trash.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-folder.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-forward.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-mail-glyph.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-reply-all.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-reply.svg create mode 100644 suites-experimental/stormbox-react/src/assets/icons/tb-support.svg create mode 100644 suites-experimental/stormbox-react/src/clock.ts create mode 100644 suites-experimental/stormbox-react/src/components/Compose.tsx create mode 100644 suites-experimental/stormbox-react/src/components/FolderTree.tsx create mode 100644 suites-experimental/stormbox-react/src/components/ListHeader.tsx create mode 100644 suites-experimental/stormbox-react/src/components/MessageList.tsx create mode 100644 suites-experimental/stormbox-react/src/components/MessageListRow.tsx create mode 100644 suites-experimental/stormbox-react/src/components/MessageView.tsx create mode 100644 suites-experimental/stormbox-react/src/components/RecipientInput.tsx create mode 100644 suites-experimental/stormbox-react/src/components/RichTextEditor.tsx create mode 100644 suites-experimental/stormbox-react/src/components/Shell.tsx create mode 100644 suites-experimental/stormbox-react/src/components/Tags.tsx create mode 100644 suites-experimental/stormbox-react/src/components/Toasts.tsx create mode 100644 suites-experimental/stormbox-react/src/components/base.tsx create mode 100644 suites-experimental/stormbox-react/src/data/bodies.ts create mode 100644 suites-experimental/stormbox-react/src/data/corpus.ts create mode 100644 suites-experimental/stormbox-react/src/data/mailbox.ts create mode 100644 suites-experimental/stormbox-react/src/data/random.ts create mode 100644 suites-experimental/stormbox-react/src/data/text.ts create mode 100644 suites-experimental/stormbox-react/src/hooks/useColumnResize.ts create mode 100644 suites-experimental/stormbox-react/src/hooks/useMediaQuery.ts create mode 100644 suites-experimental/stormbox-react/src/hooks/useMessageDrag.ts create mode 100644 suites-experimental/stormbox-react/src/hooks/useShortcuts.ts create mode 100644 suites-experimental/stormbox-react/src/main.tsx create mode 100644 suites-experimental/stormbox-react/src/motion.ts create mode 100644 suites-experimental/stormbox-react/src/store/compose-store.ts create mode 100644 suites-experimental/stormbox-react/src/store/contacts.ts create mode 100644 suites-experimental/stormbox-react/src/store/mail-store.ts create mode 100644 suites-experimental/stormbox-react/src/store/ui-store.ts create mode 100644 suites-experimental/stormbox-react/src/styles/app.css create mode 100644 suites-experimental/stormbox-react/src/styles/components.css create mode 100644 suites-experimental/stormbox-react/src/styles/local.css create mode 100644 suites-experimental/stormbox-react/src/styles/services-ui.css create mode 100644 suites-experimental/stormbox-react/src/styles/styles.css create mode 100644 suites-experimental/stormbox-react/src/types.ts create mode 100644 suites-experimental/stormbox-react/src/utils/address-key.ts create mode 100644 suites-experimental/stormbox-react/src/utils/address-parse.ts create mode 100644 suites-experimental/stormbox-react/src/utils/color.ts create mode 100644 suites-experimental/stormbox-react/src/utils/compose-quote.ts create mode 100644 suites-experimental/stormbox-react/src/utils/dark-email.ts create mode 100644 suites-experimental/stormbox-react/src/utils/folder-presentation.ts create mode 100644 suites-experimental/stormbox-react/src/utils/format-bytes.ts create mode 100644 suites-experimental/stormbox-react/src/utils/keyboard.ts create mode 100644 suites-experimental/stormbox-react/src/utils/message-html.ts create mode 100644 suites-experimental/stormbox-react/src/utils/message-row-presentation.ts create mode 100644 suites-experimental/stormbox-react/src/utils/message-tags.ts create mode 100644 suites-experimental/stormbox-react/src/utils/plaintext-html.ts create mode 100644 suites-experimental/stormbox-react/src/utils/quick-filter.ts create mode 100644 suites-experimental/stormbox-react/src/utils/raster-images.ts create mode 100644 suites-experimental/stormbox-react/src/utils/rich-text.ts create mode 100644 suites-experimental/stormbox-react/src/utils/sender-avatar.ts create mode 100644 suites-experimental/stormbox-react/src/vite-env.d.ts create mode 100644 suites-experimental/stormbox-react/tsconfig.json create mode 100644 suites-experimental/stormbox-react/vite.config.ts diff --git a/.eslintignore b/.eslintignore index e57be2186..8f9434ed3 100644 --- a/.eslintignore +++ b/.eslintignore @@ -48,3 +48,4 @@ package-lock.json /suites/react-stockcharts /suites-experimental/responsive-design/build-dev/ +/suites-experimental/stormbox-react/ diff --git a/.prettierignore b/.prettierignore index 0b1b6168e..40d154c13 100644 --- a/.prettierignore +++ b/.prettierignore @@ -48,3 +48,4 @@ package-lock.json /suites/react-stockcharts /suites-experimental/responsive-design/build-dev/ /suites-experimental/responsive-design/**/*.generated.css +/suites-experimental/stormbox-react/ diff --git a/suites-experimental/stormbox-react/.gitignore b/suites-experimental/stormbox-react/.gitignore new file mode 100644 index 000000000..07e6e472c --- /dev/null +++ b/suites-experimental/stormbox-react/.gitignore @@ -0,0 +1 @@ +/node_modules diff --git a/suites-experimental/stormbox-react/LICENSE b/suites-experimental/stormbox-react/LICENSE new file mode 100644 index 000000000..d0a1fa148 --- /dev/null +++ b/suites-experimental/stormbox-react/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at https://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/suites-experimental/stormbox-react/README.md b/suites-experimental/stormbox-react/README.md index 353a7d922..f9af28b03 100644 --- a/suites-experimental/stormbox-react/README.md +++ b/suites-experimental/stormbox-react/README.md @@ -1,10 +1,17 @@ # Stormbox-React -A React clone of the Stormbox webmail front end (Vue 3, Thunderbird) with a -generated, deterministic mailbox and no server. `dist/` is built from the -`stormbox-react` project, whose README lists what matches Stormbox and what -does not; `npm run speedometer` there rebuilds and copies it here, including -`resources.txt`. +A React clone of the Stormbox webmail front end (Vue 3, Thunderbird) and no +server: the mailbox is generated in the page from a fixed seed, so every +run renders the same folders, messages and dates. + + npm install + npm run dev # development React + npm run build # production build into dist/, plus dist/resources.txt + npm run preview # serve dist/ (use this for timing outside Speedometer) + npm run typecheck + +The committed `dist/` is what the suite runs; rebuild and commit it after +changing `src/`. Run it with `/?developerMode&suites=Stormbox-React`. The suite loads `dist/index.html?animations=off`, which removes CSS transitions and the reading pane's 310ms wait for the folder list, so the @@ -26,3 +33,77 @@ Steps, each interaction followed by a task yield: - `ComposeAndSend`: replies (Squire with the quoted message) and new messages with a recipient pill, all sent. - `ToggleTheme`: light and dark with an HTML newsletter open. + +## Scope + +The Mail space is cloned: + +- Top bar (quick filter, theme toggle, app drawer, account menu), spaces + rail and the folder list with nested and starred folders, the Tags + section and storage bar. +- The virtualized message list (`@tanstack/react-virtual`, 64px rows, + 96px card rows under 480px) with Stormbox's header tiers, Unread and + Starred filters, the Quick Filter, anchored multi-select (checkbox, + Shift/Cmd-click, Shift+Arrow, Cmd+A), bulk actions with overflow, the + row hover overlay (tag, star, archive, delete), the tag menu as dropdown + and popover, drag and drop onto folders and tags, and keyboard + navigation. +- The reading pane: HTML bodies through DOMPurify, Stormbox's dark-mode + adaptation and a sandboxed `srcdoc` iframe with fit-to-width zoom; + plain-text bodies linkified with nested quote bars; attachments bar, + tag chips, scheduled-send banner, maximize. +- The composer: From picker, recipient pills with autocomplete over a + 400-contact address book, Cc/Bcc, the Squire rich text editor with its + toolbar overflow, Send and Send Later, minimize-to-dock, the close + prompt, reply / reply all / forward, and opening drafts. +- Stormbox's responsive layout: below 1024px an open message hides the + folder list, below 640px a single column. +- The web shortcut scheme (C, R, Shift+R, F, A, M, S, T, 0–9, Delete, + J/K/N/P, `/`, Ctrl/Cmd+K, Escape). + +Not cloned: Contacts (the rail button shows a placeholder), settings, the +folder and tag managers, onboarding, multiple message columns, sender +favicons (they come from a server-side proxy) and file attachments. + +## What is shared with Stormbox + +- `src/utils/` holds Stormbox's framework-independent modules copied + verbatim: HTML sanitizing and srcdoc building, dark-mode email + adaptation, plain-text rendering, address parsing, tag model, folder + presentation, sender avatars. Beyond import paths, only + `message-row-presentation.ts` and `compose-quote.ts` changed, to format + dates against the fixed clock in `src/clock.ts`. +- `src/styles/styles.css` and `app.css` are Stormbox's global and shell + stylesheets. `components.css` is generated from the components' Vue + ` +`; +} + +function notificationBody(message: Message, rng: Rng): string { + const lines: string[] = []; + const number = message.subject.match(/\d+/)?.[0] ?? String(message.id); + lines.push(`

${escapeHtml(introParagraph(message.body_seed))}

`); + if (chance(rng, 0.6)) { + const code: string[] = []; + const n = int(rng, 4, 12); + for (let i = 0; i < n; i += 1) { + code.push(`${pick(rng, [' ', ' ', ''])}${pick(rng, ['let', 'const', 'if', 'return', 'await', 'fn', 'match'])} ${escapeHtml(sentence(rng).toLowerCase().replace(/[.?!]$/, ''))}${pick(rng, [';', ' {', ' }', ''])}`); + } + lines.push(`
${code.join('\n')}
`); + } + lines.push(`

${escapeHtml(paragraph(rng, 1, 3))}

`); + lines.push(`

` + + `Reply to this email directly, view it on Forge, or ` + + `unsubscribe.

`); + return lines.join('\n'); +} + +function junkBody(message: Message, rng: Rng): string { + return `
` + + `

${escapeHtml(message.subject)}

` + + `

${escapeHtml(introParagraph(message.body_seed))}

` + + `

CLAIM NOW

` + + `

${escapeHtml(paragraph(rng, 3, 5))}

`; +} + +const bodyCache = new Map(); + +/** The body of a message: inline for composed mail, else generated from its seed (memoized). */ +export function bodyFor(message: Message): MessageBody { + if (message.body) return message.body; + const cached = bodyCache.get(message.id); + if (cached) return cached; + const rng = createRng(hashSeed(message.body_seed, 2)); + let body: MessageBody; + switch (message.body_kind) { + case 'text': + body = { text: textBody(message, rng), attachments: [] }; + break; + case 'html': + body = { html: simpleHtmlBody(message, rng), attachments: [] }; + break; + case 'newsletter': + body = { html: newsletterBody(message, rng), attachments: [] }; + break; + case 'notification': + body = { html: notificationBody(message, rng), attachments: [] }; + break; + case 'junk': + body = { html: junkBody(message, rng), attachments: [] }; + break; + case 'draft': + body = { html: draftBody(message, rng), attachments: [] }; + break; + default: + body = { text: '', attachments: [] }; + } + body.attachments = attachmentsFor(message, rng); + bodyCache.set(message.id, body); + return body; +} + diff --git a/suites-experimental/stormbox-react/src/data/corpus.ts b/suites-experimental/stormbox-react/src/data/corpus.ts new file mode 100644 index 000000000..3c78a7e61 --- /dev/null +++ b/suites-experimental/stormbox-react/src/data/corpus.ts @@ -0,0 +1,134 @@ +// Vocabulary for the generated mailbox. All people, companies and domains +// are fictional; domains use reserved example TLDs so nothing resolves. + +export const FIRST_NAMES = [ + 'Aisha', 'Ben', 'Carmen', 'Daniel', 'Elena', 'Farid', 'Grace', 'Hiro', 'Ines', 'Jonas', + 'Kavya', 'Liam', 'Maya', 'Noah', 'Olga', 'Pablo', 'Quinn', 'Rosa', 'Samir', 'Tara', + 'Umar', 'Vera', 'Wei', 'Ximena', 'Yusuf', 'Zoe', 'Amara', 'Bruno', 'Chloe', 'Dmitri', + 'Esther', 'Felix', 'Gabriela', 'Hassan', 'Isla', 'Jakub', 'Keiko', 'Lucas', 'Mei', 'Nadia', + 'Oscar', 'Priya', 'Rafael', 'Sofia', 'Tomas', 'Uma', 'Viktor', 'Wanjiru', 'Yara', 'Zain', + 'Anders', 'Beatriz', 'Cyrus', 'Delia', 'Emeka', 'Freya', 'Gustavo', 'Helga', 'Ivan', 'Julia', + 'Kofi', 'Leila', 'Marco', 'Nina', 'Omar', 'Paula', 'Ravi', 'Selin', 'Theo', 'Valentina', +]; + +export const LAST_NAMES = [ + 'Abara', 'Bergström', 'Castillo', 'Dubois', 'Eriksen', 'Fischer', 'García', 'Haddad', 'Ito', 'Jansen', + 'Kowalski', 'Lindqvist', 'Moreau', 'Nakamura', 'Okafor', 'Petrov', 'Quintero', 'Rossi', 'Schmidt', 'Tanaka', + 'Usman', 'Varga', 'Wójcik', 'Xu', 'Yilmaz', 'Zhang', 'Andersson', 'Bianchi', 'Chen', 'Da Silva', + 'Eze', 'Fontaine', 'Gupta', 'Horvath', 'Ivanova', 'Jensen', 'Kim', 'Laurent', 'Müller', 'Novak', + "O'Brien", 'Patel', 'Reyes', 'Sato', 'Torres', 'Uddin', 'Volkov', 'Weber', 'Yamamoto', 'Zielinski', + 'Achebe', 'Brennan', 'Costa', 'Delgado', 'Engel', 'Ferreira', 'Grünewald', 'Huang', 'Iyer', 'Kaur', +]; + +export const COMPANIES = [ + { name: 'Northwind', domain: 'northwind.example' }, + { name: 'Contoso', domain: 'contoso.example' }, + { name: 'Fabrikam', domain: 'fabrikam.example' }, + { name: 'Tailspin Labs', domain: 'tailspin.example' }, + { name: 'Wingtip', domain: 'wingtip.example' }, + { name: 'Lakeshore Health', domain: 'lakeshore.example' }, + { name: 'Adatum', domain: 'adatum.example' }, + { name: 'Litware', domain: 'litware.example' }, + { name: 'Proseware', domain: 'proseware.example' }, + { name: 'Coho Vineyard', domain: 'cohovineyard.example' }, + { name: 'Blue Yonder Air', domain: 'blueyonder.example' }, + { name: 'Trey Research', domain: 'treyresearch.example' }, + { name: 'Woodgrove Bank', domain: 'woodgrove.example' }, + { name: 'Alpine Ski House', domain: 'alpineskihouse.example' }, + { name: 'Graphic Design Institute', domain: 'gdi.example' }, + { name: 'Humongous Insurance', domain: 'humongous.example' }, + { name: 'Margie Travel', domain: 'margietravel.example' }, + { name: 'Relecloud', domain: 'relecloud.example' }, + { name: 'Southridge Video', domain: 'southridge.example' }, + { name: 'Wide World Importers', domain: 'wideworld.example' }, +]; + +export const FREEMAIL = ['mail.example', 'post.example', 'inbox.example', 'fastpost.example']; + +export const NEWSLETTERS = [ + { name: 'Web Platform Weekly', email: 'digest@webplatform.example', color: '#1f6feb' }, + { name: 'The Render Loop', email: 'hello@renderloop.example', color: '#d1495b' }, + { name: 'Systems Digest', email: 'news@systemsdigest.example', color: '#2a9d8f' }, + { name: 'Contoso Cloud', email: 'updates@contoso.example', color: '#5a4fcf' }, + { name: 'Blue Yonder Air', email: 'offers@blueyonder.example', color: '#0077b6' }, + { name: 'Margie Travel', email: 'deals@margietravel.example', color: '#f4a261' }, + { name: 'Wide World Importers', email: 'shop@wideworld.example', color: '#e76f51' }, + { name: 'Coho Vineyard', email: 'club@cohovineyard.example', color: '#7b2d26' }, + { name: 'Open Source Monthly', email: 'editors@osmonthly.example', color: '#264653' }, + { name: 'Alpine Ski House', email: 'news@alpineskihouse.example', color: '#118ab2' }, + { name: 'Graphic Design Institute', email: 'courses@gdi.example', color: '#ef476f' }, + { name: 'Relecloud Status', email: 'status@relecloud.example', color: '#3d405b' }, +]; + +export const NOTIFIERS = [ + { name: 'Forge', email: 'notifications@forge.example' }, + { name: 'Bugtrack', email: 'bugmail@bugtrack.example' }, + { name: 'CI Bot', email: 'ci@builds.example' }, + { name: 'Calendar', email: 'calendar-noreply@calendar.example' }, + { name: 'Woodgrove Bank', email: 'alerts@woodgrove.example' }, + { name: 'Shipping Updates', email: 'track@parcels.example' }, +]; + +export const WORDS = [ + 'the', 'a', 'we', 'our', 'team', 'should', 'could', 'will', 'can', 'need', 'to', 'review', 'update', + 'plan', 'release', 'branch', 'schedule', 'meeting', 'notes', 'draft', 'proposal', 'budget', 'design', + 'feedback', 'deadline', 'next', 'week', 'today', 'tomorrow', 'quarter', 'roadmap', 'migration', 'cache', + 'layout', 'performance', 'regression', 'benchmark', 'profile', 'latency', 'memory', 'renderer', 'thread', + 'worker', 'queue', 'sync', 'server', 'client', 'account', 'folder', 'message', 'invoice', 'contract', + 'launch', 'customer', 'support', 'ticket', 'issue', 'patch', 'test', 'suite', 'flaky', 'green', 'merge', + 'conflict', 'document', 'spreadsheet', 'slides', 'agenda', 'minutes', 'follow-up', 'question', 'answer', + 'idea', 'option', 'tradeoff', 'risk', 'estimate', 'scope', 'priority', 'milestone', 'owner', 'status', + 'blocked', 'unblocked', 'shipped', 'landed', 'backed', 'out', 'again', 'still', 'already', 'probably', + 'definitely', 'maybe', 'quickly', 'carefully', 'before', 'after', 'during', 'around', 'about', 'with', + 'without', 'for', 'from', 'into', 'over', 'under', 'between', 'because', 'although', 'while', 'and', + 'but', 'or', 'so', 'then', 'that', 'this', 'these', 'those', 'it', 'they', 'you', 'everyone', 'nobody', + 'small', 'large', 'new', 'old', 'final', 'early', 'late', 'simple', 'complex', 'stable', 'nightly', + 'beta', 'staging', 'production', 'mobile', 'desktop', 'tablet', 'screen', 'scroll', 'click', 'frame', + 'paint', 'style', 'script', 'parser', 'compiler', 'garbage', 'collector', 'heap', 'graph', 'chart', +]; + +export const SUBJECT_TOPICS = [ + 'Q3 roadmap review', 'offsite planning', 'hiring loop for the platform role', 'budget for next quarter', + 'renderer performance numbers', 'sync worker crash on reconnect', 'design review: folder manager', + 'release notes for 2.4', 'on-call handover', 'customer escalation from Contoso', 'contract renewal', + 'migration to the new cache schema', 'accessibility audit findings', 'dark mode contrast issues', + 'flaky integration tests', 'conference talk proposal', 'team lunch on Thursday', 'travel reimbursement', + 'security review checklist', 'API deprecation timeline', 'onboarding plan for new hires', + 'quarterly business review', 'retro notes', 'benchmark methodology', 'memory regression in nightly', + 'layout thrashing in the message list', 'IndexedDB quota errors', 'invoice #48213', 'weekend plans', + 'photos from the trip', 'birthday dinner', 'apartment viewing', 'book club pick', 'garden project', +]; + +export const NOTIFICATION_SUBJECTS = [ + (n: number) => `[atlas] PR #${n}: Fix race between sync worker and cache writer`, + (n: number) => `[atlas] PR #${n}: Virtualize the folder manager tree`, + (n: number) => `[borealis] Issue #${n}: Message list jumps when new mail arrives`, + (n: number) => `Bug ${n} - Crash in layout when resizing the reading pane`, + (n: number) => `Bug ${n} - Intermittent timeout in compose send test`, + (n: number) => `Build #${n} failed on main`, + (n: number) => `Build #${n} fixed on main`, + (n: number) => `Invitation: Weekly sync @ Tue ${(n % 12) + 1}:00`, + (n: number) => `Your statement for account ending ${String(n).slice(-4)} is ready`, + (n: number) => `Your package ${n}-QX has shipped`, +]; + +export const NEWSLETTER_HEADLINES = [ + 'Shipping faster layouts with containment', 'A field guide to long tasks', 'What changed in the cascade', + 'Five ways to cut bundle size this week', 'Inside a modern garbage collector', 'Scheduling work off the main thread', + 'Fall fares are here: save up to 30%', 'Members-only tasting this Saturday', 'New arrivals for the season', + 'Your weekly status summary', 'Course spotlight: typography for interfaces', 'Ski passes on sale now', + 'Understanding interaction to next paint', 'How we rebuilt our storage layer', 'Release candidate is out', +]; + +export const ATTACHMENT_NAMES = [ + ['roadmap-q3.pdf', 'application/pdf'], + ['budget-2027.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'], + ['meeting-notes.docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'], + ['screenshot.png', 'image/png'], + ['profile-trace.json', 'application/json'], + ['invoice-48213.pdf', 'application/pdf'], + ['photo-001.jpg', 'image/jpeg'], + ['slides-final-v3.pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'], + ['contract-signed.pdf', 'application/pdf'], + ['logs.zip', 'application/zip'], +] as const; diff --git a/suites-experimental/stormbox-react/src/data/mailbox.ts b/suites-experimental/stormbox-react/src/data/mailbox.ts new file mode 100644 index 000000000..af05d20f6 --- /dev/null +++ b/suites-experimental/stormbox-react/src/data/mailbox.ts @@ -0,0 +1,348 @@ +import type { Address, BodyKind, Folder, MailboxRole, Message } from '../types'; +import { + COMPANIES, FIRST_NAMES, FREEMAIL, LAST_NAMES, NEWSLETTERS, NEWSLETTER_HEADLINES, + NOTIFICATION_SUBJECTS, NOTIFIERS, SUBJECT_TOPICS, +} from './corpus'; +import { chance, createRng, hashSeed, int, pick, type Rng } from './random'; +import { introParagraph, previewOf } from './text'; +import { NOW } from '../clock'; + +export { NOW } from '../clock'; + +export const ACCOUNT: Address & { name: string } = { + name: 'Alex Morgan', + email: 'alex.morgan@example.org', +}; + +export interface Identity { + id: number; + name: string; + email: string; +} + +export const IDENTITIES: Identity[] = [ + { id: 1, name: 'Alex Morgan', email: 'alex.morgan@example.org' }, + { id: 2, name: 'Alex Morgan', email: 'alex@morgan.example' }, + { id: 3, name: '', email: 'support@northwind.example' }, +]; + +export interface Contact { + name: string; + email: string; + organization?: string; + send_count: number; + last_sent_at: number; +} + +type FolderKind = + | 'inbox' | 'work' | 'newsletter' | 'feed' | 'receipt' | 'personal' + | 'notification' | 'sent' | 'draft' | 'scheduled' | 'junk' | 'mixed'; + +interface FolderSpec { + id: number; + name: string; + role: MailboxRole | null; + parent?: number; + starred?: boolean; + count: number; + kind: FolderKind; + /** Days back the oldest message reaches. */ + span: number; +} + +const FOLDER_SPECS: FolderSpec[] = [ + { id: 1, name: 'Inbox', role: 'inbox', count: 1200, kind: 'inbox', span: 540 }, + { id: 2, name: 'Drafts', role: 'drafts', count: 6, kind: 'draft', span: 30 }, + { id: 3, name: 'Scheduled', role: 'scheduled', count: 2, kind: 'scheduled', span: 0 }, + { id: 4, name: 'Sent', role: 'sent', count: 350, kind: 'sent', span: 700 }, + { id: 5, name: 'Archive', role: 'archive', count: 2500, kind: 'mixed', span: 1500 }, + { id: 6, name: 'Junk', role: 'junk', count: 45, kind: 'junk', span: 30 }, + { id: 7, name: 'Trash', role: 'trash', count: 120, kind: 'mixed', span: 30 }, + { id: 10, name: 'Projects', role: null, count: 40, kind: 'work', span: 900 }, + { id: 11, name: 'Atlas', role: null, parent: 10, count: 220, kind: 'notification', span: 400 }, + { id: 12, name: 'Borealis', role: null, parent: 10, count: 140, kind: 'work', span: 600 }, + { id: 13, name: 'Design reviews', role: null, parent: 11, count: 60, kind: 'work', span: 300 }, + { id: 20, name: 'Newsletters', role: null, count: 400, kind: 'newsletter', span: 400 }, + { id: 21, name: 'Feeds', role: null, count: 300, kind: 'feed', span: 200 }, + { id: 22, name: 'Receipts', role: null, count: 160, kind: 'receipt', span: 800 }, + { id: 23, name: 'Travel', role: null, starred: true, count: 70, kind: 'personal', span: 900 }, + { id: 24, name: 'Family', role: null, starred: true, count: 110, kind: 'personal', span: 1200 }, + { id: 25, name: 'Conferences', role: null, count: 50, kind: 'work', span: 700 }, + { id: 26, name: 'Open source', role: null, count: 30, kind: 'notification', span: 500 }, + { id: 27, name: 'mozilla-central', role: null, parent: 26, count: 500, kind: 'notification', span: 300 }, + { id: 28, name: 'servo', role: null, parent: 26, count: 250, kind: 'notification', span: 300 }, +]; + +const TAG_KEYWORDS = ['$label1', '$label2', '$label3', '$label4', '$label5']; +const DAY = 86_400_000; + +function formatAddress(address: Address): string { + return address.name ? `${address.name} <${address.email}>` : address.email; +} + +function slug(value: string): string { + return value.toLowerCase().normalize('NFD').replace(/[^a-z]/g, ''); +} + +function buildContacts(rng: Rng): Contact[] { + const contacts: Contact[] = []; + const seen = new Set(); + while (contacts.length < 400) { + const first = pick(rng, FIRST_NAMES); + const last = pick(rng, LAST_NAMES); + const company = chance(rng, 0.7) ? pick(rng, COMPANIES) : null; + const domain = company ? company.domain : pick(rng, FREEMAIL); + const local = chance(rng, 0.5) ? `${slug(first)}.${slug(last)}` : `${slug(first).charAt(0)}${slug(last)}`; + const email = `${local}@${domain}`; + if (seen.has(email)) continue; + seen.add(email); + contacts.push({ + name: `${first} ${last}`, + email, + organization: company?.name, + send_count: 0, + last_sent_at: 0, + }); + } + return contacts; +} + +function receivedTimes(rng: Rng, spec: FolderSpec, count: number): number[] { + const times: number[] = []; + const spanMs = Math.max(spec.span, 1) * DAY; + for (let i = 0; i < count; i += 1) { + const position = (i + rng() * 0.8) / Math.max(count, 1); + const offset = spanMs * position ** 1.7 + int(rng, 2, 50) * 60_000; + times.push(NOW - Math.round(offset)); + } + times.sort((a, b) => b - a); + return times; +} + +function keywordsFor(rng: Rng): string { + const keywords: Record = {}; + if (chance(rng, 0.11)) { + keywords[pick(rng, TAG_KEYWORDS)] = true; + if (chance(rng, 0.3)) keywords[pick(rng, TAG_KEYWORDS)] = true; + } + return JSON.stringify(keywords); +} + +interface Draft { + from: Address; + to: Address[]; + cc: Address[]; + subject: string; + kind: BodyKind; + attachment: boolean; + preview?: string; +} + +function personFrom(contacts: Contact[], rng: Rng): Address { + const contact = pick(rng, contacts); + return { name: contact.name, email: contact.email }; +} + +function workSubject(rng: Rng): string { + const topic = pick(rng, SUBJECT_TOPICS); + const r = rng(); + if (r < 0.35) return `Re: ${topic}`; + if (r < 0.42) return `Fwd: ${topic}`; + if (r < 0.5) return `Re: Re: ${topic}`; + return topic.charAt(0).toUpperCase() + topic.slice(1); +} + +function draftFor(kind: FolderKind, rng: Rng, contacts: Contact[]): Draft { + const me: Address = { name: ACCOUNT.name, email: ACCOUNT.email }; + const others = () => { + const extra: Address[] = []; + const n = chance(rng, 0.35) ? int(rng, 1, 4) : 0; + for (let i = 0; i < n; i += 1) extra.push(personFrom(contacts, rng)); + return extra; + }; + switch (kind) { + case 'inbox': { + const r = rng(); + if (r < 0.55) return draftFor('work', rng, contacts); + if (r < 0.7) return draftFor('newsletter', rng, contacts); + if (r < 0.85) return draftFor('notification', rng, contacts); + if (r < 0.93) return draftFor('personal', rng, contacts); + return draftFor('receipt', rng, contacts); + } + case 'mixed': { + const r = rng(); + if (r < 0.5) return draftFor('work', rng, contacts); + if (r < 0.7) return draftFor('notification', rng, contacts); + if (r < 0.85) return draftFor('newsletter', rng, contacts); + return draftFor('personal', rng, contacts); + } + case 'work': + return { + from: personFrom(contacts, rng), + to: [me, ...others()], + cc: chance(rng, 0.3) ? [personFrom(contacts, rng)] : [], + subject: workSubject(rng), + kind: chance(rng, 0.7) ? 'text' : 'html', + attachment: chance(rng, 0.15), + }; + case 'personal': + return { + from: personFrom(contacts, rng), + to: [me], + cc: [], + subject: workSubject(rng), + kind: chance(rng, 0.6) ? 'text' : 'html', + attachment: chance(rng, 0.25), + }; + case 'newsletter': + case 'feed': { + const sender = pick(rng, NEWSLETTERS); + const headline = pick(rng, NEWSLETTER_HEADLINES); + return { + from: { name: sender.name, email: sender.email }, + to: [me], + cc: [], + subject: kind === 'feed' ? `${sender.name}: ${headline}` : headline, + kind: 'newsletter', + attachment: false, + }; + } + case 'receipt': { + const company = pick(rng, COMPANIES); + const order = int(rng, 10000, 99999); + return { + from: { name: company.name, email: `orders@${company.domain}` }, + to: [me], + cc: [], + subject: `Your ${company.name} receipt for order #${order}`, + kind: 'html', + attachment: chance(rng, 0.4), + }; + } + case 'notification': { + const notifier = pick(rng, NOTIFIERS); + return { + from: { name: notifier.name, email: notifier.email }, + to: [me], + cc: [], + subject: pick(rng, NOTIFICATION_SUBJECTS)(int(rng, 1000, 99999)), + kind: 'notification', + attachment: false, + }; + } + case 'sent': + case 'scheduled': + return { + from: me, + to: [personFrom(contacts, rng), ...others()], + cc: chance(rng, 0.2) ? [personFrom(contacts, rng)] : [], + subject: workSubject(rng), + kind: 'text', + attachment: chance(rng, 0.1), + }; + case 'draft': + return { + from: me, + to: chance(rng, 0.7) ? [personFrom(contacts, rng)] : [], + cc: [], + subject: chance(rng, 0.8) ? workSubject(rng) : '', + kind: 'draft', + attachment: false, + }; + case 'junk': { + const lures = [ + 'You have (1) pending reward — claim now', 'Final notice: your mailbox is almost full', + 'Congratulations! You were selected', 'Re: invoice overdue — action required', + 'Exclusive offer just for you', 'Verify your account within 24 hours', + ]; + const domain = `${pick(rng, ['promo', 'secure', 'win', 'rewards'])}${int(rng, 10, 999)}.example`; + return { + from: { name: pick(rng, ['Customer Service', 'Rewards Team', 'Admin', 'Security Alert']), email: `noreply@${domain}` }, + to: [me], + cc: [], + subject: pick(rng, lures), + kind: 'junk', + attachment: chance(rng, 0.2), + }; + } + default: + throw new Error(`Unhandled folder kind ${String(kind)}`); + } +} + +export interface Mailbox { + folders: Folder[]; + messages: Message[]; + contacts: Contact[]; +} + +/** + * Builds the whole mailbox from a fixed seed. `scale` multiplies the + * per-folder message counts (Drafts and Scheduled stay as they are). + */ +export function generateMailbox(scale = 1): Mailbox { + const rng = createRng(0x5704b0); + const contacts = buildContacts(rng); + const folders: Folder[] = FOLDER_SPECS.map((spec) => ({ + id: spec.id, + name: spec.name, + role: spec.role, + parent_id: spec.parent ?? null, + is_starred: spec.starred ? 1 : 0, + })); + + const messages: Message[] = []; + let nextId = 1; + for (const spec of FOLDER_SPECS) { + const count = spec.kind === 'draft' || spec.kind === 'scheduled' + ? spec.count + : Math.max(1, Math.round(spec.count * scale)); + const times = receivedTimes(rng, spec, count); + for (let i = 0; i < count; i += 1) { + const draft = draftFor(spec.kind, rng, contacts); + const id = nextId; + nextId += 1; + const bodySeed = hashSeed(id, 0x9e37); + const unreadOdds = spec.kind === 'inbox' + ? (i < 15 ? 0.6 : 0.06) + : (spec.kind === 'newsletter' || spec.kind === 'feed' ? 0.3 : (spec.kind === 'junk' ? 0.8 : 0.02)); + const neverUnread = spec.kind === 'sent' || spec.kind === 'draft' || spec.kind === 'scheduled'; + const seen = neverUnread || !chance(rng, unreadOdds); + const receivedAt = spec.kind === 'scheduled' ? NOW - (i + 1) * 3_600_000 : times[i]; + const sentAt = spec.kind === 'scheduled' + ? NOW + (i + 1) * 19 * 3_600_000 + : receivedAt - int(rng, 5, 600) * 1000; + const preview = draft.kind === 'newsletter' + ? previewOf(`${draft.subject} — ${introParagraph(bodySeed)}`) + : previewOf(introParagraph(bodySeed)); + messages.push({ + id, + folder_id: spec.id, + from_text: formatAddress(draft.from), + to_text: draft.to.map(formatAddress).join(', '), + cc: draft.cc, + subject: draft.subject, + preview, + received_at: receivedAt, + sent_at: sentAt, + is_seen: seen ? 1 : 0, + is_flagged: chance(rng, 0.06) ? 1 : 0, + is_draft: spec.kind === 'draft' ? 1 : 0, + has_attachment: draft.attachment ? 1 : 0, + keywords_json: keywordsFor(rng), + scheduled_undo_status: spec.kind === 'scheduled' ? 'pending' : null, + body_kind: draft.kind, + body_seed: bodySeed, + }); + if (spec.kind === 'sent') { + for (const recipient of draft.to) { + const contact = contacts.find((candidate) => candidate.email === recipient.email); + if (!contact) continue; + contact.send_count += 1; + contact.last_sent_at = Math.max(contact.last_sent_at, sentAt); + } + } + } + } + return { folders, messages, contacts }; +} diff --git a/suites-experimental/stormbox-react/src/data/random.ts b/suites-experimental/stormbox-react/src/data/random.ts new file mode 100644 index 000000000..c9a274623 --- /dev/null +++ b/suites-experimental/stormbox-react/src/data/random.ts @@ -0,0 +1,34 @@ +/** Deterministic PRNG (mulberry32) so every run renders the same mailbox. */ +export type Rng = () => number; + +export function createRng(seed: number): Rng { + let a = seed >>> 0; + return () => { + a = (a + 0x6d2b79f5) >>> 0; + let t = a; + t = Math.imul(t ^ (t >>> 15), t | 1); + t ^= t + Math.imul(t ^ (t >>> 7), t | 61); + return ((t ^ (t >>> 14)) >>> 0) / 4294967296; + }; +} + +export function int(rng: Rng, min: number, max: number): number { + return min + Math.floor(rng() * (max - min + 1)); +} + +export function pick(rng: Rng, items: readonly T[]): T { + return items[Math.floor(rng() * items.length)]; +} + +export function chance(rng: Rng, p: number): boolean { + return rng() < p; +} + +export function hashSeed(...parts: number[]): number { + let h = 2166136261; + for (const part of parts) { + h ^= part; + h = Math.imul(h, 16777619) >>> 0; + } + return h; +} diff --git a/suites-experimental/stormbox-react/src/data/text.ts b/suites-experimental/stormbox-react/src/data/text.ts new file mode 100644 index 000000000..bae18d2f9 --- /dev/null +++ b/suites-experimental/stormbox-react/src/data/text.ts @@ -0,0 +1,74 @@ +import { FIRST_NAMES, WORDS } from './corpus'; +import { createRng, hashSeed, int, pick, type Rng } from './random'; + +const SLOTS: Record = { + verb: ['review', 'ship', 'finalize', 'revisit', 'split up', 'land', 'profile', 'simplify', 'document', 'test', 'merge', 'roll back', 'prototype', 'estimate'], + past: ['reviewed', 'updated', 'rebased', 'profiled', 'rewrote', 'merged', 'tested', 'cleaned up', 'measured', 'drafted'], + noun: ['proposal', 'patch', 'migration plan', 'release notes', 'budget', 'design doc', 'test plan', 'benchmark results', 'contract', 'onboarding guide', 'roadmap', 'cache schema', 'invoice', 'dashboard', 'slide deck', 'checklist', 'meeting notes', 'API change', 'crash report', 'trace'], + adj: ['much better', 'mostly fine', 'a bit rough', 'promising', 'stable', 'slower than expected', 'ready', 'surprisingly fast', 'close', 'blocked'], + when: ['Friday', 'the end of the week', 'Tuesday’s sync', 'next sprint', 'the offsite', 'tomorrow morning', 'the release cut', 'Monday', 'the planning meeting', 'month end'], + project: ['Atlas', 'Borealis', 'the sync worker', 'the message list', 'the reading pane', 'search', 'the compose dialog', 'the mobile layout', 'billing', 'the importer'], + status: ['on track', 'slipping a little', 'waiting on review', 'nearly done', 'blocked on infra', 'in QA', 'behind schedule', 'ahead of plan'], + problem: ['the intermittent timeout', 'a layout jump', 'the memory spike', 'slow first paint', 'duplicate notifications', 'the flaky test', 'stale results', 'a rendering glitch'], + platform: ['Firefox Nightly', 'older Android tablets', 'Safari', 'the staging cluster', 'Windows laptops', 'the CI runners', 'large mailboxes', 'slow networks'], + condition: ['the window is resized', 'the cache is cold', 'two tabs are open', 'the folder has a few thousand messages', 'the user switches folders quickly', 'the device wakes from sleep'], + meeting: ['standup', 'Thursday’s review', 'the weekly sync', 'office hours', 'the retro', 'our 1:1'], + decision: ['the rollout plan', 'which option to keep', 'the final scope', 'the deadline', 'who owns the follow-up'], + doc: ['spreadsheet', 'summary', 'report', 'draft', 'write-up', 'export'], + thing: ['photos', 'tickets', 'recipe', 'itinerary', 'receipts', 'book list', 'playlist', 'notes'], +}; + +const TEMPLATES = [ + 'Can we {verb} the {noun} before {when}?', + 'I {past} the {noun} and it looks {adj} now.', + 'The {noun} for {project} is {status}, so we should {verb} it by {when}.', + '{name}, could you take a look at the {noun} when you get a chance?', + 'Thanks for sending the {noun}; I left a few comments inline.', + 'We are still seeing {problem} on {platform}, mostly when {condition}.', + 'Let’s {verb} this in {meeting} and decide on {decision}.', + 'Attached is the {doc} with the latest numbers for {project}.', + 'Quick update: {project} is {status} and the {noun} is {adj}.', + 'I think we can {verb} the {noun} without touching {project}.', + 'Does anyone remember why we decided to {verb} the {noun} last quarter?', + '{name} mentioned that {problem} only shows up on {platform}.', + 'If nobody objects, I will {verb} the {noun} on {when}.', + 'The numbers from {platform} look {adj} after the last change.', + 'Sharing the {thing} from the weekend, more to follow.', + 'Happy to pair on the {noun} if that helps move {project} along.', + 'Before we {verb} anything, we should agree on {decision}.', + 'I moved the {noun} into the shared folder so everyone can find it.', +]; + +function capitalize(word: string): string { + return word.charAt(0).toUpperCase() + word.slice(1); +} + +function looseSentence(rng: Rng): string { + const length = int(rng, 7, 16); + const words: string[] = []; + for (let i = 0; i < length; i += 1) words.push(pick(rng, WORDS)); + return `${capitalize(words.join(' '))}.`; +} + +export function sentence(rng: Rng): string { + if (rng() < 0.15) return looseSentence(rng); + return pick(rng, TEMPLATES).replace(/\{(\w+)\}/g, (_, slot: string) => ( + slot === 'name' ? pick(rng, FIRST_NAMES) : pick(rng, SLOTS[slot]) + )); +} + +export function paragraph(rng: Rng, min = 2, max = 5): string { + const count = int(rng, min, max); + const out: string[] = []; + for (let i = 0; i < count; i += 1) out.push(sentence(rng)); + return out.join(' '); +} + +/** The opening paragraph of a body; also the source of its list preview. */ +export function introParagraph(seed: number): string { + return paragraph(createRng(hashSeed(seed, 1)), 2, 4); +} + +export function previewOf(text: string): string { + return text.length > 180 ? `${text.slice(0, 177)}...` : text; +} diff --git a/suites-experimental/stormbox-react/src/hooks/useColumnResize.ts b/suites-experimental/stormbox-react/src/hooks/useColumnResize.ts new file mode 100644 index 000000000..d6ebb3f65 --- /dev/null +++ b/suites-experimental/stormbox-react/src/hooks/useColumnResize.ts @@ -0,0 +1,65 @@ +import { useCallback, useEffect, useRef, useState } from 'react'; +import type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from 'react'; + +export interface ColumnResizePane { + get: () => number; + set: (width: number) => void; + min: () => number; + max: () => number; +} + +function clamp(value: number, min: number, max: number): number { + return Math.max(min, Math.min(value, Math.max(min, max))); +} + +/** + * Pointer and keyboard resizing for a column handle. Widths are not + * persisted, so every run starts from the same layout. + */ +export function useColumnResize(pane: ColumnResizePane) { + const [active, setActive] = useState(false); + const paneRef = useRef(pane); + paneRef.current = pane; + const stateRef = useRef<{ startX: number; startWidth: number } | null>(null); + + const onMove = useCallback((event: PointerEvent) => { + const state = stateRef.current; + if (!state) return; + const current = paneRef.current; + current.set(clamp(state.startWidth + event.clientX - state.startX, current.min(), current.max())); + }, []); + + const stop = useCallback(() => { + if (!stateRef.current) return; + stateRef.current = null; + setActive(false); + document.body.classList.remove('is-column-resizing'); + window.removeEventListener('pointermove', onMove); + window.removeEventListener('pointerup', stop); + window.removeEventListener('pointercancel', stop); + }, [onMove]); + + const onPointerDown = useCallback((event: ReactPointerEvent) => { + if (event.button !== 0) return; + event.preventDefault(); + stateRef.current = { startX: event.clientX, startWidth: paneRef.current.get() }; + setActive(true); + document.body.classList.add('is-column-resizing'); + window.addEventListener('pointermove', onMove); + window.addEventListener('pointerup', stop, { once: true }); + window.addEventListener('pointercancel', stop, { once: true }); + }, [onMove, stop]); + + const onKeyDown = useCallback((event: ReactKeyboardEvent) => { + if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return; + event.preventDefault(); + const current = paneRef.current; + const step = event.shiftKey ? 40 : 10; + const direction = event.key === 'ArrowRight' ? 1 : -1; + current.set(clamp(current.get() + direction * step, current.min(), current.max())); + }, []); + + useEffect(() => stop, [stop]); + + return { active, onPointerDown, onKeyDown }; +} diff --git a/suites-experimental/stormbox-react/src/hooks/useMediaQuery.ts b/suites-experimental/stormbox-react/src/hooks/useMediaQuery.ts new file mode 100644 index 000000000..8fb5d60d3 --- /dev/null +++ b/suites-experimental/stormbox-react/src/hooks/useMediaQuery.ts @@ -0,0 +1,12 @@ +import { useSyncExternalStore } from 'react'; + +export function useMediaQuery(query: string): boolean { + return useSyncExternalStore( + (onChange) => { + const media = window.matchMedia(query); + media.addEventListener('change', onChange); + return () => media.removeEventListener('change', onChange); + }, + () => window.matchMedia(query).matches, + ); +} diff --git a/suites-experimental/stormbox-react/src/hooks/useMessageDrag.ts b/suites-experimental/stormbox-react/src/hooks/useMessageDrag.ts new file mode 100644 index 000000000..3244e2106 --- /dev/null +++ b/suites-experimental/stormbox-react/src/hooks/useMessageDrag.ts @@ -0,0 +1,48 @@ +import { create } from 'zustand'; +import type { DragEvent } from 'react'; + +import type { ViewId } from '../types'; + +export const MESSAGE_DRAG_MIME = 'application/x-stormbox-message-ids'; + +interface DragState { + dragging: boolean; + draggedIds: number[]; + sourceViewId: ViewId | null; + startDrag: (event: DragEvent, options: { messageId: number; selectedIds: Set; sourceViewId: ViewId }) => void; + endDrag: () => void; +} + +/** + * Drag payload for messages: the checked rows when the dragged row is one + * of them, else that row alone, with the view it came from. + */ +export const useMessageDrag = create((set) => ({ + dragging: false, + draggedIds: [], + sourceViewId: null, + startDrag(event, { messageId, selectedIds, sourceViewId }) { + const ids = selectedIds.has(messageId) ? [...selectedIds] : [messageId]; + event.dataTransfer.effectAllowed = 'copyMove'; + event.dataTransfer.setData(MESSAGE_DRAG_MIME, JSON.stringify({ ids, sourceViewId })); + event.dataTransfer.setData('text/plain', ids.length === 1 ? '1 message' : `${ids.length} messages`); + set({ dragging: true, draggedIds: ids, sourceViewId }); + }, + endDrag() { + set({ dragging: false, draggedIds: [], sourceViewId: null }); + }, +})); + +export function readMessageDrag(event: DragEvent): { ids: number[]; sourceViewId: ViewId | null } | null { + const raw = event.dataTransfer.getData(MESSAGE_DRAG_MIME); + if (raw) { + try { + const parsed = JSON.parse(raw); + if (Array.isArray(parsed.ids)) return { ids: parsed.ids.map(Number), sourceViewId: parsed.sourceViewId ?? null }; + } catch { + return null; + } + } + const state = useMessageDrag.getState(); + return state.dragging ? { ids: state.draggedIds, sourceViewId: state.sourceViewId } : null; +} diff --git a/suites-experimental/stormbox-react/src/hooks/useShortcuts.ts b/suites-experimental/stormbox-react/src/hooks/useShortcuts.ts new file mode 100644 index 000000000..46092a830 --- /dev/null +++ b/suites-experimental/stormbox-react/src/hooks/useShortcuts.ts @@ -0,0 +1,151 @@ +import { useEffect, useRef } from 'react'; + +import { useComposeStore } from '../store/compose-store'; +import { useMailStore } from '../store/mail-store'; +import { useUiStore } from '../store/ui-store'; +import { isComposingKeyEvent, isEditableTarget, isMacPlatform } from '../utils/keyboard'; +import { DEFAULT_MESSAGE_TAGS } from '../utils/message-tags'; + +export type ListNavigationCommand = 'first' | 'last' | 'next' | 'nextUnread' | 'previous' | 'previousUnread'; + +export interface ListCommands { + navigate: (command: ListNavigationCommand) => void; + selectAll: () => void; + openTagMenu: () => void; + containsFocus: () => boolean; +} + +let listCommands: ListCommands | null = null; + +/** The message list registers its commands; returns the unregister function. */ +export function registerListCommands(commands: ListCommands): () => void { + listCommands = commands; + return () => { + if (listCommands === commands) listCommands = null; + }; +} + +/** Checked rows, else the open message. */ +function targetIds(): number[] { + const { selection, open } = useMailStore.getState(); + if (selection.ids.size > 0) return [...selection.ids]; + return open.id != null ? [open.id] : []; +} + +const NAVIGATION: Record = { + j: 'next', k: 'previous', n: 'nextUnread', p: 'previousUnread', +}; + +/** The web shortcut scheme (Stormbox's default `shortcutScheme`). */ +export function useShortcuts({ enabled }: { enabled: boolean }) { + const enabledRef = useRef(enabled); + enabledRef.current = enabled; + + useEffect(() => { + function onKeyDown(event: KeyboardEvent) { + if (!enabledRef.current || event.defaultPrevented || isComposingKeyEvent(event)) return; + const compose = useComposeStore.getState(); + const expanded = compose.sessions.find((session) => session.presentation === 'expanded'); + if (expanded) { + if (event.key !== 'Escape') return; + const focused = document.activeElement; + if (focused?.matches?.('.compose-dialog [role="combobox"][aria-expanded="true"]')) return; + if (document.querySelector('.compose-dialog--expanded details[data-dropdown-group][open]')) return; + event.preventDefault(); + compose.requestClose(expanded.id); + return; + } + if (event.target instanceof Element && event.target.closest('[data-message-control]') + && ['Enter', ' ', 'Escape', 'F2', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return; + + const mod = isMacPlatform() ? event.metaKey : event.ctrlKey; + const editable = isEditableTarget(event.target); + const key = event.key.length === 1 ? event.key.toLowerCase() : event.key; + if ((key === '/' && !mod && !editable) || (key === 'k' && mod)) { + event.preventDefault(); + useUiStore.getState().requestQuickFilterFocus(); + return; + } + if (useUiStore.getState().space !== 'mail' || editable) return; + if (event.target instanceof Element && event.target.closest('[data-tag-picker-popover], details.tag-picker-dropdown[open]')) return; + if (event.altKey || (mod && key !== 'a')) return; + + const mail = useMailStore.getState(); + if (key === 'a' && mod) { + if (!listCommands) return; + event.preventDefault(); + listCommands.selectAll(); + return; + } + if (event.shiftKey && key !== 'r' && key !== 'Delete' && key !== 'Backspace') return; + switch (key) { + case 'c': + event.preventDefault(); + compose.open(); + return; + case 'r': + case 'f': { + const { open, messages } = mail; + const message = open.id != null ? messages.get(open.id) : null; + if (!message || message.scheduled_undo_status === 'pending' || mail.selection.ids.size > 0) return; + event.preventDefault(); + if (key === 'f') compose.prepareForward(message); + else compose.prepareReply(message, event.shiftKey); + return; + } + case 'a': + case 'm': + case 's': + case 'Delete': + case 'Backspace': { + if (key === 'Backspace' && !isMacPlatform()) return; + const ids = targetIds(); + if (ids.length === 0) return; + event.preventDefault(); + if (key === 'a') mail.archiveMessages(ids); + else if (key === 'm') mail.toggleManySeen(ids); + else if (key === 's') mail.toggleManyFlagged(ids); + else mail.destroyMessages(ids); + return; + } + case 't': { + if (targetIds().length === 0 || !listCommands) return; + event.preventDefault(); + listCommands.openTagMenu(); + return; + } + case 'Escape': + if (mail.selection.ids.size === 0 || document.querySelector('details.app-dropdown[open]')) return; + event.preventDefault(); + mail.clearSelection(); + return; + default: + } + if (/^[0-9]$/.test(key)) { + const ids = targetIds(); + if (ids.length === 0) return; + event.preventDefault(); + if (key === '0') { + mail.clearTagsMany(ids); + return; + } + const definition = DEFAULT_MESSAGE_TAGS[Number(key) - 1]; + if (!definition) return; + const keyword = definition.keyword.toLowerCase(); + const all = ids.every((id) => { + const json = mail.messages.get(id)?.keywords_json ?? '{}'; + return Boolean(JSON.parse(json)[keyword]); + }); + mail.setTagsMany(ids, all ? { remove: [keyword] } : { add: [keyword] }); + return; + } + const command = NAVIGATION[key]; + if (command && listCommands) { + event.preventDefault(); + listCommands.navigate(command); + } + } + document.addEventListener('keydown', onKeyDown, true); + return () => document.removeEventListener('keydown', onKeyDown, true); + }, []); +} diff --git a/suites-experimental/stormbox-react/src/main.tsx b/suites-experimental/stormbox-react/src/main.tsx new file mode 100644 index 000000000..5da442ba4 --- /dev/null +++ b/suites-experimental/stormbox-react/src/main.tsx @@ -0,0 +1,13 @@ +import { createRoot } from 'react-dom/client'; + +import { App } from './App'; +import { ANIMATIONS_OFF } from './motion'; +import './styles/services-ui.css'; +import './styles/styles.css'; +import './styles/app.css'; +import './styles/components.css'; +import './styles/local.css'; + +if (ANIMATIONS_OFF) document.documentElement.classList.add('no-motion'); + +createRoot(document.getElementById('app')!).render(); diff --git a/suites-experimental/stormbox-react/src/motion.ts b/suites-experimental/stormbox-react/src/motion.ts new file mode 100644 index 000000000..5e4109659 --- /dev/null +++ b/suites-experimental/stormbox-react/src/motion.ts @@ -0,0 +1,7 @@ +/** + * `?animations=off` turns off CSS transitions and animations and the + * reading pane's wait for the folder list to slide away, so a benchmark + * step measures only the work its interaction triggers. + */ +export const ANIMATIONS_OFF = typeof location !== 'undefined' + && new URLSearchParams(location.search).get('animations') === 'off'; diff --git a/suites-experimental/stormbox-react/src/store/compose-store.ts b/suites-experimental/stormbox-react/src/store/compose-store.ts new file mode 100644 index 000000000..6a72fe79f --- /dev/null +++ b/suites-experimental/stormbox-react/src/store/compose-store.ts @@ -0,0 +1,337 @@ +import { create } from 'zustand'; + +import { NOW } from '../clock'; +import { bodyFor } from '../data/bodies'; +import { IDENTITIES, type Identity } from '../data/mailbox'; +import type { Address, Message } from '../types'; +import { addressKey } from '../utils/address-key'; +import { formatAddress, parseAddressList, type ParsedAddress } from '../utils/address-parse'; +import { buildQuotedHtml, makeForwardSubject, makeReplySubject } from '../utils/compose-quote'; +import { DRAFTS_FOLDER_ID, SENT_FOLDER_ID, useMailStore } from './mail-store'; + +export interface InvalidRecipient { + text: string; + invalid: true; +} + +export type RecipientEntry = ParsedAddress | InvalidRecipient; +export type RecipientField = 'to' | 'cc' | 'bcc'; +export const RECIPIENT_FIELDS: readonly RecipientField[] = ['to', 'cc', 'bcc']; +export type ComposePresentation = 'expanded' | 'minimized'; + +export interface ComposeDraft { + fromIdx: number; + to: RecipientEntry[]; + cc: RecipientEntry[]; + bcc: RecipientEntry[]; + subject: string; + html: string; + text: string; +} + +export interface ComposeSession { + id: string; + presentation: ComposePresentation; + draft: ComposeDraft; + /** Bumped when the draft is replaced wholesale; remounts the recipient fields. */ + draftEpoch: number; + /** HTML the editor starts from. */ + editorHtmlBody: string; + closePromptOpen: boolean; + /** The Drafts message this session edits, replaced on save and removed on send. */ + sourceDraftId: number | null; +} + +interface Prefill { + to?: RecipientEntry[]; + cc?: RecipientEntry[]; + subject?: string; + html?: string; + sourceDraftId?: number | null; +} + +interface ComposeState { + sessions: ComposeSession[]; + identities: Identity[]; + open: (prefill?: Prefill) => string; + minimize: (id: string) => void; + restore: (id: string) => void; + close: (id: string) => void; + requestClose: (id: string) => void; + cancelClose: (id: string) => void; + closeWithoutSaving: (id: string) => void; + saveAndClose: (id: string) => void; + discardDraft: (id: string) => void; + updateDraft: (id: string, patch: Partial) => void; + send: (id: string, schedule?: { targetAt: number; label: string } | null) => void; + prepareReply: (message: Message, all: boolean) => void; + prepareForward: (message: Message) => void; + openDraft: (message: Message) => void; +} + +let sessionCounter = 0; +/** Composed mail is stamped after the fixed clock so it sorts above generated mail. */ +let composeClock = NOW; + +function nextTimestamp(): number { + composeClock += 60_000; + return composeClock; +} + +export function isValidRecipient(entry: RecipientEntry): entry is ParsedAddress { + return !('invalid' in entry); +} + +export function sessionLabel(session: ComposeSession): string { + const subject = session.draft.subject.trim(); + if (subject) return subject; + const recipient = [...session.draft.to, ...session.draft.cc, ...session.draft.bcc].find(isValidRecipient); + return recipient?.name?.trim() || recipient?.email || 'New message'; +} + +/** Whether closing would lose anything: a recipient, a subject or body text. */ +export function isSessionMeaningfullyNonEmpty(session: ComposeSession): boolean { + const { draft } = session; + return draft.to.length + draft.cc.length + draft.bcc.length > 0 + || draft.subject.trim() !== '' + || draft.text.replace(/\u00a0/g, ' ').trim() !== ''; +} + +/** Plain text as editor markup: escaped, with line breaks kept as
. */ +function textToEditorHtml(text: string): string { + return text + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/\n/g, '
'); +} + +function addressesOf(text: string): ParsedAddress[] { + return parseAddressList(text).addresses; +} + +function emptyDraft(): ComposeDraft { + return { fromIdx: 0, to: [], cc: [], bcc: [], subject: '', html: '', text: '' }; +} + +function messageFromDraft(draft: ComposeDraft, identities: Identity[], folderId: number, extra: Partial = {}): Omit { + const identity = identities[draft.fromIdx] ?? identities[0]; + const from: Address = identity.name ? { name: identity.name, email: identity.email } : { email: identity.email }; + const to = draft.to.filter(isValidRecipient); + const cc = draft.cc.filter(isValidRecipient); + const at = nextTimestamp(); + return { + folder_id: folderId, + from_text: formatAddress(from), + to_text: to.map(formatAddress).join(', '), + cc, + subject: draft.subject, + preview: draft.text.replace(/\s+/g, ' ').trim().slice(0, 180), + received_at: at, + sent_at: at, + is_seen: 1, + is_flagged: 0, + is_draft: folderId === DRAFTS_FOLDER_ID ? 1 : 0, + has_attachment: 0, + keywords_json: '{}', + scheduled_undo_status: null, + body_kind: 'html', + body_seed: 0, + body: { html: draft.html || '


', text: draft.text, attachments: [] }, + ...extra, + }; +} + +export const useComposeStore = create((set, get) => { + function update(id: string, change: (session: ComposeSession) => ComposeSession) { + set({ sessions: get().sessions.map((session) => (session.id === id ? change(session) : session)) }); + } + + function remove(id: string) { + set({ sessions: get().sessions.filter((session) => session.id !== id) }); + } + + function find(id: string): ComposeSession | undefined { + return get().sessions.find((session) => session.id === id); + } + + function saveDraft(session: ComposeSession) { + const mail = useMailStore.getState(); + if (session.sourceDraftId != null) mail.removeMessage(session.sourceDraftId); + mail.addMessage(messageFromDraft(session.draft, get().identities, DRAFTS_FOLDER_ID)); + } + + return { + sessions: [], + identities: IDENTITIES, + + open(prefill = {}) { + sessionCounter += 1; + const id = `compose-${sessionCounter}`; + const draft: ComposeDraft = { + ...emptyDraft(), + to: prefill.to ?? [], + cc: prefill.cc ?? [], + subject: prefill.subject ?? '', + html: prefill.html ?? '', + }; + const session: ComposeSession = { + id, + presentation: 'expanded', + draft, + draftEpoch: 1, + editorHtmlBody: prefill.html ?? '', + closePromptOpen: false, + sourceDraftId: prefill.sourceDraftId ?? null, + }; + set({ + sessions: [ + ...get().sessions.map((s) => (s.presentation === 'expanded' ? { ...s, presentation: 'minimized' as const } : s)), + session, + ], + }); + return id; + }, + + minimize(id) { + update(id, (session) => ({ ...session, presentation: 'minimized', closePromptOpen: false })); + }, + + restore(id) { + set({ + sessions: get().sessions.map((session) => { + if (session.id === id) return { ...session, presentation: 'expanded' }; + return session.presentation === 'expanded' ? { ...session, presentation: 'minimized' } : session; + }), + }); + }, + + close(id) { + remove(id); + }, + + requestClose(id) { + const session = find(id); + if (!session) return; + if (!isSessionMeaningfullyNonEmpty(session)) { + remove(id); + return; + } + get().restore(id); + update(id, (current) => ({ ...current, closePromptOpen: true })); + }, + + cancelClose(id) { + update(id, (session) => ({ ...session, closePromptOpen: false })); + }, + + closeWithoutSaving(id) { + remove(id); + }, + + saveAndClose(id) { + const session = find(id); + if (!session) return; + saveDraft(session); + remove(id); + useMailStore.getState().showToast('Draft saved.'); + }, + + discardDraft(id) { + const session = find(id); + if (!session) return; + if (session.sourceDraftId != null) useMailStore.getState().removeMessage(session.sourceDraftId); + remove(id); + }, + + updateDraft(id, patch) { + update(id, (session) => ({ ...session, draft: { ...session.draft, ...patch } })); + }, + + send(id, schedule = null) { + const session = find(id); + if (!session) return; + const mail = useMailStore.getState(); + const recipients = [...session.draft.to, ...session.draft.cc, ...session.draft.bcc]; + if (recipients.length === 0 || recipients.some((entry) => !isValidRecipient(entry))) { + mail.showToast(recipients.length === 0 + ? 'Add at least one recipient before sending.' + : 'Fix the invalid recipients before sending.'); + return; + } + if (session.sourceDraftId != null) mail.removeMessage(session.sourceDraftId); + if (schedule) { + mail.addMessage(messageFromDraft(session.draft, get().identities, 3, { + sent_at: schedule.targetAt, + scheduled_undo_status: 'pending', + })); + mail.showToast(`Message scheduled for ${schedule.label}.`); + } else { + mail.addMessage(messageFromDraft(session.draft, get().identities, SENT_FOLDER_ID)); + mail.showToast('Message sent.'); + } + remove(id); + }, + + prepareReply(message, all) { + const owned = new Set(get().identities.map((identity) => addressKey(identity.email))); + const notOwned = (addresses: ParsedAddress[]) => addresses.filter((a) => !owned.has(addressKey(a.email))); + const from = addressesOf(message.from_text); + const selfAuthored = from.length > 0 && from.every((a) => owned.has(addressKey(a.email))); + const originalTo = addressesOf(message.to_text); + let to = selfAuthored ? notOwned(originalTo) : notOwned(from); + if (to.length === 0) to = from; + const seen = new Set(to.map((a) => addressKey(a.email))); + const cc: ParsedAddress[] = []; + if (all) { + for (const address of notOwned([...originalTo, ...message.cc])) { + const key = addressKey(address.email); + if (seen.has(key)) continue; + seen.add(key); + cc.push(address); + } + } + const body = bodyFor(message); + const quoted = buildQuotedHtml({ + from: message.from_text, + date: message.received_at, + subject: message.subject, + html: body.html, + text: body.text, + }); + get().open({ + to, + cc, + subject: makeReplySubject(message.subject), + html: `


${quoted}`, + }); + }, + + prepareForward(message) { + const body = bodyFor(message); + const header = [ + `Subject: ${message.subject}`, + `Date: ${new Date(message.received_at).toUTCString()}`, + `From: ${message.from_text}`, + `To: ${message.to_text}`, + ].map((line) => line.replace(/&/g, '&').replace(//g, '>')).join('
'); + const inner = body.html ?? textToEditorHtml(body.text ?? ''); + get().open({ + subject: makeForwardSubject(message.subject), + html: `


-------- Forwarded Message --------
${header}

${inner}
`, + }); + }, + + openDraft(message) { + const body = bodyFor(message); + get().open({ + to: addressesOf(message.to_text), + cc: message.cc, + subject: message.subject, + html: body.html ?? textToEditorHtml(body.text ?? ''), + sourceDraftId: message.id, + }); + }, + }; +}); + diff --git a/suites-experimental/stormbox-react/src/store/contacts.ts b/suites-experimental/stormbox-react/src/store/contacts.ts new file mode 100644 index 000000000..960747826 --- /dev/null +++ b/suites-experimental/stormbox-react/src/store/contacts.ts @@ -0,0 +1,47 @@ +import type { Contact } from '../data/mailbox'; +import { addressKey } from '../utils/address-key'; +import { useMailStore } from './mail-store'; + +export interface AutocompleteCandidate { + name: string | null; + email: string; + organization?: string | null; + source: string; + last_sent_at?: number; + send_count?: number; +} + +function candidate(contact: Contact): AutocompleteCandidate { + return { + name: contact.name, + email: contact.email, + organization: contact.organization ?? null, + source: 'contact', + last_sent_at: contact.last_sent_at, + send_count: contact.send_count, + }; +} + +function matches(contact: Contact, needle: string): boolean { + if (contact.email.toLowerCase().startsWith(needle)) return true; + for (const word of contact.name.toLowerCase().split(/\s+/)) { + if (word.startsWith(needle)) return true; + } + return Boolean(contact.organization?.toLowerCase().split(/\s+/).some((word) => word.startsWith(needle))); +} + +/** Address book lookup ranked by how often and how recently Alex wrote to each contact. */ +export async function autocompleteContacts(prefix: string, limit: number, exclude: string[]): Promise { + const needle = prefix.trim().toLowerCase(); + const excluded = new Set(exclude.map((email) => addressKey(email))); + const { contacts } = useMailStore.getState(); + const found = contacts + .filter((contact) => !excluded.has(addressKey(contact.email)) && matches(contact, needle)) + .sort((a, b) => (b.send_count - a.send_count) || (b.last_sent_at - a.last_sent_at) || a.name.localeCompare(b.name)); + return found.slice(0, limit).map(candidate); +} + +export async function browseContacts(): Promise { + const { contacts } = useMailStore.getState(); + return [...contacts].sort((a, b) => a.name.localeCompare(b.name)).map(candidate); +} diff --git a/suites-experimental/stormbox-react/src/store/mail-store.ts b/suites-experimental/stormbox-react/src/store/mail-store.ts new file mode 100644 index 000000000..bdff0d100 --- /dev/null +++ b/suites-experimental/stormbox-react/src/store/mail-store.ts @@ -0,0 +1,465 @@ +import { create } from 'zustand'; + +import { generateMailbox, type Contact } from '../data/mailbox'; +import type { Folder, Message, ViewId } from '../types'; +import { isTagKeyword, normalizeKeyword } from '../utils/message-tags'; + +export const STARRED_KEYWORD = '$flagged'; +export const ARCHIVE_FOLDER_ID = 5; +export const JUNK_FOLDER_ID = 6; +export const TRASH_FOLDER_ID = 7; +export const INBOX_FOLDER_ID = 1; +export const DRAFTS_FOLDER_ID = 2; +export const SENT_FOLDER_ID = 4; + +/** Folders a tag view leaves out: their mail is on its way out. */ +const TAG_VIEW_EXCLUDED = new Set([JUNK_FOLDER_ID, TRASH_FOLDER_ID]); + +interface Attributed { + id: number | null; + viewId: ViewId | null; +} + +interface Selection { + viewId: ViewId | null; + ids: Set; +} + +export interface Toast { + id: number; + text: string; +} + +export interface MailState { + folders: Folder[]; + messages: Map; + /** Message ids per folder, newest first. */ + folderIds: Map; + contacts: Contact[]; + currentViewId: ViewId; + /** Bumped on every folder pick, including a re-pick of the current one. */ + folderPickCount: number; + selection: Selection; + focused: Attributed; + open: Attributed; + toasts: Toast[]; + + selectFolder: (viewId: ViewId) => void; + selectMessage: (id: number | null, viewId?: ViewId) => void; + setFocusedMessage: (id: number | null, viewId: ViewId) => void; + setSelection: (viewId: ViewId, ids: Set) => void; + clearSelection: () => void; + markManySeen: (ids: number[], seen: boolean) => void; + toggleManySeen: (ids: number[]) => void; + markManyFlagged: (ids: number[], flagged: boolean) => void; + toggleManyFlagged: (ids: number[]) => void; + setTagsMany: (ids: number[], change: { add?: string[]; remove?: string[] }) => void; + clearTagsMany: (ids: number[]) => void; + moveMessages: (ids: number[], targetFolderId: number) => void; + archiveMessages: (ids: number[]) => void; + junkMessages: (ids: number[]) => void; + notJunk: (ids: number[]) => void; + destroyMessages: (ids: number[]) => void; + cancelScheduledSend: (id: number) => void; + addMessage: (message: Omit) => number; + removeMessage: (id: number) => void; + showToast: (text: string) => void; + dismissToast: (id: number) => void; +} + +export function isTagViewId(viewId: ViewId | null | undefined): viewId is `tag:${string}` { + return typeof viewId === 'string'; +} + +export function tagViewKeyword(viewId: `tag:${string}`): string { + return viewId.slice(4); +} + +export function tagViewIdFor(keyword: string): `tag:${string}` { + return `tag:${normalizeKeyword(keyword)}`; +} + +function messageHasKeyword(message: Message, keyword: string): boolean { + if (keyword === STARRED_KEYWORD) return message.is_flagged === 1; + if (!message.keywords_json || message.keywords_json === '{}') return false; + try { + const parsed = JSON.parse(message.keywords_json) as Record; + return Object.keys(parsed).some((key) => parsed[key] === true && normalizeKeyword(key) === keyword); + } catch { + return false; + } +} + +const sortNewestFirst = (messages: Map) => (a: number, b: number) => + (messages.get(b)!.received_at - messages.get(a)!.received_at) || (b - a); + +let rowsCache: { + messages: Map | null; + folderIds: Map | null; + rows: Map; +} = { messages: null, folderIds: null, rows: new Map() }; + +/** Rows of a folder or tag view, newest first; memoized per store snapshot. */ +export function viewRows(state: Pick, viewId: ViewId | null): Message[] { + if (viewId == null) return []; + if (rowsCache.messages !== state.messages || rowsCache.folderIds !== state.folderIds) { + rowsCache = { messages: state.messages, folderIds: state.folderIds, rows: new Map() }; + } + const cached = rowsCache.rows.get(viewId); + if (cached) return cached; + let rows: Message[]; + if (isTagViewId(viewId)) { + const keyword = tagViewKeyword(viewId); + rows = []; + for (const message of state.messages.values()) { + if (TAG_VIEW_EXCLUDED.has(message.folder_id)) continue; + if (messageHasKeyword(message, keyword)) rows.push(message); + } + rows.sort((a, b) => (b.received_at - a.received_at) || (b.id - a.id)); + } else { + rows = (state.folderIds.get(viewId) ?? []).map((id) => state.messages.get(id)!); + } + rowsCache.rows.set(viewId, rows); + return rows; +} + +let countsCache: { messages: Map | null; counts: FolderCounts } = { + messages: null, + counts: { unread: new Map(), total: new Map(), tags: new Map() }, +}; + +export interface FolderCounts { + unread: Map; + total: Map; + /** Messages carrying each tag keyword (and $flagged), outside Junk and Trash. */ + tags: Map; +} + +export function folderCounts(state: Pick): FolderCounts { + if (countsCache.messages === state.messages) return countsCache.counts; + const unread = new Map(); + const total = new Map(); + const tags = new Map(); + for (const message of state.messages.values()) { + total.set(message.folder_id, (total.get(message.folder_id) ?? 0) + 1); + if (message.is_seen === 0) unread.set(message.folder_id, (unread.get(message.folder_id) ?? 0) + 1); + if (TAG_VIEW_EXCLUDED.has(message.folder_id)) continue; + if (message.is_flagged === 1) tags.set(STARRED_KEYWORD, (tags.get(STARRED_KEYWORD) ?? 0) + 1); + if (message.keywords_json && message.keywords_json !== '{}') { + const parsed = JSON.parse(message.keywords_json) as Record; + for (const key of Object.keys(parsed)) { + if (parsed[key] !== true) continue; + const keyword = normalizeKeyword(key); + tags.set(keyword, (tags.get(keyword) ?? 0) + 1); + } + } + } + countsCache = { messages: state.messages, counts: { unread, total, tags } }; + return countsCache.counts; +} + +function updateMessages( + messages: Map, + ids: Iterable, + update: (message: Message) => Message | null, +): Map { + let next: Map | null = null; + for (const id of ids) { + const current = messages.get(id); + if (!current) continue; + const changed = update(current); + if (!changed || changed === current) continue; + next ??= new Map(messages); + next.set(id, changed); + } + return next ?? messages; +} + +function withKeywords(message: Message, change: (keywords: Record) => void): Message { + let parsed: Record = {}; + try { + parsed = JSON.parse(message.keywords_json || '{}'); + } catch { + parsed = {}; + } + const before = JSON.stringify(parsed); + change(parsed); + const after = JSON.stringify(parsed); + return before === after ? message : { ...message, keywords_json: after }; +} + +function initialState() { + const params = typeof location === 'undefined' ? null : new URLSearchParams(location.search); + const scale = Math.max(0.01, Number(params?.get('scale') ?? 1) || 1); + const mailbox = generateMailbox(scale); + const messages = new Map(); + const folderIds = new Map(); + for (const folder of mailbox.folders) folderIds.set(folder.id, []); + for (const message of mailbox.messages) { + messages.set(message.id, message); + folderIds.get(message.folder_id)!.push(message.id); + } + const compare = sortNewestFirst(messages); + for (const ids of folderIds.values()) ids.sort(compare); + return { + folders: mailbox.folders, + messages, + folderIds, + contacts: mailbox.contacts, + }; +} + +let toastCounter = 0; + +export const useMailStore = create((set, get) => { + /** + * Drop the open message, cursor and selection when they belong to `viewId`. + */ + function clearInteractionFor(state: MailState, viewId: ViewId | null): Partial { + const patch: Partial = {}; + if (state.open.id != null && state.open.viewId === viewId) patch.open = { id: null, viewId: null }; + if (state.focused.viewId === viewId) patch.focused = { id: null, viewId: null }; + if (state.selection.ids.size > 0 && state.selection.viewId === viewId) { + patch.selection = { viewId: null, ids: new Set() }; + } + return patch; + } + + /** + * The row to preview once `ids` leave the view the open message or the + * checkbox selection came from: the neighbour after the first removed + * row, else the one before. Undefined when neither was affected. + */ + function nextPreviewAfterRemoval(state: MailState, ids: Set): { id: number | null; viewId: ViewId } | undefined { + const openRemoved = state.open.id != null && ids.has(state.open.id); + let selectionRemoved = false; + if (state.open.id == null && state.selection.ids.size > 0) { + for (const id of state.selection.ids) { + if (ids.has(id)) { + selectionRemoved = true; + break; + } + } + } + if (!openRemoved && !selectionRemoved) return undefined; + const viewId = (openRemoved ? state.open.viewId : state.selection.viewId) ?? state.currentViewId; + const rows = viewRows(state, viewId); + const first = rows.findIndex((row) => ids.has(row.id)); + if (first < 0) return { id: null, viewId }; + for (let i = first + 1; i < rows.length; i += 1) { + if (!ids.has(rows[i].id)) return { id: rows[i].id, viewId }; + } + for (let i = first - 1; i >= 0; i -= 1) { + if (!ids.has(rows[i].id)) return { id: rows[i].id, viewId }; + } + return { id: null, viewId }; + } + + function pruneInteraction(state: MailState, ids: Set): Partial { + const patch: Partial = {}; + if (state.open.id != null && ids.has(state.open.id)) patch.open = { id: null, viewId: null }; + if (state.focused.id != null && ids.has(state.focused.id)) patch.focused = { id: null, viewId: null }; + if (state.selection.ids.size > 0) { + const next = new Set(state.selection.ids); + let changed = false; + for (const id of ids) if (next.delete(id)) changed = true; + if (changed) patch.selection = { viewId: next.size > 0 ? state.selection.viewId : null, ids: next }; + } + return patch; + } + + /** Apply a removal from the visible views, then open the neighbour as Stormbox does. */ + function relocate(ids: number[], targetFolderId: number | null) { + const state = get(); + const idSet = new Set(ids.filter((id) => state.messages.has(id))); + if (idSet.size === 0) return; + const next = nextPreviewAfterRemoval(state, idSet); + const messages = new Map(state.messages); + const folderIds = new Map(state.folderIds); + const touchedSources = new Set(); + for (const id of idSet) { + const message = messages.get(id)!; + touchedSources.add(message.folder_id); + if (targetFolderId == null) messages.delete(id); + else messages.set(id, { ...message, folder_id: targetFolderId }); + } + for (const folderId of touchedSources) { + folderIds.set(folderId, folderIds.get(folderId)!.filter((id) => !idSet.has(id))); + } + if (targetFolderId != null) { + const target = [...folderIds.get(targetFolderId)!.filter((id) => !idSet.has(id)), ...idSet]; + target.sort(sortNewestFirst(messages)); + folderIds.set(targetFolderId, target); + } + const patch: Partial = { messages, folderIds, ...pruneInteraction(state, idSet) }; + set(patch); + if (next !== undefined) get().selectMessage(next.id, next.id == null ? undefined : next.viewId); + } + + return { + ...initialState(), + currentViewId: INBOX_FOLDER_ID, + folderPickCount: 0, + selection: { viewId: null, ids: new Set() }, + focused: { id: null, viewId: null }, + open: { id: null, viewId: null }, + toasts: [], + + selectFolder(viewId) { + const state = get(); + const previous = state.currentViewId; + set({ + currentViewId: viewId, + folderPickCount: state.folderPickCount + 1, + ...clearInteractionFor(state, previous), + ...(previous !== viewId ? clearInteractionFor(state, viewId) : {}), + }); + }, + + selectMessage(id, viewId) { + const state = get(); + const owner = id == null ? null : (viewId ?? state.currentViewId); + const patch: Partial = { + open: { id, viewId: owner }, + focused: { id, viewId: owner }, + }; + if (id != null) { + const message = state.messages.get(id); + if (message && message.is_seen === 0) { + patch.messages = updateMessages(state.messages, [id], (m) => ({ ...m, is_seen: 1 })); + } + } + set(patch); + }, + + setFocusedMessage(id, viewId) { + set({ focused: { id, viewId: id == null ? null : viewId } }); + }, + + setSelection(viewId, ids) { + set({ selection: { viewId: ids.size > 0 ? viewId : null, ids } }); + }, + + clearSelection() { + if (get().selection.ids.size === 0) return; + set({ selection: { viewId: null, ids: new Set() } }); + }, + + markManySeen(ids, seen) { + const value = seen ? 1 : 0; + set({ messages: updateMessages(get().messages, ids, (m) => (m.is_seen === value ? m : { ...m, is_seen: value })) }); + }, + + toggleManySeen(ids) { + const { messages } = get(); + const anyUnread = ids.some((id) => messages.get(id)?.is_seen === 0); + get().markManySeen(ids, anyUnread); + }, + + markManyFlagged(ids, flagged) { + const value = flagged ? 1 : 0; + set({ messages: updateMessages(get().messages, ids, (m) => (m.is_flagged === value ? m : { ...m, is_flagged: value })) }); + }, + + toggleManyFlagged(ids) { + const { messages } = get(); + const anyStarred = ids.some((id) => messages.get(id)?.is_flagged === 1); + get().markManyFlagged(ids, !anyStarred); + }, + + setTagsMany(ids, { add = [], remove = [] }) { + set({ + messages: updateMessages(get().messages, ids, (m) => withKeywords(m, (keywords) => { + for (const keyword of remove) { + for (const key of Object.keys(keywords)) { + if (normalizeKeyword(key) === normalizeKeyword(keyword)) delete keywords[key]; + } + } + for (const keyword of add) keywords[normalizeKeyword(keyword)] = true; + })), + }); + }, + + clearTagsMany(ids) { + set({ + messages: updateMessages(get().messages, ids, (m) => withKeywords(m, (keywords) => { + for (const key of Object.keys(keywords)) { + if (isTagKeyword(key)) delete keywords[key]; + } + })), + }); + }, + + moveMessages(ids, targetFolderId) { + const { messages } = get(); + relocate(ids.filter((id) => messages.get(id)?.folder_id !== targetFolderId), targetFolderId); + }, + + archiveMessages(ids) { + get().moveMessages(ids, ARCHIVE_FOLDER_ID); + }, + + junkMessages(ids) { + get().moveMessages(ids, JUNK_FOLDER_ID); + }, + + notJunk(ids) { + get().moveMessages(ids, INBOX_FOLDER_ID); + }, + + destroyMessages(ids) { + const { messages } = get(); + const inTrash = ids.filter((id) => messages.get(id)?.folder_id === TRASH_FOLDER_ID); + const elsewhere = ids.filter((id) => messages.has(id) && messages.get(id)!.folder_id !== TRASH_FOLDER_ID); + if (elsewhere.length > 0) relocate(elsewhere, TRASH_FOLDER_ID); + if (inTrash.length > 0) relocate(inTrash, null); + }, + + cancelScheduledSend(id) { + const state = get(); + const message = state.messages.get(id); + if (!message) return; + state.selectMessage(null); + set({ + messages: updateMessages(get().messages, [id], (m) => ({ ...m, scheduled_undo_status: null, is_draft: 1 })), + }); + get().moveMessages([id], DRAFTS_FOLDER_ID); + get().showToast('Sending was canceled; the message is back in Drafts.'); + }, + + addMessage(input) { + const state = get(); + let id = 0; + for (const key of state.messages.keys()) if (key > id) id = key; + id += 1; + const message: Message = { ...input, id }; + const messages = new Map(state.messages); + messages.set(id, message); + const folderIds = new Map(state.folderIds); + const target = [id, ...folderIds.get(message.folder_id)!]; + target.sort(sortNewestFirst(messages)); + folderIds.set(message.folder_id, target); + set({ messages, folderIds }); + return id; + }, + + removeMessage(id) { + relocate([id], null); + }, + + showToast(text) { + toastCounter += 1; + const toast = { id: toastCounter, text }; + set({ toasts: [...get().toasts.slice(-2), toast] }); + }, + + dismissToast(id) { + set({ toasts: get().toasts.filter((toast) => toast.id !== id) }); + }, + }; +}); + +export function folderById(state: Pick, id: ViewId | null): Folder | null { + if (id == null || isTagViewId(id)) return null; + return state.folders.find((folder) => folder.id === id) ?? null; +} diff --git a/suites-experimental/stormbox-react/src/store/ui-store.ts b/suites-experimental/stormbox-react/src/store/ui-store.ts new file mode 100644 index 000000000..996ccd1cc --- /dev/null +++ b/suites-experimental/stormbox-react/src/store/ui-store.ts @@ -0,0 +1,48 @@ +import { create } from 'zustand'; + +export type AppliedTheme = 'dark' | 'light'; +export type AppSpace = 'mail' | 'contacts'; + +export const DEFAULT_FOLDER_LIST_WIDTH = 240; +export const MESSAGE_COLUMN_MIN_WIDTH = 280; +export const MESSAGE_COLUMN_MAX_WIDTH = 1920; +export const MESSAGE_COLUMN_DEFAULT_WIDTH = 360; +export const MESSAGE_COLUMN_RESIZER_WIDTH = 6; + +interface UiState { + theme: AppliedTheme; + space: AppSpace; + quickFilter: string; + folderListWidth: number; + messageColumnWidth: number; + /** Request counter for the quick filter focus shortcut. */ + quickFilterFocusRequest: number; + setTheme: (theme: AppliedTheme) => void; + toggleTheme: () => void; + setSpace: (space: AppSpace) => void; + setQuickFilter: (value: string) => void; + setFolderListWidth: (width: number) => void; + setMessageColumnWidth: (width: number) => void; + requestQuickFilterFocus: () => void; +} + +function initialTheme(): AppliedTheme { + if (typeof location === 'undefined') return 'dark'; + return new URLSearchParams(location.search).get('theme') === 'light' ? 'light' : 'dark'; +} + +export const useUiStore = create((set, get) => ({ + theme: initialTheme(), + space: 'mail', + quickFilter: '', + folderListWidth: DEFAULT_FOLDER_LIST_WIDTH, + messageColumnWidth: MESSAGE_COLUMN_DEFAULT_WIDTH, + quickFilterFocusRequest: 0, + setTheme: (theme) => set({ theme }), + toggleTheme: () => set({ theme: get().theme === 'dark' ? 'light' : 'dark' }), + setSpace: (space) => set({ space, quickFilter: '' }), + setQuickFilter: (quickFilter) => set({ quickFilter }), + setFolderListWidth: (folderListWidth) => set({ folderListWidth }), + setMessageColumnWidth: (messageColumnWidth) => set({ messageColumnWidth }), + requestQuickFilterFocus: () => set({ quickFilterFocusRequest: get().quickFilterFocusRequest + 1 }), +})); diff --git a/suites-experimental/stormbox-react/src/styles/app.css b/suites-experimental/stormbox-react/src/styles/app.css new file mode 100644 index 000000000..ddb161ebd --- /dev/null +++ b/suites-experimental/stormbox-react/src/styles/app.css @@ -0,0 +1,530 @@ +:root { + --surface: var(--panel); + --fg: var(--text); + --spaces-bar-height: calc(56px + env(safe-area-inset-bottom)); + --border-soft: color-mix(in srgb, var(--border) 55%, transparent); + --accent-bg: color-mix(in srgb, var(--accent) 22%, var(--panel2)); + --accent-fg: var(--accent); + /* Chrome on the Bolt ramp (assets/styles.css). Dark: content on lower, + folder list, popovers and dialogs on base, rail and top nav on raised. + Light steps the other way (html.light below). */ + --space-rail-bg: var(--colour-neutral-raised); + --space-rail-fg: var(--muted); + --folder-list-bg: var(--colour-neutral-base); + /* Top nav: same 56px band as before, sharing the rail's surface. The + Bolt palette (assets/bolt-theme.css) re-points these tokens. */ + --top-nav-height: 56px; + --top-nav-bg: var(--space-rail-bg); + /* Modal look shared by every dialog (the Welcome modal defines it): a + base-surface card with a border edge over a dark blurred scrim. */ + --modal-bg: var(--colour-neutral-base); + --modal-surface: var(--modal-bg); + --modal-border: var(--control-border); + --modal-shadow: + 0 28px 80px color-mix(in srgb, #000 46%, transparent), + inset 0 1px 0 color-mix(in srgb, #fff 8%, transparent); + --modal-scrim: color-mix(in srgb, #000 64%, transparent); + --modal-scrim-blur: blur(12px); + --top-nav-wordmark: var(--accent); + --top-nav-input-bg: var(--surface); + --top-nav-popover-bg: var(--colour-neutral-base); +} + +html.light, +.light { + /* Content, dialogs and popovers on base, folder list on lower, rail and + top nav on subtle. */ + --space-rail-bg: var(--colour-neutral-subtle); + --folder-list-bg: var(--colour-neutral-lower); + --top-nav-wordmark: var(--accent); +} + +/* The columns area asks for the sum of its column widths; the grid gives + it that much only while the reading pane keeps its minimum, and the + area scrolls horizontally past that (the column handles live inside + it, so no resizer track sits between the two). */ +.shell { + position: relative; + --folder-resizer-width: var(--column-resizer-width, 6px); + display: grid; + grid-template-columns: + 56px + auto + var(--folder-resizer-width) + minmax(var(--message-list-min-width, 280px), var(--message-columns-width, 360px)) + minmax(var(--message-view-min-width, 320px), 1fr); + grid-template-rows: auto minmax(0, 1fr); + height: var(--app-viewport-height); + background: var(--panel); + color: var(--text); + overflow: hidden; +} +.shell--message-view-hidden { + grid-template-columns: + 56px + auto + var(--folder-resizer-width) + minmax(var(--message-list-min-width, 280px), 1fr) + 0px; +} +.shell--message-list-hidden { + grid-template-columns: + 56px + auto + var(--folder-resizer-width) + 0px + minmax(0, 1fr); +} +.shell--folder-list-hidden { + --folder-resizer-width: 0px; +} +.shell--contacts { + grid-template-columns: + 56px + auto + var(--folder-resizer-width) + minmax(0, 1fr); +} +/* While a feature spotlight runs, the tour caption sits along the top edge + * (FeatureCardGrid) and the composer sits directly beneath it. The dialog's + * own backdrop is dropped so the scrim is the only dimming. The dock lifts + * off the bottom edge so its ring is not clipped by the viewport. Three + * classes outrank the components' scoped `[data-v]` rules. */ +.shell.shell--spotlighting .compose-dialog { + --spotlight-caption-space: 112px; + align-items: start; + padding-top: var(--spotlight-caption-space); + box-sizing: border-box; + background: transparent; +} +.shell.shell--spotlighting .compose-dialog__card { + height: min(640px, calc(100vh - var(--spotlight-caption-space) - 24px)); +} +.shell.shell--spotlighting .compose-dock { + bottom: 14px; +} +.shell.shell--spotlighting .compose-dock__item { + border-bottom: 2px solid var(--compose-dock-outline); + border-radius: 10px; +} +/* The folder manager the tour opens sits above the scrim (120 > 90); its + * own backdrop would dim the caption, so the scrim is the only dimming. */ +body.spotlighting .folder-subs { + background: transparent; +} +/* Grid items default to min-height: auto, which makes inner + * overflow:auto containers grow to their content instead of scrolling. + * Force every shell column to be allowed to shrink so its children can + * own the vertical scroll. */ +.shell > * { min-height: 0; min-width: 0; } +.shell > .msg-columns { + grid-column: 4; +} +.shell > .message-view { + grid-column: 5; +} +.shell--message-view-maximized > .message-view { + position: fixed; + inset: 0; + z-index: 45; + width: 100%; + height: var(--app-viewport-height); +} +.shell--message-view-maximized > :is( + .quick-filter, + .app-spaces, + .sidebar-slot, + .column-resizer, + .msg-columns +) { + visibility: hidden; +} +.shell--message-list-hidden > .message-view { + grid-column: 4 / -1; +} +.shell > .contacts { grid-column: 4 / -1; } + +.quick-filter { + grid-column: 1 / -1; + position: relative; + display: flex; + align-items: center; + column-gap: 16px; + height: var(--top-nav-height); + padding: 0 16px 0 14px; + /* No bottom hairline: the bar reads as one surface with the sidebar. */ + background: var(--top-nav-bg); +} +.quick-filter__brand { + display: inline-flex; + align-items: center; + gap: 6px; + height: 36px; + flex-shrink: 0; + user-select: none; +} +.quick-filter__glyph { + display: inline-flex; + width: 24px; + height: 24px; + color: var(--accent); +} +.quick-filter__glyph svg { + display: block; + width: 100%; + height: 100%; +} +.quick-filter__wordmark { + font-family: var(--font-display); + font-size: 20px; + font-weight: 700; + line-height: 1; + letter-spacing: -0.01em; + color: var(--top-nav-wordmark); +} +/* Compact layouts only; see the 639px media query. */ +.quick-filter__menu { + display: none; +} +.quick-filter__actions { + display: inline-flex; + align-items: center; + gap: 2px; + flex-shrink: 0; +} +.quick-filter__actions > .account-menu { + margin-left: 2px; +} +.quick-filter__actions > .beacon-menu { + margin: 0 4px; +} +.quick-filter__action, +.quick-filter__action.theme-toggle { + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + padding: 0; + border: 1px solid transparent; + border-radius: 999px; + background: transparent; + color: var(--text); + cursor: pointer; + text-decoration: none; +} +.quick-filter__action:hover, +.quick-filter__action:focus-visible, +.quick-filter__action.theme-toggle:hover, +.quick-filter__action.theme-toggle:focus-visible { + background: var(--control-hover-bg); + border-color: var(--control-hover-border); +} +.quick-filter__action:focus-visible, +.quick-filter__action.theme-toggle:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; +} +.quick-filter__search { + position: relative; + flex: 0 1 360px; + min-width: 160px; + margin: 0 auto; +} +.quick-filter__input { + width: 100%; + height: 36px; + border: 1px solid var(--control-border); + border-radius: 8px; + background: var(--top-nav-input-bg); + color: var(--text); + font: inherit; + font-size: 14px; + padding: 0 40px 0 14px; + outline: none; +} +.quick-filter__input--empty { + padding-right: 70px; +} +/* .quick-filter__clear occupies the padding gutter, so the WebKit search + affordances would sit beside it as a second clear button. */ +.quick-filter__input::-webkit-search-cancel-button, +.quick-filter__input::-webkit-search-decoration { + -webkit-appearance: none; + appearance: none; +} +.quick-filter__input::placeholder { + color: var(--muted); +} +.quick-filter__input:focus { + border-color: var(--accent); + box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent); +} +.quick-filter__shortcut { + position: absolute; + top: 50%; + right: 12px; + padding: 2px 6px; + border: 1px solid var(--border); + border-radius: 4px; + background: color-mix(in srgb, var(--surface) 88%, var(--rowHover)); + color: var(--muted); + font-family: inherit; + font-size: 11px; + line-height: 1.2; + pointer-events: none; + transform: translateY(-50%); +} +.quick-filter__clear { + position: absolute; + top: 50%; + right: 8px; + display: inline-flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + padding: 0; + border: 1px solid transparent; + border-radius: 999px; + background: transparent; + color: var(--muted); + cursor: pointer; + line-height: 1; + transform: translateY(-50%); +} +.quick-filter__clear svg { + display: block; +} +.quick-filter__clear:hover, +.quick-filter__clear:focus-visible { + background: var(--control-hover-bg); + border-color: var(--control-hover-border); + color: var(--text); +} +.quick-filter__clear:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; +} + +@media (max-width: 639px) { + .shell { + --folder-resizer-width: 0px; + } + .shell .sidebar-slot { + position: absolute; + /* Under `.compose-dialog` (50), which is a modal and has to be reachable + from the one control that opens it here — the New Message button inside + this drawer. At 70 the drawer covered the dialog it had just opened, and + took its taps with it, which is what made compose unusable on a phone + (CS-2.9). Nothing else occupies the band between the mail columns and + the dialog, so this only reorders those two. */ + z-index: 40; + top: var(--top-nav-height); + bottom: 0; + left: 56px; + width: min(var(--folder-list-width, 240px), calc(100vw - 56px)); + max-width: calc(100vw - 56px); + height: auto; + transform: translateX(0); + transition: transform var(--folder-list-transition-ms, 360ms) ease, + box-shadow var(--folder-list-transition-ms, 360ms) ease; + box-shadow: 18px 0 34px color-mix(in srgb, #000 28%, transparent); + } + .shell .sidebar-slot--hidden { + width: min(var(--folder-list-width, 240px), calc(100vw - 56px)); + transform: translateX(-100%); + box-shadow: none; + pointer-events: none; + } + .shell .sidebar { + width: 100%; + transform: none; + } + .shell .column-resizer--folder-list { + display: none; + } + .shell--message-view-hidden > .msg-columns, + .shell--message-list-hidden > .message-view { + grid-column: 2 / -1; + } + /* Same 56px band: glyph, full-width filter, menu and avatar in one row. + The wordmark and the desktop-only actions give the filter their room; + the menu takes their place beside the avatar. */ + .quick-filter { + column-gap: 8px; + padding: 0 8px; + } + .quick-filter__wordmark { + display: none; + } + .quick-filter__search { + flex: 1 1 auto; + min-width: 0; + margin: 0; + } + .quick-filter__menu { + display: block; + } + .quick-filter__actions > :not(.account-menu, .beacon-menu, .quick-filter__menu) { + display: none; + } + .quick-filter__actions > .account-menu { + margin-left: 0; + } +} + +@media (max-width: 639px) { + .shell, + .shell--message-view-hidden, + .shell--message-list-hidden { + grid-template-columns: minmax(0, 1fr); + grid-template-rows: auto minmax(0, 1fr) var(--spaces-bar-height); + } + .quick-filter { + grid-column: 1; + grid-row: 1; + } + .shell > .app-spaces { + grid-column: 1; + grid-row: 3; + } + .shell .sidebar-slot { + top: var(--top-nav-height); + bottom: var(--spaces-bar-height); + left: 0; + width: min(var(--folder-list-width, 240px), 100vw); + max-width: 100vw; + } + .shell .sidebar-slot--hidden { + width: min(var(--folder-list-width, 240px), 100vw); + } + .shell > .msg-columns, + .shell > .message-view, + .shell > .contacts, + .shell--message-view-hidden > .msg-columns, + .shell--message-list-hidden > .message-view { + grid-column: 1; + grid-row: 2; + } +} + +.sidebar-slot { + width: var(--folder-list-width, 240px); + min-width: 0; + min-height: 0; + height: 100%; + overflow: hidden; + transition: width var(--folder-list-transition-ms, 360ms) ease; +} +.shell--column-resizing .sidebar-slot, +.shell--column-resizing .sidebar { + transition: none; +} +.sidebar-slot--hidden { + width: 0; +} +.sidebar { + display: grid; + grid-template-rows: auto auto 1fr auto; + background: var(--folder-list-bg); + width: var(--folder-list-width, 240px); + min-width: 0; + min-height: 0; + height: 100%; + overflow: hidden; + transform: translateX(0); + transition: transform var(--folder-list-transition-ms, 360ms) ease; +} +.sidebar-slot--hidden .sidebar { + transform: translateX(-100%); +} +.sidebar--contacts { + grid-template-rows: minmax(0, 1fr); +} +.sidebar > * { + min-width: 0; +} +.sidebar > :nth-child(3) { min-height: 0; overflow-y: auto; } +.sidebar__header { + min-width: 0; + padding: 12px 12px 10px; +} +/* New Message is our AppButton (services-ui PrimaryButton wrapper, which + owns the 34px height and bold label). Here we only stretch it to the + sidebar width; colour/hover stay owned by services-ui. */ +.sidebar__compose { + width: 100%; + max-width: 100%; +} +.sidebar__account { + padding: 10px 14px 4px; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--muted); + display: flex; + align-items: center; + gap: 6px; +} +.sidebar__account-name { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-transform: none; + letter-spacing: normal; + font-size: 13px; + font-weight: 500; + color: var(--text); +} + +.sidebar__footer { + margin-top: auto; + padding: 8px; + border-top: 1px solid var(--border-soft); + display: flex; + flex-direction: column; + gap: 4px; +} +.column-resizer { + position: relative; + background: var(--folder-list-bg); + cursor: col-resize; + outline: none; + touch-action: none; +} +.column-resizer--hidden { + cursor: default; + pointer-events: none; +} +.column-resizer::before { + content: ""; + position: absolute; + inset-block: 0; + left: calc(50% - 0.5px); + width: 1px; + background: var(--border); + transition: background-color 0.12s ease, box-shadow 0.12s ease; +} +.column-resizer:hover::before, +.column-resizer:focus-visible::before, +.column-resizer.is-active::before { + background: var(--accent); + box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 24%, transparent); +} +body.is-column-resizing { + cursor: col-resize; + user-select: none; +} +body.is-column-resizing iframe { + pointer-events: none; +} + +@media (prefers-reduced-motion: reduce) { + .sidebar-slot, + .sidebar { + transition: none; + } +} diff --git a/suites-experimental/stormbox-react/src/styles/components.css b/suites-experimental/stormbox-react/src/styles/components.css new file mode 100644 index 000000000..83f31e89b --- /dev/null +++ b/suites-experimental/stormbox-react/src/styles/components.css @@ -0,0 +1,3716 @@ +/* Generated by scripts/port-vue-styles.mjs from Stormbox's Vue components + (MPL-2.0). Do not edit; edit the script or src/styles/local.css. */ + +/* ---- AppButton ---- */ +.base.app-button:is([class],:not([class])) { + align-items: center; + border-radius: 4px; + gap: 6px; +} +.base.app-button.outline:is([class],:not([class])) { + box-sizing: border-box; + border: 1px solid var(--colour-primary-default); + background: transparent; + background-clip: padding-box; + box-shadow: none; +} +.base.app-button.outline:is([class],:not([class]))::before { + display: none; +} +.base.app-button.outline:hover:not(:disabled):is([class],:not([class])) { + border-color: var(--colour-primary-hover); + background: color-mix( + in srgb, + var(--colour-primary-default), + transparent 84% + ); + box-shadow: none; +} +.base.app-button.outline:active:not(:disabled):is([class],:not([class])) { + border-color: var(--colour-primary-pressed); + background: color-mix( + in srgb, + var(--colour-accent-blue), + transparent 74% + ); + box-shadow: none; +} +.base.app-button.outline:disabled:is([class],:not([class])) { + border-color: var(--colour-neutral-border); + background: transparent; + box-shadow: none; +} +.base.app-button:focus:not(:focus-visible):is([class],:not([class])) { + outline: none; +} +.base.app-button:is([class],:not([class])) .text { + font-weight: 600; +} +.base.app-button:is([class],:not([class])) .icon { + display: inline-flex; + width: 16px; + height: 16px; + flex: 0 0 16px; + align-items: center; + justify-content: center; + line-height: 1; + transform: none; +} +.base.app-button:is([class],:not([class])) .icon > svg { + display: block; + transform: none; +} +.base.app-button--compact:is([class],:not([class])) { + height: 34px; +} + +/* ---- AppIconButton ---- */ +.app-icon-button:is([class],:not([class])) { + display: inline-grid; + width: 34px; + height: 34px; + flex: 0 0 34px; + place-items: center; + padding: 0; + border: 0; + border-radius: 8px; + background: transparent; + color: var(--muted); + cursor: pointer; + font: inherit; +} + +.app-icon-button:hover:where(:not(:disabled)):is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); +} + +.app-icon-button--danger:hover:where(:not(:disabled)):is([class],:not([class])) { + background: var(--error-bg); + color: var(--error-fg); +} + +.app-icon-button:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} + +.app-icon-button:disabled:is([class],:not([class])), +.app-icon-button:disabled:hover:is([class],:not([class])) { + background: transparent; + color: var(--muted); + opacity: 0.35; + cursor: default; +} + +.app-icon-button:is([class],:not([class])) svg { + display: block; +} + +/* ---- AppToggleButton ---- */ +.app-toggle-button:is([class],:not([class])) { + position: relative; + width: 40px; + height: 40px; + display: grid; + place-items: center; + border: 0; + border-radius: 10px; + background: transparent; + color: inherit; + cursor: pointer; + transition: background 0.12s ease, color 0.12s ease; +} +.app-toggle-button:hover:where(:not(.is-active):not(:disabled)):is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); +} +.app-toggle-button:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} +.app-toggle-button.is-active:is([class],:not([class])) { + background: var(--accent); + color: #fff; +} + +/* ---- AppDropdown ---- */ +.app-dropdown { + position: relative; +} +.app-dropdown--disabled > summary { + cursor: default; + opacity: 0.55; +} +.app-dropdown__summary { + list-style: none; + cursor: pointer; +} +.app-dropdown__summary::-webkit-details-marker { + display: none; +} +.app-dropdown__summary::after { + content: '▾'; + margin-left: 6px; + font-size: 10px; + opacity: 0.7; +} +.app-dropdown__summary--control { + display: inline-flex; + min-height: 34px; + align-items: center; + justify-content: space-between; + padding: 6px 9px; + border: 1px solid var(--control-border, #d6d9e2); + border-radius: 6px; + background: var(--panel, #fff); + color: var(--text, #1a1d24); + font: inherit; + font-size: 13px; +} +.app-dropdown__summary--control:focus-visible { + border-color: var(--accent); + outline: none; +} +.app-dropdown__menu { + position: absolute; + top: calc(100% + 6px); + left: 0; + z-index: 3; + display: grid; + gap: 2px; + min-width: 190px; + max-height: min(46vh, 340px); + overflow-y: auto; + padding: 6px; + border: 1px solid var(--border, #d6d9e2); + border-radius: 8px; + background: var(--surface, #fff); + box-shadow: 0 14px 34px rgba(0, 0, 0, 0.22); +} +.app-dropdown__item { + display: grid; + grid-template-columns: 24px 1fr; + align-items: center; + gap: 8px; + min-height: 32px; + padding: 6px 8px; + border: 0; + border-radius: 6px; + background: transparent; + color: inherit; + font: inherit; + font-size: 13px; + text-align: left; + cursor: pointer; +} +.app-dropdown__item:hover { + background: rgba(127, 127, 127, 0.18); +} +.app-dropdown__item[aria-checked='true'] { + font-weight: 600; +} +.app-dropdown__heading { + padding: 4px 8px 0; + font-size: 10px; + font-weight: 600; + letter-spacing: 0.04em; + text-transform: uppercase; + color: var(--muted, #6b7388); +} + +/* ---- AppSpaces ---- */ +.app-spaces:is([class],:not([class])) { + display: flex; + flex-direction: column; + align-items: center; + gap: 6px; + padding: 14px 0 max(14px, env(safe-area-inset-bottom)); + background: var(--space-rail-bg, var(--panel2)); + color: var(--muted); + width: 56px; + flex-shrink: 0; + height: 100%; + border-right: 1px solid var(--border); +} + +.app-spaces__bottom-actions:is([class],:not([class])) { + margin-top: auto; + display: flex; + flex-direction: column; + align-items: center; + gap: 6px; +} +.app-spaces__folder-toggle-icon:is([class],:not([class])) { + position: relative; + width: 20px; + height: 16px; + display: block; + border: 1.5px solid currentColor; + border-radius: 3px; +} +.app-spaces__folder-toggle-icon:is([class],:not([class]))::before { + content: ""; + position: absolute; + inset-block: 0; + left: 6px; + width: 1.5px; + background: currentColor; +} +.app-spaces__folder-toggle-icon:is([class],:not([class]))::after, +.app-spaces__folder-toggle-icon span:is([class],:not([class])) { + content: ""; + position: absolute; + left: 9px; + right: 3px; + height: 1.5px; + background: currentColor; + border-radius: 999px; +} +.app-spaces__folder-toggle-icon:is([class],:not([class]))::after { top: 5px; } +.app-spaces__folder-toggle-icon span:is([class],:not([class])) { top: 9px; } +.app-spaces__folder-toggle-icon.is-hidden:is([class],:not([class]))::before, +.app-spaces__folder-toggle-icon.is-hidden:is([class],:not([class]))::after, +.app-spaces__folder-toggle-icon.is-hidden span:is([class],:not([class])) { + opacity: 0.38; +} +.app-spaces__badge:is([class],:not([class])) { + position: absolute; + top: 2px; + right: 2px; + min-width: 16px; + height: 16px; + padding: 0 4px; + border-radius: 8px; + background: #c93838; + color: #fff; + font-size: 10px; + font-weight: 600; + line-height: 16px; + letter-spacing: -0.2px; + text-align: center; + pointer-events: none; +} + +@media (max-width: 639px) { + .app-spaces:is([class],:not([class])) { + position: relative; + flex-direction: row; + justify-content: center; + gap: 8px; + width: 100%; + height: var(--spaces-bar-height, 56px); + padding: + 8px max(56px, env(safe-area-inset-right)) + calc(8px + env(safe-area-inset-bottom)) + max(56px, env(safe-area-inset-left)); + border-right: 0; + border-top: 1px solid var(--border); + } + .app-spaces__bottom-actions:is([class],:not([class])) { + position: absolute; + top: 8px; + left: max(8px, env(safe-area-inset-left)); + margin-top: 0; + flex-direction: row; + } + .app-spaces__settings:is([class],:not([class])) { + display: none; + } +} + +/* ---- StorageUsageBar ---- */ +.storage-usage:is([class],:not([class])) { + padding: 0 6px 4px; +} + +.storage-usage__track:is([class],:not([class])) { + height: 3px; + border-radius: 999px; + background: color-mix(in srgb, var(--muted) 28%, transparent); + overflow: hidden; +} + +.storage-usage__fill:is([class],:not([class])) { + height: 100%; + border-radius: inherit; + background: color-mix(in srgb, var(--text) 72%, var(--muted)); + transition: width 0.2s ease; +} + +.storage-usage__label:is([class],:not([class])) { + margin: 6px 0 0; + font-size: 11px; + line-height: 1.3; + color: var(--muted); +} + +/* ---- AccountAvatarMenu ---- */ +.account-menu:is([class],:not([class])) { + position: relative; +} +.account-menu__button:is([class],:not([class])) { + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + padding: 0; + border: 0; + border-radius: 999px; + background: transparent; + cursor: pointer; + list-style: none; + user-select: none; +} +.account-menu__button:is([class],:not([class]))::-webkit-details-marker { + display: none; +} + +.account-menu__button:hover .account-menu__avatar:is([class],:not([class])), +.account-menu__button:focus-visible .account-menu__avatar:is([class],:not([class])), +.account-menu[open] .account-menu__avatar:is([class],:not([class])) { + box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 24%, transparent); +} +.account-menu__button:focus-visible:is([class],:not([class])) { + outline: none; +} + +.account-menu__avatar:is([class],:not([class])) { + display: inline-flex; + align-items: center; + justify-content: center; + + width: 36px; + height: 36px; + border: 1px solid var(--accent); + border-radius: 999px; + background: var(--accent); + color: #fff; + font-size: 14px; + font-weight: 700; + letter-spacing: 0.02em; + text-transform: uppercase; +} +.account-menu__avatar--large:is([class],:not([class])) { + width: 40px; + height: 40px; + font-size: 14px; +} + +.account-menu__popover:is([class],:not([class])) { + position: absolute; + z-index: 30; + top: calc(100% + 8px); + right: 0; + min-width: 240px; + padding: 6px; + border: 1px solid var(--border); + border-radius: 12px; + background: var(--panel); + box-shadow: 0 16px 32px color-mix(in srgb, #000 32%, transparent); +} + +.account-menu__identity:is([class],:not([class])) { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 10px 12px; + border-bottom: 1px solid var(--border-soft); + margin-bottom: 4px; +} +.account-menu__email:is([class],:not([class])) { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: 500; + font-size: 13px; + color: var(--text); +} + +.account-menu__item:is([class],:not([class])) { + display: flex; + align-items: center; + gap: 10px; + width: 100%; + min-height: 38px; + padding: 8px 10px; + border: 0; + border-radius: 8px; + background: transparent; + color: var(--text); + cursor: pointer; + font: inherit; + font-weight: 500; + font-size: 13px; + text-align: left; + text-decoration: none; +} +.account-menu__item:hover:is([class],:not([class])), +.account-menu__item:focus-visible:is([class],:not([class])) { + background: var(--rowHover); + outline: none; +} +.account-menu__item svg:is([class],:not([class])) { + flex-shrink: 0; + color: var(--muted); +} +.account-menu__support-icon:is([class],:not([class])) { + display: inline-flex; + flex-shrink: 0; + width: 16px; + height: 16px; + color: var(--muted); +} +.account-menu__support-icon:is([class],:not([class])) svg { + width: 100%; + height: 100%; +} + +/* ---- AppDrawer ---- */ +.app-drawer:is([class],:not([class])) { + position: relative; +} +.app-drawer__button:is([class],:not([class])) { + list-style: none; + user-select: none; +} +.app-drawer__button:is([class],:not([class]))::-webkit-details-marker { + display: none; +} +.app-drawer[open] .app-drawer__button:is([class],:not([class])) { + background: var(--control-hover-bg); + border-color: var(--control-hover-border); +} + +.app-drawer__popover:is([class],:not([class])) { + position: absolute; + z-index: 30; + top: calc(100% + 8px); + right: 0; + display: grid; + grid-template-columns: repeat(3, 84px); + gap: 4px; + padding: 8px; + border: 1px solid var(--border); + border-radius: 14px; + background: var(--top-nav-popover-bg, var(--panel)); + box-shadow: 0 16px 32px color-mix(in srgb, #000 32%, transparent); +} + + +.app-drawer__tile:is([class],:not([class])) { + --tile-top: light-dark(var(--colour-neutral-raised), var(--colour-neutral-deep)); + --tile-foot: light-dark(var(--colour-neutral-subtle), var(--colour-neutral-lower)); + --tile-foot-lit: light-dark( + color-mix(in srgb, var(--accent) 14%, var(--colour-neutral-raised)), + var(--colour-neutral-lower) + ); + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + padding: 8px 6px; + border: 0; + border-radius: 10px; + background: transparent; + color: var(--muted); + cursor: pointer; + font: inherit; + font-size: 12px; + font-weight: 600; + text-decoration: none; +} +.app-drawer__tile:focus-visible:is([class],:not([class])) { + outline: none; +} + +.app-drawer__icon:is([class],:not([class])) { + display: grid; + place-items: center; + box-sizing: border-box; + width: 44px; + height: 44px; + padding: 7.5px; + border: 1px solid var(--border); + border-radius: 8px; + background: linear-gradient(to bottom, var(--tile-top), var(--tile-foot)); + box-shadow: 0 3px 6px -2px color-mix(in srgb, #000 15%, transparent); + color: var(--muted); + transition: border-color 120ms ease, color 120ms ease; +} +.app-drawer__icon:is([class],:not([class])) svg { + display: block; + width: 100%; + height: 100%; +} + +.app-drawer__tile:hover .app-drawer__icon:is([class],:not([class])), +.app-drawer__tile:focus-visible .app-drawer__icon:is([class],:not([class])), +.app-drawer__tile--current .app-drawer__icon:is([class],:not([class])) { + background: linear-gradient(to bottom, var(--tile-top), var(--tile-foot-lit)); + color: var(--accent); +} +.app-drawer__tile:focus-visible .app-drawer__icon:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} +.app-drawer__tile--current .app-drawer__icon:is([class],:not([class])) { + border-color: var(--accent); +} +.app-drawer__tile--current:is([class],:not([class])) { + color: var(--accent); + font-weight: 700; +} + +/* ---- FolderTree ---- */ +.folder-tree:is([class],:not([class])) { + display: flex; + flex-direction: column; + padding: 4px 6px; + gap: 1px; + min-height: 0; +} +.folder-tree__heading-row:is([class],:not([class])) { + display: flex; + align-items: center; + justify-content: space-between; + margin: 14px 10px 4px; +} +.folder-tree__heading:is([class],:not([class])) { + margin: 14px 10px 4px; + font-size: 12px; + font-weight: 600; + color: var(--muted); +} +.folder-tree__heading-row .folder-tree__heading:is([class],:not([class])) { + margin: 0; +} +.folder-tree__heading-actions:is([class],:not([class])) { + display: inline-flex; + align-items: center; + gap: 2px; + + margin: -4px -6px -4px 0; +} +.folder-tree__heading--shared:is([class],:not([class])) { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.folder-tree__manage:is([class],:not([class])) { + display: inline-flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + padding: 0; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--muted); + cursor: pointer; +} +.folder-tree__manage:hover:is([class],:not([class])), +.folder-tree__manage:focus-visible:is([class],:not([class])) { + background: var(--rowHover); + color: var(--text); + outline: none; +} + +/* ---- FolderNode ---- */ +.folder-node:is([class],:not([class])) { + display: flex; + align-items: center; + gap: 2px; + padding: 0 10px 0 0; + border-radius: 8px; +} +.folder-node:hover:is([class],:not([class])) { background: var(--rowHover); } +.folder-node.is-current:is([class],:not([class])) { + background: var(--rowActive); +} +.folder-node.is-drop-valid:is([class],:not([class])) { + background: color-mix(in srgb, var(--accent) 14%, var(--panel)); + box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 55%, transparent); +} +.folder-node.is-drop-copy:is([class],:not([class])) { + background: color-mix(in srgb, #188038 14%, var(--panel)); + box-shadow: inset 0 0 0 1px color-mix(in srgb, #188038 60%, transparent); +} +.folder-node.is-drop-invalid:is([class],:not([class])) { + background: color-mix(in srgb, #d93025 12%, var(--panel)); + box-shadow: inset 0 0 0 1px color-mix(in srgb, #d93025 55%, transparent); + cursor: not-allowed; +} +.folder-node__toggle:is([class],:not([class])) { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 18px; + height: 18px; + margin: 4px 0; + padding: 0; + background: transparent; + border: 0; + border-radius: 4px; + color: var(--muted); + cursor: pointer; + appearance: none; + -webkit-appearance: none; +} +.folder-node__toggle:hover:is([class],:not([class])) { background: color-mix(in srgb, var(--text) 10%, transparent); } +.folder-node__toggle:focus-visible:is([class],:not([class])) { box-shadow: 0 0 0 2px var(--accent); outline: 0; } +.folder-node__toggle svg:is([class],:not([class])) { + transition: transform 0.12s ease; + transform: rotate(90deg); +} +.folder-node__toggle.is-collapsed svg:is([class],:not([class])) { transform: rotate(0deg); } +.folder-node__toggle--spacer:is([class],:not([class])) { + cursor: default; + background: transparent; +} +.folder-node__button:is([class],:not([class])) { + display: flex; + align-items: center; + gap: 10px; + padding: 4px 0; + background: transparent; + border: 0; + outline: 0; + box-shadow: none; + appearance: none; + -webkit-appearance: none; + text-align: left; + cursor: pointer; + font: inherit; + color: var(--text); + flex: 1; + min-width: 0; +} +.folder-node__button:focus-visible:is([class],:not([class])) { box-shadow: 0 0 0 2px var(--accent); border-radius: 6px; } +.folder-node.is-current .folder-node__button:is([class],:not([class])) { font-weight: 500; } +.folder-node__icon-wrap:is([class],:not([class])) { + position: relative; + display: block; + flex-shrink: 0; + width: 18px; + height: 18px; +} +.folder-node__icon:is([class],:not([class])) { + display: block; + width: 18px; + height: 18px; + color: var(--muted); +} +.folder-node__icon:is([class],:not([class])) svg { + display: block; + width: 100%; + height: 100%; +} +.folder-node__icon:is([class],:not([class])) [fill="context-fill"] { + fill: color-mix(in srgb, currentColor 20%, transparent); +} +.folder-node__icon:is([class],:not([class])) [fill="context-stroke"] { + fill: currentColor; +} +.folder-node.has-tone .folder-node__icon:is([class],:not([class])), +.folder-node.has-tone.is-current .folder-node__icon:is([class],:not([class])) { + color: var(--folder-tone); +} +.folder-node.is-current:not(.has-tone) .folder-node__icon:is([class],:not([class])) { color: var(--accent); } +.folder-node__name:is([class],:not([class])) { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 13px; +} + +.folder-node__star:is([class],:not([class])) { + position: absolute; + left: -4px; + bottom: -3px; + color: var(--folder-icon-color); + fill: #facc15; + + filter: drop-shadow(0 0 1.5px var(--panel)); +} +.folder-node__count:is([class],:not([class])) { + margin-left: auto; + flex-shrink: 0; + color: var(--muted); + font-size: 11px; + font-variant-numeric: tabular-nums; + padding: 2px 8px; + border-radius: 999px; + background: color-mix(in srgb, var(--text) 8%, transparent); +} +.folder-node__index:is([class],:not([class])) { + flex-shrink: 0; + color: var(--muted); + font-size: 10px; + font-variant-numeric: tabular-nums; + padding: 1px 5px; + border-radius: 999px; + background: color-mix(in srgb, var(--accent) 10%, transparent); +} +.folder-node.is-current .folder-node__count:is([class],:not([class])) { + color: var(--accent); + font-weight: 600; + background: color-mix(in srgb, var(--accent) 18%, transparent); +} + +/* ---- TagViewNode ---- */ +.tag-view-node:is([class],:not([class])) { + --tag-color: var(--muted); + display: flex; + align-items: center; + padding: 0 10px 0 28px; + border-radius: 8px; +} +.tag-view-node:hover:is([class],:not([class])) { background: var(--rowHover); } +.tag-view-node.is-current:is([class],:not([class])) { background: var(--rowActive); } +.tag-view-node.is-drop-valid:is([class],:not([class])) { + background: color-mix(in srgb, var(--tag-color) 16%, var(--panel)); + box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--tag-color) 60%, transparent); +} +.tag-view-node__button:is([class],:not([class])) { + display: flex; + align-items: center; + gap: 10px; + flex: 1; + min-width: 0; + padding: 4px 0; + border: 0; + background: transparent; + color: var(--text); + font: inherit; + text-align: left; + cursor: pointer; + appearance: none; +} +.tag-view-node__button:focus-visible:is([class],:not([class])) { + box-shadow: 0 0 0 2px var(--accent); + border-radius: 6px; + outline: 0; +} +.tag-view-node.is-current .tag-view-node__button:is([class],:not([class])) { font-weight: 500; } +.tag-view-node__icon-wrap:is([class],:not([class])) { + display: grid; + place-items: center; + flex-shrink: 0; + width: 18px; + height: 18px; +} +.tag-view-node__dot:is([class],:not([class])) { + width: 10px; + height: 10px; + border-radius: 50%; + background: var(--tag-color); + box-shadow: 0 0 0 1px color-mix(in srgb, var(--text) 15%, transparent); +} +.tag-view-node__star:is([class],:not([class])) { + color: var(--folder-icon-color); + fill: #facc15; +} +.tag-view-node__name:is([class],:not([class])) { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 13px; +} +.tag-view-node__count:is([class],:not([class])) { + margin-left: auto; + flex-shrink: 0; + padding: 2px 8px; + border-radius: 999px; + background: color-mix(in srgb, var(--text) 8%, transparent); + color: var(--muted); + font-size: 11px; + font-variant-numeric: tabular-nums; +} +.tag-view-node.is-current .tag-view-node__count:is([class],:not([class])) { + color: var(--accent); + font-weight: 600; + background: color-mix(in srgb, var(--accent) 18%, transparent); +} + +/* ---- MessageColumns ---- */ +.msg-columns:is([class],:not([class])) { + display: flex; + align-items: stretch; + min-width: 0; + min-height: 0; + height: 100%; + overflow-x: auto; + overflow-y: hidden; +} + +.msg-columns > .msg-columns__column:is([class],:not([class])) { + flex: 0 1 var(--message-column-width, 360px); + min-width: var(--message-column-min-width, 280px); + height: 100%; + border-right: 0; +} + +.msg-columns > .msg-columns__column--last:is([class],:not([class])) { + flex-grow: 1; +} +.msg-columns__resizer:is([class],:not([class])) { + flex: 0 0 var(--message-column-resizer-width, 6px); +} + +@media (max-width: 639px) { + + .msg-columns:is([class],:not([class])) { + scroll-snap-type: x mandatory; + scrollbar-width: none; + } + .msg-columns:is([class],:not([class]))::-webkit-scrollbar { + display: none; + } + .msg-columns > .msg-columns__column:is([class],:not([class])), +.msg-columns > .msg-columns__column--last:is([class],:not([class])) { + flex: 0 0 100%; + min-width: 0; + scroll-snap-align: start; + } + .msg-columns__resizer:is([class],:not([class])) { + display: none; + } +} + +/* ---- MessageList ---- */ +.msg-list:is([class],:not([class])) { + display: grid; + + grid-template-columns: minmax(0, 1fr); + grid-template-rows: auto auto minmax(0, 1fr); + border-right: 1px solid var(--border); + background: var(--panel); + min-width: 0; + min-height: 0; + height: 100%; +} + +.msg-list.is-drop-valid:is([class],:not([class])) { + box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--accent) 55%, transparent); +} +.msg-list.is-drop-copy:is([class],:not([class])) { + box-shadow: inset 0 0 0 2px color-mix(in srgb, #188038 60%, transparent); +} +.msg-list.is-drop-invalid:is([class],:not([class])) { + box-shadow: inset 0 0 0 2px color-mix(in srgb, #d93025 55%, transparent); +} + +.msg-list__header:is([class],:not([class])) { + min-width: 0; + flex-wrap: nowrap; +} +.msg-list__header:is([class],:not([class])) .selectable-list-header__normal-actions { + gap: 10px; +} +.msg-list__column-control:is([class],:not([class])) { + display: inline-grid; + flex: 0 0 auto; + place-items: center; + width: 32px; + height: 32px; + padding: 0; + border: 0; + border-radius: 8px; + background: transparent; + color: var(--muted); + cursor: pointer; +} +.msg-list__column-control:hover:is([class],:not([class])), +.msg-list__column-control:focus-visible:is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); +} +.msg-list__column-control:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} +.msg-list__column-control:disabled:is([class],:not([class])) { + cursor: default; + opacity: 0.45; +} +.msg-list__column-control:disabled:hover:is([class],:not([class])) { + background: transparent; + color: var(--muted); +} +.msg-list__filters:is([class],:not([class])) { + flex: 0 0 auto; + display: flex; + align-items: center; + gap: 4px; +} + +.msg-list__filters--lead:is([class],:not([class])) { + flex: 1 1 0; + min-width: 0; +} +.msg-list__filters--icons .msg-list__filter:is([class],:not([class])) { + display: inline-grid; + place-items: center; + width: 34px; + padding: 0; +} +.msg-list__filter:is([class],:not([class])) { + border: 1px solid var(--border); + background: transparent; + color: var(--muted); + border-radius: 6px; + min-height: 34px; + padding: 0 12px; + font: inherit; + font-size: 14px; + font-weight: 600; + line-height: 1; + cursor: pointer; + white-space: nowrap; + box-shadow: none; +} +.msg-list__filter:hover:where(:not(:disabled)):is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); + border-color: color-mix(in srgb, var(--border) 70%, var(--text)); +} +.msg-list__filter.is-active:is([class],:not([class])) { + background: var(--accent); + color: #fff; + border-color: color-mix(in srgb, var(--accent) 80%, #000); + box-shadow: 0 1px 2px color-mix(in srgb, #000 16%, transparent); +} +.msg-list__filter:disabled:is([class],:not([class])), +.msg-list__refresh:disabled:is([class],:not([class])) { + cursor: default; + opacity: 0.5; +} +.msg-list__refresh:is([class],:not([class])) { + background: transparent; + border: 0; + color: var(--muted); + width: 34px; + height: 34px; + display: grid; + place-items: center; + border-radius: 8px; + cursor: pointer; + flex-shrink: 0; +} +.msg-list__refresh:hover:where(:not(:disabled)):is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); +} +.msg-list__filter:focus-visible:is([class],:not([class])), +.msg-list__refresh:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} +.is-spinning:is([class],:not([class])) { + animation: msg-spin 1.2s linear infinite; +} +@keyframes msg-spin { + to { transform: rotate(360deg); } +} + +.msg-list__scroller:is([class],:not([class])) { + position: relative; + overflow-y: auto; + overflow-x: hidden; + min-height: 0; + contain: strict; + will-change: scroll-position; + outline: none; +} +.msg-list__scroller:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: -2px; +} +.msg-list__loader:is([class],:not([class])) { + position: absolute; + inset: 0; + z-index: 2; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 10px; + background: var(--panel); + color: var(--muted); + font-size: 13px; +} +.msg-list__loader p:is([class],:not([class])) { margin: 0; } +.msg-list__items:is([class],:not([class])) { + list-style: none; + margin: 0; + padding: 0; + position: relative; + width: 100%; +} +.msg-list__item--placeholder:is([class],:not([class])) { + border-bottom: 1px solid var(--border-soft); + padding: 10px 14px 10px 22px; +} +.msg-list__skeleton:is([class],:not([class])) { + display: flex; + flex-direction: column; + gap: 6px; + height: 100%; + justify-content: center; +} +.msg-list__skel-line:is([class],:not([class])) { + height: 10px; + border-radius: 4px; + background: linear-gradient( + 90deg, + color-mix(in srgb, var(--text) 6%, transparent) 0%, + color-mix(in srgb, var(--text) 12%, transparent) 50%, + color-mix(in srgb, var(--text) 6%, transparent) 100% + ); + background-size: 200% 100%; + animation: skel-shimmer 1.4s linear infinite; +} +.msg-list__skel-line--from:is([class],:not([class])) { width: 35%; } +.msg-list__skel-line--subject:is([class],:not([class])) { width: 75%; } +.msg-list__skel-line--preview:is([class],:not([class])) { width: 90%; height: 8px; } +@keyframes skel-shimmer { + to { background-position: -200% 0; } +} + +.msg-list__coverage:is([class],:not([class])) { + margin: 0; + padding: 6px 14px; + border-bottom: 1px solid var(--border-soft); + font-size: 12px; + color: var(--muted); +} +.msg-list__coverage.is-idle:is([class],:not([class])) { + height: 0; + padding: 0; + border: 0; + overflow: hidden; +} +.msg-list__placeholder:is([class],:not([class])) { + margin: 0; + padding: 32px 24px; + color: var(--muted); + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; + font-size: 13px; + text-align: center; +} +.msg-list__placeholder p:is([class],:not([class])) { margin: 0; } + +/* ---- SelectableListHeader ---- */ +.selectable-list-header:is([class],:not([class])) { + display: flex; + min-height: var(--selectable-list-header-min-height, 57px); + align-items: center; + gap: 10px; + padding: var(--selectable-list-header-padding, 11px 12px); + border-bottom: 1px solid var(--border, #e3e6ee); +} + +.selectable-list-header__select-all:is([class],:not([class])) { + display: grid; + width: 34px; + height: 34px; + flex: 0 0 34px; + place-items: center; + cursor: pointer; +} + +.selectable-list-header__select-all.is-disabled:is([class],:not([class])) { + cursor: default; + opacity: 0.72; +} + +.selectable-list-header__select-all input:is([class],:not([class])) { + width: 14px; + height: 14px; + margin: 0; + accent-color: var(--accent); + cursor: pointer; +} + +.selectable-list-header__select-all input:disabled:is([class],:not([class])) { + cursor: default; +} + +.selectable-list-header__selection-actions:is([class],:not([class])), +.selectable-list-header__normal-actions:is([class],:not([class])) { + display: flex; + min-width: 0; + flex: 1 1 auto; + align-items: center; +} + +.selectable-list-header__selection-actions:is([class],:not([class])) { + gap: 4px; + margin-inline-start: 8px; +} + +.selectable-list-header__count:is([class],:not([class])) { + flex: 0 0 auto; + color: var(--muted, #6b7388); + font-size: 11px; + font-variant-numeric: tabular-nums; + white-space: nowrap; +} + +.selectable-list-header__clear:is([class],:not([class])) { + display: inline-grid; + width: 34px; + height: 34px; + place-items: center; + padding: 0; + border: 0; + border-radius: 8px; + background: transparent; + color: var(--muted, #6b7388); + cursor: pointer; +} + +.selectable-list-header__clear:hover:is([class],:not([class])), +.selectable-list-header__clear:focus-visible:is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text, #1a1d24); +} + +.selectable-list-header__clear:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} + +/* ---- MessageBulkActions ---- */ +.msg-list__bulk-action:is([class],:not([class])) { + display: inline-grid; + place-items: center; + border: 0; + background: transparent; + color: var(--muted); + width: 34px; + height: 34px; + padding: 0; + border-radius: 8px; + cursor: pointer; + font: inherit; + flex-shrink: 0; +} +.msg-list__bulk-action:hover:where(:not(:disabled)):is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); +} +.msg-list__bulk-action:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} +.msg-list__bulk-action > svg:is([class],:not([class])) { + fill: none; + stroke: currentColor; +} +.msg-list__bulk-action--danger:hover:where(:not(:disabled)):is([class],:not([class])) { + background: var(--error-bg); + color: var(--error-fg); +} +.msg-list__bulk-action--starred:is([class],:not([class])), +.msg-list__bulk-action--starred:hover:is([class],:not([class])) { + color: var(--folder-icon-color); +} +.msg-list__bulk-action--starred > svg:is([class],:not([class])) { + fill: #facc15; +} + +.msg-list__bulk-action--whitelist:is([class],:not([class])) { + display: inline-flex; + align-items: center; + justify-content: center; + width: auto; + padding: 0 12px; + margin-inline-end: 6px; + background: var(--accent); + color: #fff; + border: 1px solid color-mix(in srgb, var(--accent) 80%, #000); + border-radius: 6px; + font-size: 14px; + font-weight: 600; + line-height: 1.25; + white-space: nowrap; + box-shadow: 0 1px 2px color-mix(in srgb, #000 16%, transparent); + transition: filter 0.12s ease, box-shadow 0.12s ease; +} +.msg-list__bulk-action--whitelist:hover:is([class],:not([class])) { + background: var(--accent); + color: #fff; + filter: brightness(1.04); + box-shadow: 0 2px 5px color-mix(in srgb, #000 18%, transparent); +} +.msg-list__bulk-action--whitelist:disabled:is([class],:not([class])), +.msg-list__bulk-action--whitelist:disabled:hover:is([class],:not([class])) { + opacity: 0.5; + filter: none; + background: var(--accent); + color: #fff; +} +.msg-list__bulk-icon--folder:is([class],:not([class])) { + width: 20px; + height: 20px; + display: block; +} +.msg-list__bulk-icon--folder:is([class],:not([class])) svg { + width: 100%; + height: 100%; + display: block; +} +.msg-list__bulk-icon--folder:is([class],:not([class])) [fill="context-fill"] { + fill: color-mix(in srgb, currentColor 20%, transparent); +} +.msg-list__bulk-icon--folder:is([class],:not([class])) [fill="context-stroke"] { + fill: currentColor; +} + +/* ---- MessageListMoreMenu ---- */ +.msg-list__more:is([class],:not([class])) { + flex: 0 0 auto; +} +.msg-list__more-trigger:is([class],:not([class])) { + display: inline-grid; + place-items: center; + width: 32px; + height: 32px; + border-radius: 8px; + color: var(--muted); +} +.msg-list__more-trigger:is([class],:not([class]))::after { + content: none; +} +.msg-list__more-trigger:hover:is([class],:not([class])), +.msg-list__more-trigger:focus-visible:is([class],:not([class])), +.msg-list__more[open] > .msg-list__more-trigger:is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); +} +.msg-list__more-trigger:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} + +.msg-list__more-menu:is([class],:not([class])) { + left: auto; + right: 0; + min-width: 200px; +} +.msg-list__more-separator:is([class],:not([class])) { + height: 1px; + margin: 4px 2px; + background: var(--border-soft); +} +.msg-list__more-heading:is([class],:not([class])) { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.msg-list__more-item:is([class],:not([class])) { + width: 100%; +} +.msg-list__more-item:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: -2px; +} +.msg-list__more-item[aria-disabled="true"]:is([class],:not([class])) { + opacity: 0.5; + cursor: default; +} +.msg-list__more-item--danger:is([class],:not([class])) { + color: #ff6b6b; +} +.msg-list__more-icon:is([class],:not([class])) { + display: grid; + place-items: center; + width: 20px; + height: 20px; + color: var(--muted); +} +.msg-list__more-item--danger .msg-list__more-icon:is([class],:not([class])) { + color: inherit; +} +.msg-list__more-icon-raw:is([class],:not([class])) { + display: block; + width: 20px; + height: 20px; +} +.msg-list__more-icon-raw:is([class],:not([class])) svg { + display: block; + width: 100%; + height: 100%; +} +.msg-list__more-icon-raw:is([class],:not([class])) [fill="context-fill"] { + fill: color-mix(in srgb, currentColor 20%, transparent); +} +.msg-list__more-icon-raw:is([class],:not([class])) [fill="context-stroke"] { + fill: currentColor; +} +.msg-list__more-label:is([class],:not([class])) { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* ---- MessageListRow ---- */ +.msg-list__items li.is-focused .msg-list__item:is([class],:not([class])) { background: var(--rowActive); } +.msg-list__items li.is-selected .msg-list__item:is([class],:not([class])) { + background: color-mix(in srgb, var(--accent) 6%, var(--panel)); +} +.msg-list__items li.is-selected.is-focused .msg-list__item:is([class],:not([class])) { + background: var(--rowActive); +} +.msg-list__items li.is-dragging .msg-list__item:is([class],:not([class])) { + opacity: 0.55; +} +.msg-list__items li.is-unread .msg-list__from:is([class],:not([class])), +.msg-list__items li.is-unread .msg-list__subject:is([class],:not([class])) { + font-weight: 600; + color: var(--text); +} + +.msg-list__item:is([class],:not([class])) { + position: relative; + display: grid; + grid-template-columns: 34px 34px minmax(0, 1fr); + align-items: center; + column-gap: 10px; + width: 100%; + height: 100%; + text-align: left; + padding: 7px 14px 7px 12px; + border: 0; + background: transparent; + cursor: pointer; + border-bottom: 1px solid var(--border-soft); + font: inherit; + color: inherit; + transition: background 0.06s ease; + + user-select: none; + -webkit-user-select: none; +} +.msg-list__item:hover:is([class],:not([class])), +.msg-list__item:focus-within:is([class],:not([class])), +.msg-list__item.has-tag-menu:is([class],:not([class])) { background: var(--rowHover); } +.msg-list__scroller:focus-visible .is-cursor .msg-list__item:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: -2px; +} +.msg-list__open:is([class],:not([class])) { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + padding: 0; + border: 0; + border-radius: 0; + background: transparent; + cursor: pointer; +} +.msg-list__state:is([class],:not([class])), +.msg-list__avatar:is([class],:not([class])), +.msg-list__content:is([class],:not([class])) { + pointer-events: none; +} +.msg-list__check:is([class],:not([class])), +.msg-list__content [data-row-tags]:is([class],:not([class])) { + pointer-events: auto; +} +.msg-list__content:is([class],:not([class])) { + min-width: 0; +} +.msg-list__open:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: -2px; +} +.msg-list__action:focus-visible:is([class],:not([class])), +.msg-list__check input:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} +.msg-list__item.has-tag-menu .msg-list__action--tag:is([class],:not([class])), +.msg-list__item:focus-within .msg-list__action--tag:is([class],:not([class])) { + visibility: visible; +} +.msg-list__item:focus-within .msg-list__check:is([class],:not([class])) { + opacity: 1; +} +.msg-list__item:focus-within .msg-list__unread-dot:is([class],:not([class])) { + opacity: 0; +} + + +.msg-list__actions:is([class],:not([class])) { + position: absolute; + inset-inline-end: 0; + top: 50%; + transform: translateY(-50%); + display: inline-flex; + align-items: center; + gap: 2px; + pointer-events: none; +} +.msg-list__action:is([class],:not([class])) { + position: relative; + display: inline-grid; + place-items: center; + width: 34px; + height: 28px; + padding: 0; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--muted); + cursor: pointer; + font: inherit; + flex-shrink: 0; + visibility: hidden; + pointer-events: auto; +} +.msg-list__action--starred:is([class],:not([class])), +.msg-list__action--tag.is-tagged:is([class],:not([class])) { + visibility: visible; +} + +.msg-list__action--tag:is([class],:not([class])) { + width: auto; + min-width: 34px; + padding: 0 6px; +} +@media (min-width: 640px) { + + .msg-list__item--hover-actions.has-tag-menu .msg-list__content:is([class],:not([class])), +.msg-list__item--hover-actions.has-tag-menu .msg-list__summary:is([class],:not([class])), +.msg-list__item--hover-actions.has-tag-menu .msg-list__actions:is([class],:not([class])), +.msg-list__item--hover-actions:focus-within .msg-list__content:is([class],:not([class])), +.msg-list__item--hover-actions:focus-within .msg-list__summary:is([class],:not([class])), +.msg-list__item--hover-actions:focus-within .msg-list__actions:is([class],:not([class])), +.msg-list__item--hover-actions:hover .msg-list__content:is([class],:not([class])), +.msg-list__item--hover-actions:hover .msg-list__summary:is([class],:not([class])), +.msg-list__item--hover-actions:hover .msg-list__actions:is([class],:not([class])) { + background: inherit; + } + .msg-list__item--hover-actions:focus-within .msg-list__action:is([class],:not([class])), +.msg-list__item--hover-actions:hover .msg-list__action:is([class],:not([class])) { + visibility: visible; + } +} +@media (max-width: 639px) { + .msg-list__actions:is([class],:not([class])) { + + inset-inline-end: 72px; + } + .msg-list__action--star:is([class],:not([class])) { + visibility: visible; + } + .msg-list__action:not(.msg-list__action--star, .msg-list__action--tag):is([class],:not([class])) { + display: none; + } +} +.msg-list__action:hover:where(:not(:disabled)):is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); +} +.msg-list__action--starred:is([class],:not([class])), +.msg-list__action--starred:hover:is([class],:not([class])) { + color: var(--folder-icon-color); +} +.msg-list__action--danger:hover:where(:not(:disabled)):is([class],:not([class])) { + background: var(--error-bg); + color: var(--error-fg); +} +.msg-list__action-icon--folder:is([class],:not([class])) { + display: block; + width: 20px; + height: 20px; +} +.msg-list__action-icon--folder:is([class],:not([class])) svg { + display: block; + width: 100%; + height: 100%; +} +.msg-list__action-icon--folder:is([class],:not([class])) [fill="context-fill"] { + fill: color-mix(in srgb, currentColor 20%, transparent); +} +.msg-list__action-icon--folder:is([class],:not([class])) [fill="context-stroke"] { + fill: currentColor; +} + +.msg-list__state:is([class],:not([class])) { + position: relative; + display: grid; + place-items: center; + width: 34px; + height: 34px; +} +.msg-list__check:is([class],:not([class])) { + position: absolute; + inset: 0; + display: grid; + place-items: center; + border-radius: 6px; + cursor: pointer; + opacity: 0; + transition: opacity 0.08s ease; +} +.msg-list__check input:is([class],:not([class])) { + width: 14px; + height: 14px; + margin: 0; + cursor: pointer; + accent-color: var(--accent); +} + +.msg-list__unread-dot:is([class],:not([class])) { + display: block; + width: 7px; + height: 7px; + border-radius: 50%; + background: var(--accent); + transition: opacity 0.08s ease; + + pointer-events: none; +} +.msg-list__item:hover .msg-list__check:is([class],:not([class])), +.msg-list__items li.is-selected .msg-list__check:is([class],:not([class])) { + opacity: 1; +} +.msg-list__item:hover .msg-list__unread-dot:is([class],:not([class])), +.msg-list__items li.is-selected .msg-list__unread-dot:is([class],:not([class])) { + opacity: 0; +} + +.msg-list__items li.is-unselectable .msg-list__item:hover .msg-list__unread-dot:is([class],:not([class])) { + opacity: 1; +} +.msg-list__avatar:is([class],:not([class])) { + position: relative; + display: grid; + place-items: center; + width: 34px; + height: 34px; + border-radius: 999px; + overflow: hidden; + color: #fff; + font-size: 11px; + font-weight: 700; + letter-spacing: 0.02em; + box-shadow: inset 0 0 0 1px color-mix(in srgb, #fff 22%, transparent); +} +.msg-list__avatar-image:is([class],:not([class])) { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + object-fit: cover; +} + +.msg-list__summary:is([class],:not([class])) { + display: grid; + grid-template-columns: clamp(86px, 28%, 200px) minmax(0, 1fr) auto auto; + grid-template-areas: "from subject icons date"; + align-items: baseline; + column-gap: 8px; +} + +.msg-list__item--hover-actions .msg-list__summary:is([class],:not([class])) { + position: relative; + grid-template-columns: clamp(86px, 28%, 200px) minmax(0, 1fr) auto 56px 34px 64px; + grid-template-areas: "from subject icons tag star date"; +} +.msg-list__item--hover-actions .msg-list__date:is([class],:not([class])) { + text-align: end; +} +.msg-list__from:is([class],:not([class])) { + grid-area: from; + min-width: 0; + font-size: 13px; + color: var(--text); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.msg-list__date:is([class],:not([class])) { + grid-area: date; + font-size: 11px; + color: var(--muted); + font-variant-numeric: tabular-nums; + white-space: nowrap; +} +.msg-list__subject:is([class],:not([class])) { + grid-area: subject; + min-width: 0; + font-size: 13px; + color: var(--text); + text-align: left; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.msg-list__icons:is([class],:not([class])) { + grid-area: icons; + display: inline-flex; + align-items: center; + gap: 4px; + color: var(--muted); + min-width: 0; +} + +.msg-list__star:is([class],:not([class])) { + color: var(--folder-icon-color); + fill: #facc15; +} +.msg-list__preview:is([class],:not([class])) { + margin: 4px 0 0; + font-size: 12px; + color: var(--muted); + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + line-height: 1.35; +} + +.msg-list--card .msg-list__item:is([class],:not([class])) { + grid-template-columns: 24px 34px minmax(0, 1fr); + align-items: start; + column-gap: 9px; + padding: 10px 12px; +} +.msg-list--card .msg-list__state:is([class],:not([class])) { + width: 24px; +} +.msg-list--card .msg-list__summary:is([class],:not([class])) { + grid-template-columns: minmax(0, 1fr) auto auto; + grid-template-areas: + "from icons date" + "subject subject subject"; + row-gap: 2px; +} + +.msg-list--card .msg-list__item--hover-actions .msg-list__summary:is([class],:not([class])) { + grid-template-columns: minmax(0, 1fr) auto 56px 34px 64px; + grid-template-areas: + "from icons tag star date" + "subject subject subject subject subject"; +} +.msg-list--card .msg-list__actions:is([class],:not([class])) { + top: 9px; +} +.msg-list--card .msg-list__action:focus-visible:is([class],:not([class])) { + outline: none; +} +.msg-list--card .msg-list__action:focus-visible:is([class],:not([class]))::after { + content: ''; + position: absolute; + inset: 4px 0; + border: 2px solid var(--accent); + border-radius: 4px; + pointer-events: none; +} +.msg-list--card .msg-list__from:is([class],:not([class])), +.msg-list--card .msg-list__subject:is([class],:not([class])) { + font-size: 13px; +} +.msg-list--card .msg-list__subject:is([class],:not([class])) { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + white-space: normal; + overflow-wrap: anywhere; + line-height: 1.3; +} +.msg-list--card .msg-list__preview:is([class],:not([class])) { + margin-top: 3px; + -webkit-line-clamp: 1; +} + +@media (max-width: 639px) { + .msg-list__check:is([class],:not([class])) { + opacity: 1; + } + .msg-list__unread-dot:is([class],:not([class])) { + opacity: 0; + } +} + +/* ---- MessageTagStack ---- */ +.tag-stack:is([class],:not([class])) { + --tag-stack-base: light-dark(white, black); + display: inline-flex; + align-items: center; + gap: 3px; + line-height: 1; +} +html.dark .tag-stack { + --tag-stack-base: black; +} +html.light .tag-stack { + --tag-stack-base: white; +} +.tag-stack__icon:is([class],:not([class])) { + position: relative; + flex: none; + display: block; +} + +.tag-stack__icon + .tag-stack__icon:is([class],:not([class])) { + margin-inline-start: -14px; +} +.tag-stack__body:is([class],:not([class])) { + fill: color-mix(in srgb, var(--tag-stack-base) 50%, var(--tag-color, currentColor)); +} +.tag-stack__icon--empty .tag-stack__body:is([class],:not([class])) { + fill: none; +} +.tag-stack__outline:is([class],:not([class])) { + fill: var(--tag-color, currentColor); +} +.tag-stack__more:is([class],:not([class])) { + font-size: 11px; + font-weight: 700; + color: var(--text); +} + +/* ---- MessageTagChip ---- */ +.tag-chip:is([class],:not([class])) { + --tag-color: var(--muted, #6b7388); + display: inline-flex; + align-items: center; + max-width: 100%; + min-width: 0; + height: 18px; + border-radius: 999px; + border: 1px solid color-mix(in srgb, var(--tag-color) 45%, transparent); + background: color-mix(in srgb, var(--tag-color) 14%, transparent); + color: var(--text); + font-size: 11px; + line-height: 1; + white-space: nowrap; + vertical-align: middle; +} +.tag-chip--undefined:is([class],:not([class])) { + border-style: dashed; +} +.tag-chip__body:is([class],:not([class])) { + display: inline-flex; + align-items: center; + gap: 5px; + min-width: 0; + height: 100%; + padding: 0 7px 0 6px; + border: 0; + border-radius: inherit; + background: transparent; + color: inherit; + font: inherit; +} +.tag-chip__dot:is([class],:not([class])) { + flex: 0 0 auto; + width: 7px; + height: 7px; + border-radius: 50%; + background: var(--tag-color); +} +.tag-chip__name:is([class],:not([class])) { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; +} +.tag-chip--removable .tag-chip__body:is([class],:not([class])) { + padding-inline-end: 3px; +} +.tag-chip__remove:is([class],:not([class])) { + display: inline-grid; + place-items: center; + width: 16px; + height: 16px; + margin-inline-end: 1px; + padding: 0; + border: 0; + border-radius: 50%; + background: transparent; + color: var(--muted); + cursor: pointer; +} +.tag-chip__remove:hover:is([class],:not([class])) { + background: color-mix(in srgb, var(--text) 12%, transparent); + color: var(--text); +} +.tag-chip__remove:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 0; +} + +/* ---- TagPickerPanel ---- */ +.tag-picker:is([class],:not([class])) { + display: grid; + gap: 2px; + min-width: 220px; + max-height: inherit; + overflow-y: auto; +} +.tag-picker__item:is([class],:not([class])) { + --tag-color: var(--muted); + width: 100%; + grid-template-columns: 20px 10px 1fr auto; + column-gap: 8px; +} +.tag-picker__item:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: -2px; +} +.tag-picker__item[aria-checked='true']:is([class],:not([class])) { + font-weight: 500; +} +.tag-picker__check:is([class],:not([class])) { + display: grid; + place-items: center; + width: 20px; + height: 20px; + color: var(--accent); +} +.tag-picker__manage .tag-picker__check:is([class],:not([class])) { + color: var(--muted); +} +.tag-picker__manage:is([class],:not([class])) { + grid-template-columns: 20px 1fr; +} +.tag-picker__clear:is([class],:not([class])) { + grid-template-columns: 20px 1fr auto; +} +.tag-picker__clear .tag-picker__check:is([class],:not([class])) { + color: var(--muted); +} +.tag-picker__dot:is([class],:not([class])) { + width: 10px; + height: 10px; + border-radius: 50%; + background: var(--tag-color); +} +.tag-picker__item--undefined .tag-picker__dot:is([class],:not([class])) { + background: transparent; + border: 1.5px dashed var(--muted); +} +.tag-picker__name:is([class],:not([class])) { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tag-picker__digit:is([class],:not([class])) { + display: inline-grid; + place-items: center; + min-width: 20px; + height: 20px; + padding: 0 5px; + box-sizing: border-box; + border: 1px solid var(--border); + border-radius: 4px; + background: color-mix(in srgb, var(--text) 6%, transparent); + font: inherit; + font-size: 12px; + font-weight: 600; + font-variant-numeric: tabular-nums; + line-height: 1; + color: var(--text); +} +.tag-picker__separator:is([class],:not([class])) { + height: 1px; + margin: 2px 2px; + background: var(--border-soft); +} +.tag-picker__heading:is([class],:not([class])) { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tag-picker__empty:is([class],:not([class])) { + margin: 0; + padding: 8px; + font-size: 12px; + color: var(--muted); +} + +/* ---- TagPickerDropdown ---- */ +.tag-picker-dropdown:is([class],:not([class])) { + flex: 0 0 auto; +} +.tag-picker-dropdown__trigger:is([class],:not([class]))::after { + content: none; +} + +.tag-picker-dropdown__trigger:is([class],:not([class])) { + display: inline-grid; + place-items: center; + width: 34px; + height: 34px; + border-radius: 8px; + color: var(--muted); +} +.tag-picker-dropdown:not(.app-dropdown--disabled) > .tag-picker-dropdown__trigger:hover:is([class],:not([class])), +.tag-picker-dropdown[open] > .tag-picker-dropdown__trigger:is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); +} +.tag-picker-dropdown__trigger:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} + +.tag-picker-dropdown__menu:is([class],:not([class])) { + display: flex; + flex-direction: column; + min-width: 240px; + max-height: calc(100vh - 140px); + overflow: hidden; +} +.tag-picker-dropdown__menu >:is([class],:not([class])) .tag-picker { + min-height: 0; +} +.tag-picker-dropdown__menu--end:is([class],:not([class])) { + left: auto; + right: 0; +} + +/* ---- TagPickerPopover ---- */ +.tag-picker-popover:is([class],:not([class])) { + z-index: 40; + display: flex; + flex-direction: column; + overflow: hidden; +} +.tag-picker-popover >:is([class],:not([class])) .tag-picker { + min-height: 0; +} + +/* ---- MessageView ---- */ +.message-view:is([class],:not([class])) { + + background: var(--panel); + display: grid; + grid-template-rows: 1fr; + min-width: 0; + min-height: 0; + height: 100%; +} +.message-view__article:is([class],:not([class])) { + display: flex; + flex-direction: column; + min-width: 0; + min-height: 0; + width: 100%; + overflow: hidden; + --message-content-inset: 20px; + --message-content-trailing-inset: 16px; + --message-html-edge-inset: 8px; + --message-toolbar-edge-inset: 12px; + --message-header-label-width: 56px; +} +.message-view__empty:is([class],:not([class])) { + display: grid; + flex: 1 1 auto; + min-height: 0; + place-items: center; + height: 100%; + color: var(--muted); +} +.message-view__header:is([class],:not([class])) { + display: flex; + flex-wrap: wrap; + flex: 0 0 auto; + gap: 6px; + align-items: center; + justify-content: flex-start; + min-width: 0; + min-height: 57px; + padding: 11px var(--message-toolbar-edge-inset); + overflow: hidden; + border-bottom: 1px solid var(--border); + container-type: inline-size; +} + +@container (max-width: 279px) { + .message-view__header .message-view__action:is([class],:not([class])) { + width: 28px; + flex-basis: 28px; + margin-left: -4px; + margin-right: -4px; + } +} +.message-view__details:is([class],:not([class])) { + flex: 0 0 auto; + min-width: 0; + padding: 12px var(--message-content-trailing-inset) 12px var(--message-content-inset); + border-bottom: 1px solid var(--border-soft); + background: color-mix(in srgb, var(--panel) 92%, var(--panel2)); +} +.message-view__details-toggle:is([class],:not([class])) { + position: absolute; + top: 4px; + right: var(--message-content-trailing-inset); +} +.message-view__details-toggle[aria-expanded="true"]:is([class],:not([class])) svg { + transform: rotate(180deg); +} + +.message-view__scheduled:is([class],:not([class])) { + flex: 0 0 auto; + display: flex; + align-items: center; + gap: 10px; + min-width: 0; + padding: 10px var(--message-content-trailing-inset) 10px var(--message-content-inset); + border-bottom: 1px solid var(--border-soft); + background: color-mix(in srgb, var(--accent) 12%, var(--panel)); + color: var(--text); + font-size: 13px; +} +.message-view__scheduled-text:is([class],:not([class])) { + min-width: 0; + flex: 1 1 auto; +} +.message-view__scheduled-cancel:is([class],:not([class])) { + flex: 0 0 auto; + padding: 5px 12px; + border: 1px solid color-mix(in srgb, var(--accent) 55%, var(--border)); + border-radius: 6px; + background: var(--panel); + color: var(--text); + font-size: 13px; + font-weight: 600; + white-space: nowrap; + cursor: pointer; + transition: background 0.12s ease; +} +.message-view__scheduled-cancel:hover:is([class],:not([class])) { + background: var(--rowHover); +} +.message-view__scheduled-cancel:disabled:is([class],:not([class])) { + opacity: 0.5; + cursor: default; +} +.message-view__metadata:is([class],:not([class])) { + display: grid; + grid-template-columns: var(--message-header-label-width) minmax(0, 1fr); + min-width: 0; + column-gap: 12px; + row-gap: 7px; + margin: 0; + font-size: 13px; +} +.message-view__metadata-row:is([class],:not([class])) { + display: contents; +} +.message-view__metadata dt:is([class],:not([class])) { + color: var(--muted); + font-weight: 600; + text-align: left; +} +.message-view__metadata dd:is([class],:not([class])) { + min-width: 0; + margin: 0; + color: var(--text); + overflow-wrap: anywhere; + white-space: normal; +} +.message-view__title h2:is([class],:not([class])) { + margin: 0; + font-size: 14px; + font-weight: 600; + overflow-wrap: anywhere; + white-space: normal; +} +.message-view__date:is([class],:not([class])) { font-variant-numeric: tabular-nums; } +.message-view__tags:is([class],:not([class])) { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 4px 6px; +} + +.message-view__header .message-view__action--tags:is([class],:not([class])) { + width: auto; + min-width: 34px; + flex: 0 0 auto; + padding: 0 6px; +} + +.message-view__action--whitelist:is([class],:not([class])) { + display: inline-flex; + align-items: center; + justify-content: center; + width: auto; + padding: 0 12px; + margin-inline-end: 10px; + background: var(--accent); + color: #fff; + border: 1px solid color-mix(in srgb, var(--accent) 80%, #000); + border-radius: 6px; + font-size: 14px; + font-weight: 600; + line-height: 1.25; + white-space: nowrap; + box-shadow: 0 1px 2px color-mix(in srgb, #000 16%, transparent); + transition: filter 0.12s ease, box-shadow 0.12s ease; +} +.message-view__action--whitelist:hover:is([class],:not([class])) { + background: var(--accent); + color: #fff; + filter: brightness(1.04); + box-shadow: 0 2px 5px color-mix(in srgb, #000 18%, transparent); +} +.message-view__action--whitelist:disabled:is([class],:not([class])), +.message-view__action--whitelist:disabled:hover:is([class],:not([class])) { + opacity: 0.5; + filter: none; + background: var(--accent); + color: #fff; +} +.message-view__action--back:is([class],:not([class])) { margin-right: 12px; } + +.message-view__view-actions:is([class],:not([class])) { + display: flex; + gap: 6px; + margin-left: auto; +} +.message-view__action--view-mode[aria-pressed="true"]:is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); + box-shadow: inset 0 0 0 1px var(--control-hover-border); +} +.message-view__toolbar-icon:is([class],:not([class])) { + width: 18px; + height: 18px; + display: block; + fill: none; + stroke: currentColor; + shape-rendering: geometricPrecision; +} +.message-view__toolbar-icon--shape:is([class],:not([class])) { + width: 20px; + height: 20px; + fill: currentColor; + stroke: none; +} +.message-view__toolbar-icon--shape:is([class],:not([class])) svg { + width: 100%; + height: 100%; + display: block; +} +.message-view__toolbar-icon--shape:is([class],:not([class])) [fill="context-fill"] { + fill: transparent; +} +.message-view__toolbar-icon--shape:is([class],:not([class])) [fill="context-stroke"] { + fill: currentColor; +} +.message-view__toolbar-icon--folder:is([class],:not([class])) { + width: 20px; + height: 20px; + fill: none; + stroke: none; +} +.message-view__toolbar-icon--folder:is([class],:not([class])) svg { + width: 100%; + height: 100%; + display: block; +} +.message-view__toolbar-icon--folder:is([class],:not([class])) [fill="context-fill"] { + fill: color-mix(in srgb, currentColor 20%, transparent); +} +.message-view__toolbar-icon--folder:is([class],:not([class])) [fill="context-stroke"] { + fill: currentColor; +} + +.message-view__body:is([class],:not([class])) { + + padding: 18px 0 0; + flex: 0 1 auto; + overflow-y: auto; + overflow-x: hidden; + min-width: 0; + min-height: 0; +} +.message-view__html-shell:is([class],:not([class])) { + margin-left: var(--message-html-edge-inset); + margin-right: var(--message-html-edge-inset); +} +.message-view__html-frame:is([class],:not([class])) { + display: block; + width: 100%; + border: 0; + + min-height: 120px; + background: var(--panel); +} +.message-view__text:is([class],:not([class])) { + margin: 0; + padding: 0 22px 18px var(--message-content-inset); + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 13px; + line-height: 1.55; + + white-space: pre-wrap; + overflow-wrap: anywhere; + color: var(--text); +} +.message-view__text:is([class],:not([class])) a { + color: var(--accent); +} + +.message-view__text:is([class],:not([class])) blockquote.pt-quote { + margin: 1ex 0; + padding: 0.4ex 1ex; + border-inline-start: 2px solid rgb(114, 159, 207); +} +.message-view__text:is([class],:not([class])) blockquote.pt-quote--l2 { + border-inline-start-color: rgb(173, 127, 168); +} +.message-view__text:is([class],:not([class])) blockquote.pt-quote--l3 { + border-inline-start-color: rgb(138, 226, 52); +} +.message-view__text:is([class],:not([class])) blockquote.pt-quote--l4 { + border-inline-start-color: rgb(252, 175, 62); +} +.message-view__text:is([class],:not([class])) blockquote.pt-quote--l5 { + border-inline-start-color: rgb(233, 185, 110); +} +.message-view__placeholder:is([class],:not([class])) { margin: 0; padding: 0 22px 18px; color: var(--muted); } + +@media (max-width: 639px) { + .message-view__article:is([class],:not([class])) { + --message-content-inset: 5px; + --message-content-trailing-inset: 5px; + --message-html-edge-inset: 5px; + --message-toolbar-edge-inset: 5px; + --message-body-min-height: min(48px, calc(var(--message-view-height, var(--app-viewport-height, 100vh)) * 0.15)); + } + .message-view__details:is([class],:not([class])) { + --message-details-height: calc( + var(--message-view-height, var(--app-viewport-height, 100vh)) + - var(--message-toolbar-height, 0px) - var(--message-banner-height, 0px) + - var(--message-attachment-bar-height, 0px) - var(--message-body-min-height) + ); + position: relative; + display: flex; + flex: 0 0 auto; + min-height: 42px; + max-height: max(42px, var(--message-details-height)); + padding-block: 6px; + padding-right: calc(var(--message-content-trailing-inset) + 38px); + } + .message-view__details--expanded:is([class],:not([class])) { + max-height: max(42px, min( + calc(var(--message-view-height, var(--app-viewport-height, 100vh)) * 0.25), + var(--message-details-height) + )); + } + .message-view__metadata:is([class],:not([class])) { + flex: 1 1 auto; + min-height: 0; + overflow-y: auto; + } + .message-view__metadata:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: -2px; + } + .message-view__body:is([class],:not([class])) { + min-height: var(--message-body-min-height); + } +} + +/* ---- MessageAttachmentBar ---- */ +.message-attachment-bar:is([class],:not([class])) { + --attachment-list-padding: 8px; + display: flex; + flex: 0 0 auto; + flex-direction: column; + min-width: 0; + max-height: max( + calc(var(--message-view-height, var(--app-viewport-height)) * 0.2), + calc(var(--attachment-heading-height) + var(--attachment-first-row-height) + var(--attachment-list-padding) + 1px) + ); + overflow: hidden; + border-top: 1px solid var(--border-soft); + background: color-mix(in srgb, var(--panel) 96%, var(--panel2)); + container-name: message-attachments; + container-type: inline-size; +} + +.message-attachment-bar:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: -2px; +} + +.message-attachment-bar__heading:is([class],:not([class])) { + display: flex; + flex: 0 0 auto; + align-items: center; + gap: 4px; + padding-right: var(--message-content-trailing-inset); +} + +.message-attachment-bar h3:is([class],:not([class])) { + flex: 1 1 auto; + min-width: 0; + margin: 0; + padding: 9px 0 5px var(--message-content-inset); + color: var(--muted); + font-size: 12px; + font-weight: 600; +} + +.message-attachment-bar__toggle:is([class],:not([class])) { + display: inline-flex; + height: 24px; + flex: 0 0 auto; + align-items: center; + gap: 4px; + padding: 0 4px; + border: 0; + border-radius: 4px; + background: transparent; + color: var(--muted); + cursor: pointer; + font: inherit; + font-size: 12px; +} + +.message-attachment-bar__toggle:hover:is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); +} + +.message-attachment-bar__toggle:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 1px; +} + +.message-attachment-bar__list:is([class],:not([class])) { + flex: 0 1 auto; + min-height: 0; + margin: 0; + padding: 0 8px var(--attachment-list-padding); + overflow-y: auto; + list-style: none; +} + +.message-attachment-bar--collapsed .message-attachment-bar__list:is([class],:not([class])) { + max-height: calc(var(--attachment-first-row-height) + var(--attachment-list-padding)); + overflow-y: hidden; +} + +.message-attachment-row--collapsed:is([class],:not([class])) { + + visibility: hidden; +} + +.message-attachment-row:is([class],:not([class])) { + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + gap: 8px; + align-items: center; + min-width: 0; + padding: 5px 8px; + border-radius: 6px; +} + +.message-attachment-row:hover:is([class],:not([class])) { + background: var(--rowHover); +} + +.message-attachment-row__icon:is([class],:not([class])) { + color: var(--muted); +} + +.message-attachment-row__pdf-link:is([class],:not([class])) { + display: inline-flex; + height: 30px; + flex: 0 0 auto; + align-items: center; + gap: 4px; + padding: 0 6px; + border-radius: 8px; + color: var(--muted); + font-size: 12px; + text-decoration: none; + white-space: nowrap; +} + +.message-attachment-row__pdf-link:hover:is([class],:not([class])) { + background: var(--control-hover-bg); + color: var(--text); +} + +.message-attachment-row__pdf-link:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} + +.message-attachment-row__pdf-link--disabled:is([class],:not([class])), +.message-attachment-row__pdf-link--disabled:hover:is([class],:not([class])) { + background: transparent; + color: var(--muted); + opacity: 0.35; + pointer-events: none; +} + +.message-attachment-row__description:is([class],:not([class])) { + display: flex; + flex-wrap: wrap; + gap: 2px 8px; + min-width: 0; +} + +.message-attachment-row__name:is([class],:not([class])) { + min-width: 0; + overflow: hidden; + color: var(--text); + font-size: 13px; + font-weight: 500; + text-overflow: ellipsis; + white-space: nowrap; +} + +.message-attachment-row__metadata:is([class],:not([class])), +.message-attachment-row__status:is([class],:not([class])), +.message-attachment-row__error:is([class],:not([class])) { + color: var(--muted); + font-size: 12px; +} + +.message-attachment-row__status:is([class],:not([class])), +.message-attachment-row__error:is([class],:not([class])) { + flex-basis: 100%; +} + +.message-attachment-row__error:is([class],:not([class])) { + color: #d95757; +} + +.message-attachment-row__actions:is([class],:not([class])) { + display: flex; + align-items: center; +} + +.message-attachment-row__actions:is([class],:not([class])) .app-icon-button { + width: 30px; + height: 30px; + flex-basis: 30px; +} + +.message-attachment-row__actions:is([class],:not([class])) .message-attachment-row__preview-action { + display: inline-flex; + width: auto; + flex-basis: auto; + align-items: center; + gap: 4px; + padding: 0 6px; + font-size: 12px; + white-space: nowrap; +} + +@container message-attachments (max-width: 419px) { + .message-attachment-row:has(.message-attachment-row__preview-action, .message-attachment-row__pdf-link):is([class],:not([class])) { + grid-template-columns: auto minmax(0, 1fr); + row-gap: 4px; + } + + .message-attachment-row:has(.message-attachment-row__preview-action, .message-attachment-row__pdf-link) > .message-attachment-row__actions:is([class],:not([class])) { + grid-column: 2; + flex-wrap: wrap; + } +} + +.message-attachment-row__spinner:is([class],:not([class])) { + animation: message-attachment-spin 0.9s linear infinite; +} + +@keyframes message-attachment-spin { + to { transform: rotate(360deg); } +} + +/* ---- ComposeManager ---- */ +.compose-dock:is([class],:not([class])) { + position: fixed; + right: 16px; + bottom: 0; + z-index: 51; + display: flex; + flex-direction: row-reverse; + align-items: flex-end; + gap: 8px; + max-width: calc(100vw - 32px); + overflow-x: auto; +} + +.compose-dock__item:is([class],:not([class])) { + display: flex; + align-items: center; + width: min(260px, calc(100vw - 32px)); + min-height: 40px; + + border: 2px solid var(--compose-dock-outline); + border-bottom: 0; + border-radius: 10px 10px 0 0; + background: var(--surface, #fff); + box-shadow: 0 -6px 22px rgba(0, 0, 0, 0.28); + --compose-dock-outline: color-mix(in srgb, var(--accent, #1373d9) 75%, var(--surface, #fff)); +} + +.compose-dock__restore:is([class],:not([class])), +.compose-dock__close:is([class],:not([class])) { + border: 0; + background: transparent; + color: inherit; + font: inherit; + cursor: pointer; +} + +.compose-dock__restore:is([class],:not([class])) { + display: flex; + flex: 1; + align-items: center; + gap: 8px; + min-width: 0; + padding: 10px 12px; + text-align: left; +} + +.compose-dock__text:is([class],:not([class])) { + display: flex; + flex: 1; + flex-direction: column; + min-width: 0; + line-height: 1.25; +} + +.compose-dock__title:is([class],:not([class])) { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.compose-dock__status:is([class],:not([class])) { + font-size: 12px; + color: var(--muted, #6b7280); +} + +.compose-dock__status--failed:is([class],:not([class])), +.compose-dock__error:is([class],:not([class])) { + color: var(--colour-ti-critical, #b3261e); +} + +.compose-dock__error:is([class],:not([class])) { + font-weight: 700; +} + +.compose-dock__close:is([class],:not([class])) { + align-self: stretch; + padding: 0 12px; + font-size: 20px; +} + +.compose-dock__restore:hover:is([class],:not([class])), +.compose-dock__close:hover:is([class],:not([class])) { + background: rgba(127, 127, 127, 0.14); +} + +.compose-dock__close:disabled:is([class],:not([class])) { + cursor: not-allowed; + opacity: 0.45; +} + +.compose-dock-flight:is([class],:not([class])) { + position: fixed; + z-index: 52; + box-sizing: border-box; + border: 2px solid color-mix(in srgb, var(--accent, #1373d9) 75%, var(--surface, #fff)); + border-radius: 10px; + background: color-mix(in srgb, var(--accent, #1373d9) 12%, transparent); + opacity: 0.9; + pointer-events: none; + transition-property: top, left, width, height, opacity; + transition-timing-function: cubic-bezier(0.2, 0.7, 0.2, 1); +} +.compose-dock-flight--landing:is([class],:not([class])) { + opacity: 0; +} + +/* ---- ComposeDialog ---- */ +.compose-dialog:is([class],:not([class])) { + position: fixed; + inset: 0; + background: rgba(13, 22, 42, 0.4); + display: grid; + grid-template-columns: minmax(0, 1fr); + place-items: center; + z-index: 50; +} +.compose-dialog__card:is([class],:not([class])) { + position: relative; + width: min(960px, 96vw); + height: min(640px, 90vh); + border: 1px solid var(--modal-border); + background: var(--modal-surface); + box-shadow: var(--modal-shadow); + border-radius: 12px; + display: flex; + flex-direction: column; + padding: 16px; + gap: 8px; +} +.compose-dialog--maximized .compose-dialog__card:is([class],:not([class])) { + box-sizing: border-box; + width: 100%; + height: 100%; + min-height: 0; + border-radius: 0; +} +.compose-dialog__card header:is([class],:not([class])) { + display: flex; + justify-content: space-between; + align-items: center; + gap: 8px; +} +.compose-dialog__body:is([class],:not([class])) { + display: contents; +} +.compose-dialog__card header h2:is([class],:not([class])) { + margin: 0; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 16px; +} +.compose-dialog__window-actions:is([class],:not([class])) { + display: flex; + align-items: center; + flex-shrink: 0; + gap: 4px; +} +.compose-dialog__window-actions .app-icon-button:is([class],:not([class])), +.compose-close-menu__trigger:is([class],:not([class])) { + width: 28px; + height: 28px; + flex: 0 0 28px; + color: inherit; +} +.compose-close-menu__trigger:is([class],:not([class])) { + display: inline-grid; + place-items: center; + padding: 0; + background: transparent; + border: 0; + border-radius: 8px; + cursor: pointer; + font: inherit; + list-style: none; +} +.compose-close-menu__trigger:hover:not([aria-disabled="true"]):is([class],:not([class])) { + background: var(--control-hover-bg); +} +.compose-close-menu__trigger:focus-visible:is([class],:not([class])) { + outline: 2px solid var(--accent); + outline-offset: 2px; +} +.compose-close-menu__trigger:is([class],:not([class]))::-webkit-details-marker { + display: none; +} +.compose-close-menu__menu:is([class],:not([class])) { + top: calc(100% + 1px); + right: 0; + left: auto; + min-width: 160px; + line-height: normal; +} +.compose-close-menu__menu .app-dropdown__item:disabled:is([class],:not([class])) { + cursor: not-allowed; + opacity: 0.55; +} +.compose-close-menu__discard:hover:not(:disabled):is([class],:not([class])), +.compose-close-menu__discard:focus-visible:is([class],:not([class])) { + color: #ff6b6b; +} +.compose-dialog__card .row:is([class],:not([class])) { + display: grid; + grid-template-columns: 70px 1fr; + gap: 8px; + align-items: center; + font-size: var(--txt-default, 0.875rem); +} +.compose-dialog__card .row label:is([class],:not([class])) { + color: var(--colour-ti-secondary, var(--text, #111827)); + font-size: inherit; +} +.compose-dialog__card .row > input:is([class],:not([class])) { + min-width: 0; + padding: 7px 10px; + border: 1px solid var(--control-border, #d6d9e2); + border-radius: 8px; + font: inherit; +} +.from-picker:is([class],:not([class])) { + min-width: 0; +} + +.from-picker__summary:is([class],:not([class])) { + display: flex; + align-items: center; + min-width: 0; + gap: 8px; + padding: 5px 10px; + border: 1px solid var(--control-border, #d6d9e2); + border-radius: 8px; + background: var(--panel, transparent); +} +.from-picker__summary:is([class],:not([class]))::after { + margin-left: auto; +} +.from-picker__summary-text:is([class],:not([class])) { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.from-picker__menu:is([class],:not([class])) { + right: 0; +} + +.from-picker__option:is([class],:not([class])) { + grid-template-columns: 24px 1fr auto; +} +.from-picker__avatar:is([class],:not([class])) { + display: grid; + place-items: center; + width: 24px; + height: 24px; + border-radius: 999px; + color: #fff; + font-size: 10px; + font-weight: 700; + flex: none; +} +.from-picker__summary .from-picker__avatar:is([class],:not([class])) { + width: 20px; + height: 20px; + font-size: 9px; +} +.from-picker__lines:is([class],:not([class])) { + display: flex; + flex-direction: column; + min-width: 0; +} +.from-picker__name:is([class],:not([class])) { + font-weight: 600; + line-height: 1.3; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.from-picker__email:is([class],:not([class])) { + font-size: 12px; + line-height: 1.3; + color: var(--muted, #6b7280); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.from-picker__email--primary:is([class],:not([class])) { + font-size: inherit; + color: inherit; + font-weight: 600; +} +.from-picker__check:is([class],:not([class])) { + flex: none; + color: var(--accent, #0060df); +} + +.compose-dialog__card .row--to:is([class],:not([class])) { + grid-template-columns: 70px 1fr auto; +} +.recipient-cc-toggles:is([class],:not([class])) { + display: flex; + gap: 4px; +} +.recipient-toggle:is([class],:not([class])) { + padding: 4px 8px; + border: 1px solid var(--control-border, #d6d9e2); + border-radius: 6px; + background: none; + color: var(--colour-ti-secondary, var(--text, #111827)); + font: inherit; + cursor: pointer; +} +.recipient-toggle:hover:is([class],:not([class])) { + color: var(--text, inherit); + border-color: var(--accent, #0060df); +} +.compose-attachments:is([class],:not([class])) { + display: grid; + max-height: 150px; + overflow-y: auto; + border: 1px solid var(--control-border, #d6d9e2); + border-radius: 8px; +} +.compose-attachment:is([class],:not([class])) { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + min-width: 0; + padding: 8px 10px; +} +.compose-attachment + .compose-attachment:is([class],:not([class])) { + border-top: 1px solid var(--border, #d6d9e2); +} +.compose-attachment__details:is([class],:not([class])) { + display: grid; + min-width: 0; + gap: 2px; +} +.compose-attachment__name:is([class],:not([class])) { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: var(--txt-default, 0.875rem); +} +.compose-attachment__meta:is([class],:not([class])), +.compose-attachment__error:is([class],:not([class])), +.compose-attachment__progress:is([class],:not([class])) { + font-size: var(--txt-small, 0.75rem); +} +.compose-attachment__meta:is([class],:not([class])) { + color: var(--colour-ti-secondary, var(--muted, #6b7280)); +} +.compose-attachment__error:is([class],:not([class])) { + color: var(--colour-ti-warning, #8a4b00); +} +.compose-attachment__progress:is([class],:not([class])) { + display: flex; + align-items: center; + gap: 8px; +} +.compose-attachment__progress progress:is([class],:not([class])) { + width: min(220px, 40vw); +} +.compose-attachment__actions:is([class],:not([class])) { + display: flex; + gap: 4px; + flex: none; +} +.compose-attachment__action:is([class],:not([class])) { + width: 32px; + height: 32px; + flex-basis: 32px; + border: 1px solid var(--control-border, #d6d9e2); + border-radius: 7px; + color: inherit; +} +.compose-attachment__action:hover:is([class],:not([class])) { + border-color: var(--accent, #0060df); +} +.compose-dialog__card footer:is([class],:not([class])) { + display: flex; + justify-content: flex-end; + align-items: center; + gap: 8px; +} +.compose-send-split:is([class],:not([class])) { + position: relative; + display: inline-flex; + align-items: stretch; + gap: 0; +} +.compose-send-split .compose-schedule-menu:is([class],:not([class])) { + position: static; +} +.compose-schedule-menu__trigger:is([class],:not([class])) { + position: relative; + z-index: 1; + display: inline-flex; + width: 34px; + height: 34px; + align-items: center; + justify-content: center; + padding: 0; + border: 0; + border-left: 1px solid color-mix(in srgb, #fff 42%, transparent); + border-radius: 0 4px 4px 0; + background: var(--colour-primary-default, var(--accent, #0060df)); + color: var(--colour-ti-on-primary, #fff); + cursor: pointer; + list-style: none; +} +.compose-schedule-menu__trigger--selected:is([class],:not([class])) { + width: auto; + min-width: 34px; + gap: 4px; + padding: 0 8px 0 10px; +} +.compose-schedule-menu__selection:is([class],:not([class])) { + max-width: 112px; + overflow: hidden; + font-size: var(--txt-small, 0.75rem); + font-weight: 600; + text-overflow: ellipsis; + white-space: nowrap; +} +.compose-schedule-menu__trigger:is([class],:not([class]))::-webkit-details-marker { + display: none; +} +.compose-schedule-menu__trigger:hover:not([aria-disabled='true']):is([class],:not([class])) { + background: var(--colour-primary-hover, #0250bb); +} +.compose-schedule-menu__trigger:active:not([aria-disabled='true']):is([class],:not([class])) { + background: var(--colour-primary-pressed, #054096); +} +.compose-schedule-menu__trigger:focus:not(:focus-visible):is([class],:not([class])) { + outline: none; +} +.compose-schedule-menu__trigger:focus-visible:is([class],:not([class])) { + z-index: 2; + outline: 2px solid var(--accent, #0060df); + outline-offset: 2px; +} +.compose-schedule-menu__trigger[aria-disabled='true']:is([class],:not([class])) { + cursor: not-allowed; + opacity: 0.55; +} +.compose-send-split .base.app-button.compose-send:is([class],:not([class])) { + border-radius: 4px 0 0 4px; +} +.compose-schedule-menu__menu:is([class],:not([class])) { + top: auto; + right: 0; + bottom: calc(100% + 6px); + left: auto; + width: min(340px, calc(100vw - 32px)); + min-width: 290px; +} +.compose-schedule-menu__item:is([class],:not([class])) { + grid-template-columns: 1fr; + gap: 1px; +} +.compose-schedule-menu__item:disabled:is([class],:not([class])) { + cursor: not-allowed; + opacity: 0.58; +} +.compose-schedule-menu__label:is([class],:not([class])) { + font-weight: 600; +} +.compose-schedule-menu__secondary:is([class],:not([class])) { + overflow: hidden; + color: var(--muted, #6b7280); + font-size: 11px; + font-weight: 400; + text-overflow: ellipsis; + white-space: nowrap; +} +.compose-schedule-menu__separator:is([class],:not([class])) { + height: 1px; + margin: 4px 6px; + background: var(--border, #d6d9e2); +} +.compose-schedule-menu__description:is([class],:not([class])) { + position: absolute; + width: 1px; + height: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + clip-path: inset(50%); + white-space: nowrap; +} +.base.app-button.compose-send:disabled:is([class],:not([class])) { + background: var(--colour-neutral-border, var(--border, #d6d9e2)); + color: var(--colour-ti-secondary, var(--muted, #6b7280)); + cursor: not-allowed; + opacity: 1; +} +.compose-error:is([class],:not([class])) { color: #b3261e; font-size: 13px; } +.compose-save-error:is([class],:not([class])) { + margin: 0; + color: var(--colour-ti-warning, #8a4b00); + font-size: var(--txt-small, 0.8125rem); +} +.compose-confirm-backdrop:is([class],:not([class])) { + position: absolute; + inset: 0; + z-index: 4; + display: grid; + place-items: center; + padding: 16px; + border-radius: inherit; + background: rgba(13, 22, 42, 0.48); +} +.compose-confirm:is([class],:not([class])) { + width: min(420px, 100%); + padding: 20px; + border: 1px solid var(--modal-border); + border-radius: 12px; + background: var(--modal-surface); + box-shadow: var(--modal-shadow); +} +.compose-confirm h3:is([class],:not([class])) { + margin: 0 0 8px; + font-size: var(--txt-large, 1rem); +} +.compose-confirm h3:focus:is([class],:not([class])) { + outline: none; +} +.compose-confirm p:is([class],:not([class])) { + margin: 0 0 20px; + color: var(--colour-ti-secondary, var(--text, #111827)); +} +.compose-confirm__actions:is([class],:not([class])) { + display: flex; + justify-content: flex-end; + gap: 8px; +} + +/* ---- RecipientInput ---- */ +.recipient-input:is([class],:not([class])) { + position: relative; + flex: 1; + min-width: 0; +} + + +.recipient-input__field:is([class],:not([class])) { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 4px; + padding: 2px 4px; + border: 1px solid var(--control-border, #cfcfcf); + border-radius: 4px; + background: var(--panel2, #fff); + cursor: text; +} + +.recipient-input__field:focus-within:is([class],:not([class])) { + border-color: var(--accent, #0060df); + outline: 2px solid color-mix(in srgb, var(--accent, #0060df) 35%, transparent); + outline-offset: -1px; +} + +.pills:is([class],:not([class])) { + display: contents; + list-style: none; + margin: 0; + padding: 0; +} + +.pill:is([class],:not([class])) { + display: inline-flex; + align-items: center; + max-width: 100%; + border-radius: 999px; + + background: color-mix(in srgb, var(--text, #111827) 9%, transparent); + font-size: 0.85rem; + line-height: 1.4; +} + +.pill__label:is([class],:not([class])), +.pill__remove:is([class],:not([class])) { + border: 0; + background: none; + padding: 1px 4px 1px 8px; + font: inherit; + color: inherit; + cursor: pointer; + border-radius: 999px; +} + +.pill__remove:is([class],:not([class])) { + padding: 1px 7px 1px 4px; + opacity: 0.6; +} + +.pill__remove:hover:is([class],:not([class])) { opacity: 1; } + +.pill__label:is([class],:not([class])) { + display: inline-flex; + align-items: center; + gap: 4px; + overflow: hidden; +} + +.pill__text:is([class],:not([class])) { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + + +.pill--invalid:is([class],:not([class])) { + background: var(--error-bg, rgba(200, 30, 30, 0.1)); + color: var(--error-fg, #a4000f); +} + +.pill--invalid .pill__text:is([class],:not([class])) { + text-decoration: underline dotted currentcolor; + text-underline-offset: 2px; +} + +.pill__warning:is([class],:not([class])) { + font-size: 0.9em; +} + +.pill__avatar:is([class],:not([class])) { + display: grid; + place-items: center; + width: 16px; + height: 16px; + border-radius: 999px; + color: #fff; + font-size: 8px; + font-weight: 700; + flex: none; +} + +.recipient-input__text:is([class],:not([class])) { + flex: 1; + min-width: 8ch; + border: 0; + padding: 3px 2px; + background: none; + font: inherit; + color: inherit; +} + +.recipient-input__text:focus:is([class],:not([class])) { outline: none; } + +.autocomplete:is([class],:not([class])) { + position: absolute; + z-index: 10; + left: 0; + right: 0; + margin: 2px 0 0; + background: var(--panel, #fff); + border: 1px solid var(--border, #cfcfcf); + border-radius: 4px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); +} + +.autocomplete__options:is([class],:not([class])) { + margin: 0; + padding: 0; + list-style: none; + max-height: 19rem; + overflow-y: auto; +} + +.autocomplete__option:is([class],:not([class])) { + display: flex; + gap: 10px; + align-items: center; + padding: 6px 10px; + cursor: pointer; +} + + +.autocomplete__option:hover:is([class],:not([class])) { + background: var(--rowHover, rgba(0, 96, 223, 0.08)); +} + +.autocomplete__option--active:is([class],:not([class])) { + background: var(--rowActive, rgba(0, 96, 223, 0.12)); +} + + +.ac-avatar:is([class],:not([class])) { + display: grid; + place-items: center; + width: 24px; + height: 24px; + border-radius: 999px; + color: #fff; + font-size: 10px; + font-weight: 700; + flex: none; +} + +.ac-lines:is([class],:not([class])) { + display: flex; + flex-direction: column; + min-width: 0; + flex: 1; +} + +.ac-name:is([class],:not([class])) { + font-weight: 600; + line-height: 1.3; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.ac-email:is([class],:not([class])) { + font-size: 12px; + line-height: 1.3; + color: var(--muted, #6b7280); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.ac-context:is([class],:not([class])) { + font-size: 11px; + line-height: 1.3; + color: var(--muted, #6b7280); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + + +.ac-email--primary:is([class],:not([class])) { + font-size: inherit; + color: inherit; + font-weight: 600; +} + + +.ac-match:is([class],:not([class])) { + color: var(--accent, #0060df); +} + +.ac-meta:is([class],:not([class])) { + font-size: 11px; + color: var(--muted, #6b7280); + flex: none; +} + +.autocomplete__browse:is([class],:not([class])) { + margin: 0; + border-top: 1px solid var(--border, #cfcfcf); +} + +.autocomplete__browse button:is([class],:not([class])) { + width: 100%; + text-align: left; + border: 0; + background: none; + padding: 6px 10px; + font: inherit; + color: var(--accent, #0060df); + cursor: pointer; +} + +.autocomplete__empty:is([class],:not([class])) { + display: flex; + align-items: center; + gap: 12px; + padding: 10px 12px; + font-size: 12px; + color: var(--muted, #6b7280); +} + +.autocomplete__empty-text:is([class],:not([class])) { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.autocomplete__keys:is([class],:not([class])) { + display: flex; + align-items: center; + gap: 14px; + padding: 5px 10px; + border-top: 1px solid var(--border, #cfcfcf); + font-size: 11px; + color: var(--muted, #6b7280); +} + +.autocomplete__count:is([class],:not([class])) { + margin-left: auto; +} + +.ac-key-hint:is([class],:not([class])) { + display: inline-flex; + align-items: center; + gap: 5px; + flex: none; +} + +.ac-key-hint kbd:is([class],:not([class])) { + font: inherit; + font-size: 10px; + line-height: 16px; + padding: 0 5px; + border: 1px solid var(--border, #cfcfcf); + border-radius: 4px; + color: var(--text, #111827); +} + +.sr-only:is([class],:not([class])) { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; + border: 0; +} + +/* ---- RichTextEditor ---- */ +.rich-text-editor:is([class],:not([class])) { + display: flex; + flex: 1; + flex-direction: column; + gap: 8px; + min-width: 0; + min-height: 0; +} +.editor-image-error:is([class],:not([class])) { + margin: 0; + color: var(--error-fg, #c93838); + font-size: 12px; +} +.editor-link-form:is([class],:not([class])) { + display: grid; + gap: 8px; + padding: 10px; + border: 1px solid var(--control-border, #d6d9e2); + border-radius: 6px; + background: var(--panel2, #f5f6f8); +} +.editor-link-form__field:is([class],:not([class])) { + display: grid; + gap: 5px; +} +.editor-link-form__field > span:is([class],:not([class])) { + color: var(--muted, #6b7388); + font-size: 11px; + font-weight: 700; + letter-spacing: 0.03em; + text-transform: uppercase; +} +.editor-link-form__field input:is([class],:not([class])) { + min-width: 0; + padding: 7px 9px; + border: 1px solid var(--control-border, #d6d9e2); + border-radius: 4px; + background: var(--panel, #fff); + color: var(--text, #1a1d24); + font: inherit; +} +.editor-link-form__field input:focus-visible:is([class],:not([class])) { + border-color: var(--accent); + outline: none; +} +.editor-link-form__error:is([class],:not([class])) { + margin: 0; + color: var(--error-fg, #c93838); + font-size: 12px; +} +.editor-link-form__actions:is([class],:not([class])) { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + gap: 8px; +} +.compose-toolbar:is([class],:not([class])) { + display: flex; + flex-wrap: nowrap; + align-items: center; + gap: 4px; + padding: 6px; + border: 1px solid var(--control-border, #d6d9e2); + border-radius: 8px; + background: rgba(0, 0, 0, 0.04); + overflow: visible; +} +.toolbar-group:is([class],:not([class])) { + flex: 0 0 auto; + display: inline-flex; + align-items: center; + gap: 2px; + padding-right: 6px; + margin-right: 4px; + border-right: 1px solid var(--border, #d6d9e2); +} +.toolbar-group:last-child:is([class],:not([class])) { + padding-right: 0; + margin-right: 0; + border-right: 0; +} +.toolbar-button:is([class],:not([class])), +.toolbar-color:is([class],:not([class])) { + height: 28px; + border: 0; + border-radius: 6px; + background: transparent; + color: inherit; + font: inherit; +} +.toolbar-button:is([class],:not([class])) { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 28px; + padding: 0 7px; + cursor: pointer; + font-size: 12px; +} +.toolbar-button svg:is([class],:not([class])), +.toolbar-color svg:is([class],:not([class])) { + pointer-events: none; +} +.toolbar-button:hover:is([class],:not([class])), +.toolbar-button.active:is([class],:not([class])), +.toolbar-color:hover:is([class],:not([class])) { + background: rgba(127, 127, 127, 0.18); +} +.toolbar-button:disabled:is([class],:not([class])) { + cursor: not-allowed; + opacity: 0.45; +} +.toolbar-color:is([class],:not([class])) { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 28px; + padding: 0 5px; + cursor: pointer; + font-size: 12px; +} +.toolbar-color input:is([class],:not([class])) { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + opacity: 0; + cursor: pointer; +} +.toolbar-more:is([class],:not([class])) { + position: relative; + flex: 0 0 auto; +} + +.toolbar-dropdown:is([class],:not([class])) { + position: relative; + flex: 0 0 auto; +} + +.toolbar-dropdown .toolbar-more__menu:is([class],:not([class])) { + left: 0; + right: auto; + min-width: 130px; +} +.toolbar-dropdown[open] .toolbar-more__summary:is([class],:not([class])) { + background: rgba(127, 127, 127, 0.18); +} +.toolbar-more__summary:is([class],:not([class]))::after { + margin-left: 5px; +} +.toolbar-more[open] .toolbar-more__summary:is([class],:not([class])) { + background: rgba(127, 127, 127, 0.18); +} +.toolbar-more__menu:is([class],:not([class])) { + left: auto; + right: 0; +} +.toolbar-menu-section:is([class],:not([class])) { + display: grid; + gap: 2px; + padding: 4px 0; +} +.toolbar-menu-section + .toolbar-menu-section:is([class],:not([class])) { + border-top: 1px solid var(--border, #d6d9e2); +} +.toolbar-menu-button:is([class],:not([class])) { + font-size: 12px; +} +.toolbar-menu-button:disabled:is([class],:not([class])) { + cursor: not-allowed; + opacity: 0.45; +} +.toolbar-menu-field:is([class],:not([class])) { + display: grid; + grid-template-columns: 72px 1fr; + align-items: center; + gap: 8px; + min-height: 32px; + padding: 4px 8px; + font-size: 12px; +} +.toolbar-menu-field select:is([class],:not([class])), +.toolbar-menu-field input:is([class],:not([class])) { + min-width: 0; +} +.editor-wrap:is([class],:not([class])) { + flex: 1; + border: 1px solid var(--control-border, #d6d9e2); + border-radius: 8px; + padding: 8px; + overflow-y: auto; + min-height: 0; +} +.editor:is([class],:not([class])) { + + position: relative; + min-height: 100%; + outline: none; + font-size: 14px; +} +.editor:is([class],:not([class])) img { + max-width: 100%; + height: auto; +} +.editor:is([class],:not([class])) blockquote { + margin: 1ex 0; + padding: 0.4ex 1ex; + border-inline-start: 2px solid rgb(114, 159, 207); +} +.editor:is([class],:not([class])) [data-stormbox-quoted-content] { + display: contents; +} +.editor:is([class],:not([class])) [data-stormbox-origin] { + display: block; +} +.icon-mirrored:is([class],:not([class])) { + transform: scaleX(-1); +} + +/* ---- StoreErrorToast ---- */ +.store-error-toast:is([class],:not([class])) { + position: fixed; + z-index: 80; + inset-inline: 0; + bottom: 16px; + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + pointer-events: none; +} + +.store-error-toast__item:is([class],:not([class])) { + position: relative; + overflow: hidden; + pointer-events: auto; + display: inline-flex; + align-items: center; + gap: 12px; + max-width: min(560px, calc(100vw - 32px)); + padding: 10px 12px 10px 14px; + border: 1px solid transparent; + border-radius: 10px; + background: var(--toast-bg, #c93838); + color: #fff; + box-shadow: 0 12px 28px color-mix(in srgb, #000 35%, transparent); + font-size: 13px; + line-height: 1.4; + transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease; +} + +.store-error-toast__item--success:is([class],:not([class])) { + background: var(--toast-success-bg, #2e9e63); +} + + +.store-error-toast__item--progress:is([class],:not([class])) { + background: var(--panel, #fff); + color: var(--text, #111827); + border-color: var(--border, #d9d9de); +} + + +.store-error-toast__message:is([class],:not([class])) { + flex: 1; + min-width: 0; + white-space: pre-wrap; + overflow-wrap: anywhere; +} + +.store-error-toast__action:is([class],:not([class])) { + flex: 0 0 auto; + padding: 2px 10px; + border: 1px solid rgba(255, 255, 255, 0.55); + border-radius: 6px; + background: rgba(255, 255, 255, 0.12); + color: inherit; + font: inherit; + font-weight: 600; + line-height: 1.4; + cursor: pointer; +} +.store-error-toast__action:hover:is([class],:not([class])), +.store-error-toast__action:focus-visible:is([class],:not([class])) { + background: rgba(255, 255, 255, 0.24); + outline: none; +} + +.store-error-toast__dismiss:is([class],:not([class])) { + display: inline-flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + padding: 0; + border: 0; + border-radius: 999px; + background: transparent; + color: inherit; + cursor: pointer; +} +.store-error-toast__dismiss:hover:is([class],:not([class])), +.store-error-toast__dismiss:focus-visible:is([class],:not([class])) { + background: rgba(255, 255, 255, 0.15); + outline: none; +} + +.store-error-toast__progress:is([class],:not([class])) { + position: absolute; + inset: 0 0 auto 0; + height: 2px; + background: color-mix(in srgb, var(--accent, #1373d9) 25%, transparent); +} +.store-error-toast__progress:is([class],:not([class]))::after { + content: ''; + position: absolute; + inset: 0 auto 0 0; + width: 38%; + background: var(--accent, #1373d9); + animation: store-error-toast-sweep 1.4s ease-in-out infinite; +} + +@keyframes store-error-toast-sweep { + from { transform: translateX(-100%); } + to { transform: translateX(270%); } +} + +@media (prefers-reduced-motion: reduce) { + .store-error-toast__item:is([class],:not([class])) { + transition: none; + } + .store-error-toast__progress:is([class],:not([class]))::after { + width: 100%; + animation: none; + } +} diff --git a/suites-experimental/stormbox-react/src/styles/local.css b/suites-experimental/stormbox-react/src/styles/local.css new file mode 100644 index 000000000..0f281d314 --- /dev/null +++ b/suites-experimental/stormbox-react/src/styles/local.css @@ -0,0 +1,15 @@ +/* Rules for surfaces this clone adds; everything else is ported. */ +.contacts--placeholder { + display: grid; + place-items: center; + color: var(--muted); + background: var(--panel); +} + +/* ?animations=off (src/motion.ts). */ +html.no-motion *, +html.no-motion *::before, +html.no-motion *::after { + transition: none !important; + animation: none !important; +} diff --git a/suites-experimental/stormbox-react/src/styles/services-ui.css b/suites-experimental/stormbox-react/src/styles/services-ui.css new file mode 100644 index 000000000..5c399105d --- /dev/null +++ b/suites-experimental/stormbox-react/src/styles/services-ui.css @@ -0,0 +1,68 @@ +/* Design tokens and the BaseButton rules from @thunderbirdops/services-ui 1.6.5 + (MPL-2.0), with the Vue scope attributes removed. Stormbox imports the full + stylesheet; only the parts its mail surfaces use are kept here. */ +html{--colour-user-red:#e53935;--colour-user-orange:#ff8c00;--colour-user-yellow:#f4c430;--colour-user-graphite:#b0b0b0;--colour-user-green:#34c759;--colour-user-blue:#0a84ff;--colour-user-purple:#7753cc;--colour-user-pink:#e91e63;--colour-neutral-900:#26272a;--colour-neutral-base:#feffff;--colour-neutral-lower:#f7f7f7;--colour-neutral-raised:var(--colour-neutral-base);--colour-neutral-subtle:var(--colour-neutral-lower);--colour-neutral-border:#e4e4e7;--colour-neutral-border-intense:#777580;--colour-primary-soft:#f0f8ff;--colour-primary-default:#1373d9;--colour-primary-default-light:#1373d9;--colour-primary-default-dark:#58c9ff;--colour-primary-hover:#175fb6;--colour-primary-hover-light:#175fb6;--colour-primary-pressed:#19518f;--colour-secondary-soft:#faf5ff;--colour-secondary-default:#6b21a8;--colour-secondary-hover:#571c87;--colour-secondary-pressed:#3a0764;--colour-success-soft:#f4f9f4;--colour-success-default:#1d783b;--colour-success-hover:#1c5f32;--colour-success-pressed:#194e2c;--colour-warning-soft:#fefae8;--colour-warning-default:#facc15;--colour-warning-hover:#eabd08;--colour-warning-pressed:#caa204;--colour-danger-soft:#fef2f2;--colour-danger-default:#991b1b;--colour-danger-hover:#7f1d1d;--colour-danger-pressed:#450a0a;--colour-ti-base:#1a202c;--colour-ti-base-light:#1a202c;--colour-ti-base-dark:#eeeef0;--colour-ti-secondary:#4c4d58;--colour-ti-muted:#737584;--colour-ti-highlight:#1373d9;--colour-ti-warning:#713f12;--colour-ti-critical:#dc2626;--colour-ti-success:#1d783b;--colour-accent-teal:#25a6a0;--colour-accent-blue:#37adf9;--colour-accent-purple:#ae55f7;--colour-accent-orange:#ea7308;--colour-accent-pink:#e247c4;--colour-accent-gray:#6e6f9b;--colour-apmt-soft:#f3f9fc;--colour-apmt-primary:teal;--colour-apmt-primary-hover:#066769;--colour-apmt-primary-pressed:#0a5757;--colour-apmt-secondary:#81d4b5;--colour-apmt-accent-1:#a3ece3;--colour-apmt-accent-2:#03afd7;--colour-send-soft:#fef7ec;--colour-send-primary:#f09d38;--colour-send-primary-hover:#f09d38;--colour-send-primary-pressed:#f09d38;--colour-send-primary-secondary:#aa6000;--colour-send-primary-accent-1:#1f8ddb;--colour-send-primary-accent-2:#1f8ddb} +html.dark{--colour-neutral-base:#1a202c;--colour-neutral-lower:#18181b;--colour-neutral-raised:#262d3b;--colour-neutral-subtle:var(--colour-neutral-raised);--colour-neutral-border:#303a4a;--colour-neutral-border-intense:#3d4d67;--colour-primary-soft:#262c40;--colour-primary-default:#58c9ff;--colour-primary-hover:#32aeff;--colour-primary-pressed:#1b90f5;--colour-secondary-soft:#3a0764;--colour-secondary-default:#f5e8ff;--colour-secondary-hover:#ecd5ff;--colour-secondary-pressed:#ddb4fe;--colour-success-soft:#082b16;--colour-success-default:#defae7;--colour-success-hover:#c0f2cf;--colour-success-pressed:#8ee7aa;--colour-warning-soft:#423606;--colour-warning-default:#fef2c3;--colour-warning-hover:#fee78a;--colour-warning-pressed:#fdd847;--colour-danger-soft:#7f1d1d;--colour-danger-default:#fee2e2;--colour-danger-hover:#fecaca;--colour-danger-pressed:#fca5a5;--colour-ti-base:#eeeef0;--colour-ti-secondary:#d9d9de;--colour-ti-muted:#7f94ac;--colour-ti-highlight:#58c9ff;--colour-ti-warning:#fee78a;--colour-ti-critical:#ef4444;--colour-ti-success:#55d37e;--colour-accent-teal:#a3ece3;--colour-accent-blue:#58c9ff;--colour-accent-purple:#8022ce;--colour-accent-orange:#fec18a;--colour-accent-pink:#fbd3f6;--colour-accent-gray:#c3cade;--colour-apmt-soft:#152f3c;--colour-apmt-primary:#a3ece3;--colour-apmt-primary-hover:#6ddbd1;--colour-apmt-primary-pressed:#3ec3ba;--colour-apmt-secondary:#25a6a0;--colour-apmt-accent-1:#a3ece3;--colour-apmt-accent-2:#58c9ff;--colour-send-soft:#411107;--colour-send-primary:#f09d38;--colour-send-primary-hover:#f09d38;--colour-send-primary-pressed:#f09d38;--colour-send-primary-secondary:#aa6000;--colour-send-primary-accent-1:#1f8ddb;--colour-send-primary-accent-2:#1f8ddb} +html{--colour-service-soft:var(--colour-primary-soft);--colour-service-primary:var(--colour-primary-default);--colour-service-primary-hover:var(--colour-primary-hover);--colour-service-primary-pressed:var(--colour-primary-pressed);--colour-service-secondary:var(--colour-secondary-default);--colour-service-accent-1:var(--colour-accent-purple);--colour-service-accent-2:var(--colour-accent-teal)} +html[data-tbpro-service=apmt]{--colour-service-soft:var(--colour-apmt-soft);--colour-service-primary:var(--colour-apmt-primary);--colour-service-primary-hover:var(--colour-apmt-primary-hover);--colour-service-primary-pressed:var(--colour-apmt-primary-pressed);--colour-service-secondary:var(--colour-apmt-secondary);--colour-service-accent-1:var(--colour-apmt-accent-1);--colour-service-accent-2:var(--colour-apmt-accent-2)} +html[data-tbpro-service=send]{--colour-service-soft:var(--colour-primary-soft);--colour-service-primary:var(--colour-primary-default);--colour-service-primary-hover:var(--colour-primary-hover);--colour-service-primary-pressed:var(--colour-primary-pressed);--colour-service-secondary:var(--colour-neutral-subtle);--colour-service-accent-1:var(--colour-send-primary-accent-1);--colour-service-accent-2:var(--colour-send-primary-accent-2)} +html{--border-radius:.5rem;--txt-default:.875rem;--txt-input:var(--txt-default);--line-height-input:1.25rem;--font-sans:"Inter", sans-serif;--txt-colour:var(--colour-ti-base);--transition-timing-function:initial;--transition-duration:0} +@media (prefers-reduced-motion:no-preference){html{--transition-timing-function:ease-in-out;--transition-duration:.25s}} +.services-ui-base{font-family:Inter,sans-serif;font-size:.8125rem} +.dark .services-ui-base{color:var(--txt-colour)} +.is-light-mode{display:block} +.is-dark-mode,.dark .is-light-mode{display:none} +.dark .is-dark-mode{display:block} +.modal-active{overflow:hidden} +.screen-reader-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden} +html{--button-destructive-color:var(--colour-danger-default);--button-destructive-color-hover:var(--colour-danger-hover);--button-destructive-color-active:var(--colour-danger-pressed)} +html.dark{--button-destructive-color:var(--colour-danger-pressed);--button-destructive-color-hover:#f87171;--button-destructive-color-active:var(--colour-ti-critical)} +.link.icon-only{height:auto;padding:.5rem} +.link.icon-only .icon,.link.icon-only .icon svg{width:1rem;height:1rem} +.link.icon-only.small .icon,.link.icon-only.small .icon svg{width:.75rem;height:.75rem} +.link.icon-only.medium .icon,.link.icon-only.medium .icon svg{width:1.25rem;height:1.25rem} +.link.icon-only.large .icon,.link.icon-only.large .icon svg{width:1.5rem;height:1.5rem} +.link.icon-only .text{display:none} +html{--divider-background-colour:#e4e4e7;--divider-border-colour:#fff} +html.dark{--divider-background-colour:#3d4d67;--divider-border-colour:#242d3c} +.base{border-radius:var(--border-radius);height:2.875rem;font-family:Inter,sans-serif;font-size:var(--txt-input);cursor:pointer;-webkit-user-select:none;user-select:none;border:0;justify-content:center;align-items:center;gap:.5rem;padding:0 1.12rem;font-weight:400;line-height:1;display:flex;position:relative} +.base .icon{justify-content:center;align-items:center;width:.75rem;height:.75rem;display:flex} +:is(.base .icon) svg{width:100%;height:100%} +.base:active{outline:none!important} +.base:focus{outline:.125rem solid var(--colour-primary-default);outline-offset:.125rem} +.base.filled:disabled{background:var(--colour-neutral-border);color:var(--colour-ti-muted);cursor:not-allowed} +:is(.base.outline,.base.brand.filled):before{content:"";border-radius:inherit;background:var(--button-outline-border);box-sizing:border-box;-webkit-mask-composite:xor;pointer-events:none;padding:.0625rem;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto,auto;mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source} +:is(.base.outline,.base.brand.filled):disabled{--button-outline-border:var(--colour-neutral-border);background:var(--colour-neutral-base);color:var(--colour-ti-muted);cursor:not-allowed} +.primary.filled{background:linear-gradient(180deg, var(--colour-accent-blue) -31.82%, var(--colour-primary-default) 8.74%, var(--colour-primary-hover) 100%) border-box;color:var(--colour-neutral-base)} +.primary.filled:hover:not(:disabled){background:linear-gradient(180deg, var(--colour-primary-hover) 0%, var(--colour-primary-hover) 100%)} +.primary.filled:active:not(:disabled){background:linear-gradient(180deg, var(--colour-primary-pressed) 0%, var(--colour-primary-pressed) 100%)} +.primary.outline{--button-outline-border:var(--colour-primary-default);color:var(--colour-primary-hover);background:0 0;position:relative} +.primary.outline:hover:not(:disabled):before{padding:.125rem} +.primary.outline:active:not(:disabled){background:color-mix(in srgb, var(--colour-accent-blue), transparent 90%);transition:none} +.primary.outline:active:not(:disabled):before{padding:.125rem} +.brand{text-transform:uppercase;padding:1rem 1.5rem;font-size:.8125rem;font-weight:600} +.brand.filled{--button-outline-border:linear-gradient(to bottom right, #7bc6f4 10%, #2b8cdc 60%) border-box;background:linear-gradient(329deg, var(--colour-primary-default) -21.06%, var(--colour-accent-blue) 64%);color:var(--colour-ti-base-light);position:relative} +.brand.filled:hover:not(:disabled){background:linear-gradient(var(--colour-primary-hover), var(--colour-primary-hover));color:var(--colour-neutral-base)} +.brand.filled:active:not(:disabled){background:linear-gradient(var(--colour-primary-pressed), var(--colour-primary-pressed));color:var(--colour-neutral-base)} +.brand.outline{--button-outline-border:linear-gradient(99deg, var(--colour-accent-blue) 19.15%, var(--colour-accent-gray) 75.77%) border-box;color:var(--colour-ti-base);background:0 0;position:relative} +.brand.outline:hover:not(:disabled){color:var(--colour-ti-base-light);background:#f2f2f2} +.brand.outline:active:not(:disabled){color:var(--colour-ti-base-light);background:#e3e3e3} +.danger.filled{background-color:var(--button-destructive-color);color:var(--colour-neutral-base)} +.danger.filled:hover:not(:disabled){background-color:var(--button-destructive-color-hover)} +.danger.filled:active:not(:disabled){background-color:var(--button-destructive-color-active)} +.danger.outline{--button-outline-border:var(--button-destructive-color);color:var(--button-destructive-color);background:0 0;position:relative} +.danger.outline:hover:not(:disabled){--button-outline-border:var(--button-destructive-color-hover);color:var(--button-destructive-color-hover)} +.danger.outline:hover:not(:disabled):before{padding:.125rem} +.danger.outline:active:not(:disabled){--button-outline-border:var(--button-destructive-color-active);color:var(--button-destructive-color-active)} +.danger.outline:active:not(:disabled):before{padding:.125rem} +.link{--colour-btn-border:transparent;color:var(--colour-service-primary);background-color:#0000;min-width:0;text-decoration:underline;box-shadow:none!important;border:none!important} +.link .text{-webkit-user-select:none;user-select:none;padding:0;font-weight:400;line-height:1} +.link.small .text{padding:0} +.link:hover{box-shadow:none!important} +.link.outline:disabled,.link.filled:disabled{color:var(--colour-ti-muted);cursor:not-allowed;background:0 0} +.link.outline:disabled{--button-outline-border:transparent} +.small{height:1.75rem;padding:0 .75rem} +.small.brand .text{font-size:.6875rem} +.small .text{font-size:.875rem} +.small button{min-width:initial;height:2rem} +@media (prefers-reduced-motion:no-preference){.base{transition:background-color .25s ease-in-out,background .25s ease-in-out,border .25s ease-in-out,color .25s ease-in-out,box-shadow .25s ease-in-out}} diff --git a/suites-experimental/stormbox-react/src/styles/styles.css b/suites-experimental/stormbox-react/src/styles/styles.css new file mode 100644 index 000000000..7b59d3777 --- /dev/null +++ b/suites-experimental/stormbox-react/src/styles/styles.css @@ -0,0 +1,483 @@ +@font-face { + font-family: "Inter"; + src: url("../assets/fonts/Inter/Inter-Regular.woff2") format("woff2"); + font-style: normal; + font-weight: 400; + font-display: swap; +} + +@font-face { + font-family: "Inter"; + src: url("../assets/fonts/Inter/Inter-Medium.woff2") format("woff2"); + font-style: normal; + font-weight: 500; + font-display: swap; +} + +@font-face { + font-family: "Inter"; + src: url("../assets/fonts/Inter/Inter-SemiBold.woff2") format("woff2"); + font-style: normal; + font-weight: 600; + font-display: swap; +} + +@font-face { + font-family: "Inter"; + src: url("../assets/fonts/Inter/Inter-Bold.woff2") format("woff2"); + font-style: normal; + font-weight: 700; + font-display: swap; +} + +@font-face { + font-family: "Metropolis"; + src: url("../assets/fonts/Metropolis/Metropolis-Regular.woff2") format("woff2"); + font-style: normal; + font-weight: 400; + font-display: swap; +} + +@font-face { + font-family: "Metropolis"; + src: url("../assets/fonts/Metropolis/Metropolis-Light.woff2") format("woff2"); + font-style: normal; + font-weight: 300; + font-display: swap; +} + +@font-face { + font-family: "Metropolis"; + src: url("../assets/fonts/Metropolis/Metropolis-SemiBold.woff2") format("woff2"); + font-style: normal; + font-weight: 600; + font-display: swap; +} + +@font-face { + font-family: "Metropolis"; + src: url("../assets/fonts/Metropolis/Metropolis-Bold.woff2") format("woff2"); + font-style: normal; + font-weight: 700; + font-display: swap; +} + +:root { + /* The vertical gradient services-ui paints on filled primary buttons + (see .primary.filled in their style.css). Kept as a token so our own + accent-filled elements (e.g. the active spaces button) can render the + exact same surface. Theme-correct automatically: it is built from the + --colour-* tokens, which dark mode re-aliases to our palette. */ + --primary-filled-gradient: linear-gradient( + 180deg, + var(--colour-accent-blue) -31.82%, + var(--colour-primary-default) 8.74%, + var(--colour-primary-hover) 100% + ); + /* Default to dark; system light overrides below */ + --font-sans: "Inter", sans-serif; + --font-display: "Metropolis", "Inter", sans-serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + /* Bolt surface ramp (bolt.thunderbird.net, Foundations > Color > + Surface), dark values; the theme blocks below re-declare it. The + names are services-ui's, so its components share the ramp. lower, + base and raised are elevation; subtle and deep are tints, lighter + than base in dark and darker than base in light. */ + --colour-neutral-lower: #111113; + --colour-neutral-base: #18181b; + --colour-neutral-subtle: #232326; + --colour-neutral-raised: #2b2b2f; + --colour-neutral-deep: #3f3f46; + --colour-neutral-border: #52525b; + --colour-neutral-border-intense: #71717a; + /* The surface ladder runs the opposite way in each theme. Dark: content + on lower, folder list and dialogs on base, chrome (App.vue) on raised. + Light: content on base, folder list on lower, chrome on subtle. Inputs + take the subtle tint so a field is lifted from a dark surface and + recessed from a light one; dividers are the nearest tint to the + surface (~1.2:1). */ + --panel: var(--colour-neutral-lower); + --panel2: var(--colour-neutral-subtle); + --border: var(--colour-neutral-subtle); + --text: #e6e8ef; + --muted: #9aa3b2; + --accent: #4f8cff; + /* Bright enough to read as a highlight on any dark surface (--panel, + --panel2, the folder list); the old #14182a was nearly invisible. + Selected sits clearly above hover via a stronger blue cast without + jumping to the over-bright #263054 tried earlier. */ + --rowHover: #1e2438; + --rowActive: #222c50; + --folder-icon-color: #fee78a; + --folder-icon-fill: color-mix(in srgb, #ffd166 20%, transparent); + /* Warning banner (default = dark theme): light amber on a translucent + amber wash; ~13:1 over the dark page. WCAG AA. */ + --warn-bg: rgba(255, 193, 7, 0.1); + --warn-fg: #ffd166; + --warn-border: rgba(255, 193, 7, 0.38); + /* Errors (invalid pills, inline failures): light red on a red wash, + readable over --panel and --panel2. */ + --error-bg: rgba(255, 107, 107, 0.14); + --error-fg: #ff6b6b; + /* Form controls (inputs, pickers, toggle buttons) and dialog edges take + the ramp's border token, a step above the --border hairline. */ + --control-border: var(--colour-neutral-border); + --control-hover-bg: color-mix(in srgb, var(--text) 16%, transparent); + --control-hover-border: color-mix(in srgb, var(--text) 38%, transparent); + /* Cards inset on a panel (feature cards, shortcut groups) use the same weight. */ + --card-border: var(--control-border); + color-scheme: dark light; +} + +/* Explicit theme overrides via the services-ui `dark`/`light` class on */ +html.dark, +.dark { + --colour-neutral-lower: #111113; + --colour-neutral-base: #18181b; + --colour-neutral-subtle: #232326; + --colour-neutral-raised: #2b2b2f; + --colour-neutral-deep: #3f3f46; + --colour-neutral-border: #52525b; + --colour-neutral-border-intense: #71717a; + --panel: var(--colour-neutral-lower); + --border: var(--colour-neutral-subtle); + --text: #e6e8ef; + --muted: #9aa3b2; + --accent: #4f8cff; + --rowHover: #1e2438; + --rowActive: #222c50; + --folder-icon-color: #fee78a; + --folder-icon-fill: color-mix(in srgb, #ffd166 20%, transparent); + --warn-bg: rgba(255, 193, 7, 0.1); + --warn-fg: #ffd166; + --warn-border: rgba(255, 193, 7, 0.38); + --error-bg: rgba(255, 107, 107, 0.14); + --error-fg: #ff6b6b; +} + +html.light, +.light { + --colour-neutral-lower: #f7f7f8; + --colour-neutral-base: #fcfcfd; + --colour-neutral-subtle: #efeff1; + --colour-neutral-raised: #ffffff; + --colour-neutral-deep: #e4e4e7; + --colour-neutral-border: #d9d9de; + --colour-neutral-border-intense: #a1a1aa; + --panel: var(--colour-neutral-base); + /* deep on base is ~1.25:1, the same hairline weight as dark's subtle. */ + --border: var(--colour-neutral-deep); + --text: #111827; + --muted: #6b7280; + /* Light mode adopts services-ui's primary blue (--colour-primary-default, + #1373d9) so our own accent-coloured elements match services-ui buttons. + Dark mode keeps our #4f8cff and aliases the services-ui tokens to it. */ + --accent: #1373d9; + --rowHover: #eef2ff; /* soft accent-tint for hover */ + --rowActive: #e0e9ff; /* slightly stronger for selected */ + --folder-icon-color: #947400; + --folder-icon-fill: #ffeb99; + /* Amber-on-pale-yellow is unreadable in light mode (issue #46); deep amber + text on a solid pale-amber field. #664700 on #fdf4d0 ≈ 7.7:1. WCAG AAA. */ + --warn-bg: #fdf4d0; + --warn-fg: #664700; + --warn-border: #e7c34d; + /* Deep red on a solid pale-red field; #a4000f on #fbeaea ≈ 7.6:1. */ + --error-bg: #fbeaea; + --error-fg: #a4000f; +} + +/* If user prefers light and no explicit theme chosen, use light */ +@media (prefers-color-scheme: light) { + :root { + --colour-neutral-lower: #f7f7f8; + --colour-neutral-base: #fcfcfd; + --colour-neutral-subtle: #efeff1; + --colour-neutral-raised: #ffffff; + --colour-neutral-deep: #e4e4e7; + --colour-neutral-border: #d9d9de; + --colour-neutral-border-intense: #a1a1aa; + --panel: var(--colour-neutral-base); + --border: var(--colour-neutral-deep); + --text: #111827; + --muted: #6b7280; + --accent: #1373d9; + --rowHover: #eef2ff; + --rowActive: #e0e9ff; + --folder-icon-color: #947400; + --folder-icon-fill: #ffeb99; + --warn-bg: #fdf4d0; + --warn-fg: #664700; + --warn-border: #e7c34d; + --error-bg: #fbeaea; + --error-fg: #a4000f; + } +} + +/* Neutrals come from the Bolt ramp in the theme blocks above, in both + themes. Light mode otherwise uses the services-ui palette as-is. Dark + mode overrides the remaining services-ui --colour-* tokens with our own + palette, because services-ui's dark theme doesn't match our chrome. We + import services-ui's style.css first (see main.ts), so re-declaring these + tokens here wins and cascades into every services-ui component. + + Intentionally NOT overridden (kept on services-ui defaults): the + `secondary` family, the decorative `accent-{teal,purple,orange,pink,gray}` + set, and other-product brand colours (`apmt-*`, `send-*`, `service-*`) — + we have no equivalents and nothing in webmail renders them. */ +html.dark { + /* Primary → our accent blue. */ + --colour-primary-soft: #16203a; + --colour-primary-default: var(--accent); + --colour-primary-hover: #5e97ff; + --colour-primary-pressed: #3c79e6; + --colour-accent-blue: var(--accent); + + /* Text / icon. */ + --colour-ti-base: var(--text); + --colour-ti-secondary: #c2c8d4; + --colour-ti-muted: var(--muted); + --colour-ti-highlight: var(--accent); + --colour-ti-warning: #ffd166; + --colour-ti-critical: #ff6b6b; + --colour-ti-success: #45c483; + + /* Warning (amber): soft = dark tinted bg, default/hover/pressed = fg. */ + --colour-warning-soft: #2a2206; + --colour-warning-default: #ffd166; + --colour-warning-hover: #ffdb85; + --colour-warning-pressed: #f5c23e; + + /* Danger: derived from our error red #ff6b6b. */ + --colour-danger-soft: #3a1418; + --colour-danger-default: #ff6b6b; + --colour-danger-hover: #ff8585; + --colour-danger-pressed: #e85555; + + /* Success: derived from our success green #2e9e63. */ + --colour-success-soft: #0d2a1a; + --colour-success-default: #57c98a; + --colour-success-hover: #6ed79b; + --colour-success-pressed: #2e9e63; +} +/* Label and icon colour on flat --accent fills in the dark theme: the + accent is a light blue (#4f8cff), so the lower surface (#0f1117, 5.8:1) + reads where white sits at 3.2:1. The light theme keeps white on its + darker blue. Listed with the same state variants as the components so + the override outranks their scoped rules; the Bolt palette applies the + same treatment via --bolt-filled-fg (assets/bolt-theme.css). */ +html.dark .base.primary.filled:not(:disabled), +html.dark .app-toggle-button.is-active, +html.dark .msg-list__filter.is-active, +html.dark .msg-list__bulk-action--whitelist, +html.dark .msg-list__bulk-action--whitelist:hover, +html.dark .msg-list__bulk-action--whitelist:disabled, +html.dark .msg-list__bulk-action--whitelist:disabled:hover, +html.dark .message-view__action--whitelist, +html.dark .message-view__action--whitelist:hover, +html.dark .message-view__action--whitelist:disabled, +html.dark .message-view__action--whitelist:disabled:hover, +html.dark .folder-create__btn--primary, +html.dark .folder-subs__btn--primary, +html.dark .settings-dialog__btn--primary, +html.dark .scheme-picker__option[aria-checked="true"] { + color: var(--panel2); +} +/* Filled primary buttons are flat --accent at rest; services-ui's own flat + hover/pressed states still apply. Its resting gradient is a Bolt-only + treatment (assets/bolt-theme.css). */ +.base.primary.filled { + /* As a gradient, not a colour: services-ui transitions `background` and + its hover state is a gradient. A colour rest state would interpolate + background-color through transparent on mouse-out, leaving the button + see-through for ~150ms. */ + background: linear-gradient(var(--accent), var(--accent)) border-box; +} + +* { + box-sizing: border-box; +} + +details:not([open]) > :not(summary) { + display: none; +} + +.contact-editor__add { + display: inline-flex; + align-items: center; + justify-self: start; + gap: 5px; + padding: 4px 6px; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--accent); + font: inherit; + font-size: 12px; + font-weight: 600; + cursor: pointer; +} + +.app-icon-button.contact-editor__remove { + border-radius: 6px; +} + +.contact-editor__add:hover, +.contact-editor__add:focus-visible { + background: var(--rowHover, #f0f1f6); + outline: none; +} + +:root { + --app-viewport-height: 100vh; +} + +@supports (height: 100dvh) { + :root { + --app-viewport-height: 100dvh; + } +} + +html, +body { + height: 100%; + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; +} + +body { + margin: 0; + background: var(--panel); + color: var(--text); + font: 14px/1.4 var(--font-sans); + height: var(--app-viewport-height); + overflow: hidden; + transition: background-color 0.18s ease, color 0.18s ease; +} + +html .dp--theme-light, +html .dp--theme-dark { + --dp-font-family: var(--font-sans); + --dp-font-size: 13px; + --dp-border-radius: 6px; + --dp-cell-border-radius: 4px; + --dp-background-color: var(--panel); + --dp-text-color: var(--text); + --dp-hover-color: var(--rowHover); + --dp-hover-text-color: var(--text); + --dp-hover-icon-color: var(--text); + --dp-primary-color: var(--accent); + --dp-primary-disabled-color: color-mix(in srgb, var(--accent) 48%, transparent); + --dp-primary-text-color: #fff; + --dp-secondary-color: var(--muted); + --dp-border-color: var(--border); + --dp-menu-border-color: var(--border); + --dp-border-color-hover: var(--accent); + --dp-border-color-focus: var(--accent); + --dp-disabled-color: color-mix(in srgb, var(--panel) 82%, var(--muted)); + --dp-disabled-color-text: var(--muted); + --dp-scroll-bar-background: var(--panel2); + --dp-scroll-bar-color: var(--muted); + --dp-icon-color: var(--muted); + --dp-danger-color: var(--error-fg); + --dp-marker-color: var(--error-fg); + --dp-tooltip-color: var(--panel2); + --dp-highlight-color: color-mix(in srgb, var(--accent) 16%, transparent); +} + +/* The shell layout lives in App.vue; #app just needs to fill the + * viewport so the grid can size itself. */ +#app { + height: var(--app-viewport-height); + min-height: 0; +} + +/* Theme toggle button */ +.theme-toggle { + width: 34px; + height: 34px; + display: inline-flex; + align-items: center; + justify-content: center; + border: 1px solid var(--border); + border-radius: 0.6rem; + background: transparent; + color: var(--text); +} + +.theme-toggle:hover { + background: var(--control-hover-bg); +} + +/* Global button styles */ +button { + cursor: pointer; +} + +button:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +/* Initial modal focus belongs to the surface, not an action button. */ +[role="dialog"][aria-modal="true"]:focus, +[role="alertdialog"][aria-modal="true"]:focus { + outline: none; +} + +/* Global input styles */ +input, +select { + font-family: inherit; + font-size: inherit; +} + +/* Utility classes */ +.meta { + color: var(--muted); + font-size: 12px; + margin-top: 6px; + text-align: center; +} + +.err { + color: #ff6b6b; + white-space: pre-wrap; + font-size: 13px; + margin-top: 6px; + text-align: center; +} + +/* Row grid layout for forms */ +.row { + display: grid; + grid-template-columns: 80px minmax(0, 1fr); + gap: 8px; + align-items: center; + margin-bottom: 8px; +} + +.row label { + color: var(--muted); + font-size: 12px; +} + +.row input, +.row select { + width: 100%; + padding: 0.5rem 0.65rem; + border: 1px solid var(--control-border); + border-radius: 0.5rem; + background: var(--panel2); + color: var(--text); + outline: none; +} + +.row input::placeholder { + color: #9aa3b2; +} + +.row input:-webkit-autofill { + -webkit-box-shadow: 0 0 0px 1000px var(--panel2) inset; + -webkit-text-fill-color: var(--text); +} diff --git a/suites-experimental/stormbox-react/src/types.ts b/suites-experimental/stormbox-react/src/types.ts new file mode 100644 index 000000000..8ea456874 --- /dev/null +++ b/suites-experimental/stormbox-react/src/types.ts @@ -0,0 +1,66 @@ +export type MailboxRole = + | 'inbox' + | 'sent' + | 'drafts' + | 'trash' + | 'junk' + | 'archive' + | 'scheduled' + | 'important' + | 'flagged' + | 'all'; + +export type JmapViewSort = 'received' | 'sent' | 'scheduled'; + +export interface Address { + name?: string; + email: string; +} + +export interface Folder { + id: number; + name: string; + role: MailboxRole | null; + parent_id: number | null; + is_starred: 0 | 1; +} + +export interface Attachment { + name: string; + mime_type: string; + size: number; +} + +export interface Message { + id: number; + folder_id: number; + from_text: string; + to_text: string; + cc: Address[]; + subject: string; + preview: string; + received_at: number; + sent_at: number; + is_seen: 0 | 1; + is_flagged: 0 | 1; + is_draft: 0 | 1; + has_attachment: 0 | 1; + keywords_json: string; + /** Set on a pending scheduled send; its toolbar is read-only. */ + scheduled_undo_status?: 'pending' | null; + body_kind: BodyKind; + /** Seed for the body generator; replies and sends carry their body inline instead. */ + body_seed: number; + body?: MessageBody; +} + +export type BodyKind = 'text' | 'html' | 'newsletter' | 'notification' | 'junk' | 'draft'; + +export interface MessageBody { + text?: string; + html?: string; + attachments: Attachment[]; +} + +/** A tag view is addressed as `tag:` where a folder id would go. */ +export type ViewId = number | `tag:${string}`; diff --git a/suites-experimental/stormbox-react/src/utils/address-key.ts b/suites-experimental/stormbox-react/src/utils/address-key.ts new file mode 100644 index 000000000..c9ba2ab84 --- /dev/null +++ b/suites-experimental/stormbox-react/src/utils/address-key.ts @@ -0,0 +1,80 @@ +/** + * The comparison key for an email address (CS-3.5). + * + * Two addresses are "the same suggestion" when their keys match. The key is + * for comparison only — never store it in place of the address, and never + * send it. What goes on the wire is what the user or the server gave us. + * + * The rules, and why each is what it is: + * + * - **NFC, never NFKC** (RFC 6532 §3.1). NFKC is a *compatibility* mapping: + * it folds fi to fi, ① to 1, and full-width to ASCII. Those are different + * characters that happen to look related, and treating them as equal would + * merge addresses belonging to different people. + * - **The domain is case-insensitive**, so it lower-cases, and it is + * IDNA-normalized so a Unicode domain and its punycode spelling agree. + * - **The local part is case-SENSITIVE to the receiving server** + * (RFC 5321 §2.4), so nothing may rewrite it in transit. Folding its + * case *here* is a deliberate trade-off, on the ground that two addresses + * differing only by local-part case are effectively never two people. + * - **No provider-specific canonicalization.** No dot-stripping, no + * plus-tag removal. `a.b@gmail.com` and `ab@gmail.com` reach the same + * inbox today, at Google's discretion, and `a+x@` is how people filter + * their own mail. Encoding either as identity would silently drop + * addresses the user deliberately kept apart. + */ +export function addressKey(email: string | null | undefined): string { + const raw = String(email ?? '').trim().normalize('NFC'); + if (!raw) return ''; + const at = raw.lastIndexOf('@'); + // No domain to normalize. Folding the whole thing keeps the key total, so + // an unparseable entry still compares equal to itself. + if (at <= 0 || at === raw.length - 1) return raw.toLowerCase(); + return `${raw.slice(0, at).toLowerCase()}@${normalizeAddressDomain(raw.slice(at + 1))}`; +} + +/** + * A domain lower-cased and put into its IDNA (punycode) form. + * + * `URL` is what does the IDNA work; it is the only IDNA implementation + * available without a dependency. It rejects some strings a mail domain may + * legitimately be — a bracketed address literal, most obviously — so a + * refusal falls back to the lower-cased input rather than to nothing. An + * empty key would make every unparseable domain compare equal to every + * other, which is the one outcome worse than not normalizing. + */ +function normalizeAddressDomain(domain: string): string { + const lowered = domain.trim().toLowerCase(); + if (!lowered || lowered.startsWith('[')) return lowered; + // The URL parser truncates the authority at these characters instead of + // refusing, which would collapse distinct malformed domains onto one key. + if (/[/?#:@\\]/.test(lowered)) return lowered; + try { + const { hostname } = new URL(`https://${lowered}`); + return hostname || lowered; + } catch { + return lowered; + } +} + +/** + * The lower-cased word tokens of a name, for unordered prefix matching + * (CS-3.2), so that "jane smi" finds "Smith, Jane". + * + * Punctuation separates rather than sticks: "Smith, Jane" has to yield + * `smith` and not `smith,`, or a comma in a stored name would make the token + * unreachable by anything the user could type. Hyphens and apostrophes are + * kept inside a word, because "Anne-Marie" and "O'Neill" are one word each + * and splitting them would offer tokens nobody types on their own. + */ +export function nameTokens(...values: (string | null | undefined)[]): string[] { + const seen = new Set(); + for (const value of values) { + const text = String(value ?? '').normalize('NFC').toLowerCase(); + for (const token of text.split(/[^\p{L}\p{N}'’-]+/u)) { + const trimmed = token.replace(/^['’-]+|['’-]+$/g, ''); + if (trimmed) seen.add(trimmed); + } + } + return [...seen]; +} diff --git a/suites-experimental/stormbox-react/src/utils/address-parse.ts b/suites-experimental/stormbox-react/src/utils/address-parse.ts new file mode 100644 index 000000000..5539b7010 --- /dev/null +++ b/suites-experimental/stormbox-react/src/utils/address-parse.ts @@ -0,0 +1,721 @@ +/** + * RFC 5322 §§3.4–3.4.1 address-list parsing, widened to the + * internationalised forms of RFC 6532 §§3.1–3.2. + * + * The grammar exists because a comma is not a separator in an address + * list; it is a separator *between* addresses, and it also appears inside + * quoted display names, comments, and domain literals, where it means + * nothing. Splitting on it first — which is what this replaces — turns + * `"Smith, Alice" ` into two fragments, neither an address. + * + * Whether such an address can be *delivered* is a separate question this + * does not answer: RFC 6532 addresses need SMTPUTF8 (RFC 6531) on the + * server, and a syntactically perfect address can still bounce. + * + * postal-mime was read as a reference implementation rather than taken as + * a dependency, per the product decision recorded in CS-2.3. + * + * The subset implemented: + * + * address-list = address *("," address) + * address = mailbox / group + * mailbox = name-addr / addr-spec + * name-addr = [display-name] angle-addr + * angle-addr = [CFWS] "<" addr-spec ">" [CFWS] + * group = display-name ":" [group-list] ";" [CFWS] + * display-name = phrase (obs-phrase, so bare dots are + * allowed: `Alice B. Smith`) + * addr-spec = local-part "@" domain + * local-part = dot-atom / quoted-string + * domain = dot-atom / domain-literal + * + * Not implemented, deliberately: the obsolete routing forms of RFC 5322 + * §4.4 (`<@relay:user@host>`), which no mail submitted today uses, and + * folding, which arrives already unfolded here because this parses user + * input and cached header text rather than wire format. + * + * A fragment that does not parse is returned verbatim as a rejection + * rather than dropped or passed through as an address (CS-2.4): dropping + * loses a recipient the user typed, and passing it through sends a + * malformed address to the server. + */ + +export interface ParsedAddress { + name?: string; + email: string; +} + +export interface AddressListParse { + /** Addresses in the order they appeared, groups flattened into members. */ + addresses: ParsedAddress[]; + /** Verbatim fragments that are not addresses, in the order they appeared. */ + rejected: string[]; +} + +/** One thing a list held: an address, or text that is not one. */ +export type ParsedElement = { address: ParsedAddress } | { rejected: string }; + +interface Cursor { + src: string; + i: number; + /** + * Set once a group-shaped element has scanned to the end without finding + * a semicolon that could terminate it. Later elements can trust it rather + * than rescanning: an element only ever begins outside a quoted string + * and a comment, so the scan that reached the end passed every later + * element's starting point in that same state and read the same text the + * same way. See `skipToElementEnd`. + */ + noGroupTerminator?: boolean; + /** Where the last `>` in the text is, computed at most once per parse. */ + lastAngle?: number; +} + +/** + * One phrase word, with whether whitespace or a comment preceded it. The + * flag is what lets `Alice B. Smith` come back with its spacing intact: + * the `.` follows `B` with no space, and the display name has to say so. + */ +interface Word { + text: string; + spaced: boolean; +} + +function isWsp(ch: string | undefined): boolean { + return ch === ' ' || ch === '\t' || ch === '\r' || ch === '\n'; +} + +/** + * atext per RFC 5322 §3.2.3. RFC 6532 §3.2 adds every non-ASCII scalar, + * which is why anything above the ASCII range passes: the display name and + * both halves of the address may be UTF-8. + */ +function isAtext(ch: string | undefined): boolean { + if (ch === undefined) return false; + if (ch.codePointAt(0)! > 0x7f) return true; + return /[A-Za-z0-9!#$%&'*+\-/=?^_`{|}~]/.test(ch); +} + +/** + * Skip folding whitespace and comments, including nested ones (§3.2.2). + * + * False means a comment was opened and never closed, and the cursor is left + * at the end. That has to be a failure rather than the end of valid CFWS: + * `alice@example.com (Bob ` would otherwise parse as Alice + * alone with nothing rejected, and send to a smaller audience than the one + * the user typed, silently. + */ +function skipCfws(cur: Cursor): boolean { + for (;;) { + while (isWsp(cur.src[cur.i])) cur.i += 1; + if (cur.src[cur.i] !== '(') return true; + let depth = 0; + do { + const ch = cur.src[cur.i]; + if (ch === undefined) return false; + if (ch === '\\') { + cur.i += 2; + continue; + } + if (ch === '(') depth += 1; + else if (ch === ')') depth -= 1; + cur.i += 1; + } while (depth > 0); + } +} + +/** + * Whether a code unit at `i` may appear inside a quoted-string. qtext + * (§3.2.4) excludes controls other than the FWS whitespace, and RFC 6532 + * §3.2 adds only valid UTF-8 — so an unpaired UTF-16 surrogate, which no + * scalar value encodes, is out too. + */ +function isQuotableAt(src: string, i: number): boolean { + const code = src.charCodeAt(i); + if (code < 0x20) return code === 0x09; // tab is FWS; other controls are not + if (code === 0x7f) return false; + if (code >= 0xd800 && code <= 0xdbff) { + const next = src.charCodeAt(i + 1); + return next >= 0xdc00 && next <= 0xdfff; + } + if (code >= 0xdc00 && code <= 0xdfff) { + const prev = src.charCodeAt(i - 1); + return prev >= 0xd800 && prev <= 0xdbff; + } + return true; +} + +/** + * Read a quoted-string (§3.2.4) from the opening quote, returning its + * decoded content and its raw text. Null if the closing quote is missing + * or the content is not quotable, which makes the whole fragment a + * rejection rather than letting the rest of the list be swallowed by the + * unterminated quote. + */ +function readQuotedString(cur: Cursor): { value: string; raw: string } | null { + const start = cur.i; + cur.i += 1; + let value = ''; + for (;;) { + const ch = cur.src[cur.i]; + if (ch === undefined) { + cur.i = start; + return null; + } + if (ch === '\\') { + const next = cur.src[cur.i + 1]; + if (next === undefined || !isQuotableAt(cur.src, cur.i + 1)) { + cur.i = start; + return null; + } + value += next; + cur.i += 2; + continue; + } + if (ch === '"') { + cur.i += 1; + return { value, raw: cur.src.slice(start, cur.i) }; + } + if (!isQuotableAt(cur.src, cur.i)) { + cur.i = start; + return null; + } + value += ch; + cur.i += 1; + } +} + +/** Read 1*atext. Empty means there was no atom here. */ +function readAtom(cur: Cursor): string { + const start = cur.i; + while (isAtext(cur.src[cur.i])) cur.i += 1; + return cur.src.slice(start, cur.i); +} + +/** Read dot-atom (§3.2.3): atoms joined by dots, no whitespace between. */ +function readDotAtom(cur: Cursor): string { + const start = cur.i; + if (!isAtext(cur.src[cur.i])) return ''; + for (;;) { + readAtom(cur); + if (cur.src[cur.i] === '.' && isAtext(cur.src[cur.i + 1])) { + cur.i += 1; + continue; + } + return cur.src.slice(start, cur.i); + } +} + +type DomainLiteralResult = + | { kind: 'valid'; value: string } + | { kind: 'closed-invalid' } + | { kind: 'unterminated' }; + +/** + * Find the `]` that bounds an already-invalid domain-shaped construct. + * Quoted strings belong to the address text after the invalid content, so + * a `]` inside one cannot close the bracket recovery is scanning. + */ +function invalidDomainLiteralCloseAhead(cur: Cursor): number { + const scratch: Cursor = { src: cur.src, i: cur.i }; + while (scratch.i < scratch.src.length) { + const ch = scratch.src[scratch.i]; + if (ch === ']') return scratch.i; + if (ch === '[') return -1; + if (ch === '\\') { + scratch.i += 2; + continue; + } + if (ch === '"') { + if (!readQuotedString(scratch)) return -1; + continue; + } + scratch.i += 1; + } + return -1; +} + +/** + * Read domain-literal (§3.4.1): `[192.0.2.1]`, kept verbatim. A closed + * invalid literal leaves the cursor after its `]`; an unterminated one + * restores it to `[`, because only the latter owns every comma that follows. + */ +function readDomainLiteral(cur: Cursor): DomainLiteralResult { + const start = cur.i; + cur.i += 1; + for (;;) { + const ch = cur.src[cur.i]; + if (ch === undefined || ch === '[') { + cur.i = start; + return { kind: 'unterminated' }; + } + if (ch === '\\') { + cur.i += 2; + continue; + } + // §3.4.1 dtext excludes space and control characters, and an address + // holding one is not an address: without this it reaches the server, + // which rejects the whole submission long after the field could have + // said so. + if (ch !== ']' && (ch === ' ' || ch === '\t' || ch < '\u0021' || ch === '\u007f')) { + const close = invalidDomainLiteralCloseAhead(cur); + if (close < 0) { + cur.i = start; + return { kind: 'unterminated' }; + } + cur.i = close + 1; + return { kind: 'closed-invalid' }; + } + cur.i += 1; + if (ch === ']') return { kind: 'valid', value: cur.src.slice(start, cur.i) }; + } +} + +/** + * Read a phrase (§3.2.5) as the words that compose it. Stops at the first + * character that cannot continue one, leaving the cursor there so the + * caller can see whether an address, a group, or nothing follows. + */ +function readPhraseWords(cur: Cursor): Word[] | null { + const words: Word[] = []; + for (;;) { + const before = cur.i; + if (!skipCfws(cur)) return null; + const spaced = cur.i > before || words.length === 0; + const ch = cur.src[cur.i]; + if (ch === '"') { + const quoted = readQuotedString(cur); + if (!quoted) return null; + words.push({ text: quoted.value, spaced }); + continue; + } + // A bare dot is obs-phrase, not dot-atom: `Alice B. Smith` is a + // display name a great deal of real mail carries. + if (ch === '.') { + cur.i += 1; + words.push({ text: '.', spaced }); + continue; + } + if (isAtext(ch)) { + words.push({ text: readAtom(cur), spaced }); + continue; + } + return words; + } +} + +function joinWords(words: Word[]): string { + // NFC per RFC 6532 §3.1: an accepted name is content headed for the + // wire, so a decomposed spelling is normalized here. Rejected fragments + // stay byte-exact — an invalid pill reopens as typed (CS-3.16). + return words + .map((word, idx) => (idx > 0 && word.spaced ? ` ${word.text}` : word.text)) + .join('') + .trim() + .normalize('NFC'); +} + +/** + * Read addr-spec (§3.4.1). The local part keeps the form it was written + * in, quotes included: `"a b"@example.com` is only a valid address while + * it stays quoted, so decoding it here would produce one that is not. + */ +function readAddrSpec(cur: Cursor): string | null { + if (!skipCfws(cur)) return null; + let local: string; + if (cur.src[cur.i] === '"') { + const quoted = readQuotedString(cur); + if (!quoted) return null; + local = quoted.raw; + } else { + local = readDotAtom(cur); + } + if (!local) return null; + if (!skipCfws(cur)) return null; + if (cur.src[cur.i] !== '@') return null; + cur.i += 1; + if (!skipCfws(cur)) return null; + let domain: string; + if (cur.src[cur.i] === '[') { + const literal = readDomainLiteral(cur); + if (literal.kind !== 'valid') return null; + domain = literal.value; + } else { + domain = readDotAtom(cur); + } + if (!domain) return null; + // NFC per RFC 6532 §3.1: the accepted address is what goes on the wire, + // and canonically equivalent spellings must leave here as one form. + return `${local}@${domain}`.normalize('NFC'); +} + +/** + * Index of the top-level `>` closing an angle section that opens here, or -1 + * when none belongs to this element. Quoted strings hide their contents + * from every scan. Outside a group, comments and domain literals do too, + * and the scan stops at the list's comma. A group's commas separate members, + * so its recovery scan continues through them to the semicolon. + */ +function angleCloseAhead(cur: Cursor, mayCrossComma: boolean): number { + if (cur.lastAngle === undefined) cur.lastAngle = cur.src.lastIndexOf('>'); + if (cur.lastAngle <= cur.i) return -1; + + const scratch: Cursor = { src: cur.src, i: cur.i + 1 }; + while (scratch.i < scratch.src.length) { + const ch = scratch.src[scratch.i]; + if (ch === '>') return scratch.i; + if (ch === ',' && !mayCrossComma) return -1; + if (ch === '"') { + if (!readQuotedString(scratch)) return -1; + continue; + } + if (ch === '(' && !mayCrossComma) { + if (!skipCfws(scratch)) return -1; + continue; + } + if (ch === '[' && !mayCrossComma) { + const literal = readDomainLiteral(scratch); + if (literal.kind === 'unterminated') return -1; + continue; + } + scratch.i += 1; + } + return -1; +} + +/** + * Advance to the end of the element starting here, so a fragment that + * failed to parse costs one address rather than the rest of the list. + * Commas inside quotes, comments, angle brackets, and domain literals are + * not separators, which is the whole reason this parser exists. + * + * A group ends at its semicolon and its commas separate members, so a + * failed group is scanned through them — but only as far as a semicolon + * that exists. Without that limit, text the grammar cannot distinguish + * from a group would take the rest of the list with it: `https://host` and + * `mailto:a@b` are both a phrase followed by a colon, and a user who + * pasted one alongside real addresses must not lose them. + */ +function skipToElementEnd(cur: Cursor, wasGroup: boolean): void { + let firstComma = -1; + for (;;) { + const ch = cur.src[cur.i]; + if (ch === undefined) { + // An unterminated group is the whole remaining text; anything else + // ended at the separator passed on the way here. + if (wasGroup) { + cur.noGroupTerminator = true; + if (firstComma >= 0) cur.i = firstComma; + } + return; + } + if (ch === ',') { + // Once the text is known to hold no semicolon that could end a group, + // the comma is the only boundary this element can have, so the scan + // stops here rather than running to the end again for an answer it + // already has. Pasting 8,000 `mailto:` links — each one a phrase and a + // colon, each one an unterminated group — cost 2.7s a keystroke + // without this, because every element rescanned the whole list. + if (!wasGroup || cur.noGroupTerminator) return; + if (firstComma < 0) firstComma = cur.i; + } + if (ch === ';') { + if (wasGroup) cur.i += 1; + return; + } + if (ch === '"') { + if (!readQuotedString(cur)) { + // Unterminated: everything left belongs to this fragment. + cur.i = cur.src.length; + return; + } + continue; + } + if (ch === '(') { + // Unterminated, so the rest of the text is inside the comment and + // belongs to this fragment. skipCfws leaves the cursor at the end + // either way, which is what keeps this loop advancing. + if (!skipCfws(cur)) return; + continue; + } + if (ch === '[') { + const literal = readDomainLiteral(cur); + if (literal.kind === 'unterminated') { + // An unterminated domain literal owns the remaining text. RFC 5322 + // §3.4.1 dtext includes comma, so none inside it is a list separator. + cur.i = cur.src.length; + return; + } + continue; + } + if (ch === '<') { + const close = angleCloseAhead(cur, wasGroup); + if (close >= 0) { + cur.i = close + 1; + continue; + } + // No `>` in this element closes the `<`, so it is one ordinary + // character of a broken fragment and falls through to the plain + // advance below. + } + cur.i += 1; + } +} + +interface MailboxResult { + /** The mailbox's addresses, or null when the text here is not one. */ + addresses: ParsedAddress[] | null; + /** Whether it was read as a group, which is where the element ends. */ + wasGroup: boolean; +} + +const FAILED: MailboxResult = { addresses: null, wasGroup: false }; +const FAILED_GROUP: MailboxResult = { addresses: null, wasGroup: true }; + +function succeeded(addresses: ParsedAddress[]): MailboxResult { + return { addresses, wasGroup: false }; +} + +/** + * Read one mailbox: `Name `, a bare `addr`, or a group whose members + * are returned flattened. A failure means the text here is not a mailbox, + * and the caller turns it into a rejection. + * + * The display name is read first because that is the only way to tell the + * three apart: what follows it decides. `<` makes it a name-addr, `:` a + * group, and anything else means the phrase was itself an address. + */ +function readMailbox(cur: Cursor, depth: number): MailboxResult { + const start = cur.i; + const words = readPhraseWords(cur); + if (words === null) return FAILED; + if (!skipCfws(cur)) return FAILED; + const ch = cur.src[cur.i]; + + if (ch === '<') { + cur.i += 1; + const email = readAddrSpec(cur); + if (email === null) return FAILED; + if (!skipCfws(cur)) return FAILED; + if (cur.src[cur.i] !== '>') return FAILED; + cur.i += 1; + if (!skipCfws(cur)) return FAILED; + const name = joinWords(words); + return succeeded([{ ...(name ? { name } : {}), email }]); + } + + // A group nested in a group is not in the grammar (§3.4), and treating + // one as a member would let a malformed list recurse without bound. + if (ch === ':' && depth === 0) { + cur.i += 1; + const members = readGroupMembers(cur); + return members === null ? FAILED_GROUP : { addresses: members, wasGroup: true }; + } + + if (words.length === 0) return FAILED; + // No angle brackets and no colon, so the phrase has to have been an + // address all along. Re-read it as one rather than guessing from the + // words, which have already lost their punctuation. + cur.i = start; + const email = readAddrSpec(cur); + if (email === null) return FAILED; + if (!skipCfws(cur)) return FAILED; + return succeeded([{ email }]); +} + +/** + * Read a group's members up to its terminating semicolon. A group with no + * members is legal and contributes nothing. + * + * One unreadable member rejects the group whole rather than sending to the + * rest: a group names an audience, and delivering to some of it while + * silently dropping the remainder is the worse of the two failures. + */ +function readGroupMembers(cur: Cursor): ParsedAddress[] | null { + const addresses: ParsedAddress[] = []; + for (;;) { + if (!skipCfws(cur)) return null; + const ch = cur.src[cur.i]; + if (ch === undefined) return null; + if (ch === ';') { + cur.i += 1; + if (!skipCfws(cur)) return null; + return addresses; + } + if (ch === ',') { + cur.i += 1; + continue; + } + const member = readMailbox(cur, 1); + if (member.addresses === null) return null; + // group-list is a mailbox-list (§3.4), so a member is followed by a + // comma or by the group's semicolon. Reading two members with nothing + // between them would accept `Team: alice@a bob@b;`, where a comma + // dropped while editing quietly changes who is addressed — and the same + // text outside a group is already rejected. + if (!skipCfws(cur)) return null; + const after = cur.src[cur.i]; + if (after !== ',' && after !== ';') return null; + addresses.push(...member.addresses); + } +} + +/** + * Parse an address list into what it holds, in the order it was written. + * + * A control that shows each recipient separately needs the order the two + * kinds arrived in, which `parseAddressList` flattens away: pasting + * `a@x, rubbish, b@y` puts the fragment between the two addresses, not + * after them. + * + * Never throws: this runs on whatever a user has typed so far. + */ +export function parseAddressEntries(input: string | null | undefined): ParsedElement[] { + const entries: ParsedElement[] = []; + if (!input) return entries; + const cur: Cursor = { src: input, i: 0 }; + + while (cur.i < cur.src.length) { + const before = cur.i; + if (!skipCfws(cur)) { + // A comment that never closes. Everything from where it opened is + // one unreadable fragment, not the whitespace it resembles. + const fragment = cur.src.slice(before).trim(); + if (fragment) entries.push({ rejected: fragment }); + break; + } + const ch = cur.src[cur.i]; + if (ch === undefined) break; + // A stray separator is not a fragment a user needs told about; the + // old parser dropped these silently and nothing has asked for them. + if (ch === ',' || ch === ';') { + cur.i += 1; + continue; + } + const start = cur.i; + const parsed = readMailbox(cur, 0); + const next = cur.src[cur.i]; + const trailing = !(next === undefined || next === ',' || next === ';'); + if (parsed.addresses === null || trailing) { + // Either it did not parse, or it parsed and left trailing text that + // belongs to no address — `alice@example.com nonsense`, which is one + // malformed entry rather than an address plus rubbish. + cur.i = start; + skipToElementEnd(cur, parsed.wasGroup); + const fragment = cur.src.slice(start, cur.i).trim(); + if (fragment) entries.push({ rejected: fragment }); + continue; + } + for (const address of parsed.addresses) entries.push({ address }); + } + + return entries; +} + +/** + * Parse an address list, reporting both what parsed and what did not. + * + * Never throws: this runs on whatever a user has typed so far. + */ +export function parseAddressList(input: string | null | undefined): AddressListParse { + const addresses: ParsedAddress[] = []; + const rejected: string[] = []; + for (const entry of parseAddressEntries(input)) { + if ('address' in entry) addresses.push(entry.address); + else rejected.push(entry.rejected); + } + return { addresses, rejected }; +} + +/** + * Render one address back into the form a user reads and this parser + * accepts. `parseAddressList(formatAddress(a)).addresses[0]` is `a`. + * + * A display name is quoted when it holds a character that would otherwise + * change the structure of the list — a comma above all, which is what made + * `Smith, Alice` unusable before. + */ +export function formatAddress(address: ParsedAddress): string { + // A quoted string can carry any whitespace but a line break, and controls + // and lone surrogates are not quotable at all (§3.2.4); fold what cannot + // survive the wire to a space, which is what header folding reads back as. + const name = address.name + ?.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDFFF]/g, (m) => (m.length === 2 ? m : ' ')) + // eslint-disable-next-line no-control-regex -- folding controls is the point + .replace(/[\u0000-\u0008\u000A-\u001F\u007F]/g, ' ') + .trim(); + if (!name) return address.email; + // Structural characters, and any whitespace that is not a single space: + // an unquoted phrase is a list of words, so a run of spaces or a tab + // between two of them is not part of either and does not survive. Inside + // quotes it is content, and comes back as it went in. + const needsQuotes = /[",;:<>()[\]\\@]|\s\s|[^\S ]/.test(name); + const display = needsQuotes + ? `"${name.replaceAll('\\', '\\\\').replaceAll('"', '\\"')}"` + : name; + return `${display} <${address.email}>`; +} + +/** Render an address list for display in a recipient field. */ +export function formatAddressList(addresses: readonly ParsedAddress[]): string { + return addresses.map(formatAddress).join(', '); +} + +/** + * Whether `text` breaks off part-way through a single address. + * + * A recipient field treats a typed comma as "that one is finished", which is + * wrong while the address being written is still open: the comma in + * `"Smith, Alice"` belongs to the display name, and committing there cuts a + * recipient in half. Quoted strings, comments, angle brackets and domain + * literals are all places a separator separates nothing. + */ +export function endsInsideAddress(text: string): boolean { + const cur: Cursor = { src: text, i: 0 }; + while (cur.i < text.length) { + const ch = text[cur.i]; + if (ch === '"') { + if (!readQuotedString(cur)) return true; + continue; + } + if (ch === '(') { + if (!skipCfws(cur)) return true; + continue; + } + if (ch === '<') { + if (!skipAngleAddr(cur)) return true; + continue; + } + if (ch === '[') { + // A bracket that is not a domain literal is only a character — a + // display name may hold one, and reading `Alice [Work Group]` as an + // unfinished address would suppress every comma after it. Genuinely + // unclosed is the case that means "still being written". + if (readDomainLiteral(cur).kind === 'unterminated') return true; + continue; + } + cur.i += 1; + } + return false; +} + +/** + * Step over `<…>`, or report that it never closes. + * + * The closing bracket is the first one *outside* a quoted string: a local + * part may hold the character, as `<"a>b"@example.com>` does, and stopping + * at that one reads the rest of a finished address as unfinished. + */ +function skipAngleAddr(cur: Cursor): boolean { + cur.i += 1; + while (cur.i < cur.src.length) { + const ch = cur.src[cur.i]; + if (ch === '"') { + if (!readQuotedString(cur)) return false; + continue; + } + cur.i += 1; + if (ch === '>') return true; + } + return false; +} diff --git a/suites-experimental/stormbox-react/src/utils/color.ts b/suites-experimental/stormbox-react/src/utils/color.ts new file mode 100644 index 000000000..0d848403a --- /dev/null +++ b/suites-experimental/stormbox-react/src/utils/color.ts @@ -0,0 +1,312 @@ +/** + * CSS colour parsing for the dark-mode email adapter (`dark-email.ts`). + * + * We parse colours ourselves: Thunderbird's `InspectorUtils` is Gecko-only, + * and `CSS.supports('color', x)` wrongly returns true for invalid values + * under happy-dom. Supports hex (3/4/6/8), `rgb()/rgba()`, `hsl()/hsla()`, + * named colours, and `transparent`; anything else (`currentColor`, + * `var(...)`, gradients, multi-token shorthands) is "not a colour". + * luminance/contrast/transparency match Thunderbird's formulas. + */ + +export interface Rgba { + r: number; + g: number; + b: number; + a: number; +} + +// Full CSS named-colour list; `transparent` is handled in parseCssColor. +const NAMED_COLORS: Record = { + aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], aqua: [0, 255, 255], + aquamarine: [127, 255, 212], azure: [240, 255, 255], beige: [245, 245, 220], + bisque: [255, 228, 196], black: [0, 0, 0], blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], blueviolet: [138, 43, 226], brown: [165, 42, 42], + burlywood: [222, 184, 135], cadetblue: [95, 158, 160], chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], coral: [255, 127, 80], cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], crimson: [220, 20, 60], cyan: [0, 255, 255], + darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], darkgreen: [0, 100, 0], darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], + darksalmon: [233, 150, 122], darkseagreen: [143, 188, 143], darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], darkslategrey: [47, 79, 79], darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], deeppink: [255, 20, 147], deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], dimgrey: [105, 105, 105], dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], floralwhite: [255, 250, 240], forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], gainsboro: [220, 220, 220], ghostwhite: [248, 248, 255], + gold: [255, 215, 0], goldenrod: [218, 165, 32], gray: [128, 128, 128], + green: [0, 128, 0], greenyellow: [173, 255, 47], grey: [128, 128, 128], + honeydew: [240, 255, 240], hotpink: [255, 105, 180], indianred: [205, 92, 92], + indigo: [75, 0, 130], ivory: [255, 255, 240], khaki: [240, 230, 140], + lavender: [230, 230, 250], lavenderblush: [255, 240, 245], lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], lightblue: [173, 216, 230], lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], lightgoldenrodyellow: [250, 250, 210], lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], lightseagreen: [32, 178, 170], lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], lightslategrey: [119, 136, 153], lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], lime: [0, 255, 0], limegreen: [50, 205, 50], + linen: [250, 240, 230], magenta: [255, 0, 255], maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], mediumblue: [0, 0, 205], mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], mediumseagreen: [60, 179, 113], mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], mediumturquoise: [72, 209, 204], mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], mintcream: [245, 255, 250], mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], navajowhite: [255, 222, 173], navy: [0, 0, 128], + oldlace: [253, 245, 230], olive: [128, 128, 0], olivedrab: [107, 142, 35], + orange: [255, 165, 0], orangered: [255, 69, 0], orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], palegreen: [152, 251, 152], paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], papayawhip: [255, 239, 213], peachpuff: [255, 218, 185], + peru: [205, 133, 63], pink: [255, 192, 203], plum: [221, 160, 221], + powderblue: [176, 224, 230], purple: [128, 0, 128], rebeccapurple: [102, 51, 153], + red: [255, 0, 0], rosybrown: [188, 143, 143], royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], salmon: [250, 128, 114], sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], seashell: [255, 245, 238], sienna: [160, 82, 45], + silver: [192, 192, 192], skyblue: [135, 206, 235], slateblue: [106, 90, 205], + slategray: [112, 128, 144], slategrey: [112, 128, 144], snow: [255, 250, 250], + springgreen: [0, 255, 127], steelblue: [70, 130, 180], tan: [210, 180, 140], + teal: [0, 128, 128], thistle: [216, 191, 216], tomato: [255, 99, 71], + turquoise: [64, 224, 208], violet: [238, 130, 238], wheat: [245, 222, 179], + white: [255, 255, 255], whitesmoke: [245, 245, 245], yellow: [255, 255, 0], + yellowgreen: [154, 205, 50], +}; + +const LUMINANCE_R = 0.2125; +const LUMINANCE_G = 0.7154; +const LUMINANCE_B = 0.0721; + +function clampByte(value: number): number { + if (Number.isNaN(value)) return 0; + return Math.max(0, Math.min(255, Math.round(value))); +} + +function clampAlpha(value: number): number { + if (Number.isNaN(value)) return 1; + return Math.max(0, Math.min(1, value)); +} + +function parseHex(input: string): Rgba | null { + const hex = input.slice(1); + if (!/^[0-9a-f]+$/i.test(hex)) return null; + if (hex.length === 3 || hex.length === 4) { + const r = parseInt(hex[0] + hex[0], 16); + const g = parseInt(hex[1] + hex[1], 16); + const b = parseInt(hex[2] + hex[2], 16); + const a = hex.length === 4 ? parseInt(hex[3] + hex[3], 16) / 255 : 1; + return { r, g, b, a }; + } + if (hex.length === 6 || hex.length === 8) { + const r = parseInt(hex.slice(0, 2), 16); + const g = parseInt(hex.slice(2, 4), 16); + const b = parseInt(hex.slice(4, 6), 16); + const a = hex.length === 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1; + return { r, g, b, a }; + } + return null; +} + +function parseChannel(token: string): number { + const trimmed = token.trim(); + if (trimmed.endsWith('%')) { + return clampByte((parseFloat(trimmed) / 100) * 255); + } + return clampByte(parseFloat(trimmed)); +} + +function parseAlpha(token: string | undefined): number { + if (token == null) return 1; + const trimmed = token.trim(); + if (trimmed === '') return 1; + if (trimmed.endsWith('%')) return clampAlpha(parseFloat(trimmed) / 100); + return clampAlpha(parseFloat(trimmed)); +} + +// Accepts both the legacy comma syntax (`rgb(1, 2, 3)`, +// `rgba(1, 2, 3, .5)`) and the modern space syntax (`rgb(1 2 3 / .5)`). +function parseRgbFunction(input: string): Rgba | null { + const open = input.indexOf('('); + if (open < 0 || !input.endsWith(')')) return null; + const body = input.slice(open + 1, -1).trim(); + const [colorPart, alphaPart] = body.includes('/') ? splitOnce(body, '/') : [body, undefined]; + const parts = colorPart.includes(',') + ? colorPart.split(',') + : colorPart.split(/\s+/).filter(Boolean); + const alphaToken = alphaPart ?? (colorPart.includes(',') && parts.length === 4 ? parts[3] : undefined); + const channels = parts.slice(0, 3); + if (channels.length < 3) return null; + return { + r: parseChannel(channels[0]), + g: parseChannel(channels[1]), + b: parseChannel(channels[2]), + a: parseAlpha(alphaToken), + }; +} + +function splitOnce(value: string, sep: string): [string, string] { + const idx = value.indexOf(sep); + return [value.slice(0, idx), value.slice(idx + 1)]; +} + +function hueToRgb(p: number, q: number, tInput: number): number { + let t = tInput; + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; + return p; +} + +function parseHslFunction(input: string): Rgba | null { + const open = input.indexOf('('); + if (open < 0 || !input.endsWith(')')) return null; + const body = input.slice(open + 1, -1).trim(); + const [colorPart, alphaPart] = body.includes('/') ? splitOnce(body, '/') : [body, undefined]; + const parts = colorPart.includes(',') + ? colorPart.split(',') + : colorPart.split(/\s+/).filter(Boolean); + if (parts.length < 3) return null; + const h = ((parseFloat(parts[0]) % 360) + 360) % 360 / 360; + const s = Math.max(0, Math.min(1, parseFloat(parts[1]) / 100)); + const l = Math.max(0, Math.min(1, parseFloat(parts[2]) / 100)); + const alphaToken = alphaPart ?? (colorPart.includes(',') ? parts[3] : undefined); + const rgb = hslToRgb(h, s, l); + return { r: rgb.r, g: rgb.g, b: rgb.b, a: parseAlpha(alphaToken) }; +} + +// Convert HSL (h, s, l all in [0, 1]) to 8-bit RGB. +function hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } { + let r: number; + let g: number; + let b: number; + if (s === 0) { + r = g = b = l; + } else { + const q = l < 0.5 ? l * (1 + s) : l + s - l * s; + const p = 2 * l - q; + r = hueToRgb(p, q, h + 1 / 3); + g = hueToRgb(p, q, h); + b = hueToRgb(p, q, h - 1 / 3); + } + return { r: clampByte(r * 255), g: clampByte(g * 255), b: clampByte(b * 255) }; +} + +// Convert 8-bit RGB to HSL (h, s, l all in [0, 1]). +function rgbToHsl({ r, g, b }: Rgba): { h: number; s: number; l: number } { + const rn = r / 255; + const gn = g / 255; + const bn = b / 255; + const max = Math.max(rn, gn, bn); + const min = Math.min(rn, gn, bn); + const l = (max + min) / 2; + const d = max - min; + if (d === 0) return { h: 0, s: 0, l }; + const s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + let h: number; + if (max === rn) h = (gn - bn) / d + (gn < bn ? 6 : 0); + else if (max === gn) h = (bn - rn) / d + 2; + else h = (rn - gn) / d + 4; + return { h: h / 6, s, l }; +} + +function toHex2(n: number): string { + return clampByte(n).toString(16).padStart(2, '0'); +} + +function rgbToHex({ r, g, b }: { r: number; g: number; b: number }): string { + return `#${toHex2(r)}${toHex2(g)}${toHex2(b)}`; +} + +/** + * Parse a CSS colour string into RGBA, or `null` when the value is not a + * standalone colour we recognise. + */ +export function parseCssColor(input: string | null | undefined): Rgba | null { + if (input == null) return null; + const value = input.trim(); + if (value === '') return null; + const lower = value.toLowerCase(); + + if (lower === 'transparent') return { r: 0, g: 0, b: 0, a: 0 }; + + if (value[0] === '#') return parseHex(value); + + if (lower.startsWith('rgb')) return parseRgbFunction(value); + if (lower.startsWith('hsl')) return parseHslFunction(value); + + const named = NAMED_COLORS[lower]; + if (named) return { r: named[0], g: named[1], b: named[2], a: 1 }; + + return null; +} + +/** Perceived luminance (0–255), Thunderbird's formula. Unparseable → 0; alpha ignored. */ +export function luminance(color: string | null | undefined): number { + const rgba = parseCssColor(color); + if (!rgba) return 0; + return LUMINANCE_R * rgba.r + LUMINANCE_G * rgba.g + LUMINANCE_B * rgba.b; +} + +/** Thunderbird-compatible contrast ratio between two colours. */ +export function contrast(a: string | null | undefined, b: string | null | undefined): number { + const la = luminance(a); + const lb = luminance(b); + const brightest = Math.max(la, lb); + const darkest = Math.min(la, lb); + return (brightest + 0.05) / (darkest + 0.05); +} + +/** A colour is transparent when its alpha is at most 0.2 (or unparseable). */ +export function isTransparent(color: string | null | undefined): boolean { + const rgba = parseCssColor(color); + if (!rgba) return true; + return rgba.a <= 0.2; +} + +/** Whether the value is a colour our parser understands. */ +export function isValidColor(color: string | null | undefined): boolean { + return parseCssColor(color) !== null; +} + +/** + * Colourfulness `max(r,g,b) - min(r,g,b)` (0–255): 0 for grey/black/white, + * high for saturated colours. Tells achromatic body text from a chromatic + * accent. Unparseable → 0. (Raw channels, since HSL saturation misleads for + * near-black colours.) + */ +export function colorChroma(color: string | null | undefined): number { + const rgba = parseCssColor(color); + if (!rgba) return 0; + return Math.max(rgba.r, rgba.g, rgba.b) - Math.min(rgba.r, rgba.g, rgba.b); +} + +/** + * Hex colour with `color`'s hue/saturation, lightened just enough to reach + * `minContrast` against `background`; the original (as hex) if it already + * passes; null if unparseable. Binary search is valid because luminance + * rises monotonically with HSL lightness. + */ +export function lightenColorForContrast( + color: string | null | undefined, + background: string, + minContrast: number, +): string | null { + const rgba = parseCssColor(color); + if (!rgba) return null; + if (contrast(rgbToHex(rgba), background) >= minContrast) return rgbToHex(rgba); + + const { h, s, l } = rgbToHsl(rgba); + let lo = l; + let hi = 0.97; + let best = hslToRgb(h, s, hi); + for (let i = 0; i < 24; i += 1) { + const mid = (lo + hi) / 2; + const candidate = hslToRgb(h, s, mid); + if (contrast(rgbToHex(candidate), background) >= minContrast) { + best = candidate; + hi = mid; + } else { + lo = mid; + } + } + return rgbToHex(best); +} diff --git a/suites-experimental/stormbox-react/src/utils/compose-quote.ts b/suites-experimental/stormbox-react/src/utils/compose-quote.ts new file mode 100644 index 000000000..a3d835b48 --- /dev/null +++ b/suites-experimental/stormbox-react/src/utils/compose-quote.ts @@ -0,0 +1,90 @@ +import { LOCALE, TIME_ZONE } from '../clock'; + +/** + * Subject prefixing and body quoting for reply and forward prefills. + * + * Who a reply is addressed to is decided in `reply.ts` from the parent's + * structured addresses. It used to be decided here, from the rendered + * header text split on commas, which could neither recognise the user's + * own addresses nor see the Cc that was never rendered into a column. + */ + +export function makeReplySubject(subject?: string | null): string { + const s = (subject ?? '').trim(); + if (/^re:/i.test(s)) return s; + return s ? `Re: ${s}` : 'Re: (no subject)'; +} + +export function makeForwardSubject(subject?: string | null): string { + const s = (subject ?? '').trim(); + if (/^fwd:/i.test(s)) return s; + return s ? `Fwd: ${s}` : 'Fwd: (no subject)'; +} + +export function formatQuotedHeader({ + from, + date, + subject, +}: { + from?: string | null; + date?: number | null; + subject?: string | null; +}): string { + const when = date + ? new Date(Number(date)).toLocaleString(LOCALE, { timeZone: TIME_ZONE }) + : ''; + const lines = [ + from ? `From: ${from}` : null, + when ? `Date: ${when}` : null, + subject ? `Subject: ${subject}` : null, + ].filter(Boolean); + return lines.join('\n'); +} + +export function buildQuotedText({ + from, + date, + subject, + text, +}: { + from?: string | null; + date?: number | null; + subject?: string | null; + text?: string | null; +}): string { + const header = formatQuotedHeader({ from, date, subject }); + const body = (text ?? '').trim(); + if (!header && !body) return ''; + if (!body) return `\n\n${header}\n`; + const quoted = body.split('\n').map((line) => `> ${line}`).join('\n'); + return `\n\n${header}\n\n${quoted}\n`; +} + +export function buildQuotedHtml({ + from, + date, + subject, + html, + text, +}: { + from?: string | null; + date?: number | null; + subject?: string | null; + html?: string | null; + text?: string | null; +}): string { + const header = formatQuotedHeader({ from, date, subject }); + const inner = (html ?? '').trim() || escapeHtml(text ?? '').replace(/\n/g, '
'); + if (!header && !inner) return ''; + const headerHtml = header.split('\n').map((line) => escapeHtml(line)).join('
'); + return `

${headerHtml}
` + + `
${inner}
`; +} + +function escapeHtml(value: string): string { + return value + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); +} diff --git a/suites-experimental/stormbox-react/src/utils/dark-email.ts b/suites-experimental/stormbox-react/src/utils/dark-email.ts new file mode 100644 index 000000000..382f79673 --- /dev/null +++ b/suites-experimental/stormbox-react/src/utils/dark-email.ts @@ -0,0 +1,295 @@ +/** + * Dark-mode adaptation for HTML email bodies, ported from Thunderbird's + * `DarkReader.mjs` (comm-central). Model: "strip, don't invert" — remove + * declared colours that aren't safe on the dark canvas so they fall back to + * the iframe's dark defaults (`buildBodyCss('dark')`), keeping colours that + * already read on dark. Never inverts pixels, so images/logos/emoji are + * untouched. Returns the input unchanged on any error. + * + * Deviations from the straight port (rationale in + * `specs/002-dark-mode-email/spec.md`): + * 1. Transform the HTML string before it becomes the srcdoc (no flash). + * 2. Detect existing dark support (meta/inline color-scheme, @media + * prefers-color-scheme: dark, filter: invert), not Thunderbird's dead + * computed-filter check. + * 3. Recurse into @media/@supports in embedded + +${body} +`; +} + +/** + * Sandbox attribute for the message-view iframe. + * + * Notably absent: `allow-scripts`. Without it the iframe document + * cannot execute any inline or external JavaScript, even if the + * sanitizer somehow misses a + diff --git a/suites-experimental/stormbox-react/dist/resources.txt b/suites-experimental/stormbox-react/dist/resources.txt index b3976c30a..6212488d9 100644 --- a/suites-experimental/stormbox-react/dist/resources.txt +++ b/suites-experimental/stormbox-react/dist/resources.txt @@ -7,7 +7,7 @@ assets/Metropolis-Light-zcEanPsD.woff2 assets/Metropolis-Regular-DKepXnDq.woff2 assets/Metropolis-SemiBold-D_dLm6Ff.woff2 assets/index-AWVjlOug.css -assets/index-DIr-gxPn.js -assets/index-DIr-gxPn.js.map +assets/index-CBEgGFb_.js +assets/index-CBEgGFb_.js.map favicon-32.png index.html diff --git a/suites-experimental/stormbox-react/src/components/FolderTree.tsx b/suites-experimental/stormbox-react/src/components/FolderTree.tsx index d6d11c448..418261351 100644 --- a/suites-experimental/stormbox-react/src/components/FolderTree.tsx +++ b/suites-experimental/stormbox-react/src/components/FolderTree.tsx @@ -11,6 +11,7 @@ import { STARRED_KEYWORD, folderCounts, isTagViewId, tagViewIdFor, tagViewKeyword, useMailStore, } from '../store/mail-store'; import { readMessageDrag, useMessageDrag } from '../hooks/useMessageDrag'; +import { RawIcon } from './base'; interface TreeNode extends Folder { depth: number; @@ -124,7 +125,7 @@ const FolderNode = memo(function FolderNode({ )} {archiveAction ? ( ) : null} {deleteAction ? ( From 019ee02edfa235454effd8893801aac616b936af Mon Sep 17 00:00:00 2001 From: Jeff Muizelaar Date: Fri, 13 Nov 2026 11:11:32 -0500 Subject: [PATCH 7/9] Stormbox-React: Import SVG icons as React components via vite-plugin-svgr Port of stormbox-react ca4a39a. Replace the `?raw` SVG imports and innerHTML injection with `?react` components. RawIcon becomes SvgIcon and takes a component instead of an HTML string; it keeps the same aria-hidden wrapper span so the existing CSS (which styles the inner [fill="context-fill"] / [fill="context-stroke"] paths) still applies. SVGR is run without SVGO, so all attributes survive. This changes the DOM work done per icon (React element creation instead of one innerHTML parse), so Stormbox-React results are not comparable across this commit. --- .../dist/assets/index-CBEgGFb_.js | 234 ---- .../dist/assets/index-CBEgGFb_.js.map | 1 - .../dist/assets/index-D2S-P1q-.js | 120 ++ .../dist/assets/index-D2S-P1q-.js.map | 1 + .../stormbox-react/dist/index.html | 2 +- .../stormbox-react/dist/resources.txt | 4 +- .../stormbox-react/package-lock.json | 1105 ++++++++++++++++- .../stormbox-react/package.json | 3 +- .../stormbox-react/src/App.tsx | 6 +- .../src/components/FolderTree.tsx | 8 +- .../src/components/ListHeader.tsx | 26 +- .../src/components/MessageList.tsx | 2 +- .../src/components/MessageListRow.tsx | 6 +- .../src/components/MessageView.tsx | 22 +- .../stormbox-react/src/components/Shell.tsx | 16 +- .../stormbox-react/src/components/base.tsx | 11 +- .../stormbox-react/src/types.ts | 5 + .../src/utils/folder-presentation.ts | 30 +- .../stormbox-react/src/vite-env.d.ts | 1 + .../stormbox-react/vite.config.ts | 3 +- 20 files changed, 1273 insertions(+), 333 deletions(-) delete mode 100644 suites-experimental/stormbox-react/dist/assets/index-CBEgGFb_.js delete mode 100644 suites-experimental/stormbox-react/dist/assets/index-CBEgGFb_.js.map create mode 100644 suites-experimental/stormbox-react/dist/assets/index-D2S-P1q-.js create mode 100644 suites-experimental/stormbox-react/dist/assets/index-D2S-P1q-.js.map diff --git a/suites-experimental/stormbox-react/dist/assets/index-CBEgGFb_.js b/suites-experimental/stormbox-react/dist/assets/index-CBEgGFb_.js deleted file mode 100644 index 9443b98d4..000000000 --- a/suites-experimental/stormbox-react/dist/assets/index-CBEgGFb_.js +++ /dev/null @@ -1,234 +0,0 @@ -var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),l=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,ee());else{var t=n(l);t!==null&&te(x,t.startTime-e)}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&te(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?ee():S=!1}}}var ee;if(typeof y==`function`)ee=function(){y(D)};else if(typeof MessageChannel<`u`){var O=new MessageChannel,k=O.port2;O.port1.onmessage=D,ee=function(){k.postMessage(null)}}else ee=function(){_(D,0)};function te(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,te(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,ee()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),u=o(((e,t)=>{t.exports=l()})),d=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function x(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var S=x.prototype=new b;S.constructor=x,_(S,y.prototype),S.isPureReactComponent=!0;var C=Array.isArray;function w(){}var T={H:null,A:null,T:null,S:null},E=Object.prototype.hasOwnProperty;function D(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ee(e,t){return D(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var te=/\/+/g;function A(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function ne(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(w,w):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function re(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,re(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+A(e,0):a,C(o)?(i=``,c!=null&&(i=c.replace(te,`$&/`)+`/`),re(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=ee(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(te,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(C(e))for(var u=0;u{t.exports=d()})),p=o((e=>{var t=f();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=p()})),h=o((e=>{var t=u(),n=f(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1be||(e.current=ye[be],ye[be]=null,be--)}function F(e,t){be++,ye[be]=e.current,e.current=t}var Ce=xe(null),we=xe(null),Te=xe(null),Ee=xe(null);function De(e,t){switch(F(Te,t),F(we,e),F(Ce,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?up(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=up(t),e=dp(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}Se(Ce),F(Ce,e)}function Oe(){Se(Ce),Se(we),Se(Te)}function ke(e){var t=e.memoizedState;t!==null&&(sh._currentValue=t.memoizedState,F(Ee,e)),t=Ce.current;var n=dp(t,e.type);t!==n&&(F(we,e),F(Ce,n))}function Ae(e){we.current===e&&(Se(Ce),Se(we)),Ee.current===e&&(Se(Ee),sh._currentValue=ve)}var je,Me;function Ne(e){if(je===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);je=t&&t[1]||``,Me=-1)`:-1i||c[r]!==l[i]){var u=` -`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Pe=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Ne(n):``}function Ie(e,t){switch(e.tag){case 26:case 27:case 5:return Ne(e.type);case 16:return Ne(`Lazy`);case 13:return e.child!==t&&t!==null?Ne(`Suspense Fallback`):Ne(`Suspense`);case 19:return Ne(`SuspenseList`);case 0:case 15:return Fe(e.type,!1);case 11:return Fe(e.type.render,!1);case 1:return Fe(e.type,!0);case 31:return Ne(`Activity`);case 30:return Ne(`ViewTransition`);default:return``}}function Le(e){try{var t=``,n=null;do t+=Ie(e,n),n=e,e=e.return;while(e);return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}var Re=Object.prototype.hasOwnProperty,ze=t.unstable_scheduleCallback,Be=t.unstable_cancelCallback,Ve=t.unstable_shouldYield,He=t.unstable_requestPaint,Ue=t.unstable_now,We=t.unstable_getCurrentPriorityLevel,Ge=t.unstable_ImmediatePriority,Ke=t.unstable_UserBlockingPriority,qe=t.unstable_NormalPriority,Je=t.unstable_LowPriority,Ye=t.unstable_IdlePriority,Xe=t.log,Ze=t.unstable_setDisableYieldValue,Qe=null,$e=null;function et(e){if(typeof Xe==`function`&&Ze(e),$e&&typeof $e.setStrictMode==`function`)try{$e.setStrictMode(Qe,e)}catch{}}var I=Math.clz32?Math.clz32:nt,L=Math.log,tt=Math.LN2;function nt(e){return e>>>=0,e===0?32:31-(L(e)/tt|0)|0}var rt=256,it=262144,at=4194304;function ot(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function st(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=ot(n))):i=ot(o):i=ot(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=ot(n))):i=ot(o)):i=ot(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function ct(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function lt(e,t){t&8&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0n;n++)t.push(e);return t}function pt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function mt(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),On=!1;if(Dn)try{var kn={};Object.defineProperty(kn,"passive",{get:function(){On=!0}}),window.addEventListener(`test`,kn,kn),window.removeEventListener(`test`,kn,kn)}catch{On=!1}var An=null,jn=null,Mn=null;function Nn(){if(Mn)return Mn;var e,t=jn,n=t.length,r,i=`value`in An?An.value:An.textContent,a=i.length;for(e=0;e=fr),hr=` `,gr=!1;function _r(e,t){switch(e){case`keyup`:return ur.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function vr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var yr=!1;function br(e,t){switch(e){case`compositionend`:return vr(t);case`keypress`:return t.which===32?(gr=!0,hr):null;case`textInput`:return e=t.data,e===hr&&gr?null:e;default:return null}}function xr(e,t){if(yr)return e===`compositionend`||!dr&&_r(e,t)?(e=Nn(),Mn=jn=An=null,yr=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Ur(n)}}function Gr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Gr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Kr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Hr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Hr(e.document)}return t}function qr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Jr=Dn&&`documentMode`in document&&11>=document.documentMode,Yr=null,Xr=null,Zr=null,Qr=!1;function $r(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Qr||Yr==null||Yr!==Hr(r)||(r=Yr,`selectionStart`in r&&qr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Zr&&Vr(Zr,r)||(Zr=r,r=qf(Xr,`onSelect`),0>=o,i-=o,Yi=1<<32-I(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),V&&Zi(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),V&&Zi(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return V&&Zi(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&(_=v.alternate,_!==null&&h.delete(_.key===null?g:_.key)),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),V&&Zi(a,g),u}function _(e,r,o,c){if(typeof o==`object`&&o&&o.type===te&&o.key===null&&o.props.ref===void 0&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case O:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===te){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),so(c,o),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===ce&&eo(l)===r.type){n(e,r.sibling),c=a(r,o.props),so(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===te?(c=Ii(o.props.children,e.mode,c,o.key),so(c,o),c.return=e,e=c):(c=Fi(o.type,o.key,o.props,null,e.mode,c),so(c,o),c.return=e,e=c)}return s(e);case k:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=zi(o,e.mode,c),c.return=e,e=c}return s(e);case ce:return o=eo(o),_(e,r,o,c)}if(_e(o))return h(e,r,o,c);if(me(o)){if(l=me(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return _(e,r,oo(o),c);if(o.$$typeof===ie)return _(e,r,Ta(e,o),c);co(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=Li(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{ao=0;var i=_(e,t,n,r);return io=null,i}catch(t){if(t===Ja||t===Xa)throw t;var a=ji(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var uo=lo(!0),fo=lo(!1),po=!1;function mo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function ho(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function go(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function _o(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Zu&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=Oi(e),Di(e,null,n),t}return wi(e,r,t,n),Oi(e)}function vo(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,gt(e,n)}}function yo(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var bo=!1;function xo(){if(bo){var e=za;if(e!==null)throw e}}function So(e,t,n,r){bo=!1;var i=e.updateQueue;po=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(X&f)===f:(r&f)===f){f!==0&&f===Ra&&(bo=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,h=s;f=t;var g=n;switch(h.tag){case 1:if(m=h.payload,typeof m==`function`){d=m.call(g,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=h.payload,f=typeof m==`function`?m.call(g,d,f):m,f==null)break a;d=D({},d,f);break a;case 2:po=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),ad|=o,e.lanes=o,e.memoizedState=d}}function Co(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function wo(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=N.T,s={};s.types=o===null?null:o.types,N.T=s,lc(e,!1,t,n);try{var c=i(),l=N.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?cc(e,t,Ha(c,r),kd(e)):cc(e,t,r,kd(e))}catch(n){cc(e,t,{then:function(){},status:`rejected`,reason:n},kd())}finally{P.p=a,o!==null&&s.types!==null&&(o.types=s.types),N.T=o}}function Qs(){}function $s(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=ec(e).queue;Zs(e,a,t,ve,n===null?Qs:function(){return tc(e),n(r)})}function ec(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ve,baseState:ve,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:us,lastRenderedState:ve},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:us,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function tc(e){var t=ec(e);t.next===null&&(t=e.alternate.memoizedState),cc(e,t.next.queue,{},kd())}function nc(){return wa(sh)}function rc(){return as().memoizedState}function ic(){return as().memoizedState}function ac(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=kd();e=go(n);var r=_o(t,e,n);r!==null&&(Md(r,t,n),vo(r,t,n)),t={cache:ja()},e.payload=t;return}t=t.return}}function oc(e,t,n){var r=kd();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},uc(e)?dc(t,n):(n=Ti(e,t,n,r),n!==null&&(Md(n,e,r),fc(n,t,r)))}function sc(e,t,n){cc(e,t,n,kd())}function cc(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(uc(e))dc(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Br(s,o))return wi(e,t,i,0),Qu===null&&Ci(),!1}catch{}if(n=Ti(e,t,i,r),n!==null)return Md(n,e,r),fc(n,t,r),!0}return!1}function lc(e,t,n,r){if(r={lane:2,revertLane:Nf(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},uc(e)){if(t)throw Error(i(479))}else t=Ti(e,n,r,2),t!==null&&Md(t,e,2)}function uc(e){var t=e.alternate;return e===U||t!==null&&t===U}function dc(e,t){Uo=Ho=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function fc(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,gt(e,n)}}var pc={readContext:wa,use:cs,useCallback:Yo,useContext:Yo,useEffect:Yo,useImperativeHandle:Yo,useLayoutEffect:Yo,useInsertionEffect:Yo,useMemo:Yo,useReducer:Yo,useRef:Yo,useState:Yo,useDebugValue:Yo,useDeferredValue:Yo,useTransition:Yo,useSyncExternalStore:Yo,useId:Yo,useHostTransitionStatus:Yo,useFormState:Yo,useActionState:Yo,useOptimistic:Yo,useMemoCache:Yo,useCacheRefresh:Yo,useEffectEvent:Yo},mc={readContext:wa,use:cs,useCallback:function(e,t){return is().memoizedState=[e,t===void 0?null:t],e},useContext:wa,useEffect:Rs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),Is(4194308,4,Ws.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Is(4194308,4,e,t)},useInsertionEffect:function(e,t){Is(4,2,e,t)},useMemo:function(e,t){var n=is();t=t===void 0?null:t;var r=e();if(Wo){et(!0);try{e()}finally{et(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=is();if(n!==void 0){var i=n(t);if(Wo){et(!0);try{n(t)}finally{et(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=oc.bind(null,U,e),[r.memoizedState,e]},useRef:function(e){var t=is();return e={current:e},t.memoizedState=e},useState:function(e){e=bs(e);var t=e.queue,n=sc.bind(null,U,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ks,useDeferredValue:function(e,t){return Ys(is(),e,t)},useTransition:function(){var e=bs(!1);return e=Zs.bind(null,U,e.queue,!0,!1),is().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=U,a=is();if(V){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Qu===null)throw Error(i(349));X&127||hs(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,Rs(_s.bind(null,r,o,e),[e]),r.flags|=2048,Ps(9,{destroy:void 0},gs.bind(null,r,o,n,t),null),n},useId:function(){var e=is(),t=Qu.identifierPrefix;if(V){var n=Xi,r=Yi;n=(r&~(1<<32-I(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=Go++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[Ct]=t,o[wt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(np(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&ul(t)}}return hl(t),t.subtreeFlags&=-33554433,dl(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&ul(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=Te.current,ua(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=na,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[Ct]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||$f(e.nodeValue,n)),e||sa(t,!0)}else e=lp(e).createTextNode(r),e[Ct]=t,t.stateNode=e}return hl(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=ua(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[Ct]=t}else da(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;hl(t),e=!1}else n=fa(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Fo(t),t):(Fo(t),null);if(t.flags&128)throw Error(i(558))}return hl(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=ua(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[Ct]=t}else da(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;hl(t),a=!1}else a=fa(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(Fo(t),t):(Fo(t),null)}return Fo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),pl(t,t.updateQueue),hl(t),null);case 4:return Oe(),e===null&&Uf(t.stateNode.containerInfo),t.flags|=67108864,hl(t),null;case 10:return va(t.type),hl(t),null;case 19:if(Ro(t),r=t.memoizedState,r===null)return hl(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)ml(r,!1);else{if(Z!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=zo(e),o!==null){for(t.flags|=128,ml(r,!1),e=o.updateQueue,t.updateQueue=e,pl(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Pi(n,e),n=n.sibling;return Lo(t,Io.current&1|2),V&&Zi(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ue()>md&&(t.flags|=128,a=!0,ml(r,!1),t.lanes=4194304)}else{if(!a)if(e=zo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,pl(t,e),ml(r,!0),r.tail===null&&r.tailMode!==`collapsed`&&r.tailMode!==`visible`&&!o.alternate&&!V)return hl(t),null}else 2*Ue()-r.renderingStartTime>md&&n!==536870912&&(t.flags|=128,a=!0,ml(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}if(r.tail!==null){e=r.tail;a:{for(n=e;n!==null;){if(n.alternate!==null){n=!1;break a}n=n.sibling}n=!0}return r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ue(),e.sibling=null,o=Io.current,o=a?o&1|2:o&1,r.tailMode===`visible`||r.tailMode===`collapsed`||!n||V?Lo(t,o):(n=o,F(ko,t),F(Io,n),Ao===null&&(Ao=t)),V&&Zi(t,r.treeForkCount),e}return hl(t),null;case 22:case 23:return Fo(t),Oo(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(hl(t),t.subtreeFlags&6&&(t.flags|=8192)):hl(t),n=t.updateQueue,n!==null&&pl(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&Se(Wa),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),va(Aa),hl(t),null;case 25:return null;case 30:return t.flags|=33554432,hl(t),null}throw Error(i(156,t.tag))}function _l(e,t){switch(ea(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return va(Aa),Oe(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Ae(t),null;case 31:if(t.memoizedState!==null){if(Fo(t),t.alternate===null)throw Error(i(340));da()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Fo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));da()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ro(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return Oe(),null;case 10:return va(t.type),null;case 22:case 23:return Fo(t),Oo(),e!==null&&Se(Wa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return va(Aa),null;case 25:return null;default:return null}}function vl(e,t){switch(ea(t),t.tag){case 3:va(Aa),Oe();break;case 26:case 27:case 5:Ae(t);break;case 4:Oe();break;case 31:t.memoizedState!==null&&Fo(t);break;case 13:Fo(t);break;case 19:Ro(t);break;case 10:va(t.type);break;case 22:case 23:Fo(t),Oo(),e!==null&&Se(Wa);break;case 24:va(Aa)}}function yl(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){ff(t,t.return,e)}}function bl(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){ff(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){ff(t,t.return,e)}}function xl(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{wo(t,n)}catch(t){ff(e,e.return,t)}}}function Sl(e,t,n){n.props=xc(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){ff(e,t,n)}}function Cl(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:var i=e.stateNode,a=gi(e.memoizedProps,i);(i.ref===null||i.ref.name!==a)&&(i.ref=Pp(a)),r=i.ref;break;case 7:if(e.stateNode===null){var o=new Fp(e);h(e.child,!1,Qp,o,void 0,void 0),e.stateNode=o}r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){ff(e,t,n)}}function wl(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){ff(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){ff(e,t,n)}else n.current=null}function Tl(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var n=0;n title`))),np(r,t,n),r[Ct]=e,Lt(r),t=r;break a;case`link`:if(o=Gm(`link`,`href`,a).get(t+(n.href||``))){for(s=0;sg&&(o=g,g=h,h=o);var _=Wr(s,h),v=Wr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,N.T=null,n=Sd,Sd=null;var o=vd,s=bd;if(_d=0,yd=vd=null,bd=0,Zu&6)throw Error(i(331));var c=Zu;if(Zu|=4,Ku(o.current),Ru(o,o.current,s,n),Zu=c,Ef(0,!1),$e&&typeof $e.onPostCommitFiberRoot==`function`)try{$e.onPostCommitFiberRoot(Qe,o)}catch{}return!0}finally{P.p=a,N.T=r,cf(e,t)}}function df(e,t,n){t=Vi(n,t),t=G(e.stateNode,t,2),e=_o(e,t,2),e!==null&&(pt(e,2),Tf(e))}function ff(e,t,n){if(e.tag===3)df(e,e,n);else for(;t!==null;){if(t.tag===3){df(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(gd===null||!gd.has(r))){e=Vi(n,e),n=Dc(2),r=_o(t,n,2),r!==null&&(Oc(n,r,t,e),pt(r,2),Tf(r));break}}t=t.return}}function pf(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Xu;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(rd=!0,i.add(n),e=mf.bind(null,e,t,n),t.then(e,e))}function mf(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Qu===e&&(X&n)===n&&(Z===4||Z===3&&(X&62914560)===X&&300>Ue()-fd?Zu&2?Q|=n:zd(e,0):Q|=n,cd===X&&(cd=0)),Tf(e)}function hf(e,t){t===0&&(t=dt()),e=Ei(e,t),e!==null&&(pt(e,t),Tf(e))}function gf(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),hf(e,n)}function _f(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),hf(e,n)}function vf(e,t){return ze(e,t)}var yf=null,bf=null,xf=!1,Sf=!1,Cf=!1,wf=0;function Tf(e){e!==bf&&e.next===null&&(bf===null?yf=bf=e:bf=bf.next=e),Sf=!0,xf||(xf=!0,Mf())}function Ef(e,t){if(!Cf&&Sf){Cf=!0;do for(var n=!1,r=yf;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-I(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,jf(r,a))}else a=X,a=st(r,r===Qu?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||ct(r,a)||(n=!0,jf(r,a));r=r.next}while(n);Cf=!1}}function Df(){Of()}function Of(){Sf=xf=!1;var e=0;wf!==0&&hp()&&(e=wf);for(var t=Ue(),n=null,r=yf;r!==null;){var i=r.next,a=kf(r,t);a===0?(r.next=null,n===null?yf=i:n.next=i,i===null&&(bf=n)):(n=r,(e!==0||a&3)&&(Sf=!0)),r=i}_d!==0&&_d!==5||Ef(e,!1),wf!==0&&(wf=0)}function kf(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&ap(d)&&(c=c.responseEnd,o+=u*(c$m){s.length=o;break}f=new Promise(jp.bind(f)),s.push(f)}}}if(0`u`?null:document;function Tm(e,t,n){var r=wm;if(r&&typeof t==`string`&&t){var i=rn(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),ym.has(i)||(ym.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),np(t,`link`,e),Lt(t),r.head.appendChild(t)))}}function Em(e){xm.D(e),Tm(`dns-prefetch`,e,null)}function Dm(e,t){xm.C(e,t),Tm(`preconnect`,e,t)}function Om(e,t,n){xm.L(e,t,n);var r=wm;if(r&&e&&t){var i=`link[rel="preload"][as="`+rn(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+rn(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+rn(n.imageSizes)+`"]`)):i+=`[href="`+rn(e)+`"]`;var a=i;switch(t){case`style`:a=Pm(e);break;case`script`:a=Rm(e)}if(!(vm.has(a)||(e=D({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Fm(a))||t===`script`&&r.querySelector(zm(a))))){var o=r.createElement(`link`);np(o,`link`,e),t===`style`&&(o[jt]=!0,o.onload=o.onerror=function(){Rt(o)}),Lt(o),r.head.appendChild(o)}}}function km(e,t){xm.m(e,t);var n=wm;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+rn(r)+`"][href="`+rn(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rm(e)}if(!vm.has(a)&&(e=D({rel:`modulepreload`,href:e},t),vm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zm(a)))return}r=n.createElement(`link`),np(r,`link`,e),Lt(r),n.head.appendChild(r)}}}function Am(e,t,n){xm.S(e,t,n);var r=wm;if(r&&e){var i=It(r).hoistableStyles,a=Pm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Fm(a)))s.loading=5;else{e=D({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vm.get(a))&&Hm(e,n);var c=o=r.createElement(`link`);Lt(c),np(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jm(e,t){xm.X(e,t);var n=wm;if(n&&e){var r=It(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=D({src:e,async:!0},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Lt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mm(e,t){xm.M(e,t);var n=wm;if(n&&e){var r=It(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=D({src:e,async:!0,type:`module`},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Lt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nm(e,t,n,r){var a=(a=Te.current)?bm(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Pm(n.href),t=It(a).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pm(n.href);var o=It(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Fm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=vm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vm.set(e,o)),Lm(a,e,o,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Rm(n),t=It(a).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Pm(e){return`href="`+rn(e)+`"`}function Fm(e){return`link[rel="stylesheet"][`+e+`]`}function Im(e){return D({},e,{"data-precedence":e.precedence,precedence:null})}function Lm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[jt]){r.loading=1;return}}else t=e.createElement(`link`),t[jt]=!0,t.onload=t.onerror=Rt.bind(null,t),np(t,`link`,n),Lt(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Rm(e){return`[src="`+rn(e)+`"]`}function zm(e){return`script[async]`+e}function Bm(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+rn(n.href)+`"]`);if(r)return t.instance=r,Lt(r),r;var a=D({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Lt(r),np(r,`style`,a),Vm(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Pm(n.href);var o=e.querySelector(Fm(a));if(o)return t.state.loading|=4,t.instance=o,Lt(o),o;r=Im(n),(a=vm.get(a))&&Hm(r,a),o=(e.ownerDocument||e).createElement(`link`),Lt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),np(o,`link`,r),t.state.loading|=4,Vm(o,n.precedence,e),t.instance=o;case`script`:return o=Rm(n.src),(a=e.querySelector(zm(o)))?(t.instance=a,Lt(a),a):(r=n,(a=vm.get(o))&&(r=D({},n),Um(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),Lt(a),np(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vm(r,n.precedence,e));return t.instance}function Vm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function qm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Ym(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Xm(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function Zm(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=Xm(t),e.suspenseyImages.push(t)),e=rh.bind(e),t.decode().then(e,e))}function Qm(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pm(r.href),a=t.querySelector(Fm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=nh.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Lt(a);return}a=t.ownerDocument||t,r=Im(r),(i=vm.get(i))&&Hm(r,i),a=a.createElement(`link`),Lt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),np(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=nh.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var $m=0;function eh(e,t){return e.stylesheets&&e.count===0&&ah(e,e.stylesheets),0$m?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function th(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ah(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function nh(){this.count--,th(this)}function rh(){this.imgCount--,th(this)}var ih=null;function ah(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ih=new Map,t.forEach(oh,e),ih=null,nh.call(e))}function oh(e,t){if(!(t.state.loading&4)){var n=ih.get(e);if(n)var r=n.get(null);else{n=new Map,ih.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=h()})),_=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),v=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),y=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),b=e=>{let t=y(e);return t.charAt(0).toUpperCase()+t.slice(1)},x={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},S=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},C=c(f(),1),w=(0,C.createContext)({}),T=()=>(0,C.useContext)(w),E=(0,C.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=T()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,C.createElement)(`svg`,{ref:c,...x,width:t??l??x.width,height:t??l??x.height,stroke:e??f,strokeWidth:m,className:_(`lucide`,p,i),...!a&&!S(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,C.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),D=(e,t)=>{let n=(0,C.forwardRef)(({className:n,...r},i)=>(0,C.createElement)(E,{ref:i,iconNode:t,className:_(`lucide-${v(b(e))}`,`lucide-${e}`,n),...r}));return n.displayName=b(e),n},ee=D(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),O=D(`bold`,[[`path`,{d:`M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8`,key:`mg9rjx`}]]),k=D(`bug`,[[`path`,{d:`M12 20v-9`,key:`1qisl0`}],[`path`,{d:`M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z`,key:`uouzyp`}],[`path`,{d:`M14.12 3.88 16 2`,key:`qol33r`}],[`path`,{d:`M21 21a4 4 0 0 0-3.81-4`,key:`1b0z45`}],[`path`,{d:`M21 5a4 4 0 0 1-3.55 3.97`,key:`5cxbf6`}],[`path`,{d:`M22 13h-4`,key:`1jl80f`}],[`path`,{d:`M3 21a4 4 0 0 1 3.81-4`,key:`1fjd4g`}],[`path`,{d:`M3 5a4 4 0 0 0 3.55 3.97`,key:`1d7oge`}],[`path`,{d:`M6 13H2`,key:`82j7cp`}],[`path`,{d:`m8 2 1.88 1.88`,key:`fmnt4t`}],[`path`,{d:`M9 7.13V6a3 3 0 1 1 6 0v1.13`,key:`1vgav8`}]]),te=D(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),A=D(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),ne=D(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),re=D(`circle-user-round`,[[`path`,{d:`M17.925 20.056a6 6 0 0 0-11.851.001`,key:`z69sun`}],[`circle`,{cx:`12`,cy:`11`,r:`4`,key:`1gt34v`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),ie=D(`circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),ae=D(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]),oe=D(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),se=D(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),j=D(`expand`,[[`path`,{d:`m15 15 6 6`,key:`1s409w`}],[`path`,{d:`m15 9 6-6`,key:`ko1vev`}],[`path`,{d:`M21 16v5h-5`,key:`1ck2sf`}],[`path`,{d:`M21 8V3h-5`,key:`1qoq8a`}],[`path`,{d:`M3 16v5h5`,key:`1t08am`}],[`path`,{d:`m3 21 6-6`,key:`wwnumi`}],[`path`,{d:`M3 8V3h5`,key:`1ln10m`}],[`path`,{d:`M9 9 3 3`,key:`v551iv`}]]),ce=D(`grip`,[[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`19`,cy:`5`,r:`1`,key:`w8mnmm`}],[`circle`,{cx:`5`,cy:`5`,r:`1`,key:`lttvr7`}],[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}],[`circle`,{cx:`19`,cy:`19`,r:`1`,key:`shf9b7`}],[`circle`,{cx:`5`,cy:`19`,r:`1`,key:`bfqh0e`}]]),M=D(`highlighter`,[[`path`,{d:`m9 11-6 6v3h9l3-3`,key:`1a3l36`}],[`path`,{d:`m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4`,key:`14a9rk`}]]),le=D(`image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),ue=D(`italic`,[[`line`,{x1:`19`,x2:`10`,y1:`4`,y2:`4`,key:`15jd3p`}],[`line`,{x1:`14`,x2:`5`,y1:`20`,y2:`20`,key:`bu0au3`}],[`line`,{x1:`15`,x2:`9`,y1:`4`,y2:`20`,key:`uljnxc`}]]),de=D(`lightbulb`,[[`path`,{d:`M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5`,key:`1gvzjb`}],[`path`,{d:`M9 18h6`,key:`x1upvd`}],[`path`,{d:`M10 22h4`,key:`ceow96`}]]),fe=D(`link`,[[`path`,{d:`M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71`,key:`1cjeqo`}],[`path`,{d:`M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71`,key:`19qd67`}]]),pe=D(`list-ordered`,[[`path`,{d:`M11 5h10`,key:`1cz7ny`}],[`path`,{d:`M11 12h10`,key:`1438ji`}],[`path`,{d:`M11 19h10`,key:`11t30w`}],[`path`,{d:`M4 4h1v5`,key:`10yrso`}],[`path`,{d:`M4 9h2`,key:`r1h2o0`}],[`path`,{d:`M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02`,key:`xtkcd5`}]]),me=D(`list`,[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]),he=D(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),ge=D(`mail-open`,[[`path`,{d:`M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z`,key:`1jhwl8`}],[`path`,{d:`m22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10`,key:`1qfld7`}]]),_e=D(`mail`,[[`path`,{d:`m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7`,key:`132q7q`}],[`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`,key:`izxlao`}]]),N=D(`minus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}]]),P=D(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),ve=D(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),ye=D(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),be=D(`quote`,[[`path`,{d:`M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z`,key:`rib7q0`}],[`path`,{d:`M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z`,key:`1ymkrd`}]]),xe=D(`redo-2`,[[`path`,{d:`m15 14 5-5-5-5`,key:`12vg1m`}],[`path`,{d:`M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13`,key:`6uklza`}]]),Se=D(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),F=D(`remove-formatting`,[[`path`,{d:`M4 7V4h16v3`,key:`9msm58`}],[`path`,{d:`M5 20h6`,key:`1h6pxn`}],[`path`,{d:`M13 4 8 20`,key:`kqq6aj`}],[`path`,{d:`m15 15 5 5`,key:`me55sn`}],[`path`,{d:`m20 15-5 5`,key:`11p7ol`}]]),Ce=D(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),we=D(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),Te=D(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),Ee=D(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),De=D(`shrink`,[[`path`,{d:`m15 15 6 6m-6-6v4.8m0-4.8h4.8`,key:`17vawe`}],[`path`,{d:`M9 19.8V15m0 0H4.2M9 15l-6 6`,key:`chjx8e`}],[`path`,{d:`M15 4.2V9m0 0h4.8M15 9l6-6`,key:`lav6yq`}],[`path`,{d:`M9 4.2V9m0 0H4.2M9 9 3 3`,key:`1pxi2q`}]]),Oe=D(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),ke=D(`strikethrough`,[[`path`,{d:`M16 4H9a3 3 0 0 0-2.83 4`,key:`43sutm`}],[`path`,{d:`M14 12a4 4 0 0 1 0 8H6`,key:`nlfj13`}],[`line`,{x1:`4`,x2:`20`,y1:`12`,y2:`12`,key:`1e0a9i`}]]),Ae=D(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),je=D(`tag`,[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`,key:`vktsd0`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`kqv944`}]]),Me=D(`text-align-end`,[[`path`,{d:`M21 5H3`,key:`1fi0y6`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M21 19H7`,key:`4cu937`}]]),Ne=D(`text-align-center`,[[`path`,{d:`M21 5H3`,key:`1fi0y6`}],[`path`,{d:`M17 12H7`,key:`16if0g`}],[`path`,{d:`M19 19H5`,key:`vjpgq2`}]]),Pe=D(`text-align-justify`,[[`path`,{d:`M3 5h18`,key:`1u36vt`}],[`path`,{d:`M3 12h18`,key:`1i2n21`}],[`path`,{d:`M3 19h18`,key:`awlh7x`}]]),Fe=D(`text-align-start`,[[`path`,{d:`M21 5H3`,key:`1fi0y6`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M17 19H3`,key:`z6ezky`}]]),Ie=D(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),Le=D(`underline`,[[`path`,{d:`M6 4v6a6 6 0 0 0 12 0V4`,key:`9kb039`}],[`line`,{x1:`4`,x2:`20`,y1:`20`,y2:`20`,key:`nun2al`}]]),Re=D(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]),ze=D(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),Be=D(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),Ve=g(),He=` - - - - - - -`,Ue=`Aisha.Ben.Carmen.Daniel.Elena.Farid.Grace.Hiro.Ines.Jonas.Kavya.Liam.Maya.Noah.Olga.Pablo.Quinn.Rosa.Samir.Tara.Umar.Vera.Wei.Ximena.Yusuf.Zoe.Amara.Bruno.Chloe.Dmitri.Esther.Felix.Gabriela.Hassan.Isla.Jakub.Keiko.Lucas.Mei.Nadia.Oscar.Priya.Rafael.Sofia.Tomas.Uma.Viktor.Wanjiru.Yara.Zain.Anders.Beatriz.Cyrus.Delia.Emeka.Freya.Gustavo.Helga.Ivan.Julia.Kofi.Leila.Marco.Nina.Omar.Paula.Ravi.Selin.Theo.Valentina`.split(`.`),We=`Abara.Bergström.Castillo.Dubois.Eriksen.Fischer.García.Haddad.Ito.Jansen.Kowalski.Lindqvist.Moreau.Nakamura.Okafor.Petrov.Quintero.Rossi.Schmidt.Tanaka.Usman.Varga.Wójcik.Xu.Yilmaz.Zhang.Andersson.Bianchi.Chen.Da Silva.Eze.Fontaine.Gupta.Horvath.Ivanova.Jensen.Kim.Laurent.Müller.Novak.O'Brien.Patel.Reyes.Sato.Torres.Uddin.Volkov.Weber.Yamamoto.Zielinski.Achebe.Brennan.Costa.Delgado.Engel.Ferreira.Grünewald.Huang.Iyer.Kaur`.split(`.`),Ge=[{name:`Northwind`,domain:`northwind.example`},{name:`Contoso`,domain:`contoso.example`},{name:`Fabrikam`,domain:`fabrikam.example`},{name:`Tailspin Labs`,domain:`tailspin.example`},{name:`Wingtip`,domain:`wingtip.example`},{name:`Lakeshore Health`,domain:`lakeshore.example`},{name:`Adatum`,domain:`adatum.example`},{name:`Litware`,domain:`litware.example`},{name:`Proseware`,domain:`proseware.example`},{name:`Coho Vineyard`,domain:`cohovineyard.example`},{name:`Blue Yonder Air`,domain:`blueyonder.example`},{name:`Trey Research`,domain:`treyresearch.example`},{name:`Woodgrove Bank`,domain:`woodgrove.example`},{name:`Alpine Ski House`,domain:`alpineskihouse.example`},{name:`Graphic Design Institute`,domain:`gdi.example`},{name:`Humongous Insurance`,domain:`humongous.example`},{name:`Margie Travel`,domain:`margietravel.example`},{name:`Relecloud`,domain:`relecloud.example`},{name:`Southridge Video`,domain:`southridge.example`},{name:`Wide World Importers`,domain:`wideworld.example`}],Ke=[`mail.example`,`post.example`,`inbox.example`,`fastpost.example`],qe=[{name:`Web Platform Weekly`,email:`digest@webplatform.example`,color:`#1f6feb`},{name:`The Render Loop`,email:`hello@renderloop.example`,color:`#d1495b`},{name:`Systems Digest`,email:`news@systemsdigest.example`,color:`#2a9d8f`},{name:`Contoso Cloud`,email:`updates@contoso.example`,color:`#5a4fcf`},{name:`Blue Yonder Air`,email:`offers@blueyonder.example`,color:`#0077b6`},{name:`Margie Travel`,email:`deals@margietravel.example`,color:`#f4a261`},{name:`Wide World Importers`,email:`shop@wideworld.example`,color:`#e76f51`},{name:`Coho Vineyard`,email:`club@cohovineyard.example`,color:`#7b2d26`},{name:`Open Source Monthly`,email:`editors@osmonthly.example`,color:`#264653`},{name:`Alpine Ski House`,email:`news@alpineskihouse.example`,color:`#118ab2`},{name:`Graphic Design Institute`,email:`courses@gdi.example`,color:`#ef476f`},{name:`Relecloud Status`,email:`status@relecloud.example`,color:`#3d405b`}],Je=[{name:`Forge`,email:`notifications@forge.example`},{name:`Bugtrack`,email:`bugmail@bugtrack.example`},{name:`CI Bot`,email:`ci@builds.example`},{name:`Calendar`,email:`calendar-noreply@calendar.example`},{name:`Woodgrove Bank`,email:`alerts@woodgrove.example`},{name:`Shipping Updates`,email:`track@parcels.example`}],Ye=`the.a.we.our.team.should.could.will.can.need.to.review.update.plan.release.branch.schedule.meeting.notes.draft.proposal.budget.design.feedback.deadline.next.week.today.tomorrow.quarter.roadmap.migration.cache.layout.performance.regression.benchmark.profile.latency.memory.renderer.thread.worker.queue.sync.server.client.account.folder.message.invoice.contract.launch.customer.support.ticket.issue.patch.test.suite.flaky.green.merge.conflict.document.spreadsheet.slides.agenda.minutes.follow-up.question.answer.idea.option.tradeoff.risk.estimate.scope.priority.milestone.owner.status.blocked.unblocked.shipped.landed.backed.out.again.still.already.probably.definitely.maybe.quickly.carefully.before.after.during.around.about.with.without.for.from.into.over.under.between.because.although.while.and.but.or.so.then.that.this.these.those.it.they.you.everyone.nobody.small.large.new.old.final.early.late.simple.complex.stable.nightly.beta.staging.production.mobile.desktop.tablet.screen.scroll.click.frame.paint.style.script.parser.compiler.garbage.collector.heap.graph.chart`.split(`.`),Xe=`Q3 roadmap review,offsite planning,hiring loop for the platform role,budget for next quarter,renderer performance numbers,sync worker crash on reconnect,design review: folder manager,release notes for 2.4,on-call handover,customer escalation from Contoso,contract renewal,migration to the new cache schema,accessibility audit findings,dark mode contrast issues,flaky integration tests,conference talk proposal,team lunch on Thursday,travel reimbursement,security review checklist,API deprecation timeline,onboarding plan for new hires,quarterly business review,retro notes,benchmark methodology,memory regression in nightly,layout thrashing in the message list,IndexedDB quota errors,invoice #48213,weekend plans,photos from the trip,birthday dinner,apartment viewing,book club pick,garden project`.split(`,`),Ze=[e=>`[atlas] PR #${e}: Fix race between sync worker and cache writer`,e=>`[atlas] PR #${e}: Virtualize the folder manager tree`,e=>`[borealis] Issue #${e}: Message list jumps when new mail arrives`,e=>`Bug ${e} - Crash in layout when resizing the reading pane`,e=>`Bug ${e} - Intermittent timeout in compose send test`,e=>`Build #${e} failed on main`,e=>`Build #${e} fixed on main`,e=>`Invitation: Weekly sync @ Tue ${e%12+1}:00`,e=>`Your statement for account ending ${String(e).slice(-4)} is ready`,e=>`Your package ${e}-QX has shipped`],Qe=[`Shipping faster layouts with containment`,`A field guide to long tasks`,`What changed in the cascade`,`Five ways to cut bundle size this week`,`Inside a modern garbage collector`,`Scheduling work off the main thread`,`Fall fares are here: save up to 30%`,`Members-only tasting this Saturday`,`New arrivals for the season`,`Your weekly status summary`,`Course spotlight: typography for interfaces`,`Ski passes on sale now`,`Understanding interaction to next paint`,`How we rebuilt our storage layer`,`Release candidate is out`],$e=[[`roadmap-q3.pdf`,`application/pdf`],[`budget-2027.xlsx`,`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`],[`meeting-notes.docx`,`application/vnd.openxmlformats-officedocument.wordprocessingml.document`],[`screenshot.png`,`image/png`],[`profile-trace.json`,`application/json`],[`invoice-48213.pdf`,`application/pdf`],[`photo-001.jpg`,`image/jpeg`],[`slides-final-v3.pptx`,`application/vnd.openxmlformats-officedocument.presentationml.presentation`],[`contract-signed.pdf`,`application/pdf`],[`logs.zip`,`application/zip`]];function et(e){let t=e>>>0;return()=>{t=t+1831565813>>>0;let e=t;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}}function I(e,t,n){return t+Math.floor(e()*(n-t+1))}function L(e,t){return t[Math.floor(e()*t.length)]}function tt(e,t){return e()>>0;return t}var rt={verb:[`review`,`ship`,`finalize`,`revisit`,`split up`,`land`,`profile`,`simplify`,`document`,`test`,`merge`,`roll back`,`prototype`,`estimate`],past:[`reviewed`,`updated`,`rebased`,`profiled`,`rewrote`,`merged`,`tested`,`cleaned up`,`measured`,`drafted`],noun:[`proposal`,`patch`,`migration plan`,`release notes`,`budget`,`design doc`,`test plan`,`benchmark results`,`contract`,`onboarding guide`,`roadmap`,`cache schema`,`invoice`,`dashboard`,`slide deck`,`checklist`,`meeting notes`,`API change`,`crash report`,`trace`],adj:[`much better`,`mostly fine`,`a bit rough`,`promising`,`stable`,`slower than expected`,`ready`,`surprisingly fast`,`close`,`blocked`],when:[`Friday`,`the end of the week`,`Tuesday’s sync`,`next sprint`,`the offsite`,`tomorrow morning`,`the release cut`,`Monday`,`the planning meeting`,`month end`],project:[`Atlas`,`Borealis`,`the sync worker`,`the message list`,`the reading pane`,`search`,`the compose dialog`,`the mobile layout`,`billing`,`the importer`],status:[`on track`,`slipping a little`,`waiting on review`,`nearly done`,`blocked on infra`,`in QA`,`behind schedule`,`ahead of plan`],problem:[`the intermittent timeout`,`a layout jump`,`the memory spike`,`slow first paint`,`duplicate notifications`,`the flaky test`,`stale results`,`a rendering glitch`],platform:[`Firefox Nightly`,`older Android tablets`,`Safari`,`the staging cluster`,`Windows laptops`,`the CI runners`,`large mailboxes`,`slow networks`],condition:[`the window is resized`,`the cache is cold`,`two tabs are open`,`the folder has a few thousand messages`,`the user switches folders quickly`,`the device wakes from sleep`],meeting:[`standup`,`Thursday’s review`,`the weekly sync`,`office hours`,`the retro`,`our 1:1`],decision:[`the rollout plan`,`which option to keep`,`the final scope`,`the deadline`,`who owns the follow-up`],doc:[`spreadsheet`,`summary`,`report`,`draft`,`write-up`,`export`],thing:[`photos`,`tickets`,`recipe`,`itinerary`,`receipts`,`book list`,`playlist`,`notes`]},it=[`Can we {verb} the {noun} before {when}?`,`I {past} the {noun} and it looks {adj} now.`,`The {noun} for {project} is {status}, so we should {verb} it by {when}.`,`{name}, could you take a look at the {noun} when you get a chance?`,`Thanks for sending the {noun}; I left a few comments inline.`,`We are still seeing {problem} on {platform}, mostly when {condition}.`,`Let’s {verb} this in {meeting} and decide on {decision}.`,`Attached is the {doc} with the latest numbers for {project}.`,`Quick update: {project} is {status} and the {noun} is {adj}.`,`I think we can {verb} the {noun} without touching {project}.`,`Does anyone remember why we decided to {verb} the {noun} last quarter?`,`{name} mentioned that {problem} only shows up on {platform}.`,`If nobody objects, I will {verb} the {noun} on {when}.`,`The numbers from {platform} look {adj} after the last change.`,`Sharing the {thing} from the weekend, more to follow.`,`Happy to pair on the {noun} if that helps move {project} along.`,`Before we {verb} anything, we should agree on {decision}.`,`I moved the {noun} into the shared folder so everyone can find it.`];function at(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ot(e){let t=I(e,7,16),n=[];for(let r=0;rn===`name`?L(e,Ue):L(e,rt[n]))}function ct(e,t=2,n=5){let r=I(e,t,n),i=[];for(let t=0;t180?`${e.slice(0,177)}...`:e}var dt=Date.UTC(2026,9,21,15,30),ft=`en-US`,pt={name:`Alex Morgan`,email:`alex.morgan@example.org`},mt=[{id:1,name:`Alex Morgan`,email:`alex.morgan@example.org`},{id:2,name:`Alex Morgan`,email:`alex@morgan.example`},{id:3,name:``,email:`support@northwind.example`}],ht=[{id:1,name:`Inbox`,role:`inbox`,count:1200,kind:`inbox`,span:540},{id:2,name:`Drafts`,role:`drafts`,count:6,kind:`draft`,span:30},{id:3,name:`Scheduled`,role:`scheduled`,count:2,kind:`scheduled`,span:0},{id:4,name:`Sent`,role:`sent`,count:350,kind:`sent`,span:700},{id:5,name:`Archive`,role:`archive`,count:2500,kind:`mixed`,span:1500},{id:6,name:`Junk`,role:`junk`,count:45,kind:`junk`,span:30},{id:7,name:`Trash`,role:`trash`,count:120,kind:`mixed`,span:30},{id:10,name:`Projects`,role:null,count:40,kind:`work`,span:900},{id:11,name:`Atlas`,role:null,parent:10,count:220,kind:`notification`,span:400},{id:12,name:`Borealis`,role:null,parent:10,count:140,kind:`work`,span:600},{id:13,name:`Design reviews`,role:null,parent:11,count:60,kind:`work`,span:300},{id:20,name:`Newsletters`,role:null,count:400,kind:`newsletter`,span:400},{id:21,name:`Feeds`,role:null,count:300,kind:`feed`,span:200},{id:22,name:`Receipts`,role:null,count:160,kind:`receipt`,span:800},{id:23,name:`Travel`,role:null,starred:!0,count:70,kind:`personal`,span:900},{id:24,name:`Family`,role:null,starred:!0,count:110,kind:`personal`,span:1200},{id:25,name:`Conferences`,role:null,count:50,kind:`work`,span:700},{id:26,name:`Open source`,role:null,count:30,kind:`notification`,span:500},{id:27,name:`mozilla-central`,role:null,parent:26,count:500,kind:`notification`,span:300},{id:28,name:`servo`,role:null,parent:26,count:250,kind:`notification`,span:300}],gt=[`$label1`,`$label2`,`$label3`,`$label4`,`$label5`],_t=864e5;function vt(e){return e.name?`${e.name} <${e.email}>`:e.email}function yt(e){return e.toLowerCase().normalize(`NFD`).replace(/[^a-z]/g,``)}function bt(e){let t=[],n=new Set;for(;t.length<400;){let r=L(e,Ue),i=L(e,We),a=tt(e,.7)?L(e,Ge):null,o=a?a.domain:L(e,Ke),s=`${tt(e,.5)?`${yt(r)}.${yt(i)}`:`${yt(r).charAt(0)}${yt(i)}`}@${o}`;n.has(s)||(n.add(s),t.push({name:`${r} ${i}`,email:s,organization:a?.name,send_count:0,last_sent_at:0}))}return t}function xt(e,t,n){let r=[],i=Math.max(t.span,1)*_t;for(let t=0;tt-e),r}function St(e){let t={};return tt(e,.11)&&(t[L(e,gt)]=!0,tt(e,.3)&&(t[L(e,gt)]=!0)),JSON.stringify(t)}function Ct(e,t){let n=L(t,e);return{name:n.name,email:n.email}}function wt(e){let t=L(e,Xe),n=e();return n<.35?`Re: ${t}`:n<.42?`Fwd: ${t}`:n<.5?`Re: Re: ${t}`:t.charAt(0).toUpperCase()+t.slice(1)}function Tt(e,t,n){let r={name:pt.name,email:pt.email},i=()=>{let e=[],r=tt(t,.35)?I(t,1,4):0;for(let i=0;i({id:e.id,name:e.name,role:e.role,parent_id:e.parent??null,is_starred:+!!e.starred})),i=[],a=1;for(let r of ht){let o=r.kind===`draft`||r.kind===`scheduled`?r.count:Math.max(1,Math.round(r.count*e)),s=xt(t,r,o);for(let e=0;et.email===e.email);t&&(t.send_count+=1,t.last_sent_at=Math.max(t.last_sent_at,p))}}}return{folders:r,messages:i,contacts:n}}var Dt=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},Ot=(e=>e?Dt(e):Dt),kt=e=>e;function At(e,t=kt){let n=C.useSyncExternalStore(e.subscribe,C.useCallback(()=>t(e.getState()),[e,t]),C.useCallback(()=>t(e.getInitialState()),[e,t]));return C.useDebugValue(n),n}var jt=e=>{let t=Ot(e),n=e=>At(t,e);return Object.assign(n,t),n},Mt=(e=>e?jt(e):jt),Nt=new Set([`$seen`,`$flagged`,`$mailflagbit0`,`$mailflagbit1`,`$mailflagbit2`,`$draft`,`$answered`,`$forwarded`,`$junk`,`$notjunk`,`$recent`,`$deleted`]),Pt=new Set([...Nt,`$mdnsent`,`$submitpending`,`$submitted`,`$phishing`,`$important`,`$autosent`,`$canunsubscribe`,`$followed`,`$hasattachment`,`$hasmemo`,`$hasnoattachment`,`$imported`,`$istrusted`,`$maskedemail`,`$memo`,`$muted`,`$new`,`$notify`,`$unsubscribed`,`junk`,`nonjunk`,`notjunk`,`nojunk`,`junkrecorded`,`$notphishing`,`$has_cal`,`$has_note`,`$attachment`,`$encrypted`,`$error`,`$ignored`,`$invitation`,`$queued`,`$replied`,`$sent`,`$signed`,`$todo`,`$watched`,`$pinned`,`$readreceipt`,`$notdelivered`,`$restored`,`$snoozed`,`$sievefailed`]),Ft=[{keyword:`$label1`,name:`Important`,color:`#FF0000`,order:0},{keyword:`$label2`,name:`Work`,color:`#FF9900`,order:1},{keyword:`$label3`,name:`Personal`,color:`#009900`,order:2},{keyword:`$label4`,name:`To Do`,color:`#3333FF`,order:3},{keyword:`$label5`,name:`Later`,color:`#993399`,order:4}];function It(e){return e.toLowerCase()}function Lt(e){let t=new Set(e.map(e=>It(e.keyword)));return e=>!Pt.has(e)||t.has(e)&&!Nt.has(e)}function Rt(e,t=[]){return Lt(t)(It(e))}function zt(e,t=[]){if(!e)return[];let n;try{n=JSON.parse(e)}catch{return[]}if(!n||typeof n!=`object`||Array.isArray(n))return[];let r=Lt(t),i=[],a=new Set;for(let[e,t]of Object.entries(n)){if(t!==!0)continue;let n=It(e);!r(n)||a.has(n)||(a.add(n),i.push(n))}return i}function Bt(e){return[...e].sort((e,t)=>e.order-t.order||e.name.localeCompare(t.name)||e.keyword.localeCompare(t.keyword))}function Vt(e,t){let n=new Set(zt(e,t));if(n.size===0)return[];let r=[];for(let e of Bt(t)){let t=It(e.keyword);n.has(t)&&(n.delete(t),r.push({keyword:t,name:e.name,color:e.color,defined:!0}))}for(let e of n)r.push({keyword:e,name:e,color:null,defined:!1});return r}function Ht(e,t){return t===0?`none`:t===e?`all`:`some`}function Ut(e,t=[]){let n=new Map,r=0;for(let i of e)if(i!=null){r+=1;for(let e of zt(i.keywords_json,t))n.set(e,(n.get(e)??0)+1)}return{inspected:r,keywords:[...n.keys()],presence:e=>Ht(r,n.get(It(e))??0)}}var Wt=`$flagged`,Gt=new Set([6,7]);function Kt(e){return typeof e==`string`}function R(e){return e.slice(4)}function qt(e){return`tag:${It(e)}`}function Jt(e,t){if(t===`$flagged`)return e.is_flagged===1;if(!e.keywords_json||e.keywords_json===`{}`)return!1;try{let n=JSON.parse(e.keywords_json);return Object.keys(n).some(e=>n[e]===!0&&It(e)===t)}catch{return!1}}var Yt=e=>(t,n)=>e.get(n).received_at-e.get(t).received_at||n-t,Xt={messages:null,folderIds:null,rows:new Map};function Zt(e,t){if(t==null)return[];(Xt.messages!==e.messages||Xt.folderIds!==e.folderIds)&&(Xt={messages:e.messages,folderIds:e.folderIds,rows:new Map});let n=Xt.rows.get(t);if(n)return n;let r;if(Kt(t)){let n=R(t);r=[];for(let t of e.messages.values())Gt.has(t.folder_id)||Jt(t,n)&&r.push(t);r.sort((e,t)=>t.received_at-e.received_at||t.id-e.id)}else r=(e.folderIds.get(t)??[]).map(t=>e.messages.get(t));return Xt.rows.set(t,r),r}var Qt={messages:null,counts:{unread:new Map,total:new Map,tags:new Map}};function $t(e){if(Qt.messages===e.messages)return Qt.counts;let t=new Map,n=new Map,r=new Map;for(let i of e.messages.values())if(n.set(i.folder_id,(n.get(i.folder_id)??0)+1),i.is_seen===0&&t.set(i.folder_id,(t.get(i.folder_id)??0)+1),!Gt.has(i.folder_id)&&(i.is_flagged===1&&r.set(Wt,(r.get(`$flagged`)??0)+1),i.keywords_json&&i.keywords_json!==`{}`)){let e=JSON.parse(i.keywords_json);for(let t of Object.keys(e)){if(e[t]!==!0)continue;let n=It(t);r.set(n,(r.get(n)??0)+1)}}return Qt={messages:e.messages,counts:{unread:t,total:n,tags:r}},Qt.counts}function en(e,t,n){let r=null;for(let i of t){let t=e.get(i);if(!t)continue;let a=n(t);!a||a===t||(r??=new Map(e),r.set(i,a))}return r??e}function tn(e,t){let n={};try{n=JSON.parse(e.keywords_json||`{}`)}catch{n={}}let r=JSON.stringify(n);t(n);let i=JSON.stringify(n);return r===i?e:{...e,keywords_json:i}}function nn(){let e=typeof location>`u`?null:new URLSearchParams(location.search),t=Et(Math.max(.01,Number(e?.get(`scale`)??1)||1)),n=new Map,r=new Map;for(let e of t.folders)r.set(e.id,[]);for(let e of t.messages)n.set(e.id,e),r.get(e.folder_id).push(e.id);let i=Yt(n);for(let e of r.values())e.sort(i);return{folders:t.folders,messages:n,folderIds:r,contacts:t.contacts}}var rn=0,z=Mt((e,t)=>{function n(e,t){let n={};return e.open.id!=null&&e.open.viewId===t&&(n.open={id:null,viewId:null}),e.focused.viewId===t&&(n.focused={id:null,viewId:null}),e.selection.ids.size>0&&e.selection.viewId===t&&(n.selection={viewId:null,ids:new Set}),n}function r(e,t){let n=e.open.id!=null&&t.has(e.open.id),r=!1;if(e.open.id==null&&e.selection.ids.size>0){for(let n of e.selection.ids)if(t.has(n)){r=!0;break}}if(!n&&!r)return;let i=(n?e.open.viewId:e.selection.viewId)??e.currentViewId,a=Zt(e,i),o=a.findIndex(e=>t.has(e.id));if(o<0)return{id:null,viewId:i};for(let e=o+1;e=0;--e)if(!t.has(a[e].id))return{id:a[e].id,viewId:i};return{id:null,viewId:i}}function i(e,t){let n={};if(e.open.id!=null&&t.has(e.open.id)&&(n.open={id:null,viewId:null}),e.focused.id!=null&&t.has(e.focused.id)&&(n.focused={id:null,viewId:null}),e.selection.ids.size>0){let r=new Set(e.selection.ids),i=!1;for(let e of t)r.delete(e)&&(i=!0);i&&(n.selection={viewId:r.size>0?e.selection.viewId:null,ids:r})}return n}function a(n,a){let o=t(),s=new Set(n.filter(e=>o.messages.has(e)));if(s.size===0)return;let c=r(o,s),l=new Map(o.messages),u=new Map(o.folderIds),d=new Set;for(let e of s){let t=l.get(e);d.add(t.folder_id),a==null?l.delete(e):l.set(e,{...t,folder_id:a})}for(let e of d)u.set(e,u.get(e).filter(e=>!s.has(e)));if(a!=null){let e=[...u.get(a).filter(e=>!s.has(e)),...s];e.sort(Yt(l)),u.set(a,e)}e({messages:l,folderIds:u,...i(o,s)}),c!==void 0&&t().selectMessage(c.id,c.id==null?void 0:c.viewId)}return{...nn(),currentViewId:1,folderPickCount:0,selection:{viewId:null,ids:new Set},focused:{id:null,viewId:null},open:{id:null,viewId:null},toasts:[],selectFolder(r){let i=t(),a=i.currentViewId;e({currentViewId:r,folderPickCount:i.folderPickCount+1,...n(i,a),...a===r?{}:n(i,r)})},selectMessage(n,r){let i=t(),a=n==null?null:r??i.currentViewId,o={open:{id:n,viewId:a},focused:{id:n,viewId:a}};if(n!=null){let e=i.messages.get(n);e&&e.is_seen===0&&(o.messages=en(i.messages,[n],e=>({...e,is_seen:1})))}e(o)},setFocusedMessage(t,n){e({focused:{id:t,viewId:t==null?null:n}})},setSelection(t,n){e({selection:{viewId:n.size>0?t:null,ids:n}})},clearSelection(){t().selection.ids.size!==0&&e({selection:{viewId:null,ids:new Set}})},markManySeen(n,r){let i=+!!r;e({messages:en(t().messages,n,e=>e.is_seen===i?e:{...e,is_seen:i})})},toggleManySeen(e){let{messages:n}=t(),r=e.some(e=>n.get(e)?.is_seen===0);t().markManySeen(e,r)},markManyFlagged(n,r){let i=+!!r;e({messages:en(t().messages,n,e=>e.is_flagged===i?e:{...e,is_flagged:i})})},toggleManyFlagged(e){let{messages:n}=t(),r=e.some(e=>n.get(e)?.is_flagged===1);t().markManyFlagged(e,!r)},setTagsMany(n,{add:r=[],remove:i=[]}){e({messages:en(t().messages,n,e=>tn(e,e=>{for(let t of i)for(let n of Object.keys(e))It(n)===It(t)&&delete e[n];for(let t of r)e[It(t)]=!0}))})},clearTagsMany(n){e({messages:en(t().messages,n,e=>tn(e,e=>{for(let t of Object.keys(e))Rt(t)&&delete e[t]}))})},moveMessages(e,n){let{messages:r}=t();a(e.filter(e=>r.get(e)?.folder_id!==n),n)},archiveMessages(e){t().moveMessages(e,5)},junkMessages(e){t().moveMessages(e,6)},notJunk(e){t().moveMessages(e,1)},destroyMessages(e){let{messages:n}=t(),r=e.filter(e=>n.get(e)?.folder_id===7),i=e.filter(e=>n.has(e)&&n.get(e).folder_id!==7);i.length>0&&a(i,7),r.length>0&&a(r,null)},cancelScheduledSend(n){let r=t();r.messages.get(n)&&(r.selectMessage(null),e({messages:en(t().messages,[n],e=>({...e,scheduled_undo_status:null,is_draft:1}))}),t().moveMessages([n],2),t().showToast(`Sending was canceled; the message is back in Drafts.`))},addMessage(n){let r=t(),i=0;for(let e of r.messages.keys())e>i&&(i=e);i+=1;let a={...n,id:i},o=new Map(r.messages);o.set(i,a);let s=new Map(r.folderIds),c=[i,...s.get(a.folder_id)];return c.sort(Yt(o)),s.set(a.folder_id,c),e({messages:o,folderIds:s}),i},removeMessage(e){a([e],null)},showToast(n){rn+=1;let r={id:rn,text:n};e({toasts:[...t().toasts.slice(-2),r]})},dismissToast(n){e({toasts:t().toasts.filter(e=>e.id!==n)})}}});function an(e,t){return t==null||Kt(t)?null:e.folders.find(e=>e.id===t)??null}var on=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/,sn=`3`;function cn(e,t){let n=un(e);return{domain:n,imageUrl:ln(n,t),initials:mn(e),style:hn(e)}}function ln(e,t){let n=dn(e),r=t.trim().replace(/\/+$/,``);return!r||!n?``:`${r}/${encodeURIComponent(n)}?v=${sn}`}function un(e){let t=fn(e);if(!t)return``;let n=t.lastIndexOf(`@`);return n<0?``:dn(t.slice(n+1))}function dn(e){let t=String(e??``).trim().toLowerCase().replace(/\.+$/,``);if(!t||t.length>253||/[\s/:?#@\\[\]]/.test(t))return``;let n;try{n=new URL(`https://${t}`).hostname.toLowerCase().replace(/\.+$/,``)}catch{return``}return!n||n!==t&&t.startsWith(`xn--`)||n===`localhost`||!n.includes(`.`)||gn(n)||n.split(`.`).some(e=>!on.test(e))?``:n}function fn(e){let t=String(e??``).trim();if(!t)return``;let n=t.match(/<([^<>@\s]+@[^<>@\s]+)>/)?.[1],r=t.match(/([^<>\s,;]+@[^<>\s,;]+)/)?.[1];return String(n??r??``).trim().toLowerCase()}function pn(e){if(!e)return`(no sender)`;let t=String(e).match(/^(.+?)\s*<.+>$/);return t?t[1].replace(/^"|"$/g,``):String(e)}function mn(e){let t=e?pn(e):``;return t&&(t.match(/(^\S\S?|\s\S)?/g)?.map(e=>e.trim()).join(``))?.match(/(^\S|\S$)?/g)?.join(``).toLocaleUpperCase()||`?`}function hn(e){return{background:`hsl(${_n(fn(e)||pn(e))%360} 42% 42%)`}}function gn(e){let t=e.split(`.`);return t.length===4?t.every(e=>/^\d+$/.test(e)&&Number(e)>=0&&Number(e)<=255):!1}function _n(e){let t=0;for(let n=0;n>>0;return t}function vn(e){return e.replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`)}function yn(e,t){let n=`> `.repeat(t);return e.split(` -`).map(e=>`${n}${e}`.trimEnd()).join(` -`)}function bn(e,t=72){let n=e.split(` `),r=[],i=``;for(let e of n)i&&i.length+e.length+1>t?(r.push(i),i=e):i=i?`${i} ${e}`:e;return i&&r.push(i),r.join(` -`)}function xn(e){return new Date(e).toLocaleString(`en-US`,{dateStyle:`medium`,timeStyle:`short`,timeZone:`UTC`})}function Sn(e,t){if(e.has_attachment!==1)return[];let n=I(t,1,3),r=[];for(let e=0;e=1;--i){let n=`On ${xn(e.received_at-i*I(t,2,30)*36e5)}, ${i===1?`Alex Morgan `:e.from_text} wrote:\n${bn(ct(t,2,4))}\n\n${bn(ct(t,1,3))}`;r=r?`${n}\n\n${yn(r,1)}`:n}a+=`\n\n${yn(r,1)}`}return`${a}\n\n-- \n${n}\n${L(t,[`Senior Engineer`,`Product Manager`,`Design Lead`,`Director of Operations`,`Support`])}`}function wn(e,t){let n=vn(pn(e.from_text)),r=[lt(e.body_seed)],i=I(t,1,3);for(let e=0;e{let r=vn(e);return n===1&&tt(t,.5)?`

${r.replace(/^(\S+ \S+ \S+)/,`$1`)}

`:`

${r}

`});if(tt(t,.4)){let e=I(t,2,5),n=[];for(let r=0;r${vn(st(t))}`);a.splice(1,0,`
    ${n.join(``)}
`)}tt(t,.35)&&a.push(`

See the shared document for the full write-up.

`);let o=/^(re|fwd):/i.test(e.subject)?`
On ${vn(xn(e.received_at-72e5))}, Alex Morgan wrote:

${vn(ct(t,2,4))}

`:``;return`

Hi Alex,

${a.join(``)}

Best,
${n}

${n} · ${vn(L(t,[`Northwind`,`Contoso`,`Fabrikam`,`Adatum`]))}
${o}
`}function Tn(e,t){let n=e.to_text?pn(e.to_text.split(`,`)[0]).split(` `)[0]:``,r=[n?`Hi ${n},`:`Hi,`,``,lt(e.body_seed)],i=I(t,0,2);for(let e=0;ee?`
${vn(e)}
`:`

`).join(``)}function En(e,t){let n=qe.find(t=>e.from_text.includes(t.email))??L(t,qe),r=n.color,i=I(t,3,6),a=[];for(let e=0;e
 

${e}

${vn(ct(t,2,3))}

Continue reading →
`)}let o=`https://${n.email.split(`@`)[1]}/unsubscribe?u=${e.id}`;return` -`}function Dn(e,t){let n=[],r=e.subject.match(/\d+/)?.[0]??String(e.id);if(n.push(`

${vn(lt(e.body_seed))}

`),tt(t,.6)){let e=[],r=I(t,4,12);for(let n=0;n${e.join(` -`)}`)}return n.push(`

${vn(ct(t,1,3))}

`),n.push(`

Reply to this email directly, view it on Forge, or unsubscribe.

`),n.join(` -`)}function On(e,t){return`

${vn(e.subject)}

${vn(lt(e.body_seed))}

CLAIM NOW

${vn(ct(t,3,5))}

`}var kn=new Map;function An(e){if(e.body)return e.body;let t=kn.get(e.id);if(t)return t;let n=et(nt(e.body_seed,2)),r;switch(e.body_kind){case`text`:r={text:Cn(e,n),attachments:[]};break;case`html`:r={html:wn(e,n),attachments:[]};break;case`newsletter`:r={html:En(e,n),attachments:[]};break;case`notification`:r={html:Dn(e,n),attachments:[]};break;case`junk`:r={html:On(e,n),attachments:[]};break;case`draft`:r={html:Tn(e,n),attachments:[]};break;default:r={text:``,attachments:[]}}return r.attachments=Sn(e,n),kn.set(e.id,r),r}function jn(e){let t=String(e??``).trim().normalize(`NFC`);if(!t)return``;let n=t.lastIndexOf(`@`);return n<=0||n===t.length-1?t.toLowerCase():`${t.slice(0,n).toLowerCase()}@${Mn(t.slice(n+1))}`}function Mn(e){let t=e.trim().toLowerCase();if(!t||t.startsWith(`[`)||/[/?#:@\\]/.test(t))return t;try{let{hostname:e}=new URL(`https://${t}`);return e||t}catch{return t}}function Nn(e){return e===` `||e===` `||e===`\r`||e===` -`}function Pn(e){return e===void 0?!1:e.codePointAt(0)>127?!0:/[A-Za-z0-9!#$%&'*+\-/=?^_`{|}~]/.test(e)}function Fn(e){for(;;){for(;Nn(e.src[e.i]);)e.i+=1;if(e.src[e.i]!==`(`)return!0;let t=0;do{let n=e.src[e.i];if(n===void 0)return!1;if(n===`\\`){e.i+=2;continue}n===`(`?t+=1:n===`)`&&--t,e.i+=1}while(t>0)}}function In(e,t){let n=e.charCodeAt(t);if(n<32)return n===9;if(n===127)return!1;if(n>=55296&&n<=56319){let n=e.charCodeAt(t+1);return n>=56320&&n<=57343}if(n>=56320&&n<=57343){let n=e.charCodeAt(t-1);return n>=55296&&n<=56319}return!0}function Ln(e){let t=e.i;e.i+=1;let n=``;for(;;){let r=e.src[e.i];if(r===void 0)return e.i=t,null;if(r===`\\`){let r=e.src[e.i+1];if(r===void 0||!In(e.src,e.i+1))return e.i=t,null;n+=r,e.i+=2;continue}if(r===`"`)return e.i+=1,{value:n,raw:e.src.slice(t,e.i)};if(!In(e.src,e.i))return e.i=t,null;n+=r,e.i+=1}}function Rn(e){let t=e.i;for(;Pn(e.src[e.i]);)e.i+=1;return e.src.slice(t,e.i)}function zn(e){let t=e.i;if(!Pn(e.src[e.i]))return``;for(;;){if(Rn(e),e.src[e.i]===`.`&&Pn(e.src[e.i+1])){e.i+=1;continue}return e.src.slice(t,e.i)}}function Bn(e){let t={src:e.src,i:e.i};for(;t.in||t.length===0,i=e.src[e.i];if(i===`"`){let n=Ln(e);if(!n)return null;t.push({text:n.value,spaced:r});continue}if(i===`.`){e.i+=1,t.push({text:`.`,spaced:r});continue}if(Pn(i)){t.push({text:Rn(e),spaced:r});continue}return t}}function Un(e){return e.map((e,t)=>t>0&&e.spaced?` ${e.text}`:e.text).join(``).trim().normalize(`NFC`)}function Wn(e){if(!Fn(e))return null;let t;if(e.src[e.i]===`"`){let n=Ln(e);if(!n)return null;t=n.raw}else t=zn(e);if(!t||!Fn(e)||e.src[e.i]!==`@`||(e.i+=1,!Fn(e)))return null;let n;if(e.src[e.i]===`[`){let t=Vn(e);if(t.kind!==`valid`)return null;n=t.value}else n=zn(e);return n?`${t}@${n}`.normalize(`NFC`):null}function Gn(e,t){if(e.lastAngle===void 0&&(e.lastAngle=e.src.lastIndexOf(`>`)),e.lastAngle<=e.i)return-1;let n={src:e.src,i:e.i+1};for(;n.i`)return n.i;if(e===`,`&&!t)return-1;if(e===`"`){if(!Ln(n))return-1;continue}if(e===`(`&&!t){if(!Fn(n))return-1;continue}if(e===`[`&&!t){if(Vn(n).kind===`unterminated`)return-1;continue}n.i+=1}return-1}function Kn(e,t){let n=-1;for(;;){let r=e.src[e.i];if(r===void 0){t&&(e.noGroupTerminator=!0,n>=0&&(e.i=n));return}if(r===`,`){if(!t||e.noGroupTerminator)return;n<0&&(n=e.i)}if(r===`;`){t&&(e.i+=1);return}if(r===`"`){if(!Ln(e)){e.i=e.src.length;return}continue}if(r===`(`){if(!Fn(e))return;continue}if(r===`[`){if(Vn(e).kind===`unterminated`){e.i=e.src.length;return}continue}if(r===`<`){let n=Gn(e,t);if(n>=0){e.i=n+1;continue}}e.i+=1}}var qn={addresses:null,wasGroup:!1},Jn={addresses:null,wasGroup:!0};function Yn(e){return{addresses:e,wasGroup:!1}}function Xn(e,t){let n=e.i,r=Hn(e);if(r===null||!Fn(e))return qn;let i=e.src[e.i];if(i===`<`){e.i+=1;let t=Wn(e);if(t===null||!Fn(e)||e.src[e.i]!==`>`||(e.i+=1,!Fn(e)))return qn;let n=Un(r);return Yn([{...n?{name:n}:{},email:t}])}if(i===`:`&&t===0){e.i+=1;let t=Zn(e);return t===null?Jn:{addresses:t,wasGroup:!0}}if(r.length===0)return qn;e.i=n;let a=Wn(e);return a===null||!Fn(e)?qn:Yn([{email:a}])}function Zn(e){let t=[];for(;;){if(!Fn(e))return null;let n=e.src[e.i];if(n===void 0)return null;if(n===`;`)return e.i+=1,Fn(e)?t:null;if(n===`,`){e.i+=1;continue}let r=Xn(e,1);if(r.addresses===null||!Fn(e))return null;let i=e.src[e.i];if(i!==`,`&&i!==`;`)return null;t.push(...r.addresses)}}function Qn(e){let t=[];if(!e)return t;let n={src:e,i:0};for(;n.ie.length===2?e:` `).replace(/[\u0000-\u0008\u000A-\u001F\u007F]/g,` `).trim();return t?`${/[",;:<>()[\]\\@]|\s\s|[^\S ]/.test(t)?`"${t.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`)}"`:t} <${e.email}>`:e.email}function tr(e){return e.map(er).join(`, `)}function nr(e){let t={src:e,i:0};for(;t.i`)return!0}return!1}function ir(e){let t=(e??``).trim();return/^re:/i.test(t)?t:t?`Re: ${t}`:`Re: (no subject)`}function ar(e){let t=(e??``).trim();return/^fwd:/i.test(t)?t:t?`Fwd: ${t}`:`Fwd: (no subject)`}function or({from:e,date:t,subject:n}){let r=t?new Date(Number(t)).toLocaleString(ft,{timeZone:`UTC`}):``;return[e?`From: ${e}`:null,r?`Date: ${r}`:null,n?`Subject: ${n}`:null].filter(Boolean).join(` -`)}function sr({from:e,date:t,subject:n,html:r,text:i}){let a=or({from:e,date:t,subject:n}),o=(r??``).trim()||cr(i??``).replace(/\n/g,`
`);return!a&&!o?``:`

${a.split(` -`).map(e=>cr(e)).join(`
`)}
${o}
`}function cr(e){return e.replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`)}var lr=[`to`,`cc`,`bcc`],ur=0,dr=dt;function fr(){return dr+=6e4,dr}function pr(e){return!(`invalid`in e)}function mr(e){let t=e.draft.subject.trim();if(t)return t;let n=[...e.draft.to,...e.draft.cc,...e.draft.bcc].find(pr);return n?.name?.trim()||n?.email||`New message`}function hr(e){let{draft:t}=e;return t.to.length+t.cc.length+t.bcc.length>0||t.subject.trim()!==``||t.text.replace(/\u00a0/g,` `).trim()!==``}function gr(e){return e.replace(/&/g,`&`).replace(//g,`>`).replace(/\n/g,`
`)}function _r(e){return $n(e).addresses}function vr(){return{fromIdx:0,to:[],cc:[],bcc:[],subject:``,html:``,text:``}}function yr(e,t,n,r={}){let i=t[e.fromIdx]??t[0],a=i.name?{name:i.name,email:i.email}:{email:i.email},o=e.to.filter(pr),s=e.cc.filter(pr),c=fr();return{folder_id:n,from_text:er(a),to_text:o.map(er).join(`, `),cc:s,subject:e.subject,preview:e.text.replace(/\s+/g,` `).trim().slice(0,180),received_at:c,sent_at:c,is_seen:1,is_flagged:0,is_draft:+(n===2),has_attachment:0,keywords_json:`{}`,scheduled_undo_status:null,body_kind:`html`,body_seed:0,body:{html:e.html||`


`,text:e.text,attachments:[]},...r}}var br=Mt((e,t)=>{function n(n,r){e({sessions:t().sessions.map(e=>e.id===n?r(e):e)})}function r(n){e({sessions:t().sessions.filter(e=>e.id!==n)})}function i(e){return t().sessions.find(t=>t.id===e)}function a(e){let n=z.getState();e.sourceDraftId!=null&&n.removeMessage(e.sourceDraftId),n.addMessage(yr(e.draft,t().identities,2))}return{sessions:[],identities:mt,open(n={}){ur+=1;let r=`compose-${ur}`,i={id:r,presentation:`expanded`,draft:{...vr(),to:n.to??[],cc:n.cc??[],subject:n.subject??``,html:n.html??``},draftEpoch:1,editorHtmlBody:n.html??``,closePromptOpen:!1,sourceDraftId:n.sourceDraftId??null};return e({sessions:[...t().sessions.map(e=>e.presentation===`expanded`?{...e,presentation:`minimized`}:e),i]}),r},minimize(e){n(e,e=>({...e,presentation:`minimized`,closePromptOpen:!1}))},restore(n){e({sessions:t().sessions.map(e=>e.id===n?{...e,presentation:`expanded`}:e.presentation===`expanded`?{...e,presentation:`minimized`}:e)})},close(e){r(e)},requestClose(e){let a=i(e);if(a){if(!hr(a)){r(e);return}t().restore(e),n(e,e=>({...e,closePromptOpen:!0}))}},cancelClose(e){n(e,e=>({...e,closePromptOpen:!1}))},closeWithoutSaving(e){r(e)},saveAndClose(e){let t=i(e);t&&(a(t),r(e),z.getState().showToast(`Draft saved.`))},discardDraft(e){let t=i(e);t&&(t.sourceDraftId!=null&&z.getState().removeMessage(t.sourceDraftId),r(e))},updateDraft(e,t){n(e,e=>({...e,draft:{...e.draft,...t}}))},send(e,n=null){let a=i(e);if(!a)return;let o=z.getState(),s=[...a.draft.to,...a.draft.cc,...a.draft.bcc];if(s.length===0||s.some(e=>!pr(e))){o.showToast(s.length===0?`Add at least one recipient before sending.`:`Fix the invalid recipients before sending.`);return}a.sourceDraftId!=null&&o.removeMessage(a.sourceDraftId),n?(o.addMessage(yr(a.draft,t().identities,3,{sent_at:n.targetAt,scheduled_undo_status:`pending`})),o.showToast(`Message scheduled for ${n.label}.`)):(o.addMessage(yr(a.draft,t().identities,4)),o.showToast(`Message sent.`)),r(e)},prepareReply(e,n){let r=new Set(t().identities.map(e=>jn(e.email))),i=e=>e.filter(e=>!r.has(jn(e.email))),a=_r(e.from_text),o=a.length>0&&a.every(e=>r.has(jn(e.email))),s=_r(e.to_text),c=i(o?s:a);c.length===0&&(c=a);let l=new Set(c.map(e=>jn(e.email))),u=[];if(n)for(let t of i([...s,...e.cc])){let e=jn(t.email);l.has(e)||(l.add(e),u.push(t))}let d=An(e),f=sr({from:e.from_text,date:e.received_at,subject:e.subject,html:d.html,text:d.text});t().open({to:c,cc:u,subject:ir(e.subject),html:`


${f}`})},prepareForward(e){let n=An(e),r=[`Subject: ${e.subject}`,`Date: ${new Date(e.received_at).toUTCString()}`,`From: ${e.from_text}`,`To: ${e.to_text}`].map(e=>e.replace(/&/g,`&`).replace(//g,`>`)).join(`
`),i=n.html??gr(n.text??``);t().open({subject:ar(e.subject),html:`


-------- Forwarded Message --------
${r}

${i}
`})},openDraft(e){let n=An(e);t().open({to:_r(e.to_text),cc:e.cc,subject:e.subject,html:n.html??gr(n.text??``),sourceDraftId:e.id})}}}),xr=1920;function Sr(){return typeof location>`u`?`dark`:new URLSearchParams(location.search).get(`theme`)===`light`?`light`:`dark`}var Cr=Mt((e,t)=>({theme:Sr(),space:`mail`,quickFilter:``,folderListWidth:240,messageColumnWidth:360,quickFilterFocusRequest:0,setTheme:t=>e({theme:t}),toggleTheme:()=>e({theme:t().theme===`dark`?`light`:`dark`}),setSpace:t=>e({space:t,quickFilter:``}),setQuickFilter:t=>e({quickFilter:t}),setFolderListWidth:t=>e({folderListWidth:t}),setMessageColumnWidth:t=>e({messageColumnWidth:t}),requestQuickFilterFocus:()=>e({quickFilterFocusRequest:t().quickFilterFocusRequest+1})}));function wr(e,t,n){return Math.max(t,Math.min(e,Math.max(t,n)))}function Tr(e){let[t,n]=(0,C.useState)(!1),r=(0,C.useRef)(e);r.current=e;let i=(0,C.useRef)(null),a=(0,C.useCallback)(e=>{let t=i.current;if(!t)return;let n=r.current;n.set(wr(t.startWidth+e.clientX-t.startX,n.min(),n.max()))},[]),o=(0,C.useCallback)(()=>{i.current&&(i.current=null,n(!1),document.body.classList.remove(`is-column-resizing`),window.removeEventListener(`pointermove`,a),window.removeEventListener(`pointerup`,o),window.removeEventListener(`pointercancel`,o))},[a]),s=(0,C.useCallback)(e=>{e.button===0&&(e.preventDefault(),i.current={startX:e.clientX,startWidth:r.current.get()},n(!0),document.body.classList.add(`is-column-resizing`),window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,o,{once:!0}),window.addEventListener(`pointercancel`,o,{once:!0}))},[a,o]),c=(0,C.useCallback)(e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault();let t=r.current,n=e.shiftKey?40:10,i=e.key===`ArrowRight`?1:-1;t.set(wr(t.get()+i*n,t.min(),t.max()))},[]);return(0,C.useEffect)(()=>o,[o]),{active:t,onPointerDown:s,onKeyDown:c}}function Er(){return typeof navigator>`u`?!1:/Mac|iPhone|iPad|iPod/.test(navigator.platform)}function Dr(){return Er()?`⌘`:`Ctrl`}function Or(){return Er()?`Meta`:`Control`}function kr(e){return Er()?e.metaKey:e.ctrlKey}function Ar(e){return e.isComposing||e.keyCode===229}function jr(e){if(!(e instanceof Element)||e.closest(`iframe`))return!1;let t=e.closest(`input, textarea, select, [contenteditable="true"]`);return!(!t||t instanceof HTMLInputElement&&t.type===`checkbox`)}function Mr(e,t){let n=t.key.length===1?t.key.toLowerCase():t.key;return!((e.key.length===1?e.key.toLowerCase():e.key)!==n||!!t.mod!==kr(e)||!!t.shift!==e.shiftKey||!!t.alt!==e.altKey)}var Nr=null;function Pr(e){return Nr=e,()=>{Nr===e&&(Nr=null)}}function Fr(){let{selection:e,open:t}=z.getState();return e.ids.size>0?[...e.ids]:t.id==null?[]:[t.id]}var Ir={j:`next`,k:`previous`,n:`nextUnread`,p:`previousUnread`};function Lr({enabled:e}){let t=(0,C.useRef)(e);t.current=e,(0,C.useEffect)(()=>{function e(e){if(!t.current||e.defaultPrevented||Ar(e))return;let n=br.getState(),r=n.sessions.find(e=>e.presentation===`expanded`);if(r){if(e.key!==`Escape`||document.activeElement?.matches?.(`.compose-dialog [role="combobox"][aria-expanded="true"]`)||document.querySelector(`.compose-dialog--expanded details[data-dropdown-group][open]`))return;e.preventDefault(),n.requestClose(r.id);return}if(e.target instanceof Element&&e.target.closest(`[data-message-control]`)&&[`Enter`,` `,`Escape`,`F2`,`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key))return;let i=Er()?e.metaKey:e.ctrlKey,a=jr(e.target),o=e.key.length===1?e.key.toLowerCase():e.key;if(o===`/`&&!i&&!a||o===`k`&&i){e.preventDefault(),Cr.getState().requestQuickFilterFocus();return}if(Cr.getState().space!==`mail`||a||e.target instanceof Element&&e.target.closest(`[data-tag-picker-popover], details.tag-picker-dropdown[open]`)||e.altKey||i&&o!==`a`)return;let s=z.getState();if(o===`a`&&i){if(!Nr)return;e.preventDefault(),Nr.selectAll();return}if(e.shiftKey&&o!==`r`&&o!==`Delete`&&o!==`Backspace`)return;switch(o){case`c`:e.preventDefault(),n.open();return;case`r`:case`f`:{let{open:t,messages:r}=s,i=t.id==null?null:r.get(t.id);if(!i||i.scheduled_undo_status===`pending`||s.selection.ids.size>0)return;e.preventDefault(),o===`f`?n.prepareForward(i):n.prepareReply(i,e.shiftKey);return}case`a`:case`m`:case`s`:case`Delete`:case`Backspace`:{if(o===`Backspace`&&!Er())return;let t=Fr();if(t.length===0)return;e.preventDefault(),o===`a`?s.archiveMessages(t):o===`m`?s.toggleManySeen(t):o===`s`?s.toggleManyFlagged(t):s.destroyMessages(t);return}case`t`:if(Fr().length===0||!Nr)return;e.preventDefault(),Nr.openTagMenu();return;case`Escape`:if(s.selection.ids.size===0||document.querySelector(`details.app-dropdown[open]`))return;e.preventDefault(),s.clearSelection();return;default:}if(/^[0-9]$/.test(o)){let t=Fr();if(t.length===0)return;if(e.preventDefault(),o===`0`){s.clearTagsMany(t);return}let n=Ft[Number(o)-1];if(!n)return;let r=n.keyword.toLowerCase(),i=t.every(e=>{let t=s.messages.get(e)?.keywords_json??`{}`;return!!JSON.parse(t)[r]});s.setTagsMany(t,i?{remove:[r]}:{add:[r]});return}let c=Ir[o];c&&Nr&&(e.preventDefault(),Nr.navigate(c))}return document.addEventListener(`keydown`,e,!0),()=>document.removeEventListener(`keydown`,e,!0)},[])}var Rr=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),B=o(((e,t)=>{t.exports=Rr()}))();function zr({svg:e,className:t}){return(0,B.jsx)(`span`,{className:t,"aria-hidden":`true`,dangerouslySetInnerHTML:{__html:e}})}function Br({size:e=`compact`,variant:t=`filled`,formAction:n=`none`,iconLeft:r,iconRight:i,className:a,children:o,...s}){let c=[`base`,`primary`,t,`app-button`,e===`compact`?`app-button--compact`:``,a??``].filter(Boolean).join(` `);return(0,B.jsxs)(`button`,{...s,className:c,type:n===`none`?`button`:n,"data-testid":`button`,children:[r?(0,B.jsx)(`span`,{className:`icon`,children:r}):null,(0,B.jsx)(`span`,{className:`text`,children:o}),i?(0,B.jsx)(`span`,{className:`icon`,children:i}):null]})}var Vr=(0,C.forwardRef)(({danger:e=!1,className:t,children:n,...r},i)=>(0,B.jsx)(`button`,{...r,ref:i,type:`button`,className:[`app-icon-button`,e?`app-icon-button--danger`:``,t??``].filter(Boolean).join(` `),children:n}));function Hr({active:e=!1,className:t,children:n,...r}){return(0,B.jsx)(`button`,{...r,type:`button`,className:[`app-toggle-button`,e?`is-active`:``,t??``].filter(Boolean).join(` `),"aria-pressed":e,children:n})}function Ur({maximized:e,surface:t,onToggle:n,className:r}){let i=`${e?`Restore`:`Maximize`} ${t}`;return(0,B.jsx)(Vr,{className:r,"aria-label":i,title:i,onMouseDown:e=>e.preventDefault(),onClick:n,children:e?(0,B.jsx)(De,{size:18,strokeWidth:1.65,"aria-hidden":`true`}):(0,B.jsx)(j,{size:18,strokeWidth:1.65,"aria-hidden":`true`})})}function Wr(e){let t=e instanceof Element?e:e?.currentTarget;if(!(t instanceof Element))return;let n=t.closest(`details`);n instanceof HTMLDetailsElement&&(n.open=!1)}function Gr({group:e=`app`,disabled:t=!1,className:n,onToggle:r,children:i,...a}){let o=(0,C.useRef)(null),s=(0,C.useCallback)(e=>{let t=o.current;t?.open&&(e.target instanceof Node&&t.contains(e.target)||(t.open=!1))},[]),c=(0,C.useCallback)(e=>{let t=o.current;!t?.open||e.key!==`Escape`||(e.preventDefault(),e.stopPropagation(),t.open=!1,t.contains(document.activeElement)&&t.querySelector(`summary`)?.focus())},[]),l=(0,C.useCallback)(()=>{document.removeEventListener(`pointerdown`,s,!0),document.removeEventListener(`keydown`,c,!0)},[s,c]);(0,C.useEffect)(()=>l,[l]);function u(t){let n=o.current;n&&(n.open?(document.addEventListener(`pointerdown`,s,!0),document.addEventListener(`keydown`,c,!0),document.querySelectorAll(`details[data-dropdown-group="${e}"]`).forEach(e=>{e!==n&&e.open&&(e.open=!1)})):l()),r?.(t)}function d(e){t&&(e.preventDefault(),e.stopPropagation())}return(0,B.jsx)(`details`,{...a,ref:o,className:[`app-dropdown`,t?`app-dropdown--disabled`:``,n??``].filter(Boolean).join(` `),"data-dropdown-group":e,onToggle:u,onClickCapture:d,children:i})}function Kr(e,t,n){if(n.key===`Tab`){let t=e?.closest(`details`);t instanceof HTMLDetailsElement&&t.open&&(t.open=!1,t.querySelector(`summary`)?.focus());return}if(![`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(n.key))return;let r=Array.from(e?.querySelectorAll(t)??[]);if(r.length===0)return;n.preventDefault();let i=r.indexOf(document.activeElement),a;switch(n.key){case`ArrowDown`:a=i<0?0:Math.min(r.length-1,i+1);break;case`ArrowUp`:a=i<0?r.length-1:Math.max(0,i-1);break;case`Home`:a=0;break;default:a=r.length-1}r[a]?.focus()}var qr=` - - - -`,Jr=` - - - -`,Yr=` - - - -`,Xr=` - - - - -`;function Zr(e){if(e==null||Number.isNaN(e))return null;if(e<=0)return`0 B`;for(let t of[{threshold:1024**3,label:`GB`,divisor:1024**3},{threshold:1024**2,label:`MB`,divisor:1024**2},{threshold:1024,label:`KB`,divisor:1024}])if(e>=t.threshold)return`${Math.floor(e/t.divisor)} ${t.label}`;return`${e} B`}function Qr({active:e,unreadCount:t,folderListHidden:n,sidebarLabel:r,onChange:i,onToggleFolderList:a,inert:o}){let s=`${n?`Show`:`Hide`} ${r}`;return(0,B.jsxs)(`nav`,{className:`app-spaces`,"aria-label":`Spaces`,inert:o,"aria-hidden":o||void 0,children:[(0,B.jsxs)(Hr,{className:`app-spaces__item`,active:e===`mail`,onClick:()=>i(`mail`),"aria-label":`Mail`,title:`Mail`,children:[(0,B.jsx)(_e,{size:20,strokeWidth:1.75}),t>0?(0,B.jsx)(`span`,{className:`app-spaces__badge`,"aria-hidden":`true`,children:t>9999?`9999+`:t}):null]}),(0,B.jsx)(Hr,{className:`app-spaces__item`,active:e===`contacts`,onClick:()=>i(`contacts`),"aria-label":`Contacts`,title:`Contacts`,children:(0,B.jsx)(ze,{size:20,strokeWidth:1.75})}),(0,B.jsxs)(`div`,{className:`app-spaces__bottom-actions`,children:[(0,B.jsx)(Hr,{className:`app-spaces__item app-spaces__settings`,"aria-label":`Settings`,title:`Settings`,"data-settings-gear":!0,children:(0,B.jsx)(Ee,{size:20,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(Hr,{className:`app-spaces__item`,active:!n,"aria-label":s,title:s,"data-folder-list-toggle":!0,onClick:a,children:(0,B.jsx)(`span`,{className:`app-spaces__folder-toggle-icon${n?` is-hidden`:``}`,"aria-hidden":`true`,children:(0,B.jsx)(`span`,{})})})]})]})}function $r(e){(0,C.useEffect)(()=>{function t(t){let n=e.current;n?.open&&t.target instanceof Node&&!n.contains(t.target)&&(n.open=!1)}return document.addEventListener(`pointerdown`,t),()=>document.removeEventListener(`pointerdown`,t)},[e])}function ei(){let e=(0,C.useRef)(null);$r(e);let t=pt.email,n=mn(t),r=hn(t),i=()=>{e.current&&(e.current.open=!1)};return(0,B.jsxs)(`details`,{ref:e,className:`account-menu`,children:[(0,B.jsx)(`summary`,{className:`account-menu__button`,"aria-label":`Open account menu`,children:(0,B.jsx)(`span`,{className:`account-menu__avatar`,style:r,"aria-hidden":`true`,children:n})}),(0,B.jsxs)(`div`,{className:`account-menu__popover`,role:`menu`,children:[(0,B.jsxs)(`div`,{className:`account-menu__identity`,children:[(0,B.jsx)(`span`,{className:`account-menu__avatar account-menu__avatar--large`,style:r,"aria-hidden":`true`,children:n}),(0,B.jsx)(`span`,{className:`account-menu__email`,children:t})]}),(0,B.jsxs)(`button`,{className:`account-menu__item`,type:`button`,role:`menuitem`,onClick:i,children:[(0,B.jsx)(Ee,{size:16,strokeWidth:1.75,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Settings`})]}),(0,B.jsxs)(`a`,{className:`account-menu__item`,href:`#account`,role:`menuitem`,onClick:i,children:[(0,B.jsx)(re,{size:16,strokeWidth:1.75,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Account Settings`})]}),(0,B.jsxs)(`a`,{className:`account-menu__item`,href:`#support`,role:`menuitem`,onClick:i,children:[(0,B.jsx)(zr,{className:`account-menu__support-icon`,svg:Xr}),(0,B.jsx)(`span`,{children:`Contact Support`})]}),(0,B.jsxs)(`button`,{className:`account-menu__item`,type:`button`,role:`menuitem`,onClick:i,children:[(0,B.jsx)(he,{size:16,strokeWidth:1.75,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Log Out`})]})]})]})}var ti=[{id:`appointment`,name:`Appointment`,glyph:qr},{id:`send`,name:`Send`,glyph:Yr}];function ni(){let e=(0,C.useRef)(null);$r(e);let t=()=>{e.current?.open&&(e.current.open=!1)};return(0,B.jsxs)(`details`,{ref:e,className:`app-drawer`,onKeyDown:e=>{e.key===`Escape`&&t()},children:[(0,B.jsx)(`summary`,{className:`quick-filter__action app-drawer__button`,"aria-label":`Open app drawer`,title:`Apps`,children:(0,B.jsx)(ce,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsxs)(`div`,{className:`app-drawer__popover`,role:`menu`,"aria-label":`Thunderbird Pro apps`,children:[(0,B.jsxs)(`button`,{className:`app-drawer__tile app-drawer__tile--current`,type:`button`,role:`menuitem`,"aria-current":`page`,onClick:t,children:[(0,B.jsx)(zr,{className:`app-drawer__icon`,svg:Jr}),(0,B.jsx)(`span`,{className:`app-drawer__label`,children:`Mail`})]}),ti.map(e=>(0,B.jsxs)(`a`,{className:`app-drawer__tile`,href:`#${e.id}`,role:`menuitem`,onClick:t,children:[(0,B.jsx)(zr,{className:`app-drawer__icon`,svg:e.glyph}),(0,B.jsx)(`span`,{className:`app-drawer__label`,children:e.name})]},e.id))]})]})}var ri=30*1024**3,ii=Math.round(ri*.37);function ai(){let e=Math.round(ii/ri*100),t=`${e}% of ${Zr(ri)}`;return(0,B.jsxs)(`div`,{className:`storage-usage`,role:`status`,"aria-label":t,children:[(0,B.jsx)(`div`,{className:`storage-usage__track`,"aria-hidden":`true`,children:(0,B.jsx)(`div`,{className:`storage-usage__fill`,style:{width:`${e}%`}})}),(0,B.jsx)(`p`,{className:`storage-usage__label`,children:t})]})}var oi=` - - - - -`,si=` - - - - -`,ci=` - - - - -`,li=` - - - - -`,ui=` - - - - -`,di=` - - - -`,fi=` - - - - -`,pi=` - - - - -`,mi={inbox:ci,sent:fi,drafts:si,scheduled:di,archive:oi,trash:` - - - - -`,junk:pi},hi={inbox:`#1a73e8`,sent:`#188038`,drafts:`#7e22ce`,scheduled:`#0e7490`,archive:`#8b5a2b`,trash:`#5f6368`,junk:`#d93025`,important:`#f9ab00`,flagged:`#c5221f`,all:`#5f6368`},gi={newsletters:{icon:li,color:`#7378a6`},feeds:{icon:ui,color:`#f97316`}};function _i(e){return String(e??``).trim().toLowerCase()}function vi(e){let t=e.role??null,n=gi[_i(e.name)];return{icon:(t&&mi[t])??n?.icon??` - - - - -`,color:(t&&hi[t])??n?.color??`var(--folder-icon-color)`}}function yi(e){let t=e.role===`scheduled`?e.total_emails:e.unread_emails;return Math.max(0,Number(t)||0)}function bi(e){switch(e.role){case`inbox`:return 0;case`drafts`:return 1;case`scheduled`:return 2;case`sent`:return 3;case`archive`:return 4;case`junk`:return 5;case`trash`:return 6;default:return 100}}function xi(e){return e.role!=null&&mi[e.role]!=null}function Si(e,t){return bi(e)-bi(t)||Number(t.is_starred??0)-Number(e.is_starred??0)||String(e.name??``).localeCompare(String(t.name??``))}var Ci=`application/x-stormbox-message-ids`,wi=Mt(e=>({dragging:!1,draggedIds:[],sourceViewId:null,startDrag(t,{messageId:n,selectedIds:r,sourceViewId:i}){let a=r.has(n)?[...r]:[n];t.dataTransfer.effectAllowed=`copyMove`,t.dataTransfer.setData(Ci,JSON.stringify({ids:a,sourceViewId:i})),t.dataTransfer.setData(`text/plain`,a.length===1?`1 message`:`${a.length} messages`),e({dragging:!0,draggedIds:a,sourceViewId:i})},endDrag(){e({dragging:!1,draggedIds:[],sourceViewId:null})}}));function Ti(e){let t=e.dataTransfer.getData(Ci);if(t)try{let e=JSON.parse(t);if(Array.isArray(e.ids))return{ids:e.ids.map(Number),sourceViewId:e.sourceViewId??null}}catch{return null}let n=wi.getState();return n.dragging?{ids:n.draggedIds,sourceViewId:n.sourceViewId}:null}function Ei(e,t,n){let r=new Map(e.map(e=>[e.id,e])),i=new Map;for(let t of e){let e=t.parent_id==null?null:r.get(t.parent_id),n=t.is_starred===1&&e!=null,a=e!=null&&!n?t.parent_id:`ROOT`;i.has(a)||i.set(a,[]),i.get(a).push(t)}for(let e of i.values())e.sort(Si);function a(e,r){let o=vi(e),s=t.get(e.id)??0,c=n.get(e.id)??0,l=(i.get(e.id)??[]).map(e=>a(e,r+1)),u=yi({role:e.role,unread_emails:s,total_emails:c});return{...e,depth:r,icon:o.icon,tone:o.color,children:l,unread_emails:s,total_emails:c,subtree_unread:l.reduce((e,t)=>e+t.subtree_unread,u)}}return(i.get(`ROOT`)??[]).map(e=>a(e,0))}var Di=(0,C.memo)(function e({folder:t,current:n,expanded:r,dragOverId:i,dragging:a,dragSourceId:o,onPick:s,onToggle:c,onDragTarget:l,onDropOn:u}){let d=t.children.length>0,f=d&&!r.has(t.id),p=f?t.subtree_unread:yi({role:t.role,unread_emails:t.unread_emails,total_emails:t.total_emails}),m=a&&i===t.id?o===t.id?`invalid`:`move`:null,h={paddingLeft:`${10+t.depth*16}px`,"--folder-tone":t.tone};return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{className:[`folder-node`,n===t.id?`is-current`:``,t.tone?`has-tone`:``,m===`move`?`is-drop-valid`:``,m===`invalid`?`is-drop-invalid`:``].filter(Boolean).join(` `),style:h,"data-folder-id":t.id,onDragEnter:e=>{e.preventDefault(),l(t.id)},onDragOver:e=>{e.preventDefault(),e.dataTransfer.dropEffect=o===t.id?`none`:`move`},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||i===t.id&&l(null)},onDrop:e=>u(t.id,e),children:[d?(0,B.jsx)(`button`,{type:`button`,className:`folder-node__toggle${f?` is-collapsed`:``}`,"aria-expanded":!f,"aria-label":f?`Expand folder`:`Collapse folder`,onClick:()=>c(t.id),children:(0,B.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`12`,height:`12`,"aria-hidden":`true`,children:(0,B.jsx)(`path`,{d:`M6 4l4 4-4 4`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`})})}):(0,B.jsx)(`span`,{className:`folder-node__toggle folder-node__toggle--spacer`,"aria-hidden":`true`}),(0,B.jsxs)(`button`,{type:`button`,className:`folder-node__button`,onClick:()=>s(t.id),children:[(0,B.jsxs)(`span`,{className:`folder-node__icon-wrap`,children:[(0,B.jsx)(zr,{className:`folder-node__icon`,svg:t.icon}),t.is_starred===1?(0,B.jsx)(Oe,{className:`folder-node__star`,size:10,strokeWidth:2,"aria-label":`Starred folder`}):null]}),(0,B.jsx)(`span`,{className:`folder-node__name`,children:t.name||`(unnamed)`}),p>0?(0,B.jsx)(`span`,{className:`folder-node__count`,children:p>99999?`99999+`:p}):null]})]}),d&&!f?t.children.map(t=>(0,B.jsx)(e,{folder:t,current:n,expanded:r,dragOverId:i,dragging:a,dragSourceId:o,onPick:s,onToggle:c,onDragTarget:l,onDropOn:u},t.id)):null]})});function Oi({keyword:e,name:t,color:n,count:r,current:i,dropActive:a,onPick:o,onDragTarget:s,onDropOn:c}){return(0,B.jsx)(`div`,{className:[`tag-view-node`,i?`is-current`:``,a?`is-drop-valid`:``].filter(Boolean).join(` `),style:n?{"--tag-color":n}:void 0,"data-tag-view":e,onDragEnter:t=>{t.preventDefault(),s(e)},onDragOver:e=>{e.preventDefault(),e.dataTransfer.dropEffect=`copy`},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||s(null)},onDrop:t=>c(e,t),children:(0,B.jsxs)(`button`,{type:`button`,className:`tag-view-node__button`,"aria-current":i?`page`:void 0,onClick:()=>o(e),children:[(0,B.jsx)(`span`,{className:`tag-view-node__icon-wrap`,"aria-hidden":`true`,children:n===null?(0,B.jsx)(Oe,{className:`tag-view-node__star`,size:14,strokeWidth:2}):(0,B.jsx)(`span`,{className:`tag-view-node__dot`})}),(0,B.jsx)(`span`,{className:`tag-view-node__name`,children:t}),r>0?(0,B.jsx)(`span`,{className:`tag-view-node__count`,children:r>99999?`99999+`:r}):null]})})}function ki(){let e=z(e=>e.folders),t=z(e=>e.messages),n=z(e=>e.currentViewId),r=z(e=>e.selectFolder),{dragging:i,sourceViewId:a,endDrag:o}=wi(),[s,c]=(0,C.useState)(()=>new Set),[l,u]=(0,C.useState)(null),[d,f]=(0,C.useState)(null),p=$t({messages:t}),m=(0,C.useMemo)(()=>Ei(e,p.unread,p.total),[e,p]),h=m.filter(xi),g=m.filter(e=>!xi(e)),_=g.filter(e=>e.is_starred===1),v=g.filter(e=>e.is_starred!==1),y=(0,C.useCallback)(e=>{c(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),b=(0,C.useCallback)((e,t)=>{t.preventDefault(),u(null);let n=Ti(t);n&&n.ids.length>0&&n.sourceViewId!==e&&z.getState().moveMessages(n.ids,e),o()},[o]),x=(0,C.useCallback)((e,t)=>{t.preventDefault(),f(null);let n=Ti(t);if(n&&n.ids.length>0){let t=z.getState();e===`$flagged`?t.markManyFlagged(n.ids,!0):t.setTagsMany(n.ids,{add:[e]})}o()},[o]),S=(0,C.useCallback)(e=>r(qt(e)),[r]),w=[{keyword:Wt,name:`Starred`,color:null},...Ft.map(e=>({keyword:e.keyword.toLowerCase(),name:e.name,color:e.color}))],T=Kt(n)?R(n):null,E={current:n,expanded:s,dragOverId:l,dragging:i,dragSourceId:a,onPick:r,onToggle:y,onDragTarget:u,onDropOn:b};return(0,B.jsxs)(`nav`,{className:`folder-tree`,"aria-label":`Mailboxes`,children:[h.map(e=>(0,B.jsx)(Di,{folder:e,...E},e.id)),(0,B.jsxs)(`div`,{className:`folder-tree__heading-row`,children:[(0,B.jsx)(`h3`,{className:`folder-tree__heading`,children:`Folders`}),(0,B.jsx)(`span`,{className:`folder-tree__heading-actions`,children:(0,B.jsx)(`button`,{type:`button`,className:`folder-tree__manage`,"data-manage-folders":!0,title:`Manage Folders`,"aria-label":`Manage Folders`,children:(0,B.jsx)(Te,{size:16,strokeWidth:1.75,"aria-hidden":`true`})})})]}),_.map(e=>(0,B.jsx)(Di,{folder:e,...E},e.id)),v.map(e=>(0,B.jsx)(Di,{folder:e,...E},e.id)),(0,B.jsxs)(`div`,{className:`folder-tree__heading-row`,"data-tag-views":!0,children:[(0,B.jsx)(`h3`,{className:`folder-tree__heading`,children:`Tags`}),(0,B.jsx)(`span`,{className:`folder-tree__heading-actions`,children:(0,B.jsx)(`button`,{type:`button`,className:`folder-tree__manage`,"data-manage-tags":!0,title:`Manage Tags`,"aria-label":`Manage Tags`,children:(0,B.jsx)(Te,{size:16,strokeWidth:1.75,"aria-hidden":`true`})})})]}),w.map(e=>(0,B.jsx)(Oi,{keyword:e.keyword,name:e.name,color:e.color,count:p.tags.get(e.keyword)??0,current:T===e.keyword,dropActive:i&&d===e.keyword,onPick:S,onDragTarget:f,onDropOn:x},e.keyword))]})}var Ai=m();function ji(e,t,n){let r=Array(e);return new Proxy(r,{get(r,i,a){if(typeof i==`string`){let a=i.charCodeAt(0);if(a>=48&&a<=57){let a=+i;if(Number.isInteger(a)&&a>=0&&ar[t]!==e)?(r=o,i=t(...o),n?.onChange&&!(a&&n.skipInitialOnChange)&&n.onChange(i),a=!1,i):i}return o.updateDeps=e=>{r=e},o}function Ni(e,t){if(e===void 0)throw Error(`Unexpected undefined${t?`: ${t}`:``}`);return e}var Pi=(e,t)=>Math.abs(e-t)<1.01,Fi=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},Ii,Li=()=>{if(Ii!==void 0)return Ii;if(typeof navigator>`u`)return Ii=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return Ii=!0;let e=navigator.maxTouchPoints;return Ii=navigator.platform===`MacIntel`&&e!==void 0&&e>0},Ri=e=>{let{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},zi=e=>e,Bi=e=>{let t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1)-t+1,r=Array(n);for(let e=0;e{let n=e.scrollElement;if(!n)return;let r=e.targetWindow;if(!r)return;let i=e=>{let{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(i(Ri(n)),!r.ResizeObserver)return()=>{};let a=new r.ResizeObserver(t=>{let r=()=>{let e=t[0];if(e?.borderBoxSize){let t=e.borderBoxSize[0];if(t){i({width:t.inlineSize,height:t.blockSize});return}}i(Ri(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return a.observe(n,{box:`border-box`}),()=>{a.unobserve(n)}},Hi={passive:!0},Ui=typeof window>`u`?!0:`onscrollend`in window,Wi=(e,t,n)=>{let r=e.scrollElement;if(!r)return;let i=e.targetWindow;if(!i)return;let a=e.options.useScrollendEvent&&Ui,o=0,s=a?null:Fi(i,()=>t(o,!1),e.options.isScrollingResetDelay),c=e=>()=>{o=n(r),s?.(),t(o,e)},l=c(!0),u=c(!1);return r.addEventListener(`scroll`,l,Hi),a&&r.addEventListener(`scrollend`,u,Hi),()=>{r.removeEventListener(`scroll`,l),a&&r.removeEventListener(`scrollend`,u)}},Gi=(e,t)=>Wi(e,t,t=>{let{horizontal:n,isRtl:r}=e.options;return n?t.scrollLeft*(r&&-1||1):t.scrollTop}),Ki=(e,t,n)=>{if(t?.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?`inlineSize`:`blockSize`])}return e[n.options.horizontal?`offsetWidth`:`offsetHeight`]},qi=(e,{adjustments:t=0,behavior:n},r)=>{var i,a;(a=(i=r.scrollElement)?.scrollTo)==null||a.call(i,{[r.options.horizontal?`left`:`top`]:e+t,behavior:n})},Ji=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var e;return((e=this.targetWindow?.performance)?.now)?.call(e)??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,n=this.indexFromElement(t);if(!t.isConnected){this.observer.unobserve(t);for(let[e,n]of this.elementsCache)if(n===t){this.elementsCache.delete(e);break}return}this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}));return{disconnect:()=>{var n;(n=t())==null||n.disconnect(),e=null},observe:e=>t()?.observe(e,{box:`border-box`}),unobserve:e=>t()?.unobserve(e)}})(),this.range=null,this.setOptions=e=>{let t={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:zi,rangeExtractor:Bi,onChange:()=>{},measureElement:Ki,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:`data-index`,initialMeasurementsCache:[],lanes:1,anchorTo:`start`,followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:`estimate`};for(let n in e){let r=e[n];r!==void 0&&(t[n]=r)}let n=this.options,r=null,i=null;if(n!==void 0&&n.enabled&&t.enabled&&t.anchorTo===`end`&&this.scrollElement!==null){let e=n.count,a=t.count,o=this.getMeasurements(),s=e>0?o[0]?.key??n.getItemKey(0):null,c=e>0?o[e-1]?.key??n.getItemKey(e-1):null;if(a!==e||e>0&&a>0&&(t.getItemKey(0)!==s||t.getItemKey(a-1)!==c)){let s=e>0?this.getVirtualItemForOffset(this.getScrollOffset())??o[0]:null;s&&(r=[s.key,this.getScrollOffset()-s.start]);let l=t.followOnAppend===!0?`auto`:t.followOnAppend||null;l&&a>e&&this.isAtEnd(n.scrollEndThreshold)&&(e===0||t.getItemKey(a-1)!==c)&&(i=l)}}this.options=t,(r||i)&&(this.pendingScrollAnchor=[r?.[0]??null,r?.[1]??0,i])},this.notify=e=>{var t,n;(n=(t=this.options).onChange)==null||n.call(t,this,e)},this.maybeNotify=Mi(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{let e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&`ownerDocument`in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=this.scrollElement?.window??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{this._intendedScrollOffset!==null&&Math.abs(e-this._intendedScrollOffset)<1.5&&(e=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0,this.scrollDirection=t?this.getScrollOffset(){this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!Li()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};e.addEventListener(`touchstart`,t,Hi),e.addEventListener(`touchend`,n,Hi),this.unsubs.push(()=>{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchend`,n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}let t=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,t&&this.scrollElement&&this.options.enabled){let[e,n,r]=t;if(e!==null){let{count:t,getItemKey:r}=this.options,i=0;for(;i{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;let e=this.getScrollOffset(),t=this.getMaxScrollOffset();if(e<0||e>t)return;let n=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(e,{adjustments:this.scrollAdjustments+=n,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?`width`:`height`]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset==`function`?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{let n=new Map,r=new Map;for(let i=t-1;i>=0;i--){let t=e[i];if(n.has(t.lane))continue;let a=r.get(t.lane);if(a==null||t.end>a.end?r.set(t.lane,t):t.ende.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=Mi(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,t,n,r,i,a,o)=>(this.prevLanes!==void 0&&this.prevLanes!==a&&(this.lanesChangedFlag=!0),this.prevLanes=a,this.pendingMin=null,{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o}),{key:!1}),this.getMeasurements=Mi(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o},s)=>{let c=this.itemSizeCache;if(!i)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let l=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1),a===1){let i=this.options.gap,a=e*2,o=this._flatMeasurements;if(!o||o.length0&&e.set(o.subarray(0,l*2)),o=e,this._flatMeasurements=o}let s;if(l===0)s=t+n;else{let e=l-1;s=o[e*2]+o[e*2+1]+i}for(let t=l;t1){s=a;let e=d[s],r=e===void 0?void 0:u[e];l=r?r.end+this.options.gap:t+n}else{let e=this.options.lanes===1?u[i-1]:this.getFurthestMeasurement(u,i);l=e?e.end+this.options.gap:t+n,s=e?e.lane:i%this.options.lanes,this.options.lanes>1&&f&&this.laneAssignments.set(i,s)}let p=c.get(e),m=typeof p==`number`?p:this.options.estimateSize(i),h=l+m;u[i]={index:i,start:l,size:m,end:h,key:e,lane:s},d[s]=i}return this.measurementsCache=u,u},{key:!1,debug:()=>this.options.debug}),this.calculateRange=Mi(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,r)=>this.range=e.length>0&&t>0?Xi({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:r===1&&this._flatMeasurements!=null?this._flatMeasurements:null}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=Mi(()=>{let e=null,t=null,n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,r,i)=>r===null||i===null?[]:e({startIndex:r,endIndex:i,overscan:t,count:n}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{if(!this.scrollState||this.scrollState.behavior!==`smooth`)return!0;let t=this.scrollState.index??this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index;if(t!==void 0&&this.range){let n=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),r=Math.max(0,t-n),i=Math.min(this.options.count-1,t+n);return e>=r&&e<=i}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});return}let t=this.indexFromElement(e),n=this.options.getItemKey(t),r=this.elementsCache.get(n);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(n,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{if(e<0||e>=this.options.count)return;let n,r,i,a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)i=this.options.getItemKey(e),r=a[e*2],n=a[e*2+1];else{let t=this.measurementsCache[e];if(!t)return;i=t.key,r=t.start,n=t.size}let o=t-(this.itemSizeCache.get(i)??n);if(o!==0){let a=this.options.anchorTo===`end`&&this.scrollState?.behavior!==`smooth`&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,s=a?this.getTotalSize():0,c=this.scrollState?.behavior!==`smooth`&&(this.shouldAdjustScrollPositionOnItemSizeChange===void 0?r[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let n=[];for(let r=0,i=e.length;rthis.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(t.length===0)return;let n=this._flatMeasurements,r=this.options.lanes===1&&n!=null;return Ni(t[Yi(0,t.length-1,r?e=>n[e*2]:e=>Ni(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if(`scrollHeight`in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(e=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=e,this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;let r=this.getSize(),i=this.getScrollOffset();t===`auto`&&(t=e>=i+r?`end`:`start`),t===`center`?e+=(n-r)/2:t===`end`&&(e-=r);let a=this.getMaxScrollOffset();return Math.max(Math.min(a,e),0)},this.getOffsetForIndex=(e,t=`auto`)=>{e=Math.max(0,Math.min(e,this.options.count-1));let n=this.getSize(),r=this.getScrollOffset(),i=this.measurementsCache[e];if(!i)return;if(t===`auto`)if(i.end>=r+n-this.options.scrollPaddingEnd)t=`end`;else if(i.start<=r+this.options.scrollPaddingStart)t=`start`;else return[r,t];if(t===`end`&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let a=t===`end`?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(a,t,i.size),t]},this.scrollToOffset=(e,{align:t=`start`,behavior:n=`auto`}={})=>{let r=this.getOffsetForAlignment(e,t),i=this.now();this.scrollState={index:null,align:t,behavior:n,startedAt:i,lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t=`auto`,behavior:n=`auto`}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));let r=this.getOffsetForIndex(e,t);if(!r)return;let[i,a]=r,o=this.now();this.scrollState={index:e,align:a,behavior:n,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t=`auto`}={})=>{let n=this.getScrollOffset()+e,r=this.now();this.scrollState={index:null,align:`start`,behavior:t,startedAt:r,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:e=`auto`}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:`end`,behavior:e});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:e})},this.getTotalSize=()=>{let e=this.getMeasurements(),t;if(e.length===0)t=this.options.paddingStart;else if(this.options.lanes===1){let n=e.length-1,r=this._flatMeasurements;t=r==null?e[n]?.end??0:r[n*2]+r[n*2+1]}else{let n=Array(this.options.lanes).fill(null),r=e.length-1;for(;r>=0&&n.some(e=>e===null);){let t=e[r];n[t.lane]===null&&(n[t.lane]=t.end),r--}t=Math.max(...n.filter(e=>e!==null))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{let e=[];if(this.itemSizeCache.size===0)return e;let t=this.getMeasurements();for(let n of t)n&&this.itemSizeCache.has(n.key)&&e.push({index:n.index,key:n.key,start:n.start,size:n.size,end:n.end,lane:n.lane});return e},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this._intendedScrollOffset=e+(t??0),this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(e)}applyScrollAdjustment(e,t){e!==0&&(Li()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=e:this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=e,behavior:t}))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId??=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()})}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=this.scrollState.index==null?void 0:this.getOffsetForIndex(this.scrollState.index,this.scrollState.align),t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&Pi(t,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.getScrollOffset()!==t&&this._scrollToOffset(t,{adjustments:void 0,behavior:`auto`}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,n){let e=this.getSize()||600,n=Math.abs(t-this.getScrollOffset()),r=this.scrollState.behavior===`smooth`&&n>e;this.scrollState.lastTargetOffset=t,r||(this.scrollState.behavior=`auto`),this._scrollToOffset(t,{adjustments:void 0,behavior:r?`smooth`:`auto`})}this.scheduleScrollReconcile()}},Yi=(e,t,n,r)=>{for(;e<=t;){let i=(e+t)/2|0,a=n(i);if(ar)t=i-1;else return i}return e>0?e-1:0};function Xi({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:i}){let a=e.length-1,o=i?e=>i[e*2]:t=>e[t].start,s=i?e=>i[e*2]+i[e*2+1]:t=>e[t].end;if(e.length<=r)return{startIndex:0,endIndex:a};let c=Yi(0,a,o,n),l=c;if(r===1)for(;l1){let i=Array(r).fill(0);for(;le=0&&o.some(e=>e>=n);){let t=e[c];o[t.lane]=t.start,c--}c=Math.max(0,c-c%r),l=Math.min(a,l+(r-1-l%r))}return{startIndex:c,endIndex:l}}var Zi=typeof document<`u`?C.useLayoutEffect:C.useEffect;function Qi({useFlushSync:e=!0,...t}){let n=C.useReducer(e=>e+1,0)[1],r={...t,onChange:(r,i)=>{var a;e&&i?(0,Ai.flushSync)(n):n(),(a=t.onChange)==null||a.call(t,r,i)}},[i]=C.useState(()=>new Ji(r));return i.setOptions(r),Zi(()=>i._didMount(),[]),Zi(()=>i._willUpdate()),i}function $i(e){return Qi({observeElementRect:Vi,observeElementOffset:Gi,scrollToFn:qi,...e})}function ea(e){let t=e?.role;return t===`sent`||t===`drafts`}function ta(e,t){return t?e?.to_text:e?.from_text}function na(e,t){let n=ta(e,t);return n?pn(n):t?`(no recipient)`:`(no sender)`}function ra(e,t){return t===`received`?e.received_at:e.sent_at??e.received_at}function V(e){if(!e)return``;let t=new Date(Number(e));if(Number.isNaN(t.valueOf()))return``;let n=new Date(dt);if(t.getUTCFullYear()===n.getUTCFullYear()&&t.getUTCMonth()===n.getUTCMonth()&&t.getUTCDate()===n.getUTCDate())return t.toLocaleTimeString(ft,{hour:`2-digit`,minute:`2-digit`,timeZone:`UTC`});let r=t.getUTCFullYear()===n.getUTCFullYear();return t.toLocaleDateString(ft,r?{month:`short`,day:`numeric`,timeZone:`UTC`}:{year:`numeric`,month:`short`,day:`numeric`,timeZone:`UTC`})}function ia(e){return String(e??``).trim().toLowerCase()}function aa(e,t){return t?[e?.from_text,e?.to_text,e?.subject].some(e=>ia(e).includes(t)):!0}var oa=3,sa=`M6 .496A.691.691 0 0 0 5.51.7L.699 5.51a.692.692 0 0 0 0 .981l4.81 4.811c.272.271.71.271.981 0l4.81-4.81c.23-.205.203-.491.2-.682V1.192A.69.69 0 0 0 10.808.5C9.553.501 7.237.501 6 .496Z`,ca=`M6-.004a1.2 1.2 0 0 0-.844.35l-4.81 4.81a1.202 1.202 0 0 0 0 1.688l4.81 4.81a1.202 1.202 0 0 0 1.688 0l4.789-4.79c.416-.372.37-.911.367-1.063V1.19A1.2 1.2 0 0 0 10.808 0 1272.319 1272.319 0 0 1 6-.005zm-.002 1H6c1.238.005 3.553.005 4.808.004.116 0 .192.076.192.192v4.624c.003.231.01.264-.032.301a.53.53 0 0 0-.021.02l-4.81 4.81c-.082.082-.21.097-.274 0l-4.81-4.81a.184.184 0 0 1 0-.274l4.81-4.81a.216.216 0 0 1 .135-.057zM9 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z`;function la({tags:e,title:t,...n}){let r=e.slice(0,oa),i=e.length-r.length;return(0,B.jsx)(`span`,{className:`tag-stack`,"aria-hidden":`true`,title:t,...n,children:r.length>0?(0,B.jsxs)(B.Fragment,{children:[r.map(e=>(0,B.jsxs)(`svg`,{className:`tag-stack__icon`,style:e.color?{"--tag-color":e.color}:void 0,"data-tag-keyword":e.keyword,viewBox:`0 0 12 12`,width:`16`,height:`16`,children:[(0,B.jsx)(`path`,{className:`tag-stack__body`,d:sa}),(0,B.jsx)(`path`,{className:`tag-stack__outline`,d:ca})]},e.keyword)),i>0?(0,B.jsxs)(`span`,{className:`tag-stack__more`,children:[`+`,i]}):null]}):(0,B.jsxs)(`svg`,{className:`tag-stack__icon tag-stack__icon--empty`,viewBox:`0 0 12 12`,width:`16`,height:`16`,children:[(0,B.jsx)(`path`,{className:`tag-stack__body`,d:sa}),(0,B.jsx)(`path`,{className:`tag-stack__outline`,d:ca})]})})}function ua({tag:e,removable:t=!1,onRemove:n}){let r=e.defined?e.name:`${e.name} (keyword without a tag definition)`;return(0,B.jsxs)(`span`,{className:[`tag-chip`,e.defined?``:`tag-chip--undefined`,t?`tag-chip--removable`:``].filter(Boolean).join(` `),style:e.color?{"--tag-color":e.color}:void 0,"data-tag-keyword":e.keyword,children:[(0,B.jsxs)(`span`,{className:`tag-chip__body`,title:r,children:[(0,B.jsx)(`span`,{className:`tag-chip__dot`,"aria-hidden":`true`}),(0,B.jsx)(`span`,{className:`tag-chip__name`,children:e.name})]}),t?(0,B.jsx)(`button`,{className:`tag-chip__remove`,type:`button`,title:`Remove tag ${e.name}`,"aria-label":`Remove tag ${e.name}`,onClick:t=>{t.stopPropagation(),n?.(e)},children:(0,B.jsx)(Be,{size:11,strokeWidth:2.25,"aria-hidden":`true`})}):null]})}var da=`[role="menuitemcheckbox"], [role="menuitem"]`,fa=(0,C.forwardRef)(function({targets:e,definitions:t,label:n=`Tags`,onToggle:r,onClear:i,onManage:a,onClose:o},s){let c=(0,C.useRef)(null),l=(0,C.useMemo)(()=>Ut(e,t),[e,t]),u=t.map((e,t)=>{let n=It(e.keyword);return{keyword:n,name:e.name,color:e.color,presence:l.presence(n),digit:t<9?t+1:null}}),d=new Set(t.map(e=>It(e.keyword))),f=l.keywords.filter(e=>!d.has(e)).map(e=>({keyword:e,name:e,color:null,presence:l.presence(e),digit:null})),p=l.keywords.length>0,m=e=>r(e.keyword,e.presence!==`all`);(0,C.useImperativeHandle)(s,()=>({focusFirst:()=>c.current?.querySelector(da)?.focus()}),[]);function h(e){let t=!e.ctrlKey&&!e.metaKey&&!e.altKey;if(t&&(e.key===`t`||e.key===`T`)){e.preventDefault(),e.stopPropagation(),o?.();return}if(t&&/^[0-9]$/.test(e.key)){e.preventDefault(),e.stopPropagation();let t=Number(e.key);if(t===0){p&&i();return}let n=u[t-1];n&&m(n);return}Kr(c.current,da,e)}let g=e=>e===`all`?(0,B.jsx)(te,{size:14,strokeWidth:2.5}):e===`some`?(0,B.jsx)(N,{size:14,strokeWidth:2.5}):null,_=e=>e===`all`?`true`:e===`some`?`mixed`:`false`;return(0,B.jsxs)(`div`,{ref:c,className:`tag-picker`,role:`menu`,"aria-label":n,onKeyDown:h,children:[p?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`button`,{className:`app-dropdown__item tag-picker__item tag-picker__clear`,type:`button`,role:`menuitem`,tabIndex:-1,"aria-keyshortcuts":`0`,"data-tag-picker-clear":!0,onClick:i,children:[(0,B.jsx)(`span`,{className:`tag-picker__check`,"aria-hidden":`true`,children:(0,B.jsx)(Be,{size:14,strokeWidth:2})}),(0,B.jsx)(`span`,{className:`tag-picker__name`,children:`Remove All Tags`}),(0,B.jsx)(`kbd`,{className:`tag-picker__digit`,"aria-hidden":`true`,children:`0`})]}),(0,B.jsx)(`div`,{className:`tag-picker__separator`,role:`separator`})]}):null,u.length>0?(0,B.jsx)(`div`,{role:`group`,"aria-label":`Tags`,children:u.map(e=>(0,B.jsxs)(`button`,{className:`app-dropdown__item tag-picker__item`,type:`button`,role:`menuitemcheckbox`,tabIndex:-1,"aria-checked":_(e.presence),"aria-keyshortcuts":e.digit===null?void 0:String(e.digit),"data-tag-keyword":e.keyword,style:e.color?{"--tag-color":e.color}:void 0,onClick:()=>m(e),children:[(0,B.jsx)(`span`,{className:`tag-picker__check`,"aria-hidden":`true`,children:g(e.presence)}),(0,B.jsx)(`span`,{className:`tag-picker__dot`,"aria-hidden":`true`}),(0,B.jsx)(`span`,{className:`tag-picker__name`,children:e.name}),e.digit===null?null:(0,B.jsx)(`kbd`,{className:`tag-picker__digit`,"aria-hidden":`true`,children:e.digit})]},e.keyword))}):null,f.length>0?(0,B.jsxs)(B.Fragment,{children:[u.length>0?(0,B.jsx)(`div`,{className:`tag-picker__separator`,role:`separator`}):null,(0,B.jsxs)(`div`,{role:`group`,"aria-label":`Other keywords`,children:[(0,B.jsx)(`div`,{className:`app-dropdown__heading tag-picker__heading`,"aria-hidden":`true`,children:`Other keywords`}),f.map(e=>(0,B.jsxs)(`button`,{className:`app-dropdown__item tag-picker__item tag-picker__item--undefined`,type:`button`,role:`menuitemcheckbox`,tabIndex:-1,"aria-checked":_(e.presence),"data-tag-keyword":e.keyword,title:`${e.keyword} has no tag definition`,onClick:()=>m(e),children:[(0,B.jsx)(`span`,{className:`tag-picker__check`,"aria-hidden":`true`,children:g(e.presence)}),(0,B.jsx)(`span`,{className:`tag-picker__dot`,"aria-hidden":`true`}),(0,B.jsx)(`span`,{className:`tag-picker__name`,children:e.name})]},e.keyword))]})]}):null,u.length===0&&f.length===0?(0,B.jsx)(`p`,{className:`tag-picker__empty`,role:`none`,children:`No tags defined yet.`}):null,(0,B.jsx)(`div`,{className:`tag-picker__separator`,role:`separator`}),(0,B.jsxs)(`button`,{className:`app-dropdown__item tag-picker__item tag-picker__manage`,type:`button`,role:`menuitem`,tabIndex:-1,"data-tag-picker-manage":!0,onClick:a,children:[(0,B.jsx)(`span`,{className:`tag-picker__check`,"aria-hidden":`true`,children:(0,B.jsx)(Te,{size:14,strokeWidth:1.75})}),(0,B.jsx)(`span`,{className:`tag-picker__name`,children:`Manage Tags…`})]})]})});function pa({targets:e,definitions:t,label:n=`Tag`,title:r,triggerClass:i=``,onToggle:a,onClear:o,onManage:s,trigger:c}){let l=(0,C.useRef)(null),u=(0,C.useRef)(null);return(0,B.jsxs)(Gr,{className:`tag-picker-dropdown`,onToggle:e=>{e.currentTarget.open&&requestAnimationFrame(()=>u.current?.focusFirst())},children:[(0,B.jsx)(`summary`,{ref:l,className:`app-dropdown__summary tag-picker-dropdown__trigger ${i}`,"aria-haspopup":`menu`,"aria-label":n,title:r??n,"data-tag-picker-trigger":!0,children:c??(0,B.jsx)(je,{size:16,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(`div`,{className:`app-dropdown__menu tag-picker-dropdown__menu`,children:(0,B.jsx)(fa,{ref:u,targets:e,definitions:t,onToggle:a,onClear:o,onManage:e=>{Wr(e),s(e)},onClose:()=>{let e=l.current?.closest(`details`);e instanceof HTMLDetailsElement&&(e.open=!1),l.current?.focus()}})})]})}var ma=260,ha=6,ga=8;function _a({anchor:e,targets:t,definitions:n,label:r=`Tags`,trigger:i=null,returnFocus:a=null,onClose:o,onToggle:s,onClear:c,onManage:l}){let u=(0,C.useRef)(null),d=(0,C.useRef)(null),[f,p]=(0,C.useState)(0),m=(0,C.useRef)(null),h=(0,C.useRef)(o);h.current=o;let g=(0,C.useRef)(i);g.current=i;let _=e!=null,v=(0,C.useCallback)(()=>{let e=u.current,t=e?.querySelector(`.tag-picker`);!e||!t||p(t.scrollHeight+e.offsetHeight-t.clientHeight)},[]);if((0,C.useLayoutEffect)(()=>{_&&v()},[_,t,n,v]),(0,C.useEffect)(()=>{if(!_)return;let e=document.activeElement;m.current=a??g.current??(e instanceof HTMLElement&&e!==document.body?e:null),d.current?.focusFirst();let t=e=>{let t=u.current;!t||!(e.target instanceof Node)||t.contains(e.target)||g.current?.contains(e.target)||h.current()},n=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),h.current())},r=e=>{e.target instanceof Node&&u.current?.contains(e.target)||h.current()};return document.addEventListener(`pointerdown`,t,!0),document.addEventListener(`keydown`,n,!0),document.addEventListener(`scroll`,r,{capture:!0,passive:!0}),window.addEventListener(`resize`,r,{passive:!0}),()=>{document.removeEventListener(`pointerdown`,t,!0),document.removeEventListener(`keydown`,n,!0),document.removeEventListener(`scroll`,r,!0),window.removeEventListener(`resize`,r),p(0);let e=m.current;m.current=null,e?.isConnected&&e.focus()}},[_]),!e)return null;let y=window.innerWidth,b=window.innerHeight,x=e.left+e.width-ma;x=Math.max(ga,Math.min(x,y-ma-ga));let S=e.top+e.height+ha,w=b-ga-S,T=e.top-ha-ga,E=S,D=w;return f>w&&(f<=T||T>w)&&(D=T,E=e.top-ha-Math.min(f,T)),(0,Ai.createPortal)((0,B.jsx)(`div`,{ref:u,className:`app-dropdown__menu tag-picker-popover`,style:{position:`fixed`,top:`${Math.max(ga,E)}px`,left:`${x}px`,width:`${ma}px`,maxHeight:`${Math.max(0,D)}px`},role:`dialog`,"aria-label":r,"data-tag-picker-popover":!0,onKeyDown:e=>{e.key===`Tab`&&(e.preventDefault(),o())},children:(0,B.jsx)(fa,{ref:d,targets:t,definitions:n,label:r,onToggle:s,onClear:c,onManage:l,onClose:o})}),document.body)}var va=(0,C.memo)(function({message:e,index:t,start:n,size:r,domIdPrefix:i,focused:a,cursor:o,selected:s,dragging:c,showsRecipients:l,sort:u,hoverActions:d,archiveAction:f,deleteAction:p,draggable:m,tagMenuOpen:h,tagDefinitions:g,handlers:_}){let v=e.is_seen===0,y=e.is_flagged===1,b=(0,C.useMemo)(()=>Vt(e.keywords_json,g),[e.keywords_json,g]),x=b.length===0?`Tag`:`Tags: ${b.map(e=>e.name).join(`, `)}`,S=ta(e,l),w=(0,C.useMemo)(()=>cn(S,``),[S]),T=na(e,l),E=V(ra(e,u)),D=e.subject||`(no subject)`,ee=[T,D,E,v?`Unread`:``,y?`Starred`:``,e.has_attachment===1?`Has attachments`:``,b.length>0?x:``].filter(Boolean).join(`, `),O=e.scheduled_undo_status===`pending`,k=[a?`is-focused`:``,o?`is-cursor`:``,s?`is-selected`:``,c?`is-dragging`:``,v?`is-unread`:``].filter(Boolean).join(` `);return(0,B.jsx)(`li`,{id:`${i}${e.id}`,"data-index":t,"data-message-id":e.id,role:`row`,"aria-rowindex":t+1,"aria-label":ee,"aria-selected":s,className:k||void 0,style:{position:`absolute`,top:`0px`,left:`0px`,right:`0px`,transform:`translateY(${n}px)`,height:`${r}px`},children:(0,B.jsxs)(`div`,{className:[`msg-list__item`,d?`msg-list__item--hover-actions`:``,h?`has-tag-menu`:``].filter(Boolean).join(` `),role:`gridcell`,draggable:m&&!O,onClick:e=>_.rowClick(t,e),onDragStart:t=>_.dragStart(e,t),onDragEnd:_.dragEnd,children:[(0,B.jsx)(`button`,{type:`button`,className:`msg-list__open`,"data-message-control":!0,tabIndex:-1,"aria-label":`Open message: ${D}, ${T}`}),(0,B.jsxs)(`div`,{className:`msg-list__state`,children:[(0,B.jsx)(`label`,{className:`msg-list__check`,draggable:!1,onClick:e=>e.stopPropagation(),children:(0,B.jsx)(`input`,{type:`checkbox`,"data-message-control":!0,tabIndex:-1,"aria-label":`Select message: ${D}, ${T}`,checked:s,onChange:()=>{},onClick:e=>_.checkboxClick(t,e)})}),v?(0,B.jsx)(`span`,{className:`msg-list__unread-dot`,"aria-hidden":`true`}):null]}),(0,B.jsx)(`div`,{className:`msg-list__avatar`,style:w.style,"aria-hidden":`true`,children:(0,B.jsx)(`span`,{children:w.initials})}),(0,B.jsxs)(`div`,{className:`msg-list__content`,children:[(0,B.jsxs)(`div`,{className:`msg-list__summary`,children:[(0,B.jsx)(`span`,{className:`msg-list__from`,children:T}),(0,B.jsx)(`span`,{className:`msg-list__subject`,children:D}),(0,B.jsxs)(`span`,{className:`msg-list__icons`,children:[y&&!d?(0,B.jsx)(Oe,{size:13,strokeWidth:2,className:`msg-list__star`}):null,e.has_attachment===1?(0,B.jsx)(ve,{size:13,strokeWidth:1.75,className:`msg-list__attach`}):null,!d&&b.length>0?(0,B.jsx)(la,{tags:b,title:x,"data-row-tags":!0}):null]}),(0,B.jsx)(`span`,{className:`msg-list__date`,children:E}),d?(0,B.jsxs)(`div`,{className:`msg-list__actions`,draggable:!1,onClick:e=>e.stopPropagation(),children:[(0,B.jsx)(`button`,{type:`button`,className:`msg-list__action msg-list__action--tag${b.length>0?` is-tagged`:``}`,tabIndex:-1,"data-message-control":!0,title:x,"aria-label":x,"aria-haspopup":`dialog`,"aria-expanded":h,"data-row-tags":!0,onClick:t=>_.tag(e,t),children:(0,B.jsx)(la,{tags:b})}),(0,B.jsx)(`button`,{type:`button`,className:`msg-list__action msg-list__action--star${y?` msg-list__action--starred`:``}`,tabIndex:-1,"data-message-control":!0,title:y?`Unstar`:`Star`,"aria-label":y?`Unstar`:`Star`,"aria-pressed":y,onClick:()=>_.star(e),children:(0,B.jsx)(Oe,{size:17,strokeWidth:1.75,fill:y?`#facc15`:`none`})}),f?(0,B.jsx)(`button`,{type:`button`,className:`msg-list__action`,tabIndex:-1,"data-message-control":!0,title:`Archive`,"aria-label":`Archive`,onClick:()=>_.archive(e.id),children:(0,B.jsx)(zr,{className:`msg-list__action-icon--folder`,svg:oi})}):null,p?(0,B.jsx)(`button`,{type:`button`,className:`msg-list__action msg-list__action--danger`,tabIndex:-1,"data-message-control":!0,title:`Delete`,"aria-label":`Delete`,onClick:()=>_.remove(e.id),children:(0,B.jsx)(Ie,{size:18,strokeWidth:1.65})}):null]}):null]}),e.preview?(0,B.jsx)(`p`,{className:`msg-list__preview`,children:e.preview}):null]})]})})});function ya({folder:e,anyStarred:t,anyScheduled:n,handlers:r}){let i=e?.role,a=[];return i===`junk`&&a.push({id:`whitelist`,label:`Not junk`,title:`Whitelist senders and move to Inbox`,ariaLabel:`Not junk — whitelist senders and move the selected messages to Inbox`,icon:null,variant:`whitelist`,slots:3,overflowRank:6,run:r.whitelist}),!n&&i!==`archive`&&a.push({id:`archive`,label:`Archive`,title:`Archive`,ariaLabel:`Archive`,icon:null,rawIcon:oi,variant:`default`,slots:1,overflowRank:5,run:r.archive}),!n&&i!==`junk`&&a.push({id:`junk`,label:`Mark as junk`,title:`Junk`,ariaLabel:`Mark as junk`,icon:null,rawIcon:pi,variant:`default`,slots:1,overflowRank:2,run:r.junk}),n?a.push({id:`cancel-send`,label:`Cancel send`,title:`Cancel send`,ariaLabel:`Cancel send — return the selected messages to Drafts`,icon:Ie,variant:`danger`,slots:1,overflowRank:null,run:r.cancelSend}):(a.push({id:`delete`,label:`Delete`,title:`Delete`,ariaLabel:`Delete`,icon:Ie,variant:`danger`,slots:1,overflowRank:null,run:r.delete}),a.push({id:`toggle-star`,label:t?`Unstar`:`Star`,title:t?`Unstar`:`Star`,ariaLabel:t?`Unstar`:`Star`,icon:Oe,variant:`star`,pressed:t,slots:1,overflowRank:4,run:r.toggleStar}),a.push({id:`tag`,label:`Tag…`,title:`Tag`,ariaLabel:`Tag selected messages`,icon:je,variant:`tag`,slots:1,overflowRank:3,run:r.tag})),a.push({id:`mark-read`,label:`Mark as read`,title:`Mark as read`,ariaLabel:`Mark as read`,icon:ge,variant:`default`,slots:1,overflowRank:1,run:r.markRead}),a.push({id:`mark-unread`,label:`Mark as unread`,title:`Mark as unread`,ariaLabel:`Mark as unread`,icon:_e,variant:`default`,slots:1,overflowRank:0,run:r.markUnread}),a}function ba(e,t){if(t==null)return{inline:[...e],overflow:[]};let n=new Set,r=0;for(let t of e)t.overflowRank===null&&(n.add(t),r+=t.slots);let i=e.filter(e=>e.overflowRank!==null).sort((e,t)=>(t.overflowRank??0)-(e.overflowRank??0));for(let e of i)r+e.slots>t||(n.add(e),r+=e.slots);return{inline:e.filter(e=>n.has(e)),overflow:e.filter(e=>!n.has(e))}}function xa({items:e,renderTag:t}){return(0,B.jsx)(B.Fragment,{children:e.map(e=>{if(e.variant===`tag`)return(0,B.jsx)(`span`,{style:{display:`contents`},children:t(e)},e.id);let n=e.icon;return(0,B.jsxs)(`button`,{className:[`msg-list__bulk-action`,e.variant===`danger`?`msg-list__bulk-action--danger`:``,e.variant===`star`?`msg-list__bulk-action--star`:``,e.variant===`star`&&e.pressed?`msg-list__bulk-action--starred`:``,e.variant===`whitelist`?`msg-list__bulk-action--whitelist`:``].filter(Boolean).join(` `),type:`button`,disabled:e.disabled,title:e.title,"aria-label":e.ariaLabel,"aria-pressed":e.variant===`star`?e.pressed:void 0,"data-bulk-action":e.id,onClick:()=>e.run(),children:[e.variant===`whitelist`?e.label:null,e.variant!==`whitelist`&&e.rawIcon?(0,B.jsx)(zr,{className:`msg-list__bulk-icon msg-list__bulk-icon--folder`,svg:e.rawIcon}):null,e.variant!==`whitelist`&&!e.rawIcon&&n?(0,B.jsx)(n,{size:e.variant===`star`?17:e.variant===`danger`?18:16,strokeWidth:e.variant===`danger`?1.65:1.75,fill:e.variant===`star`?e.pressed?`currentColor`:`none`:void 0}):null]},e.id)})})}var Sa=`[role="menuitem"]:not([aria-disabled="true"])`;function Ca({groups:e,label:t=`More actions`}){let n=(0,C.useRef)(null),r=(0,C.useRef)(null);return(0,B.jsxs)(Gr,{className:`msg-list__more`,onToggle:e=>{e.currentTarget.open&&requestAnimationFrame(()=>r.current?.querySelector(Sa)?.focus())},children:[(0,B.jsx)(`summary`,{ref:n,className:`app-dropdown__summary msg-list__more-trigger`,"aria-haspopup":`menu`,"aria-label":t,title:t,"data-more-menu":!0,children:(0,B.jsx)(se,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(`div`,{ref:r,className:`app-dropdown__menu msg-list__more-menu`,role:`menu`,"aria-label":t,onKeyDown:e=>Kr(r.current,Sa,e),children:e.map((e,t)=>(0,B.jsxs)(`div`,{style:{display:`contents`},children:[t>0?(0,B.jsx)(`div`,{className:`msg-list__more-separator`,role:`separator`}):null,(0,B.jsxs)(`div`,{role:`group`,"aria-label":e.label,children:[e.label?(0,B.jsx)(`div`,{className:`app-dropdown__heading msg-list__more-heading`,title:e.label,"aria-hidden":`true`,children:e.label}):null,e.items.map(e=>{let t=e.icon;return(0,B.jsxs)(`button`,{className:`app-dropdown__item msg-list__more-item${e.danger?` msg-list__more-item--danger`:``}`,type:`button`,tabIndex:-1,role:`menuitem`,"aria-disabled":e.disabled?`true`:void 0,"data-more-item":e.id,onClick:t=>{e.disabled||(Wr(t),n.current?.focus(),e.run())},children:[(0,B.jsx)(`span`,{className:`msg-list__more-icon`,"aria-hidden":`true`,children:e.rawIcon?(0,B.jsx)(zr,{className:`msg-list__more-icon-raw`,svg:e.rawIcon}):t?(0,B.jsx)(t,{size:16,strokeWidth:1.75}):null}),(0,B.jsx)(`span`,{className:`msg-list__more-label`,children:e.label})]},e.id)})]})]},e.id))})]})}function wa({className:e,allSelected:t,disabled:n,itemLabel:r,singularItemLabel:i,selectedCount:a,showTotalCount:o,totalCount:s,headerTier:c,onClearSelection:l,onToggleAll:u,selectionActions:d,normalActions:f,trailing:p}){let m=(0,C.useRef)(null),h=a>0&&!t;(0,C.useEffect)(()=>{m.current&&(m.current.indeterminate=h)},[h]);let g=n||s===0;return(0,B.jsxs)(`header`,{className:`selectable-list-header ${e??``}`,"data-header-tier":c,children:[(0,B.jsx)(`label`,{className:`selectable-list-header__select-all msg-list__select-all${g?` is-disabled`:``}`,title:g?`No ${r} to select`:t?`Deselect all ${r}`:`Select all ${r}`,children:(0,B.jsx)(`input`,{ref:m,type:`checkbox`,checked:t,disabled:g,onChange:u,"aria-label":`Select all messages`})}),a>0?(0,B.jsxs)(`div`,{className:`selectable-list-header__selection-actions msg-list__bulk-actions`,role:`group`,"aria-label":`Selection actions`,children:[d,(0,B.jsx)(`button`,{className:`selectable-list-header__clear msg-list__bulk-action msg-list__bulk-action--ghost`,type:`button`,title:`Clear selection`,"aria-label":`Clear selection`,onClick:l,children:(0,B.jsx)(Be,{size:16,strokeWidth:1.75,"aria-hidden":`true`})})]}):(0,B.jsx)(`div`,{className:`selectable-list-header__normal-actions`,children:f}),(0,B.jsx)(`span`,{className:`selectable-list-header__count${a===0?` selectable-list-header__count--total`:``} msg-list__count`,"aria-live":`polite`,children:a>0?`${a} selected`:o&&s>0?`${s} ${s===1?i:r}`:null}),p]})}var Ta=480,Ea=64,Da=96,Oa=520,ka=440,Aa=340,ja=232,Ma=38,Na=`msg-row-`,Pa=`msg-listbox`,Fa=new Set,Ia=Ft,La=new Map;function Ra(e){return e===`sent`||e===`drafts`||e===`scheduled`?`sent`:`received`}function za(e){if(!e||e.getClientRects().length===0)return null;let t=e.getBoundingClientRect();return{top:t.top,left:t.left,width:t.width,height:t.height}}function Ba({quickFilterQuery:e}){let t=z(e=>e.currentViewId),n=z(e=>e.folders),r=z(e=>e.messages),i=z(e=>e.folderIds),a=z(e=>e.selection),o=z(e=>e.focused),s=z(e=>e.open),c=z(e=>e.folderPickCount),l=wi(e=>e.draggedIds),u=an({folders:n},t),d=Kt(t),f=d?Ia.find(e=>e.keyword===R(t))?.name??`Starred`:u?.name??`Mail`,p=`${f} messages, column 1`,m=Zt({messages:r,folderIds:i},t),h=a.viewId===t?a.ids:Fa,g=o.viewId===t?o.id:null,_=s.viewId===t?s.id:null,[v,y]=(0,C.useState)(!1),[b,x]=(0,C.useState)(!1),S=ia(e),w=S.length>0,T=v||b||w,E=(0,C.useCallback)((e,t)=>t&&(e.id===_||h.has(e.id))?!0:!(v&&e.is_seen!==0||b&&e.is_flagged!==1||w&&!aa(e,S)),[_,h,v,b,w,S]),D=(0,C.useMemo)(()=>T?m.filter(e=>E(e,!0)):m,[m,T,E]),ee=(0,C.useMemo)(()=>T?m.filter(e=>E(e,!1)):m,[m,T,E]),O=D.length;function k(e){if(_==null)return;let t=m.find(e=>e.id===_);t&&!(e.unread&&t.is_seen!==0)&&!(e.flagged&&t.is_flagged!==1)&&!(e.needle&&!aa(t,e.needle))||z.getState().selectMessage(null)}let te=(0,C.useRef)(S);(0,C.useEffect)(()=>{te.current!==S&&(te.current=S,k({unread:v,flagged:b,needle:S}))},[S]);let A=(0,C.useRef)(-1),ne=h.size,re=ne>0,ae=(0,C.useCallback)(e=>{z.getState().setSelection(t,e)},[t]),oe=(0,C.useCallback)(e=>{let n=D[e];return n?(z.getState().setFocusedMessage(n.id,t),n.id):null},[D,t]),se=(0,C.useCallback)(e=>{let t=D[e];if(!t)return;let n=new Set(h);n.has(t.id)?n.delete(t.id):n.add(t.id),A.current=e,ae(n)},[D,h,ae]),j=(0,C.useCallback)((e,t=e)=>{if(e<0||e>=D.length)return;let n=A.current>=0,r=n?A.current:Math.max(0,Math.min(D.length-1,t)),i=Math.min(e,r),a=Math.max(e,r),o=new Set;for(let e=i;e<=a;e+=1)o.add(D[e].id);ae(o),n||(A.current=r)},[D,ae]),ce=(0,C.useCallback)(()=>{h.size>0&&ae(new Set),A.current=-1},[h,ae]),M=(0,C.useCallback)(e=>{z.getState().selectMessage(e,e==null?void 0:t)},[t]),le=(0,C.useCallback)(()=>{let e=new Set;for(let t of ee)e.add(t.id);ae(e),e.size>0&&(A.current=0)},[ee,ae]),ue=ee.length>0&&ee.every(e=>h.has(e.id)),de=(0,C.useRef)(null),fe=(0,C.useRef)(null),[pe,me]=(0,C.useState)(0),he=pe>0&&pe{let e=de.current;if(!e)return;me(e.clientWidth);let t=new ResizeObserver(([e])=>me(e.contentRect.width));return t.observe(e),()=>t.disconnect()},[]);let ge=$i({count:O,getScrollElement:()=>fe.current,estimateSize:()=>he?Da:Ea,overscan:8,getItemKey:e=>D[e]?.id??`_ph_${e}`});(0,C.useLayoutEffect)(()=>{ge.measure()},[he,ge]);let _e=(0,C.useRef)(!1),N=(0,C.useCallback)(()=>{_e.current||(_e.current=!0,requestAnimationFrame(()=>{_e.current=!1,fe.current&&La.set(t,fe.current.scrollTop)}))},[t]),P=(0,C.useRef)(null);(0,C.useLayoutEffect)(()=>{let e=P.current;if(P.current={viewId:t,pick:c},e&&e.viewId===t&&e.pick===c)return;ge.measure();let n=fe.current;if(e&&e.viewId===t){La.set(t,0),n&&(n.scrollTop=0);return}n&&(n.scrollTop=La.get(t)??0)},[t,c,ge]),(0,C.useEffect)(()=>{if(g==null||!fe.current)return;let e=D.findIndex(e=>e.id===g);e>=0&&ge.scrollToIndex(e,{align:`auto`})},[g]);let ve=ge.getVirtualItems(),ye=()=>ve[0]?.index??0,be=pe>0,xe=!be||pe>=Oa,F=!be||pe>=ka,Ce=!re&&(!be||pe>=Aa),we=!Ce&&!re?`compact`:F?xe?`full`:`no-count`:`icon-filters`,Te=be?Math.max(1,Math.floor((pe-ja)/Ma)):null,Ee=z.getState,De=(0,C.useMemo)(()=>m.filter(e=>h.has(e.id)),[m,h]),ke=De.some(e=>e.is_flagged===1),Ae=De.some(e=>e.scheduled_undo_status===`pending`),je=()=>[...h],[Me,Ne]=(0,C.useState)(null),Pe=(0,C.useCallback)(()=>{Ne(null)},[]),Fe=(0,C.useCallback)(()=>{let e=de.current?.querySelector(`[data-more-menu]`)??de.current?.querySelector(`.msg-list__header`)??null,t=za(e);t&&Ne({ids:[...h],targets:De,anchor:t,trigger:e,returnFocus:e})},[h,De]),Ie=ba(ya({folder:u,anyStarred:ke,anyScheduled:Ae,handlers:{archive:()=>Ee().archiveMessages(je()),junk:()=>Ee().junkMessages(je()),delete:()=>Ee().destroyMessages(je()),cancelSend:()=>De.filter(e=>e.scheduled_undo_status===`pending`).forEach(e=>Ee().cancelScheduledSend(e.id)),toggleStar:()=>Ee().toggleManyFlagged(je()),tag:Fe,markRead:()=>Ee().markManySeen(je(),!0),markUnread:()=>Ee().markManySeen(je(),!1),whitelist:()=>Ee().notJunk(je())}}),Te),Le=(0,C.useCallback)(()=>{},[]),Re=[];re&&Ie.overflow.length>0&&Re.push({id:`selection`,items:Ie.overflow.map(e=>({id:e.id,label:e.label,icon:e.icon,rawIcon:e.rawIcon,disabled:e.disabled,danger:e.variant===`danger`,run:e.run}))}),Ce||Re.push({id:`column`,label:re?f:void 0,items:[{id:`refresh`,label:`Refresh`,icon:Se,run:Le}]});let ze=(0,C.useCallback)(e=>{let t=D;if(t.length===0)return;if(e===`first`){M(t[0].id);return}if(e===`last`){M(t[t.length-1].id);return}let n=e===`next`||e===`nextUnread`?1:-1,r=e===`nextUnread`||e===`previousUnread`,i=g==null?-1:t.findIndex(e=>e.id===g);i<0&&(i=n>0?-1:t.length);for(let e=i+n;e>=0&&e{if(h.size>0){let e=(de.current?.querySelector(`[data-tag-picker-trigger]`))?.closest(`details`);if(e){e.open=!0;return}Fe();return}if(_==null)return;let e=m.find(e=>e.id===_);if(!e||e.scheduled_undo_status===`pending`)return;let t=document.getElementById(`${Na}${_}`)?.querySelector(`.msg-list__action--tag`)??null,n=za(t)??za(de.current?.querySelector(`.msg-list__header`));n&&Ne({ids:[_],targets:[e],anchor:n,trigger:t,returnFocus:fe.current})},[h,_,m,Fe]);(0,C.useEffect)(()=>Pr({navigate:ze,selectAll:le,openTagMenu:Be,containsFocus:()=>de.current?.contains(document.activeElement)===!0}),[ze,le,Be]);function Ve(e){return[...e.querySelectorAll(`[data-message-control]`)].filter(e=>getComputedStyle(e).display!==`none`&&getComputedStyle(e).visibility!==`hidden`).sort((e,t)=>Number(t.matches(`input`))-Number(e.matches(`input`)))}function He(e){if(e.defaultPrevented)return;if((e.metaKey||e.ctrlKey)&&(e.key===`a`||e.key===`A`)){e.preventDefault(),le();return}if(e.altKey||e.metaKey||e.ctrlKey)return;let n=(e.target instanceof Element?e.target:null)?.closest(`[data-message-control]`)??null,r=n?.closest(`[role="row"]`)??null;if(n&&r){if(e.key===`Tab`){fe.current?.focus({preventScroll:!0});return}if(e.key===`Escape`||e.key===`F2`){e.preventDefault(),oe(Number(r.dataset.index)),fe.current?.focus({preventScroll:!0});return}if([`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key)){e.preventDefault();let t=Ve(r),i=t.indexOf(n),a=e.key===`Home`?0:e.key===`End`?t.length-1:i+(e.key===`ArrowRight`?1:-1);t[Math.max(0,Math.min(t.length-1,a))]?.focus({preventScroll:!0});return}if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`)return;oe(Number(r.dataset.index)),fe.current?.focus({preventScroll:!0})}else if(e.key===`F2`||e.key===`ArrowRight`||e.key===`Enter`){let t=Array.from(fe.current?.querySelectorAll(`[role="row"]`)??[]),n=fe.current?.getBoundingClientRect(),r=e=>{let t=e.getBoundingClientRect();return n!=null&&t.bottom>n.top&&t.tope.id===g);t>=0&&(e.preventDefault(),se(t));return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){let n=D.length;if(!n)return;e.preventDefault();let r=e.key===`ArrowDown`?1:-1,i=g==null?-1:D.findIndex(e=>e.id===g),a;a=i>=0?i:A.current>=0?A.current:r>0?-1:n;let o=Math.max(0,Math.min(n-1,a+r));e.shiftKey?(j(o),z.getState().setFocusedMessage(D[o].id,t)):M(D[o].id)}}function Ue(e){(e.type===`contextmenu`?e.button===2:e.detail>0)&&e.target instanceof Element&&e.target.closest(`[data-message-control], .msg-list__check`)&&fe.current?.focus({preventScroll:!0})}let We=(0,C.useRef)(null);We.current={rowClick(e,t){if(fe.current?.focus({preventScroll:!0}),t.shiftKey||t.ctrlKey||t.metaKey){t.preventDefault(),t.shiftKey?j(e,ye()):se(e);return}let n=re,r=oe(e);if(r!=null){if(n&&ce(),!n&&r===_){M(null);return}M(r)}},checkboxClick(e,t){t.stopPropagation(),t.shiftKey?j(e,ye()):se(e)},dragStart(e,n){fe.current?.focus({preventScroll:!0}),wi.getState().startDrag(n,{messageId:e.id,selectedIds:h,sourceViewId:t})},dragEnd(){wi.getState().endDrag()},star(e){Ee().markManyFlagged([e.id],e.is_flagged!==1)},tag(e,t){let n=t.currentTarget instanceof HTMLElement?t.currentTarget:null;if(Me&&Me.ids.length===1&&Me.ids[0]===e.id){Pe();return}let r=za(n);r&&Ne({ids:[e.id],targets:[e],anchor:r,trigger:n,returnFocus:t.detail===0?n:fe.current})},archive(e){Ee().archiveMessages([e])},remove(e){Ee().destroyMessages([e])}};let Ge=(0,C.useMemo)(()=>({rowClick:(e,t)=>We.current.rowClick(e,t),checkboxClick:(e,t)=>We.current.checkboxClick(e,t),dragStart:(e,t)=>We.current.dragStart(e,t),dragEnd:()=>We.current.dragEnd(),star:e=>We.current.star(e),tag:(e,t)=>We.current.tag(e,t),archive:e=>We.current.archive(e),remove:e=>We.current.remove(e)}),[]),Ke=Me&&Me.ids.length===1&&Me.trigger?.classList.contains(`msg-list__action--tag`)?Me.ids[0]:null,qe=(0,C.useMemo)(()=>Me?Me.ids.map(e=>r.get(e)??Me.targets.find(t=>t.id===e)):[],[Me,r]),Je=wi(e=>e.sourceViewId),Ye=wi(e=>e.dragging),[Xe,Ze]=(0,C.useState)(!1),Qe=Ye&&Xe&&Je!==t&&!d?`move`:null;function $e(e){if(Ze(!1),d||typeof t!=`number`)return;let n=Ti(e);!n||n.sourceViewId===t||(e.preventDefault(),Ee().moveMessages(n.ids,t),wi.getState().endDrag())}let et=ea(u),I=Ra(u?.role),L=u?.role===`archive`,tt=`No ${[v?`unread`:null,b?`starred`:null].filter(Boolean).join(` `)}${v||b?` `:``}messages in ${f}.`,nt=(0,C.useMemo)(()=>new Set(l),[l]);return(0,B.jsxs)(`section`,{ref:de,className:[`msg-list`,`msg-columns__column`,`msg-columns__column--last`,he?`msg-list--card`:``,`msg-list--primary`,Qe===`move`?`is-drop-valid`:``].filter(Boolean).join(` `),role:`region`,"aria-label":p,onDragEnter:()=>Ze(!0),onDragOver:e=>{Je!==t&&!d&&e.preventDefault()},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||Ze(!1)},onDrop:$e,children:[(0,B.jsx)(wa,{className:`msg-list__header`,headerTier:we,allSelected:ue,disabled:!1,itemLabel:`messages`,singularItemLabel:`message`,selectedCount:ne,showTotalCount:xe,totalCount:O,onClearSelection:ce,onToggleAll:()=>re?ce():le(),selectionActions:(0,B.jsx)(xa,{items:Ie.inline,renderTag:e=>(0,B.jsx)(pa,{targets:De,definitions:Ia,label:e.ariaLabel,title:e.title,triggerClass:`msg-list__bulk-action msg-list__bulk-action--tag`,onToggle:(e,t)=>Ee().setTagsMany([...h],t?{add:[e]}:{remove:[e]}),onClear:()=>Ee().clearTagsMany([...h]),onManage:()=>{}})}),normalActions:(0,B.jsxs)(`div`,{className:[`msg-list__filters`,F?``:`msg-list__filters--icons`,`msg-list__filters--lead`].filter(Boolean).join(` `),role:`group`,"aria-label":`Message filters`,children:[(0,B.jsx)(`button`,{className:`msg-list__filter${v?` is-active`:``}`,type:`button`,"aria-pressed":v,"aria-label":`Unread`,title:`Unread`,onClick:()=>{let e=!v;y(e),k({unread:e,flagged:b,needle:S})},children:F?`Unread`:(0,B.jsx)(ie,{size:10,strokeWidth:2,fill:`currentColor`,"aria-hidden":`true`})}),(0,B.jsx)(`button`,{className:`msg-list__filter msg-list__filter--starred${b?` is-active`:``}`,type:`button`,"aria-pressed":b,"aria-label":`Starred`,title:`Starred`,onClick:()=>{let e=!b;x(e),k({unread:v,flagged:e,needle:S})},children:F?`Starred`:(0,B.jsx)(Oe,{size:16,strokeWidth:1.75,"aria-hidden":`true`})})]}),trailing:(0,B.jsxs)(B.Fragment,{children:[Ce?(0,B.jsx)(`button`,{className:`msg-list__refresh`,type:`button`,"aria-label":`Refresh`,title:`Refresh`,onClick:Le,children:(0,B.jsx)(Se,{size:16,strokeWidth:1.75,"aria-hidden":`true`})}):null,Re.length>0?(0,B.jsx)(Ca,{groups:Re,label:`More actions for column 1`}):null]})}),(0,B.jsx)(`p`,{className:`msg-list__coverage is-idle`,role:`status`,"aria-hidden":`true`,"data-tag-view-coverage":!0}),(0,B.jsx)(`span`,{id:`${Pa}-instructions`,hidden:!0,children:`Use Up and Down arrows to navigate messages, Space to select, and Enter to toggle the message preview. Press Right Arrow or F2 for message controls, then Left and Right arrows to move between them. Escape returns to message navigation. Tab leaves the message list.`}),O>0?(0,B.jsx)(`div`,{id:Pa,ref:fe,className:`msg-list__scroller`,tabIndex:0,role:`grid`,"aria-multiselectable":`true`,"aria-rowcount":O,"aria-colcount":1,"aria-describedby":`${Pa}-instructions`,"aria-label":`Messages`,"aria-activedescendant":g!=null&&ve.some(e=>D[e.index]?.id===g)?`${Na}${g}`:void 0,onScroll:N,onKeyDown:He,onClickCapture:Ue,onContextMenuCapture:Ue,children:(0,B.jsx)(`ol`,{className:`msg-list__items`,role:`presentation`,style:{height:`${ge.getTotalSize()}px`},children:ve.map(e=>{let t=D[e.index];return t?(0,B.jsx)(va,{message:t,index:e.index,start:e.start,size:e.size,domIdPrefix:Na,focused:_===t.id,cursor:g===t.id,selected:h.has(t.id),dragging:nt.has(t.id),showsRecipients:et,sort:I,hoverActions:t.scheduled_undo_status!==`pending`,archiveAction:!L,deleteAction:!0,draggable:!d,tagMenuOpen:Ke===t.id,tagDefinitions:Ia,handlers:Ge},e.key):null})})}):w?(0,B.jsx)(`div`,{className:`msg-list__placeholder`,children:(0,B.jsxs)(`p`,{children:[`No messages matching "`,e.trim(),`" in `,f,`.`]})}):v||b?(0,B.jsx)(`div`,{className:`msg-list__placeholder`,children:(0,B.jsx)(`p`,{children:tt})}):d?(0,B.jsx)(`div`,{className:`msg-list__placeholder`,children:(0,B.jsxs)(`p`,{children:[`No messages are tagged `,f,`.`]})}):(0,B.jsx)(`div`,{className:`msg-list__placeholder`,children:(0,B.jsxs)(`p`,{children:[f,` is empty.`]})}),(0,B.jsx)(_a,{anchor:Me?.anchor??null,targets:qe,definitions:Ia,trigger:Me?.trigger??null,returnFocus:Me?.returnFocus??null,onClose:Pe,onToggle:(e,t)=>Ee().setTagsMany(Me?.ids??[],t?{add:[e]}:{remove:[e]}),onClear:()=>Ee().clearTagsMany(Me?.ids??[]),onManage:Pe})]})}function Va(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n`u`?null:To(BigInt.prototype.toString),bo=typeof Symbol>`u`?null:To(Symbol.prototype.toString),xo=To(Object.prototype.hasOwnProperty),So=To(Object.prototype.toString),Co=To(RegExp.prototype.test),wo=Eo(TypeError);function To(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return no(e,t,n)}}function Eo(e){return function(){return ro(e,[...arguments])}}function H(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:uo;if(Ja&&Ja(e,null),!lo(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(Ya(t)||(t[r]=e),i=e)}e[i]=!0}return e}function Do(e){for(let t=0;t/g),Uo=$a(/\${[\w\W]*/g),Wo=$a(/^data-[\-\w.\u00B7-\uFFFF]+$/),Go=$a(/^aria-[\-\w]+$/),Ko=$a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),qo=$a(/^(?:\w+script|data):/i),Jo=$a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Yo=$a(/^html$/i),Xo=$a(/^[a-z][.\w]*(-[.\w]+)+$/i),Zo={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Qo=function(){return typeof window>`u`?null:window},$o=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},es=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function ts(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Qo(),t=e=>ts(e);if(t.version=`3.4.7`,t.removed=[],!e||!e.document||e.document.nodeType!==Zo.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,s=e.Element,c=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let l=e.DOMParser,u=e.trustedTypes,d=s.prototype,f=Ao(d,`cloneNode`),p=Ao(d,`remove`),m=Ao(d,`nextSibling`),h=Ao(d,`childNodes`),g=Ao(d,`parentNode`),_=Ao(d,`shadowRoot`),v=Ao(d,`attributes`),y=o&&o.prototype?Ao(o.prototype,`nodeType`):null,b=o&&o.prototype?Ao(o.prototype,`nodeName`):null;if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let x,S=``,C=n,w=C.implementation,T=C.createNodeIterator,E=C.createDocumentFragment,D=C.getElementsByTagName,ee=r.importNode,O=es();t.isSupported=typeof qa==`function`&&typeof g==`function`&&w&&w.createHTMLDocument!==void 0;let k=Vo,te=Ho,A=Uo,ne=Wo,re=Go,ie=qo,ae=Jo,oe=Xo,se=Ko,j=null,ce=H({},[...Mo,...No,...Po,...Io,...Ro]),M=null,le=H({},[...zo,...Bo,...U,...W]),ue=Object.seal(eo(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),de=null,fe=null,pe=Object.seal(eo(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),me=!0,he=!0,ge=!1,_e=!0,N=!1,P=!0,ve=!1,ye=!1,be=!1,xe=!1,Se=!1,F=!1,Ce=!0,we=!1,Te=`user-content-`,Ee=!0,De=!1,Oe={},ke=null,Ae=H({},[`annotation-xml`,`audio`,`colgroup`,`desc`,`foreignobject`,`head`,`iframe`,`math`,`mi`,`mn`,`mo`,`ms`,`mtext`,`noembed`,`noframes`,`noscript`,`plaintext`,`script`,`style`,`svg`,`template`,`thead`,`title`,`video`,`xmp`]),je=null,Me=H({},[`audio`,`video`,`img`,`source`,`image`,`track`]),Ne=null,Pe=H({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),Fe=`http://www.w3.org/1998/Math/MathML`,Ie=`http://www.w3.org/2000/svg`,Le=`http://www.w3.org/1999/xhtml`,Re=Le,ze=!1,Be=null,Ve=H({},[Fe,Ie,Le],fo),He=H({},[`mi`,`mo`,`mn`,`ms`,`mtext`]),Ue=H({},[`annotation-xml`]),We=H({},[`title`,`style`,`font`,`a`,`script`]),Ge=null,Ke=[`application/xhtml+xml`,`text/html`],qe=null,Je=null,Ye=n.createElement(`form`),Xe=function(e){return e instanceof RegExp||e instanceof Function},Ze=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Je&&Je===e)return;(!e||typeof e!=`object`)&&(e={}),e=Oo(e),Ge=Ke.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,qe=Ge===`application/xhtml+xml`?fo:uo,j=xo(e,`ALLOWED_TAGS`)&&lo(e.ALLOWED_TAGS)?H({},e.ALLOWED_TAGS,qe):ce,M=xo(e,`ALLOWED_ATTR`)&&lo(e.ALLOWED_ATTR)?H({},e.ALLOWED_ATTR,qe):le,Be=xo(e,`ALLOWED_NAMESPACES`)&&lo(e.ALLOWED_NAMESPACES)?H({},e.ALLOWED_NAMESPACES,fo):Ve,Ne=xo(e,`ADD_URI_SAFE_ATTR`)&&lo(e.ADD_URI_SAFE_ATTR)?H(Oo(Pe),e.ADD_URI_SAFE_ATTR,qe):Pe,je=xo(e,`ADD_DATA_URI_TAGS`)&&lo(e.ADD_DATA_URI_TAGS)?H(Oo(Me),e.ADD_DATA_URI_TAGS,qe):Me,ke=xo(e,`FORBID_CONTENTS`)&&lo(e.FORBID_CONTENTS)?H({},e.FORBID_CONTENTS,qe):Ae,de=xo(e,`FORBID_TAGS`)&&lo(e.FORBID_TAGS)?H({},e.FORBID_TAGS,qe):Oo({}),fe=xo(e,`FORBID_ATTR`)&&lo(e.FORBID_ATTR)?H({},e.FORBID_ATTR,qe):Oo({}),Oe=xo(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?Oo(e.USE_PROFILES):e.USE_PROFILES:!1,me=e.ALLOW_ARIA_ATTR!==!1,he=e.ALLOW_DATA_ATTR!==!1,ge=e.ALLOW_UNKNOWN_PROTOCOLS||!1,_e=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,N=e.SAFE_FOR_TEMPLATES||!1,P=e.SAFE_FOR_XML!==!1,ve=e.WHOLE_DOCUMENT||!1,xe=e.RETURN_DOM||!1,Se=e.RETURN_DOM_FRAGMENT||!1,F=e.RETURN_TRUSTED_TYPE||!1,be=e.FORCE_BODY||!1,Ce=e.SANITIZE_DOM!==!1,we=e.SANITIZE_NAMED_PROPS||!1,Ee=e.KEEP_CONTENT!==!1,De=e.IN_PLACE||!1,se=jo(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Ko,Re=typeof e.NAMESPACE==`string`?e.NAMESPACE:Le,He=xo(e,`MATHML_TEXT_INTEGRATION_POINTS`)&&e.MATHML_TEXT_INTEGRATION_POINTS&&typeof e.MATHML_TEXT_INTEGRATION_POINTS==`object`?Oo(e.MATHML_TEXT_INTEGRATION_POINTS):H({},[`mi`,`mo`,`mn`,`ms`,`mtext`]),Ue=xo(e,`HTML_INTEGRATION_POINTS`)&&e.HTML_INTEGRATION_POINTS&&typeof e.HTML_INTEGRATION_POINTS==`object`?Oo(e.HTML_INTEGRATION_POINTS):H({},[`annotation-xml`]);let t=xo(e,`CUSTOM_ELEMENT_HANDLING`)&&e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING==`object`?Oo(e.CUSTOM_ELEMENT_HANDLING):eo(null);if(ue=eo(null),xo(t,`tagNameCheck`)&&Xe(t.tagNameCheck)&&(ue.tagNameCheck=t.tagNameCheck),xo(t,`attributeNameCheck`)&&Xe(t.attributeNameCheck)&&(ue.attributeNameCheck=t.attributeNameCheck),xo(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(ue.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),N&&(he=!1),Se&&(xe=!0),Oe&&(j=H({},Ro),M=eo(null),Oe.html===!0&&(H(j,Mo),H(M,zo)),Oe.svg===!0&&(H(j,No),H(M,Bo),H(M,W)),Oe.svgFilters===!0&&(H(j,Po),H(M,Bo),H(M,W)),Oe.mathMl===!0&&(H(j,Io),H(M,U),H(M,W))),pe.tagCheck=null,pe.attributeCheck=null,xo(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?pe.tagCheck=e.ADD_TAGS:lo(e.ADD_TAGS)&&(j===ce&&(j=Oo(j)),H(j,e.ADD_TAGS,qe))),xo(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?pe.attributeCheck=e.ADD_ATTR:lo(e.ADD_ATTR)&&(M===le&&(M=Oo(M)),H(M,e.ADD_ATTR,qe))),xo(e,`ADD_URI_SAFE_ATTR`)&&lo(e.ADD_URI_SAFE_ATTR)&&H(Ne,e.ADD_URI_SAFE_ATTR,qe),xo(e,`FORBID_CONTENTS`)&&lo(e.FORBID_CONTENTS)&&(ke===Ae&&(ke=Oo(ke)),H(ke,e.FORBID_CONTENTS,qe)),xo(e,`ADD_FORBID_CONTENTS`)&&lo(e.ADD_FORBID_CONTENTS)&&(ke===Ae&&(ke=Oo(ke)),H(ke,e.ADD_FORBID_CONTENTS,qe)),Ee&&(j[`#text`]=!0),ve&&H(j,[`html`,`head`,`body`]),j.table&&(H(j,[`tbody`]),delete de.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw wo(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw wo(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);x=e.TRUSTED_TYPES_POLICY,S=x.createHTML(``)}else x===void 0&&(x=$o(u,i)),x!==null&&typeof S==`string`&&(S=x.createHTML(``));(O.uponSanitizeElement.length>0||O.uponSanitizeAttribute.length>0)&&j===ce&&(j=Oo(j)),O.uponSanitizeAttribute.length>0&&M===le&&(M=Oo(M)),Qa&&Qa(e),Je=e},Qe=H({},[...No,...Po,...Fo]),$e=H({},[...Io,...Lo]),et=function(e){let t=g(e);(!t||!t.tagName)&&(t={namespaceURI:Re,tagName:`template`});let n=uo(e.tagName),r=uo(t.tagName);return Be[e.namespaceURI]?e.namespaceURI===Ie?t.namespaceURI===Le?n===`svg`:t.namespaceURI===Fe?n===`svg`&&(r===`annotation-xml`||He[r]):!!Qe[n]:e.namespaceURI===Fe?t.namespaceURI===Le?n===`math`:t.namespaceURI===Ie?n===`math`&&Ue[r]:!!$e[n]:e.namespaceURI===Le?t.namespaceURI===Ie&&!Ue[r]||t.namespaceURI===Fe&&!He[r]?!1:!$e[n]&&(We[n]||!Qe[n]):!!(Ge===`application/xhtml+xml`&&Be[e.namespaceURI]):!1},I=function(e){so(t.removed,{element:e});try{g(e).removeChild(e)}catch{p(e)}},L=function(e,n){try{so(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{so(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e===`is`)if(xe||Se)try{I(n)}catch{}else try{n.setAttribute(e,``)}catch{}},tt=function(e){let t=null,r=null;if(be)e=``+e;else{let t=po(e,/^[\r\n\t ]+/);r=t&&t[0]}Ge===`application/xhtml+xml`&&Re===Le&&(e=``+e+``);let i=x?x.createHTML(e):e;if(Re===Le)try{t=new l().parseFromString(i,Ge)}catch{}if(!t||!t.documentElement){t=w.createDocument(Re,`template`,null);try{t.documentElement.innerHTML=ze?S:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),Re===Le?D.call(t,ve?`html`:`body`)[0]:ve?t.documentElement:a},nt=function(e){return T.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},rt=function(e){e.normalize();let t=T.call(e.ownerDocument||e,e,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),n=t.nextNode();for(;n;){let e=n.data;io([k,te,A],t=>{e=mo(e,t,` `)}),n.data=e,n=t.nextNode()}},it=function(e){let t=b?b(e):null;return typeof t!=`string`||qe(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==v(e)||typeof e.removeAttribute!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==y(e)||e.childNodes!==h(e)},at=function(e){if(!y||typeof e!=`object`||!e)return!1;try{return y(e)===Zo.documentFragment}catch{return!1}},ot=function(e){if(!y||typeof e!=`object`||!e)return!1;try{return typeof y(e)==`number`}catch{return!1}};function st(e,n,r){io(e,e=>{e.call(t,n,r,Je)})}let ct=function(e){let n=null;if(st(O.beforeSanitizeElements,e,null),it(e))return I(e),!0;let r=qe(e.nodeName);if(st(O.uponSanitizeElement,e,{tagName:r,allowedTags:j}),P&&e.hasChildNodes()&&!ot(e.firstElementChild)&&Co(/<[/\w!]/g,e.innerHTML)&&Co(/<[/\w!]/g,e.textContent)||P&&e.namespaceURI===Le&&r===`style`&&ot(e.firstElementChild)||e.nodeType===Zo.progressingInstruction||P&&e.nodeType===Zo.comment&&Co(/<[/\w]/g,e.data))return I(e),!0;if(de[r]||!(pe.tagCheck instanceof Function&&pe.tagCheck(r))&&!j[r]){if(!de[r]&&dt(r)&&(ue.tagNameCheck instanceof RegExp&&Co(ue.tagNameCheck,r)||ue.tagNameCheck instanceof Function&&ue.tagNameCheck(r)))return!1;if(Ee&&!ke[r]){let t=g(e),n=h(e);if(n&&t){let r=n.length;for(let i=r-1;i>=0;--i){let r=f(n[i],!0);t.insertBefore(r,m(e))}}}return I(e),!0}return(y?y(e):e.nodeType)===Zo.element&&!et(e)||(r===`noscript`||r===`noembed`||r===`noframes`)&&Co(/<\/no(script|embed|frames)/i,e.innerHTML)?(I(e),!0):(N&&e.nodeType===Zo.text&&(n=e.textContent,io([k,te,A],e=>{n=mo(n,e,` `)}),e.textContent!==n&&(so(t.removed,{element:e.cloneNode()}),e.textContent=n)),st(O.afterSanitizeElements,e,null),!1)},lt=function(e,t,r){if(fe[t]||Ce&&(t===`id`||t===`name`)&&(r in n||r in Ye))return!1;let i=M[t]||pe.attributeCheck instanceof Function&&pe.attributeCheck(t,e);if(!(he&&!fe[t]&&Co(ne,t))&&!(me&&Co(re,t))){if(!i||fe[t]){if(!(dt(e)&&(ue.tagNameCheck instanceof RegExp&&Co(ue.tagNameCheck,e)||ue.tagNameCheck instanceof Function&&ue.tagNameCheck(e))&&(ue.attributeNameCheck instanceof RegExp&&Co(ue.attributeNameCheck,t)||ue.attributeNameCheck instanceof Function&&ue.attributeNameCheck(t,e))||t===`is`&&ue.allowCustomizedBuiltInElements&&(ue.tagNameCheck instanceof RegExp&&Co(ue.tagNameCheck,r)||ue.tagNameCheck instanceof Function&&ue.tagNameCheck(r))))return!1}else if(!Ne[t]&&!Co(se,mo(r,ae,``))&&!((t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&ho(r,`data:`)===0&&je[e])&&!(ge&&!Co(ie,mo(r,ae,``)))&&r)return!1}return!0},ut=H({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),dt=function(e){return!ut[uo(e)]&&Co(oe,e)},ft=function(e){st(O.beforeSanitizeAttributes,e,null);let n=e.attributes;if(!n||it(e))return;let r={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:M,forceKeepAttr:void 0},i=n.length;for(;i--;){let a=n[i],o=a.name,s=a.namespaceURI,c=a.value,l=qe(o),d=c,f=o===`value`?d:go(d);if(r.attrName=l,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,st(O.uponSanitizeAttribute,e,r),f=r.attrValue,we&&(l===`id`||l===`name`)&&ho(f,Te)!==0&&(L(o,e),f=Te+f),P&&Co(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,f)){L(o,e);continue}if(l===`attributename`&&po(f,`href`)){L(o,e);continue}if(r.forceKeepAttr)continue;if(!r.keepAttr){L(o,e);continue}if(!_e&&Co(/\/>/i,f)){L(o,e);continue}N&&io([k,te,A],e=>{f=mo(f,e,` `)});let p=qe(e.nodeName);if(!lt(p,l,f)){L(o,e);continue}if(x&&typeof u==`object`&&typeof u.getAttributeType==`function`&&!s)switch(u.getAttributeType(p,l)){case`TrustedHTML`:f=x.createHTML(f);break;case`TrustedScriptURL`:f=x.createScriptURL(f);break}if(f!==d)try{s?e.setAttributeNS(s,o,f):e.setAttribute(o,f),it(e)?I(e):oo(t.removed)}catch{L(o,e)}}st(O.afterSanitizeAttributes,e,null)},pt=function(e){let t=null,n=nt(e);for(st(O.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if(st(O.uponSanitizeShadowNode,t,null),ct(t),ft(t),at(t.content)&&pt(t.content),(y?y(t):t.nodeType)===Zo.element){let e=_?_(t):t.shadowRoot;at(e)&&(mt(e),pt(e))}st(O.afterSanitizeShadowDOM,e,null)},mt=function(e){let t=y?y(e):e.nodeType;if(t===Zo.element){let t=_?_(e):e.shadowRoot;at(t)&&(mt(t),pt(t))}let n=h?h(e):e.childNodes;if(!n)return;let r=[];io(n,e=>{so(r,e)});for(let e of r)mt(e);if(t===Zo.element){let t=b?b(e):null;if(typeof t==`string`&&qe(t)===`template`){let t=e.content;at(t)&&mt(t)}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(ze=!e,ze&&(e=``),typeof e!=`string`&&!ot(e)&&(e=ko(e),typeof e!=`string`))throw wo(`dirty is not a string, aborting`);if(!t.isSupported)return e;if(ye||Ze(n),t.removed=[],typeof e==`string`&&(De=!1),De){let t=b?b(e):e.nodeName;if(typeof t==`string`){let e=qe(t);if(!j[e]||de[e])throw wo(`root node is forbidden and cannot be sanitized in-place`)}if(it(e))throw wo(`root node is clobbered and cannot be sanitized in-place`);mt(e)}else if(ot(e))i=tt(``),a=i.ownerDocument.importNode(e,!0),a.nodeType===Zo.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),mt(a);else{if(!xe&&!N&&!ve&&e.indexOf(`<`)===-1)return x&&F?x.createHTML(e):e;if(i=tt(e),!i)return xe?null:F?S:``}i&&be&&I(i.firstChild);let c=nt(De?e:i);for(;o=c.nextNode();)ct(o),ft(o),at(o.content)&&pt(o.content);if(De)return N&&rt(e),e;if(xe){if(N&&rt(i),Se)for(s=E.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(M.shadowroot||M.shadowrootmode)&&(s=ee.call(r,s,!0)),s}let l=ve?i.outerHTML:i.innerHTML;return ve&&j[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&Co(Yo,i.ownerDocument.doctype.name)&&(l=` -`+l),N&&io([k,te,A],e=>{l=mo(l,e,` `)}),x&&F?x.createHTML(l):l},t.setConfig=function(){Ze(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}),ye=!0},t.clearConfig=function(){Je=null,ye=!1},t.isValidAttribute=function(e,t,n){return Je||Ze({}),lt(qe(e),qe(t),n)},t.addHook=function(e,t){typeof t==`function`&&so(O[e],t)},t.removeHook=function(e,t){if(t!==void 0){let n=ao(O[e],t);return n===-1?void 0:co(O[e],n,1)[0]}return oo(O[e])},t.removeHooks=function(e){O[e]=[]},t.removeAllHooks=function(){O=es()},t}var ns=ts(),rs=` - - - - -`,is=` - - - - -`,as=` - - - - -`;function os(e){return(0,C.useSyncExternalStore)(t=>{let n=window.matchMedia(e);return n.addEventListener(`change`,t),()=>n.removeEventListener(`change`,t)},()=>window.matchMedia(e).matches)}var ss=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/gif`,`image/webp`,`image/bmp`,`image/avif`,`image/x-icon`,`image/vnd.microsoft.icon`]);function cs(e){return!!e&&ss.has(e.trim().toLowerCase())}var ls=/^(?:(?:https?|mailto|tel|cid):|[^a-z]|[a-z+.-]+(?:[^a-z+.\-:]|$))/i,us=new Set([`text`,`link`,`vlink`,`alink`]);function ds(e){return e.trim().replace(/^<\s*/,``).replace(/\s*>$/,``).trim()}function fs(e){try{return decodeURIComponent(e)}catch{return e}}function ps(e){return e==null?``:ds(fs(ds(String(e).trim().replace(/^cid:/i,``)))).toLowerCase()}function ms(e){let t=String(e??``).trim();return/^cid:/i.test(t)?ps(t.slice(4)):``}var hs=[`src`,`poster`,`xlink:href`];function gs(e){return(/^data:([^;,]*)/i.exec(e.trim())?.[1]??``).trim().toLowerCase()}function _s(e,t=null){return e?vs(e,t,!0):``}function vs(e,t,n){let r=t;ns.addHook(`afterSanitizeAttributes`,e=>{if(!(!e||e.nodeType!==1||typeof e.getAttribute!=`function`)){if(e.nodeName===`IMG`&&r&&r.size>0){let t=e.getAttribute(`src`);if(t){let n=ms(t),i=r.get(n);i&&e.setAttribute(`src`,i)}}for(let t of hs){let n=e.getAttribute(t);if(!n)continue;let r=n.trim();/^data:/i.test(r)&&!cs(gs(r))&&e.removeAttribute(t)}}});try{return ns.sanitize(e,{ALLOWED_URI_REGEXP:ls,...n?{WHOLE_DOCUMENT:!0,FORBID_TAGS:[`base`,`link`,`meta`],ADD_ATTR:(e,t)=>t.toLowerCase()===`body`&&us.has(e.toLowerCase())}:{}})}finally{ns.removeHook(`afterSanitizeAttributes`)}}var ys=[`default-src 'none'`,`img-src data: blob: http: https: cid:`,`style-src 'unsafe-inline'`,`font-src data: http: https:`,`media-src data: blob: http: https:`,`base-uri 'none'`,`form-action 'none'`,`frame-src 'none'`].join(`; `),bs={light:{background:`#fcfcfd`,color:`#111827`},dark:{background:`#111113`,color:`#e6e8ef`}};function xs(e=`light`){return` - html { - margin: 0; - padding: 0; - background: transparent; - color: ${(Object.prototype.hasOwnProperty.call(bs,e)?bs[e]:bs.light).color}; - /* The host (.message-view__body) is the sole scroll container for - * the open message. The iframe document must never grow its own - * scrollbars: we already size the iframe element to the document's - * scroll height (post-zoom) from MessageView.vue, so any residual - * iframe-level scrollbar would be visual noise stacked beside the - * host's scrollbar, not a navigation affordance. */ - overflow: hidden; - } - body { - margin: 0; - padding: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; - overflow-wrap: anywhere; - overflow: hidden; - } - img, video, canvas, svg { - max-width: 100%; - height: auto; - } - table { - max-width: 100%; - } - div, section, article, main, header, footer, aside, table, tbody, thead, tfoot, tr, td, th { - max-width: 100%; - } -`}function Ss(e,t={}){let n=t.colorScheme===`dark`?`dark`:`light`,r=e||``,i=xs(n);if(/^\s*)/i.test(r)&&typeof DOMParser==`function`){let e=new DOMParser().parseFromString(r,`text/html`),t=e.head,a=e.createElement(`meta`);a.setAttribute(`charset`,`utf-8`);let o=e.createElement(`meta`);o.setAttribute(`name`,`viewport`),o.setAttribute(`content`,`width=device-width, initial-scale=1`);let s=e.createElement(`meta`);s.setAttribute(`http-equiv`,`Content-Security-Policy`),s.setAttribute(`content`,ys);let c=e.createElement(`style`);c.textContent=i;let l=e.createDocumentFragment();return l.append(a,o,s,c),t.insertBefore(l,t.firstChild),e.documentElement.style.colorScheme=n,`\n${e.documentElement.outerHTML}`}return` - - - - - - - -${r} -`}var Cs=`allow-same-origin allow-popups allow-popups-to-escape-sandbox`,ws={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ts=.2125,Es=.7154,Ds=.0721;function Os(e){return Number.isNaN(e)?0:Math.max(0,Math.min(255,Math.round(e)))}function ks(e){return Number.isNaN(e)?1:Math.max(0,Math.min(1,e))}function As(e){let t=e.slice(1);return/^[0-9a-f]+$/i.test(t)?t.length===3||t.length===4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?parseInt(t[3]+t[3],16)/255:1}:t.length===6||t.length===8?{r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16),a:t.length===8?parseInt(t.slice(6,8),16)/255:1}:null:null}function js(e){let t=e.trim();return t.endsWith(`%`)?Os(parseFloat(t)/100*255):Os(parseFloat(t))}function Ms(e){if(e==null)return 1;let t=e.trim();return t===``?1:t.endsWith(`%`)?ks(parseFloat(t)/100):ks(parseFloat(t))}function Ns(e){let t=e.indexOf(`(`);if(t<0||!e.endsWith(`)`))return null;let n=e.slice(t+1,-1).trim(),[r,i]=n.includes(`/`)?Ps(n,`/`):[n,void 0],a=r.includes(`,`)?r.split(`,`):r.split(/\s+/).filter(Boolean),o=i??(r.includes(`,`)&&a.length===4?a[3]:void 0),s=a.slice(0,3);return s.length<3?null:{r:js(s[0]),g:js(s[1]),b:js(s[2]),a:Ms(o)}}function Ps(e,t){let n=e.indexOf(t);return[e.slice(0,n),e.slice(n+1)]}function Fs(e,t,n){let r=n;return r<0&&(r+=1),r>1&&--r,r<1/6?e+(t-e)*6*r:r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function Is(e){let t=e.indexOf(`(`);if(t<0||!e.endsWith(`)`))return null;let n=e.slice(t+1,-1).trim(),[r,i]=n.includes(`/`)?Ps(n,`/`):[n,void 0],a=r.includes(`,`)?r.split(`,`):r.split(/\s+/).filter(Boolean);if(a.length<3)return null;let o=(parseFloat(a[0])%360+360)%360/360,s=Math.max(0,Math.min(1,parseFloat(a[1])/100)),c=Math.max(0,Math.min(1,parseFloat(a[2])/100)),l=i??(r.includes(`,`)?a[3]:void 0),u=Ls(o,s,c);return{r:u.r,g:u.g,b:u.b,a:Ms(l)}}function Ls(e,t,n){let r,i,a;if(t===0)r=i=a=n;else{let o=n<.5?n*(1+t):n+t-n*t,s=2*n-o;r=Fs(s,o,e+1/3),i=Fs(s,o,e),a=Fs(s,o,e-1/3)}return{r:Os(r*255),g:Os(i*255),b:Os(a*255)}}function Rs({r:e,g:t,b:n}){let r=e/255,i=t/255,a=n/255,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(o+s)/2,l=o-s;if(l===0)return{h:0,s:0,l:c};let u=c>.5?l/(2-o-s):l/(o+s),d;return d=o===r?(i-a)/l+(i=n)return Bs(r);let{h:i,s:a,l:o}=Rs(r),s=o,c=.97,l=Ls(i,a,c);for(let e=0;e<24;e+=1){let e=(s+c)/2,r=Ls(i,a,e);Us(Bs(r),t)>=n?(l=r,c=e):s=e}return Bs(l)}var Js=200,Ys=3.5,Xs=bs.dark.background,Zs=32,Qs=[`:not(button)[style]`,`:not(button)[bgcolor]`,`:not(button)[color]`].join(`,`);function $s(e){return e.includes(`gradient`)}function ec(e){let t=e.getPropertyValue(`color`),n=e.getPropertyValue(`background`),r=e.getPropertyValue(`background-color`),i=e.getPropertyValue(`background-image`);if(!t&&!n&&!r&&!i)return!1;let a=!1,o=t=>{e.getPropertyValue(t)&&(e.removeProperty(t),a=!0)},s=()=>{if(!t||Hs(t)>Js)return;if(Ks(t)Hs(e)>Js||!!t&&Us(t,e)`${e.cssText}\n`).join(``)}function rc(e){if(!e.trim()||typeof CSSStyleSheet>`u`)return e;let t;try{t=new CSSStyleSheet,t.replaceSync(e)}catch{return e}return tc(t.cssRules)?nc(t):e}var ic=/prefers-color-scheme\s*:\s*dark/i,ac=/filter\s*:[^;"']*invert\s*\(/i,oc=/color-scheme\s*:[^;]*dark/i;function sc(){return typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}function cc(e,t){if(ic.test(t)&&sc())return!0;for(let t of e.querySelectorAll(`meta[name]`))if((t.getAttribute(`name`)??``).toLowerCase()===`color-scheme`&&(t.getAttribute(`content`)??``).toLowerCase().includes(`dark`))return!0;let n=e.nodeType===9?e:null,r=n?[n.documentElement,n.body,...Array.from(n.body.children)]:Array.from(e.children);for(let e of r){if(!e)continue;let t=e.getAttribute(`style`)??``;if(oc.test(t)||ac.test(t))return!0}return!1}function lc(e,t,n=null){if(cc(e,t))return!1;if(n)for(let e of[`background`,`bgcolor`,`text`,`link`,`vlink`,`alink`])n.removeAttribute(e);for(let t of e.querySelectorAll(Qs))t.removeAttribute(`bgcolor`),t.removeAttribute(`color`),t.hasAttribute(`style`)&&ec(t.style);for(let t of e.querySelectorAll(`text[fill]`)){let e=t.getAttribute(`fill`);Gs(e)&&Hs(e)<=Js&&t.setAttribute(`fill`,`currentColor`)}for(let t of e.querySelectorAll(`style`)){let e=t.textContent??``,n=rc(e);n!==e&&(t.textContent=n)}return!0}function uc(e){if(!e||typeof document>`u`)return e;try{if(/^\s*)/i.test(e)&&typeof DOMParser==`function`){let t=new DOMParser().parseFromString(e,`text/html`);return lc(t,e,t.body)?t.documentElement.outerHTML:e}let t=document.createElement(`template`);t.innerHTML=e;let n=t.content;return lc(n,e)?t.innerHTML:e}catch{return e}}var dc=`aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2`,fc=`ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2`,pc=`numeric`,mc=`ascii`,hc=`alpha`,gc=`asciinumeric`,_c=`alphanumeric`,vc=`domain`,yc=`emoji`,bc=`scheme`,xc=`slashscheme`,Sc=`whitespace`;function Cc(e,t){return e in t||(t[e]=[]),t[e]}function wc(e,t,n){t[pc]&&(t[gc]=!0,t[_c]=!0),t[mc]&&(t[gc]=!0,t[hc]=!0),t[gc]&&(t[_c]=!0),t[hc]&&(t[_c]=!0),t[_c]&&(t[vc]=!0),t[yc]&&(t[vc]=!0);for(let r in t){let t=Cc(r,n);t.indexOf(e)<0&&t.push(e)}}function Tc(e,t){let n={};for(let r in t)t[r].indexOf(e)>=0&&(n[r]=!0);return n}function Ec(e=null){this.j={},this.jr=[],this.jd=null,this.t=e}Ec.groups={},Ec.prototype={accepts(){return!!this.t},go(e){let t=this,n=t.j[e];if(n)return n;for(let n=0;ne.ta(t,n,r,i),Dc=(e,t,n,r,i)=>e.tr(t,n,r,i),Oc=(e,t,n,r,i)=>e.ts(t,n,r,i),K=(e,t,n,r,i)=>e.tt(t,n,r,i),kc=`WORD`,Ac=`UWORD`,jc=`ASCIINUMERICAL`,Mc=`ALPHANUMERICAL`,Nc=`LOCALHOST`,Pc=`TLD`,Fc=`UTLD`,Ic=`SCHEME`,Lc=`SLASH_SCHEME`,Rc=`NUM`,zc=`WS`,Bc=`NL`,Vc=`OPENBRACE`,Hc=`CLOSEBRACE`,Uc=`OPENBRACKET`,Wc=`CLOSEBRACKET`,Gc=`OPENPAREN`,Kc=`CLOSEPAREN`,qc=`OPENANGLEBRACKET`,Jc=`CLOSEANGLEBRACKET`,Yc=`FULLWIDTHLEFTPAREN`,Xc=`FULLWIDTHRIGHTPAREN`,Zc=`LEFTCORNERBRACKET`,Qc=`RIGHTCORNERBRACKET`,$c=`LEFTWHITECORNERBRACKET`,el=`RIGHTWHITECORNERBRACKET`,tl=`FULLWIDTHLESSTHAN`,nl=`FULLWIDTHGREATERTHAN`,rl=`AMPERSAND`,il=`APOSTROPHE`,al=`ASTERISK`,ol=`AT`,sl=`BACKSLASH`,cl=`BACKTICK`,ll=`CARET`,ul=`COLON`,dl=`COMMA`,fl=`DOLLAR`,pl=`DOT`,ml=`EQUALS`,hl=`EXCLAMATION`,gl=`HYPHEN`,_l=`PERCENT`,vl=`PIPE`,yl=`PLUS`,bl=`POUND`,xl=`QUERY`,Sl=`QUOTE`,Cl=`FULLWIDTHMIDDLEDOT`,wl=`SEMI`,Tl=`SLASH`,El=`TILDE`,Dl=`UNDERSCORE`,Ol=`EMOJI`,kl=`SYM`,Al=Object.freeze({__proto__:null,ALPHANUMERICAL:Mc,AMPERSAND:rl,APOSTROPHE:il,ASCIINUMERICAL:jc,ASTERISK:al,AT:ol,BACKSLASH:sl,BACKTICK:cl,CARET:ll,CLOSEANGLEBRACKET:Jc,CLOSEBRACE:Hc,CLOSEBRACKET:Wc,CLOSEPAREN:Kc,COLON:ul,COMMA:dl,DOLLAR:fl,DOT:pl,EMOJI:Ol,EQUALS:ml,EXCLAMATION:hl,FULLWIDTHGREATERTHAN:nl,FULLWIDTHLEFTPAREN:Yc,FULLWIDTHLESSTHAN:tl,FULLWIDTHMIDDLEDOT:Cl,FULLWIDTHRIGHTPAREN:Xc,HYPHEN:gl,LEFTCORNERBRACKET:Zc,LEFTWHITECORNERBRACKET:$c,LOCALHOST:Nc,NL:Bc,NUM:Rc,OPENANGLEBRACKET:qc,OPENBRACE:Vc,OPENBRACKET:Uc,OPENPAREN:Gc,PERCENT:_l,PIPE:vl,PLUS:yl,POUND:bl,QUERY:xl,QUOTE:Sl,RIGHTCORNERBRACKET:Qc,RIGHTWHITECORNERBRACKET:el,SCHEME:Ic,SEMI:wl,SLASH:Tl,SLASH_SCHEME:Lc,SYM:kl,TILDE:El,TLD:Pc,UNDERSCORE:Dl,UTLD:Fc,UWORD:Ac,WORD:kc,WS:zc}),jl=/[a-z]/,Ml=/\p{L}/u,Nl=/\p{Emoji}/u,Pl=/\d/,Fl=/\s/,Il=`\r`,Ll=` -`,Rl=`️`,zl=`‍`,Bl=``,Vl=null,Hl=null;function Ul(e=[]){let t={};Ec.groups=t;let n=new Ec;Vl??=ql(dc),Hl??=ql(fc),K(n,`'`,il),K(n,`{`,Vc),K(n,`}`,Hc),K(n,`[`,Uc),K(n,`]`,Wc),K(n,`(`,Gc),K(n,`)`,Kc),K(n,`<`,qc),K(n,`>`,Jc),K(n,`(`,Yc),K(n,`)`,Xc),K(n,`「`,Zc),K(n,`」`,Qc),K(n,`『`,$c),K(n,`』`,el),K(n,`<`,tl),K(n,`>`,nl),K(n,`&`,rl),K(n,`*`,al),K(n,`@`,ol),K(n,"`",cl),K(n,`^`,ll),K(n,`:`,ul),K(n,`,`,dl),K(n,`$`,fl),K(n,`.`,pl),K(n,`=`,ml),K(n,`!`,hl),K(n,`-`,gl),K(n,`%`,_l),K(n,`|`,vl),K(n,`+`,yl),K(n,`#`,bl),K(n,`?`,xl),K(n,`"`,Sl),K(n,`/`,Tl),K(n,`;`,wl),K(n,`~`,El),K(n,`_`,Dl),K(n,`\\`,sl),K(n,`・`,Cl);let r=Dc(n,Pl,Rc,{[pc]:!0});Dc(r,Pl,r);let i=Dc(r,jl,jc,{[gc]:!0}),a=Dc(r,Ml,Mc,{[_c]:!0}),o=Dc(n,jl,kc,{[mc]:!0});Dc(o,Pl,i),Dc(o,jl,o),Dc(i,Pl,i),Dc(i,jl,i);let s=Dc(n,Ml,Ac,{[hc]:!0});Dc(s,jl),Dc(s,Pl,a),Dc(s,Ml,s),Dc(a,Pl,a),Dc(a,jl),Dc(a,Ml,a);let c=K(n,Ll,Bc,{[Sc]:!0}),l=K(n,Il,zc,{[Sc]:!0}),u=Dc(n,Fl,zc,{[Sc]:!0});K(n,Bl,u),K(l,Ll,c),K(l,Bl,u),Dc(l,Fl,u),K(u,Il),K(u,Ll),Dc(u,Fl,u),K(u,Bl,u);let d=Dc(n,Nl,Ol,{[yc]:!0});K(d,`#`),Dc(d,Nl,d),K(d,Rl,d);let f=K(d,zl);K(f,`#`),Dc(f,Nl,d);let p=[[jl,o],[Pl,i]],m=[[jl,null],[Ml,s],[Pl,a]];for(let e=0;ee[0]>t[0]?1:-1);for(let t=0;t=0?i[vc]=!0:jl.test(r)?Pl.test(r)?i[gc]=!0:i[mc]=!0:i[pc]=!0,Oc(n,r,r,i)}return Oc(n,`localhost`,Nc,{ascii:!0}),n.jd=new Ec(kl),{start:n,tokens:Object.assign({groups:t},Al)}}function Wl(e,t){let n=Gl(t.replace(/[A-Z]/g,e=>e.toLowerCase())),r=n.length,i=[],a=0,o=0;for(;o=0&&(d+=n[o].length,f++),l+=n[o].length,a+=n[o].length,o++;a-=d,o-=f,l-=d,i.push({t:u.t,v:t.slice(a-l,a),s:a-l,e:a})}return i}function Gl(e){let t=[],n=e.length,r=0;for(;r56319||r+1===n||(a=e.charCodeAt(r+1))<56320||a>57343?e[r]:e.slice(r,r+2);t.push(o),r+=o.length}return t}function Kl(e,t,n,r,i){let a,o=t.length;for(let n=0;n=0;)i++;if(i>0){t.push(n.join(``));for(let t=parseInt(e.substring(r,r+i),10);t>0;t--)n.pop();r+=i}else n.push(e[r]),r++}return t}var Jl={defaultProtocol:`http`,events:null,format:Xl,formatHref:Xl,nl2br:!1,tagName:`a`,target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function Yl(e,t=null){let n=Object.assign({},Jl);e&&(n=Object.assign(n,e instanceof Yl?e.o:e));let r=n.ignoreTags,i=[];for(let e=0;en?r.substring(0,n)+`…`:r},toFormattedHref(e){return e.get(`formatHref`,this.toHref(e.get(`defaultProtocol`)),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(e=Jl.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(e),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(e){return{type:this.t,value:this.toFormattedString(e),isLink:this.isLink,href:this.toFormattedHref(e),start:this.startIndex(),end:this.endIndex()}},validate(e){return e.get(`validate`,this.toString(),this)},render(e){let t=this,n=this.toHref(e.get(`defaultProtocol`)),r=e.get(`formatHref`,n,this),i=e.get(`tagName`,n,t),a=this.toFormattedString(e),o={},s=e.get(`className`,n,t),c=e.get(`target`,n,t),l=e.get(`rel`,n,t),u=e.getObj(`attributes`,n,t),d=e.getObj(`events`,n,t);return o.href=r,s&&(o.class=s),c&&(o.target=c),l&&(o.rel=l),u&&Object.assign(o,u),{tagName:i,attributes:o,content:a,eventListeners:d}}};function Ql(e,t){class n extends Zl{constructor(t,n){super(t,n),this.t=e}}for(let e in t)n.prototype[e]=t[e];return n.t=e,n}var $l=Ql(`email`,{isLink:!0,toHref(){return`mailto:`+this.toString()}}),eu=Ql(`text`),tu=Ql(`nl`),nu=Ql(`url`,{isLink:!0,toHref(e=Jl.defaultProtocol){return this.hasProtocol()?this.v:`${e}://${this.v}`},hasProtocol(){let e=this.tk;return e.length>=2&&e[0].t!==Nc&&e[1].t===ul}}),q=e=>new Ec(e);function ru({groups:e}){let t=e.domain.concat([rl,al,ol,sl,cl,ll,fl,ml,gl,Rc,_l,vl,yl,bl,Tl,kl,El,Dl]),n=[il,ul,dl,pl,hl,_l,xl,Sl,wl,qc,Jc,Vc,Hc,Wc,Uc,Gc,Kc,Yc,Xc,Zc,Qc,$c,el,tl,nl],r=[rl,il,al,sl,cl,ll,fl,ml,gl,Vc,Hc,_l,vl,yl,bl,xl,Tl,kl,El,Dl],i=q(),a=K(i,El);G(a,r,a),G(a,e.domain,a);let o=q(),s=q(),c=q();G(i,e.domain,o),G(i,e.scheme,s),G(i,e.slashscheme,c),G(o,r,a),G(o,e.domain,o);let l=K(o,ol);K(a,ol,l),K(s,ol,l),K(c,ol,l);let u=K(a,pl);G(u,r,a),G(u,e.domain,a);let d=q();G(l,e.domain,d),G(d,e.domain,d);let f=K(d,pl);G(f,e.domain,d);let p=q($l);G(f,e.tld,p),G(f,e.utld,p),K(l,Nc,p);let m=K(d,gl);K(m,gl,m),G(m,e.domain,d),G(p,e.domain,d),K(p,pl,f),K(p,gl,m);let h=K(o,gl),g=K(o,pl);K(h,gl,h),G(h,e.domain,o),G(g,r,a),G(g,e.domain,o);let _=q(nu);G(g,e.tld,_),G(g,e.utld,_),G(_,e.domain,o),G(_,r,a),K(_,pl,g),K(_,gl,h),K(_,ol,l);let v=K(_,ul),y=q(nu);G(v,e.numeric,y);let b=q(nu),x=q();G(b,t,b),G(b,n,x),G(x,t,b),G(x,n,x),K(_,Tl,b),K(y,Tl,b);let S=K(s,ul),C=K(K(K(c,ul),Tl),Tl);G(s,e.domain,o),K(s,pl,g),K(s,gl,h),G(c,e.domain,o),K(c,pl,g),K(c,gl,h),G(S,e.domain,b),K(S,Tl,b),K(S,xl,b),G(C,e.domain,b),G(C,t,b),K(C,Tl,b);let w=[[Vc,Hc],[Uc,Wc],[Gc,Kc],[qc,Jc],[Yc,Xc],[Zc,Qc],[$c,el],[tl,nl]];for(let e=0;e=0&&f++,i++,u++;if(f<0)i-=u,i0&&(a.push(au(eu,t,o)),o=[]),i-=f,u-=f;let e=d.t,r=n.slice(i-u,i);a.push(au(e,t,r))}}return o.length>0&&a.push(au(eu,t,o)),a}function au(e,t,n){let r=n[0].s,i=n[n.length-1].e;return new e(t.slice(r,i),n)}var J={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function ou(){J.scanner=Ul(J.customSchemes);for(let e=0;e/g,`>`)}function lu(e){return e.replace(/"/g,`"`)}function uu(e){let t=[];for(let n in e){let r=e[n]+``;t.push(`${n}="${lu(r)}"`)}return t.join(` `)}function du({tagName:e,attributes:t,content:n}){return`<${e} ${uu(t)}>${cu(n)}`}function fu(e,t={}){t=new Yl(t,du);let n=su(e),r=[];for(let e=0;e -`):!i.isLink||!t.check(i)?r.push(cu(i.toString())):r.push(t.render(i))}return r.join(``)}String.prototype.linkify||Object.defineProperty(String.prototype,"linkify",{writable:!1,value:function(e){return fu(this,e)}});var pu={defaultProtocol:`https`,target:`_blank`,rel:`noopener noreferrer`,nl2br:!1},mu=/^[ \t]*>[ \t]?/;function hu(e){let t=0,n=e,r=mu.exec(n);for(;r!==null;)t+=1,n=n.slice(r[0].length),r=mu.exec(n);return{depth:t,content:n}}function gu(e){return`pt-quote pt-quote--l${(e-1)%5+1}`}function _u(e,t,n){let r=``,i=[],a=t,o=()=>{i.length&&(r+=i.join(` -`),i=[])};for(;a${t}`,a=i}}return o(),[r,a]}function vu(e){return e?_u(String(e).replace(/\r\n?/g,` -`).split(` -`).map(hu),0,0)[0]:``}var yu=400,bu=120;function xu(e){if(!e)return``;let t=new Date(Number(e));return Number.isNaN(t.valueOf())?``:t.toLocaleString(ft,{timeZone:`UTC`})}function Su(e){let t=e-dt,n=new Intl.RelativeTimeFormat(ft,{numeric:`auto`}),r=Math.round(t/6e4);if(Math.abs(r)<60)return n.format(r,`minute`);let i=Math.round(t/36e5);return Math.abs(i)<48?n.format(i,`hour`):n.format(Math.round(t/864e5),`day`)}function Cu(){let[e,t]=(0,C.useState)(0),n=(0,C.useRef)(null);return[(0,C.useCallback)(e=>{if(n.current?.disconnect(),n.current=null,!e){t(0);return}let r=new ResizeObserver(([n])=>{let r=n.borderBoxSize?.[0];t(r?r.blockSize:e.offsetHeight)});r.observe(e),n.current=r},[]),e]}function wu({attachments:e,contextKey:t}){let[n,r]=(0,C.useState)(!0),[i,a]=(0,C.useState)(!1),o=(0,C.useRef)(null),s=(0,C.useRef)(null),c=(0,C.useRef)(null),[l,u]=(0,C.useState)({heading:0,firstRow:0});return(0,C.useLayoutEffect)(()=>{r(!0),s.current&&(s.current.scrollTop=0)},[t]),(0,C.useLayoutEffect)(()=>{let t=o.current,n=s.current;if(!t||!n)return;let i=c.current?.offsetHeight??0,l=n.firstElementChild?.offsetHeight??0;u(e=>e.heading===i&&e.firstRow===l?e:{heading:i,firstRow:l});let d=t.clientHeight-i,f=e.length>1&&n.scrollHeight>d+1;a(f),f||r(!0)},[e,t]),e.length===0?null:(0,B.jsxs)(`section`,{ref:o,className:`message-attachment-bar${n?``:` message-attachment-bar--collapsed`}`,style:{"--attachment-heading-height":`${l.heading}px`,"--attachment-first-row-height":`${l.firstRow}px`},"aria-label":`Attachments`,tabIndex:-1,children:[(0,B.jsxs)(`div`,{ref:c,className:`message-attachment-bar__heading`,children:[(0,B.jsxs)(`h3`,{children:[`Attachments `,(0,B.jsxs)(`span`,{"aria-hidden":`true`,children:[`(`,e.length,`)`]})]}),(0,B.jsxs)(`button`,{className:`message-attachment-bar__toggle`,style:i?void 0:{display:`none`},type:`button`,"aria-expanded":n,"aria-label":`${n?`Collapse`:`Expand`} attachment list`,onClick:()=>r(e=>!e),children:[n?(0,B.jsx)(ne,{size:14,strokeWidth:1.75,"aria-hidden":`true`}):(0,B.jsx)(A,{size:14,strokeWidth:1.75,"aria-hidden":`true`}),n?`Collapse`:`Expand`]})]}),(0,B.jsx)(`ul`,{ref:s,className:`message-attachment-bar__list`,children:e.map((e,t)=>{let r=!n&&t>0;return(0,B.jsxs)(`li`,{className:`message-attachment-row${r?` message-attachment-row--collapsed`:``}`,inert:r,"aria-hidden":r||void 0,children:[(0,B.jsx)(ve,{size:15,strokeWidth:1.75,className:`message-attachment-row__icon`,"aria-hidden":`true`}),(0,B.jsxs)(`div`,{className:`message-attachment-row__description`,children:[(0,B.jsx)(`span`,{className:`message-attachment-row__name`,title:e.name,children:e.name}),(0,B.jsx)(`span`,{className:`message-attachment-row__metadata`,children:`${e.mime_type} · ${Zr(e.size)}`})]}),(0,B.jsx)(`div`,{className:`message-attachment-row__actions`,children:(0,B.jsx)(Vr,{title:`Download ${e.name}`,"aria-label":`Download ${e.name}`,children:(0,B.jsx)(oe,{size:16,strokeWidth:1.75})})})]},`${e.name}-${t}`)})})]})}function Tu({maximized:e,onToggleMaximized:t}){let n=z(e=>e.open),r=z(e=>e.open.id==null?null:e.messages.get(e.open.id)??null),i=z(e=>e.folders),a=Cr(e=>e.theme),o=os(`(max-width: 639px)`),s=(0,C.useRef)(null),[c,l]=Cu(),[u,d]=Cu(),[f,p]=Cu(),m=(0,C.useRef)(null),h=(0,C.useRef)(null),g=(0,C.useRef)(null),_=(0,C.useRef)(null),v=(0,C.useRef)(null),[y,b]=(0,C.useState)(bu),[x,S]=(0,C.useState)(!1),[w,T]=(0,C.useState)(!1),[E,D]=(0,C.useState)(null),O=(0,C.useRef)(null),k=(0,C.useId)(),te=(0,C.useRef)(null);(0,C.useEffect)(()=>{S(!1),T(!1),D(null),te.current&&(te.current.scrollTop=0)},[r?.id??null]),(0,C.useEffect)(()=>{if(!r||r.is_draft!==1)return;br.getState().openDraft(r);let e=z.getState();e.selectMessage(null),e.clearSelection()},[r]);let ne=r?An(r):null,re=a,ie=re===`dark`&&x?`light`:re,oe=bs[ie].background,se=(0,C.useMemo)(()=>!ne?.text||ne.html?``:ns.sanitize(vu(ne.text),{ALLOWED_URI_REGEXP:ls,ADD_ATTR:[`target`]}),[ne]),j=(0,C.useMemo)(()=>{if(!ne?.html)return``;let e=_s(ne.html,null);return Ss(ie===`dark`?uc(e):e,{colorScheme:ie})},[ne,ie]),ce=(0,C.useCallback)(()=>{_.current=null,v.current?.(),v.current=null},[]);(0,C.useLayoutEffect)(()=>{ce(),b(bu)},[j,ce]),(0,C.useEffect)(()=>ce,[ce]);let M=(0,C.useCallback)(()=>{ce();let e=g.current,t=e?.contentDocument;if(!e||!t?.body)return;t.querySelectorAll(`a[href]`).forEach(e=>{e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`)});let n=!0,r=!1,i=t.documentElement,a=t.body,o=()=>{if(!n)return;let e=h.current?.clientWidth??0;if(e<=0)return;i.style.zoom=``;let r=Math.max(i.scrollWidth,a.scrollWidth,1),o=t.defaultView,s=o?.getComputedStyle(a),c=o?.getComputedStyle(i),l=[s?.marginBottom,c?.paddingBottom,c?.borderBottomWidth,c?.marginBottom].reduce((e,t)=>e+Math.max(0,Number.parseFloat(t??``)||0),0),u=Math.max(0,a.getBoundingClientRect().top+(o?.scrollY??0)),d=Math.max(u+Math.max(a.offsetHeight,a.scrollHeight)+l,bu),f=Math.max(r,yu),p=f>e?e/f:1;i.style.zoom=p===1?``:String(p),b(Math.max(bu,Math.ceil(d*p)))};_.current=o;let s=()=>{r||(r=!0,requestAnimationFrame(()=>{r=!1,o()}))};o();let c=[],l=requestAnimationFrame(o);c.push(()=>cancelAnimationFrame(l));for(let e of[150,600]){let t=window.setTimeout(o,e);c.push(()=>clearTimeout(t))}t.fonts?.ready.then(o).catch(()=>{});let u=null;h.current&&(u=new ResizeObserver(s),u.observe(h.current)),v.current=()=>{n=!1,u?.disconnect();for(let e of c)e()}},[ce]),le=z.getState,ue=br.getState,de=an({folders:i},typeof n.viewId==`number`?n.viewId:r?.folder_id??null),fe=de?.role===`junk`,pe=de?.role===`archive`,me=r?.scheduled_undo_status===`pending`,he=(0,C.useMemo)(()=>r?Vt(r.keywords_json,Ft):[],[r]),ge=he.length===0?`Tag`:`Tags: ${he.map(e=>e.name).join(`, `)}`,_e=(0,C.useMemo)(()=>r?[r]:[],[r]);function N(n){!e||n.key!==`Escape`||n.defaultPrevented||E||s.current?.querySelector(`[role="dialog"], details[open]`)||(n.preventDefault(),t())}let ve=(0,C.useCallback)(e=>{s.current=e,c(e)},[c]),ye={"--message-view-height":l>0?`${l}px`:void 0,"--message-toolbar-height":`${d}px`,"--message-banner-height":`${p}px`,"--message-attachment-bar-height":`0px`};if(!r)return(0,B.jsx)(`section`,{ref:ve,className:`message-view`,style:ye,"aria-label":`Message detail`,tabIndex:-1,children:(0,B.jsx)(`div`,{className:`message-view__empty`,children:(0,B.jsx)(`p`,{children:`Select a message to read it.`})})});let be=!o||w,xe=be?r.from_text||`(no sender)`:pn(r.from_text),Se=tr(r.cc),F=[r.id],Ce=w?`Hide message details`:`Show message details`;return(0,B.jsx)(`section`,{ref:ve,className:`message-view`,style:ye,"aria-label":`Message detail`,tabIndex:-1,onKeyDown:N,children:(0,B.jsxs)(`article`,{className:`message-view__article`,children:[(0,B.jsxs)(`header`,{ref:u,className:`message-view__header`,children:[(0,B.jsx)(Vr,{className:`message-view__action message-view__action--back`,title:`Back`,"aria-label":`Back`,onClick:()=>{le().selectMessage(null),le().clearSelection()},children:(0,B.jsx)(ee,{className:`message-view__toolbar-icon`,size:18,strokeWidth:1.65})}),fe?(0,B.jsx)(`button`,{className:`message-view__action message-view__action--whitelist`,type:`button`,title:`Whitelist sender and move to Inbox`,"aria-label":`Not junk — whitelist sender and move to Inbox`,onClick:()=>le().notJunk(F),children:(0,B.jsx)(`span`,{className:`message-view__whitelist-label`,children:`Not junk`})}):null,me?null:(0,B.jsxs)(B.Fragment,{children:[pe?null:(0,B.jsx)(Vr,{className:`message-view__action`,title:`Archive (A)`,"aria-label":`Archive`,onClick:()=>le().archiveMessages(F),children:(0,B.jsx)(zr,{className:`message-view__toolbar-icon message-view__toolbar-icon--folder`,svg:oi})}),fe?null:(0,B.jsx)(Vr,{className:`message-view__action`,title:`Junk`,"aria-label":`Mark as junk`,onClick:()=>le().junkMessages(F),children:(0,B.jsx)(zr,{className:`message-view__toolbar-icon message-view__toolbar-icon--folder`,svg:pi})}),(0,B.jsx)(Vr,{className:`message-view__action`,danger:!0,title:`Delete (Delete)`,"aria-label":`Delete`,onClick:()=>le().destroyMessages(F),children:(0,B.jsx)(Ie,{className:`message-view__toolbar-icon`,size:18,strokeWidth:1.65})}),(0,B.jsx)(Vr,{className:`message-view__action`,title:`Reply (R)`,"aria-label":`Reply`,onClick:()=>ue().prepareReply(r,!1),children:(0,B.jsx)(zr,{className:`message-view__toolbar-icon message-view__toolbar-icon--shape`,svg:is})}),(0,B.jsx)(Vr,{className:`message-view__action`,title:`Reply All (Shift+R)`,"aria-label":`Reply All`,onClick:()=>ue().prepareReply(r,!0),children:(0,B.jsx)(zr,{className:`message-view__toolbar-icon message-view__toolbar-icon--shape`,svg:as})}),(0,B.jsx)(Vr,{className:`message-view__action`,title:`Forward (F)`,"aria-label":`Forward`,onClick:()=>ue().prepareForward(r),children:(0,B.jsx)(zr,{className:`message-view__toolbar-icon message-view__toolbar-icon--shape`,svg:rs})}),(0,B.jsx)(Vr,{ref:O,className:`message-view__action message-view__action--tags`,title:`${ge} (T)`,"aria-label":ge,"aria-haspopup":`dialog`,"aria-expanded":E!==null,"data-tag-picker-trigger":!0,onClick:()=>{if(E){D(null);return}let e=O.current?.getBoundingClientRect();e&&D({top:e.top,left:e.left,width:e.width,height:e.height})},children:(0,B.jsx)(la,{tags:he})})]}),(0,B.jsx)(_a,{anchor:E,targets:_e,definitions:Ft,trigger:O.current,label:`Tags`,onClose:()=>D(null),onToggle:(e,t)=>le().setTagsMany(F,t?{add:[e]}:{remove:[e]}),onClear:()=>le().clearTagsMany(F),onManage:()=>D(null)}),(0,B.jsxs)(`div`,{className:`message-view__view-actions`,children:[re===`dark`&&j?(0,B.jsx)(Vr,{className:`message-view__action message-view__action--view-mode`,"aria-pressed":x,title:x?`View this message in dark mode`:`View this message in light mode`,"aria-label":x?`View this message in dark mode`:`View this message in light mode`,onClick:()=>S(e=>!e),children:x?(0,B.jsx)(P,{size:16,strokeWidth:1.75}):(0,B.jsx)(Ae,{size:16,strokeWidth:1.75})}):null,(0,B.jsx)(Ur,{className:`message-view__action message-view__action--maximize`,maximized:e,surface:`message view`,onToggle:t})]})]}),me?(0,B.jsxs)(`div`,{ref:f,className:`message-view__scheduled`,role:`status`,children:[(0,B.jsx)(ae,{size:16,strokeWidth:1.75,"aria-hidden":`true`}),(0,B.jsx)(`span`,{className:`message-view__scheduled-text`,children:`Scheduled to send ${xu(r.sent_at)} (${Su(r.sent_at)}).`}),(0,B.jsx)(`button`,{className:`message-view__scheduled-cancel`,type:`button`,onClick:()=>le().cancelScheduledSend(r.id),children:`Cancel send`})]}):null,(0,B.jsxs)(`section`,{className:`message-view__details${w?` message-view__details--expanded`:``}`,"aria-label":`Message header`,children:[(0,B.jsx)(Vr,{className:`message-view__details-toggle`,style:o?void 0:{display:`none`},"aria-expanded":w,"aria-controls":k,"aria-label":Ce,title:Ce,onClick:()=>{T(e=>!e),te.current&&(te.current.scrollTop=0)},children:(0,B.jsx)(A,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsxs)(`dl`,{id:k,ref:te,className:`message-view__metadata`,tabIndex:o?0:void 0,"aria-label":o?`Message details`:void 0,children:[(0,B.jsxs)(`div`,{className:`message-view__metadata-row`,children:[(0,B.jsx)(`dt`,{children:`From`}),(0,B.jsx)(`dd`,{children:xe})]}),r.to_text?(0,B.jsxs)(`div`,{className:`message-view__metadata-row`,style:be?void 0:{display:`none`},children:[(0,B.jsx)(`dt`,{children:`To`}),(0,B.jsx)(`dd`,{children:r.to_text})]}):null,Se?(0,B.jsxs)(`div`,{className:`message-view__metadata-row`,style:be?void 0:{display:`none`},children:[(0,B.jsx)(`dt`,{children:`Cc`}),(0,B.jsx)(`dd`,{children:Se})]}):null,(0,B.jsxs)(`div`,{className:`message-view__metadata-row message-view__title`,children:[(0,B.jsx)(`dt`,{children:`Subject`}),(0,B.jsx)(`dd`,{children:(0,B.jsx)(`h2`,{children:r.subject||`(no subject)`})})]}),(0,B.jsxs)(`div`,{className:`message-view__metadata-row`,style:be?void 0:{display:`none`},children:[(0,B.jsx)(`dt`,{children:me?`Send at`:`Date`}),(0,B.jsx)(`dd`,{className:`message-view__date`,children:xu(me?r.sent_at:r.received_at)})]}),he.length>0?(0,B.jsxs)(`div`,{className:`message-view__metadata-row message-view__tags-row`,style:be?void 0:{display:`none`},children:[(0,B.jsx)(`dt`,{children:`Tags`}),(0,B.jsx)(`dd`,{className:`message-view__tags`,"data-message-tags":!0,children:he.map(e=>(0,B.jsx)(ua,{tag:e,removable:!me,onRemove:()=>le().setTagsMany(F,{remove:[e.keyword]})},e.keyword))})]}):null]})]}),(0,B.jsx)(`div`,{ref:m,className:`message-view__body`,tabIndex:0,"aria-label":`Message body`,children:j?(0,B.jsx)(`div`,{ref:h,className:`message-view__html-shell`,children:(0,B.jsx)(`iframe`,{ref:g,className:`message-view__html-frame`,srcDoc:j,sandbox:Cs,style:{height:`${y}px`,backgroundColor:oe},title:`Message body`,onLoad:M})}):se?(0,B.jsx)(`div`,{className:`message-view__text`,dangerouslySetInnerHTML:{__html:se}}):(0,B.jsx)(`p`,{className:`message-view__placeholder`,children:`This message has no content.`})}),(0,B.jsx)(wu,{attachments:ne?.attachments??[],contextKey:r.id})]})})}function Eu(e){return{name:e.name,email:e.email,organization:e.organization??null,source:`contact`,last_sent_at:e.last_sent_at,send_count:e.send_count}}function Du(e,t){if(e.email.toLowerCase().startsWith(t))return!0;for(let n of e.name.toLowerCase().split(/\s+/))if(n.startsWith(t))return!0;return!!e.organization?.toLowerCase().split(/\s+/).some(e=>e.startsWith(t))}async function Ou(e,t,n){let r=e.trim().toLowerCase(),i=new Set(n.map(e=>jn(e))),{contacts:a}=z.getState();return a.filter(e=>!i.has(jn(e.email))&&Du(e,r)).sort((e,t)=>t.send_count-e.send_count||t.last_sent_at-e.last_sent_at||e.name.localeCompare(t.name)).slice(0,t).map(Eu)}async function ku(){let{contacts:e}=z.getState();return[...e].sort((e,t)=>e.name.localeCompare(t.name)).map(Eu)}var Au=10,ju=120;function Mu(e){return`invalid`in e?e.text:er(e)}function Nu(e){return`invalid`in e?e.text:e.name?.trim()||e.email}function Pu(e){if(`invalid`in e)return`${e.text} — not a valid address`;let t=e.name?.trim();return t?`${t} <${e.email}>`:e.email}function Fu(e){let t=[],n=Number(e.last_sent_at);if(Number.isFinite(n)&&n>0){let e=Math.floor((dt-n)/864e5);e<1?t.push(`today`):e<7?t.push(`${e}d ago`):e<30?t.push(`${Math.floor(e/7)}w ago`):e<365?t.push(`${Math.floor(e/30)}mo ago`):t.push(`${Math.floor(e/365)}y ago`)}let r=Number(e.send_count);return Number.isFinite(r)&&r>1&&t.push(`${r} sends`),t.length>0?t.join(` · `):null}function Iu({text:e,typed:t}){let n=t.trim().toLowerCase(),r=n?e.toLowerCase().indexOf(n):-1;return r<0?(0,B.jsx)(B.Fragment,{children:e}):(0,B.jsxs)(B.Fragment,{children:[e.slice(0,r),(0,B.jsx)(`span`,{className:`ac-match`,children:e.slice(r,r+n.length)}),e.slice(r+n.length)]})}function Lu({label:e,inputId:t,entries:n,taken:r,query:i,browseAll:a,onEntriesChange:o}){let[s,c]=(0,C.useState)(``),[l,u]=(0,C.useState)([]),[d,f]=(0,C.useState)(-1),[p,m]=(0,C.useState)(!1),[h,g]=(0,C.useState)(!1),[_,v]=(0,C.useState)(null),[y,b]=(0,C.useState)(null),x=(0,C.useRef)(null),S=(0,C.useRef)(null),w=(0,C.useRef)(null),T=(0,C.useRef)(0),E=(0,C.useRef)(s);E.current=s;let D=(0,C.useRef)(n);D.current=n;let ee=(0,C.useRef)(null),O=(0,C.useMemo)(()=>new Set([...n.filter(e=>!(`invalid`in e)).map(e=>jn(e.email)),...r.map(e=>jn(e))]),[n,r]),k=(0,C.useRef)(O);k.current=O;let te=p&&l.length>0,A=te||_!==null,ne=`${t}-listbox`,re=e=>`${t}-option-${e}`,ie=h?l.length===1?`1 contact`:`${l.length} contacts`:l.length===1?`1 suggestion`:`${l.length} suggestions`,ae=te?h?`Showing ${l.length} contacts`:l.length===1?`1 suggestion available`:`${l.length} suggestions available`:y??``;(0,C.useEffect)(()=>()=>{w.current&&clearTimeout(w.current)},[]),(0,C.useEffect)(()=>{if(ee.current==null)return;let e=ee.current;ee.current=null;let t=S.current?.querySelectorAll(`.pill__remove`),n=t?.[Math.min(e,(t?.length??0)-1)];n?n.focus():x.current?.focus()},[n]);let oe=(0,C.useCallback)(()=>{w.current&&clearTimeout(w.current),w.current=null,T.current+=1,m(!1),f(-1),u([]),g(!1),b(null),v(null)},[]),se=e=>e.filter(e=>!k.current.has(jn(e.email))),j=(0,C.useCallback)(async e=>{let t=T.current+=1,n=[],r=!0;try{n=await i(e,Au,[...k.current])}catch{r=!1}if(t!==T.current)return;let a=se(n).slice(0,Au);u(a),f(a.length>0?0:-1),g(!1),v(a.length===0&&r?e:null),m(a.length>0),b(a.length>0?null:r?`No suggestions for ${e}`:`Suggestions are unavailable`)},[i]),ce=(0,C.useCallback)(async()=>{w.current&&clearTimeout(w.current);let e=T.current+=1,t=[],n=!0;try{t=await a()}catch{n=!1}if(e!==T.current)return!1;let r=se(t);return u(r),f(r.length>0?0:-1),g(!0),v(null),b(r.length>0?null:n?`No contacts to show`:`Contacts are unavailable`),m(r.length>0),!0},[a]),M=(0,C.useCallback)(e=>{w.current&&clearTimeout(w.current);let t=e.trim();if(t.length<1){oe();return}w.current=setTimeout(()=>{w.current=null,j(t)},ju)},[oe,j]),le=(0,C.useCallback)((e=E.current)=>{let t=e.trim();if(!t)return!1;let n=D.current,r=Qn(t);if(r.length===0)return c(``),/^[\s,;]+$/.test(t)?!1:(oe(),o([...n,{text:t,invalid:!0}]),!0);let i=[...n];for(let e of r){if(`rejected`in e){i.push({text:e.rejected,invalid:!0});continue}let t=jn(e.address.email);k.current.has(t)||i.some(e=>!(`invalid`in e)&&jn(e.email)===t)||i.push(e.address)}return c(``),oe(),o(i),!0},[oe,o]);function ue(e){let t=e.name?.trim();le(er({...t?{name:t}:{},email:e.email})),x.current?.focus()}function de(e){let t=n[e];if(!t)return;let r=Mu(t),i=s.trim(),a=i?`${r}, ${i}`:r;c(a),o(n.filter((t,n)=>n!==e)),x.current?.focus(),M(a)}function fe(e){ee.current=e,o(n.filter((t,n)=>n!==e))}function pe(e){requestAnimationFrame(()=>document.getElementById(re(e))?.scrollIntoView({block:`nearest`}))}function me(e){e!==E.current&&(E.current=e,c(e),M(e))}function he(e){if(!Ar(e.nativeEvent))switch(e.key){case`ArrowDown`:case`ArrowUp`:{if(l.length===0){if(e.key!==`ArrowDown`)return;e.preventDefault();let t=s.trim();t.length>=1?j(t):ce().then(e=>{e&&x.current?.focus()});return}e.preventDefault(),m(!0);let t=e.key===`ArrowDown`?1:-1,n=l.length,r=d<0?t===1?0:n-1:(d+t+n)%n;f(r),pe(r);return}case`Enter`:{if(e.ctrlKey||e.metaKey)return;e.preventDefault();let t=l[d]??l[0];t?ue(t):le();return}case`Tab`:{let e=l[d]??l[0];e?ue(e):le();return}case`,`:case`;`:{let t=x.current?.selectionStart;if(nr(typeof t==`number`?s.slice(0,t):s))return;e.preventDefault(),le();return}case`Escape`:A&&(e.stopPropagation(),e.preventDefault(),oe());return;case`Backspace`:if(s.length>0||n.length===0)return;e.preventDefault(),de(n.length-1);return;default:}}function ge(e){let t=e.clipboardData?.getData(`text/plain`);t&&(e.preventDefault(),le((s.trim()?`${s.trim()}, ${t}`:t).replace(/[\r\n]+/g,`, `)))}return(0,B.jsxs)(`div`,{className:`recipient-input${A?` recipient-input--focused`:``}`,children:[(0,B.jsxs)(`div`,{ref:S,className:`recipient-input__field`,onClick:()=>x.current?.focus(),children:[n.length>0?(0,B.jsx)(`ul`,{className:`pills`,role:`list`,children:n.map((e,t)=>{let n=`invalid`in e;return(0,B.jsxs)(`li`,{className:`pill${n?` pill--invalid`:``}`,role:`listitem`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`pill__label`,"aria-invalid":n?`true`:void 0,"aria-label":`${Pu(e)}. Activate to edit.`,title:Pu(e),onClick:e=>{e.stopPropagation(),de(t)},children:[n?(0,B.jsx)(`span`,{className:`pill__warning`,"aria-hidden":`true`,children:`⚠`}):(0,B.jsx)(`span`,{className:`pill__avatar`,"aria-hidden":`true`,style:hn(e.email),children:mn(e.name?.trim()||e.email)}),(0,B.jsx)(`span`,{className:`pill__text`,children:Nu(e)})]}),(0,B.jsx)(`button`,{type:`button`,className:`pill__remove`,"aria-label":`Remove ${Pu(e)}`,onClick:e=>{e.stopPropagation(),fe(t)},children:`×`})]},`${Mu(e)}-${t}`)})}):null,(0,B.jsx)(`input`,{id:t,ref:x,value:s,type:`text`,className:`recipient-input__text`,role:`combobox`,autoComplete:`off`,"aria-autocomplete":`list`,"aria-expanded":A,"aria-controls":ne,"aria-activedescendant":d>=0?re(d):void 0,onInput:e=>me(e.currentTarget.value),onChange:e=>me(e.target.value),onKeyDown:he,onBlur:()=>{le(),oe()},onPaste:ge})]}),(0,B.jsxs)(`div`,{className:`autocomplete`,style:A?void 0:{display:`none`},children:[(0,B.jsx)(`ul`,{id:ne,className:`autocomplete__options`,role:`listbox`,"aria-label":`${e} suggestions`,children:l.map((e,t)=>{let n=e.name?.trim(),r=Fu(e);return(0,B.jsxs)(`li`,{id:re(t),className:`autocomplete__option${t===d?` autocomplete__option--active`:``}`,role:`option`,"aria-selected":t===d,"aria-label":n?`${n} <${e.email}>`:e.email,onMouseDown:e=>e.preventDefault(),onClick:()=>ue(e),children:[(0,B.jsx)(`span`,{className:`ac-avatar`,"aria-hidden":`true`,style:hn(e.email),children:mn(n||e.email)}),(0,B.jsxs)(`span`,{className:`ac-lines`,children:[n?(0,B.jsx)(`span`,{className:`ac-name`,children:(0,B.jsx)(Iu,{text:n,typed:s})}):null,(0,B.jsx)(`span`,{className:`ac-email${n?``:` ac-email--primary`}`,children:(0,B.jsx)(Iu,{text:e.email,typed:s})})]}),r?(0,B.jsx)(`span`,{className:`ac-meta`,"aria-hidden":`true`,children:r}):null]},`${e.email}-${e.source}`)})}),_===null?null:(0,B.jsxs)(`div`,{className:`autocomplete__empty`,"aria-hidden":`true`,children:[(0,B.jsxs)(`span`,{className:`autocomplete__empty-text`,children:[`No matches for “`,_,`”`]}),(0,B.jsxs)(`span`,{className:`ac-key-hint`,children:[(0,B.jsx)(`kbd`,{children:`↵`}),` add it as typed`]})]}),h?null:(0,B.jsx)(`p`,{className:`autocomplete__browse`,children:(0,B.jsx)(`button`,{type:`button`,onMouseDown:e=>e.preventDefault(),onClick:()=>{ce().then(e=>{e&&x.current?.focus()})},children:`Browse all contacts`})}),l.length>0?(0,B.jsxs)(`div`,{className:`autocomplete__keys`,"aria-hidden":`true`,children:[(0,B.jsxs)(`span`,{className:`ac-key-hint`,children:[(0,B.jsx)(`kbd`,{children:`↑↓`}),` navigate`]}),(0,B.jsxs)(`span`,{className:`ac-key-hint`,children:[(0,B.jsx)(`kbd`,{children:`↵`}),` add`]}),(0,B.jsx)(`span`,{className:`autocomplete__count`,children:ie})]}):null]}),(0,B.jsx)(`p`,{id:`${t}-status`,className:`sr-only`,role:`status`,children:ae})]})}var Ru=()=>!0,zu=class{constructor(e,t,n){this.root=e,this.currentNode=e,this.nodeType=t,this.filter=n||Ru}isAcceptableNode(e){let t=e.nodeType;return!!((t===Node.ELEMENT_NODE?1:t===Node.TEXT_NODE?4:0)&this.nodeType)&&this.filter(e)}nextNode(){let e=this.root,t=this.currentNode,n;for(;;){for(n=t.firstChild;!n&&t&&t!==e;)n=t.nextSibling,n||(t=t.parentNode);if(!n)return null;if(this.isAcceptableNode(n))return this.currentNode=n,n;t=n}}previousNode(){let e=this.root,t=this.currentNode,n;for(;;){if(t===e)return null;if(n=t.previousSibling,n)for(;t=n.lastChild;)n=t;else n=t.parentNode;if(!n)return null;if(this.isAcceptableNode(n))return this.currentNode=n,n;t=n}}previousPONode(){let e=this.root,t=this.currentNode,n;for(;;){for(n=t.lastChild;!n&&t&&t!==e;)n=t.previousSibling,n||(t=t.parentNode);if(!n)return null;if(this.isAcceptableNode(n))return this.currentNode=n,n;t=n}}},Bu=navigator.userAgent,Vu=/Mac OS X/.test(Bu),Hu=/Windows NT/.test(Bu),Uu=/iP(?:ad|hone|od)/.test(Bu)||Vu&&!!navigator.maxTouchPoints;/Android/.test(Bu);var Wu=/Gecko\//.test(Bu),Gu=/Edge\//.test(Bu),Ku=!Gu&&/WebKit\//.test(Bu),qu=Vu||Uu?`Meta-`:`Ctrl-`,Ju=Ku,Yu=`onbeforeinput`in document&&`inputType`in new InputEvent(`input`),Xu=/[^ \t\r\n\u200B]/,Zu=/^(?:#text|A(?:BBR|CRONYM)?|B(?:R|D[IO])?|C(?:ITE|ODE)|D(?:ATA|EL|FN)|EM|FONT|HR|I(?:FRAME|MG|NPUT|NS)?|KBD|Q|R(?:P|T|UBY)|S(?:AMP|MALL|PAN|TR(?:IKE|ONG)|U[BP])?|TIME|U|VAR|WBR)$/,Qu=new Set([`BR`,`HR`,`IFRAME`,`IMG`,`INPUT`]),Y=0,X=1,$u=2,ed=3,td=new WeakMap,nd=()=>{td=new WeakMap},rd=e=>Qu.has(e.nodeName),id=e=>{switch(e.nodeType){case 3:return X;case 1:case 11:if(td.has(e))return td.get(e);break;default:return Y}let t;return t=Array.from(e.childNodes).every(Z)?Zu.test(e.nodeName)?X:$u:ed,td.set(e,t),t},Z=e=>id(e)===X,ad=e=>id(e)===$u,od=e=>id(e)===ed,Q=(e,t,n)=>{let r=document.createElement(e);if(t instanceof Array&&(n=t,t=null),t)for(let e in t){let n=t[e];n!==void 0&&r.setAttribute(e,n)}return n&&n.forEach(e=>r.appendChild(e)),r},sd=(e,t)=>rd(e)||e.nodeType!==t.nodeType||e.nodeName!==t.nodeName?!1:e instanceof HTMLElement&&t instanceof HTMLElement?e.nodeName!==`A`&&e.className===t.className&&e.style.cssText===t.style.cssText:!0,cd=(e,t,n)=>{if(e.nodeName!==t)return!1;for(let t in n)if(!(`getAttribute`in e)||e.getAttribute(t)!==n[t])return!1;return!0},ld=(e,t,n,r)=>{for(;e&&e!==t;){if(cd(e,n,r))return e;e=e.parentNode}return null},ud=(e,t)=>{let n=e.childNodes;for(;t&&e instanceof Element;)e=n[t-1],n=e.childNodes,t=n.length;return e},dd=(e,t)=>{let n=e;if(n instanceof Element){let e=n.childNodes;if(te instanceof Element||e instanceof DocumentFragment?e.childNodes.length:e instanceof CharacterData?e.length:0,pd=e=>{let t=document.createDocumentFragment(),n=e.firstChild;for(;n;)t.appendChild(n),n=e.firstChild;return t},md=e=>{let t=e.parentNode;return t&&t.removeChild(e),e},hd=(e,t)=>{let n=e.parentNode;n&&n.replaceChild(t,e)},gd=e=>e instanceof Element?e.nodeName===`BR`:Xu.test(e.data),_d=(e,t)=>{let n=e.parentNode;for(;Z(n);)n=n.parentNode;let r=new zu(n,5,gd);return r.currentNode=e,!!r.nextNode()||t&&!r.previousNode()},vd=(e,t)=>{let n=new zu(e,4),r,i;for(;r=n.nextNode();)for(;(i=r.data.indexOf(`​`))>-1&&(!t||r.parentNode!==t);)if(r.length===1){let e=r,t=e.parentNode;for(;t&&(t.removeChild(e),n.currentNode=t,!(!Z(t)||fd(t)));)e=t,t=e.parentNode;break}else r.deleteData(i,1)},yd=0,bd=1,xd=2,Sd=3,Cd=(e,t,n)=>{let r=document.createRange();if(r.selectNode(t),n){let t=e.compareBoundaryPoints(Sd,r)>-1,n=e.compareBoundaryPoints(bd,r)<1;return!t&&!n}else{let t=e.compareBoundaryPoints(yd,r)<1,n=e.compareBoundaryPoints(xd,r)>-1;return t&&n}},wd=e=>{let{startContainer:t,startOffset:n,endContainer:r,endOffset:i}=e;for(;!(t instanceof Text);){let e=t.childNodes[n];if(!e||rd(e)){if(n&&(e=t.childNodes[n-1],e instanceof Text)){let r=e,i;for(;!r.length&&(i=r.previousSibling)&&i instanceof Text;)r.remove(),r=i;t=r,n=r.data.length}break}t=e,n=0}if(i)for(;!(r instanceof Text);){let e=r.childNodes[i-1];if(!e||rd(e)){if(e&&e.nodeName===`BR`&&!_d(e,!1)){--i;continue}break}r=e,i=fd(r)}else for(;!(r instanceof Text);){let e=r.firstChild;if(!e||rd(e))break;r=e}e.setStart(t,n),e.setEnd(r,i)},Td=(e,t,n,r)=>{let i=e.startContainer,a=e.startOffset,o=e.endContainer,s=e.endOffset,c;for(t||=e.commonAncestorContainer,n||=t;!a&&i!==t&&i!==r;)c=i.parentNode,a=Array.from(c.childNodes).indexOf(i),i=c;for(;!(o===n||o===r||(o.nodeType!==3&&o.childNodes[s]&&o.childNodes[s].nodeName===`BR`&&!_d(o.childNodes[s],!1)&&(s+=1),s!==fd(o)));)c=o.parentNode,s=Array.from(c.childNodes).indexOf(o)+1,o=c;e.setStart(i,a),e.setEnd(o,s)},Ed=(e,t,n)=>{let r=ld(e.endContainer,n,t);if(r&&=r.parentNode){let t=e.cloneRange();Td(t,r,r,n),t.endContainer===r&&(e.setStart(t.endContainer,t.endOffset),e.setEnd(t.endContainer,t.endOffset))}return e},Dd=e=>{let t=null;if(e instanceof Text)return e;if(Z(e)){let n=e.firstChild;if(Ju)for(;n&&n instanceof Text&&!n.data;)e.removeChild(n),n=e.firstChild;n||(t=Ju?document.createTextNode(`​`):document.createTextNode(``))}else if((e instanceof Element||e instanceof DocumentFragment)&&!e.querySelector(`BR`)&&!Xu.test(e.textContent||``)){t=Q(`BR`);let n=e,r;for(;(r=n.lastElementChild)&&!Z(r);)n=r;e=n,e instanceof HTMLElement&&e.contentEditable===`true`&&(e=Q(`DIV`),n.appendChild(e))}if(t)try{e.appendChild(t)}catch{}return e},Od=(e,t)=>{let n=null;return/^(?:TABLE|TBODY|TR|TH|TD|P)/.test(e.nodeName)||(Array.from(e.childNodes).forEach(r=>{let i=r.nodeName===`BR`;!i&&Z(r)?(n||=Q(`DIV`),n.appendChild(r)):(i||n)&&(n||=Q(`DIV`),Dd(n),i?e.replaceChild(n,r):e.insertBefore(n,r),n=null),od(r)&&Od(r,t)}),n&&e.appendChild(Dd(n))),e},kd=(e,t,n,r)=>{if(!n.contains(e))throw Error(`split: stopNode does not contain node`);if(e instanceof Text&&e!==n){if(typeof t!=`number`)throw Error(`Offset must be a number to split text node!`);if(!e.parentNode)throw Error(`Cannot split text node with no parent!`);return kd(e.parentNode,e.splitText(t),n,r)}let i=typeof t==`number`?t{let n=e.childNodes,r=n.length,i=[];for(;r--;){let a=n[r],o=r?n[r-1]:null;if(o&&Z(a)&&sd(a,o))t.startContainer===a&&(t.startContainer=o,t.startOffset+=fd(o)),t.endContainer===a&&(t.endContainer=o,t.endOffset+=fd(o)),t.startContainer===e&&(t.startOffset>r?--t.startOffset:t.startOffset===r&&(t.startContainer=o,t.startOffset=fd(o))),t.endContainer===e&&(t.endOffset>r?--t.endOffset:t.endOffset===r&&(t.endContainer=o,t.endOffset=fd(o))),md(a),a instanceof Text?o.appendData(a.data):i.push(pd(a));else if(a instanceof Element){let e;for(;e=i.pop();)a.appendChild(e);Ad(a,t)}}},jd=(e,t)=>{let n=e instanceof Text?e.parentNode:e;if(n instanceof Element){let e={startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset};Ad(n,e),t.setStart(e.startContainer,e.startOffset),t.setEnd(e.endContainer,e.endOffset)}},Md=(e,t,n,r)=>{let i=t,a,o;for(;(a=i.parentNode)&&a!==r&&a instanceof Element&&a.childNodes.length===1;)i=a;md(i),o=e.childNodes.length;let s=e.lastChild;s&&s.nodeName===`BR`&&(e.removeChild(s),--o),e.appendChild(pd(t)),n.setStart(e,o),n.collapse(!0),jd(e,n)},Nd=(e,t)=>{let n=e.previousSibling,r=e.firstChild,i=e.nodeName===`LI`;if(!(i&&(!r||!/^[OU]L$/.test(r.nodeName)))){if(n&&sd(n,e)){if(!od(n))if(i){let e=Q(`DIV`);e.appendChild(pd(n)),n.appendChild(e)}else return;md(e);let a=!od(e);n.appendChild(pd(e)),a&&Od(n,t),r&&Nd(r,t)}else if(i){let t=Q(`DIV`);e.insertBefore(t,r),Dd(t)}}},Pd={"font-weight":{regexp:/^bold|^700/i,replace(){return Q(`B`)}},"font-style":{regexp:/^italic/i,replace(){return Q(`I`)}},"font-family":{regexp:Xu,replace(e,t){let n=Q(`SPAN`,{class:e.fontFamily});return n.style.fontFamily=t,n}},"font-size":{regexp:Xu,replace(e,t){let n=Q(`SPAN`,{class:e.fontSize});return n.style.fontSize=t,n}},"text-decoration":{regexp:/^underline/i,replace(){return Q(`U`)}}},Fd=(e,t,n)=>{let r=e.style,i,a;for(let t in Pd){let o=Pd[t],s=r.getPropertyValue(t);if(s&&o.regexp.test(s)){let r=o.replace(n.classNames,s);if(r.nodeName===e.nodeName&&r.className===e.className)continue;a||=r,i&&i.appendChild(r),i=r,e.style.removeProperty(t)}}return a&&i&&(i.appendChild(pd(e)),e.style.cssText?e.appendChild(a):hd(e,a)),i||e},Id=e=>(t,n)=>{let r=Q(e),i=t.attributes;for(let e=0,t=i.length;e{let r=e,i=r.face,a=r.size,o=r.color,s=n.classNames,c,l,u,d,f;return i&&(c=Q(`SPAN`,{class:s.fontFamily}),c.style.fontFamily=i,f=c,d=c),a&&(l=Q(`SPAN`,{class:s.fontSize}),l.style.fontSize=Ld[a]+`px`,f||=l,d&&d.appendChild(l),d=l),o&&/^#?([\dA-F]{3}){1,2}$/i.test(o)&&(o.charAt(0)!==`#`&&(o=`#`+o),u=Q(`SPAN`,{class:s.color}),u.style.color=o,f||=u,d&&d.appendChild(u),d=u),(!f||!d)&&(f=d=Q(`SPAN`)),t.replaceChild(f,r),d.appendChild(pd(r)),d},TT:(e,t,n)=>{let r=Q(`SPAN`,{class:n.classNames.fontFamily,style:`font-family:menlo,consolas,"courier new",monospace`});return t.replaceChild(r,e),r.appendChild(pd(e)),r}},zd=/^(?:A(?:DDRESS|RTICLE|SIDE|UDIO)|BLOCKQUOTE|CAPTION|D(?:[DLT]|IV)|F(?:IGURE|IGCAPTION|OOTER)|H[1-6]|HEADER|L(?:ABEL|EGEND|I)|O(?:L|UTPUT)|P(?:RE)?|SECTION|T(?:ABLE|BODY|D|FOOT|H|HEAD|R)|COL(?:GROUP)?|UL)$/,Bd=/^(?:HEAD|META|STYLE)/,Vd=(e,t,n)=>{let r=e.childNodes,i=e;for(;Z(i);)i=i.parentNode;let a=new zu(i,5);for(let i=0,o=r.length;i{let t=e.childNodes,n=t.length;for(;n--;){let r=t[n];r instanceof Element&&!rd(r)?(Hd(r),Z(r)&&!r.firstChild&&e.removeChild(r)):r instanceof Text&&!r.data&&e.removeChild(r)}},Ud=(e,t,n)=>{let r=e.querySelectorAll(`BR`),i=[],a=r.length;for(let e=0;ee.split(`&`).join(`&`).split(`<`).join(`<`).split(`>`).join(`>`).split(`"`).join(`"`),Gd=(e,t)=>{let n=new zu(t,1,ad);return n.currentNode=e,n},Kd=(e,t)=>{let n=Gd(e,t).previousNode();return n===t?null:n},qd=(e,t)=>{let n=Gd(e,t).nextNode();return n===t?null:n},Jd=e=>!e.textContent&&!e.querySelector(`IMG`),Yd=(e,t)=>{let n=e.startContainer,r;return r=Z(n)?Kd(n,t):n!==t&&n instanceof HTMLElement&&ad(n)?n:qd(ud(n,e.startOffset),t),r&&Cd(e,r,!0)?r:null},Xd=(e,t)=>{let n=e.endContainer,r;if(Z(n))r=Kd(n,t);else if(n!==t&&n instanceof HTMLElement&&ad(n))r=n;else{let i=dd(n,e.endOffset);if(!i||!t.contains(i)){i=t;let e;for(;e=i.lastChild;)i=e}r=Kd(i,t)}return r&&Cd(e,r,!0)?r:null},Zd=e=>e instanceof Text?Xu.test(e.data):e.nodeName===`IMG`,Qd=(e,t)=>{let n=e.startContainer,r=e.startOffset,i;if(n instanceof Text){let e=n.data;for(let t=r;t>0;--t)if(e.charAt(t-1)!==`​`)return!1;i=n}else if(i=dd(n,r),i&&!t.contains(i)&&(i=null),!i&&(i=ud(n,r),i instanceof Text&&i.length))return!1;let a=Yd(e,t);if(!a)return!1;let o=new zu(a,5,Zd);return o.currentNode=i,!o.previousNode()},$d=(e,t)=>{let n=e.endContainer,r=e.endOffset,i;if(n instanceof Text){let e=n.data,t=e.length;for(let n=r;n{let n=Yd(e,t),r=Xd(e,t),i;n&&r&&(i=n.parentNode,e.setStart(i,Array.from(i.childNodes).indexOf(n)),i=r.parentNode,e.setEnd(i,Array.from(i.childNodes).indexOf(r)+1))};function tf(e,t,n,r){let i=document.createRange();return i.setStart(e,t),n&&typeof r==`number`?i.setEnd(n,r):i.setEnd(e,t),i}var nf=(e,t)=>{let{startContainer:n,startOffset:r,endContainer:i,endOffset:a}=e,o;if(n instanceof Text){let t=n.parentNode;if(o=t.childNodes,r===n.length)r=Array.from(o).indexOf(n)+1,e.collapsed&&(i=t,a=r);else{if(r){let e=n.splitText(r);i===n?(a-=r,i=e):i===t&&(a+=1),n=e}r=Array.from(o).indexOf(n)}n=t}else o=n.childNodes;let s=o.length;r===s?n.appendChild(t):n.insertBefore(t,o[r]),n===i&&(a+=o.length-s),e.setStart(n,r),e.setEnd(i,a)},rf=(e,t,n)=>{let r=document.createDocumentFragment();if(e.collapsed)return r;t||=e.commonAncestorContainer,t instanceof Text&&(t=t.parentNode);let i=e.startContainer,a=e.startOffset,o=kd(e.endContainer,e.endOffset,t,n),s=0,c=kd(i,a,t,n);for(;c&&c!==o;){let e=c.nextSibling;r.appendChild(c),c=e}return c=o&&o.previousSibling,c&&c instanceof Text&&o instanceof Text&&(s=c.length,c.appendData(o.data),md(o),o=c),e.setStart(i,a),o?e.setEnd(o,s):e.setEnd(t,t.childNodes.length),Dd(t),r},af=(e,t,n)=>{e.currentNode=n;let r;for(;r=e[t]();){if(r instanceof Text||rd(r))return r;if(!Z(r))return null}return null},of=(e,t)=>{let n=Yd(e,t),r=Xd(e,t),i=n!==r;n&&r&&(wd(e),Td(e,n,r,t));let a=rf(e,null,t);wd(e),i&&(r=Xd(e,t),n&&r&&n!==r&&Md(n,r,e,t)),n&&Dd(n);let o=t.firstChild;(!o||o.nodeName===`BR`)&&(Dd(t),t.firstChild&&e.selectNodeContents(t.firstChild)),e.collapse(!0);let s=e.startContainer,c=e.startOffset,l=new zu(t,5),u=s,d=c;(!(u instanceof Text)||d===u.data.length)&&(u=af(l,`nextNode`,u),d=0);let f=s,p=c-1;(!(f instanceof Text)||p===-1)&&(f=af(l,`previousPONode`,u||(s instanceof Text?s:s.childNodes[c]||s)),f instanceof Text&&(p=f.data.length));let m=null,h=0;return u instanceof Text&&u.data.charAt(d)===` `&&Qd(e,t)?(m=u,h=d):f instanceof Text&&f.data.charAt(p)===` `&&(u instanceof Text&&u.data.charAt(d)===` `||$d(e,t))&&(m=f,h=p),m&&m.replaceData(h,1,`\xA0`),e.setStart(s,c),e.collapse(!0),a},sf=(e,t,n)=>{let r=t.firstChild&&Z(t.firstChild),i;for(Od(t,n),i=t;i=qd(i,n);)Dd(i);e.collapsed||of(e,n),wd(e),e.collapse(!1);let a=ld(e.endContainer,n,`BLOCKQUOTE`)||n,o=Yd(e,n),s=null,c=qd(t,t),l=!r&&!!o&&Jd(o);if(o&&c&&!l&&!ld(c,t,`PRE`)&&!ld(c,t,`TABLE`)){Td(e,o,o,n),e.collapse(!0);let t=e.endContainer,r=e.endOffset;if(Ud(o,n,!1),Z(t)){let e=kd(t,r,Kd(t,n)||n,n);t=e.parentNode,r=Array.from(t.childNodes).indexOf(e)}if(r!==fd(t))for(s=document.createDocumentFragment();i=t.childNodes[r];)s.appendChild(i);Md(t,c,e,n),t===n?e.setEnd(n,fd(n)):(r=Array.from(t.parentNode.childNodes).indexOf(t)+1,t=t.parentNode,e.setEnd(t,r))}if(fd(t)){l&&o&&(e.setEndBefore(o),e.collapse(!1),md(o)),a.contains(e.endContainer)||(n.contains(e.endContainer)||(e.setEnd(n,fd(n)),e.collapse(!1)),a=ld(e.endContainer,n,`BLOCKQUOTE`)||n),Td(e,a,a,n);let r=kd(e.endContainer,e.endOffset,a,n),i=r?r.previousSibling:a.lastChild;a.insertBefore(t,r),r?e.setEndBefore(r):e.setEnd(a,fd(a)),o=Xd(e,n),wd(e);let s=e.endContainer,c=e.endOffset;r&&od(r)&&Nd(r,n),r=i&&i.nextSibling,r&&od(r)&&Nd(r,n),e.setEnd(s,c)}if(s&&o){let t=e.cloneRange();Dd(s),Md(o,s,t,n),e.setEnd(t.endContainer,t.endOffset)}wd(e)},cf=e=>{if(e.collapsed)return``;let t=e.startContainer,n=e.endContainer,r=new zu(e.commonAncestorContainer,5,t=>Cd(e,t,!0));r.currentNode=t;let i=t,a=``,o=!1,s;for((!(i instanceof Element)&&!(i instanceof Text)||!r.filter(i))&&(i=r.nextNode());i;)i instanceof Text?(s=i.data,s&&/\S/.test(s)&&(i===n&&(s=s.slice(0,e.endOffset)),i===t&&(s=s.slice(e.startOffset)),a+=s,o=!0)):(i.nodeName===`BR`||o&&!Z(i))&&(a+=` -`,o=!1),i=r.nextNode();return a=a.replace(/ /g,` `),a},lf=Array.prototype.indexOf,uf=(e,t,n,r,i,a,o)=>{let s=e.clipboardData;if(Gu||!s)return!1;let c=a?``:cf(t),l=Yd(t,n),u=Xd(t,n),d=n;l===u&&l?.contains(t.commonAncestorContainer)&&(d=l);let f;f=r?of(t,n):t.cloneContents();let p=t.commonAncestorContainer;for(p instanceof Text&&(p=p.parentNode);p&&p!==d;){let e=p.cloneNode(!1);e.appendChild(f),f=e,p=p.parentNode}let m;if(f.childNodes.length===1&&f.childNodes[0]instanceof Text)c=f.childNodes[0].data.replace(/ /g,` `),o=!0;else{let e=Q(`DIV`);e.appendChild(f),m=e.innerHTML,i&&(m=i(m))}return a&&m!==void 0&&(c=a(m)),Hu&&(c=c.replace(/\r?\n/g,`\r -`)),!o&&m&&c!==m&&(m=``+m,s.setData(`text/html`,m)),s.setData(`text/plain`,c),e.preventDefault(),!0},df=function(e){let t=this.getSelection(),n=this._root;if(t.collapsed){e.preventDefault();return}this.saveUndoState(t),uf(e,t,n,!0,this._config.willCutCopy,this._config.toPlainText,!1)||setTimeout(()=>{try{this._ensureBottomLine()}catch(e){this._config.didError(e)}},0),this.setSelection(t)},ff=function(e){uf(e,this.getSelection(),this._root,!1,this._config.willCutCopy,this._config.toPlainText,!1)},pf=function(e){this._isShiftDown=e.shiftKey},mf=function(e){let t=e.clipboardData,n=t?.items,r=this._isShiftDown,i=!1,a=!1,o=null,s=null;if(n){let c=n.length;for(;c--;){let e=n[c],t=e.type;t===`text/html`?s=e:t===`text/plain`||t===`text/uri-list`?o=e:t===`text/rtf`?i=!0:/^image\/.*/.test(t)&&(a=!0)}if(a&&!(i&&s)&&!o){e.preventDefault(),this.fireEvent(`pasteImage`,{clipboardData:t});return}if(!Gu){e.preventDefault(),s&&(!r||!o)?s.getAsString(e=>{this.insertHTML(e,!0)}):o&&o.getAsString(e=>{let t=this.getSelection();if(!t.collapsed&&Xu.test(t.toString())){let t=this.linkRegExp.exec(e);if(t&&t[0].length===e.length){let e=t[1]?/^(?:ht|f)tps?:/i.test(t[1])?t[1]:`http://`+t[1]:`mailto:`+t[0];this.makeLink(e);return}}this.insertPlainText(e,!0)});return}}let c=t?.types;if(!Gu&&c&&(lf.call(c,`text/html`)>-1||!Wu&&lf.call(c,`text/plain`)>-1&&lf.call(c,`text/rtf`)<0)){e.preventDefault();let n;!r&&(n=t.getData(`text/html`))?this.insertHTML(n,!0):((n=t.getData(`text/plain`))||(n=t.getData(`text/uri-list`)))&&this.insertPlainText(n,!0);return}let l=document.body,u=this.getSelection(),d=u.startContainer,f=u.startOffset,p=u.endContainer,m=u.endOffset,h=Q(`DIV`,{contenteditable:`true`,style:`position:fixed; overflow:hidden; top:0; right:100%; width:1px; height:1px;`});l.appendChild(h),u.selectNodeContents(h),this.setSelection(u),setTimeout(()=>{try{let e=``,t=h,n;for(;h=t;)t=h.nextSibling,md(h),n=h.firstChild,n&&n===h.lastChild&&n instanceof HTMLDivElement&&(h=n),e+=h.innerHTML;this.setSelection(tf(d,f,p,m)),e&&this.insertHTML(e,!0)}catch(e){this._config.didError(e)}},0)},hf=function(e){if(!e.dataTransfer)return;let t=e.dataTransfer.types,n=t.length,r=!1,i=!1;for(;n--;)switch(t[n]){case`text/plain`:r=!0;break;case`text/html`:i=!0;break;default:return}(i||r&&this.saveUndoState)&&this.saveUndoState()},gf=(e,t,n)=>{t.preventDefault(),e.splitBlock(t.shiftKey,n)},_f=(e,t)=>{try{t||=e.getSelection();let n=t.startContainer;n instanceof Text&&(n=n.parentNode);let r=n;for(;Z(r)&&(!r.textContent||r.textContent===`​`);)n=r,r=n.parentNode;n!==r&&(t.setStart(r,Array.from(r.childNodes).indexOf(n)),t.collapse(!0),r.removeChild(n),ad(r)||(r=Kd(r,e._root)||e._root),Dd(r),wd(t)),n===e._root&&(n=n.firstChild)&&n.nodeName===`BR`&&md(n),e._ensureBottomLine(),e.setSelection(t),e._updatePath(t,!0)}catch(t){e._config.didError(t)}},vf=(e,t)=>{let n;for(;(n=e.parentNode)&&!(n===t||n.isContentEditable);)e=n;md(e)},yf=(e,t,n)=>{if(ld(t,e._root,`A`))return;let r=t.data||``,i=Math.max(r.lastIndexOf(` `,n-1),r.lastIndexOf(`\xA0`,n-1))+1,a=r.slice(i,n),o=e.linkRegExp.exec(a);if(o){let n=e.getSelection();e._docWasChanged(),e._recordUndoState(n),e._getRangeAndRemoveBookmark(n);let a=i+o.index,s=a+o[0].length,c=n.startContainer===t,l=n.startOffset-s;a&&(t=t.splitText(a));let u=e._config.tagAttributes.a,d=Q(`A`,Object.assign({href:o[1]?/^(?:ht|f)tps?:/i.test(o[1])?o[1]:`http://`+o[1]:`mailto:`+o[0]},u));d.textContent=r.slice(a,s),t.parentNode.insertBefore(d,t),t.data=r.slice(s),c&&(n.setStart(t,l),n.setEnd(t,l)),e.setSelection(n)}},bf=(e,t,n)=>{let r=e._root;if(e._removeZWS(),e.saveUndoState(n),!n.collapsed)t.preventDefault(),of(n,r),_f(e,n);else if(Qd(n,r)){t.preventDefault();let i=Yd(n,r);if(!i)return;let a=i;Od(a.parentNode,r);let o=Kd(a,r);if(o){if(!o.isContentEditable){vf(o,r);return}for(Md(o,a,n,r),a=o.parentNode;a!==r&&!a.nextSibling;)a=a.parentNode;a!==r&&(a=a.nextSibling)&&Nd(a,r),e.setSelection(n)}else if(a){if(ld(a,r,`UL`)||ld(a,r,`OL`)){e.decreaseListLevel(n);return}else if(ld(a,r,`BLOCKQUOTE`)){e.removeQuote(n);return}e.setSelection(n),e._updatePath(n,!0)}}else{wd(n);let r=n.startContainer,i=n.startOffset,a=r.parentNode;r instanceof Text&&a instanceof HTMLAnchorElement&&i&&a.href.includes(r.data)?(r.deleteData(i-1,1),e.setSelection(n),e.removeLink(),t.preventDefault()):(e.setSelection(n),setTimeout(()=>{_f(e)},0))}},xf=(e,t,n)=>{let r=e._root,i,a,o,s,c,l;if(e._removeZWS(),e.saveUndoState(n),!n.collapsed)t.preventDefault(),of(n,r),_f(e,n);else if($d(n,r)){if(t.preventDefault(),i=Yd(n,r),!i)return;if(Od(i.parentNode,r),a=qd(i,r),a){if(!a.isContentEditable){vf(a,r);return}for(Md(i,a,n,r),a=i.parentNode;a!==r&&!a.nextSibling;)a=a.parentNode;a!==r&&(a=a.nextSibling)&&Nd(a,r),e.setSelection(n),e._updatePath(n,!0)}}else{if(o=n.cloneRange(),Td(n,r,r,r),s=n.endContainer,c=n.endOffset,s instanceof Element&&(l=s.childNodes[c],l&&l.nodeName===`IMG`)){t.preventDefault(),md(l),wd(n),_f(e,n);return}e.setSelection(o),setTimeout(()=>{_f(e)},0)}},Sf=(e,t,n)=>{let r=e._root;if(e._removeZWS(),n.collapsed&&Qd(n,r)){let i=Yd(n,r),a;for(;a=i.parentNode;){if(a.nodeName===`UL`||a.nodeName===`OL`){t.preventDefault(),e.increaseListLevel(n);break}i=a}}},Cf=(e,t,n)=>{let r=e._root;if(e._removeZWS(),n.collapsed&&Qd(n,r)){let i=n.startContainer;(ld(i,r,`UL`)||ld(i,r,`OL`))&&(t.preventDefault(),e.decreaseListLevel(n))}},wf=(e,t,n)=>{let r,i=e._root;if(e._recordUndoState(n),e._getRangeAndRemoveBookmark(n),!n.collapsed)of(n,i),e._ensureBottomLine(),e.setSelection(n),e._updatePath(n,!0);else if($d(n,i)){let r=Yd(n,i);if(r&&r.nodeName!==`PRE`){let i=r.textContent?.trimEnd().replace(`​`,``);if(i===`*`||i===`1.`){t.preventDefault(),e.insertPlainText(` `,!1),e._docWasChanged(),e.saveUndoState(n);let a=new zu(r,4),o;for(;o=a.nextNode();)md(o);i===`*`?e.makeUnorderedList():e.makeOrderedList();return}}}if(r=n.endContainer,n.endOffset===fd(r))do if(r.nodeName===`A`){n.setStartAfter(r);break}while(!r.nextSibling&&(r=r.parentNode)&&r!==i);if(e._config.addLinks){let t=n.cloneRange();wd(t);let r=t.startContainer,i=t.startOffset;setTimeout(()=>{yf(e,r,i)},0)}e.setSelection(n)},Tf=function(e){if(e.defaultPrevented||e.isComposing)return;let t=e.key,n=``,r=e.code;/^Digit\d$/.test(r)&&(t=r.slice(-1)),t!==`Backspace`&&t!==`Delete`&&(e.altKey&&(n+=`Alt-`),e.ctrlKey&&(n+=`Ctrl-`),e.metaKey&&(n+=`Meta-`),e.shiftKey&&(n+=`Shift-`)),Hu&&e.shiftKey&&t===`Delete`&&(n+=`Shift-`),t=n+t;let i=this.getSelection(),a=this._keyHandlers[t];a?a(this,e,i):!i.collapsed&&!e.ctrlKey&&!e.metaKey&&t.length===1&&(this.saveUndoState(i),of(i,this._root),this._ensureBottomLine(),this.setSelection(i),this._updatePath(i,!0))},Ef={Backspace:bf,Delete:xf,Tab:Sf,"Shift-Tab":Cf," ":wf,ArrowLeft(e){e._removeZWS()},ArrowRight(e,t,n){e._removeZWS();let r=e.getRoot();if($d(n,r)){wd(n);let i=n.endContainer;do if(i.nodeName===`CODE`){let r=i.nextSibling;if(!(r instanceof Text)||r.length===0){let e=document.createTextNode(`\xA0`);i.parentNode.insertBefore(e,r),r=e}n.setStart(r,1),e.setSelection(n),t.preventDefault();break}while(!i.nextSibling&&(i=i.parentNode)&&i!==r)}}};Yu||(Ef.Enter=gf,Ef[`Shift-Enter`]=gf),!Vu&&!Uu&&(Ef.PageUp=e=>{e.moveCursorToStart()},Ef.PageDown=e=>{e.moveCursorToEnd()});var Df=(e,t)=>(t||=null,(n,r)=>{r.preventDefault();let i=n.getSelection();n.hasFormat(e,null,i)?n.changeFormat(null,{tag:e},i):n.changeFormat({tag:e},t,i)});Ef[qu+`b`]=Df(`B`),Ef[qu+`i`]=Df(`I`),Ef[qu+`u`]=Df(`U`),Ef[qu+`Shift-7`]=Df(`S`),Ef[qu+`Shift-5`]=Df(`SUB`,{tag:`SUP`}),Ef[qu+`Shift-6`]=Df(`SUP`,{tag:`SUB`}),Ef[qu+`Shift-8`]=(e,t)=>{t.preventDefault();let n=e.getPath();/(?:^|>)UL/.test(n)?e.removeList():e.makeUnorderedList()},Ef[qu+`Shift-9`]=(e,t)=>{t.preventDefault();let n=e.getPath();/(?:^|>)OL/.test(n)?e.removeList():e.makeOrderedList()},Ef[qu+`[`]=(e,t)=>{t.preventDefault();let n=e.getPath();/(?:^|>)BLOCKQUOTE/.test(n)||!/(?:^|>)[OU]L/.test(n)?e.decreaseQuoteLevel():e.decreaseListLevel()},Ef[qu+`]`]=(e,t)=>{t.preventDefault();let n=e.getPath();/(?:^|>)BLOCKQUOTE/.test(n)||!/(?:^|>)[OU]L/.test(n)?e.increaseQuoteLevel():e.increaseListLevel()},Ef[qu+`d`]=(e,t)=>{t.preventDefault(),e.toggleCode()},Ef[qu+`z`]=(e,t)=>{t.preventDefault(),e.undo()},Ef[qu+`y`]=Ef[qu+`Shift-z`]=Ef[qu+`Shift-Z`]=(e,t)=>{t.preventDefault(),e.redo()};var Of=8,kf=40,Af=1200,jf=[{pos:`nw`,cursor:`nwse-resize`},{pos:`n`,cursor:`ns-resize`},{pos:`ne`,cursor:`nesw-resize`},{pos:`e`,cursor:`ew-resize`},{pos:`se`,cursor:`nwse-resize`},{pos:`s`,cursor:`ns-resize`},{pos:`sw`,cursor:`nesw-resize`},{pos:`w`,cursor:`ew-resize`}],Mf={ArrowUp:(e,t,n)=>{let r=Yd(t,n);if(r){let i=Kd(r,n);i&&(t.selectNodeContents(i),t.collapse(!1),e.setSelection(t).focus())}},ArrowDown:(e,t,n)=>{let r=Yd(t,n);if(r){let i=qd(r,n);i&&(t.selectNodeContents(i),t.collapse(!0),e.setSelection(t).focus())}},Delete:(e,t)=>{e.replaceWithBlankLine(t)},Backspace:(e,t)=>{e.replaceWithBlankLine(t)}},Nf=class{constructor(e,t){this._currentImage=null,this._resizeContainer=null,this._handles=null,this._currentHandle=null,this._startX=0,this._startY=0,this._startWidth=0,this._startHeight=0,this._maxWidth=Af,this._originalRatio=1,this._editor=t,this._root=e,document.addEventListener(`click`,this),t.addEventListener(`drop`,this)}destroy(){this._deselectImage(),this._editor.removeEventListener(`drop`,this),document.removeEventListener(`click`,this)}handleEvent(e){switch(e.type){case`click`:this._onClick(e);break;case`pointerdown`:this._onPointerDown(e);break;case`pointermove`:this._onPointerMove(e);break;case`pointercancel`:case`pointerup`:this._onPointerUp(e);break;case`keydown`:this._onKeyDown(e);break;case`drop`:this._deselectImage();break}}_onClick(e){let t=e.target;t.nodeName===`IMG`&&this._root.contains(t)?(e.stopPropagation(),this._selectImage(t)):this._currentImage&&this._handles&&!this._handles.some(e=>e.element===t)&&this._deselectImage()}_deselectImage(){this._currentImage&&=(document.removeEventListener(`keydown`,this,!0),this._currentHandle&&this._onPointerUp({preventDefault(){},target:this._currentHandle.element}),this._handles&&this._handles.forEach(({element:e})=>e.removeEventListener(`pointerdown`,this)),this._resizeContainer&&this._resizeContainer.remove(),this._currentImage.removeAttribute(`tabindex`),this._handles=null,this._resizeContainer=null,null)}_selectImage(e){if(this._currentImage===e)return;this._deselectImage(),this._root.blur();let t=jf.map(({pos:e,cursor:t})=>{let n=Of/2,r=``;switch(e){case`nw`:r=`left: -${n}px; top: -${n}px;`;break;case`n`:r=`left: calc(50% - ${n}px); top: -${n}px;`;break;case`ne`:r=`right: -${n}px; top: -${n}px;`;break;case`e`:r=`right: -${n}px; top: calc(50% - ${n}px);`;break;case`se`:r=`right: -${n}px; bottom: -${n}px;`;break;case`s`:r=`left: calc(50% - ${n}px); bottom: -${n}px;`;break;case`sw`:r=`left: -${n}px; bottom: -${n}px;`;break;case`w`:r=`left: -${n}px; top: calc(50% - ${n}px);`;break}let i=Q(`div`,{class:`squire-resize-handle squire-resize-handle-${e}`,style:` - position: absolute; - width: ${Of}px; - height: ${Of}px; - background: #0067b9; - border: 1px solid #fff; - cursor: ${t}; - pointer-events: auto; - touch-action: none; - box-shadow: 0 1px 3px rgba(0,0,0,0.3); - ${r} - `});return i.addEventListener(`pointerdown`,this),{element:i,cursor:t,position:e}}),n=Q(`div`,{class:`squire-image-resize-container`,style:`position: absolute; pointer-events: none; z-index: 1000;`},t.map(e=>e.element));this._currentImage=e,this._resizeContainer=n,this._handles=t,this._root.appendChild(this._resizeContainer);let r=e.naturalWidth;this._originalRatio=r/e.naturalHeight,this._maxWidth=Math.min(r*2,e.parentElement?e.parentElement.offsetWidth:Af,Af),this._positionResizeContainer(),e.tabIndex=-1,e.focus(),document.addEventListener(`keydown`,this,!0)}_positionResizeContainer(){let e=this._resizeContainer,t=this._root,n=this._currentImage;if(!e||!n)return;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=i.top-r.top+t.scrollTop,o=i.left-r.left+t.scrollLeft,s=i.width,c=i.height;e.style.top=a+`px`,e.style.left=o+`px`,e.style.width=s+`px`,e.style.height=c+`px`}_onPointerDown(e){if(this._currentHandle||!this._handles)return;let t=e.target,n=this._handles.find(e=>e.element===t)||null;if(!n)return;let r=this._currentImage;if(!r)return;e.preventDefault(),e.stopPropagation(),t.addEventListener(`pointermove`,this),t.addEventListener(`pointerup`,this),t.addEventListener(`pointercancel`,this),t.setPointerCapture(e.pointerId),this._currentHandle=n,this._startX=e.clientX,this._startY=e.clientY;let i=getComputedStyle(r);this._startWidth=parseFloat(i.width),this._startHeight=parseFloat(i.height),document.body.style.cursor=n.cursor}_onPointerMove(e){e.preventDefault();let t=this._currentHandle,n=this._currentImage;if(!t||!n)return;let r=e.clientX-this._startX,i=e.clientY-this._startY,a=this._maxWidth,o=this._originalRatio,s=this._startWidth,c=this._startHeight;switch(t.position){case`sw`:case`nw`:case`w`:s-=2*r;break;case`se`:case`ne`:case`e`:s+=2*r;break;case`n`:c-=i,s=c*o;break;case`s`:c+=i,s=c*o;break}sa&&(s=a);let l=n.style;l.width=s+`px`,l.height=`auto`,this._positionResizeContainer()}_onPointerUp(e){e.preventDefault();let t=e.target;t&&(t.removeEventListener(`pointermove`,this),t.removeEventListener(`pointerup`,this),t.removeEventListener(`pointercancel`,this)),this._currentHandle=null,document.body.style.cursor=``}_onKeyDown(e){e.preventDefault(),e.stopPropagation();let t=Mf[e.key];if(!t)return;let n=this._currentImage;if(!n)return;let r=this._editor,i=this._root;this._deselectImage();let a=r.getSelection();a.selectNode(n),t(r,a,i)}},Pf=class{constructor(e,t){this.customEvents=new Set([`pathChange`,`select`,`input`,`pasteImage`,`undoStateChange`]),this.startSelectionId=`squire-selection-start`,this.endSelectionId=`squire-selection-end`,this.linkRegExp=/\b(?:((?:(?:ht|f)tps?:\/\/|www\d{0,3}[.]|[a-z0-9][a-z0-9.\-]*[.][a-z]{2,}\/)(?:[^\s()<>]+|\([^\s()<>]+\))+(?:[^\s?&`!()\[\]{};:'".,<>«»“”‘’]|\([^\s()<>]+\)))|([\w\-.%+]+@(?:[\w\-]+\.)+[a-z]{2,}\b(?:[?][^&?\s]+=[^\s?&`!()\[\]{};:'".,<>«»“”‘’]+(?:&[^&?\s]+=[^\s?&`!()\[\]{};:'".,<>«»“”‘’]+)*)?))/i,this.tagAfterSplit={DT:`DD`,DD:`DT`,LI:`LI`,PRE:`PRE`},this._root=e,this._config=this._makeConfig(t),this._isFocused=!1,this._lastSelection=tf(e,0),this._willRestoreSelection=!1,this._mayHaveZWS=!1,this._lastAnchorNode=null,this._lastFocusNode=null,this._path=``,this._events=new Map,this._undoIndex=-1,this._undoStack=[],this._undoStackLength=0,this._isInUndoState=!1,this._ignoreChange=!1,this._ignoreAllChanges=!1,this.addEventListener(`selectionchange`,this._updatePathOnEvent),this.addEventListener(`blur`,this._enableRestoreSelection),this.addEventListener(`mousedown`,this._disableRestoreSelection),this.addEventListener(`touchstart`,this._disableRestoreSelection),this.addEventListener(`focus`,this._restoreSelection),this.addEventListener(`blur`,this._removeZWS),this._isShiftDown=!1,this.addEventListener(`cut`,df),this.addEventListener(`copy`,ff),this.addEventListener(`paste`,mf),this.addEventListener(`drop`,hf),this.addEventListener(`keydown`,pf),this.addEventListener(`keyup`,pf),this.addEventListener(`keydown`,Tf),this._keyHandlers=Object.create(Ef);let n=new MutationObserver(()=>this._docWasChanged());n.observe(e,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),this._mutation=n,e.setAttribute(`contenteditable`,`true`),this.addEventListener(`beforeinput`,this._beforeInput),this._imageResizer=new Nf(e,this),this.setHTML(``)}destroy(){this._events.forEach((e,t)=>{this.removeEventListener(t)}),this._mutation.disconnect(),this._imageResizer.destroy(),this._undoIndex=-1,this._undoStack=[],this._undoStackLength=0}_makeConfig(e){let t={blockTag:`DIV`,blockAttributes:null,tagAttributes:{},classNames:{color:`color`,fontFamily:`font`,fontSize:`size`,highlight:`highlight`},undo:{documentSizeThreshold:-1,undoLimit:-1},addLinks:!0,willCutCopy:null,toPlainText:null,sanitizeToDOMFragment:e=>{let t=DOMPurify.sanitize(e,{ALLOW_UNKNOWN_PROTOCOLS:!0,WHOLE_DOCUMENT:!1,RETURN_DOM:!0,RETURN_DOM_FRAGMENT:!0,FORCE_BODY:!1});return t?document.importNode(t,!0):document.createDocumentFragment()},didError:e=>console.log(e)};return e&&(Object.assign(t,e),t.blockTag=t.blockTag.toUpperCase()),t}setKeyHandler(e,t){return this._keyHandlers[e]=t,this}_beforeInput(e){switch(e.inputType){case`insertLineBreak`:e.preventDefault(),this.splitBlock(!0);break;case`insertParagraph`:e.preventDefault(),this.splitBlock(!1);break;case`insertOrderedList`:e.preventDefault(),this.makeOrderedList();break;case`insertUnoderedList`:e.preventDefault(),this.makeUnorderedList();break;case`historyUndo`:e.preventDefault(),this.undo();break;case`historyRedo`:e.preventDefault(),this.redo();break;case`formatBold`:e.preventDefault(),this.bold();break;case`formatItalic`:e.preventDefault(),this.italic();break;case`formatUnderline`:e.preventDefault(),this.underline();break;case`formatStrikeThrough`:e.preventDefault(),this.strikethrough();break;case`formatSuperscript`:e.preventDefault(),this.superscript();break;case`formatSubscript`:e.preventDefault(),this.subscript();break;case`formatJustifyFull`:case`formatJustifyCenter`:case`formatJustifyRight`:case`formatJustifyLeft`:{e.preventDefault();let t=e.inputType.slice(13).toLowerCase();t===`full`&&(t=`justify`),this.setTextAlignment(t);break}case`formatRemove`:e.preventDefault(),this.removeAllFormatting();break;case`formatSetBlockTextDirection`:{e.preventDefault();let t=e.data;t===`null`&&(t=null),this.setTextDirection(t);break}case`formatBackColor`:e.preventDefault(),this.setHighlightColor(e.data);break;case`formatFontColor`:e.preventDefault(),this.setTextColor(e.data);break;case`formatFontName`:e.preventDefault(),this.setFontFace(e.data);break}}handleEvent(e){this.fireEvent(e.type,e)}fireEvent(e,t){let n=this._events.get(e);if(/^(?:focus|blur)/.test(e)){let t=this._root===document.activeElement;if(e===`focus`){if(!t||this._isFocused)return this;this._isFocused=!0}else{if(t||!this._isFocused)return this;this._isFocused=!1}}if(n){let r=t instanceof Event?t:new CustomEvent(e,{detail:t});n=n.slice();for(let e of n)try{`handleEvent`in e?e.handleEvent(r):e.call(this,r)}catch(e){this._config.didError(e)}}return this}addEventListener(e,t){let n=this._events.get(e),r=this._root;return n||(n=[],this._events.set(e,n),this.customEvents.has(e)||(e===`selectionchange`&&(r=document),r.addEventListener(e,this,!0))),n.push(t),this}removeEventListener(e,t){let n=this._events.get(e),r=this._root;if(n){if(t){let e=n.length;for(;e--;)n[e]===t&&n.splice(e,1)}else n.length=0;n.length||(this._events.delete(e),this.customEvents.has(e)||(e===`selectionchange`&&(r=document),r.removeEventListener(e,this,!0)))}return this}focus(){return this._root.focus({preventScroll:!0}),this}blur(){return this._root.blur(),this}_enableRestoreSelection(){this._willRestoreSelection=!0}_disableRestoreSelection(){this._willRestoreSelection=!1}_restoreSelection(){this._willRestoreSelection&&this.setSelection(this._lastSelection)}_removeZWS(){this._mayHaveZWS&&=(vd(this._root),!1)}_saveRangeToBookmark(e){let t=Q(`INPUT`,{id:this.startSelectionId,type:`hidden`}),n=Q(`INPUT`,{id:this.endSelectionId,type:`hidden`}),r;nf(e,t),e.collapse(!1),nf(e,n),t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING&&(t.id=this.endSelectionId,n.id=this.startSelectionId,r=t,t=n,n=r),e.setStartAfter(t),e.setEndBefore(n)}_getRangeAndRemoveBookmark(e){let t=this._root,n=t.querySelectorAll(`#`+this.startSelectionId),r=t.querySelectorAll(`#`+this.endSelectionId),i=n[0],a=r[0];if(i&&a&&i.compareDocumentPosition(a)&Node.DOCUMENT_POSITION_FOLLOWING){let t=i.parentNode,n=a.parentNode,r=Array.from(t.childNodes).indexOf(i),o=Array.from(n.childNodes).indexOf(a);t===n&&--o,i.remove(),a.remove(),e||=document.createRange(),e.setStart(t,r),e.setEnd(n,o),jd(t,e),t!==n&&jd(n,e),e.collapsed&&(t=e.startContainer,t instanceof Text&&(n=t.childNodes[e.startOffset],(!n||!(n instanceof Text))&&(n=t.childNodes[e.startOffset-1]),n&&n instanceof Text&&(e.setStart(n,0),e.collapse(!0))))}for(let e=0;e`:``)+e.nodeName,t&&(r+=`#`+t),a.length&&(r+=`.`,r+=a.join(`.`)),o&&(r+=`[dir=`+o+`]`),i.contains(s.highlight)&&(r+=`[backgroundColor=`+e.style.backgroundColor.replace(/ /g,``)+`]`),i.contains(s.color)&&(r+=`[color=`+e.style.color.replace(/ /g,``)+`]`),i.contains(s.fontFamily)&&(r+=`[fontFamily=`+e.style.fontFamily.replace(/ /g,``)+`]`),i.contains(s.fontSize)&&(r+=`[fontSize=`+e.style.fontSize+`]`)}}return r}modifyDocument(e){let t=this._mutation;return t&&(t.takeRecords().length&&this._docWasChanged(),t.disconnect()),this._ignoreAllChanges=!0,e(),this._ignoreAllChanges=!1,t&&(t.observe(this._root,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),this._ignoreChange=!1),this}_docWasChanged(){if(nd(),this._mayHaveZWS=!0,!this._ignoreAllChanges){if(this._ignoreChange){this._ignoreChange=!1;return}this._isInUndoState&&(this._isInUndoState=!1,this.fireEvent(`undoStateChange`,{canUndo:!0,canRedo:!1})),this.fireEvent(`input`)}}_recordUndoState(e,t){let n=this._isInUndoState;if(!n||t){let r=this._undoIndex+1,i=this._undoStack,a=this._config.undo,o=a.documentSizeThreshold,s=a.undoLimit;if(r-1&&c.length*2>o&&s>-1&&r>s&&(i.splice(0,r-s),r=s,this._undoStackLength=s),i[r]=c,this._undoIndex=r,this._undoStackLength+=1,this._isInUndoState=!0}return this}saveUndoState(e){let t=!1;return e||(e=this.getSelection(),t=!0),this._recordUndoState(e,this._isInUndoState),this._getRangeAndRemoveBookmark(e),t&&this.setSelection(e),this}undo(){if(this._undoIndex!==0||!this._isInUndoState){this._recordUndoState(this.getSelection(),!1),--this._undoIndex,this._setRawHTML(this._undoStack[this._undoIndex]);let e=this._getRangeAndRemoveBookmark();e&&this.setSelection(e),this._isInUndoState=!0,this.fireEvent(`undoStateChange`,{canUndo:this._undoIndex!==0,canRedo:!0}),this.fireEvent(`input`)}return this.focus()}redo(){let e=this._undoIndex,t=this._undoStackLength;if(e+1{e&&(t=this.getSelection(),this._saveRangeToBookmark(t));let r=this._root.querySelector(`.squire-image-resize-container`);r&&r.remove(),n=this._getRawHTML().replace(/\u200B/g,``),r&&this._root.appendChild(r),e&&this._getRangeAndRemoveBookmark(t)}),n}setHTML(e){let t=this._config.sanitizeToDOMFragment(e,this),n=this._root;Vd(t,this._config),Ud(t,n,!1),Od(t,n);let r=t,i=r.firstChild;if(!i||i.nodeName===`BR`){let e=this.createDefaultBlock();i?r.replaceChild(e,i):r.appendChild(e)}else for(;r=qd(r,n);)Dd(r);for(this._ignoreChange=!0;i=n.lastChild;)n.removeChild(i);n.appendChild(t),this._undoIndex=-1,this._undoStack.length=0,this._undoStackLength=0,this._isInUndoState=!1;let a=this._getRangeAndRemoveBookmark()||tf(n.firstElementChild||n,0);return this.saveUndoState(a),this.setSelection(a),this._updatePath(a,!0),this}insertHTML(e,t){let n=this._config,r=n.sanitizeToDOMFragment(e,this),i=this.getSelection();this.saveUndoState(i);try{let a=this._root;n.addLinks&&this.addDetectedLinks(r,r),Vd(r,this._config),Ud(r,a,!1),Hd(r),r.normalize();let o=r;for(;o=qd(o,r);)Dd(o);let s=!0;if(t){let t=new CustomEvent(`willPaste`,{cancelable:!0,detail:{html:e,fragment:r}});this.fireEvent(`willPaste`,t),r=t.detail.fragment,s=!t.defaultPrevented}s&&(sf(i,r,a),i.collapse(!1),Ed(i,`A`,a),this._ensureBottomLine()),this.setSelection(i),this._updatePath(i,!0),t&&this.focus()}catch(e){this._config.didError(e)}return this}insertElement(e,t){if(t||=this.getSelection(),t.collapse(!0),Z(e))nf(t,e),t.setStartAfter(e);else{let n=this._root,r=Yd(t,n),i=r||n,a=null;for(;i!==n&&!i.nextSibling;)i=i.parentNode;if(i!==n){let e=i.parentNode;a=kd(e,i.nextSibling,n,n)}r&&Jd(r)&&md(r),n.insertBefore(e,a);let o=this.createDefaultBlock();n.insertBefore(o,a),t.setStart(o,0),t.setEnd(o,0),wd(t)}return this.focus(),this.setSelection(t),this._updatePath(t),this}insertImage(e,t){let n=Q(`IMG`,Object.assign({src:e},t));return this.insertElement(n),n}insertPlainText(e,t){let n=this.getSelection();if(n.collapsed&&ld(n.startContainer,this._root,`PRE`)){let r=n.startContainer,i=n.startOffset,a;if(!r||!(r instanceof Text)){let e=document.createTextNode(``);r.insertBefore(e,r.childNodes[i]),a=e,i=0}else a=r;let o=!0;if(t){let t=new CustomEvent(`willPaste`,{cancelable:!0,detail:{text:e}});this.fireEvent(`willPaste`,t),e=t.detail.text,o=!t.defaultPrevented}return o&&(a.insertData(i,e),n.setStart(a,i+e.length),n.collapse(!0)),this.setSelection(n),this}let r=e.split(` -`),i=this._config,a=i.blockTag,o=i.blockAttributes,s=``,c=`<`+a;for(let e in o)c+=` `+e+`="`+Wd(o[e])+`"`;c+=`>`;for(let e=0,t=r.length;e`)+s),r[e]=t}return this.insertHTML(r.join(``),t)}getSelectedText(e){return cf(e||this.getSelection())}getFontInfo(e){let t={color:void 0,backgroundColor:void 0,fontFamily:void 0,fontSize:void 0};e||=this.getSelection(),wd(e);let n=0,r=e.commonAncestorContainer;if(e.collapsed||r instanceof Text)for(r instanceof Text&&(r=r.parentNode);n<4&&r;){let e=r.style;if(e){let r=e.color;!t.color&&r&&(t.color=r,n+=1);let i=e.backgroundColor;!t.backgroundColor&&i&&(t.backgroundColor=i,n+=1);let a=e.fontFamily;!t.fontFamily&&a&&(t.fontFamily=a,n+=1);let o=e.fontSize;!t.fontSize&&o&&(t.fontSize=o,n+=1)}r=r.parentNode}return t}hasFormat(e,t,n){e=e.toUpperCase(),t||={},n||=this.getSelection(),!n.collapsed&&n.startContainer instanceof Text&&n.startOffset===n.startContainer.length&&n.startContainer.nextSibling&&n.setStartBefore(n.startContainer.nextSibling),!n.collapsed&&n.endContainer instanceof Text&&n.endOffset===0&&n.endContainer.previousSibling&&n.setEndAfter(n.endContainer.previousSibling);let r=this._root,i=n.commonAncestorContainer;if(ld(i,r,e,t))return!0;if(i instanceof Text)return!1;let a=new zu(i,4,e=>Cd(n,e,!0)),o=!1,s;for(;s=a.nextNode();){if(!ld(s,r,e,t))return!1;o=!0}return o}changeFormat(e,t,n,r){return n||=this.getSelection(),this.saveUndoState(n),t&&(n=this._removeFormat(t.tag.toUpperCase(),t.attributes||{},n,r)),e&&(n=this._addFormat(e.tag.toUpperCase(),e.attributes||{},n)),this.setSelection(n),this._updatePath(n,!0),this.focus()}_addFormat(e,t,n){let r=this._root;if(n.collapsed){let r=Dd(Q(e,t));nf(n,r);let i=r.firstChild||r,a=i instanceof Text?i.length:0;n.setStart(i,a),n.collapse(!0);let o=r;for(;Z(o);)o=o.parentNode;vd(o,r)}else{let i=new zu(n.commonAncestorContainer,5,e=>(e instanceof Text||e.nodeName===`BR`||e.nodeName===`IMG`)&&Cd(n,e,!0)),{startContainer:a,startOffset:o,endContainer:s,endOffset:c}=n;if(i.currentNode=a,!(a instanceof Element)&&!(a instanceof Text)||!i.filter(a)){let e=i.nextNode();if(!e)return n;a=e,o=0}do{let n=i.currentNode;if(!ld(n,r,e,t)){n===s&&n.length>c&&n.splitText(c),n===a&&o&&(n=n.splitText(o),s===a?(s=n,c-=o):s===a.parentNode&&(c+=1),a=n,o=0);let r=Q(e,t);hd(n,r),r.appendChild(n)}}while(i.nextNode());n=tf(a,o,s,c)}return n}_removeFormat(e,t,n,r){this._saveRangeToBookmark(n);let i;n.collapsed&&(i=Ju?document.createTextNode(`​`):document.createTextNode(``),nf(n,i));let a=n.commonAncestorContainer;for(;Z(a);)a=a.parentNode;let o=n.startContainer,s=n.startOffset,c=n.endContainer,l=n.endOffset,u=[],d=(e,t)=>{if(Cd(n,e,!1))return;let r,i;if(!Cd(n,e,!0)){!(e instanceof HTMLInputElement)&&(!(e instanceof Text)||e.data)&&u.push([t,e]);return}if(e instanceof Text)e===c&&l!==e.length&&u.push([t,e.splitText(l)]),e===o&&s&&(e.splitText(s),u.push([t,e]));else for(r=e.firstChild;r;r=i)i=r.nextSibling,d(r,t)},f=Array.from(a.getElementsByTagName(e)).filter(r=>Cd(n,r,!0)&&cd(r,e,t));if(r||f.forEach(e=>{d(e,e)}),u.forEach(([e,t])=>{e=e.cloneNode(!1),hd(t,e),e.appendChild(t)}),f.forEach(e=>{hd(e,pd(e))}),Ju&&i){i=i.parentNode;let e=i;for(;e&&Z(e);)e=e.parentNode;e&&vd(e,i)}return this._getRangeAndRemoveBookmark(n),i&&n.collapse(!1),jd(a,n),n}bold(){return this.changeFormat({tag:`B`})}removeBold(){return this.changeFormat(null,{tag:`B`})}italic(){return this.changeFormat({tag:`I`})}removeItalic(){return this.changeFormat(null,{tag:`I`})}underline(){return this.changeFormat({tag:`U`})}removeUnderline(){return this.changeFormat(null,{tag:`U`})}strikethrough(){return this.changeFormat({tag:`S`})}removeStrikethrough(){return this.changeFormat(null,{tag:`S`})}subscript(){return this.changeFormat({tag:`SUB`},{tag:`SUP`})}removeSubscript(){return this.changeFormat(null,{tag:`SUB`})}superscript(){return this.changeFormat({tag:`SUP`},{tag:`SUB`})}removeSuperscript(){return this.changeFormat(null,{tag:`SUP`})}makeLink(e,t){let n=this.getSelection();if(n.collapsed){let t=e.indexOf(`:`)+1;if(t)for(;e[t]===`/`;)t+=1;nf(n,document.createTextNode(e.slice(t)))}return t=Object.assign({href:e},this._config.tagAttributes.a,t),this.changeFormat({tag:`A`,attributes:t},{tag:`A`},n)}removeLink(){return this.changeFormat(null,{tag:`A`},this.getSelection(),!0)}addDetectedLinks(e,t){let n=new zu(e,4,e=>!ld(e,t||this._root,`A`)),r=this.linkRegExp,i=this._config.tagAttributes.a,a;for(;a=n.nextNode();){let e=a.parentNode,t=a.data,n;for(;n=r.exec(t);){let r=n.index,o=r+n[0].length;r&&e.insertBefore(document.createTextNode(t.slice(0,r)),a);let s=Q(`A`,Object.assign({href:n[1]?/^(?:ht|f)tps?:/i.test(n[1])?n[1]:`http://`+n[1]:`mailto:`+n[0]},i));s.textContent=t.slice(r,o),e.insertBefore(s,a),a.data=t=t.slice(o)}}return this}setFontFace(e){let t=this._config.classNames.fontFamily;return this.changeFormat(e?{tag:`SPAN`,attributes:{class:t,style:`font-family: `+e+`, sans-serif;`}}:null,{tag:`SPAN`,attributes:{class:t}})}setFontSize(e){let t=this._config.classNames.fontSize;return this.changeFormat(e?{tag:`SPAN`,attributes:{class:t,style:`font-size: `+(typeof e==`number`?e+`px`:e)}}:null,{tag:`SPAN`,attributes:{class:t}})}setTextColor(e){let t=this._config.classNames.color;return this.changeFormat(e?{tag:`SPAN`,attributes:{class:t,style:`color:`+e}}:null,{tag:`SPAN`,attributes:{class:t}})}setHighlightColor(e){let t=this._config.classNames.highlight;return this.changeFormat(e?{tag:`SPAN`,attributes:{class:t,style:`background-color:`+e}}:null,{tag:`SPAN`,attributes:{class:t}})}_ensureBottomLine(){let e=this._root,t=e.lastElementChild;(!t||t.nodeName!==this._config.blockTag||!ad(t))&&e.appendChild(this.createDefaultBlock())}createDefaultBlock(e){let t=this._config;return Dd(Q(t.blockTag,t.blockAttributes,e))}splitBlock(e,t){t||=this.getSelection();let n=this._root,r,i,a,o;if(this._recordUndoState(t),this._removeZWS(),this._getRangeAndRemoveBookmark(t),t.collapsed||of(t,n),this._config.addLinks){wd(t);let e=t.startContainer,n=t.startOffset;setTimeout(()=>{yf(this,e,n)},0)}if(r=Yd(t,n),r&&(i=ld(r,n,`PRE`))){wd(t),a=t.startContainer;let r=t.startOffset;return a instanceof Text||(a=document.createTextNode(``),i.insertBefore(a,i.firstChild),r=0),!e&&a instanceof Text&&(a.data.charAt(r-1)===` -`||Qd(t,n))&&(a.data.charAt(r)===` -`||$d(t,n))?(a.deleteData(r&&r-1,r?2:1),o=kd(a,r&&r-1,n,n),a=o.previousSibling,a.textContent||md(a),a=this.createDefaultBlock(),o.parentNode.insertBefore(a,o),o.textContent||md(o),t.setStart(a,0)):(a.insertData(r,` -`),a.nextSibling||i.appendChild(Q(`BR`)),a.length===r+1?t.setStartAfter(a):t.setStart(a,r+1)),t.collapse(!0),this.setSelection(t),this._updatePath(t,!0),this._docWasChanged(),this}if(!r||e||/^T[HD]$/.test(r.nodeName))return Ed(t,`A`,n),nf(t,Q(`BR`)),t.collapse(!1),this.setSelection(t),this._updatePath(t,!0),this;if((i=ld(r,n,`LI`))&&(r=i),Jd(r)){if(ld(r,n,`UL`)||ld(r,n,`OL`))return this.decreaseListLevel(t),this;if(ld(r,n,`BLOCKQUOTE`))return this.replaceWithBlankLine(t),this}a=t.startContainer;let s=t.startOffset,c=this.tagAfterSplit[r.nodeName];o=kd(a,s,r.parentNode,this._root);let l=this._config,u=null;for(c||(c=l.blockTag,u=l.blockAttributes),cd(o,c,u)||(r=Q(c,u),o.dir&&(r.dir=o.dir),hd(o,r),r.appendChild(pd(o)),o=r),vd(r),Hd(r),Dd(r);o instanceof Element;){let e=o.firstChild,t;if(o.nodeName===`A`&&(!o.textContent||o.textContent===`​`)){e=document.createTextNode(``),hd(o,e),o=e;break}for(;e&&e instanceof Text&&!e.data&&(t=e.nextSibling,!(!t||t.nodeName===`BR`));)md(e),e=t;if(!e||e.nodeName===`BR`||e instanceof Text)break;o=e}return t=tf(o,0),this.setSelection(t),this._updatePath(t,!0),this}forEachBlock(e,t,n){n||=this.getSelection(),t&&this.saveUndoState(n);let r=this._root,i=Yd(n,r),a=Xd(n,r);if(i&&a)do if(e(i)||i===a)break;while(i=qd(i,r));return t&&(this.setSelection(n),this._updatePath(n,!0)),this}modifyBlocks(e,t){t||=this.getSelection(),this._recordUndoState(t,this._isInUndoState);let n=this._root;ef(t,n),Td(t,n,n,n);let r=rf(t,n,n);if(!t.collapsed){let e=t.endContainer;if(e===n)t.collapse(!1);else{for(;e.parentNode!==n;)e=e.parentNode;t.setStartBefore(e),t.collapse(!0)}}return nf(t,e.call(this,r)),t.endOffset{let n=t.className.split(/\s+/).filter(e=>!!e&&!/^align/.test(e)).join(` `);e?(t.className=n+` align-`+e,t.style.textAlign=e):(t.className=n,t.style.textAlign=``)},!0),this.focus()}setTextDirection(e){return this.forEachBlock(t=>{e?t.dir=e:t.removeAttribute(`dir`)},!0),this.focus()}_getListSelection(e,t){let n=e.commonAncestorContainer,r=e.startContainer,i=e.endContainer;for(;n&&n!==t&&!/^[OU]L$/.test(n.nodeName);)n=n.parentNode;if(!n||n===t)return null;for(r===n&&(r=r.childNodes[e.startOffset]),i===n&&(i=i.childNodes[e.endOffset]);r&&r.parentNode!==n;)r=r.parentNode;for(;i&&i.parentNode!==n;)i=i.parentNode;return[n,r,i]}increaseListLevel(e){e||=this.getSelection();let t=this._root,n=this._getListSelection(e,t);if(!n)return this.focus();let[r,i,a]=n;if(!i||i===r.firstChild)return this.focus();this._recordUndoState(e,this._isInUndoState);let o=r.nodeName,s=i.previousSibling,c,l;s.nodeName!==o&&(c=this._config.tagAttributes[o.toLowerCase()],s=Q(o,c),r.insertBefore(s,i));do l=i===a?null:i.nextSibling,s.appendChild(i);while(i=l);return l=s.nextSibling,l&&Nd(l,t),this._getRangeAndRemoveBookmark(e),this.setSelection(e),this._updatePath(e,!0),this.focus()}decreaseListLevel(e){e||=this.getSelection();let t=this._root,n=this._getListSelection(e,t);if(!n)return this.focus();let[r,i,a]=n;i||=r.firstChild,a||=r.lastChild,this._recordUndoState(e,this._isInUndoState);let o,s=null;if(i){let e=r.parentNode;if(s=a.nextSibling?kd(r,a.nextSibling,e,t):r.nextSibling,e!==t&&e.nodeName===`LI`){for(e=e.parentNode;s;)o=s.nextSibling,a.appendChild(s),s=o;s=r.parentNode.nextSibling}let n=!/^[OU]L$/.test(e.nodeName);do o=i===a?null:i.nextSibling,r.removeChild(i),n&&i.nodeName===`LI`&&(i=this.createDefaultBlock([pd(i)])),e.insertBefore(i,s);while(i=o)}return r.firstChild||md(r),s&&Nd(s,t),this._getRangeAndRemoveBookmark(e),this.setSelection(e),this._updatePath(e,!0),this.focus()}_makeList(e,t){let n=Gd(e,this._root),r=this._config.tagAttributes,i=r[t.toLowerCase()],a=r.li,o;for(;o=n.nextNode();)if(o.parentNode instanceof HTMLLIElement&&(o=o.parentNode,n.currentNode=o.lastChild),o instanceof HTMLLIElement){o=o.parentNode;let e=o.nodeName;e!==t&&/^[OU]L$/.test(e)&&hd(o,Q(t,i,[pd(o)]))}else{let e=Q(`LI`,a);o.dir&&(e.dir=o.dir);let r=o.previousSibling;r&&r.nodeName===t?(r.appendChild(e),md(o)):hd(o,Q(t,i,[e])),e.appendChild(pd(o)),n.currentNode=e}return e}makeUnorderedList(){return this.modifyBlocks(e=>this._makeList(e,`UL`)),this.focus()}makeOrderedList(){return this.modifyBlocks(e=>this._makeList(e,`OL`)),this.focus()}removeList(){return this.modifyBlocks(e=>{let t=e.querySelectorAll(`UL, OL`),n=e.querySelectorAll(`LI`),r=this._root;for(let e=0,n=t.length;eQ(`BLOCKQUOTE`,this._config.tagAttributes.blockquote,[e]),e),this.focus()}decreaseQuoteLevel(e){return this.modifyBlocks(e=>(Array.from(e.querySelectorAll(`blockquote`)).filter(t=>!ld(t.parentNode,e,`BLOCKQUOTE`)).forEach(e=>{hd(e,pd(e))}),e),e),this.focus()}removeQuote(e){return this.modifyBlocks(e=>(Array.from(e.querySelectorAll(`blockquote`)).forEach(e=>{hd(e,pd(e))}),e),e),this.focus()}replaceWithBlankLine(e){return this.modifyBlocks(()=>this.createDefaultBlock([Q(`INPUT`,{id:this.startSelectionId,type:`hidden`}),Q(`INPUT`,{id:this.endSelectionId,type:`hidden`})]),e),this.focus()}code(){let e=this.getSelection();return e.collapsed||od(e.commonAncestorContainer)?(this.modifyBlocks(e=>{let t=this._root,n=document.createDocumentFragment(),r=Gd(e,t),i;for(;i=r.nextNode();){let e=i.querySelectorAll(`BR`),t=[],r=e.length;for(let n=0;n{let t=this._root,n=e.querySelectorAll(`PRE`),r=n.length;for(;r--;){let e=n[r],i=new zu(e,4),a;for(;a=i.nextNode();){let e=a.data;e=e.replace(/ (?= )/g,`\xA0`);let t=document.createDocumentFragment(),n;for(;(n=e.indexOf(` -`))>-1;)t.appendChild(document.createTextNode(e.slice(0,n))),t.appendChild(Q(`BR`)),e=e.slice(n+1);a.parentNode.insertBefore(t,a),a.data=e}Od(e,t),hd(e,pd(e))}return e},e),this.focus()):this.changeFormat(null,{tag:`CODE`},e),this}toggleCode(){return this.hasFormat(`PRE`)||this.hasFormat(`CODE`)?this.removeCode():this.code(),this}_removeFormatting(e,t){for(let n=e.firstChild,r;n;n=r){if(r=n.nextSibling,Z(n)){if(n instanceof Text||n.nodeName===`BR`||n.nodeName===`IMG`){t.appendChild(n);continue}}else if(ad(n)){t.appendChild(this.createDefaultBlock([this._removeFormatting(n,document.createDocumentFragment())]));continue}this._removeFormatting(n,t)}return t}removeAllFormatting(e){if(e||=this.getSelection(),e.collapsed)return this.focus();let t=this._root,n=e.commonAncestorContainer;for(;n&&!ad(n);)n=n.parentNode;if(n||=(ef(e,t),t),n instanceof Text)return this.focus();this.saveUndoState(e),Td(e,n,n,t);let r=e.startContainer,i=e.startOffset,a=e.endContainer,o=e.endOffset,s=document.createDocumentFragment(),c=document.createDocumentFragment(),l=kd(a,o,n,t),u=kd(r,i,n,t),d;for(;u!==l;)d=u.nextSibling,s.appendChild(u),u=d;if(this._removeFormatting(s,c),c.normalize(),u=c.firstChild,d=c.lastChild,u){n.insertBefore(c,l);let e=Array.from(n.childNodes);i=e.indexOf(u),o=d?e.indexOf(d)+1:0}else l&&(i=Array.from(n.childNodes).indexOf(l),o=i);return e.setStart(n,i),e.setEnd(n,o),jd(n,e),wd(e),this.setSelection(e),this._updatePath(e,!0),this.focus()}},Ff={ADD_DATA_URI_TAGS:[`img`],ALLOW_UNKNOWN_PROTOCOLS:!0,FORCE_BODY:!1,RETURN_DOM:!0,RETURN_DOM_FRAGMENT:!0,WHOLE_DOCUMENT:!1};function If(e){let t=ns.sanitize(e,Ff);return t?document.importNode(t,!0):document.createDocumentFragment()}var Lf=new Set(`ADDRESS.ARTICLE.ASIDE.BLOCKQUOTE.DD.DIV.DL.DT.FIGCAPTION.FIGURE.FOOTER.H1.H2.H3.H4.H5.H6.HEADER.LI.OL.P.PRE.SECTION.TABLE.TBODY.TD.TFOOT.TH.THEAD.TR.UL`.split(`.`));function Rf(e){let t=``,n=()=>{t&&!t.endsWith(` -`)&&(t+=` -`)},r=e=>{if(e.nodeType===Node.TEXT_NODE){t+=e.nodeValue??``;return}if(e.nodeType!==Node.ELEMENT_NODE&&e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE)return;if(e.nodeName===`BR`){t+=` -`;return}let i=e.nodeType===Node.ELEMENT_NODE&&Lf.has(e.nodeName);i&&n(),e.childNodes.forEach(r),i&&n()};return e.childNodes.forEach(r),t.replace(/\n+$/u,``)}var zf=`14px`,Bf=`#e5e7eb`,$=`#fef3c7`,Vf=[`style`,`font`,`insert`,`lists`,`alignment`],Hf=new Set(`ADDRESS.ARTICLE.ASIDE.BLOCKQUOTE.DD.DIV.DL.DT.FIGURE.FIGCAPTION.FOOTER.H1.H2.H3.H4.H5.H6.HEADER.LI.OL.P.PRE.SECTION.TABLE.TBODY.TD.TFOOT.TH.THEAD.TR.UL`.split(`.`)),Uf=[{label:`Sans`,value:`Arial, sans-serif`},{label:`Serif`,value:`Georgia, serif`},{label:`Mono`,value:`"Courier New", monospace`},{label:`Verdana`,value:`Verdana, sans-serif`},{label:`Times`,value:`"Times New Roman", serif`}],Wf=[{label:`Small`,value:`12px`},{label:`Normal`,value:zf},{label:`Large`,value:`18px`},{label:`Huge`,value:`24px`}],Gf=[{label:`Default`,value:``},...Uf],Kf=[{label:`Align left`,value:`left`,icon:Fe},{label:`Align center`,value:`center`,icon:Ne},{label:`Align right`,value:`right`,icon:Me},{label:`Align justify`,value:`justify`,icon:Pe}],qf=`button, summary, input, select`,Jf={bold:!1,italic:!1,underline:!1,strikethrough:!1,subscript:!1,superscript:!1,code:!1,link:!1,unorderedList:!1,orderedList:!1,quote:!1,canUndo:!1,canRedo:!1,fontFamily:``,fontSize:zf,textColor:Bf,highlightColor:$,alignment:`left`,direction:`ltr`};function Yf(e,t){if(/^#[0-9a-f]{6}$/i.test(e||``))return e;let n=(e||``).match(/^rgb\(\s*(\d+),\s*(\d+),\s*(\d+)\s*\)$/i);return n?`#${n.slice(1).map(e=>Number(e).toString(16).padStart(2,`0`)).join(``)}`:t}function Xf(e){let t=(e||``).split(`,`)[0].replace(/["']/g,``).trim().toLowerCase();return Uf.find(e=>e.value.split(`,`)[0].replace(/["']/g,``).trim().toLowerCase()===t)?.value||``}function Zf(e){if(!e)return null;let t=e=>{let t=e instanceof Element?e:e.parentElement;return t&&getComputedStyle(t).fontSize||zf},n=e.commonAncestorContainer;if(e.collapsed||n instanceof Text)return t(e.startContainer);let r=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT),i=null,a;for(;a=r.nextNode();){if(!(a instanceof Text)&&a.nodeName!==`BR`&&a.nodeName!==`IMG`||!e.intersectsNode(a)||a instanceof Text&&(!a.length||a===e.startContainer&&e.startOffset===a.length||a===e.endContainer&&e.endOffset===0))continue;let n=t(a);if(i!==null&&i!==n)return null;i=n}return i}function Qf(e,t){return RegExp(`(?:^|>)${t}(?:$|[.#\\[])`).test(e)||RegExp(`(?:^|>)${t}(?:>|$)`).test(e)}function $f(e){if(!e)return 0;let t=window.getComputedStyle(e);return(e.getBoundingClientRect().width||(e instanceof HTMLElement?e.offsetWidth:0))+Number.parseFloat(t.marginLeft||`0`)+Number.parseFloat(t.marginRight||`0`)}var ep=(0,C.forwardRef)(function({contentKey:e,initialHtml:t,accessibleLabel:n=`Rich text editor`,onUpdate:r},i){let a=(0,C.useRef)(null),o=(0,C.useRef)(null),s=(0,C.useRef)(null),c=(0,C.useRef)(null),l=(0,C.useRef)(null),u=(0,C.useRef)(new Map),d=(0,C.useRef)(null),f=(0,C.useRef)(r);f.current=r;let[p,m]=(0,C.useState)(Jf),h=(0,C.useRef)(p);h.current=p;let[g,_]=(0,C.useState)([...Vf]),[v,y]=(0,C.useState)({open:!1,hasLink:!1,url:``,error:null}),b=Dr(),x=Or(),S=(0,C.useCallback)(()=>{let e=c.current,t=a.current;return!e||!t?{html:``,text:``}:{html:e.getHTML(),text:Rf(t).replace(/​/gu,``).replace(/\n+$/u,``)}},[]),w=(0,C.useCallback)(()=>{try{l.current=c.current?.getSelection().cloneRange()??null}catch{l.current=null}},[]),T=(0,C.useCallback)(()=>{let e=c.current;if(!(!e||!l.current))try{e.setSelection(l.current)}catch{l.current=null}},[]),E=(0,C.useCallback)((e=null)=>{let t=c.current;if(!t)return;let n=null;try{n=t.getSelection()}catch{n=null}let r=e??t.getPath(),i=e=>r&&r!==`(selection)`?Qf(r,e):!!n&&!!t.hasFormat(e,null,n),a=n?t.getFontInfo(n):{},o=null,s=null,l=!1;n&&t.forEachBlock(e=>{let t=getComputedStyle(e),n=t.direction===`rtl`?`rtl`:`ltr`,r=t.textAlign.replace(/^-(?:moz|webkit)-/,``),i=r;return!r||r===`start`||r===`auto`?i=n===`rtl`?`right`:`left`:r===`end`&&(i=n===`rtl`?`left`:`right`),o=!l||o===i?i:null,s=!l||s===n?n:null,l=!0,o===null&&s===null},!1,n);let u=h.current;m({...u,bold:i(`B`),italic:i(`I`),underline:i(`U`),strikethrough:i(`S`),subscript:i(`SUB`),superscript:i(`SUP`),code:i(`CODE`)||i(`PRE`),link:i(`A`),unorderedList:i(`UL`),orderedList:i(`OL`),quote:/(?:^|>)BLOCKQUOTE/.test(r),fontFamily:Xf(a.fontFamily),fontSize:Zf(n),textColor:Yf(a.color,u.textColor||Bf),highlightColor:Yf(a.backgroundColor,u.highlightColor||$),alignment:o,direction:s})},[]),D=(0,C.useCallback)(()=>{f.current(S())},[S]),ee=(0,C.useCallback)(()=>{let e=c.current;if(!e)return;let t=e.getRoot(),n=null;Array.from(t.childNodes).forEach(e=>{if(!(!(e.nodeType===Node.ELEMENT_NODE&&Hf.has(e.nodeName))&&(e.nodeType===Node.TEXT_NODE?e.data.length>0:e.nodeType===Node.ELEMENT_NODE))){n=null;return}n||(n=document.createElement(`div`),t.insertBefore(n,e)),n.appendChild(e)})},[]),k=(0,C.useCallback)((e,{restore:t=!0}={})=>{let n=c.current;n&&(t&&(n.focus(),T()),ee(),e(n),D(),w(),E(),t&&n.focus())},[ee,w,T,D,E]),A=(0,C.useCallback)((e,t,n=null,r=e.getSelection())=>{ee(),e.hasFormat(t,null,r)?e.changeFormat(null,{tag:t},r):e.changeFormat({tag:t},n,r)},[ee]),ne=(e,t=null)=>{k(n=>A(n,e,t,n.getSelection()))},re=e=>{k(t=>{t.hasFormat(e)?t.removeList():e===`UL`?t.makeUnorderedList():t.makeOrderedList()})},ie=e=>{k(t=>e>0?t.increaseQuoteLevel():t.decreaseQuoteLevel())},ae=(0,C.useCallback)(e=>{let t=c.current;if(!t)return;w(),e&&Wr(e);let n=(l.current??t.getSelection()).startContainer,r=(n.nodeType===Node.ELEMENT_NODE?n:n.parentElement)?.closest(`a`),i=t.getSelectedText().trim();y({open:!0,hasLink:r!==null,url:r?.getAttribute(`href`)??(/^https?:\/\//i.test(i)||/^mailto:/i.test(i)?i:``),error:null}),requestAnimationFrame(()=>{s.current?.focus(),s.current?.select()})},[w]);(0,C.useLayoutEffect)(()=>{let e=a.current;if(!e)return;let n=new Pf(e,{sanitizeToDOMFragment:If});c.current=n,n.setHTML(t||`


`);let r=()=>{D(),w(),E()},i=e=>{w(),E(e.detail?.path??null)},o=()=>{w(),E()};n.addEventListener(`input`,r),n.addEventListener(`pathChange`,i),n.addEventListener(`select`,o),n.addEventListener(`cursor`,o),n.addEventListener(`undoStateChange`,e=>{let t=e.detail;m(e=>({...e,canUndo:!!t?.canUndo,canRedo:!!t?.canRedo}))});let s=(e,t)=>{n.setKeyHandler(e,(e,n,r)=>{n.preventDefault(),t(e,r),ee(),D(),l.current=r.cloneRange(),E()})};return[`Ctrl-b`,`Ctrl-B`,`Meta-b`,`Meta-B`].forEach(e=>s(e,(e,t)=>A(e,`B`,null,t))),[`Ctrl-i`,`Ctrl-I`,`Meta-i`,`Meta-I`].forEach(e=>s(e,(e,t)=>A(e,`I`,null,t))),[`Ctrl-u`,`Ctrl-U`,`Meta-u`,`Meta-U`].forEach(e=>s(e,(e,t)=>A(e,`U`,null,t))),[`Ctrl-z`,`Meta-z`].forEach(e=>s(e,e=>e.undo())),[`Ctrl-y`,`Meta-y`,`Ctrl-Shift-z`,`Ctrl-Shift-Z`,`Meta-Shift-z`,`Meta-Shift-Z`].forEach(e=>s(e,e=>e.redo())),[`Ctrl-k`,`Meta-k`].forEach(e=>{n.setKeyHandler(e,(e,t,n)=>{t.preventDefault(),l.current=n.cloneRange(),ae()})}),D(),E(),()=>{n.destroy(),c.current=null,l.current=null}},[e]),(0,C.useImperativeHandle)(i,()=>({focus:()=>c.current?.focus(),getContent:S}),[S]);let oe=(0,C.useCallback)(()=>{let e=o.current;if(!e)return;e.querySelectorAll(`[data-toolbar-group]`).forEach(e=>{let t=e.dataset.toolbarGroup,n=$f(e);t&&n>0&&u.current.set(t,n)});let t=e.clientWidth||e.getBoundingClientRect().width;if(!t)return;let n=$f(e.querySelector(`.toolbar-more`))||70,r=[...Vf],i=()=>n+r.length*4+r.reduce((e,t)=>e+(u.current.get(t)??0),0);for(;r.length>1&&i()>t;)r.pop();_(e=>e.join(`|`)===r.join(`|`)?e:r)},[]);(0,C.useLayoutEffect)(()=>{oe();let e=o.current;if(!e)return;let t=new ResizeObserver(()=>oe());return t.observe(e),window.addEventListener(`resize`,oe),()=>{t.disconnect(),window.removeEventListener(`resize`,oe)}},[oe]);let se=(0,C.useCallback)(()=>{let e=o.current;return e?[...e.querySelectorAll(qf)].filter(e=>!e.closest(`.app-dropdown__menu`)):[]},[]),j=(0,C.useCallback)(()=>{let e=se();(!d.current||!e.includes(d.current))&&(d.current=e[0]??null),e.forEach(e=>{let t=e===d.current?0:-1;e.tabIndex!==t&&(e.tabIndex=t)})},[se]);(0,C.useLayoutEffect)(()=>{j()});function ce(e){let t=e.target;!(t instanceof HTMLElement)||!se().includes(t)||(d.current=t,j())}function de(e){let t=se(),n=t.indexOf(e.target);if(n===-1)return;let r;switch(e.key){case`ArrowRight`:r=(n+1)%t.length;break;case`ArrowLeft`:r=(n-1+t.length)%t.length;break;case`Home`:r=0;break;case`End`:r=t.length-1;break;default:return}e.preventDefault(),t[r].focus()}(0,C.useEffect)(()=>{y({open:!1,hasLink:!1,url:``,error:null})},[e]);function he(e){e.preventDefault();let t=v.url.trim(),n=!1;try{let e=new URL(t).protocol.toLowerCase();n=e===`http:`||e===`https:`||e===`mailto:`}catch{n=!1}if(!n){y(e=>({...e,error:`Enter an HTTP, HTTPS, or mailto URL.`})),s.current?.focus();return}k(e=>e.makeLink(t)),y(e=>({...e,open:!1,error:null}))}function ge(){y(e=>({...e,open:!1,error:null})),c.current?.focus(),T()}let _e=e=>g.includes(e),N=e=>e.preventDefault(),P=Uf.find(e=>e.value===p.fontFamily)?.label??`Font`,ve=Wf.find(e=>e.value===p.fontSize)?.label??`Size`,ye=e=>e?(0,B.jsx)(te,{size:15,"aria-hidden":`true`}):(0,B.jsx)(`span`,{"aria-hidden":`true`});return(0,B.jsxs)(`div`,{className:`rich-text-editor`,children:[(0,B.jsxs)(`div`,{ref:o,className:`compose-toolbar`,role:`toolbar`,"aria-label":`Rich text formatting`,onPointerDownCapture:w,onFocus:ce,onKeyDown:de,children:[_e(`style`)?(0,B.jsxs)(`div`,{className:`toolbar-group`,"data-toolbar-group":`style`,children:[(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.bold?` active`:``}`,"aria-label":`Bold`,"aria-keyshortcuts":`${x}+B`,title:`Bold (${b}+B)`,onMouseDown:N,onClick:()=>ne(`B`),children:(0,B.jsx)(O,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.italic?` active`:``}`,"aria-label":`Italic`,"aria-keyshortcuts":`${x}+I`,title:`Italic (${b}+I)`,onMouseDown:N,onClick:()=>ne(`I`),children:(0,B.jsx)(ue,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.underline?` active`:``}`,"aria-label":`Underline`,"aria-keyshortcuts":`${x}+U`,title:`Underline (${b}+U)`,onMouseDown:N,onClick:()=>ne(`U`),children:(0,B.jsx)(Le,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.strikethrough?` active`:``}`,"aria-label":`Strikethrough`,title:`Strikethrough`,onMouseDown:N,onClick:()=>ne(`S`),children:(0,B.jsx)(ke,{size:15})})]}):null,_e(`font`)?(0,B.jsxs)(`div`,{className:`toolbar-group`,"data-toolbar-group":`font`,children:[(0,B.jsxs)(Gr,{className:`toolbar-dropdown`,children:[(0,B.jsx)(`summary`,{className:`app-dropdown__summary toolbar-button toolbar-more__summary`,"aria-label":`Font family`,title:`Font family`,onMouseDown:N,children:P}),(0,B.jsx)(`div`,{className:`app-dropdown__menu toolbar-more__menu`,role:`menu`,"aria-label":`Font family`,children:Gf.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.fontFamily===e.value,onMouseDown:N,onClick:t=>{Wr(t),k(t=>t.setFontFace(e.value||null))},children:[ye(p.fontFamily===e.value),(0,B.jsx)(`span`,{style:e.value?{fontFamily:e.value}:void 0,children:e.label})]},e.value))})]}),(0,B.jsxs)(Gr,{className:`toolbar-dropdown`,children:[(0,B.jsx)(`summary`,{className:`app-dropdown__summary toolbar-button toolbar-more__summary`,"aria-label":`Font size`,title:`Font size`,onMouseDown:N,children:ve}),(0,B.jsx)(`div`,{className:`app-dropdown__menu toolbar-more__menu`,role:`menu`,"aria-label":`Font size`,children:Wf.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.fontSize===e.value,onMouseDown:N,onClick:t=>{Wr(t),k(t=>t.setFontSize(e.value||null))},children:[ye(p.fontSize===e.value),(0,B.jsx)(`span`,{children:e.label})]},e.value))})]}),(0,B.jsxs)(`label`,{className:`toolbar-color`,title:`Text color`,children:[(0,B.jsx)(`span`,{children:`A`}),(0,B.jsx)(`input`,{type:`color`,value:p.textColor,"aria-label":`Text color`,onMouseDown:w,onChange:e=>k(t=>t.setTextColor(e.target.value||null))})]}),(0,B.jsxs)(`label`,{className:`toolbar-color`,title:`Highlight color`,children:[(0,B.jsx)(M,{size:15}),(0,B.jsx)(`input`,{type:`color`,value:p.highlightColor,"aria-label":`Highlight color`,onMouseDown:w,onChange:e=>k(t=>t.setHighlightColor(e.target.value||null))})]})]}):null,_e(`insert`)?(0,B.jsxs)(`div`,{className:`toolbar-group`,"data-toolbar-group":`insert`,children:[(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button`,"aria-label":`Insert image`,title:`Insert image`,onMouseDown:N,children:(0,B.jsx)(le,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.link?` active`:``}`,"aria-label":`Insert or remove link`,"aria-keyshortcuts":`${x}+K`,title:`Insert or remove link (${b}+K)`,onMouseDown:N,onClick:()=>ae(),children:(0,B.jsx)(fe,{size:15})})]}):null,_e(`lists`)?(0,B.jsxs)(`div`,{className:`toolbar-group`,"data-toolbar-group":`lists`,children:[(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.unorderedList?` active`:``}`,"aria-label":`Bulleted list`,title:`Bulleted list`,onMouseDown:N,onClick:()=>re(`UL`),children:(0,B.jsx)(me,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.orderedList?` active`:``}`,"aria-label":`Numbered list`,title:`Numbered list`,onMouseDown:N,onClick:()=>re(`OL`),children:(0,B.jsx)(pe,{size:15})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button${p.quote?` active`:``}`,"aria-label":`Quote`,title:`Quote`,onMouseDown:N,onClick:()=>ie(1),children:(0,B.jsx)(be,{size:15,className:`icon-mirrored`})}),(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button`,"aria-label":`Unquote`,title:`Unquote`,onMouseDown:N,onClick:()=>ie(-1),children:(0,B.jsx)(be,{size:15})})]}):null,_e(`alignment`)?(0,B.jsx)(`div`,{className:`toolbar-group`,"data-toolbar-group":`alignment`,children:Kf.map(e=>{let t=e.icon;return(0,B.jsx)(`button`,{type:`button`,className:`toolbar-button`,"aria-label":e.label,title:e.label,onMouseDown:N,onClick:()=>k(t=>t.setTextAlignment(e.value)),children:(0,B.jsx)(t,{size:15})},e.value)})}):null,(0,B.jsxs)(Gr,{className:`toolbar-more`,children:[(0,B.jsx)(`summary`,{className:`app-dropdown__summary toolbar-button toolbar-more__summary`,onMouseDown:N,children:`More`}),(0,B.jsxs)(`div`,{className:`app-dropdown__menu toolbar-more__menu`,role:`menu`,"aria-label":`More formatting options`,children:[_e(`font`)?null:(0,B.jsxs)(`div`,{className:`toolbar-menu-section`,role:`group`,"aria-label":`Font formatting`,children:[(0,B.jsx)(`span`,{className:`app-dropdown__heading toolbar-menu-heading`,"aria-hidden":`true`,children:`Font`}),Gf.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.fontFamily===e.value,"aria-label":`Font: ${e.label}`,onMouseDown:N,onClick:()=>k(t=>t.setFontFace(e.value||null)),children:[ye(p.fontFamily===e.value),(0,B.jsx)(`span`,{style:e.value?{fontFamily:e.value}:void 0,children:e.label})]},`font-${e.value}`)),(0,B.jsx)(`span`,{className:`app-dropdown__heading toolbar-menu-heading`,"aria-hidden":`true`,children:`Size`}),Wf.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.fontSize===e.value,"aria-label":`Size: ${e.label}`,onMouseDown:N,onClick:()=>k(t=>t.setFontSize(e.value||null)),children:[ye(p.fontSize===e.value),(0,B.jsx)(`span`,{children:e.label})]},`size-${e.value}`)),(0,B.jsxs)(`label`,{className:`toolbar-menu-field`,children:[(0,B.jsx)(`span`,{children:`Text color`}),(0,B.jsx)(`input`,{type:`color`,value:p.textColor,"aria-label":`Text color`,onMouseDown:w,onChange:e=>k(t=>t.setTextColor(e.target.value||null))})]}),(0,B.jsxs)(`label`,{className:`toolbar-menu-field`,children:[(0,B.jsx)(`span`,{children:`Highlight`}),(0,B.jsx)(`input`,{type:`color`,value:p.highlightColor,"aria-label":`Highlight color`,onMouseDown:w,onChange:e=>k(t=>t.setHighlightColor(e.target.value||null))})]})]}),_e(`insert`)?null:(0,B.jsxs)(`div`,{className:`toolbar-menu-section`,role:`group`,"aria-label":`Insert`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitem`,onMouseDown:N,children:[(0,B.jsx)(le,{size:15}),(0,B.jsx)(`span`,{children:`Insert image`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitem`,"aria-label":`Insert or remove link`,onMouseDown:N,onClick:e=>ae(e),children:[(0,B.jsx)(fe,{size:15}),(0,B.jsx)(`span`,{children:`Link`})]})]}),_e(`lists`)?null:(0,B.jsxs)(`div`,{className:`toolbar-menu-section`,role:`group`,"aria-label":`Lists and quoting`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemcheckbox`,"aria-checked":p.unorderedList,onMouseDown:N,onClick:()=>re(`UL`),children:[ye(p.unorderedList),(0,B.jsx)(`span`,{children:`Bulleted list`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemcheckbox`,"aria-checked":p.orderedList,onMouseDown:N,onClick:()=>re(`OL`),children:[ye(p.orderedList),(0,B.jsx)(`span`,{children:`Numbered list`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitem`,onMouseDown:N,onClick:()=>ie(1),children:[(0,B.jsx)(be,{size:15,className:`icon-mirrored`}),(0,B.jsx)(`span`,{children:`Quote`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitem`,onMouseDown:N,onClick:()=>ie(-1),children:[(0,B.jsx)(be,{size:15}),(0,B.jsx)(`span`,{children:`Unquote`})]})]}),_e(`alignment`)?null:(0,B.jsx)(`div`,{className:`toolbar-menu-section`,role:`group`,"aria-label":`Alignment`,children:Kf.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.alignment===e.value,onMouseDown:N,onClick:()=>k(t=>t.setTextAlignment(e.value)),children:[ye(p.alignment===e.value),(0,B.jsx)(`span`,{children:e.label})]},e.value))}),(0,B.jsxs)(`div`,{className:`toolbar-menu-section`,role:`group`,"aria-label":`More formatting`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.direction===`ltr`,onMouseDown:N,onClick:()=>k(e=>e.setTextDirection(`ltr`)),children:[ye(p.direction===`ltr`),(0,B.jsx)(`span`,{children:`Left-to-right`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemradio`,"aria-checked":p.direction===`rtl`,onMouseDown:N,onClick:()=>k(e=>e.setTextDirection(`rtl`)),children:[ye(p.direction===`rtl`),(0,B.jsx)(`span`,{children:`Right-to-left`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemcheckbox`,"aria-checked":p.subscript,onMouseDown:N,onClick:()=>ne(`SUB`,{tag:`SUP`}),children:[ye(p.subscript),(0,B.jsx)(`span`,{children:`Subscript`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemcheckbox`,"aria-checked":p.superscript,onMouseDown:N,onClick:()=>ne(`SUP`,{tag:`SUB`}),children:[ye(p.superscript),(0,B.jsx)(`span`,{children:`Superscript`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitemcheckbox`,"aria-checked":p.code,onMouseDown:N,onClick:()=>k(e=>e.toggleCode()),children:[ye(p.code),(0,B.jsx)(`span`,{children:`Code`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,role:`menuitem`,onMouseDown:N,onClick:()=>k(e=>e.removeAllFormatting()),children:[(0,B.jsx)(F,{size:15}),(0,B.jsx)(`span`,{children:`Clear formatting`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,disabled:!p.canUndo,role:`menuitem`,"aria-label":`Undo`,onMouseDown:N,onClick:()=>k(e=>e.undo()),children:[(0,B.jsx)(Re,{size:15}),(0,B.jsx)(`span`,{children:`Undo`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item toolbar-menu-button`,disabled:!p.canRedo,role:`menuitem`,"aria-label":`Redo`,onMouseDown:N,onClick:()=>k(e=>e.redo()),children:[(0,B.jsx)(xe,{size:15}),(0,B.jsx)(`span`,{children:`Redo`})]})]})]})]})]}),v.open?(0,B.jsxs)(`form`,{className:`editor-link-form`,onSubmit:he,onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),ge())},children:[(0,B.jsxs)(`label`,{className:`editor-link-form__field`,children:[(0,B.jsx)(`span`,{children:`Link URL`}),(0,B.jsx)(`input`,{ref:s,value:v.url,onChange:e=>y(t=>({...t,url:e.target.value})),type:`url`,inputMode:`url`,autoComplete:`url`,placeholder:`https://example.com`,"aria-invalid":v.error?`true`:void 0})]}),v.error?(0,B.jsx)(`p`,{className:`editor-link-form__error`,role:`alert`,children:v.error}):null,(0,B.jsxs)(`div`,{className:`editor-link-form__actions`,children:[(0,B.jsx)(Br,{variant:`outline`,onClick:ge,children:`Cancel`}),v.hasLink?(0,B.jsx)(Br,{variant:`outline`,onClick:()=>{k(e=>e.removeLink()),y(e=>({...e,open:!1}))},children:`Remove link`}):null,(0,B.jsx)(Br,{formAction:`submit`,children:`Apply link`})]})]}):null,(0,B.jsx)(`div`,{className:`editor-wrap`,tabIndex:-1,children:(0,B.jsx)(`div`,{ref:a,className:`editor`,contentEditable:!0,suppressContentEditableWarning:!0,role:`textbox`,"aria-label":n,"aria-multiline":`true`})})]})}),tp={to:`To`,cc:`Cc`,bcc:`Bcc`};function np(){let e=864e5,t=Math.floor(dt/e)*e,n=(8-new Date(dt).getUTCDay())%7||7;return[{id:`later-today`,label:`Later today`,targetAt:dt+3*36e5},{id:`tomorrow-morning`,label:`Tomorrow morning`,targetAt:t+e+8*36e5},{id:`tomorrow-afternoon`,label:`Tomorrow afternoon`,targetAt:t+e+13*36e5},{id:`monday-morning`,label:`Monday morning`,targetAt:t+n*e+8*36e5}]}function rp(e){return new Date(e).toLocaleString(ft,{weekday:`short`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,timeZone:`UTC`})}function ip(e){return e?e.name?`${e.name} <${e.email}>`:e.email:``}function ap({session:e}){let t=br.getState,n=br(e=>e.identities),r=e.presentation===`expanded`,[i,a]=(0,C.useState)(!1),[o,s]=(0,C.useState)(e.draft.cc.length>0),[c,l]=(0,C.useState)(e.draft.bcc.length>0),[u,d]=(0,C.useState)(null),f=(0,C.useRef)(null),p=(0,C.useRef)(null),m=(0,C.useRef)(null),{draft:h}=e,g=(0,C.useMemo)(np,[]),_=t=>r?`compose-${t}`:`compose-${e.id}-${t}`,v=r?`compose-title`:`compose-${e.id}-title`,y=r?`compose-from-label`:`compose-${e.id}-from-label`,b=r?`compose-subject`:`compose-${e.id}-subject`,x=hr(e),S=x?`Close options`:`Close`,w=n[h.fromIdx];(0,C.useEffect)(()=>{r&&requestAnimationFrame(()=>{e.draft.to.length===0?document.getElementById(_(`to`))?.focus():f.current?.focus()})},[r,e.id,e.draftEpoch]);let T=(0,C.useCallback)(n=>{t().updateDraft(e.id,{html:n.html,text:n.text})},[t,e.id]),E=(0,C.useCallback)((n,r)=>{t().updateDraft(e.id,{[n]:r})},[t,e.id]);function D(e){return lr.filter(t=>t!==e).flatMap(e=>h[e].filter(pr).map(e=>e.email))}function ee(e){e===`cc`?s(!0):l(!0),requestAnimationFrame(()=>document.getElementById(_(e))?.focus())}function O(t,n){if(t===`to`)return;let r=n.currentTarget,i=n.relatedTarget;i&&r.contains(i)||setTimeout(()=>{let n=br.getState().sessions.find(t=>t.id===e.id);!n||n.draft[t].length>0||(t===`cc`?s(!1):l(!1))})}function k(){t().send(e.id,u?{targetAt:u.targetAt,label:rp(u.targetAt)}:null)}function ne(t){t.defaultPrevented||Ar(t.nativeEvent)||Mr(t.nativeEvent,{key:`Enter`,mod:!0})&&(t.preventDefault(),!e.closePromptOpen&&k())}let re=[`to`,...o?[`cc`]:[],...c?[`bcc`]:[]];return(0,B.jsx)(`div`,{ref:p,className:`compose-dialog${r?` compose-dialog--expanded`:``}${i?` compose-dialog--maximized`:``}`,style:r?void 0:{display:`none`},role:`dialog`,"aria-modal":`true`,"aria-labelledby":v,tabIndex:-1,onKeyDown:ne,children:(0,B.jsxs)(`div`,{className:`compose-dialog__card`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`h2`,{id:v,title:h.subject||`New Message`,children:h.subject||`New Message`}),(0,B.jsxs)(`div`,{className:`compose-dialog__window-actions`,children:[(0,B.jsx)(Vr,{className:`icon--minimize`,title:`Minimize`,"aria-label":`Minimize`,onClick:()=>t().minimize(e.id),children:(0,B.jsx)(N,{size:18,strokeWidth:1.65,"aria-hidden":`true`})}),(0,B.jsx)(Ur,{maximized:i,surface:`composer`,onToggle:()=>a(e=>!e)}),(0,B.jsxs)(Gr,{className:`compose-close-menu`,children:[(0,B.jsx)(`summary`,{ref:m,className:`compose-close-menu__trigger`,role:`button`,"aria-haspopup":`menu`,title:S,"aria-label":S,onClick:n=>{x||(n.preventDefault(),t().close(e.id))},children:(0,B.jsx)(Be,{size:18,strokeWidth:1.65,"aria-hidden":`true`})}),(0,B.jsxs)(`div`,{className:`app-dropdown__menu compose-close-menu__menu`,role:`menu`,"aria-label":`Close options`,children:[(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item compose-close-menu__discard`,role:`menuitem`,onClick:n=>{Wr(n),t().discardDraft(e.id)},children:[(0,B.jsx)(Ie,{size:15,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Discard`})]}),(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item`,role:`menuitem`,onClick:n=>{Wr(n),t().saveAndClose(e.id)},children:[(0,B.jsx)(Ce,{size:15,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Save Draft`})]})]})]})]})]}),(0,B.jsxs)(`div`,{className:`compose-dialog__body`,children:[(0,B.jsxs)(`div`,{className:`row`,children:[(0,B.jsx)(`label`,{id:y,children:`From`}),(0,B.jsxs)(Gr,{className:`from-picker`,"data-compose-from":!0,children:[(0,B.jsxs)(`summary`,{className:`app-dropdown__summary from-picker__summary`,"aria-labelledby":y,children:[w?(0,B.jsx)(`span`,{className:`from-picker__avatar`,"aria-hidden":`true`,style:hn(w.email),children:mn(w.name?.trim()||w.email)}):null,(0,B.jsx)(`span`,{className:`from-picker__summary-text`,children:ip(w)})]}),(0,B.jsx)(`div`,{className:`app-dropdown__menu from-picker__menu`,role:`menu`,"aria-label":`From identity`,children:n.map((n,r)=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item from-picker__option`,role:`menuitemradio`,"aria-checked":r===h.fromIdx,onClick:n=>{Wr(n),t().updateDraft(e.id,{fromIdx:r})},children:[(0,B.jsx)(`span`,{className:`from-picker__avatar`,"aria-hidden":`true`,style:hn(n.email),children:mn(n.name?.trim()||n.email)}),(0,B.jsxs)(`span`,{className:`from-picker__lines`,children:[n.name?(0,B.jsx)(`span`,{className:`from-picker__name`,children:n.name}):null,(0,B.jsx)(`span`,{className:`from-picker__email${n.name?``:` from-picker__email--primary`}`,children:n.email})]}),r===h.fromIdx?(0,B.jsx)(te,{size:15,className:`from-picker__check`}):null]},n.id))})]})]}),re.map(t=>(0,B.jsxs)(`div`,{className:`row row--recipient${t===`to`?` row--to`:``}`,onBlur:e=>O(t,e),children:[(0,B.jsx)(`label`,{htmlFor:_(t),children:tp[t]}),(0,B.jsx)(Lu,{inputId:_(t),label:tp[t],entries:h[t],taken:D(t),query:Ou,browseAll:ku,onEntriesChange:e=>E(t,e)},`${e.id}-${t}-${e.draftEpoch}`),t===`to`?(0,B.jsxs)(`div`,{className:`recipient-cc-toggles`,children:[o?null:(0,B.jsx)(`button`,{type:`button`,className:`recipient-toggle`,onClick:()=>ee(`cc`),children:`Cc`}),c?null:(0,B.jsx)(`button`,{type:`button`,className:`recipient-toggle`,onClick:()=>ee(`bcc`),children:`Bcc`})]}):null]},t)),(0,B.jsxs)(`div`,{className:`row`,children:[(0,B.jsx)(`label`,{htmlFor:b,children:`Subject`}),(0,B.jsx)(`input`,{id:b,type:`text`,value:h.subject,onInput:n=>t().updateDraft(e.id,{subject:n.currentTarget.value}),onChange:n=>t().updateDraft(e.id,{subject:n.target.value})})]}),(0,B.jsx)(ep,{ref:f,contentKey:e.id,initialHtml:e.editorHtmlBody,accessibleLabel:`Message body`,onUpdate:T}),(0,B.jsxs)(`footer`,{children:[(0,B.jsx)(Br,{variant:`outline`,"aria-label":`Attach files`,title:`Attach files`,iconLeft:(0,B.jsx)(ve,{size:17,"aria-hidden":`true`}),children:`Attach`}),(0,B.jsxs)(`div`,{className:`compose-send-split`,children:[(0,B.jsx)(Br,{className:`compose-send`,disabled:e.closePromptOpen,onClick:k,iconLeft:(0,B.jsx)(we,{size:16,strokeWidth:2,"aria-hidden":`true`}),children:`Send`}),(0,B.jsxs)(Gr,{className:`compose-schedule-menu`,children:[(0,B.jsxs)(`summary`,{className:`compose-schedule-menu__trigger${u?` compose-schedule-menu__trigger--selected`:``}`,role:`button`,"aria-haspopup":`menu`,"aria-label":u?`Schedule send: ${u.label}`:`Schedule send`,title:u?`${u.label} — ${rp(u.targetAt)}`:`Schedule send`,children:[u?(0,B.jsx)(`span`,{className:`compose-schedule-menu__selection`,children:u.label}):null,(0,B.jsx)(A,{size:16,strokeWidth:2,"aria-hidden":`true`})]}),(0,B.jsxs)(`div`,{className:`app-dropdown__menu compose-schedule-menu__menu`,role:`menu`,"aria-label":`Schedule send`,children:[u?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item compose-schedule-menu__item`,role:`menuitem`,onClick:e=>{Wr(e),d(null)},children:[(0,B.jsx)(`span`,{className:`compose-schedule-menu__label`,children:`Send now`}),(0,B.jsx)(`span`,{className:`compose-schedule-menu__secondary`,children:`Immediately`})]}),(0,B.jsx)(`div`,{className:`compose-schedule-menu__separator`,role:`separator`})]}):null,g.map(e=>(0,B.jsxs)(`button`,{type:`button`,className:`app-dropdown__item compose-schedule-menu__item`,role:`menuitem`,title:rp(e.targetAt),onClick:t=>{Wr(t),d(e)},children:[(0,B.jsx)(`span`,{className:`compose-schedule-menu__label`,children:e.label}),(0,B.jsx)(`span`,{className:`compose-schedule-menu__secondary`,children:rp(e.targetAt)})]},e.id))]})]})]})]})]}),e.closePromptOpen?(0,B.jsx)(`div`,{className:`compose-confirm-backdrop`,children:(0,B.jsxs)(`section`,{className:`compose-confirm`,role:`alertdialog`,"aria-modal":`true`,"aria-labelledby":`compose-close-title`,"aria-describedby":`compose-close-description`,tabIndex:-1,children:[(0,B.jsx)(`h3`,{id:`compose-close-title`,children:`Save this draft?`}),(0,B.jsx)(`p`,{id:`compose-close-description`,children:`Save your latest changes before closing this compose window.`}),(0,B.jsxs)(`div`,{className:`compose-confirm__actions`,children:[(0,B.jsx)(Br,{variant:`outline`,onClick:()=>t().cancelClose(e.id),children:`Cancel`}),(0,B.jsx)(Br,{variant:`outline`,onClick:()=>t().closeWithoutSaving(e.id),children:`Don't Save`}),(0,B.jsx)(Br,{onClick:()=>t().saveAndClose(e.id),children:`Save draft`})]})]})}):null]})})}function op(){let e=br(e=>e.sessions),t=e.filter(e=>e.presentation===`minimized`),n=br.getState;return(0,B.jsxs)(B.Fragment,{children:[e.map(e=>(0,B.jsx)(ap,{session:e},e.id)),t.length>0?(0,B.jsx)(`div`,{className:`compose-dock`,"aria-label":`Minimized compose windows`,children:t.map(e=>(0,B.jsxs)(`div`,{className:`compose-dock__item`,"data-session-id":e.id,children:[(0,B.jsx)(`button`,{type:`button`,className:`compose-dock__restore`,"aria-label":`Restore ${mr(e)}`,onClick:()=>n().restore(e.id),children:(0,B.jsx)(`span`,{className:`compose-dock__text`,children:(0,B.jsx)(`span`,{className:`compose-dock__title`,children:mr(e)})})}),(0,B.jsx)(`button`,{type:`button`,className:`compose-dock__close`,"aria-label":`Close ${mr(e)}`,onClick:()=>n().requestClose(e.id),children:`×`})]},e.id))}):null]})}var sp=4e3;function cp(){let e=z(e=>e.toasts),t=z(e=>e.dismissToast);return(0,C.useEffect)(()=>{if(e.length===0)return;let n=e[0],r=window.setTimeout(()=>t(n.id),sp);return()=>clearTimeout(r)},[e,t]),e.length===0?null:(0,B.jsx)(`div`,{className:`store-error-toast`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:e.map(e=>(0,B.jsxs)(`div`,{className:`store-error-toast__item store-error-toast__item--success`,children:[(0,B.jsx)(`span`,{className:`store-error-toast__message`,children:e.text}),(0,B.jsx)(`button`,{className:`store-error-toast__dismiss`,type:`button`,"aria-label":`Dismiss notification`,title:`Dismiss`,onClick:()=>t(e.id),children:(0,B.jsx)(Be,{size:14,strokeWidth:2,"aria-hidden":`true`})})]},e.id))})}var lp=typeof location<`u`&&new URLSearchParams(location.search).get(`animations`)===`off`,up=56,dp=6,fp=1024,pp=640,mp=lp?0:360,hp=50,gp=180,_p=420,vp=240;function yp(){let[e,t]=(0,C.useState)(()=>window.innerWidth);return(0,C.useEffect)(()=>{let e=()=>t(window.innerWidth);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),e}function bp(){let e=Cr(e=>e.theme),t=Cr(e=>e.space),n=Cr(e=>e.quickFilter),r=Cr(e=>e.folderListWidth),i=Cr(e=>e.messageColumnWidth),a=Cr(e=>e.quickFilterFocusRequest),o=z(e=>e.open.id),s=z(e=>e.selection.ids.size),c=z(e=>e.messages),l=br(e=>e.sessions.some(e=>e.presentation===`expanded`)),u=yp(),d=(0,C.useRef)(null),f=(0,C.useRef)(null),[p,m]=(0,C.useState)(!1),h=(0,C.useRef)(!1),[g,_]=(0,C.useState)(!1),v=o!=null&&s===0,y=u{let t=document.documentElement;t.classList.toggle(`dark`,e===`dark`),t.classList.toggle(`light`,e===`light`),t.style.colorScheme=e},[e]),(0,C.useEffect)(()=>{a!==0&&(f.current?.focus(),f.current?.select())},[a]),(0,C.useEffect)(()=>{_(!1)},[o]),(0,C.useEffect)(()=>{S||_(!1)},[S]),(0,C.useLayoutEffect)(()=>{let e=y||u{T.current=null,w(!0)},Math.max(0,mp-hp))},[v,u,t]),(0,C.useEffect)(()=>()=>{T.current!=null&&clearTimeout(T.current)},[]);let D=(0,C.useCallback)(()=>{m(e=>!e),h.current=!1},[]),ee=i+!!S*6;function O(){let e=d.current?.clientWidth||window.innerWidth,t=Math.max(0,e-up-(p?0:dp)),n=S?286+vp:280;return Math.min(_p,t-n)}let te=Tr({get:()=>Cr.getState().folderListWidth,set:e=>Cr.getState().setFolderListWidth(e),min:()=>gp,max:O}),A=Tr({get:()=>Cr.getState().messageColumnWidth,set:e=>Cr.getState().setMessageColumnWidth(e),min:()=>280,max:()=>xr}),ne={"--folder-list-width":`${r}px`,"--message-columns-width":`${ee}px`,"--message-list-min-width":`280px`,"--message-view-min-width":`${vp}px`,"--column-resizer-width":`${dp}px`,"--folder-list-transition-ms":`${mp}ms`},re=[`shell`,t===`mail`&&!S?`shell--message-view-hidden`:``,t===`mail`&&!x?`shell--message-list-hidden`:``,g?`shell--message-view-maximized`:``,p?`shell--folder-list-hidden`:``,t===`contacts`?`shell--contacts`:``,te.active||A.active?`shell--column-resizing`:``].filter(Boolean).join(` `),ie=t===`contacts`?`address book list`:`folder list`,ae=t===`contacts`?`Filter contacts or identities`:`Filter messages`,oe=e===`dark`?`Switch to light mode`:`Switch to dark mode`;function se(e){e!==Cr.getState().quickFilter&&(t===`mail`&&z.getState().open.id!=null&&z.getState().selectMessage(null),Cr.getState().setQuickFilter(e))}return(0,B.jsxs)(`div`,{ref:d,className:re,style:ne,children:[(0,B.jsxs)(`header`,{className:`quick-filter`,inert:g,"aria-hidden":g||void 0,children:[(0,B.jsxs)(`div`,{className:`quick-filter__brand`,children:[(0,B.jsx)(zr,{className:`quick-filter__glyph`,svg:He}),(0,B.jsx)(`span`,{className:`quick-filter__wordmark`,children:`Mail`})]}),(0,B.jsxs)(`div`,{className:`quick-filter__search`,role:`search`,children:[(0,B.jsx)(`input`,{ref:f,className:`quick-filter__input${n.length===0?` quick-filter__input--empty`:``}`,type:`search`,value:n,"aria-label":t===`contacts`?`Filter contacts or identities by name or email address`:`Quick Filter messages by from, to, or subject`,"aria-keyshortcuts":`/ Control+K`,placeholder:ae,autoComplete:`off`,spellCheck:!1,onInput:e=>se(e.currentTarget.value),onChange:e=>se(e.target.value)}),n.length===0?(0,B.jsx)(`kbd`,{className:`quick-filter__shortcut`,"aria-hidden":`true`,children:`/`}):(0,B.jsx)(`button`,{className:`quick-filter__clear`,type:`button`,"aria-label":`Clear Quick Filter`,title:`Clear Quick Filter`,onClick:()=>se(``),children:(0,B.jsx)(Be,{size:17,strokeWidth:2.25,"aria-hidden":`true`})})]}),(0,B.jsxs)(`div`,{className:`quick-filter__actions`,children:[(0,B.jsx)(`a`,{className:`quick-filter__action`,href:`#report-bug`,"aria-label":`Report a bug`,title:`Report a bug`,children:(0,B.jsx)(k,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(`a`,{className:`quick-filter__action`,href:`#feedback`,"aria-label":`Give feedback`,title:`Give feedback`,children:(0,B.jsx)(de,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(`button`,{className:`quick-filter__action theme-toggle`,type:`button`,"aria-label":oe,title:oe,onClick:()=>Cr.getState().toggleTheme(),children:e===`dark`?(0,B.jsx)(Ae,{size:18,strokeWidth:1.75,"aria-hidden":`true`}):(0,B.jsx)(P,{size:18,strokeWidth:1.75,"aria-hidden":`true`})}),(0,B.jsx)(ni,{}),(0,B.jsx)(ei,{})]})]}),(0,B.jsx)(Qr,{inert:g,active:t,unreadCount:E,folderListHidden:p,sidebarLabel:ie,onChange:e=>Cr.getState().setSpace(e),onToggleFolderList:D}),(0,B.jsx)(`div`,{className:`sidebar-slot${p?` sidebar-slot--hidden`:``}`,"aria-hidden":p||g||void 0,inert:p||g,children:t===`mail`?(0,B.jsxs)(`aside`,{className:`sidebar`,children:[(0,B.jsx)(`header`,{className:`sidebar__header`,children:(0,B.jsx)(Br,{className:`sidebar__compose`,onClick:()=>br.getState().open(),iconLeft:(0,B.jsx)(ye,{size:16,strokeWidth:2}),children:`New Message`})}),(0,B.jsx)(`div`,{className:`sidebar__account`,children:(0,B.jsx)(`span`,{className:`sidebar__account-name`,children:pt.email})}),(0,B.jsx)(ki,{}),(0,B.jsx)(`footer`,{className:`sidebar__footer`,children:(0,B.jsx)(ai,{})})]}):(0,B.jsx)(`div`,{className:`sidebar sidebar--contacts`})}),(0,B.jsx)(`div`,{className:`column-resizer column-resizer--folder-list${te.active?` is-active`:``}${p?` column-resizer--hidden`:``}`,role:`separator`,"aria-label":`Resize ${ie}`,"aria-orientation":`vertical`,"aria-valuemin":gp,"aria-valuenow":r,"aria-hidden":p||g||void 0,inert:g,tabIndex:p||g?-1:0,onPointerDown:te.onPointerDown,onKeyDown:te.onKeyDown}),t===`mail`?(0,B.jsxs)(B.Fragment,{children:[x?(0,B.jsxs)(`div`,{className:`msg-columns${A.active?` msg-columns--resizing`:``}`,inert:g,"aria-hidden":g||void 0,style:{"--message-column-resizer-width":`6px`,"--message-column-min-width":`280px`,"--message-column-width":`${i}px`},children:[(0,B.jsx)(Ba,{quickFilterQuery:n}),S?(0,B.jsx)(`div`,{className:`column-resizer msg-columns__resizer${A.active?` is-active`:``}`,role:`separator`,"aria-label":`Resize message list`,"aria-orientation":`vertical`,"aria-valuemin":280,"aria-valuemax":xr,"aria-valuenow":i,tabIndex:0,onPointerDown:A.onPointerDown,onKeyDown:A.onKeyDown}):null]}):null,S?(0,B.jsx)(Tu,{maximized:g,onToggleMaximized:()=>_(e=>!e)}):null]}):(0,B.jsx)(`section`,{className:`contacts contacts--placeholder`,"aria-label":`Contacts`,children:(0,B.jsx)(`p`,{children:`Contacts are not part of this clone.`})}),(0,B.jsx)(op,{}),(0,B.jsx)(cp,{})]})}lp&&document.documentElement.classList.add(`no-motion`),(0,Ve.createRoot)(document.getElementById(`app`)).render((0,B.jsx)(bp,{})); -//# sourceMappingURL=index-CBEgGFb_.js.map \ No newline at end of file diff --git a/suites-experimental/stormbox-react/dist/assets/index-CBEgGFb_.js.map b/suites-experimental/stormbox-react/dist/assets/index-CBEgGFb_.js.map deleted file mode 100644 index 77edd25a1..000000000 --- a/suites-experimental/stormbox-react/dist/assets/index-CBEgGFb_.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index-CBEgGFb_.js","names":["__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","X","create","memo","memo","tt","Text"],"sources":["../../node_modules/scheduler/cjs/scheduler.production.js","../../node_modules/scheduler/index.js","../../node_modules/react/cjs/react.production.js","../../node_modules/react/index.js","../../node_modules/react-dom/cjs/react-dom.production.js","../../node_modules/react-dom/index.js","../../node_modules/react-dom/cjs/react-dom-client.production.js","../../node_modules/react-dom/client.js","../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../../node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../../node_modules/lucide-react/dist/esm/context.mjs","../../node_modules/lucide-react/dist/esm/Icon.mjs","../../node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../../node_modules/lucide-react/dist/esm/icons/arrow-left.mjs","../../node_modules/lucide-react/dist/esm/icons/bold.mjs","../../node_modules/lucide-react/dist/esm/icons/bug.mjs","../../node_modules/lucide-react/dist/esm/icons/check.mjs","../../node_modules/lucide-react/dist/esm/icons/chevron-down.mjs","../../node_modules/lucide-react/dist/esm/icons/chevron-up.mjs","../../node_modules/lucide-react/dist/esm/icons/circle-user-round.mjs","../../node_modules/lucide-react/dist/esm/icons/circle.mjs","../../node_modules/lucide-react/dist/esm/icons/clock.mjs","../../node_modules/lucide-react/dist/esm/icons/download.mjs","../../node_modules/lucide-react/dist/esm/icons/ellipsis.mjs","../../node_modules/lucide-react/dist/esm/icons/expand.mjs","../../node_modules/lucide-react/dist/esm/icons/grip.mjs","../../node_modules/lucide-react/dist/esm/icons/highlighter.mjs","../../node_modules/lucide-react/dist/esm/icons/image.mjs","../../node_modules/lucide-react/dist/esm/icons/italic.mjs","../../node_modules/lucide-react/dist/esm/icons/lightbulb.mjs","../../node_modules/lucide-react/dist/esm/icons/link.mjs","../../node_modules/lucide-react/dist/esm/icons/list-ordered.mjs","../../node_modules/lucide-react/dist/esm/icons/list.mjs","../../node_modules/lucide-react/dist/esm/icons/log-out.mjs","../../node_modules/lucide-react/dist/esm/icons/mail-open.mjs","../../node_modules/lucide-react/dist/esm/icons/mail.mjs","../../node_modules/lucide-react/dist/esm/icons/minus.mjs","../../node_modules/lucide-react/dist/esm/icons/moon.mjs","../../node_modules/lucide-react/dist/esm/icons/paperclip.mjs","../../node_modules/lucide-react/dist/esm/icons/plus.mjs","../../node_modules/lucide-react/dist/esm/icons/quote.mjs","../../node_modules/lucide-react/dist/esm/icons/redo-2.mjs","../../node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs","../../node_modules/lucide-react/dist/esm/icons/remove-formatting.mjs","../../node_modules/lucide-react/dist/esm/icons/save.mjs","../../node_modules/lucide-react/dist/esm/icons/send.mjs","../../node_modules/lucide-react/dist/esm/icons/settings-2.mjs","../../node_modules/lucide-react/dist/esm/icons/settings.mjs","../../node_modules/lucide-react/dist/esm/icons/shrink.mjs","../../node_modules/lucide-react/dist/esm/icons/star.mjs","../../node_modules/lucide-react/dist/esm/icons/strikethrough.mjs","../../node_modules/lucide-react/dist/esm/icons/sun.mjs","../../node_modules/lucide-react/dist/esm/icons/tag.mjs","../../node_modules/lucide-react/dist/esm/icons/text-align-end.mjs","../../node_modules/lucide-react/dist/esm/icons/text-align-center.mjs","../../node_modules/lucide-react/dist/esm/icons/text-align-justify.mjs","../../node_modules/lucide-react/dist/esm/icons/text-align-start.mjs","../../node_modules/lucide-react/dist/esm/icons/trash-2.mjs","../../node_modules/lucide-react/dist/esm/icons/underline.mjs","../../node_modules/lucide-react/dist/esm/icons/undo-2.mjs","../../node_modules/lucide-react/dist/esm/icons/users.mjs","../../node_modules/lucide-react/dist/esm/icons/x.mjs","../../src/data/corpus.ts","../../src/data/random.ts","../../src/data/text.ts","../../src/clock.ts","../../src/data/mailbox.ts","../../node_modules/zustand/esm/vanilla.mjs","../../node_modules/zustand/esm/react.mjs","../../src/utils/message-tags.ts","../../src/store/mail-store.ts","../../src/utils/sender-avatar.ts","../../src/data/bodies.ts","../../src/utils/address-key.ts","../../src/utils/address-parse.ts","../../src/utils/compose-quote.ts","../../src/store/compose-store.ts","../../src/store/ui-store.ts","../../src/hooks/useColumnResize.ts","../../src/utils/keyboard.ts","../../src/hooks/useShortcuts.ts","../../node_modules/react/cjs/react-jsx-runtime.production.js","../../node_modules/react/jsx-runtime.js","../../src/components/base.tsx","../../src/utils/format-bytes.ts","../../src/components/Shell.tsx","../../src/utils/folder-presentation.ts","../../src/hooks/useMessageDrag.ts","../../src/components/FolderTree.tsx","../../node_modules/@tanstack/virtual-core/dist/esm/lazy-measurements.js","../../node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../node_modules/@tanstack/virtual-core/dist/esm/index.js","../../node_modules/@tanstack/react-virtual/dist/esm/index.js","../../src/utils/message-row-presentation.ts","../../src/utils/quick-filter.ts","../../src/components/Tags.tsx","../../src/components/MessageListRow.tsx","../../src/components/ListHeader.tsx","../../src/components/MessageList.tsx","../../node_modules/dompurify/dist/purify.es.mjs","../../src/hooks/useMediaQuery.ts","../../src/utils/raster-images.ts","../../src/utils/message-html.ts","../../src/utils/color.ts","../../src/utils/dark-email.ts","../../node_modules/linkifyjs/dist/linkify.mjs","../../node_modules/linkify-string/dist/linkify-string.mjs","../../src/utils/plaintext-html.ts","../../src/components/MessageView.tsx","../../src/store/contacts.ts","../../src/components/RecipientInput.tsx","../../node_modules/squire-rte/dist/squire.mjs","../../src/utils/rich-text.ts","../../src/components/RichTextEditor.tsx","../../src/components/Compose.tsx","../../src/components/Toasts.tsx","../../src/motion.ts","../../src/App.tsx","../../src/main.tsx"],"sourcesContent":["/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n else break a;\n }\n}\nfunction peek(heap) {\n return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n else break a;\n }\n }\n return first;\n}\nfunction compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n}\nvar taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n}\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n}\nvar isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\nfunction shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n}\nfunction performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime && shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\nelse if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_requestPaint = function () {\n needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result,\n thenable = ctor();\n thenable.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1),\n (payload._result = moduleObject),\n void 0 === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = moduleObject));\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2),\n (payload._result = error),\n void 0 === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = thenable));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n };\nfunction startTransition(scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition.types =\n null !== prevTransition ? prevTransition.types : null;\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction addTransitionType(type) {\n var transition = ReactSharedInternals.T;\n if (null !== transition) {\n var transitionTypes = transition.types;\n null === transitionTypes\n ? (transition.types = [type])\n : -1 === transitionTypes.indexOf(type) && transitionTypes.push(type);\n } else startTransition(addTransitionType.bind(null, type));\n}\nvar Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n};\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.ViewTransition = REACT_VIEW_TRANSITION_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.addTransitionType = addTransitionType;\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = startTransition;\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction noop() {}\nvar Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(formatProdErrorMessage(522));\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_RECOVERABLE_TYPE = Symbol.for(\"react.recoverable\"),\n REACT_OPTIMISTIC_KEY = Symbol.for(\"react.optimistic_key\");\nfunction createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key:\n null == key\n ? null\n : key === REACT_OPTIMISTIC_KEY\n ? REACT_OPTIMISTIC_KEY\n : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nvar ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\nexports.browser = function (reason) {\n return { $$typeof: REACT_RECOVERABLE_TYPE, _reason: reason };\n};\nexports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(formatProdErrorMessage(299));\n return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f();\n }\n};\nexports.preconnect = function (href, options) {\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence ? options.precedence : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n};\nexports.preinitModule = function (href, options) {\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as) {\n var crossOrigin = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n );\n Internals.d.M(href, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0\n });\n }\n } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n Internals.d.L(href, as, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n};\nexports.preloadModule = function (href, options) {\n if (\"string\" === typeof href)\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0\n });\n } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.3.1\";\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n React = require(\"react\"),\n ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n}\nfunction getNearestMountedFiber(fiber) {\n for (var node = fiber, nextNode = node; nextNode && !nextNode.alternate; )\n (node = nextNode),\n 0 !== (node.flags & 4098) && (fiber = node.return),\n (nextNode = node.return);\n for (; node.return; ) node = node.return;\n return 3 === node.tag ? fiber : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n if (31 === fiber.tag) {\n var activityState = fiber.memoizedState;\n null === activityState &&\n ((fiber = fiber.alternate),\n null !== fiber && (activityState = fiber.memoizedState));\n if (null !== activityState) return activityState.dehydrated;\n }\n return null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate) throw Error(formatProdErrorMessage(188));\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(formatProdErrorMessage(188));\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) {\n for (child$0 = parentB.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) throw Error(formatProdErrorMessage(189));\n }\n }\n if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n }\n if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n}\nfunction traverseVisibleInstancesAndTextInstances(\n child,\n searchWithinHosts,\n fn,\n a,\n b,\n c\n) {\n for (; null !== child; ) {\n if (\n ((5 === child.tag || 27 === child.tag || 6 === child.tag) &&\n fn(child, a, b, c)) ||\n ((22 !== child.tag || null === child.memoizedState) &&\n (searchWithinHosts || (5 !== child.tag && 27 !== child.tag)) &&\n traverseVisibleInstancesAndTextInstances(\n child.child,\n searchWithinHosts,\n fn,\n a,\n b,\n c\n ))\n )\n return !0;\n child = child.sibling;\n }\n return !1;\n}\nfunction getFragmentParentInstanceOrContainerFiber(fiber) {\n for (fiber = fiber.return; null !== fiber; ) {\n if (3 === fiber.tag || 5 === fiber.tag || 27 === fiber.tag) return fiber;\n fiber = fiber.return;\n }\n return null;\n}\nfunction fiberIsPortaledIntoHost(fiber) {\n var foundPortalParent = !1;\n for (fiber = fiber.return; null !== fiber; ) {\n 4 === fiber.tag && (foundPortalParent = !0);\n if (3 === fiber.tag || 5 === fiber.tag || 27 === fiber.tag) break;\n fiber = fiber.return;\n }\n return foundPortalParent;\n}\nfunction getFragmentInstanceOrTextInstanceSiblings(fiber) {\n var result = [null, null],\n parentHostFiber = getFragmentParentInstanceOrContainerFiber(fiber);\n if (null === parentHostFiber) return result;\n findFragmentInstanceOrTextInstanceSiblings(\n result,\n fiber,\n parentHostFiber.child,\n { foundSelf: !1 }\n );\n return result;\n}\nfunction findFragmentInstanceOrTextInstanceSiblings(\n result,\n self,\n child,\n state\n) {\n for (; null !== child; ) {\n if (child === self) state.foundSelf = !0;\n else if (5 === child.tag || 27 === child.tag || 6 === child.tag) {\n if (state.foundSelf) return (result[1] = child), !0;\n result[0] = child;\n } else if (\n (22 !== child.tag || null === child.memoizedState) &&\n findFragmentInstanceOrTextInstanceSiblings(\n result,\n self,\n child.child,\n state\n )\n )\n return !0;\n child = child.sibling;\n }\n return !1;\n}\nfunction getInstanceFromHostFiber(fiber) {\n switch (fiber.tag) {\n case 5:\n case 27:\n case 6:\n return fiber.stateNode;\n case 3:\n return fiber.stateNode.containerInfo;\n default:\n throw Error(formatProdErrorMessage(559));\n }\n}\nvar searchTarget = null,\n searchBoundary = null;\nfunction isFiberPrecedingCheck(child, target, boundary) {\n return child === boundary\n ? !0\n : child === target\n ? ((searchTarget = child), !0)\n : !1;\n}\nfunction isFiberFollowingCheck(child, target, boundary) {\n return child === boundary\n ? ((searchBoundary = child), !1)\n : child === target\n ? (null !== searchBoundary && (searchTarget = child), !0)\n : !1;\n}\nfunction getParentForFragmentAncestors(inst) {\n if (null === inst) return null;\n do inst = null === inst ? null : inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag && 3 !== inst.tag);\n return inst ? inst : null;\n}\nfunction getLowestCommonAncestor(instA, instB, getParent) {\n for (var depthA = 0, tempA = instA; tempA; tempA = getParent(tempA)) depthA++;\n tempA = 0;\n for (var tempB = instB; tempB; tempB = getParent(tempB)) tempA++;\n for (; 0 < depthA - tempA; ) (instA = getParent(instA)), depthA--;\n for (; 0 < tempA - depthA; ) (instB = getParent(instB)), tempA--;\n for (; depthA--; ) {\n if (instA === instB || (null !== instB && instA === instB.alternate))\n return instA;\n instA = getParent(instA);\n instB = getParent(instB);\n }\n return null;\n}\nvar assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_LEGACY_HIDDEN_TYPE = Symbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_RECOVERABLE_TYPE = Symbol.for(\"react.recoverable\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n case REACT_VIEW_TRANSITION_TYPE:\n return \"ViewTransition\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nvar isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n sharedNotPendingObject = {\n pending: !1,\n data: null,\n method: null,\n action: null\n },\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor, null);\n switch (nextRootInstance.nodeType) {\n case 9:\n case 11:\n fiber = (fiber = nextRootInstance.documentElement)\n ? (fiber = fiber.namespaceURI)\n ? getOwnHostContext(fiber)\n : 0\n : 0;\n break;\n default:\n if (\n ((fiber = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (fiber = getChildHostContextProd(nextRootInstance, fiber));\n else\n switch (fiber) {\n case \"svg\":\n fiber = 1;\n break;\n case \"math\":\n fiber = 2;\n break;\n default:\n fiber = 0;\n }\n }\n pop(contextStackCursor);\n push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n pop(contextStackCursor);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n var stateHook = fiber.memoizedState;\n null !== stateHook &&\n ((HostTransitionContext._currentValue = stateHook.memoizedState),\n push(hostTransitionProviderCursor, fiber));\n stateHook = contextStackCursor.current;\n var JSCompiler_inline_result = getChildHostContextProd(stateHook, fiber.type);\n stateHook !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor), pop(contextFiberStackCursor));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor),\n (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" ()\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n reentry = !0;\n var previousPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$1) {\n control = x$1;\n }\n Fake = !1;\n try {\n var prevProps = Object.getOwnPropertyDescriptor(\n fn.prototype,\n \"props\"\n );\n Object.defineProperty(fn.prototype, \"props\", {\n configurable: !0,\n set: function () {\n throw Error();\n }\n });\n Fake = !0;\n new fn();\n } finally {\n Fake &&\n (void 0 !== prevProps\n ? Object.defineProperty(fn.prototype, \"props\", prevProps)\n : delete fn.prototype.props);\n }\n }\n } else {\n try {\n throw Error();\n } catch (x$2) {\n control = x$2;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n namePropDescriptor = RunInRootFrame = 0;\n RunInRootFrame < sampleLines.length &&\n !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n )\n RunInRootFrame++;\n for (\n ;\n namePropDescriptor < controlLines.length &&\n !controlLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n if (\n RunInRootFrame === sampleLines.length ||\n namePropDescriptor === controlLines.length\n )\n for (\n RunInRootFrame = sampleLines.length - 1,\n namePropDescriptor = controlLines.length - 1;\n 1 <= RunInRootFrame &&\n 0 <= namePropDescriptor &&\n sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n )\n namePropDescriptor--;\n for (\n ;\n 1 <= RunInRootFrame && 0 <= namePropDescriptor;\n RunInRootFrame--, namePropDescriptor--\n )\n if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n do\n if (\n (RunInRootFrame--,\n namePropDescriptor--,\n 0 > namePropDescriptor ||\n sampleLines[RunInRootFrame] !==\n controlLines[namePropDescriptor])\n ) {\n var frame =\n \"\\n\" +\n sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n fn.displayName &&\n frame.includes(\"\") &&\n (frame = frame.replace(\"\", fn.displayName));\n return frame;\n }\n while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n }\n break;\n }\n }\n } finally {\n (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n }\n return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return fiber.child !== childFiber && null !== childFiber\n ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n : describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n case 30:\n return describeBuiltInComponentFrame(\"ViewTransition\");\n default:\n return \"\";\n }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\",\n previous = null;\n do\n (info += describeFiber(workInProgress, previous)),\n (previous = workInProgress),\n (workInProgress = workInProgress.return);\n while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n nextTransitionDeferredLane = 262144,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return lanes & -lanes;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n}\nfunction getEntangledLanes(root, renderLanes) {\n 0 !== (renderLanes & 8) && (renderLanes |= renderLanes & 32);\n var allEntangledLanes = root.entangledLanes;\n if (0 !== allEntangledLanes)\n for (\n root = root.entanglements, allEntangledLanes &= renderLanes;\n 0 < allEntangledLanes;\n\n ) {\n var index$4 = 31 - clz32(allEntangledLanes),\n lane = 1 << index$4;\n renderLanes |= root[index$4];\n allEntangledLanes &= ~lane;\n }\n return renderLanes;\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index$7 = 31 - clz32(remainingLanes),\n lane = 1 << index$7;\n entanglements[index$7] = 0;\n expirationTimes[index$7] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index$7];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index$7] = null, index$7 = 0;\n index$7 < hiddenUpdatesForLane.length;\n index$7++\n ) {\n var update = hiddenUpdatesForLane[index$7];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$8 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$8;\n (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n (root[index$8] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = renderLanes & -renderLanes;\n renderLane =\n 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n ? 0\n : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n}\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 2 < lanes\n ? 8 < lanes\n ? 0 !== (lanes & 134217727)\n ? 32\n : 268435456\n : 8\n : 2;\n}\nfunction resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey,\n internalLoadPendingKey = \"__reactLoad$\" + randomKey;\nfunction detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst;\n if ((targetInst = targetNode[internalInstanceKey])) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentHydrationBoundary(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n targetNode = getParentHydrationBoundary(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n}\nfunction getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 31 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n}\nfunction getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n}\nfunction markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n}\nfunction clearPendingLoadOnNode(node) {\n node[internalLoadPendingKey] = void 0;\n}\nvar allNativeEvents = new Set(),\n registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] = dependencies;\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n return !1;\n}\nvar viewTransitionMutationContext = !1;\nfunction pushMutationContext() {\n var prev = viewTransitionMutationContext;\n viewTransitionMutationContext = !1;\n return prev;\n}\nfunction setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix$10 = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n node.removeAttribute(name);\n return;\n }\n }\n node.setAttribute(name, value);\n }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttribute(name, value);\n }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttributeNS(namespace, name, value);\n }\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return value;\n default:\n return \"\";\n }\n}\nfunction isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n var descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n}\nfunction track(node) {\n if (!node._valueTracker) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\";\n node._valueTracker = trackValueOnNode(\n node,\n valueField,\n \"\" + node[valueField]\n );\n }\n}\nfunction updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n}\nfunction updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (element.type = type)\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n null != value\n ? \"number\" === type && element.value == value\n ? setDefaultValue(element, getToStringValue(element.value))\n : setDefaultValue(element, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (element.name = \"\" + getToStringValue(name))\n : element.removeAttribute(\"name\");\n}\nfunction initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (element.type = type);\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n ) {\n track(element);\n return;\n }\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (element.name = name);\n track(element);\n}\nfunction setDefaultValue(node, value) {\n node.defaultValue !== \"\" + value && (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n}\nfunction updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n if (isArrayImpl(children)) {\n if (1 < children.length) throw Error(formatProdErrorMessage(93));\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n track(element);\n}\nfunction setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n);\nfunction setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (style[styleName] = (\"\" + value).trim())\n : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(formatProdErrorMessage(62));\n node = node.style;\n if (null != prevStyles) {\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"),\n (viewTransitionMutationContext = !0));\n for (var styleName$16 in styles)\n (styleName = styles[styleName$16]),\n styles.hasOwnProperty(styleName$16) &&\n prevStyles[styleName$16] !== styleName &&\n (setValueForStyle(node, styleName$16, styleName),\n (viewTransitionMutationContext = !0));\n } else\n for (var styleName$17 in styles)\n styles.hasOwnProperty(styleName$17) &&\n setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n}\nvar aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"maskType\", \"mask-type\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps) throw Error(formatProdErrorMessage(90));\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form && updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n}\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n formatProdErrorMessage(231, registrationName, typeof stateNode)\n );\n return stateNode;\n}\nvar canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n try {\n var options = {};\n Object.defineProperty(options, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\nvar root = null,\n startText = null,\n fallbackText = null;\nfunction getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n };\nfunction modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n}\nfunction getEventModifierState() {\n return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n SubmitEventInterface = assign({}, EventInterface, { submitter: 0 }),\n SyntheticSubmitEvent = createSyntheticEvent(SubmitEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0,\n source: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\ncanUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CHAR = String.fromCharCode(32),\n hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return 229 !== nativeEvent.keyCode;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (32 !== nativeEvent.which) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n );\n default:\n return null;\n }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n}\nvar supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n};\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n}\nfunction createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n var JSCompiler_inline_result$jscomp$318;\n if (canUseDOM) {\n var isSupported$jscomp$inline_474 = \"oninput\" in document;\n if (!isSupported$jscomp$inline_474) {\n var element$jscomp$inline_475 = document.createElement(\"div\");\n element$jscomp$inline_475.setAttribute(\"oninput\", \"return;\");\n isSupported$jscomp$inline_474 =\n \"function\" === typeof element$jscomp$inline_475.oninput;\n }\n JSCompiler_inline_result$jscomp$318 = isSupported$jscomp$inline_474;\n } else JSCompiler_inline_result$jscomp$318 = !1;\n isInputEventSupported =\n JSCompiler_inline_result$jscomp$318 &&\n (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n}\nfunction getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e$20) {\n return doc.body;\n }\n}\nfunction getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n}\nfunction containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n}\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n}\nvar skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n}\nvar vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\ncanUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error fullscreenChange fullscreenError gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n \" \"\n );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar globalClientIdCounter$1 = 0;\nfunction getViewTransitionName(props, instance) {\n if (null != props.name && \"auto\" !== props.name) return props.name;\n if (null !== instance.autoName) return instance.autoName;\n props = pendingEffectsRoot.identifierPrefix;\n var globalClientId = globalClientIdCounter$1++;\n props = \"_\" + props + \"t_\" + globalClientId.toString(32) + \"_\";\n return (instance.autoName = props);\n}\nfunction getClassNameByType(classByType) {\n if (null == classByType || \"string\" === typeof classByType)\n return classByType;\n var className = null,\n activeTypes = pendingTransitionTypes;\n if (null !== activeTypes)\n for (var i = 0; i < activeTypes.length; i++) {\n var match = classByType[activeTypes[i]];\n if (null != match) {\n if (\"none\" === match) return \"none\";\n className = null == className ? match : className + (\" \" + match);\n }\n }\n return null == className ? classByType.default : className;\n}\nfunction getViewTransitionClassName(defaultClass, eventClass) {\n defaultClass = getClassNameByType(defaultClass);\n eventClass = getClassNameByType(eventClass);\n return null == eventClass\n ? \"auto\" === defaultClass\n ? null\n : defaultClass\n : \"auto\" === eventClass\n ? null\n : eventClass;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n if (50 < nestedUpdateCount)\n throw (\n ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(formatProdErrorMessage(185)))\n );\n for (var parent = sourceFiber.return; null !== parent; )\n (sourceFiber = parent), (parent = sourceFiber.return);\n return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiberImplClass(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 1206910976;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 1206910978;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext\n }));\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 0;\n owner = type;\n if (\"function\" === typeof owner) shouldConstruct(owner) && (fiberTag = 1);\n else if (\"string\" === typeof owner)\n fiberTag = isHostHoistableType(\n type,\n pendingProps,\n contextStackCursor.current\n )\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5;\n else\n a: switch (owner) {\n case REACT_ACTIVITY_TYPE:\n return (\n (type = createFiberImplClass(31, pendingProps, key, mode)),\n (type.elementType = REACT_ACTIVITY_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 24;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiberImplClass(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiberImplClass(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_LEGACY_HIDDEN_TYPE:\n case REACT_VIEW_TRANSITION_TYPE:\n return (\n (type = mode | 32),\n (type = createFiberImplClass(30, pendingProps, key, type)),\n (type.elementType = REACT_VIEW_TRANSITION_TYPE),\n (type.lanes = lanes),\n (type.stateNode = {\n autoName: null,\n paired: null,\n clones: null,\n ref: null\n }),\n type\n );\n default:\n if (\"object\" === typeof owner && null !== owner)\n switch (owner.$$typeof) {\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n fiberTag = 29;\n pendingProps = Error(\n formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n );\n owner = null;\n }\n key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiberImplClass(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiberImplClass(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiberImplClass(18, null, null, 0);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiberImplClass(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\nvar forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n var error = Error(\n formatProdErrorMessage(\n 418,\n 1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n ? \"text\"\n : \"HTML\",\n \"\"\n )\n );\n queueHydrationError(createCapturedValueAtFiber(error, fiber));\n throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n var instance = fiber.stateNode,\n type = fiber.type,\n props = fiber.memoizedProps;\n instance[internalInstanceKey] = fiber;\n instance[internalPropsKey] = props;\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", instance);\n listenToNonDelegatedEvent(\"close\", instance);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", instance);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", instance);\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", instance);\n break;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n initInput(\n instance,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n break;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n break;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", instance),\n initTextarea(instance, props.value, props.defaultValue, props.children);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n instance.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(instance.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n listenToNonDelegatedEvent(\"toggle\", instance)),\n null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", instance),\n null != props.onClick && (instance.onclick = noop$1),\n (instance = !0))\n : (instance = !1);\n instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 31:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n}\nfunction popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else if (31 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n}\nfunction resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n}\nfunction queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber$1 = null,\n lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue);\n context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n context._currentValue = valueCursor.current;\n pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n}\nfunction propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n nextFiber = null;\n } else\n 13 === fiber.tag &&\n null !== fiber.memoizedState &&\n null === fiber.memoizedState.dehydrated\n ? ((fiber.lanes |= renderLanes),\n (nextFiber = fiber.alternate),\n null !== nextFiber && (nextFiber.lanes |= renderLanes),\n scheduleContextWorkOnParentPath(\n fiber.return,\n renderLanes,\n workInProgress\n ),\n (nextFiber = fiber.child),\n (nextFiber = null !== nextFiber ? nextFiber.sibling : null))\n : (nextFiber = fiber.child);\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n}\nfunction propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current ? current.push(context) : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n return null !== current;\n}\nfunction checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer) throw Error(formatProdErrorMessage(308));\n lastContextDependency = context;\n consumer.dependencies = { lanes: 0, firstContext: context };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0\n };\nfunction createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n}\nfunction releaseCache(cache) {\n cache.refCount--;\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n}\nfunction queueTransitionTypes(root, transitionTypes) {\n if (0 !== (root.pendingLanes & 4194048)) {\n var queued = root.transitionTypes;\n null === queued && (queued = root.transitionTypes = []);\n for (root = 0; root < transitionTypes.length; root++) {\n var transitionType = transitionTypes[root];\n -1 === queued.indexOf(transitionType) && queued.push(transitionType);\n }\n }\n}\nvar entangledTransitionTypes = null;\nfunction claimQueuedTransitionTypes(root) {\n var claimed = root.transitionTypes;\n root.transitionTypes = null;\n return claimed;\n}\nvar currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n}\nfunction pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n ((entangledTransitionTypes = null), null !== currentEntangledListeners)\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n}\nfunction chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n globalMostRecentTransitionTime = now();\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n if (null !== entangledTransitionTypes)\n for (var root$28 = firstScheduledRoot; null !== root$28; )\n queueTransitionTypes(root$28, entangledTransitionTypes),\n (root$28 = root$28.next);\n root$28 = transition.types;\n if (null !== root$28) {\n for (var root$29 = firstScheduledRoot; null !== root$29; )\n queueTransitionTypes(root$29, root$28), (root$29 = root$29.next);\n if (0 !== currentEntangledLane) {\n root$29 = entangledTransitionTypes;\n null === root$29 && (root$29 = entangledTransitionTypes = []);\n for (var i = 0; i < root$28.length; i++) {\n var transitionType = root$28[i];\n -1 === root$29.indexOf(transitionType) && root$29.push(transitionType);\n }\n }\n }\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current)\n : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n SuspenseActionException = Error(formatProdErrorMessage(542)),\n noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n index = thenableState[index];\n void 0 === index\n ? thenableState.push(thenable)\n : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n thenableState = thenable.reason;\n checkIfUseWrappedInAsyncCatch(thenableState);\n if (void 0 === thenableState && !(\"reason\" in thenable))\n throw Error(formatProdErrorMessage(600));\n throw thenableState;\n default:\n if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n else {\n thenableState = workInProgressRoot;\n if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n throw Error(formatProdErrorMessage(482));\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n throw SuspenseException;\n }\n}\nfunction resolveLazy(lazyType) {\n try {\n var init = lazyType._init;\n return init(lazyType._payload);\n } catch (x) {\n if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n throw ((suspendedThenable = x), SuspenseException);\n throw x;\n }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n var thenable = suspendedThenable;\n suspendedThenable = null;\n return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = []);\n return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(formatProdErrorMessage(525));\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n formatProdErrorMessage(\n 31,\n \"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber\n )\n );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null === currentFirstChild.key\n ? existingChildren.set(currentFirstChild.index, currentFirstChild)\n : existingChildren.set(currentFirstChild.key, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 2), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 134217730;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 134217730);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return (\n (returnFiber = updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n )),\n coerceRef(returnFiber, element),\n returnFiber\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n current\n );\n current = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n coerceRef(current, element);\n current.return = returnFiber;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n createChild(returnFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"function\" === typeof newChild.then)\n return createChild(returnFiber, unwrapThenable(newChild), lanes);\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateSlot(returnFiber, oldFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n if (\"function\" === typeof newChild.then)\n return updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n if (\"function\" === typeof newChild.then)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n ((newFiber = nextOldFiber.alternate),\n null !== newFiber &&\n oldFiber.delete(null === newFiber.key ? newIdx : newFiber.key)),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren) throw Error(formatProdErrorMessage(151));\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n ((nextOldFiber = step.alternate),\n null !== nextOldFiber &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n )),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n void 0 === newChild.props.ref &&\n (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.children || []);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild)) {\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n newChild = key.call(newChild);\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n }\n if (\"function\" === typeof newChild.then)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n ? ((newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (lanes = useFiber(currentFirstChild, newChild)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n (lanes.return = returnFiber),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber))\n : deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n return fiber;\n } finally {\n }\n };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n}\nfunction createUpdate(lane) {\n return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (0 !== (executionContext & 2)) {\n var pending = updateQueue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n updateQueue.pending = update;\n update = getRootForUpdatedFiber(fiber);\n markUpdateLaneFromFiberToRoot(fiber, null, lane);\n return update;\n }\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance$jscomp$0,\n renderLanes\n) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n var instance = instance$jscomp$0;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(instance, newState, updateLane);\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -65537) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(instance, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress$jscomp$0.flags |= 64),\n isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(formatProdErrorMessage(191, callback));\n callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n fiber = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, fiber);\n push(currentTreeHiddenStackCursor, context);\n entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor);\n pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n push(suspenseHandlerStackCursor, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, fiber);\n null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n 22 === fiber.tag\n ? (push(suspenseStackCursor, suspenseStackCursor.current),\n push(suspenseHandlerStackCursor, fiber),\n null === shellBoundary && (shellBoundary = fiber))\n : reuseSuspenseHandlerOnStack();\n}\nfunction reuseSuspenseHandlerOnStack() {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction pushSuspenseListContext(fiber, newContext) {\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n push(suspenseStackCursor, newContext);\n}\nfunction popSuspenseListContext(fiber) {\n pop(suspenseStackCursor);\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n}\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n isSuspenseInstancePending(state) ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n \"independent\" !== node.memoizedProps.revealOrder\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n nextRenderLanes = Component(props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (nextRenderLanes = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n finishRenderingHooks(current);\n return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n numberOfReRenders += 1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n ReactSharedInternals.H = HooksDispatcherOnRerender;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n}\nfunction TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags &= -2053;\n current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(formatProdErrorMessage(467));\n throw Error(formatProdErrorMessage(310));\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = []);\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null === index || null === index.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate));\n return thenable;\n}\nfunction use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_RECOVERABLE_TYPE) return;\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n memoCache.index++;\n return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction$64 = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$64 = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$64 = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n gesture: update.gesture,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction$64 &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else getServerSnapshot = getSnapshot();\n var snapshotChanged = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n );\n snapshotChanged &&\n ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n hook = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n subscribe\n ]);\n subscribe =\n hook.getSnapshot !== getSnapshot ||\n snapshotChanged ||\n (null !== workInProgressHook &&\n 0 !== (workInProgressHook.memoizedState.tag & 1));\n pushSimpleEffect(\n subscribe ? 9 : 8,\n { destroy: void 0 },\n updateStoreInstance.bind(null, fiber, hook, getServerSnapshot, getSnapshot),\n null\n );\n if (subscribe) {\n fiber.flags |= 2048;\n if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n}\nfunction dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n) {\n if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n}\nfunction runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition.types =\n null !== prevTransition ? prevTransition.types : null;\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n } else\n try {\n (prevTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, prevTransition);\n } catch (error$70) {\n onActionError(actionQueue, node, error$70);\n }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n )\n : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var JSCompiler_inline_result = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n if (null === JSCompiler_inline_result$jscomp$0) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n }\n inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n JSCompiler_inline_result$jscomp$0 =\n \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n ? JSCompiler_inline_result$jscomp$0\n : null;\n }\n if (JSCompiler_inline_result$jscomp$0) {\n nextHydratableInstance = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n JSCompiler_inline_result =\n \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n break a;\n }\n }\n throwOnHydrationMismatch(JSCompiler_inline_result);\n }\n JSCompiler_inline_result = !1;\n }\n JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n JSCompiler_inline_result = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = JSCompiler_inline_result;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result\n );\n JSCompiler_inline_result.dispatch = ssrFormState;\n JSCompiler_inline_result = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n JSCompiler_inline_result.queue\n );\n JSCompiler_inline_result = mountWorkInProgressHook();\n JSCompiler_inline_result$jscomp$0 = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result$jscomp$0,\n inRootOrSingleton,\n ssrFormState\n );\n JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n JSCompiler_inline_result.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((deps = create.next),\n (create.next = tag),\n (tag.next = deps),\n (inst.lastEffect = tag));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n { destroy: void 0 },\n create,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n inst,\n create,\n deps\n )));\n}\nfunction mountEffect(create, deps) {\n mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n currentlyRenderingFiber.flags |= 4;\n var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n if (null === componentUpdateQueue)\n (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n (componentUpdateQueue.events = [payload]);\n else {\n var events = componentUpdateQueue.events;\n null === events\n ? (componentUpdateQueue.events = [payload])\n : events.push(payload);\n }\n}\nfunction updateEvent(callback) {\n var ref = updateWorkInProgressHook().memoizedState;\n useEffectEventImpl({ ref: ref, nextImpl: callback });\n return function () {\n if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n}\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n if (\n void 0 === initialValue ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (\n 0 === (renderLanes & 106) ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition.types =\n null !== prevTransition ? prevTransition.types : null;\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane()\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n sharedNotPendingObject,\n null === action\n ? noop\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: sharedNotPendingObject,\n baseState: sharedNotPendingObject,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: sharedNotPendingObject\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n var stateHook = ensureFormComponentIsStateful(formFiber);\n null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n dispatchSetStateInternal(\n formFiber,\n stateHook.next.queue,\n {},\n requestUpdateLane()\n );\n}\nfunction useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n}\nfunction updateId() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane();\n fiber = createUpdate(lane);\n var root$73 = enqueueUpdate(provider, fiber, lane);\n null !== root$73 &&\n (scheduleUpdateOnFiber(root$73, provider, lane),\n entangleTransitions(root$73, provider, lane));\n provider = { cache: createCache() };\n fiber.payload = provider;\n return;\n }\n provider = provider.return;\n }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n var lane = requestUpdateLane();\n action = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, action)\n : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n null !== action &&\n (scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n var lane = requestUpdateLane();\n dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError,\n useEffectEvent: throwInvalidHookError\n },\n HooksDispatcherOnMount = {\n readContext: readContext,\n use: use,\n useCallback: function (callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function (ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n mountEffectImpl(\n 4194308,\n 4,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function (create, deps) {\n return mountEffectImpl(4194308, 4, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function (nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n },\n useReducer: function (reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function (initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: function (initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n },\n useTransition: function () {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else {\n getServerSnapshot = getSnapshot();\n if (null === workInProgressRoot)\n throw Error(formatProdErrorMessage(349));\n 0 !== (workInProgressRootRenderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n hook.memoizedState = getServerSnapshot;\n var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n hook.queue = inst;\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n subscribe\n ]);\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n inst,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n return getServerSnapshot;\n },\n useId: function () {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var JSCompiler_inline_result = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n JSCompiler_inline_result =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + JSCompiler_inline_result;\n identifierPrefix =\n \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n JSCompiler_inline_result = localIdCounter++;\n 0 < JSCompiler_inline_result &&\n (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n identifierPrefix += \"_\";\n } else\n (JSCompiler_inline_result = globalClientIdCounter++),\n (identifierPrefix =\n \"_\" +\n identifierPrefix +\n \"r_\" +\n JSCompiler_inline_result.toString(32) +\n \"_\");\n return (hook.memoizedState = identifierPrefix);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: mountActionState,\n useActionState: mountActionState,\n useOptimistic: function (passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n },\n useEffectEvent: function (callback) {\n var hook = mountWorkInProgressHook(),\n ref = { impl: callback };\n hook.memoizedState = ref;\n return function () {\n if (0 !== (executionContext & 2))\n throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n }\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function () {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: updateActionState,\n useActionState: updateActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh,\n useEffectEvent: updateEvent\n },\n HooksDispatcherOnRerender = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function () {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: rerenderActionState,\n useActionState: rerenderActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh,\n useEffectEvent: updateEvent\n };\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var propName$77 in Component)\n void 0 === newProps[propName$77] &&\n (newProps[propName$77] = Component[propName$77]);\n }\n return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n try {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n } catch (e$78) {\n setTimeout(function () {\n throw e$78;\n });\n }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n try {\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$79) {\n setTimeout(function () {\n throw e$79;\n });\n }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n lane.payload = { element: null };\n lane.callback = function () {\n logUncaughtError(root, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n}\nfunction throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n) {\n sourceFiber.flags |= 32768;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 31:\n case 13:\n case 19:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n ((root = Error(formatProdErrorMessage(422), { cause: value })),\n queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n : (value !== HydrationMismatchException &&\n ((returnFiber = Error(formatProdErrorMessage(423), {\n cause: value\n })),\n queueHydrationError(\n createCapturedValueAtFiber(returnFiber, sourceFiber)\n )),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n 4 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2)),\n !1\n );\n var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [wrapperError])\n : workInProgressRootConcurrentErrors.push(wrapperError);\n 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n returnFiber = sourceFiber.type;\n wrapperError = sourceFiber.stateNode;\n if (\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== wrapperError &&\n \"function\" === typeof wrapperError.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n break;\n case 22:\n if (null !== sourceFiber.memoizedState)\n return (sourceFiber.flags |= 65536), !1;\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n nextProps\n) {\n var nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n null === current &&\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n prevState =\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n if (null !== current) {\n nextProps = workInProgress.child = current.child;\n for (nextChildren = 0; null !== nextProps; )\n (nextChildren =\n nextChildren | nextProps.lanes | nextProps.childLanes),\n (nextProps = nextProps.sibling);\n nextProps = nextChildren & ~prevState;\n } else (nextProps = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n prevState,\n renderLanes,\n nextProps\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (nextProps = workInProgress.lanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n renderLanes,\n nextProps\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(),\n reuseSuspenseHandlerOnStack());\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n (null !== current && 22 === current.tag) ||\n null !== workInProgress.stateNode ||\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes,\n remainingChildLanes\n) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack();\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n workInProgress.childLanes = remainingChildLanes;\n return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: nextProps.mode, children: nextProps.children },\n workInProgress.mode\n );\n nextProps.ref = workInProgress.ref;\n workInProgress.child = nextProps;\n nextProps.return = workInProgress;\n return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n current.flags |= 2;\n popSuspenseHandler(workInProgress);\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n didSuspend = 0 !== (workInProgress.flags & 128);\n workInProgress.flags &= -129;\n if (null === current) {\n if (isHydrating) {\n if (\"hidden\" === nextProps.mode)\n return (\n (current = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.lanes = 536870912),\n (current.memoizedState = { baseLanes: 0, cachePool: null }),\n bailoutOffscreenComponent(null, current)\n );\n pushDehydratedActivitySuspenseHandler(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" === current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n workInProgress.lanes = 536870912;\n return null;\n }\n return mountActivityChildren(workInProgress, nextProps);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated = prevState.dehydrated;\n pushDehydratedActivitySuspenseHandler(workInProgress);\n if (didSuspend)\n if (workInProgress.flags & 256)\n (workInProgress.flags &= -257),\n (workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ));\n else if (null !== workInProgress.memoizedState)\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null);\n else throw Error(formatProdErrorMessage(558));\n else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (didSuspend = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || didSuspend)\n ) {\n if (null === currentTreeHiddenStackCursor.current) {\n nextProps = workInProgressRoot;\n if (\n null !== nextProps &&\n ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n 0 !== dehydrated && dehydrated !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = dehydrated),\n enqueueConcurrentRenderForLane(current, dehydrated),\n scheduleUpdateOnFiber(nextProps, current, dehydrated),\n SelectiveHydrationException)\n );\n renderDidSuspendDelayIfPossible();\n }\n workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n (current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.flags |= 134221824);\n return workInProgress;\n }\n current = createWorkInProgress(current.child, {\n mode: nextProps.mode,\n children: nextProps.children\n });\n current.ref = workInProgress.ref;\n workInProgress.child = current;\n current.return = workInProgress;\n return current;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(formatProdErrorMessage(284));\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current);\n Component = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n var context = emptyContextObject,\n contextType = Component.contextType;\n \"object\" === typeof contextType &&\n null !== contextType &&\n (context = readContext(contextType));\n context = new Component(nextProps, context);\n workInProgress.memoizedState =\n null !== context.state && void 0 !== context.state ? context.state : null;\n context.updater = classComponentUpdater;\n workInProgress.stateNode = context;\n context._reactInternals = workInProgress;\n context = workInProgress.stateNode;\n context.props = nextProps;\n context.state = workInProgress.memoizedState;\n context.refs = {};\n initializeUpdateQueue(workInProgress);\n contextType = Component.contextType;\n context.context =\n \"object\" === typeof contextType && null !== contextType\n ? readContext(contextType)\n : emptyContextObject;\n context.state = workInProgress.memoizedState;\n contextType = Component.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n contextType,\n nextProps\n ),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n ((contextType = context.state),\n \"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount(),\n contextType !== context.state &&\n classComponentUpdater.enqueueReplaceState(context, context.state, null),\n processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308);\n nextProps = !0;\n } else if (null === current) {\n context = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps,\n oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n context.props = oldProps;\n var oldContext = context.context,\n contextType$jscomp$0 = Component.contextType;\n contextType = emptyContextObject;\n \"object\" === typeof contextType$jscomp$0 &&\n null !== contextType$jscomp$0 &&\n (contextType = readContext(contextType$jscomp$0));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n contextType$jscomp$0 =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n (\"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount()),\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (context.props = nextProps),\n (context.state = oldContext),\n (context.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (nextProps = !1));\n } else {\n context = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n contextType = workInProgress.memoizedProps;\n contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n context.props = contextType$jscomp$0;\n getDerivedStateFromProps = workInProgress.pendingProps;\n oldState = context.context;\n oldContext = Component.contextType;\n oldProps = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (oldProps = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n oldProps\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n contextType !== getDerivedStateFromProps ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType$jscomp$0 =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType$jscomp$0,\n nextProps,\n oldState,\n newState,\n oldProps\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof context.componentWillUpdate) ||\n (\"function\" === typeof context.componentWillUpdate &&\n context.componentWillUpdate(nextProps, newState, oldProps),\n \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n context.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldProps\n )),\n \"function\" === typeof context.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof context.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (context.props = nextProps),\n (context.state = newState),\n (context.context = oldProps),\n (nextProps = contextType$jscomp$0))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (nextProps = !1));\n }\n context = nextProps;\n markRef(current, workInProgress);\n nextProps = 0 !== (workInProgress.flags & 128);\n context || nextProps\n ? ((context = workInProgress.stateNode),\n (Component =\n nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : context.render()),\n (workInProgress.flags |= 1),\n null !== current && nextProps\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes),\n (workInProgress.memoizedState = context.state),\n (current = workInProgress.child))\n : (current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ));\n return current;\n}\nfunction mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n showFallback = !1,\n didSuspend = 0 !== (workInProgress.flags & 128),\n JSCompiler_temp;\n (JSCompiler_temp = didSuspend) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & 2));\n JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n showFallback\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack();\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" !== current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n isSuspenseInstanceFallback(current)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912);\n return null;\n }\n didSuspend = nextProps.children;\n nextProps = nextProps.fallback;\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(),\n (showFallback = workInProgress.mode),\n (didSuspend = mountWorkInProgressOffscreenFiber(\n { mode: \"hidden\", children: didSuspend },\n showFallback\n )),\n (nextProps = createFiberFromFragment(\n nextProps,\n showFallback,\n renderLanes,\n null\n )),\n (didSuspend.return = workInProgress),\n (nextProps.return = workInProgress),\n (didSuspend.sibling = nextProps),\n (workInProgress.child = didSuspend),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(null, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(workInProgress, didSuspend);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated$96 = prevState.dehydrated;\n if (null !== dehydrated$96)\n return updateDehydratedSuspenseComponent(\n current,\n workInProgress,\n didSuspend,\n JSCompiler_temp,\n nextProps,\n dehydrated$96,\n prevState,\n renderLanes\n );\n }\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(),\n (showFallback = nextProps.fallback),\n (didSuspend = workInProgress.mode),\n (prevState = current.child),\n (dehydrated$96 = prevState.sibling),\n (nextProps = createWorkInProgress(prevState, {\n mode: \"hidden\",\n children: nextProps.children\n })),\n (nextProps.subtreeFlags = prevState.subtreeFlags & 1206910976),\n null !== dehydrated$96\n ? (showFallback = createWorkInProgress(dehydrated$96, showFallback))\n : ((showFallback = createFiberFromFragment(\n showFallback,\n didSuspend,\n renderLanes,\n null\n )),\n (showFallback.flags |= 2)),\n (showFallback.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextProps.sibling = showFallback),\n (workInProgress.child = nextProps),\n bailoutOffscreenComponent(null, nextProps),\n (nextProps = workInProgress.child),\n (showFallback = current.child.memoizedState),\n null === showFallback\n ? (showFallback = mountSuspenseOffscreenState(renderLanes))\n : ((didSuspend = showFallback.cachePool),\n null !== didSuspend\n ? ((prevState = CacheContext._currentValue),\n (didSuspend =\n didSuspend.parent !== prevState\n ? { parent: prevState, pool: prevState }\n : didSuspend))\n : (didSuspend = getSuspendedCache()),\n (showFallback = {\n baseLanes: showFallback.baseLanes | renderLanes,\n cachePool: didSuspend\n })),\n (nextProps.memoizedState = showFallback),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(current.child, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: nextProps.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_temp = workInProgress.deletions),\n null === JSCompiler_temp\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : JSCompiler_temp.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateDehydratedSuspenseComponent(\n current,\n workInProgress,\n didSuspend,\n didPrimaryChildrenDefer,\n nextProps,\n suspenseInstance,\n suspenseState,\n renderLanes\n) {\n if (didSuspend) {\n if (workInProgress.flags & 256)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )\n );\n if (null !== workInProgress.memoizedState)\n return (\n reuseSuspenseHandlerOnStack(),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n null\n );\n reuseSuspenseHandlerOnStack();\n suspenseInstance = nextProps.fallback;\n suspenseState = workInProgress.mode;\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: nextProps.children },\n suspenseState\n );\n suspenseInstance = createFiberFromFragment(\n suspenseInstance,\n suspenseState,\n renderLanes,\n null\n );\n suspenseInstance.flags |= 2;\n nextProps.return = workInProgress;\n suspenseInstance.return = workInProgress;\n nextProps.sibling = suspenseInstance;\n workInProgress.child = nextProps;\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n nextProps = workInProgress.child;\n nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes);\n nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n didPrimaryChildrenDefer,\n renderLanes\n );\n workInProgress.memoizedState = SUSPENDED_MARKER;\n return bailoutOffscreenComponent(null, nextProps);\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n if (isSuspenseInstanceFallback(suspenseInstance)) {\n didPrimaryChildrenDefer =\n suspenseInstance.nextSibling && suspenseInstance.nextSibling.dataset;\n if (didPrimaryChildrenDefer) var digest = didPrimaryChildrenDefer.dgst;\n didPrimaryChildrenDefer = digest;\n \"\" !== didPrimaryChildrenDefer &&\n ((nextProps = Error(formatProdErrorMessage(419))),\n (nextProps.stack = \"\"),\n (nextProps.digest = didPrimaryChildrenDefer),\n queueHydrationError({ value: nextProps, source: null, stack: null }));\n return retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n }\n didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1);\n didPrimaryChildrenDefer = 0 !== (renderLanes & current.childLanes);\n if (didReceiveUpdate || didPrimaryChildrenDefer) {\n if (null !== currentTreeHiddenStackCursor.current)\n return retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n didPrimaryChildrenDefer = workInProgressRoot;\n if (\n null !== didPrimaryChildrenDefer &&\n ((nextProps = getBumpedLaneForHydration(\n didPrimaryChildrenDefer,\n renderLanes\n )),\n 0 !== nextProps && nextProps !== suspenseState.retryLane)\n )\n throw (\n ((suspenseState.retryLane = nextProps),\n enqueueConcurrentRenderForLane(current, nextProps),\n scheduleUpdateOnFiber(didPrimaryChildrenDefer, current, nextProps),\n SelectiveHydrationException)\n );\n isSuspenseInstancePending(suspenseInstance) ||\n renderDidSuspendDelayIfPossible();\n return retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n }\n if (isSuspenseInstancePending(suspenseInstance))\n return (\n (workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n null\n );\n current = suspenseState.treeContext;\n nextHydratableInstance = getNextHydratable(suspenseInstance.nextSibling);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !1;\n null !== current && restoreSuspendedTreeContext(workInProgress, current);\n workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n nextProps.children\n );\n workInProgress.flags |= 134221824;\n return workInProgress;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction findLastContentRow(firstChild) {\n for (var lastContentRow = null; null !== firstChild; ) {\n var currentRow = firstChild.alternate;\n null !== currentRow &&\n null === findFirstSuspended(currentRow) &&\n (lastContentRow = firstChild);\n firstChild = firstChild.sibling;\n }\n return lastContentRow;\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode,\n treeForkCount\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode,\n treeForkCount: treeForkCount\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode),\n (renderState.treeForkCount = treeForkCount));\n}\nfunction reverseChildren(fiber) {\n var row = fiber.child;\n for (fiber.child = null; null !== row; ) {\n var nextRow = row.sibling;\n row.sibling = fiber.child;\n fiber.child = row;\n row = nextRow;\n }\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n var suspenseContext = suspenseStackCursor.current;\n if (workInProgress.flags & 128)\n return pushSuspenseListContext(workInProgress, suspenseContext), null;\n var shouldForceFallback = 0 !== (suspenseContext & 2);\n shouldForceFallback\n ? ((suspenseContext = (suspenseContext & 1) | 2),\n (workInProgress.flags |= 128))\n : (suspenseContext &= 1);\n pushSuspenseListContext(workInProgress, suspenseContext);\n \"backwards\" === revealOrder && null !== current\n ? (reverseChildren(current),\n reconcileChildren(current, workInProgress, nextProps, renderLanes),\n reverseChildren(current))\n : reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = isHydrating ? treeForkCount : 0;\n if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n switch (revealOrder) {\n case \"backwards\":\n renderLanes = findLastContentRow(workInProgress.child);\n null === renderLanes\n ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling),\n (renderLanes.sibling = null),\n reverseChildren(workInProgress));\n initSuspenseListRenderState(\n workInProgress,\n !0,\n revealOrder,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"unstable_legacy-backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"together\":\n initSuspenseListRenderState(\n workInProgress,\n !1,\n null,\n null,\n void 0,\n nextProps\n );\n break;\n case \"independent\":\n workInProgress.memoizedState = null;\n break;\n default:\n (renderLanes = findLastContentRow(workInProgress.child)),\n null === renderLanes\n ? ((revealOrder = workInProgress.child),\n (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null)),\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode,\n nextProps\n );\n }\n return workInProgress.child;\n}\nfunction updateContextProvider(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n pushProvider(workInProgress, workInProgress.type, newProps.value);\n reconcileChildren(current, workInProgress, newProps.children, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(formatProdErrorMessage(153));\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 31:\n if (null !== workInProgress.memoizedState)\n return (\n (workInProgress.flags |= 128),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n null\n );\n break;\n case 13:\n var state$108 = workInProgress.memoizedState;\n if (null !== state$108) {\n if (null !== state$108.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n state$108 = propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n );\n var primaryChildLanes = workInProgress.child.childLanes;\n if (state$108 || 0 !== (renderLanes & primaryChildLanes))\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n if (workInProgress.flags & 128)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n primaryChildLanes = 0 !== (current.flags & 128);\n state$108 = 0 !== (renderLanes & workInProgress.childLanes);\n state$108 ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (state$108 = 0 !== (renderLanes & workInProgress.childLanes)));\n if (primaryChildLanes) {\n if (state$108)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n primaryChildLanes = workInProgress.memoizedState;\n null !== primaryChildLanes &&\n ((primaryChildLanes.rendering = null),\n (primaryChildLanes.tail = null),\n (primaryChildLanes.lastEffect = null));\n pushSuspenseListContext(workInProgress, suspenseStackCursor.current);\n if (state$108) break;\n else return null;\n case 22:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n )\n );\n case 24:\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n if (null !== current)\n if (current.memoizedProps !== workInProgress.pendingProps)\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else\n (didReceiveUpdate = !1),\n isHydrating &&\n 0 !== (workInProgress.flags & 1048576) &&\n pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: {\n var props = workInProgress.pendingProps;\n current = resolveLazy(workInProgress.elementType);\n workInProgress.type = current;\n if (\"function\" === typeof current)\n shouldConstruct(current)\n ? ((props = resolveClassComponentProps(current, props)),\n (workInProgress.tag = 1),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current) {\n var $$typeof = current.$$typeof;\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n workInProgress.tag = 11;\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_CONTEXT_TYPE) {\n workInProgress.tag = 10;\n workInProgress.type = current;\n workInProgress = updateContextProvider(\n null,\n workInProgress,\n renderLanes\n );\n break a;\n }\n }\n workInProgress = getComponentNameFromType(current) || current;\n throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n }\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (props = workInProgress.type),\n ($$typeof = resolveClassComponentProps(\n props,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n props,\n $$typeof,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current) throw Error(formatProdErrorMessage(387));\n props = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n $$typeof = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, props, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n props = nextState.cache;\n pushProvider(workInProgress, CacheContext, props);\n props !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n props = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: props,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else if (props !== $$typeof) {\n $$typeof = createCapturedValueAtFiber(\n Error(formatProdErrorMessage(424)),\n workInProgress\n );\n queueHydrationError($$typeof);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !0;\n renderLanes = mountChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n );\n for (workInProgress.child = renderLanes; renderLanes; )\n (renderLanes.flags = (renderLanes.flags & -3) | 134221824),\n (renderLanes = renderLanes.sibling);\n }\n else {\n resetHydrationState();\n if (props === $$typeof) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(current, workInProgress, props, renderLanes);\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (renderLanes = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = renderLanes)\n : isHydrating ||\n (workInProgress.stateNode = createHoistableInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current,\n workInProgress\n ))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((props = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current\n )),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n ($$typeof = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n (nextHydratableInstance = getNextHydratable(props.firstChild)))\n : (nextHydratableInstance = $$typeof)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n if (null === current && isHydrating) {\n if (($$typeof = props = nextHydratableInstance))\n (props = canHydrateInstance(\n props,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== props\n ? ((workInProgress.stateNode = props),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(props.firstChild)),\n (rootOrSingletonContext = !1),\n ($$typeof = !0))\n : ($$typeof = !1);\n $$typeof || throwOnHydrationMismatch(workInProgress);\n }\n pushHostContext(workInProgress);\n $$typeof = workInProgress.type;\n prevState = workInProgress.pendingProps;\n nextState = null !== current ? current.memoizedProps : null;\n props = prevState.children;\n shouldSetTextContent($$typeof, prevState)\n ? (props = null)\n : null !== nextState &&\n shouldSetTextContent($$typeof, nextState) &&\n (workInProgress.flags |= 32);\n null !== workInProgress.memoizedState &&\n (($$typeof = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = $$typeof));\n markRef(current, workInProgress);\n reconcileChildren(current, workInProgress, props, renderLanes);\n return workInProgress.child;\n case 6:\n if (null === current && isHydrating) {\n if ((current = renderLanes = nextHydratableInstance))\n (renderLanes = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== renderLanes\n ? ((workInProgress.stateNode = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (current = !0))\n : (current = !1);\n current || throwOnHydrationMismatch(workInProgress);\n }\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (props = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n ))\n : reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n (props = workInProgress.pendingProps),\n markRef(current, workInProgress),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return updateContextProvider(current, workInProgress, renderLanes);\n case 9:\n return (\n ($$typeof = workInProgress.type._context),\n (props = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress),\n ($$typeof = readContext($$typeof)),\n (props = props($$typeof)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 31:\n return updateActivityComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n );\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (props = readContext(CacheContext)),\n null === current\n ? (($$typeof = peekCacheFromPool()),\n null === $$typeof &&\n (($$typeof = workInProgressRoot),\n (prevState = createCache()),\n ($$typeof.pooledCache = prevState),\n prevState.refCount++,\n null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n ($$typeof = prevState)),\n (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, $$typeof))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n ($$typeof = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n $$typeof.parent !== props\n ? (($$typeof = { parent: props, cache: props }),\n (workInProgress.memoizedState = $$typeof),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n $$typeof),\n pushProvider(workInProgress, CacheContext, props))\n : ((props = prevState.cache),\n pushProvider(workInProgress, CacheContext, props),\n props !== $$typeof.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 30:\n return (\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n autoName: null,\n paired: null,\n clones: null,\n ref: null\n }),\n (props = workInProgress.pendingProps),\n null != props.name && \"auto\" !== props.name\n ? (workInProgress.flags |= null === current ? 18882560 : 18874368)\n : isHydrating && pushMaterializedTreeId(workInProgress),\n null !== current && current.memoizedProps.name !== props.name\n ? (workInProgress.flags |= 4194816)\n : markRef(current, workInProgress),\n reconcileChildren(current, workInProgress, props.children, renderLanes),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n oldProps,\n newProps,\n renderLanes\n) {\n var JSCompiler_temp;\n if ((JSCompiler_temp = 0 !== (workInProgress.mode & 32)))\n JSCompiler_temp =\n null === oldProps\n ? maySuspendCommit(type, newProps)\n : maySuspendCommit(type, newProps) &&\n (newProps.src !== oldProps.src ||\n newProps.srcSet !== oldProps.srcSet);\n if (JSCompiler_temp) {\n if (\n ((workInProgress.flags |= 16777216),\n (renderLanes & 335544128) === renderLanes)\n )\n if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n workInProgress.flags &= -16777217;\n else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"visible\":\n break;\n case \"collapsed\":\n for (\n var tailNode = renderState.tail, lastTailNode = null;\n null !== tailNode;\n\n )\n null !== tailNode.alternate && (lastTailNode = tailNode),\n (tailNode = tailNode.sibling);\n null === lastTailNode\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode.sibling = null);\n break;\n default:\n hasRenderedATailFallback = renderState.tail;\n for (tailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (tailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === tailNode\n ? (renderState.tail = null)\n : (tailNode.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$113 = completedWork.child; null !== child$113; )\n (newChildLanes |= child$113.lanes | child$113.childLanes),\n (subtreeFlags |= child$113.subtreeFlags & 1206910976),\n (subtreeFlags |= child$113.flags & 1206910976),\n (child$113.return = completedWork),\n (child$113 = child$113.sibling);\n else\n for (child$113 = completedWork.child; null !== child$113; )\n (newChildLanes |= child$113.lanes | child$113.childLanes),\n (subtreeFlags |= child$113.subtreeFlags),\n (subtreeFlags |= child$113.flags),\n (child$113.return = completedWork),\n (child$113 = child$113.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext);\n popHostContainer();\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? markUpdate(workInProgress)\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n var type = workInProgress.type,\n nextResource = workInProgress.memoizedState;\n null === current\n ? (markUpdate(workInProgress),\n null !== nextResource\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n null,\n newProps,\n renderLanes\n )))\n : nextResource\n ? nextResource !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : ((current = current.memoizedProps),\n current !== newProps && markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n current,\n newProps,\n renderLanes\n ));\n return null;\n case 27:\n popHostContext(workInProgress);\n renderLanes = rootInstanceStackCursor.current;\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n workInProgress.subtreeFlags &= -33554433;\n return null;\n }\n current = contextStackCursor.current;\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n workInProgress.subtreeFlags &= -33554433;\n return null;\n case 5:\n popHostContext(workInProgress);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n workInProgress.subtreeFlags &= -33554433;\n return null;\n }\n nextResource = contextStackCursor.current;\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, nextResource);\n else {\n var ownerDocument = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n );\n switch (nextResource) {\n case 1:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case 2:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n default:\n switch (type) {\n case \"svg\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case \"math\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n case \"script\":\n nextResource = ownerDocument.createElement(\"div\");\n nextResource.innerHTML = \" + diff --git a/suites-experimental/stormbox-react/dist/resources.txt b/suites-experimental/stormbox-react/dist/resources.txt index 6212488d9..8a9ac7846 100644 --- a/suites-experimental/stormbox-react/dist/resources.txt +++ b/suites-experimental/stormbox-react/dist/resources.txt @@ -7,7 +7,7 @@ assets/Metropolis-Light-zcEanPsD.woff2 assets/Metropolis-Regular-DKepXnDq.woff2 assets/Metropolis-SemiBold-D_dLm6Ff.woff2 assets/index-AWVjlOug.css -assets/index-CBEgGFb_.js -assets/index-CBEgGFb_.js.map +assets/index-D2S-P1q-.js +assets/index-D2S-P1q-.js.map favicon-32.png index.html diff --git a/suites-experimental/stormbox-react/package-lock.json b/suites-experimental/stormbox-react/package-lock.json index cb4f50ff7..f6937dc60 100644 --- a/suites-experimental/stormbox-react/package-lock.json +++ b/suites-experimental/stormbox-react/package-lock.json @@ -23,7 +23,248 @@ "@types/react-dom": "19.3.0", "@vitejs/plugin-react": "6.1.2", "typescript": "6.0.3", - "vite": "8.0.16" + "vite": "8.0.16", + "vite-plugin-svgr": "5.2.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.13", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.13.tgz", + "integrity": "sha512-j1nvOQCZYSgp7HLmisnCXFTpVvFODiijQ9QHkORfGKWH6YDtskTEeCJS7eV545GZ9UBzrq0e2xsOd5QQ5PjIqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.13", + "@babel/helper-compilation-targets": "^7.29.13", + "@babel/helper-module-transforms": "^7.29.13", + "@babel/helpers": "^7.29.13", + "@babel/parser": "^7.29.13", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.13", + "@babel/types": "^7.29.11", + "@jridgewell/remapping": "^2.3.5", + "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.29.14", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.14.tgz", + "integrity": "sha512-qSY56jgW5JnSXzuekLVil6zaOQxOCtOHidr65KkaMBw772IuAY28Qx4ZykAcDn8+FRF15qk80XzKwgSc/RYW6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.14", + "@babel/types": "^7.29.14", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.13", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.13.tgz", + "integrity": "sha512-8WxJ4/Vmes3ghacj8VOJy3NW8eyHiFY/4thU/LSBuBE470+igjR/j1ZTNn8fV5VdNrLx6iXUwig526UdOvfP0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.14.tgz", + "integrity": "sha512-2XDvQVd9JESaOgGc4jT2/jquTAO7ppA5noTZQqH+MmZ89yjCzScLwtCPbWtkPZylL+TLWR49IwWmk+QkRR4GsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.14" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.14", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.14.tgz", + "integrity": "sha512-CXvKMFvM80ihI7Vox9jb+kQjnyjESQNPM+vB7U0Zz6TWuZA+Z/FL0QPMH300h33qJtIx+REeBhXqWOPW48TcAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.14", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.14.tgz", + "integrity": "sha512-6E3Mi1r0B0umq6vmZa4/78q+64fqO2YY0THUdjDPKUCKhNb0yQy5NQIaPHCSD3ryTgiTss//P4JsWS80AsZ6LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.14" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.14", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.14.tgz", + "integrity": "sha512-VL220vXuyO2z3rNIQwY7ftj9UwpqOt+33sH+sBWkOekbsSR2g7EEMnOx24ZlCH0xOA3DM/33SifVFGbnJD8r/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.14" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.14", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.14.tgz", + "integrity": "sha512-RAdQJrBgmIH1FWvN0X+1hoDxzMzlP4cv/1Zi4dn4tG1H0cTb+rw7CzUxQJhp1f4ANd8j5vH3fy8BAWFGkBDEsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.14", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.14", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.14", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.14", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.14.tgz", + "integrity": "sha512-UjI/dKmwJwT9pOszJitq2G6EObZPnsZUfdCr92z2TlF3EZK9J3EdfOKUrCzHl6wFthbzwhzl1Soc/UIwxRiq6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.14", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@emnapi/core": { @@ -60,6 +301,56 @@ "tslib": "^2.4.0" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.3.tgz", + "integrity": "sha512-lhTtjtoEArWBjismtfS761S9Hlyn+nIZqOZVYoZ1Xn82PMNMVnk+jj/NhC4fAXGTs7ydONcJiR5vyQBTMDu27g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.5.tgz", @@ -374,6 +665,254 @@ "dev": true, "license": "MIT" }, + "node_modules/@rollup/pluginutils": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.5.1.tgz", + "integrity": "sha512-P9ZvnfouRu4MSC+ilERaw6FmZs8zqKhpHxEs4aGDGWQAMzQGXnhvCSvoNwokfNvdt7t3Y5Y4p6gStQgezeIqug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, "node_modules/@tanstack/react-virtual": { "version": "3.13.26", "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.26.tgz", @@ -412,6 +951,13 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/estree": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.10.tgz", + "integrity": "sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/react": { "version": "19.3.0", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", @@ -419,52 +965,184 @@ "devOptional": true, "license": "MIT", "dependencies": { - "csstype": "^3.2.2" + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.152.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.37", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.37.tgz", + "integrity": "sha512-QYph+vfurmaxhNwi9FprfmtkT5cx2Keg8FzZ0vnjO8ukscIybVyZGMFwdllKGlTI6qyU8ck43OM9UXh+IFJihQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.29.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.5.tgz", + "integrity": "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ==", + "dev": true, + "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": { + "baseline-browser-mapping": "^2.11.33", + "caniuse-lite": "^1.0.30001819", + "electron-to-chromium": "^1.5.464", + "node-releases": "^2.0.60", + "update-browserslist-db": "^1.3.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/@types/react-dom": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", - "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "^19.3.0" + "engines": { + "node": ">=6" } }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "license": "MIT", - "optional": true + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@vitejs/plugin-react": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", - "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "node_modules/caniuse-lite": { + "version": "1.0.30001826", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001826.tgz", + "integrity": "sha512-wTB+9tIbLro/BCXwLuNV1meHE4L9dS6dArMDwgYfNBPMYScqClHyGunhkCSDtHhe/69Xl0sHlKgBVZ+fNsYtWA==", + "dev": true, + "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/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "license": "MIT", "dependencies": { - "@rolldown/pluginutils": "^1.0.1" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" }, "peerDependencies": { - "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", - "babel-plugin-react-compiler": "^1.0.0", - "oxc-transform-react": "^0.152.0", - "vite": "^8.0.0" + "typescript": ">=4.9.5" }, "peerDependenciesMeta": { - "@rolldown/plugin-babel": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "oxc-transform-react": { + "typescript": { "optional": true } } @@ -476,6 +1154,24 @@ "devOptional": true, "license": "MIT" }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -495,6 +1191,64 @@ "@types/trusted-types": "^2.0.7" } }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.485", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.485.tgz", + "integrity": "sha512-m3uadzR0Z+sR19HGWgfxoZcKv9hE/edVM9OZ+FJ4wNRyfuFtkwZJIDoehEty5sisYVwmge8lKV1tenWOyClVgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -528,6 +1282,103 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/lightningcss": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", @@ -801,6 +1652,13 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, "node_modules/linkify-string": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/linkify-string/-/linkify-string-4.3.3.tgz", @@ -816,6 +1674,26 @@ "integrity": "sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==", "license": "MIT" }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/lucide-react": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.16.0.tgz", @@ -825,6 +1703,13 @@ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/nanoid": { "version": "3.3.20", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", @@ -844,6 +1729,69 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-releases": { + "version": "2.0.64", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.64.tgz", + "integrity": "sha512-zAPCKqMcnqs2nGy6nlkm7JduFseiBJy3EXHGLh+8pFR+TxGCBxxiEN21+UROU5CKwX/f4TlUcYjiM+vs/tsyxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -914,6 +1862,16 @@ "react": "^19.3.1" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/rolldown": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", @@ -954,6 +1912,27 @@ "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", "license": "MIT" }, + "node_modules/semver": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.2.tgz", + "integrity": "sha512-GYrCADwpu6yV5OAvchkQ27Z5wwMxWAEMg5NNWjyHh/5DboFFqbdbvYNIvZouQpxXyeMPoTOh0vdPYKlf0ZswdQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/source-map-js": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", @@ -970,6 +1949,16 @@ "integrity": "sha512-XHaD9c0/FkkznzZ4xq+zWh0De/e5wb3fD//365yEpAKJD0kpERMtTJ5X0K7usfnp0Bcx/Vnx88hdc9PP71RsSg==", "license": "MIT" }, + "node_modules/svg-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.1.0.tgz", + "integrity": "sha512-bwLf38YmY+TDYHJw1Ex0Co8c4yeXuJAo8YnXGZrscxrvYoVVIvLeniEkV1Ks/54VteMnL4FtyN1+P+TZJdUPmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/tinyglobby": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", @@ -992,8 +1981,7 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "0BSD", - "optional": true + "license": "0BSD" }, "node_modules/typescript": { "version": "6.0.3", @@ -1009,6 +1997,37 @@ "node": ">=14.17" } }, + "node_modules/update-browserslist-db": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz", + "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==", + "dev": true, + "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.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/vite": { "version": "8.0.16", "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", @@ -1087,6 +2106,28 @@ } } }, + "node_modules/vite-plugin-svgr": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-5.2.0.tgz", + "integrity": "sha512-qj2eAKF8C6PZWemVTvQA0xgQIcP1hHU6Buh7fl6BhvayWwnuxE+z417miKxeDvRWbDrupQ1oK99hfxElopJ3sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.3.0", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": ">=3.0.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, "node_modules/zustand": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.15.tgz", diff --git a/suites-experimental/stormbox-react/package.json b/suites-experimental/stormbox-react/package.json index df053cac3..90169debc 100644 --- a/suites-experimental/stormbox-react/package.json +++ b/suites-experimental/stormbox-react/package.json @@ -26,6 +26,7 @@ "@types/react-dom": "19.3.0", "@vitejs/plugin-react": "6.1.2", "typescript": "6.0.3", - "vite": "8.0.16" + "vite": "8.0.16", + "vite-plugin-svgr": "5.2.0" } } diff --git a/suites-experimental/stormbox-react/src/App.tsx b/suites-experimental/stormbox-react/src/App.tsx index e906cdd2a..4c47e1d4b 100644 --- a/suites-experimental/stormbox-react/src/App.tsx +++ b/suites-experimental/stormbox-react/src/App.tsx @@ -6,7 +6,7 @@ import { Bug, Lightbulb, Moon, Plus, Sun, X, } from 'lucide-react'; -import mailGlyph from './assets/icons/tb-mail-glyph.svg?raw'; +import mailGlyph from './assets/icons/tb-mail-glyph.svg?react'; import { ACCOUNT } from './data/mailbox'; import { INBOX_FOLDER_ID, folderCounts, useMailStore } from './store/mail-store'; import { useComposeStore } from './store/compose-store'; @@ -15,7 +15,7 @@ import { } from './store/ui-store'; import { useColumnResize } from './hooks/useColumnResize'; import { useShortcuts } from './hooks/useShortcuts'; -import { AppButton, RawIcon } from './components/base'; +import { AppButton, SvgIcon } from './components/base'; import { AccountAvatarMenu, AppDrawer, AppSpaces, StorageUsageBar, } from './components/Shell'; @@ -202,7 +202,7 @@ export function App() {
- + Mail
diff --git a/suites-experimental/stormbox-react/src/components/FolderTree.tsx b/suites-experimental/stormbox-react/src/components/FolderTree.tsx index 418261351..7d805dc8a 100644 --- a/suites-experimental/stormbox-react/src/components/FolderTree.tsx +++ b/suites-experimental/stormbox-react/src/components/FolderTree.tsx @@ -6,16 +6,16 @@ import { DEFAULT_MESSAGE_TAGS } from '../utils/message-tags'; import { folderBadgeCount, folderCompare, folderPresentation, isMainFolder, } from '../utils/folder-presentation'; -import type { Folder, ViewId } from '../types'; +import type { Folder, SvgComponent, ViewId } from '../types'; import { STARRED_KEYWORD, folderCounts, isTagViewId, tagViewIdFor, tagViewKeyword, useMailStore, } from '../store/mail-store'; import { readMessageDrag, useMessageDrag } from '../hooks/useMessageDrag'; -import { RawIcon } from './base'; +import { SvgIcon } from './base'; interface TreeNode extends Folder { depth: number; - icon: string; + icon: SvgComponent; tone: string; children: TreeNode[]; unread_emails: number; @@ -125,7 +125,7 @@ const FolderNode = memo(function FolderNode({ )} {archiveAction ? ( ) : null} {deleteAction ? ( diff --git a/suites-experimental/stormbox-react/src/components/MessageView.tsx b/suites-experimental/stormbox-react/src/components/MessageView.tsx index c584029ef..a6fcfe10d 100644 --- a/suites-experimental/stormbox-react/src/components/MessageView.tsx +++ b/suites-experimental/stormbox-react/src/components/MessageView.tsx @@ -7,11 +7,11 @@ import { ArrowLeft, ChevronDown, ChevronUp, Clock, Download, Moon, Paperclip, Sun, Trash2, } from 'lucide-react'; -import archiveIcon from '../assets/icons/tb-folder-archive.svg?raw'; -import junkIcon from '../assets/icons/tb-folder-spam.svg?raw'; -import forwardIcon from '../assets/icons/tb-forward.svg?raw'; -import replyIcon from '../assets/icons/tb-reply.svg?raw'; -import replyAllIcon from '../assets/icons/tb-reply-all.svg?raw'; +import archiveIcon from '../assets/icons/tb-folder-archive.svg?react'; +import junkIcon from '../assets/icons/tb-folder-spam.svg?react'; +import forwardIcon from '../assets/icons/tb-forward.svg?react'; +import replyIcon from '../assets/icons/tb-reply.svg?react'; +import replyAllIcon from '../assets/icons/tb-reply-all.svg?react'; import { LOCALE, NOW, TIME_ZONE } from '../clock'; import { bodyFor } from '../data/bodies'; import type { Attachment } from '../types'; @@ -28,7 +28,7 @@ import { plaintextToHtml } from '../utils/plaintext-html'; import { shortFrom } from '../utils/sender-avatar'; import { formatBytes } from '../utils/format-bytes'; import { DEFAULT_MESSAGE_TAGS, resolveMessageTags } from '../utils/message-tags'; -import { AppIconButton, MaximizeButton, RawIcon } from './base'; +import { AppIconButton, MaximizeButton, SvgIcon } from './base'; import { MessageTagChip, MessageTagStack, TagPickerPopover, type PopoverAnchor } from './Tags'; const MIN_EMAIL_LAYOUT_WIDTH = 400; @@ -355,25 +355,25 @@ export function MessageView({ maximized, onToggleMaximized }: { maximized: boole <> {!inArchive ? ( mail().archiveMessages(ids)}> - + ) : null} {!inJunk ? ( mail().junkMessages(ids)}> - + ) : null} mail().destroyMessages(ids)}> compose().prepareReply(message, false)}> - + compose().prepareReply(message, true)}> - + compose().prepareForward(message)}> - + Account Settings - + Contact Support {OTHER_APPS.map((app) => ( - + {app.name} ))} diff --git a/suites-experimental/stormbox-react/src/components/base.tsx b/suites-experimental/stormbox-react/src/components/base.tsx index a047c80af..acee1476b 100644 --- a/suites-experimental/stormbox-react/src/components/base.tsx +++ b/suites-experimental/stormbox-react/src/components/base.tsx @@ -5,9 +5,14 @@ import type { } from 'react'; import { Expand, Shrink } from 'lucide-react'; -/** Renders one of the project's own SVG assets (never message content). */ -export function RawIcon({ svg, className }: { svg: string; className?: string }) { - return
- ) : textHtml ? ( -
+ ) : textBody ? ( +
{textBody}
) : (

This message has no content.

)} diff --git a/suites-experimental/stormbox-react/src/utils/plaintext-html.ts b/suites-experimental/stormbox-react/src/utils/plaintext-body.tsx similarity index 56% rename from suites-experimental/stormbox-react/src/utils/plaintext-html.ts rename to suites-experimental/stormbox-react/src/utils/plaintext-body.tsx index 534e24a18..7ae15b35d 100644 --- a/suites-experimental/stormbox-react/src/utils/plaintext-html.ts +++ b/suites-experimental/stormbox-react/src/utils/plaintext-body.tsx @@ -1,5 +1,5 @@ /** - * Render a text/plain message body as display HTML, mirroring how + * Render a text/plain message body as a React tree, mirroring how * Thunderbird Desktop presents plaintext mail. * * Thunderbird (mailnews mime + mozITXTToHTMLConv) escapes the text, @@ -13,10 +13,11 @@ * - line breaks / blank lines / indentation are preserved because the * host element uses `white-space: pre-wrap` (so the `\n` separators * below render as breaks); - * - link detection is delegated to `linkify-string` (linkifyjs), which - * is more robust than a hand-rolled regex and escapes HTML itself, - * so its output is safe to inject (the caller still runs DOMPurify - * for defence in depth); + * - link detection is delegated to linkifyjs's tokenizer; link tokens + * become `` elements and everything else stays a plain string, + * so React's own escaping makes the output safe without an HTML + * sanitizer. Hrefs are still checked against the same scheme + * allowlist the HTML path uses; * - consecutive quoted lines are grouped into nested * `
` with the `>` markers * stripped; the bar colour per level is styled by the viewer. @@ -26,18 +27,13 @@ * asks for the line breaks of the MIME content to stay visible. */ -import linkifyStr from 'linkify-string'; +import type { ReactNode } from 'react'; +import { tokenize } from 'linkifyjs'; -// Bare hosts (www.example.com) and schemeless domains resolve to https; -// every generated link opens in a new tab without leaking the opener. -const LINKIFY_OPTIONS = { - defaultProtocol: 'https', - target: '_blank', - rel: 'noopener noreferrer', - // Keep newlines as-is; the host renders with white-space: pre-wrap, so - // converting them to
would double the line breaks. - nl2br: false, -} as const; +import { ALLOWED_URI_REGEXP } from './message-html'; + +// Bare hosts (www.example.com) and schemeless domains resolve to https. +const DEFAULT_PROTOCOL = 'https'; // One quote marker: optional leading whitespace, a single '>', then an // optional single space-stuffing character. Applied repeatedly to count @@ -67,46 +63,61 @@ function quoteClass(depth: number): string { return `pt-quote pt-quote--l${level}`; } +/** Append one line's text and links to `out`; every link opens in a new tab without leaking the opener. */ +function renderLine(content: string, lineIndex: number, out: ReactNode[]): void { + const tokens = tokenize(content); + for (let t = 0; t < tokens.length; t += 1) { + const token = tokens[t]; + const text = token.toString(); + if (token.isLink) { + const href = token.toHref(DEFAULT_PROTOCOL); + if (ALLOWED_URI_REGEXP.test(href)) { + out.push( +
{text}, + ); + continue; + } + } + out.push(text); + } +} + /** * Render the lines at `level` (0 = unquoted). Consecutive deeper lines - * are wrapped in a nested blockquote. Returns the HTML for this level + * are wrapped in a nested blockquote. Returns the nodes for this level * and the index of the first line that belongs to an ancestor level. */ -function renderLevel(lines: ParsedLine[], start: number, level: number): [string, number] { - let html = ''; - let buffer: string[] = []; +function renderLevel(lines: ParsedLine[], start: number, level: number): [ReactNode[], number] { + const out: ReactNode[] = []; + // Lines at the same level are separated by '\n'; a blockquote breaks the run. + let inRun = false; let i = start; - const flush = () => { - if (buffer.length) { - html += buffer.join('\n'); - buffer = []; - } - }; - while (i < lines.length) { - const { depth } = lines[i]; + const { depth, content } = lines[i]; if (depth < level) break; if (depth === level) { - buffer.push(linkifyStr(lines[i].content, LINKIFY_OPTIONS)); + if (inRun) out.push('\n'); + renderLine(content, i, out); + inRun = true; i += 1; } else { - flush(); const [inner, next] = renderLevel(lines, i, level + 1); - html += `
${inner}
`; + out.push(
{inner}
); + inRun = false; i = next; } } - flush(); - return [html, i]; + return [out, i]; } /** - * Convert a decoded text/plain body into display HTML. Intended to be - * placed inside an element styled with `white-space: pre-wrap`. + * Convert a decoded text/plain body into display nodes, or null when there + * is no text. Intended to be placed inside an element styled with + * `white-space: pre-wrap`. */ -export function plaintextToHtml(text: string | null | undefined): string { - if (!text) return ''; +export function renderPlaintextBody(text: string | null | undefined): ReactNode[] | null { + if (!text) return null; const normalized = String(text).replace(/\r\n?/g, '\n'); const lines = normalized.split('\n').map(parseLine); return renderLevel(lines, 0, 0)[0]; From d0cee54cee743a470ae7fe1e4575cbee4d046582 Mon Sep 17 00:00:00 2001 From: Jeff Muizelaar Date: Fri, 13 Nov 2026 11:14:43 -0500 Subject: [PATCH 9/9] Stormbox-React: Document how icons and plain-text bodies differ from Stormbox-Vue The svgr and plaintext-body ports made the README's "copied verbatim" list for src/utils/ wrong and changed what the workload does compared with Stormbox and Stormbox-Vue. Fix the list and note the difference, including that React-vs-Vue comparisons now include it. --- suites-experimental/stormbox-react/README.md | 26 ++++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/suites-experimental/stormbox-react/README.md b/suites-experimental/stormbox-react/README.md index f9af28b03..e322c8c15 100644 --- a/suites-experimental/stormbox-react/README.md +++ b/suites-experimental/stormbox-react/README.md @@ -69,10 +69,12 @@ favicons (they come from a server-side proxy) and file attachments. - `src/utils/` holds Stormbox's framework-independent modules copied verbatim: HTML sanitizing and srcdoc building, dark-mode email - adaptation, plain-text rendering, address parsing, tag model, folder - presentation, sender avatars. Beyond import paths, only - `message-row-presentation.ts` and `compose-quote.ts` changed, to format - dates against the fixed clock in `src/clock.ts`. + adaptation, address parsing, tag model, folder presentation, sender + avatars. Beyond import paths, `message-row-presentation.ts` and + `compose-quote.ts` changed to format dates against the fixed clock in + `src/clock.ts`, and `folder-presentation.ts` maps roles to SVG + components instead of SVG strings. Stormbox's `plaintext-html.ts` is + replaced by `plaintext-body.tsx` (see below). - `src/styles/styles.css` and `app.css` are Stormbox's global and shell stylesheets. `components.css` is generated from the components' Vue `