From e02476b207926295970dec61a972ea47a3281e82 Mon Sep 17 00:00:00 2001 From: Michael Freno Date: Wed, 17 Dec 2025 13:51:13 -0500 Subject: [PATCH] starting refinement --- bun.lockb | Bin 325156 -> 326868 bytes package.json | 2 + prettier.config.ts | 8 + src/app.css | 252 ++++++++++++++++- src/components/Bars.tsx | 46 ++-- src/components/DeletionForm.tsx | 23 +- src/components/LoadingSpinner.tsx | 2 +- src/components/blog/Card.tsx | 86 ++++++ src/components/blog/CardLinks.tsx | 48 ++++ src/components/blog/DeletePostButton.tsx | 39 +++ src/components/blog/PostSorting.tsx | 77 ++++++ src/components/blog/PostSortingSelect.tsx | 107 ++++++++ src/components/blog/SessionDependantLike.tsx | 137 ++++++++++ src/components/blog/TagSelector.tsx | 97 +++++++ src/routes/blog/[title]/index.tsx | 272 +++++++++++++++++++ src/routes/blog/create/index.tsx | 205 ++++++++++++++ src/routes/blog/edit/[id]/index.tsx | 254 +++++++++++++++++ src/routes/blog/index.tsx | 199 ++++++++++++++ src/routes/deletion/life-and-lineage.tsx | 11 +- src/routes/login/index.tsx | 85 ++++-- src/server/api/routers/database.ts | 40 +++ 21 files changed, 1932 insertions(+), 58 deletions(-) create mode 100644 prettier.config.ts create mode 100644 src/components/blog/Card.tsx create mode 100644 src/components/blog/CardLinks.tsx create mode 100644 src/components/blog/DeletePostButton.tsx create mode 100644 src/components/blog/PostSorting.tsx create mode 100644 src/components/blog/PostSortingSelect.tsx create mode 100644 src/components/blog/SessionDependantLike.tsx create mode 100644 src/components/blog/TagSelector.tsx create mode 100644 src/routes/blog/[title]/index.tsx create mode 100644 src/routes/blog/create/index.tsx create mode 100644 src/routes/blog/edit/[id]/index.tsx create mode 100644 src/routes/blog/index.tsx diff --git a/bun.lockb b/bun.lockb index 47337a0cafacc19d156c8ecd77f21cb0dd1d8bd8..4de04246c431a2ba102d142d5650ce67f6d7c718 100755 GIT binary patch delta 49072 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 ZRJSBpB%M9&IC;Dt#Ww0fk#ka4_c!ANU~B*Y delta 46307 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 (Q{ z4o&685BgF7$hBUC!oMJ`6xDJfms&|62hA7Aa{NVTVr3xps{r}Q2JJTc!r7R2RI8@d zh)f1(J}a`iP%S62TrD8wb+tSzGQXad{|zR|c1LPOB9l!uHrH|@4Ytt8-;w8s$Yg8H z6WNa)f$Wzq8oTQJtVny^>_PY`6Pd_@J#+yg`CdR4=uH&Y45NHg7U-|lhjY*KSY|Dta+j#?iDwRdQtKweh{bghZ}{Dw^1sV0eOxV{~gl$T&+iBIZLAe zGAoro{)*zBUC)N4$flWPK(>7ake#|#7t0QrwH`lM-TOdK;0_?|>|~}!^1HNrH<0!} z()mCY0kR0>>F$VDAToJO<8dGjo}lnwARYM}`K;&*jTg0kR-~OvcD*BB(hAuj6~970 zW87`6M`Q(efy}?B5U}Ij{0-Igz$s1#$?A zXucSbdOkpYvLfYWAZJ!NogeH@WQS~-pH|F@c2UQPsl%Mg_(8QQS}i+dy#YF($f*^g zc_Pb)YM#jcZ~@uAdO&71}XfGfm#}KXezed^r+7P>R1Ps#VX#8M> zV>FHh()00}p8(`1E3(U{XuUUdK9P>5X#TI5^jE?E7d}5KT8WBs0XG793(t$fbPTq%FPNcm@ zK+Zqg&pLz1j9)Z90kS3ZhH^uro!;R?UYq5HYn?t3hc@lU7&|X?w@q57m%LE zX?Z^_@2@c)$PbZvgEXHN>BtZ*C(>?$M?w6QiA*#^%Unh^dBRGB9ve1R>yHD{&IHX* z)O-?<^-c!zlNDKhy3U^oq{>|Upq&&TM|u&38rgv>J=DN3AwT~Kr0F%dOkoHb${1nI@I|F17oY(vXoqv&C zN&{bMybPq`4b7(m>A-Ex-vQF#ea%1A_!x+PwkMkZ4M@GGK(1~ljMA|j8gl}vpOhO3 zI*=F0F)RpVh2B6uxK{+SU?q)}fqXa!1+s!LEe{9sLks~X>ikg}#{y|*oaQG2(UVEG zsYu|TZ3ceOfw@3>W&v4X0g#Jk8ITpO(6|~%$Jc0nJ&@(z*SJOJZv)cKb|A~|(zpjG z=ih!U_*ml+APpbWcpOLrCp7;lkcQ3x>F^go&WX!F{IlJ_4?6M<8I4T-fFCS(2T1-Q ze=smG!Hl0YJ^|9eA3%0>PSnEuTtLcS0kXovKyG@zny&!#1K$cr{kB@(1;_?OX^aMP zh*@7wjflqe$ zAGown`tNS-|HGH|=>NaJwf_%a+H?GQi_cY>?X5lJ*fC2Je!=Cp%>RJrKi7*2{XZl4t%um-cF4{<*aO=h7bQflK0_OM7&} zKbQ9M@}99j>t#Jy$@A#>&!zo8m-g9T-gDOcb7}w2r9BQ_+)%Q+tcO_2c?b;P0Zk(x z_x`!G|6gC$>z*9)&!zo8m-hc$+VeL5pG$jnd7m4B^`A@oe=hC+xwQZ1(w?{X|Dj9! zBJxs=r#O5vFYTvAS1@)*SFksKMRW|Yk2d_pnGkzJ8LcKat)#DP%z>$^wPw{J0=9|WVi-NU-t6Aa(PxWS|NAGZhL zR|If#DXVh-ZHp0*1M{;Tk#_02`+t`W+8xjWu6s#mwPQoZ4js(C%F+Pw zthL?KdAO&p_9xm{)E1)1KH6@Ow3~NG-w`Zo+cSucp9`^j=iLTl_%fW(9$=yKb1 z(KgDy-Fg2FY|reY@hnl;{XeE>?W00sS+u=%F8BYD-utbL3e1rsJa;_9GDZ;cMlqAPh6C1UM_V`Zc;!r&*P|vi|#*P zs1FVD*U&Q5yJSQlrFa`LeX&u^ee|>sc%P?1Mb@*I^&lN2r%de~WxvFJcB>dV! zevx=h3wg2POCdhjwT$26`AG@Bq0}-SYbt8l*ILH!`6_8yI%KSX+djLTpIcfFL(N}3 zm!BUXlP?lr&fE6sb<5Yz*aQ3`aX(~i<&Rp%*UdUW##Y|ZGQL&wTy<&2t7?3W?OiS7 z>uT;EU8809wG6K}B-viqLcY&N#X_J*Nb~bh%h>gNKaL;fFx>4+pKt3vL&Y4|qFS*A z(uP(nre$18??I1a=%r;`N^%JSi)&d3(v#Rse7v#lBjGU$3(r(K5c6$)pRUe_OzoR8|Y? zLdajPV3)t9W%ZC=qoY zlfS;lUjSiUp<1s6(kc9P6$)!8b$K>KXdhs2PL!iT;BOq>6b)4e+f{u%Un-RbHZr6N}1zG@F2;%!>BS0fTqd=oU zDKI_XA?_D))NIDrOM8HNf?`44KwUt5Z?!XsJG37xffwTw6 z3CaP=2{J%@sq@ch7N`RPAR_H+yvAN)B(gf8VCvkar5P7`xwLxmir&~yQd)Taop1w z0eIKV&6(#So_W3oabx}l^c{#t4<0qJG23k?#q**L?^pMs{=J~1kjph<6P1cNdX?D+ z{t)OeXgBCX&>j$ffry*sYZml&y+)itPLO}PpYu!iv4?x^gFMuwBE`g4L zj)SIvrhy(}vhlsDT9`w{KyM?x6vUUgx`FswTMKj|<3KAAUv*py;=7o9!L

