From a949e1d3200bbdfe4c7c14aa52acd688ce393a39 Mon Sep 17 00:00:00 2001 From: May Matyi Date: Fri, 8 Dec 2023 19:21:40 -0800 Subject: [PATCH] Docs > Update installation steps, remove deprecated features --- guides/assets/images/first-ios.png | Bin 0 -> 23609 bytes guides/assets/images/first-web.png | Bin 0 -> 16639 bytes guides/assets/images/hello-ipad.png | Bin 26450 -> 29189 bytes guides/assets/images/hello-iphone.png | Bin 23609 -> 22087 bytes guides/assets/images/hello-mac.png | Bin 10553 -> 15531 bytes guides/assets/images/hello-watch.png | Bin 0 -> 13735 bytes guides/assets/images/hello-web.png | Bin 16639 -> 27558 bytes guides/common-features/modifiers.md | 188 ----------------- guides/common-features/render-patterns.md | 16 +- guides/common-features/template-syntax.md | 3 +- guides/introduction/installation.md | 195 ++++++++++++++++-- guides/introduction/overview.md | 119 +++++++++-- .../your-first-native-liveview.md | 21 +- mix.exs | 1 - mix.lock | 1 + 15 files changed, 287 insertions(+), 257 deletions(-) create mode 100644 guides/assets/images/first-ios.png create mode 100644 guides/assets/images/first-web.png create mode 100644 guides/assets/images/hello-watch.png delete mode 100644 guides/common-features/modifiers.md diff --git a/guides/assets/images/first-ios.png b/guides/assets/images/first-ios.png new file mode 100644 index 0000000000000000000000000000000000000000..c5f388513f594edc798cd325b54f15edb58faa17 GIT binary patch literal 23609 zcmeIac{r5c|38lGLNA3PTNDyP$YiV)C2O{fA<4dl8Qa)eBuSKz-6;DqvKxjw5bOWkb5&-IN;h`iWP z8@w-f9pC7XHF$=Cl6w^%B$jV?<&M!LC09;*Rc# zJu$CEI6Qu(MmPHP1A{N^X@Q`njcrVC*=lQ3Tm;AT6qKP36x85|68v(3U+_ZSKBu4q zf7!tA^)#ygx=I~7kG&w@sCrlZ)-CY&uC<4ajjN}<8zS43LJMTo>tJY#Fx9>T zv37HjuzKkBz(&HyM{CzJom=emujwTHtagoB$aKRI8k2X06N^xQe} zgZ}&HPdROT9RBA?uAcu^3sg{&d__`9;v6 zisI4z|Gz8$^Thv1Y5G4YWfWxoGv$9=`TwRg^0e_#cXI)cL@52woB22Ke_s4Ip`s+Y z=Ks+Wf13H|ENEvXMn%d0erHOIZ}^2gC@54YZe3S3^r4(5(p4HZd^ubmCEU1V`h|AG z;!~QvO2e@1%kysCLbY64DSf8t9p8k?zsXB|fB)dpPbUT`ju$sivCo-CoqI{ce*9uO zefkTU^}Q+i?bOy`8@t5?T(!6DqJR79oH)v>J$^NQVD%cZJW*5`G3eP2r3=^?u-mn} zR~`}Y6T8ttR5BJh^hmiuK}mhW{@i1Q@_fF*MyK#g#Xl;~$C>MU-SKIsuwM+H~Ebv{8E(vQ2|M?MZwSq4=3AG>)rc@l?{f6?Rmz+cdqV))8OC<@h&5dA=Od^9NH<(fjXAXYG<6-BlI=4*?m8uoszJ zTfeKBZv=UAc$Dl!k-(=|wI|it4opW$Ca8_|G%uOB9&Z;QXCNe5l%)2Al3WIg$Hi37 zuHTFO4z1c-Y33e`H~ww=`5nmQF@*7wS)+qgjvRF_+#BxMD%*D&FYS#%_pPqc$(X>AMxzS2jUE$A@jZ-kEX-A5 zH8N=LLyzZ1AdigKoT+C6yUF`1{*M&)Ele4dHq2S~iUo5fVSB3gmv>{WbzY3J?9 z!s-QS8N0Su9zPkvbn;`RtiM;rkC;yM#DJmJ?J_bLFd$)t|zthP$!PYjn6_ z+|EUhJ8u5Y%`0?t-W-~IZ~a;d43`Sui5L?u>Gs!m)|8!cUf&7XG(MkJukCo8VC^&a zsgZH911;nd;8rye>#AkO7Yz3r$S~6MpLep90pqN6FwbXuBCfT8)6#j^cZ$b5@b|}P z9qIj@b(y?^@&r`-{^rOci>?E0-QoTskg>?Y%GPkU5HpSM^VlbZguv9-FbL`;tuJ<7nV2nG}Vi>yIeG81y7%- z*#v>nt1T0IoYUTD0O zfN5hTeXLTt?-@3-_qsHY4UPA(pSO1qX0iJ{7Wd>ce(JZZsYj|~=_OR{Pd$6T) z45Z?YncVyruZ_$1KT~Yp!>+bnBjzJX_qZ*}B(&^e6Y~-wcL!xK^(@y~?6r29#4rdL zyWhYwhLdKvo!Z?68Pt4P-1e06;dDyh?R#Q(3ogr=d;B~<`9kpZWkHSCh{HilDza{s zj{qA$E#lzT-JXoeW1A!HjXV-pO277o-UT2ySaS^-e6qwM?Bw3^PzO1}xjY~Yz*t|!=&5CNTBQvw>bofX^EZp=0NFSMR{Ig>p=yz%y zG1~J=y=W^GTkZ?+F&J5!?rP+@cIq=7pa1<#?ZnB8w_&wq$3N*}Vr@h>31h#PAUW6k zN^4y=l%KM2I^c)DgB~{3W|v>m1_|MO#Vy~qUoc{Zo{7>940&^tv`>Kf9&Asws-Q$P z_|nEUXZ7@#qujo5Do^dgP!}N23q~X4hc8#pm%~Og2s2&o_g%zexV^xj``X2rmbyP@ zSMWp=mcNY(Z=Qu&hzqK(QxQz@z4J~O+~n)9xIwJ3{cH(p=?h)O>aZ`Y1MnLzRfaO(lyHu*=uW3nw!K!jz~2&dJ+ZHib2HRySDJ&IYFJn& z>ThzpjKAid5}TDD@h|B)pRv8WGLo^Ve7LvT+MRQk=*!IGmp$PDgEK_4PNfX)G&3XV zZ^8UCOk^f7brZ3$p%@s!8vimEao(sV#He{?vTMrQmoj;&CuQP7qVw46_E|+E_d$_> zIAc9|A|m>lP)2(ZK{LBvJHw{yrB|1>JW}`xQqutSgMh*t?~MP9W@^r0FO@6u+gzC6 zcvq&M9z7m8w7tUCd-wIJKb{)a0in_s^Y6d)w_n3#G-Ayhv6C@s`ihlyBPg z>ezYxB3RJxhB@{2Ap1PKYqy&RQx1_m(Y$3W5Q)4zfl?;a7aGn=aaWom+5plZ*UOQh z?`P~PaqsrtmlzNCSU8|ROV;}9@);(}bfnemZW{+xttf)erEBfP_ZTG;^Wlw4ZqsW9 z`yj@Dp3@*a|jZWqwcD8Wg99_W{a-fi9 zx_{BZRTf6`W#sU{+gnFXH4BgDt=P}i@dV2buH;R}wY1gX25zODnwfNp0G5l)khtvn zVr=k-5-M>?U81^L==1NJyrwvO1o`dgOQZ zI#qd3Vfq+Nx&0iQW8|osv_A~DJKV@axvxZjY3S;+2-)!KHtu0Tu1-E>RWhx7a~E|M z!k3M+;$d`K)AP^1wc1H*B)gfOy?3$NVq`#F9`!!Gkj@=>Nlz5snnpC5*EZyOkZO@p z>^*r^me*xKRA`0OLwvRGB@VT@;JP_jF;-~f7ZK>95m(VM5$?N#rP4v2fbe}pF_-q4 z&Zps6;ol1)=y4`EI#NgcQ@K;6!}#rs%wXA4bB$BZu{&E$3UO6?mW8LO!%hu0M!4S@ z!pEoqzgZwQlj1icTG5wRk9Kh>;<#YZs9Z{iIoY>eY?x3gSA+P5-pZ}NjluL)Vi#|T zRORvH`nt$seomRRI_3Fli+43!a_>|qQDneG%ii6BiTZM$DXWp}cDjbGK{xT#`y*|l z-0-w18^f!rZDyh|gG(Z~Xr&V^stQYL~d^!=%(l-tV>G5uM62j_n$(<5F7gMnu8WK4A`b0u7~Ddfholl2ztaauiw z;PeCYs%!Yu#uY?dNvzb!EIvTvcnpo%#mK?{XYuNko}}Qg0KYP(Wfrg)e-ZrT_Efe1 zQyon)5yTDS<+M%FD~R{6(0-J4i1jY}^(Hf&1H)Bt=w-g`f+UGoGe&*J?kh0kNIfvTnm%g?R$#I_X#XE zDo=DslPnmKlIaJn2=$9#LPaVIqpAClt60Ut(v_75qSx0F_6+cQ+a7h+sTNhzyD426 zK8}@GhdYg$$Zhy?4-8At+W$Q+FFKuI505Mi#xIl&XD#oXc*laRQ}u42Suw)tJk{yW zNfi!IK^UO=i>!vD2Y2u}gETl3B8SXJfwXe{X1&>2r+BY2j8TOoWI7*5A0UBvYCfIT zY|aWH@p}%rH&(Sr7w&aUX{JV+u~^0F$d4bQ=Vp1?)Vh$GAQ@P!|+rB1xXs{UZI$ zdt7}E4*bv7RTl;m-WS>uyarvExOoYWM0pVQ!gazoO^!Q=;DR#Npb-a_t9{9PT!wP< zQk<-WDC~UsU<;R1zJ8^y+H6Xv1(+I)O1_vW?)&W*poGQ;dwKeNe;9e{-oQ1*>SmQW zA2{;_I-!w7cU&P9RIDc|XUcH?Og8GNQn{`eb3-y}`odM0ZTqA`5&g@g>xr?@k&`0c z$S@Y-bf#>;AY6%56zhjI{Lndi5k5Uy{f`}3wR()E>Chn8>D0NXa@`8ndg84!B96_! znS8nt+*9}fQix$WC{6E~;%6zvcd zPjN)vh;CEZl6%%9{^6@Cw?5>GQEN=>L}o|FRH>Ay%ceX}vI%NLSF_Zl@abY#tacUL z92&Ps@!B3UIY#?~@4QO0JT)LcvjX4H zhm{+i;rkG5yfzaZhL)m2)?ss`8s_}&8ud{??wQvlV(O6VA;$fTj69OPDItZEczF7Z zWS046;{>8KCL0&IC*e4s8S537UT?|B?-G)OTHY&GOQyCXZ(4;^G^riwAkRMP^p+wq z;(^IOdW~@hz24FyLfwP5fj{$ijGK0Cb2EQHu4Kg24S&FKAQ=iU*Lu>J7!j3Pp(&+# z1t({?vVONf1hRvzj&l4wnyKSV*C3pXtdEqq#RGPO9bwkY5Z}zHD`4O~oXr))-4yei zH+sc$tv5n!Q@yKw3LX8HAhzA+UHeCsJ?SQYSb}*Ychpn`hYE?(c2`MOzCa-v^ zxm$?LayyHOuL40i#*@BNj@zDPdu?^z>040h>z`;`A*)ehcTUC3zMhd-~*fWY|v=`CvV5MzHYgQuAAGLGQDqsQ=n0HKP{d4}vjP|{e>h#dse{@*`)^m7gURx6P zXSM3ddlcLDl=<2-WN-ps;R=GvbF>tbmUu z$@Fk0597*mZSJxsUX`v2)7!m$jFyc2$WjI@)=*iG|9CU``r5+fyIDHSIwvj(A%56@ z4yLsI5hXAgrOx6W`sV7hQ#DXM3hEOtuB%L4ajl-0lkwkrR1u2y`3dD7?T&@x9XB|u@?yA*d@{M~g3J9@u9^Lobn%SQOO=6= znA56e3WhTRR(=W};SLL6bLpo`(8eqXpz~q@d~(OLO<}6C@G_Ty;{~qd;DyTpQ_0?B z2*~b&PLlm_;I2yrQpS71+s^*HDTPETxEjCXMBAFRvJ1zIdI483|ynZm7dB)6`t~ooVb|<^T zh?DSA|EmAiXsE;~$W@2oVV%b{Sx*2k`29GqVt)X~deuYH4%Lq0FxdW2)~vS4xZ&1~ zi5!)#0_dCDp~`z-vUiU^FO*ywMlDvIv^ISri%}jS{xE zWp#MCVd@h~(AF5_S;QQ84q`0pS{9aVHqPpsxTRl8WiLu*umu}%Z@5zGjKsRyuKi|O zbp{weW+mUboJvt#HJ=oy5qH}G_WGa=x@q1A4|WM})qiw*y6qq6(&u9fK4pH8Uk|qkOQCO8$kkBs2a21}D98pH!LPNBV(xH?3@jE3cX z#>%MRT2|G4s_AN0uw;XX8HW6Q1Mt&(Z=&#-JR02z}55Uk6pyg%fo zu~0ebmc&AruJXL!P%rdO*>TzVTiK1hmWMliwsrd(c{aQ?<+o@M$CBFA5jPJnYv1nf zZs>)Idrr1U(ee85PYEYrFXV~U$Ss+`Tx3BX-t0#7S7u;;9_|{Ew_V%c~qR8ZBY{xzBK&*8g0Xbcx{V!CTD-9g5 z{Q6W~__91|!}-JOjWyrC54{457B{At5hWj*dPr8oHNKNe^{n!nL~l!@lH7|z-IA}c zaQn>F6Of;|g$MxIiT0fiTumIQTx@PLLJVSAlC=}%TFHo_r?<%DZ~wZ%gv7gSuXem|FJM(Iiisew$@Cz+O{oe`uDGGiE~9w7xOCHZ>1^)V1KafqohhZ zd#7N;@2}3td?!ik@mO@NLjBe*0}Q16ntNTl((ZfJr?fq%-X_E@*!T8W5gzrr6)ZUo zsF{eaKI-U;opD>QE?fT2EnmZn2uUo|>!}zilQm>#!xrDze|)8R3C!GB?%L@_y z>vIEL@PjgdkXOH~1W;Hj4X3$Y<(S)xAvu=8fzTY@qxu0W+xdJ# zrd{zjl~X}kuVdb69^Rnoj5zGN!TCi03+!&hVPqd%2KA&_Crg1gJZa#-Q5y9YdUwF( z*bisThvjTUs($hP7S|gO^9r$!<uj^Xhy;=GXckjyxPV!d|G=J?ou~RDAe&6p_I7O zKG*jYyF3xt@5vPp4T>JvWiEzp^nWN!J%;MPRucN9PgGzl4Fc$?73c>K0jpi%rn&9#7TyP9HH8HZgj#)R zmk@i_2Hrg9GJ8%7A9NlCvOI&f_xMvKy$z45axRwN)p~ksGd*G@MC29q)qK;NG@l~_ z*FLlii@YC@gf^E_+SNG;l!U%7>C(9-UJ|!h{R^Mc1)%y-^D!JtN^Gtd+VM>_XW)X)y?Z?gZ7q< z_)NsEy`j*ZdFY;D1y*91D}>~l;)t9cCjyuR9(3PwN!~4DC(huoR=1|kt%WGg@ayjH zH!6{~a$iSEe-unRnT2&zYivyP#rp>H9d0!)?EQMq?P}khgC^>E3dgUX5$El0#bFbU zR`j((+TN+NGv|=6r?}@Bs~-ibn`rfT{>aMmwTGiuc{hqG^t~4&xJqlxMy9_Cl|A-& z>K&00T?F~vjxP@;YI`$lP^PJf@FEQEwC6m|T}iakyN9HDEx6Ab z#4D)VuZ7u8cE6qDj)FSeE?VMc?{*D%16W_`s0~6{<#mJ$tTje%x=^!cr-tnognc^ zEaj%%VZn|hb9I}s< zp}9CtXqLuul(I?96ntU7VNrCm!Wg@u#wO!2uDJ+yU+?DS6 zo>)|nYRU7v^zUW8!EYp(w2k%c`CC`*@v zpeIfHAk8TQ*)XD1tn%T`)VuzrzLHzPe3F&X(V=T9Mn2F9$tTx7ue>xWneQW+xy z54+yt5A3$yXl`{?S*-}P+q|_@7Md(}=IW!g0l*9rf6gdvw0X~eLTse16LkYuPRa!A ztQnVBhzKDzKVe5Tk$A>KKo?ek^mkpqK%2a)AOio>WD^l z&?(O%Sj?6U5l$9n;QAnzE@zz1=f8Vudr85;=1xJq+(3Og$Bw0LUDLaA}zSpnK)7<8_v-rV~} z!>U`4cqm7=g{1Qwvq%HRflwE-FypFTZ7|`7F|yX@yFln6f(1dYS=;R{!+PVxJ?xxL zOyNmgGMhR53O1K_(VtoJZFpO=y~1g1d9ZQX%v?dx;Q=#DkLPBm#S`NV$g7Vrb!zG; zdM*U-9W=Tq6*TWM9{RZnR|gF-;^dhrRwv#^Jk(Q=*GGGF)LDG^0e_;c+DAmG2_tp3@;=s zI*cSzHtf5_T$lCe8Ro}G(jv6f9+b&;(ov}rDjtP*0M68L=OJbm|%(9dbpMN$coo$F?T`}I2ajZ-|6*DK7Vq*wugzt z8~NJY#9}|m$HtDHRJ5`fbcpgkX=2wB>3bzLc)_4u()JOG4I-D5=y3YP62saj@5cm5 zn7en#j2?~pDucbX-iVVw;DOHc2p^+TqC{$ZEL6Kv8KtNDbVnLNOMQ{SzQJR)RX!0c z)N$zKFGd%S{U!*fg`d!Yt{a*J&Cmo>0tg1;p6sSs8C5j0KDThYaP7i(0e;Hl?&1-W z&0K|N)grfOtsx6~i@JO8vqbgWgEg9KGyfRvQ%mvVV}lo>J6n6W%ty3c0#?mnCm;Ho zQ9*_fU=>%buDhW%)mmg#Z!VcwV%M(2bgna_$LjpN0_e{yg|O4ep-lCr&W#jgdr{S}P%@Af{MQ5Xv_z5Ib=cb`i|=Qk#v`-FFqXMS}k#P+V8)%-k#cq&~TjH!|pgEQ0*jXu@8b9Po$q||GyZiC5QS8d)we_wC$ z>2dmQEtM(JHGGrS6d4Lh+opcUL|C%#2)ndU>RQYA5ujkfDuOf!`n!>_7C67EQv30i z_i|*YLB*57UQ%rvpB@c2|K4vNqv1dXy>2pz2)$z!-+67kd_u5v~2qN zM=-;tr&M}^?aI+rpvfU`62y1Dkl`axmK+KJ{fqzJNJGiVMy&RhRQ$qslrQ}_)l5*q z`NNmky<35TM+x{T1Ge?Tv0S#~2Z34}eh#7DZ;vZpQa%Dvs7p_FsA=NK&=4hc6GP=< zbQ)d1#}&m;^20zO1%&MBkFuViHrLF)X8PYHCf8gI`5*so>^?WUojMitr%JDw7&e6L z8U9U5ALeoKPnN%^5g&74wseX|4+KgeJ;g_A>4qVHWI##5*M^?akPAiuhQWrAzqDc` zxgeiMFA$DuA8Z*6WvFAeCL>wnH1uKPi9kRIuprCesHMTnw4jEX7Qs=PwG0&G%5Txo z|GoKdYy9mSe@DvSso?L#`1dpM_oMlDRq%I>^moPhcm4c#gYb8|^mp_4zp*=3@uc(z zPNa0TN?gsEey$?EA zO`Xic)UMQKBECrmE;D(4`$yyb_Ucr%eg+WkDm_0e^FQ1lIdt(NB288SN!?SX={@8g zdPdIq{Wj3^%tGK7o~uZxXpXb(73Kw(F9q#%r6vF}u<7Bwa(ro-K{en!BaBzdo_(u3 zSeIM{NjNi2c7m*~rzrzo)3cG9yyUNOh#&q*HY<1z z*u?$A#?vsqZ$YW{RjdBRYetc?O*Ge+5rbTodj#7pR9lk5ByizKwJRU`qbq@ipps1Z zKU}Cg3@ia9;7nO0@e#2|8Q=tafg-ulQgaCu*$ZB1y7G@b=JQaMXDi?U?19FDxdgB) z@jxm!l3(0(QC3^0>$I%nyLbpP_nu=;MhkF$xytq5fBLcuZsiCRzs7t>(DTp3*naM~n3K1PS#bQp`ipe+q~Rt|V^nZP|C83akM1Q5ZA zvVG=VireGSWG(V#prokq9e<-SG+GSwGL7@_ahfiRAN8!tbCXpoO=8^hkIC9I#r5vH z3&`rZ;&3v1u@YD9;lO$$a!i`T;xiw8xB6$-pHlpK-jt}fa)Uq?QL?`=C|MF3&5=+G zr?mB=Ng80cv^B|f-2 zDn)GnaKJ9Lb!UBcYPcG(4P@=3nXUSTU7&ZjC_kI<0#KC3W)2z7fWsKzfH{v&67x(j zEzeap>iG^XmxO*Fs!0jlnQoyCMHMs^&E)1`9V`RZdt7UvbJ2i#Hj9T_Rc~+156Y7> zCsuxlRDuiwdPP7a!~1O8otu}czQ|}`5r-s_~$0~f!4rwsM4JYI@eUw)1yRiRGLci z9O9_avDHnw+Tr3p7*nRO+9DId^1D>lADAm9=Ste;z0Xd!k z!2j-R49T1w!;OH5hRRrdr8XHp#&Y#@KgFXdmATONy$Q)6DJ_YrkAqzu(om4+cUtr| zIOkBhxdMo*ks;viIC7(9r3PX@q3vD+JYHTGr>wmBp#Dd8K4dhBm9TpnsHp~ADu{Q0 zUSY`hIZ#^sO!ma{zHCAO8E-rguXGLp+GW9ofV!`Hj&t0*o|@~8;+>O^{dK>lZCw_5-`UHw(EWsugwwmz-LY3}EyGZ>Vu7D4;S z%{?&Q-mjB71iMxn>Vao2WNfU*uumjS7p^RiGe ztMVS`7Olmq@=Ic7Hh2MZVzgA1+owk#BiW*mYy*WFTCA}xMB&H$lvDi z_#t51n}5%iQ0ibCc0TrUR+7hUtCtCp8!8B7Tr6OM9dy-%F$%)^_s1e3Kw^ocwecvR znKLdQ0BjM5S=dC}=b6jVv;})>cn0eN|5a77n?%k}KrJ$*>l@_Mki(v-Bf`mQ7C%E> zt^+aQS{oiiBO3CGx{Pi^&OU6HuRJ+xHdTt-Lg1l5i9h%Ho zT)*1tnalTsKTVmLt7Q8_6fx)IsblW_K8m4R zT_x`A%ri`RcbP$78he3+Xj$Vb@%%@ZR*fz_eE;vAkm#|5@2Q7-b~3&z54-Au4!zvm zXIb3l*X?Oi=$^4KO%I2TslwI?p7B!FHJ>4Y`wk_W4p)v^#~B<+5D2BDi(Oh$KA7~4|<608$zF|PZBnV%TxLkm{AOQ z)r4DJhG`R<*G|>-rBKLkNSl5Ti$?U5o}JWrM07t@ci|AGnzk#AP!1{l)x-*)E{Zz< znytEpHaO{QIEye8P*I|#Cdz-6vF`y1W|j5sOqV9C7gCeXp3K5Ly`qo1*|-3_s}Cv+dOw1DUk}bI zh8kyP91iYY8j?b3!{Q-DD{g^af@GhCJl;6v!l;jrK+5@Ef$lPqNBVIytX>V(?1Cmyjl4>A7LcW zDdKggQEV9(_m1?4zo>^&z5y>IE#04zFfouroc-tR{6e>HY#o&85aF$3 zN2PphuCk3^>CoVtI9%oabLL6#%Ht@JM@vW9seB4%3iDl^WLItkQ6(5%U_mDsjQi-U+@R}h>jB}+%8QK6a{(%r^OTYo>U_C)Te1@X6k zt+p%6H-&P*iQm|D3Y@p-j#LEqH|7RzvTg>jfv8uyywt$;3uKvx^fdr>yoov~z9VJR z^zQK0sN~W4aT+pq>wPi(e6zF+a;AG+6~yoZ*=$9AE_LV{QWoFIfii^9{QGX%d_Xvu zv(K2qZbe@>Q;UB6{HP#6%v!JxVkrH(Y_4fv@nk{4{_Iip*znrDATnKUJ*YMaDfT|> zq;UFE^1BZXj=ya6dwMMf4(Y3yJSWi;3Iq;oQ3|r6yfD>gEbJ@&!BGV?b$@|?9G=06OUAtJC^dKNKAPo9938m4j-lKr}s=_@lfi z{63p?<7=07s)M58FI7&^81BiZYBS#a75|3F+R|o{LGKv2x>^IX=f1U z(ko_49YC}@guKDp+<*)-dn_BdSA8b!=2rlFXb8mLrA$~L3lJ{NLx9?dB7LPC!Q zT`I&+oiN)AQB#vQIL-sad^P&%)mz^L4X}^Q@`nq)__f-9qsYcQOXT& zNBuzJ!ez&9krEKV%uiS99WgrUv1@K6;Ae)slf0x(a*%tL%4bH>*)?YQp0{M zf}zaZw!ld3y8n}0c7A*VHR49JgkkO#!{cFqfg3Up+@6>Ov{n8U=A$44^jG3P1JdMS z;O^jvU;B;m@Vin%Yw5zN{+;H41KOV5CKs0jDmsa;(4n^xG;RAYV4(00^r2@ z)@J)KTMh?D@e}RUC|&jz>kbbVBxcKBj!dRJyO1_mM&|weUbtvQFM~d#GET)8wD+kB zgtyCMq!({Gx8aUHuy^v=U+>e_(h4U#R;GKkukrusU#&uEsB?iEC8_ab=jY4=6CSpN z^jbPpGO||+SYdAT$ovX9>WJ?2Lu3;+p!?w2S$(%N@@A5*FH@5}G7=F+Zjb-XO(1Rc z1Ua1K?6yy3Z4GR5}G<$86f*Fx`Xvsm2R+l`JOU7wAqnrj~(G5L(N0|NT84 z*a8Pyk`(S9N*_%$*Dt26uZd ztr>U%SE5Hf9O{_$rK=Le>uTXUSfX16SGht$TuZG~_&H6%bl(cdOkoyhCeELi>P2~#ncqz8~J>iJZFYi;sdpE0WN z!`N{@Fk9bM?5+3s)WFePSUL96G*Nn@n5tZ(uf;3*-2ko@8tXXWL_B5|O9(?!s-#YGErmBBD#AIo1Qc230nz zTfl7&FXUy;v)mB8I!Q|UR=@GdNiZ`-*Av)T-Mx3GV;?0Sx2Bg&qeTLy`4_cU^{Lsz3-bdGg65X=S%q?3dsP9~1(vmT zuYNcP@AP{Kn49ct)X2T%#zbIjc7ISUt6OwfyEVo{4*OWiQpYva|3q9+#x*tA4`r-J zvc2aQ=$dK;9m#0VRa3R(_=t(^l@Im$x+E6zjd#O6NVuh?RV}WY2idJZ2}0vtLCt*% z)%Ur4)N$W&;(dq7u32+$B2wZkh>U7^5E9|*RivgC$vJ2J`+LiWJ;SmPX`iM0p5$mk z#Crj|JV&3JVBAnQFH4Gy-Ro+Y9|@111arC5w_DTY*_OqU{nshcR=T^D?fdM%G)8Iz zTG64rj^q#!G9bv{&J#vGx)w0ker4*1(Y-1(=2G&ntO7(Z98-Wj6u=k7B`^L^6f%6S zHUFD#N3gr-$GPzL+HwQm=B>y^L5a(NzCN$x6`FfuGMs{nnH}%@oKwzV0oL>NCwTms3g~k4oK{;;^GkKLAj_mk{Ew)og-;Ar))q%boJ(5eZpJygmh~7f zI5H*o-6wyQ5^kx4Mj`l~vIuGet{DXFlvx;5>WO%sa`*mqY5UO8(2dc;9C4Pg8vm#B zd?o~qtdtKw>=t$l@T6f}^}V3|b)xLxY+-fbbXQj7E~E# z?*h6=Kg-6?9wWrcx!;=+$Qa)_qAz|WM3v$(3zL1b1uM^L`ysH(lgg<2)WuM6_(v!O zwA7=o^@|^A?{T2m@lxR>uog-r(?;tLFN1Z>X3a20%Se{^gLb_XU7eIgXf)m3$_jW@ f92vs6b4Vek_a##Ajn)`BSoEzMI@b%;?mzio!?pgL literal 0 HcmV?d00001 diff --git a/guides/assets/images/first-web.png b/guides/assets/images/first-web.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0ecf5052c30e81f8040cbd5ba6ab83a5a3b99c GIT binary patch literal 16639 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 """ end + + @impl true + def handle_event("hello", _params, socket) do + # This event handler can be shared across all platforms + IO.puts "Hello world!" + + {:noreply, socket} + end + + ### + + # This function can be called from both HTML and SwiftUI templates + # The native device type is available as the `@target` assign + defp device_name(%{target: :phone}), do: "iOS" + defp device_name(%{target: :pad}), do: "iPadOS" + defp device_name(%{target: :mac}), do: "macOS" + defp device_name(%{target: :watch}), do: "watchOS" + defp device_name(_), do: "the web" +end +``` + +### hello_styles.ex + +```elixir +# lib/my_app_web/live/hello_styles.ex +defmodule MyAppWeb.HelloStyles do + use LiveViewNative.Stylesheet, :swiftui + + ~SHEET""" + "bold" do + fontWeight(.bold) + end + + "fg-color-" <> color do + foregroundStyle(to_ime(color)) + end + + "font-size-" <> font_size do + font(system(size: to_integer(font_size))) + end + + "p-" <> padding do + padding(to_integer(padding)) + end + """ + + def class(_other, _), do: {:unmatched, ""} end ``` -### iOS + + +This code serves users whether they're using a web browser or native app running on an iPhone, +iPad, macOS desktop or Apple Watch. Each platform renders its own native widgets and UI elements, +allowing state, event callbacks and business logic to be shared. + + -![Hello World - iOS](./assets/images/hello-iphone.png) +### iPhone -### iPadOS -![Hello World - iPadOS](./assets/images/hello-ipad.png) +![Hello World - iPhone](./assets/images/hello-iphone.png) -### macOS +### iPad +![Hello World - iPad](./assets/images/hello-ipad.png) + +###  Watch +![Hello World - macOS](./assets/images/hello-watch.png) + +### Desktop (macOS) ![Hello World - macOS](./assets/images/hello-mac.png) -### Web +### Desktop (Web) ![Hello World - Web](./assets/images/hello-web.png) -By using LiveView Native in an existing Phoenix project, developers are able to deliver rich, real-time UIs for a multitude of web and non-web clients generated entirely by the server. Live sessions, state, event callbacks and glue code can be shared across all target platforms, with each platform having its own custom-tailored template or function component. - -LiveView Native officially supports using LiveView for the following native clients: +The following native platforms are officially supported, and support for other platforms +can be provided by third-party platform libraries. - iOS 16+ - macOS 13+ - watchOS 9+ - Android -LiveView Native requires some foundational knowledge to use. You should already be familiar with [Elixir](https://elixir-lang.org/), the [Phoenix Framework](https://www.phoenixframework.org/) and [Phoenix LiveView](https://github.com/phoenixframework/phoenix_live_view). If you're looking to learn more about any of these subjects, there are a lot of great resources available. Some recommended materials include the [Elixir guides](https://elixir-lang.org/getting-started/introduction.html), [Elixir learning resources page](https://elixir-lang.org/learning.html), [Phoenix guides](https://hexdocs.pm/phoenix/overview.html), [Phoenix community page](https://hexdocs.pm/phoenix/community.html) and the [Phoenix LiveView HexDocs](https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html). +LiveView Native requires some foundational knowledge to use. You should already be familiar with +[Elixir](https://elixir-lang.org/), the [Phoenix Framework](https://www.phoenixframework.org/) and +[Phoenix LiveView](https://github.com/phoenixframework/phoenix_live_view). If you're looking to learn +more about any of these subjects, there are a lot of great resources available. Some recommended +materials include the [Elixir guides](https://elixir-lang.org/getting-started/introduction.html), +[Elixir learning resources page](https://elixir-lang.org/learning.html), [Phoenix guides](https://hexdocs.pm/phoenix/overview.html), +[Phoenix community page](https://hexdocs.pm/phoenix/community.html) and the [Phoenix LiveView HexDocs](https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html). With those prerequisites out of the way, [let's get LiveView Native installed](./installation.md)! \ No newline at end of file diff --git a/guides/introduction/your-first-native-liveview.md b/guides/introduction/your-first-native-liveview.md index 417b07a2..b4703926 100644 --- a/guides/introduction/your-first-native-liveview.md +++ b/guides/introduction/your-first-native-liveview.md @@ -59,7 +59,7 @@ end Then, run your app and navigate to your local development server in a web browser. You should see the LiveView you created. -![Hello World - Web](./assets/images/hello-web.png) +![Hello World - Web](./assets/images/first-web.png) ## A native LiveView @@ -104,24 +104,9 @@ end ``` Loading the native project at `native/swiftui/MyApp/MyApp.xcodeproj` and running it in -Simulator will render the native template in various devices for the SwiftUI platform: +Simulator will render the native template as a native SwiftUI app: - - -### iOS - -![Hello World - iOS](./assets/images/hello-iphone.png) - -### iPadOS -![Hello World - iPadOS](./assets/images/hello-ipad.png) - -### macOS -![Hello World - macOS](./assets/images/hello-mac.png) - -### Web -![Hello World - Web](./assets/images/hello-web.png) - - +![Hello World - iOS](./assets/images/first-ios.png) If everything looks as it should, congratulations! Your app is now using LiveView Native to serve multiple platform-specific templates to both web and non-web clients. diff --git a/mix.exs b/mix.exs index ed2adb38..b054b806 100644 --- a/mix.exs +++ b/mix.exs @@ -76,7 +76,6 @@ defmodule LiveViewNative.MixProject do "guides/introduction/your-first-native-liveview.md", "guides/introduction/troubleshooting.md", "guides/common-features/template-syntax.md", - "guides/common-features/modifiers.md", "guides/common-features/render-patterns.md", "guides/common-features/handling-events.md" ] diff --git a/mix.lock b/mix.lock index d464bb92..c6bd89bc 100644 --- a/mix.lock +++ b/mix.lock @@ -4,6 +4,7 @@ "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, "cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, + "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "dialyxir": {:hex, :dialyxir, "1.4.1", "a22ed1e7bd3a3e3f197b68d806ef66acb61ee8f57b3ac85fc5d57354c5482a93", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "84b795d6d7796297cca5a3118444b80c7d94f7ce247d49886e7c291e1ae49801"}, "earmark_parser": {:hex, :earmark_parser, "1.4.37", "2ad73550e27c8946648b06905a57e4d454e4d7229c2dafa72a0348c99d8be5f7", [:mix], [], "hexpm", "6b19783f2802f039806f375610faa22da130b8edc21209d0bff47918bb48360e"}, "ecto": {:hex, :ecto, "3.11.1", "4b4972b717e7ca83d30121b12998f5fcdc62ba0ed4f20fd390f16f3270d85c3e", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ebd3d3772cd0dfcd8d772659e41ed527c28b2a8bde4b00fe03e0463da0f1983b"},

