From cb27ab7974892d89a03bde2856be6144606cba89 Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Mon, 11 Nov 2024 15:52:46 +0000 Subject: [PATCH] - WIP on reworking lean-api's visual --- asset/api/favicon/apple-touch-icon.png | Bin 0 -> 5715 bytes asset/api/favicon/favicon-96x96.png | Bin 0 -> 1967 bytes asset/api/favicon/favicon.ico | Bin 0 -> 15086 bytes asset/api/favicon/favicon.svg | 3 ++ asset/api/favicon/site.webmanifest | 21 ++++++++++ .../api/favicon/web-app-manifest-192x192.png | Bin 0 -> 6558 bytes .../api/favicon/web-app-manifest-512x512.png | Bin 0 -> 31066 bytes composer.json | 2 + meta/config.php | 9 +++++ meta/definitions/software.php | 38 ++++++++++++++++++ src/Attribute/EntityField.php | 16 ++++++++ src/EntityDescriptor.php | 4 +- 12 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 asset/api/favicon/apple-touch-icon.png create mode 100644 asset/api/favicon/favicon-96x96.png create mode 100644 asset/api/favicon/favicon.ico create mode 100644 asset/api/favicon/favicon.svg create mode 100644 asset/api/favicon/site.webmanifest create mode 100644 asset/api/favicon/web-app-manifest-192x192.png create mode 100644 asset/api/favicon/web-app-manifest-512x512.png create mode 100644 meta/config.php create mode 100644 meta/definitions/software.php create mode 100644 src/Attribute/EntityField.php diff --git a/asset/api/favicon/apple-touch-icon.png b/asset/api/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3bfce0727b9737599d38786a1d97298e8b169e5f GIT binary patch literal 5715 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 literal 0 HcmV?d00001 diff --git a/asset/api/favicon/favicon-96x96.png b/asset/api/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..9e1b3cdeb187fd3bd940aa295b8d1db6faf8b44a GIT binary patch literal 1967 zcma)7`#%$U1OCp8xy)^-D6|f_N3>j0%;p|j2xBZJX38z2#w@u-m(^aKkW+HYuyX6P zq?~R;h;oYKR+3wz$ZZym_YZhKpZAC7^276aKF@E@MZBjoLRLc-0Dy3H!5-UE@_zxB z+TyXBNmc+z(_OI+KFPteMKljpKUF~lCwIzFC(iet+xfIDK>?r>;&@%{Wv^;=_ITiD4aP3j}_6fdC=Q<1G`Lav%;IHfS?@wzRy+`D& z&X{qY#5cK7H&dT814OQ`3}Ka@aVOl{50_km?%lCV^Dw3RR*nLnM1+8Ok?wI660lyf zZ)m2&SR3l=woeBaPT1pnQq3<hEt%>+j#@nmXZ7JN?iD{*AQS3 zWniWb^mVwZ9AKYIl)aRw5Bf|o=M$GTIF}Ji`GYFnm?;?ukS>J)1@)ocImto1zC*_s z08kp5FAUq8mq_ZRxmrxq!Ffxd1bGnOsa9Qj7Tie*pPC0iRlP{XU;i#2jOSabKr3U$ zOdR=fAKRLwG3<{2aNU)>gY+a99LgJ*CqL56m*-yCUUYocHQW1x>iDXozh_gnN<3k* z_o6Q&A`gQ%0lYTTnqAgz+N)*09?8o~gwkMSZS94c({jP~O5f@;wEMY|t-4QrdI^F& zy9d59EEPqy=K|)gmmjm8CTT4aAMh*djJSl6nKoE80bH7&MlJhvDH}U-VL!YEk)ur< z=42{~y7r1u_~FHh-|iB{w8VlZ%!?r*byJnm)#{*Wm9baOg7d}cbv>>k(_&N{cIwxS zS?B(b*^$!9&R4fBMn-s5bM*mlg^Lkr{?dlAhriRjT8tn%wc!; zXoqVprh0mMV%w`w2r4h}@9f5=xB+DPo$aidnd)GMcS9ln)*!T1AowQQShPI&53d&V z_r~O{F78BQHFG20Dh75xq&~I|ZJ{sj9qgso^`lOIW(S|o59-yFr(Sbfa^f<>0TNkOG8{a3N%rL)ViOpJ=W{(y_ zX!xhFbA3a!cc*oB z_wbX?ZFI@I_GRBT(RJ|zDI}Ex_k*R$Oqh6t+RuO6XA!7MhC*s3porzDo7k~D zX14b061cvzyMeP59zEWV_->{rDJ7XgOfs4jM~LZZBRS#ZnZl2nNv)@47b_r==t2TR1 zjyvIS{Eem6Dx9AnrCS)_^AEH6^i(sFFrlcsRyEIs;Sb*Sn|E`mi9PZ9wzAI@MWZ<@tu5`-a71qNqU4VBZk%x#e;N2SMdzeR920pq zHp@b6gK#ijm=^m4q?ch2`c+aM&v{0+RKVwA38?@mmkUK>5SRo|B2ZtH{Ty$2cpkm9 z3IGmr&3xtOF(b}(3CHLGO39;ad3%EEU*^ExA&%ey1vso z_wE>4%(OHmRaw7@|D&XDypOyMkSpZ3j_M@LtT}tj+*E57YVF_p(&M0k(FOo30Ma?P d8~T3+Hno+lXRd^dOW?OEfh*1v%fpb<{{>}2dhP%K literal 0 HcmV?d00001 diff --git a/asset/api/favicon/favicon.ico b/asset/api/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e2a7d3d3e6dcb99bc12608ce60f44cf35ffef92e GIT binary patch literal 15086 zcmeHOZD>_>7(c^c6y(hh(T5TZto$&@5b}kb_Ckc4-Rth|rc>)~lWi+)4H|ABQI}%<*Q8BK-`hX zA^|T6I7)&=|4asdZSAuUWtx}mc+M`)y%JKFBgG%wrnvAfm}fp%864`ost_;<9u z;W_?K=a$)^qjx`TUk~^(YvMe%tiFx-!F$e(ET&J#(Wbc<^9Ls21Rs?zYy7c!8-|t7 ziPM<1>;-;}74rTijdpBKBtSC#&^2Z)r^3Jcz4x8x+J}4gy6-igbF2ZKvgT%-_5mj` zLf*2u)@D5Txf9=PGGlbUmQ&&H*wqn$e|=HJT|aaXYiOA^a5GN(-2Efifj9Ex+A+^h zc@A9I_4d0%A8g(C8`g<O7sNx>`CJ>gwj-80xV|QVtE{-xJ-eW0Q&W?320$KjiJ!T;9%RI& z!jHO$d49_a&b7e0tOK1fkZUR`@>ti5B^L6saH%_Q)-!V%ORnP>n+iW;WKSmTg&3~k zz`-NK%rWts_m@Z{J{!d0y*qj8`zCPc%q4E-qPBh^ZX)u+7G zic|$+_m=++{D{~2TAm1g9iI&uxH(tIUwr%Xey$h%z$499bxhZaM)$s8_V)rmv6CNL z5d8~yU7EMSIm^*6=ZP`*F}(&a@Vom*_622P1@Bo_e+qW`z%^zqdx0PQH74TZ8a`fL zaVs(EINCJ#3ctnxnb^TiUn+g3;K!UvsqmVorkTr&Mcul{~oh~_C7#vBoFVPQn-PgpIPM0&2d#==V zypZu;q{D0aafUVD!|MgRUJLi6S6pN9Wq$(x1pEp36YwXHYy!6PvaG4{pQJ&qoO=6& z&ri_Sz)YM#OH0dr z;nl(A*`|rCHM}MitgCtE#B}^#fZFLWpl`S!)Hz)=k^bpoChL#QEenEDANHu|be&XJ7JU{jqoDvys){+{fh1 zHFemX^-4eZP#Xl97??|*tUv5k<(n@!`Eq?Ap0z4BZd^c}b@a^Ho7WWbYO8Cq(={n;-rnAIJLg9`b#U0o=?8b-f7$==0fU1>WL^(C7P4N0>C04S z4`OJ@58EJZH*03K|LAqb8FNo)eLDN2HhQrK`%~9G+OoNR)+Fb;sVCyj{usT-V6SGI zdVB4ZCtviRP8t~aA&_X@v}LLH6@6{$ngas^x3E_tuCG&_mx(Ojk-4njw@8xjBP8k% zo5r4PIayEN?oZ%GpFsR`hOs~UCFb=dH&2hE8zkIu0_=qqHA7)a{A1rx=kvtjLK4Cj`N>v*hP>yYK|ykDoJ zg5XPGlANQ) \ No newline at end of file diff --git a/asset/api/favicon/site.webmanifest b/asset/api/favicon/site.webmanifest new file mode 100644 index 0000000..d49d809 --- /dev/null +++ b/asset/api/favicon/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "API", + "short_name": "API", + "icons": [ + { + "src": "/static/favicon/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/static/favicon/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/asset/api/favicon/web-app-manifest-192x192.png b/asset/api/favicon/web-app-manifest-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..102fde90cac51cfa2e8979c08d280d1d40739c39 GIT binary patch literal 6558 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 I%9;fJ4}E!3X#fBK literal 0 HcmV?d00001 diff --git a/asset/api/favicon/web-app-manifest-512x512.png b/asset/api/favicon/web-app-manifest-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..fa475f5a331435bdc87982aa318b4db8fb122e8e GIT binary patch literal 31066 zcmeFYRa6~Kum(EpY#f3I3l=!3i$G-3jjQdN=vcxzG3E zKAyE^ZDtnJUDZ|9C12Ns$jOKyBj6zb0DvqZF023mAjmBUfP;bjxpbMj2LNI~LRe7A zMdvUbR!wn!CeV4804(SxF8~&lQ^Ld#);=^4l*fFS<9_!uqV*Y@;hqHm@PAi#Bp`J7QS>)4 z0Q&C&gMiro_n*-K*awG=fZQK|^Lf3%!1n*#!3C2*!2yh4xg=qrP=VJA4*2swcc`dB zAXLC$&LIxze!(3G0^>Uj|%sHI3NZ-!Tt|B0!Z)zK(PL#Jkx*V-~<4@ zxBm#k`S{?V`v9n21-VB5kwf(XI^O>y40&cG1E7clrNsvRcNtJVod3HZ191Q(fRq{; zBlthd0s;2_w?K$g|4)PeXQKbN2Z8^eoQwb&w1CH#FU?anx>p}Qd=US3N~55rCQ~4r z`7N)cTA{VJEL^dKlh!AnmRv>03TC}66yyUFaU3B-`?$2-|TRQC$B7j@PXv_r@`SNa$MZ` zylQma>!h7m7kEkog@N%VC$C7Dsk++VC_k?)l8`xEi8-&p;c%`BTq_{33*B*3JJmUq z_&BgZ$*`$*6jOFrZOW9q`~E-Iiw(v>g82~>^8pJBtLHcuhOzu>*^XNMSI2-b)K6A= z-~a`Hr^&l{HV7s2o}!y_SW;5PO0Qr3?dxbbSSV~$v5AQS<-C-bbq{3i$3Qpd&3$z9B|Tk|1AOn19n zmOp_ffoj7jQiX~>U;pk=kau|<9DGU*FEz= z>s5a2$4BxesDD9{7zF0&ix5|iiML!`p2nhq`Y^^Iqlj4q1m9tDGMo+$my?iGatxz5 z{TJe{z6hwO1Uh^(BQPi{WH%TqlK*9*Ir@}k>Ea9T!;tx5hlpeIW+##1jLCsKisQdA zek5|FAh#w5i6jn33&r2z!Sc7#0>mKV^9`|vRCa4!morfNmOl{RaQ!gFTSnM zrKQuPJaha6-l2hNL-bMXd)s%X+ZaYp+E$PD`!x^?d;`Z}Vhv20W8`o<9xZ(SmTN%P z1b-?GbocfSQuKPQc&~3lkLKhUG+l`D{G;IOM)AqEI<>8|6h8y0Xov5Vi)R(wan{w> zEFvrl-P1#Unu7oMUm_8ZB#Vpk3>_egy5)03IdI(6=TI=G3TEM^F zNvR83X?@@*uC5Nfpw)x_PwUlSmZ|Cf-U!P#_?DI^@8&;rf3nqp?nq4P=SyVJZogu> zjKIke{+HJfw}E?`P(I=^b!x}|)>8^*fF3VNQ-S){J8IKazKHS;8!JBe9kdbRzljAx zd}?c1?(CP(nN8@*dgTznroL!d%0L>AS2!-}Hz~aVL*oAw_m{ZieoOXCIP%EX#X4k= z0Eb2=8zO`S;#vJK^`xEuQY9DStSn-&_X~9&G*a+*To7l-8TV-55u+%Kjkju%znWMG z_eK#3DJf5Jy+6BfXLYQeEepT2S$tEeMSij(Hp%ujUZDI)gHbH%J=fIK#5qDd$0-&P z)B?C8tS~B+&1$8PIH{Hq0g~i#ppK1?n|SVNuG-t#MSl8f!lpZAArt;!w{?8PeNU3D zf8E&Vs#VB9M<)^&7oXG0(@=0k+rci3a_Ds@;TQ(p@55# zot3buW0BjZ_a|HrC8!qOhreKi>OSS30OTVZ@mUQOl^vv^v2X5qe?7lFH~*NGkf5Ah zG?ST;WM+3dw@2T|&lE{cmM`&5QOw!2ukzkaqr!iAX|?9U{c+7YYBY1>WVz`nI-Ocq zmuPK)+pN=w!L;qI-&!qdmI#nX)=QMZKI(2DB0^4gW>$%~lZQQFtn@7?iePVbF1+BAQa z6I?H$W#vn3^txmWjxykMb<_DQjR `E<0yUGC3E)S8>;PmT;ww`Tu^cYm^5i|<(U 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 [ + 'autoload' => [ + 'lean.api', + ] + ], +]; diff --git a/meta/definitions/software.php b/meta/definitions/software.php new file mode 100644 index 0000000..2f6862e --- /dev/null +++ b/meta/definitions/software.php @@ -0,0 +1,38 @@ + [ + 'picea' => [ + 'context' => Lean\Api\View::class, + + 'view' => [ + [ + 'path' => implode(DIRECTORY_SEPARATOR, [ $path , "view", '' ]), + 'order' => 99, + ], + ], + + 'asset' => [ + [ + 'path' => implode(DIRECTORY_SEPARATOR, [ $path, "asset", '' ]), + 'order' => 10 + ], + ], + ], + + 'tell' => [ + 'json' => [ + [ + 'path' => implode(DIRECTORY_SEPARATOR, [ $path, "meta", "i18n", "" ]), + 'order' => 99, + ], + ] + ], + + 'routes' => [ + 'Lean\\Api\\Controller' => implode(DIRECTORY_SEPARATOR, [ $path, "src", "Controller", "" ]), + ], + ], +]; \ No newline at end of file diff --git a/src/Attribute/EntityField.php b/src/Attribute/EntityField.php new file mode 100644 index 0000000..95e53c5 --- /dev/null +++ b/src/Attribute/EntityField.php @@ -0,0 +1,16 @@ +reflectClass()->getAttribute(Table::class); foreach($reflector->reflectProperties() as $property) { + $entityField = $property->getAttribute(EntityField::class); $field = $property->getAttribute(Field::class); if ($field) { @@ -87,7 +89,7 @@ class EntityDescriptor $propertyHtml .= sprintf( $this->entityField, $property->name, - $field->object->description, + $entityField->object->description ?? "", $field->object->name ?: $property->name, $field->tag, $field->object->type ?? implode(' | ', array_map(fn($e) => $e->type, $types)),