mirror of
https://github.com/modrinth/code.git
synced 2026-08-25 00:55:25 +00:00
* Backend routes for choosing username in OAuth flow * fix up oauth flow routes * improve URL-related OAuth code * Use user-provided callback addr instead of SELF_ADDR * Revert "Use user-provided callback addr instead of SELF_ADDR" This reverts commit7ea0635d86. * fix flow * fix: backend response for create oauth account * feat: new auth flow (#5840) * update auth with new designs * refactor: auth.js to auth.ts * refactor: componentize auth pages * fix: auth pages height * feat: initial implementation of new sign-in oauth * fix create account flow * fix checkbox * remove hard coded username * implement create user validation endpoint and add more specific error responses * feat: implement under 13 DOB guard and email/password validation route * fix: TOCTOU issue * refactor: pnpm prepr * fix: make sure staging uses staging * fix: hcaptcha styles * fix: copy * remove: auth/welcome page as its no longer used * refactor: bring root page card styles into individual components and use tailwind * fix: account settings modals to use new modal and fix lots of bad styles * refactor: pnpm prepr * feat: implement last signed in indicator * fix: append number when generated name from email is taken * refactor: pnpm prepr * fix: last sign in badge color * fix: qa issues * refactor: pnpm prepr * fix: hover effect on native date picker * chore: temp staging undo * Revert "chore: temp staging undo" This reverts commitcad6bd4f92. * feat: handle app create account * fix: last signed in style * fix: add initOnMounted for SSR race * refactor: use typescript * refactor: pnpm prepr * refactor: use typescript for reset-password * refactor: convert verify-email to use typescript * refactor: convert authorize.vue to use typescript * fix: authorize.vue error states * feat: small style updates * feat: implement date picker component * feat: improve UX and styles for range select * refactor: pnpm prepr * fix: range select border styles * feat: implement date picker component in create account * feat: implement preserve date for date picker * update rust toolchain * increase recursion limit * fix: date picker can be null * fix: calculate age based on user's timezone * fix: number input icons color * fix: date picker icons * feat: improve styles * fix: add width on date * fix: hover color bad on number input * fix lints * feat: add default date open view * fmt * fix: account.vue * fix: remove default date to open 13 years ago * fix: edit copy on info banner * fix: cannot hover over project card tooltip items (#6071) fix: cannot hover over project cards * feat: improve add dependency flow (#6075) * fix: shadow on nav * feat: improve add dependency flow * feat: update suggested dependency style * feat: update dependency rows to use version number and update styles * feat: implement combobox select searched text on focus * feat: add Tabs.vue * feat: update nav tabs to use tabs * feat: improve project search dropdown * fix: dependency search not clearing inbound query * fix: combobox no options open state bug * feat: improve dependency project and version search * fix: open modrinth project links in the app (#6072) * pin tanstack versions + set pnpm min age to 7 days * squash commits * fix: 2 factor auth enter code screen styles * update copy * update copy * improve reset password * feat: update sign in screen * fix: unused import * Merge branch 'main' into boris/dev-908-backend-changes * Revert "Merge branch 'main' into boris/dev-908-backend-changes" This reverts commitb9b03796e3. * fix: add stroke * feat: add passkey support (#6375) * feat: add passkey backend * feat: passkey frontend * invalidate sessions on compromised passkey * chore: run sqlx prepare * fix: make passkey button use both collumns to prevent empty space * fix: correctly verify max passkeys in finish route * fix: use structs for response * fix: add rp name default * style: use web::Json * fmt * feat: improve manage passkeys UI * fix copy * pnpm prepr --------- Co-authored-by: tdgao <mr.trumgao@gmail.com> Co-authored-by: Truman Gao <106889354+tdgao@users.noreply.github.com> Co-authored-by: Michael H. <michael@iptables.sh> Co-authored-by: Calum H. (IMB11) <contact@cal.engineer> Co-authored-by: Calum H. <calum@modrinth.com> Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com> Co-authored-by: DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com>
106 lines
2.4 KiB
Vue
106 lines
2.4 KiB
Vue
<template>
|
|
<div
|
|
:class="[
|
|
'banner-grid relative border-b-2 border-solid border-0 z-10',
|
|
containerClasses[variant],
|
|
{ 'no-actions': !$slots.actions, slim: slim },
|
|
]"
|
|
>
|
|
<div
|
|
:class="[
|
|
'grid-area-[title] flex items-center gap-2 font-bold text-[var(--font-size-md)]',
|
|
iconClasses[variant],
|
|
]"
|
|
>
|
|
<component :is="getSeverityIcon(variant)" aria-hidden="true" class="w-6 h-6 flex-shrink-0" />
|
|
<slot name="title" />
|
|
</div>
|
|
|
|
<div class="grid-area-[description] flex flex-col gap-3">
|
|
<slot name="description" />
|
|
</div>
|
|
|
|
<div v-if="$slots.actions" class="grid-area-[actions] flex items-center gap-2">
|
|
<slot name="actions" />
|
|
</div>
|
|
|
|
<div
|
|
v-if="$slots.actions_right || $slots.actions_top_right"
|
|
class="grid-area-[actions_right] flex flex-col gap-2 items-end"
|
|
>
|
|
<div v-if="$slots.actions_top_right" class="flex items-center gap-2 justify-end">
|
|
<slot name="actions_top_right" />
|
|
</div>
|
|
<div v-if="$slots.actions_right" class="flex items-center gap-2 justify-end my-auto">
|
|
<slot name="actions_right" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { getSeverityIcon } from '../../utils'
|
|
|
|
withDefaults(
|
|
defineProps<{
|
|
variant: 'error' | 'warning' | 'info'
|
|
slim?: boolean
|
|
}>(),
|
|
{
|
|
slim: false,
|
|
},
|
|
)
|
|
|
|
const containerClasses = {
|
|
error: 'bg-banners-error-bg text-banners-error-text border-banners-error-border',
|
|
warning: 'bg-banners-warning-bg text-banners-warning-text border-banners-warning-border',
|
|
info: 'bg-banners-info-bg text-banners-info-text border-banners-info-border',
|
|
}
|
|
|
|
const iconClasses = {
|
|
error: 'text-brand-red',
|
|
warning: 'text-brand-orange',
|
|
info: 'text-brand-blue',
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.banner-grid {
|
|
display: grid;
|
|
gap: 0.5rem;
|
|
grid-template-areas:
|
|
'title actions_right'
|
|
'description actions_right'
|
|
'actions actions_right';
|
|
padding-block: var(--gap-xl);
|
|
padding-inline: max(calc((100% - 80rem) / 2 + var(--gap-md)), var(--gap-xl));
|
|
}
|
|
|
|
.banner-grid.no-actions {
|
|
grid-template-areas:
|
|
'title actions_right'
|
|
'description actions_right';
|
|
}
|
|
|
|
.banner-grid.slim {
|
|
@apply flex py-4 gap-2 items-center;
|
|
}
|
|
|
|
.grid-area-\[title\] {
|
|
grid-area: title;
|
|
}
|
|
.grid-area-\[description\] {
|
|
grid-area: description;
|
|
}
|
|
.grid-area-\[actions\] {
|
|
grid-area: actions;
|
|
}
|
|
.grid-area-\[actions_right\] {
|
|
grid-area: actions_right;
|
|
}
|
|
|
|
.banner-grid a {
|
|
@apply underline text-current;
|
|
}
|
|
</style>
|