diff --git a/internal/templates/pages/profile.templ b/internal/templates/pages/profile.templ index e162f0b..8c38ab2 100644 --- a/internal/templates/pages/profile.templ +++ b/internal/templates/pages/profile.templ @@ -2,8 +2,37 @@ package templates import "github.com/haydenhargreaves/Potion/internal/templates/components" -templ ProfilePage() { - @components.Navbar("profile") +templ userDetailsSection(name, email, url string) { +
+
+ +
+

{ name }

+

{ email }

+
+
+
} +templ logoutSection() { +
+ +
+} +templ ProfilePage() { + @components.Navbar(" profile") +
+
+ @userDetailsSection("Hayden Hargreaves", "hhargreaves2006@gmail.com", + "https://lh3.googleusercontent.com/a/ACg8ocLeT6ltjQIkiBy1MgMJDbQxtBfMVfn8sP4e1t7d0bCJeHFdpcea=s96-c") + @logoutSection() +
+
+} diff --git a/internal/templates/pages/profile_templ.go b/internal/templates/pages/profile_templ.go index 39ae712..4c2fe10 100644 --- a/internal/templates/pages/profile_templ.go +++ b/internal/templates/pages/profile_templ.go @@ -10,7 +10,7 @@ import templruntime "github.com/a-h/templ/runtime" import "github.com/haydenhargreaves/Potion/internal/templates/components" -func ProfilePage() templ.Component { +func userDetailsSection(name, email, url string) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -31,7 +31,121 @@ func ProfilePage() templ.Component { templ_7745c5c3_Var1 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = components.Navbar("profile").Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var3 string + templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(name) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/profile.templ`, Line: 10, Col: 56} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var4 string + templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(email) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/profile.templ`, Line: 11, Col: 41} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func logoutSection() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var5 := templ.GetChildren(ctx) + if templ_7745c5c3_Var5 == nil { + templ_7745c5c3_Var5 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func ProfilePage() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var6 := templ.GetChildren(ctx) + if templ_7745c5c3_Var6 == nil { + templ_7745c5c3_Var6 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = components.Navbar(" profile").Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = userDetailsSection("Hayden Hargreaves", "hhargreaves2006@gmail.com", + "https://lh3.googleusercontent.com/a/ACg8ocLeT6ltjQIkiBy1MgMJDbQxtBfMVfn8sP4e1t7d0bCJeHFdpcea=s96-c").Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = logoutSection().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/web/static/css/tailwind.css b/web/static/css/tailwind.css index 1eb2bae..3addad4 100644 --- a/web/static/css/tailwind.css +++ b/web/static/css/tailwind.css @@ -7,8 +7,10 @@ 'Noto Color Emoji'; --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + --color-red-100: oklch(93.6% 0.032 17.717); + --color-red-200: oklch(88.5% 0.062 18.334); + --color-red-400: oklch(70.4% 0.191 22.216); --color-red-500: oklch(63.7% 0.237 25.331); - --color-blue-50: oklch(97% 0.014 254.604); --color-blue-100: oklch(93.2% 0.032 255.585); --color-blue-200: oklch(88.2% 0.059 254.128); --color-blue-300: oklch(80.9% 0.105 251.813); @@ -16,19 +18,15 @@ --color-blue-500: oklch(62.3% 0.214 259.815); --color-blue-600: oklch(54.6% 0.245 262.881); --color-blue-700: oklch(48.8% 0.243 264.376); - --color-blue-800: oklch(42.4% 0.199 265.638); --color-purple-100: oklch(94.6% 0.033 307.174); - --color-purple-600: oklch(55.8% 0.288 302.321); --color-gray-50: oklch(98.5% 0.002 247.839); --color-gray-100: oklch(96.7% 0.003 264.542); --color-gray-200: oklch(92.8% 0.006 264.531); --color-gray-300: oklch(87.2% 0.01 258.338); --color-gray-400: oklch(70.7% 0.022 261.325); - --color-gray-500: oklch(55.1% 0.027 264.364); --color-gray-600: oklch(44.6% 0.03 256.802); --color-gray-700: oklch(37.3% 0.034 259.733); --color-gray-800: oklch(27.8% 0.033 256.848); - --color-black: #000; --color-white: #fff; --spacing: 0.25rem; --container-xl: 36rem; @@ -207,6 +205,9 @@ } } @layer utilities { + .pointer-events-none { + pointer-events: none; + } .absolute { position: absolute; } @@ -249,8 +250,8 @@ .mx-4 { margin-inline: calc(var(--spacing) * 4); } - .my-1 { - margin-block: calc(var(--spacing) * 1); + .mx-8 { + margin-inline: calc(var(--spacing) * 8); } .my-2 { margin-block: calc(var(--spacing) * 2); @@ -261,6 +262,9 @@ .my-8 { margin-block: calc(var(--spacing) * 8); } + .my-auto { + margin-block: auto; + } .mt-2 { margin-top: calc(var(--spacing) * 2); } @@ -276,12 +280,12 @@ .mt-16 { margin-top: calc(var(--spacing) * 16); } + .mt-auto { + margin-top: auto; + } .mb-1 { margin-bottom: calc(var(--spacing) * 1); } - .mb-2 { - margin-bottom: calc(var(--spacing) * 2); - } .mb-6 { margin-bottom: calc(var(--spacing) * 6); } @@ -333,9 +337,6 @@ .h-6 { height: calc(var(--spacing) * 6); } - .h-24 { - height: calc(var(--spacing) * 24); - } .h-auto { height: auto; } @@ -348,6 +349,9 @@ .h-screen { height: 100vh; } + .w-1\/3 { + width: calc(1/3 * 100%); + } .w-3 { width: calc(var(--spacing) * 3); } @@ -369,6 +373,12 @@ .w-9\/10 { width: calc(9/10 * 100%); } + .w-24 { + width: calc(var(--spacing) * 24); + } + .w-28 { + width: calc(var(--spacing) * 28); + } .w-32 { width: calc(var(--spacing) * 32); } @@ -445,15 +455,6 @@ .gap-1 { gap: calc(var(--spacing) * 1); } - .gap-2 { - gap: calc(var(--spacing) * 2); - } - .gap-3 { - gap: calc(var(--spacing) * 3); - } - .gap-4 { - gap: calc(var(--spacing) * 4); - } .gap-8 { gap: calc(var(--spacing) * 8); } @@ -463,6 +464,12 @@ .gap-x-4 { column-gap: calc(var(--spacing) * 4); } + .gap-x-8 { + column-gap: calc(var(--spacing) * 8); + } + .gap-x-16 { + column-gap: calc(var(--spacing) * 16); + } .overflow-hidden { overflow: hidden; } @@ -485,6 +492,18 @@ border-style: var(--tw-border-style); border-width: 1px; } + .border-1 { + border-style: var(--tw-border-style); + border-width: 1px; + } + .border-2 { + border-style: var(--tw-border-style); + border-width: 2px; + } + .border-t { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } .border-r { border-right-style: var(--tw-border-style); border-right-width: 1px; @@ -510,11 +529,8 @@ .border-gray-300 { border-color: var(--color-gray-300); } - .border-gray-400 { - border-color: var(--color-gray-400); - } - .border-gray-500 { - border-color: var(--color-gray-500); + .border-red-400 { + border-color: var(--color-red-400); } .border-red-500 { border-color: var(--color-red-500); @@ -522,12 +538,6 @@ .border-white { border-color: var(--color-white); } - .bg-blue-500 { - background-color: var(--color-blue-500); - } - .bg-gray-50 { - background-color: var(--color-gray-50); - } .bg-gray-100 { background-color: var(--color-gray-100); } @@ -567,6 +577,9 @@ .p-4 { padding: calc(var(--spacing) * 4); } + .p-8 { + padding: calc(var(--spacing) * 8); + } .px-1 { padding-inline: calc(var(--spacing) * 1); } @@ -576,9 +589,6 @@ .px-4 { padding-inline: calc(var(--spacing) * 4); } - .px-6 { - padding-inline: calc(var(--spacing) * 6); - } .px-8 { padding-inline: calc(var(--spacing) * 8); } @@ -588,9 +598,6 @@ .py-1 { padding-block: calc(var(--spacing) * 1); } - .py-1\.5 { - padding-block: calc(var(--spacing) * 1.5); - } .py-2 { padding-block: calc(var(--spacing) * 2); } @@ -672,21 +679,12 @@ .whitespace-nowrap { white-space: nowrap; } - .text-black { - color: var(--color-black); - } .text-blue-500 { color: var(--color-blue-500); } - .text-gray-300 { - color: var(--color-gray-300); - } .text-gray-400 { color: var(--color-gray-400); } - .text-gray-500 { - color: var(--color-gray-500); - } .text-gray-600 { color: var(--color-gray-600); } @@ -696,6 +694,9 @@ .text-gray-800 { color: var(--color-gray-800); } + .text-red-400 { + color: var(--color-red-400); + } .text-red-500 { color: var(--color-red-500); } @@ -708,6 +709,10 @@ .underline { text-decoration-line: underline; } + .shadow { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } .shadow-2xs { --tw-shadow: 0 1px var(--tw-shadow-color, rgb(0 0 0 / 0.05)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); @@ -726,6 +731,12 @@ --tw-shadow-color: color-mix(in oklab, var(--color-blue-300) var(--tw-shadow-alpha), transparent); } } + .shadow-blue-500 { + --tw-shadow-color: oklch(62.3% 0.214 259.815); + @supports (color: color-mix(in lab, red, red)) { + --tw-shadow-color: color-mix(in oklab, var(--color-blue-500) var(--tw-shadow-alpha), transparent); + } + } .shadow-blue-700 { --tw-shadow-color: oklch(48.8% 0.243 264.376); @supports (color: color-mix(in lab, red, red)) { @@ -742,10 +753,6 @@ outline-style: var(--tw-outline-style); outline-width: 1px; } - .outline-2 { - outline-style: var(--tw-outline-style); - outline-width: 2px; - } .filter { filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); } @@ -794,20 +801,6 @@ } } } - .hover\:border-blue-500 { - &:hover { - @media (hover: hover) { - border-color: var(--color-blue-500); - } - } - } - .hover\:bg-blue-600 { - &:hover { - @media (hover: hover) { - background-color: var(--color-blue-600); - } - } - } .hover\:bg-gray-50 { &:hover { @media (hover: hover) { @@ -815,6 +808,20 @@ } } } + .hover\:bg-red-100 { + &:hover { + @media (hover: hover) { + background-color: var(--color-red-100); + } + } + } + .hover\:bg-red-200 { + &:hover { + @media (hover: hover) { + background-color: var(--color-red-200); + } + } + } .hover\:text-blue-400 { &:hover { @media (hover: hover) { @@ -838,24 +845,6 @@ } } } - .hover\:shadow-sm { - &:hover { - @media (hover: hover) { - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - } - .hover\:shadow-blue-300 { - &:hover { - @media (hover: hover) { - --tw-shadow-color: oklch(80.9% 0.105 251.813); - @supports (color: color-mix(in lab, red, red)) { - --tw-shadow-color: color-mix(in oklab, var(--color-blue-300) var(--tw-shadow-alpha), transparent); - } - } - } - } .hover\:ring-blue-700 { &:hover { @media (hover: hover) { @@ -863,46 +852,16 @@ } } } - .hover\:outline-2 { - &:hover { - @media (hover: hover) { - outline-style: var(--tw-outline-style); - outline-width: 2px; - } - } - } - .hover\:outline-blue-500 { - &:hover { - @media (hover: hover) { - outline-color: var(--color-blue-500); - } - } - } - .focus\:bg-blue-100 { - &:focus { - background-color: var(--color-blue-100); - } - } .focus\:bg-blue-200 { &:focus { background-color: var(--color-blue-200); } } - .focus\:bg-blue-300 { - &:focus { - background-color: var(--color-blue-300); - } - } .focus\:bg-gray-50 { &:focus { background-color: var(--color-gray-50); } } - .focus\:text-white { - &:focus { - color: var(--color-white); - } - } .focus\:ring-2 { &:focus { --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); @@ -924,12 +883,6 @@ } } } - .focus\:outline-1 { - &:focus { - outline-style: var(--tw-outline-style); - outline-width: 1px; - } - } .focus\:outline-2 { &:focus { outline-style: var(--tw-outline-style); @@ -1004,6 +957,11 @@ width: calc(1/2 * 100%); } } + .md\:w-1\/3 { + @media (width >= 48rem) { + width: calc(1/3 * 100%); + } + } .md\:w-2\/3 { @media (width >= 48rem) { width: calc(2/3 * 100%); @@ -1014,11 +972,21 @@ width: calc(2/5 * 100%); } } + .md\:w-32 { + @media (width >= 48rem) { + width: calc(var(--spacing) * 32); + } + } .md\:w-48 { @media (width >= 48rem) { width: calc(var(--spacing) * 48); } } + .md\:p-8 { + @media (width >= 48rem) { + padding: calc(var(--spacing) * 8); + } + } .md\:px-44 { @media (width >= 48rem) { padding-inline: calc(var(--spacing) * 44); @@ -1052,6 +1020,18 @@ line-height: var(--tw-leading, var(--text-lg--line-height)); } } + .md\:text-sm { + @media (width >= 48rem) { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + } + .md\:text-xl { + @media (width >= 48rem) { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + } .lg\:flex { @media (width >= 64rem) { display: flex;