From acd50ece9b272957fb2e18f92bbf292d74871a39 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Sun, 21 Apr 2024 21:38:51 -1000 Subject: [PATCH] feat: :recycle: Change code to build in static mode, add timelines, profiles and notes, new design --- Dockerfile | 7 +- app.vue | 17 +- bun.lockb | Bin 481396 -> 498588 bytes components/LoginInput.vue | 26 +- components/buttons/base.vue | 16 ++ components/buttons/primary.vue | 15 ++ components/buttons/secondary.vue | 15 ++ components/headers/navbar.vue | 81 ++++++ components/skeleton/Skeleton.vue | 44 ++++ .../social-elements/notes/attachment.vue | 55 ++++ components/social-elements/notes/mention.vue | 16 ++ components/social-elements/notes/note.vue | 93 +++++++ composables/Account.ts | 12 + composables/AccountSearch.ts | 13 + composables/BaseUrl.ts | 3 + composables/Config.ts | 12 + composables/Instance.ts | 9 + composables/Megalodon.ts | 13 + composables/Note.ts | 9 + composables/OAuthProviders.ts | 12 + composables/ParsedContent.ts | 59 +++++ composables/ResolveMentions.ts | 20 ++ composables/useConfig.ts | 26 -- composables/usePublicTimeline.ts | 86 ++++++ emails/welcome.vue | 16 -- layouts/default.vue | 9 + nuxt.config.ts | 25 +- package.json | 87 +++--- pages/[username]/[uuid].vue | 69 +---- pages/[username]/index.vue | 125 ++++----- pages/index.vue | 104 ++++---- pages/oauth/authorize.vue | 169 ++++++------ pages/oauth/{redirect.vue => consent.vue} | 60 ++--- pages/public.vue | 43 +++ pages/register/index.vue | 249 ++++++++---------- pages/register/success.vue | 10 +- tailwind.config.ts | 23 +- types/mastodon/account.ts | 34 +++ types/mastodon/activity.ts | 6 + types/mastodon/announcement.ts | 39 +++ types/mastodon/application.ts | 5 + types/mastodon/async_attachment.ts | 13 + types/mastodon/attachment.ts | 47 ++++ types/mastodon/card.ts | 16 ++ types/mastodon/context.ts | 6 + types/mastodon/conversation.ts | 9 + types/mastodon/emoji.ts | 7 + types/mastodon/featured_tag.ts | 6 + types/mastodon/field.ts | 6 + types/mastodon/filter.ts | 10 + types/mastodon/follow_request.ts | 25 ++ types/mastodon/history.ts | 5 + types/mastodon/identity_proof.ts | 7 + types/mastodon/instance.ts | 38 +++ types/mastodon/list.ts | 7 + types/mastodon/marker.ts | 13 + types/mastodon/mention.ts | 6 + types/mastodon/notification.ts | 15 ++ types/mastodon/poll.ts | 14 + types/mastodon/preferences.ts | 9 + types/mastodon/push_subscription.ts | 14 + types/mastodon/reaction.ts | 11 + types/mastodon/relationship.ts | 15 ++ types/mastodon/report.ts | 16 ++ types/mastodon/results.ts | 9 + types/mastodon/role.ts | 3 + types/mastodon/scheduled_status.ts | 9 + types/mastodon/source.ts | 9 + types/mastodon/stats.ts | 5 + types/mastodon/status.ts | 50 ++++ types/mastodon/status_params.ts | 12 + types/mastodon/status_source.ts | 5 + types/mastodon/tag.ts | 8 + types/mastodon/token.ts | 6 + types/mastodon/urls.ts | 3 + 75 files changed, 1610 insertions(+), 556 deletions(-) create mode 100644 components/buttons/base.vue create mode 100644 components/buttons/primary.vue create mode 100644 components/buttons/secondary.vue create mode 100644 components/headers/navbar.vue create mode 100644 components/skeleton/Skeleton.vue create mode 100644 components/social-elements/notes/attachment.vue create mode 100644 components/social-elements/notes/mention.vue create mode 100644 components/social-elements/notes/note.vue create mode 100644 composables/Account.ts create mode 100644 composables/AccountSearch.ts create mode 100644 composables/BaseUrl.ts create mode 100644 composables/Config.ts create mode 100644 composables/Instance.ts create mode 100644 composables/Megalodon.ts create mode 100644 composables/Note.ts create mode 100644 composables/OAuthProviders.ts create mode 100644 composables/ParsedContent.ts create mode 100644 composables/ResolveMentions.ts delete mode 100644 composables/useConfig.ts create mode 100644 composables/usePublicTimeline.ts delete mode 100644 emails/welcome.vue create mode 100644 layouts/default.vue rename pages/oauth/{redirect.vue => consent.vue} (74%) create mode 100644 pages/public.vue create mode 100644 types/mastodon/account.ts create mode 100644 types/mastodon/activity.ts create mode 100644 types/mastodon/announcement.ts create mode 100644 types/mastodon/application.ts create mode 100644 types/mastodon/async_attachment.ts create mode 100644 types/mastodon/attachment.ts create mode 100644 types/mastodon/card.ts create mode 100644 types/mastodon/context.ts create mode 100644 types/mastodon/conversation.ts create mode 100644 types/mastodon/emoji.ts create mode 100644 types/mastodon/featured_tag.ts create mode 100644 types/mastodon/field.ts create mode 100644 types/mastodon/filter.ts create mode 100644 types/mastodon/follow_request.ts create mode 100644 types/mastodon/history.ts create mode 100644 types/mastodon/identity_proof.ts create mode 100644 types/mastodon/instance.ts create mode 100644 types/mastodon/list.ts create mode 100644 types/mastodon/marker.ts create mode 100644 types/mastodon/mention.ts create mode 100644 types/mastodon/notification.ts create mode 100644 types/mastodon/poll.ts create mode 100644 types/mastodon/preferences.ts create mode 100644 types/mastodon/push_subscription.ts create mode 100644 types/mastodon/reaction.ts create mode 100644 types/mastodon/relationship.ts create mode 100644 types/mastodon/report.ts create mode 100644 types/mastodon/results.ts create mode 100644 types/mastodon/role.ts create mode 100644 types/mastodon/scheduled_status.ts create mode 100644 types/mastodon/source.ts create mode 100644 types/mastodon/stats.ts create mode 100644 types/mastodon/status.ts create mode 100644 types/mastodon/status_params.ts create mode 100644 types/mastodon/status_source.ts create mode 100644 types/mastodon/tag.ts create mode 100644 types/mastodon/token.ts create mode 100644 types/mastodon/urls.ts diff --git a/Dockerfile b/Dockerfile index 0ca9544..baef9b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ -FROM oven/bun:1.1.3 AS base -# Temporarily switch back to the non-alpine version of Bun because of Bun's issues with musl +FROM oven/bun:1.1.4-alpine AS base # Install dependencies into temp directory # This will cache them and speed up future builds @@ -18,6 +17,8 @@ FROM base as final COPY --from=builder /app/.output/ /app +RUN bun add --global serve + LABEL org.opencontainers.image.authors "Gaspard Wierzbinski (https://cpluspatch.com)" LABEL org.opencontainers.image.source "https://github.com/lysand-org/lysand-fe" LABEL org.opencontainers.image.vendor "Lysand Org" @@ -26,4 +27,4 @@ LABEL org.opencontainers.image.title "Lysand-FE" LABEL org.opencontainers.image.description "Frontend for the Lysand Project" WORKDIR /app/server -CMD ["bun", "index.mjs"] \ No newline at end of file +CMD ["bunx", "serve", "public"] \ No newline at end of file diff --git a/app.vue b/app.vue index 207756e..9f3db8b 100644 --- a/app.vue +++ b/app.vue @@ -1,7 +1,7 @@ \ No newline at end of file + +// Use SSR-safe IDs for Headless UI +provideHeadlessUseId(() => useId()); + + + \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 2881dfc13026d2738ccebf9530828031f5c6e1c2..f63beab921d370de94fe654c658eac0220ab3709 100755 GIT binary patch delta 104265 zcmeFa33OCdy8c~NP>^CqKtKdRWC{cgA_)WvL{LTrnNg6C1d@=63`kT=5Jf-{@u(YA z6bBHZQ4vK@v7H5NR2-odZD)w0(oWEd{r^2@?@Fip(ysg6?|%QazO^{rRnLB&J-_?i z!#Q<=KR(j-jwjmP*t1*l+M8Sb{>j`|FW7m@-HX1xY3S`|B=$Y+pvQ$Kt9+Qo>o*;Tw0J3 zxWg4(kY7}c7AUJ@8<3Zpm!Cx&`@;>z zqQKRV&f;KOa1^NQBV4)dc&swEVoH{G8N49_G+smgJ=s&!@*l8M*T^3IlbV=<_?Qtb2@J}(QDk9G-C zTtpW?B2eBGJdq4X``e6Pf|@jMg3`BxDtM!dH{c2IMULl!N;ef$x}jhTFww=gQM}gU zx=#2h#TKBAK|MKfsO5hfVhd<>uEjy;SyQ$HZQ#dRT|ycI2CZnvOq`&#!od z9g<>DQ)3TUrZIVyfD(R5Lg9y?^iM}xjE(WEqJ)h3#f7O4jj9jRrY+Vu#!T<3039Z$>2D#;>!XuPd%9J>0OUy$LK!}@n=Q4YTO zoJ+6?)S{Dlrm6`9n2Lp^1;zP=sp(ns(JCic!=)AG7ZqJv6nKgelOgugU{$yeR6}wn z*>Z|g3pB$6?6TTi11XcOtHfVqJ9rz|5^pV!yVw<6WVf1j7kQUOqGe}Jvkl%g-PSWR zKR;(?YEedder`!|R!-3i=<3i7m)Pv(4r2qrYW0LsNyfGQ{#lxt1^HDXDi7Qd6hHefAK={}oc7thx~ zrP~6koI4#)%g@O#Ob-OEhM$B!7i`ABlwU+Zlj|+k5cTwIm!Joz0#0!J?=(~ee-0}B zJD^7LDNr7_&gs2C-*s~`QdtE9yBRUXm*?0KECFSSr_lXLyD-;QGzE`Q&whZbh3(y* zo`fz76wRBRP@Fous3%+%baL1bYz4oBd`frQT)RyafbsC7w4xXI2`CFc1$G8kfPH!p zxR8XZcq1)30rb=|Fbp;Y4>%vppOwKD>~9xU_1l%5Hs2boC8!Z>=y+C9pWZXGiUZe` z+C|3Afk6AqERRivBbQp2sdc&SPgkmwi+^y19oc8Vw(z?^ZGUB8dvH3~LHq0=0%~^$ zm!K{v!+k@6a*ema*5DK1$>17L@hiYa;MJf;;yt%2mZs)1HtYu^mVw({Wk;CvLBbq5 z)BrB~Oj;xz*NH{!at30#%~Am`I$n}@X=)Lp^4c}l1&T8A(iLA+oLXGMG`xSY)$ah+ zkc^CkSy_ce#kpFNxY!vpgezVA@Fg~V3fRcIreVi=6I{%w#onV0JC{94MH;b(T!nXl zYH>+kdR7`ut9!jQaqPUBU6kN=npLnMwXi7TmFsLnVinKH$c#!V#dxGCd=2u5Lp5!8KXBfofo8adE+X{Nq{*mZ{TA3Ub)I z3)zwr3JUWJ#$Dju)2Q=FLC?C_hd0^cD&dVt{twUlv{C1>{Wsg(Ymim?##?OZ=Q$ob zIgGm1HZ!d-E#b^wfxz<=r($yQ)BTgqB=euDvF7Ns%62!aD7COKwKUKgPPfba`v(os zhpS_D%gZWAEh)2Mr!W-z>9aU);-ERbd8 z87?9fznMudA0a}{5c8QQHdqtnPLL7C|5 zjg~ifz`AsCVQ-qkq)eTYk&vEMm_YufS_Mvi&}DSX$((Df7v7O#TiUMD7B~@I8%l8o zGp#TX=>3o_ICf_6;ObdyYi$QV5nhz58>m3wamtb9+B{;@rBGfQo%#whINi_72u#~# z7s_#yz%VgIfXt}xLNjvsgd0A>#;77Rh*mH*!a5>TJ ztl|XSp`HG;ZFnIli*0qBEvrbkKnqDPOQdBbWaZ7u4=kV_@rq|`2MP+y@^cG{ivlzL zWDA&+lTpIZ;v}=P(%2qOLT^HbSc78sLjQg*lb$temKw~7&%fL~O<*MzwI=@@onE++ zU-rD+1Jl9I=;t&g(1Ado7wyA`1CaI{X(6@9^*6bn7`-QtyH? zzz<+6ur&!Z0>ve>60+&+=095>OeS7>VMcLbDJIA$EKFctX3W}U8!!Qsubu~L1o}Gc z{)Xjez~zD`gUvN7(^B~#&jcpFX?s=)s;56YEJ(;rEuf;gyKVe#up#j;gGx7ybWOn6 zU2POz58jvxly2tRwn0VtX>&AaN8nmEz60xNRxW(UX2>p@nWr(0EfaR#;M7GzRj?il zsKCH`)~D)YA@y(~7SZ&t|GqW-x5Vo>G!$Kyh~H!5?*%o9y6?65?*_|M@J$5d{HK6w z+07&rXPrz-V9o7JLGppW@3i`3AJ~d?(_5UCS2P8#v3~eNYub@;HLQhe!2EqSe*~`b zPyEPQZvW1J_ri&1m0j_%o$W=ShURVR(X8K0I+eQ~E=ynji8aK%=xX;S^i#n#pW67@ z_@E5b^)t&agsYqv;A+n>cs-B@Z^gwK>4A7S^_8(D6&7eyYmFd_o%@BYxNugw zTzCg~8aM`BlPn2rEg$SeKs{;#%4ENhP(2#(H`{>K4zC53ZWf!k7RJmUtYxM-EWlsV zQj0S{9@Z2Gru}H+W6N3W(N4`rI=OnL6IUxCm5F=7aUYs-LZo^n}Zl z*Z*S2G!K+dv^Z=nm_k z&IZNj{AQ<6%mK!utJDIPdA08OI9tv`pwe%~N!0q0zgxT)lvxA+@XIMHuOLALp`=7l zxdVaEh){*^fhuqpsQ5@Q=vSn3c0&5hz~2Kwzu;Zyat!}C#w|yBYN-~PBG03&(YDfXt61+Sd^zB|$l2*vweqd#tpx?uS ztU`vlD3E&@3Axhh+H^c!&C|2d$&QzkUiHMzD$U`I$`FDCnt{JiflPU2BX*2w%gKR-bUa7X&c+#oj zHV*57vefSO!;?p3;N6IGhk!Q{|5;uqG5MikbV@=RRUMW0H`tiCEoHcK~?+~sD|85esLB+ zznr-VmM6m1^O-&Uo|ZQ`-TF)&P(zkGhdUy#q;1E+zmY=9ocz=TJ?}_Nbn|JkosY3+ zAO158(q(bhFU%?~O3x_pm&}!my}z_=SN69vtuN*0<@oDFx#J}c)BH&p2+V-XVzbV& z4SEWc4^D9D2KTYeN#mywe!&dzyTa_ktb#ysQBhiMK_D=kbXq_9fa>6BAOyg;(lT_yk3F$on`|u@Tlo&rUsaga*ZN#;Msa3-dQo5;x@Oh5enI~sRWDF`dq4En z;KwPp!X2Pi(^wL>;;pdF%*;PSP@a9QN_ zLAGJfgDPi>!;7lyI&*2pOiuB00tW}%ayNjQG<(1nTFU=SKp9UPVlg$_F3BZ@S^m*| z8@hbvE>L^>37~xMm2+&xv4>1AxC*v_^1awW_6}G6n)B=s-3+RO;{J~b%Sj*;UJk0@ zbWo-m0jk2^hFcSU1**s12wTu@IMcDb^+;RcLvS6hR)8{bdsp7%Q9=Jiy%X$;-V0sF zr>5rz%lrq3e;;it{LJAxP)F_OK%Gz5r89g3StD9h9vZwtB>F4K;hV6h+QS1>Ol zN4IHTPO|02?%dylt6^IH6L_Sz1Fo@8&zM`1niB{-Q|2;U?jpXJ67(%n#KSGkikqg| zv6@Z1dU`P^ryK`r42Og2KtE6o&Cbmz($8?6;Y!~MRE2+^XlF+Os0Q6X&6ZPkCjk|7 z2@zV5x`E30$E@R9&@4m#EI_8}35YLP$zZcZ>Ym*ubbOOua@`=%)ER|M> zrRdlII1MQ)Z%#l?_4k>!MFF@PupiUPNfJRdu%IY`XKxvS(dl+*9tPFpqJkVw6M;Z+ zW?_EG?99NuE`BvA%gieDH|aoU%8})YQn`Q53Ix8HrTonQ%#8U7g|lY{K0{DNv4@?p zXM%5{%cq%K&ddAdK(&evDLcJNA289Y$)zr^X!P*EHB22k@pab7Uc1#AeO2JSDhWBv>n z4>zFV=YsN$^FdV{4=R16g!wOL`MlU>%w~G2NB?Qb_2+SRR^YSCtq;WRVtD?*-j*MD z=?dGCCqa$%gP?|J4CVU1@^7!b)VmVzRsziGbU{c(=t#_m<6iGV?b>xeL<~| z9b9~U7eBS-v|+n~ZSxZPeD?KuL&~1>=6BlR{dH*E<}sbm2-n?oXiD8XE<43r(S2w8 z1lK&bWlQ;Oi zhc8|_;hQ?ib$-9LYU3RX&UyIH^`5@k8kw%^STszwfV8hYY;+f*fz_z%wSF|LT*yzg~7r zgXBk!-uTMS)xX^EWW%p+yLWBVHmBCQYwX(IU)=lJs?xi%-^%(tWnKA;8#=YQZ`ilZ zZ%Q0}$=jFRpTF|i$sas-Lds8}w&5B!$c@|x3{CB?N|SDc&C|IMQ_-}-CiUlNNS zdTrvZyWV=|s!PtjYhT4ZEuT6Z;|o*j?s>A$UFYXiz4*@0`6XAM)nMhOP93*&y?1Lg z=->S?pJOqhVRgK!^P`cab$I`a zVuEJwg+a=>U|^_jU9aMTXeh0&S9L)&xW(%>W?#NlbX|R~Vq7%zxB6byxM+9;^KgilJ31wN1EFMvLN_<` zD#k}cZ#DF)fZC0`_zBU_*^Rtxps0~oF(Deciz!@PWcX{?An)L~lu$)uFMDD%^l4+S z0vOZ8s{$Tu;>AyjhHJCV4Du34HKeImfv^f;uva-LCGr`eezdT*S{P}|uBHBkyhCG? zB3HnMz`|bQ=%mQAFpX3#zb}VR@ZzULBg5D%q7qGFN-#Ot%&S2B7||aLZ|?a?;Wq3O z8D8Z$e1ymRy(|Y~f{J6pi#}1v(ck=*^vy6ut@; z^%BPS51#17UmOijVm+Gd9h{gFdbp)mad9*hY2{S`kMhpZv}pJnma#rwWoiF7)~~ZE zrMBs8H&hTd-L z#ivGt^}Pc#21Z7)?a1VmH9je_7$zfIv%cESi=P>d)MKZT1w&rqw4}(nFePDBvXUaV z!(=VLDUmN=8i24zXCfWj^9vA+%10$dQei5ku6O8(FCAJj)oeX=4AuZPxC5(m8W@Cz$>SD z@tM(Zt4=Dfa#TuWHX-X4ST|A$8%RNzX-ZP$8`xkN%hk-Ja7t&*-2~b&kI)$OuU+2Lj`K?PfyL{LmpnS$=40cW&hT z&{KqLY^xq}c9pk)&?SE8!|G5odOi|n?U0z76j=$g(^ek!0!&W8u+K;e{{rjh<<3iqBr;Aa!A|wr zFqO^(+nO8)Q5L+20^W8}{;CzJpU84ZTqAE&T2f>#Ohyj)zPK5tipjSvIS!(+_U#-w z1$_+6&Y1jOUVLFR{19SKuW~|4Nr$Ksl)JV%9eSXTmpv~U`2^;H+0!<2G)yxi&bRean5wPoJM{OkUfw|_!KrLo)^@Vic$i$lmVQ6X zP6EXpfRRm8Vp>wDLqD&oG#VP$&x^k-8d*alG_Fm&#F0tiw_ts|gQY2vxD@AFCb2n& zfZ+~m-|VE&Gbvuh<D0%6s%~=Sw!f3uW~{E;2^JR!NA&QSC>I(n3quAKaPObG+TtP zs!>T8z!tWMkgazop%H!s&CZEca1kLtUF3dg)dfNPCWZzM@v6o|!=r`<0_W)%5b2Jg z#Rn8i`Weg{1Ts*w916yzHx@;r_!l>vOM43ExhL z&7WEMF`?>&k$xj$&Y`_&(Fm_%Q8e-?qP&7`G6UO}4qo6@Es2I2j`8A`a;#!ukyF|!ln=8dA9_7G4x(HUeiTG8A)=~{^G{l@!t9E~a72E08SpX+ zOP*kT)AzYh`2;WihG^s|L|Gcwdm}jxqTE=D5$QsUH6rZR+meG5z4#T;$iryXmO4Qk zfT^*y{Pd?!vfW}RsCxknkCer(N{YM;>jSeb`OPuhi+aXR4g_duc^$K<4a0j8Co(bb z5bMOIi@fZW(a4Dx$C{#|(_w0+9ko?3S-OtD0sIV;IcO3o2TY5NiL99mQ(yf?gw{>- z;=O3(BPaTf8aZ)#ED8Hp==|wkl@|?Pi`d^gn3WQFkC3`=$EwLCHnH7ohB?NO3DevG z>rYCKylhK*U^1mWYMneI# z`aXbZj`%hS_nHaw5;$)b5K_%{l061Rjm+Fr3!0-(aq0`Zh70 zKXIszdmd&7Eb;2(xQsvm?y_A8!(x_&KZH&7Dp&W9n-vIT#^lJIu<8Mi{0wvTQqwSg zR&!-z#kDYvJ62>g-+?jMDx8#OP#{YIOta`pnC+*={X>|>!p61As?JBRi($4tjnm83 zaXR^(noaFq!s`CD35@r0z5a0ohE>;j;vDOF5q~9`2veQ@IEE`=+^D|RKaPN=aKOwx zhZ~z5FaEA*WCiBa#9<+30=x^;*s2AA777CpT1T$o1E#{GPSUG*&+wZP6HpM}@MrhB;? z`^Q~rr=3ld4r7kG0$zs6#ckZFWp*}MRt_6q9rq55#n`2cFSkx@Q(gg^Tpjlg?4S9% zF0{kNu1oXFVQRj;KYIpd?UR_76z+KyOQ~16v48L?FS{}tSp}CF>rx`~3E61f=RUj0t9U3H{soaqk&zM^aCIQSDIaqu-jEb3zuL=wI2wBY8m|JV zzu2n+W-RvNABjdbFRosZ+3vrF4f0z!7l-P8ZB27$!IEw3Spx2c^?<%nu9X5(!8m}A^s&iB*HhI9<4?Q)BA z43jv8vS6Ag_AK)xOe1ek+O==Bady9-43iD~b8q-27*9s#rG!5w)Z1U|nwjdgcT`d+ z)p!-pMk5B%t&DW*ZJ4^ntSCu}^j+n;w zvPFhguJ$UPkA}ZO9O%#cLATklVL@Ti%!jGX5wY;2uygI*fzxS5aZ>1l+r9V~qmh-j z+r%7pS0~5a5hHS<0+>2sm#GIGvv()^VQP?VcAqu26A>?QExS8R^Y;f6E{F z8D=f7xf8w9t9UsYT6CvZ^)mi*r!9pAlu{brRnvsSVd@i3%RR=TyS%DbqLEFA)+(A; zhg=di!BSSKwbgMvC783;tJ)C_-M`k0-x-Z0+#PE?b13xi-ChOa4~S>j-m-H?@2Q?7 z4B%pz;_#&{Ns%ouIh{RnSHU#ZY1tE;7VouvuzT1Hn2pmT*bOlC-Nt{ddVl}VASVE#NXo2GMafDQK!E=-9GTNiV8|19blGvXh~aS+)8N8OPex8BY+_EiQI zqKepGGLu4ItoPzyk48G)A3KFI4&e+~)XROOe;k2{ep)%e5toPtW8ahwwsPEu#WNqK z&iE|!>;|vujcBCK#@Hw+$w-*2M*Cow!>rYGR(u$yMlsfTNui%MdhxrXq2vlLdv`Q) zV@0ehbKgylgD9abq}>CtRZh!AHcS<;Tyc!N4JKpT!^B&#>Pa2${2--xxvToe5zus_ zUMAAo2fd27qoFSz^s0dPN-zGMXlPEQmkk`K^eTXJAM&c+iAL^x$TowjcuM>inB8=k zw4qiHdlm0SBjX;n7U5)5%yV9tbr}u)Yp^j?YZsNykHi{rh{suwNkldFpEx(#e_2Jm$rAUqlf4E1|3_o<|C8jMG1Y@GKI8tiA$Lh>cd&KGPSZoe60 z_)m083CXkUg83(yQn5|o^G9H=SC=P6k{+`u?MZ(D%$ieY%2!|)kgv6uNQ(wPUOm-_ zy9%a`v+m0_hLu!(p1MB5inz({|{}Q(e z)~7n(S2bDa>?ghWkE4+XpR~hm_mEmo*}abeV~J0M$;x)BTn$qrIFDnktuXbqkv}Vb zb#Zo&O@7*1%i8V=n8w}4J?G;5ohb4v%yvvG(&^i4ZYf1DHQw5GBg~Gf_Vm}Eu@lH& z3?lJ=vMI6q*raeatiS)veLW$W#(x$c*#pzW!m;tJCePY_`^T5aWSI7Rehgq%FNP_f zy{p~|lSf+b`a4X$vHM4#=VEJv_J~=q1mbu$b5&C037D(>@#HwjRKE}{d9OYnTTnOc zObUfw@G8EHhSOj0?~S;xdW%rHf4?;0MR#8ndi+JN;;U%nl$UIU_FOp|rY_mz)?F|e zGvxpL7<|dA*dL8FdD$M8>-l~>2BziCJ^g@beEqXX)4%NFdi!)hJzQP`P&DLkW#d;zn~(DK^$b$>md^159+=+cU$@V&4hzL$Na5LsEU zIkohCquPgA%oo6_*Nw;%FfE_f%j&)v2qeKy@K2VrVY09tnXNE&(fWRHw`HsvoJa@4 z3_jeZH1;#a2*wRq2tpk0t=z+~Kz|5zdpHXcS7$amWNcD~t}aV2b~jpH#BME&u7 zIXq|&+5BhVeO!0hJ*fMJ5LfGUzfvp%FoTf z%Y@`Tc7T3|jfOSx5AeAk*qKn@Z{;r7RO0+87w+;Q`TT9=5<+9pIgBw>TVeey!^8gu z>+drevgbbA8T+Jp8B9}{#fkff_h5ry_SU7tN7fnG2FgdNY`71CDs%`NR$Lx`= z-^cbLysCJ?J1=bs8N2mK=?Yy+5l)}^p;`k+fGmPIsu+>pQ8g2Wi zbLb~_A?G;GA@n+!;;a?kh7E%GHHZ6t>MxNT7&Z`!#`MUSu)#1!XiQT0%+HAPayO?$ z<`TNlFH3&38>Zgd{(6_zf#kNoQ?~fh#`#VZ9ts;~Gu=T@j>L@SkyG4PvC_gf5FFyC z37@l{Wzr7hVioDHTEbdBCfaHLg#Bskm;hDQF)RMiVcBlrL9 zpUXjV9Av0(MC~zMeu(*wMz{zjukc4Wyh+TTSPr`$vFFZuUgA=oRKw)r{t6fx^mkL$l!_|;Zi}{QzJm27jb%fA zwU1XUy9TBeG+^d74zkxnH4c7csQGUuyBV&u@Hd`6nuCp*BKrtxidZ8xJZjs?!jPF1 z9xmpe{I4ODL@IxGto8KKfSGeXFG7WX_t(`?DNUym@+}eI58C)N_fki6@z#!ri)wVxS@L$uj(n}(;<3i|g5O2XaLjP8CHGf`DcoSEAio8JMoKDlX3avWp;akb5+ z!Ni?eI~X|opR^b%18|aim^)UOT*jtt_$|~QN-Cq@6K!RS`AZ|s1T0v|%Sm-ie0xT8 zU7cWHte3DmCGs;NIS|`E>vWI0LH9V4o8U+uOnI$`ZiOi&D$euv3(@iIK{+=emF(e3#%nDVhN?M!O= zB}}JR1`5yQZ{cFz-*iwTJEXCgHnEsU88KP}IH+@8`4Bb;MlX5Sp)mvF&%37xSy|5e zt78lbN8gktrs@)geohl6ikC1uCGrFzYdGv3{t3prY3HYeQ<`EYJ;DuV5$ff?UUNGk z>-xMG(DV(M)+aTyHlNd~n|am=c2dx=HnA{RCf`imN~{~>-@hp9-*s$eS0vh!L5 z{qurlt6~1E_2>6%FfEPNuWFxY$CDEW-k%FQlekuX%8@PY`eIiU1Jg9Mx6JRjID1Rg zzLoV(n{o_H7^A~HHzc$}=*dV3UldjPHtxa}o)~chZ zgHdgJ2cBg6N!hsSBA9acXP@v3u%2GR(v-*{LUx#SvvYbI4XIufNhRc3M())xrDDfq zH+mnY;pQ~RcrZ~8JBK)W^aStqwKG+nXhru^Y}@SJK@Lpw zofUd|QfU1trlK=xenFL;$jQz=zP%kgRxW;oTHD@acVQx&e`+u=-sE=SD0UCQ^KJ0^ ze+Hu+84#;3A?OmkN09TPvYmPw{$hiL1YKb-|1)?}r(j^BO;A8^jH!(02uNs@sq8|i zb9Dt1{~26M&=vI~L09eIE?CK5dnnVZ0-J|sT2118Q-t_|U6iyk_)yUFfJ(kr{OEBL?ZR1lK2*%9!W z&tcBW_;%+Wv60YnG6Tj<^$jWE`v{HjL*K@_R~!j7(PTSFPXBCbvwh(>00Jc8;|xf&6NtvJfG>b)Lcn(Od=aLUtfef!|9}ngnU0F* z^s;f($8&(I@451J&J0lpSHA=-Zl-B z5i`$$Db5~RH#)|a$wL-M527GErfhbW$xfoMlCxstsq8PqY)90*+I^}S9T^3aIsE&w z(2_o;BANWpplYXQl_XK@b8M%a;8438`sGB% z!hCD^qZS-$s?H(D52!kVw(&MS!#JO7Yv%D1=e~I`S;IdHgdc(N7Xl+vB7Y+^)7RM% z!{g8M{b^cCt^3aldJl{k5dI9MpP#bru-IhPq?iKJ-f5@cT`=o!jB)sD7;nR{+nqh! zdL@4N5HHq`Fxlr}`wK?UGLw5Ai`^Q6avZkcPMiW^=h}$QBV%)6?w!fCAv1hE{5-+Q zrgFGmW^{AMY-&MP7;7(Oh7S?UwxwJ&I<}(eT+-uwYeT;^kt<;CDF|^d{tIhxf!$4Q z%IUD_eqU9}(=d5AV^@_FYBI)DjKub%##n3n_eP-`$C&t0c-uQ;Ot!G`SW_V!GuBiI zy|E^KG?w^ctoDB$?pj`mPbm}{bD^m?pAuh3v8zGiwB)#Pc2Tuw=l(Dor5`G;hS{SA z_n_eyVVoR`Qz9piw@qT<;AUgSc#}PbVy8@qZ4;awL$^;bRj8q*lT7?rV!xkcOSZ>> z9+P8^sii9i=57Z0&FC>057k)kzagY)YmXjhOtEfj*WYxQTFRQP&3=lBA4e^LslmWF zRMK!mK5nY1kh&37E=oBUB}G1i={WDN|KT$)(p1zh>vIY9_bQ)FiBu{?3KkX)^#@?~ z$&c9S7uyNTLF6hHIhe|_H$7Wnx|eC|?3%)jaE4N+ne2(Q<87_&H-DZzaI& z9cLnM{LZNEHA~=yupGZ^P3UJ}(=6ldhe4^qKt?rN2TQGHb!OUet78r&vIUwjb1=GosO?DxF`TjIG;&KXVn`^u&)g+Bbem}BR>$-q1|8hBYpC0mo57=-};PY=M>ar_x%eC z&$ZjMO*sQLrMk>*u-VnDePJ+gNi{3`7xocM{%cD~DXLlKt*{BzabLs!nQ~aMT`h2% z5BcF7W`F60g(uGo2IiQAEVctenh!Qr*Gp}yEL#Da8;c7E=KFcF$wMeBrbpg^rB$<} z(wgPn0aL$hdB4KcXP<>;US_K1u$Vu68AD|bwqYLvh_gsD3K)em(oXDIy80zwz~p+6HE>4#b_ z^q*CcBa_f*UwfR8pDtAUDpN5x*stt_fd6lS@NF>!Hs@1^&q;iA32X6b%SZ92IP3t1 z`E=%^>%W64ryC!Y)15!X4+IJH;G;_z;d2%rC1fu9S4~uUjO1T6Q94V8e+g^z;rJd< z2iZ~dr`bBd`j1U#g1Tl>zYF|VR0D8R|N0|rOp0Qc?pUaXmALqtSP!kt)$g}M3CsBi z7xIyb7V%L-7CXKKRL`#Gqf4mx6?~NMMn1Y~qV$z~gg5cg6~i(GRN$>rxrC~Cl?azm z72GbuB^1Atk9_1lJ}P*f!}Xwi;sM7W1a%2j&m(-4e={F0^HpK6h54p1*hF7(V^#Iz zd>Zn3o{zG;%tu#EjDx@Ks}|LSHyp2tK{Kr=*wVN1Zlaa!Er)MAe8=Itpe~`B@xBO` zQ2F-oQOiHzqf4mfeJsLN6P5oHKC;A@fk3uj;C_fMp%PT_QNdsH(Iu45uTH-HEvTy| zD*bo9`md;l{J^KFnN}P;-Q*Mp+yCoVlQJcVBfpB^8L^M`M7aJ4>k!|>rTZgnK)RDj zr!KT}>1*IjWE-Ke>r4U_+`}alDq~Mj(&sY8JaC_q~Digt$aQ1KiItJQVevF9! zl;M9_xAp%~3;m_@etOW6s$T`wnb-Jg1%4*-Zz$<=zBFiGy7-zXiyuH&R24gxpYR)( z@K~s*gDzgE;J19KphHdD&dJF6t;E+3B^waRdHLV*F(N>mQp~LYaTs2YYC!xy%(?L~uiA$gA()%d?Q$Sjp zixA3$nV>ReIbEoNbDW;*bfNSD$B%`IDs<^eKy|bf^!;A}T|yOf1*nP_fQl+}xDZtQ z)s8QAxWwTyhu4G3zufT^4p)Mz_!ft&L++G8z^~|bP(5D@s-k-xt_M}%{SG%c+~}|Z zRQgI#`5$%saTmV@)KwETG}}Xd{}u4#eN+L@!?kL^4r(!e$HfcPkar#bBUF<2`BHfw zg5n?XCFk4^s+!R| z$7`abvMzk9C0$(tp?Eik@lF>inBcgu34DO#|3fVM9~IDuibuMNYod%Z8eLIi_|h0p z0@b0(pyH=0(joug5=UQzAqaPY8tZkShGZkC!`2p1S4~ubPdNQps4;)q#s4A7|Nbz6 zi&ur)U4b=G`ZG=!ssk^A(qD3VO_ct!(}lkO*A$5Vmjt@$c*A87s(?2g|DT}p?{@h? zdzbT;6NC!B>v&DnSbpf@KL%yu&p{RVg-d@d)R=$e;%lPv?XTtL|9)5CL6=adjNdsf zR0Do?T&Mzmar*C$|HH-q5vt*}aWIu%$3J^2fS>~FI*fA(>Vdk18rvqI>SzWkeRCHt zl-|u83jUB8L~dc%kB_J6;o2&LxT;L?D%bgqbd(P(00Hy3>UUW;)CPLuUITPWFFZ6x4s1 zkTU?9^3HWw2+DCwL3QQ|P*+V<`UNiil`g&}Dn90?$3k^-VQq#|d9UG16<+TOTn@_P zZ&IW~Ww_aKp(?lqly00}6BWP8=|Yva29$I+U&?oHZ8w$gMNo$OT*P{Z8^EUM+Z=xi z)O9RW{-<5KXF%~kIegaT6H0&1@#kWukYI&222?3RwV29=>Bs0MTfbsY8 zsY9QQi&JN1l6-yj?Z@aYN8gkA{Srmu*9Vks+@VC8Z=+J{Lc?KRDx2M@G^&&gGyV@ zmwK=WQ~}pWbSQqU<26y`Eph3WIlSKC4WN7`pg?VN%eBE%e0N+WihPGlcc;U(pst#z zdhbD3J@>kJp&m*+0IHmaUHl^sH-XBx8Prt+?Q-yhOSskHHiu7w{6Fv~$DbA963RDU zbzG5Ka9r3JzQ%E(+J6_QbZbEse4mT2i88?bF8%?R{y~@SpXhv2f(m}f zC43lE0gpQUF^5|~T|!NYXC1GJYS?q=%KsuL{*p^46o1+Am-XKx)>SRQm2s!jYoao~ z>U5#f?Q;00(}mLC2IcO1K>6~wpoZutP*)7g6i|l4pei`x@b50+u~3%!jd+<}rHY4C zx;&b6Jjs&4_PHypo*e($z#s-T6|NdV+G} zBv9q{Rph^+^c1Iq_D7i-f}cTLed+HCinvsk`EsU{))D=;q?O_VzGRAVA`VsG z1h{Y#sO*znyio1F2-KL(b-GaLiyRj!U$Nsg(B8b2xCHY+HQ+K(1zh1W{C7|lEO6;- zqVy}BUK6F4)pgUU%vHD$RK!&-gHU{t<3ja#F{p+vbGlIJt^?)8H-bv%f$GRDpe*zN zsH+-P@xKWFmw8!rOa2=bt7nh6bTv^6%aiEp>C-O$k5HD{PCBqG@Qlm&ti$JB0YWXM zyFpEgzko97K8Jq=RnRA(E}{6R4nG6cpf4PL1uB1)R7W~FUFiG20?N=0RKf8MyMtO)6CLjb>Jlp5nV>2>%VCn!lR;fVoq>mdDrW?! z^rM_UIga`@E%FdlV7^OO0_p+XB2dn?9Mo?m>p&H7Kd4Knf-6Cd?IWPd*#xRXk2}5v z)b(GH{ww1)m+(oK@K~sdpLX#=RkYplW1-@oAzlr9(WMhgf64KewEjwX*$Kx&RlI|E zHS{%?PN?A9d@252P(9uYYK%Wpq(kYSx^$mA{1TL2Rz*M!_}bw&4i7r~7SuF6>iF-V zE}@1dj=8D)5r_3aB{>1q#A*#HT}MzI=nQrOM}k~sexNm>bOeogp-Wf-s^EDxp^xg> zQpO z|E^146IJ0Jbm0ds-9DF2sE<vGo(ME0zA~b6x*8P!{~L%vJc~|03$SNF7R-6E*;4 zp+=yV;*&u2ybY+UOaYnl6i`ml8B~U@PVWJ#pkAQPvO_@?a4x7zD1IKOd4GY^|C?C$ zUoxmr^*|q8LN%y4A2mepOX(77Z2#ZAH^umOb_I0QN6qx`Y~?v-qgOWInoT zqSDuVUrO=f((Mu5qAdL{?@h`7F5)B8&*Y=)k5CQB@KgOUYRNv<`%=m(T@5SY9~MgEIZW?y0Ol;f{U`8NNWZw>YF*QJiXE+vQf-+R5vEiQjlpjOP| zuS*?&UF!JjQpaDHI{vzpUX#)#JpQ_rEOGpGssAUhP3fe4{B^0?9P@RcJ^s4X@zUU;rQ!P$6uE^{<@T2o6^2e^ED}`&oxVqzb>U8UASt#HYLLxe_bkp$I)_~+V`P2llLfDf-&T z@xjHr8ejKF;ncHF>KXUR&|sVX>!z-Ht(D1rnt#zH;pyPWU@cSnba0aCx;@y??2`~S z-L@m_k+6I_LS3_0!jfkY20VihF-xC8Nd6PTK?(Iu-#;Pjm$2qf2o22v39FtZH2PVD z#%A@i2*aL3I4Ys38U7r?VF{JbAv7~bBy4ydVcPQuEzHK}5hlNY(C`I>mS)Ne2yrhW zY?sj5L|#PLDk1m9;K)#$fVr)Gt%*-$z7%ZR*Zg#2Xk_pO)9oLm>G}`SEdK|YUNUmeL4dnF_{Kp0RT;cK(BKEi$p2PGUdeH$RGYKX9=0m66Y zfP`U<5JopdIAm5gL^v$rsDvNP@J0w58Y5ITLiouXkubRl!nDQ+znG1U5#pL6G;D%! z#7t>|uvNl#3BQ_1Q-sVD5OSL$95ve{v}%UX_5_4~n5+{Jc1YNT5DEs(NzFnN&HUyl z3!0Inmf6{iBwbq|Bs50|o6_b8dnD|WP}g*8fw1I6gyk&|B4)3IuRtQba>Q)GcB^;H|%nWahu;C>vjn9PeEAF4xyvjDWPk7goINNI+@Z_5cWveC!ve!)*fL=2ZZJA5xSYZ z5|U3v7|;QsyII-+VZVff5)w?`QxR5mL|Ahw!s+IKgkh&4jP8h#XjXSbI4t3)gfq?X z(-1avLa00q;Vg4R!sN~f(>fs}nT?$g;<_L-?2ORYOzDiURl;@&DJIedA+sw&ZWn|B zW}Ado-4NP#MHpzZx+3h5uuH<(rgb-j`SAz~x*?onc1q~l9U&neVW=sMN7y4_pM>*F zx9$i_dLS(CjxgNpm5`i(FrWv*NVBvD!hQ({C5$$G6A)JQL|Bu6aDh1>Vc6*iqkAHZ zHLH6f9F}lY!ZXB^;EHYx*W5tm=!f zCK(~$9FQ=qAHwLq2y@Nqz6ggU9F=ayW zIt&7?F{OgVX1Cy4)9q|viCHLEYW512@gE8Ut}{ykv;Q0#aBwgUSZ?~BgRp7{!kTjs zR+s}4h7Cm+Jp^H;Sv>^du!N%$JTrVK!iIAZDu*K6Vvb0dd>+EIa}kW$crHTRFocHZ zA*?o2&O_KLVY`IeO=K8C=5U1EVF+u?HVLgpAhaEhaF@v%j<7?*E(v#=)*}$+k3?87 z0^we>Q$p8K2niz*)|t|g2zw;#lW@Q3HVR?MXoTgX5H^~<5|YnH7%&>)0kd>8!hQ({ zB~+Te=Oe7T0AbDf2oIYB5{8XI7<~c4CbRkigu@b!O4w|Mk3rZl7NK$s!sF(Mgvl2o zOdE^vgxNS2A#NN(!wV6%nJE_{Y?ZKG!c!(P4k2?qLhd+(?Pi;VRud4~jz{>D$r_Ka zL&7cz&zaT}5av%rSTF(M1+!B^*GUKo6A@lAr4teMNZ2Rg71M1J!jj1d%O@f1G&J zB3THT*$BB=2uIB}39aTJw9Q8NhsnxD*dbvTLMRwAC(Y48BL`){9Fo*BJLiz3Yc4`U z4no+J<{<2muuno=(=8WaNgl%TT!e_(D2eX}$VVZVff5*nJm`3S2D5Z2@) zG&Tn$44aEEx&Wc6SzUl|Si(^W&CKw*2pb9!D(51!Fh?XzE<%`Ah|tn(EJTPaMrc@s z(ArEXLf9%{yM#6-QjCyUf{GkYZ@UxqNC6rsCWT8gk=!a)fM zrtf74t1d@aa~Z2wkbDio zfU6Nknx$7G?3Zv*!f4a?8iZAg5!PITaDh1>Vc4|@qZcELHLDjR9F}lY!ZpFxT5_U;QHLb5ln72?Fc zk`)NcZ$QX0dnF{_h%jIU!W^@71;Ty_2PNd1zBeMQT8XgcMudEG_DY0dHzBNBi7?k3 zl5kkUgqskG%-uI3Z151m9zuy3>mf|O8R2mWmzvQWle!im^KOKfB&;z_??z~K4?@Y^2zQz1Bd?8_@NnD4JydL3}bqEibPbBP@ zFmydarCGTiVb%QzKS_AloP9sSunh?7?nl^U4oNsHVZsK4&F1b62pcvcgf}8QZpLmz zm|TJIxP&K6umU0O0fdYSgl%S%gsl=_&Nqqnz^Ff4{By2ZLA4F(XiBR$&!k^4@ z5_U-FREhAMnOli4{~?5TCA?rdJcQ8oVT5ZQLU_sSmas>{Sq~$;VirD(u;dYhFC^?V ziH{&8Z$h}`5ro&wCldBc7`h2zmsz<9Vb!AuKS_AQoc$=mu+0eT9!1z~4oNsHVZvsF zx6R#~5jH%A5Pl5dT{HGEgvpO1JTBpV6MP&YZVN)j;|P1rCJ9?5wAh01fl1whkog3{ zOA>g}@dQGvtq3JgAbf0|ldwZVr>zK|n7LaK=5IrISHfqe!#0GjPa<5i4dDy3Tf!a* zXFZAVm09>C!jh*DzL0RhB>o@9-U2>~WPQU;CKDh)fIxr*f&|w<0tB+SyA#~q9TrcJ z#dVQF7Xphri+gbQ#ogUq@AJ;|EIE7r=iWO%9=__gT)MitrZc?_p}=;8soM~qm|GGa zN+`V@;hCAV9bx(ogm)5NnBqGS%I!p0xC7ypc_rbagz%jRZ%ouqgeAKWJa-|yGu3w? z)ZLA+LBa>)z8fJ5Hg#= zrw~S-Mz|*-s|h}hP~Z&0)YG(bb`SHK-9+QEGogdx`!{X9{k(En&AZ>tlanH^VlsbCJ%o!%fCX_ zx}`P3x2HkeSBq_d*abg4n#*k81y2^rJk|7^qJ~$dTRO7 z9k11Rv~kX?#?|`sPa+4bs;0rW&x9zWmMzqRd_Y6s%qT$!=p*4wso$LnwLZ5Qv-@S=Op*V#73r$SI;|HVDu-yL)9LAO)s zyXJdx`tA9rNedOu7_`Rvj01!B*g z+~!$8@Q{V&^OySmSCbbLm%hIrFeQ3amG}7)&KvGFqxO}e^+)8g%7aX&A53eWi zEcW==z|3Le-6|h1bS(Dl+;@we3ggv(sS-~vlh;4oGtsPjtvC43>=pgvRkO|?->;q> zJY?;bjqk&PPK}vyzIPk*OvUT+tZ{}%9m}5C9x$`*-m`yR`#3GE<;bpMFGO8=ab|t` z+C!&?P93{A`Mc=J?KX|wF``kHp6NR*>z(!7%^qbcHk_Dz)0!B?%M-JB4}Qxvw||kF z39kls9JsMolw%b|($%_y4mo0;>s&9BnT+o_(-e()iO$6pz5RvJFH%Jz+G8$CFjsd2UZTbn%y z|F!yytq+#ojTdLy{GE*+oL@NXb%xH3A5`9dC2>&Ib`5JT+oPXDceP$VbL%Rjv+jAu zV(DuP*ZgMEHH0`95Z*}$GsUkXY?iR_x~*d6f-!5fGk3u8M^CHR8!id<$zE#Gr5?H0 zG^LJe}V!6;p>47!xsiTlT*b9bU6!-J@W}E_e!q96(&Lj&MjRUOblAc! zd)B3I^wQK_5jVk(#iuLX%Di*$&d>9f`NnAPqW{r&EfZHiczN3I*-ocv|NQR5%i&KS z-5R;*M%RtquZ8@mSo`<%aT0#t^1izNg0S$YItv3wu07abUYx{3hes6N+28JWbM0HR zL&clDad+H@^|OpFYzrOswflw>Z)=^+@wD8%Z+9{+Pm*rT^6Hh3|7h@HxKH1iN5WtA zPh2WZXx*Jvet&miXV1SXM=S_Tb0tRcipMNoj`Tl&J;CI^pQL@d?f#I16Gxu&*gRorZ=`&=a(VeH`A3ZXGu^iS1rI$cI^bK-)}6-^e$G&yI%Kc+lZ=zGIT!vHAeAD#w_0YG_AH(sJ3uWg-omZ41FBCz_vvN(<}{s z+^6({U#4Zeb@BD0aG%m&zU=njQ1Wf7`8_8-{e57~7ReX4^=xr)m|wYai(92Nsjg7G z;$y#-Dv)yC)>vhBd0jg{_@ZyVJ_n1pn0k8Ixfi1zjQcJ58PATXYfOJ$FIoA63m@mt z@b2r%Yl&k$Df71H^Sk@qR(YI>QM}SIix=l=)>tOXoV{Nb&2GJQ<>MXm){aWLxN{=! zg%h4^9u)8X@=(7lQ{zv)=HLHwiwVun7j87D;h$g8#lCfRLU1@7XS-9{*IjgxZ!Z9-HuK6elvO6YY5p|XjVF#S40#=8hr zO}D!U~%Lh!q5^Nt8iaJJRu6ie5C&ylUh@C3h%?;SoZ z>Ch_)<`<6)X!h$t_hkK>G>E9ywpq8k9)C@J+qM1Z9iz(TeX{!L{S60Nzm19)c_T(s zH;LKQrqWBFSnz7t`c}nOmM(g+#>4JS3oZyWJMJ z`Q}N1kBRCQOgZ%Mm-!oee<+zZR?}VM?e%Vd@Oqec_wZkymLHjFZI}HYqpR3s6t7v# z;^&_m2>{w8cTgY&Y0~HSvAqePo~p7ir4IM@^XEAQVf~yw=w8@{DKYh7M{6c{O2qk z;^atw;PmILFW#@7Sa{#K8!NuR$KsUc0(|j#0c8F^f0l z?wER~^F3Ic!+Wf)(%|_XS;yzNzHiZsvo+1Gd0vOgn{$sBd|wpju78rJ4Ql6Wb0gi! zEH^Tr>$EOytR!wHDwL_RYk^61pW;P_6^K9Z>Orr3AC?c#v3lS8Nd@lBztLxY{jN)A zCw5QZ@p(({9tZL#eRlfb#hwitJXrUAO@$`shm^e;_UikL)7>lX7$2i}tzs5$WT{t+ zLbf&^Ry#xIwvUq@-ShFH?YEu2W!k(SlebXOD-S(B?~k9O!~25%Q!+M9m!o*6lE((6 z+&QNCvtBo|g%^l5HP-S0=D3Qt{pFduOTyjXzPjyOq3X^rAFuy@BGppc7`JU9k2=q+ z_wd=do<-lyTCgy6o`&)IAL{JoQ)xuJ359;o(d$j&+b1rsEz~te@!G^J-sGolZL*fl zH?Ql!=;3`94%(3abILM}ZsnL?>F{4ut5^8FSa_Ws9w*(l`Dc03y3XhHIXAy7T_jPt z5Ak<~&EIqU?b{3!2AhEoY<`u;oyc%+^w-g2z7~JGb=$GfxZTdzZha!fh2rb)9XtNK z?kBfzPyX!o@Kw@!J%^?AytgK-!p3K1F0}C)cQmAPzo-gTzw4zeu1k7558iRg`m(@7 z&Oz@mkBYVq9;SYnR-7miaW?OXv;LPFcY^EpK6IpBy0zg>u&rK6%U0y zo1XslM!);>KAUlmnD53VWHJf!u>0b^U# zJ2*dGtgp47PTI0-LhngSBa5ZFerHcw#knvp9^n$}1Tu*#7(~=S|(?<+U)hg=2*ttP& zO;%m`av)QQ1{q!#^RHUhW903s_rKNaviMt;O4EK+f3#)c$i}Bf6fw_Ky!#E?99rv_ z?67@hlIwGZ?lKM-256|aa zYbGf6WM$EV{)=uLT9K}2@jkV$Y(8txpXT1Qf_wjLzBEtnOJ>d!igz>UL6Z+%7U%AN zd{rWIX8VQ2n*zR;__Iga=+N-PKXznHFtz%YZ{tJ5^Y1!7>FSRf@th@KthCQBK^OtNf67C%{VSA(eH-ehvUoa%< z<%gZ__d~Dx*Gr!5?U~m{14iab(`>-84QqRc+#b2#?A$VJ&cdQ)Qsi&*eBb*q1zYtv zF}C}u8vA1|*?#qKtF6_f<6}=yyxiKy@3O94+aPe`aNk6IvaEd3@K%qy7)Q~n$#(nQG&HlJjMnCgFHhMJ`^!;JfR%x|Wi%y6?- zW`yy&fEj6;$&4~vWJVjGi`gV`6Qw3Cxk{f5$2esHxc|kBY0~OG}p|~O5%`&Z;ue7O!>zMeZDA-#|R6|Cka`; zDvc)y3(e9e)Nzqd7oIYh{)iuV1{AK#etT(4+HkhohFdNNanN8-B%w`k(8neZWlG$o*$!s%WZzyV8 zy9b-fZz$>x^GJf9Cqm`72)oRTw+M$Me3KAu%D+SC6ANMGJA}RFlY}g>5gNTm*l(7; zN4O}#`vby3Q||-9$T$c)Bpfzg9}x<8A$0nPaMWy(@K8dkPYB0NyH5zy<02fFaMJjH zMkp5#Vc=(k)8?>*j}mfzK{#vrenD6gAK{vWzfIP!2z9*?#(hP&U@l3BlK`RcH-t-O z)Hj695}rx8V#2;7v`vUG=R3kR^GJeUB98>7$`6*jH_VJ52!|38;@b~G+?rb6gXZw@ z@SeKTgT1?{pE%5t81F{z9N#lb-4QNI@U|g5F!gK*BaregliJsnXIu9 z>iQv!i;eKXT#^vSAE9s@gimHv9E8mho=Ny(!n_dLra+kEh49ThlHivTp>kY=A7(~e zghLX(A=upQrb0X}@qGeNR>ni|u$#|PvZO+36d%RYZkEMIxhTck8zr{g)b~ainHpt> z6fe7pn*gOi8k9~6P~zFmRw)mqq)Le5Z8z-`qD)VVa$HJ6yGfAOWj7^~qWEP(S(p?hjorMKa!5*eGL%5OnV$@$Pi7R)INa) zlaSv8r$&gA3t?(%gfMeU!e$Aj(;yTylhPox&5iI*LSa)pErMS#!b)};`AYFqAi^OD zjnW|$H%rqY^a(-mPLEL1)Ju<$B@e<538jr!284?eI%Pm8Yqm%jnHM2dMuhUFT}Ffg z`4EmvsA&8%Av}~YFcU&$b6CRkP=uVB5vrQLnGwq6N4O@Ty2+Xa;iH6cSrBTPOA?k8 zKq#CQA>540icmKU;hBUwCM+95oL>;;WJ9QD9!c0Np>lSF24+Tfgti3{zDa0g%I84v zD}=Bz2SO9`Nx~rsjdCJ1GfQ(K^eK$s9fZ)r)C)q$QUqa#gjU8Y7s5peopK?xF0vI(^fbYFF}=(vncn7>%&#UaAEu9)B-7VC!kEpa$)s{9ne;a^LeU49S26=l`TUqc zCQ2s4e3FSY)eB$-o3&w>A;#+$%uv%zW|-L`^PBN0NU|5plWeboBs;=HOBh)JA!8wg zQKnlVgaQ>2{+2Mt1QtekDB-ul2;PVVGtE4bF{XHN%yctDW`=nsGt-nWfth8ZWM-RBGILDzl9)ft zQkl8Ny%c7isV5U<*2>H`UZpV$Of#83%@&!3#-|Ksk!dHh*hI@LG5%#SOHDVKW#+KV zauZk%v%>V1S!qtotTI`-Inp4xba#X9~vEFkikNYPzYa4l($@41M&CN)U zIG*~O)CAHNIJAzn&?5QEfcR!@O^@u-yxX_y*-mTa3jAqWJO!N~IdzX#oqD(G&fmiG zZUp{C>TeC&_vq3&ANG*jN*3g+qDzfyWu^)iN|N}^ZYg^Rf)WbO{DT{Qn0|@?Rq+XJF`kb zs%h1yRgdPq+I4K{_LnqeebU|8o&mKyD$%-G92JaJ&hdkzk!i8173zbt;t9(*ej7B> zRHcRfX-`wPyGH>>ybq-vKU^L8q?#&5L1H`Nc}CZARKBiG8%kz6wx#y<8(Ni0KCPyQ z-S)JhT6mRhQ?;HR<(%1_COI`|vX0bC#fWEf7IsBvkKDF~ea!XF9z*=o_H+DH>wh%+ zzcTb5*5BC#9S8Hvs^(Q=kCdBUcJ<)f?%BUNesVRk+Zd}bMODDK?R(_x+pJSZH#63( zs_7Br&^op2-rV^q+sHrttLhHl#GsCk=?U7D*)2G6jH>TEHyrY|*}GtX61XYnug z^>`Wg(4WrAo%_?A>F2RCUaLjUQP;d(XA{xIBixZ^=Pq6K^QCUZmTvmq-=l`R=Z%$) zq^vGBi3X9p$6Bi|yVx9MNwwAS)6$XIvB}g+jygHc4%@HWROUqrXQmAH@U`vQX_gK4 zcTJx86Fr`q zQ;j_OII7UASG$&Kuy;RbO;sVn8s7~kc_cE2rg->ndO5}8CSoIxmW~)lyxkpVM{ojn z=gDZr*mQG>$4hsO#vG0$8ruFUxGBhZT()_3%jxdsV}k2?q;VD@_e>98??k*_n4h7w zMiN6Tz0IEYXM4qQ^o_|qmns}8?(UXAgxMAoADGyKXjKzx$~)K#ihsGilfQj z^~OB?@z!@ru8LZ3&*Oc-9Q?3Ey+ThBxH7rrR2BI&vb3bQb6J{Rt*3A*+$Wkx-O$9+ z^wx)SR%OelN zEKR>{{n*l4TUu(gXO`9mO*Kyg6-iG?w$od?lwevYheLhc9!)h0gpBg!)5!{#4);;q zYKYEOxb(O$;MPa)0aPX#;FhKJz$%%HaNp8;T3SRVM7uqUS&>CCX zuV~67E4aQW>T89|hSt&w*U!?jqqVlQ{#M)^Xl(R5&p+4O2y-I3wpaB=LX|oQCRveP zt(6O{n59Kp;c}xj0DT5qS}^XFRtpZXv=FodmNrx`5mY*PAT8)K+zQC5#jT0@gU<*w z)mV$Erj|C!3Kxpj%+f|%T7Iv^CNv zS{e%;w=Fw|O=yi*77KUFeZL+25H_TgDai>^XQM5n`<7j{VxR~M;19z*0 z(=4qxnhi~-m9exExb>zMomP53qvDo?`x?@GW>{J&+}F``R?W1u(zx|@7@bwK^hy^+ zE(2Gr$g{10Wzk-8>gW{G%O4f4989vp{b6b4(S}*tTuajgmDm~|^DM0*T4p7}C(6<) zss33lalR#1CctY=*nC_sm#l*OrlsjclZwJB((z_PjN3v>W98_U#|ozxQ7T+@$ZKhf zEv*JxK51%yy{S@#tqBFKfXl6bwa|)K+6qexM=Ne=D=n=yT57Zm*j1KR2lo@)8L_Le z%A+of#GM7Z4(oWOL_H2PW9jo3R;8{FftI!&tI?{{%k_%hjh4nT*zJ}Lf$XlZTG`diu|G*zH246rm!#mY|w z9*Cwn>KDR7wAZ`!b`rNj(LAdpnuX5NsXpZ;Ms|(s%ncTAiMxyDx zYx>-`w86Ob(l>n`SlSTWxh(CWr42>PXK8vTtXgmwT;}xDoblMwe#3oKZ;jNXq4QJ$ zhr>2BeV$s{2;4g??HL;X+(yDqG)*qAtZ<`nceKL2wzSb`ohHXd!UrG2op320N$G+DXcZaWco5-Z#%E8HZs4!HIC?9?J0uaPLo zfhL?UR=~-)3t0ibTG|vey_Q>(&^Jq)iu<+BNj~2#Z5r;ImiEKa4B9nI(;Ju6($it7 z-UqIk$=wpU|8;Z$#_>L0jj5Ti6qb=HX6bonmp(RDmcMYfT{DR=D|S;a0c=mbL&*FHh4Mr1t|W z?w=5c7SSg$nxaH3Je4$2}aI0;>WphCR477*kr>65RVOEx^*$Qim-q zm8C61Yk^xIU8I!Wawz3^r5lbkmbe0U8LNb8Eo~*5Ucaus4n$J{SAj;mx+^`JYPTAq ztY+1ljg`q72)DG%mbMmcp4Ea`^wwAfTnBoO>3nQf0@8ABe?eRd^C#BzCgb(E<5`;C zYOJ(3KzvKnwO{FNganqRYrnKjkkHa}?N{8*)mI+SlV{QqjsvL))LBi2Q0B_T*%UPqP3&KHC6M%mbeRdaxzg#wdhdf-Jo-M zGZeM7Xxxnnr$QC8v_prf8lPj=?Pg`2*y&C0x%O;caZ%zyeB&NvPadK74wZxQpzX_w zPzfqS70^5Abld$4=vKQB6ow+8+w5Xc97;e**h@d{gZ*#-4#8nK0!QH(=vG{}-X~*o zvDuBIIFy7^P#VgBZn<@f9Ur_QAtVAHNCLi)6p}%5NC^R;7onbmzu`QbhBKfSsQS=+ zNkGp!Bm;kUF4ie===H9fU^8rit*{NY!w%R9yPy+cb&s!mdOaW24Z1@Q=n1``5A=tD zzz&FGJvRh941P1!7uu6VOvE_}euv306{dj!Z4GEEKzIIgU@pvq1@I^6O|`$!e+3~7 zl0q^_4u0SdiJ=6PgbJXYfPCsq2#ZUjm&EbOizy$zg5D~Z8L~lk$N{?B*WG~sN2m-x=F%#%*muEoR4ccBf586G@Zh>BndkL=S9lTfJ7Tkpg z@DQ|ppzVUEpe=$iL>dd4&oV$p(EC1Dz)DyJdiQI2r~p-D>7r&7wlbQfODA z88n9$&39%qH!~rje3-LhPDteLb4bU#hRqz0cnxphElebgc1-l* z-nFn^JDwYGY=q4)4C+EXs1MbkI%J0&kP{Lza1(*HRQw<%q=B@MiEh%iN*2&gN_J>L zVf01jKG06e8+Z?o;AtZMy9YPn7ThqM7BdZLp`(S37BX76XrZEYiPj-ncW9ka9CAVs zXoam6bsW%wSqo&X&R>%EHqgGqR?x1_6c`TLvD0Q~Pv`}`p(V7^G}IbLAY_1ykO{Jb zHasrCMbJjaWw-*T-~b$i!*B$S!ZA1wCtxS+hG^IWd*K}&_Z~jLNB9Jv$=~e@j<4_y zzQYf2qcz>Z1|ATLDMh;|&GBjhEukjI;m`_qYiI*)p&hh`j?f8MeYkalT%?f&K9Qa_ zRnEcRnugB91-J;8K(D1wM}%yk9Te@DXoEx>BH94a=0+scAe{Cu#(_I%k3xGA+HcVI zg0>S9gSHFCfZkG>6M`TY=rxxS=Q!(%ktts;xfKB~j`h=dM?k-^cM$Z-(*2-UneGL> zBXt?fg)uM|=D=_;FaajQB={X7U?8-HcF-O=Ko>9CzZ;H+)btVPzTqrr<6{d=yA4uO zQ-9Elos)uI1g*D4>!(pS;vXNYy$Ze3`X;=g5;++^K@bcf;6<~?gZQBRiUbggumiLY zJ)O*ckdW^0J>VTp^&UPzEROXnwA)}fjD#W302)FgXaY^488n9$&sw zw5u=>LUjyn2wRG9`5783y_khobJDDVwXhEU0=>sun=k`#KgB+VbC3*OuTy_d0`DLn zwNFZdJ}?lswkEvbBN-Vom<}_{z(w{n5m7kj!vgpd7Q!M}3`<}sEQ8VX=m2bQ=nFle z8`LA&!r06-@NU9HLoet7tDz=@Lv3gQYhe~tg=`v<*>T*WoVVc)+=bmFx)VA=9Vi8* zp$wFT2V{01QsGVw4{<+&Rm6<~ZA{#y9qxhNnLYs~!X%gsQ^COWI1I^|IOf1ymK~usFMIQzc%{cfC$8czlTVE`HVR(IqAMl9?nc*xozmESCsEAwNs2(LVeW~F_ zC3a&e})&JFQ@9DX(#iG zGN5q!dx@CGp=jFHNexd3W8ilf0V81uyd-KmY-Tu5;ZB3TJ*kA%ZhVlYBz@Cy63#$+ z#DSDT7S_QASV|?A!CZ*=NC8wr?T`jhkm^toDnnJM1{I(bq=qrnupD+6^oAbL6Xc&C z@<0e=fQ*nFwv%a3T1YJ;9>XK@OQbIeJSpi^glW(Rv}0NbTM)uv7c~~zHPtTZemDS! zL3$r(22G(3G>3Jd=DttuJ7JqZW03Zq!rX($uwD14qiBZFpl#E2M3@5;pc<%@S*Sra z$PTlqy*4wSQm|+69JG-c542I~4ceU4W@JNX1jw-2LTasBTXbo*a8;k9s10*E@n$RsVB#|4ESm6>{Hj!n$vD*98 zepwP=esScX^b}p`X+O;u+}mug!%^Wa_8%Dn z2$l*u&?aiCy|52dWCosN$HGMIvIm$`TkUlt_9JO^*Mi`+;dhQ}VRbdD3aV8*Q0v!+ zMVM#;x0@+E53^$sbbVrrd7Vp%cfH#qk)A>V6HZC%}Ga4@`Su+DEGm;h=#S zfK^4PKQ{RTOpBlv3QC^NO3TI~ny0(t6&R=bLgaC>8QW2-{O!&XJp z&Z8H^0#C4muGXMb4t>L0BQRXRd zYrLs|@>5MyqSb;_pzf>;HF4JfZBa zKFAB{K-;BCJB?)nv1uU>q_?yXY%pkbkp;Bhk^vkiKQ7g0N5l#8831~-NTl7jmr@SkYH}1qBU6GWK-0iWgK*udD zEv8>l!sLN=__c*L&>Di#vVxVKDZ0zld)oBP84naEgLKFcGaNxRlF2=3v!A#hPTm7O7=w9qr*aCqZ zZ^jy|`b-7hgjJo>f}`&^UVwWIRu!2K9bh%bz7T=ire~DW;Lvqq72*tV^;#0#lhMC} zF1VdJo(`H(m9a8)HL?;`BQM2&39N*fupAb`GI05+f{P#u=0)(|T$ls1VHW%Wiu5Ne z0BQ4K1<+(}8?ox?_1M2)E!bflY=Auw4LJz28@mg3!VcID+bs8fY{WtSQ;l4oD;$4= zuW%eb!&^88^1A@i|AsSg8cx9pI0@(AES!hSa0xC#V+x~q(q!+#YxROWufbJt1-g#= z4yXlg!!5W8Hz2L$euI4k58yuB1D(5aKLlOwpUA=shy~B!Df&}ve0Z(?m!~|Q!z*}c z9d9P!YWT$QM|fx157_tc1(cCCJmY~@hHiWzN%fpe zQ)mRbwbU)77z)bh5%vMxhFhRaZ(^gcL$JCN(%f+a>qkC;D*1H|uEJ&L%5hul3aqBj z5$4kYd&-DmNPR#P;jh?k&=tDC9<-L&tJuAuJUer&yxM`1Q(ZbhE8O$28nbP1w+3Bm z(u0P48!3! zP=exb+!x_29D!NzCur{4jXeYhU>EF!NlIuV`~{<6B{@hP zCStaRYQF*2g934$i9okHb+o24~ME25p(>&QC+$3_&y|kiUV;dfQ1~KV!Roxe2AV$ZW9MVp& zNpW|Chq!Np{B`EchpYt51kzk{)??g?pOOF4L24+gTe|=pU+_$hePRVlirW{Sar_;U z;MVu}-{g4oFg9N=75)Bl=8-r^z8*YFAy zS&_2Pe9~Wn!pZ#x`hZK{PndVs@lb3!!UbAk6-E<~?y5dnVKgz-w6xFaf6ZzNR2Jk} z4y$8DR*jXp+-eDzTbB}Pt}reuf3=2=?X-?7TrAuwoX(=|SX~XY#*OgA!y96Q7sP?M z5D(&mYtHt;trgvRB0UE^UXhrD5@7Y1g)&rY=^CV#(mklFRaGc;kHV-+_Tp!CLv68AG_V38t$B6ap2Sl_D~-cxc5k)E z*N(8`@sA8R(t{%?_Md3Dvp{B0HvDs-Hj-O52$a2wm&?-iWi$UA&r21>Q3&*L z(pg_V^CfhI5D8FXV z6q-O|C+0cXf*1&Oad*cyhB~-41E|+(;jRJIp&Fzi_fQH`7Pl66 zRk50Ks$eTXc_;^!Aqn9sV)ZqUjuqFDCU$&;b)Yj*&wt1x4_Y{GWuW8QxE%#VPYZj{ z)ZDt`)bL7&TQ`)g2{#j~o5(luiz&IESzpGU7 zDPhdSl;Ipu-_ONr^y&t$Ak4FLwbBC6yp;xBt;0XZmtTM4u;X5c)g@^gb}MXw&9DhJ z!Ul*~&wqb`zOGvfYhX33f|alWmcuew3QJ%yEP_L@8+O4?P^Jg52SCeFFW8S;SNDBb zg^LD-+l$?!{+EX$D53%!0o7Pzp*9h9zAA?1!E~U}ty5HkQ7!a^upi-=6;EU09qzaA z8m_@PI14A>I4J$Mgmc$g$AbjVAe@Gia0=$4U4=xD5ajnaj?0L8VHk$tm_A*?8 zi=g8_iL(H7tlf-P*cb2|p21^KS}Am`TS$PIdnSuGenFqj_wX4$fot}X z6+h6v!#DT}n!MC4LYm9Zoi6-=pT3(^*KWhoohcnp{OW0ol28Qny>cwD+s!X$?WrU5 zjjiiE-$TUM94moTkem!O4s^4nZvE+pi8d4 zCRP`xlpmnOB0rAbWA)&S9-z^q0xGNupAE8t9+=1odSWvZWPuzYzlfatr-1TMBt3p7 zk368q@$|5RS|At5KV~@j%TM~hGm4p(!s#g{wW?4B1F(#(2*==>!ht8Xipd@{1#(SH zH>j}&WJ)yW0RA~R^+1^hr)#^lu$4h^Y&yaZ1TFH4avU>mXZ3$EL`^7Kp}Q{CuFG%< z{Hl|1P0(7l7-6)-(W2%T|isUBz%s_AqBmF1ue zbcb%x1)4!;=mqLMzb25e=X|=n*nK^`R%dYC|~Gf*Mc_%7ISBfTSZgz_8=?WkD9Z#ag50*uCv z0*!^Vcxt(YaZEN7(R8UEkJUF36R;Ynli_#EJ=Ho^cgasIfcX#w^I$Ig0druso+qD$ zV987B!Ae*G%V8NTg(a{U7J<&1*w_H9&J-=zH*wtA#_|iB22BO|3-?;kS)sGR zbryIkteYuumcO@H=WshNBma@EE`mzSbw;hn?YammO~u;){^aEcDhtN(Kz(lV3WA)l zg)my{ZpKQJJJ(PD2*(;V2SPT;3^6?aqd=~TYD&-?vy%j4fgN=Ey9%m`YEs>ft^zwN z%SxYPt?&+F55RudXQ!HbaqNL;*bQytcoLl!@{MKYUa>E4(~1MOz#~6x9Ctr*YRlO+ z_r|${LW6>x7iUhy$ah!V+CEEgZJ@&^Ur=y}+X&($#%Iv{PHw+E>k$v1yy!upjz38C z!ROC%&wYOnuH57wA5;0UJ!P_GL}Yavc`kjO!d{C8zr#B?caUj%)t)-lU-%`&Z(zyQ z$KviDwn%uiO1>W86)^HM?KR*)*&wwKA$yXtRMgr`z1EoZMELs@LrPDfOk9F9Bw}3=d!Z z>Mlih1vqWiPWSZxC&ex{li;S^&z!nuPw|gvW#c*yh)@5kb=|jq>(_YSpcX$ffYj5wXnocgoPiOr$|< z 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 q^oB;USKGR*u3qJpw5=byIN#4`)BgjgATfjh delta 94168 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
- +
- - {{ error ? error : `${label} is invalid` }} +
\ No newline at end of file diff --git a/components/buttons/base.vue b/components/buttons/base.vue new file mode 100644 index 0000000..8df0f44 --- /dev/null +++ b/components/buttons/base.vue @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/components/buttons/primary.vue b/components/buttons/primary.vue new file mode 100644 index 0000000..eb544ec --- /dev/null +++ b/components/buttons/primary.vue @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/components/buttons/secondary.vue b/components/buttons/secondary.vue new file mode 100644 index 0000000..b7e9104 --- /dev/null +++ b/components/buttons/secondary.vue @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/components/headers/navbar.vue b/components/headers/navbar.vue new file mode 100644 index 0000000..f08274c --- /dev/null +++ b/components/headers/navbar.vue @@ -0,0 +1,81 @@ + + + + + \ No newline at end of file diff --git a/components/skeleton/Skeleton.vue b/components/skeleton/Skeleton.vue new file mode 100644 index 0000000..6a167ae --- /dev/null +++ b/components/skeleton/Skeleton.vue @@ -0,0 +1,44 @@ + + + \ No newline at end of file diff --git a/components/social-elements/notes/attachment.vue b/components/social-elements/notes/attachment.vue new file mode 100644 index 0000000..53adbe6 --- /dev/null +++ b/components/social-elements/notes/attachment.vue @@ -0,0 +1,55 @@ + + + \ No newline at end of file diff --git a/components/social-elements/notes/mention.vue b/components/social-elements/notes/mention.vue new file mode 100644 index 0000000..3f21f72 --- /dev/null +++ b/components/social-elements/notes/mention.vue @@ -0,0 +1,16 @@ + + + \ No newline at end of file diff --git a/components/social-elements/notes/note.vue b/components/social-elements/notes/note.vue new file mode 100644 index 0000000..32f47db --- /dev/null +++ b/components/social-elements/notes/note.vue @@ -0,0 +1,93 @@ + + + \ No newline at end of file diff --git a/composables/Account.ts b/composables/Account.ts new file mode 100644 index 0000000..9a5f940 --- /dev/null +++ b/composables/Account.ts @@ -0,0 +1,12 @@ +import type { Mastodon } from "megalodon"; + +export const useAccount = async ( + client: Mastodon | null, + accountId: string, +) => { + if (process.server || !client) { + return null; + } + + return (await client.getAccount(accountId)).data; +}; diff --git a/composables/AccountSearch.ts b/composables/AccountSearch.ts new file mode 100644 index 0000000..6c9ec7c --- /dev/null +++ b/composables/AccountSearch.ts @@ -0,0 +1,13 @@ +import type { Mastodon } from "megalodon"; + +export const useAccountSearch = async (client: Mastodon | null, q: string) => { + if (process.server || !client) { + return null; + } + + return ( + await client.searchAccount(q, { + resolve: true, + }) + ).data; +}; diff --git a/composables/BaseUrl.ts b/composables/BaseUrl.ts new file mode 100644 index 0000000..6a3b692 --- /dev/null +++ b/composables/BaseUrl.ts @@ -0,0 +1,3 @@ +export const useBaseUrl = () => { + return ref(useRuntimeConfig().public.apiHost ?? useRequestURL().origin); +}; diff --git a/composables/Config.ts b/composables/Config.ts new file mode 100644 index 0000000..ec5d116 --- /dev/null +++ b/composables/Config.ts @@ -0,0 +1,12 @@ +export const useConfig = () => { + return { + NOTES_PER_PAGE: 20, + RECOMMENDED_CLIENTS: [ + { + name: "Megalodon", + icon: "https://sk22.github.io/megalodon/mastodon/src/main/res/mipmap-xhdpi/ic_launcher_round.png", + link: "https://sk22.github.io/megalodon/", + }, + ], + }; +}; diff --git a/composables/Instance.ts b/composables/Instance.ts new file mode 100644 index 0000000..87d9403 --- /dev/null +++ b/composables/Instance.ts @@ -0,0 +1,9 @@ +import type { Mastodon } from "megalodon"; + +export const useInstance = async (client: Mastodon | null) => { + if (!client) { + return null; + } + + return (await client.getInstance()).data; +}; diff --git a/composables/Megalodon.ts b/composables/Megalodon.ts new file mode 100644 index 0000000..fb7c5da --- /dev/null +++ b/composables/Megalodon.ts @@ -0,0 +1,13 @@ +import { Mastodon } from "megalodon"; + +export const useMegalodon = async () => { + /* if (process.server) { + return null; + } */ + + const baseUrl = useBaseUrl().value; + + const client = new Mastodon(baseUrl); + + return client; +}; diff --git a/composables/Note.ts b/composables/Note.ts new file mode 100644 index 0000000..478dd26 --- /dev/null +++ b/composables/Note.ts @@ -0,0 +1,9 @@ +import type { Mastodon } from "megalodon"; + +export const useNote = async (client: Mastodon | null, noteId: string) => { + if (process.server || !client) { + return null; + } + + return (await client.getStatus(noteId)).data; +}; diff --git a/composables/OAuthProviders.ts b/composables/OAuthProviders.ts new file mode 100644 index 0000000..43c25bd --- /dev/null +++ b/composables/OAuthProviders.ts @@ -0,0 +1,12 @@ +export const useOAuthProviders = async () => { + const providers = await fetch( + new URL("/oauth/providers", useBaseUrl().value), + ).then((d) => d.json()); + return ref( + providers as { + name: string; + icon: string; + id: string; + }[], + ); +}; diff --git a/composables/ParsedContent.ts b/composables/ParsedContent.ts new file mode 100644 index 0000000..fca2127 --- /dev/null +++ b/composables/ParsedContent.ts @@ -0,0 +1,59 @@ +import type { Account } from "~/types/mastodon/account"; +import type { Emoji } from "~/types/mastodon/emoji"; +import MentionComponent from "../components/social-elements/notes/mention.vue"; +import { renderToString } from "vue/server-renderer"; + +/** + * Takes in an HTML string, parses emojis and returns a reactive object with the parsed content. + * @param content String of HTML content to parse + * @param emojis Array of emojis to parse + * @returns Reactive object with the parsed content + */ +export const useParsedContent = async ( + content: string, + emojis: Emoji[], + mentions: Account[], +): Promise> => { + const contentHtml = document.createElement("div"); + contentHtml.innerHTML = content; + + // Replace emoji shortcodes with images + const paragraphs = contentHtml.querySelectorAll("p"); + + for (const paragraph of paragraphs) { + paragraph.innerHTML = paragraph.innerHTML.replace( + /:([a-z0-9_-]+):/g, + (match, emoji) => { + const emojiData = emojis.find((e) => e.shortcode === emoji); + if (!emojiData) { + return match; + } + const image = document.createElement("img"); + image.src = emojiData.url; + image.alt = `:${emoji}:`; + image.title = emojiData.shortcode; + image.className = + "h-6 align-text-bottom inline not-prose hover:scale-110 transition-transform duration-75 ease-in-out"; + return image.outerHTML; + }, + ); + } + + // Replace links containing mentions with interactive mentions + const links = contentHtml.querySelectorAll("a"); + + for (const link of links) { + const mention = mentions.find((m) => link.textContent === `@${m.acct}`); + if (!mention) { + continue; + } + + const renderedMention = h(MentionComponent); + renderedMention.props = { + account: mention, + }; + + link.outerHTML = await renderToString(renderedMention); + } + return ref(contentHtml.innerHTML); +}; diff --git a/composables/ResolveMentions.ts b/composables/ResolveMentions.ts new file mode 100644 index 0000000..0616ff0 --- /dev/null +++ b/composables/ResolveMentions.ts @@ -0,0 +1,20 @@ +import type { Mastodon } from "megalodon"; +import type { Account } from "~/types/mastodon/account"; +import type { Mention } from "~/types/mastodon/mention"; + +export const useResolveMentions = async ( + mentions: Mention[], + client: Mastodon | null, +): Promise> => { + if (!client) { + return ref([]); + } + return ref( + await Promise.all( + mentions.map(async (mention) => { + const response = await client.getAccount(mention.id); + return response.data; + }), + ), + ); +}; diff --git a/composables/useConfig.ts b/composables/useConfig.ts deleted file mode 100644 index 16d136a..0000000 --- a/composables/useConfig.ts +++ /dev/null @@ -1,26 +0,0 @@ -export const useConfig = async () => { - let host = - useRequestHeader("X-Forwarded-Host") ?? - useRuntimeConfig().public.apiHost; - - if (!host?.includes("http")) { - // On server, this will be some kind of localhost - host = `http://${host}`; - } - - if (!host) { - throw createError({ - statusCode: 500, - statusMessage: "No X-Forwarded-Host header found", - }); - } - - return { - http: { - url: host, - base_url: host, - }, - }; /* await fetch(new URL("/api/_fe/config", host)).then((res) => - res.json(), - ); */ -}; diff --git a/composables/usePublicTimeline.ts b/composables/usePublicTimeline.ts new file mode 100644 index 0000000..66389c9 --- /dev/null +++ b/composables/usePublicTimeline.ts @@ -0,0 +1,86 @@ +import type { Mastodon } from "megalodon"; +import type { Status } from "~/types/mastodon/status"; + +export const usePublicTimeline = ( + client: Mastodon | null, + options: MaybeRef< + Partial<{ + only_media: boolean; + max_id: string; + since_id: string; + min_id: string; + limit: number; + }> + >, +): { + timeline: Ref; + loadNext: () => Promise; + loadPrev: () => Promise; +} => { + if (!client) { + return { + timeline: ref([]), + loadNext: async () => {}, + loadPrev: async () => {}, + }; + } + + const fetchedNotes = ref([]); + const fetchedNoteIds = new Set(); + let nextMaxId: string | undefined = undefined; + let prevMinId: string | undefined = undefined; + + const loadNext = async () => { + const response = await client.getPublicTimeline({ + ...ref(options).value, + max_id: nextMaxId, + limit: useConfig().NOTES_PER_PAGE, + }); + + const newNotes = response.data.filter( + (note) => !fetchedNoteIds.has(note.id), + ); + if (newNotes.length > 0) { + fetchedNotes.value = [...fetchedNotes.value, ...newNotes]; + nextMaxId = newNotes[newNotes.length - 1].id; + for (const note of newNotes) { + fetchedNoteIds.add(note.id); + } + } else { + nextMaxId = undefined; + } + }; + + const loadPrev = async () => { + const response = await client.getPublicTimeline({ + ...ref(options).value, + min_id: prevMinId, + limit: useConfig().NOTES_PER_PAGE, + }); + + const newNotes = response.data.filter( + (note) => !fetchedNoteIds.has(note.id), + ); + if (newNotes.length > 0) { + fetchedNotes.value = [...newNotes, ...fetchedNotes.value]; + prevMinId = newNotes[0].id; + for (const note of newNotes) { + fetchedNoteIds.add(note.id); + } + } else { + prevMinId = undefined; + } + }; + + watch( + () => ref(options).value, + async ({ max_id, min_id }) => { + nextMaxId = max_id; + prevMinId = min_id; + await loadNext(); + }, + { immediate: true }, + ); + + return { timeline: fetchedNotes, loadNext, loadPrev }; +}; diff --git a/emails/welcome.vue b/emails/welcome.vue deleted file mode 100644 index 4973afc..0000000 --- a/emails/welcome.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - \ No newline at end of file diff --git a/layouts/default.vue b/layouts/default.vue new file mode 100644 index 0000000..b94471a --- /dev/null +++ b/layouts/default.vue @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/nuxt.config.ts b/nuxt.config.ts index c5e0f68..feb517a 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -4,7 +4,10 @@ export default defineNuxtConfig({ "@nuxtjs/seo", "@nuxtjs/tailwindcss", "@vueuse/nuxt", - "@vue-email/nuxt", + "nuxt-headlessui", + "@nuxt/fonts", + "nuxt-icon", + "@vee-validate/nuxt", ], app: { head: { @@ -19,7 +22,7 @@ export default defineNuxtConfig({ }, }, nitro: { - preset: "bun", + preset: "static", minify: true, prerender: { failOnError: true, @@ -35,6 +38,22 @@ export default defineNuxtConfig({ define: { __VERSION__: JSON.stringify("0.4"), }, + server: { + hmr: { + clientPort: 3000, + host: "localhost", + protocol: "ws", + }, + }, + }, + veeValidate: { + autoImports: true, + componentNames: { + Form: "VeeForm", + Field: "VeeField", + FieldArray: "VeeFieldArray", + ErrorMessage: "VeeErrorMessage", + }, }, runtimeConfig: { public: { @@ -42,7 +61,7 @@ export default defineNuxtConfig({ titleSeparator: "ยท", siteName: "Lysand", trailingSlash: true, - apiHost: "https://lysand.localhost", + apiHost: "https://social.lysand.org", }, }, site: { diff --git a/package.json b/package.json index 6ee5a82..97c2d61 100644 --- a/package.json +++ b/package.json @@ -1,33 +1,58 @@ { - "name": "nuxt-app", - "private": true, - "type": "module", - "scripts": { - "build": "nuxt build", - "dev": "nuxt dev", - "generate": "nuxt generate", - "preview": "nuxt preview", - "postinstall": "nuxt prepare" - }, - "dependencies": { - "c12": "^1.10.0", - "nuxt": "^3.11.2", - "vue": "^3.4.21", - "vue-router": "^4.3.0", - "shiki": "^1.2.4" - }, - "devDependencies": { - "@biomejs/biome": "^1.6.4", - "@nuxtjs/seo": "^2.0.0-rc.10", - "@nuxtjs/tailwindcss": "^6.11.4", - "@tailwindcss/forms": "^0.5.7", - "@vue-email/nuxt": "^0.8.19" - }, - "trustedDependencies": [ - "@biomejs/biome", - "@fortawesome/fontawesome-common-types", - "@fortawesome/free-regular-svg-icons", - "@fortawesome/free-solid-svg-icons", - "json-editor-vue" - ] + "name": "lysand-fe", + "private": true, + "type": "module", + "license": "AGPL-3.0", + "author": { + "email": "contact@cpluspatch.com", + "name": "CPlusPatch", + "url": "https://cpluspatch.com" + }, + "maintainers": [ + { + "email": "contact@cpluspatch.com", + "name": "CPlusPatch", + "url": "https://cpluspatch.com" + } + ], + "repository": { + "type": "git", + "url": "git+https://github.com/lysand-org/lysand-fe.git" + }, + "scripts": { + "build": "nuxt build", + "dev": "nuxt dev", + "generate": "nuxt generate", + "preview": "nuxt preview", + "postinstall": "nuxt prepare" + }, + "dependencies": { + "@nuxt/fonts": "^0.6.1", + "@tailwindcss/typography": "^0.5.12", + "@vee-validate/nuxt": "^4.12.6", + "@vee-validate/zod": "^4.12.6", + "c12": "^1.10.0", + "megalodon": "^10.0.0", + "nuxt": "^3.11.2", + "nuxt-headlessui": "^1.2.0", + "nuxt-icon": "^0.6.10", + "shiki": "^1.3.0", + "vue": "^3.4.21", + "vue-router": "^4.3.0", + "zod": "^3.23.0" + }, + "devDependencies": { + "@biomejs/biome": "^1.6.4", + "@nuxtjs/seo": "^2.0.0-rc.10", + "@nuxtjs/tailwindcss": "^6.11.4", + "@tailwindcss/forms": "^0.5.7", + "@vue-email/nuxt": "^0.8.19" + }, + "trustedDependencies": [ + "@biomejs/biome", + "@fortawesome/fontawesome-common-types", + "@fortawesome/free-regular-svg-icons", + "@fortawesome/free-solid-svg-icons", + "json-editor-vue" + ] } diff --git a/pages/[username]/[uuid].vue b/pages/[username]/[uuid].vue index 1db723d..396aeb3 100644 --- a/pages/[username]/[uuid].vue +++ b/pages/[username]/[uuid].vue @@ -1,70 +1,17 @@ - - \ No newline at end of file +const note = await useNote(client, uuid); + \ No newline at end of file diff --git a/pages/[username]/index.vue b/pages/[username]/index.vue index 3071e77..266249d 100644 --- a/pages/[username]/index.vue +++ b/pages/[username]/index.vue @@ -1,81 +1,66 @@ - - \ No newline at end of file +const account = id ? await useAccount(client, id[0].id) : null; +const formattedJoin = Intl.DateTimeFormat("en-US", { + month: "long", + year: "numeric", +}).format(new Date(account?.created_at ?? 0)); + \ No newline at end of file diff --git a/pages/index.vue b/pages/index.vue index e847fe4..dfbf74d 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -1,70 +1,62 @@ \ No newline at end of file diff --git a/pages/oauth/redirect.vue b/pages/oauth/consent.vue similarity index 74% rename from pages/oauth/redirect.vue rename to pages/oauth/consent.vue index 10b75c2..6121bfc 100644 --- a/pages/oauth/redirect.vue +++ b/pages/oauth/consent.vue @@ -9,75 +9,77 @@
-

Allow this application to access your +

Allow this application to + access your account?

-
-

+

This application will be able to:

  • - -

    +

    {{ text[0] }} {{ text[1] }}

-

You are signing in to {{ application }} with your +

You are signing in to {{ application }} with your account.

-

This allows {{ application }} to perform the above account +

This allows {{ application }} to perform the above account actions.

- - Cancel + Authorize + + Cancel +
-
-

Invalid access +
+

Invalid access parameters

-

This page should be accessed +

This page should be accessed through a valid OAuth2 authorization request. Please use a Mastodon API client to access this page.

-

Here are some recommended clients:

+

Here are some recommended clients:

-

+

Many other clients exist, but they have not been tested for compatibility. Bug reports are nevertheless welcome.

-

+

Found a problem? Report it on the issue tracker. + target="_blank" class="underline text-pink-700">the issue tracker.

@@ -85,17 +87,15 @@ \ No newline at end of file diff --git a/pages/register/index.vue b/pages/register/index.vue index 1d23859..57e4d64 100644 --- a/pages/register/index.vue +++ b/pages/register/index.vue @@ -1,100 +1,82 @@