^eOncQjKr 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 diff --git a/guides/assets/images/hello-iphone.png b/guides/assets/images/hello-iphone.png index c5f388513f594edc798cd325b54f15edb58faa17..7c48ca307a8f826e70f65c4e0dc934357446fc10 100644 GIT binary patch literal 22087 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 diff --git a/guides/assets/images/hello-mac.png b/guides/assets/images/hello-mac.png index 80f26ff0d5cac0d1f68f1fa0ec85ac911388a15d..c5c8c2f3f94f403b8a3ac9cb128f0626309f49eb 100644 GIT binary patch literal 15531 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 Bn$-XR literal 10553 zcmeHNi9cJ}+efviz1oJVNEy|skx)f#L3OIew9yvTs@Q5P5*16Vp<^p8-F0lK(W0o( z+DW2fDKo?p;&b?!G!CZXr zp}l;3eBu`8&RpW-6R_dq9=`6MdOM&m|6s|d|7|5o5q1(Vt-m4B zEAINc5+`e&8Wy9(q!bO<)KUj@2o>^-_a9kamk?|1%ftsRt4vM(V#l zOi9S|(NE-@@$X}bw(iCg41Ry&lU8M6*m2zb0Vmc@eUbAOTx_%4*DF51`uD>p)K;Sx z!U13ItNvWNch{kP=Xj400rOsy(IZkiK^M>NhOT$FGV=d8lM%f;PA|Xlkjsmz$(3N7 z1NEBV!Tfd8TGoM%sPu!Gkpt}9SCyp}pHW%q6)PVKhIeOVR*hn+Bm}9kSo>Y4wM@7c z3ClH7QoRk&=jT5jFC)5E6bxa57uL<^>KQLzz&(HsxR#!d;WzpJ zD*2Dae`(tNM^jr*_urcTD*4}sU z{0!e~2>WNu;CrtZ*@f}(sa&-8JWZP1Io)%CldM5~e1A9P*H2zzJn%SA&ok%V8u_n$k$ zZ^36KEOK8pCEy_`Y|5`=Dj;}O>S1|v?MF01I|9rNXN8lg*}O?2b)2NprgQ4lr%IQm z#O0IZ6m(W(*uqsa;5f%&dGGOE1Fj*EqJnaos}V`OWA zO<~8>z;gOl)esY>fM_h=#Me|uI6 zTy9F*3AeV_Bg0#2$VDd6mu;LItPw z8N;4g&Ea@bCFx|0F$v0ROgTXV`Zrs7tn+$Fq!WF(DarM8zi*N5sVeM6yO4L)&a@_K z+*C#8;fiM^(AlD^+EP!Ujt8G22K9bj>vGFRPh4<)G7i_}bp25>ocy-oML8mNs)DA! zh^{Uks#iNtdn4A+o?d7-R8BHI8?MPB&TL+5TiN z7bKSfj$Csr7XDBf>dUS{cZ&-M>RkK0OOa#3O;b)WJP|%-rg&|J&BWs(v1@ZJ6gYQM z23qy`Ham;fnQ6?MOJU6a2}9!}>D(dE1^w|C;!_j1fZ2HiG`7|POjqO@m83~lF#=~N zM&E1`rN%1+_5bKo`Zb1we>R1vQ&3Ez60tlc<#T;OR(qqewWihi@pQ%93+Y{g1-VG> zkw(%|Q20;q%Hd>0>^p5Dt7%h2{gaFH0y0Qg=IF1U1+TeetO5KWo}1^GDTBO9t3^`x zOqxX1KNFbSm>CXYW(LQNdS9#I!si-ge4kIiXAhwV!e)qrMl;pStZ84}Z$t4z=ivxC zJc~y|73r3*<^p@%>7JOpQ4aULLwZXE&6!)`{`Vgx6S%U1b7nb@oDbOzD)UduxSCoKrK36OiU48q}UYXZB2qJTuI>X2PIE|`s>7lhz z-S|uLs-~s8U>h=eh27~E-&2kTCOy_t^R#^Cr!!)U8jUC1=8!2DFGc@asdK$uC-ZTY3lm|5SJG zFY|I{G{iDiS%jHlh2O3WFoC*6X+CeyC*UI0NU7e%)w!>kia?0`bX~y6tf!y_>=4{W zXi1#2b{eSc)hQXHX5$J+7wZ$0t<8{qhM?s;+@*dnmiIv8NY?4ei?Hd1deM}{J5zxH~N^)LARi1(tPlY=(As2K`pMKq~sgZVBVH z*^1KI>6$_#b={EpFG~p@I#DCLS#$Z_j}UOVtgz{7ow1WROSMKRc7rIaY|!#EST!eoD*b*jw#YP0DsUz*6>sMrUQ; zY)D@g^G2@VK!OL8d*ag#Nr+E+RR%uh45CY8vyRq^qG6m^u6OJQJ zXwSeRn{MCZi#8OPv!)}%rh1Sq`^~KCI$o_5PP5d(2>#}lksyk=Zp=*^w)1cQ;x}VV6>1_kiMn4()c;jS8P>ZFXGh zUBDjAD4;=K0))WnW$QRvy)UQ$6JO&*; zBJWG=cu>e_8u_ta9$i;zbm#zHK5}B_FD>dMTnEQn^Xt%Kmi0O{dB4`Tue)$OiM*G3fM%@rfc)&*Va65z;5xL4PU?AogHQGC(o_ltwlgsLDFoFT#{$MAVwePs;=IV=fKJn?CdOQX&D!FSrz1xWL7OUVsmXb-`DK#4 z!JB$j%lVOvy}^pwB{4=~*eQeglcEbS>o(#3KnRrpB4%&`sI(>O0D-B`h+%I;>?iB0 zk&c4d{SnK9ls*sq;Aj~<_o2<=K87+xtyQkP+@tOg?n7NHlKRNQMU+A4Kex79b^4ACV0l^Iw)^58t5zFzSaPGXrhW>pP@L~Ir&XswpT_JOv zTy=RZck#{@oL1d@(x^f9be*4cDyy!xmaQAuMbocVB(m#$y=7`iZft!oDr2Cnp$FAol+0 zHtuT!Nfor=OC^AC2RHkHcx0V$+7NldF(v|V(n&9 zA-E-KMT)Yr;oS{9x8=f=r@Jb|S6G z&W0id+1WRRrT%}zgU=hf(T*Fdy_;lTZmvQR`#E}+Gm?^m4d?8VgmauuZLBTSO5&z5 zcu~ygU*kg?)T&#{gTe7{sc?g$YvmJxFym9FWFvu`Me@ysnxs$wyEOqgvgz(6WkDT$ zJphFdPXqi#dN-LnI1`88SYs-K6?ydwRAa?RE{z_fNCFsT!$TFznq|xYhariRB>}00 z;MBxuPxeI5AeX>w?l1SIgfKI83))$)nA(EEk5x2CML_{(0PqYHKp3&D?MUGvsUw3k zk--VZ>2G{Xn+{I>$>nl&U*7HA2eHbJQnrbeu(cPwB-*HKOke$2+3+ea>rk>WkK@;> zk{Xlh7+KAHGZ#n)k~kDDeS_!MebGFYisLP8rZI9zP_Sn0L_uLg9-RG31Moo*-5eb9 zqIQP3JR}e2ypxQhNErN-5xF|fcxsRG!q+Z#SyHAd>EL1MHvrGqGXxS_N3wX_F>~X7 zIBxWJk2pMUF>g>m2?UeK%kcjN%VETu5lAj26ETG-{>^+>C*VJx2f#J*1u)DG@wXmS z&L;I2K4U6>-<%P(VJ0E}}bxb>(ncjKRfK z!-=z9matfA_^6h%lao`U<*-+yJgVx*;jqclDbn2j;bqb?F^GIX&9=;R`o5WjNa<*H zJopf_X6z3sx~mvMNFl)L6F_qsu8>!IG$K|PgED_kI#^DKpwWg7qH4x-r$gVmx8J06 z1F3@pp==fFz`g;1>OYIJ(iUrU5D@$*(%30Y>FUIXEQ|(*442#FWd>c7zaB)7SpJsF zqM>Tlfs9&iE!9(ZSo(z|jzeM0QY0n0Gh|%VY=bCG*#Za5tg|%Y;LJ1EWD%jmekQd; z=*WfirT%=2M@P%wjkzjv?LN7sIy8u=W^|I^ANzorLiy7A$ZWu)`L3LELyQQkC;13K zrNN?e`<(}d!xFvk%Ig*r-F=Ek%_)kC!zuRwmO$CPmhN1Yz!elO6Tq*1QLQz7Y3Bd& zszkdkVi)3`-fShRJ>vk&9`zIYA{{pDj(_ML<4wu zZAvhzF{-;S_k8-tJq6fz*djLIFd*v&LKrmj9jL^v7WXbS>yk>v12lgHvU|4}fXnxS zuKStVV~R+_(gfN33?55mGDIM7udq#EheNNRjs*m~a>tpethn+%;qw7e^cYKKnB}5z zt;ESRc-`&Kr?J@MFtBg`Gj$~5074lV!R|Sd)sd7vJ(iP#BsALbtASr9_S*Oo*&m$& z*NbasC|IzknYfXR@V1`@m-(~&@K=(*bGb2h0BKyF)KAR;0n zGhI0{I4dbnU_?5X(^`iu4KeImjD>|~6QMs&f9NAzevUDoR&)fB6SPRsxL2FUA&r5E z%wF;J!B^6XNuYc(%VFjw44bk%k|z?60#@sdu$vl@$7h9%Ii}q1&R#^usZt`6Ra`s0 zSJNr5qI5M8)Yjr%vowIA2Ca8^uN?&d(*7}Tc-sJ1K+qQ8rk|or*1C~m=5r0R_xgrG zx0+dhRP?#0-wWwWh;R&_YtpH2`hcYXLklC38K445I=YN2KcTjy-+wKqXI7S9AW#Gt z%69w8ZJw*d-)pUM+ve#OKh3u^$uIC8s@Xm?*$2qpaeA`-G_g;rU?Qy&wav8801R2l z&Tadt1|a1%qp$6^$@Bw&Obgpy-R8?sfG-z^u(pky`vJ0Ja>ubd(`RRq?1TcrofsRv zvy(t}Lc#x`P+%fvV=2>PyA5|BR!Q|;vIWTem-Z3cCm6t@uah$Cd2}aH?fWrI{?DIV zWeePUyI#Y$5EZ|`9YOaNt3b>j!)@QyZc0~Gqy79!HcwC_*=+XIWy{{x?IV-T)7PVx z>mk6IH_o_NP<`nU%8BvJ6{yqr#}w7dY&)z``0l(1txzX zG|ijzee)A_(}YN!hPS-xd;vVZg$rfvA)~p^@cLowKvY1aZtoRhW#4$gsK!(8BK>2V zxcQqL@_?s*7d|~Bz*Z(7C7*ag$+}53J#(aqHRFZ!3&$+ik9wS4cko`yG!d-bm(wiU4S^RwAOz~-_+y4U~(LJC5 diff --git a/guides/assets/images/hello-watch.png b/guides/assets/images/hello-watch.png new file mode 100644 index 0000000000000000000000000000000000000000..8fff842a7c5c670b760a353cb3176591b33dae55 GIT binary patch literal 13735 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 ZVIi&?X_3F)|NAdT_Op^?mAFaJ{{_*VQ2PJ? literal 0 HcmV?d00001 diff --git a/guides/assets/images/hello-web.png b/guides/assets/images/hello-web.png index 7a0ecf5052c30e81f8040cbd5ba6ab83a5a3b99c..52021b6ab17fe951a319a81a4b92dac72be75292 100644 GIT binary patch literal 27558 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 L6V{Qs%`5g#x7o#+ literal 16639 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 - -### Source - -```elixir -defmodule MyAppWeb.ModifiersExampleLive do - use Phoenix.LiveView - use MyAppWeb, :live_view - - @impl true - def render(%{format: :swiftui} = assigns) do - # This UI renders on the iPhone / iPad app - ~SWIFTUI""" - - This text is normal - This text is bold - - - foreground_style({:color, :white}) - }> - foreground_style({:color, :red}) - } /> - - - - """ - end -end -``` - -### Result - -![Modifiers example](./assets/images/modifiers-example.png) - - - -Modifier functions may have different arities and take different types of arguments, which are generally based on the -original APIs they're based on. All modifier functions return a `%LiveViewNativePlatform.Env{}` struct (same as the -`@native` assign) which can be passed to other modifier functions, effectively allowing them to be chained together. - -For more information of which modifiers a platform supports and how to use them, check the documentation for that -platform as well as the relevant source material for that platform. - -## Modifier Classes - -Using a lot of modifiers in your templates can cause them to become overly verbose and difficult to maintain over -time. You also might want to share modifiers between many different views and elements instead of copying them -across templates. Modifier classes solve both of these problems by letting you decouple your modifiers from your -templates. - -Here's the previous example, adjusted to use modifier classes defined in a separate module: - - - -### modifiers_example_live.ex - -```elixir -defmodule MyAppWeb.ModifiersExampleLive do - use Phoenix.LiveView - use MyAppWeb, :live_view - - import MyAppWeb.Modclasses, only: [modclass: 3] - - @impl true - def render(%{format: :swiftui} = assigns) do - ~SWIFTUI""" - - This text is normal - This text is bold - - - - - - - - """ - end -end -``` - -### modclasses.ex - -```elixir -defmodule MyAppWeb.Modclasses do - use LiveViewNative.Modclasses, platform: :swiftui - - def modclass(native, "bold", _assigns) do - font_weight(native, :bold) - end - - def modclass(native, "spacer", _assigns) do - frame(native, height: 16) - end - - def modclass(native, "heart", _assigns) do - native - |> background(alignment: :center, content: :heart_bg) - |> foreground_style({:color, :white}) - end - - def modclass(native, "heart_bg", _assigns) do - native - |> frame(width: 32, height: 32) - |> foreground_style({:color, :red}) - end -end -``` - -### Result - -![Modifiers example](./assets/images/modifiers-example.png) - - - -An element can have any number of modifier classes, providing some composability for modifier functions: - - - -### modifiers_example_live.ex - -```elixir -defmodule MyAppWeb.ModifiersExampleLive do - use Phoenix.LiveView - use MyAppWeb, :live_view - - import MyAppWeb.Modclasses, only: [modclass: 3] - - @impl true - def render(%{format: :swiftui} = assigns) do - ~SWIFTUI""" - - This text is normal - This text is bold - This text is bold - This text is bold and italic - - """ - end -end -``` - -### modclasses.ex - -```elixir -defmodule MyAppWeb.Modclasses do - use LiveViewNative.Modclasses, platform: :swiftui - - def modclass(native, "bold", _assigns) do - font_weight(native, :bold) - end - - def modclass(native, "italic", _assigns) do - italic(native, %{}) - end -end -``` - -### Result - -![Modclasses example](./assets/images/modclasses-example.png) - - - -Modclasses within templates are translated at compile-time to their inline counterparts, so passing an assign or other -dynamic value to the `modclass` attribute won't work. To support dynamic modifier classes that reference assigns or the -modifier name itself, define any conditional logic within `modclass/3`. diff --git a/guides/common-features/render-patterns.md b/guides/common-features/render-patterns.md index 7c72a826..216ecfdb 100644 --- a/guides/common-features/render-patterns.md +++ b/guides/common-features/render-patterns.md @@ -50,8 +50,6 @@ defmodule MyAppWeb.SharedComponents do use Phoenix.Component use LiveViewNative.Component - import ElixirconfChatWeb.Modclasses.SwiftUi, only: [modclass: 3] - def logo(%{format: :swiftui} = assigns) do ~SWIFTUI""" @@ -106,7 +104,7 @@ end ### hello_live.swiftui.heex ```heex - + A SwiftUI template, courtesy of hello_live.swiftui.heex @@ -125,19 +123,17 @@ defmodule MyAppWeb.SharedComponents do use Phoenix.Component use LiveViewNative.Component - import ElixirconfChatWeb.Modclasses.SwiftUi, only: [modclass: 3] - def logo(%{format: :swiftui} = assigns) do ~SWIFTUI""" - <%= case @native.platform_config.user_interface_idiom do %> - <% "mac" -> %> + <%= case @target do %> + <% :mac -> %> Hello macOS! - <% "pad" -> %> + <% :pad -> %> Hello iPadOS! - <% "watch" -> %> + <% :watch -> %> Hello watchOS! - <% "tv" -> %> + <% :tv -> %> Hello tvOS! <% _ -> %> Hello iOS! diff --git a/guides/common-features/template-syntax.md b/guides/common-features/template-syntax.md index 9fdfe02a..dbcdeb04 100644 --- a/guides/common-features/template-syntax.md +++ b/guides/common-features/template-syntax.md @@ -26,7 +26,7 @@ defmodule MyAppWeb.MyComponents do - <%= song.title %> + <%= song.title %> <%= song.artist.name %> @@ -71,7 +71,6 @@ Here we can observe various semantic changes to port SwiftUI code to EEx: 2. The struct value `album` is an assign, `@album`, instead. 3. Instead of passing `album.songs` as an argument, we use a comprehension. - `` elements take their arguments as values, similar to HTML. -4. We can't call a function on an element like in SwiftUI, so the `.fontWeight(.bold)` modifier function is called as `font_weight(:bold)` and passed to the `modifiers` attribute. These conventions can generally be applied to all sorts of examples when using LiveView Native to build SwiftUI views. Because LiveView Native is modular, each platform library will have its own way of "bridging the gap" between the Elixir diff --git a/guides/introduction/installation.md b/guides/introduction/installation.md index d74452b9..7c285665 100644 --- a/guides/introduction/installation.md +++ b/guides/introduction/installation.md @@ -1,12 +1,12 @@ # Installation -There are a few steps that must be completed before you can use LiveView Native. This document covers them, which are as follows: +There are a number of steps that must be completed before you can use LiveView Native. This document covers them, which are as follows: -1. Setup a Phoenix project with the minimum required versions of Elixir, Phoenix and LiveView. -2. Add LiveView Native to your `mix.exs` dependencies. -3. Add any number of platform libraries to enable support for native clients. -4. Fetch dependencies. -5. Enable LiveView Native within your app. +1. Setup your Phoenix project with the minimum required versions of Elixir, Phoenix and LiveView +2. Add LiveView Native to your `mix.exs` dependencies +3. Add any number of platform libraries to enable support for native clients +4. Configure your project to use LiveView Native +5. Update your application's web module, router and layouts ## 1. Prepare your Phoenix app @@ -46,16 +46,16 @@ Once you've met the requirements to use LiveView Native, simply add it to your l def deps do [ # other dependencies here... - {:live_view_native, "~> 0.1"} + {:live_view_native, "~> 0.2"} ] end ``` ## 3. Add platform libraries -The `:live_view_native` dependency isn't useful on its own. You'll also need to add any _platform libraries_ you want your project to be compatible with. Platform libraries provide the native implementations that allow those platforms' clients to connect to your app and render LiveView paths as native user interfaces. +The `:live_view_native` dependency isn't useful on its own. You'll also need to add any _platform libraries_ you want your project to be compatible with. These libraries provide the platform-specific code that allows them to connect to your app and render LiveViews within their native environments. -This guide only covers installation for the officially supported platforms, [SwiftUI](https://hexdocs.pm/live_view_native_swift_ui) (iOS, macOS and watchOS) and [Jetpack](https://hexdocs.pm/live_view_native_jetpack) (Android). For information on using a third-party platform, consult that library's documentation. +This guide covers installation for the officially supported platforms, [SwiftUI](https://hexdocs.pm/live_view_native_swift_ui) (iOS, macOS and watchOS) and [Jetpack](https://hexdocs.pm/live_view_native_jetpack) (Android). @@ -66,7 +66,7 @@ Adds compatibility for iOS 16+, macOS 13+ and watchOS 9+. def deps do [ # other dependencies here... - {:live_view_native_swift_ui, "~> 0.1"} + {:live_view_native_swift_ui, "~> 0.2"} ] end ``` @@ -90,21 +90,19 @@ end -## 4. Fetch dependencies - -Next, fetch any new dependencies you added to your `mix.exs`. +Make sure to fetch any dependencies you've added to your `mix.exs` before continuing: ```bash mix deps.get ``` -## 5. Enable LiveView Native +## 4. Configure LiveView Native LiveView Native includes a Mix task that can automatically handle the process of configuring your project to support it. If that is not to your liking, manual setup is also an option. This guide includes instructions for both of these approaches. -### Automatic +### Guided (recommended) Within your project directory, run the following command: @@ -128,16 +126,179 @@ config :live_view_native, LiveViewNative.SwiftUI, LiveViewNative.Jetpack ] + +# LiveView Native Stylesheet support +# Omit this if you're not using platforms that support LiveView +# Native stylesheets +config :live_view_native_stylesheet, + parsers: [ + swiftui: LiveViewNative.SwiftUI.RulesParser + ] ``` Next, create a project for each platform's native client using the official tools provided by each platform. +This step varies across platforms — for example, SwiftUI development uses [Xcode](https://developer.apple.com/xcode/) +and so you'll need to know how to [create a new Xcode project](https://developer.apple.com/documentation/xcode/creating-an-xcode-project-for-an-app), +add [`liveview-client-swiftui`](https://github.com/liveview-native/liveview-client-swiftui) as a [package dependency](https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app), [configure your device targets](https://developer.apple.com/documentation/xcode/configuring-a-new-target-in-your-project) +and write the glue code in Swift to connect to your Phoenix application. For Jetpack this process involves working with +[Android Studio](https://developer.android.com/studio) and Kotlin to create the client, since those are the tools relevant +to Android development. + +Manual configuration at this point is outside of the scope of these HexDocs but each platform library should have more +information within its own documentation. To find that, consult the official repositories for each platform library +that you need to create a native client app for. +## 5. Update your application code + +After running `mix lvn.install` to configure the LiveView Native framework, you will need to integrate it with +your application. This will involve making the following changes to your Phoenix application's code: + +- Using `LiveViewNative.LiveView` and `LiveViewNative.LiveComponent` in your web module +- Adding the `LiveViewNative.SessionPlug` plug to your router's `:browser` pipeline +- Allowing Phoenix to render native layouts by using `LiveViewNative.Layouts` in your layouts module and scoping `embed_templates/1` to `*.html` instead of `*` + +These changes are required to use LiveView Native. The following subsections describe these changes in more detail +and how to properly apply them. + +### 5a. Use LiveView Native in your web module + +Most Phoenix-related modules in your application will `use` a web module that was automatically +generated for you when running `mix phx.gen`. By default, this module might be named something like +`MyAppWeb` and would be found at `lib/my_app_web/my_app_web.ex` (replacing `my_app` with the actual +name of your app). This is your app's _web module_. + +Within the web module, you should find functions called `live_view` and `live_component`. Update these +functions so that inside each function's `quote` block it contains `use LiveViewNative.LiveView` and +`use LiveViewNative.LiveComponent` respectively. _Be sure to add only those two lines without changing +or deleting anything else_: + +```elixir +defmodule MyAppWeb do + @moduledoc """ + The entrypoint for defining your web interface, such + as controllers, components, channels, and so on... + """ + + # (truncated for example purposes...) + + def live_view do + quote do + use Phoenix.LiveView, + layout: {MyAppWeb.Layouts, :app} + + # LiveView Native support + use LiveViewNative.LiveView + + unquote(html_helpers()) + end + end + + def live_component do + quote do + use Phoenix.LiveComponent + + # LiveView Native support + use LiveViewNative.LiveComponent + + unquote(html_helpers()) + end + end + + # (truncated for example purposes...) +end +``` + +These two lines upgrade LiveViews and LiveComponents in your app with the ability to render native +UI code in addition to HTML. Once these changes are saved, move on to the second part of this section +which is updating your app's router to be able to handle native sessions. + +### 5b. Add the LiveView Native session plug to your router.ex + +Your Phoenix router defines the various paths to resources within your app, such as +API endpoints, static pages and of course LiveViews. Native clients that connect to +your app also pass through the router and you need to ensure that it can properly +handle these non-web connections. + +Update your router (located somewhere like `lib/my_app_web/router.ex`) so that the +`:browser` pipeline near the top of the file contains the `LiveViewNative.SessionPlug`: + +```elixir +defmodule MyAppWeb.Router do + use MyAppWeb, :router + + pipeline :browser do + plug :accepts, ["html"] + plug :fetch_session + plug :fetch_live_flash + + # (truncated for example purposes...) + + # LiveView Native support + plug LiveViewNative.SessionPlug + end + + # (truncated for example purposes...) +end +``` + +With this plug, your router is now able to understand the initial request payloads that LiveView +Native clients send when connecting to your app. With that change to your router saved, you can now +move on to the third and final step of this installation guide, updating your layout module. + +### 5c. Allow your app to render native layouts + +Phoenix applications are made up of two layouts, a root layout and an app layout. Typically these +layouts are HTML-based which only works in a web environment. To avoid layout templates for the web +from rendering in non-web environments and to allow writing native layouts, you'll need to update +Phoenix's root layout module so that it's compatible with LiveView Native. + +Open your app's main layout module, typically located at `lib/my_app_web/components/layouts.ex`, +and change any `embed_templates` lines so that the catch-all wildcard `*` is replaced with one that +only checks for files with the `*.html` extension. Also, add `use LiveViewNative.Layouts` near the +top of the file to add support for native layouts: + +```elixir +defmodule MyAppWeb.Layouts do + use MyAppWeb, :html + use LiveViewNative.Layouts + + # changed from `embed_templates "layouts/*"` + embed_templates "layouts/*.html" +end +``` + +If you have templates for other file extensions, like `.json` or `.txt`, you can add separate `embed_templates` +lines for those as well. The important point is to avoid the catch-all `*` as it will cause the default Phoenix +template system to try to compile HEEx templates with non-HTML syntax like files ending in `.swiftui.heex` and +`.jetpack.heex`. This will cause an error like this which prevents your app from compiling: + +``` +== Compilation error in file lib/my_app_web/components/layouts.ex == +** (Phoenix.LiveView.Tokenizer.ParseError) lib/my_app_web/components/layouts/root.swiftui.heex:1:1: invalid tag + | +1 | + | ^ + (phoenix_live_view 0.19.5) lib/phoenix_live_view/tag_engine.ex:1391: Phoenix.LiveView.TagEngine.raise_syntax_error!/3 + (phoenix_live_view 0.19.5) lib/phoenix_live_view/tag_engine.ex:452: Phoenix.LiveView.TagEngine.handle_token/2 + (elixir 1.15.6) lib/enum.ex:2510: Enum."-reduce/3-lists^foldl/2-0-"/3 + (phoenix_live_view 0.19.5) lib/phoenix_live_view/tag_engine.ex:182: Phoenix.LiveView.TagEngine.handle_body/1 + (phoenix_live_view 0.19.5) expanding macro: Phoenix.LiveView.HTMLEngine.compile/1 + lib/my_app_web/components/layouts/root.swiftui.heex: LvnExampleWeb.Layouts.root/1 +``` + +Once your layout module has been updated appropriately, save the changes and continue. + ## Post-Installation -Once LiveView Native is installed and your application is properly configured, you should be able to run your -Phoenix app in development as usual: +If you've reached this section, you should have already done the following: + +- Added `:live_view_native` and any platform libraries to your list of dependencies in `mix.exs`. +- Run `mix lvn.install` or configured LiveView Native manually. +- Updated your web module, router and layouts module with LiveView Native specific code. + +If all of these steps have been completed properly, you should be able to run your Phoenix app in development as usual: ```bash iex -S mix phx.server diff --git a/guides/introduction/overview.md b/guides/introduction/overview.md index 0de150bf..f0e229d3 100644 --- a/guides/introduction/overview.md +++ b/guides/introduction/overview.md @@ -1,67 +1,144 @@ # Overview -LiveView Native is a framework for building native applications using Elixir and Phoenix LiveView. It allows a single application to serve a multitude of clients by transforming platform-specific template code into native user interfaces. Here's a basic example that serves web, iOS, iPadOS and macOS clients natively: +LiveView Native is a framework for building native applications using Elixir and Phoenix LiveView. +It upgrades your existing Phoenix project with the ability to write truly native user interfaces that +run on devices and platforms beyond the web. + +Here's an example of a simple LiveView that renders both HTML and native SwiftUI views: -### Source +### hello_live.ex ```elixir # lib/my_app_web/live/hello_live.ex defmodule MyAppWeb.HelloLive do use Phoenix.LiveView use MyAppWeb, :live_view + use MyAppWeb.HelloStyles @impl true def render(%{format: :swiftui} = assigns) do - # This UI renders on the iPhone / iPad app + # This render function serves native SwiftUI views + # It uses the `~SWIFTUI` sigil instead of `~H` ~SWIFTUI""" - - - Hello native! - + + + + Hello world on <%= device_name(assigns) %>! + """ end @impl true def render(%{} = assigns) do - # This UI renders on the web + # This render function serves HTML ~H"""