5L6OW 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

g$ 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 diff --git a/package.json b/package.json index 0324c6e..c1041dc 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,8 @@ }, "devDependencies": { "@types/bcrypt": "^6.0.0", + "prettier": "^3.7.4", + "prettier-plugin-tailwindcss": "^0.7.2", "trpc-panel": "^1.3.4" } } diff --git a/prettier.config.ts b/prettier.config.ts new file mode 100644 index 0000000..73e565c --- /dev/null +++ b/prettier.config.ts @@ -0,0 +1,8 @@ +import { type Config } from "prettier"; + +const config: Config = { + trailingComma: "none", + plugins: ["prettier-plugin-tailwindcss"] +}; + +export default config; diff --git a/src/app.css b/src/app.css index f92926e..b4147e5 100644 --- a/src/app.css +++ b/src/app.css @@ -130,10 +130,22 @@ :root { font-family: "Source Code Pro", monospace; } +::selection { + background-color: var(--color-text); + color: var(--color-crust); +} +::-moz-selection { + background-color: var(--color-text); + color: var(--color-crust); +} +::-webkit-selection { + background-color: var(--color-text); + color: var(--color-crust); +} body { background: var(--color-base); - color: var(--color-crust); + color: var(--color-text); } .cursor-typing { @@ -166,3 +178,241 @@ body { opacity: 0; } } + +.input-group, +.textarea-group { + position: relative; + margin-top: 45px; +} + +input.underlinedInput, +textarea.underlinedInput { + font-size: 18px; + padding: 10px 10px 10px 5px; + display: block; + border: none; +} +input.underlinedInput, +textarea.underlinedInput { + border-bottom: 1px solid var(--color-surface2); +} + +textarea.underlinedInput { + resize: none; +} + +input.underlinedInput:focus, +textarea.underlinedInput:focus { + outline: none; +} + +.bar { + position: relative; + display: block; +} + +.bar:before, +.bar:after { + content: ""; + height: 2px; + width: 0; + bottom: 0px; + position: absolute; + transition: width 0.3s ease-out; + /*TODO:*/ + background: var(--color-surface2); +} + +.bar:before { + left: 50%; +} + +.bar:after { + right: 50%; +} + +input.underlinedInput:focus ~ .bar:before, +input.underlinedInput:focus ~ .bar:after, +textarea.underlinedInput:focus ~ .bar:before, +textarea.underlinedInput:focus ~ .bar:after { + width: 50%; +} +input.underlinedInput:focus ~ label, +input.underlinedInput:not(:placeholder-shown) ~ label, +textarea.underlinedInput:focus ~ label, +textarea.underlinedInput:not(:placeholder-shown) ~ label { + top: -20px; + font-size: 14px; + color: var(--color-blue); +} + +.delete input.underlinedInput:focus ~ label, +.delete input.underlinedInput:not(:placeholder-shown) ~ label, +.delete textarea.underlinedInput:focus ~ label, +.delete textarea.underlinedInput:not(:placeholder-shown) ~ label { + color: var(--color-red); +} + +label.underlinedInputLabel { + font-size: 18px; + font-weight: normal; + position: absolute; + pointer-events: none; + left: 5px; + top: 10px; + transition: + all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), + color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +label.underlinedInputLabel { + color: var(--color-surface1); +} + +.logoSpinner:hover { + animation: spinner 1.5s ease; +} +@keyframes spinner { + from { + transform: rotate(0deg); + } + to { + transform: rotate(-360deg); + } +} +@keyframes spinReverse { + to { + transform: rotate(-360deg); + } +} +.animate-spin-reverse { + animation: spinReverse 1s linear infinite; +} + +.vertical-rule-around { + display: flex; + flex-direction: column; + align-items: flex-end; + justify-content: flex-end; +} + +.vertical-rule-around:before, +.vertical-rule-around:after { + content: ""; + flex: 1; + border-left: 1px solid var(--color-surface2); + margin: 10px 0; +} +.checkbox-container { + position: relative; + padding-left: 35px; + cursor: pointer; + font-size: 22px; + user-select: none; +} + +.checkbox-container input { + position: absolute; + opacity: 0; + cursor: pointer; + height: 0; + width: 0; +} + +.checkmark { + position: absolute; + top: 0; + left: 0; + height: 25px; + width: 25px; + background-color: #eee; + border-radius: 4px; + transition: background-color 0.2s ease; +} + +.checkbox-container:hover input ~ .checkmark { + background-color: #ccc; +} + +.checkbox-container input:checked ~ .checkmark { + background-color: #2196f3; +} + +input[type="checkbox"] { + -webkit-appearance: none; + appearance: none; + background-color: var(--form-background); + margin: 0; + font: inherit; + width: 1.15em; + height: 1.15em; + border: 2px solid var(--color-blue); + border-radius: 0.15em; + transform: translateY(-0.075em); + + display: grid; + place-content: center; +} + +input[type="checkbox"]::before { + content: ""; + width: 0.65em; + height: 0.65em; + clip-path: circle(25%); + transform: scale(0); + color: var(--color-blue); + transform-origin: center; + transition: 120ms transform ease-in-out; + /* Windows High Contrast Mode */ + background-color: CanvasText; +} +@media (prefers-color-scheme: light) { + input[type="checkbox"]::before { + box-shadow: inset 1em 1em black; + } +} +@media (prefers-color-scheme: dark) { + input[type="checkbox"]::before { + box-shadow: inset 1em 1em white; + } +} + +input[type="checkbox"]:checked::before { + transform: scale(1); +} +.tooltip { + position: relative; +} +.rule-around { + display: flex; + align-items: center; +} +.rule-around:before, +.rule-around:after { + content: ""; + flex: 1; + border-top: 1px solid var(--color-text); + margin: 0 10px; +} +.hover-underline-animation { + display: inline-block; + position: relative; +} + +.hover-underline-animation::after { + content: ""; + position: absolute; + width: 100%; + transform: scaleX(0); + height: 1px; + bottom: 0; + left: 0; + transform-origin: bottom right; + transition: transform 0.35s ease-out; +} + +.hover-underline-animation:hover::after { + transform: scaleX(1); + transform-origin: bottom left; + background-color: var(--color-surface2); +} diff --git a/src/components/Bars.tsx b/src/components/Bars.tsx index 3ff8acb..6337e26 100644 --- a/src/components/Bars.tsx +++ b/src/components/Bars.tsx @@ -2,20 +2,30 @@ import { Typewriter } from "./Typewriter"; export function LeftBar() { return ( -