From 6981b32a3ab4004cd0ef21644bd6a3a26a3a3285 Mon Sep 17 00:00:00 2001 From: Peaceultime Date: Mon, 2 Sep 2024 11:47:15 +0200 Subject: [PATCH] Finished Canvas CSS --- components/canvas/CanvasEdge.vue | 10 +- components/canvas/CanvasNode.vue | 70 ++++++------ components/canvas/CanvasRenderer.vue | 155 ++++++++++++--------------- db.sqlite | Bin 839680 -> 839680 bytes server/tasks/sync.ts | 13 ++- 5 files changed, 113 insertions(+), 135 deletions(-) diff --git a/components/canvas/CanvasEdge.vue b/components/canvas/CanvasEdge.vue index 452e336..585ac7b 100644 --- a/components/canvas/CanvasEdge.vue +++ b/components/canvas/CanvasEdge.vue @@ -24,10 +24,10 @@ const rotation: Record = { \ No newline at end of file diff --git a/components/canvas/CanvasNode.vue b/components/canvas/CanvasNode.vue index b432730..6019a49 100644 --- a/components/canvas/CanvasNode.vue +++ b/components/canvas/CanvasNode.vue @@ -6,50 +6,46 @@ interface Props { zoom: number; } -function getColor(color: string): string -{ - if(props.node?.color?.startsWith('#')) - return hexToRgb(color); - else - return getComputedStyle(document.body, null).getPropertyValue('--canvas-color-' + props.node.color); -} -function hexToRgb(hex: string): string -{ - return `${parseInt(hex.substring(1, 3), 16)},${parseInt(hex.substring(3, 5), 16)},${parseInt(hex.substring(5, 7), 16)}`; -} -function darken(rgb: string): boolean -{ - const [r, g, b] = rgb.split(','); - return (299 * parseInt(r) + 587 * parseInt(g) + 114 * parseInt(b)) / 1e3 >= 150; -} - const props = defineProps(); const size = Math.max(props.node.width, props.node.height); +const colors = computed(() => { + if(props.node.color) + { + const color = props.node.color; + return color?.class ? { bg: `bg-light-${color?.class} dark:bg-dark-${color?.class}`, border: `border-light-${color?.class} dark:border-dark-${color?.class}`} : { bg: `bg-[rgba(var(--canvas-color), 0.3)]`, border: `border-[var(--canvas-color)]` }; + } + else + { + return { border: `border-light-40 dark:border-dark-40`, bg: `bg-light-40 dark:bg-dark-40` }; + } +}) \ No newline at end of file diff --git a/components/canvas/CanvasRenderer.vue b/components/canvas/CanvasRenderer.vue index a8fbf82..46ea2a2 100644 --- a/components/canvas/CanvasRenderer.vue +++ b/components/canvas/CanvasRenderer.vue @@ -7,55 +7,12 @@ interface Props } const props = defineProps(); -let dragging = false, posX = 0, posY = 0, dispX = ref(0), dispY = ref(0), minZoom = ref(0.3), zoom = ref(1); -let centerX = ref(0), centerY = ref(0), canvas = ref(); +let dragging = false, posX = 0, posY = 0, dispX = ref(0), dispY = ref(0), minZoom = ref(0.1), zoom = ref(1); let minX = ref(+Infinity), minY = ref(+Infinity), maxX = ref(-Infinity), maxY = ref(-Infinity); let bbox = ref(); let lastDistance = 0; -let _minX = +Infinity, _minY = +Infinity, _maxX = -Infinity, _maxY = -Infinity; - -onMounted(async () => { - await nextTick(); - - props.canvas.nodes.forEach((e) => { - _minX = Math.min(_minX, e.x); - _minY = Math.min(_minY, e.y); - _maxX = Math.max(_maxX, e.x + e.width); - _maxY = Math.max(_maxY, e.y + e.height); - }); - - await nextTick(); - - window.addEventListener('resize', onResize); - onResize(); - - dispX.value = -(_maxX + _minX) / 2; - dispY.value = -(_maxY + _minY) / 2; - - zoom.value = minZoom.value; -}); - -onUnmounted(() => { - window.removeEventListener('resize', onResize); -}) - -const onResize = (event?: Event) => { - minX.value = _minX = _minX - 32; - minY.value = _minY = _minY - 32; - maxX.value = _maxX = _maxX + 32; - maxY.value = _maxY = _maxY + 32; - - minZoom.value = Math.min((canvas.value?.clientWidth ?? 1920) / (_maxX - _minX), (canvas.value?.clientHeight ?? 1080) / (_maxY - _minY), 0.01) * 0.9; - zoom.value = clamp(zoom.value, minZoom.value, 3); - - bbox.value = (canvas.value ?? document.getElementById('canvas'))?.getBoundingClientRect(); - - centerX.value = (bbox.value?.width ?? 0) / 2; - centerY.value = (bbox.value?.height ?? 0) / 2; -} - const onPointerDown = (event: PointerEvent) => { if (event.isPrimary === false) return; dragging = true; @@ -84,6 +41,7 @@ const onPointerUp = (event: PointerEvent) => { } const onWheel = (event: WheelEvent) => { + zoom.value = clamp(zoom.value + (event.deltaY * -0.001), minZoom.value, 3); } @@ -118,8 +76,9 @@ const onTouchMove = (event: TouchEvent) => { const reset = (_: MouseEvent) => { zoom.value = minZoom.value; - dispX.value = -(maxX.value + minX.value) / 2; - dispY.value = -(maxY.value + minY.value) / 2; + + dispX.value = 0; + dispY.value = 0; } function clamp(x: number, min: number, max: number): number { if (x > max) @@ -210,12 +169,64 @@ function getCenter(n: { x: number, y: number }, i: { x: number, y: number }, r: y: s * n.y + l * r.y + c * o.y + u * i.y }; } +/* + +stroke-light-red +stroke-light-orange +stroke-light-yellow +stroke-light-green +stroke-light-cyan +stroke-light-purple +dark:stroke-dark-red +dark:stroke-dark-orange +dark:stroke-dark-yellow +dark:stroke-dark-green +dark:stroke-dark-cyan +dark:stroke-dark-purple +fill-light-red +fill-light-orange +fill-light-yellow +fill-light-green +fill-light-cyan +fill-light-purple +dark:fill-dark-red +dark:fill-dark-orange +dark:fill-dark-yellow +dark:fill-dark-green +dark:fill-dark-cyan +dark:fill-dark-purple +bg-light-red +bg-light-orange +bg-light-yellow +bg-light-green +bg-light-cyan +bg-light-purple +dark:bg-dark-red +dark:bg-dark-orange +dark:bg-dark-yellow +dark:bg-dark-green +dark:bg-dark-cyan +dark:bg-dark-purple +border-light-red +border-light-orange +border-light-yellow +border-light-green +border-light-cyan +border-light-purple +dark:border-dark-red +dark:border-dark-orange +dark:border-dark-yellow +dark:border-dark-green +dark:border-dark-cyan +dark:border-dark-purple + +*/ - - - \ No newline at end of file + \ No newline at end of file diff --git a/db.sqlite b/db.sqlite index 3f2019340e86a2b575584857485a3b230d217ddc..382bbeccad458eeb6b935a33d2960c943eb203e5 100644 GIT binary patch delta 123836 zcmeHw349G#`>=EG+~nTeEFwfAB0D09BqEU@h{RS^LB$eVBtghR5@HQ0irRb2Q!TZW zs;Z*OrCwC4i!LwTwr^Y7Dy?p6N!6>Zs_!{xGPyT(hR(cZe*f?L{>g97Z|*tgSPGU+*PF{Tem_*y+&O-x|TgTD=-~l;f za!Lzg6BF9CPDmmvUpBY-$ID$@SIo{vO1XFy;58Ai?s#p+>v_D~@yf$%0bUF7T7=hQ zcrC_j30{ELYP@FPwG}TbUeobvfL9S-v+yd$s}Qg8c#Xv?AFuUzdEqs)UcC|Zp2M3G zye8rG2wrpWnvGW_UR&^b7OzcsZNw`CuW5Kqz^e+c4S3DNYaCuwb!B*!<24YkEW94J zg`bR?-2v~~O9m9=<%hP%n~9;w z{TG+9-k>X(oVsF+h02r0=J4VbY>&PtG4D7{(obP>=oHG4^e?>IMUz$^VzT)|%nSSo ziLd$ye|mk4$s(E<|BcBkn%tntq))KQ51-&&?x&c1@hO63eTH`@Y4X5nWcZ&me zGOr@syEMtDMubPI5m$$w@#o&3QJ<}^p^l%shChRU!Q?5LG`x<NiYI|Atul|BiR>|BiPVH?hj0oA|TcADHZ>Nz^S&w$LQ# zPh&cj!5?-93r*l^10fPV4HP;-KYt+$N}7pxgTOUN=t%Ph!MY$JmEJ`_Y&*dp;#v#M zR;3E5*5T2i`FUgW%R<{{uUdjia3Pq?p~>$wDK`jH;F3X@4EaXigxqRe==g(g83OxDoE#|@LEG;y_JQf0+@x9DAkJKkM$$GajA zp~8PgXh9zKl$_+8c5!W!a&vQXM(0vL+XT{L1Yf8MM3KrZf)5;v5u)nKl`Sgao7R## zX2eQ&zV*dBCndn1n!F|u)LBS_zTQ&hZ@ur(7(CJd^B8e|AF1B1+PfYN#k@gqwxLvS zN~1fmH1HMc)sTFt=4TdkYb+Kx^LM_nh#(85`e7*}Uf*A=XA|4DQxl2W$MmjlE5j3K zj6N_gKvYu=Nsp#?5_+MjM5qf|lFfT}Lo+HoATbVI6;e%t&Z$BMMcxE9qzWZip)mxv z6wDCcN$Bl8BQ&=#rwq*~v@}02bQZ!$Z1}=g&9T9ri1VOSUvVrqK*JW4Kv3#}kNTzFh0 z{#Ce8Lhlk`L4=U*K=)IGGxGk;?=6xOaJLphHxcRUEgWe2h*?`&N{og?IttCOAQFKj z#hSsRmC(__&V*J%H|duvoN6WXxtE45Fh0sj!@+PqN@^}<*z=;L=4}!qw4lzTDZKWe z@DOs*%KH!%jG=pO_ z&lE3=Y3Q(oiIYnw7UoOFz-l*xz;wiLI9|l>4~x?gxLq3wKcjwv{R|P>z|IGS5XehF z)X3#naBnMgfxc~pYA06LB-UXyK1o8wSUsNPWayKrNKIhQIM-g_mMqD@e!f)mll8oI z&^tve&4PwMqYYh85qnP}3~ujeLRUD{UTpU)$nGF%ch7ZdbRC5#NAqQN6st7>w7&ZA zdPkuPos9-Xhvt?PmXwCJ=c;UXk|_XQh&SEfYm^q-kF_z`4RdP!;>9Mw>Tz?uwn38N7Ki5LA^iK)YD+dFNTF_ zSUIwb=_hKf!S+UJrsGCF&Hy{R_no+nI^ma$$q8_LNfzx? zN>0d@3>+p0b4Io#XSf{9cd{i#BTSVX%escy{KlC!(o{Lj(X_SJ&sHhHFn82rzTgb#q74nlZMKH4hjs-U%=F&{s2+ua8Zkm z@>j-da_jK!T+^9-r)C|nMi(-lAsLMnHS#IVP+vgQ!?|rRwlqJ#_^(YMX4Yu|r+Ur} zz_OVIO?X-t{a5QlreduD7fv*puugN;RU-)YQu#Hxk<>CC8;C#^tq3%xjY}x-IS!jwvlEdZ;8XANoCR@P(iihVD8zqM{X=HPbaj zt+8=VTd7MoyNzTtauo9)*F^%WO&2mN^&!*v3C-GLopz|hR_W3P+mMXL-7a>uX8PZ& z9qJCCxnhnYiLg6|4;(&2YgdA7hCXthW*WSp9qI}5HRHNkJJc1AYR2^~?NHBMpc&Ve zg}OMR<@%6mv`80ep4Nv<$YZ)lvsE85F^hGPW{*B(QkLi<%@HJ{(QLEZQq70J_mD)? zokO7Wrf2QO0FH}cP&M5!Mk8^rOxLBsCeP4?%uOVtk)o<*YKGc%mM+R!iexlWj!&g7 z60AWo8qeEIS9=m2sx+74sP-g!JfgW2A81cvz+BBd z$Y+SU-`^Y)@43y2gJyW!_%`tg5Z~0$MB{E2GEwuU-Ksr_m`R#Tu}6CnDW&)bY!6Lh z$}rhlrpvGtQ?3h{J>^uc$(nV+J&0Q4zLGLUGwzQdYK^(?R-qa9?`em+-&9?!^AjYa zvHpio(@g(gBWnIbt^f9273pQ&#JH5U`FU}P?ZzauOO9_tzj27D`wGlGhqb!U zH$<(&!~fYunh$HHV$De`)}DlSiRMy3iD9G($Ia#?aPUR^K5ywJgRc%IkTy(n$==qU zM4#cfdU$)dX8p0x2+dG`s2%DdBQNf>D}_az%R*lXEne;->Z_ zszz%rg=?6Q0h)1bdRQ~mixIUBmg7B87c!s^nZPVvq`YNKS-0rp_uF(s*7-m*_yTd!E8ex8tJB`(?I3?^;_+GEHNs- zlMCp9dRj#jub!AJqKUDWX7VgT)H?V^uLm@rysbhK8hMg{-kPD_h^TeYe~SloA+rO? zXw(J?eRPrF0Fu#o-P-vf%}KneJ&E3ZHJ9R4Uqh_z%U3P%-UdS;oP5O)sd39>XKF6f zIV7P&e;?b=5J7_vM8n!bA>I*u;&P#LB$0=UoPWJqBs|FZ>>XombcM`f;c2H3AQ>fM zfQyp})|ANbH;8l>yESH+fj-E|s}LRh?ho<1c&sKw%y~Mgttm5>9Z0Wg$T@ zpiNC2le2?_RC~~1Ayo#8RJ|sU$<85SppcqCCM||Kg&S!H$A+RFglu6EhpwawAGnxJ zLzYl&jT|O)r)}5@(#E)kLP4P`i{6w7oeNwOp+S*rjaG{aFf7Uz`V-m7f)2&5Eb`MJ z5WX=sfD6U0EF@A*te@f%u^x*)(#Fsx1$XM40>z}kx=~_ljfIRHykjU&=b#|S(^x1! ziSbNUjm984SWpulrCF{hW({Mrq5iA{U7rHit z6XVecG3HJRY)`_tGx-xFMPLw^DENMYFqFbFq&`quD72!j5op`^ov$$&V-y`7CTxar z!!cA2tHmP693CNZQWGj?;7BR{3=3s*X{6xeIyJO?OngEjbQy{YOz0x4bc!kA6goo+ zu+z_;nowYl%+NZlHO%402 zd(>gSbx-Lhi>C8dPbaO{beR6Vgidx_FCpXaFzf@ZdLu@O>t+ys8ryqcZz0-=uMQ7V zqBY*bn?_%ZR5`PbNY!j|vK>)tJT}F5(wu}HNoX{COYN)~>Nh$YQsMLy27d_bVrZ$u z*xILyE<^Z-NJgX97?P$L>a&Pihc?LXstcKmNJis+JtR1o znsv)B5Va27GPj-PO8P;25+%vHDC@dDWM-sjW>uuUW~dh+YK^;_M+eQgw;^gBx|@GT z&6TtsNyIuvz}hF;)@X?QuB9%TEsE4!v)7P>4mL8am1b6c8&PZAN9RXr z#=SLK7yYk{#;1(d7)<8V0(_B}pv?mb| zuelT(k%UH0w?!MxQ13w0ntm+RE^jnFPbRjoCKfQqFcT-ls0o=_-Aoq;QW0dR9Lybo z@5AS0AOss`=r9T`2-e*GJwkM84jYousGIqRYKD3}qSm3ABf@kcvmME3Jn@JR*PMhM zN$AifsS%n>@&=O7s8952t~vK7kc39u4{V`J6Q4mc8uy2smWKZHjJ7znFW=p6sF{}M zH_}{utFJB%xf01}WQvU&YleCqqSn~_!u&MjejB3J!41dyYp$fdNJ1m)>Ci+MB^^aF z8e3A20L_&20ixEyk_I%@OoGo4wZ{4%8K{erE+83=`oaWU_c^_1hMOKZF2=))ZiXU_ zD27-y6K1Ow_oG7GF?rfumxc-P(A>nfA_*P(VT`BdlI%eeI!Kb@rI~#l@iL^rNsFN& zEb}r%YSce^)z?K$C-fmR&|7o6I-@;_oCccN)OXsUF7naElCJ4PW*V-!_?xTT@2YSZ zYr{?!y`TH|u6W26i@|^HHVJ~b+r)oWprN}qj$qXUJz8&7wH{QUg6Kl#mOf9ud3+H|zdYtpcsGc2Zb%pHHBn1{UH{*|;K`Vey%=Xrey`a`dq<1+= zMh^)1leD)wA2~htPf`KrXp()KRJLKy@X;T(tv#36>0Jb8S}dE*nUAishQn2h(FK0| zfi!^C-x1Jwdk)P%3S*wcMiU$oh)bKFek2*%3d1a~??uuZ zuxmxY>laCXZ3$93!O-z1GC(86#pe@$*!2_n7FY+~cZp!!(le=bk`buKt@m069+?n?vp=H8nmTkM-Y?eg%C> zM*7SM9hZ+`PC~=RjETcP)(@RsXFQbW8+_pUr=*QWeup*XL!Xgu8sTR%omW27Y^Ia8 zmH64CPm?Z$|7h&)?h?IayZpSr?j+D{(>mU>b|2N*bz&xMuNk4`(0YG^C|fD^Vx>)4QlRHXm=bnYi0C z-y>Ueut2d}HT^)BfsW~MfsV9(){)lmf9j{hcaRo;FmRp)J7#zjaTG`{l)fmd_4SSl zD#im_$wwg&d274N)+wC~rG?m{+$ z$isRx1hVG`%_@yn`GQ1HJh77$g0M@EO%Ccs09SbdP_>I>$S(B& z#dd?=c9C&9*d5dJ{N3b9ZB$HWXb-`}91;Rgyi8uxcI;#N4OoXyT4wGc$F!v-KFnbT z`uQv5Vcm$mzgP1a1YJNw*L`vW*Zp+1ti@j5M+Vk+c75pZ+C$niBwGiq+FyGHcM1gD za!H2WQ>-DjUFWUZl4UaEQ(jNV*?_JaJK$&f^z&8Fc#|G;ZYChx+FH1Yj!o;V5%x=) za51Bui}3?o1b(9ter%yInApo`fv#JKMxOwo&iv?B(FToVkhUj#v&LZ$tPNZ75i|Dn z|7dT0Ou9kOlRes#g7|09d$rm|-qoHK(8eq?vf&$FIKWLm8!6Y42o7~iq1`-Vx<*8*o*<{Sb-Xo0cFhyDbs7_656=d^U}yki zR+Ct5iLw5*cQv`8Et%Rm&k616gu$!~7a#cINm9bP*_buN&TiU0MJBPE*PkM*fxXr+ z(&(a7++mWx@s#F(;`lnw`fZSa?HkH_14|u}gXW)bh~iQ1rwdOUv_1gC`dUPb?`YE)NFJ&g3chvcjmx3sv~I*AK3AHJZS> zkPOg%FaqhFk%c9ipIQ{Rn`f^e59>gS`L?(!V}I?M%pcrmpaZR3Nvgfjlc&;mnrfb} z(-vjLZ}UaHpBoh5=xup3HS29`cJWW`@H@t$q*LnaBv$J!;*h?^B8{gm zNFoxB^fjhw9|x5UNl_Dxzl*bMyvv30Rpe1|HrTh+*i8>v7e1o(M-FtJa$I{+{NT`B z(ua;M_K0~TO@~(l=ycjP>xUrw=J_N*2YRBN1Xmb+qtQWjDx^<`q__X+E1>P2UriEy zB7HlFspR)!;zFRRi?K>05AJxuB`(dFDt?hsf08Z_iqXD$g8O!NFL-MbS)!4Al1F`5 zBm8Xsg$gsl)l#{Q`1?A2klar$yi-Q{i$iQuIa#EUe2!r?bFyZ`Dn5{J4u5t-`$KcA zd07)5*Y_69@y98;n4_fFeGo8}^b5-*G<#o8-P+#{KhtHUE63>fn&glA&|+Q)KPLH52U|v3YHd&>lxD9UG9(> zZ4^J;#LqY%V3_ft+5@#;i}w^+Vc&9|jWObvp+zKD2URfpjVjjeEx96m3lEA(dMelB z{vGd*4z>$S8f=ZwOC3+P(@Y(>wXM_e-4qIwi4McJI6C0Bl?OFmqp?w_x7F-#zv^bx z{GCPCFV=O?%n+C~sI^{@)sfgVRvqq2_<Ci2 zh^ywq5E-n?gCIr_-zRl}fKlXY9h@G{k66$J6NKlGKXf3-+7G{y?>`8Ads@voEcbPF ziWCCv9ixb!R`Wh8f_+XjnXMH8Y6bQUBdh^h?}{>W!^l)2FgKRW(rAkB`0geyj`Y+@ zXUu7@kJrp;vrQIr8(qHsW$nMH4asI-5Hz);LujXmDX>rOJqxWZU|Ax0PENT54f;2NuHpnMrT8FWZ z-0U&Iq_1c?@N@`Spi#fxc*KlRYx-L=HEuiX4PkINlpLbd%|JlUZiVN<$j9RL*i+%; zCcBf2w>gZ;vM$n?C$y(LjY%+@x!qjzM=Xra_!gSeVQ)A7yM<;OxQIVjBTHv0+TK#L z?#uA|Mrwwi^`OXQ7+=bBsCB(IN@Cj@eOnPtA9BoTOayqp73q!N!{ip`)W)YqXPe%J zzLKxiNwaLCggf!R5Z91Q(P5g*2(k~$t~_P!0KSd%+wC2(9|LSIZ$$R$ASPQ4O!U?5SgZw9rhC7w} zn&3AM?59Tn8CGXbaa7x}p83wph1R81@;q()GvI5I39uoMY|#imZdwOJQ8Vqvce;^< z4fU{q-acc`$mb)qT1qmf^m%>!=&JK{s~(@BP-l zY1R52Bsy!deet5kaaNf#vi01dH5u

%X;Wd&!eU*$%ukREPG**EJr4=A*0+>OqUf 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 gC1o>*A^L{xGSti=X%*c3ip8&0PXU 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 Qt$u~~H+hA3TZJ0;e = { @@ -125,12 +124,12 @@ function reshapeContent(content: string, type: FileType): string | null function getColor(color: string): CanvasColor { const colors: Record = { - '1': 'fill-light-red dark:fill-dark-red stroke-light-red dark:stroke-dark-red', - '2': 'fill-light-orange dark:fill-dark-orange stroke-light-orange dark:stroke-dark-orange', - '3': 'fill-light-yellow dark:fill-dark-yellow stroke-light-yellow dark:stroke-dark-yellow', - '4': 'fill-light-green dark:fill-dark-green stroke-light-green dark:stroke-dark-green', - '5': 'fill-light-cyan dark:fill-dark-cyan stroke-light-cyan dark:stroke-dark-cyan', - '6': 'fill-light-purple dark:fill-dark-purple stroke-light-purple dark:stroke-dark-purple', + '1': 'red', + '2': 'orange', + '3': 'yellow', + '4': 'green', + '5': 'cyan', + '6': 'purple', }; if(colors.hasOwnProperty(color)) return { class: colors[color] };